arkos 1.3.1-beta → 1.3.2-beta

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 (256) hide show
  1. package/dist/cjs/app.js +139 -1
  2. package/dist/cjs/exports/auth/index.js +6 -1
  3. package/dist/cjs/exports/controllers/index.js +11 -1
  4. package/dist/cjs/exports/error-handler/index.js +11 -1
  5. package/dist/cjs/exports/index.js +12 -1
  6. package/dist/cjs/exports/middlewares/index.js +7 -1
  7. package/dist/cjs/exports/prisma/index.js +13 -1
  8. package/dist/cjs/exports/services/index.js +48 -1
  9. package/dist/cjs/exports/utils/index.js +44 -1
  10. package/dist/cjs/exports/validation/index.js +11 -1
  11. package/dist/cjs/modules/auth/auth.controller.js +229 -1
  12. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  13. package/dist/cjs/modules/auth/auth.router.js +82 -1
  14. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  15. package/dist/cjs/modules/auth/auth.service.js +226 -1
  16. package/dist/cjs/modules/auth/utils/auth-error-objects.js +10 -1
  17. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +83 -1
  18. package/dist/cjs/modules/auth/utils/services/auth-action.service.js +92 -1
  19. package/dist/cjs/modules/auth/utils/services/auth-action.service.js.map +1 -1
  20. package/dist/cjs/modules/base/base.controller.js +172 -1
  21. package/dist/cjs/modules/base/base.middlewares.js +92 -1
  22. package/dist/cjs/modules/base/base.router.js +22 -1
  23. package/dist/cjs/modules/base/base.service.js +507 -1
  24. package/dist/cjs/modules/base/base.service.js.map +1 -1
  25. package/dist/cjs/modules/base/types/base.service.types.js +3 -1
  26. package/dist/cjs/modules/base/types/base.service.types.js.map +1 -1
  27. package/dist/cjs/modules/base/utils/helpers/base.controller.helpers.js +80 -1
  28. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +50 -1
  29. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +104 -1
  30. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +208 -1
  31. package/dist/cjs/modules/base/utils/router-validator.js +16 -1
  32. package/dist/cjs/modules/base/utils/service-hooks-manager.js +19 -1
  33. package/dist/cjs/modules/email/email.service.js +104 -1
  34. package/dist/cjs/modules/error-handler/error-handler.controller.js +146 -4
  35. package/dist/cjs/modules/error-handler/utils/app-error.js +17 -1
  36. package/dist/cjs/modules/error-handler/utils/catch-async.js +21 -1
  37. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +205 -3
  38. package/dist/cjs/modules/file-upload/file-upload.controller.js +233 -1
  39. package/dist/cjs/modules/file-upload/file-upload.router.js +60 -1
  40. package/dist/cjs/modules/file-upload/file-upload.service.js +322 -1
  41. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +97 -1
  42. package/dist/cjs/modules/swagger/swagger.router.js +38 -1
  43. package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +338 -1
  44. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +64 -1
  45. package/dist/cjs/modules/swagger/utils/helpers/get-system-json-schema-paths.js +37 -1
  46. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +48 -1
  47. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +32 -1
  48. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +49 -1
  49. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +34 -1
  50. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +471 -1
  51. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +572 -1
  52. package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +260 -1
  53. package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +112 -1
  54. package/dist/cjs/paths.js +9 -1
  55. package/dist/cjs/server.js +94 -5
  56. package/dist/cjs/types/arkos-config.js +3 -1
  57. package/dist/cjs/types/arkos-config.js.map +1 -1
  58. package/dist/cjs/types/auth.js +3 -1
  59. package/dist/cjs/types/index.js +11 -1
  60. package/dist/cjs/types/router-config.js +3 -1
  61. package/dist/cjs/utils/arkos-env.js +9 -1
  62. package/dist/cjs/utils/cli/build.js +214 -5
  63. package/dist/cjs/utils/cli/dev.js +154 -3
  64. package/dist/cjs/utils/cli/generate.js +109 -1
  65. package/dist/cjs/utils/cli/index.js +104 -1
  66. package/dist/cjs/utils/cli/index.js.map +1 -1
  67. package/dist/cjs/utils/cli/prisma-generate.js +120 -0
  68. package/dist/cjs/utils/cli/prisma-generate.js.map +1 -0
  69. package/dist/cjs/utils/cli/start.js +103 -1
  70. package/dist/cjs/utils/cli/utils/cli.helpers.js +24 -1
  71. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js +73 -1
  72. package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js +36 -0
  73. package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -0
  74. package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js +21 -0
  75. package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -0
  76. package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js +201 -0
  77. package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js.map +1 -0
  78. package/dist/cjs/utils/cli/utils/template-generator/templates/middlewares-template.js +288 -0
  79. package/dist/cjs/utils/cli/utils/template-generator/templates/{generate-middlewares.js.map → middlewares-template.js.map} +1 -1
  80. package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js +64 -0
  81. package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -0
  82. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js +45 -0
  83. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js.map +1 -0
  84. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js +29 -0
  85. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js.map +1 -0
  86. package/dist/cjs/utils/cli/utils/template-generators.js +34 -2
  87. package/dist/cjs/utils/cli/utils/template-generators.js.map +1 -1
  88. package/dist/cjs/utils/cli/utils/watermark-stamper.js +17 -3
  89. package/dist/cjs/utils/dotenv.helpers.js +43 -1
  90. package/dist/cjs/utils/dynamic-loader.js +270 -9
  91. package/dist/cjs/utils/features/api.features.js +169 -1
  92. package/dist/cjs/utils/features/change-case.features.js +67 -1
  93. package/dist/cjs/utils/features/port-and-host-allocator.js +105 -1
  94. package/dist/cjs/utils/helpers/api.features.helpers.js +112 -1
  95. package/dist/cjs/utils/helpers/change-case.helpers.js +177 -1
  96. package/dist/cjs/utils/helpers/deepmerge.helper.js +115 -1
  97. package/dist/cjs/utils/helpers/dynamic-loader.helpers.js +76 -1
  98. package/dist/cjs/utils/helpers/fs.helpers.js +57 -1
  99. package/dist/cjs/utils/helpers/global.helpers.js +94 -1
  100. package/dist/cjs/utils/helpers/prisma.helpers.js +40 -1
  101. package/dist/cjs/utils/helpers/query-parser.helpers.js +45 -1
  102. package/dist/cjs/utils/helpers/routers.helpers.js +37 -1
  103. package/dist/cjs/utils/helpers/text.helpers.js +28 -1
  104. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +455 -1
  105. package/dist/cjs/utils/prisma/prisma-schema-parser.js +216 -4
  106. package/dist/cjs/utils/prisma/types.js +3 -1
  107. package/dist/cjs/utils/sheu.js +120 -1
  108. package/dist/cjs/utils/validate-dto.js +17 -1
  109. package/dist/cjs/utils/validate-schema.js +15 -1
  110. package/dist/esm/app.js +132 -1
  111. package/dist/esm/exports/auth/index.js +2 -1
  112. package/dist/esm/exports/controllers/index.js +4 -1
  113. package/dist/esm/exports/error-handler/index.js +4 -1
  114. package/dist/esm/exports/index.js +8 -1
  115. package/dist/esm/exports/middlewares/index.js +2 -1
  116. package/dist/esm/exports/prisma/index.js +6 -1
  117. package/dist/esm/exports/services/index.js +9 -1
  118. package/dist/esm/exports/utils/index.js +4 -1
  119. package/dist/esm/exports/validation/index.js +4 -1
  120. package/dist/esm/modules/auth/auth.controller.js +222 -1
  121. package/dist/esm/modules/auth/auth.controller.js.map +1 -1
  122. package/dist/esm/modules/auth/auth.router.js +76 -1
  123. package/dist/esm/modules/auth/auth.router.js.map +1 -1
  124. package/dist/esm/modules/auth/auth.service.js +219 -1
  125. package/dist/esm/modules/auth/utils/auth-error-objects.js +4 -1
  126. package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +73 -1
  127. package/dist/esm/modules/auth/utils/services/auth-action.service.js +90 -1
  128. package/dist/esm/modules/auth/utils/services/auth-action.service.js.map +1 -1
  129. package/dist/esm/modules/base/base.controller.js +165 -1
  130. package/dist/esm/modules/base/base.middlewares.js +81 -1
  131. package/dist/esm/modules/base/base.router.js +15 -1
  132. package/dist/esm/modules/base/base.service.js +500 -1
  133. package/dist/esm/modules/base/base.service.js.map +1 -1
  134. package/dist/esm/modules/base/types/base.service.types.js +2 -1
  135. package/dist/esm/modules/base/types/base.service.types.js.map +1 -1
  136. package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +76 -1
  137. package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +44 -1
  138. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +96 -1
  139. package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +198 -1
  140. package/dist/esm/modules/base/utils/router-validator.js +14 -1
  141. package/dist/esm/modules/base/utils/service-hooks-manager.js +17 -1
  142. package/dist/esm/modules/email/email.service.js +97 -1
  143. package/dist/esm/modules/error-handler/error-handler.controller.js +107 -4
  144. package/dist/esm/modules/error-handler/utils/app-error.js +15 -1
  145. package/dist/esm/modules/error-handler/utils/catch-async.js +19 -1
  146. package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +163 -3
  147. package/dist/esm/modules/file-upload/file-upload.controller.js +228 -1
  148. package/dist/esm/modules/file-upload/file-upload.router.js +54 -1
  149. package/dist/esm/modules/file-upload/file-upload.service.js +314 -1
  150. package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +87 -1
  151. package/dist/esm/modules/swagger/swagger.router.js +32 -1
  152. package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +333 -1
  153. package/dist/esm/modules/swagger/utils/helpers/get-swagger-default-configs.js +58 -1
  154. package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +34 -1
  155. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +42 -1
  156. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +26 -1
  157. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-system-json-schemas.js +46 -1
  158. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schemas.js +28 -1
  159. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +465 -1
  160. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +566 -1
  161. package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +255 -1
  162. package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +101 -1
  163. package/dist/esm/paths.js +3 -1
  164. package/dist/esm/server.js +85 -5
  165. package/dist/esm/types/arkos-config.js +2 -1
  166. package/dist/esm/types/arkos-config.js.map +1 -1
  167. package/dist/esm/types/auth.js +2 -1
  168. package/dist/esm/types/index.js +8 -1
  169. package/dist/esm/types/router-config.js +2 -1
  170. package/dist/esm/utils/arkos-env.js +7 -1
  171. package/dist/esm/utils/cli/build.js +208 -5
  172. package/dist/esm/utils/cli/dev.js +147 -3
  173. package/dist/esm/utils/cli/generate.js +103 -1
  174. package/dist/esm/utils/cli/index.js +94 -1
  175. package/dist/esm/utils/cli/index.js.map +1 -1
  176. package/dist/esm/utils/cli/prisma-generate.js +114 -0
  177. package/dist/esm/utils/cli/prisma-generate.js.map +1 -0
  178. package/dist/esm/utils/cli/start.js +96 -1
  179. package/dist/esm/utils/cli/utils/cli.helpers.js +16 -1
  180. package/dist/esm/utils/cli/utils/smart-fs-watcher.js +68 -1
  181. package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js +33 -0
  182. package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -0
  183. package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js +18 -0
  184. package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -0
  185. package/dist/esm/utils/cli/utils/template-generator/templates/hooks-template.js +198 -0
  186. package/dist/esm/utils/cli/utils/template-generator/templates/hooks-template.js.map +1 -0
  187. package/dist/esm/utils/cli/utils/template-generator/templates/middlewares-template.js +285 -0
  188. package/dist/esm/utils/cli/utils/template-generator/templates/{generate-middlewares.js.map → middlewares-template.js.map} +1 -1
  189. package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js +61 -0
  190. package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -0
  191. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js +39 -0
  192. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js.map +1 -0
  193. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js +26 -0
  194. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js.map +1 -0
  195. package/dist/esm/utils/cli/utils/template-generators.js +28 -2
  196. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  197. package/dist/esm/utils/cli/utils/watermark-stamper.js +15 -3
  198. package/dist/esm/utils/dotenv.helpers.js +37 -1
  199. package/dist/esm/utils/dynamic-loader.js +254 -9
  200. package/dist/esm/utils/features/api.features.js +162 -1
  201. package/dist/esm/utils/features/change-case.features.js +31 -1
  202. package/dist/esm/utils/features/port-and-host-allocator.js +67 -1
  203. package/dist/esm/utils/helpers/api.features.helpers.js +106 -1
  204. package/dist/esm/utils/helpers/change-case.helpers.js +161 -1
  205. package/dist/esm/utils/helpers/deepmerge.helper.js +113 -1
  206. package/dist/esm/utils/helpers/dynamic-loader.helpers.js +69 -1
  207. package/dist/esm/utils/helpers/fs.helpers.js +48 -1
  208. package/dist/esm/utils/helpers/global.helpers.js +51 -1
  209. package/dist/esm/utils/helpers/prisma.helpers.js +32 -1
  210. package/dist/esm/utils/helpers/query-parser.helpers.js +40 -1
  211. package/dist/esm/utils/helpers/routers.helpers.js +29 -1
  212. package/dist/esm/utils/helpers/text.helpers.js +22 -1
  213. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +448 -1
  214. package/dist/esm/utils/prisma/prisma-schema-parser.js +209 -4
  215. package/dist/esm/utils/prisma/types.js +2 -1
  216. package/dist/esm/utils/sheu.js +118 -1
  217. package/dist/esm/utils/validate-dto.js +11 -1
  218. package/dist/esm/utils/validate-schema.js +9 -1
  219. package/dist/types/modules/auth/utils/services/auth-action.service.d.ts +1 -1
  220. package/dist/types/modules/base/types/base.service.types.d.ts +12 -9
  221. package/dist/types/types/arkos-config.d.ts +3 -2
  222. package/dist/types/utils/cli/prisma-generate.d.ts +1 -0
  223. package/package.json +2 -2
  224. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -21
  225. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -1
  226. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -12
  227. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  228. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js +0 -144
  229. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +0 -1
  230. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -256
  231. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -36
  232. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  233. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -18
  234. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  235. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -9
  236. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -1
  237. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -21
  238. package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -1
  239. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -12
  240. package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  241. package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js +0 -144
  242. package/dist/esm/utils/cli/utils/template-generator/templates/generate-hooks-template.js.map +0 -1
  243. package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -256
  244. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -36
  245. package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
  246. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -18
  247. package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
  248. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -9
  249. package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -1
  250. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-auth-configs-template.d.ts → auth-configs-template.d.ts} +0 -0
  251. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-controller-template.d.ts → controller-template.d.ts} +0 -0
  252. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-hooks-template.d.ts → hooks-template.d.ts} +0 -0
  253. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-middlewares.d.ts → middlewares-template.d.ts} +0 -0
  254. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-prisma-query-options.d.ts → query-options-template.d.ts} +0 -0
  255. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-router-template.d.ts → router-template.d.ts} +0 -0
  256. /package/dist/types/utils/cli/utils/template-generator/templates/{generate-service-template.d.ts → service-template.d.ts} +0 -0
@@ -1 +1,448 @@
1
- "use strict";import h from"../helpers/deepmerge.helper.js";import{getModuleComponents as f}from"../dynamic-loader.js";import y from"./prisma-schema-parser.js";import{localValidatorFileExists as c}from"../../modules/swagger/utils/helpers/swagger.router.helpers.js";export class PrismaJsonSchemaGenerator{constructor(){this.schema=y.parse()}async generateModelSchemas(t){const{modelName:a,arkosConfig:n,schemasToGenerate:s=["model","login","signup","getMe","updateMe","updatePassword","create","createOne","createMany","update","updateOne","updateMany","query","findOne","findMany"]}=t,e=f(a),i=e?.router?.config||{},r=e?.prismaQueryOptions||{},o=["auth","me","password","signup","login"].includes(a.toLowerCase());if(n?.swagger?.strict&&n.swagger.mode!=="prisma")return{};if(i?.disable===!0)return{};const d=this.schema.models.find(l=>l.name.toLowerCase()===a.toLowerCase());if(!d&&!o)return{};const u={};return o?await this.generateAuthSchemas(this.schema.models.find(l=>l.name.toLowerCase()==="user"),u,n,s,r):d&&await this.generateCrudSchemas(d,u,n,s,r,i),{...u}}async generateAuthSchemas(t,a,n,s,e,i){const r="Auth";if(!n?.authentication)return a;s.includes("login")&&!this.isEndpointDisabled("login",i)&&!await c("login",r,n)&&(a.LoginSchema=this.generateLoginSchema(n)),s.includes("signup")&&!this.isEndpointDisabled("signup",i)&&!await c("signup",r,n)&&(a.SignupSchema=this.generateSignupSchema(t,e?.signup)),s.includes("updateMe")&&!this.isEndpointDisabled("updateMe",i)&&!await c("updateMe",r,n)&&(a.UpdateMeSchema=this.generateUpdateMeSchema(t,e?.updateMe)),s.includes("updatePassword")&&!this.isEndpointDisabled("updatePassword",i)&&!await c("updatePassword",r,n)&&(a.UpdatePasswordSchema=this.generateUpdatePasswordSchema(t,e?.updatePassword)),s.includes("getMe")&&!this.isEndpointDisabled("getMe",i)&&!await c("getMe",r,n)&&(a.GetMeSchema=this.generateResponseSchema(t,e?.getMe||{},"findOne"))}async generateCrudSchemas(t,a,n,s,e,i){const r=t.name,p=async(o,d)=>{const u=n.validation?.resolver==="zod"?"Schema":"Dto";if(await c(o==="Create"?"createOne":"updateOne",d,n))return`${o}${d}${u}`;{const m=`${o}${d}ModelSchema`;return a[m]||(o==="Create"?a[m]=this.generateCreateSchema(t,this.resolvePrismaQueryOptions(e,"createOne")):o==="Update"&&(a[m]=this.generateUpdateSchema(t,this.resolvePrismaQueryOptions(e,"updateOne")))),m}};if(s.includes("createOne")&&!this.isEndpointDisabled("createOne",i)&&!await c("createOne",r,n)&&(a[`Create${r}ModelSchema`]=this.generateCreateSchema(t,this.resolvePrismaQueryOptions(e,"createOne"))),s.includes("createMany")&&!this.isEndpointDisabled("createMany",i)&&!await c("createMany",r,n)){const o=await p("Create",r);a[`CreateMany${r}ModelSchema`]={type:"array",items:{$ref:`#/components/schemas/${o}`}}}if(s.includes("updateOne")&&!this.isEndpointDisabled("updateOne",i)&&!await c("updateOne",r,n)&&(a[`Update${r}ModelSchema`]=this.generateUpdateSchema(t,this.resolvePrismaQueryOptions(e,"updateOne"))),s.includes("updateMany")&&!this.isEndpointDisabled("updateMany",i)&&!await c("updateMany",r,n)){const o=await p("Update",r);a[`UpdateMany${r}ModelSchema`]={type:"object",properties:{data:{type:"object",$ref:`#/components/schemas/${o}`},where:{type:"object"}},required:["data"]}}s.includes("findOne")&&!this.isEndpointDisabled("findOne",i)&&!await c("findOne",r,n)&&(a[`FindOne${r}ModelSchema`]=this.generateResponseSchema(t,this.resolvePrismaQueryOptions(e,"findOne"),"findOne")),s.includes("findMany")&&!this.isEndpointDisabled("findMany",i)&&!await c("findMany",r,n)&&(a[`FindMany${r}ModelSchema`]={type:"array",items:this.generateResponseSchema(t,this.resolvePrismaQueryOptions(e,"findMany"),"findMany")})}generateCreateSchema(t,a){const n={},s=[],e=["createdAt","updatedAt","deletedAt","id"];t.name.toLowerCase()==="auth"&&e.push("roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","lastLoginAt");for(const i of t.fields){if(i.isId||e.includes(i.name))continue;if(this.isModelRelation(i.type)){!i.isArray&&i.connectionField&&(n[i.connectionField]={type:this.mapPrismaTypeToJsonSchema(t.fields.find(p=>p.name===i.connectionField)?.type||"String")},!i.isOptional&&i.defaultValue===void 0&&s.push(i.name));continue}const r=this.convertFieldToJsonSchema(i);n[i.name]=r,!i.isOptional&&i.defaultValue===void 0&&!i.isArray&&s.push(i.name)}return{type:"object",properties:n,required:s}}generateUpdateSchema(t,a){const n={},s=["createdAt","updatedAt","deletedAt","id"];for(const e of t.fields){if(e.isId||s.includes(e.name))continue;if(this.isModelRelation(e.type)){!e.isArray&&e.connectionField&&(n[e.connectionField]={type:this.mapPrismaTypeToJsonSchema(t.fields.find(r=>r.name===e.connectionField)?.type||"String")});continue}const i=this.convertFieldToJsonSchema(e);n[e.name]=i}return{type:"object",properties:n,required:[]}}generateResponseSchema(t,a,n){const s={},e=[],i=a?.select,r=a?.omit,p=a?.include;for(const o of t.fields){if(o.name==="password"||r&&r[o.name]||i&&!i[o.name])continue;if(this.isModelRelation(o.type)){if(p?.[o.name]){const u=this.schema.models.find(l=>l.name===o.type);if(u){const l=this.generateNestedRelationSchema(u,p[o.name]);s[o.name]=o.isArray?{type:"array",items:l}:l}}continue}const d=this.convertFieldToJsonSchema(o);s[o.name]=d,o.isOptional||e.push(o.name)}return{type:"object",properties:s,required:e}}generateNestedRelationSchema(t,a){const n={},s=[],e=a?.select,i=a?.include;for(const r of t.fields){if(r.name.toLowerCase().includes("password")||e&&!e[r.name])continue;if(this.isModelRelation(r.type)){if(i?.[r.name]){const o=this.schema.models.find(d=>d.name===r.type);if(o){const d=this.generateNestedRelationSchema(o,i[r.name]);n[r.name]=r.isArray?{type:"array",items:d}:d}}continue}const p=this.convertFieldToJsonSchema(r);n[r.name]=p,r.isOptional||s.push(r.name)}return{type:"object",properties:n,required:s}}generateLoginSchema(t){const a=t?.authentication?.login?.allowedUsernames||[],n=e=>e.includes(".")&&e.split(".").pop()||e,s={type:"object",properties:{password:{type:"string",minLength:8}},required:["password"]};if(a.forEach(e=>{const i=n(e);s.properties[i]={type:"string",format:"string",description:`Username field: ${e}`}}),a.length>0){const e=a.map(n);return{...s,anyOf:e.map(()=>({required:[...s.required]}))}}return s}generateSignupSchema(t,a){const n=this.generateCreateSchema(t,a||{});return["roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","lastLoginAt"].forEach(e=>{delete n?.properties?.[e]}),n}generateUpdateMeSchema(t,a){const n=this.generateUpdateSchema(t,a||{});return["roles","role","isActive","isStaff","isSuperUser","passwordChangedAt","deletedSelfAccountAt","password","lastLoginAt"].forEach(e=>{delete n?.properties?.[e]}),n}generateUpdatePasswordSchema(t,a){return{type:"object",properties:{currentPassword:{type:"string"},newPassword:{type:"string",minLength:8}},required:["currentPassword","newPassword"]}}resolvePrismaQueryOptions(t,a){if(!t||!a)return{};const n=t,s=n[a]||{};let e=n.queryOptions||{};n.global&&(e=h(e,n.global));const i=this.getGeneralOptionsForAction(n,a);return i&&(e=h(e,i)),s&&(e=h(e,s)),e}getGeneralOptionsForAction(t,a){const n={find:["findOne","findMany"],create:["createOne","createMany"],update:["updateOne","updateMany"],delete:["deleteOne","deleteMany"],save:["createOne","createMany","updateOne","updateMany"],saveOne:["createOne","updateOne"],saveMany:["createMany","updateMany"]};for(const[s,e]of Object.entries(n))if(e.includes(a)&&t[s])return t[s];return null}isEndpointDisabled(t,a){return a?.disable?typeof a.disable=="boolean"?a.disable:a.disable[t]||!1:!1}isModelRelation(t){return this.schema.models.some(a=>a.name===t)}convertFieldToJsonSchema(t){const n={type:this.mapPrismaTypeToJsonSchema(t.type)};if(t.isArray&&(n.type="array",n.items={type:this.mapPrismaTypeToJsonSchema(t.type)}),t.defaultValue!==void 0&&(n.default=t.defaultValue),t.type==="DateTime"&&(n.format="date-time"),this.isEnum(t.type)){const s=this.schema.enums.find(e=>e.name===t.type);s&&(n.enum=s.values)}return n}mapPrismaTypeToJsonSchema(t){const a={String:"string",Int:"number",Float:"number",Boolean:"boolean",DateTime:"string",Json:"object",Bytes:"string"};return a[t]?a[t]:this.isEnum(t)?"string":this.isModelRelation(t)?"object":"string"}isEnum(t){return this.schema.enums.some(a=>a.name===t)}}const S=new PrismaJsonSchemaGenerator;export default S;
1
+ import deepmerge from "../helpers/deepmerge.helper.js";
2
+ import { getModuleComponents, } from "../dynamic-loader.js";
3
+ import prismaSchemaParser from "./prisma-schema-parser.js";
4
+ import { localValidatorFileExists } from "../../modules/swagger/utils/helpers/swagger.router.helpers.js";
5
+ export class PrismaJsonSchemaGenerator {
6
+ constructor() {
7
+ this.schema = prismaSchemaParser.parse();
8
+ }
9
+ async generateModelSchemas(config) {
10
+ const { modelName, arkosConfig, schemasToGenerate = [
11
+ "model",
12
+ "login",
13
+ "signup",
14
+ "getMe",
15
+ "updateMe",
16
+ "updatePassword",
17
+ "create",
18
+ "createOne",
19
+ "createMany",
20
+ "update",
21
+ "updateOne",
22
+ "updateMany",
23
+ "query",
24
+ "findOne",
25
+ "findMany",
26
+ ], } = config;
27
+ const moduleComponents = getModuleComponents(modelName);
28
+ const routerConfig = moduleComponents?.router?.config || {};
29
+ const prismaQueryOptions = moduleComponents?.prismaQueryOptions || {};
30
+ const authModuleModel = ["auth", "me", "password", "signup", "login"];
31
+ const isAuthModule = authModuleModel.includes(modelName.toLowerCase());
32
+ if (arkosConfig?.swagger?.strict && arkosConfig.swagger.mode !== "prisma")
33
+ return {};
34
+ if (routerConfig?.disable === true)
35
+ return {};
36
+ const model = this.schema.models.find((m) => m.name.toLowerCase() === modelName.toLowerCase());
37
+ if (!model && !isAuthModule)
38
+ return {};
39
+ const schemas = {};
40
+ if (isAuthModule) {
41
+ await this.generateAuthSchemas(this.schema.models.find((m) => m.name.toLowerCase() === "user"), schemas, arkosConfig, schemasToGenerate, prismaQueryOptions);
42
+ }
43
+ else {
44
+ if (model)
45
+ await this.generateCrudSchemas(model, schemas, arkosConfig, schemasToGenerate, prismaQueryOptions, routerConfig);
46
+ }
47
+ return { ...schemas };
48
+ }
49
+ async generateAuthSchemas(model, schemas, arkosConfig, schemasToGenerate, queryOptions, routerConfig) {
50
+ const modelName = "Auth";
51
+ if (!arkosConfig?.authentication)
52
+ return schemas;
53
+ if (schemasToGenerate.includes("login") &&
54
+ !this.isEndpointDisabled("login", routerConfig) &&
55
+ !(await localValidatorFileExists("login", modelName, arkosConfig))) {
56
+ schemas[`LoginSchema`] = this.generateLoginSchema(arkosConfig);
57
+ }
58
+ if (schemasToGenerate.includes("signup") &&
59
+ !this.isEndpointDisabled("signup", routerConfig) &&
60
+ !(await localValidatorFileExists("signup", modelName, arkosConfig))) {
61
+ schemas[`SignupSchema`] = this.generateSignupSchema(model, queryOptions?.signup);
62
+ }
63
+ if (schemasToGenerate.includes("updateMe") &&
64
+ !this.isEndpointDisabled("updateMe", routerConfig) &&
65
+ !(await localValidatorFileExists("updateMe", modelName, arkosConfig))) {
66
+ schemas[`UpdateMeSchema`] = this.generateUpdateMeSchema(model, queryOptions?.updateMe);
67
+ }
68
+ if (schemasToGenerate.includes("updatePassword") &&
69
+ !this.isEndpointDisabled("updatePassword", routerConfig) &&
70
+ !(await localValidatorFileExists("updatePassword", modelName, arkosConfig))) {
71
+ schemas[`UpdatePasswordSchema`] = this.generateUpdatePasswordSchema(model, queryOptions?.updatePassword);
72
+ }
73
+ if (schemasToGenerate.includes("getMe") &&
74
+ !this.isEndpointDisabled("getMe", routerConfig) &&
75
+ !(await localValidatorFileExists("getMe", modelName, arkosConfig))) {
76
+ schemas[`GetMeSchema`] = this.generateResponseSchema(model, queryOptions?.getMe || {}, "findOne");
77
+ }
78
+ }
79
+ async generateCrudSchemas(model, schemas, arkosConfig, schemasToGenerate, queryOptions, routerConfig) {
80
+ const modelName = model.name;
81
+ const ensureBaseSchemaReference = async (operation, modelName) => {
82
+ const suffix = arkosConfig.validation?.resolver === "zod" ? "Schema" : "Dto";
83
+ const singleOpName = operation === "Create" ? "createOne" : "updateOne";
84
+ const hasLocalValidator = await localValidatorFileExists(singleOpName, modelName, arkosConfig);
85
+ if (hasLocalValidator) {
86
+ return `${operation}${modelName}${suffix}`;
87
+ }
88
+ else {
89
+ const modelSchemaKey = `${operation}${modelName}ModelSchema`;
90
+ if (!schemas[modelSchemaKey]) {
91
+ if (operation === "Create") {
92
+ schemas[modelSchemaKey] = this.generateCreateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "createOne"));
93
+ }
94
+ else if (operation === "Update") {
95
+ schemas[modelSchemaKey] = this.generateUpdateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "updateOne"));
96
+ }
97
+ }
98
+ return modelSchemaKey;
99
+ }
100
+ };
101
+ if (schemasToGenerate.includes("createOne") &&
102
+ !this.isEndpointDisabled("createOne", routerConfig) &&
103
+ !(await localValidatorFileExists("createOne", modelName, arkosConfig))) {
104
+ schemas[`Create${modelName}ModelSchema`] = this.generateCreateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "createOne"));
105
+ }
106
+ if (schemasToGenerate.includes("createMany") &&
107
+ !this.isEndpointDisabled("createMany", routerConfig) &&
108
+ !(await localValidatorFileExists("createMany", modelName, arkosConfig))) {
109
+ const baseSchemaKey = await ensureBaseSchemaReference("Create", modelName);
110
+ schemas[`CreateMany${modelName}ModelSchema`] = {
111
+ type: "array",
112
+ items: { $ref: `#/components/schemas/${baseSchemaKey}` },
113
+ };
114
+ }
115
+ if (schemasToGenerate.includes("updateOne") &&
116
+ !this.isEndpointDisabled("updateOne", routerConfig) &&
117
+ !(await localValidatorFileExists("updateOne", modelName, arkosConfig))) {
118
+ schemas[`Update${modelName}ModelSchema`] = this.generateUpdateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "updateOne"));
119
+ }
120
+ if (schemasToGenerate.includes("updateMany") &&
121
+ !this.isEndpointDisabled("updateMany", routerConfig) &&
122
+ !(await localValidatorFileExists("updateMany", modelName, arkosConfig))) {
123
+ const baseSchemaKey = await ensureBaseSchemaReference("Update", modelName);
124
+ schemas[`UpdateMany${modelName}ModelSchema`] = {
125
+ type: "object",
126
+ properties: {
127
+ data: {
128
+ type: "object",
129
+ $ref: `#/components/schemas/${baseSchemaKey}`,
130
+ },
131
+ where: { type: "object" },
132
+ },
133
+ required: ["data"],
134
+ };
135
+ }
136
+ if (schemasToGenerate.includes("findOne") &&
137
+ !this.isEndpointDisabled("findOne", routerConfig) &&
138
+ !(await localValidatorFileExists("findOne", modelName, arkosConfig))) {
139
+ schemas[`FindOne${modelName}ModelSchema`] = this.generateResponseSchema(model, this.resolvePrismaQueryOptions(queryOptions, "findOne"), "findOne");
140
+ }
141
+ if (schemasToGenerate.includes("findMany") &&
142
+ !this.isEndpointDisabled("findMany", routerConfig) &&
143
+ !(await localValidatorFileExists("findMany", modelName, arkosConfig))) {
144
+ schemas[`FindMany${modelName}ModelSchema`] = {
145
+ type: "array",
146
+ items: this.generateResponseSchema(model, this.resolvePrismaQueryOptions(queryOptions, "findMany"), "findMany"),
147
+ };
148
+ }
149
+ }
150
+ generateCreateSchema(model, _) {
151
+ const properties = {};
152
+ const required = [];
153
+ const restrictedFields = ["createdAt", "updatedAt", "deletedAt", "id"];
154
+ if (model.name.toLowerCase() === "auth")
155
+ restrictedFields.push("roles", "role", "isActive", "isStaff", "isSuperUser", "passwordChangedAt", "deletedSelfAccountAt", "lastLoginAt");
156
+ for (const field of model.fields) {
157
+ if (field.isId || restrictedFields.includes(field.name))
158
+ continue;
159
+ if (this.isModelRelation(field.type)) {
160
+ if (!field.isArray && field.connectionField) {
161
+ properties[field.connectionField] = {
162
+ type: this.mapPrismaTypeToJsonSchema(model.fields.find((_field) => _field.name === field.connectionField)?.type || "String"),
163
+ };
164
+ if (!field.isOptional && field.defaultValue === undefined)
165
+ required.push(field.name);
166
+ }
167
+ continue;
168
+ }
169
+ const property = this.convertFieldToJsonSchema(field);
170
+ properties[field.name] = property;
171
+ if (!field.isOptional &&
172
+ field.defaultValue === undefined &&
173
+ !field.isArray) {
174
+ required.push(field.name);
175
+ }
176
+ }
177
+ return {
178
+ type: "object",
179
+ properties,
180
+ required,
181
+ };
182
+ }
183
+ generateUpdateSchema(model, _) {
184
+ const properties = {};
185
+ const autoFillFields = ["createdAt", "updatedAt", "deletedAt", "id"];
186
+ for (const field of model.fields) {
187
+ if (field.isId || autoFillFields.includes(field.name))
188
+ continue;
189
+ if (this.isModelRelation(field.type)) {
190
+ if (!field.isArray && field.connectionField)
191
+ properties[field.connectionField] = {
192
+ type: this.mapPrismaTypeToJsonSchema(model.fields.find((_field) => _field.name === field.connectionField)?.type || "String"),
193
+ };
194
+ continue;
195
+ }
196
+ const property = this.convertFieldToJsonSchema(field);
197
+ properties[field.name] = property;
198
+ }
199
+ return {
200
+ type: "object",
201
+ properties,
202
+ required: [],
203
+ };
204
+ }
205
+ generateResponseSchema(model, options, _) {
206
+ const properties = {};
207
+ const required = [];
208
+ const selectFields = options?.select;
209
+ const omittedFields = options?.omit;
210
+ const includeRelations = options?.include;
211
+ for (const field of model.fields) {
212
+ if (field.name === "password")
213
+ continue;
214
+ if (omittedFields && omittedFields[field.name])
215
+ continue;
216
+ if (selectFields && !selectFields[field.name])
217
+ continue;
218
+ if (this.isModelRelation(field.type)) {
219
+ if (includeRelations?.[field.name]) {
220
+ const relationModel = this.schema.models.find((m) => m.name === field.type);
221
+ if (relationModel) {
222
+ const relationSchema = this.generateNestedRelationSchema(relationModel, includeRelations[field.name]);
223
+ properties[field.name] = field.isArray
224
+ ? { type: "array", items: relationSchema }
225
+ : relationSchema;
226
+ }
227
+ }
228
+ continue;
229
+ }
230
+ const property = this.convertFieldToJsonSchema(field);
231
+ properties[field.name] = property;
232
+ if (!field.isOptional)
233
+ required.push(field.name);
234
+ }
235
+ return {
236
+ type: "object",
237
+ properties,
238
+ required,
239
+ };
240
+ }
241
+ generateNestedRelationSchema(model, includeOptions) {
242
+ const properties = {};
243
+ const required = [];
244
+ const selectFields = includeOptions?.select;
245
+ const nestedIncludes = includeOptions?.include;
246
+ for (const field of model.fields) {
247
+ if (field.name.toLowerCase().includes("password")) {
248
+ continue;
249
+ }
250
+ if (selectFields && !selectFields[field.name]) {
251
+ continue;
252
+ }
253
+ if (this.isModelRelation(field.type)) {
254
+ if (nestedIncludes?.[field.name]) {
255
+ const relationModel = this.schema.models.find((m) => m.name === field.type);
256
+ if (relationModel) {
257
+ const nestedSchema = this.generateNestedRelationSchema(relationModel, nestedIncludes[field.name]);
258
+ properties[field.name] = field.isArray
259
+ ? { type: "array", items: nestedSchema }
260
+ : nestedSchema;
261
+ }
262
+ }
263
+ continue;
264
+ }
265
+ const property = this.convertFieldToJsonSchema(field);
266
+ properties[field.name] = property;
267
+ if (!field.isOptional) {
268
+ required.push(field.name);
269
+ }
270
+ }
271
+ return {
272
+ type: "object",
273
+ properties,
274
+ required,
275
+ };
276
+ }
277
+ generateLoginSchema(arkosConfig) {
278
+ const userNameFields = arkosConfig?.authentication?.login?.allowedUsernames || [];
279
+ const getDisplayName = (field) => {
280
+ if (field.includes("."))
281
+ return field.split(".").pop() || field;
282
+ return field;
283
+ };
284
+ const baseSchema = {
285
+ type: "object",
286
+ properties: {
287
+ password: {
288
+ type: "string",
289
+ minLength: 8,
290
+ },
291
+ },
292
+ required: ["password"],
293
+ };
294
+ userNameFields.forEach((field) => {
295
+ const displayName = getDisplayName(field);
296
+ baseSchema.properties[displayName] = {
297
+ type: "string",
298
+ format: "string",
299
+ description: `Username field: ${field}`,
300
+ };
301
+ });
302
+ if (userNameFields.length > 0) {
303
+ const usernameDisplayNames = userNameFields.map(getDisplayName);
304
+ return {
305
+ ...baseSchema,
306
+ anyOf: usernameDisplayNames.map(() => ({
307
+ required: [...baseSchema.required],
308
+ })),
309
+ };
310
+ }
311
+ return baseSchema;
312
+ }
313
+ generateSignupSchema(model, options) {
314
+ const singupSchema = this.generateCreateSchema(model, options || {});
315
+ const restrictedFields = [
316
+ "roles",
317
+ "role",
318
+ "isActive",
319
+ "isStaff",
320
+ "isSuperUser",
321
+ "passwordChangedAt",
322
+ "deletedSelfAccountAt",
323
+ "lastLoginAt",
324
+ ];
325
+ restrictedFields.forEach((field) => {
326
+ delete singupSchema?.properties?.[field];
327
+ });
328
+ return singupSchema;
329
+ }
330
+ generateUpdateMeSchema(model, options) {
331
+ const updateSchema = this.generateUpdateSchema(model, options || {});
332
+ const restrictedFields = [
333
+ "roles",
334
+ "role",
335
+ "isActive",
336
+ "isStaff",
337
+ "isSuperUser",
338
+ "passwordChangedAt",
339
+ "deletedSelfAccountAt",
340
+ "password",
341
+ "lastLoginAt",
342
+ ];
343
+ restrictedFields.forEach((field) => {
344
+ delete updateSchema?.properties?.[field];
345
+ });
346
+ return updateSchema;
347
+ }
348
+ generateUpdatePasswordSchema(_, _1) {
349
+ return {
350
+ type: "object",
351
+ properties: {
352
+ currentPassword: { type: "string" },
353
+ newPassword: { type: "string", minLength: 8 },
354
+ },
355
+ required: ["currentPassword", "newPassword"],
356
+ };
357
+ }
358
+ resolvePrismaQueryOptions(prismaQueryOptions, action) {
359
+ if (!prismaQueryOptions || !action) {
360
+ return {};
361
+ }
362
+ const options = prismaQueryOptions;
363
+ const actionOptions = options[action] || {};
364
+ let mergedOptions = options.queryOptions || {};
365
+ if (options.global)
366
+ mergedOptions = deepmerge(mergedOptions, options.global);
367
+ const generalOptions = this.getGeneralOptionsForAction(options, action);
368
+ if (generalOptions)
369
+ mergedOptions = deepmerge(mergedOptions, generalOptions);
370
+ if (actionOptions)
371
+ mergedOptions = deepmerge(mergedOptions, actionOptions);
372
+ return mergedOptions;
373
+ }
374
+ getGeneralOptionsForAction(options, action) {
375
+ const actionMap = {
376
+ find: ["findOne", "findMany"],
377
+ create: ["createOne", "createMany"],
378
+ update: ["updateOne", "updateMany"],
379
+ delete: ["deleteOne", "deleteMany"],
380
+ save: ["createOne", "createMany", "updateOne", "updateMany"],
381
+ saveOne: ["createOne", "updateOne"],
382
+ saveMany: ["createMany", "updateMany"],
383
+ };
384
+ for (const [optionKey, actions] of Object.entries(actionMap)) {
385
+ if (actions.includes(action) && options[optionKey]) {
386
+ return options[optionKey];
387
+ }
388
+ }
389
+ return null;
390
+ }
391
+ isEndpointDisabled(endpoint, routerConfig) {
392
+ if (!routerConfig?.disable)
393
+ return false;
394
+ if (typeof routerConfig.disable === "boolean") {
395
+ return routerConfig.disable;
396
+ }
397
+ return (routerConfig.disable[endpoint] ||
398
+ false);
399
+ }
400
+ isModelRelation(typeName) {
401
+ return this.schema.models.some((m) => m.name === typeName);
402
+ }
403
+ convertFieldToJsonSchema(field) {
404
+ const baseType = this.mapPrismaTypeToJsonSchema(field.type);
405
+ const property = { type: baseType };
406
+ if (field.isArray) {
407
+ property.type = "array";
408
+ property.items = { type: this.mapPrismaTypeToJsonSchema(field.type) };
409
+ }
410
+ if (field.defaultValue !== undefined) {
411
+ property.default = field.defaultValue;
412
+ }
413
+ if (field.type === "DateTime") {
414
+ property.format = "date-time";
415
+ }
416
+ if (this.isEnum(field.type)) {
417
+ const enumDef = this.schema.enums.find((e) => e.name === field.type);
418
+ if (enumDef) {
419
+ property.enum = enumDef.values;
420
+ }
421
+ }
422
+ return property;
423
+ }
424
+ mapPrismaTypeToJsonSchema(prismaType) {
425
+ const typeMap = {
426
+ String: "string",
427
+ Int: "number",
428
+ Float: "number",
429
+ Boolean: "boolean",
430
+ DateTime: "string",
431
+ Json: "object",
432
+ Bytes: "string",
433
+ };
434
+ if (typeMap[prismaType])
435
+ return typeMap[prismaType];
436
+ if (this.isEnum(prismaType))
437
+ return "string";
438
+ if (this.isModelRelation(prismaType))
439
+ return "object";
440
+ return "string";
441
+ }
442
+ isEnum(typeName) {
443
+ return this.schema.enums.some((e) => e.name === typeName);
444
+ }
445
+ }
446
+ const prismaJsonSchemaGenerator = new PrismaJsonSchemaGenerator();
447
+ export default prismaJsonSchemaGenerator;
448
+ //# sourceMappingURL=prisma-json-schema-generator.js.map