zenstack 1.0.0-beta.1 → 1.0.0-beta.11

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 (69) hide show
  1. package/README.md +12 -4
  2. package/cli/cli-util.js +1 -1
  3. package/cli/cli-util.js.map +1 -1
  4. package/cli/plugin-runner.d.ts +2 -1
  5. package/cli/plugin-runner.js +101 -47
  6. package/cli/plugin-runner.js.map +1 -1
  7. package/language-server/constants.d.ts +0 -4
  8. package/language-server/constants.js +1 -14
  9. package/language-server/constants.js.map +1 -1
  10. package/language-server/validator/datamodel-validator.js +8 -3
  11. package/language-server/validator/datamodel-validator.js.map +1 -1
  12. package/language-server/validator/expression-validator.js +38 -1
  13. package/language-server/validator/expression-validator.js.map +1 -1
  14. package/language-server/validator/function-decl-validator.d.ts +9 -0
  15. package/language-server/validator/function-decl-validator.js +15 -0
  16. package/language-server/validator/function-decl-validator.js.map +1 -0
  17. package/language-server/validator/function-invocation-validator.js +31 -5
  18. package/language-server/validator/function-invocation-validator.js.map +1 -1
  19. package/language-server/validator/utils.d.ts +3 -3
  20. package/language-server/validator/utils.js.map +1 -1
  21. package/language-server/validator/zmodel-validator.d.ts +2 -1
  22. package/language-server/validator/zmodel-validator.js +8 -3
  23. package/language-server/validator/zmodel-validator.js.map +1 -1
  24. package/language-server/zmodel-linker.d.ts +1 -0
  25. package/language-server/zmodel-linker.js +43 -1
  26. package/language-server/zmodel-linker.js.map +1 -1
  27. package/package.json +8 -15
  28. package/plugins/access-policy/expression-writer.js +33 -12
  29. package/plugins/access-policy/expression-writer.js.map +1 -1
  30. package/plugins/access-policy/policy-guard-generator.js +33 -22
  31. package/plugins/access-policy/policy-guard-generator.js.map +1 -1
  32. package/plugins/model-meta/index.js +18 -3
  33. package/plugins/model-meta/index.js.map +1 -1
  34. package/plugins/plugin-utils.d.ts +4 -0
  35. package/plugins/plugin-utils.js +16 -1
  36. package/plugins/plugin-utils.js.map +1 -1
  37. package/plugins/prisma/prisma-builder.d.ts +3 -1
  38. package/plugins/prisma/prisma-builder.js +9 -3
  39. package/plugins/prisma/prisma-builder.js.map +1 -1
  40. package/plugins/prisma/schema-generator.js +34 -5
  41. package/plugins/prisma/schema-generator.js.map +1 -1
  42. package/plugins/zod/generator.js +157 -18
  43. package/plugins/zod/generator.js.map +1 -1
  44. package/plugins/zod/index.d.ts +1 -1
  45. package/plugins/zod/transformer.d.ts +4 -4
  46. package/plugins/zod/transformer.js +134 -82
  47. package/plugins/zod/transformer.js.map +1 -1
  48. package/plugins/zod/types.d.ts +2 -0
  49. package/plugins/zod/utils/schema-gen.d.ts +3 -0
  50. package/plugins/zod/utils/schema-gen.js +178 -0
  51. package/plugins/zod/utils/schema-gen.js.map +1 -0
  52. package/res/stdlib.zmodel +102 -29
  53. package/telemetry.d.ts +1 -0
  54. package/telemetry.js +3 -1
  55. package/telemetry.js.map +1 -1
  56. package/utils/ast-utils.d.ts +1 -14
  57. package/utils/ast-utils.js +3 -71
  58. package/utils/ast-utils.js.map +1 -1
  59. package/utils/pkg-utils.js +1 -1
  60. package/utils/pkg-utils.js.map +1 -1
  61. package/utils/typescript-expression-transformer.d.ts +53 -0
  62. package/utils/typescript-expression-transformer.js +295 -0
  63. package/utils/typescript-expression-transformer.js.map +1 -0
  64. package/plugins/access-policy/typescript-expression-transformer.d.ts +0 -28
  65. package/plugins/access-policy/typescript-expression-transformer.js +0 -180
  66. package/plugins/access-policy/typescript-expression-transformer.js.map +0 -1
  67. package/plugins/access-policy/zod-schema-generator.d.ts +0 -12
  68. package/plugins/access-policy/zod-schema-generator.js +0 -160
  69. package/plugins/access-policy/zod-schema-generator.js.map +0 -1
@@ -17,10 +17,14 @@ const sdk_1 = require("@zenstackhq/sdk");
17
17
  const ast_1 = require("@zenstackhq/sdk/ast");
18
18
  const dmmf_helpers_1 = require("@zenstackhq/sdk/dmmf-helpers");
19
19
  const fs_1 = require("fs");
20
+ const langium_1 = require("langium");
20
21
  const path_1 = __importDefault(require("path"));
22
+ const upper_case_first_1 = require("upper-case-first");
23
+ const utils_1 = require("../../language-server/utils");
21
24
  const plugin_utils_1 = require("../plugin-utils");
22
25
  const transformer_1 = __importDefault(require("./transformer"));
23
26
  const removeDir_1 = __importDefault(require("./utils/removeDir"));
27
+ const schema_gen_1 = require("./utils/schema-gen");
24
28
  function generate(model, options, dmmf) {
25
29
  var _a, _b;
26
30
  return __awaiter(this, void 0, void 0, function* () {
@@ -42,16 +46,36 @@ function generate(model, options, dmmf) {
42
46
  const outputObjectTypes = prismaClientDmmf.schema.outputObjectTypes.prisma;
43
47
  const models = prismaClientDmmf.datamodel.models;
44
48
  const project = (0, sdk_1.createProject)();
45
- yield generateEnumSchemas(prismaClientDmmf.schema.enumTypes.prisma, (_a = prismaClientDmmf.schema.enumTypes.model) !== null && _a !== void 0 ? _a : [], project);
49
+ // common schemas
50
+ yield generateCommonSchemas(project, output);
51
+ // enums
52
+ yield generateEnumSchemas(prismaClientDmmf.schema.enumTypes.prisma, (_a = prismaClientDmmf.schema.enumTypes.model) !== null && _a !== void 0 ? _a : [], project, model);
46
53
  const dataSource = model.declarations.find((d) => (0, ast_1.isDataSource)(d));
47
54
  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, output);
54
- yield generateModelSchemas(models, modelOperations, aggregateOperationSupport, project);
55
+ yield generateModelSchemas(project, model, output);
56
+ if (options.modelOnly !== true) {
57
+ // detailed object schemas referenced from input schemas
58
+ transformer_1.default.provider = dataSourceProvider;
59
+ (0, dmmf_helpers_1.addMissingInputObjectTypes)(inputObjectTypes, outputObjectTypes, models);
60
+ const aggregateOperationSupport = (0, dmmf_helpers_1.resolveAggregateOperationSupport)(inputObjectTypes);
61
+ yield generateObjectSchemas(inputObjectTypes, project, output, model);
62
+ // input schemas
63
+ const transformer = new transformer_1.default({
64
+ models,
65
+ modelOperations,
66
+ aggregateOperationSupport,
67
+ project,
68
+ zmodel: model,
69
+ });
70
+ yield transformer.generateInputSchemas();
71
+ }
72
+ // create barrel file
73
+ const exports = [`export * as models from './models'`, `export * as enums from './enums'`];
74
+ if (options.modelOnly !== true) {
75
+ exports.push(`export * as input from './input'`, `export * as objects from './objects'`);
76
+ }
77
+ project.createSourceFile(path_1.default.join(output, 'index.ts'), exports.join(';\n'), { overwrite: true });
78
+ // emit
55
79
  const shouldCompile = options.compile !== false;
56
80
  if (!shouldCompile || options.preserveTsFiles === true) {
57
81
  // save ts files
@@ -72,7 +96,28 @@ function handleGeneratorOutputValue(output) {
72
96
  transformer_1.default.setOutputPath(output);
73
97
  });
74
98
  }
75
- function generateEnumSchemas(prismaSchemaEnum, modelSchemaEnum, project) {
99
+ function generateCommonSchemas(project, output) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ // Decimal
102
+ project.createSourceFile(path_1.default.join(output, 'common', 'index.ts'), `
103
+ import { z } from 'zod';
104
+ export const DecimalSchema = z.union([z.number(), z.string(), z.object({d: z.number().array(), e: z.number(), s: z.number()})]);
105
+
106
+ // https://stackoverflow.com/a/54487392/20415796
107
+ type OmitDistributive<T, K extends PropertyKey> = T extends any ? (T extends object ? OmitRecursively<T, K> : T) : never;
108
+ type OmitRecursively<T extends any, K extends PropertyKey> = Omit<
109
+ { [P in keyof T]: OmitDistributive<T[P], K> },
110
+ K
111
+ >;
112
+
113
+ /**
114
+ * Strips auxiliary fields recursively
115
+ */
116
+ export type Purge<T> = OmitRecursively<T, ${sdk_1.AUXILIARY_FIELDS.map((f) => "'" + f + "'").join('|')}>;
117
+ `, { overwrite: true });
118
+ });
119
+ }
120
+ function generateEnumSchemas(prismaSchemaEnum, modelSchemaEnum, project, zmodel) {
76
121
  return __awaiter(this, void 0, void 0, function* () {
77
122
  const enumTypes = [...prismaSchemaEnum, ...modelSchemaEnum];
78
123
  const enumNames = enumTypes.map((enumItem) => enumItem.name);
@@ -80,33 +125,127 @@ function generateEnumSchemas(prismaSchemaEnum, modelSchemaEnum, project) {
80
125
  const transformer = new transformer_1.default({
81
126
  enumTypes,
82
127
  project,
128
+ zmodel,
83
129
  });
84
130
  yield transformer.generateEnumSchemas();
85
131
  });
86
132
  }
87
- function generateObjectSchemas(inputObjectTypes, project, output) {
133
+ function generateObjectSchemas(inputObjectTypes, project, output, zmodel) {
88
134
  var _a, _b;
89
135
  return __awaiter(this, void 0, void 0, function* () {
90
136
  const moduleNames = [];
91
137
  for (let i = 0; i < inputObjectTypes.length; i += 1) {
92
138
  const fields = (_a = inputObjectTypes[i]) === null || _a === void 0 ? void 0 : _a.fields;
93
139
  const name = (_b = inputObjectTypes[i]) === null || _b === void 0 ? void 0 : _b.name;
94
- const transformer = new transformer_1.default({ name, fields, project });
140
+ const transformer = new transformer_1.default({ name, fields, project, zmodel });
95
141
  const moduleName = transformer.generateObjectSchema();
96
142
  moduleNames.push(moduleName);
97
143
  }
98
144
  project.createSourceFile(path_1.default.join(output, 'objects/index.ts'), moduleNames.map((name) => `export * from './${name}';`).join('\n'), { overwrite: true });
99
145
  });
100
146
  }
101
- function generateModelSchemas(models, modelOperations, aggregateOperationSupport, project) {
147
+ function generateModelSchemas(project, zmodel, output) {
102
148
  return __awaiter(this, void 0, void 0, function* () {
103
- const transformer = new transformer_1.default({
104
- models,
105
- modelOperations,
106
- aggregateOperationSupport,
107
- project,
149
+ const schemaNames = [];
150
+ for (const dm of (0, sdk_1.getDataModels)(zmodel)) {
151
+ schemaNames.push(yield generateModelSchema(dm, project, output));
152
+ }
153
+ project.createSourceFile(path_1.default.join(output, 'models', 'index.ts'), schemaNames.map((name) => `export * from './${name}';`).join('\n'), { overwrite: true });
154
+ });
155
+ }
156
+ function generateModelSchema(model, project, output) {
157
+ return __awaiter(this, void 0, void 0, function* () {
158
+ const schemaName = `${(0, upper_case_first_1.upperCaseFirst)(model.name)}.schema`;
159
+ const sf = project.createSourceFile(path_1.default.join(output, 'models', `${schemaName}.ts`), undefined, {
160
+ overwrite: true,
161
+ });
162
+ sf.replaceWithText((writer) => {
163
+ var _a, _b, _c;
164
+ const fields = model.fields.filter((field) => {
165
+ var _a;
166
+ return !sdk_1.AUXILIARY_FIELDS.includes(field.name) &&
167
+ // scalar fields only
168
+ !(0, ast_1.isDataModel)((_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref) &&
169
+ !(0, sdk_1.isForeignKeyField)(field);
170
+ });
171
+ writer.writeLine('/* eslint-disable */');
172
+ writer.writeLine(`import { z } from 'zod';`);
173
+ // import user-defined enums from Prisma as they might be referenced in the expressions
174
+ const importEnums = new Set();
175
+ for (const node of (0, langium_1.streamAllContents)(model)) {
176
+ if ((0, sdk_1.isEnumFieldReference)(node)) {
177
+ const field = node.target.ref;
178
+ if (!(0, utils_1.isFromStdlib)(field.$container)) {
179
+ importEnums.add(field.$container.name);
180
+ }
181
+ }
182
+ }
183
+ if (importEnums.size > 0) {
184
+ const prismaImport = (0, sdk_1.getPrismaClientImportSpec)(model.$container, path_1.default.join(output, 'models'));
185
+ writer.writeLine(`import { ${[...importEnums].join(', ')} } from '${prismaImport}';`);
186
+ }
187
+ // import enum schemas
188
+ for (const field of fields) {
189
+ if (((_a = field.type.reference) === null || _a === void 0 ? void 0 : _a.ref) && (0, ast_1.isEnum)((_b = field.type.reference) === null || _b === void 0 ? void 0 : _b.ref)) {
190
+ const name = (0, upper_case_first_1.upperCaseFirst)((_c = field.type.reference) === null || _c === void 0 ? void 0 : _c.ref.name);
191
+ writer.writeLine(`import { ${name}Schema } from '../enums/${name}.schema';`);
192
+ }
193
+ }
194
+ // import Decimal
195
+ if (fields.some((field) => field.type.type === 'Decimal')) {
196
+ writer.writeLine(`import { DecimalSchema } from '../common';`);
197
+ }
198
+ // create base schema
199
+ writer.write(`const baseSchema = z.object(`);
200
+ writer.inlineBlock(() => {
201
+ fields.forEach((field) => {
202
+ writer.writeLine(`${field.name}: ${(0, schema_gen_1.makeFieldSchema)(field)},`);
203
+ });
204
+ });
205
+ writer.writeLine(');');
206
+ // compile "@@validate" to ".refine"
207
+ const refinements = (0, schema_gen_1.makeValidationRefinements)(model);
208
+ if (refinements.length > 0) {
209
+ writer.writeLine(`function refine(schema: z.ZodType) { return schema${refinements.join('\n')}; }`);
210
+ }
211
+ // model schema
212
+ let modelSchema = 'baseSchema';
213
+ const fieldsToOmit = fields.filter((field) => (0, sdk_1.hasAttribute)(field, '@omit'));
214
+ if (fieldsToOmit.length > 0) {
215
+ modelSchema = makeOmit(modelSchema, fieldsToOmit.map((f) => f.name));
216
+ }
217
+ if (refinements.length > 0) {
218
+ modelSchema = `refine(${modelSchema})`;
219
+ }
220
+ writer.writeLine(`export const ${(0, upper_case_first_1.upperCaseFirst)(model.name)}Schema = ${modelSchema};`);
221
+ // create schema
222
+ let createSchema = 'baseSchema';
223
+ const fieldsWithDefault = fields.filter((field) => (0, sdk_1.hasAttribute)(field, '@default') || (0, sdk_1.hasAttribute)(field, '@updatedAt') || field.type.array);
224
+ if (fieldsWithDefault.length > 0) {
225
+ createSchema = makePartial(createSchema, fieldsWithDefault.map((f) => f.name));
226
+ }
227
+ if (refinements.length > 0) {
228
+ createSchema = `refine(${createSchema})`;
229
+ }
230
+ writer.writeLine(`export const ${(0, upper_case_first_1.upperCaseFirst)(model.name)}CreateSchema = ${createSchema};`);
231
+ // update schema
232
+ let updateSchema = 'baseSchema.partial()';
233
+ if (refinements.length > 0) {
234
+ updateSchema = `refine(${updateSchema})`;
235
+ }
236
+ writer.writeLine(`export const ${(0, upper_case_first_1.upperCaseFirst)(model.name)}UpdateSchema = ${updateSchema};`);
108
237
  });
109
- yield transformer.generateModelSchemas();
238
+ return schemaName;
110
239
  });
111
240
  }
241
+ function makePartial(schema, fields) {
242
+ return `${schema}.partial({
243
+ ${fields.map((f) => `${f}: true`).join(', ')},
244
+ })`;
245
+ }
246
+ function makeOmit(schema, fields) {
247
+ return `${schema}.omit({
248
+ ${fields.map((f) => `${f}: true`).join(', ')},
249
+ })`;
250
+ }
112
251
  //# sourceMappingURL=generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/plugins/zod/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../src/plugins/zod/generator.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { DMMF } from '@prisma/generator-helper';
1
+ import type { DMMF } from '@prisma/generator-helper';
2
2
  import { PluginOptions } from '@zenstackhq/sdk';
3
3
  import { Model } from '@zenstackhq/sdk/ast';
4
4
  export declare const name = "Zod";
@@ -15,13 +15,12 @@ export default class Transformer {
15
15
  static provider: string;
16
16
  private static outputPath;
17
17
  private hasJson;
18
- private static prismaClientOutputPath;
19
- private static isCustomPrismaClientOutputPath;
18
+ private hasDecimal;
20
19
  private project;
20
+ private zmodel;
21
21
  constructor(params: TransformerParams);
22
22
  static setOutputPath(outPath: string): void;
23
23
  static getOutputPath(): string;
24
- static setPrismaClientOutputPath(prismaClientCustomPath: string): void;
25
24
  generateEnumSchemas(): Promise<void>;
26
25
  generateImportZodStatement(): string;
27
26
  generateExportSchemaStatement(name: string, schema: string): string;
@@ -41,6 +40,7 @@ export default class Transformer {
41
40
  generateJsonSchemaImplementation(): string;
42
41
  generateObjectSchemaImportStatements(): string;
43
42
  generateSchemaImports(): string;
43
+ private generateCommonImport;
44
44
  checkIsModelQueryType(type: string): {
45
45
  isModelQueryType: boolean;
46
46
  modelName: string;
@@ -54,7 +54,7 @@ export default class Transformer {
54
54
  wrapWithZodUnion(zodStringFields: string[]): string;
55
55
  wrapWithZodObject(zodStringFields: string | string[]): string;
56
56
  resolveObjectSchemaName(): string;
57
- generateModelSchemas(): Promise<void>;
57
+ generateInputSchemas(): Promise<void>;
58
58
  generateImportStatements(imports: (string | undefined)[]): string;
59
59
  resolveSelectIncludeImportAndZodSchemaLine(model: PrismaDMMF.Model): {
60
60
  selectImport: string;