async function ensureEntitiesAndTemplates()

in experimental/generation/generator/packages/library/src/dialogGenerator.ts [752:793]


async function ensureEntitiesAndTemplates(
    schema: s.Schema,
    templateDirs: string[],
    scope: any,
    feedback: Feedback)
    : Promise<void> {
    for (const property of schema.schemaProperties()) {
        if (!property.schema.$entities || !property.schema.$templates) {
            const template = property.schema.$template
            if (!template) {
                feedback(FeedbackType.error, `${property.path} has no $template`)
            } else {
                try {
                    scope.property = property.path
                    scope.propertySchema = property.schema
                    const rootTemplate = await findTemplate(template, templateDirs)
                    const lgTemplate: lg.Templates | undefined = rootTemplate instanceof lg.Templates ? rootTemplate as lg.Templates : undefined
                    if (!lgTemplate) {
                        feedback(FeedbackType.error, `Cannot find ${rootTemplate} for ${property.path}`)
                    } else {
                        if (!property.schema.$entities) {
                            feedback(FeedbackType.debug, `Expanding template ${lgTemplate.id} for ${property.path} $entities`)
                            property.schema.$entities = lgTemplate.evaluate('entities', scope) as string[]
                            if (!property.schema.$entities) {
                                feedback(FeedbackType.error, `${property.path} has no $entities`)
                            }
                        }
                        if (!property.schema.$templates) {
                            feedback(FeedbackType.debug, `Expanding template ${lgTemplate.id} for ${property.path} $templates`)
                            property.schema.$templates = lgTemplate.evaluate('generators', scope) as string[]
                            if (!property.schema.$templates) {
                                feedback(FeedbackType.error, `${property.path} has no $templates`)
                            }
                        }
                    }
                } catch (e) {
                    feedback(FeedbackType.error, (e as Error).message)
                }
            }
        }
    }
}