prisma-generator-express 1.57.0 → 1.58.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 (41) hide show
  1. package/README.md +111 -29
  2. package/dist/copy/misc.js +25 -6
  3. package/dist/copy/misc.js.map +1 -1
  4. package/dist/generators/generateFastifyHandler.js +11 -0
  5. package/dist/generators/generateFastifyHandler.js.map +1 -1
  6. package/dist/generators/generateHonoHandler.js +14 -20
  7. package/dist/generators/generateHonoHandler.js.map +1 -1
  8. package/dist/generators/generateImportPrismaStatement.js +7 -1
  9. package/dist/generators/generateImportPrismaStatement.js.map +1 -1
  10. package/dist/generators/generateOperationCore.js +58 -17
  11. package/dist/generators/generateOperationCore.js.map +1 -1
  12. package/dist/generators/generateRouteConfigType.js +12 -7
  13. package/dist/generators/generateRouteConfigType.js.map +1 -1
  14. package/dist/generators/generateRouter.js +57 -32
  15. package/dist/generators/generateRouter.js.map +1 -1
  16. package/dist/generators/generateRouterFastify.js +235 -191
  17. package/dist/generators/generateRouterFastify.js.map +1 -1
  18. package/dist/generators/generateRouterHono.js +121 -87
  19. package/dist/generators/generateRouterHono.js.map +1 -1
  20. package/dist/index.js +4 -4
  21. package/dist/index.js.map +1 -1
  22. package/package.json +1 -1
  23. package/src/copy/autoIncludeRuntime.ts +9 -5
  24. package/src/copy/buildModelOpenApi.ts +96 -0
  25. package/src/copy/docsRenderer.ts +577 -174
  26. package/src/copy/materializedRouter.ts +40 -1
  27. package/src/copy/misc.ts +23 -6
  28. package/src/copy/operationDefinitions.ts +10 -0
  29. package/src/copy/operationRuntime.ts +28 -9
  30. package/src/copy/routeConfig.express.ts +9 -9
  31. package/src/copy/routeConfig.hono.ts +63 -5
  32. package/src/copy/routeConfig.ts +44 -22
  33. package/src/generators/generateFastifyHandler.ts +12 -0
  34. package/src/generators/generateHonoHandler.ts +15 -20
  35. package/src/generators/generateImportPrismaStatement.ts +10 -1
  36. package/src/generators/generateOperationCore.ts +58 -17
  37. package/src/generators/generateRouteConfigType.ts +13 -8
  38. package/src/generators/generateRouter.ts +57 -32
  39. package/src/generators/generateRouterFastify.ts +235 -191
  40. package/src/generators/generateRouterHono.ts +121 -87
  41. package/src/index.ts +6 -4
@@ -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(