prisma-generator-express 1.18.0 → 1.20.0

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 (76) hide show
  1. package/README.md +399 -194
  2. package/dist/bin.d.ts +2 -0
  3. package/dist/bin.js +1 -1
  4. package/dist/bin.js.map +1 -1
  5. package/dist/client/encodeQueryParams.d.ts +1 -0
  6. package/dist/client/encodeQueryParams.js +33 -0
  7. package/dist/client/encodeQueryParams.js.map +1 -0
  8. package/dist/constants.d.ts +1 -0
  9. package/dist/copy/misc.d.ts +5 -0
  10. package/dist/copy/misc.js +52 -0
  11. package/dist/copy/misc.js.map +1 -0
  12. package/dist/generators/generateImportPrismaStatement.d.ts +3 -0
  13. package/dist/generators/generateImportPrismaStatement.js +55 -0
  14. package/dist/generators/generateImportPrismaStatement.js.map +1 -0
  15. package/dist/generators/generateQueryBuilderHelper.d.ts +2 -0
  16. package/dist/generators/generateQueryBuilderHelper.js +139 -0
  17. package/dist/generators/generateQueryBuilderHelper.js.map +1 -0
  18. package/dist/generators/generateRouter.d.ts +6 -0
  19. package/dist/generators/generateRouter.js +340 -0
  20. package/dist/generators/generateRouter.js.map +1 -0
  21. package/dist/generators/generateUnifiedDocs.d.ts +1 -0
  22. package/dist/generators/generateUnifiedDocs.js +171 -0
  23. package/dist/generators/generateUnifiedDocs.js.map +1 -0
  24. package/dist/generators/generateUnifiedHandler.d.ts +6 -0
  25. package/dist/generators/generateUnifiedHandler.js +444 -0
  26. package/dist/generators/generateUnifiedHandler.js.map +1 -0
  27. package/dist/generators/generateUnifiedScalarUI.d.ts +5 -0
  28. package/dist/generators/generateUnifiedScalarUI.js +1390 -0
  29. package/dist/generators/generateUnifiedScalarUI.js.map +1 -0
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.js +80 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/utils/copyFiles.d.ts +6 -0
  34. package/dist/utils/copyFiles.js +123 -21
  35. package/dist/utils/copyFiles.js.map +1 -1
  36. package/dist/utils/strings.d.ts +2 -0
  37. package/dist/utils/writeFileSafely.d.ts +10 -0
  38. package/dist/utils/writeFileSafely.js +86 -14
  39. package/dist/utils/writeFileSafely.js.map +1 -1
  40. package/package.json +59 -28
  41. package/src/bin.ts +1 -1
  42. package/src/client/encodeQueryParams.ts +56 -0
  43. package/src/copy/buildModelOpenApi.ts +1569 -0
  44. package/src/copy/misc.ts +21 -0
  45. package/src/copy/operationDefinitions.ts +96 -0
  46. package/src/copy/parseQueryParams.ts +36 -21
  47. package/src/copy/routeConfig.ts +68 -28
  48. package/src/generators/generateImportPrismaStatement.ts +78 -0
  49. package/src/generators/generateQueryBuilderHelper.ts +138 -0
  50. package/src/generators/generateRouter.ts +352 -0
  51. package/src/generators/generateUnifiedDocs.ts +168 -0
  52. package/src/generators/generateUnifiedHandler.ts +469 -0
  53. package/src/generators/generateUnifiedScalarUI.ts +1409 -0
  54. package/src/index.ts +100 -0
  55. package/src/utils/copyFiles.ts +123 -16
  56. package/src/utils/writeFileSafely.ts +79 -25
  57. package/dist/generator.js +0 -47
  58. package/dist/generator.js.map +0 -1
  59. package/dist/helpers/generateImportPrismaStatement.js +0 -25
  60. package/dist/helpers/generateImportPrismaStatement.js.map +0 -1
  61. package/dist/helpers/generateOperation.js +0 -471
  62. package/dist/helpers/generateOperation.js.map +0 -1
  63. package/dist/helpers/generateRouteFile.js +0 -210
  64. package/dist/helpers/generateRouteFile.js.map +0 -1
  65. package/dist/utils/formatFile.js +0 -26
  66. package/dist/utils/formatFile.js.map +0 -1
  67. package/src/copy/encodeQueryParams.spec.ts +0 -303
  68. package/src/copy/encodeQueryParams.ts +0 -44
  69. package/src/copy/misc.spec.ts +0 -62
  70. package/src/copy/parseQueryParams.spec.ts +0 -187
  71. package/src/copy/transformZod.spec.ts +0 -763
  72. package/src/generator.ts +0 -54
  73. package/src/helpers/generateImportPrismaStatement.ts +0 -38
  74. package/src/helpers/generateOperation.ts +0 -515
  75. package/src/helpers/generateRouteFile.ts +0 -213
  76. package/src/utils/formatFile.ts +0 -22
package/dist/bin.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '.';
package/dist/bin.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- require("./generator");
4
+ require(".");
5
5
  //# sourceMappingURL=bin.js.map
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;AACA,uBAAoB"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;AACA,aAAU"}
@@ -0,0 +1 @@
1
+ export declare const encodeQueryParams: (params: Record<string, unknown>) => string;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.encodeQueryParams = void 0;
4
+ const misc_1 = require("../copy/misc");
5
+ function replacer(_key, value) {
6
+ if (typeof value === 'bigint') {
7
+ return value.toString();
8
+ }
9
+ return value;
10
+ }
11
+ const encodeQueryParams = (params) => {
12
+ const entries = [];
13
+ for (const [key, value] of Object.entries(params)) {
14
+ if (value === undefined)
15
+ continue;
16
+ if (value === null) {
17
+ entries.push(`${encodeURIComponent(key)}=null`);
18
+ continue;
19
+ }
20
+ if (typeof value === 'bigint') {
21
+ entries.push(`${encodeURIComponent(key)}=${encodeURIComponent(value.toString())}`);
22
+ continue;
23
+ }
24
+ if (Array.isArray(value) || (0, misc_1.isObject)(value)) {
25
+ entries.push(`${encodeURIComponent(key)}=${encodeURIComponent(JSON.stringify(value, replacer))}`);
26
+ continue;
27
+ }
28
+ entries.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
29
+ }
30
+ return entries.join('&');
31
+ };
32
+ exports.encodeQueryParams = encodeQueryParams;
33
+ //# sourceMappingURL=encodeQueryParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeQueryParams.js","sourceRoot":"","sources":["../../src/client/encodeQueryParams.ts"],"names":[],"mappings":";;;AAAA,uCAAuC;AAiBvC,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAc;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;IACzB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAEM,MAAM,iBAAiB,GAAG,CAAC,MAA+B,EAAU,EAAE;IAC3E,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAQ;QAEjC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC/C,SAAQ;QACV,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CACV,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,CACrE,CAAA;YACD,SAAQ;QACV,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAA,eAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CACV,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,CACpF,CAAA;YACD,SAAQ;QACV,CAAC;QAED,OAAO,CAAC,IAAI,CACV,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAClE,CAAA;IACH,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC1B,CAAC,CAAA;AA/BY,QAAA,iBAAiB,qBA+B7B"}
@@ -0,0 +1 @@
1
+ export declare const GENERATOR_NAME = "prisma-generator-express";
@@ -0,0 +1,5 @@
1
+ export declare function isJsonString(str: string | unknown): boolean;
2
+ export declare function safeJSONparse<T>(data: unknown): T | boolean | undefined | null;
3
+ export declare const isObject: (value: unknown) => value is Record<string, unknown>;
4
+ export declare function isSafeKey(key: string): boolean;
5
+ export declare function sanitizeKeys<T>(value: T): T;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isObject = void 0;
4
+ exports.isJsonString = isJsonString;
5
+ exports.safeJSONparse = safeJSONparse;
6
+ exports.isSafeKey = isSafeKey;
7
+ exports.sanitizeKeys = sanitizeKeys;
8
+ function isJsonString(str) {
9
+ if (typeof str !== 'string') {
10
+ return false;
11
+ }
12
+ try {
13
+ JSON.parse(str);
14
+ }
15
+ catch (e) {
16
+ return false;
17
+ }
18
+ return true;
19
+ }
20
+ function safeJSONparse(data) {
21
+ if (data === 'false')
22
+ return false;
23
+ if (data === 'undefined')
24
+ return undefined;
25
+ if (data === 'null')
26
+ return null;
27
+ return isJsonString(data) ? JSON.parse(data) : data;
28
+ }
29
+ const isObject = (value) => {
30
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
31
+ };
32
+ exports.isObject = isObject;
33
+ const UNSAFE_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
34
+ function isSafeKey(key) {
35
+ return !UNSAFE_KEYS.has(key);
36
+ }
37
+ function sanitizeKeys(value) {
38
+ if (Array.isArray(value)) {
39
+ return value.map(sanitizeKeys);
40
+ }
41
+ if ((0, exports.isObject)(value)) {
42
+ const result = {};
43
+ for (const key of Object.keys(value)) {
44
+ if (!isSafeKey(key))
45
+ continue;
46
+ result[key] = sanitizeKeys(value[key]);
47
+ }
48
+ return result;
49
+ }
50
+ return value;
51
+ }
52
+ //# sourceMappingURL=misc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"misc.js","sourceRoot":"","sources":["../../src/copy/misc.ts"],"names":[],"mappings":";;;AAAA,oCAWC;AAED,sCAOC;AAQD,8BAEC;AAED,oCAaC;AA7CD,SAAgB,YAAY,CAAC,GAAqB;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACjB,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAgB,aAAa,CAC3B,IAAa;IAEb,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAA;IAClC,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,SAAS,CAAA;IAC1C,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,IAAI,CAAA;IAChC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC,CAAC,CAAC,IAAW,CAAA;AACtE,CAAC;AAEM,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE;IAC3E,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC,CAAA;AAFY,QAAA,QAAQ,YAEpB;AAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;AAEtE,SAAgB,SAAS,CAAC,GAAW;IACnC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAC9B,CAAC;AAED,SAAgB,YAAY,CAAI,KAAQ;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAM,CAAA;IACrC,CAAC;IACD,IAAI,IAAA,gBAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,MAAM,GAA4B,EAAE,CAAA;QAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;gBAAE,SAAQ;YAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAE,KAAiC,CAAC,GAAG,CAAC,CAAC,CAAA;QACrE,CAAC;QACD,OAAO,MAAW,CAAA;IACpB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { GeneratorOptions } from '@prisma/generator-helper';
2
+ export declare function generateImportPrismaStatement(generatorOptions: GeneratorOptions): string;
3
+ export declare function getRelativeClientPath(generatorOptions: GeneratorOptions, modelName: string): string;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateImportPrismaStatement = generateImportPrismaStatement;
7
+ exports.getRelativeClientPath = getRelativeClientPath;
8
+ const path_1 = __importDefault(require("path"));
9
+ function findClientGenerator(options) {
10
+ const byName = options.otherGenerators.find((gen) => gen.name === 'client');
11
+ if (byName)
12
+ return byName;
13
+ const byProvider = options.otherGenerators.find((gen) => gen.provider.value === 'prisma-client-js' ||
14
+ gen.provider.value === '@prisma/client' ||
15
+ gen.provider.value === 'prisma-client');
16
+ if (byProvider)
17
+ return byProvider;
18
+ const withOutput = options.otherGenerators.find((gen) => gen.output?.value?.includes('prisma') ||
19
+ gen.output?.value?.includes('client'));
20
+ return withOutput || null;
21
+ }
22
+ function getRelativeImportPath(fromDir, clientOutputPath) {
23
+ let relativeImportPath = path_1.default.relative(fromDir, clientOutputPath);
24
+ relativeImportPath = relativeImportPath.split(path_1.default.sep).join(path_1.default.posix.sep);
25
+ if (!relativeImportPath.startsWith('.')) {
26
+ relativeImportPath = './' + relativeImportPath;
27
+ }
28
+ return relativeImportPath;
29
+ }
30
+ function generateImportPrismaStatement(generatorOptions) {
31
+ const clientGenerator = findClientGenerator(generatorOptions);
32
+ if (!clientGenerator || !clientGenerator.output?.value) {
33
+ throw new Error('Prisma client generator not found. Ensure a generator with provider "prisma-client-js" exists in your schema.');
34
+ }
35
+ const outputValue = generatorOptions.generator.output?.value;
36
+ if (!outputValue) {
37
+ throw new Error('Generator output path not defined.');
38
+ }
39
+ const subDir = path_1.default.join(outputValue, '_relative');
40
+ const outputPath = getRelativeImportPath(subDir, clientGenerator.output.value);
41
+ return `import { Prisma, PrismaClient } from '${outputPath}';\n`;
42
+ }
43
+ function getRelativeClientPath(generatorOptions, modelName) {
44
+ const clientGenerator = findClientGenerator(generatorOptions);
45
+ if (!clientGenerator || !clientGenerator.output?.value) {
46
+ throw new Error('Prisma client generator not found. Ensure a generator with provider "prisma-client-js" exists in your schema.');
47
+ }
48
+ const outputValue = generatorOptions.generator.output?.value;
49
+ if (!outputValue) {
50
+ throw new Error('Generator output path not defined.');
51
+ }
52
+ const routerDirPath = path_1.default.join(outputValue, modelName);
53
+ return getRelativeImportPath(routerDirPath, clientGenerator.output.value);
54
+ }
55
+ //# sourceMappingURL=generateImportPrismaStatement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateImportPrismaStatement.js","sourceRoot":"","sources":["../../src/generators/generateImportPrismaStatement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { GeneratorOptions } from '@prisma/generator-helper';
2
+ export declare function generateQueryBuilderHelper(options: GeneratorOptions): string;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateQueryBuilderHelper = generateQueryBuilderHelper;
4
+ function generateQueryBuilderHelper(options) {
5
+ const schemaPath = options.schemaPath
6
+ ? JSON.stringify(options.schemaPath)
7
+ : "require('path').resolve(process.cwd(), 'prisma/schema.prisma')";
8
+ return `import { spawn } from 'child_process'
9
+ import { resolve, join, dirname } from 'path'
10
+ import { existsSync, readFileSync } from 'fs'
11
+ import { createRequire } from 'module'
12
+ import type { ChildProcess } from 'child_process'
13
+
14
+ let _process: ChildProcess | null = null
15
+ let _stopping = false
16
+ let _cleanupRegistered = false
17
+
18
+ export interface QueryBuilderOptions {
19
+ port?: number
20
+ host?: string
21
+ schemaPath?: string
22
+ databaseUrl?: string
23
+ }
24
+
25
+ function findCliPath(): string | null {
26
+ try {
27
+ const req = createRequire(resolve(process.cwd(), 'package.json'))
28
+ const pkgJsonPath = req.resolve('prisma-query-builder-ui/package.json')
29
+ const pkgDir = dirname(pkgJsonPath)
30
+ const cliPath = join(pkgDir, 'bin', 'cli.js')
31
+ if (existsSync(cliPath)) return cliPath
32
+ } catch {}
33
+
34
+ let dir = process.cwd()
35
+ const root = resolve(dir, '/')
36
+ while (dir !== root) {
37
+ const candidate = join(dir, 'node_modules', 'prisma-query-builder-ui', 'bin', 'cli.js')
38
+ if (existsSync(candidate)) return candidate
39
+ dir = dirname(dir)
40
+ }
41
+
42
+ return null
43
+ }
44
+
45
+ export function startQueryBuilder(options: QueryBuilderOptions = {}): void {
46
+ if (_process) return
47
+
48
+ const env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
49
+
50
+ if (env.NODE_ENV === 'production') return
51
+
52
+ const cliPath = findCliPath()
53
+ if (!cliPath) {
54
+ console.warn('[query-builder] prisma-query-builder-ui not found. Install: npm install prisma-query-builder-ui')
55
+ return
56
+ }
57
+
58
+ const port = options.port || 5173
59
+ const host = options.host || 'localhost'
60
+ const schemaPath = options.schemaPath || ${schemaPath}
61
+ const databaseUrl = options.databaseUrl || env.DATABASE_URL || ''
62
+
63
+ if (!existsSync(schemaPath)) {
64
+ console.error('[query-builder] Schema file not found: ' + schemaPath)
65
+ return
66
+ }
67
+
68
+ let schemaContent: string
69
+ try {
70
+ schemaContent = readFileSync(schemaPath, 'utf-8')
71
+ } catch (err) {
72
+ console.error('[query-builder] Failed to read schema:', err)
73
+ return
74
+ }
75
+
76
+ const schemaCwd = dirname(resolve(schemaPath))
77
+
78
+ _process = spawn(process.execPath, [cliPath], {
79
+ stdio: 'inherit',
80
+ env: {
81
+ ...env,
82
+ PORT: String(port),
83
+ HOST: host,
84
+ PRISMA_QUERY_BUILDER_MODE: 'embedded',
85
+ DISABLE_PERSISTENCE: 'true',
86
+ PRISMA_QUERY_BUILDER_SCHEMA_CONTENT: schemaContent,
87
+ PRISMA_QUERY_BUILDER_CWD: schemaCwd,
88
+ DATABASE_URL: databaseUrl,
89
+ },
90
+ })
91
+
92
+ _process.on('error', (err) => {
93
+ console.error('[query-builder] Failed to start:', err.message)
94
+ _process = null
95
+ })
96
+
97
+ _process.on('exit', (code) => {
98
+ const wasStopping = _stopping
99
+ _stopping = false
100
+ _process = null
101
+ if (!wasStopping && code !== 0) {
102
+ console.warn('[query-builder] Process exited with code ' + code)
103
+ }
104
+ })
105
+
106
+ if (!_cleanupRegistered) {
107
+ _cleanupRegistered = true
108
+
109
+ process.on('exit', () => {
110
+ stopQueryBuilder()
111
+ })
112
+
113
+ const handleSigint = () => {
114
+ stopQueryBuilder()
115
+ process.removeListener('SIGINT', handleSigint)
116
+ process.kill(process.pid, 'SIGINT')
117
+ }
118
+
119
+ const handleSigterm = () => {
120
+ stopQueryBuilder()
121
+ process.removeListener('SIGTERM', handleSigterm)
122
+ process.kill(process.pid, 'SIGTERM')
123
+ }
124
+
125
+ process.on('SIGINT', handleSigint)
126
+ process.on('SIGTERM', handleSigterm)
127
+ }
128
+
129
+ console.log('[query-builder] Starting on http://' + host + ':' + port)
130
+ }
131
+
132
+ export function stopQueryBuilder(): void {
133
+ if (!_process || _process.killed) return
134
+ _stopping = true
135
+ _process.kill()
136
+ }
137
+ `;
138
+ }
139
+ //# sourceMappingURL=generateQueryBuilderHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateQueryBuilderHelper.js","sourceRoot":"","sources":["../../src/generators/generateQueryBuilderHelper.ts"],"names":[],"mappings":";;AAEA,gEAuIC;AAvID,SAAgB,0BAA0B,CAAC,OAAyB;IAClE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;QACnC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC;QACpC,CAAC,CAAC,gEAAgE,CAAA;IAEpE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CAoDoC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EtD,CAAA;AACD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { DMMF } from '@prisma/generator-helper';
2
+ export declare function generateRouterFunction({ model, enums, relativeClientPath, }: {
3
+ model: DMMF.Model;
4
+ enums: DMMF.DatamodelEnum[];
5
+ relativeClientPath: string;
6
+ }): string;