@zenstackhq/language 3.0.0-alpha.12 → 3.0.0-alpha.14

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/utils.js ADDED
@@ -0,0 +1,1461 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
4
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
5
+ }) : x)(function(x) {
6
+ if (typeof require !== "undefined") return require.apply(this, arguments);
7
+ throw Error('Dynamic require of "' + x + '" is not supported');
8
+ });
9
+
10
+ // src/utils.ts
11
+ import { invariant } from "@zenstackhq/common-helpers";
12
+ import { AstUtils, URI } from "langium";
13
+ import fs from "fs";
14
+ import path from "path";
15
+
16
+ // src/constants.ts
17
+ var STD_LIB_MODULE_NAME = "stdlib.zmodel";
18
+
19
+ // src/generated/ast.ts
20
+ import * as langium from "langium";
21
+ var AbstractDeclaration = "AbstractDeclaration";
22
+ var ConfigExpr = "ConfigExpr";
23
+ var Expression = "Expression";
24
+ function isExpression(item) {
25
+ return reflection.isInstance(item, Expression);
26
+ }
27
+ __name(isExpression, "isExpression");
28
+ var LiteralExpr = "LiteralExpr";
29
+ function isLiteralExpr(item) {
30
+ return reflection.isInstance(item, LiteralExpr);
31
+ }
32
+ __name(isLiteralExpr, "isLiteralExpr");
33
+ var MemberAccessTarget = "MemberAccessTarget";
34
+ var ReferenceTarget = "ReferenceTarget";
35
+ var TypeDeclaration = "TypeDeclaration";
36
+ var Argument = "Argument";
37
+ var ArrayExpr = "ArrayExpr";
38
+ function isArrayExpr(item) {
39
+ return reflection.isInstance(item, ArrayExpr);
40
+ }
41
+ __name(isArrayExpr, "isArrayExpr");
42
+ var Attribute = "Attribute";
43
+ var AttributeArg = "AttributeArg";
44
+ var AttributeParam = "AttributeParam";
45
+ var AttributeParamType = "AttributeParamType";
46
+ var BinaryExpr = "BinaryExpr";
47
+ function isBinaryExpr(item) {
48
+ return reflection.isInstance(item, BinaryExpr);
49
+ }
50
+ __name(isBinaryExpr, "isBinaryExpr");
51
+ var BooleanLiteral = "BooleanLiteral";
52
+ var ConfigArrayExpr = "ConfigArrayExpr";
53
+ function isConfigArrayExpr(item) {
54
+ return reflection.isInstance(item, ConfigArrayExpr);
55
+ }
56
+ __name(isConfigArrayExpr, "isConfigArrayExpr");
57
+ var ConfigField = "ConfigField";
58
+ var ConfigInvocationArg = "ConfigInvocationArg";
59
+ var ConfigInvocationExpr = "ConfigInvocationExpr";
60
+ var DataField = "DataField";
61
+ function isDataField(item) {
62
+ return reflection.isInstance(item, DataField);
63
+ }
64
+ __name(isDataField, "isDataField");
65
+ var DataFieldAttribute = "DataFieldAttribute";
66
+ var DataFieldType = "DataFieldType";
67
+ var DataModel = "DataModel";
68
+ function isDataModel(item) {
69
+ return reflection.isInstance(item, DataModel);
70
+ }
71
+ __name(isDataModel, "isDataModel");
72
+ var DataModelAttribute = "DataModelAttribute";
73
+ var DataSource = "DataSource";
74
+ var Enum = "Enum";
75
+ var EnumField = "EnumField";
76
+ function isEnumField(item) {
77
+ return reflection.isInstance(item, EnumField);
78
+ }
79
+ __name(isEnumField, "isEnumField");
80
+ var FieldInitializer = "FieldInitializer";
81
+ var FunctionDecl = "FunctionDecl";
82
+ var FunctionParam = "FunctionParam";
83
+ var FunctionParamType = "FunctionParamType";
84
+ var GeneratorDecl = "GeneratorDecl";
85
+ var InternalAttribute = "InternalAttribute";
86
+ var InvocationExpr = "InvocationExpr";
87
+ function isInvocationExpr(item) {
88
+ return reflection.isInstance(item, InvocationExpr);
89
+ }
90
+ __name(isInvocationExpr, "isInvocationExpr");
91
+ var MemberAccessExpr = "MemberAccessExpr";
92
+ function isMemberAccessExpr(item) {
93
+ return reflection.isInstance(item, MemberAccessExpr);
94
+ }
95
+ __name(isMemberAccessExpr, "isMemberAccessExpr");
96
+ var Model = "Model";
97
+ function isModel(item) {
98
+ return reflection.isInstance(item, Model);
99
+ }
100
+ __name(isModel, "isModel");
101
+ var ModelImport = "ModelImport";
102
+ var NullExpr = "NullExpr";
103
+ var NumberLiteral = "NumberLiteral";
104
+ var ObjectExpr = "ObjectExpr";
105
+ function isObjectExpr(item) {
106
+ return reflection.isInstance(item, ObjectExpr);
107
+ }
108
+ __name(isObjectExpr, "isObjectExpr");
109
+ var Plugin = "Plugin";
110
+ var PluginField = "PluginField";
111
+ var Procedure = "Procedure";
112
+ var ProcedureParam = "ProcedureParam";
113
+ var ReferenceArg = "ReferenceArg";
114
+ var ReferenceExpr = "ReferenceExpr";
115
+ function isReferenceExpr(item) {
116
+ return reflection.isInstance(item, ReferenceExpr);
117
+ }
118
+ __name(isReferenceExpr, "isReferenceExpr");
119
+ var StringLiteral = "StringLiteral";
120
+ function isStringLiteral(item) {
121
+ return reflection.isInstance(item, StringLiteral);
122
+ }
123
+ __name(isStringLiteral, "isStringLiteral");
124
+ var ThisExpr = "ThisExpr";
125
+ var TypeDef = "TypeDef";
126
+ function isTypeDef(item) {
127
+ return reflection.isInstance(item, TypeDef);
128
+ }
129
+ __name(isTypeDef, "isTypeDef");
130
+ var UnaryExpr = "UnaryExpr";
131
+ var UnsupportedFieldType = "UnsupportedFieldType";
132
+ var ZModelAstReflection = class extends langium.AbstractAstReflection {
133
+ static {
134
+ __name(this, "ZModelAstReflection");
135
+ }
136
+ getAllTypes() {
137
+ return [
138
+ AbstractDeclaration,
139
+ Argument,
140
+ ArrayExpr,
141
+ Attribute,
142
+ AttributeArg,
143
+ AttributeParam,
144
+ AttributeParamType,
145
+ BinaryExpr,
146
+ BooleanLiteral,
147
+ ConfigArrayExpr,
148
+ ConfigExpr,
149
+ ConfigField,
150
+ ConfigInvocationArg,
151
+ ConfigInvocationExpr,
152
+ DataField,
153
+ DataFieldAttribute,
154
+ DataFieldType,
155
+ DataModel,
156
+ DataModelAttribute,
157
+ DataSource,
158
+ Enum,
159
+ EnumField,
160
+ Expression,
161
+ FieldInitializer,
162
+ FunctionDecl,
163
+ FunctionParam,
164
+ FunctionParamType,
165
+ GeneratorDecl,
166
+ InternalAttribute,
167
+ InvocationExpr,
168
+ LiteralExpr,
169
+ MemberAccessExpr,
170
+ MemberAccessTarget,
171
+ Model,
172
+ ModelImport,
173
+ NullExpr,
174
+ NumberLiteral,
175
+ ObjectExpr,
176
+ Plugin,
177
+ PluginField,
178
+ Procedure,
179
+ ProcedureParam,
180
+ ReferenceArg,
181
+ ReferenceExpr,
182
+ ReferenceTarget,
183
+ StringLiteral,
184
+ ThisExpr,
185
+ TypeDeclaration,
186
+ TypeDef,
187
+ UnaryExpr,
188
+ UnsupportedFieldType
189
+ ];
190
+ }
191
+ computeIsSubtype(subtype, supertype) {
192
+ switch (subtype) {
193
+ case ArrayExpr:
194
+ case BinaryExpr:
195
+ case MemberAccessExpr:
196
+ case NullExpr:
197
+ case ObjectExpr:
198
+ case ReferenceExpr:
199
+ case ThisExpr:
200
+ case UnaryExpr: {
201
+ return this.isSubtype(Expression, supertype);
202
+ }
203
+ case Attribute:
204
+ case DataSource:
205
+ case FunctionDecl:
206
+ case GeneratorDecl:
207
+ case Plugin:
208
+ case Procedure: {
209
+ return this.isSubtype(AbstractDeclaration, supertype);
210
+ }
211
+ case BooleanLiteral:
212
+ case NumberLiteral:
213
+ case StringLiteral: {
214
+ return this.isSubtype(LiteralExpr, supertype);
215
+ }
216
+ case ConfigArrayExpr: {
217
+ return this.isSubtype(ConfigExpr, supertype);
218
+ }
219
+ case DataField: {
220
+ return this.isSubtype(MemberAccessTarget, supertype) || this.isSubtype(ReferenceTarget, supertype);
221
+ }
222
+ case DataModel:
223
+ case Enum:
224
+ case TypeDef: {
225
+ return this.isSubtype(AbstractDeclaration, supertype) || this.isSubtype(TypeDeclaration, supertype);
226
+ }
227
+ case EnumField:
228
+ case FunctionParam: {
229
+ return this.isSubtype(ReferenceTarget, supertype);
230
+ }
231
+ case InvocationExpr:
232
+ case LiteralExpr: {
233
+ return this.isSubtype(ConfigExpr, supertype) || this.isSubtype(Expression, supertype);
234
+ }
235
+ default: {
236
+ return false;
237
+ }
238
+ }
239
+ }
240
+ getReferenceType(refInfo) {
241
+ const referenceId = `${refInfo.container.$type}:${refInfo.property}`;
242
+ switch (referenceId) {
243
+ case "AttributeParamType:reference":
244
+ case "DataFieldType:reference":
245
+ case "FunctionParamType:reference": {
246
+ return TypeDeclaration;
247
+ }
248
+ case "DataFieldAttribute:decl":
249
+ case "DataModelAttribute:decl":
250
+ case "InternalAttribute:decl": {
251
+ return Attribute;
252
+ }
253
+ case "DataModel:baseModel": {
254
+ return DataModel;
255
+ }
256
+ case "DataModel:mixins":
257
+ case "TypeDef:mixins": {
258
+ return TypeDef;
259
+ }
260
+ case "InvocationExpr:function": {
261
+ return FunctionDecl;
262
+ }
263
+ case "MemberAccessExpr:member": {
264
+ return MemberAccessTarget;
265
+ }
266
+ case "ReferenceExpr:target": {
267
+ return ReferenceTarget;
268
+ }
269
+ default: {
270
+ throw new Error(`${referenceId} is not a valid reference id.`);
271
+ }
272
+ }
273
+ }
274
+ getTypeMetaData(type) {
275
+ switch (type) {
276
+ case Argument: {
277
+ return {
278
+ name: Argument,
279
+ properties: [
280
+ {
281
+ name: "value"
282
+ }
283
+ ]
284
+ };
285
+ }
286
+ case ArrayExpr: {
287
+ return {
288
+ name: ArrayExpr,
289
+ properties: [
290
+ {
291
+ name: "items",
292
+ defaultValue: []
293
+ }
294
+ ]
295
+ };
296
+ }
297
+ case Attribute: {
298
+ return {
299
+ name: Attribute,
300
+ properties: [
301
+ {
302
+ name: "attributes",
303
+ defaultValue: []
304
+ },
305
+ {
306
+ name: "comments",
307
+ defaultValue: []
308
+ },
309
+ {
310
+ name: "name"
311
+ },
312
+ {
313
+ name: "params",
314
+ defaultValue: []
315
+ }
316
+ ]
317
+ };
318
+ }
319
+ case AttributeArg: {
320
+ return {
321
+ name: AttributeArg,
322
+ properties: [
323
+ {
324
+ name: "name"
325
+ },
326
+ {
327
+ name: "value"
328
+ }
329
+ ]
330
+ };
331
+ }
332
+ case AttributeParam: {
333
+ return {
334
+ name: AttributeParam,
335
+ properties: [
336
+ {
337
+ name: "attributes",
338
+ defaultValue: []
339
+ },
340
+ {
341
+ name: "comments",
342
+ defaultValue: []
343
+ },
344
+ {
345
+ name: "default",
346
+ defaultValue: false
347
+ },
348
+ {
349
+ name: "name"
350
+ },
351
+ {
352
+ name: "type"
353
+ }
354
+ ]
355
+ };
356
+ }
357
+ case AttributeParamType: {
358
+ return {
359
+ name: AttributeParamType,
360
+ properties: [
361
+ {
362
+ name: "array",
363
+ defaultValue: false
364
+ },
365
+ {
366
+ name: "optional",
367
+ defaultValue: false
368
+ },
369
+ {
370
+ name: "reference"
371
+ },
372
+ {
373
+ name: "type"
374
+ }
375
+ ]
376
+ };
377
+ }
378
+ case BinaryExpr: {
379
+ return {
380
+ name: BinaryExpr,
381
+ properties: [
382
+ {
383
+ name: "left"
384
+ },
385
+ {
386
+ name: "operator"
387
+ },
388
+ {
389
+ name: "right"
390
+ }
391
+ ]
392
+ };
393
+ }
394
+ case BooleanLiteral: {
395
+ return {
396
+ name: BooleanLiteral,
397
+ properties: [
398
+ {
399
+ name: "value"
400
+ }
401
+ ]
402
+ };
403
+ }
404
+ case ConfigArrayExpr: {
405
+ return {
406
+ name: ConfigArrayExpr,
407
+ properties: [
408
+ {
409
+ name: "items",
410
+ defaultValue: []
411
+ }
412
+ ]
413
+ };
414
+ }
415
+ case ConfigField: {
416
+ return {
417
+ name: ConfigField,
418
+ properties: [
419
+ {
420
+ name: "name"
421
+ },
422
+ {
423
+ name: "value"
424
+ }
425
+ ]
426
+ };
427
+ }
428
+ case ConfigInvocationArg: {
429
+ return {
430
+ name: ConfigInvocationArg,
431
+ properties: [
432
+ {
433
+ name: "name"
434
+ },
435
+ {
436
+ name: "value"
437
+ }
438
+ ]
439
+ };
440
+ }
441
+ case ConfigInvocationExpr: {
442
+ return {
443
+ name: ConfigInvocationExpr,
444
+ properties: [
445
+ {
446
+ name: "args",
447
+ defaultValue: []
448
+ },
449
+ {
450
+ name: "name"
451
+ }
452
+ ]
453
+ };
454
+ }
455
+ case DataField: {
456
+ return {
457
+ name: DataField,
458
+ properties: [
459
+ {
460
+ name: "attributes",
461
+ defaultValue: []
462
+ },
463
+ {
464
+ name: "comments",
465
+ defaultValue: []
466
+ },
467
+ {
468
+ name: "name"
469
+ },
470
+ {
471
+ name: "type"
472
+ }
473
+ ]
474
+ };
475
+ }
476
+ case DataFieldAttribute: {
477
+ return {
478
+ name: DataFieldAttribute,
479
+ properties: [
480
+ {
481
+ name: "args",
482
+ defaultValue: []
483
+ },
484
+ {
485
+ name: "decl"
486
+ }
487
+ ]
488
+ };
489
+ }
490
+ case DataFieldType: {
491
+ return {
492
+ name: DataFieldType,
493
+ properties: [
494
+ {
495
+ name: "array",
496
+ defaultValue: false
497
+ },
498
+ {
499
+ name: "optional",
500
+ defaultValue: false
501
+ },
502
+ {
503
+ name: "reference"
504
+ },
505
+ {
506
+ name: "type"
507
+ },
508
+ {
509
+ name: "unsupported"
510
+ }
511
+ ]
512
+ };
513
+ }
514
+ case DataModel: {
515
+ return {
516
+ name: DataModel,
517
+ properties: [
518
+ {
519
+ name: "attributes",
520
+ defaultValue: []
521
+ },
522
+ {
523
+ name: "baseModel"
524
+ },
525
+ {
526
+ name: "comments",
527
+ defaultValue: []
528
+ },
529
+ {
530
+ name: "fields",
531
+ defaultValue: []
532
+ },
533
+ {
534
+ name: "isView",
535
+ defaultValue: false
536
+ },
537
+ {
538
+ name: "mixins",
539
+ defaultValue: []
540
+ },
541
+ {
542
+ name: "name"
543
+ }
544
+ ]
545
+ };
546
+ }
547
+ case DataModelAttribute: {
548
+ return {
549
+ name: DataModelAttribute,
550
+ properties: [
551
+ {
552
+ name: "args",
553
+ defaultValue: []
554
+ },
555
+ {
556
+ name: "decl"
557
+ }
558
+ ]
559
+ };
560
+ }
561
+ case DataSource: {
562
+ return {
563
+ name: DataSource,
564
+ properties: [
565
+ {
566
+ name: "fields",
567
+ defaultValue: []
568
+ },
569
+ {
570
+ name: "name"
571
+ }
572
+ ]
573
+ };
574
+ }
575
+ case Enum: {
576
+ return {
577
+ name: Enum,
578
+ properties: [
579
+ {
580
+ name: "attributes",
581
+ defaultValue: []
582
+ },
583
+ {
584
+ name: "comments",
585
+ defaultValue: []
586
+ },
587
+ {
588
+ name: "fields",
589
+ defaultValue: []
590
+ },
591
+ {
592
+ name: "name"
593
+ }
594
+ ]
595
+ };
596
+ }
597
+ case EnumField: {
598
+ return {
599
+ name: EnumField,
600
+ properties: [
601
+ {
602
+ name: "attributes",
603
+ defaultValue: []
604
+ },
605
+ {
606
+ name: "comments",
607
+ defaultValue: []
608
+ },
609
+ {
610
+ name: "name"
611
+ }
612
+ ]
613
+ };
614
+ }
615
+ case FieldInitializer: {
616
+ return {
617
+ name: FieldInitializer,
618
+ properties: [
619
+ {
620
+ name: "name"
621
+ },
622
+ {
623
+ name: "value"
624
+ }
625
+ ]
626
+ };
627
+ }
628
+ case FunctionDecl: {
629
+ return {
630
+ name: FunctionDecl,
631
+ properties: [
632
+ {
633
+ name: "attributes",
634
+ defaultValue: []
635
+ },
636
+ {
637
+ name: "expression"
638
+ },
639
+ {
640
+ name: "name"
641
+ },
642
+ {
643
+ name: "params",
644
+ defaultValue: []
645
+ },
646
+ {
647
+ name: "returnType"
648
+ }
649
+ ]
650
+ };
651
+ }
652
+ case FunctionParam: {
653
+ return {
654
+ name: FunctionParam,
655
+ properties: [
656
+ {
657
+ name: "name"
658
+ },
659
+ {
660
+ name: "optional",
661
+ defaultValue: false
662
+ },
663
+ {
664
+ name: "type"
665
+ }
666
+ ]
667
+ };
668
+ }
669
+ case FunctionParamType: {
670
+ return {
671
+ name: FunctionParamType,
672
+ properties: [
673
+ {
674
+ name: "array",
675
+ defaultValue: false
676
+ },
677
+ {
678
+ name: "reference"
679
+ },
680
+ {
681
+ name: "type"
682
+ }
683
+ ]
684
+ };
685
+ }
686
+ case GeneratorDecl: {
687
+ return {
688
+ name: GeneratorDecl,
689
+ properties: [
690
+ {
691
+ name: "fields",
692
+ defaultValue: []
693
+ },
694
+ {
695
+ name: "name"
696
+ }
697
+ ]
698
+ };
699
+ }
700
+ case InternalAttribute: {
701
+ return {
702
+ name: InternalAttribute,
703
+ properties: [
704
+ {
705
+ name: "args",
706
+ defaultValue: []
707
+ },
708
+ {
709
+ name: "decl"
710
+ }
711
+ ]
712
+ };
713
+ }
714
+ case InvocationExpr: {
715
+ return {
716
+ name: InvocationExpr,
717
+ properties: [
718
+ {
719
+ name: "args",
720
+ defaultValue: []
721
+ },
722
+ {
723
+ name: "function"
724
+ }
725
+ ]
726
+ };
727
+ }
728
+ case MemberAccessExpr: {
729
+ return {
730
+ name: MemberAccessExpr,
731
+ properties: [
732
+ {
733
+ name: "member"
734
+ },
735
+ {
736
+ name: "operand"
737
+ }
738
+ ]
739
+ };
740
+ }
741
+ case Model: {
742
+ return {
743
+ name: Model,
744
+ properties: [
745
+ {
746
+ name: "declarations",
747
+ defaultValue: []
748
+ },
749
+ {
750
+ name: "imports",
751
+ defaultValue: []
752
+ }
753
+ ]
754
+ };
755
+ }
756
+ case ModelImport: {
757
+ return {
758
+ name: ModelImport,
759
+ properties: [
760
+ {
761
+ name: "path"
762
+ }
763
+ ]
764
+ };
765
+ }
766
+ case NullExpr: {
767
+ return {
768
+ name: NullExpr,
769
+ properties: [
770
+ {
771
+ name: "value"
772
+ }
773
+ ]
774
+ };
775
+ }
776
+ case NumberLiteral: {
777
+ return {
778
+ name: NumberLiteral,
779
+ properties: [
780
+ {
781
+ name: "value"
782
+ }
783
+ ]
784
+ };
785
+ }
786
+ case ObjectExpr: {
787
+ return {
788
+ name: ObjectExpr,
789
+ properties: [
790
+ {
791
+ name: "fields",
792
+ defaultValue: []
793
+ }
794
+ ]
795
+ };
796
+ }
797
+ case Plugin: {
798
+ return {
799
+ name: Plugin,
800
+ properties: [
801
+ {
802
+ name: "fields",
803
+ defaultValue: []
804
+ },
805
+ {
806
+ name: "name"
807
+ }
808
+ ]
809
+ };
810
+ }
811
+ case PluginField: {
812
+ return {
813
+ name: PluginField,
814
+ properties: [
815
+ {
816
+ name: "name"
817
+ },
818
+ {
819
+ name: "value"
820
+ }
821
+ ]
822
+ };
823
+ }
824
+ case Procedure: {
825
+ return {
826
+ name: Procedure,
827
+ properties: [
828
+ {
829
+ name: "attributes",
830
+ defaultValue: []
831
+ },
832
+ {
833
+ name: "mutation",
834
+ defaultValue: false
835
+ },
836
+ {
837
+ name: "name"
838
+ },
839
+ {
840
+ name: "params",
841
+ defaultValue: []
842
+ },
843
+ {
844
+ name: "returnType"
845
+ }
846
+ ]
847
+ };
848
+ }
849
+ case ProcedureParam: {
850
+ return {
851
+ name: ProcedureParam,
852
+ properties: [
853
+ {
854
+ name: "name"
855
+ },
856
+ {
857
+ name: "optional",
858
+ defaultValue: false
859
+ },
860
+ {
861
+ name: "type"
862
+ }
863
+ ]
864
+ };
865
+ }
866
+ case ReferenceArg: {
867
+ return {
868
+ name: ReferenceArg,
869
+ properties: [
870
+ {
871
+ name: "name"
872
+ },
873
+ {
874
+ name: "value"
875
+ }
876
+ ]
877
+ };
878
+ }
879
+ case ReferenceExpr: {
880
+ return {
881
+ name: ReferenceExpr,
882
+ properties: [
883
+ {
884
+ name: "args",
885
+ defaultValue: []
886
+ },
887
+ {
888
+ name: "target"
889
+ }
890
+ ]
891
+ };
892
+ }
893
+ case StringLiteral: {
894
+ return {
895
+ name: StringLiteral,
896
+ properties: [
897
+ {
898
+ name: "value"
899
+ }
900
+ ]
901
+ };
902
+ }
903
+ case ThisExpr: {
904
+ return {
905
+ name: ThisExpr,
906
+ properties: [
907
+ {
908
+ name: "value"
909
+ }
910
+ ]
911
+ };
912
+ }
913
+ case TypeDef: {
914
+ return {
915
+ name: TypeDef,
916
+ properties: [
917
+ {
918
+ name: "attributes",
919
+ defaultValue: []
920
+ },
921
+ {
922
+ name: "comments",
923
+ defaultValue: []
924
+ },
925
+ {
926
+ name: "fields",
927
+ defaultValue: []
928
+ },
929
+ {
930
+ name: "mixins",
931
+ defaultValue: []
932
+ },
933
+ {
934
+ name: "name"
935
+ }
936
+ ]
937
+ };
938
+ }
939
+ case UnaryExpr: {
940
+ return {
941
+ name: UnaryExpr,
942
+ properties: [
943
+ {
944
+ name: "operand"
945
+ },
946
+ {
947
+ name: "operator"
948
+ }
949
+ ]
950
+ };
951
+ }
952
+ case UnsupportedFieldType: {
953
+ return {
954
+ name: UnsupportedFieldType,
955
+ properties: [
956
+ {
957
+ name: "value"
958
+ }
959
+ ]
960
+ };
961
+ }
962
+ default: {
963
+ return {
964
+ name: type,
965
+ properties: []
966
+ };
967
+ }
968
+ }
969
+ }
970
+ };
971
+ var reflection = new ZModelAstReflection();
972
+
973
+ // src/utils.ts
974
+ function hasAttribute(decl, name) {
975
+ return !!getAttribute(decl, name);
976
+ }
977
+ __name(hasAttribute, "hasAttribute");
978
+ function getAttribute(decl, name) {
979
+ return decl.attributes.find((attr) => attr.decl.$refText === name);
980
+ }
981
+ __name(getAttribute, "getAttribute");
982
+ function isFromStdlib(node) {
983
+ const model = AstUtils.getContainerOfType(node, isModel);
984
+ return !!model && !!model.$document && model.$document.uri.path.endsWith(STD_LIB_MODULE_NAME);
985
+ }
986
+ __name(isFromStdlib, "isFromStdlib");
987
+ function isAuthInvocation(node) {
988
+ return isInvocationExpr(node) && node.function.ref?.name === "auth" && isFromStdlib(node.function.ref);
989
+ }
990
+ __name(isAuthInvocation, "isAuthInvocation");
991
+ function getStringLiteral(node) {
992
+ return isStringLiteral(node) ? node.value : void 0;
993
+ }
994
+ __name(getStringLiteral, "getStringLiteral");
995
+ var isoDateTimeRegex = /^\d{4}(-\d\d(-\d\d(T\d\d:\d\d(:\d\d)?(\.\d+)?(([+-]\d\d:\d\d)|Z)?)?)?)?$/i;
996
+ function typeAssignable(destType, sourceType, sourceExpr) {
997
+ if (destType === "DateTime" && sourceType === "String" && sourceExpr && isStringLiteral(sourceExpr)) {
998
+ const literal = getStringLiteral(sourceExpr);
999
+ if (literal && isoDateTimeRegex.test(literal)) {
1000
+ sourceType = "DateTime";
1001
+ }
1002
+ }
1003
+ switch (destType) {
1004
+ case "Any":
1005
+ return true;
1006
+ case "Float":
1007
+ return sourceType === "Any" || sourceType === "Int" || sourceType === "Float";
1008
+ default:
1009
+ return sourceType === "Any" || sourceType === destType;
1010
+ }
1011
+ }
1012
+ __name(typeAssignable, "typeAssignable");
1013
+ function mapBuiltinTypeToExpressionType(type) {
1014
+ switch (type) {
1015
+ case "Any":
1016
+ case "Boolean":
1017
+ case "String":
1018
+ case "DateTime":
1019
+ case "Int":
1020
+ case "Float":
1021
+ case "Null":
1022
+ return type;
1023
+ case "BigInt":
1024
+ return "Int";
1025
+ case "Decimal":
1026
+ return "Float";
1027
+ case "Json":
1028
+ case "Bytes":
1029
+ return "Any";
1030
+ case "Object":
1031
+ return "Object";
1032
+ case "Unsupported":
1033
+ return "Unsupported";
1034
+ }
1035
+ }
1036
+ __name(mapBuiltinTypeToExpressionType, "mapBuiltinTypeToExpressionType");
1037
+ function isAuthOrAuthMemberAccess(expr) {
1038
+ return isAuthInvocation(expr) || isMemberAccessExpr(expr) && isAuthOrAuthMemberAccess(expr.operand);
1039
+ }
1040
+ __name(isAuthOrAuthMemberAccess, "isAuthOrAuthMemberAccess");
1041
+ function isEnumFieldReference(node) {
1042
+ return isReferenceExpr(node) && isEnumField(node.target.ref);
1043
+ }
1044
+ __name(isEnumFieldReference, "isEnumFieldReference");
1045
+ function isDataFieldReference(node) {
1046
+ return isReferenceExpr(node) && isDataField(node.target.ref);
1047
+ }
1048
+ __name(isDataFieldReference, "isDataFieldReference");
1049
+ function isRelationshipField(field) {
1050
+ return isDataModel(field.type.reference?.ref);
1051
+ }
1052
+ __name(isRelationshipField, "isRelationshipField");
1053
+ function isFutureExpr(node) {
1054
+ return isInvocationExpr(node) && node.function.ref?.name === "future" && isFromStdlib(node.function.ref);
1055
+ }
1056
+ __name(isFutureExpr, "isFutureExpr");
1057
+ function isDelegateModel(node) {
1058
+ return isDataModel(node) && hasAttribute(node, "@@delegate");
1059
+ }
1060
+ __name(isDelegateModel, "isDelegateModel");
1061
+ function resolved(ref) {
1062
+ if (!ref.ref) {
1063
+ throw new Error(`Reference not resolved: ${ref.$refText}`);
1064
+ }
1065
+ return ref.ref;
1066
+ }
1067
+ __name(resolved, "resolved");
1068
+ function getRecursiveBases(decl, includeDelegate = true, seen = /* @__PURE__ */ new Set()) {
1069
+ const result = [];
1070
+ if (seen.has(decl)) {
1071
+ return result;
1072
+ }
1073
+ seen.add(decl);
1074
+ decl.mixins.forEach((mixin) => {
1075
+ const baseDecl = mixin.ref;
1076
+ if (baseDecl) {
1077
+ if (!includeDelegate && isDelegateModel(baseDecl)) {
1078
+ return;
1079
+ }
1080
+ result.push(baseDecl);
1081
+ result.push(...getRecursiveBases(baseDecl, includeDelegate, seen));
1082
+ }
1083
+ });
1084
+ return result;
1085
+ }
1086
+ __name(getRecursiveBases, "getRecursiveBases");
1087
+ function getModelIdFields(model) {
1088
+ const modelsToCheck = [
1089
+ model,
1090
+ ...getRecursiveBases(model)
1091
+ ];
1092
+ for (const modelToCheck of modelsToCheck) {
1093
+ const allAttributes = getAllAttributes(modelToCheck);
1094
+ const idAttr = allAttributes.find((attr) => attr.decl.$refText === "@@id");
1095
+ if (!idAttr) {
1096
+ continue;
1097
+ }
1098
+ const fieldsArg = idAttr.args.find((a) => a.$resolvedParam?.name === "fields");
1099
+ if (!fieldsArg || !isArrayExpr(fieldsArg.value)) {
1100
+ continue;
1101
+ }
1102
+ return fieldsArg.value.items.filter((item) => isReferenceExpr(item)).map((item) => resolved(item.target));
1103
+ }
1104
+ return [];
1105
+ }
1106
+ __name(getModelIdFields, "getModelIdFields");
1107
+ function getModelUniqueFields(model) {
1108
+ const modelsToCheck = [
1109
+ model,
1110
+ ...getRecursiveBases(model)
1111
+ ];
1112
+ for (const modelToCheck of modelsToCheck) {
1113
+ const allAttributes = getAllAttributes(modelToCheck);
1114
+ const uniqueAttr = allAttributes.find((attr) => attr.decl.$refText === "@@unique");
1115
+ if (!uniqueAttr) {
1116
+ continue;
1117
+ }
1118
+ const fieldsArg = uniqueAttr.args.find((a) => a.$resolvedParam?.name === "fields");
1119
+ if (!fieldsArg || !isArrayExpr(fieldsArg.value)) {
1120
+ continue;
1121
+ }
1122
+ return fieldsArg.value.items.filter((item) => isReferenceExpr(item)).map((item) => resolved(item.target));
1123
+ }
1124
+ return [];
1125
+ }
1126
+ __name(getModelUniqueFields, "getModelUniqueFields");
1127
+ function getUniqueFields(model) {
1128
+ const uniqueAttrs = model.attributes.filter((attr) => attr.decl.ref?.name === "@@unique" || attr.decl.ref?.name === "@@id");
1129
+ return uniqueAttrs.map((uniqueAttr) => {
1130
+ const fieldsArg = uniqueAttr.args.find((a) => a.$resolvedParam?.name === "fields");
1131
+ if (!fieldsArg || !isArrayExpr(fieldsArg.value)) {
1132
+ return [];
1133
+ }
1134
+ return fieldsArg.value.items.filter((item) => isReferenceExpr(item)).map((item) => resolved(item.target));
1135
+ });
1136
+ }
1137
+ __name(getUniqueFields, "getUniqueFields");
1138
+ function findUpAst(node, predicate) {
1139
+ let curr = node;
1140
+ while (curr) {
1141
+ if (predicate(curr)) {
1142
+ return curr;
1143
+ }
1144
+ curr = curr.$container;
1145
+ }
1146
+ return void 0;
1147
+ }
1148
+ __name(findUpAst, "findUpAst");
1149
+ function getLiteral(expr) {
1150
+ switch (expr?.$type) {
1151
+ case "ObjectExpr":
1152
+ return getObjectLiteral(expr);
1153
+ case "StringLiteral":
1154
+ case "BooleanLiteral":
1155
+ return expr.value;
1156
+ case "NumberLiteral":
1157
+ return parseFloat(expr.value);
1158
+ default:
1159
+ return void 0;
1160
+ }
1161
+ }
1162
+ __name(getLiteral, "getLiteral");
1163
+ function getObjectLiteral(expr) {
1164
+ if (!expr || !isObjectExpr(expr)) {
1165
+ return void 0;
1166
+ }
1167
+ const result = {};
1168
+ for (const field of expr.fields) {
1169
+ let fieldValue;
1170
+ if (isLiteralExpr(field.value)) {
1171
+ fieldValue = getLiteral(field.value);
1172
+ } else if (isArrayExpr(field.value)) {
1173
+ fieldValue = getLiteralArray(field.value);
1174
+ } else if (isObjectExpr(field.value)) {
1175
+ fieldValue = getObjectLiteral(field.value);
1176
+ }
1177
+ if (fieldValue === void 0) {
1178
+ return void 0;
1179
+ } else {
1180
+ result[field.name] = fieldValue;
1181
+ }
1182
+ }
1183
+ return result;
1184
+ }
1185
+ __name(getObjectLiteral, "getObjectLiteral");
1186
+ function getLiteralArray(expr) {
1187
+ const arr = getArray(expr);
1188
+ if (!arr) {
1189
+ return void 0;
1190
+ }
1191
+ return arr.map((item) => isExpression(item) && getLiteral(item)).filter((v) => v !== void 0);
1192
+ }
1193
+ __name(getLiteralArray, "getLiteralArray");
1194
+ function getArray(expr) {
1195
+ return isArrayExpr(expr) || isConfigArrayExpr(expr) ? expr.items : void 0;
1196
+ }
1197
+ __name(getArray, "getArray");
1198
+ function getAttributeArgLiteral(attr, name) {
1199
+ for (const arg of attr.args) {
1200
+ if (arg.$resolvedParam?.name === name) {
1201
+ return getLiteral(arg.value);
1202
+ }
1203
+ }
1204
+ return void 0;
1205
+ }
1206
+ __name(getAttributeArgLiteral, "getAttributeArgLiteral");
1207
+ function getFunctionExpressionContext(funcDecl) {
1208
+ const funcAllowedContext = [];
1209
+ const funcAttr = funcDecl.attributes.find((attr) => attr.decl.$refText === "@@@expressionContext");
1210
+ if (funcAttr) {
1211
+ const contextArg = funcAttr.args[0]?.value;
1212
+ if (isArrayExpr(contextArg)) {
1213
+ contextArg.items.forEach((item) => {
1214
+ if (isEnumFieldReference(item)) {
1215
+ funcAllowedContext.push(item.target.$refText);
1216
+ }
1217
+ });
1218
+ }
1219
+ }
1220
+ return funcAllowedContext;
1221
+ }
1222
+ __name(getFunctionExpressionContext, "getFunctionExpressionContext");
1223
+ function getFieldReference(expr) {
1224
+ if (isReferenceExpr(expr) && isDataField(expr.target.ref)) {
1225
+ return expr.target.ref;
1226
+ } else if (isMemberAccessExpr(expr) && isDataField(expr.member.ref)) {
1227
+ return expr.member.ref;
1228
+ } else {
1229
+ return void 0;
1230
+ }
1231
+ }
1232
+ __name(getFieldReference, "getFieldReference");
1233
+ function isCheckInvocation(node) {
1234
+ return isInvocationExpr(node) && node.function.ref?.name === "check" && isFromStdlib(node.function.ref);
1235
+ }
1236
+ __name(isCheckInvocation, "isCheckInvocation");
1237
+ function resolveTransitiveImports(documents, model) {
1238
+ return resolveTransitiveImportsInternal(documents, model);
1239
+ }
1240
+ __name(resolveTransitiveImports, "resolveTransitiveImports");
1241
+ function resolveTransitiveImportsInternal(documents, model, initialModel = model, visited = /* @__PURE__ */ new Set(), models = /* @__PURE__ */ new Set()) {
1242
+ const doc = AstUtils.getDocument(model);
1243
+ const initialDoc = AstUtils.getDocument(initialModel);
1244
+ if (initialDoc.uri.fsPath.toLowerCase() !== doc.uri.fsPath.toLowerCase()) {
1245
+ models.add(model);
1246
+ }
1247
+ const normalizedPath = doc.uri.fsPath.toLowerCase();
1248
+ if (!visited.has(normalizedPath)) {
1249
+ visited.add(normalizedPath);
1250
+ for (const imp of model.imports) {
1251
+ const importedModel = resolveImport(documents, imp);
1252
+ if (importedModel) {
1253
+ resolveTransitiveImportsInternal(documents, importedModel, initialModel, visited, models);
1254
+ }
1255
+ }
1256
+ }
1257
+ return Array.from(models);
1258
+ }
1259
+ __name(resolveTransitiveImportsInternal, "resolveTransitiveImportsInternal");
1260
+ function resolveImport(documents, imp) {
1261
+ const resolvedUri = resolveImportUri(imp);
1262
+ try {
1263
+ if (resolvedUri) {
1264
+ let resolvedDocument = documents.getDocument(resolvedUri);
1265
+ if (!resolvedDocument) {
1266
+ const content = fs.readFileSync(resolvedUri.fsPath, "utf-8");
1267
+ resolvedDocument = documents.createDocument(resolvedUri, content);
1268
+ }
1269
+ const node = resolvedDocument.parseResult.value;
1270
+ if (isModel(node)) {
1271
+ return node;
1272
+ }
1273
+ }
1274
+ } catch {
1275
+ }
1276
+ return void 0;
1277
+ }
1278
+ __name(resolveImport, "resolveImport");
1279
+ function resolveImportUri(imp) {
1280
+ if (!imp.path) return void 0;
1281
+ if (!imp.path.endsWith(".zmodel")) {
1282
+ imp.path += ".zmodel";
1283
+ }
1284
+ if (!imp.path.startsWith(".") && // Respect relative paths
1285
+ !path.isAbsolute(imp.path)) {
1286
+ const contextPath = imp.$container.$document ? path.dirname(imp.$container.$document.uri.fsPath) : process.cwd();
1287
+ imp.path = findNodeModulesFile(imp.path, contextPath) ?? imp.path;
1288
+ }
1289
+ const doc = AstUtils.getDocument(imp);
1290
+ const dir = path.dirname(doc.uri.fsPath);
1291
+ return URI.file(path.resolve(dir, imp.path));
1292
+ }
1293
+ __name(resolveImportUri, "resolveImportUri");
1294
+ function findNodeModulesFile(name, cwd = process.cwd()) {
1295
+ if (!name) return void 0;
1296
+ try {
1297
+ const resolvedPath = __require.resolve(name, {
1298
+ paths: [
1299
+ cwd
1300
+ ]
1301
+ });
1302
+ return resolvedPath;
1303
+ } catch {
1304
+ return void 0;
1305
+ }
1306
+ }
1307
+ __name(findNodeModulesFile, "findNodeModulesFile");
1308
+ function getDataModelAndTypeDefs(model, includeIgnored = false) {
1309
+ const r = model.declarations.filter((d) => isDataModel(d) || isTypeDef(d));
1310
+ if (includeIgnored) {
1311
+ return r;
1312
+ } else {
1313
+ return r.filter((model2) => !hasAttribute(model2, "@@ignore"));
1314
+ }
1315
+ }
1316
+ __name(getDataModelAndTypeDefs, "getDataModelAndTypeDefs");
1317
+ function getAllDeclarationsIncludingImports(documents, model) {
1318
+ const imports = resolveTransitiveImports(documents, model);
1319
+ return model.declarations.concat(...imports.map((imp) => imp.declarations));
1320
+ }
1321
+ __name(getAllDeclarationsIncludingImports, "getAllDeclarationsIncludingImports");
1322
+ function getAuthDecl(decls) {
1323
+ let authModel = decls.find((m) => hasAttribute(m, "@@auth"));
1324
+ if (!authModel) {
1325
+ authModel = decls.find((m) => m.name === "User");
1326
+ }
1327
+ return authModel;
1328
+ }
1329
+ __name(getAuthDecl, "getAuthDecl");
1330
+ function isFutureInvocation(node) {
1331
+ return isInvocationExpr(node) && node.function.ref?.name === "future" && isFromStdlib(node.function.ref);
1332
+ }
1333
+ __name(isFutureInvocation, "isFutureInvocation");
1334
+ function isCollectionPredicate(node) {
1335
+ return isBinaryExpr(node) && [
1336
+ "?",
1337
+ "!",
1338
+ "^"
1339
+ ].includes(node.operator);
1340
+ }
1341
+ __name(isCollectionPredicate, "isCollectionPredicate");
1342
+ function getAllLoadedDataModelsAndTypeDefs(langiumDocuments) {
1343
+ return langiumDocuments.all.map((doc) => doc.parseResult.value).flatMap((model) => model.declarations.filter((d) => isDataModel(d) || isTypeDef(d))).toArray();
1344
+ }
1345
+ __name(getAllLoadedDataModelsAndTypeDefs, "getAllLoadedDataModelsAndTypeDefs");
1346
+ function getAllDataModelsIncludingImports(documents, model) {
1347
+ return getAllDeclarationsIncludingImports(documents, model).filter(isDataModel);
1348
+ }
1349
+ __name(getAllDataModelsIncludingImports, "getAllDataModelsIncludingImports");
1350
+ function getAllLoadedAndReachableDataModelsAndTypeDefs(langiumDocuments, fromModel) {
1351
+ const allDataModels = getAllLoadedDataModelsAndTypeDefs(langiumDocuments);
1352
+ if (fromModel) {
1353
+ const model = AstUtils.getContainerOfType(fromModel, isModel);
1354
+ if (model) {
1355
+ const transitiveDataModels = getAllDataModelsIncludingImports(langiumDocuments, model);
1356
+ transitiveDataModels.forEach((dm) => {
1357
+ if (!allDataModels.includes(dm)) {
1358
+ allDataModels.push(dm);
1359
+ }
1360
+ });
1361
+ }
1362
+ }
1363
+ return allDataModels;
1364
+ }
1365
+ __name(getAllLoadedAndReachableDataModelsAndTypeDefs, "getAllLoadedAndReachableDataModelsAndTypeDefs");
1366
+ function getContainingDataModel(node) {
1367
+ let curr = node.$container;
1368
+ while (curr) {
1369
+ if (isDataModel(curr)) {
1370
+ return curr;
1371
+ }
1372
+ curr = curr.$container;
1373
+ }
1374
+ return void 0;
1375
+ }
1376
+ __name(getContainingDataModel, "getContainingDataModel");
1377
+ function isMemberContainer(node) {
1378
+ return isDataModel(node) || isTypeDef(node);
1379
+ }
1380
+ __name(isMemberContainer, "isMemberContainer");
1381
+ function getAllFields(decl, includeIgnored = false, seen = /* @__PURE__ */ new Set()) {
1382
+ if (seen.has(decl)) {
1383
+ return [];
1384
+ }
1385
+ seen.add(decl);
1386
+ const fields = [];
1387
+ for (const mixin of decl.mixins) {
1388
+ invariant(mixin.ref, `Mixin ${mixin.$refText} is not resolved`);
1389
+ fields.push(...getAllFields(mixin.ref, includeIgnored, seen));
1390
+ }
1391
+ if (isDataModel(decl) && decl.baseModel) {
1392
+ invariant(decl.baseModel.ref, `Base model ${decl.baseModel.$refText} is not resolved`);
1393
+ fields.push(...getAllFields(decl.baseModel.ref, includeIgnored, seen));
1394
+ }
1395
+ fields.push(...decl.fields.filter((f) => includeIgnored || !hasAttribute(f, "@ignore")));
1396
+ return fields;
1397
+ }
1398
+ __name(getAllFields, "getAllFields");
1399
+ function getAllAttributes(decl, seen = /* @__PURE__ */ new Set()) {
1400
+ if (seen.has(decl)) {
1401
+ return [];
1402
+ }
1403
+ seen.add(decl);
1404
+ const attributes = [];
1405
+ for (const mixin of decl.mixins) {
1406
+ invariant(mixin.ref, `Mixin ${mixin.$refText} is not resolved`);
1407
+ attributes.push(...getAllAttributes(mixin.ref, seen));
1408
+ }
1409
+ if (isDataModel(decl) && decl.baseModel) {
1410
+ invariant(decl.baseModel.ref, `Base model ${decl.baseModel.$refText} is not resolved`);
1411
+ attributes.push(...getAllAttributes(decl.baseModel.ref, seen));
1412
+ }
1413
+ attributes.push(...decl.attributes);
1414
+ return attributes;
1415
+ }
1416
+ __name(getAllAttributes, "getAllAttributes");
1417
+ export {
1418
+ findNodeModulesFile,
1419
+ findUpAst,
1420
+ getAllAttributes,
1421
+ getAllDataModelsIncludingImports,
1422
+ getAllDeclarationsIncludingImports,
1423
+ getAllFields,
1424
+ getAllLoadedAndReachableDataModelsAndTypeDefs,
1425
+ getAllLoadedDataModelsAndTypeDefs,
1426
+ getAttribute,
1427
+ getAttributeArgLiteral,
1428
+ getAuthDecl,
1429
+ getContainingDataModel,
1430
+ getDataModelAndTypeDefs,
1431
+ getFieldReference,
1432
+ getFunctionExpressionContext,
1433
+ getLiteral,
1434
+ getLiteralArray,
1435
+ getModelIdFields,
1436
+ getModelUniqueFields,
1437
+ getObjectLiteral,
1438
+ getRecursiveBases,
1439
+ getStringLiteral,
1440
+ getUniqueFields,
1441
+ hasAttribute,
1442
+ isAuthInvocation,
1443
+ isAuthOrAuthMemberAccess,
1444
+ isCheckInvocation,
1445
+ isCollectionPredicate,
1446
+ isDataFieldReference,
1447
+ isDelegateModel,
1448
+ isEnumFieldReference,
1449
+ isFromStdlib,
1450
+ isFutureExpr,
1451
+ isFutureInvocation,
1452
+ isMemberContainer,
1453
+ isRelationshipField,
1454
+ mapBuiltinTypeToExpressionType,
1455
+ resolveImport,
1456
+ resolveImportUri,
1457
+ resolveTransitiveImports,
1458
+ resolved,
1459
+ typeAssignable
1460
+ };
1461
+ //# sourceMappingURL=utils.js.map