@zenstackhq/language 3.8.0-beta.2 → 3.8.0-beta.3

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.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { A as InternalAttribute, C as EnumField, F as Model, G as ReferenceExpr, I as ModelImport, J as ThisExpr, L as NullExpr, N as MemberAccessExpr, Q as UnsupportedFieldType, R as NumberLiteral, S as Enum, T as FieldInitializer, W as ReferenceArg, Z as UnaryExpr, _ as DataFieldAttribute, a as AttributeArg, b as DataModelAttribute, c as BinaryExpr, g as DataField, i as Attribute, j as InvocationExpr, l as BooleanLiteral, n as Argument, o as AttributeParam, q as StringLiteral, r as ArrayExpr, s as AttributeParamType, v as DataFieldType, y as DataModel, z as ObjectExpr } from "./ast-DEfhnj8j.mjs";
1
+ import { A as InternalAttribute, C as EnumField, F as Model, G as ReferenceExpr, I as ModelImport, J as ThisExpr, L as NullExpr, N as MemberAccessExpr, Q as UnsupportedFieldType, R as NumberLiteral, S as Enum, T as FieldInitializer, W as ReferenceArg, Z as UnaryExpr, _ as DataFieldAttribute, a as AttributeArg, b as DataModelAttribute, c as BinaryExpr, g as DataField, i as Attribute, j as InvocationExpr, l as BooleanLiteral, n as Argument, o as AttributeParam, q as StringLiteral, r as ArrayExpr, s as AttributeParamType, v as DataFieldType, y as DataModel, z as ObjectExpr } from "./ast-Z-Y9-aOU.mjs";
2
2
  import "./ast.mjs";
3
3
  //#region src/factory/ast-factory.ts
4
4
  var AstFactory = class AstFactory {
@@ -30,7 +30,7 @@ var AstFactory = class AstFactory {
30
30
  var ThisExprFactory = class extends AstFactory {
31
31
  constructor() {
32
32
  super({
33
- type: ThisExpr,
33
+ type: ThisExpr.$type,
34
34
  node: { value: "this" }
35
35
  });
36
36
  }
@@ -38,7 +38,7 @@ var ThisExprFactory = class extends AstFactory {
38
38
  var NullExprFactory = class extends AstFactory {
39
39
  constructor() {
40
40
  super({
41
- type: NullExpr,
41
+ type: NullExpr.$type,
42
42
  node: { value: "null" }
43
43
  });
44
44
  }
@@ -46,7 +46,7 @@ var NullExprFactory = class extends AstFactory {
46
46
  var NumberLiteralFactory = class extends AstFactory {
47
47
  value;
48
48
  constructor() {
49
- super({ type: NumberLiteral });
49
+ super({ type: NumberLiteral.$type });
50
50
  }
51
51
  setValue(value) {
52
52
  this.value = value;
@@ -57,7 +57,7 @@ var NumberLiteralFactory = class extends AstFactory {
57
57
  var StringLiteralFactory = class extends AstFactory {
58
58
  value;
59
59
  constructor() {
60
- super({ type: StringLiteral });
60
+ super({ type: StringLiteral.$type });
61
61
  }
62
62
  setValue(value) {
63
63
  this.value = value;
@@ -68,7 +68,7 @@ var StringLiteralFactory = class extends AstFactory {
68
68
  var BooleanLiteralFactory = class extends AstFactory {
69
69
  value;
70
70
  constructor() {
71
- super({ type: BooleanLiteral });
71
+ super({ type: BooleanLiteral.$type });
72
72
  }
73
73
  setValue(value) {
74
74
  this.value = value;
@@ -120,7 +120,7 @@ var UnaryExprFactory = class extends AstFactory {
120
120
  operand;
121
121
  constructor() {
122
122
  super({
123
- type: UnaryExpr,
123
+ type: UnaryExpr.$type,
124
124
  node: { operator: "!" }
125
125
  });
126
126
  }
@@ -135,7 +135,7 @@ var ReferenceExprFactory = class extends AstFactory {
135
135
  args = [];
136
136
  constructor() {
137
137
  super({
138
- type: ReferenceExpr,
138
+ type: ReferenceExpr.$type,
139
139
  node: { args: [] }
140
140
  });
141
141
  }
@@ -159,7 +159,7 @@ var ReferenceArgFactory = class extends AstFactory {
159
159
  name;
160
160
  value;
161
161
  constructor() {
162
- super({ type: ReferenceArg });
162
+ super({ type: ReferenceArg.$type });
163
163
  }
164
164
  setName(name) {
165
165
  this.name = name;
@@ -176,7 +176,7 @@ var MemberAccessExprFactory = class extends AstFactory {
176
176
  member;
177
177
  operand;
178
178
  constructor() {
179
- super({ type: MemberAccessExpr });
179
+ super({ type: MemberAccessExpr.$type });
180
180
  }
181
181
  setMember(target) {
182
182
  this.member = target;
@@ -193,7 +193,7 @@ var ObjectExprFactory = class extends AstFactory {
193
193
  fields = [];
194
194
  constructor() {
195
195
  super({
196
- type: ObjectExpr,
196
+ type: ObjectExpr.$type,
197
197
  node: { fields: [] }
198
198
  });
199
199
  }
@@ -207,7 +207,7 @@ var FieldInitializerFactory = class extends AstFactory {
207
207
  name;
208
208
  value;
209
209
  constructor() {
210
- super({ type: FieldInitializer });
210
+ super({ type: FieldInitializer.$type });
211
211
  }
212
212
  setName(name) {
213
213
  this.name = name;
@@ -225,7 +225,7 @@ var InvocationExprFactory = class extends AstFactory {
225
225
  function;
226
226
  constructor() {
227
227
  super({
228
- type: InvocationExpr,
228
+ type: InvocationExpr.$type,
229
229
  node: { args: [] }
230
230
  });
231
231
  }
@@ -246,7 +246,7 @@ var InvocationExprFactory = class extends AstFactory {
246
246
  var ArgumentFactory = class extends AstFactory {
247
247
  value;
248
248
  constructor() {
249
- super({ type: Argument });
249
+ super({ type: Argument.$type });
250
250
  }
251
251
  setValue(builder) {
252
252
  this.value = builder(ExpressionBuilder());
@@ -258,7 +258,7 @@ var ArrayExprFactory = class extends AstFactory {
258
258
  items = [];
259
259
  constructor() {
260
260
  super({
261
- type: ArrayExpr,
261
+ type: ArrayExpr.$type,
262
262
  node: { items: [] }
263
263
  });
264
264
  }
@@ -273,7 +273,7 @@ var BinaryExprFactory = class extends AstFactory {
273
273
  right;
274
274
  left;
275
275
  constructor() {
276
- super({ type: BinaryExpr });
276
+ super({ type: BinaryExpr.$type });
277
277
  }
278
278
  setOperator(operator) {
279
279
  this.operator = operator;
@@ -298,7 +298,7 @@ var DataFieldAttributeFactory = class extends AstFactory {
298
298
  decl;
299
299
  constructor() {
300
300
  super({
301
- type: DataFieldAttribute,
301
+ type: DataFieldAttribute.$type,
302
302
  node: { args: [] }
303
303
  });
304
304
  }
@@ -324,7 +324,7 @@ var DataModelAttributeFactory = class extends AstFactory {
324
324
  decl;
325
325
  constructor() {
326
326
  super({
327
- type: DataModelAttribute,
327
+ type: DataModelAttribute.$type,
328
328
  node: { args: [] }
329
329
  });
330
330
  }
@@ -349,7 +349,7 @@ var AttributeArgFactory = class extends AstFactory {
349
349
  name = "";
350
350
  value;
351
351
  constructor() {
352
- super({ type: AttributeArg });
352
+ super({ type: AttributeArg.$type });
353
353
  }
354
354
  setName(name) {
355
355
  this.name = name;
@@ -367,7 +367,7 @@ var InternalAttributeFactory = class extends AstFactory {
367
367
  args = [];
368
368
  constructor() {
369
369
  super({
370
- type: InternalAttribute,
370
+ type: InternalAttribute.$type,
371
371
  node: { args: [] }
372
372
  });
373
373
  }
@@ -395,7 +395,7 @@ var AttributeParamFactory = class extends AstFactory {
395
395
  type;
396
396
  constructor() {
397
397
  super({
398
- type: AttributeParam,
398
+ type: AttributeParam.$type,
399
399
  node: {
400
400
  comments: [],
401
401
  attributes: []
@@ -434,7 +434,7 @@ var AttributeParamTypeFactory = class extends AstFactory {
434
434
  reference;
435
435
  type;
436
436
  constructor() {
437
- super({ type: AttributeParamType });
437
+ super({ type: AttributeParamType.$type });
438
438
  }
439
439
  setArray(array) {
440
440
  this.array = array;
@@ -467,7 +467,7 @@ var AttributeFactory = class extends AstFactory {
467
467
  params = [];
468
468
  constructor() {
469
469
  super({
470
- type: Attribute,
470
+ type: Attribute.$type,
471
471
  node: {
472
472
  comments: [],
473
473
  attributes: [],
@@ -537,7 +537,7 @@ var DataModelFactory = class extends AstFactory {
537
537
  name;
538
538
  constructor() {
539
539
  super({
540
- type: DataModel,
540
+ type: DataModel.$type,
541
541
  node: {
542
542
  attributes: [],
543
543
  comments: [],
@@ -594,7 +594,7 @@ var DataFieldFactory = class extends AstFactory {
594
594
  type;
595
595
  constructor() {
596
596
  super({
597
- type: DataField,
597
+ type: DataField.$type,
598
598
  node: {
599
599
  attributes: [],
600
600
  comments: []
@@ -636,7 +636,7 @@ var DataFieldTypeFactory = class extends AstFactory {
636
636
  type;
637
637
  unsupported;
638
638
  constructor() {
639
- super({ type: DataFieldType });
639
+ super({ type: DataFieldType.$type });
640
640
  }
641
641
  setArray(array) {
642
642
  this.array = array;
@@ -670,7 +670,7 @@ var DataFieldTypeFactory = class extends AstFactory {
670
670
  var UnsupportedFieldTypeFactory = class extends AstFactory {
671
671
  value;
672
672
  constructor() {
673
- super({ type: UnsupportedFieldType });
673
+ super({ type: UnsupportedFieldType.$type });
674
674
  }
675
675
  setValue(builder) {
676
676
  this.value = builder(ExpressionBuilder());
@@ -683,7 +683,7 @@ var ModelFactory = class extends AstFactory {
683
683
  imports = [];
684
684
  constructor() {
685
685
  super({
686
- type: Model,
686
+ type: Model.$type,
687
687
  node: {
688
688
  declarations: [],
689
689
  imports: []
@@ -704,7 +704,7 @@ var ModelFactory = class extends AstFactory {
704
704
  var ModelImportFactory = class extends AstFactory {
705
705
  path;
706
706
  constructor() {
707
- super({ type: ModelImport });
707
+ super({ type: ModelImport.$type });
708
708
  }
709
709
  setPath(path) {
710
710
  this.path = path;
@@ -719,7 +719,7 @@ var EnumFactory = class extends AstFactory {
719
719
  attributes = [];
720
720
  constructor() {
721
721
  super({
722
- type: Enum,
722
+ type: Enum.$type,
723
723
  node: {
724
724
  comments: [],
725
725
  fields: [],
@@ -749,7 +749,7 @@ var EnumFieldFactory = class extends AstFactory {
749
749
  attributes = [];
750
750
  constructor() {
751
751
  super({
752
- type: EnumField,
752
+ type: EnumField.$type,
753
753
  node: {
754
754
  comments: [],
755
755
  attributes: []
@@ -1 +1 @@
1
- {"version":3,"file":"factory.mjs","names":[],"sources":["../src/factory/ast-factory.ts","../src/factory/primitives.ts","../src/factory/expression.ts","../src/factory/attribute.ts","../src/factory/declaration.ts"],"sourcesContent":["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","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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"}
1
+ {"version":3,"file":"factory.mjs","names":[],"sources":["../src/factory/ast-factory.ts","../src/factory/primitives.ts","../src/factory/expression.ts","../src/factory/attribute.ts","../src/factory/declaration.ts"],"sourcesContent":["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","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.$type, node: { value: 'this' } });\n }\n}\n\nexport class NullExprFactory extends AstFactory<NullExpr> {\n constructor() {\n super({ type: NullExpr.$type, node: { value: 'null' } });\n }\n}\n\nexport class NumberLiteralFactory extends AstFactory<NumberLiteral> {\n value?: number | string;\n\n constructor() {\n super({ type: NumberLiteral.$type });\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.$type });\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.$type });\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.$type, 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.$type, 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.$type });\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.$type });\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.$type, 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.$type });\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.$type, 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.$type });\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.$type, 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.$type });\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.$type, 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.$type, 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.$type });\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.$type, 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.$type,\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.$type });\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.$type, 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.$type,\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.$type, 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.$type });\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.$type });\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.$type, 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.$type });\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.$type, 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.$type, 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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"}