zenstack 1.0.0-beta.2 → 1.0.0-beta.21

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 (94) hide show
  1. package/README.md +16 -8
  2. package/cli/cli-util.js +1 -1
  3. package/cli/cli-util.js.map +1 -1
  4. package/cli/config.d.ts +1 -10
  5. package/cli/config.js +2 -7
  6. package/cli/config.js.map +1 -1
  7. package/cli/plugin-runner.d.ts +2 -1
  8. package/cli/plugin-runner.js +101 -47
  9. package/cli/plugin-runner.js.map +1 -1
  10. package/language-server/constants.d.ts +0 -4
  11. package/language-server/constants.js +1 -14
  12. package/language-server/constants.js.map +1 -1
  13. package/language-server/utils.d.ts +1 -10
  14. package/language-server/utils.js +1 -20
  15. package/language-server/utils.js.map +1 -1
  16. package/language-server/validator/attribute-application-validator.d.ts +15 -0
  17. package/language-server/validator/attribute-application-validator.js +246 -0
  18. package/language-server/validator/attribute-application-validator.js.map +1 -0
  19. package/language-server/validator/attribute-validator.d.ts +1 -1
  20. package/language-server/validator/attribute-validator.js +4 -1
  21. package/language-server/validator/attribute-validator.js.map +1 -1
  22. package/language-server/validator/datamodel-validator.js +13 -9
  23. package/language-server/validator/datamodel-validator.js.map +1 -1
  24. package/language-server/validator/enum-validator.js +3 -6
  25. package/language-server/validator/enum-validator.js.map +1 -1
  26. package/language-server/validator/expression-validator.js +70 -1
  27. package/language-server/validator/expression-validator.js.map +1 -1
  28. package/language-server/validator/function-decl-validator.d.ts +9 -0
  29. package/language-server/validator/function-decl-validator.js +13 -0
  30. package/language-server/validator/function-decl-validator.js.map +1 -0
  31. package/language-server/validator/function-invocation-validator.js +34 -9
  32. package/language-server/validator/function-invocation-validator.js.map +1 -1
  33. package/language-server/validator/utils.d.ts +2 -3
  34. package/language-server/validator/utils.js +3 -119
  35. package/language-server/validator/utils.js.map +1 -1
  36. package/language-server/validator/zmodel-validator.d.ts +2 -1
  37. package/language-server/validator/zmodel-validator.js +8 -3
  38. package/language-server/validator/zmodel-validator.js.map +1 -1
  39. package/language-server/zmodel-linker.d.ts +1 -0
  40. package/language-server/zmodel-linker.js +76 -26
  41. package/language-server/zmodel-linker.js.map +1 -1
  42. package/package.json +9 -16
  43. package/plugins/access-policy/expression-writer.d.ts +5 -0
  44. package/plugins/access-policy/expression-writer.js +154 -74
  45. package/plugins/access-policy/expression-writer.js.map +1 -1
  46. package/plugins/access-policy/policy-guard-generator.d.ts +8 -1
  47. package/plugins/access-policy/policy-guard-generator.js +296 -75
  48. package/plugins/access-policy/policy-guard-generator.js.map +1 -1
  49. package/plugins/model-meta/index.js +69 -5
  50. package/plugins/model-meta/index.js.map +1 -1
  51. package/plugins/plugin-utils.d.ts +4 -0
  52. package/plugins/plugin-utils.js +16 -1
  53. package/plugins/plugin-utils.js.map +1 -1
  54. package/plugins/prisma/prisma-builder.d.ts +3 -1
  55. package/plugins/prisma/prisma-builder.js +17 -16
  56. package/plugins/prisma/prisma-builder.js.map +1 -1
  57. package/plugins/prisma/schema-generator.d.ts +1 -3
  58. package/plugins/prisma/schema-generator.js +61 -84
  59. package/plugins/prisma/schema-generator.js.map +1 -1
  60. package/plugins/prisma/zmodel-code-generator.js +4 -2
  61. package/plugins/prisma/zmodel-code-generator.js.map +1 -1
  62. package/plugins/zod/generator.js +148 -19
  63. package/plugins/zod/generator.js.map +1 -1
  64. package/plugins/zod/index.d.ts +1 -1
  65. package/plugins/zod/transformer.d.ts +6 -5
  66. package/plugins/zod/transformer.js +172 -108
  67. package/plugins/zod/transformer.js.map +1 -1
  68. package/plugins/zod/types.d.ts +4 -1
  69. package/plugins/zod/utils/schema-gen.d.ts +3 -0
  70. package/plugins/zod/utils/schema-gen.js +188 -0
  71. package/plugins/zod/utils/schema-gen.js.map +1 -0
  72. package/res/stdlib.zmodel +121 -32
  73. package/telemetry.d.ts +1 -0
  74. package/telemetry.js +3 -1
  75. package/telemetry.js.map +1 -1
  76. package/utils/ast-utils.d.ts +1 -14
  77. package/utils/ast-utils.js +2 -72
  78. package/utils/ast-utils.js.map +1 -1
  79. package/utils/pkg-utils.js +1 -1
  80. package/utils/pkg-utils.js.map +1 -1
  81. package/utils/typescript-expression-transformer.d.ts +53 -0
  82. package/utils/typescript-expression-transformer.js +312 -0
  83. package/utils/typescript-expression-transformer.js.map +1 -0
  84. package/utils/version-utils.js +7 -2
  85. package/utils/version-utils.js.map +1 -1
  86. package/plugins/access-policy/typescript-expression-transformer.d.ts +0 -28
  87. package/plugins/access-policy/typescript-expression-transformer.js +0 -180
  88. package/plugins/access-policy/typescript-expression-transformer.js.map +0 -1
  89. package/plugins/access-policy/utils.d.ts +0 -5
  90. package/plugins/access-policy/utils.js +0 -14
  91. package/plugins/access-policy/utils.js.map +0 -1
  92. package/plugins/access-policy/zod-schema-generator.d.ts +0 -12
  93. package/plugins/access-policy/zod-schema-generator.js +0 -160
  94. package/plugins/access-policy/zod-schema-generator.js.map +0 -1
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeValidationRefinements = exports.makeFieldSchema = void 0;
4
+ const sdk_1 = require("@zenstackhq/sdk");
5
+ const ast_1 = require("@zenstackhq/sdk/ast");
6
+ const upper_case_first_1 = require("upper-case-first");
7
+ const __1 = require("..");
8
+ const typescript_expression_transformer_1 = require("../../../utils/typescript-expression-transformer");
9
+ function makeFieldSchema(field) {
10
+ var _a;
11
+ let schema = makeZodSchema(field);
12
+ const isDecimal = field.type.type === 'Decimal';
13
+ for (const attr of field.attributes) {
14
+ const message = getAttrLiteralArg(attr, 'message');
15
+ const messageArg = message ? `, { message: ${JSON.stringify(message)} }` : '';
16
+ const messageArgFirst = message ? `{ message: ${JSON.stringify(message)} }` : '';
17
+ switch ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) {
18
+ case '@length': {
19
+ const min = getAttrLiteralArg(attr, 'min');
20
+ if (min) {
21
+ schema += `.min(${min}${messageArg})`;
22
+ }
23
+ const max = getAttrLiteralArg(attr, 'max');
24
+ if (max) {
25
+ schema += `.max(${max}${messageArg})`;
26
+ }
27
+ break;
28
+ }
29
+ case '@contains': {
30
+ const expr = getAttrLiteralArg(attr, 'text');
31
+ if (expr) {
32
+ schema += `.includes(${JSON.stringify(expr)}${messageArg})`;
33
+ }
34
+ break;
35
+ }
36
+ case '@regex': {
37
+ const expr = getAttrLiteralArg(attr, 'regex');
38
+ if (expr) {
39
+ schema += `.regex(new RegExp(${JSON.stringify(expr)})${messageArg})`;
40
+ }
41
+ break;
42
+ }
43
+ case '@startsWith': {
44
+ const text = getAttrLiteralArg(attr, 'text');
45
+ if (text) {
46
+ schema += `.startsWith(${JSON.stringify(text)}${messageArg})`;
47
+ }
48
+ break;
49
+ }
50
+ case '@endsWith': {
51
+ const text = getAttrLiteralArg(attr, 'text');
52
+ if (text) {
53
+ schema += `.endsWith(${JSON.stringify(text)}${messageArg})`;
54
+ }
55
+ break;
56
+ }
57
+ case '@email': {
58
+ schema += `.email(${messageArgFirst})`;
59
+ break;
60
+ }
61
+ case '@url': {
62
+ schema += `.url(${messageArgFirst})`;
63
+ break;
64
+ }
65
+ case '@datetime': {
66
+ schema += `.datetime({ offset: true${message ? ', message: ' + JSON.stringify(message) : ''} })`;
67
+ break;
68
+ }
69
+ case '@gt': {
70
+ const value = getAttrLiteralArg(attr, 'value');
71
+ if (value !== undefined) {
72
+ schema += isDecimal ? refineDecimal('gt', value, messageArg) : `.gt(${value}${messageArg})`;
73
+ }
74
+ break;
75
+ }
76
+ case '@gte': {
77
+ const value = getAttrLiteralArg(attr, 'value');
78
+ if (value !== undefined) {
79
+ schema += isDecimal ? refineDecimal('gte', value, messageArg) : `.gte(${value}${messageArg})`;
80
+ }
81
+ break;
82
+ }
83
+ case '@lt': {
84
+ const value = getAttrLiteralArg(attr, 'value');
85
+ if (value !== undefined) {
86
+ schema += isDecimal ? refineDecimal('lt', value, messageArg) : `.lt(${value}${messageArg})`;
87
+ }
88
+ break;
89
+ }
90
+ case '@lte': {
91
+ const value = getAttrLiteralArg(attr, 'value');
92
+ if (value !== undefined) {
93
+ schema += isDecimal ? refineDecimal('lte', value, messageArg) : `.lte(${value}${messageArg})`;
94
+ }
95
+ break;
96
+ }
97
+ }
98
+ }
99
+ if (field.type.optional) {
100
+ schema += '.nullish()';
101
+ }
102
+ return schema;
103
+ }
104
+ exports.makeFieldSchema = makeFieldSchema;
105
+ function makeZodSchema(field) {
106
+ var _a, _b;
107
+ let schema;
108
+ if (((_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref) && (0, ast_1.isEnum)((_b = field.type.reference) === null || _b === void 0 ? void 0 : _b.ref)) {
109
+ schema = `${(0, upper_case_first_1.upperCaseFirst)(field.type.reference.ref.name)}Schema`;
110
+ }
111
+ else {
112
+ switch (field.type.type) {
113
+ case 'Int':
114
+ case 'Float':
115
+ schema = 'z.number()';
116
+ break;
117
+ case 'Decimal':
118
+ schema = 'DecimalSchema';
119
+ break;
120
+ case 'BigInt':
121
+ schema = 'z.bigint()';
122
+ break;
123
+ case 'String':
124
+ schema = 'z.string()';
125
+ break;
126
+ case 'Boolean':
127
+ schema = 'z.boolean()';
128
+ break;
129
+ case 'DateTime':
130
+ schema = 'z.date()';
131
+ break;
132
+ case 'Bytes':
133
+ schema = 'z.union([z.string(), z.instanceof(Uint8Array)])';
134
+ break;
135
+ default:
136
+ schema = 'z.any()';
137
+ break;
138
+ }
139
+ }
140
+ if (field.type.array) {
141
+ schema = `z.array(${schema})`;
142
+ }
143
+ return schema;
144
+ }
145
+ function makeValidationRefinements(model) {
146
+ const attrs = model.attributes.filter((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@validate'; });
147
+ const refinements = attrs
148
+ .map((attr) => {
149
+ const valueArg = (0, sdk_1.getAttributeArg)(attr, 'value');
150
+ if (!valueArg) {
151
+ return undefined;
152
+ }
153
+ const messageArg = (0, sdk_1.getAttributeArgLiteral)(attr, 'message');
154
+ const message = messageArg ? `, { message: ${JSON.stringify(messageArg)} }` : '';
155
+ try {
156
+ const expr = new typescript_expression_transformer_1.TypeScriptExpressionTransformer({
157
+ context: sdk_1.ExpressionContext.ValidationRule,
158
+ fieldReferenceContext: 'value',
159
+ }).transform(valueArg);
160
+ return `.refine((value: any) => ${expr}${message})`;
161
+ }
162
+ catch (err) {
163
+ if (err instanceof typescript_expression_transformer_1.TypeScriptExpressionTransformerError) {
164
+ throw new sdk_1.PluginError(__1.name, err.message);
165
+ }
166
+ else {
167
+ throw err;
168
+ }
169
+ }
170
+ })
171
+ .filter((r) => !!r);
172
+ return refinements;
173
+ }
174
+ exports.makeValidationRefinements = makeValidationRefinements;
175
+ function getAttrLiteralArg(attr, paramName) {
176
+ const arg = attr.args.find((arg) => { var _a; return ((_a = arg.$resolvedParam) === null || _a === void 0 ? void 0 : _a.name) === paramName; });
177
+ return arg && (0, sdk_1.getLiteral)(arg.value);
178
+ }
179
+ function refineDecimal(op, value, messageArg) {
180
+ return `.refine(v => {
181
+ try {
182
+ return new Decimal(v.toString()).${op}(${value});
183
+ } catch {
184
+ return false;
185
+ }
186
+ }${messageArg})`;
187
+ }
188
+ //# sourceMappingURL=schema-gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-gen.js","sourceRoot":"","sources":["../../../../src/plugins/zod/utils/schema-gen.ts"],"names":[],"mappings":"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"}
package/res/stdlib.zmodel CHANGED
@@ -49,6 +49,20 @@ enum AttributeTargetField {
49
49
  ModelField
50
50
  }
51
51
 
52
+ /**
53
+ * Indicates the expression context a function can be used.
54
+ */
55
+ enum ExpressionContext {
56
+ // used in @default
57
+ DefaultValue
58
+
59
+ // used in @@allow and @@deny
60
+ AccessPolicy
61
+
62
+ // used in @@validate
63
+ ValidationRule
64
+ }
65
+
52
66
  /**
53
67
  * Reads value from an environment variable.
54
68
  */
@@ -59,98 +73,108 @@ function env(name: String): String {
59
73
  * Gets the current login user.
60
74
  */
61
75
  function auth(): Any {
62
- }
76
+ } @@@expressionContext([AccessPolicy])
63
77
 
64
78
  /**
65
79
  * Gets current date-time (as DateTime type).
66
80
  */
67
81
  function now(): DateTime {
68
- }
82
+ } @@@expressionContext([DefaultValue, AccessPolicy, ValidationRule])
69
83
 
70
84
  /**
71
85
  * Generates a globally unique identifier based on the UUID specs.
72
86
  */
73
87
  function uuid(): String {
74
- }
88
+ } @@@expressionContext([DefaultValue])
75
89
 
76
90
  /**
77
91
  * Generates a globally unique identifier based on the CUID spec.
78
92
  */
79
93
  function cuid(): String {
80
- }
94
+ } @@@expressionContext([DefaultValue])
81
95
 
82
96
  /**
83
97
  * Creates a sequence of integers in the underlying database and assign the incremented
84
98
  * values to the ID values of the created records based on the sequence.
85
99
  */
86
100
  function autoincrement(): Int {
87
- }
101
+ } @@@expressionContext([DefaultValue])
88
102
 
89
103
  /**
90
104
  * Represents default values that cannot be expressed in the Prisma schema (such as random()).
91
105
  */
92
106
  function dbgenerated(expr: String): Any {
93
- }
107
+ } @@@expressionContext([DefaultValue])
94
108
 
95
109
  /**
96
110
  * Gets entities value before an update. Only valid when used in a "update" policy rule.
97
111
  */
98
112
  function future(): Any {
99
- }
113
+ } @@@expressionContext([AccessPolicy])
100
114
 
101
115
  /**
102
116
  * If the field value contains the search string. By default, the search is case-sensitive,
103
117
  * but you can override the behavior with the "caseInSensitive" argument.
104
118
  */
105
119
  function contains(field: String, search: String, caseInSensitive: Boolean?): Boolean {
106
- }
120
+ } @@@expressionContext([AccessPolicy, ValidationRule])
107
121
 
108
122
  /**
109
123
  * If the field value matches the search condition with [full-text-search](https://www.prisma.io/docs/concepts/components/prisma-client/full-text-search). Need to enable "fullTextSearch" preview feature to use.
110
124
  */
111
125
  function search(field: String, search: String): Boolean {
112
- }
126
+ } @@@expressionContext([AccessPolicy])
113
127
 
114
128
  /**
115
129
  * If the field value starts with the search string
116
130
  */
117
131
  function startsWith(field: String, search: String): Boolean {
118
- }
132
+ } @@@expressionContext([AccessPolicy, ValidationRule])
119
133
 
120
134
  /**
121
135
  * If the field value ends with the search string
122
136
  */
123
137
  function endsWith(field: String, search: String): Boolean {
124
- }
138
+ } @@@expressionContext([AccessPolicy, ValidationRule])
125
139
 
126
140
  /**
127
141
  * If the field value (a list) has the given search value
128
142
  */
129
143
  function has(field: Any[], search: Any): Boolean {
130
- }
144
+ } @@@expressionContext([AccessPolicy, ValidationRule])
131
145
 
132
146
  /**
133
147
  * If the field value (a list) has every element of the search list
134
148
  */
135
149
  function hasEvery(field: Any[], search: Any[]): Boolean {
136
- }
150
+ } @@@expressionContext([AccessPolicy, ValidationRule])
137
151
 
138
152
  /**
139
153
  * If the field value (a list) has at least one element of the search list
140
154
  */
141
155
  function hasSome(field: Any[], search: Any[]): Boolean {
142
- }
156
+ } @@@expressionContext([AccessPolicy, ValidationRule])
143
157
 
144
158
  /**
145
159
  * If the field value (a list) is empty
146
160
  */
147
161
  function isEmpty(field: Any[]): Boolean {
148
- }
162
+ } @@@expressionContext([AccessPolicy, ValidationRule])
149
163
 
150
164
  /**
151
165
  * Marks an attribute to be only applicable to certain field types.
152
166
  */
153
- attribute @@@targetField(targetField: AttributeTargetField[])
167
+ attribute @@@targetField(_ targetField: AttributeTargetField[])
168
+
169
+ /**
170
+ * Marks an attribute to be used for data validation.
171
+ */
172
+ attribute @@@validation()
173
+
174
+ /**
175
+ * Indicates the expression context a function can be used.
176
+ */
177
+ attribute @@@expressionContext(_ context: ExpressionContext[])
154
178
 
155
179
  /**
156
180
  * Indicates an attribute is directly supported by the Prisma schema.
@@ -215,12 +239,12 @@ attribute @map(_ name: String) @@@prisma
215
239
  attribute @@map(_ name: String) @@@prisma
216
240
 
217
241
  /**
218
- * Exclude a field from the Prisma Client (for example, a field that you do not want Prisma users to update).
242
+ * Exclude a field from the Prisma Client (for example, a field that you do not want Prisma users to update).
219
243
  */
220
244
  attribute @ignore() @@@prisma
221
245
 
222
246
  /**
223
- * Exclude a model from the Prisma Client (for example, a model that you do not want Prisma users to update).
247
+ * Exclude a model from the Prisma Client (for example, a model that you do not want Prisma users to update).
224
248
  */
225
249
  attribute @@ignore() @@@prisma
226
250
 
@@ -229,6 +253,12 @@ attribute @@ignore() @@@prisma
229
253
  */
230
254
  attribute @updatedAt() @@@targetField([DateTimeField]) @@@prisma
231
255
 
256
+ /**
257
+ * Add full text index (MySQL only).
258
+ */
259
+ attribute @@fulltext(_ fields: FieldReference[]) @@@prisma
260
+
261
+
232
262
  // String type modifiers
233
263
 
234
264
  attribute @db.String(_ x: Int?) @@@targetField([StringField]) @@@prisma
@@ -327,11 +357,21 @@ attribute @@schema(_ name: String) @@@prisma
327
357
  */
328
358
  attribute @@allow(_ operation: String, _ condition: Boolean)
329
359
 
360
+ /**
361
+ * Defines an access policy that allows the annotated field to be read or updated.
362
+ */
363
+ attribute @allow(_ operation: String, _ condition: Boolean)
364
+
330
365
  /**
331
366
  * Defines an access policy that denies a set of operations when the given condition is true.
332
367
  */
333
368
  attribute @@deny(_ operation: String, _ condition: Boolean)
334
369
 
370
+ /**
371
+ * Defines an access policy that denies the annotated field to be read or updated.
372
+ */
373
+ attribute @deny(_ operation: String, _ condition: Boolean)
374
+
335
375
  /**
336
376
  * Indicates that the field is a password field and needs to be hashed before persistence.
337
377
  *
@@ -351,60 +391,109 @@ attribute @password(saltLength: Int?, salt: String?) @@@targetField([StringField
351
391
  */
352
392
  attribute @omit()
353
393
 
394
+ //////////////////////////////////////////////
395
+ // Begin validation attributes and functions
396
+ //////////////////////////////////////////////
397
+
354
398
  /**
355
399
  * Validates length of a string field.
356
400
  */
357
- attribute @length(_ min: Int?, _ max: Int?) @@@targetField([StringField])
401
+ attribute @length(_ min: Int?, _ max: Int?, _ message: String?) @@@targetField([StringField]) @@@validation
358
402
 
359
403
  /**
360
- * Validates a string field value matches a regex.
404
+ * Validates a string field value starts with the given text.
361
405
  */
362
- attribute @regex(_ regex: String) @@@targetField([StringField])
406
+ attribute @startsWith(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
363
407
 
364
408
  /**
365
- * Validates a string field value starts with the given text.
409
+ * Validates a string field value ends with the given text.
366
410
  */
367
- attribute @startsWith(_ text: String) @@@targetField([StringField])
411
+ attribute @endsWith(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
368
412
 
369
413
  /**
370
- * Validates a string field value ends with the given text.
414
+ * Validates a string field value contains the given text.
415
+ */
416
+ attribute @contains(_ text: String, _ message: String?) @@@targetField([StringField]) @@@validation
417
+
418
+ /**
419
+ * Validates a string field value matches a regex.
371
420
  */
372
- attribute @endsWith(_ text: String) @@@targetField([StringField])
421
+ attribute @regex(_ regex: String, _ message: String?) @@@targetField([StringField]) @@@validation
373
422
 
374
423
  /**
375
424
  * Validates a string field value is a valid email address.
376
425
  */
377
- attribute @email() @@@targetField([StringField])
426
+ attribute @email(_ message: String?) @@@targetField([StringField]) @@@validation
378
427
 
379
428
  /**
380
429
  * Validates a string field value is a valid ISO datetime.
381
430
  */
382
- attribute @datetime() @@@targetField([StringField])
431
+ attribute @datetime(_ message: String?) @@@targetField([StringField]) @@@validation
383
432
 
384
433
  /**
385
434
  * Validates a string field value is a valid url.
386
435
  */
387
- attribute @url() @@@targetField([StringField])
436
+ attribute @url(_ message: String?) @@@targetField([StringField]) @@@validation
388
437
 
389
438
  /**
390
439
  * Validates a number field is greater than the given value.
391
440
  */
392
- attribute @gt(_ value: Int) @@@targetField([IntField, FloatField, DecimalField])
441
+ attribute @gt(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
393
442
 
394
443
  /**
395
444
  * Validates a number field is greater than or equal to the given value.
396
445
  */
397
- attribute @gte(_ value: Int) @@@targetField([IntField, FloatField, DecimalField])
446
+ attribute @gte(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
398
447
 
399
448
  /**
400
449
  * Validates a number field is less than the given value.
401
450
  */
402
- attribute @lt(_ value: Int) @@@targetField([IntField, FloatField, DecimalField])
451
+ attribute @lt(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
403
452
 
404
453
  /**
405
454
  * Validates a number field is less than or equal to the given value.
406
455
  */
407
- attribute @lte(_ value: Int) @@@targetField([IntField, FloatField, DecimalField])
456
+ attribute @lte(_ value: Int, _ message: String?) @@@targetField([IntField, FloatField, DecimalField]) @@@validation
457
+
458
+ /**
459
+ * Validates the entity with a complex condition.
460
+ */
461
+ attribute @@validate(_ value: Boolean, _ message: String?) @@@validation
462
+
463
+ /**
464
+ * Validates length of a string field.
465
+ */
466
+ function length(field: String, min: Int, max: Int?): Boolean {
467
+ } @@@expressionContext([ValidationRule])
468
+
469
+
470
+ /**
471
+ * Validates a string field value matches a regex.
472
+ */
473
+ function regex(field: String, regex: String): Boolean {
474
+ } @@@expressionContext([ValidationRule])
475
+
476
+ /**
477
+ * Validates a string field value is a valid email address.
478
+ */
479
+ function email(field: String): Boolean {
480
+ } @@@expressionContext([ValidationRule])
481
+
482
+ /**
483
+ * Validates a string field value is a valid ISO datetime.
484
+ */
485
+ function datetime(field: String): Boolean {
486
+ } @@@expressionContext([ValidationRule])
487
+
488
+ /**
489
+ * Validates a string field value is a valid url.
490
+ */
491
+ function url(field: String): Boolean {
492
+ } @@@expressionContext([ValidationRule])
493
+
494
+ //////////////////////////////////////////////
495
+ // End validation attributes and functions
496
+ //////////////////////////////////////////////
408
497
 
409
498
  /**
410
499
  * A utility attribute to allow passthrough of arbitrary attribute text to the generated Prisma schema.
package/telemetry.d.ts CHANGED
@@ -11,6 +11,7 @@ export declare class Telemetry {
11
11
  private readonly sessionid;
12
12
  private readonly _os;
13
13
  private readonly version;
14
+ private readonly prismaVersion;
14
15
  private exitWait;
15
16
  constructor();
16
17
  track(event: TelemetryEvents, properties?: Record<string, unknown>): void;
package/telemetry.js CHANGED
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
38
  exports.Telemetry = void 0;
39
39
  const cuid2_1 = require("@paralleldrive/cuid2");
40
+ const sdk_1 = require("@zenstackhq/sdk");
40
41
  const async_exit_hook_1 = __importDefault(require("async-exit-hook"));
41
42
  const commander_1 = require("commander");
42
43
  const mixpanel_1 = require("mixpanel");
@@ -55,6 +56,7 @@ class Telemetry {
55
56
  this.sessionid = (0, cuid2_1.createId)();
56
57
  this._os = os.platform();
57
58
  this.version = (0, version_utils_1.getVersion)();
59
+ this.prismaVersion = (0, sdk_1.getPrismaVersion)();
58
60
  this.exitWait = 200;
59
61
  if (process.env.DO_NOT_TRACK !== '1' && constants_1.TELEMETRY_TRACKING_TOKEN) {
60
62
  this.mixpanel = (0, mixpanel_1.init)(constants_1.TELEMETRY_TRACKING_TOKEN, {
@@ -98,7 +100,7 @@ class Telemetry {
98
100
  }
99
101
  track(event, properties = {}) {
100
102
  if (this.mixpanel) {
101
- const payload = Object.assign({ distinct_id: this.hostId, session: this.sessionid, time: new Date(), $os: this._os, nodeVersion: process.version, version: this.version }, properties);
103
+ const payload = Object.assign({ distinct_id: this.hostId, session: this.sessionid, time: new Date(), $os: this._os, nodeVersion: process.version, version: this.version, prismaVersion: this.prismaVersion }, properties);
102
104
  this.mixpanel.track(event, payload);
103
105
  }
104
106
  }
package/telemetry.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,10 @@
1
- import { DataModel, DataModelAttribute, DataModelField, Expression, Model, ModelImport } from '@zenstackhq/language/ast';
1
+ import { DataModel, DataModelField, Expression, Model, ModelImport } from '@zenstackhq/language/ast';
2
2
  import { AstNode, LangiumDocuments } from 'langium';
3
3
  import { URI } from 'vscode-uri';
4
4
  export declare function extractDataModelsWithAllowRules(model: Model): DataModel[];
5
- export declare function analyzePolicies(dataModel: DataModel): {
6
- allows: DataModelAttribute[];
7
- denies: DataModelAttribute[];
8
- create: boolean | undefined;
9
- read: boolean | undefined;
10
- update: boolean | undefined;
11
- delete: boolean | undefined;
12
- allowAll: boolean;
13
- denyAll: boolean;
14
- hasFieldValidation: boolean;
15
- };
16
5
  export declare function mergeBaseModel(model: Model): void;
17
- export declare const VALIDATION_ATTRIBUTES: string[];
18
6
  export declare function getIdFields(dataModel: DataModel): DataModelField[];
19
7
  export declare function isAuthInvocation(node: AstNode): boolean;
20
- export declare function isEnumFieldReference(expr: Expression): boolean;
21
8
  export declare function getDataModelFieldReference(expr: Expression): DataModelField | undefined;
22
9
  export declare function resolveImportUri(imp: ModelImport): URI | undefined;
23
10
  export declare function resolveTransitiveImports(documents: LangiumDocuments, model: Model): Model[];