import * as StackbitTypes from '@stackbit/types'; const getModelsFromFields = (fields: StackbitTypes.DocumentField[], foundModels: Set) => { fields.forEach((field) => { if (field.type === 'model') { if (field.localized) { for (const localeObject of Object.values(field.locales)) { foundModels.add(localeObject.modelName); getModelsFromFields(Object.values(localeObject.fields), foundModels); } } else { foundModels.add(field.modelName); getModelsFromFields(Object.values(field.fields), foundModels); } } else if (field.type === 'object') { if (field.localized) { for (const localeObject of Object.values(field.locales)) { getModelsFromFields(Object.values(localeObject.fields), foundModels); } } else { getModelsFromFields(Object.values(field.fields), foundModels); } } else if (field.type === 'list') { if (field.localized) { for (const localeObject of Object.values(field.locales)) { getModelsFromFields(localeObject.items, foundModels); } } else { getModelsFromFields(field.items, foundModels); } } }); }; export function getAllModelsFromCSIDocument({ document }: { document: StackbitTypes.Document }): string[] { const models = new Set([document.modelName]); getModelsFromFields(Object.values(document.fields), models); return Array.from(models); }