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