prisma-generator-express 1.16.7 → 1.19.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 (110) hide show
  1. package/README.md +399 -194
  2. package/dist/bin.d.ts +2 -0
  3. package/dist/bin.js +1 -1
  4. package/dist/bin.js.map +1 -1
  5. package/dist/client/encodeQueryParams.d.ts +1 -0
  6. package/dist/client/encodeQueryParams.js +33 -0
  7. package/dist/client/encodeQueryParams.js.map +1 -0
  8. package/dist/constants.d.ts +1 -0
  9. package/dist/copy/misc.d.ts +5 -0
  10. package/dist/copy/misc.js +52 -0
  11. package/dist/copy/misc.js.map +1 -0
  12. package/dist/generators/generateImportPrismaStatement.d.ts +3 -0
  13. package/dist/generators/generateImportPrismaStatement.js +55 -0
  14. package/dist/generators/generateImportPrismaStatement.js.map +1 -0
  15. package/dist/generators/generateQueryBuilderHelper.d.ts +2 -0
  16. package/dist/generators/generateQueryBuilderHelper.js +139 -0
  17. package/dist/generators/generateQueryBuilderHelper.js.map +1 -0
  18. package/dist/generators/generateRouter.d.ts +6 -0
  19. package/dist/generators/generateRouter.js +340 -0
  20. package/dist/generators/generateRouter.js.map +1 -0
  21. package/dist/generators/generateUnifiedDocs.d.ts +1 -0
  22. package/dist/generators/generateUnifiedDocs.js +171 -0
  23. package/dist/generators/generateUnifiedDocs.js.map +1 -0
  24. package/dist/generators/generateUnifiedHandler.d.ts +6 -0
  25. package/dist/generators/generateUnifiedHandler.js +444 -0
  26. package/dist/generators/generateUnifiedHandler.js.map +1 -0
  27. package/dist/generators/generateUnifiedScalarUI.d.ts +5 -0
  28. package/dist/generators/generateUnifiedScalarUI.js +1390 -0
  29. package/dist/generators/generateUnifiedScalarUI.js.map +1 -0
  30. package/dist/index.d.ts +1 -0
  31. package/dist/index.js +80 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/utils/copyFiles.d.ts +6 -0
  34. package/dist/utils/copyFiles.js +123 -21
  35. package/dist/utils/copyFiles.js.map +1 -1
  36. package/dist/utils/strings.d.ts +2 -0
  37. package/dist/utils/writeFileSafely.d.ts +10 -0
  38. package/dist/utils/writeFileSafely.js +86 -14
  39. package/dist/utils/writeFileSafely.js.map +1 -1
  40. package/package.json +64 -31
  41. package/src/client/encodeQueryParams.ts +56 -0
  42. package/src/copy/buildModelOpenApi.ts +1569 -0
  43. package/src/copy/createOutputValidatorMiddleware.ts +1 -1
  44. package/src/copy/createValidatorMiddleware.ts +1 -1
  45. package/src/copy/misc.ts +22 -1
  46. package/src/copy/operationDefinitions.ts +96 -0
  47. package/src/copy/parseQueryParams.ts +36 -21
  48. package/src/copy/routeConfig.ts +69 -27
  49. package/src/copy/transformZod.ts +15 -16
  50. package/dist/generator.js +0 -168
  51. package/dist/generator.js.map +0 -1
  52. package/dist/helpers/generateAggregate.js +0 -51
  53. package/dist/helpers/generateAggregate.js.map +0 -1
  54. package/dist/helpers/generateCount.js +0 -50
  55. package/dist/helpers/generateCount.js.map +0 -1
  56. package/dist/helpers/generateCreate.js +0 -49
  57. package/dist/helpers/generateCreate.js.map +0 -1
  58. package/dist/helpers/generateCreateMany.js +0 -49
  59. package/dist/helpers/generateCreateMany.js.map +0 -1
  60. package/dist/helpers/generateDelete.js +0 -49
  61. package/dist/helpers/generateDelete.js.map +0 -1
  62. package/dist/helpers/generateDeleteMany.js +0 -49
  63. package/dist/helpers/generateDeleteMany.js.map +0 -1
  64. package/dist/helpers/generateFindFirst.js +0 -56
  65. package/dist/helpers/generateFindFirst.js.map +0 -1
  66. package/dist/helpers/generateFindMany.js +0 -56
  67. package/dist/helpers/generateFindMany.js.map +0 -1
  68. package/dist/helpers/generateFindUnique.js +0 -56
  69. package/dist/helpers/generateFindUnique.js.map +0 -1
  70. package/dist/helpers/generateGroupBy.js +0 -51
  71. package/dist/helpers/generateGroupBy.js.map +0 -1
  72. package/dist/helpers/generateImportPrismaStatement.js +0 -25
  73. package/dist/helpers/generateImportPrismaStatement.js.map +0 -1
  74. package/dist/helpers/generateRouteFile.js +0 -192
  75. package/dist/helpers/generateRouteFile.js.map +0 -1
  76. package/dist/helpers/generateUpdate.js +0 -49
  77. package/dist/helpers/generateUpdate.js.map +0 -1
  78. package/dist/helpers/generateUpdateMany.js +0 -49
  79. package/dist/helpers/generateUpdateMany.js.map +0 -1
  80. package/dist/helpers/generateUpsert.js +0 -49
  81. package/dist/helpers/generateUpsert.js.map +0 -1
  82. package/dist/utils/formatFile.js +0 -26
  83. package/dist/utils/formatFile.js.map +0 -1
  84. package/src/bin.ts +0 -2
  85. package/src/constants.ts +0 -1
  86. package/src/copy/encodeQueryParams.spec.ts +0 -303
  87. package/src/copy/encodeQueryParams.ts +0 -44
  88. package/src/copy/misc.spec.ts +0 -62
  89. package/src/copy/parseQueryParams.spec.ts +0 -187
  90. package/src/copy/transformZod.spec.ts +0 -763
  91. package/src/generator.ts +0 -188
  92. package/src/helpers/generateAggregate.ts +0 -59
  93. package/src/helpers/generateCount.ts +0 -58
  94. package/src/helpers/generateCreate.ts +0 -56
  95. package/src/helpers/generateCreateMany.ts +0 -55
  96. package/src/helpers/generateDelete.ts +0 -57
  97. package/src/helpers/generateDeleteMany.ts +0 -57
  98. package/src/helpers/generateFindFirst.ts +0 -62
  99. package/src/helpers/generateFindMany.ts +0 -62
  100. package/src/helpers/generateFindUnique.ts +0 -62
  101. package/src/helpers/generateGroupBy.ts +0 -60
  102. package/src/helpers/generateImportPrismaStatement.ts +0 -38
  103. package/src/helpers/generateRouteFile.ts +0 -195
  104. package/src/helpers/generateUpdate.ts +0 -56
  105. package/src/helpers/generateUpdateMany.ts +0 -56
  106. package/src/helpers/generateUpsert.ts +0 -57
  107. package/src/utils/copyFiles.ts +0 -27
  108. package/src/utils/formatFile.ts +0 -22
  109. package/src/utils/strings.ts +0 -7
  110. package/src/utils/writeFileSafely.ts +0 -29
@@ -29,7 +29,7 @@ export function createOutputValidatorMiddleware({
29
29
  res.send = function (data) {
30
30
  const validationResult = schema.safeParse(data)
31
31
  if (!validationResult.success) {
32
- const errors = validationResult.error.errors
32
+ const errors = validationResult.error.issues
33
33
  next({
34
34
  status: 400,
35
35
  message: 'Output validation failed',
@@ -42,7 +42,7 @@ export function createValidatorMiddleware({
42
42
  }
43
43
 
44
44
  if (!validationResult.success) {
45
- const errors = validationResult.error.errors
45
+ const errors = validationResult.error.issues
46
46
  return next({
47
47
  status: 400,
48
48
  message: 'Validation failed',
package/src/copy/misc.ts CHANGED
@@ -17,9 +17,30 @@ export function safeJSONparse<T>(
17
17
  if (data === 'false') return false
18
18
  if (data === 'undefined') return undefined
19
19
  if (data === 'null') return null
20
- return isJsonString(data) ? JSON.parse(data as string) : data
20
+ return isJsonString(data) ? JSON.parse(data as string) : data as any
21
21
  }
22
22
 
23
23
  export const isObject = (value: unknown): value is Record<string, unknown> => {
24
24
  return typeof value === 'object' && value !== null && !Array.isArray(value)
25
25
  }
26
+
27
+ const UNSAFE_KEYS = new Set(['__proto__', 'constructor', 'prototype'])
28
+
29
+ export function isSafeKey(key: string): boolean {
30
+ return !UNSAFE_KEYS.has(key)
31
+ }
32
+
33
+ export function sanitizeKeys<T>(value: T): T {
34
+ if (Array.isArray(value)) {
35
+ return value.map(sanitizeKeys) as T
36
+ }
37
+ if (isObject(value)) {
38
+ const result: Record<string, unknown> = {}
39
+ for (const key of Object.keys(value)) {
40
+ if (!isSafeKey(key)) continue
41
+ result[key] = sanitizeKeys((value as Record<string, unknown>)[key])
42
+ }
43
+ return result as T
44
+ }
45
+ return value
46
+ }
@@ -0,0 +1,96 @@
1
+ export type HttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete'
2
+
3
+ export interface OperationDef {
4
+ name: string
5
+ method: HttpMethod
6
+ pathSuffix: string
7
+ configKey: string
8
+ }
9
+
10
+ export const OPERATION_DEFS: OperationDef[] = [
11
+ { name: 'findMany', method: 'get', pathSuffix: '', configKey: 'findMany' },
12
+ {
13
+ name: 'findUnique',
14
+ method: 'get',
15
+ pathSuffix: '/unique',
16
+ configKey: 'findUnique',
17
+ },
18
+ {
19
+ name: 'findUniqueOrThrow',
20
+ method: 'get',
21
+ pathSuffix: '/unique/strict',
22
+ configKey: 'findUniqueOrThrow',
23
+ },
24
+ {
25
+ name: 'findFirst',
26
+ method: 'get',
27
+ pathSuffix: '/first',
28
+ configKey: 'findFirst',
29
+ },
30
+ {
31
+ name: 'findFirstOrThrow',
32
+ method: 'get',
33
+ pathSuffix: '/first/strict',
34
+ configKey: 'findFirstOrThrow',
35
+ },
36
+ {
37
+ name: 'findManyPaginated',
38
+ method: 'get',
39
+ pathSuffix: '/paginated',
40
+ configKey: 'findManyPaginated',
41
+ },
42
+ { name: 'create', method: 'post', pathSuffix: '', configKey: 'create' },
43
+ {
44
+ name: 'createMany',
45
+ method: 'post',
46
+ pathSuffix: '/many',
47
+ configKey: 'createMany',
48
+ },
49
+ {
50
+ name: 'createManyAndReturn',
51
+ method: 'post',
52
+ pathSuffix: '/many/return',
53
+ configKey: 'createManyAndReturn',
54
+ },
55
+ { name: 'update', method: 'put', pathSuffix: '', configKey: 'update' },
56
+ {
57
+ name: 'updateMany',
58
+ method: 'put',
59
+ pathSuffix: '/many',
60
+ configKey: 'updateMany',
61
+ },
62
+ {
63
+ name: 'updateManyAndReturn',
64
+ method: 'put',
65
+ pathSuffix: '/many/return',
66
+ configKey: 'updateManyAndReturn',
67
+ },
68
+ { name: 'upsert', method: 'patch', pathSuffix: '', configKey: 'upsert' },
69
+ { name: 'delete', method: 'delete', pathSuffix: '', configKey: 'delete' },
70
+ {
71
+ name: 'deleteMany',
72
+ method: 'delete',
73
+ pathSuffix: '/many',
74
+ configKey: 'deleteMany',
75
+ },
76
+ { name: 'count', method: 'get', pathSuffix: '/count', configKey: 'count' },
77
+ {
78
+ name: 'aggregate',
79
+ method: 'get',
80
+ pathSuffix: '/aggregate',
81
+ configKey: 'aggregate',
82
+ },
83
+ {
84
+ name: 'groupBy',
85
+ method: 'get',
86
+ pathSuffix: '/groupby',
87
+ configKey: 'groupBy',
88
+ },
89
+ ]
90
+
91
+ export function isOperationEnabled(
92
+ config: Record<string, any>,
93
+ def: OperationDef,
94
+ ): boolean {
95
+ return !!(config.enableAll || config[def.configKey])
96
+ }
@@ -1,29 +1,38 @@
1
- import { isObject } from './misc'
2
- import { ParsedQs } from 'qs'
1
+ import { isObject, isSafeKey, sanitizeKeys } from './misc'
3
2
 
4
- /**
5
- * Type definition for possible query parameter types.
6
- */
7
- type QueryParams = string | ParsedQs | string[] | ParsedQs[] | undefined
3
+ type QueryParams =
4
+ | string
5
+ | Record<string, unknown>
6
+ | string[]
7
+ | Record<string, unknown>[]
8
+ | undefined
8
9
 
9
- /**
10
- * Parses a query value to convert strings to their respective types.
11
- * @param {string} value - The query value to parse.
12
- * @returns {unknown} The parsed value.
13
- */
14
- const parseQueryValue = (value: string): unknown => {
10
+ const NUMERIC_KEYS = new Set(['take', 'skip'])
11
+
12
+ const parseQueryValue = (value: string, key?: string): unknown => {
13
+ if (value.startsWith('{') || value.startsWith('[') || value.startsWith('"')) {
14
+ try {
15
+ const parsed = JSON.parse(value)
16
+ return sanitizeKeys(parsed)
17
+ } catch {
18
+ // fall through
19
+ }
20
+ }
15
21
  if (value === 'true') return true
16
22
  if (value === 'false') return false
17
23
  if (value === 'null') return null
18
- if (!isNaN(Number(value))) return Number(value)
24
+ if (
25
+ key &&
26
+ NUMERIC_KEYS.has(key) &&
27
+ value !== '' &&
28
+ !isNaN(Number(value)) &&
29
+ isFinite(Number(value))
30
+ ) {
31
+ return Number(value)
32
+ }
19
33
  return value
20
34
  }
21
35
 
22
- /**
23
- * Recursively parses query parameters to convert strings to their respective types.
24
- * @param {QueryParams} params - The query parameters to parse.
25
- * @returns {unknown} The parsed query parameters.
26
- */
27
36
  export const parseQueryParams = (params: QueryParams): unknown => {
28
37
  if (typeof params === 'string') {
29
38
  return parseQueryValue(params)
@@ -33,10 +42,16 @@ export const parseQueryParams = (params: QueryParams): unknown => {
33
42
  }
34
43
  if (isObject(params)) {
35
44
  const parsedParams: Record<string, unknown> = {}
36
- for (const key in params) {
37
- parsedParams[key] = parseQueryParams(params[key])
45
+ for (const key of Object.keys(params)) {
46
+ if (!isSafeKey(key)) continue
47
+ const raw = params[key]
48
+ if (typeof raw === 'string') {
49
+ parsedParams[key] = parseQueryValue(raw, key)
50
+ } else {
51
+ parsedParams[key] = raw
52
+ }
38
53
  }
39
54
  return parsedParams
40
55
  }
41
56
  return params
42
- }
57
+ }
@@ -1,34 +1,76 @@
1
- import { RequestHandler } from 'express'
2
- import { ZodTypeAny } from 'zod'
1
+ import { RequestHandler, Request } from 'express'
3
2
 
4
- export interface ValidatorConfig {
5
- allow?: string[]
6
- forbid?: string[]
7
- schema: ZodTypeAny
3
+ export interface OperationConfig {
4
+ before?: RequestHandler[]
5
+ after?: RequestHandler[]
6
+ shape?: Record<string, any>
8
7
  }
9
8
 
10
- interface MiddlewareConfig<M> {
11
- before?: M[]
12
- after?: RequestHandler[]
13
- inputValidator?: ValidatorConfig
14
- outputValidator?: ValidatorConfig
9
+ export interface QueryBuilderConfig {
10
+ enabled?: boolean
11
+ port?: number
12
+ host?: string
13
+ schemaPath?: string
14
+ databaseUrl?: string
15
15
  }
16
16
 
17
- export interface RouteConfig<M> {
18
- findFirst?: MiddlewareConfig<M>
19
- findMany?: MiddlewareConfig<M>
20
- findUnique?: MiddlewareConfig<M>
21
- create?: MiddlewareConfig<M>
22
- createMany?: MiddlewareConfig<M>
23
- update?: MiddlewareConfig<M>
24
- updateMany?: MiddlewareConfig<M>
25
- upsert?: MiddlewareConfig<M>
26
- delete?: MiddlewareConfig<M>
27
- deleteMany?: MiddlewareConfig<M>
28
- aggregate?: MiddlewareConfig<M>
29
- count?: MiddlewareConfig<M>
30
- groupBy?: MiddlewareConfig<M>
31
- addModelPrefix?: boolean
17
+ export interface OpenApiServerConfig {
18
+ url: string
19
+ description?: string
20
+ }
21
+
22
+ export interface OpenApiSecuritySchemeConfig {
23
+ type: string
24
+ scheme?: string
25
+ bearerFormat?: string
26
+ name?: string
27
+ in?: string
28
+ description?: string
29
+ }
30
+
31
+ export interface RouteConfig {
32
32
  enableAll?: boolean
33
+ addModelPrefix?: boolean
33
34
  customUrlPrefix?: string
34
- }
35
+ specBasePath?: string
36
+ disableOpenApi?: boolean
37
+ scalarCdnUrl?: string
38
+
39
+ openApiTitle?: string
40
+ openApiDescription?: string
41
+ openApiVersion?: string
42
+ openApiServers?: OpenApiServerConfig[]
43
+ openApiSecuritySchemes?: Record<string, OpenApiSecuritySchemeConfig>
44
+ openApiSecurity?: Record<string, string[]>[]
45
+
46
+ guard?: {
47
+ resolveVariant?: (req: Request) => string | undefined
48
+ variantHeader?: string
49
+ }
50
+
51
+ queryBuilder?: QueryBuilderConfig | false
52
+
53
+ pagination?: {
54
+ defaultLimit?: number
55
+ maxLimit?: number
56
+ }
57
+
58
+ findUnique?: OperationConfig
59
+ findUniqueOrThrow?: OperationConfig
60
+ findFirst?: OperationConfig
61
+ findFirstOrThrow?: OperationConfig
62
+ findMany?: OperationConfig
63
+ findManyPaginated?: OperationConfig
64
+ create?: OperationConfig
65
+ createMany?: OperationConfig
66
+ createManyAndReturn?: OperationConfig
67
+ update?: OperationConfig
68
+ updateMany?: OperationConfig
69
+ updateManyAndReturn?: OperationConfig
70
+ upsert?: OperationConfig
71
+ delete?: OperationConfig
72
+ deleteMany?: OperationConfig
73
+ aggregate?: OperationConfig
74
+ count?: OperationConfig
75
+ groupBy?: OperationConfig
76
+ }
@@ -1,12 +1,10 @@
1
1
  import { get } from 'lodash'
2
2
  import {
3
+ output,
3
4
  z,
4
- ZodEffects,
5
5
  ZodError,
6
- ZodIssue,
7
- ZodIssueCode,
8
6
  ZodObject,
9
- ZodTypeAny,
7
+ ZodType,
10
8
  } from 'zod'
11
9
 
12
10
  function startsWith(str: string, prefix: string): boolean {
@@ -34,13 +32,14 @@ function isKeyAllowed(key: string, allowedPaths: string[]): boolean {
34
32
  )
35
33
  }
36
34
 
37
- export function allow<T extends ZodTypeAny>(
35
+ export function allow<T extends ZodType>(
38
36
  schema: T,
39
37
  allowedPaths: string[],
40
- ): ZodEffects<T, any, any> {
41
- const rootSchema = schema instanceof z.ZodObject ? schema.strict() : undefined
38
+ ) {
39
+ const schemaToTransform = schema instanceof z.ZodObject ? schema.strict() : schema
40
+ const rootSchema = schemaToTransform instanceof z.ZodObject ? schemaToTransform : undefined
42
41
 
43
- return rootSchema?.transform((data) => {
42
+ return schemaToTransform.transform((data) => {
44
43
  const flatData = flattenObject(data, '', rootSchema)
45
44
 
46
45
  const disallowedPaths: string[] = []
@@ -56,13 +55,13 @@ export function allow<T extends ZodTypeAny>(
56
55
  }
57
56
 
58
57
  return data
59
- }) as unknown as ZodEffects<T, any, any>
58
+ })
60
59
  }
61
60
 
62
- export function forbid<T extends z.ZodTypeAny>(
61
+ export function forbid<T extends ZodType>(
63
62
  schema: T,
64
63
  forbiddenPaths: string[],
65
- ): ZodEffects<T, any, any> {
64
+ ) {
66
65
  return schema.transform((data) => {
67
66
  const forbiddenMatches: string[] = []
68
67
 
@@ -78,11 +77,11 @@ export function forbid<T extends z.ZodTypeAny>(
78
77
  throw createZodErrorFromPaths(forbiddenMatches, 'Field is forbidden:')
79
78
  }
80
79
  return data
81
- }) as ZodEffects<T, any, any>
80
+ })
82
81
  }
83
82
 
84
- export function flattenObject(
85
- obj: Record<string, any>,
83
+ export function flattenObject<T>(
84
+ obj: Record<string, any> | output<T>,
86
85
  prefix = '',
87
86
  schema?: ZodObject<any>,
88
87
  ): Record<string, any> {
@@ -128,10 +127,10 @@ function createZodErrorFromPaths(
128
127
  disallowedPaths: string[],
129
128
  errorMessage: string,
130
129
  ): ZodError {
131
- const errors: ZodIssue[] = []
130
+ const errors: z.core.$ZodIssue[] = []
132
131
  for (const path of disallowedPaths) {
133
132
  errors.push({
134
- code: ZodIssueCode.custom,
133
+ code: 'custom',
135
134
  message: `${errorMessage} '${path}'`,
136
135
  path: path.split('.'),
137
136
  })
package/dist/generator.js DELETED
@@ -1,168 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const generator_helper_1 = require("@prisma/generator-helper");
4
- const sdk_1 = require("@prisma/sdk");
5
- const constants_1 = require("./constants");
6
- const writeFileSafely_1 = require("./utils/writeFileSafely");
7
- const generateFindUnique_1 = require("./helpers/generateFindUnique");
8
- const generateImportPrismaStatement_1 = require("./helpers/generateImportPrismaStatement");
9
- const generateFindMany_1 = require("./helpers/generateFindMany");
10
- const generateFindFirst_1 = require("./helpers/generateFindFirst");
11
- const generateCreate_1 = require("./helpers/generateCreate");
12
- const generateRouteFile_1 = require("./helpers/generateRouteFile");
13
- const generateCreateMany_1 = require("./helpers/generateCreateMany");
14
- const generateUpdate_1 = require("./helpers/generateUpdate");
15
- const generateUpdateMany_1 = require("./helpers/generateUpdateMany");
16
- const generateUpsert_1 = require("./helpers/generateUpsert");
17
- const generateDelete_1 = require("./helpers/generateDelete");
18
- const generateDeleteMany_1 = require("./helpers/generateDeleteMany");
19
- const generateAggregate_1 = require("./helpers/generateAggregate");
20
- const generateCount_1 = require("./helpers/generateCount");
21
- const generateGroupBy_1 = require("./helpers/generateGroupBy");
22
- const copyFiles_1 = require("./utils/copyFiles");
23
- const { version } = require('../package.json');
24
- (0, generator_helper_1.generatorHandler)({
25
- onManifest() {
26
- sdk_1.logger.info(`${constants_1.GENERATOR_NAME}:Registered`);
27
- return {
28
- version,
29
- defaultOutput: '../generated',
30
- prettyName: constants_1.GENERATOR_NAME,
31
- };
32
- },
33
- onGenerate: async (options) => {
34
- const prismaImportStatement = (0, generateImportPrismaStatement_1.generateImportPrismaStatement)(options);
35
- for await (const model of options.dmmf.datamodel.models) {
36
- if (model.documentation &&
37
- model.documentation.includes('generator off')) {
38
- sdk_1.logger.info(`Skipping generation for model ${model.name} as it is marked with 'generator off'.`);
39
- continue;
40
- }
41
- await (0, writeFileSafely_1.writeFileSafely)({
42
- content: (0, generateFindUnique_1.generateFindUniqueFunction)({
43
- model,
44
- prismaImportStatement,
45
- }),
46
- options,
47
- model,
48
- operation: 'FindUnique',
49
- });
50
- await (0, writeFileSafely_1.writeFileSafely)({
51
- content: (0, generateFindFirst_1.generateFindFirstFunction)({
52
- model,
53
- prismaImportStatement,
54
- }),
55
- options,
56
- model,
57
- operation: 'FindFirst',
58
- });
59
- await (0, writeFileSafely_1.writeFileSafely)({
60
- content: (0, generateFindMany_1.generateFindManyFunction)({
61
- model,
62
- prismaImportStatement,
63
- }),
64
- options,
65
- model,
66
- operation: 'FindMany',
67
- });
68
- await (0, writeFileSafely_1.writeFileSafely)({
69
- content: (0, generateCreate_1.generateCreateFunction)({
70
- model,
71
- prismaImportStatement,
72
- }),
73
- options,
74
- model,
75
- operation: 'Create',
76
- });
77
- await (0, writeFileSafely_1.writeFileSafely)({
78
- content: (0, generateCreateMany_1.generateCreateManyFunction)({
79
- model,
80
- prismaImportStatement,
81
- }),
82
- options,
83
- model,
84
- operation: 'CreateMany',
85
- });
86
- await (0, writeFileSafely_1.writeFileSafely)({
87
- content: (0, generateUpdate_1.generateUpdateFunction)({
88
- model,
89
- prismaImportStatement,
90
- }),
91
- options,
92
- model,
93
- operation: 'Update',
94
- });
95
- await (0, writeFileSafely_1.writeFileSafely)({
96
- content: (0, generateUpdateMany_1.generateUpdateManyFunction)({
97
- model,
98
- prismaImportStatement,
99
- }),
100
- options,
101
- model,
102
- operation: 'UpdateMany',
103
- });
104
- await (0, writeFileSafely_1.writeFileSafely)({
105
- content: (0, generateUpsert_1.generateUpsertFunction)({
106
- model,
107
- prismaImportStatement,
108
- }),
109
- options,
110
- model,
111
- operation: 'Upsert',
112
- });
113
- await (0, writeFileSafely_1.writeFileSafely)({
114
- content: (0, generateDelete_1.generateDeleteFunction)({
115
- model,
116
- prismaImportStatement,
117
- }),
118
- options,
119
- model,
120
- operation: 'Delete',
121
- });
122
- await (0, writeFileSafely_1.writeFileSafely)({
123
- content: (0, generateDeleteMany_1.generateDeleteManyFunction)({
124
- model,
125
- prismaImportStatement,
126
- }),
127
- options,
128
- model,
129
- operation: 'DeleteMany',
130
- });
131
- await (0, writeFileSafely_1.writeFileSafely)({
132
- content: (0, generateAggregate_1.generateAggregateFunction)({
133
- model,
134
- prismaImportStatement,
135
- }),
136
- options,
137
- model,
138
- operation: 'Aggregate',
139
- });
140
- await (0, writeFileSafely_1.writeFileSafely)({
141
- content: (0, generateCount_1.generateCountFunction)({
142
- model,
143
- prismaImportStatement,
144
- }),
145
- options,
146
- model,
147
- operation: 'Count',
148
- });
149
- await (0, writeFileSafely_1.writeFileSafely)({
150
- content: (0, generateGroupBy_1.generateGroupByFunction)({
151
- model,
152
- prismaImportStatement,
153
- }),
154
- options,
155
- model,
156
- operation: 'GroupBy',
157
- });
158
- await (0, writeFileSafely_1.writeFileSafely)({
159
- content: (0, generateRouteFile_1.generateRouterFunction)({ model }),
160
- options,
161
- model,
162
- operation: 'index',
163
- });
164
- }
165
- await (0, copyFiles_1.copyFiles)(options);
166
- },
167
- });
168
- //# sourceMappingURL=generator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generateAggregateFunction = void 0;
4
- const strings_1 = require("../utils/strings");
5
- const generateAggregateFunction = (options) => {
6
- const { model, prismaImportStatement } = options;
7
- const modelName = model.name;
8
- const functionName = `${modelName}Aggregate`;
9
- const argsTypeName = `Prisma.${(0, strings_1.capitalize)(modelName)}AggregateArgs`;
10
- return `
11
- ${prismaImportStatement}
12
- import { Request, Response, NextFunction } from 'express';
13
- import { RequestHandler, ParamsDictionary } from 'express-serve-static-core'
14
- import { ParsedQs } from 'qs'
15
- import { ZodTypeAny } from 'zod';
16
- import { ValidatorConfig } from '../routeConfig'
17
-
18
- interface AggregateRequest extends Request {
19
- prisma: PrismaClient;
20
- query: Partial<${argsTypeName}> & ParsedQs;
21
- outputValidation?: ZodTypeAny;
22
- locals?: {
23
- outputValidator?: ValidatorConfig;
24
- };
25
- }
26
-
27
- export type AggregateMiddleware = RequestHandler<ParamsDictionary, any, Partial<${argsTypeName}>, Record<string, any>>;
28
-
29
- export async function ${functionName}(req: AggregateRequest, res: Response, next: NextFunction) {
30
- try {
31
- const outputValidator = res.locals.outputValidator?.schema || req.outputValidation;
32
-
33
- const result = await req.prisma.${(0, strings_1.toPascalCase)(modelName)}.aggregate(req.query as ${argsTypeName});
34
-
35
- if (outputValidator) {
36
- const validationResult = outputValidator.safeParse(result);
37
- if (validationResult.success) {
38
- return res.status(200).json(validationResult.data);
39
- } else {
40
- return res.status(400).json({ error: 'Invalid data format', details: validationResult.error });
41
- }
42
- } else {
43
- return res.status(200).json(result);
44
- }
45
- } catch(error: unknown) {
46
- next(error)
47
- }
48
- }`;
49
- };
50
- exports.generateAggregateFunction = generateAggregateFunction;
51
- //# sourceMappingURL=generateAggregate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generateAggregate.js","sourceRoot":"","sources":["../../src/helpers/generateAggregate.ts"],"names":[],"mappings":";;;AACA,8CAA2D;AASpD,MAAM,yBAAyB,GAAG,CAAC,OAGzC,EAAU,EAAE;IACX,MAAM,EAAE,KAAK,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAA;IAChD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAA;IAC5B,MAAM,YAAY,GAAG,GAAG,SAAS,WAAW,CAAA;IAC5C,MAAM,YAAY,GAAG,UAAU,IAAA,oBAAU,EAAC,SAAS,CAAC,eAAe,CAAA;IAEnE,OAAO;EACP,qBAAqB;;;;;;;;;mBASJ,YAAY;;;;;;;kFAOmD,YAAY;;wBAEtE,YAAY;;;;sCAIE,IAAA,sBAAY,EAAC,SAAS,CAAC,2BAA2B,YAAY;;;;;;;;;;;;;;;EAelG,CAAA;AACF,CAAC,CAAA;AAhDY,QAAA,yBAAyB,6BAgDrC"}