prisma-generator-express 1.22.0 → 1.24.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/dist/generators/generateUnifiedDocs.js +16 -16
- package/dist/generators/generateUnifiedHandler.js +15 -7
- package/dist/generators/generateUnifiedHandler.js.map +1 -1
- package/dist/generators/generateUnifiedScalarUI.js +10 -10
- package/dist/generators/generateUnifiedScalarUI.js.map +1 -1
- package/dist/utils/copyFiles.d.ts +1 -5
- package/dist/utils/copyFiles.js +2 -17
- package/dist/utils/copyFiles.js.map +1 -1
- package/dist/utils/strings.d.ts +1 -1
- package/dist/utils/strings.js +2 -2
- package/dist/utils/strings.js.map +1 -1
- package/package.json +3 -6
- package/src/copy/buildModelOpenApi.ts +8 -1
- package/src/copy/parseQueryParams.ts +1 -1
- package/src/generators/generateUnifiedDocs.ts +16 -16
- package/src/generators/generateUnifiedHandler.ts +16 -8
- package/src/generators/generateUnifiedScalarUI.ts +10 -10
- package/src/utils/copyFiles.ts +2 -25
- package/src/utils/strings.ts +2 -2
|
@@ -6,7 +6,7 @@ function generateUnifiedDocs(models) {
|
|
|
6
6
|
.map((model) => `import { ${model}Docs } from './${model}/${model}Docs'`)
|
|
7
7
|
.join('\n');
|
|
8
8
|
return `${imports}
|
|
9
|
-
import { Request, Response
|
|
9
|
+
import { Request, Response } from 'express'
|
|
10
10
|
import type { RouteConfig } from './routeConfig'
|
|
11
11
|
|
|
12
12
|
const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
|
|
@@ -111,27 +111,27 @@ export function generateCombinedDocs(config: CombinedDocsConfig) {
|
|
|
111
111
|
<tbody>
|
|
112
112
|
\${registeredModels.map((m) => {
|
|
113
113
|
const lower = m.toLowerCase()
|
|
114
|
-
const docsUrl =
|
|
115
|
-
const scalarUrl =
|
|
116
|
-
const jsonUrl =
|
|
117
|
-
const yamlUrl =
|
|
118
|
-
const playgroundUrl =
|
|
114
|
+
const docsUrl = \`\${basePath}/\${lower}\`
|
|
115
|
+
const scalarUrl = \`\${basePath}/\${lower}?ui=scalar\`
|
|
116
|
+
const jsonUrl = \`\${basePath}/\${lower}?ui=json\`
|
|
117
|
+
const yamlUrl = \`\${basePath}/\${lower}?ui=yaml\`
|
|
118
|
+
const playgroundUrl = \`\${basePath}/\${lower}?ui=playground\`
|
|
119
119
|
const modelCfg = config.modelConfigs[m]
|
|
120
120
|
const modelPlayground = isPlaygroundAvailable(modelCfg)
|
|
121
121
|
const playgroundLink = modelPlayground
|
|
122
|
-
?
|
|
122
|
+
? \`, <a href="\${playgroundUrl}" class="text-inherit underline">playground</a>\`
|
|
123
123
|
: ''
|
|
124
|
-
return
|
|
124
|
+
return \`
|
|
125
125
|
<tr>
|
|
126
|
-
<td class="text-left py-2 px-2 border-b border-gray-300 align-top"
|
|
127
|
-
<td class="text-left py-2 px-2 border-b border-gray-300 align-top"><a href="
|
|
126
|
+
<td class="text-left py-2 px-2 border-b border-gray-300 align-top">\${escapeHtml(m)}</td>
|
|
127
|
+
<td class="text-left py-2 px-2 border-b border-gray-300 align-top"><a href="\${docsUrl}" class="text-inherit underline">\${escapeHtml(docsUrl)}</a></td>
|
|
128
128
|
<td class="text-left py-2 px-2 border-b border-gray-300 align-top">
|
|
129
|
-
<a href="
|
|
130
|
-
<a href="
|
|
131
|
-
<a href="
|
|
129
|
+
<a href="\${scalarUrl}" class="text-inherit underline">scalar</a>,
|
|
130
|
+
<a href="\${jsonUrl}" class="text-inherit underline">json</a>,
|
|
131
|
+
<a href="\${yamlUrl}" class="text-inherit underline">yaml</a>\${playgroundLink}
|
|
132
132
|
</td>
|
|
133
133
|
</tr>
|
|
134
|
-
|
|
134
|
+
\`
|
|
135
135
|
}).join('')}
|
|
136
136
|
</tbody>
|
|
137
137
|
</table>
|
|
@@ -161,8 +161,8 @@ export function registerModelDocs(
|
|
|
161
161
|
registeredModels.forEach((model) => {
|
|
162
162
|
const handler = docsHandlers[model]
|
|
163
163
|
const cfg = configs[model] || {}
|
|
164
|
-
const path =
|
|
165
|
-
console.log(
|
|
164
|
+
const path = \`\${normalizedBase}/\${model.toLowerCase()}\`
|
|
165
|
+
console.log(\` Registered docs: \${path}\`)
|
|
166
166
|
app.get(path, handler(cfg))
|
|
167
167
|
})
|
|
168
168
|
}
|
|
@@ -7,7 +7,7 @@ function generateUnifiedHandler(options) {
|
|
|
7
7
|
const modelNameLower = modelName.charAt(0).toLowerCase() + modelName.slice(1);
|
|
8
8
|
const importPath = prismaImportStatement.match(/from ['"](.+?)['"]/)?.[1] || '';
|
|
9
9
|
return `
|
|
10
|
-
import {
|
|
10
|
+
import { PrismaClient } from '${importPath}'
|
|
11
11
|
import { Request, Response, NextFunction } from 'express'
|
|
12
12
|
import { sanitizeKeys } from '../misc'
|
|
13
13
|
|
|
@@ -326,10 +326,14 @@ export async function ${modelName}FindMany(
|
|
|
326
326
|
}
|
|
327
327
|
function generateWriteHandlers(modelName, modelNameLower) {
|
|
328
328
|
const writeOps = [
|
|
329
|
-
{ name: 'Create', method: 'create' },
|
|
330
|
-
{ name: 'CreateMany', method: 'createMany' },
|
|
331
|
-
{
|
|
332
|
-
|
|
329
|
+
{ name: 'Create', method: 'create', requiredFields: ['data'] },
|
|
330
|
+
{ name: 'CreateMany', method: 'createMany', requiredFields: ['data'] },
|
|
331
|
+
{
|
|
332
|
+
name: 'CreateManyAndReturn',
|
|
333
|
+
method: 'createManyAndReturn',
|
|
334
|
+
requiredFields: ['data'],
|
|
335
|
+
},
|
|
336
|
+
{ name: 'Update', method: 'update', requiredFields: ['where', 'data'] },
|
|
333
337
|
{
|
|
334
338
|
name: 'UpdateMany',
|
|
335
339
|
method: 'updateMany',
|
|
@@ -340,9 +344,13 @@ function generateWriteHandlers(modelName, modelNameLower) {
|
|
|
340
344
|
method: 'updateManyAndReturn',
|
|
341
345
|
requiredFields: ['where', 'data'],
|
|
342
346
|
},
|
|
343
|
-
{ name: 'Delete', method: 'delete' },
|
|
347
|
+
{ name: 'Delete', method: 'delete', requiredFields: ['where'] },
|
|
344
348
|
{ name: 'DeleteMany', method: 'deleteMany', requiredFields: ['where'] },
|
|
345
|
-
{
|
|
349
|
+
{
|
|
350
|
+
name: 'Upsert',
|
|
351
|
+
method: 'upsert',
|
|
352
|
+
requiredFields: ['where', 'create', 'update'],
|
|
353
|
+
},
|
|
346
354
|
];
|
|
347
355
|
return (writeOps
|
|
348
356
|
.map((op) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateUnifiedHandler.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedHandler.ts"],"names":[],"mappings":";;AAOA,wDA4PC;AA5PD,SAAgB,sBAAsB,CAAC,OAA8B;IACnE,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAA;IAChD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;IAC5B,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7E,MAAM,UAAU,GACd,qBAAqB,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAE9D,OAAO;
|
|
1
|
+
{"version":3,"file":"generateUnifiedHandler.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ function generateScalarUIHandler(options) {
|
|
|
66
66
|
name: idx.name || idx.fields.join('_'),
|
|
67
67
|
fields: idx.fields,
|
|
68
68
|
}));
|
|
69
|
-
return `import
|
|
69
|
+
return `import { Request, Response } from 'express'
|
|
70
70
|
import { buildModelOpenApi } from '../buildModelOpenApi'
|
|
71
71
|
import type { RouteConfig } from '../routeConfig'
|
|
72
72
|
import { OPERATION_DEFS, isOperationEnabled } from '../operationDefinitions'
|
|
@@ -1339,19 +1339,19 @@ function renderDocs(modelName: string, config: DocsConfig) {
|
|
|
1339
1339
|
}
|
|
1340
1340
|
|
|
1341
1341
|
export function ${modelName}Docs(config: DocsConfig = {}) {
|
|
1342
|
-
return (
|
|
1342
|
+
return (req: Request, res: Response) => {
|
|
1343
1343
|
const disabled = isOpenApiDisabled(config.disableOpenApi)
|
|
1344
|
-
if (disabled) return
|
|
1344
|
+
if (disabled) return res.status(404).send('OpenAPI documentation is disabled in production')
|
|
1345
1345
|
|
|
1346
|
-
const rawUi =
|
|
1346
|
+
const rawUi = (req.query['ui'] as string | undefined) || config.docsUi || 'docs'
|
|
1347
1347
|
const validUis: DocsUI[] = ['docs', 'scalar', 'json', 'yaml', 'playground']
|
|
1348
1348
|
const ui: DocsUI = validUis.includes(rawUi as DocsUI) ? (rawUi as DocsUI) : 'docs'
|
|
1349
1349
|
|
|
1350
1350
|
if (ui === 'playground') {
|
|
1351
1351
|
if (!isPlaygroundAvailable(config)) {
|
|
1352
|
-
return
|
|
1352
|
+
return res.status(404).send('Query builder is disabled')
|
|
1353
1353
|
}
|
|
1354
|
-
return
|
|
1354
|
+
return res.type('html').send(renderPlayground('${modelName}', config))
|
|
1355
1355
|
}
|
|
1356
1356
|
|
|
1357
1357
|
if (ui === 'yaml') {
|
|
@@ -1362,7 +1362,7 @@ export function ${modelName}Docs(config: DocsConfig = {}) {
|
|
|
1362
1362
|
config,
|
|
1363
1363
|
{ format: 'yaml' }
|
|
1364
1364
|
)
|
|
1365
|
-
return
|
|
1365
|
+
return res.type('application/yaml').send(yaml as string)
|
|
1366
1366
|
}
|
|
1367
1367
|
|
|
1368
1368
|
const spec = buildModelOpenApi(
|
|
@@ -1373,16 +1373,16 @@ export function ${modelName}Docs(config: DocsConfig = {}) {
|
|
|
1373
1373
|
{ format: 'json' }
|
|
1374
1374
|
)
|
|
1375
1375
|
|
|
1376
|
-
if (ui === 'json') return
|
|
1376
|
+
if (ui === 'json') return res.json(spec)
|
|
1377
1377
|
|
|
1378
1378
|
const pageTitle = config.docsTitle || \`${modelName} API\`
|
|
1379
1379
|
|
|
1380
1380
|
if (ui === 'scalar') {
|
|
1381
|
-
return
|
|
1381
|
+
return res.type('html').send(renderScalar('${modelName}', spec, pageTitle, config.scalarCdnUrl))
|
|
1382
1382
|
}
|
|
1383
1383
|
|
|
1384
1384
|
const html = renderDocs('${modelName}', config)
|
|
1385
|
-
return
|
|
1385
|
+
return res.type('html').send(html)
|
|
1386
1386
|
}
|
|
1387
1387
|
}
|
|
1388
1388
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateUnifiedScalarUI.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedScalarUI.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0uC/C,SAAS;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"generateUnifiedScalarUI.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedScalarUI.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,2 @@
|
|
|
1
1
|
import { GeneratorOptions } from '@prisma/generator-helper';
|
|
2
|
-
export
|
|
3
|
-
includeCacheUtils?: boolean;
|
|
4
|
-
includeValidatorUtils?: boolean;
|
|
5
|
-
}
|
|
6
|
-
export declare function copyFiles(options: GeneratorOptions, config?: CopyFilesConfig): Promise<void>;
|
|
2
|
+
export declare function copyFiles(options: GeneratorOptions): Promise<void>;
|
package/dist/utils/copyFiles.js
CHANGED
|
@@ -36,8 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.copyFiles = copyFiles;
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
|
-
async function copyFiles(options
|
|
40
|
-
const copyConfig = config || {};
|
|
39
|
+
async function copyFiles(options) {
|
|
41
40
|
const outputPath = options.generator.output?.value;
|
|
42
41
|
if (!outputPath)
|
|
43
42
|
return;
|
|
@@ -56,20 +55,6 @@ async function copyFiles(options, config) {
|
|
|
56
55
|
if (!ok)
|
|
57
56
|
allCopied = false;
|
|
58
57
|
}
|
|
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
58
|
const clientDir = path.join(outputPath, 'client');
|
|
74
59
|
if (!fs.existsSync(clientDir)) {
|
|
75
60
|
fs.mkdirSync(clientDir, { recursive: true });
|
|
@@ -77,7 +62,7 @@ async function copyFiles(options, config) {
|
|
|
77
62
|
const clientSrcDir = path.join(__dirname, '..', '..', 'src', 'client');
|
|
78
63
|
const clientOk = await copyFile(clientSrcDir, clientDir, 'encodeQueryParams.ts', {
|
|
79
64
|
required: true,
|
|
80
|
-
importRewrites: [{ from: '../copy/misc', to: '../misc' }],
|
|
65
|
+
importRewrites: [{ from: '../copy/misc.js', to: '../misc.js' }],
|
|
81
66
|
});
|
|
82
67
|
if (!clientOk)
|
|
83
68
|
allCopied = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copyFiles.js","sourceRoot":"","sources":["../../src/utils/copyFiles.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"copyFiles.js","sourceRoot":"","sources":["../../src/utils/copyFiles.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/strings.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const capitalize: (str: string) => string;
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function toCamelCase(str: string): string;
|
package/dist/utils/strings.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.capitalize = void 0;
|
|
4
|
-
exports.
|
|
4
|
+
exports.toCamelCase = toCamelCase;
|
|
5
5
|
const capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1);
|
|
6
6
|
exports.capitalize = capitalize;
|
|
7
|
-
function
|
|
7
|
+
function toCamelCase(str) {
|
|
8
8
|
if (!str)
|
|
9
9
|
return str;
|
|
10
10
|
return str.charAt(0).toLowerCase() + str.slice(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":";;;AAGA,
|
|
1
|
+
{"version":3,"file":"strings.js","sourceRoot":"","sources":["../../src/utils/strings.ts"],"names":[],"mappings":";;;AAGA,kCAGC;AANM,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,EAAE,CACxC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAD/B,QAAA,UAAU,cACqB;AAE5C,SAAgB,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAA;IACpB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACnD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prisma-generator-express",
|
|
3
3
|
"description": "Prisma generator for Hono CRUD API with OpenAPI documentation",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.24.0",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"license": "MIT",
|
|
@@ -15,8 +15,7 @@
|
|
|
15
15
|
"start": "node dist/bin.js",
|
|
16
16
|
"test": "vitest",
|
|
17
17
|
"coverage": "vitest --coverage",
|
|
18
|
-
"prepack": "npm run build"
|
|
19
|
-
"prepublishOnly": "node copy.js"
|
|
18
|
+
"prepack": "node copy.js && npm run build"
|
|
20
19
|
},
|
|
21
20
|
"dependencies": {
|
|
22
21
|
"@prisma/generator-helper": "7.5.0",
|
|
@@ -71,9 +70,7 @@
|
|
|
71
70
|
],
|
|
72
71
|
"files": [
|
|
73
72
|
"dist/**/*",
|
|
74
|
-
"src/**/*"
|
|
75
|
-
"../../README.md",
|
|
76
|
-
"../../LICENSE"
|
|
73
|
+
"src/**/*"
|
|
77
74
|
],
|
|
78
75
|
"release": {
|
|
79
76
|
"branches": [
|
|
@@ -214,13 +214,20 @@ function generateOperationSchemas(
|
|
|
214
214
|
}
|
|
215
215
|
})
|
|
216
216
|
|
|
217
|
+
const relationFkFields = new Set(
|
|
218
|
+
fields
|
|
219
|
+
.filter((f) => f.kind === 'object' && f.relationFromFields?.length)
|
|
220
|
+
.flatMap((f) => f.relationFromFields!),
|
|
221
|
+
)
|
|
222
|
+
|
|
217
223
|
const requiredScalars = fields
|
|
218
224
|
.filter(
|
|
219
225
|
(f) =>
|
|
220
226
|
(f.kind === 'scalar' || f.kind === 'enum') &&
|
|
221
227
|
f.isRequired &&
|
|
222
228
|
!f.hasDefaultValue &&
|
|
223
|
-
!f.isUpdatedAt
|
|
229
|
+
!f.isUpdatedAt &&
|
|
230
|
+
!relationFkFields.has(f.name),
|
|
224
231
|
)
|
|
225
232
|
.map((f) => f.name)
|
|
226
233
|
|
|
@@ -48,7 +48,7 @@ export const parseQueryParams = (params: QueryParams): unknown => {
|
|
|
48
48
|
if (typeof raw === 'string') {
|
|
49
49
|
parsedParams[key] = parseQueryValue(raw, key)
|
|
50
50
|
} else {
|
|
51
|
-
parsedParams[key] = raw
|
|
51
|
+
parsedParams[key] = sanitizeKeys(raw)
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
return parsedParams
|
|
@@ -4,7 +4,7 @@ export function generateUnifiedDocs(models: string[]): string {
|
|
|
4
4
|
.join('\n')
|
|
5
5
|
|
|
6
6
|
return `${imports}
|
|
7
|
-
import { Request, Response
|
|
7
|
+
import { Request, Response } from 'express'
|
|
8
8
|
import type { RouteConfig } from './routeConfig'
|
|
9
9
|
|
|
10
10
|
const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
|
|
@@ -109,27 +109,27 @@ export function generateCombinedDocs(config: CombinedDocsConfig) {
|
|
|
109
109
|
<tbody>
|
|
110
110
|
\${registeredModels.map((m) => {
|
|
111
111
|
const lower = m.toLowerCase()
|
|
112
|
-
const docsUrl =
|
|
113
|
-
const scalarUrl =
|
|
114
|
-
const jsonUrl =
|
|
115
|
-
const yamlUrl =
|
|
116
|
-
const playgroundUrl =
|
|
112
|
+
const docsUrl = \`\${basePath}/\${lower}\`
|
|
113
|
+
const scalarUrl = \`\${basePath}/\${lower}?ui=scalar\`
|
|
114
|
+
const jsonUrl = \`\${basePath}/\${lower}?ui=json\`
|
|
115
|
+
const yamlUrl = \`\${basePath}/\${lower}?ui=yaml\`
|
|
116
|
+
const playgroundUrl = \`\${basePath}/\${lower}?ui=playground\`
|
|
117
117
|
const modelCfg = config.modelConfigs[m]
|
|
118
118
|
const modelPlayground = isPlaygroundAvailable(modelCfg)
|
|
119
119
|
const playgroundLink = modelPlayground
|
|
120
|
-
?
|
|
120
|
+
? \`, <a href="\${playgroundUrl}" class="text-inherit underline">playground</a>\`
|
|
121
121
|
: ''
|
|
122
|
-
return
|
|
122
|
+
return \`
|
|
123
123
|
<tr>
|
|
124
|
-
<td class="text-left py-2 px-2 border-b border-gray-300 align-top"
|
|
125
|
-
<td class="text-left py-2 px-2 border-b border-gray-300 align-top"><a href="
|
|
124
|
+
<td class="text-left py-2 px-2 border-b border-gray-300 align-top">\${escapeHtml(m)}</td>
|
|
125
|
+
<td class="text-left py-2 px-2 border-b border-gray-300 align-top"><a href="\${docsUrl}" class="text-inherit underline">\${escapeHtml(docsUrl)}</a></td>
|
|
126
126
|
<td class="text-left py-2 px-2 border-b border-gray-300 align-top">
|
|
127
|
-
<a href="
|
|
128
|
-
<a href="
|
|
129
|
-
<a href="
|
|
127
|
+
<a href="\${scalarUrl}" class="text-inherit underline">scalar</a>,
|
|
128
|
+
<a href="\${jsonUrl}" class="text-inherit underline">json</a>,
|
|
129
|
+
<a href="\${yamlUrl}" class="text-inherit underline">yaml</a>\${playgroundLink}
|
|
130
130
|
</td>
|
|
131
131
|
</tr>
|
|
132
|
-
|
|
132
|
+
\`
|
|
133
133
|
}).join('')}
|
|
134
134
|
</tbody>
|
|
135
135
|
</table>
|
|
@@ -159,8 +159,8 @@ export function registerModelDocs(
|
|
|
159
159
|
registeredModels.forEach((model) => {
|
|
160
160
|
const handler = docsHandlers[model]
|
|
161
161
|
const cfg = configs[model] || {}
|
|
162
|
-
const path =
|
|
163
|
-
console.log(
|
|
162
|
+
const path = \`\${normalizedBase}/\${model.toLowerCase()}\`
|
|
163
|
+
console.log(\` Registered docs: \${path}\`)
|
|
164
164
|
app.get(path, handler(cfg))
|
|
165
165
|
})
|
|
166
166
|
}
|
|
@@ -13,7 +13,7 @@ export function generateUnifiedHandler(options: UnifiedHandlerOptions): string {
|
|
|
13
13
|
prismaImportStatement.match(/from ['"](.+?)['"]/)?.[1] || ''
|
|
14
14
|
|
|
15
15
|
return `
|
|
16
|
-
import {
|
|
16
|
+
import { PrismaClient } from '${importPath}'
|
|
17
17
|
import { Request, Response, NextFunction } from 'express'
|
|
18
18
|
import { sanitizeKeys } from '../misc'
|
|
19
19
|
|
|
@@ -348,10 +348,14 @@ function generateWriteHandlers(
|
|
|
348
348
|
method: string
|
|
349
349
|
requiredFields?: string[]
|
|
350
350
|
}[] = [
|
|
351
|
-
{ name: 'Create', method: 'create' },
|
|
352
|
-
{ name: 'CreateMany', method: 'createMany' },
|
|
353
|
-
{
|
|
354
|
-
|
|
351
|
+
{ name: 'Create', method: 'create', requiredFields: ['data'] },
|
|
352
|
+
{ name: 'CreateMany', method: 'createMany', requiredFields: ['data'] },
|
|
353
|
+
{
|
|
354
|
+
name: 'CreateManyAndReturn',
|
|
355
|
+
method: 'createManyAndReturn',
|
|
356
|
+
requiredFields: ['data'],
|
|
357
|
+
},
|
|
358
|
+
{ name: 'Update', method: 'update', requiredFields: ['where', 'data'] },
|
|
355
359
|
{
|
|
356
360
|
name: 'UpdateMany',
|
|
357
361
|
method: 'updateMany',
|
|
@@ -362,9 +366,13 @@ function generateWriteHandlers(
|
|
|
362
366
|
method: 'updateManyAndReturn',
|
|
363
367
|
requiredFields: ['where', 'data'],
|
|
364
368
|
},
|
|
365
|
-
{ name: 'Delete', method: 'delete' },
|
|
369
|
+
{ name: 'Delete', method: 'delete', requiredFields: ['where'] },
|
|
366
370
|
{ name: 'DeleteMany', method: 'deleteMany', requiredFields: ['where'] },
|
|
367
|
-
{
|
|
371
|
+
{
|
|
372
|
+
name: 'Upsert',
|
|
373
|
+
method: 'upsert',
|
|
374
|
+
requiredFields: ['where', 'create', 'update'],
|
|
375
|
+
},
|
|
368
376
|
]
|
|
369
377
|
|
|
370
378
|
return (
|
|
@@ -505,4 +513,4 @@ export async function ${modelName}FindManyPaginated(req: Request, res: Response,
|
|
|
505
513
|
}
|
|
506
514
|
`
|
|
507
515
|
)
|
|
508
|
-
}
|
|
516
|
+
}
|
|
@@ -86,7 +86,7 @@ export function generateScalarUIHandler(options: {
|
|
|
86
86
|
fields: idx.fields,
|
|
87
87
|
}))
|
|
88
88
|
|
|
89
|
-
return `import
|
|
89
|
+
return `import { Request, Response } from 'express'
|
|
90
90
|
import { buildModelOpenApi } from '../buildModelOpenApi'
|
|
91
91
|
import type { RouteConfig } from '../routeConfig'
|
|
92
92
|
import { OPERATION_DEFS, isOperationEnabled } from '../operationDefinitions'
|
|
@@ -1359,19 +1359,19 @@ function renderDocs(modelName: string, config: DocsConfig) {
|
|
|
1359
1359
|
}
|
|
1360
1360
|
|
|
1361
1361
|
export function ${modelName}Docs(config: DocsConfig = {}) {
|
|
1362
|
-
return (
|
|
1362
|
+
return (req: Request, res: Response) => {
|
|
1363
1363
|
const disabled = isOpenApiDisabled(config.disableOpenApi)
|
|
1364
|
-
if (disabled) return
|
|
1364
|
+
if (disabled) return res.status(404).send('OpenAPI documentation is disabled in production')
|
|
1365
1365
|
|
|
1366
|
-
const rawUi =
|
|
1366
|
+
const rawUi = (req.query['ui'] as string | undefined) || config.docsUi || 'docs'
|
|
1367
1367
|
const validUis: DocsUI[] = ['docs', 'scalar', 'json', 'yaml', 'playground']
|
|
1368
1368
|
const ui: DocsUI = validUis.includes(rawUi as DocsUI) ? (rawUi as DocsUI) : 'docs'
|
|
1369
1369
|
|
|
1370
1370
|
if (ui === 'playground') {
|
|
1371
1371
|
if (!isPlaygroundAvailable(config)) {
|
|
1372
|
-
return
|
|
1372
|
+
return res.status(404).send('Query builder is disabled')
|
|
1373
1373
|
}
|
|
1374
|
-
return
|
|
1374
|
+
return res.type('html').send(renderPlayground('${modelName}', config))
|
|
1375
1375
|
}
|
|
1376
1376
|
|
|
1377
1377
|
if (ui === 'yaml') {
|
|
@@ -1382,7 +1382,7 @@ export function ${modelName}Docs(config: DocsConfig = {}) {
|
|
|
1382
1382
|
config,
|
|
1383
1383
|
{ format: 'yaml' }
|
|
1384
1384
|
)
|
|
1385
|
-
return
|
|
1385
|
+
return res.type('application/yaml').send(yaml as string)
|
|
1386
1386
|
}
|
|
1387
1387
|
|
|
1388
1388
|
const spec = buildModelOpenApi(
|
|
@@ -1393,16 +1393,16 @@ export function ${modelName}Docs(config: DocsConfig = {}) {
|
|
|
1393
1393
|
{ format: 'json' }
|
|
1394
1394
|
)
|
|
1395
1395
|
|
|
1396
|
-
if (ui === 'json') return
|
|
1396
|
+
if (ui === 'json') return res.json(spec)
|
|
1397
1397
|
|
|
1398
1398
|
const pageTitle = config.docsTitle || \`${modelName} API\`
|
|
1399
1399
|
|
|
1400
1400
|
if (ui === 'scalar') {
|
|
1401
|
-
return
|
|
1401
|
+
return res.type('html').send(renderScalar('${modelName}', spec, pageTitle, config.scalarCdnUrl))
|
|
1402
1402
|
}
|
|
1403
1403
|
|
|
1404
1404
|
const html = renderDocs('${modelName}', config)
|
|
1405
|
-
return
|
|
1405
|
+
return res.type('html').send(html)
|
|
1406
1406
|
}
|
|
1407
1407
|
}
|
|
1408
1408
|
`
|
package/src/utils/copyFiles.ts
CHANGED
|
@@ -2,16 +2,7 @@ import { GeneratorOptions } from '@prisma/generator-helper'
|
|
|
2
2
|
import * as fs from 'fs'
|
|
3
3
|
import * as path from 'path'
|
|
4
4
|
|
|
5
|
-
export
|
|
6
|
-
includeCacheUtils?: boolean
|
|
7
|
-
includeValidatorUtils?: boolean
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export async function copyFiles(
|
|
11
|
-
options: GeneratorOptions,
|
|
12
|
-
config?: CopyFilesConfig,
|
|
13
|
-
): Promise<void> {
|
|
14
|
-
const copyConfig = config || {}
|
|
5
|
+
export async function copyFiles(options: GeneratorOptions): Promise<void> {
|
|
15
6
|
const outputPath = options.generator.output?.value
|
|
16
7
|
if (!outputPath) return
|
|
17
8
|
|
|
@@ -34,20 +25,6 @@ export async function copyFiles(
|
|
|
34
25
|
if (!ok) allCopied = false
|
|
35
26
|
}
|
|
36
27
|
|
|
37
|
-
if (copyConfig.includeCacheUtils) {
|
|
38
|
-
const ok = await copyFile(srcDir, outputPath, 'cacheManager.ts', {
|
|
39
|
-
required: true,
|
|
40
|
-
})
|
|
41
|
-
if (!ok) allCopied = false
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (copyConfig.includeValidatorUtils) {
|
|
45
|
-
const ok = await copyFile(srcDir, outputPath, 'inputValidator.ts', {
|
|
46
|
-
required: true,
|
|
47
|
-
})
|
|
48
|
-
if (!ok) allCopied = false
|
|
49
|
-
}
|
|
50
|
-
|
|
51
28
|
const clientDir = path.join(outputPath, 'client')
|
|
52
29
|
if (!fs.existsSync(clientDir)) {
|
|
53
30
|
fs.mkdirSync(clientDir, { recursive: true })
|
|
@@ -60,7 +37,7 @@ export async function copyFiles(
|
|
|
60
37
|
'encodeQueryParams.ts',
|
|
61
38
|
{
|
|
62
39
|
required: true,
|
|
63
|
-
importRewrites: [{ from: '../copy/misc', to: '../misc' }],
|
|
40
|
+
importRewrites: [{ from: '../copy/misc.js', to: '../misc.js' }],
|
|
64
41
|
},
|
|
65
42
|
)
|
|
66
43
|
if (!clientOk) allCopied = false
|
package/src/utils/strings.ts
CHANGED