prisma-generator-express 1.23.0 → 1.25.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/bin.d.ts +1 -1
- package/dist/bin.js +1 -1
- package/dist/bin.js.map +1 -1
- package/dist/generators/generateRouter.js +5 -5
- package/dist/generators/generateUnifiedDocs.js +74 -65
- package/dist/generators/generateUnifiedDocs.js.map +1 -1
- package/dist/generators/generateUnifiedHandler.js +26 -13
- package/dist/generators/generateUnifiedHandler.js.map +1 -1
- package/dist/generators/generateUnifiedScalarUI.js +13 -13
- package/dist/generators/generateUnifiedScalarUI.js.map +1 -1
- package/dist/index.js +23 -23
- package/dist/index.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/dist/utils/writeFileSafely.js +0 -6
- package/dist/utils/writeFileSafely.js.map +1 -1
- package/package.json +1 -1
- package/src/bin.ts +1 -1
- package/src/client/encodeQueryParams.ts +1 -1
- package/src/copy/buildModelOpenApi.ts +90 -19
- package/src/copy/parseQueryParams.ts +2 -2
- package/src/generators/generateImportPrismaStatement.ts +1 -1
- package/src/generators/generateRouter.ts +5 -5
- package/src/generators/generateUnifiedDocs.ts +75 -65
- package/src/generators/generateUnifiedHandler.ts +26 -13
- package/src/generators/generateUnifiedScalarUI.ts +13 -13
- package/src/index.ts +9 -9
- package/src/utils/copyFiles.ts +2 -25
- package/src/utils/strings.ts +2 -2
- package/src/utils/writeFileSafely.ts +1 -9
package/dist/bin.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import '.';
|
|
2
|
+
import './index.js';
|
package/dist/bin.js
CHANGED
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;AACA,sBAAmB"}
|
|
@@ -44,10 +44,10 @@ import {
|
|
|
44
44
|
${modelName}Aggregate,
|
|
45
45
|
${modelName}Count,
|
|
46
46
|
${modelName}GroupBy
|
|
47
|
-
} from './${modelName}Handlers'
|
|
48
|
-
import type { RouteConfig } from '../routeConfig'
|
|
49
|
-
import { parseQueryParams } from '../parseQueryParams'
|
|
50
|
-
import { buildModelOpenApi } from '../buildModelOpenApi'
|
|
47
|
+
} from './${modelName}Handlers.js'
|
|
48
|
+
import type { RouteConfig } from '../routeConfig.js'
|
|
49
|
+
import { parseQueryParams } from '../parseQueryParams.js'
|
|
50
|
+
import { buildModelOpenApi } from '../buildModelOpenApi.js'
|
|
51
51
|
|
|
52
52
|
const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
|
|
53
53
|
|
|
@@ -127,7 +127,7 @@ export function ${routerFunctionName}(config: RouteConfig = {}) {
|
|
|
127
127
|
if (qbEnabled) {
|
|
128
128
|
const qbConfig = getQueryBuilderConfig(config)
|
|
129
129
|
if (qbConfig) {
|
|
130
|
-
import('../queryBuilder').then(mod => mod.startQueryBuilder(qbConfig)).catch(() => {})
|
|
130
|
+
import('../queryBuilder.js').then(mod => mod.startQueryBuilder(qbConfig)).catch((err) => { if (_env.NODE_ENV !== 'production') console.warn('[query-builder]', err) })
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
|
|
@@ -5,14 +5,17 @@ function generateUnifiedDocs(models) {
|
|
|
5
5
|
const imports = models
|
|
6
6
|
.map((model) => `import { ${model}Docs } from './${model}/${model}Docs'`)
|
|
7
7
|
.join('\n');
|
|
8
|
+
const handlersEntries = models
|
|
9
|
+
.map((model) => ` ${model}: ${model}Docs`)
|
|
10
|
+
.join(',\n');
|
|
8
11
|
return `${imports}
|
|
9
|
-
import { Request, Response
|
|
12
|
+
import { Request, Response } from 'express'
|
|
10
13
|
import type { RouteConfig } from './routeConfig'
|
|
11
14
|
|
|
12
15
|
const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
|
|
13
16
|
|
|
14
17
|
const docsHandlers: Record<string, (config: any) => (req: Request, res: Response) => any> = {
|
|
15
|
-
${
|
|
18
|
+
${handlersEntries}
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
type DocsUI = 'docs' | 'scalar' | 'json' | 'yaml' | 'playground'
|
|
@@ -79,66 +82,72 @@ export function generateCombinedDocs(config: CombinedDocsConfig) {
|
|
|
79
82
|
const basePath = removeTrailingSlash(config.basePath || '/docs')
|
|
80
83
|
const generatedAt = new Date().toISOString()
|
|
81
84
|
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
<
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
</
|
|
141
|
-
</
|
|
85
|
+
const modelRows = registeredModels.map((m) => {
|
|
86
|
+
const lower = m.toLowerCase()
|
|
87
|
+
const docsUrl = basePath + '/' + lower
|
|
88
|
+
const scalarUrl = docsUrl + '?ui=scalar'
|
|
89
|
+
const jsonUrl = docsUrl + '?ui=json'
|
|
90
|
+
const yamlUrl = docsUrl + '?ui=yaml'
|
|
91
|
+
const playgroundUrl = docsUrl + '?ui=playground'
|
|
92
|
+
const modelCfg = config.modelConfigs[m]
|
|
93
|
+
const modelPlayground = isPlaygroundAvailable(modelCfg)
|
|
94
|
+
const playgroundLink = modelPlayground
|
|
95
|
+
? ', <a href="' + playgroundUrl + '" class="text-inherit underline">playground</a>'
|
|
96
|
+
: ''
|
|
97
|
+
return '<tr>' +
|
|
98
|
+
'<td class="text-left py-2 px-2 border-b border-gray-300 align-top">' + escapeHtml(m) + '</td>' +
|
|
99
|
+
'<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>' +
|
|
100
|
+
'<td class="text-left py-2 px-2 border-b border-gray-300 align-top">' +
|
|
101
|
+
'<a href="' + scalarUrl + '" class="text-inherit underline">scalar</a>, ' +
|
|
102
|
+
'<a href="' + jsonUrl + '" class="text-inherit underline">json</a>, ' +
|
|
103
|
+
'<a href="' + yamlUrl + '" class="text-inherit underline">yaml</a>' +
|
|
104
|
+
playgroundLink +
|
|
105
|
+
'</td>' +
|
|
106
|
+
'</tr>'
|
|
107
|
+
}).join('')
|
|
108
|
+
|
|
109
|
+
const descriptionHtml = description
|
|
110
|
+
? '<div class="mt-1.5 text-gray-500 text-sm">' + escapeHtml(description) + '</div>'
|
|
111
|
+
: ''
|
|
112
|
+
const versionHtml = version
|
|
113
|
+
? '<div>Version: ' + escapeHtml(version) + '</div>'
|
|
114
|
+
: ''
|
|
115
|
+
|
|
116
|
+
const html =
|
|
117
|
+
'<!DOCTYPE html>' +
|
|
118
|
+
'<html lang="en">' +
|
|
119
|
+
'<head>' +
|
|
120
|
+
'<meta charset="utf-8" />' +
|
|
121
|
+
'<meta name="viewport" content="width=device-width, initial-scale=1" />' +
|
|
122
|
+
'<title>' + escapeHtml(title) + '</title>' +
|
|
123
|
+
'<script src="https://cdn.tailwindcss.com"></' + 'script>' +
|
|
124
|
+
'</head>' +
|
|
125
|
+
'<body class="m-0 bg-white text-gray-900 font-serif leading-normal">' +
|
|
126
|
+
'<div class="max-w-[980px] mx-auto px-7 pt-10 pb-16">' +
|
|
127
|
+
'<div class="border-b-2 border-gray-900 pb-3.5 mb-[18px]">' +
|
|
128
|
+
'<div class="text-[28px] font-bold tracking-wide">' + escapeHtml(title) + '</div>' +
|
|
129
|
+
descriptionHtml +
|
|
130
|
+
'<div class="mt-3 flex gap-x-5 text-[13px] text-gray-500">' +
|
|
131
|
+
versionHtml +
|
|
132
|
+
'<div>Generated: ' + escapeHtml(generatedAt) + '</div>' +
|
|
133
|
+
'</div>' +
|
|
134
|
+
'</div>' +
|
|
135
|
+
'<div class="mt-[22px]">' +
|
|
136
|
+
'<h2 class="m-0 mb-2.5 text-lg border-t border-gray-300 pt-3.5">Models</h2>' +
|
|
137
|
+
'<table class="w-full border-collapse text-[13px]">' +
|
|
138
|
+
'<thead>' +
|
|
139
|
+
'<tr>' +
|
|
140
|
+
'<th class="text-left py-2 px-2 border-b border-gray-300 align-top font-bold">Model</th>' +
|
|
141
|
+
'<th class="text-left py-2 px-2 border-b border-gray-300 align-top font-bold">Documentation</th>' +
|
|
142
|
+
'<th class="text-left py-2 px-2 border-b border-gray-300 align-top font-bold">Views</th>' +
|
|
143
|
+
'</tr>' +
|
|
144
|
+
'</thead>' +
|
|
145
|
+
'<tbody>' + modelRows + '</tbody>' +
|
|
146
|
+
'</table>' +
|
|
147
|
+
'</div>' +
|
|
148
|
+
'</div>' +
|
|
149
|
+
'</body>' +
|
|
150
|
+
'</html>'
|
|
142
151
|
|
|
143
152
|
res.type('html').send(html)
|
|
144
153
|
}
|
|
@@ -161,9 +170,9 @@ export function registerModelDocs(
|
|
|
161
170
|
registeredModels.forEach((model) => {
|
|
162
171
|
const handler = docsHandlers[model]
|
|
163
172
|
const cfg = configs[model] || {}
|
|
164
|
-
const
|
|
165
|
-
console.log(
|
|
166
|
-
app.get(
|
|
173
|
+
const docPath = normalizedBase + '/' + model.toLowerCase()
|
|
174
|
+
console.log(' Registered docs: ' + docPath)
|
|
175
|
+
app.get(docPath, handler(cfg))
|
|
167
176
|
})
|
|
168
177
|
}
|
|
169
178
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateUnifiedDocs.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedDocs.ts"],"names":[],"mappings":";;AAAA,
|
|
1
|
+
{"version":3,"file":"generateUnifiedDocs.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedDocs.ts"],"names":[],"mappings":";;AAAA,kDAiLC;AAjLD,SAAgB,mBAAmB,CAAC,MAAgB;IAClD,MAAM,OAAO,GAAG,MAAM;SACnB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,KAAK,kBAAkB,KAAK,IAAI,KAAK,OAAO,CAAC;SACxE,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,MAAM,eAAe,GAAG,MAAM;SAC3B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM,CAAC;SAC1C,IAAI,CAAC,KAAK,CAAC,CAAA;IAEd,OAAO,GAAG,OAAO;;;;;;;EAOjB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgKhB,CAAA;AACD,CAAC"}
|
|
@@ -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
|
|
|
@@ -146,6 +146,7 @@ function handleError(error: unknown, next: NextFunction): void {
|
|
|
146
146
|
return
|
|
147
147
|
}
|
|
148
148
|
if (typeof code === 'string' && code.startsWith('P')) {
|
|
149
|
+
console.warn('[prisma-generator-express] Unmapped Prisma error code:', code, (error as any).message || '')
|
|
149
150
|
next(new HttpError(500, 'Database operation failed'))
|
|
150
151
|
return
|
|
151
152
|
}
|
|
@@ -326,10 +327,14 @@ export async function ${modelName}FindMany(
|
|
|
326
327
|
}
|
|
327
328
|
function generateWriteHandlers(modelName, modelNameLower) {
|
|
328
329
|
const writeOps = [
|
|
329
|
-
{ name: 'Create', method: 'create' },
|
|
330
|
-
{ name: 'CreateMany', method: 'createMany' },
|
|
331
|
-
{
|
|
332
|
-
|
|
330
|
+
{ name: 'Create', method: 'create', requiredFields: ['data'] },
|
|
331
|
+
{ name: 'CreateMany', method: 'createMany', requiredFields: ['data'] },
|
|
332
|
+
{
|
|
333
|
+
name: 'CreateManyAndReturn',
|
|
334
|
+
method: 'createManyAndReturn',
|
|
335
|
+
requiredFields: ['data'],
|
|
336
|
+
},
|
|
337
|
+
{ name: 'Update', method: 'update', requiredFields: ['where', 'data'] },
|
|
333
338
|
{
|
|
334
339
|
name: 'UpdateMany',
|
|
335
340
|
method: 'updateMany',
|
|
@@ -340,9 +345,13 @@ function generateWriteHandlers(modelName, modelNameLower) {
|
|
|
340
345
|
method: 'updateManyAndReturn',
|
|
341
346
|
requiredFields: ['where', 'data'],
|
|
342
347
|
},
|
|
343
|
-
{ name: 'Delete', method: 'delete' },
|
|
348
|
+
{ name: 'Delete', method: 'delete', requiredFields: ['where'] },
|
|
344
349
|
{ name: 'DeleteMany', method: 'deleteMany', requiredFields: ['where'] },
|
|
345
|
-
{
|
|
350
|
+
{
|
|
351
|
+
name: 'Upsert',
|
|
352
|
+
method: 'upsert',
|
|
353
|
+
requiredFields: ['where', 'create', 'update'],
|
|
354
|
+
},
|
|
346
355
|
];
|
|
347
356
|
return (writeOps
|
|
348
357
|
.map((op) => {
|
|
@@ -389,6 +398,14 @@ async function countForPagination(
|
|
|
389
398
|
const countShape = shape ? buildCountShape(shape) : undefined
|
|
390
399
|
|
|
391
400
|
if (hasDistinct) {
|
|
401
|
+
if (shape) {
|
|
402
|
+
const countArgs: Record<string, any> = {}
|
|
403
|
+
if (query.where) countArgs.where = query.where
|
|
404
|
+
return countShape
|
|
405
|
+
? await delegate.guard(countShape, caller).count(countArgs)
|
|
406
|
+
: await delegate.count(countArgs)
|
|
407
|
+
}
|
|
408
|
+
|
|
392
409
|
const selectField = distinctFields[0]
|
|
393
410
|
const distinctArgs: Record<string, any> = {
|
|
394
411
|
where: query.where,
|
|
@@ -397,17 +414,13 @@ async function countForPagination(
|
|
|
397
414
|
take: DISTINCT_COUNT_LIMIT + 1,
|
|
398
415
|
}
|
|
399
416
|
|
|
400
|
-
const results =
|
|
401
|
-
? await delegate.guard(shape, caller).findMany(distinctArgs)
|
|
402
|
-
: await delegate.findMany(distinctArgs)
|
|
417
|
+
const results = await delegate.findMany(distinctArgs)
|
|
403
418
|
|
|
404
419
|
if (results.length > DISTINCT_COUNT_LIMIT) {
|
|
405
420
|
console.warn('[prisma-generator-express] Distinct count exceeds ' + DISTINCT_COUNT_LIMIT + ', falling back to approximate total')
|
|
406
421
|
const countArgs: Record<string, any> = {}
|
|
407
422
|
if (query.where) countArgs.where = query.where
|
|
408
|
-
return
|
|
409
|
-
? await delegate.guard(countShape, caller).count(countArgs)
|
|
410
|
-
: await delegate.count(countArgs)
|
|
423
|
+
return await delegate.count(countArgs)
|
|
411
424
|
}
|
|
412
425
|
|
|
413
426
|
return results.length
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateUnifiedHandler.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedHandler.ts"],"names":[],"mappings":";;AAOA,
|
|
1
|
+
{"version":3,"file":"generateUnifiedHandler.js","sourceRoot":"","sources":["../../src/generators/generateUnifiedHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,10 +66,10 @@ function generateScalarUIHandler(options) {
|
|
|
66
66
|
name: idx.name || idx.fields.join('_'),
|
|
67
67
|
fields: idx.fields,
|
|
68
68
|
}));
|
|
69
|
-
return `import
|
|
70
|
-
import { buildModelOpenApi } from '../buildModelOpenApi'
|
|
71
|
-
import type { RouteConfig } from '../routeConfig'
|
|
72
|
-
import { OPERATION_DEFS, isOperationEnabled } from '../operationDefinitions'
|
|
69
|
+
return `import { Request, Response } from 'express'
|
|
70
|
+
import { buildModelOpenApi } from '../buildModelOpenApi.js'
|
|
71
|
+
import type { RouteConfig } from '../routeConfig.js'
|
|
72
|
+
import { OPERATION_DEFS, isOperationEnabled } from '../operationDefinitions.js'
|
|
73
73
|
|
|
74
74
|
const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
|
|
75
75
|
|
|
@@ -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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"}
|
package/dist/index.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const generator_helper_1 = require("@prisma/generator-helper");
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
4
|
+
const generateUnifiedHandler_js_1 = require("./generators/generateUnifiedHandler.js");
|
|
5
|
+
const generateRouter_js_1 = require("./generators/generateRouter.js");
|
|
6
|
+
const generateUnifiedScalarUI_js_1 = require("./generators/generateUnifiedScalarUI.js");
|
|
7
|
+
const generateUnifiedDocs_js_1 = require("./generators/generateUnifiedDocs.js");
|
|
8
|
+
const generateQueryBuilderHelper_js_1 = require("./generators/generateQueryBuilderHelper.js");
|
|
9
|
+
const generateImportPrismaStatement_js_1 = require("./generators/generateImportPrismaStatement.js");
|
|
10
|
+
const writeFileSafely_js_1 = require("./utils/writeFileSafely.js");
|
|
11
|
+
const copyFiles_js_1 = require("./utils/copyFiles.js");
|
|
12
|
+
const constants_js_1 = require("./constants.js");
|
|
13
13
|
(0, generator_helper_1.generatorHandler)({
|
|
14
14
|
onManifest() {
|
|
15
15
|
return {
|
|
16
16
|
version: require('../package.json').version,
|
|
17
17
|
defaultOutput: '../generated',
|
|
18
|
-
prettyName:
|
|
18
|
+
prettyName: constants_js_1.GENERATOR_NAME,
|
|
19
19
|
};
|
|
20
20
|
},
|
|
21
21
|
async onGenerate(options) {
|
|
22
|
-
const prismaImportStatement = (0,
|
|
22
|
+
const prismaImportStatement = (0, generateImportPrismaStatement_js_1.generateImportPrismaStatement)(options);
|
|
23
23
|
console.log('\n═══ Prisma Generator Express ═══');
|
|
24
|
-
await (0,
|
|
24
|
+
await (0, copyFiles_js_1.copyFiles)(options);
|
|
25
25
|
const modelNames = [];
|
|
26
26
|
for (const model of options.dmmf.datamodel.models) {
|
|
27
27
|
if (model.documentation &&
|
|
@@ -30,9 +30,9 @@ const constants_1 = require("./constants");
|
|
|
30
30
|
continue;
|
|
31
31
|
}
|
|
32
32
|
modelNames.push(model.name);
|
|
33
|
-
const relativeClientPath = (0,
|
|
34
|
-
await (0,
|
|
35
|
-
content: (0,
|
|
33
|
+
const relativeClientPath = (0, generateImportPrismaStatement_js_1.getRelativeClientPath)(options, model.name);
|
|
34
|
+
await (0, writeFileSafely_js_1.writeFileSafely)({
|
|
35
|
+
content: (0, generateUnifiedHandler_js_1.generateUnifiedHandler)({
|
|
36
36
|
model: model,
|
|
37
37
|
prismaImportStatement,
|
|
38
38
|
}),
|
|
@@ -40,8 +40,8 @@ const constants_1 = require("./constants");
|
|
|
40
40
|
model: model,
|
|
41
41
|
operation: 'Handlers',
|
|
42
42
|
});
|
|
43
|
-
await (0,
|
|
44
|
-
content: (0,
|
|
43
|
+
await (0, writeFileSafely_js_1.writeFileSafely)({
|
|
44
|
+
content: (0, generateRouter_js_1.generateRouterFunction)({
|
|
45
45
|
model: model,
|
|
46
46
|
enums: options.dmmf.datamodel.enums,
|
|
47
47
|
relativeClientPath,
|
|
@@ -50,8 +50,8 @@ const constants_1 = require("./constants");
|
|
|
50
50
|
model: model,
|
|
51
51
|
operation: 'Router',
|
|
52
52
|
});
|
|
53
|
-
await (0,
|
|
54
|
-
content: (0,
|
|
53
|
+
await (0, writeFileSafely_js_1.writeFileSafely)({
|
|
54
|
+
content: (0, generateUnifiedScalarUI_js_1.generateScalarUIHandler)({
|
|
55
55
|
model: model,
|
|
56
56
|
enums: options.dmmf.datamodel.enums,
|
|
57
57
|
}),
|
|
@@ -60,13 +60,13 @@ const constants_1 = require("./constants");
|
|
|
60
60
|
operation: 'Docs',
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
-
await (0,
|
|
64
|
-
content: (0,
|
|
63
|
+
await (0, writeFileSafely_js_1.writeFileSafely)({
|
|
64
|
+
content: (0, generateUnifiedDocs_js_1.generateUnifiedDocs)(modelNames),
|
|
65
65
|
options,
|
|
66
66
|
operation: 'combinedDocs',
|
|
67
67
|
});
|
|
68
|
-
await (0,
|
|
69
|
-
content: (0,
|
|
68
|
+
await (0, writeFileSafely_js_1.writeFileSafely)({
|
|
69
|
+
content: (0, generateQueryBuilderHelper_js_1.generateQueryBuilderHelper)(options),
|
|
70
70
|
options,
|
|
71
71
|
operation: 'queryBuilder',
|
|
72
72
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,+DAIiC;AACjC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAAA,+DAIiC;AACjC,sFAA+E;AAC/E,sEAAuE;AACvE,wFAAiF;AACjF,gFAAyE;AACzE,8FAAuF;AACvF,oGAGsD;AACtD,mEAA4D;AAC5D,uDAAgD;AAChD,iDAA+C;AAE/C,IAAA,mCAAgB,EAAC;IACf,UAAU;QACR,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO;YAC3C,aAAa,EAAE,cAAc;YAC7B,UAAU,EAAE,6BAAc;SAC3B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAyB;QACxC,MAAM,qBAAqB,GAAG,IAAA,gEAA6B,EAAC,OAAO,CAAC,CAAA;QAEpE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;QAEjD,MAAM,IAAA,wBAAS,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,wDAAqB,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAErE,MAAM,IAAA,oCAAe,EAAC;gBACpB,OAAO,EAAE,IAAA,kDAAsB,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,oCAAe,EAAC;gBACpB,OAAO,EAAE,IAAA,0CAAsB,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,oCAAe,EAAC;gBACpB,OAAO,EAAE,IAAA,oDAAuB,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,oCAAe,EAAC;YACpB,OAAO,EAAE,IAAA,4CAAmB,EAAC,UAAU,CAAC;YACxC,OAAO;YACP,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAA;QAEF,MAAM,IAAA,oCAAe,EAAC;YACpB,OAAO,EAAE,IAAA,0DAA0B,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"}
|
|
@@ -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"}
|