prisma-generator-express 1.57.0 → 1.58.1
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 +111 -29
- package/dist/copy/misc.js +25 -6
- package/dist/copy/misc.js.map +1 -1
- package/dist/generators/generateFastifyHandler.js +11 -0
- package/dist/generators/generateFastifyHandler.js.map +1 -1
- package/dist/generators/generateHonoHandler.js +14 -20
- package/dist/generators/generateHonoHandler.js.map +1 -1
- package/dist/generators/generateImportPrismaStatement.js +7 -1
- package/dist/generators/generateImportPrismaStatement.js.map +1 -1
- package/dist/generators/generateOperationCore.js +58 -17
- package/dist/generators/generateOperationCore.js.map +1 -1
- package/dist/generators/generateRouteConfigType.js +12 -7
- package/dist/generators/generateRouteConfigType.js.map +1 -1
- package/dist/generators/generateRouter.js +57 -32
- package/dist/generators/generateRouter.js.map +1 -1
- package/dist/generators/generateRouterFastify.js +235 -191
- package/dist/generators/generateRouterFastify.js.map +1 -1
- package/dist/generators/generateRouterHono.d.ts +2 -3
- package/dist/generators/generateRouterHono.js +131 -89
- package/dist/generators/generateRouterHono.js.map +1 -1
- package/dist/index.js +8 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/copy/autoIncludeRuntime.ts +9 -5
- package/src/copy/buildModelOpenApi.ts +96 -0
- package/src/copy/docsRenderer.ts +577 -174
- package/src/copy/materializedRouter.ts +40 -1
- package/src/copy/misc.ts +23 -6
- package/src/copy/operationDefinitions.ts +10 -0
- package/src/copy/operationRuntime.ts +28 -9
- package/src/copy/routeConfig.express.ts +9 -9
- package/src/copy/routeConfig.hono.ts +63 -5
- package/src/copy/routeConfig.ts +44 -22
- package/src/generators/generateFastifyHandler.ts +12 -0
- package/src/generators/generateHonoHandler.ts +15 -20
- package/src/generators/generateImportPrismaStatement.ts +10 -1
- package/src/generators/generateOperationCore.ts +58 -17
- package/src/generators/generateRouteConfigType.ts +13 -8
- package/src/generators/generateRouter.ts +57 -32
- package/src/generators/generateRouterFastify.ts +235 -191
- package/src/generators/generateRouterHono.ts +131 -91
- package/src/index.ts +11 -7
|
@@ -562,6 +562,53 @@ function generateOperationSchemas(
|
|
|
562
562
|
required: ['count'],
|
|
563
563
|
}
|
|
564
564
|
|
|
565
|
+
spec.components.schemas[`${modelName}UpdateEachItemInput`] = {
|
|
566
|
+
type: 'object',
|
|
567
|
+
properties: {
|
|
568
|
+
where: { type: 'object', description: 'Prisma unique or where filter' },
|
|
569
|
+
data: { $ref: `#/components/schemas/${modelName}UpdateInput` },
|
|
570
|
+
},
|
|
571
|
+
required: ['where', 'data'],
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
spec.components.schemas[`${modelName}UpdateEachRowOk`] = {
|
|
575
|
+
type: 'object',
|
|
576
|
+
properties: {
|
|
577
|
+
status: { type: 'string', enum: ['ok'] },
|
|
578
|
+
data: { $ref: `#/components/schemas/${modelName}Response` },
|
|
579
|
+
},
|
|
580
|
+
required: ['status', 'data'],
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
spec.components.schemas[`${modelName}UpdateEachRowError`] = {
|
|
584
|
+
type: 'object',
|
|
585
|
+
properties: {
|
|
586
|
+
status: { type: 'string', enum: ['error'] },
|
|
587
|
+
error: { type: 'string' },
|
|
588
|
+
},
|
|
589
|
+
required: ['status', 'error'],
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
spec.components.schemas[`${modelName}UpdateEachResponse`] = {
|
|
593
|
+
description:
|
|
594
|
+
'Non-atomic mode returns per-row status objects; atomic mode (header x-batch-atomic: true) returns an array of updated records.',
|
|
595
|
+
oneOf: [
|
|
596
|
+
{
|
|
597
|
+
type: 'array',
|
|
598
|
+
items: {
|
|
599
|
+
oneOf: [
|
|
600
|
+
{ $ref: `#/components/schemas/${modelName}UpdateEachRowOk` },
|
|
601
|
+
{ $ref: `#/components/schemas/${modelName}UpdateEachRowError` },
|
|
602
|
+
],
|
|
603
|
+
},
|
|
604
|
+
},
|
|
605
|
+
{
|
|
606
|
+
type: 'array',
|
|
607
|
+
items: { $ref: `#/components/schemas/${modelName}Response` },
|
|
608
|
+
},
|
|
609
|
+
],
|
|
610
|
+
}
|
|
611
|
+
|
|
565
612
|
const numericFields = fields.filter(
|
|
566
613
|
(f) => f.kind === 'scalar' && NUMERIC_SCALAR_TYPES.has(f.type),
|
|
567
614
|
)
|
|
@@ -815,6 +862,12 @@ function generatePaths(
|
|
|
815
862
|
const groupByItemRef = {
|
|
816
863
|
$ref: `#/components/schemas/${modelName}GroupByItem`,
|
|
817
864
|
}
|
|
865
|
+
const updateEachItemRef = {
|
|
866
|
+
$ref: `#/components/schemas/${modelName}UpdateEachItemInput`,
|
|
867
|
+
}
|
|
868
|
+
const updateEachResponseRef = {
|
|
869
|
+
$ref: `#/components/schemas/${modelName}UpdateEachResponse`,
|
|
870
|
+
}
|
|
818
871
|
|
|
819
872
|
if (opEnabled(config, 'findMany')) {
|
|
820
873
|
const op: any = {
|
|
@@ -1485,6 +1538,49 @@ function generatePaths(
|
|
|
1485
1538
|
)
|
|
1486
1539
|
}
|
|
1487
1540
|
}
|
|
1541
|
+
|
|
1542
|
+
if (opEnabled(config, 'updateEach')) {
|
|
1543
|
+
const op: any = {
|
|
1544
|
+
tags: [modelName],
|
|
1545
|
+
summary: `Update each ${modelName} (batch)`,
|
|
1546
|
+
operationId: `${modelName}UpdateEach`,
|
|
1547
|
+
description:
|
|
1548
|
+
'Internal batch endpoint. Not enabled by enableAll — must be opted into explicitly. ' +
|
|
1549
|
+
'Bypasses guard shapes; protect with before hooks. ' +
|
|
1550
|
+
'Non-atomic mode (default): up to 1000 items, per-row status results. ' +
|
|
1551
|
+
'Atomic mode (header x-batch-atomic: true): up to 100 items, single transaction, any row failure rolls back the whole batch.',
|
|
1552
|
+
parameters: [
|
|
1553
|
+
{
|
|
1554
|
+
name: 'x-batch-atomic',
|
|
1555
|
+
in: 'header',
|
|
1556
|
+
required: false,
|
|
1557
|
+
schema: { type: 'string', enum: ['true', 'false'] },
|
|
1558
|
+
description:
|
|
1559
|
+
'Set to "true" to run all rows in a single interactive transaction (max 100 items).',
|
|
1560
|
+
},
|
|
1561
|
+
],
|
|
1562
|
+
requestBody: {
|
|
1563
|
+
required: true,
|
|
1564
|
+
content: {
|
|
1565
|
+
'application/json': {
|
|
1566
|
+
schema: {
|
|
1567
|
+
type: 'array',
|
|
1568
|
+
maxItems: 1000,
|
|
1569
|
+
items: updateEachItemRef,
|
|
1570
|
+
},
|
|
1571
|
+
},
|
|
1572
|
+
},
|
|
1573
|
+
},
|
|
1574
|
+
responses: {
|
|
1575
|
+
'200': {
|
|
1576
|
+
description: 'Success',
|
|
1577
|
+
content: { 'application/json': { schema: updateEachResponseRef } },
|
|
1578
|
+
},
|
|
1579
|
+
},
|
|
1580
|
+
}
|
|
1581
|
+
addErrorResponses(op, [400, 403, 409, 500, 501, 503])
|
|
1582
|
+
addPath(spec, opPath(basePath, 'updateEach'), 'post', op)
|
|
1583
|
+
}
|
|
1488
1584
|
}
|
|
1489
1585
|
|
|
1490
1586
|
function addPath(
|