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.
- package/README.md +444 -12
- package/dist/generators/generateOperationCore.d.ts +3 -1
- package/dist/generators/generateOperationCore.js +266 -160
- package/dist/generators/generateOperationCore.js.map +1 -1
- package/dist/generators/generateRouteConfigType.d.ts +3 -1
- package/dist/generators/generateRouteConfigType.js +36 -31
- package/dist/generators/generateRouteConfigType.js.map +1 -1
- package/dist/generators/generateRouter.d.ts +4 -2
- package/dist/generators/generateRouter.js +186 -132
- package/dist/generators/generateRouter.js.map +1 -1
- package/dist/generators/generateRouterFastify.d.ts +3 -1
- package/dist/generators/generateRouterFastify.js +12 -10
- package/dist/generators/generateRouterFastify.js.map +1 -1
- package/dist/generators/generateRouterHono.d.ts +3 -1
- package/dist/generators/generateRouterHono.js +12 -9
- package/dist/generators/generateRouterHono.js.map +1 -1
- package/dist/generators/generateUnifiedDocs.d.ts +2 -1
- package/dist/generators/generateUnifiedDocs.js +6 -4
- package/dist/generators/generateUnifiedDocs.js.map +1 -1
- package/dist/index.js +16 -21
- package/dist/index.js.map +1 -1
- package/dist/utils/copyFiles.d.ts +2 -1
- package/dist/utils/copyFiles.js +39 -34
- package/dist/utils/copyFiles.js.map +1 -1
- package/dist/utils/importExt.d.ts +2 -0
- package/dist/utils/importExt.js +11 -0
- package/dist/utils/importExt.js.map +1 -0
- package/dist/utils/resolveImportStyle.d.ts +3 -0
- package/dist/utils/resolveImportStyle.js +211 -0
- package/dist/utils/resolveImportStyle.js.map +1 -0
- package/dist/utils/writeFileSafely.js +6 -9
- package/dist/utils/writeFileSafely.js.map +1 -1
- package/package.json +1 -1
- package/src/copy/routeConfig.express.ts +39 -5
- package/src/copy/routeConfig.fastify.ts +8 -4
- package/src/copy/routeConfig.hono.ts +7 -3
- package/src/copy/routeConfig.ts +42 -2
- package/src/generators/generateOperationCore.ts +273 -169
- package/src/generators/generateRouteConfigType.ts +43 -36
- package/src/generators/generateRouter.ts +189 -133
- package/src/generators/generateRouterFastify.ts +14 -9
- package/src/generators/generateRouterHono.ts +14 -8
- package/src/generators/generateUnifiedDocs.ts +8 -3
- package/src/index.ts +25 -47
- package/src/utils/copyFiles.ts +45 -45
- package/src/utils/importExt.ts +7 -0
- package/src/utils/resolveImportStyle.ts +187 -0
- 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(
|
|
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
|
|
85
|
-
console.warn(
|
|
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,
|
|
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.
|
|
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 {
|
|
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
|
|
16
|
-
|
|
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 {
|
|
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 {
|
|
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>
|
package/src/copy/routeConfig.ts
CHANGED
|
@@ -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<
|
|
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>
|