zenstack 1.0.0-alpha.98 → 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -20
- package/cli/cli-util.d.ts +4 -1
- package/cli/cli-util.js +62 -8
- package/cli/cli-util.js.map +1 -1
- package/cli/config.d.ts +19 -0
- package/cli/config.js +67 -0
- package/cli/config.js.map +1 -0
- package/cli/index.js +16 -0
- package/cli/index.js.map +1 -1
- package/cli/plugin-runner.d.ts +1 -1
- package/cli/plugin-runner.js +24 -19
- package/cli/plugin-runner.js.map +1 -1
- package/language-server/utils.d.ts +1 -5
- package/language-server/utils.js +3 -20
- package/language-server/utils.js.map +1 -1
- package/language-server/validator/datamodel-validator.d.ts +7 -0
- package/language-server/validator/datamodel-validator.js +66 -22
- package/language-server/validator/datamodel-validator.js.map +1 -1
- package/language-server/validator/expression-validator.js +7 -7
- package/language-server/validator/expression-validator.js.map +1 -1
- package/language-server/validator/schema-validator.d.ts +4 -1
- package/language-server/validator/schema-validator.js +25 -5
- package/language-server/validator/schema-validator.js.map +1 -1
- package/language-server/validator/utils.d.ts +1 -1
- package/language-server/validator/utils.js +10 -1
- package/language-server/validator/utils.js.map +1 -1
- package/language-server/validator/zmodel-validator.d.ts +2 -0
- package/language-server/validator/zmodel-validator.js +5 -1
- package/language-server/validator/zmodel-validator.js.map +1 -1
- package/language-server/zmodel-code-action.d.ts +2 -1
- package/language-server/zmodel-code-action.js +19 -10
- package/language-server/zmodel-code-action.js.map +1 -1
- package/language-server/zmodel-definition.d.ts +7 -0
- package/language-server/zmodel-definition.js +31 -0
- package/language-server/zmodel-definition.js.map +1 -0
- package/language-server/zmodel-formatter.js +2 -2
- package/language-server/zmodel-formatter.js.map +1 -1
- package/language-server/zmodel-linker.d.ts +1 -0
- package/language-server/zmodel-linker.js +24 -6
- package/language-server/zmodel-linker.js.map +1 -1
- package/language-server/zmodel-module.js +4 -1
- package/language-server/zmodel-module.js.map +1 -1
- package/language-server/zmodel-scope.d.ts +7 -1
- package/language-server/zmodel-scope.js +57 -1
- package/language-server/zmodel-scope.js.map +1 -1
- package/language-server/zmodel-workspace-manager.d.ts +5 -1
- package/language-server/zmodel-workspace-manager.js +101 -0
- package/language-server/zmodel-workspace-manager.js.map +1 -1
- package/package.json +21 -16
- package/plugins/access-policy/expression-writer.js +37 -12
- package/plugins/access-policy/expression-writer.js.map +1 -1
- package/plugins/access-policy/policy-guard-generator.js +94 -71
- package/plugins/access-policy/policy-guard-generator.js.map +1 -1
- package/plugins/access-policy/typescript-expression-transformer.d.ts +3 -3
- package/plugins/access-policy/typescript-expression-transformer.js +84 -25
- package/plugins/access-policy/typescript-expression-transformer.js.map +1 -1
- package/plugins/access-policy/utils.d.ts +2 -2
- package/plugins/access-policy/utils.js +2 -2
- package/plugins/access-policy/utils.js.map +1 -1
- package/plugins/access-policy/zod-schema-generator.d.ts +1 -1
- package/plugins/access-policy/zod-schema-generator.js +6 -4
- package/plugins/access-policy/zod-schema-generator.js.map +1 -1
- package/plugins/model-meta/index.js +17 -28
- package/plugins/model-meta/index.js.map +1 -1
- package/plugins/plugin-utils.d.ts +0 -5
- package/plugins/plugin-utils.js +13 -19
- package/plugins/plugin-utils.js.map +1 -1
- package/plugins/prisma/index.d.ts +2 -1
- package/plugins/prisma/index.js +2 -2
- package/plugins/prisma/index.js.map +1 -1
- package/plugins/prisma/prisma-builder.d.ts +3 -2
- package/plugins/prisma/prisma-builder.js +20 -5
- package/plugins/prisma/prisma-builder.js.map +1 -1
- package/plugins/prisma/schema-generator.d.ts +4 -1
- package/plugins/prisma/schema-generator.js +128 -29
- package/plugins/prisma/schema-generator.js.map +1 -1
- package/plugins/zod/generator.js +16 -6
- package/plugins/zod/generator.js.map +1 -1
- package/plugins/zod/transformer.d.ts +2 -2
- package/plugins/zod/transformer.js +56 -48
- package/plugins/zod/transformer.js.map +1 -1
- package/res/starter.zmodel +4 -4
- package/res/stdlib.zmodel +74 -61
- package/telemetry.d.ts +1 -1
- package/telemetry.js +2 -2
- package/telemetry.js.map +1 -1
- package/utils/ast-utils.d.ts +9 -2
- package/utils/ast-utils.js +86 -5
- package/utils/ast-utils.js.map +1 -1
- package/utils/version-utils.js +1 -0
- package/utils/version-utils.js.map +1 -1
|
@@ -2,8 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const ast_1 = require("@zenstackhq/language/ast");
|
|
4
4
|
const sdk_1 = require("@zenstackhq/sdk");
|
|
5
|
+
const _1 = require(".");
|
|
6
|
+
const constants_1 = require("../../language-server/constants");
|
|
5
7
|
const ast_utils_1 = require("../../utils/ast-utils");
|
|
6
8
|
const utils_1 = require("./utils");
|
|
9
|
+
const utils_2 = require("../../language-server/utils");
|
|
7
10
|
/**
|
|
8
11
|
* Transforms ZModel expression to plain TypeScript expression.
|
|
9
12
|
*/
|
|
@@ -17,16 +20,16 @@ class TypeScriptExpressionTransformer {
|
|
|
17
20
|
this.isPostGuard = isPostGuard;
|
|
18
21
|
}
|
|
19
22
|
/**
|
|
20
|
-
*
|
|
21
|
-
* @param
|
|
23
|
+
* Transforms the given expression to a TypeScript expression.
|
|
24
|
+
* @param normalizeUndefined if undefined values should be normalized to null
|
|
22
25
|
* @returns
|
|
23
26
|
*/
|
|
24
|
-
transform(expr) {
|
|
27
|
+
transform(expr, normalizeUndefined = true) {
|
|
25
28
|
switch (expr.$type) {
|
|
26
29
|
case ast_1.LiteralExpr:
|
|
27
30
|
return this.literal(expr);
|
|
28
31
|
case ast_1.ArrayExpr:
|
|
29
|
-
return this.array(expr);
|
|
32
|
+
return this.array(expr, normalizeUndefined);
|
|
30
33
|
case ast_1.NullExpr:
|
|
31
34
|
return this.null();
|
|
32
35
|
case ast_1.ThisExpr:
|
|
@@ -34,15 +37,15 @@ class TypeScriptExpressionTransformer {
|
|
|
34
37
|
case ast_1.ReferenceExpr:
|
|
35
38
|
return this.reference(expr);
|
|
36
39
|
case ast_1.InvocationExpr:
|
|
37
|
-
return this.invocation(expr);
|
|
40
|
+
return this.invocation(expr, normalizeUndefined);
|
|
38
41
|
case ast_1.MemberAccessExpr:
|
|
39
|
-
return this.memberAccess(expr);
|
|
42
|
+
return this.memberAccess(expr, normalizeUndefined);
|
|
40
43
|
case ast_1.UnaryExpr:
|
|
41
|
-
return this.unary(expr);
|
|
44
|
+
return this.unary(expr, normalizeUndefined);
|
|
42
45
|
case ast_1.BinaryExpr:
|
|
43
|
-
return this.binary(expr);
|
|
46
|
+
return this.binary(expr, normalizeUndefined);
|
|
44
47
|
default:
|
|
45
|
-
throw new sdk_1.PluginError(`Unsupported expression type: ${expr.$type}`);
|
|
48
|
+
throw new sdk_1.PluginError(_1.name, `Unsupported expression type: ${expr.$type}`);
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
51
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -50,36 +53,87 @@ class TypeScriptExpressionTransformer {
|
|
|
50
53
|
// "this" is mapped to id comparison
|
|
51
54
|
return 'id';
|
|
52
55
|
}
|
|
53
|
-
memberAccess(expr) {
|
|
56
|
+
memberAccess(expr, normalizeUndefined) {
|
|
54
57
|
if (!expr.member.ref) {
|
|
55
|
-
throw new sdk_1.PluginError(`Unresolved MemberAccessExpr`);
|
|
58
|
+
throw new sdk_1.PluginError(_1.name, `Unresolved MemberAccessExpr`);
|
|
56
59
|
}
|
|
57
60
|
if ((0, ast_1.isThisExpr)(expr.operand)) {
|
|
58
61
|
return expr.member.ref.name;
|
|
59
62
|
}
|
|
60
63
|
else if ((0, utils_1.isFutureExpr)(expr.operand)) {
|
|
61
64
|
if (!this.isPostGuard) {
|
|
62
|
-
throw new sdk_1.PluginError(`future() is only supported in postUpdate rules`);
|
|
65
|
+
throw new sdk_1.PluginError(_1.name, `future() is only supported in postUpdate rules`);
|
|
63
66
|
}
|
|
64
67
|
return expr.member.ref.name;
|
|
65
68
|
}
|
|
66
69
|
else {
|
|
67
|
-
|
|
68
|
-
|
|
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
|
+
}
|
|
69
77
|
}
|
|
70
78
|
}
|
|
71
|
-
invocation(expr) {
|
|
72
|
-
var _a;
|
|
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
|
+
}
|
|
73
84
|
if ((0, ast_utils_1.isAuthInvocation)(expr)) {
|
|
74
85
|
return 'user';
|
|
75
86
|
}
|
|
76
|
-
|
|
77
|
-
|
|
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())`;
|
|
78
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}`);
|
|
79
133
|
}
|
|
80
134
|
reference(expr) {
|
|
81
135
|
if (!expr.target.ref) {
|
|
82
|
-
throw new sdk_1.PluginError(`Unresolved ReferenceExpr`);
|
|
136
|
+
throw new sdk_1.PluginError(_1.name, `Unresolved ReferenceExpr`);
|
|
83
137
|
}
|
|
84
138
|
if ((0, ast_1.isEnumField)(expr.target.ref)) {
|
|
85
139
|
return `${expr.target.ref.$container.name}.${expr.target.ref.name}`;
|
|
@@ -99,8 +153,8 @@ class TypeScriptExpressionTransformer {
|
|
|
99
153
|
null() {
|
|
100
154
|
return 'null';
|
|
101
155
|
}
|
|
102
|
-
array(expr) {
|
|
103
|
-
return `[${expr.items.map((item) => this.transform(item)).join(', ')}]`;
|
|
156
|
+
array(expr, normalizeUndefined) {
|
|
157
|
+
return `[${expr.items.map((item) => this.transform(item, normalizeUndefined)).join(', ')}]`;
|
|
104
158
|
}
|
|
105
159
|
literal(expr) {
|
|
106
160
|
if (typeof expr.value === 'string') {
|
|
@@ -110,11 +164,16 @@ class TypeScriptExpressionTransformer {
|
|
|
110
164
|
return expr.value.toString();
|
|
111
165
|
}
|
|
112
166
|
}
|
|
113
|
-
unary(expr) {
|
|
114
|
-
return `(${expr.operator} ${this.transform(expr.operand)})`;
|
|
167
|
+
unary(expr, normalizeUndefined) {
|
|
168
|
+
return `(${expr.operator} ${this.transform(expr.operand, normalizeUndefined)})`;
|
|
115
169
|
}
|
|
116
|
-
binary(expr) {
|
|
117
|
-
|
|
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
|
+
}
|
|
118
177
|
}
|
|
119
178
|
}
|
|
120
179
|
exports.default = TypeScriptExpressionTransformer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typescript-expression-transformer.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/typescript-expression-transformer.ts"],"names":[],"mappings":";;AAAA,kDAakC;AAClC,
|
|
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 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AstNode } from 'langium/lib/syntax-tree';
|
|
2
2
|
/**
|
|
3
3
|
* Returns if the given expression is a "future()" method call.
|
|
4
4
|
*/
|
|
5
|
-
export declare function isFutureExpr(
|
|
5
|
+
export declare function isFutureExpr(node: AstNode): boolean;
|
|
@@ -6,9 +6,9 @@ const utils_1 = require("../../language-server/utils");
|
|
|
6
6
|
/**
|
|
7
7
|
* Returns if the given expression is a "future()" method call.
|
|
8
8
|
*/
|
|
9
|
-
function isFutureExpr(
|
|
9
|
+
function isFutureExpr(node) {
|
|
10
10
|
var _a;
|
|
11
|
-
return !!((0, ast_1.isInvocationExpr)(
|
|
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
12
|
}
|
|
13
13
|
exports.isFutureExpr = isFutureExpr;
|
|
14
14
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/utils.ts"],"names":[],"mappings":";;;AAAA,
|
|
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"}
|
|
@@ -4,7 +4,7 @@ import { CodeBlockWriter } from 'ts-morph';
|
|
|
4
4
|
* Writes Zod schema for data models.
|
|
5
5
|
*/
|
|
6
6
|
export declare class ZodSchemaGenerator {
|
|
7
|
-
generate(writer: CodeBlockWriter, models: DataModel[]):
|
|
7
|
+
generate(writer: CodeBlockWriter, models: DataModel[]): boolean;
|
|
8
8
|
private hasValidationAttributes;
|
|
9
9
|
private makeFieldValidator;
|
|
10
10
|
private makeZodSchema;
|
|
@@ -3,13 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ZodSchemaGenerator = void 0;
|
|
4
4
|
const ast_1 = require("@zenstackhq/language/ast");
|
|
5
5
|
const sdk_1 = require("@zenstackhq/sdk");
|
|
6
|
-
const
|
|
7
|
-
const ast_utils_1 = require("../../utils/ast-utils");
|
|
6
|
+
const lower_case_first_1 = require("lower-case-first");
|
|
8
7
|
/**
|
|
9
8
|
* Writes Zod schema for data models.
|
|
10
9
|
*/
|
|
11
10
|
class ZodSchemaGenerator {
|
|
12
11
|
generate(writer, models) {
|
|
12
|
+
let generated = false;
|
|
13
13
|
writer.inlineBlock(() => {
|
|
14
14
|
models.forEach((model) => {
|
|
15
15
|
const fields = model.fields.filter((field) => {
|
|
@@ -22,7 +22,8 @@ class ZodSchemaGenerator {
|
|
|
22
22
|
if (fields.length === 0) {
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
|
-
|
|
25
|
+
generated = true;
|
|
26
|
+
writer.write(`${(0, lower_case_first_1.lowerCaseFirst)(model.name)}: z.object(`);
|
|
26
27
|
writer.inlineBlock(() => {
|
|
27
28
|
fields.forEach((field) => {
|
|
28
29
|
writer.writeLine(`${field.name}: ${this.makeFieldValidator(field)},`);
|
|
@@ -31,9 +32,10 @@ class ZodSchemaGenerator {
|
|
|
31
32
|
writer.writeLine(').partial(),');
|
|
32
33
|
});
|
|
33
34
|
});
|
|
35
|
+
return generated;
|
|
34
36
|
}
|
|
35
37
|
hasValidationAttributes(field) {
|
|
36
|
-
return field.attributes.some((attr) =>
|
|
38
|
+
return field.attributes.some((attr) => sdk_1.VALIDATION_ATTRIBUTES.includes(attr.decl.$refText));
|
|
37
39
|
}
|
|
38
40
|
makeFieldValidator(field) {
|
|
39
41
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-schema-generator.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/zod-schema-generator.ts"],"names":[],"mappings":";;;AAAA,kDAAgH;AAChH,
|
|
1
|
+
{"version":3,"file":"zod-schema-generator.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/zod-schema-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,33 +15,35 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.name = void 0;
|
|
16
16
|
const ast_1 = require("@zenstackhq/language/ast");
|
|
17
17
|
const sdk_1 = require("@zenstackhq/sdk");
|
|
18
|
-
const
|
|
18
|
+
const lower_case_first_1 = require("lower-case-first");
|
|
19
19
|
const path_1 = __importDefault(require("path"));
|
|
20
20
|
const ts_morph_1 = require("ts-morph");
|
|
21
|
-
const utils_1 = require("../../language-server/utils");
|
|
22
21
|
const plugin_utils_1 = require("../plugin-utils");
|
|
23
22
|
exports.name = 'Model Metadata';
|
|
24
23
|
function run(model, options) {
|
|
25
24
|
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
-
|
|
25
|
+
let output = options.output ? options.output : (0, plugin_utils_1.getDefaultOutputFolder)();
|
|
27
26
|
if (!output) {
|
|
28
|
-
|
|
29
|
-
return;
|
|
27
|
+
throw new sdk_1.PluginError(options.name, `Unable to determine output path, not running plugin`);
|
|
30
28
|
}
|
|
29
|
+
output = (0, sdk_1.resolvePath)(output, options);
|
|
31
30
|
const dataModels = (0, sdk_1.getDataModels)(model);
|
|
32
|
-
const project =
|
|
33
|
-
if (!options.output) {
|
|
34
|
-
(0, plugin_utils_1.ensureNodeModuleFolder)(output);
|
|
35
|
-
}
|
|
31
|
+
const project = (0, sdk_1.createProject)();
|
|
36
32
|
const sf = project.createSourceFile(path_1.default.join(output, 'model-meta.ts'), undefined, { overwrite: true });
|
|
33
|
+
sf.addStatements('/* eslint-disable */');
|
|
37
34
|
sf.addVariableStatement({
|
|
38
35
|
declarationKind: ts_morph_1.VariableDeclarationKind.Const,
|
|
39
36
|
declarations: [{ name: 'metadata', initializer: (writer) => generateModelMetadata(dataModels, writer) }],
|
|
40
37
|
});
|
|
41
38
|
sf.addStatements('export default metadata;');
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
const shouldCompile = options.compile !== false;
|
|
40
|
+
if (!shouldCompile || options.preserveTsFiles === true) {
|
|
41
|
+
// save ts files
|
|
42
|
+
yield (0, sdk_1.saveProject)(project);
|
|
43
|
+
}
|
|
44
|
+
if (shouldCompile) {
|
|
45
|
+
yield (0, sdk_1.emitProject)(project);
|
|
46
|
+
}
|
|
45
47
|
});
|
|
46
48
|
}
|
|
47
49
|
exports.default = run;
|
|
@@ -50,7 +52,7 @@ function generateModelMetadata(dataModels, writer) {
|
|
|
50
52
|
writer.write('fields:');
|
|
51
53
|
writer.block(() => {
|
|
52
54
|
for (const model of dataModels) {
|
|
53
|
-
writer.write(`${(0,
|
|
55
|
+
writer.write(`${(0, lower_case_first_1.lowerCaseFirst)(model.name)}:`);
|
|
54
56
|
writer.block(() => {
|
|
55
57
|
var _a;
|
|
56
58
|
for (const f of model.fields) {
|
|
@@ -61,7 +63,7 @@ function generateModelMetadata(dataModels, writer) {
|
|
|
61
63
|
? f.type.reference.$refText
|
|
62
64
|
: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
63
65
|
f.type.type}",
|
|
64
|
-
isId: ${isIdField(f)},
|
|
66
|
+
isId: ${(0, sdk_1.isIdField)(f)},
|
|
65
67
|
isDataModel: ${(0, ast_1.isDataModel)((_a = f.type.reference) === null || _a === void 0 ? void 0 : _a.ref)},
|
|
66
68
|
isArray: ${f.type.array},
|
|
67
69
|
isOptional: ${f.type.optional},
|
|
@@ -78,7 +80,7 @@ function generateModelMetadata(dataModels, writer) {
|
|
|
78
80
|
writer.write('uniqueConstraints:');
|
|
79
81
|
writer.block(() => {
|
|
80
82
|
for (const model of dataModels) {
|
|
81
|
-
writer.write(`${(0,
|
|
83
|
+
writer.write(`${(0, lower_case_first_1.lowerCaseFirst)(model.name)}:`);
|
|
82
84
|
writer.block(() => {
|
|
83
85
|
for (const constraint of getUniqueConstraints(model)) {
|
|
84
86
|
writer.write(`${constraint.name}: {
|
|
@@ -137,19 +139,6 @@ function getFieldAttributes(field) {
|
|
|
137
139
|
})
|
|
138
140
|
.filter((d) => !!d);
|
|
139
141
|
}
|
|
140
|
-
function isIdField(field) {
|
|
141
|
-
// field-level @id attribute
|
|
142
|
-
if (field.attributes.some((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@id'; })) {
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
// model-level @@id attribute with a list of fields
|
|
146
|
-
const model = field.$container;
|
|
147
|
-
const modelLevelIds = (0, utils_1.getIdFields)(model);
|
|
148
|
-
if (modelLevelIds.includes(field)) {
|
|
149
|
-
return true;
|
|
150
|
-
}
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
142
|
function getUniqueConstraints(model) {
|
|
154
143
|
const constraints = [];
|
|
155
144
|
for (const attr of model.attributes.filter((attr) => { var _a, _b; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@unique' || ((_b = attr.decl.ref) === null || _b === void 0 ? void 0 : _b.name) === '@@id'; })) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/model-meta/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAQkC;AAElC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/model-meta/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { PolicyOperationKind } from '@zenstackhq/runtime';
|
|
2
|
-
export declare const RUNTIME_PACKAGE = "@zenstackhq/runtime";
|
|
3
2
|
export declare const ALL_OPERATION_KINDS: PolicyOperationKind[];
|
|
4
3
|
/**
|
|
5
4
|
* Gets the nearest "node_modules" folder by walking up from start path.
|
|
@@ -10,7 +9,3 @@ export declare function getNodeModulesFolder(startPath?: string): string | undef
|
|
|
10
9
|
* @returns
|
|
11
10
|
*/
|
|
12
11
|
export declare function getDefaultOutputFolder(): string | undefined;
|
|
13
|
-
/**
|
|
14
|
-
* Ensure a folder exists and has a package.json in it.
|
|
15
|
-
*/
|
|
16
|
-
export declare function ensureNodeModuleFolder(folder: string): void;
|
package/plugins/plugin-utils.js
CHANGED
|
@@ -3,17 +3,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.getDefaultOutputFolder = exports.getNodeModulesFolder = exports.ALL_OPERATION_KINDS = void 0;
|
|
7
7
|
const fs_1 = __importDefault(require("fs"));
|
|
8
8
|
const path_1 = __importDefault(require("path"));
|
|
9
|
-
exports.RUNTIME_PACKAGE = '@zenstackhq/runtime';
|
|
10
9
|
exports.ALL_OPERATION_KINDS = ['create', 'update', 'postUpdate', 'read', 'delete'];
|
|
11
10
|
/**
|
|
12
11
|
* Gets the nearest "node_modules" folder by walking up from start path.
|
|
13
12
|
*/
|
|
14
13
|
function getNodeModulesFolder(startPath) {
|
|
15
14
|
startPath = startPath !== null && startPath !== void 0 ? startPath : process.cwd();
|
|
16
|
-
if (
|
|
15
|
+
if (startPath.endsWith('node_modules')) {
|
|
16
|
+
return startPath;
|
|
17
|
+
}
|
|
18
|
+
else if (fs_1.default.existsSync(path_1.default.join(startPath, 'node_modules'))) {
|
|
17
19
|
return path_1.default.join(startPath, 'node_modules');
|
|
18
20
|
}
|
|
19
21
|
else if (startPath !== '/') {
|
|
@@ -31,24 +33,16 @@ exports.getNodeModulesFolder = getNodeModulesFolder;
|
|
|
31
33
|
*/
|
|
32
34
|
function getDefaultOutputFolder() {
|
|
33
35
|
// Find the real runtime module path, it might be a symlink in pnpm
|
|
34
|
-
|
|
36
|
+
let runtimeModulePath = require.resolve('@zenstackhq/runtime');
|
|
37
|
+
if (runtimeModulePath) {
|
|
38
|
+
// start with the parent folder of @zenstackhq, supposed to be a node_modules folder
|
|
39
|
+
while (!runtimeModulePath.endsWith('@zenstackhq') && runtimeModulePath !== '/') {
|
|
40
|
+
runtimeModulePath = path_1.default.join(runtimeModulePath, '..');
|
|
41
|
+
}
|
|
42
|
+
runtimeModulePath = path_1.default.join(runtimeModulePath, '..');
|
|
43
|
+
}
|
|
35
44
|
const modulesFolder = getNodeModulesFolder(runtimeModulePath);
|
|
36
45
|
return modulesFolder ? path_1.default.join(modulesFolder, '.zenstack') : undefined;
|
|
37
46
|
}
|
|
38
47
|
exports.getDefaultOutputFolder = getDefaultOutputFolder;
|
|
39
|
-
/**
|
|
40
|
-
* Ensure a folder exists and has a package.json in it.
|
|
41
|
-
*/
|
|
42
|
-
function ensureNodeModuleFolder(folder) {
|
|
43
|
-
if (!fs_1.default.existsSync(folder)) {
|
|
44
|
-
fs_1.default.mkdirSync(folder, { recursive: true });
|
|
45
|
-
}
|
|
46
|
-
if (!fs_1.default.existsSync(path_1.default.join(folder, 'package.json'))) {
|
|
47
|
-
fs_1.default.writeFileSync(path_1.default.join(folder, 'package.json'), JSON.stringify({
|
|
48
|
-
name: '.zenstack',
|
|
49
|
-
version: '1.0.0',
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
exports.ensureNodeModuleFolder = ensureNodeModuleFolder;
|
|
54
48
|
//# sourceMappingURL=plugin-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-utils.js","sourceRoot":"","sources":["../../src/plugins/plugin-utils.ts"],"names":[],"mappings":";;;;;;AACA,4CAAoB;AACpB,gDAAwB;AAEX,QAAA,
|
|
1
|
+
{"version":3,"file":"plugin-utils.js","sourceRoot":"","sources":["../../src/plugins/plugin-utils.ts"],"names":[],"mappings":";;;;;;AACA,4CAAoB;AACpB,gDAAwB;AAEX,QAAA,mBAAmB,GAA0B,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE/G;;GAEG;AACH,SAAgB,oBAAoB,CAAC,SAAkB;IACnD,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,IAAI,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;QACpC,OAAO,SAAS,CAAC;KACpB;SAAM,IAAI,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE;QAC5D,OAAO,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;KAC/C;SAAM,IAAI,SAAS,KAAK,GAAG,EAAE;QAC1B,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;KACvC;SAAM;QACH,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAZD,oDAYC;AAED;;;GAGG;AACH,SAAgB,sBAAsB;IAClC,mEAAmE;IACnE,IAAI,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC/D,IAAI,iBAAiB,EAAE;QACnB,oFAAoF;QACpF,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,iBAAiB,KAAK,GAAG,EAAE;YAC5E,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;SAC1D;QACD,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;KAC1D;IACD,MAAM,aAAa,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IAC9D,OAAO,aAAa,CAAC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC;AAZD,wDAYC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
import type { DMMF } from '@prisma/generator-helper';
|
|
1
2
|
import { Model } from '@zenstackhq/language/ast';
|
|
2
3
|
import { PluginOptions } from '@zenstackhq/sdk';
|
|
3
4
|
export declare const name = "Prisma";
|
|
4
|
-
export default function run(model: Model, options: PluginOptions): Promise<
|
|
5
|
+
export default function run(model: Model, options: PluginOptions, _dmmf?: DMMF.Document, config?: Record<string, string>): Promise<string[]>;
|
package/plugins/prisma/index.js
CHANGED
|
@@ -15,9 +15,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.name = void 0;
|
|
16
16
|
const schema_generator_1 = __importDefault(require("./schema-generator"));
|
|
17
17
|
exports.name = 'Prisma';
|
|
18
|
-
function run(model, options) {
|
|
18
|
+
function run(model, options, _dmmf, config) {
|
|
19
19
|
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
-
return new schema_generator_1.default().generate(model, options);
|
|
20
|
+
return new schema_generator_1.default().generate(model, options, config);
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
exports.default = run;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/prisma/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/prisma/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,0EAAuD;AAE1C,QAAA,IAAI,GAAG,QAAQ,CAAC;AAE7B,SAA8B,GAAG,CAC7B,KAAY,EACZ,OAAsB,EACtB,KAAqB,EACrB,MAA+B;;QAE/B,OAAO,IAAI,0BAAqB,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;CAAA;AAPD,sBAOC"}
|
|
@@ -13,7 +13,7 @@ export declare class PrismaModel {
|
|
|
13
13
|
private generators;
|
|
14
14
|
private models;
|
|
15
15
|
private enums;
|
|
16
|
-
addDataSource(name: string, provider: string, url: DataSourceUrl, shadowDatabaseUrl?: DataSourceUrl, restFields?: SimpleField[]): DataSource;
|
|
16
|
+
addDataSource(name: string, provider: string, url: DataSourceUrl, directUrl?: DataSourceUrl, shadowDatabaseUrl?: DataSourceUrl, restFields?: SimpleField[]): DataSource;
|
|
17
17
|
addGenerator(name: string, fields: SimpleField[]): Generator;
|
|
18
18
|
addModel(name: string): Model;
|
|
19
19
|
addEnum(name: string): Enum;
|
|
@@ -23,9 +23,10 @@ export declare class DataSource {
|
|
|
23
23
|
name: string;
|
|
24
24
|
provider: string;
|
|
25
25
|
url: DataSourceUrl;
|
|
26
|
+
directUrl?: DataSourceUrl | undefined;
|
|
26
27
|
shadowDatabaseUrl?: DataSourceUrl | undefined;
|
|
27
28
|
restFields: SimpleField[];
|
|
28
|
-
constructor(name: string, provider: string, url: DataSourceUrl, shadowDatabaseUrl?: DataSourceUrl | undefined, restFields?: SimpleField[]);
|
|
29
|
+
constructor(name: string, provider: string, url: DataSourceUrl, directUrl?: DataSourceUrl | undefined, shadowDatabaseUrl?: DataSourceUrl | undefined, restFields?: SimpleField[]);
|
|
29
30
|
toString(): string;
|
|
30
31
|
}
|
|
31
32
|
export declare class DataSourceUrl {
|
|
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.EnumField = exports.Enum = exports.FunctionCallArg = exports.FunctionCall = exports.FieldReferenceArg = exports.FieldReference = exports.AttributeArgValue = exports.AttributeArg = exports.PassThroughAttribute = exports.ContainerAttribute = exports.FieldAttribute = exports.ModelField = exports.ModelFieldType = exports.Model = exports.FieldDeclaration = exports.ContainerDeclaration = exports.DeclarationBase = exports.Generator = exports.DataSourceUrl = exports.DataSource = exports.PrismaModel = void 0;
|
|
7
|
+
const sdk_1 = require("@zenstackhq/sdk");
|
|
7
8
|
const indent_string_1 = __importDefault(require("./indent-string"));
|
|
8
9
|
/**
|
|
9
10
|
* Prisma schema builder
|
|
@@ -15,8 +16,8 @@ class PrismaModel {
|
|
|
15
16
|
this.models = [];
|
|
16
17
|
this.enums = [];
|
|
17
18
|
}
|
|
18
|
-
addDataSource(name, provider, url, shadowDatabaseUrl, restFields = []) {
|
|
19
|
-
const ds = new DataSource(name, provider, url, shadowDatabaseUrl, restFields);
|
|
19
|
+
addDataSource(name, provider, url, directUrl, shadowDatabaseUrl, restFields = []) {
|
|
20
|
+
const ds = new DataSource(name, provider, url, directUrl, shadowDatabaseUrl, restFields);
|
|
20
21
|
this.datasources.push(ds);
|
|
21
22
|
return ds;
|
|
22
23
|
}
|
|
@@ -43,10 +44,11 @@ class PrismaModel {
|
|
|
43
44
|
}
|
|
44
45
|
exports.PrismaModel = PrismaModel;
|
|
45
46
|
class DataSource {
|
|
46
|
-
constructor(name, provider, url, shadowDatabaseUrl, restFields = []) {
|
|
47
|
+
constructor(name, provider, url, directUrl, shadowDatabaseUrl, restFields = []) {
|
|
47
48
|
this.name = name;
|
|
48
49
|
this.provider = provider;
|
|
49
50
|
this.url = url;
|
|
51
|
+
this.directUrl = directUrl;
|
|
50
52
|
this.shadowDatabaseUrl = shadowDatabaseUrl;
|
|
51
53
|
this.restFields = restFields;
|
|
52
54
|
}
|
|
@@ -57,7 +59,8 @@ class DataSource {
|
|
|
57
59
|
return (`datasource ${this.name} {\n` +
|
|
58
60
|
(0, indent_string_1.default)(`provider="${this.provider}"\n`) +
|
|
59
61
|
(0, indent_string_1.default)(`url=${this.url}\n`) +
|
|
60
|
-
(this.
|
|
62
|
+
(this.directUrl ? (0, indent_string_1.default)(`directUrl=${this.directUrl}\n`) : '') +
|
|
63
|
+
(this.shadowDatabaseUrl ? (0, indent_string_1.default)(`shadowDatabaseUrl=${this.shadowDatabaseUrl}\n`) : '') +
|
|
61
64
|
(restFields ? restFields + '\n' : '') +
|
|
62
65
|
`}`);
|
|
63
66
|
}
|
|
@@ -129,9 +132,21 @@ class Model extends ContainerDeclaration {
|
|
|
129
132
|
return attr;
|
|
130
133
|
}
|
|
131
134
|
toString() {
|
|
135
|
+
const auxiliaryFields = this.fields.filter((f) => sdk_1.AUXILIARY_FIELDS.includes(f.name));
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
137
|
+
const result = this.fields.filter((f) => !sdk_1.AUXILIARY_FIELDS.includes(f.name));
|
|
138
|
+
if (auxiliaryFields.length > 0) {
|
|
139
|
+
// Add a blank line before the auxiliary fields
|
|
140
|
+
result.push('', ...auxiliaryFields);
|
|
141
|
+
if (this.attributes.length > 0) {
|
|
142
|
+
// Add a blank line before the attributes
|
|
143
|
+
result.push('');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
result.push(...this.attributes);
|
|
132
147
|
return (super.toString() +
|
|
133
148
|
`model ${this.name} {\n` +
|
|
134
|
-
(0, indent_string_1.default)(
|
|
149
|
+
(0, indent_string_1.default)(result.map((d) => d.toString()).join('\n')) +
|
|
135
150
|
`\n}`);
|
|
136
151
|
}
|
|
137
152
|
}
|