zenstack 1.0.0-alpha.99 → 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.js +39 -13
- package/cli/config.js.map +1 -1
- package/cli/index.js +1 -6
- package/cli/index.js.map +1 -1
- package/cli/plugin-runner.js +22 -18
- 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 +64 -19
- 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 +28 -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/package.json +18 -13
- 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 +92 -69
- 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 +5 -2
- 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 -4
- package/plugins/plugin-utils.js +13 -18
- package/plugins/plugin-utils.js.map +1 -1
- package/plugins/prisma/index.d.ts +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 +118 -30
- 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 +22 -2
- package/utils/ast-utils.js +155 -4
- 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,12 +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
|
|
6
|
+
const lower_case_first_1 = require("lower-case-first");
|
|
7
7
|
/**
|
|
8
8
|
* Writes Zod schema for data models.
|
|
9
9
|
*/
|
|
10
10
|
class ZodSchemaGenerator {
|
|
11
11
|
generate(writer, models) {
|
|
12
|
+
let generated = false;
|
|
12
13
|
writer.inlineBlock(() => {
|
|
13
14
|
models.forEach((model) => {
|
|
14
15
|
const fields = model.fields.filter((field) => {
|
|
@@ -21,7 +22,8 @@ class ZodSchemaGenerator {
|
|
|
21
22
|
if (fields.length === 0) {
|
|
22
23
|
return;
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
+
generated = true;
|
|
26
|
+
writer.write(`${(0, lower_case_first_1.lowerCaseFirst)(model.name)}: z.object(`);
|
|
25
27
|
writer.inlineBlock(() => {
|
|
26
28
|
fields.forEach((field) => {
|
|
27
29
|
writer.writeLine(`${field.name}: ${this.makeFieldValidator(field)},`);
|
|
@@ -30,6 +32,7 @@ class ZodSchemaGenerator {
|
|
|
30
32
|
writer.writeLine(').partial(),');
|
|
31
33
|
});
|
|
32
34
|
});
|
|
35
|
+
return generated;
|
|
33
36
|
}
|
|
34
37
|
hasValidationAttributes(field) {
|
|
35
38
|
return field.attributes.some((attr) => sdk_1.VALIDATION_ATTRIBUTES.includes(attr.decl.$refText));
|
|
@@ -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,yCAAsF;AACtF,
|
|
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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"}
|
|
@@ -9,7 +9,3 @@ export declare function getNodeModulesFolder(startPath?: string): string | undef
|
|
|
9
9
|
* @returns
|
|
10
10
|
*/
|
|
11
11
|
export declare function getDefaultOutputFolder(): string | undefined;
|
|
12
|
-
/**
|
|
13
|
-
* Ensure a folder exists and has a package.json in it.
|
|
14
|
-
*/
|
|
15
|
-
export declare function ensureNodeModuleFolder(folder: string): void;
|
package/plugins/plugin-utils.js
CHANGED
|
@@ -3,7 +3,7 @@ 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
9
|
exports.ALL_OPERATION_KINDS = ['create', 'update', 'postUpdate', 'read', 'delete'];
|
|
@@ -12,7 +12,10 @@ exports.ALL_OPERATION_KINDS = ['create', 'update', 'postUpdate', 'read', 'delete
|
|
|
12
12
|
*/
|
|
13
13
|
function getNodeModulesFolder(startPath) {
|
|
14
14
|
startPath = startPath !== null && startPath !== void 0 ? startPath : process.cwd();
|
|
15
|
-
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'))) {
|
|
16
19
|
return path_1.default.join(startPath, 'node_modules');
|
|
17
20
|
}
|
|
18
21
|
else if (startPath !== '/') {
|
|
@@ -30,24 +33,16 @@ exports.getNodeModulesFolder = getNodeModulesFolder;
|
|
|
30
33
|
*/
|
|
31
34
|
function getDefaultOutputFolder() {
|
|
32
35
|
// Find the real runtime module path, it might be a symlink in pnpm
|
|
33
|
-
|
|
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
|
+
}
|
|
34
44
|
const modulesFolder = getNodeModulesFolder(runtimeModulePath);
|
|
35
45
|
return modulesFolder ? path_1.default.join(modulesFolder, '.zenstack') : undefined;
|
|
36
46
|
}
|
|
37
47
|
exports.getDefaultOutputFolder = getDefaultOutputFolder;
|
|
38
|
-
/**
|
|
39
|
-
* Ensure a folder exists and has a package.json in it.
|
|
40
|
-
*/
|
|
41
|
-
function ensureNodeModuleFolder(folder) {
|
|
42
|
-
if (!fs_1.default.existsSync(folder)) {
|
|
43
|
-
fs_1.default.mkdirSync(folder, { recursive: true });
|
|
44
|
-
}
|
|
45
|
-
if (!fs_1.default.existsSync(path_1.default.join(folder, 'package.json'))) {
|
|
46
|
-
fs_1.default.writeFileSync(path_1.default.join(folder, 'package.json'), JSON.stringify({
|
|
47
|
-
name: '.zenstack',
|
|
48
|
-
version: '1.0.0',
|
|
49
|
-
}));
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.ensureNodeModuleFolder = ensureNodeModuleFolder;
|
|
53
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,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,YAAE,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE;
|
|
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"}
|
|
@@ -2,4 +2,4 @@ import type { DMMF } from '@prisma/generator-helper';
|
|
|
2
2
|
import { Model } from '@zenstackhq/language/ast';
|
|
3
3
|
import { PluginOptions } from '@zenstackhq/sdk';
|
|
4
4
|
export declare const name = "Prisma";
|
|
5
|
-
export default function run(model: Model, options: PluginOptions, _dmmf?: DMMF.Document, config?: Record<string, string>): Promise<
|
|
5
|
+
export default function run(model: Model, options: PluginOptions, _dmmf?: DMMF.Document, config?: Record<string, string>): Promise<string[]>;
|
|
@@ -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
|
}
|