@zenstackhq/trpc 0.6.0-pre.19

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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/config.d.ts +9 -0
  4. package/config.js +8 -0
  5. package/config.js.map +1 -0
  6. package/generator.d.ts +4 -0
  7. package/generator.js +152 -0
  8. package/generator.js.map +1 -0
  9. package/helpers.d.ts +9 -0
  10. package/helpers.js +141 -0
  11. package/helpers.js.map +1 -0
  12. package/index.d.ts +5 -0
  13. package/index.js +21 -0
  14. package/index.js.map +1 -0
  15. package/package.json +37 -0
  16. package/project.d.ts +2 -0
  17. package/project.js +15 -0
  18. package/project.js.map +1 -0
  19. package/types.d.ts +0 -0
  20. package/types.js +2 -0
  21. package/types.js.map +1 -0
  22. package/utils/removeDir.d.ts +1 -0
  23. package/utils/removeDir.js +30 -0
  24. package/utils/removeDir.js.map +1 -0
  25. package/utils/uncapitalizeFirstLetter.d.ts +1 -0
  26. package/utils/uncapitalizeFirstLetter.js +8 -0
  27. package/utils/uncapitalizeFirstLetter.js.map +1 -0
  28. package/zod/generator.d.ts +4 -0
  29. package/zod/generator.js +92 -0
  30. package/zod/generator.js.map +1 -0
  31. package/zod/helpers/aggregate-helpers.d.ts +5 -0
  32. package/zod/helpers/aggregate-helpers.js +64 -0
  33. package/zod/helpers/aggregate-helpers.js.map +1 -0
  34. package/zod/helpers/comments-helpers.d.ts +6 -0
  35. package/zod/helpers/comments-helpers.js +99 -0
  36. package/zod/helpers/comments-helpers.js.map +1 -0
  37. package/zod/helpers/helpers.d.ts +8 -0
  38. package/zod/helpers/helpers.js +39 -0
  39. package/zod/helpers/helpers.js.map +1 -0
  40. package/zod/helpers/include-helpers.d.ts +2 -0
  41. package/zod/helpers/include-helpers.js +79 -0
  42. package/zod/helpers/include-helpers.js.map +1 -0
  43. package/zod/helpers/index.d.ts +4 -0
  44. package/zod/helpers/index.js +21 -0
  45. package/zod/helpers/index.js.map +1 -0
  46. package/zod/helpers/model-helpers.d.ts +6 -0
  47. package/zod/helpers/model-helpers.js +39 -0
  48. package/zod/helpers/model-helpers.js.map +1 -0
  49. package/zod/helpers/modelArgs-helpers.d.ts +2 -0
  50. package/zod/helpers/modelArgs-helpers.js +62 -0
  51. package/zod/helpers/modelArgs-helpers.js.map +1 -0
  52. package/zod/helpers/mongodb-helpers.d.ts +3 -0
  53. package/zod/helpers/mongodb-helpers.js +65 -0
  54. package/zod/helpers/mongodb-helpers.js.map +1 -0
  55. package/zod/helpers/select-helpers.d.ts +2 -0
  56. package/zod/helpers/select-helpers.js +137 -0
  57. package/zod/helpers/select-helpers.js.map +1 -0
  58. package/zod/index.d.ts +5 -0
  59. package/zod/index.js +21 -0
  60. package/zod/index.js.map +1 -0
  61. package/zod/transformer.d.ts +70 -0
  62. package/zod/transformer.js +467 -0
  63. package/zod/transformer.js.map +1 -0
  64. package/zod/types.d.ts +20 -0
  65. package/zod/types.js +3 -0
  66. package/zod/types.js.map +1 -0
  67. package/zod/utils/formatFile.d.ts +1 -0
  68. package/zod/utils/formatFile.js +32 -0
  69. package/zod/utils/formatFile.js.map +1 -0
  70. package/zod/utils/removeDir.d.ts +1 -0
  71. package/zod/utils/removeDir.js +30 -0
  72. package/zod/utils/removeDir.js.map +1 -0
  73. package/zod/utils/writeFileSafely.d.ts +1 -0
  74. package/zod/utils/writeFileSafely.js +26 -0
  75. package/zod/utils/writeFileSafely.js.map +1 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 ZenStack
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # ZenStack tRPC plugin
2
+
3
+ This package contains ZenStack plugin for tRPC. It's based on [prisma-trpc-generator](https://github.com/omar-dulaimi/prisma-trpc-generator).
package/config.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ export declare const configSchema: z.ZodObject<{
3
+ contextPath: z.ZodDefault<z.ZodString>;
4
+ }, "strip", z.ZodTypeAny, {
5
+ contextPath: string;
6
+ }, {
7
+ contextPath?: string | undefined;
8
+ }>;
9
+ export type Config = z.infer<typeof configSchema>;
package/config.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.configSchema = zod_1.z.object({
6
+ contextPath: zod_1.z.string().default('../../../../src/context'),
7
+ });
8
+ //# sourceMappingURL=config.js.map
package/config.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAEX,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACjC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC;CAC7D,CAAC,CAAC"}
package/generator.d.ts ADDED
@@ -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>;
package/generator.js ADDED
@@ -0,0 +1,152 @@
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 __rest = (this && this.__rest) || function (s, e) {
12
+ var t = {};
13
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14
+ t[p] = s[p];
15
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
16
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18
+ t[p[i]] = s[p[i]];
19
+ }
20
+ return t;
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.generate = void 0;
27
+ const fs_1 = require("fs");
28
+ const path_1 = __importDefault(require("path"));
29
+ const generator_1 = require("./zod/generator");
30
+ const helpers_1 = require("./helpers");
31
+ const project_1 = require("./project");
32
+ const removeDir_1 = __importDefault(require("./utils/removeDir"));
33
+ const change_case_1 = require("change-case");
34
+ function generate(model, options, dmmf) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ const outputDir = options.output;
37
+ yield fs_1.promises.mkdir(outputDir, { recursive: true });
38
+ yield (0, removeDir_1.default)(outputDir, true);
39
+ yield (0, generator_1.generate)(model, options, dmmf);
40
+ const prismaClientDmmf = dmmf;
41
+ const modelOperations = prismaClientDmmf.mappings.modelOperations;
42
+ const models = prismaClientDmmf.datamodel.models;
43
+ const hiddenModels = [];
44
+ (0, helpers_1.resolveModelsComments)(models, hiddenModels);
45
+ const appRouter = project_1.project.createSourceFile(path_1.default.resolve(outputDir, 'routers', `index.ts`), undefined, {
46
+ overwrite: true,
47
+ });
48
+ appRouter.addImportDeclarations([
49
+ {
50
+ namedImports: ['AnyRootConfig'],
51
+ moduleSpecifier: '@trpc/server',
52
+ },
53
+ {
54
+ namedImports: ['PrismaClient'],
55
+ moduleSpecifier: '@prisma/client',
56
+ },
57
+ {
58
+ namedImports: ['createRouterFactory'],
59
+ moduleSpecifier: '@trpc/server/dist/core/router',
60
+ },
61
+ {
62
+ namedImports: ['createBuilder'],
63
+ moduleSpecifier: '@trpc/server/dist/core/internals/procedureBuilder',
64
+ },
65
+ ]);
66
+ appRouter.addStatements(`
67
+ export type BaseConfig = AnyRootConfig;
68
+
69
+ export type RouterFactory<Config extends BaseConfig> = ReturnType<
70
+ typeof createRouterFactory<Config>
71
+ >;
72
+
73
+ export type ProcBuilder<Config extends BaseConfig> = ReturnType<
74
+ typeof createBuilder<Config>
75
+ >;
76
+
77
+ export function db(ctx: any) {
78
+ if (!ctx.prisma) {
79
+ throw new Error('Missing "prisma" field in trpc context');
80
+ }
81
+ return ctx.prisma as PrismaClient;
82
+ }
83
+
84
+ `);
85
+ const createFunction = appRouter.addFunction({
86
+ name: 'createRouter<Config extends BaseConfig>',
87
+ parameters: [
88
+ { name: 'router', type: 'RouterFactory<Config>' },
89
+ { name: 'procedure', type: 'ProcBuilder<Config>' },
90
+ ],
91
+ isExported: true,
92
+ });
93
+ createFunction.setBodyText((writer) => {
94
+ writer.write('return router(');
95
+ writer.block(() => {
96
+ for (const modelOperation of modelOperations) {
97
+ const { model } = modelOperation, operations = __rest(modelOperation, ["model"]);
98
+ if (hiddenModels.includes(model)) {
99
+ continue;
100
+ }
101
+ generateModelCreateRouter(project_1.project, model, operations, outputDir);
102
+ appRouter.addImportDeclaration({
103
+ defaultImport: `create${model}Router`,
104
+ moduleSpecifier: `./${model}.router`,
105
+ });
106
+ writer.writeLine(`${(0, change_case_1.camelCase)(model)}: create${model}Router<Config>(router, procedure),`);
107
+ }
108
+ });
109
+ writer.write(');');
110
+ });
111
+ appRouter.formatText();
112
+ yield project_1.project.save();
113
+ });
114
+ }
115
+ exports.generate = generate;
116
+ function generateModelCreateRouter(project, model, operations, outputDir) {
117
+ const modelRouter = project.createSourceFile(path_1.default.resolve(outputDir, 'routers', `${model}.router.ts`), undefined, {
118
+ overwrite: true,
119
+ });
120
+ modelRouter.addImportDeclarations([
121
+ {
122
+ namedImports: ['type RouterFactory', 'type ProcBuilder', 'type BaseConfig', 'db'],
123
+ moduleSpecifier: '.',
124
+ },
125
+ ]);
126
+ (0, helpers_1.generateRouterSchemaImports)(modelRouter, model);
127
+ modelRouter
128
+ .addFunction({
129
+ name: 'createRouter<Config extends BaseConfig>',
130
+ parameters: [
131
+ { name: 'router', type: 'RouterFactory<Config>' },
132
+ { name: 'procedure', type: 'ProcBuilder<Config>' },
133
+ ],
134
+ isExported: true,
135
+ isDefaultExport: true,
136
+ })
137
+ .setBodyText((writer) => {
138
+ writer.write('return router(');
139
+ writer.block(() => {
140
+ for (const [opType, opNameWithModel] of Object.entries(operations)) {
141
+ const baseOpType = opType.replace('OrThrow', '');
142
+ const inputType = (0, helpers_1.getInputTypeByOpName)(baseOpType, model);
143
+ if (opNameWithModel && inputType) {
144
+ (0, helpers_1.generateProcedure)(writer, opType.replace(/One$/, ''), inputType, model, baseOpType);
145
+ }
146
+ }
147
+ });
148
+ writer.write(');');
149
+ });
150
+ modelRouter.formatText();
151
+ }
152
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
package/helpers.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { DMMF } from '@prisma/generator-helper';
2
+ import { CodeBlockWriter, SourceFile } from 'ts-morph';
3
+ export declare const generatetRPCImport: (sourceFile: SourceFile) => void;
4
+ export declare const generateRouterImport: (sourceFile: SourceFile, modelNamePlural: string, modelNameCamelCase: string) => void;
5
+ export declare function generateProcedure(writer: CodeBlockWriter, opType: string, typeName: string, modelName: string, baseOpType: string): void;
6
+ export declare function generateRouterSchemaImports(sourceFile: SourceFile, name: string): void;
7
+ export declare const getInputTypeByOpName: (opName: string, modelName: string) => string | undefined;
8
+ export declare const getProcedureTypeByOpName: (opName: string) => string | undefined;
9
+ export declare function resolveModelsComments(models: DMMF.Model[], hiddenModels: string[]): void;
package/helpers.js ADDED
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveModelsComments = exports.getProcedureTypeByOpName = exports.getInputTypeByOpName = exports.generateRouterSchemaImports = exports.generateProcedure = exports.generateRouterImport = exports.generatetRPCImport = void 0;
4
+ const uncapitalizeFirstLetter_1 = require("./utils/uncapitalizeFirstLetter");
5
+ const generatetRPCImport = (sourceFile) => {
6
+ sourceFile.addImportDeclaration({
7
+ moduleSpecifier: '@trpc/server',
8
+ namespaceImport: 'trpc',
9
+ });
10
+ };
11
+ exports.generatetRPCImport = generatetRPCImport;
12
+ const generateRouterImport = (sourceFile, modelNamePlural, modelNameCamelCase) => {
13
+ sourceFile.addImportDeclaration({
14
+ moduleSpecifier: `./${modelNameCamelCase}.router`,
15
+ namedImports: [`${modelNamePlural}Router`],
16
+ });
17
+ };
18
+ exports.generateRouterImport = generateRouterImport;
19
+ function generateProcedure(writer, opType, typeName, modelName, baseOpType) {
20
+ const procType = (0, exports.getProcedureTypeByOpName)(baseOpType);
21
+ writer.write(`
22
+ ${opType}: procedure.input(${typeName}).${procType}(({ctx, input}) => db(ctx).${(0, uncapitalizeFirstLetter_1.uncapitalizeFirstLetter)(modelName)}.${opType.replace('One', '')}(input)),
23
+ `);
24
+ }
25
+ exports.generateProcedure = generateProcedure;
26
+ function generateRouterSchemaImports(sourceFile, name) {
27
+ sourceFile.addStatements(`import { ${name}Schema } from '../schemas/${name}.schema';`);
28
+ }
29
+ exports.generateRouterSchemaImports = generateRouterSchemaImports;
30
+ const getInputTypeByOpName = (opName, modelName) => {
31
+ let inputType;
32
+ switch (opName) {
33
+ case 'findUnique':
34
+ inputType = `${modelName}Schema.findUnique`;
35
+ break;
36
+ case 'findFirst':
37
+ inputType = `${modelName}Schema.findFirst`;
38
+ break;
39
+ case 'findMany':
40
+ inputType = `${modelName}Schema.findMany`;
41
+ break;
42
+ case 'findRaw':
43
+ inputType = `${modelName}Schema.findRawObject`;
44
+ break;
45
+ case 'createOne':
46
+ inputType = `${modelName}Schema.create`;
47
+ break;
48
+ case 'createMany':
49
+ inputType = `${modelName}Schema.createMany`;
50
+ break;
51
+ case 'deleteOne':
52
+ inputType = `${modelName}Schema.delete`;
53
+ break;
54
+ case 'updateOne':
55
+ inputType = `${modelName}Schema.update`;
56
+ break;
57
+ case 'deleteMany':
58
+ inputType = `${modelName}Schema.deleteMany`;
59
+ break;
60
+ case 'updateMany':
61
+ inputType = `${modelName}Schema.updateMany`;
62
+ break;
63
+ case 'upsertOne':
64
+ inputType = `${modelName}Schema.upsert`;
65
+ break;
66
+ case 'aggregate':
67
+ inputType = `${modelName}Schema.aggregate`;
68
+ break;
69
+ case 'aggregateRaw':
70
+ inputType = `${modelName}Schema.aggregateRawObject`;
71
+ break;
72
+ case 'groupBy':
73
+ inputType = `${modelName}Schema.groupBy`;
74
+ break;
75
+ default:
76
+ console.log('getInputTypeByOpName: ', { opName, modelName });
77
+ }
78
+ return inputType;
79
+ };
80
+ exports.getInputTypeByOpName = getInputTypeByOpName;
81
+ const getProcedureTypeByOpName = (opName) => {
82
+ let procType;
83
+ switch (opName) {
84
+ case 'findUnique':
85
+ case 'findFirst':
86
+ case 'findMany':
87
+ case 'findRaw':
88
+ case 'aggregate':
89
+ case 'aggregateRaw':
90
+ case 'groupBy':
91
+ procType = 'query';
92
+ break;
93
+ case 'createOne':
94
+ case 'createMany':
95
+ case 'deleteOne':
96
+ case 'updateOne':
97
+ case 'deleteMany':
98
+ case 'updateMany':
99
+ case 'upsertOne':
100
+ procType = 'mutation';
101
+ break;
102
+ default:
103
+ console.log('getProcedureTypeByOpName: ', { opName });
104
+ }
105
+ return procType;
106
+ };
107
+ exports.getProcedureTypeByOpName = getProcedureTypeByOpName;
108
+ function resolveModelsComments(models, hiddenModels) {
109
+ var _a, _b, _c, _d, _e, _f;
110
+ const modelAttributeRegex = /(@@Gen\.)+([A-z])+(\()+(.+)+(\))+/;
111
+ const attributeNameRegex = /(?:\.)+([A-Za-z])+(?:\()+/;
112
+ const attributeArgsRegex = /(?:\()+([A-Za-z])+:+(.+)+(?:\))+/;
113
+ for (const model of models) {
114
+ if (model.documentation) {
115
+ const attribute = (_b = (_a = model.documentation) === null || _a === void 0 ? void 0 : _a.match(modelAttributeRegex)) === null || _b === void 0 ? void 0 : _b[0];
116
+ const attributeName = (_d = (_c = attribute === null || attribute === void 0 ? void 0 : attribute.match(attributeNameRegex)) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.slice(1, -1);
117
+ if (attributeName !== 'model')
118
+ continue;
119
+ const rawAttributeArgs = (_f = (_e = attribute === null || attribute === void 0 ? void 0 : attribute.match(attributeArgsRegex)) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.slice(1, -1);
120
+ const parsedAttributeArgs = {};
121
+ if (rawAttributeArgs) {
122
+ const rawAttributeArgsParts = rawAttributeArgs
123
+ .split(':')
124
+ .map((it) => it.trim())
125
+ .map((part) => (part.startsWith('[') ? part : part.split(',')))
126
+ .flat()
127
+ .map((it) => it.trim());
128
+ for (let i = 0; i < rawAttributeArgsParts.length; i += 2) {
129
+ const key = rawAttributeArgsParts[i];
130
+ const value = rawAttributeArgsParts[i + 1];
131
+ parsedAttributeArgs[key] = JSON.parse(value);
132
+ }
133
+ }
134
+ if (parsedAttributeArgs.hide) {
135
+ hiddenModels.push(model.name);
136
+ }
137
+ }
138
+ }
139
+ }
140
+ exports.resolveModelsComments = resolveModelsComments;
141
+ //# sourceMappingURL=helpers.js.map
package/helpers.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -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 = "tRPC";
5
+ export default function run(model: Model, options: PluginOptions, dmmf: DMMF.Document): Promise<void>;
package/index.js ADDED
@@ -0,0 +1,21 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.name = void 0;
13
+ const generator_1 = require("./generator");
14
+ exports.name = 'tRPC';
15
+ function run(model, options, dmmf) {
16
+ return __awaiter(this, void 0, void 0, function* () {
17
+ return (0, generator_1.generate)(model, options, dmmf);
18
+ });
19
+ }
20
+ exports.default = run;
21
+ //# sourceMappingURL=index.js.map
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAGA,2CAAuC;AAE1B,QAAA,IAAI,GAAG,MAAM,CAAC;AAE3B,SAA8B,GAAG,CAAC,KAAY,EAAE,OAAsB,EAAE,IAAmB;;QACvF,OAAO,IAAA,oBAAQ,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;CAAA;AAFD,sBAEC"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@zenstackhq/trpc",
3
+ "displayName": "ZenStack plugin for tRPC",
4
+ "version": "0.6.0-pre.19",
5
+ "description": "ZenStack plugin for tRPC",
6
+ "main": "index.js",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/zenstackhq/zenstack"
10
+ },
11
+ "publishConfig": {
12
+ "directory": "dist",
13
+ "linkDirectory": true
14
+ },
15
+ "keywords": [],
16
+ "author": "ZenStack Team",
17
+ "license": "MIT",
18
+ "dependencies": {
19
+ "@prisma/generator-helper": "^4.7.1",
20
+ "@prisma/internals": "^4.7.1",
21
+ "change-case": "^4.1.2",
22
+ "ts-morph": "^16.0.0",
23
+ "zod": "^3.19.1",
24
+ "@zenstackhq/sdk": "0.6.0-pre.19"
25
+ },
26
+ "devDependencies": {
27
+ "rimraf": "^3.0.2",
28
+ "typescript": "^4.9.4"
29
+ },
30
+ "scripts": {
31
+ "clean": "rimraf dist",
32
+ "build": "pnpm lint && pnpm clean && tsc && cp ./package.json ./README.md ../../../LICENSE dist/",
33
+ "watch": "tsc --watch",
34
+ "lint": "eslint src --ext ts",
35
+ "publish-dev": "pnpm publish --tag dev"
36
+ }
37
+ }
package/project.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { Project } from 'ts-morph';
2
+ export declare const project: Project;
package/project.js ADDED
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.project = void 0;
4
+ const ts_morph_1 = require("ts-morph");
5
+ const compilerOptions = {
6
+ target: ts_morph_1.ScriptTarget.ES2019,
7
+ module: ts_morph_1.ModuleKind.CommonJS,
8
+ emitDecoratorMetadata: true,
9
+ experimentalDecorators: true,
10
+ esModuleInterop: true,
11
+ };
12
+ exports.project = new ts_morph_1.Project({
13
+ compilerOptions: Object.assign({}, compilerOptions),
14
+ });
15
+ //# sourceMappingURL=project.js.map
package/project.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":";;;AAAA,uCAA8E;AAE9E,MAAM,eAAe,GAAoB;IACrC,MAAM,EAAE,uBAAY,CAAC,MAAM;IAC3B,MAAM,EAAE,qBAAU,CAAC,QAAQ;IAC3B,qBAAqB,EAAE,IAAI;IAC3B,sBAAsB,EAAE,IAAI;IAC5B,eAAe,EAAE,IAAI;CACxB,CAAC;AAEW,QAAA,OAAO,GAAG,IAAI,kBAAO,CAAC;IAC/B,eAAe,oBACR,eAAe,CACrB;CACJ,CAAC,CAAC"}
package/types.d.ts ADDED
File without changes
package/types.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
package/types.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export default function removeDir(dirPath: string, onlyContent: boolean): Promise<void>;
@@ -0,0 +1,30 @@
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 path_1 = __importDefault(require("path"));
16
+ const fs_1 = require("fs");
17
+ function removeDir(dirPath, onlyContent) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ const dirEntries = yield fs_1.promises.readdir(dirPath, { withFileTypes: true });
20
+ yield Promise.all(dirEntries.map((dirEntry) => __awaiter(this, void 0, void 0, function* () {
21
+ const fullPath = path_1.default.join(dirPath, dirEntry.name);
22
+ return dirEntry.isDirectory() ? yield removeDir(fullPath, false) : yield fs_1.promises.unlink(fullPath);
23
+ })));
24
+ if (!onlyContent) {
25
+ yield fs_1.promises.rmdir(dirPath);
26
+ }
27
+ });
28
+ }
29
+ exports.default = removeDir;
30
+ //# sourceMappingURL=removeDir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeDir.js","sourceRoot":"","sources":["../../src/utils/removeDir.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,2BAAoC;AAEpC,SAA8B,SAAS,CAAC,OAAe,EAAE,WAAoB;;QACzE,MAAM,UAAU,GAAG,MAAM,aAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,OAAO,CAAC,GAAG,CACb,UAAU,CAAC,GAAG,CAAC,CAAO,QAAQ,EAAE,EAAE;YAC9B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACnD,OAAO,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,aAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjG,CAAC,CAAA,CAAC,CACL,CAAC;QACF,IAAI,CAAC,WAAW,EAAE;YACd,MAAM,aAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC3B;IACL,CAAC;CAAA;AAXD,4BAWC"}
@@ -0,0 +1 @@
1
+ export declare const uncapitalizeFirstLetter: (str: string) => string;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uncapitalizeFirstLetter = void 0;
4
+ const uncapitalizeFirstLetter = (str) => {
5
+ return str.charAt(0).toLowerCase() + str.slice(1);
6
+ };
7
+ exports.uncapitalizeFirstLetter = uncapitalizeFirstLetter;
8
+ //# sourceMappingURL=uncapitalizeFirstLetter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uncapitalizeFirstLetter.js","sourceRoot":"","sources":["../../src/utils/uncapitalizeFirstLetter.ts"],"names":[],"mappings":";;;AAAO,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAE,EAAE;IACnD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC;AAFW,QAAA,uBAAuB,2BAElC"}
@@ -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,92 @@
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 fs_1 = require("fs");
19
+ const helpers_1 = require("./helpers");
20
+ const aggregate_helpers_1 = require("./helpers/aggregate-helpers");
21
+ const transformer_1 = __importDefault(require("./transformer"));
22
+ const removeDir_1 = __importDefault(require("./utils/removeDir"));
23
+ function generate(model, options, dmmf) {
24
+ var _a, _b, _c;
25
+ return __awaiter(this, void 0, void 0, function* () {
26
+ yield handleGeneratorOutputValue((_a = options.output) !== null && _a !== void 0 ? _a : './generated');
27
+ const prismaClientDmmf = dmmf;
28
+ const modelOperations = prismaClientDmmf.mappings.modelOperations;
29
+ const inputObjectTypes = prismaClientDmmf.schema.inputObjectTypes.prisma;
30
+ const outputObjectTypes = prismaClientDmmf.schema.outputObjectTypes.prisma;
31
+ const enumTypes = prismaClientDmmf.schema.enumTypes;
32
+ const models = prismaClientDmmf.datamodel.models;
33
+ const hiddenModels = [];
34
+ const hiddenFields = [];
35
+ (0, helpers_1.resolveModelsComments)(models, modelOperations, enumTypes, hiddenModels, hiddenFields);
36
+ yield generateEnumSchemas(prismaClientDmmf.schema.enumTypes.prisma, (_b = prismaClientDmmf.schema.enumTypes.model) !== null && _b !== void 0 ? _b : []);
37
+ const dataSource = model.declarations.find((d) => (0, ast_1.isDataSource)(d));
38
+ const dataSourceProvider = (0, sdk_1.getLiteral)((_c = dataSource === null || dataSource === void 0 ? void 0 : dataSource.fields.find((f) => f.name === 'provider')) === null || _c === void 0 ? void 0 : _c.value);
39
+ transformer_1.default.provider = dataSourceProvider;
40
+ const generatorConfigOptions = {};
41
+ Object.entries(options).forEach(([k, v]) => (generatorConfigOptions[k] = v));
42
+ const addMissingInputObjectTypeOptions = (0, helpers_1.resolveAddMissingInputObjectTypeOptions)(generatorConfigOptions);
43
+ (0, helpers_1.addMissingInputObjectTypes)(inputObjectTypes, outputObjectTypes, models, modelOperations, dataSourceProvider, addMissingInputObjectTypeOptions);
44
+ const aggregateOperationSupport = (0, aggregate_helpers_1.resolveAggregateOperationSupport)(inputObjectTypes);
45
+ (0, helpers_1.hideInputObjectTypesAndRelatedFields)(inputObjectTypes, hiddenModels, hiddenFields);
46
+ yield generateObjectSchemas(inputObjectTypes);
47
+ yield generateModelSchemas(models, modelOperations, aggregateOperationSupport);
48
+ });
49
+ }
50
+ exports.generate = generate;
51
+ function handleGeneratorOutputValue(output) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ // create the output directory and delete contents that might exist from a previous run
54
+ yield fs_1.promises.mkdir(output, { recursive: true });
55
+ const isRemoveContentsOnly = true;
56
+ yield (0, removeDir_1.default)(output, isRemoveContentsOnly);
57
+ transformer_1.default.setOutputPath(output);
58
+ });
59
+ }
60
+ function generateEnumSchemas(prismaSchemaEnum, modelSchemaEnum) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ const enumTypes = [...prismaSchemaEnum, ...modelSchemaEnum];
63
+ const enumNames = enumTypes.map((enumItem) => enumItem.name);
64
+ transformer_1.default.enumNames = enumNames !== null && enumNames !== void 0 ? enumNames : [];
65
+ const transformer = new transformer_1.default({
66
+ enumTypes,
67
+ });
68
+ yield transformer.generateEnumSchemas();
69
+ });
70
+ }
71
+ function generateObjectSchemas(inputObjectTypes) {
72
+ var _a, _b;
73
+ return __awaiter(this, void 0, void 0, function* () {
74
+ for (let i = 0; i < inputObjectTypes.length; i += 1) {
75
+ const fields = (_a = inputObjectTypes[i]) === null || _a === void 0 ? void 0 : _a.fields;
76
+ const name = (_b = inputObjectTypes[i]) === null || _b === void 0 ? void 0 : _b.name;
77
+ const transformer = new transformer_1.default({ name, fields });
78
+ yield transformer.generateObjectSchema();
79
+ }
80
+ });
81
+ }
82
+ function generateModelSchemas(models, modelOperations, aggregateOperationSupport) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ const transformer = new transformer_1.default({
85
+ models,
86
+ modelOperations,
87
+ aggregateOperationSupport,
88
+ });
89
+ yield transformer.generateModelSchemas();
90
+ });
91
+ }
92
+ //# sourceMappingURL=generator.js.map