prisma-generator-express 1.37.1 → 1.38.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.
@@ -1,3 +1,4 @@
1
1
  import { GeneratorOptions } from '@prisma/generator-helper';
2
2
  export declare function generateImportPrismaStatement(generatorOptions: GeneratorOptions): string;
3
3
  export declare function getRelativeClientPath(generatorOptions: GeneratorOptions, modelName: string): string;
4
+ export declare function getGuardShapesImport(options: GeneratorOptions, modelName: string): string | null;
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.generateImportPrismaStatement = generateImportPrismaStatement;
7
7
  exports.getRelativeClientPath = getRelativeClientPath;
8
+ exports.getGuardShapesImport = getGuardShapesImport;
8
9
  const path_1 = __importDefault(require("path"));
9
10
  function findClientGenerator(options) {
10
11
  const byName = options.otherGenerators.find((gen) => gen.name === 'client');
@@ -52,4 +53,27 @@ function getRelativeClientPath(generatorOptions, modelName) {
52
53
  const routerDirPath = path_1.default.join(outputValue, modelName);
53
54
  return getRelativeImportPath(routerDirPath, clientGenerator.output.value);
54
55
  }
56
+ function findGuardGenerator(options) {
57
+ const byProvider = options.otherGenerators.find((gen) => !!gen.provider?.value && gen.provider.value.includes('prisma-guard'));
58
+ if (byProvider)
59
+ return byProvider;
60
+ const byConfig = options.otherGenerators.find((gen) => !!gen.config &&
61
+ ('typedGuardShapes' in gen.config ||
62
+ 'onInvalidZod' in gen.config ||
63
+ 'findUniqueMode' in gen.config));
64
+ return byConfig || null;
65
+ }
66
+ function getGuardShapesImport(options, modelName) {
67
+ const guard = findGuardGenerator(options);
68
+ if (!guard || !guard.output?.value)
69
+ return null;
70
+ if (guard.config?.typedGuardShapes === 'false')
71
+ return null;
72
+ const outputValue = options.generator.output?.value;
73
+ if (!outputValue)
74
+ return null;
75
+ const fromDir = path_1.default.join(outputValue, modelName);
76
+ const shapesPath = path_1.default.join(guard.output.value, 'shapes');
77
+ return getRelativeImportPath(fromDir, shapesPath);
78
+ }
55
79
  //# sourceMappingURL=generateImportPrismaStatement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateImportPrismaStatement.js","sourceRoot":"","sources":["../../src/generators/generateImportPrismaStatement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateImportPrismaStatement.js","sourceRoot":"","sources":["../../src/generators/generateImportPrismaStatement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function generateRouteConfigType(modelName: string, hookHandlerType: string, guardShapesImport: string | null): string;
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateRouteConfigType = generateRouteConfigType;
4
+ const ROUTER_OPERATIONS = [
5
+ 'findUnique',
6
+ 'findUniqueOrThrow',
7
+ 'findFirst',
8
+ 'findFirstOrThrow',
9
+ 'findMany',
10
+ 'findManyPaginated',
11
+ 'count',
12
+ 'aggregate',
13
+ 'groupBy',
14
+ 'create',
15
+ 'createMany',
16
+ 'createManyAndReturn',
17
+ 'update',
18
+ 'updateMany',
19
+ 'updateManyAndReturn',
20
+ 'upsert',
21
+ 'delete',
22
+ 'deleteMany',
23
+ ];
24
+ const ROUTER_OP_TO_SHAPE_OP = {
25
+ findUnique: 'findUnique',
26
+ findUniqueOrThrow: 'findUniqueOrThrow',
27
+ findFirst: 'findFirst',
28
+ findFirstOrThrow: 'findFirstOrThrow',
29
+ findMany: 'findMany',
30
+ findManyPaginated: 'findManyPaginated',
31
+ count: 'count',
32
+ aggregate: 'aggregate',
33
+ groupBy: 'groupBy',
34
+ create: 'create',
35
+ createMany: 'createMany',
36
+ createManyAndReturn: 'createManyAndReturn',
37
+ update: 'update',
38
+ updateMany: 'updateMany',
39
+ updateManyAndReturn: 'updateManyAndReturn',
40
+ upsert: 'upsert',
41
+ delete: 'delete',
42
+ deleteMany: 'deleteMany',
43
+ };
44
+ function capitalize(s) {
45
+ return s.charAt(0).toUpperCase() + s.slice(1);
46
+ }
47
+ function generateRouteConfigType(modelName, hookHandlerType, guardShapesImport) {
48
+ const m = modelName;
49
+ if (!guardShapesImport) {
50
+ return `export type ${m}RouteConfig<TCtx = unknown> = RouteConfig\n`;
51
+ }
52
+ const shapeOps = Object.values(ROUTER_OP_TO_SHAPE_OP).filter((v, i, a) => a.indexOf(v) === i);
53
+ const opShapeImports = shapeOps
54
+ .map((op) => `${m}${capitalize(op)}ShapeInput`)
55
+ .join(',\n ');
56
+ const overrides = ROUTER_OPERATIONS.map((routerOp) => {
57
+ const shapeOp = ROUTER_OP_TO_SHAPE_OP[routerOp];
58
+ const c = capitalize(shapeOp);
59
+ return (` ${routerOp}?: {\n` +
60
+ ` before?: ${hookHandlerType}[]\n` +
61
+ ` after?: ${hookHandlerType}[]\n` +
62
+ ` shape?: ${m}${c}ShapeInput<TCtx>\n` +
63
+ ` }`);
64
+ }).join('\n');
65
+ const omitKeys = ROUTER_OPERATIONS.map((k) => `'${k}'`).join('\n | ');
66
+ return (`import type {\n ${opShapeImports}\n} from '${guardShapesImport}'\n\n` +
67
+ `export type ${m}RouteConfig<TCtx = unknown> = Omit<\n` +
68
+ ` RouteConfig,\n` +
69
+ ` | ${omitKeys}\n` +
70
+ `> & {\n${overrides}\n}\n`);
71
+ }
72
+ //# sourceMappingURL=generateRouteConfigType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateRouteConfigType.js","sourceRoot":"","sources":["../../src/generators/generateRouteConfigType.ts"],"names":[],"mappings":";;AAgDA,0DAwCC;AAxFD,MAAM,iBAAiB,GAAG;IACxB,YAAY;IACZ,mBAAmB;IACnB,WAAW;IACX,kBAAkB;IAClB,UAAU;IACV,mBAAmB;IACnB,OAAO;IACP,WAAW;IACX,SAAS;IACT,QAAQ;IACR,YAAY;IACZ,qBAAqB;IACrB,QAAQ;IACR,YAAY;IACZ,qBAAqB;IACrB,QAAQ;IACR,QAAQ;IACR,YAAY;CACJ,CAAA;AAIV,MAAM,qBAAqB,GAAoC;IAC7D,UAAU,EAAE,YAAY;IACxB,iBAAiB,EAAE,mBAAmB;IACtC,SAAS,EAAE,WAAW;IACtB,gBAAgB,EAAE,kBAAkB;IACpC,QAAQ,EAAE,UAAU;IACpB,iBAAiB,EAAE,mBAAmB;IACtC,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,qBAAqB;IAC1C,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,mBAAmB,EAAE,qBAAqB;IAC1C,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;CACzB,CAAA;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,SAAgB,uBAAuB,CACrC,SAAiB,EACjB,eAAuB,EACvB,iBAAgC;IAEhC,MAAM,CAAC,GAAG,SAAS,CAAA;IAEnB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,eAAe,CAAC,6CAA6C,CAAA;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAC1D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAChC,CAAA;IAED,MAAM,cAAc,GAAG,QAAQ;SAC5B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC;SAC9C,IAAI,CAAC,OAAO,CAAC,CAAA;IAEhB,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACnD,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QAC7B,OAAO,CACL,KAAK,QAAQ,QAAQ;YACrB,gBAAgB,eAAe,MAAM;YACrC,eAAe,eAAe,MAAM;YACpC,eAAe,CAAC,GAAG,CAAC,oBAAoB;YACxC,KAAK,CACN,CAAA;IACH,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAEtE,OAAO,CACL,oBAAoB,cAAc,aAAa,iBAAiB,OAAO;QACvE,eAAe,CAAC,uCAAuC;QACvD,kBAAkB;QAClB,OAAO,QAAQ,IAAI;QACnB,UAAU,SAAS,OAAO,CAC3B,CAAA;AACH,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { DMMF } from '@prisma/generator-helper';
2
- export declare function generateRouterFunction({ model, enums, relativeClientPath, }: {
2
+ export declare function generateRouterFunction({ model, enums, relativeClientPath, guardShapesImport, }: {
3
3
  model: DMMF.Model;
4
4
  enums: DMMF.DatamodelEnum[];
5
5
  relativeClientPath: string;
6
+ guardShapesImport: string | null;
6
7
  }): string;
@@ -2,7 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateRouterFunction = generateRouterFunction;
4
4
  const strings_1 = require("../utils/strings");
5
- function generateRouterFunction({ model, enums, relativeClientPath, }) {
5
+ const generateRouteConfigType_1 = require("./generateRouteConfigType");
6
+ function generateRouterFunction({ model, enums, relativeClientPath, guardShapesImport, }) {
6
7
  const modelName = model.name;
7
8
  const prefix = (0, strings_1.toCamelCase)(modelName);
8
9
  const modelNameLower = modelName.toLowerCase();
@@ -53,6 +54,7 @@ import { sanitizeKeys } from '../misc'
53
54
  import { buildModelOpenApi } from '../buildModelOpenApi'
54
55
  import { transformResult } from '../operationRuntime'
55
56
 
57
+ ${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'RequestHandler', guardShapesImport)}
56
58
  const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
57
59
 
58
60
  const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
@@ -86,7 +88,7 @@ function getQueryBuilderConfig(config: RouteConfig) {
86
88
  return {}
87
89
  }
88
90
 
89
- export function ${routerFunctionName}(config: RouteConfig = {}) {
91
+ export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteConfig<TCtx> = {}) {
90
92
  const router = express.Router()
91
93
 
92
94
  router.use(express.json())
@@ -1 +1 @@
1
- {"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateRouter.js","sourceRoot":"","sources":["../../src/generators/generateRouter.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { DMMF } from '@prisma/generator-helper';
2
- export declare function generateFastifyRouterFunction({ model, enums, }: {
2
+ export declare function generateFastifyRouterFunction({ model, enums, guardShapesImport, }: {
3
3
  model: DMMF.Model;
4
4
  enums: DMMF.DatamodelEnum[];
5
+ guardShapesImport: string | null;
5
6
  }): string;
@@ -2,7 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateFastifyRouterFunction = generateFastifyRouterFunction;
4
4
  const strings_1 = require("../utils/strings");
5
- function generateFastifyRouterFunction({ model, enums, }) {
5
+ const generateRouteConfigType_1 = require("./generateRouteConfigType");
6
+ function generateFastifyRouterFunction({ model, enums, guardShapesImport, }) {
6
7
  const modelName = model.name;
7
8
  const prefix = (0, strings_1.toCamelCase)(modelName);
8
9
  const modelNameLower = modelName.toLowerCase();
@@ -52,6 +53,7 @@ import { sanitizeKeys } from '../misc'
52
53
  import { buildModelOpenApi } from '../buildModelOpenApi'
53
54
  import { mapError, transformResult, HttpError } from '../operationRuntime'
54
55
 
56
+ ${(0, generateRouteConfigType_1.generateRouteConfigType)(modelName, 'FastifyHookHandler', guardShapesImport)}
55
57
  const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
56
58
 
57
59
  const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
@@ -145,9 +147,9 @@ function sendError(reply: FastifyReply, error: unknown): void {
145
147
  reply.code(httpError.status).send({ message: httpError.message })
146
148
  }
147
149
 
148
- export async function ${routerFunctionName}(
150
+ export async function ${routerFunctionName}<TCtx = unknown>(
149
151
  fastify: FastifyInstance,
150
- config: RouteConfig = {},
152
+ config: ${modelName}RouteConfig<TCtx> = {},
151
153
  ) {
152
154
  const customPrefix = normalizePrefix(config.customUrlPrefix || '')
153
155
  const modelPrefix = config.addModelPrefix !== false ? '/${modelNameLower}' : ''
@@ -1 +1 @@
1
- {"version":3,"file":"generateRouterFastify.js","sourceRoot":"","sources":["../../src/generators/generateRouterFastify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateRouterFastify.js","sourceRoot":"","sources":["../../src/generators/generateRouterFastify.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -51,9 +51,6 @@ function getTarget(options) {
51
51
  });
52
52
  const modelNames = [];
53
53
  const generateHandler = target === 'fastify' ? generateFastifyHandler_1.generateFastifyHandler : generateUnifiedHandler_1.generateUnifiedHandler;
54
- const generateRouter = target === 'fastify'
55
- ? generateRouterFastify_1.generateFastifyRouterFunction
56
- : generateRouter_1.generateRouterFunction;
57
54
  for (const model of options.dmmf.datamodel.models) {
58
55
  if (model.documentation &&
59
56
  model.documentation.includes('generator off')) {
@@ -62,6 +59,7 @@ function getTarget(options) {
62
59
  }
63
60
  modelNames.push(model.name);
64
61
  const relativeClientPath = (0, generateImportPrismaStatement_1.getRelativeClientPath)(options, model.name);
62
+ const guardShapesImport = (0, generateImportPrismaStatement_1.getGuardShapesImport)(options, model.name);
65
63
  await (0, writeFileSafely_1.writeFileSafely)({
66
64
  content: (0, generateOperationCore_1.generateModelCore)({ model: model }),
67
65
  options,
@@ -76,12 +74,20 @@ function getTarget(options) {
76
74
  model: model,
77
75
  operation: 'Handlers',
78
76
  });
79
- await (0, writeFileSafely_1.writeFileSafely)({
80
- content: generateRouter({
77
+ const routerContent = target === 'fastify'
78
+ ? (0, generateRouterFastify_1.generateFastifyRouterFunction)({
79
+ model: model,
80
+ enums: options.dmmf.datamodel.enums,
81
+ guardShapesImport,
82
+ })
83
+ : (0, generateRouter_1.generateRouterFunction)({
81
84
  model: model,
82
85
  enums: options.dmmf.datamodel.enums,
83
86
  relativeClientPath,
84
- }),
87
+ guardShapesImport,
88
+ });
89
+ await (0, writeFileSafely_1.writeFileSafely)({
90
+ content: routerContent,
85
91
  options,
86
92
  model: model,
87
93
  operation: 'Router',
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "prisma-generator-express",
3
3
  "description": "Prisma generator for Express/Fastify CRUD API with OpenAPI documentation",
4
- "version": "1.37.1",
4
+ "version": "1.38.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
@@ -9,6 +9,8 @@ import {
9
9
 
10
10
  export type { QueryBuilderConfig, OpenApiServerConfig, OpenApiSecuritySchemeConfig }
11
11
 
12
- export type OperationConfig = BaseOperationConfig<RequestHandler>
12
+ export type OperationConfig<TShape = Record<string, any>> =
13
+ BaseOperationConfig<RequestHandler, TShape>
13
14
 
14
- export type RouteConfig = BaseRouteConfig<RequestHandler, Request>
15
+ export type RouteConfig<TShape = Record<string, any>> =
16
+ BaseRouteConfig<RequestHandler, Request, TShape>
@@ -14,6 +14,8 @@ export type FastifyHookHandler = (
14
14
  reply: FastifyReply,
15
15
  ) => Promise<void> | void
16
16
 
17
- export type OperationConfig = BaseOperationConfig<FastifyHookHandler>
17
+ export type OperationConfig<TShape = Record<string, any>> =
18
+ BaseOperationConfig<FastifyHookHandler, TShape>
18
19
 
19
- export type RouteConfig = BaseRouteConfig<FastifyHookHandler, FastifyRequest>
20
+ export type RouteConfig<TShape = Record<string, any>> =
21
+ BaseRouteConfig<FastifyHookHandler, FastifyRequest, TShape>
@@ -20,13 +20,13 @@ export interface OpenApiSecuritySchemeConfig {
20
20
  description?: string
21
21
  }
22
22
 
23
- export interface BaseOperationConfig<HookHandler> {
23
+ export interface BaseOperationConfig<HookHandler, TShape = Record<string, any>> {
24
24
  before?: HookHandler[]
25
25
  after?: HookHandler[]
26
- shape?: Record<string, any>
26
+ shape?: TShape
27
27
  }
28
28
 
29
- export interface BaseRouteConfig<HookHandler, RequestType> {
29
+ export interface BaseRouteConfig<HookHandler, RequestType, TShape = Record<string, any>> {
30
30
  enableAll?: boolean
31
31
  addModelPrefix?: boolean
32
32
  customUrlPrefix?: string
@@ -34,45 +34,40 @@ export interface BaseRouteConfig<HookHandler, RequestType> {
34
34
  disableOpenApi?: boolean
35
35
  disablePostReads?: boolean
36
36
  scalarCdnUrl?: string
37
-
38
37
  openApiTitle?: string
39
38
  openApiDescription?: string
40
39
  openApiVersion?: string
41
40
  openApiServers?: OpenApiServerConfig[]
42
41
  openApiSecuritySchemes?: Record<string, OpenApiSecuritySchemeConfig>
43
42
  openApiSecurity?: Record<string, string[]>[]
44
-
45
43
  guard?: {
46
44
  resolveVariant?: (request: RequestType) => string | undefined
47
45
  variantHeader?: string
48
46
  }
49
-
50
47
  queryBuilder?: QueryBuilderConfig | false
51
-
52
48
  pagination?: {
53
49
  defaultLimit?: number
54
50
  maxLimit?: number
55
51
  distinctCountLimit?: number
56
52
  }
57
-
58
- findUnique?: BaseOperationConfig<HookHandler>
59
- findUniqueOrThrow?: BaseOperationConfig<HookHandler>
60
- findFirst?: BaseOperationConfig<HookHandler>
61
- findFirstOrThrow?: BaseOperationConfig<HookHandler>
62
- findMany?: BaseOperationConfig<HookHandler>
63
- findManyPaginated?: BaseOperationConfig<HookHandler>
64
- create?: BaseOperationConfig<HookHandler>
65
- createMany?: BaseOperationConfig<HookHandler>
66
- createManyAndReturn?: BaseOperationConfig<HookHandler>
67
- update?: BaseOperationConfig<HookHandler>
68
- updateMany?: BaseOperationConfig<HookHandler>
69
- updateManyAndReturn?: BaseOperationConfig<HookHandler>
70
- upsert?: BaseOperationConfig<HookHandler>
71
- delete?: BaseOperationConfig<HookHandler>
72
- deleteMany?: BaseOperationConfig<HookHandler>
73
- aggregate?: BaseOperationConfig<HookHandler>
74
- count?: BaseOperationConfig<HookHandler>
75
- groupBy?: BaseOperationConfig<HookHandler>
53
+ findUnique?: BaseOperationConfig<HookHandler, TShape>
54
+ findUniqueOrThrow?: BaseOperationConfig<HookHandler, TShape>
55
+ findFirst?: BaseOperationConfig<HookHandler, TShape>
56
+ findFirstOrThrow?: BaseOperationConfig<HookHandler, TShape>
57
+ findMany?: BaseOperationConfig<HookHandler, TShape>
58
+ findManyPaginated?: BaseOperationConfig<HookHandler, TShape>
59
+ create?: BaseOperationConfig<HookHandler, TShape>
60
+ createMany?: BaseOperationConfig<HookHandler, TShape>
61
+ createManyAndReturn?: BaseOperationConfig<HookHandler, TShape>
62
+ update?: BaseOperationConfig<HookHandler, TShape>
63
+ updateMany?: BaseOperationConfig<HookHandler, TShape>
64
+ updateManyAndReturn?: BaseOperationConfig<HookHandler, TShape>
65
+ upsert?: BaseOperationConfig<HookHandler, TShape>
66
+ delete?: BaseOperationConfig<HookHandler, TShape>
67
+ deleteMany?: BaseOperationConfig<HookHandler, TShape>
68
+ aggregate?: BaseOperationConfig<HookHandler, TShape>
69
+ count?: BaseOperationConfig<HookHandler, TShape>
70
+ groupBy?: BaseOperationConfig<HookHandler, TShape>
76
71
  }
77
72
 
78
73
  export type OperationConfig = BaseOperationConfig<any>
@@ -75,4 +75,38 @@ export function getRelativeClientPath(
75
75
  const routerDirPath = path.join(outputValue, modelName)
76
76
 
77
77
  return getRelativeImportPath(routerDirPath, clientGenerator.output.value)
78
+ }
79
+
80
+ function findGuardGenerator(options: GeneratorOptions) {
81
+ const byProvider = options.otherGenerators.find(
82
+ (gen) =>
83
+ !!gen.provider?.value && gen.provider.value.includes('prisma-guard'),
84
+ )
85
+ if (byProvider) return byProvider
86
+
87
+ const byConfig = options.otherGenerators.find(
88
+ (gen) =>
89
+ !!gen.config &&
90
+ ('typedGuardShapes' in gen.config ||
91
+ 'onInvalidZod' in gen.config ||
92
+ 'findUniqueMode' in gen.config),
93
+ )
94
+ return byConfig || null
95
+ }
96
+
97
+ export function getGuardShapesImport(
98
+ options: GeneratorOptions,
99
+ modelName: string,
100
+ ): string | null {
101
+ const guard = findGuardGenerator(options)
102
+ if (!guard || !guard.output?.value) return null
103
+
104
+ if (guard.config?.typedGuardShapes === 'false') return null
105
+
106
+ const outputValue = options.generator.output?.value
107
+ if (!outputValue) return null
108
+
109
+ const fromDir = path.join(outputValue, modelName)
110
+ const shapesPath = path.join(guard.output.value, 'shapes')
111
+ return getRelativeImportPath(fromDir, shapesPath)
78
112
  }
@@ -0,0 +1,89 @@
1
+ const ROUTER_OPERATIONS = [
2
+ 'findUnique',
3
+ 'findUniqueOrThrow',
4
+ 'findFirst',
5
+ 'findFirstOrThrow',
6
+ 'findMany',
7
+ 'findManyPaginated',
8
+ 'count',
9
+ 'aggregate',
10
+ 'groupBy',
11
+ 'create',
12
+ 'createMany',
13
+ 'createManyAndReturn',
14
+ 'update',
15
+ 'updateMany',
16
+ 'updateManyAndReturn',
17
+ 'upsert',
18
+ 'delete',
19
+ 'deleteMany',
20
+ ] as const
21
+
22
+ type RouterOperation = (typeof ROUTER_OPERATIONS)[number]
23
+
24
+ const ROUTER_OP_TO_SHAPE_OP: Record<RouterOperation, string> = {
25
+ findUnique: 'findUnique',
26
+ findUniqueOrThrow: 'findUniqueOrThrow',
27
+ findFirst: 'findFirst',
28
+ findFirstOrThrow: 'findFirstOrThrow',
29
+ findMany: 'findMany',
30
+ findManyPaginated: 'findManyPaginated',
31
+ count: 'count',
32
+ aggregate: 'aggregate',
33
+ groupBy: 'groupBy',
34
+ create: 'create',
35
+ createMany: 'createMany',
36
+ createManyAndReturn: 'createManyAndReturn',
37
+ update: 'update',
38
+ updateMany: 'updateMany',
39
+ updateManyAndReturn: 'updateManyAndReturn',
40
+ upsert: 'upsert',
41
+ delete: 'delete',
42
+ deleteMany: 'deleteMany',
43
+ }
44
+
45
+ function capitalize(s: string): string {
46
+ return s.charAt(0).toUpperCase() + s.slice(1)
47
+ }
48
+
49
+ export function generateRouteConfigType(
50
+ modelName: string,
51
+ hookHandlerType: string,
52
+ guardShapesImport: string | null,
53
+ ): string {
54
+ const m = modelName
55
+
56
+ if (!guardShapesImport) {
57
+ return `export type ${m}RouteConfig<TCtx = unknown> = RouteConfig\n`
58
+ }
59
+
60
+ const shapeOps = Object.values(ROUTER_OP_TO_SHAPE_OP).filter(
61
+ (v, i, a) => a.indexOf(v) === i,
62
+ )
63
+
64
+ const opShapeImports = shapeOps
65
+ .map((op) => `${m}${capitalize(op)}ShapeInput`)
66
+ .join(',\n ')
67
+
68
+ const overrides = ROUTER_OPERATIONS.map((routerOp) => {
69
+ const shapeOp = ROUTER_OP_TO_SHAPE_OP[routerOp]
70
+ const c = capitalize(shapeOp)
71
+ return (
72
+ ` ${routerOp}?: {\n` +
73
+ ` before?: ${hookHandlerType}[]\n` +
74
+ ` after?: ${hookHandlerType}[]\n` +
75
+ ` shape?: ${m}${c}ShapeInput<TCtx>\n` +
76
+ ` }`
77
+ )
78
+ }).join('\n')
79
+
80
+ const omitKeys = ROUTER_OPERATIONS.map((k) => `'${k}'`).join('\n | ')
81
+
82
+ return (
83
+ `import type {\n ${opShapeImports}\n} from '${guardShapesImport}'\n\n` +
84
+ `export type ${m}RouteConfig<TCtx = unknown> = Omit<\n` +
85
+ ` RouteConfig,\n` +
86
+ ` | ${omitKeys}\n` +
87
+ `> & {\n${overrides}\n}\n`
88
+ )
89
+ }
@@ -1,14 +1,17 @@
1
1
  import { DMMF } from '@prisma/generator-helper'
2
2
  import { toCamelCase } from '../utils/strings'
3
+ import { generateRouteConfigType } from './generateRouteConfigType'
3
4
 
4
5
  export function generateRouterFunction({
5
6
  model,
6
7
  enums,
7
8
  relativeClientPath,
9
+ guardShapesImport,
8
10
  }: {
9
11
  model: DMMF.Model
10
12
  enums: DMMF.DatamodelEnum[]
11
13
  relativeClientPath: string
14
+ guardShapesImport: string | null
12
15
  }): string {
13
16
  const modelName = model.name
14
17
  const prefix = toCamelCase(modelName)
@@ -66,6 +69,7 @@ import { sanitizeKeys } from '../misc'
66
69
  import { buildModelOpenApi } from '../buildModelOpenApi'
67
70
  import { transformResult } from '../operationRuntime'
68
71
 
72
+ ${generateRouteConfigType(modelName, 'RequestHandler', guardShapesImport)}
69
73
  const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
70
74
 
71
75
  const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
@@ -99,7 +103,7 @@ function getQueryBuilderConfig(config: RouteConfig) {
99
103
  return {}
100
104
  }
101
105
 
102
- export function ${routerFunctionName}(config: RouteConfig = {}) {
106
+ export function ${routerFunctionName}<TCtx = unknown>(config: ${modelName}RouteConfig<TCtx> = {}) {
103
107
  const router = express.Router()
104
108
 
105
109
  router.use(express.json())
@@ -1,12 +1,15 @@
1
1
  import { DMMF } from '@prisma/generator-helper'
2
2
  import { toCamelCase } from '../utils/strings'
3
+ import { generateRouteConfigType } from './generateRouteConfigType'
3
4
 
4
5
  export function generateFastifyRouterFunction({
5
6
  model,
6
7
  enums,
8
+ guardShapesImport,
7
9
  }: {
8
10
  model: DMMF.Model
9
11
  enums: DMMF.DatamodelEnum[]
12
+ guardShapesImport: string | null
10
13
  }): string {
11
14
  const modelName = model.name
12
15
  const prefix = toCamelCase(modelName)
@@ -63,6 +66,7 @@ import { sanitizeKeys } from '../misc'
63
66
  import { buildModelOpenApi } from '../buildModelOpenApi'
64
67
  import { mapError, transformResult, HttpError } from '../operationRuntime'
65
68
 
69
+ ${generateRouteConfigType(modelName, 'FastifyHookHandler', guardShapesImport)}
66
70
  const _env = typeof process !== 'undefined' && process.env ? process.env : {} as Record<string, string | undefined>
67
71
 
68
72
  const MODEL_FIELDS = ${JSON.stringify(fieldsMeta, null, 2)} as const
@@ -156,9 +160,9 @@ function sendError(reply: FastifyReply, error: unknown): void {
156
160
  reply.code(httpError.status).send({ message: httpError.message })
157
161
  }
158
162
 
159
- export async function ${routerFunctionName}(
163
+ export async function ${routerFunctionName}<TCtx = unknown>(
160
164
  fastify: FastifyInstance,
161
- config: RouteConfig = {},
165
+ config: ${modelName}RouteConfig<TCtx> = {},
162
166
  ) {
163
167
  const customPrefix = normalizePrefix(config.customUrlPrefix || '')
164
168
  const modelPrefix = config.addModelPrefix !== false ? '/${modelNameLower}' : ''
package/src/index.ts CHANGED
@@ -16,8 +16,9 @@ import {
16
16
  generateModelCore,
17
17
  } from './generators/generateOperationCore'
18
18
  import {
19
- generateImportPrismaStatement,
19
+
20
20
  getRelativeClientPath,
21
+ getGuardShapesImport,
21
22
  } from './generators/generateImportPrismaStatement'
22
23
  import { writeFileSafely } from './utils/writeFileSafely'
23
24
  import { copyFiles } from './utils/copyFiles'
@@ -69,11 +70,6 @@ generatorHandler({
69
70
  const generateHandler =
70
71
  target === 'fastify' ? generateFastifyHandler : generateUnifiedHandler
71
72
 
72
- const generateRouter =
73
- target === 'fastify'
74
- ? generateFastifyRouterFunction
75
- : generateRouterFunction
76
-
77
73
  for (const model of options.dmmf.datamodel.models) {
78
74
  if (
79
75
  model.documentation &&
@@ -86,6 +82,7 @@ generatorHandler({
86
82
  modelNames.push(model.name)
87
83
 
88
84
  const relativeClientPath = getRelativeClientPath(options, model.name)
85
+ const guardShapesImport = getGuardShapesImport(options, model.name)
89
86
 
90
87
  await writeFileSafely({
91
88
  content: generateModelCore({ model: model as DMMF.Model }),
@@ -103,12 +100,22 @@ generatorHandler({
103
100
  operation: 'Handlers',
104
101
  })
105
102
 
103
+ const routerContent =
104
+ target === 'fastify'
105
+ ? generateFastifyRouterFunction({
106
+ model: model as DMMF.Model,
107
+ enums: options.dmmf.datamodel.enums as DMMF.DatamodelEnum[],
108
+ guardShapesImport,
109
+ })
110
+ : generateRouterFunction({
111
+ model: model as DMMF.Model,
112
+ enums: options.dmmf.datamodel.enums as DMMF.DatamodelEnum[],
113
+ relativeClientPath,
114
+ guardShapesImport,
115
+ })
116
+
106
117
  await writeFileSafely({
107
- content: generateRouter({
108
- model: model as DMMF.Model,
109
- enums: options.dmmf.datamodel.enums as DMMF.DatamodelEnum[],
110
- relativeClientPath,
111
- }),
118
+ content: routerContent,
112
119
  options,
113
120
  model: model as DMMF.Model,
114
121
  operation: 'Router',