zenstack 2.0.0-alpha.1 → 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 (59) hide show
  1. package/README.md +29 -1
  2. package/bin/post-install.js +1 -1
  3. package/cli/actions/repl.js +31 -4
  4. package/cli/actions/repl.js.map +1 -1
  5. package/cli/cli-util.js +1 -1
  6. package/cli/cli-util.js.map +1 -1
  7. package/cli/plugin-runner.js +63 -42
  8. package/cli/plugin-runner.js.map +1 -1
  9. package/constants.js +1 -1
  10. package/language-server/validator/datamodel-validator.js +17 -7
  11. package/language-server/validator/datamodel-validator.js.map +1 -1
  12. package/language-server/validator/schema-validator.js +2 -1
  13. package/language-server/validator/schema-validator.js.map +1 -1
  14. package/package.json +5 -5
  15. package/plugins/enhancer/enhance/index.d.ts +4 -1
  16. package/plugins/enhancer/enhance/index.js +245 -111
  17. package/plugins/enhancer/enhance/index.js.map +1 -1
  18. package/plugins/enhancer/enhancer-utils.d.ts +5 -0
  19. package/plugins/enhancer/enhancer-utils.js +22 -0
  20. package/plugins/enhancer/enhancer-utils.js.map +1 -0
  21. package/plugins/enhancer/index.js +25 -21
  22. package/plugins/enhancer/index.js.map +1 -1
  23. package/plugins/enhancer/model-meta/index.js +3 -0
  24. package/plugins/enhancer/model-meta/index.js.map +1 -1
  25. package/plugins/enhancer/policy/policy-guard-generator.d.ts +1 -1
  26. package/plugins/enhancer/policy/policy-guard-generator.js +7 -2
  27. package/plugins/enhancer/policy/policy-guard-generator.js.map +1 -1
  28. package/plugins/plugin-utils.js +3 -0
  29. package/plugins/plugin-utils.js.map +1 -1
  30. package/plugins/prisma/index.d.ts +1 -0
  31. package/plugins/prisma/index.js +92 -2
  32. package/plugins/prisma/index.js.map +1 -1
  33. package/plugins/prisma/schema-generator.d.ts +4 -4
  34. package/plugins/prisma/schema-generator.js +48 -81
  35. package/plugins/prisma/schema-generator.js.map +1 -1
  36. package/plugins/zod/generator.d.ts +21 -1
  37. package/plugins/zod/generator.js +364 -352
  38. package/plugins/zod/generator.js.map +1 -1
  39. package/plugins/zod/index.js +2 -1
  40. package/plugins/zod/index.js.map +1 -1
  41. package/plugins/zod/transformer.d.ts +7 -5
  42. package/plugins/zod/transformer.js +18 -14
  43. package/plugins/zod/transformer.js.map +1 -1
  44. package/plugins/zod/types.d.ts +0 -2
  45. package/plugins/zod/utils/schema-gen.js +1 -1
  46. package/plugins/zod/utils/schema-gen.js.map +1 -1
  47. package/res/stdlib.zmodel +2 -2
  48. package/telemetry.d.ts +1 -1
  49. package/telemetry.js +1 -1
  50. package/telemetry.js.map +1 -1
  51. package/utils/exec-utils.d.ts +6 -0
  52. package/utils/exec-utils.js +10 -1
  53. package/utils/exec-utils.js.map +1 -1
  54. package/utils/pkg-utils.d.ts +29 -0
  55. package/utils/pkg-utils.js +42 -22
  56. package/utils/pkg-utils.js.map +1 -1
  57. package/plugins/enhancer/delegate/index.d.ts +0 -4
  58. package/plugins/enhancer/delegate/index.js +0 -31
  59. package/plugins/enhancer/delegate/index.js.map +0 -1
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publisher": "zenstack",
4
4
  "displayName": "ZenStack Language Tools",
5
5
  "description": "Build scalable web apps with minimum code by defining authorization and validation rules inside the data schema that closer to the database",
6
- "version": "2.0.0-alpha.1",
6
+ "version": "2.0.0-alpha.2",
7
7
  "author": {
8
8
  "name": "ZenStack Team"
9
9
  },
@@ -94,8 +94,8 @@
94
94
  "vscode-uri": "^3.0.6",
95
95
  "zod": "^3.22.4",
96
96
  "zod-validation-error": "^1.5.0",
97
- "@zenstackhq/language": "2.0.0-alpha.1",
98
- "@zenstackhq/sdk": "2.0.0-alpha.1"
97
+ "@zenstackhq/language": "2.0.0-alpha.2",
98
+ "@zenstackhq/sdk": "2.0.0-alpha.2"
99
99
  },
100
100
  "devDependencies": {
101
101
  "@prisma/client": "^5.7.1",
@@ -114,7 +114,7 @@
114
114
  "tmp": "^0.2.1",
115
115
  "tsc-alias": "^1.7.0",
116
116
  "vitest": "^0.29.7",
117
- "@zenstackhq/runtime": "2.0.0-alpha.1"
117
+ "@zenstackhq/runtime": "2.0.0-alpha.2"
118
118
  },
119
119
  "scripts": {
120
120
  "vscode:publish": "vsce publish --no-dependencies",
@@ -125,7 +125,7 @@
125
125
  "bundle": "rimraf bundle && pnpm lint --max-warnings=0 && node build/bundle.js --minify",
126
126
  "watch": "tsc --watch",
127
127
  "lint": "eslint src tests --ext ts",
128
- "test": "ZENSTACK_TEST=1 jest",
128
+ "test": "jest",
129
129
  "postinstall": "node bin/post-install.js"
130
130
  }
131
131
  }
@@ -1,4 +1,7 @@
1
+ import type { DMMF } from '@prisma/generator-helper';
1
2
  import { type PluginOptions } from '@zenstackhq/sdk';
2
3
  import { type Model } from '@zenstackhq/sdk/ast';
3
4
  import { Project } from 'ts-morph';
4
- export declare function generate(model: Model, options: PluginOptions, project: Project, outDir: string): Promise<void>;
5
+ export declare function generate(model: Model, options: PluginOptions, project: Project, outDir: string): Promise<{
6
+ dmmf: DMMF.Document | undefined;
7
+ }>;
@@ -16,22 +16,38 @@ exports.generate = void 0;
16
16
  const runtime_1 = require("@zenstackhq/runtime");
17
17
  const sdk_1 = require("@zenstackhq/sdk");
18
18
  const ast_1 = require("@zenstackhq/sdk/ast");
19
+ const fs_1 = __importDefault(require("fs"));
19
20
  const path_1 = __importDefault(require("path"));
20
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");
21
25
  const schema_generator_1 = require("../../prisma/schema-generator");
26
+ const enhancer_utils_1 = require("../enhancer-utils");
22
27
  function generate(model, options, project, outDir) {
23
28
  return __awaiter(this, void 0, void 0, function* () {
24
- const outFile = path_1.default.join(outDir, 'enhance.ts');
25
29
  let logicalPrismaClientDir;
26
- if (hasDelegateModel(model)) {
27
- logicalPrismaClientDir = yield generateLogicalPrisma(model, options, outDir);
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);
28
39
  }
29
- project.createSourceFile(outFile, `import { createEnhancement, type EnhancementContext, type EnhancementOptions, type ZodSchemas } from '@zenstackhq/runtime';
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';
30
46
  import modelMeta from './model-meta';
31
47
  import policy from './policy';
32
48
  ${options.withZodSchemas ? "import * as zodSchemas from './zod';" : 'const zodSchemas = undefined;'}
33
- import { Prisma } from '${(0, sdk_1.getPrismaClientImportSpec)(model, outDir)}';
34
- ${logicalPrismaClientDir ? `import { PrismaClient as EnhancedPrismaClient } from '${logicalPrismaClientDir}';` : ''}
49
+ import { Prisma } from '${(0, sdk_1.getPrismaClientImportSpec)(outDir, options)}';
50
+ ${logicalPrismaClientDir ? `import { type PrismaClient } from '${logicalPrismaClientDir}/index-fixed';` : ``}
35
51
 
36
52
  export function enhance<DbClient extends object>(prisma: DbClient, context?: EnhancementContext, options?: EnhancementOptions) {
37
53
  return createEnhancement(prisma, {
@@ -40,155 +56,252 @@ export function enhance<DbClient extends object>(prisma: DbClient, context?: Enh
40
56
  zodSchemas: zodSchemas as unknown as (ZodSchemas | undefined),
41
57
  prismaModule: Prisma,
42
58
  ...options
43
- }, context)${logicalPrismaClientDir ? ' as EnhancedPrismaClient' : ''};
59
+ }, context)${logicalPrismaClientDir ? ' as PrismaClient' : ''};
44
60
  }
45
61
  `, { overwrite: true });
62
+ yield saveSourceFile(enhanceTs, options);
63
+ return { dmmf };
46
64
  });
47
65
  }
48
66
  exports.generate = generate;
67
+ function needsLogicalClient(model) {
68
+ return hasDelegateModel(model) || hasAuthInDefault(model);
69
+ }
49
70
  function hasDelegateModel(model) {
50
71
  const dataModels = (0, sdk_1.getDataModels)(model);
51
72
  return dataModels.some((dm) => (0, sdk_1.isDelegateModel)(dm) && dataModels.some((sub) => sub.superTypes.some((base) => base.ref === dm)));
52
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
+ }
53
77
  function generateLogicalPrisma(model, options, outDir) {
54
78
  return __awaiter(this, void 0, void 0, function* () {
55
- const prismaGenerator = new schema_generator_1.PrismaSchemaGenerator();
56
- const prismaClientOutDir = './.delegate';
57
- yield prismaGenerator.generate(model, {
58
- provider: '@internal',
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
59
84
  schemaPath: options.schemaPath,
60
- output: path_1.default.join(outDir, 'delegate.prisma'),
85
+ output: logicalPrismaFile,
61
86
  overrideClientGenerationPath: prismaClientOutDir,
62
87
  mode: 'logical',
63
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
64
107
  yield processClientTypes(model, path_1.default.join(outDir, prismaClientOutDir));
65
- return 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
+ };
66
113
  });
67
114
  }
68
115
  function processClientTypes(model, prismaClientDir) {
69
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`
70
118
  const project = new ts_morph_1.Project();
71
119
  const sf = project.addSourceFileAtPath(path_1.default.join(prismaClientDir, 'index.d.ts'));
72
- const delegateModels = [];
120
+ // build a map of delegate models and their sub models
121
+ const delegateInfo = [];
73
122
  model.declarations
74
123
  .filter((d) => (0, sdk_1.isDelegateModel)(d))
75
124
  .forEach((dm) => {
76
- delegateModels.push([
125
+ delegateInfo.push([
77
126
  dm,
78
127
  model.declarations.filter((d) => (0, ast_1.isDataModel)(d) && d.superTypes.some((s) => s.ref === dm)),
79
128
  ]);
80
129
  });
81
- const toRemove = [];
82
- const toReplaceText = [];
83
- sf.forEachDescendant((desc, traversal) => {
84
- removeAuxRelationFields(desc, toRemove, traversal);
85
- fixDelegateUnionType(desc, delegateModels, toReplaceText, traversal);
86
- removeCreateFromDelegateInputTypes(desc, delegateModels, toRemove, traversal);
87
- removeDelegateToplevelCreates(desc, delegateModels, toRemove, traversal);
88
- removeDiscriminatorFromConcreteInputTypes(desc, delegateModels, toRemove);
130
+ const sfNew = project.createSourceFile(path_1.default.join(prismaClientDir, 'index-fixed.d.ts'), undefined, {
131
+ overwrite: true,
89
132
  });
90
- toRemove.forEach((n) => n.remove());
91
- toReplaceText.forEach(([node, text]) => node.replaceWithText(text));
92
- yield project.save();
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();
93
143
  });
94
144
  }
95
- function removeAuxRelationFields(desc, toRemove, traversal) {
96
- if (desc.isKind(ts_morph_1.SyntaxKind.PropertySignature) || desc.isKind(ts_morph_1.SyntaxKind.MethodSignature)) {
97
- // remove aux fields
98
- const name = desc.getName();
99
- if (name.startsWith(runtime_1.DELEGATE_AUX_RELATION_PREFIX)) {
100
- toRemove.push(desc);
101
- traversal.skip();
102
- }
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
+ });
103
204
  }
205
+ return structure;
104
206
  }
105
- function fixDelegateUnionType(desc, delegateModels, toReplaceText, traversal) {
106
- if (!desc.isKind(ts_morph_1.SyntaxKind.TypeAliasDeclaration)) {
107
- return;
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));
108
217
  }
109
- const name = desc.getName();
110
- delegateModels.forEach(([delegate, concreteModels]) => {
111
- if (name === `$${delegate.name}Payload`) {
112
- const discriminator = getDiscriminatorField(delegate);
113
- if (discriminator) {
114
- toReplaceText.push([
115
- desc,
116
- `export type ${name}<ExtArgs extends $Extensions.InternalArgs = $Extensions.DefaultArgs> =
117
- ${concreteModels
118
- .map((m) => `($${m.name}Payload<ExtArgs> & { scalars: { ${discriminator.name}: '${m.name}' } })`)
119
- .join(' | ')};`,
120
- ]);
121
- traversal.skip();
122
- }
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(' | ')}`;
123
244
  }
124
- });
245
+ }
246
+ return source;
125
247
  }
126
- function removeCreateFromDelegateInputTypes(desc, delegateModels, toRemove, traversal) {
127
- if (!desc.isKind(ts_morph_1.SyntaxKind.TypeAliasDeclaration)) {
128
- return;
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
+ });
129
261
  }
130
- const name = desc.getName();
131
- delegateModels.forEach(([delegate]) => {
132
- // remove create related sub-payload from delegate's input types since they cannot be created directly
133
- const regex = new RegExp(`\\${delegate.name}(Unchecked)?(Create|Update).*Input`);
134
- if (regex.test(name)) {
135
- desc.forEachDescendant((d, innerTraversal) => {
136
- if (d.isKind(ts_morph_1.SyntaxKind.PropertySignature) &&
137
- ['create', 'upsert', 'connectOrCreate'].includes(d.getName())) {
138
- toRemove.push(d);
139
- innerTraversal.skip();
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(), '');
140
282
  }
141
283
  });
142
- traversal.skip();
143
284
  }
144
- });
145
- }
146
- function removeDiscriminatorFromConcreteInputTypes(desc, delegateModels, toRemove) {
147
- if (!desc.isKind(ts_morph_1.SyntaxKind.TypeAliasDeclaration)) {
148
- return;
149
285
  }
150
- const name = desc.getName();
151
- delegateModels.forEach(([delegate, concretes]) => {
152
- const discriminator = getDiscriminatorField(delegate);
153
- if (!discriminator) {
154
- return;
155
- }
156
- concretes.forEach((concrete) => {
157
- // remove discriminator field from the create/update input of concrete models
158
- const regex = new RegExp(`\\${concrete.name}(Unchecked)?(Create|Update).*Input`);
159
- if (regex.test(name)) {
160
- desc.forEachDescendant((d, innerTraversal) => {
161
- if (d.isKind(ts_morph_1.SyntaxKind.PropertySignature)) {
162
- if (d.getName() === discriminator.name) {
163
- toRemove.push(d);
164
- }
165
- innerTraversal.skip();
166
- }
167
- });
168
- }
169
- });
170
- });
286
+ return source;
171
287
  }
172
- function removeDelegateToplevelCreates(desc, delegateModels, toRemove, traversal) {
173
- if (desc.isKind(ts_morph_1.SyntaxKind.InterfaceDeclaration)) {
174
- // remove create and upsert methods from delegate interfaces since they cannot be created directly
175
- const name = desc.getName();
176
- if (delegateModels.map(([dm]) => `${dm.name}Delegate`).includes(name)) {
177
- const createMethod = desc.getMethod('create');
178
- if (createMethod) {
179
- toRemove.push(createMethod);
180
- }
181
- const createManyMethod = desc.getMethod('createMany');
182
- if (createManyMethod) {
183
- toRemove.push(createManyMethod);
184
- }
185
- const upsertMethod = desc.getMethod('upsert');
186
- if (upsertMethod) {
187
- toRemove.push(upsertMethod);
188
- }
189
- traversal.skip();
190
- }
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
+ });
191
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));
192
305
  }
193
306
  function getDiscriminatorField(delegate) {
194
307
  var _a;
@@ -199,4 +312,25 @@ function getDiscriminatorField(delegate) {
199
312
  const arg = (_a = delegateAttr.args[0]) === null || _a === void 0 ? void 0 : _a.value;
200
313
  return (0, ast_1.isReferenceExpr)(arg) ? arg.target.ref : undefined;
201
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
+ }
202
336
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/plugins/enhancer/enhance/index.ts"],"names":[],"mappings":"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"}
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"}
@@ -8,9 +8,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.description = exports.name = void 0;
13
16
  const sdk_1 = require("@zenstackhq/sdk");
17
+ const path_1 = __importDefault(require("path"));
14
18
  const plugin_utils_1 = require("../plugin-utils");
15
19
  const enhance_1 = require("./enhance");
16
20
  const model_meta_1 = require("./model-meta");
@@ -18,30 +22,30 @@ const policy_1 = require("./policy");
18
22
  exports.name = 'Prisma Enhancer';
19
23
  exports.description = 'Generating PrismaClient enhancer';
20
24
  const run = (model, options, _dmmf, globalOptions) => __awaiter(void 0, void 0, void 0, function* () {
21
- let ourDir = options.output ? options.output : (0, plugin_utils_1.getDefaultOutputFolder)(globalOptions);
22
- if (!ourDir) {
25
+ var _a;
26
+ let outDir = options.output ? options.output : (0, plugin_utils_1.getDefaultOutputFolder)(globalOptions);
27
+ if (!outDir) {
23
28
  throw new sdk_1.PluginError(exports.name, `Unable to determine output path, not running plugin`);
24
29
  }
25
- ourDir = (0, sdk_1.resolvePath)(ourDir, options);
26
- const project = (0, sdk_1.createProject)();
27
- yield (0, model_meta_1.generate)(model, options, project, ourDir);
28
- yield (0, policy_1.generate)(model, options, project, ourDir);
29
- yield (0, enhance_1.generate)(model, options, project, ourDir);
30
- let shouldCompile = true;
31
- if (typeof options.compile === 'boolean') {
32
- // explicit override
33
- shouldCompile = options.compile;
34
- }
35
- else if (globalOptions) {
36
- // from CLI or config file
37
- shouldCompile = globalOptions.compile;
38
- }
39
- if (!shouldCompile || options.preserveTsFiles === true) {
40
- yield (0, sdk_1.saveProject)(project);
41
- }
42
- if (shouldCompile) {
43
- yield (0, sdk_1.emitProject)(project);
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
+ }
44
47
  }
48
+ return { dmmf, warnings: [], prismaClientPath };
45
49
  });
46
50
  exports.default = run;
47
51
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/plugins/enhancer/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAOyB;AACzB,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,IAAA,mBAAa,GAAE,CAAC;IAEhC,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,IAAA,kBAAgB,EAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAExD,IAAI,aAAa,GAAG,IAAI,CAAC;IACzB,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACvC,oBAAoB;QACpB,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IACpC,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACvB,0BAA0B;QAC1B,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC;IAC1C,CAAC;IAED,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QACrD,MAAM,IAAA,iBAAW,EAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAChB,MAAM,IAAA,iBAAW,EAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,kBAAe,GAAG,CAAC"}
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"}