zenstack 0.1.47 → 0.1.50

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.
Files changed (169) hide show
  1. package/LICENSE.md +9 -0
  2. package/bin/cli +1 -1
  3. package/bundle/asset/logo-dark-256.png +0 -0
  4. package/bundle/asset/logo-dark.png +0 -0
  5. package/bundle/asset/logo-light-256.png +0 -0
  6. package/bundle/asset/logo-light.png +0 -0
  7. package/bundle/cli/index.js +6849 -0
  8. package/bundle/cli/index.js.map +7 -0
  9. package/bundle/extension.js +39 -0
  10. package/bundle/extension.js.map +7 -0
  11. package/bundle/language-server/main.js +6105 -0
  12. package/bundle/language-server/main.js.map +7 -0
  13. package/{out/generator → bundle/res}/package.template.json +0 -0
  14. package/bundle/res/stdlib.zmodel +101 -0
  15. package/{out/generator → bundle/res}/tsconfig.template.json +0 -0
  16. package/package.json +38 -14
  17. package/src/cli/cli-util.ts +71 -0
  18. package/src/cli/index.ts +182 -0
  19. package/src/extension.ts +76 -0
  20. package/src/generator/constants.ts +5 -0
  21. package/src/generator/index.ts +102 -0
  22. package/{out/generator/next-auth/index.js → src/generator/next-auth/index.ts} +49 -58
  23. package/src/generator/prisma/expression-writer.ts +360 -0
  24. package/src/generator/prisma/index.ts +35 -0
  25. package/src/generator/prisma/prisma-builder.ts +370 -0
  26. package/src/generator/prisma/query-gard-generator.ts +213 -0
  27. package/src/generator/prisma/schema-generator.ts +305 -0
  28. package/src/generator/prisma/typescript-expression-transformer.ts +108 -0
  29. package/src/generator/react-hooks/index.ts +184 -0
  30. package/src/generator/service/index.ts +110 -0
  31. package/src/generator/types.ts +17 -0
  32. package/src/generator/utils.ts +18 -0
  33. package/src/language-server/constants.ts +28 -0
  34. package/src/language-server/generated/ast.ts +616 -0
  35. package/{out/language-server/generated/grammar.js → src/language-server/generated/grammar.ts} +5 -8
  36. package/src/language-server/generated/module.ts +24 -0
  37. package/src/language-server/langium-ext.d.ts +10 -0
  38. package/src/language-server/lsp/zmodel-definition-provider.ts +87 -0
  39. package/src/language-server/main.ts +13 -0
  40. package/src/language-server/types.ts +25 -0
  41. package/src/language-server/validator/attribute-validator.ts +11 -0
  42. package/src/language-server/validator/datamodel-validator.ts +311 -0
  43. package/src/language-server/validator/datasource-validator.ts +102 -0
  44. package/src/language-server/validator/enum-validator.ts +14 -0
  45. package/src/language-server/validator/schema-validator.ts +31 -0
  46. package/src/language-server/validator/utils.ts +158 -0
  47. package/src/language-server/validator/zmodel-validator.ts +84 -0
  48. package/src/language-server/zmodel-linker.ts +446 -0
  49. package/src/language-server/zmodel-module.ts +136 -0
  50. package/src/language-server/zmodel-scope.ts +45 -0
  51. package/src/language-server/zmodel-workspace-manager.ts +23 -0
  52. package/src/language-server/zmodel.langium +197 -0
  53. package/{out/cli → src/res}/package.template.json +2 -3
  54. package/src/res/stdlib.zmodel +101 -0
  55. package/{out/cli → src/res}/tsconfig.template.json +1 -1
  56. package/src/utils/exec-utils.ts +8 -0
  57. package/src/utils/indent-string.ts +9 -0
  58. package/LICENSE +0 -21
  59. package/out/cli/cli-util.js +0 -64
  60. package/out/cli/cli-util.js.map +0 -1
  61. package/out/cli/generator.js +0 -1
  62. package/out/cli/generator.js.map +0 -1
  63. package/out/cli/index.js +0 -124
  64. package/out/cli/index.js.map +0 -1
  65. package/out/extension.js +0 -81
  66. package/out/extension.js.map +0 -1
  67. package/out/generator/constants.js +0 -9
  68. package/out/generator/constants.js.map +0 -1
  69. package/out/generator/data-server/index.js +0 -1
  70. package/out/generator/data-server/index.js.map +0 -1
  71. package/out/generator/index.js +0 -98
  72. package/out/generator/index.js.map +0 -1
  73. package/out/generator/next-auth/index.js.map +0 -1
  74. package/out/generator/prisma/expression-writer.js +0 -287
  75. package/out/generator/prisma/expression-writer.js.map +0 -1
  76. package/out/generator/prisma/index.js +0 -44
  77. package/out/generator/prisma/index.js.map +0 -1
  78. package/out/generator/prisma/plain-expression-builder.js +0 -69
  79. package/out/generator/prisma/plain-expression-builder.js.map +0 -1
  80. package/out/generator/prisma/prisma-builder.js +0 -307
  81. package/out/generator/prisma/prisma-builder.js.map +0 -1
  82. package/out/generator/prisma/query-gard-generator.js +0 -159
  83. package/out/generator/prisma/query-gard-generator.js.map +0 -1
  84. package/out/generator/prisma/schema-generator.js +0 -193
  85. package/out/generator/prisma/schema-generator.js.map +0 -1
  86. package/out/generator/query-guard/index.js +0 -2
  87. package/out/generator/query-guard/index.js.map +0 -1
  88. package/out/generator/react-hooks/index.js +0 -179
  89. package/out/generator/react-hooks/index.js.map +0 -1
  90. package/out/generator/server/data/data-generator.js +0 -376
  91. package/out/generator/server/data/data-generator.js.map +0 -1
  92. package/out/generator/server/data/expression-writer.js +0 -287
  93. package/out/generator/server/data/expression-writer.js.map +0 -1
  94. package/out/generator/server/data/plain-expression-builder.js +0 -69
  95. package/out/generator/server/data/plain-expression-builder.js.map +0 -1
  96. package/out/generator/server/data-generator.js +0 -82
  97. package/out/generator/server/data-generator.js.map +0 -1
  98. package/out/generator/server/expression-writer.js +0 -1
  99. package/out/generator/server/expression-writer.js.map +0 -1
  100. package/out/generator/server/function/function-generator.js +0 -50
  101. package/out/generator/server/function/function-generator.js.map +0 -1
  102. package/out/generator/server/function-generator.js +0 -13
  103. package/out/generator/server/function-generator.js.map +0 -1
  104. package/out/generator/server/index.js +0 -88
  105. package/out/generator/server/index.js.map +0 -1
  106. package/out/generator/server/js-expression-builder.js +0 -1
  107. package/out/generator/server/js-expression-builder.js.map +0 -1
  108. package/out/generator/server/plain-expression-builder.js +0 -1
  109. package/out/generator/server/plain-expression-builder.js.map +0 -1
  110. package/out/generator/server/server-code-generator.js +0 -3
  111. package/out/generator/server/server-code-generator.js.map +0 -1
  112. package/out/generator/server/server-code-writer.js +0 -1
  113. package/out/generator/server/server-code-writer.js.map +0 -1
  114. package/out/generator/service/index.js +0 -133
  115. package/out/generator/service/index.js.map +0 -1
  116. package/out/generator/types.js +0 -10
  117. package/out/generator/types.js.map +0 -1
  118. package/out/generator/utils.js +0 -10
  119. package/out/generator/utils.js.map +0 -1
  120. package/out/langium-ext.js +0 -3
  121. package/out/langium-ext.js.map +0 -1
  122. package/out/language-server/constants.js +0 -20
  123. package/out/language-server/constants.js.map +0 -1
  124. package/out/language-server/generated/ast.js +0 -390
  125. package/out/language-server/generated/ast.js.map +0 -1
  126. package/out/language-server/generated/grammar.js.map +0 -1
  127. package/out/language-server/generated/module.js +0 -23
  128. package/out/language-server/generated/module.js.map +0 -1
  129. package/out/language-server/langium-ext.js +0 -3
  130. package/out/language-server/langium-ext.js.map +0 -1
  131. package/out/language-server/main.js +0 -13
  132. package/out/language-server/main.js.map +0 -1
  133. package/out/language-server/stdlib.zmodel +0 -23
  134. package/out/language-server/types.js +0 -3
  135. package/out/language-server/types.js.map +0 -1
  136. package/out/language-server/validator/attribute-validator copy.js +0 -12
  137. package/out/language-server/validator/attribute-validator copy.js.map +0 -1
  138. package/out/language-server/validator/attribute-validator.js +0 -7
  139. package/out/language-server/validator/attribute-validator.js.map +0 -1
  140. package/out/language-server/validator/datamodel-validator.js +0 -199
  141. package/out/language-server/validator/datamodel-validator.js.map +0 -1
  142. package/out/language-server/validator/datasource-validator copy.js +0 -77
  143. package/out/language-server/validator/datasource-validator copy.js.map +0 -1
  144. package/out/language-server/validator/datasource-validator.js +0 -77
  145. package/out/language-server/validator/datasource-validator.js.map +0 -1
  146. package/out/language-server/validator/enum-validator.js +0 -10
  147. package/out/language-server/validator/enum-validator.js.map +0 -1
  148. package/out/language-server/validator/model-validator.js +0 -21
  149. package/out/language-server/validator/model-validator.js.map +0 -1
  150. package/out/language-server/validator/schema-validator.js +0 -21
  151. package/out/language-server/validator/schema-validator.js.map +0 -1
  152. package/out/language-server/validator/utils.js +0 -106
  153. package/out/language-server/validator/utils.js.map +0 -1
  154. package/out/language-server/validator/zmodel-validator.js +0 -52
  155. package/out/language-server/validator/zmodel-validator.js.map +0 -1
  156. package/out/language-server/zmodel-index.js +0 -11
  157. package/out/language-server/zmodel-index.js.map +0 -1
  158. package/out/language-server/zmodel-linker.js +0 -249
  159. package/out/language-server/zmodel-linker.js.map +0 -1
  160. package/out/language-server/zmodel-module.js +0 -46
  161. package/out/language-server/zmodel-module.js.map +0 -1
  162. package/out/language-server/zmodel-scope.js +0 -41
  163. package/out/language-server/zmodel-scope.js.map +0 -1
  164. package/out/language-server/zmodel-validator.js +0 -35
  165. package/out/language-server/zmodel-validator.js.map +0 -1
  166. package/out/utils/exec-utils.js +0 -9
  167. package/out/utils/exec-utils.js.map +0 -1
  168. package/out/utils/indent-string.js +0 -9
  169. package/out/utils/indent-string.js.map +0 -1
@@ -0,0 +1,17 @@
1
+ import { Model } from '@lang/generated/ast';
2
+
3
+ export interface Context {
4
+ schema: Model;
5
+ outDir: string;
6
+ generatedCodeDir: string;
7
+ }
8
+
9
+ export interface Generator {
10
+ generate(context: Context): Promise<void>;
11
+ }
12
+
13
+ export class GeneratorError extends Error {
14
+ constructor(message: string) {
15
+ super(message);
16
+ }
17
+ }
@@ -0,0 +1,18 @@
1
+ import { DataModel, isDataModel, Model } from '@lang/generated/ast';
2
+ import { AstNode, Reference } from 'langium';
3
+ import { GeneratorError } from './types';
4
+
5
+ export function extractDataModelsWithAllowRules(model: Model): DataModel[] {
6
+ return model.declarations.filter(
7
+ (d) =>
8
+ isDataModel(d) &&
9
+ !!d.attributes.find((attr) => attr.decl.ref?.name === '@@allow')
10
+ ) as DataModel[];
11
+ }
12
+
13
+ export function resolved<T extends AstNode>(ref: Reference<T>): T {
14
+ if (!ref.ref) {
15
+ throw new GeneratorError(`Reference not resolved: ${ref.$refText}`);
16
+ }
17
+ return ref.ref;
18
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Supported Prisma db providers
3
+ */
4
+ export const SUPPORTED_PROVIDERS = [
5
+ 'postgresql',
6
+ 'mysql',
7
+ 'sqlite',
8
+ 'sqlserver',
9
+ ];
10
+
11
+ /**
12
+ * All scalar types
13
+ */
14
+ export const SCALAR_TYPES = [
15
+ 'String',
16
+ 'Int',
17
+ 'Float',
18
+ 'Decimal',
19
+ 'BigInt',
20
+ 'Boolean',
21
+ 'Bytes',
22
+ 'DateTime',
23
+ ];
24
+
25
+ /**
26
+ * Name of standard library module
27
+ */
28
+ export const STD_LIB_MODULE_NAME = 'stdlib.zmodel';
@@ -0,0 +1,616 @@
1
+ /******************************************************************************
2
+ * This file was generated by langium-cli 0.5.0.
3
+ * DO NOT EDIT MANUALLY!
4
+ ******************************************************************************/
5
+
6
+ /* eslint-disable @typescript-eslint/array-type */
7
+ /* eslint-disable @typescript-eslint/no-empty-interface */
8
+ import { AstNode, AstReflection, Reference, ReferenceInfo, isAstNode, TypeMetaData } from 'langium';
9
+
10
+ export type AbstractDeclaration = Attribute | DataModel | DataSource | Enum | Function;
11
+
12
+ export const AbstractDeclaration = 'AbstractDeclaration';
13
+
14
+ export function isAbstractDeclaration(item: unknown): item is AbstractDeclaration {
15
+ return reflection.isInstance(item, AbstractDeclaration);
16
+ }
17
+
18
+ export type AttributeName = string;
19
+
20
+ export type BuiltinType = 'BigInt' | 'Boolean' | 'Bytes' | 'DateTime' | 'Decimal' | 'Float' | 'Int' | 'Json' | 'String';
21
+
22
+ export type DataModelAttributeName = string;
23
+
24
+ export type DataModelFieldAttributeName = string;
25
+
26
+ export type Expression = ArrayExpr | BinaryExpr | InvocationExpr | LiteralExpr | MemberAccessExpr | NullExpr | ReferenceExpr | ThisExpr | UnaryExpr;
27
+
28
+ export const Expression = 'Expression';
29
+
30
+ export function isExpression(item: unknown): item is Expression {
31
+ return reflection.isInstance(item, Expression);
32
+ }
33
+
34
+ export type ExpressionType = 'Any' | 'Boolean' | 'DateTime' | 'Float' | 'Int' | 'Null' | 'String';
35
+
36
+ export type ReferenceTarget = DataModelField | EnumField | FunctionParam;
37
+
38
+ export const ReferenceTarget = 'ReferenceTarget';
39
+
40
+ export function isReferenceTarget(item: unknown): item is ReferenceTarget {
41
+ return reflection.isInstance(item, ReferenceTarget);
42
+ }
43
+
44
+ export type TypeDeclaration = DataModel | Enum;
45
+
46
+ export const TypeDeclaration = 'TypeDeclaration';
47
+
48
+ export function isTypeDeclaration(item: unknown): item is TypeDeclaration {
49
+ return reflection.isInstance(item, TypeDeclaration);
50
+ }
51
+
52
+ export interface Argument extends AstNode {
53
+ readonly $container: InvocationExpr;
54
+ name?: string
55
+ value: Expression
56
+ }
57
+
58
+ export const Argument = 'Argument';
59
+
60
+ export function isArgument(item: unknown): item is Argument {
61
+ return reflection.isInstance(item, Argument);
62
+ }
63
+
64
+ export interface ArrayExpr extends AstNode {
65
+ readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | DataSourceField | Function | MemberAccessExpr | UnaryExpr;
66
+ items: Array<Expression>
67
+ }
68
+
69
+ export const ArrayExpr = 'ArrayExpr';
70
+
71
+ export function isArrayExpr(item: unknown): item is ArrayExpr {
72
+ return reflection.isInstance(item, ArrayExpr);
73
+ }
74
+
75
+ export interface Attribute extends AstNode {
76
+ readonly $container: Model;
77
+ name: AttributeName
78
+ params: Array<AttributeParam>
79
+ }
80
+
81
+ export const Attribute = 'Attribute';
82
+
83
+ export function isAttribute(item: unknown): item is Attribute {
84
+ return reflection.isInstance(item, Attribute);
85
+ }
86
+
87
+ export interface AttributeArg extends AstNode {
88
+ readonly $container: DataModelAttribute | DataModelFieldAttribute;
89
+ name?: string
90
+ value: Expression
91
+ }
92
+
93
+ export const AttributeArg = 'AttributeArg';
94
+
95
+ export function isAttributeArg(item: unknown): item is AttributeArg {
96
+ return reflection.isInstance(item, AttributeArg);
97
+ }
98
+
99
+ export interface AttributeParam extends AstNode {
100
+ readonly $container: Attribute;
101
+ default: boolean
102
+ name: string
103
+ type: AttributeParamType
104
+ }
105
+
106
+ export const AttributeParam = 'AttributeParam';
107
+
108
+ export function isAttributeParam(item: unknown): item is AttributeParam {
109
+ return reflection.isInstance(item, AttributeParam);
110
+ }
111
+
112
+ export interface AttributeParamType extends AstNode {
113
+ readonly $container: AttributeParam;
114
+ array: boolean
115
+ optional: boolean
116
+ reference?: Reference<TypeDeclaration>
117
+ type?: 'ContextType' | 'FieldReference' | ExpressionType
118
+ }
119
+
120
+ export const AttributeParamType = 'AttributeParamType';
121
+
122
+ export function isAttributeParamType(item: unknown): item is AttributeParamType {
123
+ return reflection.isInstance(item, AttributeParamType);
124
+ }
125
+
126
+ export interface BinaryExpr extends AstNode {
127
+ readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | DataSourceField | Function | MemberAccessExpr | UnaryExpr;
128
+ left: Expression
129
+ operator: '!' | '!=' | '&&' | '<' | '<=' | '==' | '>' | '>=' | '?' | '^' | '||'
130
+ right: Expression
131
+ }
132
+
133
+ export const BinaryExpr = 'BinaryExpr';
134
+
135
+ export function isBinaryExpr(item: unknown): item is BinaryExpr {
136
+ return reflection.isInstance(item, BinaryExpr);
137
+ }
138
+
139
+ export interface DataModel extends AstNode {
140
+ readonly $container: Model;
141
+ attributes: Array<DataModelAttribute>
142
+ fields: Array<DataModelField>
143
+ name: string
144
+ }
145
+
146
+ export const DataModel = 'DataModel';
147
+
148
+ export function isDataModel(item: unknown): item is DataModel {
149
+ return reflection.isInstance(item, DataModel);
150
+ }
151
+
152
+ export interface DataModelAttribute extends AstNode {
153
+ readonly $container: DataModel;
154
+ args: Array<AttributeArg>
155
+ decl: Reference<Attribute>
156
+ }
157
+
158
+ export const DataModelAttribute = 'DataModelAttribute';
159
+
160
+ export function isDataModelAttribute(item: unknown): item is DataModelAttribute {
161
+ return reflection.isInstance(item, DataModelAttribute);
162
+ }
163
+
164
+ export interface DataModelField extends AstNode {
165
+ readonly $container: DataModel;
166
+ attributes: Array<DataModelFieldAttribute>
167
+ name: string
168
+ type: DataModelFieldType
169
+ }
170
+
171
+ export const DataModelField = 'DataModelField';
172
+
173
+ export function isDataModelField(item: unknown): item is DataModelField {
174
+ return reflection.isInstance(item, DataModelField);
175
+ }
176
+
177
+ export interface DataModelFieldAttribute extends AstNode {
178
+ readonly $container: DataModelField;
179
+ args: Array<AttributeArg>
180
+ decl: Reference<Attribute>
181
+ }
182
+
183
+ export const DataModelFieldAttribute = 'DataModelFieldAttribute';
184
+
185
+ export function isDataModelFieldAttribute(item: unknown): item is DataModelFieldAttribute {
186
+ return reflection.isInstance(item, DataModelFieldAttribute);
187
+ }
188
+
189
+ export interface DataModelFieldType extends AstNode {
190
+ readonly $container: DataModelField;
191
+ array: boolean
192
+ optional: boolean
193
+ reference?: Reference<TypeDeclaration>
194
+ type?: BuiltinType
195
+ }
196
+
197
+ export const DataModelFieldType = 'DataModelFieldType';
198
+
199
+ export function isDataModelFieldType(item: unknown): item is DataModelFieldType {
200
+ return reflection.isInstance(item, DataModelFieldType);
201
+ }
202
+
203
+ export interface DataSource extends AstNode {
204
+ readonly $container: Model;
205
+ fields: Array<DataSourceField>
206
+ name: string
207
+ }
208
+
209
+ export const DataSource = 'DataSource';
210
+
211
+ export function isDataSource(item: unknown): item is DataSource {
212
+ return reflection.isInstance(item, DataSource);
213
+ }
214
+
215
+ export interface DataSourceField extends AstNode {
216
+ readonly $container: DataSource;
217
+ name: string
218
+ value: InvocationExpr | LiteralExpr
219
+ }
220
+
221
+ export const DataSourceField = 'DataSourceField';
222
+
223
+ export function isDataSourceField(item: unknown): item is DataSourceField {
224
+ return reflection.isInstance(item, DataSourceField);
225
+ }
226
+
227
+ export interface Enum extends AstNode {
228
+ readonly $container: Model;
229
+ fields: Array<EnumField>
230
+ name: string
231
+ }
232
+
233
+ export const Enum = 'Enum';
234
+
235
+ export function isEnum(item: unknown): item is Enum {
236
+ return reflection.isInstance(item, Enum);
237
+ }
238
+
239
+ export interface EnumField extends AstNode {
240
+ readonly $container: Enum;
241
+ name: string
242
+ }
243
+
244
+ export const EnumField = 'EnumField';
245
+
246
+ export function isEnumField(item: unknown): item is EnumField {
247
+ return reflection.isInstance(item, EnumField);
248
+ }
249
+
250
+ export interface Function extends AstNode {
251
+ readonly $container: Model;
252
+ expression?: Expression
253
+ name: string
254
+ params: Array<FunctionParam>
255
+ returnType: FunctionParamType
256
+ }
257
+
258
+ export const Function = 'Function';
259
+
260
+ export function isFunction(item: unknown): item is Function {
261
+ return reflection.isInstance(item, Function);
262
+ }
263
+
264
+ export interface FunctionParam extends AstNode {
265
+ readonly $container: Function;
266
+ name: string
267
+ type: FunctionParamType
268
+ }
269
+
270
+ export const FunctionParam = 'FunctionParam';
271
+
272
+ export function isFunctionParam(item: unknown): item is FunctionParam {
273
+ return reflection.isInstance(item, FunctionParam);
274
+ }
275
+
276
+ export interface FunctionParamType extends AstNode {
277
+ readonly $container: Function | FunctionParam;
278
+ array: boolean
279
+ reference?: Reference<TypeDeclaration>
280
+ type?: ExpressionType
281
+ }
282
+
283
+ export const FunctionParamType = 'FunctionParamType';
284
+
285
+ export function isFunctionParamType(item: unknown): item is FunctionParamType {
286
+ return reflection.isInstance(item, FunctionParamType);
287
+ }
288
+
289
+ export interface InvocationExpr extends AstNode {
290
+ readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | DataSourceField | Function | MemberAccessExpr | UnaryExpr;
291
+ args: Array<Argument>
292
+ function: Reference<Function>
293
+ }
294
+
295
+ export const InvocationExpr = 'InvocationExpr';
296
+
297
+ export function isInvocationExpr(item: unknown): item is InvocationExpr {
298
+ return reflection.isInstance(item, InvocationExpr);
299
+ }
300
+
301
+ export interface LiteralExpr extends AstNode {
302
+ readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | DataSourceField | Function | MemberAccessExpr | UnaryExpr;
303
+ value: boolean | number | string
304
+ }
305
+
306
+ export const LiteralExpr = 'LiteralExpr';
307
+
308
+ export function isLiteralExpr(item: unknown): item is LiteralExpr {
309
+ return reflection.isInstance(item, LiteralExpr);
310
+ }
311
+
312
+ export interface MemberAccessExpr extends AstNode {
313
+ readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | DataSourceField | Function | MemberAccessExpr | UnaryExpr;
314
+ member: Reference<DataModelField>
315
+ operand: Expression
316
+ }
317
+
318
+ export const MemberAccessExpr = 'MemberAccessExpr';
319
+
320
+ export function isMemberAccessExpr(item: unknown): item is MemberAccessExpr {
321
+ return reflection.isInstance(item, MemberAccessExpr);
322
+ }
323
+
324
+ export interface Model extends AstNode {
325
+ declarations: Array<AbstractDeclaration>
326
+ }
327
+
328
+ export const Model = 'Model';
329
+
330
+ export function isModel(item: unknown): item is Model {
331
+ return reflection.isInstance(item, Model);
332
+ }
333
+
334
+ export interface NullExpr extends AstNode {
335
+ readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | DataSourceField | Function | MemberAccessExpr | UnaryExpr;
336
+ value: string
337
+ }
338
+
339
+ export const NullExpr = 'NullExpr';
340
+
341
+ export function isNullExpr(item: unknown): item is NullExpr {
342
+ return reflection.isInstance(item, NullExpr);
343
+ }
344
+
345
+ export interface ReferenceArg extends AstNode {
346
+ readonly $container: ReferenceExpr;
347
+ name: 'sort'
348
+ value: 'Asc' | 'Desc'
349
+ }
350
+
351
+ export const ReferenceArg = 'ReferenceArg';
352
+
353
+ export function isReferenceArg(item: unknown): item is ReferenceArg {
354
+ return reflection.isInstance(item, ReferenceArg);
355
+ }
356
+
357
+ export interface ReferenceExpr extends AstNode {
358
+ readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | DataSourceField | Function | MemberAccessExpr | UnaryExpr;
359
+ args: Array<ReferenceArg>
360
+ target: Reference<ReferenceTarget>
361
+ }
362
+
363
+ export const ReferenceExpr = 'ReferenceExpr';
364
+
365
+ export function isReferenceExpr(item: unknown): item is ReferenceExpr {
366
+ return reflection.isInstance(item, ReferenceExpr);
367
+ }
368
+
369
+ export interface ThisExpr extends AstNode {
370
+ readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | DataSourceField | Function | MemberAccessExpr | UnaryExpr;
371
+ value: string
372
+ }
373
+
374
+ export const ThisExpr = 'ThisExpr';
375
+
376
+ export function isThisExpr(item: unknown): item is ThisExpr {
377
+ return reflection.isInstance(item, ThisExpr);
378
+ }
379
+
380
+ export interface UnaryExpr extends AstNode {
381
+ readonly $container: Argument | ArrayExpr | AttributeArg | BinaryExpr | DataSourceField | Function | MemberAccessExpr | UnaryExpr;
382
+ operand: Expression
383
+ operator: '!'
384
+ }
385
+
386
+ export const UnaryExpr = 'UnaryExpr';
387
+
388
+ export function isUnaryExpr(item: unknown): item is UnaryExpr {
389
+ return reflection.isInstance(item, UnaryExpr);
390
+ }
391
+
392
+ export type ZModelAstType = 'AbstractDeclaration' | 'Argument' | 'ArrayExpr' | 'Attribute' | 'AttributeArg' | 'AttributeParam' | 'AttributeParamType' | 'BinaryExpr' | 'DataModel' | 'DataModelAttribute' | 'DataModelField' | 'DataModelFieldAttribute' | 'DataModelFieldType' | 'DataSource' | 'DataSourceField' | 'Enum' | 'EnumField' | 'Expression' | 'Function' | 'FunctionParam' | 'FunctionParamType' | 'InvocationExpr' | 'LiteralExpr' | 'MemberAccessExpr' | 'Model' | 'NullExpr' | 'ReferenceArg' | 'ReferenceExpr' | 'ReferenceTarget' | 'ThisExpr' | 'TypeDeclaration' | 'UnaryExpr';
393
+
394
+ export class ZModelAstReflection implements AstReflection {
395
+
396
+ getAllTypes(): string[] {
397
+ return ['AbstractDeclaration', 'Argument', 'ArrayExpr', 'Attribute', 'AttributeArg', 'AttributeParam', 'AttributeParamType', 'BinaryExpr', 'DataModel', 'DataModelAttribute', 'DataModelField', 'DataModelFieldAttribute', 'DataModelFieldType', 'DataSource', 'DataSourceField', 'Enum', 'EnumField', 'Expression', 'Function', 'FunctionParam', 'FunctionParamType', 'InvocationExpr', 'LiteralExpr', 'MemberAccessExpr', 'Model', 'NullExpr', 'ReferenceArg', 'ReferenceExpr', 'ReferenceTarget', 'ThisExpr', 'TypeDeclaration', 'UnaryExpr'];
398
+ }
399
+
400
+ isInstance(node: unknown, type: string): boolean {
401
+ return isAstNode(node) && this.isSubtype(node.$type, type);
402
+ }
403
+
404
+ isSubtype(subtype: string, supertype: string): boolean {
405
+ if (subtype === supertype) {
406
+ return true;
407
+ }
408
+ switch (subtype) {
409
+ case ArrayExpr:
410
+ case BinaryExpr:
411
+ case InvocationExpr:
412
+ case LiteralExpr:
413
+ case MemberAccessExpr:
414
+ case NullExpr:
415
+ case ReferenceExpr:
416
+ case ThisExpr:
417
+ case UnaryExpr: {
418
+ return this.isSubtype(Expression, supertype);
419
+ }
420
+ case Attribute:
421
+ case DataSource:
422
+ case Function: {
423
+ return this.isSubtype(AbstractDeclaration, supertype);
424
+ }
425
+ case DataModel:
426
+ case Enum: {
427
+ return this.isSubtype(AbstractDeclaration, supertype) || this.isSubtype(TypeDeclaration, supertype);
428
+ }
429
+ case DataModelField:
430
+ case EnumField:
431
+ case FunctionParam: {
432
+ return this.isSubtype(ReferenceTarget, supertype);
433
+ }
434
+ default: {
435
+ return false;
436
+ }
437
+ }
438
+ }
439
+
440
+ getReferenceType(refInfo: ReferenceInfo): string {
441
+ const referenceId = `${refInfo.container.$type}:${refInfo.property}`;
442
+ switch (referenceId) {
443
+ case 'AttributeParamType:reference': {
444
+ return TypeDeclaration;
445
+ }
446
+ case 'DataModelAttribute:decl': {
447
+ return Attribute;
448
+ }
449
+ case 'DataModelFieldAttribute:decl': {
450
+ return Attribute;
451
+ }
452
+ case 'DataModelFieldType:reference': {
453
+ return TypeDeclaration;
454
+ }
455
+ case 'FunctionParamType:reference': {
456
+ return TypeDeclaration;
457
+ }
458
+ case 'InvocationExpr:function': {
459
+ return Function;
460
+ }
461
+ case 'MemberAccessExpr:member': {
462
+ return DataModelField;
463
+ }
464
+ case 'ReferenceExpr:target': {
465
+ return ReferenceTarget;
466
+ }
467
+ default: {
468
+ throw new Error(`${referenceId} is not a valid reference id.`);
469
+ }
470
+ }
471
+ }
472
+
473
+ getTypeMetaData(type: string): TypeMetaData {
474
+ switch (type) {
475
+ case 'ArrayExpr': {
476
+ return {
477
+ name: 'ArrayExpr',
478
+ mandatory: [
479
+ { name: 'items', type: 'array' }
480
+ ]
481
+ };
482
+ }
483
+ case 'Attribute': {
484
+ return {
485
+ name: 'Attribute',
486
+ mandatory: [
487
+ { name: 'params', type: 'array' }
488
+ ]
489
+ };
490
+ }
491
+ case 'AttributeParam': {
492
+ return {
493
+ name: 'AttributeParam',
494
+ mandatory: [
495
+ { name: 'default', type: 'boolean' }
496
+ ]
497
+ };
498
+ }
499
+ case 'AttributeParamType': {
500
+ return {
501
+ name: 'AttributeParamType',
502
+ mandatory: [
503
+ { name: 'array', type: 'boolean' },
504
+ { name: 'optional', type: 'boolean' }
505
+ ]
506
+ };
507
+ }
508
+ case 'DataModel': {
509
+ return {
510
+ name: 'DataModel',
511
+ mandatory: [
512
+ { name: 'attributes', type: 'array' },
513
+ { name: 'fields', type: 'array' }
514
+ ]
515
+ };
516
+ }
517
+ case 'DataModelAttribute': {
518
+ return {
519
+ name: 'DataModelAttribute',
520
+ mandatory: [
521
+ { name: 'args', type: 'array' }
522
+ ]
523
+ };
524
+ }
525
+ case 'DataModelField': {
526
+ return {
527
+ name: 'DataModelField',
528
+ mandatory: [
529
+ { name: 'attributes', type: 'array' }
530
+ ]
531
+ };
532
+ }
533
+ case 'DataModelFieldAttribute': {
534
+ return {
535
+ name: 'DataModelFieldAttribute',
536
+ mandatory: [
537
+ { name: 'args', type: 'array' }
538
+ ]
539
+ };
540
+ }
541
+ case 'DataModelFieldType': {
542
+ return {
543
+ name: 'DataModelFieldType',
544
+ mandatory: [
545
+ { name: 'array', type: 'boolean' },
546
+ { name: 'optional', type: 'boolean' }
547
+ ]
548
+ };
549
+ }
550
+ case 'DataSource': {
551
+ return {
552
+ name: 'DataSource',
553
+ mandatory: [
554
+ { name: 'fields', type: 'array' }
555
+ ]
556
+ };
557
+ }
558
+ case 'Enum': {
559
+ return {
560
+ name: 'Enum',
561
+ mandatory: [
562
+ { name: 'fields', type: 'array' }
563
+ ]
564
+ };
565
+ }
566
+ case 'Function': {
567
+ return {
568
+ name: 'Function',
569
+ mandatory: [
570
+ { name: 'params', type: 'array' }
571
+ ]
572
+ };
573
+ }
574
+ case 'FunctionParamType': {
575
+ return {
576
+ name: 'FunctionParamType',
577
+ mandatory: [
578
+ { name: 'array', type: 'boolean' }
579
+ ]
580
+ };
581
+ }
582
+ case 'InvocationExpr': {
583
+ return {
584
+ name: 'InvocationExpr',
585
+ mandatory: [
586
+ { name: 'args', type: 'array' }
587
+ ]
588
+ };
589
+ }
590
+ case 'Model': {
591
+ return {
592
+ name: 'Model',
593
+ mandatory: [
594
+ { name: 'declarations', type: 'array' }
595
+ ]
596
+ };
597
+ }
598
+ case 'ReferenceExpr': {
599
+ return {
600
+ name: 'ReferenceExpr',
601
+ mandatory: [
602
+ { name: 'args', type: 'array' }
603
+ ]
604
+ };
605
+ }
606
+ default: {
607
+ return {
608
+ name: type,
609
+ mandatory: []
610
+ };
611
+ }
612
+ }
613
+ }
614
+ }
615
+
616
+ export const reflection = new ZModelAstReflection();
@@ -1,13 +1,12 @@
1
- "use strict";
2
1
  /******************************************************************************
3
2
  * This file was generated by langium-cli 0.5.0.
4
3
  * DO NOT EDIT MANUALLY!
5
4
  ******************************************************************************/
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ZModelGrammar = void 0;
8
- const langium_1 = require("langium");
9
- let loadedZModelGrammar;
10
- const ZModelGrammar = () => loadedZModelGrammar !== null && loadedZModelGrammar !== void 0 ? loadedZModelGrammar : (loadedZModelGrammar = (0, langium_1.loadGrammarFromJson)(`{
5
+
6
+ import { loadGrammarFromJson, Grammar } from 'langium';
7
+
8
+ let loadedZModelGrammar: Grammar | undefined;
9
+ export const ZModelGrammar = (): Grammar => loadedZModelGrammar ?? (loadedZModelGrammar = loadGrammarFromJson(`{
11
10
  "$type": "Grammar",
12
11
  "isDeclared": true,
13
12
  "name": "ZModel",
@@ -2388,5 +2387,3 @@ const ZModelGrammar = () => loadedZModelGrammar !== null && loadedZModelGrammar
2388
2387
  "interfaces": [],
2389
2388
  "usedGrammars": []
2390
2389
  }`));
2391
- exports.ZModelGrammar = ZModelGrammar;
2392
- //# sourceMappingURL=grammar.js.map