zenstack 1.10.0 → 2.0.0-alpha.2

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 (100) hide show
  1. package/README.md +29 -1
  2. package/cli/cli-util.d.ts +1 -1
  3. package/cli/cli-util.js +20 -2
  4. package/cli/cli-util.js.map +1 -1
  5. package/cli/index.js +0 -3
  6. package/cli/index.js.map +1 -1
  7. package/cli/plugin-runner.d.ts +4 -2
  8. package/cli/plugin-runner.js +128 -90
  9. package/cli/plugin-runner.js.map +1 -1
  10. package/language-server/validator/datamodel-validator.js +26 -19
  11. package/language-server/validator/datamodel-validator.js.map +1 -1
  12. package/language-server/validator/datasource-validator.js +1 -1
  13. package/language-server/validator/datasource-validator.js.map +1 -1
  14. package/language-server/validator/enum-validator.js +1 -1
  15. package/language-server/validator/enum-validator.js.map +1 -1
  16. package/language-server/validator/expression-validator.js +12 -6
  17. package/language-server/validator/expression-validator.js.map +1 -1
  18. package/language-server/validator/function-invocation-validator.js +1 -2
  19. package/language-server/validator/function-invocation-validator.js.map +1 -1
  20. package/language-server/validator/schema-validator.js +1 -1
  21. package/language-server/validator/schema-validator.js.map +1 -1
  22. package/language-server/validator/utils.d.ts +1 -1
  23. package/language-server/validator/utils.js +3 -3
  24. package/language-server/validator/utils.js.map +1 -1
  25. package/language-server/zmodel-code-action.js +4 -3
  26. package/language-server/zmodel-code-action.js.map +1 -1
  27. package/language-server/zmodel-completion-provider.js +2 -2
  28. package/language-server/zmodel-completion-provider.js.map +1 -1
  29. package/language-server/zmodel-linker.d.ts +0 -1
  30. package/language-server/zmodel-linker.js +9 -67
  31. package/language-server/zmodel-linker.js.map +1 -1
  32. package/language-server/zmodel-scope.d.ts +5 -3
  33. package/language-server/zmodel-scope.js +117 -68
  34. package/language-server/zmodel-scope.js.map +1 -1
  35. package/package.json +6 -6
  36. package/plugins/enhancer/enhance/index.d.ts +7 -0
  37. package/plugins/enhancer/enhance/index.js +336 -0
  38. package/plugins/enhancer/enhance/index.js.map +1 -0
  39. package/plugins/enhancer/enhancer-utils.d.ts +5 -0
  40. package/plugins/enhancer/enhancer-utils.js +22 -0
  41. package/plugins/enhancer/enhancer-utils.js.map +1 -0
  42. package/plugins/enhancer/index.d.ts +5 -0
  43. package/plugins/enhancer/index.js +51 -0
  44. package/plugins/enhancer/index.js.map +1 -0
  45. package/plugins/enhancer/model-meta/index.d.ts +4 -0
  46. package/plugins/enhancer/model-meta/index.js +32 -0
  47. package/plugins/enhancer/model-meta/index.js.map +1 -0
  48. package/plugins/{access-policy → enhancer/policy}/expression-writer.d.ts +3 -0
  49. package/plugins/{access-policy → enhancer/policy}/expression-writer.js +97 -47
  50. package/plugins/enhancer/policy/expression-writer.js.map +1 -0
  51. package/plugins/enhancer/policy/index.d.ts +4 -0
  52. package/plugins/{access-policy → enhancer/policy}/index.js +8 -10
  53. package/plugins/enhancer/policy/index.js.map +1 -0
  54. package/plugins/{access-policy → enhancer/policy}/policy-guard-generator.d.ts +4 -4
  55. package/plugins/{access-policy → enhancer/policy}/policy-guard-generator.js +26 -66
  56. package/plugins/enhancer/policy/policy-guard-generator.js.map +1 -0
  57. package/plugins/plugin-utils.d.ts +8 -0
  58. package/plugins/plugin-utils.js +17 -9
  59. package/plugins/plugin-utils.js.map +1 -1
  60. package/plugins/prisma/index.d.ts +2 -0
  61. package/plugins/prisma/index.js +91 -3
  62. package/plugins/prisma/index.js.map +1 -1
  63. package/plugins/prisma/prisma-builder.d.ts +1 -1
  64. package/plugins/prisma/prisma-builder.js +7 -2
  65. package/plugins/prisma/prisma-builder.js.map +1 -1
  66. package/plugins/prisma/schema-generator.d.ts +10 -4
  67. package/plugins/prisma/schema-generator.js +178 -70
  68. package/plugins/prisma/schema-generator.js.map +1 -1
  69. package/plugins/zod/generator.d.ts +21 -1
  70. package/plugins/zod/generator.js +364 -352
  71. package/plugins/zod/generator.js.map +1 -1
  72. package/plugins/zod/index.d.ts +1 -0
  73. package/plugins/zod/index.js +4 -2
  74. package/plugins/zod/index.js.map +1 -1
  75. package/plugins/zod/transformer.d.ts +7 -5
  76. package/plugins/zod/transformer.js +18 -14
  77. package/plugins/zod/transformer.js.map +1 -1
  78. package/plugins/zod/types.d.ts +0 -2
  79. package/plugins/zod/utils/schema-gen.js +2 -3
  80. package/plugins/zod/utils/schema-gen.js.map +1 -1
  81. package/res/stdlib.zmodel +7 -2
  82. package/telemetry.d.ts +1 -1
  83. package/telemetry.js +1 -1
  84. package/telemetry.js.map +1 -1
  85. package/utils/ast-utils.d.ts +5 -2
  86. package/utils/ast-utils.js +63 -24
  87. package/utils/ast-utils.js.map +1 -1
  88. package/utils/exec-utils.d.ts +7 -3
  89. package/utils/exec-utils.js +18 -6
  90. package/utils/exec-utils.js.map +1 -1
  91. package/plugins/access-policy/expression-writer.js.map +0 -1
  92. package/plugins/access-policy/index.d.ts +0 -4
  93. package/plugins/access-policy/index.js.map +0 -1
  94. package/plugins/access-policy/policy-guard-generator.js.map +0 -1
  95. package/plugins/model-meta/index.d.ts +0 -4
  96. package/plugins/model-meta/index.js +0 -46
  97. package/plugins/model-meta/index.js.map +0 -1
  98. package/utils/typescript-expression-transformer.d.ts +0 -56
  99. package/utils/typescript-expression-transformer.js +0 -338
  100. package/utils/typescript-expression-transformer.js.map +0 -1
@@ -0,0 +1,336 @@
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 runtime_1 = require("@zenstackhq/runtime");
17
+ const sdk_1 = require("@zenstackhq/sdk");
18
+ const ast_1 = require("@zenstackhq/sdk/ast");
19
+ const fs_1 = __importDefault(require("fs"));
20
+ const path_1 = __importDefault(require("path"));
21
+ const ts_morph_1 = require("ts-morph");
22
+ const __1 = require("..");
23
+ const exec_utils_1 = require("../../../utils/exec-utils");
24
+ const prisma_1 = require("../../prisma");
25
+ const schema_generator_1 = require("../../prisma/schema-generator");
26
+ const enhancer_utils_1 = require("../enhancer-utils");
27
+ function generate(model, options, project, outDir) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ let logicalPrismaClientDir;
30
+ let dmmf;
31
+ if (needsLogicalClient(model)) {
32
+ // schema contains delegate models, need to generate a logical prisma schema
33
+ const result = yield generateLogicalPrisma(model, options, outDir);
34
+ logicalPrismaClientDir = './.logical-prisma-client';
35
+ dmmf = result.dmmf;
36
+ // create a reexport of the logical prisma client
37
+ const prismaDts = project.createSourceFile(path_1.default.join(outDir, 'prisma.d.ts'), `export type * from '${logicalPrismaClientDir}/index-fixed';`, { overwrite: true });
38
+ yield saveSourceFile(prismaDts, options);
39
+ }
40
+ else {
41
+ // just reexport the prisma client
42
+ const prismaDts = project.createSourceFile(path_1.default.join(outDir, 'prisma.d.ts'), `export type * from '${(0, sdk_1.getPrismaClientImportSpec)(outDir, options)}';`, { overwrite: true });
43
+ yield saveSourceFile(prismaDts, options);
44
+ }
45
+ const enhanceTs = project.createSourceFile(path_1.default.join(outDir, 'enhance.ts'), `import { createEnhancement, type EnhancementContext, type EnhancementOptions, type ZodSchemas } from '@zenstackhq/runtime';
46
+ import modelMeta from './model-meta';
47
+ import policy from './policy';
48
+ ${options.withZodSchemas ? "import * as zodSchemas from './zod';" : 'const zodSchemas = undefined;'}
49
+ import { Prisma } from '${(0, sdk_1.getPrismaClientImportSpec)(outDir, options)}';
50
+ ${logicalPrismaClientDir ? `import { type PrismaClient } from '${logicalPrismaClientDir}/index-fixed';` : ``}
51
+
52
+ export function enhance<DbClient extends object>(prisma: DbClient, context?: EnhancementContext, options?: EnhancementOptions) {
53
+ return createEnhancement(prisma, {
54
+ modelMeta,
55
+ policy,
56
+ zodSchemas: zodSchemas as unknown as (ZodSchemas | undefined),
57
+ prismaModule: Prisma,
58
+ ...options
59
+ }, context)${logicalPrismaClientDir ? ' as PrismaClient' : ''};
60
+ }
61
+ `, { overwrite: true });
62
+ yield saveSourceFile(enhanceTs, options);
63
+ return { dmmf };
64
+ });
65
+ }
66
+ exports.generate = generate;
67
+ function needsLogicalClient(model) {
68
+ return hasDelegateModel(model) || hasAuthInDefault(model);
69
+ }
70
+ function hasDelegateModel(model) {
71
+ const dataModels = (0, sdk_1.getDataModels)(model);
72
+ return dataModels.some((dm) => (0, sdk_1.isDelegateModel)(dm) && dataModels.some((sub) => sub.superTypes.some((base) => base.ref === dm)));
73
+ }
74
+ function hasAuthInDefault(model) {
75
+ return (0, sdk_1.getDataModels)(model).some((dm) => dm.fields.some((f) => f.attributes.some((attr) => (0, enhancer_utils_1.isDefaultWithAuth)(attr))));
76
+ }
77
+ function generateLogicalPrisma(model, options, outDir) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ const prismaGenerator = new schema_generator_1.PrismaSchemaGenerator(model);
80
+ const prismaClientOutDir = './.logical-prisma-client';
81
+ const logicalPrismaFile = path_1.default.join(outDir, 'logical.prisma');
82
+ yield prismaGenerator.generate({
83
+ provider: '@internal', // doesn't matter
84
+ schemaPath: options.schemaPath,
85
+ output: logicalPrismaFile,
86
+ overrideClientGenerationPath: prismaClientOutDir,
87
+ mode: 'logical',
88
+ });
89
+ // generate the prisma client
90
+ const generateCmd = `prisma generate --schema "${logicalPrismaFile}" --no-engine`;
91
+ try {
92
+ // run 'prisma generate'
93
+ yield (0, exec_utils_1.execPackage)(generateCmd, { stdio: 'ignore' });
94
+ }
95
+ catch (_a) {
96
+ yield (0, prisma_1.trackPrismaSchemaError)(logicalPrismaFile);
97
+ try {
98
+ // run 'prisma generate' again with output to the console
99
+ yield (0, exec_utils_1.execPackage)(generateCmd);
100
+ }
101
+ catch (_b) {
102
+ // noop
103
+ }
104
+ throw new sdk_1.PluginError(__1.name, `Failed to run "prisma generate"`);
105
+ }
106
+ // make a bunch of typing fixes to the generated prisma client
107
+ yield processClientTypes(model, path_1.default.join(outDir, prismaClientOutDir));
108
+ return {
109
+ prismaSchema: logicalPrismaFile,
110
+ // load the dmmf of the logical prisma schema
111
+ dmmf: yield (0, sdk_1.getDMMF)({ datamodel: fs_1.default.readFileSync(logicalPrismaFile, { encoding: 'utf-8' }) }),
112
+ };
113
+ });
114
+ }
115
+ function processClientTypes(model, prismaClientDir) {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ // make necessary updates to the generated `index.d.ts` file and save it as `index-fixed.d.ts`
118
+ const project = new ts_morph_1.Project();
119
+ const sf = project.addSourceFileAtPath(path_1.default.join(prismaClientDir, 'index.d.ts'));
120
+ // build a map of delegate models and their sub models
121
+ const delegateInfo = [];
122
+ model.declarations
123
+ .filter((d) => (0, sdk_1.isDelegateModel)(d))
124
+ .forEach((dm) => {
125
+ delegateInfo.push([
126
+ dm,
127
+ model.declarations.filter((d) => (0, ast_1.isDataModel)(d) && d.superTypes.some((s) => s.ref === dm)),
128
+ ]);
129
+ });
130
+ const sfNew = project.createSourceFile(path_1.default.join(prismaClientDir, 'index-fixed.d.ts'), undefined, {
131
+ overwrite: true,
132
+ });
133
+ if (delegateInfo.length > 0) {
134
+ // transform types for delegated models
135
+ transformDelegate(sf, sfNew, delegateInfo);
136
+ sfNew.formatText();
137
+ }
138
+ else {
139
+ // just copy
140
+ sfNew.replaceWithText(sf.getFullText());
141
+ }
142
+ yield sfNew.save();
143
+ });
144
+ }
145
+ function transformDelegate(sf, sfNew, delegateModels) {
146
+ // copy toplevel imports
147
+ sfNew.addImportDeclarations(sf.getImportDeclarations().map((n) => n.getStructure()));
148
+ // copy toplevel import equals
149
+ sfNew.addStatements(sf.getChildrenOfKind(ts_morph_1.SyntaxKind.ImportEqualsDeclaration).map((n) => n.getFullText()));
150
+ // copy toplevel exports
151
+ sfNew.addExportAssignments(sf.getExportAssignments().map((n) => n.getStructure()));
152
+ // copy toplevel type aliases
153
+ sfNew.addTypeAliases(sf.getTypeAliases().map((n) => n.getStructure()));
154
+ // copy toplevel classes
155
+ sfNew.addClasses(sf.getClasses().map((n) => n.getStructure()));
156
+ // copy toplevel variables
157
+ sfNew.addVariableStatements(sf.getVariableStatements().map((n) => n.getStructure()));
158
+ // copy toplevel namespaces except for `Prisma`
159
+ sfNew.addModules(sf
160
+ .getModules()
161
+ .filter((n) => n.getName() !== 'Prisma')
162
+ .map((n) => n.getStructure()));
163
+ // transform the `Prisma` namespace
164
+ const prismaModule = sf.getModuleOrThrow('Prisma');
165
+ const newPrismaModule = sfNew.addModule({ name: 'Prisma', isExported: true });
166
+ transformPrismaModule(prismaModule, newPrismaModule, delegateModels);
167
+ }
168
+ function transformPrismaModule(prismaModule, newPrismaModule, delegateInfo) {
169
+ // module block is the direct container of declarations inside a namespace
170
+ const moduleBlock = prismaModule.getFirstChildByKindOrThrow(ts_morph_1.SyntaxKind.ModuleBlock);
171
+ // most of the toplevel constructs should be copied over
172
+ // here we use ts-morph batch operations for optimal performance
173
+ // copy imports
174
+ newPrismaModule.addStatements(moduleBlock.getChildrenOfKind(ts_morph_1.SyntaxKind.ImportEqualsDeclaration).map((n) => n.getFullText()));
175
+ // copy classes
176
+ newPrismaModule.addClasses(moduleBlock.getClasses().map((n) => n.getStructure()));
177
+ // copy functions
178
+ newPrismaModule.addFunctions(moduleBlock.getFunctions().map((n) => n.getStructure()));
179
+ // copy nested namespaces
180
+ newPrismaModule.addModules(moduleBlock.getModules().map((n) => n.getStructure()));
181
+ // transform variables
182
+ const newVariables = moduleBlock.getVariableStatements().map((variable) => transformVariableStatement(variable));
183
+ newPrismaModule.addVariableStatements(newVariables);
184
+ // transform interfaces
185
+ const newInterfaces = moduleBlock.getInterfaces().map((iface) => transformInterface(iface, delegateInfo));
186
+ newPrismaModule.addInterfaces(newInterfaces);
187
+ // transform type aliases
188
+ const newTypeAliases = moduleBlock.getTypeAliases().map((typeAlias) => transformTypeAlias(typeAlias, delegateInfo));
189
+ newPrismaModule.addTypeAliases(newTypeAliases);
190
+ }
191
+ function transformVariableStatement(variable) {
192
+ const structure = variable.getStructure();
193
+ // remove `delegate_aux_*` fields from the variable's typing
194
+ const auxFields = findAuxDecls(variable);
195
+ if (auxFields.length > 0) {
196
+ structure.declarations.forEach((variable) => {
197
+ var _a;
198
+ let source = (_a = variable.type) === null || _a === void 0 ? void 0 : _a.toString();
199
+ auxFields.forEach((f) => {
200
+ source = source === null || source === void 0 ? void 0 : source.replace(f.getText(), '');
201
+ });
202
+ variable.type = source;
203
+ });
204
+ }
205
+ return structure;
206
+ }
207
+ function transformInterface(iface, delegateInfo) {
208
+ var _a, _b, _c;
209
+ const structure = iface.getStructure();
210
+ // filter out aux fields
211
+ structure.properties = (_a = structure.properties) === null || _a === void 0 ? void 0 : _a.filter((p) => !p.name.startsWith(runtime_1.DELEGATE_AUX_RELATION_PREFIX));
212
+ // filter out aux methods
213
+ structure.methods = (_b = structure.methods) === null || _b === void 0 ? void 0 : _b.filter((m) => !m.name.startsWith(runtime_1.DELEGATE_AUX_RELATION_PREFIX));
214
+ if (delegateInfo.some(([delegate]) => `${delegate.name}Delegate` === iface.getName())) {
215
+ // delegate models cannot be created directly, remove create/createMany/upsert
216
+ structure.methods = (_c = structure.methods) === null || _c === void 0 ? void 0 : _c.filter((m) => !['create', 'createMany', 'upsert'].includes(m.name));
217
+ }
218
+ return structure;
219
+ }
220
+ function transformTypeAlias(typeAlias, delegateInfo) {
221
+ const structure = typeAlias.getStructure();
222
+ let source = structure.type;
223
+ // remove aux fields
224
+ source = removeAuxFieldsFromTypeAlias(typeAlias, source);
225
+ // remove discriminator field from concrete input types
226
+ source = removeDiscriminatorFromConcreteInput(typeAlias, delegateInfo, source);
227
+ // remove create/connectOrCreate/upsert fields from delegate's input types
228
+ source = removeCreateFromDelegateInput(typeAlias, delegateInfo, source);
229
+ // fix delegate payload union type
230
+ source = fixDelegatePayloadType(typeAlias, delegateInfo, source);
231
+ structure.type = source;
232
+ return structure;
233
+ }
234
+ function fixDelegatePayloadType(typeAlias, delegateInfo, source) {
235
+ // change the type of `$<DelegateModel>Payload` type of delegate model to a union of concrete types
236
+ const typeName = typeAlias.getName();
237
+ const payloadRecord = delegateInfo.find(([delegate]) => `$${delegate.name}Payload` === typeName);
238
+ if (payloadRecord) {
239
+ const discriminatorDecl = getDiscriminatorField(payloadRecord[0]);
240
+ if (discriminatorDecl) {
241
+ source = `${payloadRecord[1]
242
+ .map((concrete) => `($${concrete.name}Payload<ExtArgs> & { scalars: { ${discriminatorDecl.name}: '${concrete.name}' } })`)
243
+ .join(' | ')}`;
244
+ }
245
+ }
246
+ return source;
247
+ }
248
+ function removeCreateFromDelegateInput(typeAlias, delegateModels, source) {
249
+ // remove create/connectOrCreate/upsert fields from delegate's input types because
250
+ // delegate models cannot be created directly
251
+ const typeName = typeAlias.getName();
252
+ const delegateModelNames = delegateModels.map(([delegate]) => delegate.name);
253
+ const delegateCreateUpdateInputRegex = new RegExp(`\\${delegateModelNames.join('|')}(Unchecked)?(Create|Update).*Input`);
254
+ if (delegateCreateUpdateInputRegex.test(typeName)) {
255
+ const toRemove = typeAlias
256
+ .getDescendantsOfKind(ts_morph_1.SyntaxKind.PropertySignature)
257
+ .filter((p) => ['create', 'connectOrCreate', 'upsert'].includes(p.getName()));
258
+ toRemove.forEach((r) => {
259
+ source = source.replace(r.getText(), '');
260
+ });
261
+ }
262
+ return source;
263
+ }
264
+ function removeDiscriminatorFromConcreteInput(typeAlias, delegateInfo, source) {
265
+ // remove discriminator field from the create/update input of concrete models because
266
+ // discriminator cannot be set directly
267
+ const typeName = typeAlias.getName();
268
+ const concreteModelNames = delegateInfo.map(([, concretes]) => concretes.map((c) => c.name)).flatMap((c) => c);
269
+ const concreteCreateUpdateInputRegex = new RegExp(`(${concreteModelNames.join('|')})(Unchecked)?(Create|Update).*Input`);
270
+ const match = typeName.match(concreteCreateUpdateInputRegex);
271
+ if (match) {
272
+ const modelName = match[1];
273
+ const record = delegateInfo.find(([, concretes]) => concretes.some((c) => c.name === modelName));
274
+ if (record) {
275
+ // remove all discriminator fields recursively
276
+ const delegateOfConcrete = record[0];
277
+ const discriminators = getDiscriminatorFieldsRecursively(delegateOfConcrete);
278
+ discriminators.forEach((discriminatorDecl) => {
279
+ const discriminatorNode = findNamedProperty(typeAlias, discriminatorDecl.name);
280
+ if (discriminatorNode) {
281
+ source = source.replace(discriminatorNode.getText(), '');
282
+ }
283
+ });
284
+ }
285
+ }
286
+ return source;
287
+ }
288
+ function removeAuxFieldsFromTypeAlias(typeAlias, source) {
289
+ // remove `delegate_aux_*` fields from the type alias
290
+ const auxDecls = findAuxDecls(typeAlias);
291
+ if (auxDecls.length > 0) {
292
+ auxDecls.forEach((d) => {
293
+ source = source.replace(d.getText(), '');
294
+ });
295
+ }
296
+ return source;
297
+ }
298
+ function findNamedProperty(typeAlias, name) {
299
+ return typeAlias.getFirstDescendant((d) => d.isKind(ts_morph_1.SyntaxKind.PropertySignature) && d.getName() === name);
300
+ }
301
+ function findAuxDecls(node) {
302
+ return node
303
+ .getDescendantsOfKind(ts_morph_1.SyntaxKind.PropertySignature)
304
+ .filter((n) => n.getName().startsWith(runtime_1.DELEGATE_AUX_RELATION_PREFIX));
305
+ }
306
+ function getDiscriminatorField(delegate) {
307
+ var _a;
308
+ const delegateAttr = (0, sdk_1.getAttribute)(delegate, '@@delegate');
309
+ if (!delegateAttr) {
310
+ return undefined;
311
+ }
312
+ const arg = (_a = delegateAttr.args[0]) === null || _a === void 0 ? void 0 : _a.value;
313
+ return (0, ast_1.isReferenceExpr)(arg) ? arg.target.ref : undefined;
314
+ }
315
+ function getDiscriminatorFieldsRecursively(delegate, result = []) {
316
+ if ((0, sdk_1.isDelegateModel)(delegate)) {
317
+ const discriminator = getDiscriminatorField(delegate);
318
+ if (discriminator) {
319
+ result.push(discriminator);
320
+ }
321
+ for (const superType of delegate.superTypes) {
322
+ if (superType.ref) {
323
+ result.push(...getDiscriminatorFieldsRecursively(superType.ref, result));
324
+ }
325
+ }
326
+ }
327
+ return result;
328
+ }
329
+ function saveSourceFile(sf, options) {
330
+ return __awaiter(this, void 0, void 0, function* () {
331
+ if (options.preserveTsFiles) {
332
+ yield sf.save();
333
+ }
334
+ });
335
+ }
336
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/enhancer/enhance/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DataModelFieldAttribute } from '@zenstackhq/sdk/ast';
2
+ /**
3
+ * Check if the given field attribute is a `@default` with `auth()` invocation
4
+ */
5
+ export declare function isDefaultWithAuth(attr: DataModelFieldAttribute): boolean;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isDefaultWithAuth = void 0;
4
+ const sdk_1 = require("@zenstackhq/sdk");
5
+ const langium_1 = require("langium");
6
+ /**
7
+ * Check if the given field attribute is a `@default` with `auth()` invocation
8
+ */
9
+ function isDefaultWithAuth(attr) {
10
+ var _a, _b;
11
+ if (((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) !== '@default') {
12
+ return false;
13
+ }
14
+ const expr = (_b = attr.args[0]) === null || _b === void 0 ? void 0 : _b.value;
15
+ if (!expr) {
16
+ return false;
17
+ }
18
+ // find `auth()` in default value expression
19
+ return (0, langium_1.streamAst)(expr).some(sdk_1.isAuthInvocation);
20
+ }
21
+ exports.isDefaultWithAuth = isDefaultWithAuth;
22
+ //# sourceMappingURL=enhancer-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhancer-utils.js","sourceRoot":"","sources":["../../../src/plugins/enhancer/enhancer-utils.ts"],"names":[],"mappings":";;;AAAA,yCAAmD;AAEnD,qCAAoC;AAEpC;;GAEG;AACH,SAAgB,iBAAiB,CAAC,IAA6B;;IAC3D,IAAI,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,GAAG,0CAAE,IAAI,MAAK,UAAU,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC;IACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,4CAA4C;IAC5C,OAAO,IAAA,mBAAS,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,sBAAgB,CAAC,CAAC;AAClD,CAAC;AAZD,8CAYC"}
@@ -0,0 +1,5 @@
1
+ import { type PluginFunction } from '@zenstackhq/sdk';
2
+ export declare const name = "Prisma Enhancer";
3
+ export declare const description = "Generating PrismaClient enhancer";
4
+ declare const run: PluginFunction;
5
+ export default run;
@@ -0,0 +1,51 @@
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.description = exports.name = void 0;
16
+ const sdk_1 = require("@zenstackhq/sdk");
17
+ const path_1 = __importDefault(require("path"));
18
+ const plugin_utils_1 = require("../plugin-utils");
19
+ const enhance_1 = require("./enhance");
20
+ const model_meta_1 = require("./model-meta");
21
+ const policy_1 = require("./policy");
22
+ exports.name = 'Prisma Enhancer';
23
+ exports.description = 'Generating PrismaClient enhancer';
24
+ const run = (model, options, _dmmf, globalOptions) => __awaiter(void 0, void 0, void 0, function* () {
25
+ var _a;
26
+ let outDir = options.output ? options.output : (0, plugin_utils_1.getDefaultOutputFolder)(globalOptions);
27
+ if (!outDir) {
28
+ throw new sdk_1.PluginError(exports.name, `Unable to determine output path, not running plugin`);
29
+ }
30
+ outDir = (0, sdk_1.resolvePath)(outDir, options);
31
+ const project = (_a = globalOptions === null || globalOptions === void 0 ? void 0 : globalOptions.tsProject) !== null && _a !== void 0 ? _a : (0, sdk_1.createProject)();
32
+ yield (0, model_meta_1.generate)(model, options, project, outDir);
33
+ yield (0, policy_1.generate)(model, options, project, outDir);
34
+ const { dmmf } = yield (0, enhance_1.generate)(model, options, project, outDir);
35
+ let prismaClientPath;
36
+ if (dmmf) {
37
+ // a logical client is generated
38
+ if (typeof options.output === 'string') {
39
+ // get the absolute path of the logical prisma client
40
+ const prismaClientPathAbs = path_1.default.resolve(options.output, 'prisma');
41
+ // resolve it relative to the schema path
42
+ prismaClientPath = path_1.default.relative(path_1.default.dirname(options.schemaPath), prismaClientPathAbs);
43
+ }
44
+ else {
45
+ prismaClientPath = `${sdk_1.RUNTIME_PACKAGE}/prisma`;
46
+ }
47
+ }
48
+ return { dmmf, warnings: [], prismaClientPath };
49
+ });
50
+ exports.default = run;
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/enhancer/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAgH;AAChH,gDAAwB;AACxB,kDAAyD;AACzD,uCAAyD;AACzD,6CAA6D;AAC7D,qCAAsD;AAEzC,QAAA,IAAI,GAAG,iBAAiB,CAAC;AACzB,QAAA,WAAW,GAAG,kCAAkC,CAAC;AAE9D,MAAM,GAAG,GAAmB,CAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE;;IACvE,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAE,OAAO,CAAC,MAAiB,CAAC,CAAC,CAAC,IAAA,qCAAsB,EAAC,aAAa,CAAC,CAAC;IACjG,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,iBAAW,CAAC,YAAI,EAAE,qDAAqD,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,GAAG,IAAA,iBAAW,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,SAAS,mCAAI,IAAA,mBAAa,GAAE,CAAC;IAE5D,MAAM,IAAA,qBAAiB,EAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,IAAA,iBAAc,EAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,kBAAgB,EAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAEzE,IAAI,gBAAoC,CAAC;IACzC,IAAI,IAAI,EAAE,CAAC;QACP,gCAAgC;QAChC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACrC,qDAAqD;YACrD,MAAM,mBAAmB,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEnE,yCAAyC;YACzC,gBAAgB,GAAG,cAAI,CAAC,QAAQ,CAAC,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACJ,gBAAgB,GAAG,GAAG,qBAAe,SAAS,CAAC;QACnD,CAAC;IACL,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC;AACpD,CAAC,CAAA,CAAC;AAEF,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type PluginOptions } from '@zenstackhq/sdk';
2
+ import type { Model } from '@zenstackhq/sdk/ast';
3
+ import type { Project } from 'ts-morph';
4
+ export declare function generate(model: Model, options: PluginOptions, project: Project, outDir: string): Promise<void>;
@@ -0,0 +1,32 @@
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 path_1 = __importDefault(require("path"));
18
+ function generate(model, options, project, outDir) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const outFile = path_1.default.join(outDir, 'model-meta.ts');
21
+ const dataModels = (0, sdk_1.getDataModels)(model);
22
+ // save ts files if requested explicitly or the user provided
23
+ const preserveTsFiles = options.preserveTsFiles === true || !!options.output;
24
+ yield (0, sdk_1.generateModelMeta)(project, dataModels, {
25
+ output: outFile,
26
+ generateAttributes: true,
27
+ preserveTsFiles,
28
+ });
29
+ });
30
+ }
31
+ exports.generate = generate;
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/enhancer/model-meta/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,yCAAuF;AAEvF,gDAAwB;AAGxB,SAAsB,QAAQ,CAAC,KAAY,EAAE,OAAsB,EAAE,OAAgB,EAAE,MAAc;;QACjG,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,IAAA,mBAAa,EAAC,KAAK,CAAC,CAAC;QAExC,6DAA6D;QAC7D,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAC7E,MAAM,IAAA,uBAAiB,EAAC,OAAO,EAAE,UAAU,EAAE;YACzC,MAAM,EAAE,OAAO;YACf,kBAAkB,EAAE,IAAI;YACxB,eAAe;SAClB,CAAC,CAAC;IACP,CAAC;CAAA;AAXD,4BAWC"}
@@ -20,6 +20,9 @@ export declare class ExpressionWriter {
20
20
  */
21
21
  write(expr: Expression): void;
22
22
  private writeReference;
23
+ private writeBaseHierarchy;
24
+ private getDelegateBase;
25
+ private isFieldReferenceToDelegateModel;
23
26
  private writeMemberAccess;
24
27
  private writeExprList;
25
28
  private writeBinary;