prisma-generator-express 1.66.0 → 1.68.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 (130) hide show
  1. package/README.md +188 -3432
  2. package/dist/client/encodeQueryParams.js +3 -1
  3. package/dist/client/encodeQueryParams.js.map +1 -1
  4. package/dist/copy/misc.d.ts +1 -0
  5. package/dist/copy/misc.js +14 -0
  6. package/dist/copy/misc.js.map +1 -1
  7. package/dist/copy/operationDefinitions.d.ts +4 -1
  8. package/dist/copy/operationDefinitions.js +133 -9
  9. package/dist/copy/operationDefinitions.js.map +1 -1
  10. package/dist/generators/generateFastifyHandler.d.ts +2 -2
  11. package/dist/generators/generateFastifyHandler.js +68 -12
  12. package/dist/generators/generateFastifyHandler.js.map +1 -1
  13. package/dist/generators/generateHonoHandler.d.ts +2 -2
  14. package/dist/generators/generateHonoHandler.js +53 -6
  15. package/dist/generators/generateHonoHandler.js.map +1 -1
  16. package/dist/generators/generateHonoOpenApi.d.ts +13 -0
  17. package/dist/generators/generateHonoOpenApi.js +70 -0
  18. package/dist/generators/generateHonoOpenApi.js.map +1 -0
  19. package/dist/generators/generateImportPrismaStatement.d.ts +1 -0
  20. package/dist/generators/generateImportPrismaStatement.js +6 -0
  21. package/dist/generators/generateImportPrismaStatement.js.map +1 -1
  22. package/dist/generators/generateMcpApp.d.ts +10 -0
  23. package/dist/generators/generateMcpApp.js +113 -0
  24. package/dist/generators/generateMcpApp.js.map +1 -0
  25. package/dist/generators/generateModelMcp.d.ts +9 -0
  26. package/dist/generators/generateModelMcp.js +145 -0
  27. package/dist/generators/generateModelMcp.js.map +1 -0
  28. package/dist/generators/generateModelMetadata.js +29 -15
  29. package/dist/generators/generateModelMetadata.js.map +1 -1
  30. package/dist/generators/generateOperationCore.d.ts +3 -3
  31. package/dist/generators/generateOperationCore.js +51 -16
  32. package/dist/generators/generateOperationCore.js.map +1 -1
  33. package/dist/generators/generateRelationMeta.js +2 -2
  34. package/dist/generators/generateRelationMeta.js.map +1 -1
  35. package/dist/generators/generateRouteConfigType.d.ts +2 -2
  36. package/dist/generators/generateRouteConfigType.js +29 -11
  37. package/dist/generators/generateRouteConfigType.js.map +1 -1
  38. package/dist/generators/generateRouter.d.ts +7 -4
  39. package/dist/generators/generateRouter.js +164 -65
  40. package/dist/generators/generateRouter.js.map +1 -1
  41. package/dist/generators/generateRouterFastify.d.ts +7 -4
  42. package/dist/generators/generateRouterFastify.js +106 -86
  43. package/dist/generators/generateRouterFastify.js.map +1 -1
  44. package/dist/generators/generateRouterHono.d.ts +7 -4
  45. package/dist/generators/generateRouterHono.js +59 -414
  46. package/dist/generators/generateRouterHono.js.map +1 -1
  47. package/dist/generators/generateRouterPartsHono.d.ts +14 -0
  48. package/dist/generators/generateRouterPartsHono.js +180 -0
  49. package/dist/generators/generateRouterPartsHono.js.map +1 -0
  50. package/dist/generators/generateUnifiedDocs.d.ts +1 -1
  51. package/dist/generators/generateUnifiedDocs.js +15 -8
  52. package/dist/generators/generateUnifiedDocs.js.map +1 -1
  53. package/dist/generators/generateUnifiedHandler.d.ts +2 -2
  54. package/dist/generators/generateUnifiedHandler.js +42 -18
  55. package/dist/generators/generateUnifiedHandler.js.map +1 -1
  56. package/dist/guardOptions.js +12 -7
  57. package/dist/guardOptions.js.map +1 -1
  58. package/dist/index.d.ts +3 -1
  59. package/dist/index.js +123 -4
  60. package/dist/index.js.map +1 -1
  61. package/dist/utils/copyFiles.d.ts +1 -1
  62. package/dist/utils/copyFiles.js +42 -7
  63. package/dist/utils/copyFiles.js.map +1 -1
  64. package/dist/utils/importExt.d.ts +1 -1
  65. package/dist/utils/mcpGate.d.ts +10 -0
  66. package/dist/utils/mcpGate.js +118 -0
  67. package/dist/utils/mcpGate.js.map +1 -0
  68. package/dist/utils/pathCasing.d.ts +4 -0
  69. package/dist/utils/pathCasing.js +40 -0
  70. package/dist/utils/pathCasing.js.map +1 -0
  71. package/dist/utils/resolveImportStyle.js +13 -5
  72. package/dist/utils/resolveImportStyle.js.map +1 -1
  73. package/dist/utils/writeFileSafely.js +6 -0
  74. package/dist/utils/writeFileSafely.js.map +1 -1
  75. package/package.json +22 -5
  76. package/src/bin.ts +1 -1
  77. package/src/client/encodeQueryParams.ts +39 -35
  78. package/src/constants.ts +1 -1
  79. package/src/copy/autoIncludePlanner.ts +93 -27
  80. package/src/copy/autoIncludePlannerGuarded.ts +171 -48
  81. package/src/copy/autoIncludeRuntimeGuarded.ts +25 -7
  82. package/src/copy/buildModelOpenApi.ts +229 -176
  83. package/src/copy/concurrency.ts +10 -8
  84. package/src/copy/docsRenderer.ts +14 -15
  85. package/src/copy/errorMapper.ts +68 -19
  86. package/src/copy/guardHelpers.ts +30 -9
  87. package/src/copy/materializedCount.ts +17 -5
  88. package/src/copy/mcpRuntime.ts +1017 -0
  89. package/src/copy/misc.ts +88 -68
  90. package/src/copy/ndjson.ts +72 -0
  91. package/src/copy/operationDefinitions.ts +177 -25
  92. package/src/copy/operationPipeline.ts +267 -0
  93. package/src/copy/operationRuntime.ts +124 -26
  94. package/src/copy/operationSchemas.ts +2773 -0
  95. package/src/copy/pagination.ts +35 -13
  96. package/src/copy/parseQueryParams.ts +47 -48
  97. package/src/copy/projectionDefaults.ts +6 -4
  98. package/src/copy/routeConfig.express.ts +16 -4
  99. package/src/copy/routeConfig.fastify.ts +16 -2
  100. package/src/copy/routeConfig.hono.ts +46 -14
  101. package/src/copy/routeConfig.ts +175 -40
  102. package/src/copy/routerParts.ts +524 -0
  103. package/src/copy/scalarTypes.ts +7 -2
  104. package/src/copy/sse.ts +72 -19
  105. package/src/generators/generateFastifyHandler.ts +77 -20
  106. package/src/generators/generateHonoHandler.ts +62 -14
  107. package/src/generators/generateHonoOpenApi.ts +93 -0
  108. package/src/generators/generateImportPrismaStatement.ts +93 -81
  109. package/src/generators/generateMcpApp.ts +133 -0
  110. package/src/generators/generateModelMcp.ts +208 -0
  111. package/src/generators/generateModelMetadata.ts +40 -22
  112. package/src/generators/generateOperationCore.ts +81 -33
  113. package/src/generators/generateRelationMeta.ts +23 -11
  114. package/src/generators/generateRouteConfigType.ts +39 -13
  115. package/src/generators/generateRouter.ts +171 -68
  116. package/src/generators/generateRouterFastify.ts +117 -89
  117. package/src/generators/generateRouterHono.ts +84 -464
  118. package/src/generators/generateRouterPartsHono.ts +220 -0
  119. package/src/generators/generateUnifiedDocs.ts +29 -8
  120. package/src/generators/generateUnifiedHandler.ts +47 -24
  121. package/src/generators/generateUnifiedScalarUI.ts +1 -1
  122. package/src/guardOptions.ts +105 -92
  123. package/src/index.ts +161 -6
  124. package/src/utils/copyFiles.ts +235 -168
  125. package/src/utils/importExt.ts +2 -2
  126. package/src/utils/mcpGate.ts +157 -0
  127. package/src/utils/pathCasing.ts +42 -0
  128. package/src/utils/resolveImportStyle.ts +37 -15
  129. package/src/utils/strings.ts +2 -2
  130. package/src/utils/writeFileSafely.ts +12 -2
@@ -126,7 +126,9 @@ function resolveExtendsTarget(extendsValue, fromFile) {
126
126
  }
127
127
  catch {
128
128
  try {
129
- return require.resolve(extendsValue + '/tsconfig.json', { paths: [fromDir] });
129
+ return require.resolve(extendsValue + '/tsconfig.json', {
130
+ paths: [fromDir],
131
+ });
130
132
  }
131
133
  catch {
132
134
  return null;
@@ -179,14 +181,17 @@ function resolveImportStyle(options) {
179
181
  ? config.importStyle.toLowerCase()
180
182
  : 'auto';
181
183
  if (!VALID_OVERRIDES.has(raw)) {
182
- console.warn('[prisma-generator-express] Invalid importStyle "' + config.importStyle +
184
+ console.warn('[prisma-generator-express] Invalid importStyle "' +
185
+ config.importStyle +
183
186
  '". Expected one of: auto, none, js, ts. Falling back to auto.');
184
187
  }
185
188
  else if (raw !== 'auto') {
186
189
  return raw;
187
190
  }
188
191
  const outputPath = options.generator.output?.value;
189
- const schemaDir = options.schemaPath ? path.dirname(options.schemaPath) : process.cwd();
192
+ const schemaDir = options.schemaPath
193
+ ? path.dirname(options.schemaPath)
194
+ : process.cwd();
190
195
  const startDir = outputPath ? path.dirname(outputPath) : schemaDir;
191
196
  const tsconfigPath = findUpwards(startDir, 'tsconfig.json') ||
192
197
  findUpwards(schemaDir, 'tsconfig.json');
@@ -197,10 +202,13 @@ function resolveImportStyle(options) {
197
202
  return 'ts';
198
203
  const moduleVal = String(compilerOptions.module ?? '').toLowerCase();
199
204
  const moduleResolution = String(compilerOptions.moduleResolution ?? '').toLowerCase();
200
- if (NODE_MODULE_KEYWORDS.has(moduleVal) || NODE_MODULE_KEYWORDS.has(moduleResolution)) {
205
+ if (NODE_MODULE_KEYWORDS.has(moduleVal) ||
206
+ NODE_MODULE_KEYWORDS.has(moduleResolution)) {
201
207
  return 'js';
202
208
  }
203
- if (moduleResolution === 'bundler' || moduleResolution === 'classic' || moduleResolution === 'node') {
209
+ if (moduleResolution === 'bundler' ||
210
+ moduleResolution === 'classic' ||
211
+ moduleResolution === 'node') {
204
212
  return 'none';
205
213
  }
206
214
  const pkgType = readPackageType(startDir) || readPackageType(schemaDir);
@@ -1 +1 @@
1
- {"version":3,"file":"resolveImportStyle.js","sourceRoot":"","sources":["../../src/utils/resolveImportStyle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveImportStyle.js","sourceRoot":"","sources":["../../src/utils/resolveImportStyle.ts"],"names":[],"mappings":"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"}
@@ -62,6 +62,12 @@ async function writeFileSafely({ content, options, model, operation, }) {
62
62
  case 'relationModelsIndex':
63
63
  filePath = path.join(outputPath, 'relationModels.ts');
64
64
  break;
65
+ case 'mcpApp':
66
+ filePath = path.join(outputPath, 'mcp.ts');
67
+ break;
68
+ case 'mcpMount':
69
+ filePath = path.join(outputPath, 'mcpMount.ts');
70
+ break;
65
71
  default:
66
72
  if (!model)
67
73
  throw new Error('Model required for operation: ' + operation);
@@ -1 +1 @@
1
- {"version":3,"file":"writeFileSafely.js","sourceRoot":"","sources":["../../src/utils/writeFileSafely.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,0CAmCC;AAtDD,uCAAwB;AACxB,2CAA4B;AAC5B,wDAA+B;AAS/B,IAAI,gBAAqD,CAAA;AAEzD,KAAK,UAAU,kBAAkB;IAC/B,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAA;IAC3D,gBAAgB,GAAG,MAAM,kBAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9D,OAAO,gBAAgB,CAAA;AACzB,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,EACpC,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,GACQ;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAA;IAClD,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAE3D,IAAI,QAAgB,CAAA;IACpB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,cAAc;YACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;YACnD,MAAK;QACP,KAAK,cAAc;YACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;YACnD,MAAK;QACP,KAAK,qBAAqB;YACxB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAA;YACrD,MAAK;QACP;YACE,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,SAAS,CAAC,CAAA;YACzE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,KAAK,CAAC,CAAA;IAChF,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEvE,MAAM,eAAe,GAAG,MAAM,kBAAkB,EAAE,CAAA;IAClD,MAAM,gBAAgB,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;QACtD,GAAG,eAAe;QAClB,MAAM,EAAE,YAAY;KACrB,CAAC,CAAA;IAEF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;AAC9C,CAAC"}
1
+ {"version":3,"file":"writeFileSafely.js","sourceRoot":"","sources":["../../src/utils/writeFileSafely.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,0CA6CC;AAhED,uCAAwB;AACxB,2CAA4B;AAC5B,wDAA+B;AAS/B,IAAI,gBAAqD,CAAA;AAEzD,KAAK,UAAU,kBAAkB;IAC/B,IAAI,gBAAgB,KAAK,SAAS;QAAE,OAAO,gBAAgB,CAAA;IAC3D,gBAAgB,GAAG,MAAM,kBAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9D,OAAO,gBAAgB,CAAA;AACzB,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,EACpC,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,GACQ;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAA;IAClD,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAE3D,IAAI,QAAgB,CAAA;IACpB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,cAAc;YACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;YACnD,MAAK;QACP,KAAK,cAAc;YACjB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;YACnD,MAAK;QACP,KAAK,qBAAqB;YACxB,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAA;YACrD,MAAK;QACP,KAAK,QAAQ;YACX,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;YAC1C,MAAK;QACP,KAAK,UAAU;YACb,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;YAC/C,MAAK;QACP;YACE,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,SAAS,CAAC,CAAA;YACzE,QAAQ,GAAG,IAAI,CAAC,IAAI,CAClB,UAAU,EACV,KAAK,CAAC,IAAI,EACV,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,KAAK,CAC/B,CAAA;IACL,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAEvE,MAAM,eAAe,GAAG,MAAM,kBAAkB,EAAE,CAAA;IAClD,MAAM,gBAAgB,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;QACtD,GAAG,eAAe;QAClB,MAAM,EAAE,YAAY;KACrB,CAAC,CAAA;IAEF,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAA;AAC9C,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "prisma-generator-express",
3
- "description": "Prisma generator for Express, Fastify, and Hono CRUD APIs with OpenAPI documentation",
4
- "version": "1.66.0",
3
+ "description": "Prisma generator for Express, Fastify, and Hono CRUD APIs with OpenAPI and guarded MCP tools",
4
+ "version": "1.68.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "exports": {
@@ -35,6 +35,8 @@
35
35
  "yaml": "^2.9.0"
36
36
  },
37
37
  "peerDependencies": {
38
+ "@modelcontextprotocol/node": "^2.0.0",
39
+ "@modelcontextprotocol/server": "^2.0.0",
38
40
  "@prisma/client": ">=6.0.0",
39
41
  "express": ">=4.0.0",
40
42
  "fastify": "^5.0.0",
@@ -44,6 +46,12 @@
44
46
  "prisma-sql": ">=1.0.0"
45
47
  },
46
48
  "peerDependenciesMeta": {
49
+ "@modelcontextprotocol/node": {
50
+ "optional": true
51
+ },
52
+ "@modelcontextprotocol/server": {
53
+ "optional": true
54
+ },
47
55
  "express": {
48
56
  "optional": true
49
57
  },
@@ -64,13 +72,17 @@
64
72
  }
65
73
  },
66
74
  "devDependencies": {
75
+ "@modelcontextprotocol/client": "^2.1.0",
76
+ "@modelcontextprotocol/express": "^2.0.1",
77
+ "@modelcontextprotocol/node": "^2.1.0",
78
+ "@modelcontextprotocol/server": "^2.1.0",
67
79
  "@prisma/client": "7.5.0",
68
- "@prisma/internals": "^7.5.0",
69
80
  "@types/better-sqlite3": "^7.6.13",
70
81
  "@types/node": "24.7.2",
71
82
  "@types/prettier": "3.0.0",
72
83
  "@vitest/coverage-v8": "^4.1.0",
73
84
  "better-sqlite3": "^12.5.0",
85
+ "esbuild": "^0.28.2",
74
86
  "express": "^5.2.1",
75
87
  "fast-xml-parser": "^5.3.3",
76
88
  "fastify": "^5.6.2",
@@ -79,9 +91,11 @@
79
91
  "pino": "^10.1.0",
80
92
  "pino-pretty": "^13.0.0",
81
93
  "prisma": "7.5.0",
94
+ "prisma-guard": "1.33.0",
82
95
  "semantic-release": "^24.2.9",
83
96
  "typescript": "5.9.3",
84
- "vitest": "^4.1.0"
97
+ "vitest": "^4.1.0",
98
+ "zod": "^4.0.0"
85
99
  },
86
100
  "homepage": "https://github.com/multipliedtwice/prisma-generator-express",
87
101
  "repository": {
@@ -93,8 +107,11 @@
93
107
  "prisma",
94
108
  "express",
95
109
  "fastify",
110
+ "hono",
96
111
  "crud",
97
- "generator"
112
+ "generator",
113
+ "openapi",
114
+ "rest"
98
115
  ],
99
116
  "files": [
100
117
  "dist/**/*",
package/src/bin.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import './index'
2
+ import './index'
@@ -1,35 +1,39 @@
1
- import { isObject } from '../copy/misc'
2
-
3
- const bigintReplacer = (_key: string, value: unknown): unknown =>
4
- typeof value === 'bigint' ? value.toString() : value
5
-
6
- const encodeEntry = (key: string, value: unknown): string | null => {
7
- if (value === undefined) return null
8
-
9
- const encodedKey = encodeURIComponent(key)
10
-
11
- if (value === null) return encodedKey + '=null'
12
-
13
- if (typeof value === 'bigint') {
14
- return encodedKey + '=' + encodeURIComponent(value.toString())
15
- }
16
-
17
- if (typeof value === 'string') {
18
- return encodedKey + '=' + encodeURIComponent(JSON.stringify(value))
19
- }
20
-
21
- if (Array.isArray(value) || isObject(value)) {
22
- return encodedKey + '=' + encodeURIComponent(JSON.stringify(value, bigintReplacer))
23
- }
24
-
25
- return encodedKey + '=' + encodeURIComponent(String(value))
26
- }
27
-
28
- export const encodeQueryParams = (params: Record<string, unknown>): string => {
29
- const entries: string[] = []
30
- for (const [key, value] of Object.entries(params)) {
31
- const entry = encodeEntry(key, value)
32
- if (entry !== null) entries.push(entry)
33
- }
34
- return entries.join('&')
35
- }
1
+ import { isObject } from '../copy/misc'
2
+
3
+ const bigintReplacer = (_key: string, value: unknown): unknown =>
4
+ typeof value === 'bigint' ? value.toString() : value
5
+
6
+ const encodeEntry = (key: string, value: unknown): string | null => {
7
+ if (value === undefined) return null
8
+
9
+ const encodedKey = encodeURIComponent(key)
10
+
11
+ if (value === null) return encodedKey + '=null'
12
+
13
+ if (typeof value === 'bigint') {
14
+ return encodedKey + '=' + encodeURIComponent(value.toString())
15
+ }
16
+
17
+ if (typeof value === 'string') {
18
+ return encodedKey + '=' + encodeURIComponent(JSON.stringify(value))
19
+ }
20
+
21
+ if (Array.isArray(value) || isObject(value)) {
22
+ return (
23
+ encodedKey +
24
+ '=' +
25
+ encodeURIComponent(JSON.stringify(value, bigintReplacer))
26
+ )
27
+ }
28
+
29
+ return encodedKey + '=' + encodeURIComponent(String(value))
30
+ }
31
+
32
+ export const encodeQueryParams = (params: Record<string, unknown>): string => {
33
+ const entries: string[] = []
34
+ for (const [key, value] of Object.entries(params)) {
35
+ const entry = encodeEntry(key, value)
36
+ if (entry !== null) entries.push(entry)
37
+ }
38
+ return entries.join('&')
39
+ }
package/src/constants.ts CHANGED
@@ -4,4 +4,4 @@ export type Target = 'express' | 'fastify' | 'hono'
4
4
 
5
5
  export type WriteStrategy = 'regular' | 'throwOnNonReturning' | 'forceReturn'
6
6
 
7
- export type FindManyPaginatedMode = 'transaction' | 'promiseAll'
7
+ export type FindManyPaginatedMode = 'transaction' | 'promiseAll'
@@ -1,6 +1,9 @@
1
1
  import { isPlainObject } from './misc'
2
2
 
3
- export type ModelRelationDirection = 'parentOwnsFk' | 'childOwnsFk' | 'implicitM2M'
3
+ export type ModelRelationDirection =
4
+ | 'parentOwnsFk'
5
+ | 'childOwnsFk'
6
+ | 'implicitM2M'
4
7
 
5
8
  export type ModelRelationField = {
6
9
  name: string
@@ -48,10 +51,21 @@ export const DEFAULT_AUTO_INCLUDE_MAX_STAGES = 20
48
51
 
49
52
  const ALLOWED_TO_ONE_ARGS = new Set(['select', 'include', 'omit'])
50
53
  const ALLOWED_TO_MANY_ARGS = new Set([
51
- 'select', 'include', 'omit', 'where', 'orderBy', 'take', 'skip', 'cursor', 'distinct',
54
+ 'select',
55
+ 'include',
56
+ 'omit',
57
+ 'where',
58
+ 'orderBy',
59
+ 'take',
60
+ 'skip',
61
+ 'cursor',
62
+ 'distinct',
52
63
  ])
53
64
 
54
- function isPubliclySelected(projection: Record<string, unknown>, field: string): boolean {
65
+ function isPubliclySelected(
66
+ projection: Record<string, unknown>,
67
+ field: string,
68
+ ): boolean {
55
69
  return projection[field] === true
56
70
  }
57
71
 
@@ -120,7 +134,9 @@ function walk(
120
134
  depth: number,
121
135
  ): WalkResult {
122
136
  if (depth >= ctx.maxDepth) {
123
- return { unsupportedReason: 'nested depth reached maxDepth=' + ctx.maxDepth }
137
+ return {
138
+ unsupportedReason: 'nested depth reached maxDepth=' + ctx.maxDepth,
139
+ }
124
140
  }
125
141
  if (ctx.stages.length >= ctx.maxStages) {
126
142
  return { unsupportedReason: 'stages reached maxStages=' + ctx.maxStages }
@@ -128,7 +144,9 @@ function walk(
128
144
 
129
145
  const model = ctx.models[modelName]
130
146
  if (!model) {
131
- return { unsupportedReason: 'model ' + modelName + ' not in relation metadata' }
147
+ return {
148
+ unsupportedReason: 'model ' + modelName + ' not in relation metadata',
149
+ }
132
150
  }
133
151
 
134
152
  const select = parentArgs.select
@@ -145,10 +163,17 @@ function walk(
145
163
  return { unsupportedReason: '_count not supported in MVP' }
146
164
  }
147
165
  if (hasWhereLikeRelationReference(parentArgs, model)) {
148
- return { unsupportedReason: 'relation used in where/orderBy/cursor is not supported in MVP' }
166
+ return {
167
+ unsupportedReason:
168
+ 'relation used in where/orderBy/cursor is not supported in MVP',
169
+ }
149
170
  }
150
171
 
151
- const projection = isPlainObject(select) ? select : (isPlainObject(include) ? include : null)
172
+ const projection = isPlainObject(select)
173
+ ? select
174
+ : isPlainObject(include)
175
+ ? include
176
+ : null
152
177
  if (!projection) {
153
178
  return {}
154
179
  }
@@ -174,7 +199,9 @@ function walk(
174
199
  }
175
200
 
176
201
  if (relationBranches.length === 0) {
177
- return { projectionAfterStrip: isSelectMode ? updatedProjection : undefined }
202
+ return {
203
+ projectionAfterStrip: isSelectMode ? updatedProjection : undefined,
204
+ }
178
205
  }
179
206
 
180
207
  for (const branch of relationBranches) {
@@ -187,22 +214,35 @@ function walk(
187
214
  if (relation.direction === 'implicitM2M') {
188
215
  return { unsupportedReason: 'implicit many-to-many not supported in MVP' }
189
216
  }
190
- if (relation.parentLinkFields.length === 0 || relation.childLinkFields.length === 0) {
191
- return { unsupportedReason: 'ambiguous relation metadata for ' + relation.name }
217
+ if (
218
+ relation.parentLinkFields.length === 0 ||
219
+ relation.childLinkFields.length === 0
220
+ ) {
221
+ return {
222
+ unsupportedReason: 'ambiguous relation metadata for ' + relation.name,
223
+ }
192
224
  }
193
225
  if (relation.parentLinkFields.length !== relation.childLinkFields.length) {
194
- return { unsupportedReason: 'mismatched link field counts for ' + relation.name }
226
+ return {
227
+ unsupportedReason: 'mismatched link field counts for ' + relation.name,
228
+ }
195
229
  }
196
230
  if (!ctx.models[relation.type]) {
197
231
  return {
198
- unsupportedReason: 'target model ' + relation.type +
199
- ' not in relation metadata for ' + (parentPath ? parentPath + '.' : '') + branch.name,
232
+ unsupportedReason:
233
+ 'target model ' +
234
+ relation.type +
235
+ ' not in relation metadata for ' +
236
+ (parentPath ? parentPath + '.' : '') +
237
+ branch.name,
200
238
  }
201
239
  }
202
240
 
203
241
  if (branch.value !== true && !isPlainObject(branch.value)) {
204
242
  return {
205
- unsupportedReason: 'invalid relation projection value for ' + branch.name +
243
+ unsupportedReason:
244
+ 'invalid relation projection value for ' +
245
+ branch.name +
206
246
  ' (expected true or plain object)',
207
247
  }
208
248
  }
@@ -210,7 +250,10 @@ function walk(
210
250
  for (const linkField of relation.parentLinkFields) {
211
251
  if (localOmit && localOmit[linkField] === true) {
212
252
  const where = parentPath ? parentPath + '.' : 'root.'
213
- return { unsupportedReason: 'required parent link field omitted: ' + where + linkField }
253
+ return {
254
+ unsupportedReason:
255
+ 'required parent link field omitted: ' + where + linkField,
256
+ }
214
257
  }
215
258
  }
216
259
 
@@ -222,14 +265,22 @@ function walk(
222
265
  }
223
266
  }
224
267
 
225
- const relationArgs: Record<string, unknown> = branch.value === true ? {} : branch.value
268
+ const relationArgs: Record<string, unknown> =
269
+ branch.value === true ? {} : branch.value
226
270
 
227
- const allowedArgs = relation.isList ? ALLOWED_TO_MANY_ARGS : ALLOWED_TO_ONE_ARGS
271
+ const allowedArgs = relation.isList
272
+ ? ALLOWED_TO_MANY_ARGS
273
+ : ALLOWED_TO_ONE_ARGS
228
274
  for (const key of Object.keys(relationArgs)) {
229
275
  if (!allowedArgs.has(key)) {
230
276
  return {
231
- unsupportedReason: 'unsupported arg "' + key + '" for ' +
232
- (relation.isList ? 'to-many' : 'to-one') + ' relation ' + relation.name,
277
+ unsupportedReason:
278
+ 'unsupported arg "' +
279
+ key +
280
+ '" for ' +
281
+ (relation.isList ? 'to-many' : 'to-one') +
282
+ ' relation ' +
283
+ relation.name,
233
284
  }
234
285
  }
235
286
  }
@@ -237,12 +288,16 @@ function walk(
237
288
  const targetModel = ctx.models[relation.type]
238
289
  if (hasWhereLikeRelationReference(relationArgs, targetModel)) {
239
290
  return {
240
- unsupportedReason: 'nested relation used in where/orderBy/cursor for ' +
241
- relation.name + ' is not supported in MVP',
291
+ unsupportedReason:
292
+ 'nested relation used in where/orderBy/cursor for ' +
293
+ relation.name +
294
+ ' is not supported in MVP',
242
295
  }
243
296
  }
244
297
 
245
- const relationPath = parentPath ? parentPath + '.' + branch.name : branch.name
298
+ const relationPath = parentPath
299
+ ? parentPath + '.' + branch.name
300
+ : branch.name
246
301
 
247
302
  const { select: _s, include: _i, omit: _o, ...stageArgs } = relationArgs
248
303
 
@@ -263,7 +318,13 @@ function walk(
263
318
  isPlainObject(relationArgs.omit)
264
319
 
265
320
  if (hasNestedProjection) {
266
- const nested = walk(ctx, relation.type, relationPath, relationArgs, depth + 1)
321
+ const nested = walk(
322
+ ctx,
323
+ relation.type,
324
+ relationPath,
325
+ relationArgs,
326
+ depth + 1,
327
+ )
267
328
  if (nested.unsupportedReason) return nested
268
329
 
269
330
  if (nested.projectionAfterStrip) {
@@ -278,7 +339,9 @@ function walk(
278
339
  return { projectionAfterStrip: isSelectMode ? updatedProjection : undefined }
279
340
  }
280
341
 
281
- export function planAutoInclude(input: AutoIncludePlannerInput): AutoIncludePlan {
342
+ export function planAutoInclude(
343
+ input: AutoIncludePlannerInput,
344
+ ): AutoIncludePlan {
282
345
  const maxDepth = input.maxDepth ?? DEFAULT_AUTO_INCLUDE_MAX_DEPTH
283
346
  const maxStages = input.maxStages ?? DEFAULT_AUTO_INCLUDE_MAX_STAGES
284
347
 
@@ -297,7 +360,8 @@ export function planAutoInclude(input: AutoIncludePlannerInput): AutoIncludePlan
297
360
  rootArgs: input.args,
298
361
  stages: [],
299
362
  internalFieldPaths: [],
300
- unsupportedReason: 'auto-progressive fallback: ' + result.unsupportedReason,
363
+ unsupportedReason:
364
+ 'auto-progressive fallback: ' + result.unsupportedReason,
301
365
  }
302
366
  }
303
367
 
@@ -309,7 +373,9 @@ export function planAutoInclude(input: AutoIncludePlannerInput): AutoIncludePlan
309
373
  delete rootArgs.include
310
374
  } else if (rootModel && isPlainObject(input.args.include)) {
311
375
  const stripped = Object.fromEntries(
312
- Object.entries(input.args.include).filter(([k]) => !rootModel.relations[k]),
376
+ Object.entries(input.args.include).filter(
377
+ ([k]) => !rootModel.relations[k],
378
+ ),
313
379
  )
314
380
  if (Object.keys(stripped).length > 0) {
315
381
  rootArgs.include = stripped
@@ -323,4 +389,4 @@ export function planAutoInclude(input: AutoIncludePlannerInput): AutoIncludePlan
323
389
  stages: ctx.stages,
324
390
  internalFieldPaths: ctx.internalFieldPaths,
325
391
  }
326
- }
392
+ }