static void Entities()

in packages/LUISGen/src/Typescript.cs [103:183]


        static void Entities(dynamic app, Writer w)
        {
            // Composite instance and data
            if (app.composites != null)
            {
                foreach (var composite in app.composites)
                {
                    var name = Utils.NormalizeName(composite.name);
                    w.WriteLine();
                    w.IndentLine($"export interface _Instance{name} {{");
                    w.Indent();
                    foreach (var child in composite.children)
                    {
                        w.IndentLine($"{PropertyName(child, app)}?: InstanceData[];");
                    }
                    w.Outdent();
                    w.IndentLine("}");
                    w.IndentLine($"export interface {name} {{");
                    w.Indent();
                    foreach (var child in composite.children)
                    {
                        WriteEntity(Utils.Entity(child), Utils.IsList(child, app) ? "list" : child, app, w);
                    }
                    w.IndentLine($"$instance?: _Instance{name};");
                    w.Outdent();
                    w.IndentLine("}");
                }
            }
            w.WriteLine();

            // Entity instance
            w.IndentLine("export interface _Instance {");
            w.Indent();
            Utils.WriteInstances((JObject)app, (name) =>
            {
                w.IndentLine($"{PropertyName(name, app)}?: InstanceData[];");
            });
            w.Outdent();
            w.IndentLine("}");

            // Entities
            w.WriteLine();
            w.IndentLine("export interface _Entities {");
            w.Indent();
            if (app.entities != null && app.entities.Count > 0)
            {
                w.IndentLine("// Simple entities");
                foreach (var entity in app.entities)
                {
                    WriteEntity(entity, entity.name, app, w);
                    if (entity?.children != null)
                    {
                        // Hierarchical
                        foreach (var child in entity.children)
                        {
                            WriteEntity(Utils.Entity(child), child, app, w);
                        }
                    }
                }
            }
            WriteEntities(app.prebuiltEntities, app, "Built-in entities", w);
            WriteEntities(app.closedLists, app, "Lists", w);
            WriteEntities(app.regex_entities, app, "Regex entities", w);
            WriteEntities(app.patternAnyEntities, app, "Pattern.any", w);

            // Composites
            if (app.composites != null && app.composites.Count > 0)
            {
                w.WriteLine();
                w.IndentLine("// Composites");
                foreach (var composite in app.composites)
                {
                    var name = PropertyName(composite.name, app);
                    w.IndentLine($"{name}?: {name}[];");
                }
            }

            w.IndentLine($"$instance : _Instance;");
            w.Outdent();
            w.IndentLine("}");
        }