zenstack 1.0.16 → 1.1.0

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 (154) hide show
  1. package/README.md +93 -24
  2. package/bin/post-install.js +1 -1
  3. package/cli/actions/generate.d.ts +13 -0
  4. package/cli/actions/generate.js +71 -0
  5. package/cli/actions/generate.js.map +1 -0
  6. package/cli/actions/index.d.ts +3 -0
  7. package/cli/actions/index.js +20 -0
  8. package/cli/actions/index.js.map +1 -0
  9. package/cli/actions/info.d.ts +4 -0
  10. package/cli/actions/info.js +63 -0
  11. package/cli/actions/info.js.map +1 -0
  12. package/cli/actions/init.d.ts +12 -0
  13. package/cli/actions/init.js +83 -0
  14. package/cli/actions/init.js.map +1 -0
  15. package/cli/cli-util.d.ts +14 -11
  16. package/cli/cli-util.js +150 -82
  17. package/cli/cli-util.js.map +1 -1
  18. package/cli/config.d.ts +10 -0
  19. package/cli/config.js +62 -0
  20. package/cli/config.js.map +1 -0
  21. package/cli/index.d.ts +4 -12
  22. package/cli/index.js +36 -29
  23. package/cli/index.js.map +1 -1
  24. package/cli/plugin-runner.d.ts +13 -3
  25. package/cli/plugin-runner.js +165 -59
  26. package/cli/plugin-runner.js.map +1 -1
  27. package/constants.js +1 -1
  28. package/language-server/constants.d.ts +7 -0
  29. package/language-server/constants.js +8 -1
  30. package/language-server/constants.js.map +1 -1
  31. package/language-server/utils.d.ts +1 -14
  32. package/language-server/utils.js +2 -38
  33. package/language-server/utils.js.map +1 -1
  34. package/language-server/validator/attribute-application-validator.d.ts +15 -0
  35. package/language-server/validator/attribute-application-validator.js +246 -0
  36. package/language-server/validator/attribute-application-validator.js.map +1 -0
  37. package/language-server/validator/attribute-validator.d.ts +1 -1
  38. package/language-server/validator/attribute-validator.js +4 -1
  39. package/language-server/validator/attribute-validator.js.map +1 -1
  40. package/language-server/validator/datamodel-validator.d.ts +7 -0
  41. package/language-server/validator/datamodel-validator.js +84 -33
  42. package/language-server/validator/datamodel-validator.js.map +1 -1
  43. package/language-server/validator/enum-validator.js +3 -6
  44. package/language-server/validator/enum-validator.js.map +1 -1
  45. package/language-server/validator/expression-validator.d.ts +1 -1
  46. package/language-server/validator/expression-validator.js +108 -3
  47. package/language-server/validator/expression-validator.js.map +1 -1
  48. package/language-server/validator/function-decl-validator.d.ts +9 -0
  49. package/language-server/validator/function-decl-validator.js +13 -0
  50. package/language-server/validator/function-decl-validator.js.map +1 -0
  51. package/language-server/validator/function-invocation-validator.d.ts +11 -0
  52. package/language-server/validator/function-invocation-validator.js +135 -0
  53. package/language-server/validator/function-invocation-validator.js.map +1 -0
  54. package/language-server/validator/schema-validator.d.ts +4 -1
  55. package/language-server/validator/schema-validator.js +28 -7
  56. package/language-server/validator/schema-validator.js.map +1 -1
  57. package/language-server/validator/utils.d.ts +3 -4
  58. package/language-server/validator/utils.js +20 -123
  59. package/language-server/validator/utils.js.map +1 -1
  60. package/language-server/validator/zmodel-validator.d.ts +5 -1
  61. package/language-server/validator/zmodel-validator.js +18 -4
  62. package/language-server/validator/zmodel-validator.js.map +1 -1
  63. package/language-server/zmodel-code-action.d.ts +2 -1
  64. package/language-server/zmodel-code-action.js +46 -21
  65. package/language-server/zmodel-code-action.js.map +1 -1
  66. package/language-server/zmodel-definition.d.ts +7 -0
  67. package/language-server/zmodel-definition.js +31 -0
  68. package/language-server/zmodel-definition.js.map +1 -0
  69. package/language-server/zmodel-formatter.js +2 -2
  70. package/language-server/zmodel-formatter.js.map +1 -1
  71. package/language-server/zmodel-linker.d.ts +3 -0
  72. package/language-server/zmodel-linker.js +122 -41
  73. package/language-server/zmodel-linker.js.map +1 -1
  74. package/language-server/zmodel-module.js +4 -1
  75. package/language-server/zmodel-module.js.map +1 -1
  76. package/language-server/zmodel-scope.d.ts +7 -1
  77. package/language-server/zmodel-scope.js +57 -1
  78. package/language-server/zmodel-scope.js.map +1 -1
  79. package/language-server/zmodel-workspace-manager.d.ts +5 -1
  80. package/language-server/zmodel-workspace-manager.js +101 -0
  81. package/language-server/zmodel-workspace-manager.js.map +1 -1
  82. package/package.json +27 -20
  83. package/plugins/access-policy/expression-writer.d.ts +7 -0
  84. package/plugins/access-policy/expression-writer.js +325 -106
  85. package/plugins/access-policy/expression-writer.js.map +1 -1
  86. package/plugins/access-policy/index.d.ts +3 -3
  87. package/plugins/access-policy/index.js +3 -5
  88. package/plugins/access-policy/index.js.map +1 -1
  89. package/plugins/access-policy/policy-guard-generator.d.ts +10 -3
  90. package/plugins/access-policy/policy-guard-generator.js +406 -121
  91. package/plugins/access-policy/policy-guard-generator.js.map +1 -1
  92. package/plugins/model-meta/index.d.ts +3 -3
  93. package/plugins/model-meta/index.js +110 -46
  94. package/plugins/model-meta/index.js.map +1 -1
  95. package/plugins/plugin-utils.d.ts +8 -7
  96. package/plugins/plugin-utils.js +55 -21
  97. package/plugins/plugin-utils.js.map +1 -1
  98. package/plugins/prisma/index.d.ts +3 -3
  99. package/plugins/prisma/index.js +3 -5
  100. package/plugins/prisma/index.js.map +1 -1
  101. package/plugins/prisma/prisma-builder.d.ts +7 -14
  102. package/plugins/prisma/prisma-builder.js +29 -34
  103. package/plugins/prisma/prisma-builder.js.map +1 -1
  104. package/plugins/prisma/schema-generator.d.ts +7 -3
  105. package/plugins/prisma/schema-generator.js +146 -102
  106. package/plugins/prisma/schema-generator.js.map +1 -1
  107. package/plugins/prisma/zmodel-code-generator.d.ts +3 -1
  108. package/plugins/prisma/zmodel-code-generator.js +12 -2
  109. package/plugins/prisma/zmodel-code-generator.js.map +1 -1
  110. package/plugins/zod/generator.d.ts +4 -0
  111. package/plugins/zod/generator.js +298 -0
  112. package/plugins/zod/generator.js.map +1 -0
  113. package/plugins/zod/index.d.ts +4 -0
  114. package/plugins/zod/index.js +24 -0
  115. package/plugins/zod/index.js.map +1 -0
  116. package/plugins/zod/transformer.d.ts +68 -0
  117. package/plugins/zod/transformer.js +554 -0
  118. package/plugins/zod/transformer.js.map +1 -0
  119. package/plugins/zod/types.d.ts +25 -0
  120. package/plugins/zod/types.js.map +1 -0
  121. package/plugins/zod/utils/removeDir.d.ts +1 -0
  122. package/plugins/zod/utils/removeDir.js +30 -0
  123. package/plugins/zod/utils/removeDir.js.map +1 -0
  124. package/plugins/zod/utils/schema-gen.d.ts +3 -0
  125. package/plugins/zod/utils/schema-gen.js +188 -0
  126. package/plugins/zod/utils/schema-gen.js.map +1 -0
  127. package/res/starter.zmodel +6 -8
  128. package/res/stdlib.zmodel +238 -74
  129. package/telemetry.d.ts +2 -1
  130. package/telemetry.js +21 -11
  131. package/telemetry.js.map +1 -1
  132. package/utils/ast-utils.d.ts +12 -15
  133. package/utils/ast-utils.js +117 -66
  134. package/utils/ast-utils.js.map +1 -1
  135. package/utils/pkg-utils.d.ts +2 -2
  136. package/utils/pkg-utils.js +34 -16
  137. package/utils/pkg-utils.js.map +1 -1
  138. package/utils/typescript-expression-transformer.d.ts +54 -0
  139. package/utils/typescript-expression-transformer.js +326 -0
  140. package/utils/typescript-expression-transformer.js.map +1 -0
  141. package/utils/version-utils.js +7 -1
  142. package/utils/version-utils.js.map +1 -1
  143. package/plugins/access-policy/typescript-expression-transformer.d.ts +0 -26
  144. package/plugins/access-policy/typescript-expression-transformer.js +0 -111
  145. package/plugins/access-policy/typescript-expression-transformer.js.map +0 -1
  146. package/plugins/access-policy/utils.d.ts +0 -5
  147. package/plugins/access-policy/utils.js +0 -14
  148. package/plugins/access-policy/utils.js.map +0 -1
  149. package/plugins/access-policy/zod-schema-generator.d.ts +0 -12
  150. package/plugins/access-policy/zod-schema-generator.js +0 -158
  151. package/plugins/access-policy/zod-schema-generator.js.map +0 -1
  152. package/types.d.ts +0 -12
  153. package/types.js.map +0 -1
  154. /package/{types.js → plugins/zod/types.js} +0 -0
@@ -0,0 +1,246 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.validateAttributeApplication = void 0;
13
+ const ast_1 = require("@zenstackhq/language/ast");
14
+ const sdk_1 = require("@zenstackhq/sdk");
15
+ const langium_1 = require("langium");
16
+ const pluralize_1 = __importDefault(require("pluralize"));
17
+ const utils_1 = require("./utils");
18
+ // a registry of function handlers marked with @func
19
+ const attributeCheckers = new Map();
20
+ // function handler decorator
21
+ function check(name) {
22
+ return function (_target, _propertyKey, descriptor) {
23
+ if (!attributeCheckers.get(name)) {
24
+ attributeCheckers.set(name, descriptor);
25
+ }
26
+ return descriptor;
27
+ };
28
+ }
29
+ /**
30
+ * Validates function declarations.
31
+ */
32
+ class AttributeApplicationValidator {
33
+ validate(attr, accept) {
34
+ const decl = attr.decl.ref;
35
+ if (!decl) {
36
+ return;
37
+ }
38
+ const targetDecl = attr.$container;
39
+ if (decl.name === '@@@targetField' && !(0, ast_1.isAttribute)(targetDecl)) {
40
+ accept('error', `attribute "${decl.name}" can only be used on attribute declarations`, { node: attr });
41
+ return;
42
+ }
43
+ if ((0, ast_1.isDataModelField)(targetDecl) && !isValidAttributeTarget(decl, targetDecl)) {
44
+ accept('error', `attribute "${decl.name}" cannot be used on this type of field`, { node: attr });
45
+ }
46
+ const filledParams = new Set();
47
+ for (const arg of attr.args) {
48
+ let paramDecl;
49
+ if (!arg.name) {
50
+ paramDecl = decl.params.find((p) => p.default && !filledParams.has(p));
51
+ if (!paramDecl) {
52
+ accept('error', `Unexpected unnamed argument`, {
53
+ node: arg,
54
+ });
55
+ return;
56
+ }
57
+ }
58
+ else {
59
+ paramDecl = decl.params.find((p) => p.name === arg.name);
60
+ if (!paramDecl) {
61
+ accept('error', `Attribute "${decl.name}" doesn't have a parameter named "${arg.name}"`, {
62
+ node: arg,
63
+ });
64
+ return;
65
+ }
66
+ }
67
+ if (!assignableToAttributeParam(arg, paramDecl, attr)) {
68
+ accept('error', `Value is not assignable to parameter`, {
69
+ node: arg,
70
+ });
71
+ return;
72
+ }
73
+ if (filledParams.has(paramDecl)) {
74
+ accept('error', `Parameter "${paramDecl.name}" is already provided`, { node: arg });
75
+ return;
76
+ }
77
+ filledParams.add(paramDecl);
78
+ arg.$resolvedParam = paramDecl;
79
+ }
80
+ const missingParams = decl.params.filter((p) => !p.type.optional && !filledParams.has(p));
81
+ if (missingParams.length > 0) {
82
+ accept('error', `Required ${(0, pluralize_1.default)('parameter', missingParams.length)} not provided: ${missingParams
83
+ .map((p) => p.name)
84
+ .join(', ')}`, { node: attr });
85
+ return;
86
+ }
87
+ // run checkers for specific attributes
88
+ const checker = attributeCheckers.get(decl.name);
89
+ if (checker) {
90
+ checker.value.call(this, attr, accept);
91
+ }
92
+ }
93
+ _checkModelLevelPolicy(attr, accept) {
94
+ const kind = (0, utils_1.getStringLiteral)(attr.args[0].value);
95
+ if (!kind) {
96
+ accept('error', `expects a string literal`, { node: attr.args[0] });
97
+ return;
98
+ }
99
+ this.validatePolicyKinds(kind, ['create', 'read', 'update', 'delete', 'all'], attr, accept);
100
+ }
101
+ _checkFieldLevelPolicy(attr, accept) {
102
+ const kind = (0, utils_1.getStringLiteral)(attr.args[0].value);
103
+ if (!kind) {
104
+ accept('error', `expects a string literal`, { node: attr.args[0] });
105
+ return;
106
+ }
107
+ this.validatePolicyKinds(kind, ['read', 'update', 'all'], attr, accept);
108
+ const expr = attr.args[1].value;
109
+ if ((0, langium_1.streamAst)(expr).some((node) => (0, sdk_1.isFutureExpr)(node))) {
110
+ accept('error', `"future()" is not allowed in field-level policy rules`, { node: expr });
111
+ }
112
+ }
113
+ validatePolicyKinds(kind, candidates, attr, accept) {
114
+ const items = kind.split(',').map((x) => x.trim());
115
+ items.forEach((item) => {
116
+ if (!candidates.includes(item)) {
117
+ accept('error', `Invalid policy rule kind: "${item}", allowed: ${candidates.map((c) => '"' + c + '"').join(', ')}`, { node: attr });
118
+ }
119
+ });
120
+ }
121
+ }
122
+ __decorate([
123
+ check('@@allow'),
124
+ check('@@deny')
125
+ ], AttributeApplicationValidator.prototype, "_checkModelLevelPolicy", null);
126
+ __decorate([
127
+ check('@allow'),
128
+ check('@deny')
129
+ ], AttributeApplicationValidator.prototype, "_checkFieldLevelPolicy", null);
130
+ exports.default = AttributeApplicationValidator;
131
+ function assignableToAttributeParam(arg, param, attr) {
132
+ var _a, _b, _c, _d;
133
+ const argResolvedType = arg.$resolvedType;
134
+ if (!argResolvedType) {
135
+ return false;
136
+ }
137
+ let dstType = param.type.type;
138
+ let dstIsArray = param.type.array;
139
+ const dstRef = param.type.reference;
140
+ if (dstType === 'Any' && !dstIsArray) {
141
+ return true;
142
+ }
143
+ // destination is field reference or transitive field reference, check if
144
+ // argument is reference or array or reference
145
+ if (dstType === 'FieldReference' || dstType === 'TransitiveFieldReference') {
146
+ if (dstIsArray) {
147
+ return ((0, ast_1.isArrayExpr)(arg.value) &&
148
+ !arg.value.items.find((item) => !(0, ast_1.isReferenceExpr)(item) || !(0, ast_1.isDataModelField)(item.target.ref)));
149
+ }
150
+ else {
151
+ return (0, ast_1.isReferenceExpr)(arg.value) && (0, ast_1.isDataModelField)(arg.value.target.ref);
152
+ }
153
+ }
154
+ if ((0, ast_1.isEnum)(argResolvedType.decl)) {
155
+ // enum type
156
+ let attrArgDeclType = dstRef === null || dstRef === void 0 ? void 0 : dstRef.ref;
157
+ if (dstType === 'ContextType' && (0, ast_1.isDataModelField)(attr.$container) && ((_b = (_a = attr.$container) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.reference)) {
158
+ // attribute parameter type is ContextType, need to infer type from
159
+ // the attribute's container
160
+ attrArgDeclType = (0, sdk_1.resolved)(attr.$container.type.reference);
161
+ dstIsArray = attr.$container.type.array;
162
+ }
163
+ return attrArgDeclType === argResolvedType.decl && dstIsArray === argResolvedType.array;
164
+ }
165
+ else if (dstType) {
166
+ // scalar type
167
+ if (typeof (argResolvedType === null || argResolvedType === void 0 ? void 0 : argResolvedType.decl) !== 'string') {
168
+ // destination type is not a reference, so argument type must be a plain expression
169
+ return false;
170
+ }
171
+ if (dstType === 'ContextType') {
172
+ // attribute parameter type is ContextType, need to infer type from
173
+ // the attribute's container
174
+ if ((0, ast_1.isDataModelField)(attr.$container)) {
175
+ if (!((_d = (_c = attr.$container) === null || _c === void 0 ? void 0 : _c.type) === null || _d === void 0 ? void 0 : _d.type)) {
176
+ return false;
177
+ }
178
+ dstType = (0, utils_1.mapBuiltinTypeToExpressionType)(attr.$container.type.type);
179
+ dstIsArray = attr.$container.type.array;
180
+ }
181
+ else {
182
+ dstType = 'Any';
183
+ }
184
+ }
185
+ return (0, utils_1.typeAssignable)(dstType, argResolvedType.decl, arg.value) && dstIsArray === argResolvedType.array;
186
+ }
187
+ else {
188
+ // reference type
189
+ return ((dstRef === null || dstRef === void 0 ? void 0 : dstRef.ref) === argResolvedType.decl || dstType === 'Any') && dstIsArray === argResolvedType.array;
190
+ }
191
+ }
192
+ function isValidAttributeTarget(attrDecl, targetDecl) {
193
+ var _a;
194
+ const targetField = attrDecl.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@@targetField'; });
195
+ if (!targetField) {
196
+ // no field type constraint
197
+ return true;
198
+ }
199
+ const fieldTypes = targetField.args[0].value.items.map((item) => { var _a; return (_a = item.target.ref) === null || _a === void 0 ? void 0 : _a.name; });
200
+ let allowed = false;
201
+ for (const allowedType of fieldTypes) {
202
+ switch (allowedType) {
203
+ case 'StringField':
204
+ allowed = allowed || targetDecl.type.type === 'String';
205
+ break;
206
+ case 'IntField':
207
+ allowed = allowed || targetDecl.type.type === 'Int';
208
+ break;
209
+ case 'BigIntField':
210
+ allowed = allowed || targetDecl.type.type === 'BigInt';
211
+ break;
212
+ case 'FloatField':
213
+ allowed = allowed || targetDecl.type.type === 'Float';
214
+ break;
215
+ case 'DecimalField':
216
+ allowed = allowed || targetDecl.type.type === 'Decimal';
217
+ break;
218
+ case 'BooleanField':
219
+ allowed = allowed || targetDecl.type.type === 'Boolean';
220
+ break;
221
+ case 'DateTimeField':
222
+ allowed = allowed || targetDecl.type.type === 'DateTime';
223
+ break;
224
+ case 'JsonField':
225
+ allowed = allowed || targetDecl.type.type === 'Json';
226
+ break;
227
+ case 'BytesField':
228
+ allowed = allowed || targetDecl.type.type === 'Bytes';
229
+ break;
230
+ case 'ModelField':
231
+ allowed = allowed || (0, ast_1.isDataModel)((_a = targetDecl.type.reference) === null || _a === void 0 ? void 0 : _a.ref);
232
+ break;
233
+ default:
234
+ break;
235
+ }
236
+ if (allowed) {
237
+ break;
238
+ }
239
+ }
240
+ return allowed;
241
+ }
242
+ function validateAttributeApplication(attr, accept) {
243
+ new AttributeApplicationValidator().validate(attr, accept);
244
+ }
245
+ exports.validateAttributeApplication = validateAttributeApplication;
246
+ //# sourceMappingURL=attribute-application-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-application-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/attribute-application-validator.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Attribute } from '@zenstackhq/language/ast';
2
- import { AstValidator } from '../types';
3
2
  import { ValidationAcceptor } from 'langium';
3
+ import { AstValidator } from '../types';
4
4
  /**
5
5
  * Validates attribute declarations.
6
6
  */
@@ -1,11 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const attribute_application_validator_1 = require("./attribute-application-validator");
3
4
  /**
4
5
  * Validates attribute declarations.
5
6
  */
6
7
  class AttributeValidator {
7
8
  // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
8
- validate(attr, accept) { }
9
+ validate(attr, accept) {
10
+ attr.attributes.forEach((attr) => (0, attribute_application_validator_1.validateAttributeApplication)(attr, accept));
11
+ }
9
12
  }
10
13
  exports.default = AttributeValidator;
11
14
  //# sourceMappingURL=attribute-validator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attribute-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/attribute-validator.ts"],"names":[],"mappings":";;AAIA;;GAEG;AACH,MAAqB,kBAAkB;IACnC,mGAAmG;IACnG,QAAQ,CAAC,IAAe,EAAE,MAA0B,IAAS,CAAC;CACjE;AAHD,qCAGC"}
1
+ {"version":3,"file":"attribute-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/attribute-validator.ts"],"names":[],"mappings":";;AAGA,uFAAiF;AAEjF;;GAEG;AACH,MAAqB,kBAAkB;IACnC,mGAAmG;IACnG,QAAQ,CAAC,IAAe,EAAE,MAA0B;QAChD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,8DAA4B,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAClF,CAAC;CACJ;AALD,qCAKC"}
@@ -12,4 +12,11 @@ export default class DataModelValidator implements AstValidator<DataModel> {
12
12
  private parseRelation;
13
13
  private isSelfRelation;
14
14
  private validateRelationField;
15
+ private validateBaseAbstractModel;
16
+ }
17
+ export interface MissingOppositeRelationData {
18
+ relationDataModelName: string;
19
+ relationFieldName: string;
20
+ relationFieldDocUri: string;
21
+ dataModelName: string;
15
22
  }
@@ -1,29 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const ast_1 = require("@zenstackhq/language/ast");
4
- const ast_utils_1 = require("../../utils/ast-utils");
4
+ const sdk_1 = require("@zenstackhq/sdk");
5
+ const langium_1 = require("langium");
5
6
  const constants_1 = require("../constants");
6
7
  const utils_1 = require("../utils");
8
+ const attribute_application_validator_1 = require("./attribute-application-validator");
7
9
  const utils_2 = require("./utils");
8
- const sdk_1 = require("@zenstackhq/sdk");
9
10
  /**
10
11
  * Validates data model declarations.
11
12
  */
12
13
  class DataModelValidator {
13
14
  validate(dm, accept) {
14
- (0, utils_2.validateDuplicatedDeclarations)(dm.fields, accept);
15
+ this.validateBaseAbstractModel(dm, accept);
16
+ (0, utils_2.validateDuplicatedDeclarations)(dm.$resolvedFields, accept);
15
17
  this.validateAttributes(dm, accept);
16
18
  this.validateFields(dm, accept);
17
19
  }
18
20
  validateFields(dm, accept) {
19
- const idFields = dm.fields.filter((f) => f.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@id'; }));
20
- const modelLevelIds = (0, utils_1.getIdFields)(dm);
21
- if (idFields.length === 0 && modelLevelIds.length === 0) {
22
- const { allows, denies, hasFieldValidation } = (0, ast_utils_1.analyzePolicies)(dm);
21
+ const idFields = dm.$resolvedFields.filter((f) => f.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@id'; }));
22
+ const uniqueFields = dm.$resolvedFields.filter((f) => f.attributes.find((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@unique'; }));
23
+ const modelLevelIds = (0, sdk_1.getModelIdFields)(dm);
24
+ const modelUniqueFields = (0, sdk_1.getModelUniqueFields)(dm);
25
+ if (idFields.length === 0 &&
26
+ modelLevelIds.length === 0 &&
27
+ uniqueFields.length === 0 &&
28
+ modelUniqueFields.length === 0) {
29
+ const { allows, denies, hasFieldValidation } = (0, sdk_1.analyzePolicies)(dm);
23
30
  if (allows.length > 0 || denies.length > 0 || hasFieldValidation) {
24
31
  // TODO: relax this requirement to require only @unique fields
25
32
  // when access policies or field valdaition is used, require an @id field
26
- accept('error', 'Model must include a field with @id attribute or a model-level @@id attribute', {
33
+ accept('error', 'Model must include a field with @id or @unique attribute, or a model-level @@id or @@unique attribute to use access policies', {
27
34
  node: dm,
28
35
  });
29
36
  }
@@ -50,21 +57,25 @@ class DataModelValidator {
50
57
  });
51
58
  }
52
59
  dm.fields.forEach((field) => this.validateField(field, accept));
60
+ if (!dm.isAbstract) {
61
+ dm.$resolvedFields
62
+ .filter((x) => { var _a; return (0, ast_1.isDataModel)((_a = x.type.reference) === null || _a === void 0 ? void 0 : _a.ref); })
63
+ .forEach((y) => {
64
+ this.validateRelationField(y, accept);
65
+ });
66
+ }
53
67
  }
54
68
  validateField(field, accept) {
55
- var _a;
56
69
  if (field.type.array && field.type.optional) {
57
70
  accept('error', 'Optional lists are not supported. Use either `Type[]` or `Type?`', { node: field.type });
58
71
  }
59
- field.attributes.forEach((attr) => (0, utils_2.validateAttributeApplication)(attr, accept));
60
- if ((0, ast_1.isDataModel)((_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref)) {
61
- this.validateRelationField(field, accept);
72
+ if (field.type.unsupported && !(0, ast_1.isStringLiteral)(field.type.unsupported.value)) {
73
+ accept('error', 'Unsupported type argument must be a string literal', { node: field.type.unsupported });
62
74
  }
75
+ field.attributes.forEach((attr) => (0, attribute_application_validator_1.validateAttributeApplication)(attr, accept));
63
76
  }
64
77
  validateAttributes(dm, accept) {
65
- dm.attributes.forEach((attr) => {
66
- (0, utils_2.validateAttributeApplication)(attr, accept);
67
- });
78
+ dm.attributes.forEach((attr) => (0, attribute_application_validator_1.validateAttributeApplication)(attr, accept));
68
79
  }
69
80
  parseRelation(field, accept) {
70
81
  var _a, _b, _c, _d;
@@ -78,7 +89,7 @@ class DataModelValidator {
78
89
  }
79
90
  for (const arg of relAttr.args) {
80
91
  if (!arg.name || arg.name === 'name') {
81
- if ((0, ast_1.isLiteralExpr)(arg.value)) {
92
+ if ((0, ast_1.isStringLiteral)(arg.value)) {
82
93
  name = arg.value.value;
83
94
  }
84
95
  }
@@ -149,7 +160,7 @@ class DataModelValidator {
149
160
  return { attr: relAttr, name, fields, references, valid };
150
161
  }
151
162
  isSelfRelation(field, relationName) {
152
- var _a, _b, _c, _d;
163
+ var _a, _b, _c;
153
164
  if (((_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref) === field.$container) {
154
165
  // field directly references back to its type
155
166
  return true;
@@ -157,15 +168,16 @@ class DataModelValidator {
157
168
  if (relationName) {
158
169
  // field's relation points to another type, and that type's opposite relation field
159
170
  // points back
160
- const oppositeModelFields = (_c = (_b = field.type.reference) === null || _b === void 0 ? void 0 : _b.ref) === null || _c === void 0 ? void 0 : _c.fields;
161
- if (oppositeModelFields) {
171
+ const oppositeModel = (_b = field.type.reference) === null || _b === void 0 ? void 0 : _b.ref;
172
+ if (oppositeModel) {
173
+ const oppositeModelFields = oppositeModel.$resolvedFields;
162
174
  for (const oppositeField of oppositeModelFields) {
163
175
  // find the opposite relation with the matching name
164
176
  const relAttr = oppositeField.attributes.find((a) => { var _a; return ((_a = a.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@relation'; });
165
177
  if (relAttr) {
166
178
  const relNameExpr = relAttr.args.find((a) => !a.name || a.name === 'name');
167
179
  const relName = (0, sdk_1.getLiteral)(relNameExpr === null || relNameExpr === void 0 ? void 0 : relNameExpr.value);
168
- if (relName === relationName && ((_d = oppositeField.type.reference) === null || _d === void 0 ? void 0 : _d.ref) === field.$container) {
180
+ if (relName === relationName && ((_c = oppositeField.type.reference) === null || _c === void 0 ? void 0 : _c.ref) === field.$container) {
169
181
  // found an opposite relation field that points back to this field's type
170
182
  return true;
171
183
  }
@@ -176,24 +188,49 @@ class DataModelValidator {
176
188
  return false;
177
189
  }
178
190
  validateRelationField(field, accept) {
179
- var _a, _b, _c, _d, _e;
191
+ var _a, _b, _c, _d, _e, _f;
180
192
  const thisRelation = this.parseRelation(field, accept);
181
193
  if (!thisRelation.valid) {
182
194
  return;
183
195
  }
184
196
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
185
197
  const oppositeModel = field.type.reference.ref;
186
- let oppositeFields = oppositeModel.fields.filter((f) => { var _a; return ((_a = f.type.reference) === null || _a === void 0 ? void 0 : _a.ref) === field.$container; });
198
+ // Use name because the current document might be updated
199
+ let oppositeFields = oppositeModel.$resolvedFields.filter((f) => { var _a, _b; return ((_b = (_a = f.type.reference) === null || _a === void 0 ? void 0 : _a.ref) === null || _b === void 0 ? void 0 : _b.name) === field.$container.name; });
187
200
  oppositeFields = oppositeFields.filter((f) => {
188
201
  const fieldRel = this.parseRelation(f);
189
202
  return fieldRel.valid && fieldRel.name === thisRelation.name;
190
203
  });
191
204
  if (oppositeFields.length === 0) {
192
- accept('error', `The relation field "${field.name}" on model "${field.$container.name}" is missing an opposite relation field on model "${oppositeModel.name}"`, { node: field, code: constants_1.IssueCodes.MissingOppositeRelation });
205
+ const node = field.$isInherited ? field.$container : field;
206
+ const info = { node, code: constants_1.IssueCodes.MissingOppositeRelation };
207
+ let relationFieldDocUri;
208
+ let relationDataModelName;
209
+ if (field.$isInherited) {
210
+ info.property = 'name';
211
+ const container = field.$container;
212
+ const abstractContainer = (_a = container.superTypes.find((x) => { var _a; return (_a = x.ref) === null || _a === void 0 ? void 0 : _a.fields.find((f) => f.name === field.name); })) === null || _a === void 0 ? void 0 : _a.ref;
213
+ relationFieldDocUri = (0, langium_1.getDocument)(abstractContainer).textDocument.uri;
214
+ relationDataModelName = abstractContainer.name;
215
+ }
216
+ else {
217
+ relationFieldDocUri = (0, langium_1.getDocument)(field).textDocument.uri;
218
+ relationDataModelName = field.$container.name;
219
+ }
220
+ const data = {
221
+ relationFieldName: field.name,
222
+ relationDataModelName,
223
+ relationFieldDocUri,
224
+ dataModelName: field.$container.name,
225
+ };
226
+ info.data = data;
227
+ accept('error', `The relation field "${field.name}" on model "${field.$container.name}" is missing an opposite relation field on model "${oppositeModel.name}"`, info);
193
228
  return;
194
229
  }
195
230
  else if (oppositeFields.length > 1) {
196
- oppositeFields.forEach((f) => {
231
+ oppositeFields
232
+ .filter((x) => !x.$isInherited)
233
+ .forEach((f) => {
197
234
  if (this.isSelfRelation(f)) {
198
235
  // self relations are partial
199
236
  // https://www.prisma.io/docs/concepts/components/prisma-schema/relations/self-relations
@@ -207,7 +244,7 @@ class DataModelValidator {
207
244
  const oppositeField = oppositeFields[0];
208
245
  const oppositeRelation = this.parseRelation(oppositeField);
209
246
  let relationOwner;
210
- if (((_a = thisRelation === null || thisRelation === void 0 ? void 0 : thisRelation.references) === null || _a === void 0 ? void 0 : _a.length) && ((_b = thisRelation.fields) === null || _b === void 0 ? void 0 : _b.length)) {
247
+ if (((_b = thisRelation === null || thisRelation === void 0 ? void 0 : thisRelation.references) === null || _b === void 0 ? void 0 : _b.length) && ((_c = thisRelation.fields) === null || _c === void 0 ? void 0 : _c.length)) {
211
248
  if ((oppositeRelation === null || oppositeRelation === void 0 ? void 0 : oppositeRelation.references) || (oppositeRelation === null || oppositeRelation === void 0 ? void 0 : oppositeRelation.fields)) {
212
249
  accept('error', '"fields" and "references" must be provided only on one side of relation field', {
213
250
  node: oppositeField,
@@ -218,7 +255,7 @@ class DataModelValidator {
218
255
  relationOwner = oppositeField;
219
256
  }
220
257
  }
221
- else if (((_c = oppositeRelation === null || oppositeRelation === void 0 ? void 0 : oppositeRelation.references) === null || _c === void 0 ? void 0 : _c.length) && ((_d = oppositeRelation.fields) === null || _d === void 0 ? void 0 : _d.length)) {
258
+ else if (((_d = oppositeRelation === null || oppositeRelation === void 0 ? void 0 : oppositeRelation.references) === null || _d === void 0 ? void 0 : _d.length) && ((_e = oppositeRelation.fields) === null || _e === void 0 ? void 0 : _e.length)) {
222
259
  if ((thisRelation === null || thisRelation === void 0 ? void 0 : thisRelation.references) || (thisRelation === null || thisRelation === void 0 ? void 0 : thisRelation.fields)) {
223
260
  accept('error', '"fields" and "references" must be provided only on one side of relation field', {
224
261
  node: field,
@@ -230,11 +267,14 @@ class DataModelValidator {
230
267
  }
231
268
  }
232
269
  else {
233
- [field, oppositeField].forEach((f) => {
234
- if (!this.isSelfRelation(f, thisRelation.name)) {
235
- accept('error', 'Field for one side of relation must carry @relation attribute with both "fields" and "references" fields', { node: f });
236
- }
237
- });
270
+ // if both the field is array, then it's an implicit many-to-many relation
271
+ if (!(field.type.array && oppositeField.type.array)) {
272
+ [field, oppositeField].forEach((f) => {
273
+ if (!this.isSelfRelation(f, thisRelation.name)) {
274
+ accept('error', 'Field for one side of relation must carry @relation attribute with both "fields" and "references" fields', { node: f });
275
+ }
276
+ });
277
+ }
238
278
  return;
239
279
  }
240
280
  if (!relationOwner.type.array && !relationOwner.type.optional) {
@@ -259,10 +299,10 @@ class DataModelValidator {
259
299
  // UserData.userId field needs to be @unique
260
300
  const containingModel = field.$container;
261
301
  const uniqueFieldList = (0, utils_1.getUniqueFields)(containingModel);
262
- (_e = thisRelation.fields) === null || _e === void 0 ? void 0 : _e.forEach((ref) => {
302
+ (_f = thisRelation.fields) === null || _f === void 0 ? void 0 : _f.forEach((ref) => {
263
303
  const refField = ref.target.ref;
264
304
  if (refField) {
265
- if (refField.attributes.find((a) => { var _a; return ((_a = a.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@unique'; })) {
305
+ if (refField.attributes.find((a) => { var _a, _b; return ((_a = a.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@id' || ((_b = a.decl.ref) === null || _b === void 0 ? void 0 : _b.name) === '@unique'; })) {
266
306
  return;
267
307
  }
268
308
  if (uniqueFieldList.some((list) => list.includes(refField))) {
@@ -273,6 +313,17 @@ class DataModelValidator {
273
313
  });
274
314
  }
275
315
  }
316
+ validateBaseAbstractModel(model, accept) {
317
+ model.superTypes.forEach((superType, index) => {
318
+ var _a;
319
+ if (!((_a = superType.ref) === null || _a === void 0 ? void 0 : _a.isAbstract))
320
+ accept('error', `Model ${superType.$refText} cannot be extended because it's not abstract`, {
321
+ node: model,
322
+ property: 'superTypes',
323
+ index,
324
+ });
325
+ });
326
+ }
276
327
  }
277
328
  exports.default = DataModelValidator;
278
329
  //# sourceMappingURL=datamodel-validator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datamodel-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/datamodel-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datamodel-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/datamodel-validator.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const attribute_application_validator_1 = require("./attribute-application-validator");
3
4
  const utils_1 = require("./utils");
4
5
  /**
5
6
  * Validates enum declarations.
@@ -14,14 +15,10 @@ class EnumValidator {
14
15
  });
15
16
  }
16
17
  validateAttributes(_enum, accept) {
17
- _enum.attributes.forEach((attr) => {
18
- (0, utils_1.validateAttributeApplication)(attr, accept);
19
- });
18
+ _enum.attributes.forEach((attr) => (0, attribute_application_validator_1.validateAttributeApplication)(attr, accept));
20
19
  }
21
20
  validateField(field, accept) {
22
- field.attributes.forEach((attr) => {
23
- (0, utils_1.validateAttributeApplication)(attr, accept);
24
- });
21
+ field.attributes.forEach((attr) => (0, attribute_application_validator_1.validateAttributeApplication)(attr, accept));
25
22
  }
26
23
  }
27
24
  exports.default = EnumValidator;
@@ -1 +1 @@
1
- {"version":3,"file":"enum-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/enum-validator.ts"],"names":[],"mappings":";;AAGA,mCAAuF;AAEvF;;GAEG;AACH,MAAqB,aAAa;IAC9B,6EAA6E;IAC7E,QAAQ,CAAC,KAAW,EAAE,MAA0B;QAC5C,IAAA,sCAA8B,EAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,kBAAkB,CAAC,KAAW,EAAE,MAA0B;QAC9D,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9B,IAAA,oCAA4B,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,aAAa,CAAC,KAAgB,EAAE,MAA0B;QAC9D,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9B,IAAA,oCAA4B,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AArBD,gCAqBC"}
1
+ {"version":3,"file":"enum-validator.js","sourceRoot":"","sources":["../../../src/language-server/validator/enum-validator.ts"],"names":[],"mappings":";;AAGA,uFAAiF;AACjF,mCAAyD;AAEzD;;GAEG;AACH,MAAqB,aAAa;IAC9B,6EAA6E;IAC7E,QAAQ,CAAC,KAAW,EAAE,MAA0B;QAC5C,IAAA,sCAA8B,EAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,kBAAkB,CAAC,KAAW,EAAE,MAA0B;QAC9D,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,8DAA4B,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACnF,CAAC;IAEO,aAAa,CAAC,KAAgB,EAAE,MAA0B;QAC9D,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,8DAA4B,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACnF,CAAC;CACJ;AAjBD,gCAiBC"}
@@ -6,5 +6,5 @@ import { AstValidator } from '../types';
6
6
  */
7
7
  export default class ExpressionValidator implements AstValidator<Expression> {
8
8
  validate(expr: Expression, accept: ValidationAcceptor): void;
9
- private isCollectionPredicate;
9
+ private validateBinaryExpr;
10
10
  }