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
@@ -1,180 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const ast_1 = require("@zenstackhq/language/ast");
4
- const sdk_1 = require("@zenstackhq/sdk");
5
- const _1 = require(".");
6
- const constants_1 = require("../../language-server/constants");
7
- const ast_utils_1 = require("../../utils/ast-utils");
8
- const utils_1 = require("./utils");
9
- const utils_2 = require("../../language-server/utils");
10
- /**
11
- * Transforms ZModel expression to plain TypeScript expression.
12
- */
13
- class TypeScriptExpressionTransformer {
14
- /**
15
- * Constructs a new TypeScriptExpressionTransformer.
16
- *
17
- * @param isPostGuard indicates if we're writing for post-update conditions
18
- */
19
- constructor(isPostGuard = false) {
20
- this.isPostGuard = isPostGuard;
21
- }
22
- /**
23
- * Transforms the given expression to a TypeScript expression.
24
- * @param normalizeUndefined if undefined values should be normalized to null
25
- * @returns
26
- */
27
- transform(expr, normalizeUndefined = true) {
28
- switch (expr.$type) {
29
- case ast_1.LiteralExpr:
30
- return this.literal(expr);
31
- case ast_1.ArrayExpr:
32
- return this.array(expr, normalizeUndefined);
33
- case ast_1.NullExpr:
34
- return this.null();
35
- case ast_1.ThisExpr:
36
- return this.this(expr);
37
- case ast_1.ReferenceExpr:
38
- return this.reference(expr);
39
- case ast_1.InvocationExpr:
40
- return this.invocation(expr, normalizeUndefined);
41
- case ast_1.MemberAccessExpr:
42
- return this.memberAccess(expr, normalizeUndefined);
43
- case ast_1.UnaryExpr:
44
- return this.unary(expr, normalizeUndefined);
45
- case ast_1.BinaryExpr:
46
- return this.binary(expr, normalizeUndefined);
47
- default:
48
- throw new sdk_1.PluginError(_1.name, `Unsupported expression type: ${expr.$type}`);
49
- }
50
- }
51
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
52
- this(expr) {
53
- // "this" is mapped to id comparison
54
- return 'id';
55
- }
56
- memberAccess(expr, normalizeUndefined) {
57
- if (!expr.member.ref) {
58
- throw new sdk_1.PluginError(_1.name, `Unresolved MemberAccessExpr`);
59
- }
60
- if ((0, ast_1.isThisExpr)(expr.operand)) {
61
- return expr.member.ref.name;
62
- }
63
- else if ((0, utils_1.isFutureExpr)(expr.operand)) {
64
- if (!this.isPostGuard) {
65
- throw new sdk_1.PluginError(_1.name, `future() is only supported in postUpdate rules`);
66
- }
67
- return expr.member.ref.name;
68
- }
69
- else {
70
- if (normalizeUndefined) {
71
- // normalize field access to null instead of undefined to avoid accidentally use undefined in filter
72
- return `(${this.transform(expr.operand, normalizeUndefined)}?.${expr.member.ref.name} ?? null)`;
73
- }
74
- else {
75
- return `${this.transform(expr.operand, normalizeUndefined)}?.${expr.member.ref.name}`;
76
- }
77
- }
78
- }
79
- invocation(expr, normalizeUndefined) {
80
- var _a, _b, _c;
81
- if (!expr.function.ref) {
82
- throw new sdk_1.PluginError(_1.name, `Unresolved InvocationExpr`);
83
- }
84
- if ((0, ast_utils_1.isAuthInvocation)(expr)) {
85
- return 'user';
86
- }
87
- const funcName = expr.function.ref.name;
88
- const isStdFunc = (0, utils_2.isFromStdlib)(expr.function.ref);
89
- if (isStdFunc && constants_1.FILTER_OPERATOR_FUNCTIONS.includes(funcName)) {
90
- // arguments are already type-checked
91
- const arg0 = this.transform(expr.args[0].value, false);
92
- let result;
93
- switch (funcName) {
94
- case 'contains': {
95
- const caseInsensitive = (0, sdk_1.getLiteral)((_a = expr.args[2]) === null || _a === void 0 ? void 0 : _a.value) === true;
96
- if (caseInsensitive) {
97
- result = `${arg0}?.toLowerCase().includes(${this.transform(expr.args[1].value, normalizeUndefined)}?.toLowerCase())`;
98
- }
99
- else {
100
- result = `${arg0}?.includes(${this.transform(expr.args[1].value, normalizeUndefined)})`;
101
- }
102
- break;
103
- }
104
- case 'search':
105
- throw new sdk_1.PluginError(_1.name, '"search" function must be used against a field');
106
- case 'startsWith':
107
- result = `${arg0}?.startsWith(${this.transform(expr.args[1].value, normalizeUndefined)})`;
108
- break;
109
- case 'endsWith':
110
- result = `${arg0}?.endsWith(${this.transform(expr.args[1].value, normalizeUndefined)})`;
111
- break;
112
- case 'has':
113
- result = `${arg0}?.includes(${this.transform(expr.args[1].value, normalizeUndefined)})`;
114
- break;
115
- case 'hasEvery':
116
- result = `${this.transform(expr.args[1].value, normalizeUndefined)}?.every((item) => ${arg0}?.includes(item))`;
117
- break;
118
- case 'hasSome':
119
- result = `${this.transform(expr.args[1].value, normalizeUndefined)}?.some((item) => ${arg0}?.includes(item))`;
120
- break;
121
- case 'isEmpty':
122
- result = `${arg0}?.length === 0`;
123
- break;
124
- default:
125
- throw new sdk_1.PluginError(_1.name, `Function invocation is not supported: ${(_b = expr.function.ref) === null || _b === void 0 ? void 0 : _b.name}`);
126
- }
127
- return `(${result} ?? false)`;
128
- }
129
- if (isStdFunc && funcName === 'now') {
130
- return `(new Date())`;
131
- }
132
- throw new sdk_1.PluginError(_1.name, `Function invocation is not supported: ${(_c = expr.function.ref) === null || _c === void 0 ? void 0 : _c.name}`);
133
- }
134
- reference(expr) {
135
- if (!expr.target.ref) {
136
- throw new sdk_1.PluginError(_1.name, `Unresolved ReferenceExpr`);
137
- }
138
- if ((0, ast_1.isEnumField)(expr.target.ref)) {
139
- return `${expr.target.ref.$container.name}.${expr.target.ref.name}`;
140
- }
141
- else {
142
- if (this.isPostGuard) {
143
- // if we're processing post-update, any direct field access should be
144
- // treated as access to context.preValue, which is entity's value before
145
- // the update
146
- return `context.preValue?.${expr.target.ref.name}`;
147
- }
148
- else {
149
- return expr.target.ref.name;
150
- }
151
- }
152
- }
153
- null() {
154
- return 'null';
155
- }
156
- array(expr, normalizeUndefined) {
157
- return `[${expr.items.map((item) => this.transform(item, normalizeUndefined)).join(', ')}]`;
158
- }
159
- literal(expr) {
160
- if (typeof expr.value === 'string') {
161
- return `'${expr.value}'`;
162
- }
163
- else {
164
- return expr.value.toString();
165
- }
166
- }
167
- unary(expr, normalizeUndefined) {
168
- return `(${expr.operator} ${this.transform(expr.operand, normalizeUndefined)})`;
169
- }
170
- binary(expr, normalizeUndefined) {
171
- if (expr.operator === 'in') {
172
- return `(${this.transform(expr.right, false)}?.includes(${this.transform(expr.left, normalizeUndefined)}) ?? false)`;
173
- }
174
- else {
175
- return `(${this.transform(expr.left, normalizeUndefined)} ${expr.operator} ${this.transform(expr.right, normalizeUndefined)})`;
176
- }
177
- }
178
- }
179
- exports.default = TypeScriptExpressionTransformer;
180
- //# sourceMappingURL=typescript-expression-transformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typescript-expression-transformer.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/typescript-expression-transformer.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- import { AstNode } from 'langium/lib/syntax-tree';
2
- /**
3
- * Returns if the given expression is a "future()" method call.
4
- */
5
- export declare function isFutureExpr(node: AstNode): boolean;
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isFutureExpr = void 0;
4
- const ast_1 = require("@zenstackhq/language/ast");
5
- const utils_1 = require("../../language-server/utils");
6
- /**
7
- * Returns if the given expression is a "future()" method call.
8
- */
9
- function isFutureExpr(node) {
10
- var _a;
11
- return !!((0, ast_1.isInvocationExpr)(node) && ((_a = node.function.ref) === null || _a === void 0 ? void 0 : _a.name) === 'future' && (0, utils_1.isFromStdlib)(node.function.ref));
12
- }
13
- exports.isFutureExpr = isFutureExpr;
14
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/utils.ts"],"names":[],"mappings":";;;AAAA,kDAA4D;AAE5D,uDAA2D;AAE3D;;GAEG;AACH,SAAgB,YAAY,CAAC,IAAa;;IACtC,OAAO,CAAC,CAAC,CAAC,IAAA,sBAAgB,EAAC,IAAI,CAAC,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,0CAAE,IAAI,MAAK,QAAQ,IAAI,IAAA,oBAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACjH,CAAC;AAFD,oCAEC"}
@@ -1,12 +0,0 @@
1
- import { DataModel } from '@zenstackhq/language/ast';
2
- import { CodeBlockWriter } from 'ts-morph';
3
- /**
4
- * Writes Zod schema for data models.
5
- */
6
- export declare class ZodSchemaGenerator {
7
- generate(writer: CodeBlockWriter, models: DataModel[]): boolean;
8
- private hasValidationAttributes;
9
- private makeFieldValidator;
10
- private makeZodSchema;
11
- private getAttrLiteralArg;
12
- }
@@ -1,160 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ZodSchemaGenerator = void 0;
4
- const ast_1 = require("@zenstackhq/language/ast");
5
- const sdk_1 = require("@zenstackhq/sdk");
6
- const lower_case_first_1 = require("lower-case-first");
7
- /**
8
- * Writes Zod schema for data models.
9
- */
10
- class ZodSchemaGenerator {
11
- generate(writer, models) {
12
- let generated = false;
13
- writer.inlineBlock(() => {
14
- models.forEach((model) => {
15
- const fields = model.fields.filter((field) => {
16
- var _a;
17
- return !sdk_1.AUXILIARY_FIELDS.includes(field.name) &&
18
- // scalar fields only
19
- !(0, ast_1.isDataModelField)((_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref) &&
20
- this.hasValidationAttributes(field);
21
- });
22
- if (fields.length === 0) {
23
- return;
24
- }
25
- generated = true;
26
- writer.write(`${(0, lower_case_first_1.lowerCaseFirst)(model.name)}: z.object(`);
27
- writer.inlineBlock(() => {
28
- fields.forEach((field) => {
29
- writer.writeLine(`${field.name}: ${this.makeFieldValidator(field)},`);
30
- });
31
- });
32
- writer.writeLine(').partial(),');
33
- });
34
- });
35
- return generated;
36
- }
37
- hasValidationAttributes(field) {
38
- return field.attributes.some((attr) => sdk_1.VALIDATION_ATTRIBUTES.includes(attr.decl.$refText));
39
- }
40
- makeFieldValidator(field) {
41
- var _a;
42
- let schema = this.makeZodSchema(field);
43
- // translate field constraint attributes to zod schema
44
- for (const attr of field.attributes) {
45
- switch ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) {
46
- case '@length': {
47
- const min = this.getAttrLiteralArg(attr, 'min');
48
- if (min) {
49
- schema += `.min(${min})`;
50
- }
51
- const max = this.getAttrLiteralArg(attr, 'max');
52
- if (max) {
53
- schema += `.max(${max})`;
54
- }
55
- break;
56
- }
57
- case '@regex': {
58
- const expr = this.getAttrLiteralArg(attr, 'regex');
59
- if (expr) {
60
- schema += `.regex(/${expr}/)`;
61
- }
62
- break;
63
- }
64
- case '@startsWith': {
65
- const text = this.getAttrLiteralArg(attr, 'text');
66
- if (text) {
67
- schema += `.startsWith(${JSON.stringify(text)})`;
68
- }
69
- break;
70
- }
71
- case '@endsWith': {
72
- const text = this.getAttrLiteralArg(attr, 'text');
73
- if (text) {
74
- schema += `.endsWith(${JSON.stringify(text)})`;
75
- }
76
- break;
77
- }
78
- case '@email': {
79
- schema += `.email()`;
80
- break;
81
- }
82
- case '@url': {
83
- schema += `.url()`;
84
- break;
85
- }
86
- case '@datetime': {
87
- schema += `.datetime({ offset: true })`;
88
- break;
89
- }
90
- case '@gt': {
91
- const value = this.getAttrLiteralArg(attr, 'value');
92
- if (value !== undefined) {
93
- schema += `.gt(${value})`;
94
- }
95
- break;
96
- }
97
- case '@gte': {
98
- const value = this.getAttrLiteralArg(attr, 'value');
99
- if (value !== undefined) {
100
- schema += `.gte(${value})`;
101
- }
102
- break;
103
- }
104
- case '@lt': {
105
- const value = this.getAttrLiteralArg(attr, 'value');
106
- if (value !== undefined) {
107
- schema += `.lt(${value})`;
108
- }
109
- break;
110
- }
111
- case '@lte': {
112
- const value = this.getAttrLiteralArg(attr, 'value');
113
- if (value !== undefined) {
114
- schema += `.lte(${value})`;
115
- }
116
- break;
117
- }
118
- }
119
- }
120
- if (field.type.optional) {
121
- schema += '.nullable()';
122
- }
123
- return schema;
124
- }
125
- makeZodSchema(field) {
126
- let schema;
127
- switch (field.type.type) {
128
- case 'Int':
129
- case 'Float':
130
- case 'Decimal':
131
- schema = 'z.number()';
132
- break;
133
- case 'BigInt':
134
- schema = 'z.bigint()';
135
- break;
136
- case 'String':
137
- schema = 'z.string()';
138
- break;
139
- case 'Boolean':
140
- schema = 'z.boolean()';
141
- break;
142
- case 'DateTime':
143
- schema = 'z.date()';
144
- break;
145
- default:
146
- schema = 'z.any()';
147
- break;
148
- }
149
- if (field.type.array) {
150
- schema = `z.array(${schema})`;
151
- }
152
- return schema;
153
- }
154
- getAttrLiteralArg(attr, paramName) {
155
- const arg = attr.args.find((arg) => { var _a; return ((_a = arg.$resolvedParam) === null || _a === void 0 ? void 0 : _a.name) === paramName; });
156
- return arg && (0, sdk_1.getLiteral)(arg.value);
157
- }
158
- }
159
- exports.ZodSchemaGenerator = ZodSchemaGenerator;
160
- //# sourceMappingURL=zod-schema-generator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"zod-schema-generator.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/zod-schema-generator.ts"],"names":[],"mappings":"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"}