prisma-generator-express 1.40.0 → 1.42.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 (48) hide show
  1. package/README.md +444 -12
  2. package/dist/generators/generateOperationCore.d.ts +3 -1
  3. package/dist/generators/generateOperationCore.js +266 -160
  4. package/dist/generators/generateOperationCore.js.map +1 -1
  5. package/dist/generators/generateRouteConfigType.d.ts +3 -1
  6. package/dist/generators/generateRouteConfigType.js +36 -31
  7. package/dist/generators/generateRouteConfigType.js.map +1 -1
  8. package/dist/generators/generateRouter.d.ts +4 -2
  9. package/dist/generators/generateRouter.js +186 -132
  10. package/dist/generators/generateRouter.js.map +1 -1
  11. package/dist/generators/generateRouterFastify.d.ts +3 -1
  12. package/dist/generators/generateRouterFastify.js +12 -10
  13. package/dist/generators/generateRouterFastify.js.map +1 -1
  14. package/dist/generators/generateRouterHono.d.ts +3 -1
  15. package/dist/generators/generateRouterHono.js +12 -9
  16. package/dist/generators/generateRouterHono.js.map +1 -1
  17. package/dist/generators/generateUnifiedDocs.d.ts +2 -1
  18. package/dist/generators/generateUnifiedDocs.js +6 -4
  19. package/dist/generators/generateUnifiedDocs.js.map +1 -1
  20. package/dist/index.js +16 -21
  21. package/dist/index.js.map +1 -1
  22. package/dist/utils/copyFiles.d.ts +2 -1
  23. package/dist/utils/copyFiles.js +39 -34
  24. package/dist/utils/copyFiles.js.map +1 -1
  25. package/dist/utils/importExt.d.ts +2 -0
  26. package/dist/utils/importExt.js +11 -0
  27. package/dist/utils/importExt.js.map +1 -0
  28. package/dist/utils/resolveImportStyle.d.ts +3 -0
  29. package/dist/utils/resolveImportStyle.js +211 -0
  30. package/dist/utils/resolveImportStyle.js.map +1 -0
  31. package/dist/utils/writeFileSafely.js +6 -9
  32. package/dist/utils/writeFileSafely.js.map +1 -1
  33. package/package.json +1 -1
  34. package/src/copy/routeConfig.express.ts +39 -5
  35. package/src/copy/routeConfig.fastify.ts +8 -4
  36. package/src/copy/routeConfig.hono.ts +7 -3
  37. package/src/copy/routeConfig.ts +42 -2
  38. package/src/generators/generateOperationCore.ts +273 -169
  39. package/src/generators/generateRouteConfigType.ts +43 -36
  40. package/src/generators/generateRouter.ts +189 -133
  41. package/src/generators/generateRouterFastify.ts +14 -9
  42. package/src/generators/generateRouterHono.ts +14 -8
  43. package/src/generators/generateUnifiedDocs.ts +8 -3
  44. package/src/index.ts +25 -47
  45. package/src/utils/copyFiles.ts +45 -45
  46. package/src/utils/importExt.ts +7 -0
  47. package/src/utils/resolveImportStyle.ts +187 -0
  48. package/src/utils/writeFileSafely.ts +6 -22
@@ -0,0 +1,211 @@
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
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.resolveImportStyle = resolveImportStyle;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const VALID_OVERRIDES = new Set(['auto', 'none', 'js', 'ts']);
40
+ const NODE_MODULE_KEYWORDS = new Set(['node16', 'node18', 'nodenext']);
41
+ function stripJsonComments(input) {
42
+ let out = '';
43
+ let i = 0;
44
+ let inString = false;
45
+ let stringChar = '';
46
+ while (i < input.length) {
47
+ const c = input[i];
48
+ const next = input[i + 1];
49
+ if (inString) {
50
+ out += c;
51
+ if (c === '\\' && i + 1 < input.length) {
52
+ out += input[i + 1];
53
+ i += 2;
54
+ continue;
55
+ }
56
+ if (c === stringChar)
57
+ inString = false;
58
+ i++;
59
+ continue;
60
+ }
61
+ if (c === '"' || c === "'") {
62
+ inString = true;
63
+ stringChar = c;
64
+ out += c;
65
+ i++;
66
+ continue;
67
+ }
68
+ if (c === '/' && next === '/') {
69
+ while (i < input.length && input[i] !== '\n')
70
+ i++;
71
+ continue;
72
+ }
73
+ if (c === '/' && next === '*') {
74
+ i += 2;
75
+ while (i < input.length && !(input[i] === '*' && input[i + 1] === '/'))
76
+ i++;
77
+ i += 2;
78
+ continue;
79
+ }
80
+ out += c;
81
+ i++;
82
+ }
83
+ return out.replace(/,\s*(?=[\]}])/g, '');
84
+ }
85
+ function findUpwards(startDir, filename) {
86
+ let dir = path.resolve(startDir);
87
+ const root = path.parse(dir).root;
88
+ let result = null;
89
+ let stop = false;
90
+ while (!stop) {
91
+ const candidate = path.join(dir, filename);
92
+ if (fs.existsSync(candidate)) {
93
+ result = candidate;
94
+ stop = true;
95
+ break;
96
+ }
97
+ if (dir === root) {
98
+ stop = true;
99
+ break;
100
+ }
101
+ const parent = path.dirname(dir);
102
+ if (parent === dir) {
103
+ stop = true;
104
+ break;
105
+ }
106
+ dir = parent;
107
+ }
108
+ return result;
109
+ }
110
+ function resolveExtendsTarget(extendsValue, fromFile) {
111
+ const fromDir = path.dirname(fromFile);
112
+ if (extendsValue.startsWith('.') || path.isAbsolute(extendsValue)) {
113
+ const direct = path.resolve(fromDir, extendsValue);
114
+ if (fs.existsSync(direct) && fs.statSync(direct).isFile())
115
+ return direct;
116
+ const withExt = direct + '.json';
117
+ if (fs.existsSync(withExt))
118
+ return withExt;
119
+ const asIndex = path.join(direct, 'tsconfig.json');
120
+ if (fs.existsSync(asIndex))
121
+ return asIndex;
122
+ return null;
123
+ }
124
+ try {
125
+ return require.resolve(extendsValue, { paths: [fromDir] });
126
+ }
127
+ catch {
128
+ try {
129
+ return require.resolve(extendsValue + '/tsconfig.json', { paths: [fromDir] });
130
+ }
131
+ catch {
132
+ return null;
133
+ }
134
+ }
135
+ }
136
+ function readTsConfig(filePath, seen = new Set()) {
137
+ const abs = path.resolve(filePath);
138
+ if (seen.has(abs))
139
+ return {};
140
+ seen.add(abs);
141
+ let parsed;
142
+ try {
143
+ const raw = fs.readFileSync(abs, 'utf-8');
144
+ parsed = JSON.parse(stripJsonComments(raw));
145
+ }
146
+ catch {
147
+ return {};
148
+ }
149
+ const extendsList = Array.isArray(parsed.extends)
150
+ ? parsed.extends
151
+ : parsed.extends
152
+ ? [parsed.extends]
153
+ : [];
154
+ let merged = {};
155
+ for (const ext of extendsList) {
156
+ const target = resolveExtendsTarget(ext, abs);
157
+ if (target)
158
+ merged = { ...merged, ...readTsConfig(target, seen) };
159
+ }
160
+ if (parsed.compilerOptions)
161
+ merged = { ...merged, ...parsed.compilerOptions };
162
+ return merged;
163
+ }
164
+ function readPackageType(startDir) {
165
+ const pkgPath = findUpwards(startDir, 'package.json');
166
+ if (!pkgPath)
167
+ return null;
168
+ try {
169
+ const json = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
170
+ return typeof json.type === 'string' ? json.type : null;
171
+ }
172
+ catch {
173
+ return null;
174
+ }
175
+ }
176
+ function resolveImportStyle(options) {
177
+ const config = (options.generator.config || {});
178
+ const raw = typeof config.importStyle === 'string'
179
+ ? config.importStyle.toLowerCase()
180
+ : 'auto';
181
+ if (!VALID_OVERRIDES.has(raw)) {
182
+ console.warn('[prisma-generator-express] Invalid importStyle "' + config.importStyle +
183
+ '". Expected one of: auto, none, js, ts. Falling back to auto.');
184
+ }
185
+ else if (raw !== 'auto') {
186
+ return raw;
187
+ }
188
+ const outputPath = options.generator.output?.value;
189
+ const schemaDir = options.schemaPath ? path.dirname(options.schemaPath) : process.cwd();
190
+ const startDir = outputPath ? path.dirname(outputPath) : schemaDir;
191
+ const tsconfigPath = findUpwards(startDir, 'tsconfig.json') ||
192
+ findUpwards(schemaDir, 'tsconfig.json');
193
+ const compilerOptions = tsconfigPath
194
+ ? readTsConfig(tsconfigPath)
195
+ : {};
196
+ if (compilerOptions.allowImportingTsExtensions === true)
197
+ return 'ts';
198
+ const moduleVal = String(compilerOptions.module ?? '').toLowerCase();
199
+ const moduleResolution = String(compilerOptions.moduleResolution ?? '').toLowerCase();
200
+ if (NODE_MODULE_KEYWORDS.has(moduleVal) || NODE_MODULE_KEYWORDS.has(moduleResolution)) {
201
+ return 'js';
202
+ }
203
+ if (moduleResolution === 'bundler' || moduleResolution === 'classic' || moduleResolution === 'node') {
204
+ return 'none';
205
+ }
206
+ const pkgType = readPackageType(startDir) || readPackageType(schemaDir);
207
+ if (pkgType === 'module')
208
+ return 'js';
209
+ return 'none';
210
+ }
211
+ //# sourceMappingURL=resolveImportStyle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveImportStyle.js","sourceRoot":"","sources":["../../src/utils/resolveImportStyle.ts"],"names":[],"mappings":"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"}
@@ -49,9 +49,8 @@ async function getPrettierOptions() {
49
49
  }
50
50
  async function writeFileSafely({ content, options, model, operation, }) {
51
51
  const outputPath = options.generator.output?.value;
52
- if (!outputPath) {
52
+ if (!outputPath)
53
53
  throw new Error('Output path not defined');
54
- }
55
54
  let filePath;
56
55
  switch (operation) {
57
56
  case 'combinedDocs':
@@ -64,15 +63,13 @@ async function writeFileSafely({ content, options, model, operation, }) {
64
63
  filePath = path.join(outputPath, 'operationRuntime.ts');
65
64
  break;
66
65
  default:
67
- if (!model) {
68
- throw new Error(`Model required for operation: ${operation}`);
69
- }
66
+ if (!model)
67
+ throw new Error('Model required for operation: ' + operation);
70
68
  filePath = path.join(outputPath, model.name, `${model.name}${operation}.ts`);
71
69
  }
72
70
  const dirPath = path.dirname(filePath);
73
- if (!fs.existsSync(dirPath)) {
71
+ if (!fs.existsSync(dirPath))
74
72
  fs.mkdirSync(dirPath, { recursive: true });
75
- }
76
73
  let formattedContent;
77
74
  try {
78
75
  const resolvedOptions = await getPrettierOptions();
@@ -81,8 +78,8 @@ async function writeFileSafely({ content, options, model, operation, }) {
81
78
  parser: 'typescript',
82
79
  });
83
80
  }
84
- catch (error) {
85
- console.warn(`⚠️ Prettier formatting failed for ${path.basename(filePath)}, writing unformatted`);
81
+ catch {
82
+ console.warn('⚠️ Prettier formatting failed for ' + path.basename(filePath) + ', writing unformatted');
86
83
  formattedContent = content;
87
84
  }
88
85
  fs.writeFileSync(filePath, formattedContent);
@@ -1 +1 @@
1
- {"version":3,"file":"writeFileSafely.js","sourceRoot":"","sources":["../../src/utils/writeFileSafely.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,0CAyDC;AA5ED,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,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,KAAK,kBAAkB;YACrB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAA;YACvD,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"}
1
+ {"version":3,"file":"writeFileSafely.js","sourceRoot":"","sources":["../../src/utils/writeFileSafely.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,0CAyCC;AA5DD,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;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAE3D,IAAI,QAAgB,CAAA;IACpB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,cAAc;YACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;YACnD,MAAK;QACP,KAAK,cAAc;YACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;YACnD,MAAK;QACP,KAAK,kBAAkB;YACrB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAA;YACvD,MAAK;QACP;YACE,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,SAAS,CAAC,CAAA;YACzE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,KAAK,CAAC,CAAA;IAChF,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEvE,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,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,qCAAqC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,uBAAuB,CAAC,CAAA;QACvG,gBAAgB,GAAG,OAAO,CAAA;IAC5B,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;AAC9C,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "prisma-generator-express",
3
3
  "description": "Prisma generator for Express, Fastify, and Hono CRUD APIs with OpenAPI documentation",
4
- "version": "1.40.0",
4
+ "version": "1.42.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
@@ -1,16 +1,50 @@
1
- import { Request, RequestHandler } from 'express'
2
- import {
1
+ import type { Request, RequestHandler } from 'express'
2
+ import type {
3
3
  BaseOperationConfig,
4
4
  BaseRouteConfig,
5
+ ProgressiveStage,
6
+ ProgressiveVariantConfig,
5
7
  QueryBuilderConfig,
6
8
  OpenApiServerConfig,
7
9
  OpenApiSecuritySchemeConfig,
8
10
  } from './routeConfig'
9
11
 
10
- export type { QueryBuilderConfig, OpenApiServerConfig, OpenApiSecuritySchemeConfig }
12
+ export type {
13
+ QueryBuilderConfig,
14
+ OpenApiServerConfig,
15
+ OpenApiSecuritySchemeConfig,
16
+ }
17
+
18
+ export type {
19
+ ProgressivePatch,
20
+ ProgressiveStopResult,
21
+ ProgressiveStageResult,
22
+ ProgressiveStageContext,
23
+ ProgressiveStage,
24
+ ProgressiveVariantConfig,
25
+ } from './routeConfig'
11
26
 
12
27
  export type OperationConfig<TShape = Record<string, any>> =
13
28
  BaseOperationConfig<RequestHandler, TShape>
14
29
 
15
- export type RouteConfig<TShape = Record<string, any>> =
16
- BaseRouteConfig<RequestHandler, Request, TShape>
30
+ export type ReadOperationConfig<TShape = Record<string, any>, TCtx = unknown> =
31
+ BaseOperationConfig<RequestHandler, TShape> & {
32
+ progressive?: Record<string, ProgressiveVariantConfig>
33
+ progressiveStages?: Record<string, ProgressiveStage<TCtx>>
34
+ }
35
+
36
+ type ReadOperationOverrides<TShape, TCtx> = {
37
+ findFirst?: ReadOperationConfig<TShape, TCtx>
38
+ findFirstOrThrow?: ReadOperationConfig<TShape, TCtx>
39
+ findUnique?: ReadOperationConfig<TShape, TCtx>
40
+ findUniqueOrThrow?: ReadOperationConfig<TShape, TCtx>
41
+ findMany?: ReadOperationConfig<TShape, TCtx>
42
+ findManyPaginated?: ReadOperationConfig<TShape, TCtx>
43
+ count?: ReadOperationConfig<TShape, TCtx>
44
+ aggregate?: ReadOperationConfig<TShape, TCtx>
45
+ groupBy?: ReadOperationConfig<TShape, TCtx>
46
+ }
47
+
48
+ export type RouteConfig<TShape = Record<string, any>, TCtx = unknown> =
49
+ BaseRouteConfig<RequestHandler, Request, TShape, TCtx> &
50
+ ReadOperationOverrides<TShape, TCtx>
@@ -1,5 +1,5 @@
1
1
  import type { FastifyRequest, FastifyReply } from 'fastify'
2
- import {
2
+ import type {
3
3
  BaseOperationConfig,
4
4
  BaseRouteConfig,
5
5
  QueryBuilderConfig,
@@ -7,7 +7,11 @@ import {
7
7
  OpenApiSecuritySchemeConfig,
8
8
  } from './routeConfig'
9
9
 
10
- export type { QueryBuilderConfig, OpenApiServerConfig, OpenApiSecuritySchemeConfig }
10
+ export type {
11
+ QueryBuilderConfig,
12
+ OpenApiServerConfig,
13
+ OpenApiSecuritySchemeConfig,
14
+ }
11
15
 
12
16
  export type FastifyHookHandler = (
13
17
  request: FastifyRequest,
@@ -17,5 +21,5 @@ export type FastifyHookHandler = (
17
21
  export type OperationConfig<TShape = Record<string, any>> =
18
22
  BaseOperationConfig<FastifyHookHandler, TShape>
19
23
 
20
- export type RouteConfig<TShape = Record<string, any>> =
21
- BaseRouteConfig<FastifyHookHandler, FastifyRequest, TShape>
24
+ export type RouteConfig<TShape = Record<string, any>, TCtx = unknown> =
25
+ BaseRouteConfig<FastifyHookHandler, FastifyRequest, TShape, TCtx>
@@ -7,7 +7,11 @@ import type {
7
7
  OpenApiSecuritySchemeConfig,
8
8
  } from './routeConfig'
9
9
 
10
- export type { QueryBuilderConfig, OpenApiServerConfig, OpenApiSecuritySchemeConfig }
10
+ export type {
11
+ QueryBuilderConfig,
12
+ OpenApiServerConfig,
13
+ OpenApiSecuritySchemeConfig,
14
+ }
11
15
 
12
16
  export type HonoHookHandler<Env extends { Variables: any } = any> = (
13
17
  c: Context<Env>,
@@ -17,5 +21,5 @@ export type HonoHookHandler<Env extends { Variables: any } = any> = (
17
21
  export type OperationConfig<TShape = Record<string, any>> =
18
22
  BaseOperationConfig<HonoHookHandler, TShape>
19
23
 
20
- export type RouteConfig<TShape = Record<string, any>> =
21
- BaseRouteConfig<HonoHookHandler, Context, TShape>
24
+ export type RouteConfig<TShape = Record<string, any>, TCtx = unknown> =
25
+ BaseRouteConfig<HonoHookHandler, Context, TShape, TCtx>
@@ -20,13 +20,53 @@ export interface OpenApiSecuritySchemeConfig {
20
20
  description?: string
21
21
  }
22
22
 
23
+ export type ProgressivePatch = {
24
+ key: string
25
+ value: unknown
26
+ }
27
+
28
+ export type ProgressiveStopResult<T = unknown> = {
29
+ stop: true
30
+ data: T
31
+ }
32
+
33
+ export type ProgressiveStageResult<T = unknown> =
34
+ | void
35
+ | ProgressivePatch
36
+ | ProgressivePatch[]
37
+ | ProgressiveStopResult<T>
38
+
39
+ export type ProgressiveStageContext<TContext = unknown, TPrisma = any> = {
40
+ ctx: TContext
41
+ req: any
42
+ res: any
43
+ prisma: TPrisma
44
+ variant: string
45
+ accumulated: Record<string, unknown>
46
+ signal: AbortSignal
47
+ }
48
+
49
+ export type ProgressiveStage<TContext = unknown, TPrisma = any, T = unknown> = (
50
+ context: ProgressiveStageContext<TContext, TPrisma>,
51
+ ) => Promise<ProgressiveStageResult<T>>
52
+
53
+ export type ProgressiveVariantConfig = {
54
+ enabled?: boolean
55
+ stages: string[]
56
+ }
57
+
23
58
  export interface BaseOperationConfig<HookHandler, TShape = Record<string, any>> {
24
59
  before?: HookHandler[]
25
60
  after?: HookHandler[]
26
61
  shape?: TShape
27
62
  }
28
63
 
29
- export interface BaseRouteConfig<HookHandler, RequestType, TShape = Record<string, any>> {
64
+ export interface BaseRouteConfig<
65
+ HookHandler,
66
+ RequestType,
67
+ TShape = Record<string, any>,
68
+ TCtx = unknown,
69
+ > {
30
70
  enableAll?: boolean
31
71
  addModelPrefix?: boolean
32
72
  customUrlPrefix?: string
@@ -44,6 +84,7 @@ export interface BaseRouteConfig<HookHandler, RequestType, TShape = Record<strin
44
84
  resolveVariant?: (request: RequestType) => string | undefined
45
85
  variantHeader?: string
46
86
  }
87
+ resolveContext?: (request: RequestType) => TCtx | Promise<TCtx>
47
88
  queryBuilder?: QueryBuilderConfig | false
48
89
  pagination?: {
49
90
  defaultLimit?: number
@@ -71,5 +112,4 @@ export interface BaseRouteConfig<HookHandler, RequestType, TShape = Record<strin
71
112
  }
72
113
 
73
114
  export type OperationConfig = BaseOperationConfig<any>
74
-
75
115
  export type RouteConfig = BaseRouteConfig<any, any>