zenstack 0.6.0-pre.8 → 1.0.0-alpha.100

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 (161) hide show
  1. package/README.md +111 -10
  2. package/cli/cli-error.d.ts +5 -0
  3. package/cli/cli-error.js +10 -0
  4. package/cli/cli-error.js.map +1 -0
  5. package/cli/cli-util.d.ts +21 -0
  6. package/cli/cli-util.js +239 -0
  7. package/cli/cli-util.js.map +1 -0
  8. package/cli/config.d.ts +19 -0
  9. package/cli/config.js +41 -0
  10. package/cli/config.js.map +1 -0
  11. package/cli/index.d.ts +16 -0
  12. package/cli/index.js +143 -6524
  13. package/cli/index.js.map +1 -0
  14. package/cli/plugin-runner.d.ts +14 -0
  15. package/cli/plugin-runner.js +146 -0
  16. package/cli/plugin-runner.js.map +1 -0
  17. package/constants.d.ts +1 -0
  18. package/constants.js +6 -0
  19. package/constants.js.map +1 -0
  20. package/language-server/constants.d.ts +26 -0
  21. package/language-server/constants.js +40 -0
  22. package/language-server/constants.js.map +1 -0
  23. package/language-server/main.d.ts +1 -0
  24. package/language-server/main.js +13 -6436
  25. package/language-server/main.js.map +1 -0
  26. package/language-server/types.d.ts +10 -0
  27. package/language-server/types.js +3 -0
  28. package/language-server/types.js.map +1 -0
  29. package/language-server/utils.d.ts +18 -0
  30. package/language-server/utils.js +58 -0
  31. package/language-server/utils.js.map +1 -0
  32. package/language-server/validator/attribute-validator.d.ts +9 -0
  33. package/language-server/validator/attribute-validator.js +11 -0
  34. package/language-server/validator/attribute-validator.js.map +1 -0
  35. package/language-server/validator/datamodel-validator.d.ts +15 -0
  36. package/language-server/validator/datamodel-validator.js +280 -0
  37. package/language-server/validator/datamodel-validator.js.map +1 -0
  38. package/language-server/validator/datasource-validator.d.ts +12 -0
  39. package/language-server/validator/datasource-validator.js +66 -0
  40. package/language-server/validator/datasource-validator.js.map +1 -0
  41. package/language-server/validator/enum-validator.d.ts +11 -0
  42. package/language-server/validator/enum-validator.js +28 -0
  43. package/language-server/validator/enum-validator.js.map +1 -0
  44. package/language-server/validator/expression-validator.d.ts +11 -0
  45. package/language-server/validator/expression-validator.js +57 -0
  46. package/language-server/validator/expression-validator.js.map +1 -0
  47. package/language-server/validator/function-invocation-validator.d.ts +11 -0
  48. package/language-server/validator/function-invocation-validator.js +110 -0
  49. package/language-server/validator/function-invocation-validator.js.map +1 -0
  50. package/language-server/validator/schema-validator.d.ts +10 -0
  51. package/language-server/validator/schema-validator.js +29 -0
  52. package/language-server/validator/schema-validator.js.map +1 -0
  53. package/language-server/validator/utils.d.ts +25 -0
  54. package/language-server/validator/utils.js +261 -0
  55. package/language-server/validator/utils.js.map +1 -0
  56. package/language-server/validator/zmodel-validator.d.ts +22 -0
  57. package/language-server/validator/zmodel-validator.js +74 -0
  58. package/language-server/validator/zmodel-validator.js.map +1 -0
  59. package/language-server/zmodel-code-action.d.ts +14 -0
  60. package/language-server/zmodel-code-action.js +109 -0
  61. package/language-server/zmodel-code-action.js.map +1 -0
  62. package/language-server/zmodel-formatter.d.ts +9 -0
  63. package/language-server/zmodel-formatter.js +76 -0
  64. package/language-server/zmodel-formatter.js.map +1 -0
  65. package/language-server/zmodel-linker.d.ts +30 -0
  66. package/language-server/zmodel-linker.js +375 -0
  67. package/language-server/zmodel-linker.js.map +1 -0
  68. package/language-server/zmodel-module.d.ts +41 -0
  69. package/language-server/zmodel-module.js +80 -0
  70. package/language-server/zmodel-module.js.map +1 -0
  71. package/language-server/zmodel-scope.d.ts +10 -0
  72. package/language-server/zmodel-scope.js +44 -0
  73. package/language-server/zmodel-scope.js.map +1 -0
  74. package/language-server/zmodel-workspace-manager.d.ts +12 -0
  75. package/language-server/zmodel-workspace-manager.js +138 -0
  76. package/language-server/zmodel-workspace-manager.js.map +1 -0
  77. package/package.json +31 -23
  78. package/plugins/access-policy/expression-writer.d.ts +41 -0
  79. package/plugins/access-policy/expression-writer.js +475 -0
  80. package/plugins/access-policy/expression-writer.js.map +1 -0
  81. package/plugins/access-policy/index.d.ts +4 -0
  82. package/plugins/access-policy/index.js +24 -0
  83. package/plugins/access-policy/index.js.map +1 -0
  84. package/plugins/access-policy/policy-guard-generator.d.ts +15 -0
  85. package/plugins/access-policy/policy-guard-generator.js +350 -0
  86. package/plugins/access-policy/policy-guard-generator.js.map +1 -0
  87. package/plugins/access-policy/typescript-expression-transformer.d.ts +28 -0
  88. package/plugins/access-policy/typescript-expression-transformer.js +121 -0
  89. package/plugins/access-policy/typescript-expression-transformer.js.map +1 -0
  90. package/plugins/access-policy/utils.d.ts +5 -0
  91. package/plugins/access-policy/utils.js +14 -0
  92. package/plugins/access-policy/utils.js.map +1 -0
  93. package/plugins/access-policy/zod-schema-generator.d.ts +12 -0
  94. package/plugins/access-policy/zod-schema-generator.js +157 -0
  95. package/plugins/access-policy/zod-schema-generator.js.map +1 -0
  96. package/plugins/model-meta/index.d.ts +4 -0
  97. package/plugins/model-meta/index.js +172 -0
  98. package/plugins/model-meta/index.js.map +1 -0
  99. package/plugins/plugin-utils.d.ts +15 -0
  100. package/plugins/plugin-utils.js +53 -0
  101. package/plugins/plugin-utils.js.map +1 -0
  102. package/plugins/prisma/indent-string.d.ts +4 -0
  103. package/plugins/prisma/indent-string.js +12 -0
  104. package/plugins/prisma/indent-string.js.map +1 -0
  105. package/plugins/prisma/index.d.ts +5 -0
  106. package/plugins/prisma/index.js +24 -3740
  107. package/plugins/prisma/index.js.map +1 -0
  108. package/plugins/prisma/prisma-builder.d.ts +152 -0
  109. package/plugins/prisma/prisma-builder.js +363 -0
  110. package/plugins/prisma/prisma-builder.js.map +1 -0
  111. package/plugins/prisma/schema-generator.d.ts +25 -0
  112. package/plugins/prisma/schema-generator.js +306 -0
  113. package/plugins/prisma/schema-generator.js.map +1 -0
  114. package/plugins/prisma/zmodel-code-generator.d.ts +30 -0
  115. package/plugins/prisma/zmodel-code-generator.js +122 -0
  116. package/plugins/prisma/zmodel-code-generator.js.map +1 -0
  117. package/plugins/zod/generator.d.ts +4 -0
  118. package/plugins/zod/generator.js +102 -0
  119. package/plugins/zod/generator.js.map +1 -0
  120. package/plugins/zod/index.d.ts +5 -0
  121. package/plugins/zod/index.js +21 -4808
  122. package/plugins/zod/index.js.map +1 -0
  123. package/plugins/zod/transformer.d.ts +67 -0
  124. package/plugins/zod/transformer.js +452 -0
  125. package/plugins/zod/transformer.js.map +1 -0
  126. package/plugins/zod/types.d.ts +22 -0
  127. package/plugins/zod/types.js +3 -0
  128. package/plugins/zod/types.js.map +1 -0
  129. package/plugins/zod/utils/removeDir.d.ts +1 -0
  130. package/plugins/zod/utils/removeDir.js +30 -0
  131. package/plugins/zod/utils/removeDir.js.map +1 -0
  132. package/res/prism-zmodel.js +2 -4
  133. package/res/starter.zmodel +51 -0
  134. package/res/stdlib.zmodel +194 -8
  135. package/telemetry.d.ts +20 -0
  136. package/telemetry.js +127 -0
  137. package/telemetry.js.map +1 -0
  138. package/types.d.ts +12 -0
  139. package/types.js +3 -0
  140. package/types.js.map +1 -0
  141. package/utils/ast-utils.d.ts +5 -0
  142. package/utils/ast-utils.js +49 -0
  143. package/utils/ast-utils.js.map +1 -0
  144. package/utils/exec-utils.d.ts +6 -0
  145. package/utils/exec-utils.js +13 -0
  146. package/utils/exec-utils.js.map +1 -0
  147. package/utils/pkg-utils.d.ts +3 -0
  148. package/utils/pkg-utils.js +64 -0
  149. package/utils/pkg-utils.js.map +1 -0
  150. package/utils/version-utils.d.ts +1 -0
  151. package/utils/version-utils.js +14 -0
  152. package/utils/version-utils.js.map +1 -0
  153. package/asset/logo-256-bg.png +0 -0
  154. package/asset/logo-dark-256.png +0 -0
  155. package/asset/logo-light-256.png +0 -0
  156. package/extension.js +0 -39
  157. package/plugins/policy-guard/index.js +0 -4289
  158. package/plugins/react-hooks/index.js +0 -4318
  159. package/plugins/trpc/index.js +0 -5386
  160. package/res/package.template.json +0 -9
  161. package/res/tsconfig.template.json +0 -17
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const ast_1 = require("@zenstackhq/language/ast");
16
+ const sdk_1 = require("@zenstackhq/sdk");
17
+ const fs_1 = __importDefault(require("fs"));
18
+ const promises_1 = require("fs/promises");
19
+ const path_1 = __importDefault(require("path"));
20
+ const exec_utils_1 = require("../../utils/exec-utils");
21
+ const prisma_builder_1 = require("./prisma-builder");
22
+ const zmodel_code_generator_1 = __importDefault(require("./zmodel-code-generator"));
23
+ const MODEL_PASSTHROUGH_ATTR = '@@prisma.passthrough';
24
+ const FIELD_PASSTHROUGH_ATTR = '@prisma.passthrough';
25
+ /**
26
+ * Generates Prisma schema file
27
+ */
28
+ class PrismaSchemaGenerator {
29
+ constructor() {
30
+ this.zModelGenerator = new zmodel_code_generator_1.default();
31
+ this.PRELUDE = `//////////////////////////////////////////////////////////////////////////////////////////////
32
+ // DO NOT MODIFY THIS FILE //
33
+ // This file is automatically generated by ZenStack CLI and should not be manually updated. //
34
+ //////////////////////////////////////////////////////////////////////////////////////////////
35
+
36
+ `;
37
+ }
38
+ generate(model, options, config) {
39
+ var _a;
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ const prisma = new prisma_builder_1.PrismaModel();
42
+ for (const decl of model.declarations) {
43
+ switch (decl.$type) {
44
+ case ast_1.DataSource:
45
+ this.generateDataSource(prisma, decl);
46
+ break;
47
+ case ast_1.Enum:
48
+ this.generateEnum(prisma, decl);
49
+ break;
50
+ case ast_1.DataModel:
51
+ this.generateModel(prisma, decl, config);
52
+ break;
53
+ case ast_1.GeneratorDecl:
54
+ this.generateGenerator(prisma, decl);
55
+ break;
56
+ }
57
+ }
58
+ const outFile = (_a = options.output) !== null && _a !== void 0 ? _a : './prisma/schema.prisma';
59
+ if (!fs_1.default.existsSync(path_1.default.dirname(outFile))) {
60
+ fs_1.default.mkdirSync(path_1.default.dirname(outFile), { recursive: true });
61
+ }
62
+ yield (0, promises_1.writeFile)(outFile, this.PRELUDE + prisma.toString());
63
+ const generateClient = options.generateClient !== false;
64
+ if (generateClient) {
65
+ // run 'prisma generate'
66
+ yield (0, exec_utils_1.execSync)(`npx prisma generate --schema ${outFile}`);
67
+ }
68
+ });
69
+ }
70
+ generateDataSource(prisma, dataSource) {
71
+ let provider = undefined;
72
+ let url = undefined;
73
+ let shadowDatabaseUrl = undefined;
74
+ const restFields = [];
75
+ for (const f of dataSource.fields) {
76
+ switch (f.name) {
77
+ case 'provider': {
78
+ if (this.isStringLiteral(f.value)) {
79
+ provider = f.value.value;
80
+ }
81
+ else {
82
+ throw new sdk_1.PluginError('Datasource provider must be set to a string');
83
+ }
84
+ break;
85
+ }
86
+ case 'url': {
87
+ const r = this.extractDataSourceUrl(f.value);
88
+ if (!r) {
89
+ throw new sdk_1.PluginError('Invalid value for datasource url');
90
+ }
91
+ url = r;
92
+ break;
93
+ }
94
+ case 'shadowDatabaseUrl': {
95
+ const r = this.extractDataSourceUrl(f.value);
96
+ if (!r) {
97
+ throw new sdk_1.PluginError('Invalid value for datasource url');
98
+ }
99
+ shadowDatabaseUrl = r;
100
+ break;
101
+ }
102
+ default: {
103
+ // rest fields
104
+ const value = (0, ast_1.isArrayExpr)(f.value) ? (0, sdk_1.getLiteralArray)(f.value) : (0, sdk_1.getLiteral)(f.value);
105
+ if (value === undefined) {
106
+ throw new sdk_1.PluginError(`Invalid value for datasource field ${f.name}: value must be a string or an array of strings`);
107
+ }
108
+ else {
109
+ restFields.push({ name: f.name, value });
110
+ }
111
+ break;
112
+ }
113
+ }
114
+ }
115
+ if (!provider) {
116
+ throw new sdk_1.PluginError('Datasource is missing "provider" field');
117
+ }
118
+ if (!url) {
119
+ throw new sdk_1.PluginError('Datasource is missing "url" field');
120
+ }
121
+ prisma.addDataSource(dataSource.name, provider, url, shadowDatabaseUrl, restFields);
122
+ }
123
+ extractDataSourceUrl(fieldValue) {
124
+ var _a;
125
+ if (this.isStringLiteral(fieldValue)) {
126
+ return new prisma_builder_1.DataSourceUrl(fieldValue.value, false);
127
+ }
128
+ else if ((0, ast_1.isInvocationExpr)(fieldValue) &&
129
+ ((_a = fieldValue.function.ref) === null || _a === void 0 ? void 0 : _a.name) === 'env' &&
130
+ fieldValue.args.length === 1 &&
131
+ this.isStringLiteral(fieldValue.args[0].value)) {
132
+ return new prisma_builder_1.DataSourceUrl(fieldValue.args[0].value.value, true);
133
+ }
134
+ else {
135
+ return null;
136
+ }
137
+ }
138
+ generateGenerator(prisma, decl) {
139
+ prisma.addGenerator(decl.name, decl.fields.map((f) => {
140
+ const value = (0, ast_1.isArrayExpr)(f.value) ? (0, sdk_1.getLiteralArray)(f.value) : (0, sdk_1.getLiteral)(f.value);
141
+ return { name: f.name, value };
142
+ }));
143
+ }
144
+ generateModel(prisma, decl, config) {
145
+ const model = prisma.addModel(decl.name);
146
+ for (const field of decl.fields) {
147
+ this.generateModelField(model, field);
148
+ }
149
+ // add an "zenstack_guard" field for dealing with boolean conditions
150
+ const guardField = model.addField(sdk_1.GUARD_FIELD_NAME, 'Boolean', [
151
+ new prisma_builder_1.FieldAttribute('@default', [
152
+ new prisma_builder_1.AttributeArg(undefined, new prisma_builder_1.AttributeArgValue('Boolean', true)),
153
+ ]),
154
+ ]);
155
+ if ((config === null || config === void 0 ? void 0 : config.guardFieldName) && (config === null || config === void 0 ? void 0 : config.guardFieldName) !== sdk_1.GUARD_FIELD_NAME) {
156
+ // generate a @map to rename field in the database
157
+ guardField.addAttribute('@map', [
158
+ new prisma_builder_1.AttributeArg(undefined, new prisma_builder_1.AttributeArgValue('String', config.guardFieldName)),
159
+ ]);
160
+ }
161
+ const { allowAll, denyAll, hasFieldValidation } = (0, sdk_1.analyzePolicies)(decl);
162
+ if ((!allowAll && !denyAll) || hasFieldValidation) {
163
+ // generate auxiliary fields for policy check
164
+ // add an "zenstack_transaction" field for tracking records created/updated with nested writes
165
+ const transactionField = model.addField(sdk_1.TRANSACTION_FIELD_NAME, 'String?');
166
+ // create an index for "zenstack_transaction" field
167
+ model.addAttribute('@@index', [
168
+ new prisma_builder_1.AttributeArg(undefined, new prisma_builder_1.AttributeArgValue('Array', [
169
+ new prisma_builder_1.AttributeArgValue('FieldReference', sdk_1.TRANSACTION_FIELD_NAME),
170
+ ])),
171
+ ]);
172
+ if ((config === null || config === void 0 ? void 0 : config.transactionFieldName) && (config === null || config === void 0 ? void 0 : config.transactionFieldName) !== sdk_1.TRANSACTION_FIELD_NAME) {
173
+ // generate a @map to rename field in the database
174
+ transactionField.addAttribute('@map', [
175
+ new prisma_builder_1.AttributeArg(undefined, new prisma_builder_1.AttributeArgValue('String', config.transactionFieldName)),
176
+ ]);
177
+ }
178
+ }
179
+ for (const attr of decl.attributes.filter((attr) => this.isPrismaAttribute(attr))) {
180
+ this.generateContainerAttribute(model, attr);
181
+ }
182
+ decl.attributes
183
+ .filter((attr) => attr.decl.ref && !this.isPrismaAttribute(attr))
184
+ .forEach((attr) => model.addComment('/// ' + this.zModelGenerator.generateAttribute(attr)));
185
+ // user defined comments pass-through
186
+ decl.comments.forEach((c) => model.addComment(c));
187
+ }
188
+ isPrismaAttribute(attr) {
189
+ if (!attr.decl.ref) {
190
+ return false;
191
+ }
192
+ const attrDecl = (0, sdk_1.resolved)(attr.decl);
193
+ return (!!attrDecl.attributes.find((a) => { var _a; return ((_a = a.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === '@@@prisma'; }) ||
194
+ // the special pass-through attribute
195
+ attrDecl.name === MODEL_PASSTHROUGH_ATTR ||
196
+ attrDecl.name === FIELD_PASSTHROUGH_ATTR);
197
+ }
198
+ generateModelField(model, field) {
199
+ var _a, _b;
200
+ const fieldType = field.type.type || ((_b = (_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref) === null || _b === void 0 ? void 0 : _b.name);
201
+ if (!fieldType) {
202
+ throw new sdk_1.PluginError(`Field type is not resolved: ${field.$container.name}.${field.name}`);
203
+ }
204
+ const type = new prisma_builder_1.ModelFieldType(fieldType, field.type.array, field.type.optional);
205
+ const attributes = field.attributes
206
+ .filter((attr) => this.isPrismaAttribute(attr))
207
+ .map((attr) => this.makeFieldAttribute(attr));
208
+ const nonPrismaAttributes = field.attributes.filter((attr) => attr.decl.ref && !this.isPrismaAttribute(attr));
209
+ const documentations = nonPrismaAttributes.map((attr) => '/// ' + this.zModelGenerator.generateAttribute(attr));
210
+ const result = model.addField(field.name, type, attributes, documentations);
211
+ // user defined comments pass-through
212
+ field.comments.forEach((c) => result.addComment(c));
213
+ }
214
+ makeFieldAttribute(attr) {
215
+ const attrName = (0, sdk_1.resolved)(attr.decl).name;
216
+ if (attrName === FIELD_PASSTHROUGH_ATTR) {
217
+ const text = (0, sdk_1.getLiteral)(attr.args[0].value);
218
+ if (text) {
219
+ return new prisma_builder_1.PassThroughAttribute(text);
220
+ }
221
+ else {
222
+ throw new sdk_1.PluginError(`Invalid arguments for ${FIELD_PASSTHROUGH_ATTR} attribute`);
223
+ }
224
+ }
225
+ else {
226
+ return new prisma_builder_1.FieldAttribute(attrName, attr.args.map((arg) => this.makeAttributeArg(arg)));
227
+ }
228
+ }
229
+ makeAttributeArg(arg) {
230
+ return new prisma_builder_1.AttributeArg(arg.name, this.makeAttributeArgValue(arg.value));
231
+ }
232
+ makeAttributeArgValue(node) {
233
+ if ((0, ast_1.isLiteralExpr)(node)) {
234
+ switch (typeof node.value) {
235
+ case 'string':
236
+ return new prisma_builder_1.AttributeArgValue('String', node.value);
237
+ case 'number':
238
+ return new prisma_builder_1.AttributeArgValue('Number', node.value);
239
+ case 'boolean':
240
+ return new prisma_builder_1.AttributeArgValue('Boolean', node.value);
241
+ default:
242
+ throw new sdk_1.PluginError(`Unexpected literal type: ${typeof node.value}`);
243
+ }
244
+ }
245
+ else if ((0, ast_1.isArrayExpr)(node)) {
246
+ return new prisma_builder_1.AttributeArgValue('Array', new Array(...node.items.map((item) => this.makeAttributeArgValue(item))));
247
+ }
248
+ else if ((0, ast_1.isReferenceExpr)(node)) {
249
+ return new prisma_builder_1.AttributeArgValue('FieldReference', new prisma_builder_1.FieldReference((0, sdk_1.resolved)(node.target).name, node.args.map((arg) => new prisma_builder_1.FieldReferenceArg(arg.name, arg.value))));
250
+ }
251
+ else if ((0, ast_1.isInvocationExpr)(node)) {
252
+ // invocation
253
+ return new prisma_builder_1.AttributeArgValue('FunctionCall', this.makeFunctionCall(node));
254
+ }
255
+ else {
256
+ throw new sdk_1.PluginError(`Unsupported attribute argument expression type: ${node.$type}`);
257
+ }
258
+ }
259
+ makeFunctionCall(node) {
260
+ return new prisma_builder_1.FunctionCall((0, sdk_1.resolved)(node.function).name, node.args.map((arg) => {
261
+ if (!(0, ast_1.isLiteralExpr)(arg.value)) {
262
+ throw new sdk_1.PluginError('Function call argument must be literal');
263
+ }
264
+ return new prisma_builder_1.FunctionCallArg(arg.name, arg.value.value);
265
+ }));
266
+ }
267
+ generateContainerAttribute(container, attr) {
268
+ const attrName = (0, sdk_1.resolved)(attr.decl).name;
269
+ if (attrName === MODEL_PASSTHROUGH_ATTR) {
270
+ const text = (0, sdk_1.getLiteral)(attr.args[0].value);
271
+ if (text) {
272
+ container.attributes.push(new prisma_builder_1.PassThroughAttribute(text));
273
+ }
274
+ }
275
+ else {
276
+ container.attributes.push(new prisma_builder_1.ContainerAttribute(attrName, attr.args.map((arg) => this.makeAttributeArg(arg))));
277
+ }
278
+ }
279
+ generateEnum(prisma, decl) {
280
+ const _enum = prisma.addEnum(decl.name);
281
+ for (const field of decl.fields) {
282
+ this.generateEnumField(_enum, field);
283
+ }
284
+ for (const attr of decl.attributes.filter((attr) => this.isPrismaAttribute(attr))) {
285
+ this.generateContainerAttribute(_enum, attr);
286
+ }
287
+ decl.attributes
288
+ .filter((attr) => attr.decl.ref && !this.isPrismaAttribute(attr))
289
+ .forEach((attr) => _enum.addComment('/// ' + this.zModelGenerator.generateAttribute(attr)));
290
+ // user defined comments pass-through
291
+ decl.comments.forEach((c) => _enum.addComment(c));
292
+ }
293
+ generateEnumField(_enum, field) {
294
+ const attributes = field.attributes
295
+ .filter((attr) => this.isPrismaAttribute(attr))
296
+ .map((attr) => this.makeFieldAttribute(attr));
297
+ const nonPrismaAttributes = field.attributes.filter((attr) => attr.decl.ref && !this.isPrismaAttribute(attr));
298
+ const documentations = nonPrismaAttributes.map((attr) => '/// ' + this.zModelGenerator.generateAttribute(attr));
299
+ _enum.addField(field.name, attributes, documentations);
300
+ }
301
+ isStringLiteral(node) {
302
+ return (0, ast_1.isLiteralExpr)(node) && typeof node.value === 'string';
303
+ }
304
+ }
305
+ exports.default = PrismaSchemaGenerator;
306
+ //# sourceMappingURL=schema-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-generator.js","sourceRoot":"","sources":["../../../src/plugins/prisma/schema-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { Argument, ArrayExpr, AttributeArg, BinaryExpr, DataModelAttribute, DataModelFieldAttribute, Expression, FieldInitializer, InvocationExpr, LiteralExpr, MemberAccessExpr, ObjectExpr, ReferenceArg, ReferenceExpr, UnaryExpr } from '@zenstackhq/language/ast';
2
+ /**
3
+ * Options for the generator.
4
+ */
5
+ export interface ZModelCodeOptions {
6
+ binaryExprNumberOfSpaces: number;
7
+ unaryExprNumberOfSpaces: number;
8
+ }
9
+ export default class ZModelCodeGenerator {
10
+ private readonly options;
11
+ constructor(options?: Partial<ZModelCodeOptions>);
12
+ generateAttribute(ast: DataModelAttribute | DataModelFieldAttribute): string;
13
+ generateAttributeArg(ast: AttributeArg): string;
14
+ generateExpression(ast: Expression): string;
15
+ generateObjectExpr(ast: ObjectExpr): string;
16
+ generateObjectField(field: FieldInitializer): string;
17
+ generateArrayExpr(ast: ArrayExpr): string;
18
+ generateLiteralExpr(ast: LiteralExpr): string;
19
+ generateUnaryExpr(ast: UnaryExpr): string;
20
+ generateBinaryExpr(ast: BinaryExpr): string;
21
+ generateReferenceExpr(ast: ReferenceExpr): string;
22
+ generateReferenceArg(ast: ReferenceArg): string;
23
+ generateMemberExpr(ast: MemberAccessExpr): string;
24
+ generateInvocationExpr(ast: InvocationExpr): string;
25
+ generateArgument(ast: Argument): string;
26
+ private get binaryExprSpace();
27
+ private get unaryExprSpace();
28
+ private isParenthesesNeededForBinaryExpr;
29
+ private isCollectionPredicateOperator;
30
+ }
@@ -0,0 +1,122 @@
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
+ class ZModelCodeGenerator {
6
+ constructor(options) {
7
+ var _a, _b;
8
+ this.options = {
9
+ binaryExprNumberOfSpaces: (_a = options === null || options === void 0 ? void 0 : options.binaryExprNumberOfSpaces) !== null && _a !== void 0 ? _a : 1,
10
+ unaryExprNumberOfSpaces: (_b = options === null || options === void 0 ? void 0 : options.unaryExprNumberOfSpaces) !== null && _b !== void 0 ? _b : 0,
11
+ };
12
+ }
13
+ generateAttribute(ast) {
14
+ const args = ast.args.length ? `(${ast.args.map((x) => this.generateAttributeArg(x)).join(', ')})` : '';
15
+ return `${(0, sdk_1.resolved)(ast.decl).name}${args}`;
16
+ }
17
+ generateAttributeArg(ast) {
18
+ if (ast.name) {
19
+ return `${ast.name}: ${this.generateExpression(ast.value)}`;
20
+ }
21
+ else {
22
+ return this.generateExpression(ast.value);
23
+ }
24
+ }
25
+ generateExpression(ast) {
26
+ switch (ast.$type) {
27
+ case ast_1.LiteralExpr:
28
+ return this.generateLiteralExpr(ast);
29
+ case ast_1.UnaryExpr:
30
+ return this.generateUnaryExpr(ast);
31
+ case ast_1.ArrayExpr:
32
+ return this.generateArrayExpr(ast);
33
+ case ast_1.BinaryExpr:
34
+ return this.generateBinaryExpr(ast);
35
+ case ast_1.ReferenceExpr:
36
+ return this.generateReferenceExpr(ast);
37
+ case ast_1.MemberAccessExpr:
38
+ return this.generateMemberExpr(ast);
39
+ case ast_1.InvocationExpr:
40
+ return this.generateInvocationExpr(ast);
41
+ case ast_1.ObjectExpr:
42
+ return this.generateObjectExpr(ast);
43
+ case ast_1.NullExpr:
44
+ case ast_1.ThisExpr:
45
+ return ast.value;
46
+ default:
47
+ throw new Error(`Not implemented: ${ast}`);
48
+ }
49
+ }
50
+ generateObjectExpr(ast) {
51
+ return `{ ${ast.fields.map((field) => this.generateObjectField(field)).join(', ')} }`;
52
+ }
53
+ generateObjectField(field) {
54
+ return `${field.name}: ${this.generateExpression(field.value)}`;
55
+ }
56
+ generateArrayExpr(ast) {
57
+ return `[${ast.items.map((item) => this.generateExpression(item)).join(', ')}]`;
58
+ }
59
+ generateLiteralExpr(ast) {
60
+ return typeof ast.value === 'string' ? `'${ast.value}'` : ast.value.toString();
61
+ }
62
+ generateUnaryExpr(ast) {
63
+ return `${ast.operator}${this.unaryExprSpace}${this.generateExpression(ast.operand)}`;
64
+ }
65
+ generateBinaryExpr(ast) {
66
+ const operator = ast.operator;
67
+ const isCollectionPredicate = this.isCollectionPredicateOperator(operator);
68
+ const rightExpr = this.generateExpression(ast.right);
69
+ const { left: isLeftParenthesis, right: isRightParenthesis } = this.isParenthesesNeededForBinaryExpr(ast);
70
+ return `${isLeftParenthesis ? '(' : ''}${this.generateExpression(ast.left)}${isLeftParenthesis ? ')' : ''}${this.binaryExprSpace}${operator}${this.binaryExprSpace}${isRightParenthesis ? '(' : ''}${isCollectionPredicate ? `[${rightExpr}]` : rightExpr}${isRightParenthesis ? ')' : ''}`;
71
+ }
72
+ generateReferenceExpr(ast) {
73
+ var _a;
74
+ const args = ast.args.length ? `(${ast.args.map((x) => this.generateReferenceArg(x)).join(', ')})` : '';
75
+ return `${(_a = ast.target.ref) === null || _a === void 0 ? void 0 : _a.name}${args}`;
76
+ }
77
+ generateReferenceArg(ast) {
78
+ return `${ast.name}:${ast.value}`;
79
+ }
80
+ generateMemberExpr(ast) {
81
+ var _a;
82
+ return `${this.generateExpression(ast.operand)}.${(_a = ast.member.ref) === null || _a === void 0 ? void 0 : _a.name}`;
83
+ }
84
+ generateInvocationExpr(ast) {
85
+ var _a;
86
+ return `${(_a = ast.function.ref) === null || _a === void 0 ? void 0 : _a.name}(${ast.args.map((x) => this.generateArgument(x)).join(', ')})`;
87
+ }
88
+ generateArgument(ast) {
89
+ return `${ast.name && ':'} ${this.generateExpression(ast.value)}`;
90
+ }
91
+ get binaryExprSpace() {
92
+ return ' '.repeat(this.options.binaryExprNumberOfSpaces);
93
+ }
94
+ get unaryExprSpace() {
95
+ return ' '.repeat(this.options.unaryExprNumberOfSpaces);
96
+ }
97
+ isParenthesesNeededForBinaryExpr(ast) {
98
+ const result = { left: false, right: false };
99
+ const operator = ast.operator;
100
+ const isCollectionPredicate = this.isCollectionPredicateOperator(operator);
101
+ const currentPriority = ast_1.BinaryExprOperatorPriority[operator];
102
+ if (ast.left.$type === ast_1.BinaryExpr &&
103
+ ast_1.BinaryExprOperatorPriority[ast.left['operator']] < currentPriority) {
104
+ result.left = true;
105
+ }
106
+ /**
107
+ * 1 collection predicate operator has [] around the right operand, no need to add parenthesis.
108
+ * 2 grammar is left associative, so if the right operand has the same priority still need to add parenthesis.
109
+ **/
110
+ if (!isCollectionPredicate &&
111
+ ast.right.$type === ast_1.BinaryExpr &&
112
+ ast_1.BinaryExprOperatorPriority[ast.right['operator']] <= currentPriority) {
113
+ result.right = true;
114
+ }
115
+ return result;
116
+ }
117
+ isCollectionPredicateOperator(op) {
118
+ return ['?', '!', '^'].includes(op);
119
+ }
120
+ }
121
+ exports.default = ZModelCodeGenerator;
122
+ //# sourceMappingURL=zmodel-code-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zmodel-code-generator.js","sourceRoot":"","sources":["../../../src/plugins/prisma/zmodel-code-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { DMMF } from '@prisma/generator-helper';
2
+ import { PluginOptions } from '@zenstackhq/sdk';
3
+ import { Model } from '@zenstackhq/sdk/ast';
4
+ export declare function generate(model: Model, options: PluginOptions, dmmf: DMMF.Document): Promise<void>;
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.generate = void 0;
16
+ const sdk_1 = require("@zenstackhq/sdk");
17
+ const ast_1 = require("@zenstackhq/sdk/ast");
18
+ const dmmf_helpers_1 = require("@zenstackhq/sdk/dmmf-helpers");
19
+ const fs_1 = require("fs");
20
+ const path_1 = __importDefault(require("path"));
21
+ const ts_morph_1 = require("ts-morph");
22
+ const plugin_utils_1 = require("../plugin-utils");
23
+ const transformer_1 = __importDefault(require("./transformer"));
24
+ const removeDir_1 = __importDefault(require("./utils/removeDir"));
25
+ function generate(model, options, dmmf) {
26
+ var _a, _b;
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ let output = options.output;
29
+ if (!output) {
30
+ const defaultOutputFolder = (0, plugin_utils_1.getDefaultOutputFolder)();
31
+ if (defaultOutputFolder) {
32
+ output = path_1.default.join(defaultOutputFolder, 'zod');
33
+ }
34
+ else {
35
+ output = './generated/zod';
36
+ }
37
+ }
38
+ yield handleGeneratorOutputValue(output);
39
+ const prismaClientDmmf = dmmf;
40
+ const modelOperations = prismaClientDmmf.mappings.modelOperations;
41
+ const inputObjectTypes = prismaClientDmmf.schema.inputObjectTypes.prisma;
42
+ const outputObjectTypes = prismaClientDmmf.schema.outputObjectTypes.prisma;
43
+ const models = prismaClientDmmf.datamodel.models;
44
+ const project = new ts_morph_1.Project();
45
+ yield generateEnumSchemas(prismaClientDmmf.schema.enumTypes.prisma, (_a = prismaClientDmmf.schema.enumTypes.model) !== null && _a !== void 0 ? _a : [], project);
46
+ const dataSource = model.declarations.find((d) => (0, ast_1.isDataSource)(d));
47
+ const dataSourceProvider = (0, sdk_1.getLiteral)((_b = dataSource === null || dataSource === void 0 ? void 0 : dataSource.fields.find((f) => f.name === 'provider')) === null || _b === void 0 ? void 0 : _b.value);
48
+ transformer_1.default.provider = dataSourceProvider;
49
+ const generatorConfigOptions = {};
50
+ Object.entries(options).forEach(([k, v]) => (generatorConfigOptions[k] = v));
51
+ (0, dmmf_helpers_1.addMissingInputObjectTypes)(inputObjectTypes, outputObjectTypes, models);
52
+ const aggregateOperationSupport = (0, dmmf_helpers_1.resolveAggregateOperationSupport)(inputObjectTypes);
53
+ yield generateObjectSchemas(inputObjectTypes, project);
54
+ yield generateModelSchemas(models, modelOperations, aggregateOperationSupport, project);
55
+ yield (0, sdk_1.emitProject)(project);
56
+ });
57
+ }
58
+ exports.generate = generate;
59
+ function handleGeneratorOutputValue(output) {
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ // create the output directory and delete contents that might exist from a previous run
62
+ yield fs_1.promises.mkdir(output, { recursive: true });
63
+ const isRemoveContentsOnly = true;
64
+ yield (0, removeDir_1.default)(output, isRemoveContentsOnly);
65
+ transformer_1.default.setOutputPath(output);
66
+ });
67
+ }
68
+ function generateEnumSchemas(prismaSchemaEnum, modelSchemaEnum, project) {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const enumTypes = [...prismaSchemaEnum, ...modelSchemaEnum];
71
+ const enumNames = enumTypes.map((enumItem) => enumItem.name);
72
+ transformer_1.default.enumNames = enumNames !== null && enumNames !== void 0 ? enumNames : [];
73
+ const transformer = new transformer_1.default({
74
+ enumTypes,
75
+ project,
76
+ });
77
+ yield transformer.generateEnumSchemas();
78
+ });
79
+ }
80
+ function generateObjectSchemas(inputObjectTypes, project) {
81
+ var _a, _b;
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ for (let i = 0; i < inputObjectTypes.length; i += 1) {
84
+ const fields = (_a = inputObjectTypes[i]) === null || _a === void 0 ? void 0 : _a.fields;
85
+ const name = (_b = inputObjectTypes[i]) === null || _b === void 0 ? void 0 : _b.name;
86
+ const transformer = new transformer_1.default({ name, fields, project });
87
+ yield transformer.generateObjectSchema();
88
+ }
89
+ });
90
+ }
91
+ function generateModelSchemas(models, modelOperations, aggregateOperationSupport, project) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ const transformer = new transformer_1.default({
94
+ models,
95
+ modelOperations,
96
+ aggregateOperationSupport,
97
+ project,
98
+ });
99
+ yield transformer.generateModelSchemas();
100
+ });
101
+ }
102
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/plugins/zod/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { DMMF } from '@prisma/generator-helper';
2
+ import { PluginOptions } from '@zenstackhq/sdk';
3
+ import { Model } from '@zenstackhq/sdk/ast';
4
+ export declare const name = "Zod";
5
+ export default function run(model: Model, options: PluginOptions, dmmf: DMMF.Document): Promise<void>;