@zenstackhq/language 3.3.2 → 3.4.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/factory.cjs +2087 -0
- package/dist/factory.cjs.map +1 -0
- package/dist/factory.d.cts +284 -0
- package/dist/factory.d.ts +284 -0
- package/dist/factory.js +2020 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.cjs +47 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +22 -18
- package/dist/index.d.ts +22 -18
- package/dist/index.js +47 -14
- package/dist/index.js.map +1 -1
- package/package.json +15 -5
- package/res/stdlib.zmodel +24 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/factory/index.ts","../src/factory/ast-factory.ts","../src/generated/ast.ts","../src/factory/primitives.ts","../src/factory/expression.ts","../src/factory/attribute.ts","../src/factory/declaration.ts"],"sourcesContent":["export * from './ast-factory';\nexport * from './primitives';\nexport * from './expression';\nexport * from './declaration';\nexport * from './attribute';\n","import { type AstNode } from '../ast';\n\nexport type ContainerProps<T extends AstNode | undefined> = {\n $container: T;\n $containerProperty?: string;\n $containerIndex?: number;\n};\n\ntype NodeFactoriesFor<N> = {\n [K in keyof N as {} extends Pick<N, K> ? never : K]: N[K] extends (infer U)[]\n ? (AstFactory<U extends AstNode ? U : AstNode> | U)[]\n : AstFactory<N[K] extends AstNode ? N[K] : AstNode> | N[K];\n} & {\n [K in keyof N as {} extends Pick<N, K> ? K : never]?: N[K] extends (infer U)[]\n ? (AstFactory<U extends AstNode ? U : AstNode> | U)[]\n : AstFactory<N[K] extends AstNode ? N[K] : AstNode> | N[K];\n};\n\nexport abstract class AstFactory<T extends AstNode = AstNode> {\n node = {} as T;\n constructor({ type, node }: { type: T['$type']; node?: Partial<T> }) {\n (this.node as any).$type = type;\n if (node) {\n this.update(node);\n }\n }\n setContainer(container: T['$container']) {\n (this.node as any).$container = container;\n return this;\n }\n\n get(params?: ContainerProps<T['$container']>): T {\n if (params) this.update(params as any);\n return this.node;\n }\n update(nodeArg: Partial<T | NodeFactoriesFor<T>>): T {\n const keys = Object.keys(nodeArg as object);\n keys.forEach((key) => {\n const child = (nodeArg as any)[key];\n if (child instanceof AstFactory) {\n (this.node as any)[key] = child.get({ $container: this.node as any });\n } else if (Array.isArray(child)) {\n (this.node as any)[key] = child.map((item: any) =>\n item instanceof AstFactory ? item.get({ $container: this.node as any }) : item,\n );\n } else {\n (this.node as any)[key] = child;\n }\n });\n return this.node;\n }\n}\n","/******************************************************************************\n * This file was generated by langium-cli 3.5.0.\n * DO NOT EDIT MANUALLY!\n ******************************************************************************/\n\n/* eslint-disable */\nimport * as langium from 'langium';\n\nexport const ZModelTerminals = {\n WS: /\\s+/,\n INTERNAL_ATTRIBUTE_NAME: /@@@([_a-zA-Z][\\w_]*\\.)*[_a-zA-Z][\\w_]*/,\n MODEL_ATTRIBUTE_NAME: /@@([_a-zA-Z][\\w_]*\\.)*[_a-zA-Z][\\w_]*/,\n FIELD_ATTRIBUTE_NAME: /@([_a-zA-Z][\\w_]*\\.)*[_a-zA-Z][\\w_]*/,\n ID: /[_a-zA-Z][\\w_]*/,\n STRING: /\"(\\\\.|[^\"\\\\])*\"|'(\\\\.|[^'\\\\])*'/,\n NUMBER: /[+-]?[0-9]+(\\.[0-9]+)?/,\n TRIPLE_SLASH_COMMENT: /\\/\\/\\/[^\\n\\r]*/,\n ML_COMMENT: /\\/\\*[\\s\\S]*?\\*\\//,\n SL_COMMENT: /\\/\\/[^\\n\\r]*/,\n};\n\nexport type ZModelTerminalNames = keyof typeof ZModelTerminals;\n\nexport type ZModelKeywordNames =\n | \"!\"\n | \"!=\"\n | \"&&\"\n | \"(\"\n | \")\"\n | \",\"\n | \".\"\n | \":\"\n | \";\"\n | \"<\"\n | \"<=\"\n | \"=\"\n | \"==\"\n | \">\"\n | \">=\"\n | \"?\"\n | \"Any\"\n | \"BigInt\"\n | \"Boolean\"\n | \"Bytes\"\n | \"ContextType\"\n | \"DateTime\"\n | \"Decimal\"\n | \"FieldReference\"\n | \"Float\"\n | \"Int\"\n | \"Json\"\n | \"Null\"\n | \"Object\"\n | \"String\"\n | \"TransitiveFieldReference\"\n | \"Undefined\"\n | \"Unsupported\"\n | \"Void\"\n | \"[\"\n | \"]\"\n | \"^\"\n | \"_\"\n | \"abstract\"\n | \"attribute\"\n | \"datasource\"\n | \"enum\"\n | \"extends\"\n | \"false\"\n | \"function\"\n | \"generator\"\n | \"import\"\n | \"in\"\n | \"model\"\n | \"mutation\"\n | \"null\"\n | \"plugin\"\n | \"procedure\"\n | \"this\"\n | \"true\"\n | \"type\"\n | \"view\"\n | \"with\"\n | \"{\"\n | \"||\"\n | \"}\";\n\nexport type ZModelTokenNames = ZModelTerminalNames | ZModelKeywordNames;\n\nexport type AbstractDeclaration = Attribute | DataModel | DataSource | Enum | FunctionDecl | GeneratorDecl | Plugin | Procedure | TypeDef;\n\nexport const AbstractDeclaration = 'AbstractDeclaration';\n\nexport function isAbstractDeclaration(item: unknown): item is AbstractDeclaration {\n return reflection.isInstance(item, AbstractDeclaration);\n}\n\nexport type Boolean = boolean;\n\nexport function isBoolean(item: unknown): item is Boolean {\n return typeof item === 'boolean';\n}\n\nexport type BuiltinType = 'BigInt' | 'Boolean' | 'Bytes' | 'DateTime' | 'Decimal' | 'Float' | 'Int' | 'Json' | 'String';\n\nexport function isBuiltinType(item: unknown): item is BuiltinType {\n return item === 'String' || item === 'Boolean' || item === 'Int' || item === 'BigInt' || item === 'Float' || item === 'Decimal' || item === 'DateTime' || item === 'Json' || item === 'Bytes';\n}\n\nexport type ConfigExpr = ConfigArrayExpr | InvocationExpr | LiteralExpr;\n\nexport const ConfigExpr = 'ConfigExpr';\n\nexport function isConfigExpr(item: unknown): item is ConfigExpr {\n return reflection.isInstance(item, ConfigExpr);\n}\n\nexport type Expression = ArrayExpr | BinaryExpr | InvocationExpr | LiteralExpr | MemberAccessExpr | NullExpr | ObjectExpr | ReferenceExpr | ThisExpr | UnaryExpr;\n\nexport const Expression = 'Expression';\n\nexport function isExpression(item: unknown): item is Expression {\n return reflection.isInstance(item, Expression);\n}\n\nexport type ExpressionType = 'Any' | 'BigInt' | 'Boolean' | 'Bytes' | 'DateTime' | 'Decimal' | 'Float' | 'Int' | 'Json' | 'Null' | 'Object' | 'String' | 'Undefined' | 'Unsupported' | 'Void';\n\nexport function isExpressionType(item: unknown): item is ExpressionType {\n return item === 'String' || item === 'Int' || item === 'Float' || item === 'Boolean' || item === 'BigInt' || item === 'Decimal' || item === 'DateTime' || item === 'Json' || item === 'Bytes' || item === 'Null' || item === 'Object' || item === 'Any' || item === 'Void' || item === 'Undefined' || item === 'Unsupported';\n}\n\nexport type LiteralExpr = BooleanLiteral | NumberLiteral | StringLiteral;\n\nexport const LiteralExpr = 'LiteralExpr';\n\nexport function isLiteralExpr(item: unknown): item is LiteralExpr {\n return reflection.isInstance(item, LiteralExpr);\n}\n\nexport type MemberAccessTarget = DataField;\n\nexport const MemberAccessTarget = 'MemberAccessTarget';\n\nexport function isMemberAccessTarget(item: unknown): item is MemberAccessTarget {\n return reflection.isInstance(item, MemberAccessTarget);\n}\n\nexport type ReferenceTarget = CollectionPredicateBinding | DataField | EnumField | FunctionParam;\n\nexport const ReferenceTarget = 'ReferenceTarget';\n\nexport function isReferenceTarget(item: unknown): item is ReferenceTarget {\n return reflection.isInstance(item, ReferenceTarget);\n}\n\nexport type RegularID = 'abstract' | 'attribute' | 'datasource' | 'enum' | 'import' | 'in' | 'model' | 'plugin' | 'type' | 'view' | string;\n\nexport function isRegularID(item: unknown): item is RegularID {\n return item === 'model' || item === 'enum' || item === 'attribute' || item === 'datasource' || item === 'plugin' || item === 'abstract' || item === 'in' || item === 'view' || item === 'import' || item === 'type' || (typeof item === 'string' && (/[_a-zA-Z][\\w_]*/.test(item)));\n}\n\nexport type RegularIDWithTypeNames = 'Any' | 'BigInt' | 'Boolean' | 'Bytes' | 'DateTime' | 'Decimal' | 'Float' | 'Int' | 'Json' | 'Null' | 'Object' | 'String' | 'Unsupported' | 'Void' | RegularID;\n\nexport function isRegularIDWithTypeNames(item: unknown): item is RegularIDWithTypeNames {\n return isRegularID(item) || item === 'String' || item === 'Boolean' || item === 'Int' || item === 'BigInt' || item === 'Float' || item === 'Decimal' || item === 'DateTime' || item === 'Json' || item === 'Bytes' || item === 'Null' || item === 'Object' || item === 'Any' || item === 'Void' || item === 'Unsupported';\n}\n\nexport type TypeDeclaration = DataModel | Enum | TypeDef;\n\nexport const TypeDeclaration = 'TypeDeclaration';\n\nexport function isTypeDeclaration(item: unknown): item is TypeDeclaration {\n return reflection.isInstance(item, TypeDeclaration);\n}\n\nexport interface Argument extends langium.AstNode {\n readonly $container: InvocationExpr;\n readonly $type: 'Argument';\n value: Expression;\n}\n\nexport const Argument = 'Argument';\n\nexport function isArgument(item: unknown): item is Argument {\n return reflection.isInstance(item, Argument);\n}\n\nexport interface ArrayExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | PluginField | ReferenceArg | UnaryExpr;\n readonly $type: 'ArrayExpr';\n items: Array<Expression>;\n}\n\nexport const ArrayExpr = 'ArrayExpr';\n\nexport function isArrayExpr(item: unknown): item is ArrayExpr {\n return reflection.isInstance(item, ArrayExpr);\n}\n\nexport interface Attribute extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'Attribute';\n attributes: Array<InternalAttribute>;\n comments: Array<string>;\n name: string;\n params: Array<AttributeParam>;\n}\n\nexport const Attribute = 'Attribute';\n\nexport function isAttribute(item: unknown): item is Attribute {\n return reflection.isInstance(item, Attribute);\n}\n\nexport interface AttributeArg extends langium.AstNode {\n readonly $container: DataFieldAttribute | DataModelAttribute | InternalAttribute;\n readonly $type: 'AttributeArg';\n name?: RegularID;\n value: Expression;\n}\n\nexport const AttributeArg = 'AttributeArg';\n\nexport function isAttributeArg(item: unknown): item is AttributeArg {\n return reflection.isInstance(item, AttributeArg);\n}\n\nexport interface AttributeParam extends langium.AstNode {\n readonly $container: Attribute;\n readonly $type: 'AttributeParam';\n attributes: Array<InternalAttribute>;\n comments: Array<string>;\n default: boolean;\n name: RegularID;\n type: AttributeParamType;\n}\n\nexport const AttributeParam = 'AttributeParam';\n\nexport function isAttributeParam(item: unknown): item is AttributeParam {\n return reflection.isInstance(item, AttributeParam);\n}\n\nexport interface AttributeParamType extends langium.AstNode {\n readonly $container: AttributeParam;\n readonly $type: 'AttributeParamType';\n array: boolean;\n optional: boolean;\n reference?: langium.Reference<TypeDeclaration>;\n type?: 'ContextType' | 'FieldReference' | 'TransitiveFieldReference' | ExpressionType;\n}\n\nexport const AttributeParamType = 'AttributeParamType';\n\nexport function isAttributeParamType(item: unknown): item is AttributeParamType {\n return reflection.isInstance(item, AttributeParamType);\n}\n\nexport interface BinaryExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'BinaryExpr';\n binding?: CollectionPredicateBinding;\n left: Expression;\n operator: '!' | '!=' | '&&' | '<' | '<=' | '==' | '>' | '>=' | '?' | '^' | 'in' | '||';\n right: Expression;\n}\n\nexport const BinaryExpr = 'BinaryExpr';\n\nexport function isBinaryExpr(item: unknown): item is BinaryExpr {\n return reflection.isInstance(item, BinaryExpr);\n}\n\nexport interface BooleanLiteral extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | ConfigArrayExpr | ConfigField | ConfigInvocationArg | FieldInitializer | FunctionDecl | MemberAccessExpr | PluginField | ReferenceArg | UnaryExpr | UnsupportedFieldType;\n readonly $type: 'BooleanLiteral';\n value: Boolean;\n}\n\nexport const BooleanLiteral = 'BooleanLiteral';\n\nexport function isBooleanLiteral(item: unknown): item is BooleanLiteral {\n return reflection.isInstance(item, BooleanLiteral);\n}\n\nexport interface CollectionPredicateBinding extends langium.AstNode {\n readonly $container: BinaryExpr;\n readonly $type: 'CollectionPredicateBinding';\n name: RegularID;\n}\n\nexport const CollectionPredicateBinding = 'CollectionPredicateBinding';\n\nexport function isCollectionPredicateBinding(item: unknown): item is CollectionPredicateBinding {\n return reflection.isInstance(item, CollectionPredicateBinding);\n}\n\nexport interface ConfigArrayExpr extends langium.AstNode {\n readonly $container: ConfigField;\n readonly $type: 'ConfigArrayExpr';\n items: Array<ConfigInvocationExpr | LiteralExpr>;\n}\n\nexport const ConfigArrayExpr = 'ConfigArrayExpr';\n\nexport function isConfigArrayExpr(item: unknown): item is ConfigArrayExpr {\n return reflection.isInstance(item, ConfigArrayExpr);\n}\n\nexport interface ConfigField extends langium.AstNode {\n readonly $container: DataSource | GeneratorDecl;\n readonly $type: 'ConfigField';\n name: RegularID;\n value: ConfigExpr;\n}\n\nexport const ConfigField = 'ConfigField';\n\nexport function isConfigField(item: unknown): item is ConfigField {\n return reflection.isInstance(item, ConfigField);\n}\n\nexport interface ConfigInvocationArg extends langium.AstNode {\n readonly $container: ConfigInvocationExpr;\n readonly $type: 'ConfigInvocationArg';\n name: string;\n value: LiteralExpr;\n}\n\nexport const ConfigInvocationArg = 'ConfigInvocationArg';\n\nexport function isConfigInvocationArg(item: unknown): item is ConfigInvocationArg {\n return reflection.isInstance(item, ConfigInvocationArg);\n}\n\nexport interface ConfigInvocationExpr extends langium.AstNode {\n readonly $container: ConfigArrayExpr;\n readonly $type: 'ConfigInvocationExpr';\n args: Array<ConfigInvocationArg>;\n name: string;\n}\n\nexport const ConfigInvocationExpr = 'ConfigInvocationExpr';\n\nexport function isConfigInvocationExpr(item: unknown): item is ConfigInvocationExpr {\n return reflection.isInstance(item, ConfigInvocationExpr);\n}\n\nexport interface DataField extends langium.AstNode {\n readonly $container: DataModel | TypeDef;\n readonly $type: 'DataField';\n attributes: Array<DataFieldAttribute>;\n comments: Array<string>;\n name: RegularIDWithTypeNames;\n type: DataFieldType;\n}\n\nexport const DataField = 'DataField';\n\nexport function isDataField(item: unknown): item is DataField {\n return reflection.isInstance(item, DataField);\n}\n\nexport interface DataFieldAttribute extends langium.AstNode {\n readonly $container: DataField | EnumField;\n readonly $type: 'DataFieldAttribute';\n args: Array<AttributeArg>;\n decl: langium.Reference<Attribute>;\n}\n\nexport const DataFieldAttribute = 'DataFieldAttribute';\n\nexport function isDataFieldAttribute(item: unknown): item is DataFieldAttribute {\n return reflection.isInstance(item, DataFieldAttribute);\n}\n\nexport interface DataFieldType extends langium.AstNode {\n readonly $container: DataField;\n readonly $type: 'DataFieldType';\n array: boolean;\n optional: boolean;\n reference?: langium.Reference<TypeDeclaration>;\n type?: BuiltinType;\n unsupported?: UnsupportedFieldType;\n}\n\nexport const DataFieldType = 'DataFieldType';\n\nexport function isDataFieldType(item: unknown): item is DataFieldType {\n return reflection.isInstance(item, DataFieldType);\n}\n\nexport interface DataModel extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'DataModel';\n attributes: Array<DataModelAttribute>;\n baseModel?: langium.Reference<DataModel>;\n comments: Array<string>;\n fields: Array<DataField>;\n isView: boolean;\n mixins: Array<langium.Reference<TypeDef>>;\n name: RegularID;\n}\n\nexport const DataModel = 'DataModel';\n\nexport function isDataModel(item: unknown): item is DataModel {\n return reflection.isInstance(item, DataModel);\n}\n\nexport interface DataModelAttribute extends langium.AstNode {\n readonly $container: DataModel | Enum | TypeDef;\n readonly $type: 'DataModelAttribute';\n args: Array<AttributeArg>;\n decl: langium.Reference<Attribute>;\n}\n\nexport const DataModelAttribute = 'DataModelAttribute';\n\nexport function isDataModelAttribute(item: unknown): item is DataModelAttribute {\n return reflection.isInstance(item, DataModelAttribute);\n}\n\nexport interface DataSource extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'DataSource';\n fields: Array<ConfigField>;\n name: RegularID;\n}\n\nexport const DataSource = 'DataSource';\n\nexport function isDataSource(item: unknown): item is DataSource {\n return reflection.isInstance(item, DataSource);\n}\n\nexport interface Enum extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'Enum';\n attributes: Array<DataModelAttribute>;\n comments: Array<string>;\n fields: Array<EnumField>;\n name: RegularID;\n}\n\nexport const Enum = 'Enum';\n\nexport function isEnum(item: unknown): item is Enum {\n return reflection.isInstance(item, Enum);\n}\n\nexport interface EnumField extends langium.AstNode {\n readonly $container: Enum;\n readonly $type: 'EnumField';\n attributes: Array<DataFieldAttribute>;\n comments: Array<string>;\n name: RegularIDWithTypeNames;\n}\n\nexport const EnumField = 'EnumField';\n\nexport function isEnumField(item: unknown): item is EnumField {\n return reflection.isInstance(item, EnumField);\n}\n\nexport interface FieldInitializer extends langium.AstNode {\n readonly $container: ObjectExpr;\n readonly $type: 'FieldInitializer';\n name: RegularID | string;\n value: Expression;\n}\n\nexport const FieldInitializer = 'FieldInitializer';\n\nexport function isFieldInitializer(item: unknown): item is FieldInitializer {\n return reflection.isInstance(item, FieldInitializer);\n}\n\nexport interface FunctionDecl extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'FunctionDecl';\n attributes: Array<InternalAttribute>;\n expression?: Expression;\n name: RegularID;\n params: Array<FunctionParam>;\n returnType: FunctionParamType;\n}\n\nexport const FunctionDecl = 'FunctionDecl';\n\nexport function isFunctionDecl(item: unknown): item is FunctionDecl {\n return reflection.isInstance(item, FunctionDecl);\n}\n\nexport interface FunctionParam extends langium.AstNode {\n readonly $container: FunctionDecl;\n readonly $type: 'FunctionParam';\n name: RegularID;\n optional: boolean;\n type: FunctionParamType;\n}\n\nexport const FunctionParam = 'FunctionParam';\n\nexport function isFunctionParam(item: unknown): item is FunctionParam {\n return reflection.isInstance(item, FunctionParam);\n}\n\nexport interface FunctionParamType extends langium.AstNode {\n readonly $container: FunctionDecl | FunctionParam | Procedure | ProcedureParam;\n readonly $type: 'FunctionParamType';\n array: boolean;\n reference?: langium.Reference<TypeDeclaration>;\n type?: ExpressionType;\n}\n\nexport const FunctionParamType = 'FunctionParamType';\n\nexport function isFunctionParamType(item: unknown): item is FunctionParamType {\n return reflection.isInstance(item, FunctionParamType);\n}\n\nexport interface GeneratorDecl extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'GeneratorDecl';\n fields: Array<ConfigField>;\n name: RegularID;\n}\n\nexport const GeneratorDecl = 'GeneratorDecl';\n\nexport function isGeneratorDecl(item: unknown): item is GeneratorDecl {\n return reflection.isInstance(item, GeneratorDecl);\n}\n\nexport interface InternalAttribute extends langium.AstNode {\n readonly $container: Attribute | AttributeParam | FunctionDecl | Procedure;\n readonly $type: 'InternalAttribute';\n args: Array<AttributeArg>;\n decl: langium.Reference<Attribute>;\n}\n\nexport const InternalAttribute = 'InternalAttribute';\n\nexport function isInternalAttribute(item: unknown): item is InternalAttribute {\n return reflection.isInstance(item, InternalAttribute);\n}\n\nexport interface InvocationExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | ConfigField | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'InvocationExpr';\n args: Array<Argument>;\n function: langium.Reference<FunctionDecl>;\n}\n\nexport const InvocationExpr = 'InvocationExpr';\n\nexport function isInvocationExpr(item: unknown): item is InvocationExpr {\n return reflection.isInstance(item, InvocationExpr);\n}\n\nexport interface MemberAccessExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'MemberAccessExpr';\n member: langium.Reference<MemberAccessTarget>;\n operand: Expression;\n}\n\nexport const MemberAccessExpr = 'MemberAccessExpr';\n\nexport function isMemberAccessExpr(item: unknown): item is MemberAccessExpr {\n return reflection.isInstance(item, MemberAccessExpr);\n}\n\nexport interface Model extends langium.AstNode {\n readonly $type: 'Model';\n declarations: Array<AbstractDeclaration>;\n imports: Array<ModelImport>;\n}\n\nexport const Model = 'Model';\n\nexport function isModel(item: unknown): item is Model {\n return reflection.isInstance(item, Model);\n}\n\nexport interface ModelImport extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'ModelImport';\n path: string;\n}\n\nexport const ModelImport = 'ModelImport';\n\nexport function isModelImport(item: unknown): item is ModelImport {\n return reflection.isInstance(item, ModelImport);\n}\n\nexport interface NullExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'NullExpr';\n value: 'null';\n}\n\nexport const NullExpr = 'NullExpr';\n\nexport function isNullExpr(item: unknown): item is NullExpr {\n return reflection.isInstance(item, NullExpr);\n}\n\nexport interface NumberLiteral extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | ConfigArrayExpr | ConfigField | ConfigInvocationArg | FieldInitializer | FunctionDecl | MemberAccessExpr | PluginField | ReferenceArg | UnaryExpr | UnsupportedFieldType;\n readonly $type: 'NumberLiteral';\n value: string;\n}\n\nexport const NumberLiteral = 'NumberLiteral';\n\nexport function isNumberLiteral(item: unknown): item is NumberLiteral {\n return reflection.isInstance(item, NumberLiteral);\n}\n\nexport interface ObjectExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | PluginField | ReferenceArg | UnaryExpr;\n readonly $type: 'ObjectExpr';\n fields: Array<FieldInitializer>;\n}\n\nexport const ObjectExpr = 'ObjectExpr';\n\nexport function isObjectExpr(item: unknown): item is ObjectExpr {\n return reflection.isInstance(item, ObjectExpr);\n}\n\nexport interface Plugin extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'Plugin';\n fields: Array<PluginField>;\n name: RegularID;\n}\n\nexport const Plugin = 'Plugin';\n\nexport function isPlugin(item: unknown): item is Plugin {\n return reflection.isInstance(item, Plugin);\n}\n\nexport interface PluginField extends langium.AstNode {\n readonly $container: Plugin;\n readonly $type: 'PluginField';\n name: RegularID;\n value: ArrayExpr | LiteralExpr | ObjectExpr;\n}\n\nexport const PluginField = 'PluginField';\n\nexport function isPluginField(item: unknown): item is PluginField {\n return reflection.isInstance(item, PluginField);\n}\n\nexport interface Procedure extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'Procedure';\n attributes: Array<InternalAttribute>;\n mutation: boolean;\n name: RegularID;\n params: Array<ProcedureParam>;\n returnType: FunctionParamType;\n}\n\nexport const Procedure = 'Procedure';\n\nexport function isProcedure(item: unknown): item is Procedure {\n return reflection.isInstance(item, Procedure);\n}\n\nexport interface ProcedureParam extends langium.AstNode {\n readonly $container: Procedure;\n readonly $type: 'ProcedureParam';\n name: RegularID;\n optional: boolean;\n type: FunctionParamType;\n}\n\nexport const ProcedureParam = 'ProcedureParam';\n\nexport function isProcedureParam(item: unknown): item is ProcedureParam {\n return reflection.isInstance(item, ProcedureParam);\n}\n\nexport interface ReferenceArg extends langium.AstNode {\n readonly $container: ReferenceExpr;\n readonly $type: 'ReferenceArg';\n name: string;\n value: Expression;\n}\n\nexport const ReferenceArg = 'ReferenceArg';\n\nexport function isReferenceArg(item: unknown): item is ReferenceArg {\n return reflection.isInstance(item, ReferenceArg);\n}\n\nexport interface ReferenceExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'ReferenceExpr';\n args: Array<ReferenceArg>;\n target: langium.Reference<ReferenceTarget>;\n}\n\nexport const ReferenceExpr = 'ReferenceExpr';\n\nexport function isReferenceExpr(item: unknown): item is ReferenceExpr {\n return reflection.isInstance(item, ReferenceExpr);\n}\n\nexport interface StringLiteral extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | ConfigArrayExpr | ConfigField | ConfigInvocationArg | FieldInitializer | FunctionDecl | MemberAccessExpr | PluginField | ReferenceArg | UnaryExpr | UnsupportedFieldType;\n readonly $type: 'StringLiteral';\n value: string;\n}\n\nexport const StringLiteral = 'StringLiteral';\n\nexport function isStringLiteral(item: unknown): item is StringLiteral {\n return reflection.isInstance(item, StringLiteral);\n}\n\nexport interface ThisExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'ThisExpr';\n value: 'this';\n}\n\nexport const ThisExpr = 'ThisExpr';\n\nexport function isThisExpr(item: unknown): item is ThisExpr {\n return reflection.isInstance(item, ThisExpr);\n}\n\nexport interface TypeDef extends langium.AstNode {\n readonly $container: Model;\n readonly $type: 'TypeDef';\n attributes: Array<DataModelAttribute>;\n comments: Array<string>;\n fields: Array<DataField>;\n mixins: Array<langium.Reference<TypeDef>>;\n name: RegularID;\n}\n\nexport const TypeDef = 'TypeDef';\n\nexport function isTypeDef(item: unknown): item is TypeDef {\n return reflection.isInstance(item, TypeDef);\n}\n\nexport interface UnaryExpr extends langium.AstNode {\n readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | FieldInitializer | FunctionDecl | MemberAccessExpr | ReferenceArg | UnaryExpr;\n readonly $type: 'UnaryExpr';\n operand: Expression;\n operator: '!';\n}\n\nexport const UnaryExpr = 'UnaryExpr';\n\nexport function isUnaryExpr(item: unknown): item is UnaryExpr {\n return reflection.isInstance(item, UnaryExpr);\n}\n\nexport interface UnsupportedFieldType extends langium.AstNode {\n readonly $container: DataFieldType;\n readonly $type: 'UnsupportedFieldType';\n value: LiteralExpr;\n}\n\nexport const UnsupportedFieldType = 'UnsupportedFieldType';\n\nexport function isUnsupportedFieldType(item: unknown): item is UnsupportedFieldType {\n return reflection.isInstance(item, UnsupportedFieldType);\n}\n\nexport type ZModelAstType = {\n AbstractDeclaration: AbstractDeclaration\n Argument: Argument\n ArrayExpr: ArrayExpr\n Attribute: Attribute\n AttributeArg: AttributeArg\n AttributeParam: AttributeParam\n AttributeParamType: AttributeParamType\n BinaryExpr: BinaryExpr\n BooleanLiteral: BooleanLiteral\n CollectionPredicateBinding: CollectionPredicateBinding\n ConfigArrayExpr: ConfigArrayExpr\n ConfigExpr: ConfigExpr\n ConfigField: ConfigField\n ConfigInvocationArg: ConfigInvocationArg\n ConfigInvocationExpr: ConfigInvocationExpr\n DataField: DataField\n DataFieldAttribute: DataFieldAttribute\n DataFieldType: DataFieldType\n DataModel: DataModel\n DataModelAttribute: DataModelAttribute\n DataSource: DataSource\n Enum: Enum\n EnumField: EnumField\n Expression: Expression\n FieldInitializer: FieldInitializer\n FunctionDecl: FunctionDecl\n FunctionParam: FunctionParam\n FunctionParamType: FunctionParamType\n GeneratorDecl: GeneratorDecl\n InternalAttribute: InternalAttribute\n InvocationExpr: InvocationExpr\n LiteralExpr: LiteralExpr\n MemberAccessExpr: MemberAccessExpr\n MemberAccessTarget: MemberAccessTarget\n Model: Model\n ModelImport: ModelImport\n NullExpr: NullExpr\n NumberLiteral: NumberLiteral\n ObjectExpr: ObjectExpr\n Plugin: Plugin\n PluginField: PluginField\n Procedure: Procedure\n ProcedureParam: ProcedureParam\n ReferenceArg: ReferenceArg\n ReferenceExpr: ReferenceExpr\n ReferenceTarget: ReferenceTarget\n StringLiteral: StringLiteral\n ThisExpr: ThisExpr\n TypeDeclaration: TypeDeclaration\n TypeDef: TypeDef\n UnaryExpr: UnaryExpr\n UnsupportedFieldType: UnsupportedFieldType\n}\n\nexport class ZModelAstReflection extends langium.AbstractAstReflection {\n\n getAllTypes(): string[] {\n return [AbstractDeclaration, Argument, ArrayExpr, Attribute, AttributeArg, AttributeParam, AttributeParamType, BinaryExpr, BooleanLiteral, CollectionPredicateBinding, ConfigArrayExpr, ConfigExpr, ConfigField, ConfigInvocationArg, ConfigInvocationExpr, DataField, DataFieldAttribute, DataFieldType, DataModel, DataModelAttribute, DataSource, Enum, EnumField, Expression, FieldInitializer, FunctionDecl, FunctionParam, FunctionParamType, GeneratorDecl, InternalAttribute, InvocationExpr, LiteralExpr, MemberAccessExpr, MemberAccessTarget, Model, ModelImport, NullExpr, NumberLiteral, ObjectExpr, Plugin, PluginField, Procedure, ProcedureParam, ReferenceArg, ReferenceExpr, ReferenceTarget, StringLiteral, ThisExpr, TypeDeclaration, TypeDef, UnaryExpr, UnsupportedFieldType];\n }\n\n protected override computeIsSubtype(subtype: string, supertype: string): boolean {\n switch (subtype) {\n case ArrayExpr:\n case BinaryExpr:\n case MemberAccessExpr:\n case NullExpr:\n case ObjectExpr:\n case ReferenceExpr:\n case ThisExpr:\n case UnaryExpr: {\n return this.isSubtype(Expression, supertype);\n }\n case Attribute:\n case DataSource:\n case FunctionDecl:\n case GeneratorDecl:\n case Plugin:\n case Procedure: {\n return this.isSubtype(AbstractDeclaration, supertype);\n }\n case BooleanLiteral:\n case NumberLiteral:\n case StringLiteral: {\n return this.isSubtype(LiteralExpr, supertype);\n }\n case CollectionPredicateBinding:\n case EnumField:\n case FunctionParam: {\n return this.isSubtype(ReferenceTarget, supertype);\n }\n case ConfigArrayExpr: {\n return this.isSubtype(ConfigExpr, supertype);\n }\n case DataField: {\n return this.isSubtype(MemberAccessTarget, supertype) || this.isSubtype(ReferenceTarget, supertype);\n }\n case DataModel:\n case Enum:\n case TypeDef: {\n return this.isSubtype(AbstractDeclaration, supertype) || this.isSubtype(TypeDeclaration, supertype);\n }\n case InvocationExpr:\n case LiteralExpr: {\n return this.isSubtype(ConfigExpr, supertype) || this.isSubtype(Expression, supertype);\n }\n default: {\n return false;\n }\n }\n }\n\n getReferenceType(refInfo: langium.ReferenceInfo): string {\n const referenceId = `${refInfo.container.$type}:${refInfo.property}`;\n switch (referenceId) {\n case 'AttributeParamType:reference':\n case 'DataFieldType:reference':\n case 'FunctionParamType:reference': {\n return TypeDeclaration;\n }\n case 'DataFieldAttribute:decl':\n case 'DataModelAttribute:decl':\n case 'InternalAttribute:decl': {\n return Attribute;\n }\n case 'DataModel:baseModel': {\n return DataModel;\n }\n case 'DataModel:mixins':\n case 'TypeDef:mixins': {\n return TypeDef;\n }\n case 'InvocationExpr:function': {\n return FunctionDecl;\n }\n case 'MemberAccessExpr:member': {\n return MemberAccessTarget;\n }\n case 'ReferenceExpr:target': {\n return ReferenceTarget;\n }\n default: {\n throw new Error(`${referenceId} is not a valid reference id.`);\n }\n }\n }\n\n getTypeMetaData(type: string): langium.TypeMetaData {\n switch (type) {\n case Argument: {\n return {\n name: Argument,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case ArrayExpr: {\n return {\n name: ArrayExpr,\n properties: [\n { name: 'items', defaultValue: [] }\n ]\n };\n }\n case Attribute: {\n return {\n name: Attribute,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'name' },\n { name: 'params', defaultValue: [] }\n ]\n };\n }\n case AttributeArg: {\n return {\n name: AttributeArg,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case AttributeParam: {\n return {\n name: AttributeParam,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'default', defaultValue: false },\n { name: 'name' },\n { name: 'type' }\n ]\n };\n }\n case AttributeParamType: {\n return {\n name: AttributeParamType,\n properties: [\n { name: 'array', defaultValue: false },\n { name: 'optional', defaultValue: false },\n { name: 'reference' },\n { name: 'type' }\n ]\n };\n }\n case BinaryExpr: {\n return {\n name: BinaryExpr,\n properties: [\n { name: 'binding' },\n { name: 'left' },\n { name: 'operator' },\n { name: 'right' }\n ]\n };\n }\n case BooleanLiteral: {\n return {\n name: BooleanLiteral,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case CollectionPredicateBinding: {\n return {\n name: CollectionPredicateBinding,\n properties: [\n { name: 'name' }\n ]\n };\n }\n case ConfigArrayExpr: {\n return {\n name: ConfigArrayExpr,\n properties: [\n { name: 'items', defaultValue: [] }\n ]\n };\n }\n case ConfigField: {\n return {\n name: ConfigField,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case ConfigInvocationArg: {\n return {\n name: ConfigInvocationArg,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case ConfigInvocationExpr: {\n return {\n name: ConfigInvocationExpr,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case DataField: {\n return {\n name: DataField,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'name' },\n { name: 'type' }\n ]\n };\n }\n case DataFieldAttribute: {\n return {\n name: DataFieldAttribute,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'decl' }\n ]\n };\n }\n case DataFieldType: {\n return {\n name: DataFieldType,\n properties: [\n { name: 'array', defaultValue: false },\n { name: 'optional', defaultValue: false },\n { name: 'reference' },\n { name: 'type' },\n { name: 'unsupported' }\n ]\n };\n }\n case DataModel: {\n return {\n name: DataModel,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'baseModel' },\n { name: 'comments', defaultValue: [] },\n { name: 'fields', defaultValue: [] },\n { name: 'isView', defaultValue: false },\n { name: 'mixins', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case DataModelAttribute: {\n return {\n name: DataModelAttribute,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'decl' }\n ]\n };\n }\n case DataSource: {\n return {\n name: DataSource,\n properties: [\n { name: 'fields', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case Enum: {\n return {\n name: Enum,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'fields', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case EnumField: {\n return {\n name: EnumField,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case FieldInitializer: {\n return {\n name: FieldInitializer,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case FunctionDecl: {\n return {\n name: FunctionDecl,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'expression' },\n { name: 'name' },\n { name: 'params', defaultValue: [] },\n { name: 'returnType' }\n ]\n };\n }\n case FunctionParam: {\n return {\n name: FunctionParam,\n properties: [\n { name: 'name' },\n { name: 'optional', defaultValue: false },\n { name: 'type' }\n ]\n };\n }\n case FunctionParamType: {\n return {\n name: FunctionParamType,\n properties: [\n { name: 'array', defaultValue: false },\n { name: 'reference' },\n { name: 'type' }\n ]\n };\n }\n case GeneratorDecl: {\n return {\n name: GeneratorDecl,\n properties: [\n { name: 'fields', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case InternalAttribute: {\n return {\n name: InternalAttribute,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'decl' }\n ]\n };\n }\n case InvocationExpr: {\n return {\n name: InvocationExpr,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'function' }\n ]\n };\n }\n case MemberAccessExpr: {\n return {\n name: MemberAccessExpr,\n properties: [\n { name: 'member' },\n { name: 'operand' }\n ]\n };\n }\n case Model: {\n return {\n name: Model,\n properties: [\n { name: 'declarations', defaultValue: [] },\n { name: 'imports', defaultValue: [] }\n ]\n };\n }\n case ModelImport: {\n return {\n name: ModelImport,\n properties: [\n { name: 'path' }\n ]\n };\n }\n case NullExpr: {\n return {\n name: NullExpr,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case NumberLiteral: {\n return {\n name: NumberLiteral,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case ObjectExpr: {\n return {\n name: ObjectExpr,\n properties: [\n { name: 'fields', defaultValue: [] }\n ]\n };\n }\n case Plugin: {\n return {\n name: Plugin,\n properties: [\n { name: 'fields', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case PluginField: {\n return {\n name: PluginField,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case Procedure: {\n return {\n name: Procedure,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'mutation', defaultValue: false },\n { name: 'name' },\n { name: 'params', defaultValue: [] },\n { name: 'returnType' }\n ]\n };\n }\n case ProcedureParam: {\n return {\n name: ProcedureParam,\n properties: [\n { name: 'name' },\n { name: 'optional', defaultValue: false },\n { name: 'type' }\n ]\n };\n }\n case ReferenceArg: {\n return {\n name: ReferenceArg,\n properties: [\n { name: 'name' },\n { name: 'value' }\n ]\n };\n }\n case ReferenceExpr: {\n return {\n name: ReferenceExpr,\n properties: [\n { name: 'args', defaultValue: [] },\n { name: 'target' }\n ]\n };\n }\n case StringLiteral: {\n return {\n name: StringLiteral,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case ThisExpr: {\n return {\n name: ThisExpr,\n properties: [\n { name: 'value' }\n ]\n };\n }\n case TypeDef: {\n return {\n name: TypeDef,\n properties: [\n { name: 'attributes', defaultValue: [] },\n { name: 'comments', defaultValue: [] },\n { name: 'fields', defaultValue: [] },\n { name: 'mixins', defaultValue: [] },\n { name: 'name' }\n ]\n };\n }\n case UnaryExpr: {\n return {\n name: UnaryExpr,\n properties: [\n { name: 'operand' },\n { name: 'operator' }\n ]\n };\n }\n case UnsupportedFieldType: {\n return {\n name: UnsupportedFieldType,\n properties: [\n { name: 'value' }\n ]\n };\n }\n default: {\n return {\n name: type,\n properties: []\n };\n }\n }\n }\n}\n\nexport const reflection = new ZModelAstReflection();\n","import { AstFactory } from './ast-factory';\nimport { BooleanLiteral, NullExpr, NumberLiteral, StringLiteral, ThisExpr } from '../ast';\n\nexport class ThisExprFactory extends AstFactory<ThisExpr> {\n constructor() {\n super({ type: ThisExpr, node: { value: 'this' } });\n }\n}\n\nexport class NullExprFactory extends AstFactory<NullExpr> {\n constructor() {\n super({ type: NullExpr, node: { value: 'null' } });\n }\n}\n\nexport class NumberLiteralFactory extends AstFactory<NumberLiteral> {\n value?: number | string;\n\n constructor() {\n super({ type: NumberLiteral });\n }\n\n setValue(value: number | string) {\n this.value = value;\n this.update({\n value: this.value.toString(),\n });\n return this;\n }\n}\n\nexport class StringLiteralFactory extends AstFactory<StringLiteral> {\n value?: string;\n\n constructor() {\n super({ type: StringLiteral });\n }\n\n setValue(value: string) {\n this.value = value;\n this.update({\n value: this.value,\n });\n return this;\n }\n}\nexport class BooleanLiteralFactory extends AstFactory<BooleanLiteral> {\n value?: boolean;\n\n constructor() {\n super({ type: BooleanLiteral });\n }\n\n setValue(value: boolean) {\n this.value = value;\n this.update({\n value: this.value,\n });\n return this;\n }\n}\n","import type { Reference } from 'langium';\nimport { AstFactory } from './ast-factory';\nimport {\n Argument,\n ArrayExpr,\n BinaryExpr,\n FieldInitializer,\n FunctionDecl,\n InvocationExpr,\n MemberAccessExpr,\n MemberAccessTarget,\n ObjectExpr,\n ReferenceArg,\n ReferenceExpr,\n ReferenceTarget,\n UnaryExpr,\n type Expression,\n type RegularID,\n} from '../ast';\nimport {\n BooleanLiteralFactory,\n NullExprFactory,\n NumberLiteralFactory,\n StringLiteralFactory,\n ThisExprFactory,\n} from './primitives';\n\nexport const ExpressionBuilder = () =>\n ({\n get ArrayExpr() {\n return new ArrayExprFactory();\n },\n get BinaryExpr() {\n return new BinaryExprFactory();\n },\n get BooleanLiteral() {\n return new BooleanLiteralFactory();\n },\n get InvocationExpr() {\n return new InvocationExprFactory();\n },\n get MemberAccessExpr() {\n return new MemberAccessExprFactory();\n },\n get NullExpr() {\n return new NullExprFactory();\n },\n get NumberLiteral() {\n return new NumberLiteralFactory();\n },\n get ObjectExpr() {\n return new ObjectExprFactory();\n },\n get ReferenceExpr() {\n return new ReferenceExprFactory();\n },\n get StringLiteral() {\n return new StringLiteralFactory();\n },\n get ThisExpr() {\n return new ThisExprFactory();\n },\n get UnaryExpr() {\n return new UnaryExprFactory();\n },\n }) satisfies ExpressionBuilderType;\ntype ExpressionBuilderType<T extends Expression = Expression> = {\n [K in T['$type']]: AstFactory<Extract<T, { $type: K }>>;\n};\n\ntype ExpressionFactoryMap = ReturnType<typeof ExpressionBuilder>;\n\nexport type ExpressionBuilder<T extends Expression = Expression> = Pick<\n ExpressionFactoryMap,\n Extract<T['$type'], keyof ExpressionFactoryMap>\n>;\n\nexport class UnaryExprFactory extends AstFactory<UnaryExpr> {\n operand?: AstFactory<Expression>;\n\n constructor() {\n super({ type: UnaryExpr, node: { operator: '!' } });\n }\n\n setOperand(builder: (a: ExpressionBuilder) => AstFactory<Expression>) {\n this.operand = builder(ExpressionBuilder());\n this.update({\n operand: this.operand,\n });\n return this;\n }\n}\n\nexport class ReferenceExprFactory extends AstFactory<ReferenceExpr> {\n target?: Reference<ReferenceTarget>;\n args: ReferenceArgFactory[] = [];\n\n constructor() {\n super({ type: ReferenceExpr, node: { args: [] } });\n }\n\n setTarget(target: ReferenceTarget) {\n this.target = {\n $refText: target.name,\n ref: target,\n };\n this.update({\n target: this.target,\n });\n return this;\n }\n\n addArg(builder: (a: ExpressionBuilder) => AstFactory<Expression>, name?: string) {\n const arg = new ReferenceArgFactory().setValue(builder);\n if (name) {\n arg.setName(name);\n }\n this.args.push(arg);\n this.update({\n args: this.args,\n });\n return this;\n }\n}\n\nexport class ReferenceArgFactory extends AstFactory<ReferenceArg> {\n name?: string;\n value?: AstFactory<Expression>;\n\n constructor() {\n super({ type: ReferenceArg });\n }\n\n setName(name: string) {\n this.name = name;\n this.update({\n name: this.name,\n });\n return this;\n }\n\n setValue(builder: (a: ExpressionBuilder) => AstFactory<Expression>) {\n this.value = builder(ExpressionBuilder());\n this.update({\n value: this.value,\n });\n return this;\n }\n}\n\nexport class MemberAccessExprFactory extends AstFactory<MemberAccessExpr> {\n member?: Reference<MemberAccessTarget>;\n operand?: AstFactory<Expression>;\n\n constructor() {\n super({ type: MemberAccessExpr });\n }\n\n setMember(target: Reference<MemberAccessTarget>) {\n this.member = target;\n this.update({\n member: this.member,\n });\n return this;\n }\n\n setOperand(builder: (b: ExpressionBuilder) => AstFactory<Expression>) {\n this.operand = builder(ExpressionBuilder());\n this.update({\n operand: this.operand,\n });\n return this;\n }\n}\n\nexport class ObjectExprFactory extends AstFactory<ObjectExpr> {\n fields: FieldInitializerFactory[] = [];\n\n constructor() {\n super({ type: ObjectExpr, node: { fields: [] } });\n }\n\n addField(builder: (b: FieldInitializerFactory) => FieldInitializerFactory) {\n this.fields.push(builder(new FieldInitializerFactory()));\n this.update({\n fields: this.fields,\n });\n return this;\n }\n}\n\nexport class FieldInitializerFactory extends AstFactory<FieldInitializer> {\n name?: RegularID;\n value?: AstFactory<Expression>;\n\n constructor() {\n super({ type: FieldInitializer });\n }\n\n setName(name: RegularID) {\n this.name = name;\n this.update({\n name: this.name!,\n });\n return this;\n }\n\n setValue(builder: (a: ExpressionBuilder) => AstFactory<Expression>) {\n this.value = builder(ExpressionBuilder());\n this.update({\n value: this.value!,\n });\n return this;\n }\n}\n\nexport class InvocationExprFactory extends AstFactory<InvocationExpr> {\n args: ArgumentFactory[] = [];\n function?: Reference<FunctionDecl>;\n\n constructor() {\n super({ type: InvocationExpr, node: { args: [] } });\n }\n\n addArg(builder: (arg: ArgumentFactory) => ArgumentFactory) {\n this.args.push(builder(new ArgumentFactory()));\n this.update({\n args: this.args,\n });\n return this;\n }\n\n setFunction(value: FunctionDecl) {\n this.function = {\n $refText: value.name,\n ref: value,\n };\n this.update({\n function: this.function!,\n });\n return this;\n }\n}\n\nexport class ArgumentFactory extends AstFactory<Argument> {\n value?: AstFactory<Expression>;\n\n constructor() {\n super({ type: Argument });\n }\n\n setValue(builder: (a: ExpressionBuilder) => AstFactory<Expression>) {\n this.value = builder(ExpressionBuilder());\n this.update({\n value: this.value!,\n });\n return this;\n }\n}\n\nexport class ArrayExprFactory extends AstFactory<ArrayExpr> {\n items: AstFactory<Expression>[] = [];\n\n constructor() {\n super({ type: ArrayExpr, node: { items: [] } });\n }\n\n addItem(builder: (a: ExpressionBuilder) => AstFactory<Expression>) {\n this.items.push(builder(ExpressionBuilder()));\n this.update({\n items: this.items,\n });\n return this;\n }\n}\n\nexport class BinaryExprFactory extends AstFactory<BinaryExpr> {\n operator?: BinaryExpr['operator'];\n right?: AstFactory<Expression>;\n left?: AstFactory<Expression>;\n // TODO: add support for CollectionPredicateBinding\n\n constructor() {\n super({ type: BinaryExpr });\n }\n\n setOperator(operator: BinaryExpr['operator']) {\n this.operator = operator;\n this.update({\n operator: this.operator!,\n });\n return this;\n }\n setRight(builder: (arg: ExpressionBuilder) => AstFactory<Expression>) {\n this.right = builder(ExpressionBuilder());\n this.update({\n right: this.right!,\n });\n return this;\n }\n setLeft(builder: (arg: ExpressionBuilder) => AstFactory<Expression>) {\n this.left = builder(ExpressionBuilder());\n this.update({\n left: this.left!,\n });\n return this;\n }\n}\n","import { AstFactory } from './ast-factory';\nimport {\n Attribute,\n AttributeArg,\n AttributeParam,\n AttributeParamType,\n DataFieldAttribute,\n DataModelAttribute,\n Expression,\n InternalAttribute,\n TypeDeclaration,\n type Reference,\n type RegularID,\n} from '../ast';\nimport { ExpressionBuilder } from './expression';\n\nexport class DataFieldAttributeFactory extends AstFactory<DataFieldAttribute> {\n args: AttributeArgFactory[] = [];\n decl?: Reference<Attribute>;\n constructor() {\n super({ type: DataFieldAttribute, node: { args: [] } });\n }\n setDecl(decl: Attribute) {\n if (!decl) {\n throw new Error('Attribute declaration is required');\n }\n this.decl = {\n $refText: decl.name,\n ref: decl,\n };\n this.update({\n decl: this.decl,\n });\n return this;\n }\n addArg(builder: (b: ExpressionBuilder) => AstFactory<Expression>, name?: string) {\n const factory = new AttributeArgFactory().setValue(builder);\n if (name) {\n factory.setName(name);\n }\n this.args.push(factory);\n this.update({\n args: this.args,\n });\n return this;\n }\n}\n\nexport class DataModelAttributeFactory extends AstFactory<DataModelAttribute> {\n args: AttributeArgFactory[] = [];\n decl?: Reference<Attribute>;\n constructor() {\n super({ type: DataModelAttribute, node: { args: [] } });\n }\n setDecl(decl: Attribute) {\n if (!decl) {\n throw new Error('Attribute declaration is required');\n }\n this.decl = {\n $refText: decl.name,\n ref: decl,\n };\n this.update({\n decl: this.decl,\n });\n return this;\n }\n addArg(builder: (b: ExpressionBuilder) => AstFactory<Expression>, name?: string) {\n const factory = new AttributeArgFactory().setValue(builder);\n if (name) {\n factory.setName(name);\n }\n this.args.push(factory);\n this.update({\n args: this.args,\n });\n return this;\n }\n}\n\nexport class AttributeArgFactory extends AstFactory<AttributeArg> {\n name?: RegularID = '';\n value?: AstFactory<Expression>;\n\n constructor() {\n super({ type: AttributeArg });\n }\n\n setName(name: RegularID) {\n this.name = name;\n this.update({\n name: this.name,\n });\n return this;\n }\n\n setValue(builder: (b: ExpressionBuilder) => AstFactory<Expression>) {\n this.value = builder(ExpressionBuilder());\n this.update({\n value: this.value,\n });\n return this;\n }\n}\n\nexport class InternalAttributeFactory extends AstFactory<InternalAttribute> {\n decl?: Reference<Attribute>;\n args: AttributeArgFactory[] = [];\n\n constructor() {\n super({ type: InternalAttribute, node: { args: [] } });\n }\n\n setDecl(decl: Attribute) {\n this.decl = {\n $refText: decl.name,\n ref: decl,\n };\n this.update({\n decl: this.decl,\n });\n return this;\n }\n\n addArg(builder: (b: ExpressionBuilder) => AstFactory<Expression>, name?: string) {\n const factory = new AttributeArgFactory().setValue(builder);\n if (name) {\n factory.setName(name);\n }\n this.args.push(factory);\n this.update({\n args: this.args,\n });\n return this;\n }\n}\n\nexport class AttributeParamFactory extends AstFactory<AttributeParam> {\n attributes: InternalAttributeFactory[] = [];\n comments: string[] = [];\n default?: boolean;\n name?: RegularID;\n type?: AttributeParamTypeFactory;\n\n constructor() {\n super({\n type: AttributeParam,\n node: {\n comments: [],\n attributes: [],\n },\n });\n }\n\n addAttribute(builder: (b: InternalAttributeFactory) => InternalAttributeFactory) {\n this.attributes.push(builder(new InternalAttributeFactory()));\n this.update({\n attributes: this.attributes,\n });\n return this;\n }\n\n setComments(comments: string[]) {\n this.comments = comments;\n this.update({\n comments: this.comments,\n });\n return this;\n }\n\n setDefault(defaultValue: boolean) {\n this.default = defaultValue;\n this.update({\n default: this.default,\n });\n return this;\n }\n\n setName(name: string) {\n this.name = name;\n this.update({\n name: this.name,\n });\n return this;\n }\n\n setType(builder: (b: AttributeParamTypeFactory) => AttributeParamTypeFactory) {\n this.type = builder(new AttributeParamTypeFactory());\n this.update({\n type: this.type,\n });\n return this;\n }\n}\n\nexport class AttributeParamTypeFactory extends AstFactory<AttributeParamType> {\n array?: boolean;\n optional?: boolean;\n reference?: Reference<TypeDeclaration>;\n type?: AttributeParamType['type'];\n constructor() {\n super({ type: AttributeParamType });\n }\n setArray(array: boolean) {\n this.array = array;\n this.update({\n array: this.array,\n });\n return this;\n }\n\n setOptional(optional: boolean) {\n this.optional = optional;\n this.update({\n optional: this.optional,\n });\n return this;\n }\n\n setReference(reference: TypeDeclaration) {\n this.reference = {\n $refText: reference.name,\n ref: reference,\n };\n this.update({\n reference: this.reference,\n });\n return this;\n }\n\n setType(type: AttributeParamType['type']) {\n this.type = type;\n this.update({\n type: this.type,\n });\n return this;\n }\n}\n\nexport class AttributeFactory extends AstFactory<Attribute> {\n name?: string;\n comments: string[] = [];\n attributes: InternalAttributeFactory[] = [];\n params: AttributeParamFactory[] = [];\n\n constructor() {\n super({ type: Attribute, node: { comments: [], attributes: [], params: [] } });\n }\n\n setName(name: string) {\n this.name = name;\n this.update({\n name: this.name,\n });\n return this;\n }\n\n setComments(comments: string[]) {\n this.comments = comments;\n this.update({\n comments: this.comments,\n });\n return this;\n }\n\n addAttribute(builder: (b: InternalAttributeFactory) => InternalAttributeFactory) {\n this.attributes.push(builder(new InternalAttributeFactory()));\n this.update({\n attributes: this.attributes,\n });\n return this;\n }\n\n addParam(builder: (b: AttributeParamFactory) => AttributeParamFactory) {\n this.params.push(builder(new AttributeParamFactory()));\n this.update({\n params: this.params,\n });\n return this;\n }\n}\n","import { AstFactory } from './ast-factory';\nimport { AbstractDeclaration, type Reference } from '../ast';\nimport {\n type BuiltinType,\n DataField,\n DataFieldType,\n DataModel,\n Enum,\n EnumField,\n LiteralExpr,\n Model,\n ModelImport,\n type RegularID,\n type RegularIDWithTypeNames,\n TypeDeclaration,\n type TypeDef,\n UnsupportedFieldType,\n} from '../generated/ast';\nimport { AttributeFactory, DataFieldAttributeFactory, DataModelAttributeFactory } from './attribute';\nimport { ExpressionBuilder } from './expression';\nexport const DeclarationBuilder = () =>\n ({\n get Attribute() {\n return new AttributeFactory();\n },\n get DataModel() {\n return new DataModelFactory();\n },\n get DataSource(): any {\n throw new Error('DataSource is not implemented');\n },\n get Enum() {\n return new EnumFactory();\n },\n get FunctionDecl(): any {\n throw new Error('FunctionDecl is not implemented');\n },\n get GeneratorDecl(): any {\n throw new Error('GeneratorDecl is not implemented');\n },\n get Plugin(): any {\n throw new Error('Plugin is not implemented');\n },\n get Procedure(): any {\n throw new Error('Procedure is not implemented');\n },\n get TypeDef(): any {\n throw new Error('TypeDef is not implemented');\n },\n }) satisfies DeclarationBuilderType;\ntype DeclarationBuilderType<T extends AbstractDeclaration = AbstractDeclaration> = {\n [K in T['$type']]: AstFactory<Extract<T, { $type: K }>>;\n};\ntype DeclarationBuilderMap = ReturnType<typeof DeclarationBuilder>;\n\nexport type DeclarationBuilder<T extends AbstractDeclaration = AbstractDeclaration> = Pick<\n DeclarationBuilderMap,\n Extract<T['$type'], keyof DeclarationBuilderMap>\n>;\n\nexport class DataModelFactory extends AstFactory<DataModel> {\n attributes: DataModelAttributeFactory[] = [];\n baseModel?: Reference<DataModel>;\n comments: string[] = [];\n fields: DataFieldFactory[] = [];\n isView?: boolean;\n mixins: Reference<TypeDef>[] = [];\n name?: RegularID;\n\n constructor() {\n super({\n type: DataModel,\n node: {\n attributes: [],\n comments: [],\n fields: [],\n mixins: [],\n },\n });\n }\n\n addAttribute(builder: (attr: DataModelAttributeFactory) => DataModelAttributeFactory) {\n this.attributes.push(builder(new DataModelAttributeFactory()).setContainer(this.node));\n this.update({\n attributes: this.attributes,\n });\n return this;\n }\n\n setBaseModel(model: Reference<DataModel>) {\n this.baseModel = model;\n this.update({\n baseModel: this.baseModel,\n });\n return this;\n }\n\n setComments(comments: string[]) {\n this.comments = comments;\n this.update({\n comments: this.comments,\n });\n return this;\n }\n\n addComment(comment: string) {\n this.comments.push(comment);\n this.update({\n comments: this.comments,\n });\n return this;\n }\n\n addField(builder: (field: DataFieldFactory) => DataFieldFactory) {\n this.fields.push(builder(new DataFieldFactory()).setContainer(this.node));\n this.update({\n fields: this.fields,\n });\n return this;\n }\n\n setIsView(isView: boolean) {\n this.isView = isView;\n this.update({\n isView: this.isView,\n });\n return this;\n }\n\n addMixin(mixin: Reference<TypeDef>) {\n this.mixins.push(mixin);\n this.update({\n mixins: this.mixins,\n });\n return this;\n }\n\n setName(name: string) {\n this.name = name;\n this.update({\n name: this.name,\n });\n return this;\n }\n}\n\nexport class DataFieldFactory extends AstFactory<DataField> {\n attributes: DataFieldAttributeFactory[] = [];\n comments: string[] = [];\n name?: string;\n type?: DataFieldTypeFactory;\n\n constructor() {\n super({ type: DataField, node: { attributes: [], comments: [] } });\n }\n\n addAttribute(\n builder: ((attr: DataFieldAttributeFactory) => DataFieldAttributeFactory) | DataFieldAttributeFactory,\n ) {\n if (builder instanceof DataFieldAttributeFactory) {\n builder.setContainer(this.node);\n this.attributes.push(builder);\n } else {\n const attr = builder(new DataFieldAttributeFactory());\n attr.setContainer(this.node);\n this.attributes.push(attr);\n }\n this.update({\n attributes: this.attributes,\n });\n return this;\n }\n\n setComments(comments: string[]) {\n this.comments = comments;\n this.update({\n comments: this.comments,\n });\n return this;\n }\n\n setName(name: string) {\n this.name = name;\n this.update({\n name: this.name,\n });\n return this;\n }\n\n setType(builder: (type: DataFieldTypeFactory) => DataFieldTypeFactory) {\n this.type = builder(new DataFieldTypeFactory()).setContainer(this.node);\n this.update({\n type: this.type,\n });\n return this;\n }\n}\n\nexport class DataFieldTypeFactory extends AstFactory<DataFieldType> {\n array?: boolean;\n optional?: boolean;\n reference?: Reference<TypeDeclaration>;\n type?: BuiltinType;\n unsupported?: UnsupportedFieldTypeFactory;\n\n constructor() {\n super({ type: DataFieldType });\n }\n\n setArray(array: boolean) {\n this.array = array;\n this.update({\n array: this.array,\n });\n return this;\n }\n\n setOptional(optional: boolean) {\n this.optional = optional;\n this.update({\n optional: this.optional,\n });\n return this;\n }\n\n setReference(reference: TypeDeclaration) {\n this.reference = {\n $refText: reference.name,\n ref: reference,\n };\n this.update({\n reference: this.reference,\n });\n return this;\n }\n\n setType(type: BuiltinType) {\n this.type = type;\n this.update({\n type: this.type,\n });\n return this;\n }\n\n setUnsupported(builder: (a: UnsupportedFieldTypeFactory) => UnsupportedFieldTypeFactory) {\n this.unsupported = builder(new UnsupportedFieldTypeFactory()).setContainer(this.node);\n this.update({\n unsupported: this.unsupported,\n });\n return this;\n }\n}\n\nexport class UnsupportedFieldTypeFactory extends AstFactory<UnsupportedFieldType> {\n value?: AstFactory<LiteralExpr>;\n constructor() {\n super({ type: UnsupportedFieldType });\n }\n setValue(builder: (value: ExpressionBuilder<LiteralExpr>) => AstFactory<LiteralExpr>) {\n this.value = builder(ExpressionBuilder());\n this.update({\n value: this.value!,\n });\n return this;\n }\n}\n\nexport class ModelFactory extends AstFactory<Model> {\n declarations: AstFactory<AbstractDeclaration>[] = [];\n imports: ModelImportFactory[] = [];\n constructor() {\n super({ type: Model, node: { declarations: [], imports: [] } });\n }\n addImport(builder: (b: ModelImportFactory) => ModelImportFactory) {\n this.imports.push(builder(new ModelImportFactory()).setContainer(this.node));\n this.update({\n imports: this.imports,\n });\n return this;\n }\n addDeclaration(builder: (b: DeclarationBuilder) => AstFactory<AbstractDeclaration>) {\n this.declarations.push(builder(DeclarationBuilder()).setContainer(this.node));\n this.update({\n declarations: this.declarations,\n });\n return this;\n }\n}\n\nexport class ModelImportFactory extends AstFactory<ModelImport> {\n path?: string | undefined;\n\n constructor() {\n super({ type: ModelImport });\n }\n\n setPath(path: string) {\n this.path = path;\n this.update({\n path: this.path,\n });\n return this;\n }\n}\n\nexport class EnumFactory extends AstFactory<Enum> {\n name?: string;\n comments: string[] = [];\n fields: EnumFieldFactory[] = [];\n attributes: DataModelAttributeFactory[] = [];\n\n constructor() {\n super({ type: Enum, node: { comments: [], fields: [], attributes: [] } });\n }\n\n addField(builder: (b: EnumFieldFactory) => EnumFieldFactory) {\n this.fields.push(builder(new EnumFieldFactory()).setContainer(this.node));\n this.update({\n fields: this.fields,\n });\n return this;\n }\n\n addAttribute(builder: (b: DataModelAttributeFactory) => DataModelAttributeFactory) {\n this.attributes.push(builder(new DataModelAttributeFactory()).setContainer(this.node));\n this.update({\n attributes: this.attributes,\n });\n return this;\n }\n\n setName(name: string) {\n this.name = name;\n this.update({\n name: this.name,\n });\n return this;\n }\n}\n\nexport class EnumFieldFactory extends AstFactory<EnumField> {\n name?: RegularIDWithTypeNames;\n comments: string[] = [];\n attributes: DataFieldAttributeFactory[] = [];\n\n constructor() {\n super({ type: EnumField, node: { comments: [], attributes: [] } });\n }\n\n setName(name: RegularIDWithTypeNames) {\n this.name = name;\n this.update({\n name: this.name,\n });\n return this;\n }\n\n addAttribute(builder: (b: DataFieldAttributeFactory) => DataFieldAttributeFactory) {\n this.attributes.push(builder(new DataFieldAttributeFactory()).setContainer(this.node));\n this.update({\n attributes: this.attributes,\n });\n return this;\n }\n\n addComment(comment: string) {\n this.comments.push(comment);\n this.update({\n comments: this.comments,\n });\n return this;\n }\n}\n"],"mappings":"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","names":["AstFactory","node","type","$type","update","setContainer","container","$container","get","params","nodeArg","keys","Object","forEach","key","child","Array","isArray","map","item","AbstractDeclaration","ConfigExpr","Expression","LiteralExpr","MemberAccessTarget","ReferenceTarget","TypeDeclaration","Argument","ArrayExpr","Attribute","AttributeArg","AttributeParam","AttributeParamType","BinaryExpr","BooleanLiteral","CollectionPredicateBinding","ConfigArrayExpr","ConfigField","ConfigInvocationArg","ConfigInvocationExpr","DataField","DataFieldAttribute","DataFieldType","DataModel","DataModelAttribute","DataSource","Enum","EnumField","FieldInitializer","FunctionDecl","FunctionParam","FunctionParamType","GeneratorDecl","InternalAttribute","InvocationExpr","MemberAccessExpr","Model","ModelImport","NullExpr","NumberLiteral","ObjectExpr","Plugin","PluginField","Procedure","ProcedureParam","ReferenceArg","ReferenceExpr","StringLiteral","ThisExpr","TypeDef","UnaryExpr","UnsupportedFieldType","ZModelAstReflection","AbstractAstReflection","getAllTypes","AbstractDeclaration","Argument","ArrayExpr","Attribute","AttributeArg","AttributeParam","AttributeParamType","BinaryExpr","BooleanLiteral","CollectionPredicateBinding","ConfigArrayExpr","ConfigExpr","ConfigField","ConfigInvocationArg","ConfigInvocationExpr","DataField","DataFieldAttribute","DataFieldType","DataModel","DataModelAttribute","DataSource","Enum","EnumField","Expression","FieldInitializer","FunctionDecl","FunctionParam","FunctionParamType","GeneratorDecl","InternalAttribute","InvocationExpr","LiteralExpr","MemberAccessExpr","MemberAccessTarget","Model","ModelImport","NullExpr","NumberLiteral","ObjectExpr","Plugin","PluginField","Procedure","ProcedureParam","ReferenceArg","ReferenceExpr","ReferenceTarget","StringLiteral","ThisExpr","TypeDeclaration","TypeDef","UnaryExpr","UnsupportedFieldType","computeIsSubtype","subtype","supertype","isSubtype","getReferenceType","refInfo","referenceId","container","$type","property","Error","getTypeMetaData","type","name","properties","defaultValue","reflection","ThisExprFactory","AstFactory","type","ThisExpr","node","value","NullExprFactory","NullExpr","NumberLiteralFactory","NumberLiteral","setValue","update","toString","StringLiteralFactory","StringLiteral","BooleanLiteralFactory","BooleanLiteral","ExpressionBuilder","ArrayExpr","ArrayExprFactory","BinaryExpr","BinaryExprFactory","BooleanLiteral","BooleanLiteralFactory","InvocationExpr","InvocationExprFactory","MemberAccessExpr","MemberAccessExprFactory","NullExpr","NullExprFactory","NumberLiteral","NumberLiteralFactory","ObjectExpr","ObjectExprFactory","ReferenceExpr","ReferenceExprFactory","StringLiteral","StringLiteralFactory","ThisExpr","ThisExprFactory","UnaryExpr","UnaryExprFactory","AstFactory","operand","type","node","operator","setOperand","builder","update","target","args","setTarget","$refText","name","ref","addArg","arg","ReferenceArgFactory","setValue","setName","push","value","ReferenceArg","member","setMember","fields","addField","FieldInitializerFactory","FieldInitializer","function","ArgumentFactory","setFunction","Argument","items","addItem","right","left","setOperator","setRight","setLeft","DataFieldAttributeFactory","AstFactory","args","decl","type","DataFieldAttribute","node","setDecl","Error","$refText","name","ref","update","addArg","builder","factory","AttributeArgFactory","setValue","setName","push","DataModelAttributeFactory","DataModelAttribute","value","AttributeArg","ExpressionBuilder","InternalAttributeFactory","InternalAttribute","AttributeParamFactory","attributes","comments","default","AttributeParam","addAttribute","setComments","setDefault","defaultValue","setType","AttributeParamTypeFactory","array","optional","reference","AttributeParamType","setArray","setOptional","setReference","AttributeFactory","params","Attribute","addParam","DeclarationBuilder","Attribute","AttributeFactory","DataModel","DataModelFactory","DataSource","Error","Enum","EnumFactory","FunctionDecl","GeneratorDecl","Plugin","Procedure","TypeDef","AstFactory","attributes","baseModel","comments","fields","isView","mixins","name","type","node","addAttribute","builder","push","DataModelAttributeFactory","setContainer","update","setBaseModel","model","setComments","addComment","comment","addField","DataFieldFactory","setIsView","addMixin","mixin","setName","DataField","DataFieldAttributeFactory","attr","setType","DataFieldTypeFactory","array","optional","reference","unsupported","DataFieldType","setArray","setOptional","setReference","$refText","ref","setUnsupported","UnsupportedFieldTypeFactory","value","UnsupportedFieldType","setValue","ExpressionBuilder","ModelFactory","declarations","imports","Model","addImport","ModelImportFactory","addDeclaration","path","ModelImport","setPath","EnumFieldFactory","EnumField"]}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import { ThisExpr, NullExpr, NumberLiteral, StringLiteral, BooleanLiteral, ArrayExpr, Expression, BinaryExpr, InvocationExpr, Argument, FunctionDecl, MemberAccessExpr, MemberAccessTarget, ObjectExpr, FieldInitializer, RegularID, ReferenceExpr, ReferenceTarget, ReferenceArg, UnaryExpr, Attribute, InternalAttribute, AttributeArg, AttributeParam, AttributeParamType, TypeDeclaration, DataModelAttribute, DataFieldAttribute, DataModel, DataField, DataFieldType, BuiltinType, UnsupportedFieldType, LiteralExpr, TypeDef, Enum, EnumField, RegularIDWithTypeNames, AbstractDeclaration, Model, ModelImport } from './ast.cjs';
|
|
2
|
+
import { AstNode, Reference } from 'langium';
|
|
3
|
+
|
|
4
|
+
type ContainerProps<T extends AstNode | undefined> = {
|
|
5
|
+
$container: T;
|
|
6
|
+
$containerProperty?: string;
|
|
7
|
+
$containerIndex?: number;
|
|
8
|
+
};
|
|
9
|
+
type NodeFactoriesFor<N> = {
|
|
10
|
+
[K in keyof N as {} extends Pick<N, K> ? never : K]: N[K] extends (infer U)[] ? (AstFactory<U extends AstNode ? U : AstNode> | U)[] : AstFactory<N[K] extends AstNode ? N[K] : AstNode> | N[K];
|
|
11
|
+
} & {
|
|
12
|
+
[K in keyof N as {} extends Pick<N, K> ? K : never]?: N[K] extends (infer U)[] ? (AstFactory<U extends AstNode ? U : AstNode> | U)[] : AstFactory<N[K] extends AstNode ? N[K] : AstNode> | N[K];
|
|
13
|
+
};
|
|
14
|
+
declare abstract class AstFactory<T extends AstNode = AstNode> {
|
|
15
|
+
node: T;
|
|
16
|
+
constructor({ type, node }: {
|
|
17
|
+
type: T['$type'];
|
|
18
|
+
node?: Partial<T>;
|
|
19
|
+
});
|
|
20
|
+
setContainer(container: T['$container']): this;
|
|
21
|
+
get(params?: ContainerProps<T['$container']>): T;
|
|
22
|
+
update(nodeArg: Partial<T | NodeFactoriesFor<T>>): T;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
declare class ThisExprFactory extends AstFactory<ThisExpr> {
|
|
26
|
+
constructor();
|
|
27
|
+
}
|
|
28
|
+
declare class NullExprFactory extends AstFactory<NullExpr> {
|
|
29
|
+
constructor();
|
|
30
|
+
}
|
|
31
|
+
declare class NumberLiteralFactory extends AstFactory<NumberLiteral> {
|
|
32
|
+
value?: number | string;
|
|
33
|
+
constructor();
|
|
34
|
+
setValue(value: number | string): this;
|
|
35
|
+
}
|
|
36
|
+
declare class StringLiteralFactory extends AstFactory<StringLiteral> {
|
|
37
|
+
value?: string;
|
|
38
|
+
constructor();
|
|
39
|
+
setValue(value: string): this;
|
|
40
|
+
}
|
|
41
|
+
declare class BooleanLiteralFactory extends AstFactory<BooleanLiteral> {
|
|
42
|
+
value?: boolean;
|
|
43
|
+
constructor();
|
|
44
|
+
setValue(value: boolean): this;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
type ExpressionFactoryMap = ReturnType<typeof ExpressionBuilder>;
|
|
48
|
+
declare const ExpressionBuilder: () => {
|
|
49
|
+
readonly ArrayExpr: ArrayExprFactory;
|
|
50
|
+
readonly BinaryExpr: BinaryExprFactory;
|
|
51
|
+
readonly BooleanLiteral: BooleanLiteralFactory;
|
|
52
|
+
readonly InvocationExpr: InvocationExprFactory;
|
|
53
|
+
readonly MemberAccessExpr: MemberAccessExprFactory;
|
|
54
|
+
readonly NullExpr: NullExprFactory;
|
|
55
|
+
readonly NumberLiteral: NumberLiteralFactory;
|
|
56
|
+
readonly ObjectExpr: ObjectExprFactory;
|
|
57
|
+
readonly ReferenceExpr: ReferenceExprFactory;
|
|
58
|
+
readonly StringLiteral: StringLiteralFactory;
|
|
59
|
+
readonly ThisExpr: ThisExprFactory;
|
|
60
|
+
readonly UnaryExpr: UnaryExprFactory;
|
|
61
|
+
};
|
|
62
|
+
type ExpressionBuilder<T extends Expression = Expression> = Pick<ExpressionFactoryMap, Extract<T['$type'], keyof ExpressionFactoryMap>>;
|
|
63
|
+
declare class UnaryExprFactory extends AstFactory<UnaryExpr> {
|
|
64
|
+
operand?: AstFactory<Expression>;
|
|
65
|
+
constructor();
|
|
66
|
+
setOperand(builder: (a: ExpressionBuilder) => AstFactory<Expression>): this;
|
|
67
|
+
}
|
|
68
|
+
declare class ReferenceExprFactory extends AstFactory<ReferenceExpr> {
|
|
69
|
+
target?: Reference<ReferenceTarget>;
|
|
70
|
+
args: ReferenceArgFactory[];
|
|
71
|
+
constructor();
|
|
72
|
+
setTarget(target: ReferenceTarget): this;
|
|
73
|
+
addArg(builder: (a: ExpressionBuilder) => AstFactory<Expression>, name?: string): this;
|
|
74
|
+
}
|
|
75
|
+
declare class ReferenceArgFactory extends AstFactory<ReferenceArg> {
|
|
76
|
+
name?: string;
|
|
77
|
+
value?: AstFactory<Expression>;
|
|
78
|
+
constructor();
|
|
79
|
+
setName(name: string): this;
|
|
80
|
+
setValue(builder: (a: ExpressionBuilder) => AstFactory<Expression>): this;
|
|
81
|
+
}
|
|
82
|
+
declare class MemberAccessExprFactory extends AstFactory<MemberAccessExpr> {
|
|
83
|
+
member?: Reference<MemberAccessTarget>;
|
|
84
|
+
operand?: AstFactory<Expression>;
|
|
85
|
+
constructor();
|
|
86
|
+
setMember(target: Reference<MemberAccessTarget>): this;
|
|
87
|
+
setOperand(builder: (b: ExpressionBuilder) => AstFactory<Expression>): this;
|
|
88
|
+
}
|
|
89
|
+
declare class ObjectExprFactory extends AstFactory<ObjectExpr> {
|
|
90
|
+
fields: FieldInitializerFactory[];
|
|
91
|
+
constructor();
|
|
92
|
+
addField(builder: (b: FieldInitializerFactory) => FieldInitializerFactory): this;
|
|
93
|
+
}
|
|
94
|
+
declare class FieldInitializerFactory extends AstFactory<FieldInitializer> {
|
|
95
|
+
name?: RegularID;
|
|
96
|
+
value?: AstFactory<Expression>;
|
|
97
|
+
constructor();
|
|
98
|
+
setName(name: RegularID): this;
|
|
99
|
+
setValue(builder: (a: ExpressionBuilder) => AstFactory<Expression>): this;
|
|
100
|
+
}
|
|
101
|
+
declare class InvocationExprFactory extends AstFactory<InvocationExpr> {
|
|
102
|
+
args: ArgumentFactory[];
|
|
103
|
+
function?: Reference<FunctionDecl>;
|
|
104
|
+
constructor();
|
|
105
|
+
addArg(builder: (arg: ArgumentFactory) => ArgumentFactory): this;
|
|
106
|
+
setFunction(value: FunctionDecl): this;
|
|
107
|
+
}
|
|
108
|
+
declare class ArgumentFactory extends AstFactory<Argument> {
|
|
109
|
+
value?: AstFactory<Expression>;
|
|
110
|
+
constructor();
|
|
111
|
+
setValue(builder: (a: ExpressionBuilder) => AstFactory<Expression>): this;
|
|
112
|
+
}
|
|
113
|
+
declare class ArrayExprFactory extends AstFactory<ArrayExpr> {
|
|
114
|
+
items: AstFactory<Expression>[];
|
|
115
|
+
constructor();
|
|
116
|
+
addItem(builder: (a: ExpressionBuilder) => AstFactory<Expression>): this;
|
|
117
|
+
}
|
|
118
|
+
declare class BinaryExprFactory extends AstFactory<BinaryExpr> {
|
|
119
|
+
operator?: BinaryExpr['operator'];
|
|
120
|
+
right?: AstFactory<Expression>;
|
|
121
|
+
left?: AstFactory<Expression>;
|
|
122
|
+
constructor();
|
|
123
|
+
setOperator(operator: BinaryExpr['operator']): this;
|
|
124
|
+
setRight(builder: (arg: ExpressionBuilder) => AstFactory<Expression>): this;
|
|
125
|
+
setLeft(builder: (arg: ExpressionBuilder) => AstFactory<Expression>): this;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
declare class DataFieldAttributeFactory extends AstFactory<DataFieldAttribute> {
|
|
129
|
+
args: AttributeArgFactory[];
|
|
130
|
+
decl?: Reference<Attribute>;
|
|
131
|
+
constructor();
|
|
132
|
+
setDecl(decl: Attribute): this;
|
|
133
|
+
addArg(builder: (b: ExpressionBuilder) => AstFactory<Expression>, name?: string): this;
|
|
134
|
+
}
|
|
135
|
+
declare class DataModelAttributeFactory extends AstFactory<DataModelAttribute> {
|
|
136
|
+
args: AttributeArgFactory[];
|
|
137
|
+
decl?: Reference<Attribute>;
|
|
138
|
+
constructor();
|
|
139
|
+
setDecl(decl: Attribute): this;
|
|
140
|
+
addArg(builder: (b: ExpressionBuilder) => AstFactory<Expression>, name?: string): this;
|
|
141
|
+
}
|
|
142
|
+
declare class AttributeArgFactory extends AstFactory<AttributeArg> {
|
|
143
|
+
name?: RegularID;
|
|
144
|
+
value?: AstFactory<Expression>;
|
|
145
|
+
constructor();
|
|
146
|
+
setName(name: RegularID): this;
|
|
147
|
+
setValue(builder: (b: ExpressionBuilder) => AstFactory<Expression>): this;
|
|
148
|
+
}
|
|
149
|
+
declare class InternalAttributeFactory extends AstFactory<InternalAttribute> {
|
|
150
|
+
decl?: Reference<Attribute>;
|
|
151
|
+
args: AttributeArgFactory[];
|
|
152
|
+
constructor();
|
|
153
|
+
setDecl(decl: Attribute): this;
|
|
154
|
+
addArg(builder: (b: ExpressionBuilder) => AstFactory<Expression>, name?: string): this;
|
|
155
|
+
}
|
|
156
|
+
declare class AttributeParamFactory extends AstFactory<AttributeParam> {
|
|
157
|
+
attributes: InternalAttributeFactory[];
|
|
158
|
+
comments: string[];
|
|
159
|
+
default?: boolean;
|
|
160
|
+
name?: RegularID;
|
|
161
|
+
type?: AttributeParamTypeFactory;
|
|
162
|
+
constructor();
|
|
163
|
+
addAttribute(builder: (b: InternalAttributeFactory) => InternalAttributeFactory): this;
|
|
164
|
+
setComments(comments: string[]): this;
|
|
165
|
+
setDefault(defaultValue: boolean): this;
|
|
166
|
+
setName(name: string): this;
|
|
167
|
+
setType(builder: (b: AttributeParamTypeFactory) => AttributeParamTypeFactory): this;
|
|
168
|
+
}
|
|
169
|
+
declare class AttributeParamTypeFactory extends AstFactory<AttributeParamType> {
|
|
170
|
+
array?: boolean;
|
|
171
|
+
optional?: boolean;
|
|
172
|
+
reference?: Reference<TypeDeclaration>;
|
|
173
|
+
type?: AttributeParamType['type'];
|
|
174
|
+
constructor();
|
|
175
|
+
setArray(array: boolean): this;
|
|
176
|
+
setOptional(optional: boolean): this;
|
|
177
|
+
setReference(reference: TypeDeclaration): this;
|
|
178
|
+
setType(type: AttributeParamType['type']): this;
|
|
179
|
+
}
|
|
180
|
+
declare class AttributeFactory extends AstFactory<Attribute> {
|
|
181
|
+
name?: string;
|
|
182
|
+
comments: string[];
|
|
183
|
+
attributes: InternalAttributeFactory[];
|
|
184
|
+
params: AttributeParamFactory[];
|
|
185
|
+
constructor();
|
|
186
|
+
setName(name: string): this;
|
|
187
|
+
setComments(comments: string[]): this;
|
|
188
|
+
addAttribute(builder: (b: InternalAttributeFactory) => InternalAttributeFactory): this;
|
|
189
|
+
addParam(builder: (b: AttributeParamFactory) => AttributeParamFactory): this;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
type DeclarationBuilderMap = ReturnType<typeof DeclarationBuilder>;
|
|
193
|
+
declare const DeclarationBuilder: () => {
|
|
194
|
+
readonly Attribute: AttributeFactory;
|
|
195
|
+
readonly DataModel: DataModelFactory;
|
|
196
|
+
readonly DataSource: any;
|
|
197
|
+
readonly Enum: EnumFactory;
|
|
198
|
+
readonly FunctionDecl: any;
|
|
199
|
+
readonly GeneratorDecl: any;
|
|
200
|
+
readonly Plugin: any;
|
|
201
|
+
readonly Procedure: any;
|
|
202
|
+
readonly TypeDef: any;
|
|
203
|
+
};
|
|
204
|
+
type DeclarationBuilder<T extends AbstractDeclaration = AbstractDeclaration> = Pick<DeclarationBuilderMap, Extract<T['$type'], keyof DeclarationBuilderMap>>;
|
|
205
|
+
declare class DataModelFactory extends AstFactory<DataModel> {
|
|
206
|
+
attributes: DataModelAttributeFactory[];
|
|
207
|
+
baseModel?: Reference<DataModel>;
|
|
208
|
+
comments: string[];
|
|
209
|
+
fields: DataFieldFactory[];
|
|
210
|
+
isView?: boolean;
|
|
211
|
+
mixins: Reference<TypeDef>[];
|
|
212
|
+
name?: RegularID;
|
|
213
|
+
constructor();
|
|
214
|
+
addAttribute(builder: (attr: DataModelAttributeFactory) => DataModelAttributeFactory): this;
|
|
215
|
+
setBaseModel(model: Reference<DataModel>): this;
|
|
216
|
+
setComments(comments: string[]): this;
|
|
217
|
+
addComment(comment: string): this;
|
|
218
|
+
addField(builder: (field: DataFieldFactory) => DataFieldFactory): this;
|
|
219
|
+
setIsView(isView: boolean): this;
|
|
220
|
+
addMixin(mixin: Reference<TypeDef>): this;
|
|
221
|
+
setName(name: string): this;
|
|
222
|
+
}
|
|
223
|
+
declare class DataFieldFactory extends AstFactory<DataField> {
|
|
224
|
+
attributes: DataFieldAttributeFactory[];
|
|
225
|
+
comments: string[];
|
|
226
|
+
name?: string;
|
|
227
|
+
type?: DataFieldTypeFactory;
|
|
228
|
+
constructor();
|
|
229
|
+
addAttribute(builder: ((attr: DataFieldAttributeFactory) => DataFieldAttributeFactory) | DataFieldAttributeFactory): this;
|
|
230
|
+
setComments(comments: string[]): this;
|
|
231
|
+
setName(name: string): this;
|
|
232
|
+
setType(builder: (type: DataFieldTypeFactory) => DataFieldTypeFactory): this;
|
|
233
|
+
}
|
|
234
|
+
declare class DataFieldTypeFactory extends AstFactory<DataFieldType> {
|
|
235
|
+
array?: boolean;
|
|
236
|
+
optional?: boolean;
|
|
237
|
+
reference?: Reference<TypeDeclaration>;
|
|
238
|
+
type?: BuiltinType;
|
|
239
|
+
unsupported?: UnsupportedFieldTypeFactory;
|
|
240
|
+
constructor();
|
|
241
|
+
setArray(array: boolean): this;
|
|
242
|
+
setOptional(optional: boolean): this;
|
|
243
|
+
setReference(reference: TypeDeclaration): this;
|
|
244
|
+
setType(type: BuiltinType): this;
|
|
245
|
+
setUnsupported(builder: (a: UnsupportedFieldTypeFactory) => UnsupportedFieldTypeFactory): this;
|
|
246
|
+
}
|
|
247
|
+
declare class UnsupportedFieldTypeFactory extends AstFactory<UnsupportedFieldType> {
|
|
248
|
+
value?: AstFactory<LiteralExpr>;
|
|
249
|
+
constructor();
|
|
250
|
+
setValue(builder: (value: ExpressionBuilder<LiteralExpr>) => AstFactory<LiteralExpr>): this;
|
|
251
|
+
}
|
|
252
|
+
declare class ModelFactory extends AstFactory<Model> {
|
|
253
|
+
declarations: AstFactory<AbstractDeclaration>[];
|
|
254
|
+
imports: ModelImportFactory[];
|
|
255
|
+
constructor();
|
|
256
|
+
addImport(builder: (b: ModelImportFactory) => ModelImportFactory): this;
|
|
257
|
+
addDeclaration(builder: (b: DeclarationBuilder) => AstFactory<AbstractDeclaration>): this;
|
|
258
|
+
}
|
|
259
|
+
declare class ModelImportFactory extends AstFactory<ModelImport> {
|
|
260
|
+
path?: string | undefined;
|
|
261
|
+
constructor();
|
|
262
|
+
setPath(path: string): this;
|
|
263
|
+
}
|
|
264
|
+
declare class EnumFactory extends AstFactory<Enum> {
|
|
265
|
+
name?: string;
|
|
266
|
+
comments: string[];
|
|
267
|
+
fields: EnumFieldFactory[];
|
|
268
|
+
attributes: DataModelAttributeFactory[];
|
|
269
|
+
constructor();
|
|
270
|
+
addField(builder: (b: EnumFieldFactory) => EnumFieldFactory): this;
|
|
271
|
+
addAttribute(builder: (b: DataModelAttributeFactory) => DataModelAttributeFactory): this;
|
|
272
|
+
setName(name: string): this;
|
|
273
|
+
}
|
|
274
|
+
declare class EnumFieldFactory extends AstFactory<EnumField> {
|
|
275
|
+
name?: RegularIDWithTypeNames;
|
|
276
|
+
comments: string[];
|
|
277
|
+
attributes: DataFieldAttributeFactory[];
|
|
278
|
+
constructor();
|
|
279
|
+
setName(name: RegularIDWithTypeNames): this;
|
|
280
|
+
addAttribute(builder: (b: DataFieldAttributeFactory) => DataFieldAttributeFactory): this;
|
|
281
|
+
addComment(comment: string): this;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export { ArgumentFactory, ArrayExprFactory, AstFactory, AttributeArgFactory, AttributeFactory, AttributeParamFactory, AttributeParamTypeFactory, BinaryExprFactory, BooleanLiteralFactory, type ContainerProps, DataFieldAttributeFactory, DataFieldFactory, DataFieldTypeFactory, DataModelAttributeFactory, DataModelFactory, DeclarationBuilder, EnumFactory, EnumFieldFactory, ExpressionBuilder, FieldInitializerFactory, InternalAttributeFactory, InvocationExprFactory, MemberAccessExprFactory, ModelFactory, ModelImportFactory, NullExprFactory, NumberLiteralFactory, ObjectExprFactory, ReferenceArgFactory, ReferenceExprFactory, StringLiteralFactory, ThisExprFactory, UnaryExprFactory, UnsupportedFieldTypeFactory };
|