prisma-generator-express 1.18.0 → 1.19.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 (71) 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 +64 -31
  41. package/src/client/encodeQueryParams.ts +56 -0
  42. package/src/copy/buildModelOpenApi.ts +1569 -0
  43. package/src/copy/misc.ts +21 -0
  44. package/src/copy/operationDefinitions.ts +96 -0
  45. package/src/copy/parseQueryParams.ts +36 -21
  46. package/src/copy/routeConfig.ts +68 -28
  47. package/dist/generator.js +0 -47
  48. package/dist/generator.js.map +0 -1
  49. package/dist/helpers/generateImportPrismaStatement.js +0 -25
  50. package/dist/helpers/generateImportPrismaStatement.js.map +0 -1
  51. package/dist/helpers/generateOperation.js +0 -471
  52. package/dist/helpers/generateOperation.js.map +0 -1
  53. package/dist/helpers/generateRouteFile.js +0 -210
  54. package/dist/helpers/generateRouteFile.js.map +0 -1
  55. package/dist/utils/formatFile.js +0 -26
  56. package/dist/utils/formatFile.js.map +0 -1
  57. package/src/bin.ts +0 -2
  58. package/src/constants.ts +0 -1
  59. package/src/copy/encodeQueryParams.spec.ts +0 -303
  60. package/src/copy/encodeQueryParams.ts +0 -44
  61. package/src/copy/misc.spec.ts +0 -62
  62. package/src/copy/parseQueryParams.spec.ts +0 -187
  63. package/src/copy/transformZod.spec.ts +0 -763
  64. package/src/generator.ts +0 -54
  65. package/src/helpers/generateImportPrismaStatement.ts +0 -38
  66. package/src/helpers/generateOperation.ts +0 -515
  67. package/src/helpers/generateRouteFile.ts +0 -213
  68. package/src/utils/copyFiles.ts +0 -27
  69. package/src/utils/formatFile.ts +0 -22
  70. package/src/utils/strings.ts +0 -7
  71. package/src/utils/writeFileSafely.ts +0 -29
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateUnifiedScalarUI.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedScalarUI.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const generator_helper_1 = require("@prisma/generator-helper");
4
+ const generateUnifiedHandler_1 = require("./generators/generateUnifiedHandler");
5
+ const generateRouter_1 = require("./generators/generateRouter");
6
+ const generateUnifiedScalarUI_1 = require("./generators/generateUnifiedScalarUI");
7
+ const generateUnifiedDocs_1 = require("./generators/generateUnifiedDocs");
8
+ const generateQueryBuilderHelper_1 = require("./generators/generateQueryBuilderHelper");
9
+ const generateImportPrismaStatement_1 = require("./generators/generateImportPrismaStatement");
10
+ const writeFileSafely_1 = require("./utils/writeFileSafely");
11
+ const copyFiles_1 = require("./utils/copyFiles");
12
+ const constants_1 = require("./constants");
13
+ (0, generator_helper_1.generatorHandler)({
14
+ onManifest() {
15
+ return {
16
+ version: require('../package.json').version,
17
+ defaultOutput: '../generated',
18
+ prettyName: constants_1.GENERATOR_NAME,
19
+ };
20
+ },
21
+ async onGenerate(options) {
22
+ const prismaImportStatement = (0, generateImportPrismaStatement_1.generateImportPrismaStatement)(options);
23
+ console.log('\n═══ Prisma Generator Express ═══');
24
+ await (0, copyFiles_1.copyFiles)(options);
25
+ const modelNames = [];
26
+ for (const model of options.dmmf.datamodel.models) {
27
+ if (model.documentation &&
28
+ model.documentation.includes('generator off')) {
29
+ console.log(` Skipping: ${model.name} (generator off)`);
30
+ continue;
31
+ }
32
+ modelNames.push(model.name);
33
+ const relativeClientPath = (0, generateImportPrismaStatement_1.getRelativeClientPath)(options, model.name);
34
+ await (0, writeFileSafely_1.writeFileSafely)({
35
+ content: (0, generateUnifiedHandler_1.generateUnifiedHandler)({
36
+ model: model,
37
+ prismaImportStatement,
38
+ }),
39
+ options,
40
+ model: model,
41
+ operation: 'Handlers',
42
+ });
43
+ await (0, writeFileSafely_1.writeFileSafely)({
44
+ content: (0, generateRouter_1.generateRouterFunction)({
45
+ model: model,
46
+ enums: options.dmmf.datamodel.enums,
47
+ relativeClientPath,
48
+ }),
49
+ options,
50
+ model: model,
51
+ operation: 'Router',
52
+ });
53
+ await (0, writeFileSafely_1.writeFileSafely)({
54
+ content: (0, generateUnifiedScalarUI_1.generateScalarUIHandler)({
55
+ model: model,
56
+ enums: options.dmmf.datamodel.enums,
57
+ }),
58
+ options,
59
+ model: model,
60
+ operation: 'Docs',
61
+ });
62
+ }
63
+ await (0, writeFileSafely_1.writeFileSafely)({
64
+ content: (0, generateUnifiedDocs_1.generateUnifiedDocs)(modelNames),
65
+ options,
66
+ operation: 'combinedDocs',
67
+ });
68
+ await (0, writeFileSafely_1.writeFileSafely)({
69
+ content: (0, generateQueryBuilderHelper_1.generateQueryBuilderHelper)(options),
70
+ options,
71
+ operation: 'queryBuilder',
72
+ });
73
+ console.log('\n═══ Generation Complete ═══');
74
+ console.log(`✓ ${modelNames.length} models`);
75
+ console.log(`✓ OpenAPI documentation generated`);
76
+ console.log(`✓ Query builder helper generated`);
77
+ console.log('');
78
+ },
79
+ });
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,+DAIiC;AACjC,gFAA4E;AAC5E,gEAAoE;AACpE,kFAA8E;AAC9E,0EAAsE;AACtE,wFAAoF;AACpF,8FAGmD;AACnD,6DAAyD;AACzD,iDAA6C;AAC7C,2CAA4C;AAE5C,IAAA,mCAAgB,EAAC;IACf,UAAU;QACR,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO;YAC3C,aAAa,EAAE,cAAc;YAC7B,UAAU,EAAE,0BAAc;SAC3B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAyB;QACxC,MAAM,qBAAqB,GAAG,IAAA,6DAA6B,EAAC,OAAO,CAAC,CAAA;QAEpE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;QAEjD,MAAM,IAAA,qBAAS,EAAC,OAAO,CAAC,CAAA;QAExB,MAAM,UAAU,GAAa,EAAE,CAAA;QAE/B,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAClD,IACE,KAAK,CAAC,aAAa;gBACnB,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EAC7C,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,IAAI,kBAAkB,CAAC,CAAA;gBACxD,SAAQ;YACV,CAAC;YAED,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAE3B,MAAM,kBAAkB,GAAG,IAAA,qDAAqB,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAErE,MAAM,IAAA,iCAAe,EAAC;gBACpB,OAAO,EAAE,IAAA,+CAAsB,EAAC;oBAC9B,KAAK,EAAE,KAAmB;oBAC1B,qBAAqB;iBACtB,CAAC;gBACF,OAAO;gBACP,KAAK,EAAE,KAAmB;gBAC1B,SAAS,EAAE,UAAU;aACtB,CAAC,CAAA;YAEF,MAAM,IAAA,iCAAe,EAAC;gBACpB,OAAO,EAAE,IAAA,uCAAsB,EAAC;oBAC9B,KAAK,EAAE,KAAmB;oBAC1B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAA6B;oBAC3D,kBAAkB;iBACnB,CAAC;gBACF,OAAO;gBACP,KAAK,EAAE,KAAmB;gBAC1B,SAAS,EAAE,QAAQ;aACpB,CAAC,CAAA;YAEF,MAAM,IAAA,iCAAe,EAAC;gBACpB,OAAO,EAAE,IAAA,iDAAuB,EAAC;oBAC/B,KAAK,EAAE,KAAmB;oBAC1B,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAA6B;iBAC5D,CAAC;gBACF,OAAO;gBACP,KAAK,EAAE,KAAmB;gBAC1B,SAAS,EAAE,MAAM;aAClB,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,IAAA,iCAAe,EAAC;YACpB,OAAO,EAAE,IAAA,yCAAmB,EAAC,UAAU,CAAC;YACxC,OAAO;YACP,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAA;QAEF,MAAM,IAAA,iCAAe,EAAC;YACpB,OAAO,EAAE,IAAA,uDAA0B,EAAC,OAAO,CAAC;YAC5C,OAAO;YACP,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAA;QAEF,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAA;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,MAAM,SAAS,CAAC,CAAA;QAC5C,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;QAChD,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAA;QAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { GeneratorOptions } from '@prisma/generator-helper';
2
+ export interface CopyFilesConfig {
3
+ includeCacheUtils?: boolean;
4
+ includeValidatorUtils?: boolean;
5
+ }
6
+ export declare function copyFiles(options: GeneratorOptions, config?: CopyFilesConfig): Promise<void>;
@@ -1,26 +1,128 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
5
35
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.copyFiles = void 0;
7
- const promises_1 = __importDefault(require("fs/promises"));
8
- const path_1 = __importDefault(require("path"));
9
- const copyFiles = async (options, destPath) => {
10
- var _a;
11
- const sourceDir = path_1.default.join(__dirname.replace('dist', 'src'), '..', 'copy');
12
- const destinationDir = destPath || ((_a = options.generator.output) === null || _a === void 0 ? void 0 : _a.value);
13
- const files = await promises_1.default.readdir(sourceDir);
14
- for (const file of files) {
15
- if (file.endsWith('.spec.ts')) {
16
- continue;
36
+ exports.copyFiles = copyFiles;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ async function copyFiles(options, config) {
40
+ const copyConfig = config || {};
41
+ const outputPath = options.generator.output?.value;
42
+ if (!outputPath)
43
+ return;
44
+ const srcDir = path.join(__dirname, '..', '..', 'src', 'copy');
45
+ const baseFiles = [
46
+ 'routeConfig.ts',
47
+ 'parseQueryParams.ts',
48
+ 'buildModelOpenApi.ts',
49
+ 'operationDefinitions.ts',
50
+ 'misc.ts',
51
+ ];
52
+ let allCopied = true;
53
+ console.log(`Copying utility files to: ${outputPath}`);
54
+ for (const file of baseFiles) {
55
+ const ok = await copyFile(srcDir, outputPath, file, { required: true });
56
+ if (!ok)
57
+ allCopied = false;
58
+ }
59
+ if (copyConfig.includeCacheUtils) {
60
+ const ok = await copyFile(srcDir, outputPath, 'cacheManager.ts', {
61
+ required: true,
62
+ });
63
+ if (!ok)
64
+ allCopied = false;
65
+ }
66
+ if (copyConfig.includeValidatorUtils) {
67
+ const ok = await copyFile(srcDir, outputPath, 'inputValidator.ts', {
68
+ required: true,
69
+ });
70
+ if (!ok)
71
+ allCopied = false;
72
+ }
73
+ const clientDir = path.join(outputPath, 'client');
74
+ if (!fs.existsSync(clientDir)) {
75
+ fs.mkdirSync(clientDir, { recursive: true });
76
+ }
77
+ const clientSrcDir = path.join(__dirname, '..', '..', 'src', 'client');
78
+ const clientOk = await copyFile(clientSrcDir, clientDir, 'encodeQueryParams.ts', {
79
+ required: true,
80
+ importRewrites: [{ from: '../copy/misc', to: '../misc' }],
81
+ });
82
+ if (!clientOk)
83
+ allCopied = false;
84
+ if (allCopied) {
85
+ console.log(`✓ Utility files copied successfully`);
86
+ }
87
+ else {
88
+ throw new Error('One or more required utility files could not be copied. Generation aborted.');
89
+ }
90
+ }
91
+ async function copyFile(srcDir, destDir, filename, options) {
92
+ const srcPath = path.join(srcDir, filename);
93
+ const destPath = path.join(destDir, filename);
94
+ if (!fs.existsSync(srcPath)) {
95
+ if (options?.required) {
96
+ console.error(`✗ Required source file not found: ${srcPath}`);
97
+ return false;
17
98
  }
18
- const sourceFile = path_1.default.join(sourceDir, file);
19
- const destinationFile = path_1.default.join(destinationDir, file);
20
- await promises_1.default.mkdir(path_1.default.dirname(destinationFile), { recursive: true });
21
- await promises_1.default.copyFile(sourceFile, destinationFile);
99
+ console.warn(`⚠️ Source file not found: ${srcPath}`);
100
+ return true;
22
101
  }
23
- console.log(`Files copied from ${sourceDir} to ${destinationDir}`);
24
- };
25
- exports.copyFiles = copyFiles;
102
+ const destDirPath = path.dirname(destPath);
103
+ if (!fs.existsSync(destDirPath)) {
104
+ fs.mkdirSync(destDirPath, { recursive: true });
105
+ }
106
+ let content = fs.readFileSync(srcPath, 'utf-8');
107
+ if (options?.importRewrites) {
108
+ for (const rewrite of options.importRewrites) {
109
+ content = content.replace(new RegExp(`from ['"]${escapeRegex(rewrite.from)}['"]`, 'g'), `from '${rewrite.to}'`);
110
+ }
111
+ }
112
+ const header = `/**
113
+ * Auto-generated by prisma-generator-express
114
+ * DO NOT EDIT MANUALLY
115
+ */
116
+
117
+ `;
118
+ if (!content.startsWith('/**')) {
119
+ content = header + content;
120
+ }
121
+ fs.writeFileSync(destPath, content);
122
+ console.log(` ✓ Copied: ${filename}`);
123
+ return true;
124
+ }
125
+ function escapeRegex(str) {
126
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
127
+ }
26
128
  //# sourceMappingURL=copyFiles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"copyFiles.js","sourceRoot":"","sources":["../../src/utils/copyFiles.ts"],"names":[],"mappings":";;;;;;AACA,2DAA4B;AAC5B,gDAAuB;AAEhB,MAAM,SAAS,GAAG,KAAK,EAC5B,OAAyB,EACzB,QAAiB,EACjB,EAAE;;IACF,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IAC3E,MAAM,cAAc,GAAG,QAAQ,KAAI,MAAA,OAAO,CAAC,SAAS,CAAC,MAAM,0CAAE,KAAM,CAAA,CAAA;IAEnE,MAAM,KAAK,GAAG,MAAM,kBAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,SAAQ;QACV,CAAC;QAED,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAC7C,MAAM,eAAe,GAAG,cAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;QAEvD,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAClE,MAAM,kBAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;IAChD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,SAAS,OAAO,cAAc,EAAE,CAAC,CAAA;AACpE,CAAC,CAAA;AAtBY,QAAA,SAAS,aAsBrB"}
1
+ {"version":3,"file":"copyFiles.js","sourceRoot":"","sources":["../../src/utils/copyFiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const capitalize: (str: string) => string;
2
+ export declare function toPascalCase(str: string): string;
@@ -0,0 +1,10 @@
1
+ import { GeneratorOptions } from '@prisma/generator-helper';
2
+ import { DMMF } from '@prisma/generator-helper';
3
+ interface WriteFileOptions {
4
+ content: string;
5
+ options: GeneratorOptions;
6
+ model?: DMMF.Model;
7
+ operation: string;
8
+ }
9
+ export declare function writeFileSafely({ content, options, model, operation, }: WriteFileOptions): Promise<void>;
10
+ export {};
@@ -1,21 +1,93 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.writeFileSafely = void 0;
7
- const promises_1 = __importDefault(require("fs/promises"));
8
- const path_1 = __importDefault(require("path"));
9
- const formatFile_1 = require("./formatFile");
10
- const writeFileSafely = async ({ model, operation, options, content, }) => {
11
- var _a;
12
- const fileName = operation === 'index' ? 'index' : `${(model === null || model === void 0 ? void 0 : model.name) || ''}${operation}`;
13
- const filePath = path_1.default.join((_a = options.generator.output) === null || _a === void 0 ? void 0 : _a.value, model ? `${model === null || model === void 0 ? void 0 : model.name}/${fileName}.ts` : `/${fileName}.ts`);
14
- console.log('filePath :>> ', filePath);
15
- await promises_1.default.mkdir(path_1.default.dirname(filePath), {
16
- recursive: true,
17
- });
18
- await promises_1.default.writeFile(filePath, await (0, formatFile_1.formatFile)(content));
19
- };
20
39
  exports.writeFileSafely = writeFileSafely;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const prettier_1 = __importDefault(require("prettier"));
43
+ let _prettierOptions;
44
+ async function getPrettierOptions() {
45
+ if (_prettierOptions !== undefined)
46
+ return _prettierOptions;
47
+ _prettierOptions = await prettier_1.default.resolveConfig(process.cwd());
48
+ return _prettierOptions;
49
+ }
50
+ async function writeFileSafely({ content, options, model, operation, }) {
51
+ const outputPath = options.generator.output?.value;
52
+ if (!outputPath) {
53
+ throw new Error('Output path not defined');
54
+ }
55
+ let filePath;
56
+ switch (operation) {
57
+ case 'cacheConfig':
58
+ filePath = path.join(outputPath, 'cacheConfig.ts');
59
+ break;
60
+ case 'types/inputs':
61
+ filePath = path.join(outputPath, 'types', 'inputs.ts');
62
+ break;
63
+ case 'combinedDocs':
64
+ filePath = path.join(outputPath, 'combinedDocs.ts');
65
+ break;
66
+ case 'queryBuilder':
67
+ filePath = path.join(outputPath, 'queryBuilder.ts');
68
+ break;
69
+ default:
70
+ if (!model) {
71
+ throw new Error(`Model required for operation: ${operation}`);
72
+ }
73
+ filePath = path.join(outputPath, model.name, `${model.name}${operation}.ts`);
74
+ }
75
+ const dirPath = path.dirname(filePath);
76
+ if (!fs.existsSync(dirPath)) {
77
+ fs.mkdirSync(dirPath, { recursive: true });
78
+ }
79
+ let formattedContent;
80
+ try {
81
+ const resolvedOptions = await getPrettierOptions();
82
+ formattedContent = await prettier_1.default.format(content, {
83
+ ...resolvedOptions,
84
+ parser: 'typescript',
85
+ });
86
+ }
87
+ catch (error) {
88
+ console.warn(`⚠️ Prettier formatting failed for ${path.basename(filePath)}, writing unformatted`);
89
+ formattedContent = content;
90
+ }
91
+ fs.writeFileSync(filePath, formattedContent);
92
+ }
21
93
  //# sourceMappingURL=writeFileSafely.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"writeFileSafely.js","sourceRoot":"","sources":["../../src/utils/writeFileSafely.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA4B;AAC5B,gDAAuB;AACvB,6CAAyC;AAGlC,MAAM,eAAe,GAAG,KAAK,EAAE,EACpC,KAAK,EACL,SAAS,EACT,OAAO,EACP,OAAO,GAMR,EAAE,EAAE;;IACH,MAAM,QAAQ,GACZ,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,KAAI,EAAE,GAAG,SAAS,EAAE,CAAA;IACtE,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CACxB,MAAA,OAAO,CAAC,SAAS,CAAC,MAAM,0CAAE,KAAM,EAChC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,IAAI,QAAQ,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,KAAK,CAC5D,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAA;IACtC,MAAM,kBAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACrC,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAA,uBAAU,EAAC,OAAO,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AAvBY,QAAA,eAAe,mBAuB3B"}
1
+ {"version":3,"file":"writeFileSafely.js","sourceRoot":"","sources":["../../src/utils/writeFileSafely.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,0CA6DC;AAhFD,uCAAwB;AACxB,2CAA4B;AAC5B,wDAA+B;AAS/B,IAAI,gBAAqD,CAAA;AAEzD,KAAK,UAAU,kBAAkB;IAC/B,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAA;IAC3D,gBAAgB,GAAG,MAAM,kBAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9D,OAAO,gBAAgB,CAAA;AACzB,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,EACpC,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,GACQ;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAA;IAClD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,QAAgB,CAAA;IAEpB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,aAAa;YAChB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAA;YAClD,MAAK;QAEP,KAAK,cAAc;YACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;YACtD,MAAK;QAEP,KAAK,cAAc;YACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;YACnD,MAAK;QAEP,KAAK,cAAc;YACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;YACnD,MAAK;QAEP;YACE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAA;YAC/D,CAAC;YACD,QAAQ,GAAG,IAAI,CAAC,IAAI,CAClB,UAAU,EACV,KAAK,CAAC,IAAI,EACV,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,KAAK,CAC/B,CAAA;IACL,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC5C,CAAC;IAED,IAAI,gBAAwB,CAAA;IAC5B,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,kBAAkB,EAAE,CAAA;QAClD,gBAAgB,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;YAChD,GAAG,eAAe;YAClB,MAAM,EAAE,YAAY;SACrB,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CACV,sCAAsC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CACrF,CAAA;QACD,gBAAgB,GAAG,OAAO,CAAA;IAC5B,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;AAC9C,CAAC"}
package/package.json CHANGED
@@ -1,47 +1,63 @@
1
1
  {
2
2
  "name": "prisma-generator-express",
3
- "description": "Prisma generator of Express CRUD API",
4
- "version": "1.18.0",
5
- "main": "dist/generator.js",
3
+ "description": "Prisma generator for Hono CRUD API with OpenAPI documentation",
4
+ "version": "1.19.0",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
6
7
  "license": "MIT",
7
8
  "bin": "dist/bin.js",
8
9
  "engines": {
9
- "node": ">=22.0"
10
+ "node": ">=20.0"
10
11
  },
11
12
  "scripts": {
12
- "start": "node dist/bin.js",
13
+ "build": "rm -rf dist && npx tsc",
13
14
  "dev": "npx tsc -w",
14
- "build": "npx tsc",
15
- "prepack": "yarn build",
16
- "test": "jest",
17
- "coverage": "jest --coverage",
18
- "prepublishOnly": "node copy.js "
15
+ "start": "node dist/bin.js",
16
+ "test": "vitest",
17
+ "coverage": "vitest --coverage",
18
+ "prepack": "npm run build",
19
+ "prepublishOnly": "node copy.js"
19
20
  },
20
21
  "dependencies": {
21
- "@prisma/client": "7.5.0",
22
22
  "@prisma/generator-helper": "7.5.0",
23
- "@prisma/sdk": "4.0.0",
24
- "express": "^5.2.1",
25
- "lodash": "^4.17.23",
26
- "prettier": "3.8.1",
27
- "zod": "^4.3.6"
23
+ "prettier": "3.6.2"
24
+ },
25
+ "peerDependencies": {
26
+ "@prisma/client": ">=6.0.0",
27
+ "express": ">=4.0.0",
28
+ "prisma-guard": ">=1.0.0",
29
+ "prisma-query-builder-ui": ">=1.1.0",
30
+ "prisma-sql": ">=1.0.0"
31
+ },
32
+ "peerDependenciesMeta": {
33
+ "prisma-guard": {
34
+ "optional": true
35
+ },
36
+ "prisma-query-builder-ui": {
37
+ "optional": true
38
+ },
39
+ "prisma-sql": {
40
+ "optional": true
41
+ }
28
42
  },
29
43
  "devDependencies": {
44
+ "@prisma/client": "7.5.0",
30
45
  "@prisma/internals": "^7.5.0",
31
- "@semantic-release/changelog": "^6.0.3",
32
- "@semantic-release/git": "^10.0.1",
33
- "@types/express": "^5.0.6",
34
- "@types/jest": "30.0.0",
35
- "@types/lodash": "^4.17.24",
36
- "@types/node": "25.5.0",
46
+ "@types/better-sqlite3": "^7.6.13",
47
+ "@types/node": "24.7.2",
37
48
  "@types/prettier": "3.0.0",
38
- "jest": "30.3.0",
49
+ "better-sqlite3": "^12.5.0",
50
+ "express": "^5.2.1",
51
+ "fast-xml-parser": "^5.3.3",
52
+ "lru-cache": "^11.2.4",
53
+ "pino": "^10.1.0",
54
+ "pino-pretty": "^13.0.0",
39
55
  "prisma": "7.5.0",
40
- "semantic-release": "^25.0.3",
41
- "ts-jest": "29.4.6",
42
- "typescript": "5.9.3"
56
+ "semantic-release": "^24.2.9",
57
+ "typescript": "5.9.3",
58
+ "vitest-mock-extended": "^3.1.0"
43
59
  },
44
- "homepage": "https://github.com/multipliedtwice/prisma-generator-express/blob/master/README.md",
60
+ "homepage": "https://github.com/multipliedtwice/prisma-generator-express",
45
61
  "repository": {
46
62
  "type": "git",
47
63
  "url": "git+https://github.com/multipliedtwice/prisma-generator-express.git"
@@ -55,16 +71,33 @@
55
71
  ],
56
72
  "files": [
57
73
  "dist/**/*",
58
- "src/**/*",
59
- "../../README.md",
60
- "../../LICENSE"
74
+ "src/copy/**/*",
75
+ "src/client/**/*",
76
+ "!**/.DS_Store",
77
+ "README.md",
78
+ "LICENSE"
61
79
  ],
62
80
  "release": {
63
81
  "branches": [
64
82
  "master"
65
83
  ],
66
84
  "plugins": [
67
- "@semantic-release/commit-analyzer",
85
+ [
86
+ "@semantic-release/commit-analyzer",
87
+ {
88
+ "preset": "angular",
89
+ "releaseRules": [
90
+ {
91
+ "type": "chore",
92
+ "release": "minor"
93
+ },
94
+ {
95
+ "type": "refactor",
96
+ "release": "minor"
97
+ }
98
+ ]
99
+ }
100
+ ],
68
101
  "@semantic-release/release-notes-generator",
69
102
  [
70
103
  "@semantic-release/changelog",
@@ -0,0 +1,56 @@
1
+ import { isObject } from '../copy/misc'
2
+
3
+ /**
4
+ * Frontend query encoder for prisma-generator-hono
5
+ *
6
+ * Encodes complex Prisma query structures as JSON strings in query params.
7
+ * Objects and arrays are JSON-stringified. Primitives are encoded directly.
8
+ *
9
+ * @example
10
+ * const params = encodeQueryParams({
11
+ * where: { OR: [{ status: 'active' }, { featured: true }] },
12
+ * take: 10
13
+ * })
14
+ * // where=%7B%22OR%22%3A...&take=10
15
+ * fetch(`/api/posts?${params}`)
16
+ */
17
+
18
+ function replacer(_key: string, value: unknown): unknown {
19
+ if (typeof value === 'bigint') {
20
+ return value.toString()
21
+ }
22
+ return value
23
+ }
24
+
25
+ export const encodeQueryParams = (params: Record<string, unknown>): string => {
26
+ const entries: string[] = []
27
+
28
+ for (const [key, value] of Object.entries(params)) {
29
+ if (value === undefined) continue
30
+
31
+ if (value === null) {
32
+ entries.push(`${encodeURIComponent(key)}=null`)
33
+ continue
34
+ }
35
+
36
+ if (typeof value === 'bigint') {
37
+ entries.push(
38
+ `${encodeURIComponent(key)}=${encodeURIComponent(value.toString())}`,
39
+ )
40
+ continue
41
+ }
42
+
43
+ if (Array.isArray(value) || isObject(value)) {
44
+ entries.push(
45
+ `${encodeURIComponent(key)}=${encodeURIComponent(JSON.stringify(value, replacer))}`,
46
+ )
47
+ continue
48
+ }
49
+
50
+ entries.push(
51
+ `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`,
52
+ )
53
+ }
54
+
55
+ return entries.join('&')
56
+ }