arkos 1.4.0-canary.83 → 1.4.0-canary.85

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 (63) hide show
  1. package/dist/cjs/modules/auth/auth.router.js +12 -12
  2. package/dist/cjs/modules/auth/auth.router.js.map +1 -1
  3. package/dist/cjs/modules/base/base.middlewares.js +1 -0
  4. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  5. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +10 -10
  6. package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  7. package/dist/cjs/modules/swagger/utils/helpers/class-validator-to-json-schema.js +2 -2
  8. package/dist/cjs/modules/swagger/utils/helpers/class-validator-to-json-schema.js.map +1 -1
  9. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +2 -2
  10. package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
  11. package/dist/cjs/utils/arkos-router/index.js +6 -5
  12. package/dist/cjs/utils/arkos-router/index.js.map +1 -1
  13. package/dist/cjs/utils/arkos-router/types/body-parser-config.js +3 -0
  14. package/dist/cjs/utils/arkos-router/types/body-parser-config.js.map +1 -0
  15. package/dist/cjs/utils/arkos-router/types/index.js.map +1 -1
  16. package/dist/cjs/utils/arkos-router/utils/helpers/index.js +14 -3
  17. package/dist/cjs/utils/arkos-router/utils/helpers/index.js.map +1 -1
  18. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js +5 -4
  19. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js.map +1 -1
  20. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -1
  21. package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
  22. package/dist/cjs/utils/helpers/dynamic-loader.helpers.js +34 -55
  23. package/dist/cjs/utils/helpers/dynamic-loader.helpers.js.map +1 -1
  24. package/dist/cjs/utils/helpers/query-parser.helpers.js +24 -0
  25. package/dist/cjs/utils/helpers/query-parser.helpers.js.map +1 -1
  26. package/dist/cjs/utils/helpers/routers.helpers.js +6 -4
  27. package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -1
  28. package/dist/esm/modules/auth/auth.router.js +12 -12
  29. package/dist/esm/modules/auth/auth.router.js.map +1 -1
  30. package/dist/esm/modules/base/base.middlewares.js +1 -0
  31. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  32. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +10 -10
  33. package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
  34. package/dist/esm/modules/swagger/utils/helpers/class-validator-to-json-schema.js +1 -1
  35. package/dist/esm/modules/swagger/utils/helpers/class-validator-to-json-schema.js.map +1 -1
  36. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +1 -1
  37. package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
  38. package/dist/esm/utils/arkos-router/index.js +6 -5
  39. package/dist/esm/utils/arkos-router/index.js.map +1 -1
  40. package/dist/esm/utils/arkos-router/types/body-parser-config.js +2 -0
  41. package/dist/esm/utils/arkos-router/types/body-parser-config.js.map +1 -0
  42. package/dist/esm/utils/arkos-router/types/index.js.map +1 -1
  43. package/dist/esm/utils/arkos-router/utils/helpers/index.js +14 -3
  44. package/dist/esm/utils/arkos-router/utils/helpers/index.js.map +1 -1
  45. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js +5 -4
  46. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js.map +1 -1
  47. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
  48. package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -1
  49. package/dist/esm/utils/helpers/arkos-config.helpers.js +2 -2
  50. package/dist/esm/utils/helpers/dynamic-loader.helpers.js +34 -55
  51. package/dist/esm/utils/helpers/dynamic-loader.helpers.js.map +1 -1
  52. package/dist/esm/utils/helpers/query-parser.helpers.js +24 -0
  53. package/dist/esm/utils/helpers/query-parser.helpers.js.map +1 -1
  54. package/dist/esm/utils/helpers/routers.helpers.js +6 -4
  55. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -1
  56. package/dist/types/modules/auth/auth.router.d.ts +1 -1
  57. package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +1 -1
  58. package/dist/types/utils/arkos-router/types/body-parser-config.d.ts +18 -0
  59. package/dist/types/utils/arkos-router/types/index.d.ts +2 -17
  60. package/dist/types/utils/arkos-router/utils/helpers/upload-manager.d.ts +2 -2
  61. package/dist/types/utils/helpers/query-parser.helpers.d.ts +1 -0
  62. package/dist/types/utils/helpers/routers.helpers.d.ts +2 -1
  63. package/package.json +1 -1
@@ -16,7 +16,7 @@ const router_validator_1 = __importDefault(require("../base/utils/router-validat
16
16
  const fs_helpers_1 = require("../../utils/helpers/fs.helpers");
17
17
  const arkos_router_1 = __importDefault(require("../../utils/arkos-router"));
18
18
  const router = (0, arkos_router_1.default)();
19
- function getAuthRouter(arkosConfigs) {
19
+ function getAuthRouter(arkosConfig) {
20
20
  const { interceptors, dtos, schemas, prismaQueryOptions, router: customRouterModule, authConfigs, } = (0, dynamic_loader_1.getModuleComponents)("auth") || {};
21
21
  const routerConfig = customRouterModule?.config || {};
22
22
  const customRouter = customRouterModule?.default;
@@ -30,7 +30,7 @@ function getAuthRouter(arkosConfigs) {
30
30
  if (routerConfig?.disable === true)
31
31
  return router;
32
32
  const getValidationSchemaOrDto = (key) => {
33
- const validationConfigs = arkosConfigs?.validation;
33
+ const validationConfigs = arkosConfig?.validation;
34
34
  if (validationConfigs?.resolver === "class-validator")
35
35
  return dtos?.[key];
36
36
  else if (validationConfigs?.resolver === "zod")
@@ -38,13 +38,13 @@ function getAuthRouter(arkosConfigs) {
38
38
  return undefined;
39
39
  };
40
40
  if (!(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "getMe")) {
41
- router.get((0, routers_helpers_1.createRouteConfig)("getMe", "users", "/me", routerConfig, "auth", true), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "getMe"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeGetMe), authController.getMe, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterGetMe), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onGetMeError, { type: "error" }));
41
+ router.get((0, routers_helpers_1.createRouteConfig)(arkosConfig, "getMe", "users", "/me", routerConfig, "auth", true), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "getMe"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeGetMe), authController.getMe, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterGetMe), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onGetMeError, { type: "error" }));
42
42
  }
43
43
  if (!(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "updateMe")) {
44
- router.patch((0, routers_helpers_1.createRouteConfig)("updateMe", "users", "/me", routerConfig, "auth", true, getValidationSchemaOrDto("updateMe")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateMe"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeUpdateMe), authController.updateMe, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterUpdateMe), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onUpdateMeError, { type: "error" }));
44
+ router.patch((0, routers_helpers_1.createRouteConfig)(arkosConfig, "updateMe", "users", "/me", routerConfig, "auth", true, getValidationSchemaOrDto("updateMe")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateMe"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeUpdateMe), authController.updateMe, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterUpdateMe), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onUpdateMeError, { type: "error" }));
45
45
  }
46
46
  if (!(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "deleteMe")) {
47
- router.delete((0, routers_helpers_1.createRouteConfig)("deleteMe", "users", "/me", routerConfig, "auth", true), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteMe"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeDeleteMe), authController.deleteMe, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterDeleteMe), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onDeleteMeError, { type: "error" }));
47
+ router.delete((0, routers_helpers_1.createRouteConfig)(arkosConfig, "deleteMe", "users", "/me", routerConfig, "auth", true), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteMe"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeDeleteMe), authController.deleteMe, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterDeleteMe), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onDeleteMeError, { type: "error" }));
48
48
  }
49
49
  if (!(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "login") ||
50
50
  !(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "logout") ||
@@ -60,29 +60,29 @@ function getAuthRouter(arkosConfigs) {
60
60
  message: "Too many requests, please try again later",
61
61
  });
62
62
  },
63
- }, arkosConfigs?.authentication?.rateLimit || {})));
63
+ }, arkosConfig?.authentication?.rateLimit || {})));
64
64
  }
65
65
  if (!(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "login")) {
66
- router.post((0, routers_helpers_1.createRouteConfig)("login", "auth", "/login", routerConfig, "auth", false, getValidationSchemaOrDto("login")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "login"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeLogin), authController.login, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterLogin), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onLoginError, { type: "error" }));
66
+ router.post((0, routers_helpers_1.createRouteConfig)(arkosConfig, "login", "auth", "/login", routerConfig, "auth", false, getValidationSchemaOrDto("login")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "login"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeLogin), authController.login, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterLogin), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onLoginError, { type: "error" }));
67
67
  }
68
68
  if (!(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "logout")) {
69
- router.delete((0, routers_helpers_1.createRouteConfig)("logout", "auth", "/logout", routerConfig, "auth", true), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeLogout), authController.logout, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterLogout), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onLogoutError, { type: "error" }));
69
+ router.delete((0, routers_helpers_1.createRouteConfig)(arkosConfig, "logout", "auth", "/logout", routerConfig, "auth", true), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeLogout), authController.logout, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterLogout), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onLogoutError, { type: "error" }));
70
70
  }
71
71
  if (!(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "signup")) {
72
- router.post((0, routers_helpers_1.createRouteConfig)("signup", "auth", "/signup", routerConfig, "auth", false, getValidationSchemaOrDto("signup")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "signup"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeSignup), authController.signup, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterSignup), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onSignupError, { type: "error" }));
72
+ router.post((0, routers_helpers_1.createRouteConfig)(arkosConfig, "signup", "auth", "/signup", routerConfig, "auth", false, getValidationSchemaOrDto("signup")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "signup"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeSignup), authController.signup, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterSignup), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onSignupError, { type: "error" }));
73
73
  }
74
74
  if (!(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "updatePassword")) {
75
- router.post((0, routers_helpers_1.createRouteConfig)("updatePassword", "auth", "/update-password", routerConfig, "auth", true, getValidationSchemaOrDto("updatePassword")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updatePassword"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeUpdatePassword), authController.updatePassword, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterUpdatePassword), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onUpdatePasswordError, {
75
+ router.post((0, routers_helpers_1.createRouteConfig)(arkosConfig, "updatePassword", "auth", "/update-password", routerConfig, "auth", true, getValidationSchemaOrDto("updatePassword")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updatePassword"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeUpdatePassword), authController.updatePassword, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterUpdatePassword), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onUpdatePasswordError, {
76
76
  type: "error",
77
77
  }));
78
78
  }
79
79
  if (!(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "findManyAuthAction")) {
80
- router.get((0, routers_helpers_1.createRouteConfig)("findManyAuthAction", "auth-actions", "", routerConfig, "auth", authConfigs), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeFindManyAuthAction), authController.findManyAuthAction, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterFindManyAuthAction), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onFindManyAuthActionError, {
80
+ router.get((0, routers_helpers_1.createRouteConfig)(arkosConfig, "findManyAuthAction", "auth-actions", "", routerConfig, "auth", authConfigs), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeFindManyAuthAction), authController.findManyAuthAction, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterFindManyAuthAction), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onFindManyAuthActionError, {
81
81
  type: "error",
82
82
  }));
83
83
  }
84
84
  if (!(0, base_router_helpers_1.isEndpointDisabled)(routerConfig, "findOneAuthAction")) {
85
- router.get((0, routers_helpers_1.createRouteConfig)("findOneAuthAction", "auth-actions", "/:resourceName", routerConfig, "auth", authConfigs), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeFindOneAuthAction), authController.findOneAuthAction, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterFindOneAuthAction), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onFindOneAuthActionError, {
85
+ router.get((0, routers_helpers_1.createRouteConfig)(arkosConfig, "findOneAuthAction", "auth-actions", "/:resourceName", routerConfig, "auth", authConfigs), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeFindOneAuthAction), authController.findOneAuthAction, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterFindOneAuthAction), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onFindOneAuthActionError, {
86
86
  type: "error",
87
87
  }));
88
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth.router.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.router.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport { authControllerFactory } from \"./auth.controller\";\nimport rateLimit from \"express-rate-limit\";\nimport { getModuleComponents } from \"../../utils/dynamic-loader\";\nimport {\n addPrismaQueryOptionsToRequest,\n sendResponse,\n} from \"../base/base.middlewares\";\nimport { ArkosConfig } from \"../../types/new-arkos-config\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport { AuthPrismaQueryOptions } from \"../../types\";\nimport {\n processMiddleware,\n createRouteConfig,\n} from \"../../utils/helpers/routers.helpers\";\nimport { isEndpointDisabled } from \"../base/utils/helpers/base.router.helpers\";\nimport debuggerService from \"../debugger/debugger.service\";\nimport routerValidator from \"../base/utils/router-validator\";\nimport { getUserFileExtension } from \"../../utils/helpers/fs.helpers\";\nimport ArkosRouter from \"../../utils/arkos-router\";\n\nconst router = ArkosRouter();\n\nexport function getAuthRouter(arkosConfigs: ArkosConfig) {\n const {\n interceptors,\n dtos,\n schemas,\n prismaQueryOptions,\n router: customRouterModule,\n authConfigs,\n } = getModuleComponents(\"auth\") || {};\n\n const routerConfig = customRouterModule?.config || {};\n const customRouter = customRouterModule?.default as Router;\n\n if (customRouter && customRouterModule) {\n if (routerValidator.isExpressRouter(customRouter))\n router.use(`/auth`, customRouter);\n else\n throw Error(\n `ValidationError: The exported router from auth.router.${getUserFileExtension()} is not a valid express or arkos Router.`\n );\n }\n\n const authController = authControllerFactory(interceptors);\n\n if (routerConfig?.disable === true) return router;\n\n const getValidationSchemaOrDto = (\n key: \"updateMe\" | \"updatePassword\" | \"login\" | \"signup\"\n ) => {\n const validationConfigs = arkosConfigs?.validation;\n if (validationConfigs?.resolver === \"class-validator\") return dtos?.[key];\n else if (validationConfigs?.resolver === \"zod\") return schemas?.[key];\n\n return undefined;\n };\n\n // GET /users/me - Get current user\n if (!isEndpointDisabled(routerConfig, \"getMe\")) {\n router.get(\n createRouteConfig(\"getMe\", \"users\", \"/me\", routerConfig, \"auth\", true),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"getMe\"\n ),\n ...processMiddleware(interceptors?.beforeGetMe),\n authController.getMe,\n ...processMiddleware(interceptors?.afterGetMe),\n sendResponse,\n ...processMiddleware(interceptors?.onGetMeError, { type: \"error\" })\n );\n }\n\n // PATCH /users/me - Update current user\n if (!isEndpointDisabled(routerConfig, \"updateMe\")) {\n router.patch(\n createRouteConfig(\n \"updateMe\",\n \"users\",\n \"/me\",\n routerConfig,\n \"auth\",\n true,\n getValidationSchemaOrDto(\"updateMe\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"updateMe\"\n ),\n ...processMiddleware(interceptors?.beforeUpdateMe),\n authController.updateMe,\n ...processMiddleware(interceptors?.afterUpdateMe),\n sendResponse,\n ...processMiddleware(interceptors?.onUpdateMeError, { type: \"error\" })\n );\n }\n\n // DELETE /users/me - Delete current user\n if (!isEndpointDisabled(routerConfig, \"deleteMe\")) {\n router.delete(\n createRouteConfig(\"deleteMe\", \"users\", \"/me\", routerConfig, \"auth\", true),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"deleteMe\"\n ),\n ...processMiddleware(interceptors?.beforeDeleteMe),\n authController.deleteMe,\n ...processMiddleware(interceptors?.afterDeleteMe),\n sendResponse,\n ...processMiddleware(interceptors?.onDeleteMeError, { type: \"error\" })\n );\n }\n\n // Apply rate limiting to auth routes\n if (\n !isEndpointDisabled(routerConfig, \"login\") ||\n !isEndpointDisabled(routerConfig, \"logout\") ||\n !isEndpointDisabled(routerConfig, \"signup\") ||\n !isEndpointDisabled(routerConfig, \"updatePassword\")\n ) {\n router.use(\n \"/auth\",\n rateLimit(\n deepmerge(\n {\n windowMs: 5000,\n limit: 10,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n handler: (_, res) => {\n res.status(429).json({\n message: \"Too many requests, please try again later\",\n });\n },\n },\n arkosConfigs?.authentication?.rateLimit || {}\n )\n )\n );\n }\n\n // POST /auth/login - Login\n if (!isEndpointDisabled(routerConfig, \"login\")) {\n router.post(\n createRouteConfig(\n \"login\",\n \"auth\",\n \"/login\",\n routerConfig,\n \"auth\",\n false,\n getValidationSchemaOrDto(\"login\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"login\"\n ),\n ...processMiddleware(interceptors?.beforeLogin),\n authController.login,\n ...processMiddleware(interceptors?.afterLogin),\n sendResponse,\n ...processMiddleware(interceptors?.onLoginError, { type: \"error\" })\n );\n }\n\n // DELETE /auth/logout - Logout\n if (!isEndpointDisabled(routerConfig, \"logout\")) {\n router.delete(\n createRouteConfig(\n \"logout\",\n \"auth\",\n \"/logout\",\n routerConfig,\n \"auth\",\n true\n ),\n ...processMiddleware(interceptors?.beforeLogout),\n authController.logout,\n ...processMiddleware(interceptors?.afterLogout),\n sendResponse,\n ...processMiddleware(interceptors?.onLogoutError, { type: \"error\" })\n );\n }\n\n // POST /auth/signup - Signup\n if (!isEndpointDisabled(routerConfig, \"signup\")) {\n router.post(\n createRouteConfig(\n \"signup\",\n \"auth\",\n \"/signup\",\n routerConfig,\n \"auth\",\n false,\n getValidationSchemaOrDto(\"signup\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"signup\"\n ),\n ...processMiddleware(interceptors?.beforeSignup),\n authController.signup,\n ...processMiddleware(interceptors?.afterSignup),\n sendResponse,\n ...processMiddleware(interceptors?.onSignupError, { type: \"error\" })\n );\n }\n\n // POST /auth/update-password - Update password\n if (!isEndpointDisabled(routerConfig, \"updatePassword\")) {\n router.post(\n createRouteConfig(\n \"updatePassword\",\n \"auth\",\n \"/update-password\",\n routerConfig,\n \"auth\",\n true,\n getValidationSchemaOrDto(\"updatePassword\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"updatePassword\"\n ),\n ...processMiddleware(interceptors?.beforeUpdatePassword),\n authController.updatePassword,\n ...processMiddleware(interceptors?.afterUpdatePassword),\n sendResponse,\n ...processMiddleware(interceptors?.onUpdatePasswordError, {\n type: \"error\",\n })\n );\n }\n\n // GET /auth-actions - Find many auth actions\n if (!isEndpointDisabled(routerConfig, \"findManyAuthAction\")) {\n router.get(\n createRouteConfig(\n \"findManyAuthAction\",\n \"auth-actions\",\n \"\",\n routerConfig,\n \"auth\",\n authConfigs\n ),\n ...processMiddleware(interceptors?.beforeFindManyAuthAction),\n authController.findManyAuthAction,\n ...processMiddleware(interceptors?.afterFindManyAuthAction),\n sendResponse,\n ...processMiddleware(interceptors?.onFindManyAuthActionError, {\n type: \"error\",\n })\n );\n }\n\n // GET /auth-actions/:resourceName - Find one auth action\n if (!isEndpointDisabled(routerConfig, \"findOneAuthAction\")) {\n router.get(\n createRouteConfig(\n \"findOneAuthAction\",\n \"auth-actions\",\n \"/:resourceName\",\n routerConfig,\n \"auth\",\n authConfigs\n ),\n ...processMiddleware(interceptors?.beforeFindOneAuthAction),\n authController.findOneAuthAction,\n ...processMiddleware(interceptors?.afterFindOneAuthAction),\n sendResponse,\n ...processMiddleware(interceptors?.onFindOneAuthActionError, {\n type: \"error\",\n })\n );\n }\n\n debuggerService.logModuleFinalRouter(\"auth\", router as any);\n return router;\n}\n"]}
1
+ {"version":3,"file":"auth.router.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.router.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport { authControllerFactory } from \"./auth.controller\";\nimport rateLimit from \"express-rate-limit\";\nimport { getModuleComponents } from \"../../utils/dynamic-loader\";\nimport {\n addPrismaQueryOptionsToRequest,\n sendResponse,\n} from \"../base/base.middlewares\";\nimport { ArkosConfig } from \"../../types/new-arkos-config\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport { AuthPrismaQueryOptions } from \"../../types\";\nimport {\n processMiddleware,\n createRouteConfig,\n} from \"../../utils/helpers/routers.helpers\";\nimport { isEndpointDisabled } from \"../base/utils/helpers/base.router.helpers\";\nimport debuggerService from \"../debugger/debugger.service\";\nimport routerValidator from \"../base/utils/router-validator\";\nimport { getUserFileExtension } from \"../../utils/helpers/fs.helpers\";\nimport ArkosRouter from \"../../utils/arkos-router\";\n\nconst router = ArkosRouter();\n\nexport function getAuthRouter(arkosConfig: ArkosConfig) {\n const {\n interceptors,\n dtos,\n schemas,\n prismaQueryOptions,\n router: customRouterModule,\n authConfigs,\n } = getModuleComponents(\"auth\") || {};\n\n const routerConfig = customRouterModule?.config || {};\n const customRouter = customRouterModule?.default as Router;\n\n if (customRouter && customRouterModule) {\n if (routerValidator.isExpressRouter(customRouter))\n router.use(`/auth`, customRouter);\n else\n throw Error(\n `ValidationError: The exported router from auth.router.${getUserFileExtension()} is not a valid express or arkos Router.`\n );\n }\n\n const authController = authControllerFactory(interceptors);\n\n if (routerConfig?.disable === true) return router;\n\n const getValidationSchemaOrDto = (\n key: \"updateMe\" | \"updatePassword\" | \"login\" | \"signup\"\n ) => {\n const validationConfigs = arkosConfig?.validation;\n if (validationConfigs?.resolver === \"class-validator\") return dtos?.[key];\n else if (validationConfigs?.resolver === \"zod\") return schemas?.[key];\n\n return undefined;\n };\n\n // GET /users/me - Get current user\n if (!isEndpointDisabled(routerConfig, \"getMe\")) {\n router.get(\n createRouteConfig(\n arkosConfig,\n \"getMe\",\n \"users\",\n \"/me\",\n routerConfig,\n \"auth\",\n true\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"getMe\"\n ),\n ...processMiddleware(interceptors?.beforeGetMe),\n authController.getMe,\n ...processMiddleware(interceptors?.afterGetMe),\n sendResponse,\n ...processMiddleware(interceptors?.onGetMeError, { type: \"error\" })\n );\n }\n\n // PATCH /users/me - Update current user\n if (!isEndpointDisabled(routerConfig, \"updateMe\")) {\n router.patch(\n createRouteConfig(\n arkosConfig,\n \"updateMe\",\n \"users\",\n \"/me\",\n routerConfig,\n \"auth\",\n true,\n getValidationSchemaOrDto(\"updateMe\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"updateMe\"\n ),\n ...processMiddleware(interceptors?.beforeUpdateMe),\n authController.updateMe,\n ...processMiddleware(interceptors?.afterUpdateMe),\n sendResponse,\n ...processMiddleware(interceptors?.onUpdateMeError, { type: \"error\" })\n );\n }\n\n // DELETE /users/me - Delete current user\n if (!isEndpointDisabled(routerConfig, \"deleteMe\")) {\n router.delete(\n createRouteConfig(\n arkosConfig,\n \"deleteMe\",\n \"users\",\n \"/me\",\n routerConfig,\n \"auth\",\n true\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"deleteMe\"\n ),\n ...processMiddleware(interceptors?.beforeDeleteMe),\n authController.deleteMe,\n ...processMiddleware(interceptors?.afterDeleteMe),\n sendResponse,\n ...processMiddleware(interceptors?.onDeleteMeError, { type: \"error\" })\n );\n }\n\n // Apply rate limiting to auth routes\n if (\n !isEndpointDisabled(routerConfig, \"login\") ||\n !isEndpointDisabled(routerConfig, \"logout\") ||\n !isEndpointDisabled(routerConfig, \"signup\") ||\n !isEndpointDisabled(routerConfig, \"updatePassword\")\n ) {\n router.use(\n \"/auth\",\n rateLimit(\n deepmerge(\n {\n windowMs: 5000,\n limit: 10,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n handler: (_, res) => {\n res.status(429).json({\n message: \"Too many requests, please try again later\",\n });\n },\n },\n arkosConfig?.authentication?.rateLimit || {}\n )\n )\n );\n }\n\n // POST /auth/login - Login\n if (!isEndpointDisabled(routerConfig, \"login\")) {\n router.post(\n createRouteConfig(\n arkosConfig,\n \"login\",\n \"auth\",\n \"/login\",\n routerConfig,\n \"auth\",\n false,\n getValidationSchemaOrDto(\"login\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"login\"\n ),\n ...processMiddleware(interceptors?.beforeLogin),\n authController.login,\n ...processMiddleware(interceptors?.afterLogin),\n sendResponse,\n ...processMiddleware(interceptors?.onLoginError, { type: \"error\" })\n );\n }\n\n // DELETE /auth/logout - Logout\n if (!isEndpointDisabled(routerConfig, \"logout\")) {\n router.delete(\n createRouteConfig(\n arkosConfig,\n \"logout\",\n \"auth\",\n \"/logout\",\n routerConfig,\n \"auth\",\n true\n ),\n ...processMiddleware(interceptors?.beforeLogout),\n authController.logout,\n ...processMiddleware(interceptors?.afterLogout),\n sendResponse,\n ...processMiddleware(interceptors?.onLogoutError, { type: \"error\" })\n );\n }\n\n // POST /auth/signup - Signup\n if (!isEndpointDisabled(routerConfig, \"signup\")) {\n router.post(\n createRouteConfig(\n arkosConfig,\n \"signup\",\n \"auth\",\n \"/signup\",\n routerConfig,\n \"auth\",\n false,\n getValidationSchemaOrDto(\"signup\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"signup\"\n ),\n ...processMiddleware(interceptors?.beforeSignup),\n authController.signup,\n ...processMiddleware(interceptors?.afterSignup),\n sendResponse,\n ...processMiddleware(interceptors?.onSignupError, { type: \"error\" })\n );\n }\n\n // POST /auth/update-password - Update password\n if (!isEndpointDisabled(routerConfig, \"updatePassword\")) {\n router.post(\n createRouteConfig(\n arkosConfig,\n \"updatePassword\",\n \"auth\",\n \"/update-password\",\n routerConfig,\n \"auth\",\n true,\n getValidationSchemaOrDto(\"updatePassword\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as AuthPrismaQueryOptions<any>,\n \"updatePassword\"\n ),\n ...processMiddleware(interceptors?.beforeUpdatePassword),\n authController.updatePassword,\n ...processMiddleware(interceptors?.afterUpdatePassword),\n sendResponse,\n ...processMiddleware(interceptors?.onUpdatePasswordError, {\n type: \"error\",\n })\n );\n }\n\n // GET /auth-actions - Find many auth actions\n if (!isEndpointDisabled(routerConfig, \"findManyAuthAction\")) {\n router.get(\n createRouteConfig(\n arkosConfig,\n \"findManyAuthAction\",\n \"auth-actions\",\n \"\",\n routerConfig,\n \"auth\",\n authConfigs\n ),\n ...processMiddleware(interceptors?.beforeFindManyAuthAction),\n authController.findManyAuthAction,\n ...processMiddleware(interceptors?.afterFindManyAuthAction),\n sendResponse,\n ...processMiddleware(interceptors?.onFindManyAuthActionError, {\n type: \"error\",\n })\n );\n }\n\n // GET /auth-actions/:resourceName - Find one auth action\n if (!isEndpointDisabled(routerConfig, \"findOneAuthAction\")) {\n router.get(\n createRouteConfig(\n arkosConfig,\n \"findOneAuthAction\",\n \"auth-actions\",\n \"/:resourceName\",\n routerConfig,\n \"auth\",\n authConfigs\n ),\n ...processMiddleware(interceptors?.beforeFindOneAuthAction),\n authController.findOneAuthAction,\n ...processMiddleware(interceptors?.afterFindOneAuthAction),\n sendResponse,\n ...processMiddleware(interceptors?.onFindOneAuthActionError, {\n type: \"error\",\n })\n );\n }\n\n debuggerService.logModuleFinalRouter(\"auth\", router as any);\n return router;\n}\n"]}
@@ -195,6 +195,7 @@ function validateRequestInputs(routeConfig) {
195
195
  throw Error(`No { validation: { ${key}: ${validatorNameType} } } was found, while using strict validation you will need to pass undefined into ${key} in order to deny any request ${key} input.`);
196
196
  if (key in validators &&
197
197
  validators?.[key] !== undefined &&
198
+ validators?.[key] !== false &&
198
199
  !isValidValidator(validators[key]))
199
200
  throw Error(`Your validation resolver is set to ${arkosConfig.validation.resolver}, please provide a valid ${validatorName} in order to use in { validation: { ${key}: ${validatorNameType} } } under route ${routeConfig.path}`);
200
201
  });
@@ -1 +1 @@
1
- {"version":3,"file":"base.middlewares.js","sourceRoot":"","sources":["../../../../src/modules/base/base.middlewares.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\nimport {\n PrismaQueryOptions,\n ArkosNextFunction,\n ArkosRequest,\n ArkosRequestHandler,\n ArkosResponse,\n AuthPrismaQueryOptions,\n} from \"../../types\";\nimport { getArkosConfig } from \"../../server\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport { AppError, catchAsync } from \"../../exports/error-handler\";\nimport validateDto from \"../../utils/validate-dto\";\nimport validateSchema from \"../../utils/validate-schema\";\nimport { ZodSchema } from \"zod\";\nimport { ClassConstructor } from \"class-transformer\";\nimport { ValidatorOptions } from \"class-validator\";\nimport { resolvePrismaQueryOptions } from \"./utils/helpers/base.middlewares.helpers\";\nimport { ArkosRouteConfig } from \"../../utils/arkos-router/types\";\nimport { capitalize } from \"../../utils/helpers/text.helpers\";\nimport { isClass, isZodSchema } from \"../../utils/dynamic-loader\";\n\nexport function callNext(_: Request, _1: Response, next: NextFunction) {\n next();\n}\n\n/**\n * Deep comparison helper for objects\n */\nfunction deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (typeof a !== \"object\" || typeof b !== \"object\") return a === b;\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n}\n\n/**\n * Sends response with backward compatibility support\n * Compares current values against original values to detect middleware changes\n * If values were modified by subsequent middleware, use the modified version\n */\nexport function sendResponse(req: ArkosRequest, res: ArkosResponse) {\n let responseData;\n let responseStatus;\n\n const originalData = (res as any).originalData;\n const originalStatus = (res as any).originalStatus;\n\n const currentReqData = req.responseData;\n const currentReqStatus = req.responseStatus;\n const currentLocalsData = res.locals?.data;\n const currentLocalsStatus = res.locals?.status;\n\n if (\n currentReqData !== undefined &&\n !deepEqual(currentReqData, originalData)\n ) {\n responseData = currentReqData;\n } else if (\n currentLocalsData !== undefined &&\n !deepEqual(currentLocalsData, originalData)\n ) {\n responseData = currentLocalsData;\n } else if (originalData !== undefined) {\n responseData = originalData;\n } else {\n responseData = currentReqData ?? currentLocalsData;\n }\n\n if (currentReqStatus !== undefined && currentReqStatus !== originalStatus) {\n responseStatus = currentReqStatus;\n } else if (\n currentLocalsStatus !== undefined &&\n currentLocalsStatus !== originalStatus\n ) {\n responseStatus = currentLocalsStatus;\n } else if (originalStatus !== undefined) {\n responseStatus = originalStatus;\n } else {\n responseStatus = currentReqStatus ?? currentLocalsStatus;\n }\n\n // Send response\n\n if (Number(responseStatus) === 204) {\n res.status(Number(responseStatus)).send();\n } else if (\n (responseData !== undefined || responseData !== null) &&\n responseStatus\n ) {\n res.status(Number(responseStatus)).json(responseData);\n } else if (\n Number(responseStatus) &&\n (responseData === undefined || responseData === null)\n ) {\n res.status(Number(responseStatus)).send();\n } else {\n res.status(500).json({\n message: \"No status or data attached to the response\",\n });\n }\n}\n\n/**\n * Type representing all possible actions that can be performed on a controller\n * Combines both standard CRUD operations and auth-specific operations\n */\nexport type ControllerActions =\n | keyof PrismaQueryOptions<any>\n | keyof Omit<AuthPrismaQueryOptions<any>, keyof PrismaQueryOptions<any>>;\n\n/**\n * Middleware to add Prisma query options to the request's query parameters.\n *\n * @template T - The type of the Prisma model.\n * @param {PrismaQueryOptions<T> | AuthPrismaQueryOptions<T>} prismaQueryOptions - The Prisma query options to attach.\n * @param {ControllerActions} action - The controller action to apply.\n * @returns A middleware function that attaches the query options to the request.\n */\nexport function addPrismaQueryOptionsToRequest<T extends Record<string, any>>(\n prismaQueryOptions: PrismaQueryOptions<T> | AuthPrismaQueryOptions<T>,\n action: ControllerActions\n) {\n return (req: ArkosRequest, _: ArkosResponse, next: NextFunction) => {\n const configs = getArkosConfig();\n\n const resolvedOptions = resolvePrismaQueryOptions(\n prismaQueryOptions,\n action\n );\n\n const requestQueryOptions = configs?.request?.parameters\n ?.allowDangerousPrismaQueryOptions\n ? JSON.parse((req.query?.prismaQueryOptions as string) || \"{}\")\n : {};\n\n req.prismaQueryOptions = deepmerge(resolvedOptions, requestQueryOptions);\n\n next();\n };\n}\n\n/**\n * Logs request events with colored text such as errors, requests responses.\n *\n */\nexport function handleRequestLogs(\n req: Request,\n res: Response,\n next: NextFunction\n) {\n const startTime = Date.now();\n\n const methodColors = {\n GET: \"\\x1b[36m\", // Cyan\n POST: \"\\x1b[32m\", // Green\n PUT: \"\\x1b[33m\", // Orange/Yellow\n PATCH: \"\\x1b[33m\", // Orange/Yellow\n DELETE: \"\\x1b[31m\", // Red\n HEAD: \"\\x1b[34m\", // Blue\n OPTIONS: \"\\x1b[34m\", // Blue\n };\n\n const getStatusColor = (statusCode: number) => {\n if (statusCode >= 200 && statusCode < 300) return \"\\x1b[32m\";\n if (statusCode >= 300 && statusCode < 400) return \"\\x1b[33m\";\n if (statusCode >= 400 && statusCode < 500) return \"\\x1b[33m\";\n if (statusCode >= 500) return \"\\x1b[31m\";\n return \"\\x1b[0m\";\n };\n\n res.on(\"finish\", () => {\n const duration = Date.now() - startTime;\n\n const now = new Date();\n const time = now.toTimeString().split(\" \")[0];\n\n const methodColor =\n methodColors[req.method as keyof typeof methodColors] || \"\\x1b[0m\";\n const statusColor = getStatusColor(res.statusCode);\n\n console.info(\n `[\\x1b[36mInfo\\x1b[0m] \\x1b[90m${time}\\x1b[0m ${methodColor}${\n req.method\n }\\x1b[0m ${decodeURIComponent(req.originalUrl)} ${statusColor}${\n res.statusCode\n }\\x1b[0m \\x1b[35m${duration}ms\\x1b[0m`\n );\n });\n\n next();\n}\n\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ClassConstructor<T>,\n classValidatorValidationOptions?: ValidatorOptions\n): ArkosRequestHandler;\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ZodSchema<T>\n): ArkosRequestHandler;\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ZodSchema<T> | ClassConstructor<T>,\n classValidatorValidationOptions?: ValidatorOptions\n) {\n return catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n const validationConfigs = getArkosConfig()?.validation;\n let body = req.body;\n\n if (validationConfigs?.resolver === \"class-validator\" && schemaOrDtoClass)\n req.body = await validateDto(\n schemaOrDtoClass as ClassConstructor<T>,\n body,\n deepmerge(\n {\n whitelist: true,\n ...classValidatorValidationOptions,\n },\n validationConfigs?.validationOptions || {}\n )\n );\n else if (validationConfigs?.resolver === \"zod\" && schemaOrDtoClass)\n req.body = await validateSchema(schemaOrDtoClass as ZodSchema<T>, body);\n\n next();\n }\n );\n}\n\nexport function validateRequestInputs(routeConfig: ArkosRouteConfig) {\n const arkosConfig = getArkosConfig();\n const validationConfig = arkosConfig.validation;\n const strictValidation = validationConfig?.strict;\n const validators = routeConfig?.validation;\n const openapi = routeConfig?.experimental?.openapi;\n\n const validationToParameterMapping = {\n query: \"query\",\n params: \"path\",\n headers: \"header\",\n cookies: \"cookie\",\n };\n\n if (!validationConfig?.resolver && validators)\n throw Error(\n \"Trying to pass validators into route config validation option without choosing a validation resolver under arkos config { validation: {} }.\"\n );\n\n if ((validators as any) === true)\n throw Error(\n `Invalid value ${validators} passed to validation option, it can only receive false or object of { query, body, params }.`\n );\n\n const validatorFn: (validator: any, data: any, options: any) => Promise<any> =\n validationConfig?.resolver == \"zod\" ? validateSchema : validateDto;\n const validatorsKey: (\"body\" | \"query\" | \"params\")[] = [\n \"body\",\n \"query\",\n \"params\",\n ];\n\n const isValidValidator =\n validationConfig?.resolver == \"zod\" ? isZodSchema : isClass;\n const validatorName =\n validationConfig?.resolver == \"zod\" ? \"zod schema\" : \"class-validator dto\";\n const validatorNameType =\n validationConfig?.resolver == \"zod\" ? \"Schema\" : \"Dto\";\n\n if (typeof validators === \"object\")\n validatorsKey.forEach((key) => {\n if (\n openapi &&\n typeof openapi === \"object\" &&\n key != \"body\" &&\n openapi.parameters?.some(\n (parameter: any) => parameter.in === validationToParameterMapping[key]\n ) &&\n validators[key]\n ) {\n throw Error(\n `When usign validation.${key} you must not define parameters under openapi.parameters as documentation of req.${key} because the ${validatorName} you passed under validation.${key} will be added as jsonSchema into the api documenation, if you wish to define documenation by yourself do not define validation.${key}.`\n );\n }\n\n if (\n openapi &&\n typeof openapi === \"object\" &&\n openapi.requestBody &&\n validators[key] &&\n key === \"body\"\n ) {\n throw Error(\n `When usign validation.${key} you must not define json-schema under openapi.requestBody as documentation for req.${key}, because the ${validatorName} you passed under validation.${key} will be added as json-schema into the api documenation, if you wish to define documenation by yourself do not define validation.${key}.`\n );\n }\n\n if (strictValidation && !(key in validators))\n throw Error(\n `No { validation: { ${key}: ${validatorNameType} } } was found, while using strict validation you will need to pass undefined into ${key} in order to deny any request ${key} input.`\n );\n\n if (\n key in validators &&\n validators?.[key] !== undefined &&\n !isValidValidator(validators[key])\n )\n throw Error(\n `Your validation resolver is set to ${arkosConfig.validation!.resolver}, please provide a valid ${validatorName} in order to use in { validation: { ${key}: ${validatorNameType} } } under route ${routeConfig.path}`\n );\n });\n\n return catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n for (const key of validatorsKey) {\n if (typeof validators === \"boolean\" && validators === false)\n throw new AppError(\n `No request ${key} is allowed on this route`,\n 400,\n `NoRequest${capitalize(key)}Allowed`,\n { [key]: req[key] }\n );\n\n const validator = validators?.[key];\n\n if (strictValidation && !validator && Object.keys(req[key]).length > 0)\n throw new AppError(\n `No request ${key} is allowed on this route`,\n 400,\n `NoRequest${capitalize(key)}Allowed`,\n { [key]: req[key] }\n );\n\n if (validator)\n req[key] = await validatorFn(\n validator,\n req[key],\n arkosConfig.validation?.validationOptions\n );\n }\n\n next();\n }\n );\n}\n"]}
1
+ {"version":3,"file":"base.middlewares.js","sourceRoot":"","sources":["../../../../src/modules/base/base.middlewares.ts"],"names":[],"mappings":"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","sourcesContent":["import { NextFunction, Request, Response } from \"express\";\nimport {\n PrismaQueryOptions,\n ArkosNextFunction,\n ArkosRequest,\n ArkosRequestHandler,\n ArkosResponse,\n AuthPrismaQueryOptions,\n} from \"../../types\";\nimport { getArkosConfig } from \"../../server\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\nimport { AppError, catchAsync } from \"../../exports/error-handler\";\nimport validateDto from \"../../utils/validate-dto\";\nimport validateSchema from \"../../utils/validate-schema\";\nimport { ZodSchema } from \"zod\";\nimport { ClassConstructor } from \"class-transformer\";\nimport { ValidatorOptions } from \"class-validator\";\nimport { resolvePrismaQueryOptions } from \"./utils/helpers/base.middlewares.helpers\";\nimport { ArkosRouteConfig } from \"../../utils/arkos-router/types\";\nimport { capitalize } from \"../../utils/helpers/text.helpers\";\nimport { isClass, isZodSchema } from \"../../utils/dynamic-loader\";\n\nexport function callNext(_: Request, _1: Response, next: NextFunction) {\n next();\n}\n\n/**\n * Deep comparison helper for objects\n */\nfunction deepEqual(a: any, b: any): boolean {\n if (a === b) return true;\n if (a == null || b == null) return false;\n if (typeof a !== \"object\" || typeof b !== \"object\") return a === b;\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n}\n\n/**\n * Sends response with backward compatibility support\n * Compares current values against original values to detect middleware changes\n * If values were modified by subsequent middleware, use the modified version\n */\nexport function sendResponse(req: ArkosRequest, res: ArkosResponse) {\n let responseData;\n let responseStatus;\n\n const originalData = (res as any).originalData;\n const originalStatus = (res as any).originalStatus;\n\n const currentReqData = req.responseData;\n const currentReqStatus = req.responseStatus;\n const currentLocalsData = res.locals?.data;\n const currentLocalsStatus = res.locals?.status;\n\n if (\n currentReqData !== undefined &&\n !deepEqual(currentReqData, originalData)\n ) {\n responseData = currentReqData;\n } else if (\n currentLocalsData !== undefined &&\n !deepEqual(currentLocalsData, originalData)\n ) {\n responseData = currentLocalsData;\n } else if (originalData !== undefined) {\n responseData = originalData;\n } else {\n responseData = currentReqData ?? currentLocalsData;\n }\n\n if (currentReqStatus !== undefined && currentReqStatus !== originalStatus) {\n responseStatus = currentReqStatus;\n } else if (\n currentLocalsStatus !== undefined &&\n currentLocalsStatus !== originalStatus\n ) {\n responseStatus = currentLocalsStatus;\n } else if (originalStatus !== undefined) {\n responseStatus = originalStatus;\n } else {\n responseStatus = currentReqStatus ?? currentLocalsStatus;\n }\n\n // Send response\n\n if (Number(responseStatus) === 204) {\n res.status(Number(responseStatus)).send();\n } else if (\n (responseData !== undefined || responseData !== null) &&\n responseStatus\n ) {\n res.status(Number(responseStatus)).json(responseData);\n } else if (\n Number(responseStatus) &&\n (responseData === undefined || responseData === null)\n ) {\n res.status(Number(responseStatus)).send();\n } else {\n res.status(500).json({\n message: \"No status or data attached to the response\",\n });\n }\n}\n\n/**\n * Type representing all possible actions that can be performed on a controller\n * Combines both standard CRUD operations and auth-specific operations\n */\nexport type ControllerActions =\n | keyof PrismaQueryOptions<any>\n | keyof Omit<AuthPrismaQueryOptions<any>, keyof PrismaQueryOptions<any>>;\n\n/**\n * Middleware to add Prisma query options to the request's query parameters.\n *\n * @template T - The type of the Prisma model.\n * @param {PrismaQueryOptions<T> | AuthPrismaQueryOptions<T>} prismaQueryOptions - The Prisma query options to attach.\n * @param {ControllerActions} action - The controller action to apply.\n * @returns A middleware function that attaches the query options to the request.\n */\nexport function addPrismaQueryOptionsToRequest<T extends Record<string, any>>(\n prismaQueryOptions: PrismaQueryOptions<T> | AuthPrismaQueryOptions<T>,\n action: ControllerActions\n) {\n return (req: ArkosRequest, _: ArkosResponse, next: NextFunction) => {\n const configs = getArkosConfig();\n\n const resolvedOptions = resolvePrismaQueryOptions(\n prismaQueryOptions,\n action\n );\n\n const requestQueryOptions = configs?.request?.parameters\n ?.allowDangerousPrismaQueryOptions\n ? JSON.parse((req.query?.prismaQueryOptions as string) || \"{}\")\n : {};\n\n req.prismaQueryOptions = deepmerge(resolvedOptions, requestQueryOptions);\n\n next();\n };\n}\n\n/**\n * Logs request events with colored text such as errors, requests responses.\n *\n */\nexport function handleRequestLogs(\n req: Request,\n res: Response,\n next: NextFunction\n) {\n const startTime = Date.now();\n\n const methodColors = {\n GET: \"\\x1b[36m\", // Cyan\n POST: \"\\x1b[32m\", // Green\n PUT: \"\\x1b[33m\", // Orange/Yellow\n PATCH: \"\\x1b[33m\", // Orange/Yellow\n DELETE: \"\\x1b[31m\", // Red\n HEAD: \"\\x1b[34m\", // Blue\n OPTIONS: \"\\x1b[34m\", // Blue\n };\n\n const getStatusColor = (statusCode: number) => {\n if (statusCode >= 200 && statusCode < 300) return \"\\x1b[32m\";\n if (statusCode >= 300 && statusCode < 400) return \"\\x1b[33m\";\n if (statusCode >= 400 && statusCode < 500) return \"\\x1b[33m\";\n if (statusCode >= 500) return \"\\x1b[31m\";\n return \"\\x1b[0m\";\n };\n\n res.on(\"finish\", () => {\n const duration = Date.now() - startTime;\n\n const now = new Date();\n const time = now.toTimeString().split(\" \")[0];\n\n const methodColor =\n methodColors[req.method as keyof typeof methodColors] || \"\\x1b[0m\";\n const statusColor = getStatusColor(res.statusCode);\n\n console.info(\n `[\\x1b[36mInfo\\x1b[0m] \\x1b[90m${time}\\x1b[0m ${methodColor}${\n req.method\n }\\x1b[0m ${decodeURIComponent(req.originalUrl)} ${statusColor}${\n res.statusCode\n }\\x1b[0m \\x1b[35m${duration}ms\\x1b[0m`\n );\n });\n\n next();\n}\n\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ClassConstructor<T>,\n classValidatorValidationOptions?: ValidatorOptions\n): ArkosRequestHandler;\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ZodSchema<T>\n): ArkosRequestHandler;\nexport function handleRequestBodyValidationAndTransformation<T extends object>(\n schemaOrDtoClass?: ZodSchema<T> | ClassConstructor<T>,\n classValidatorValidationOptions?: ValidatorOptions\n) {\n return catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n const validationConfigs = getArkosConfig()?.validation;\n let body = req.body;\n\n if (validationConfigs?.resolver === \"class-validator\" && schemaOrDtoClass)\n req.body = await validateDto(\n schemaOrDtoClass as ClassConstructor<T>,\n body,\n deepmerge(\n {\n whitelist: true,\n ...classValidatorValidationOptions,\n },\n validationConfigs?.validationOptions || {}\n )\n );\n else if (validationConfigs?.resolver === \"zod\" && schemaOrDtoClass)\n req.body = await validateSchema(schemaOrDtoClass as ZodSchema<T>, body);\n\n next();\n }\n );\n}\n\nexport function validateRequestInputs(routeConfig: ArkosRouteConfig) {\n const arkosConfig = getArkosConfig();\n const validationConfig = arkosConfig.validation;\n const strictValidation = validationConfig?.strict;\n const validators = routeConfig?.validation;\n const openapi = routeConfig?.experimental?.openapi;\n\n const validationToParameterMapping = {\n query: \"query\",\n params: \"path\",\n headers: \"header\",\n cookies: \"cookie\",\n };\n\n if (!validationConfig?.resolver && validators)\n throw Error(\n \"Trying to pass validators into route config validation option without choosing a validation resolver under arkos config { validation: {} }.\"\n );\n\n if ((validators as any) === true)\n throw Error(\n `Invalid value ${validators} passed to validation option, it can only receive false or object of { query, body, params }.`\n );\n\n const validatorFn: (validator: any, data: any, options: any) => Promise<any> =\n validationConfig?.resolver == \"zod\" ? validateSchema : validateDto;\n const validatorsKey: (\"body\" | \"query\" | \"params\")[] = [\n \"body\",\n \"query\",\n \"params\",\n ];\n\n const isValidValidator =\n validationConfig?.resolver == \"zod\" ? isZodSchema : isClass;\n const validatorName =\n validationConfig?.resolver == \"zod\" ? \"zod schema\" : \"class-validator dto\";\n const validatorNameType =\n validationConfig?.resolver == \"zod\" ? \"Schema\" : \"Dto\";\n\n if (typeof validators === \"object\")\n validatorsKey.forEach((key) => {\n if (\n openapi &&\n typeof openapi === \"object\" &&\n key != \"body\" &&\n openapi.parameters?.some(\n (parameter: any) => parameter.in === validationToParameterMapping[key]\n ) &&\n validators[key]\n ) {\n throw Error(\n `When usign validation.${key} you must not define parameters under openapi.parameters as documentation of req.${key} because the ${validatorName} you passed under validation.${key} will be added as jsonSchema into the api documenation, if you wish to define documenation by yourself do not define validation.${key}.`\n );\n }\n\n if (\n openapi &&\n typeof openapi === \"object\" &&\n openapi.requestBody &&\n validators[key] &&\n key === \"body\"\n ) {\n throw Error(\n `When usign validation.${key} you must not define json-schema under openapi.requestBody as documentation for req.${key}, because the ${validatorName} you passed under validation.${key} will be added as json-schema into the api documenation, if you wish to define documenation by yourself do not define validation.${key}.`\n );\n }\n\n if (strictValidation && !(key in validators))\n throw Error(\n `No { validation: { ${key}: ${validatorNameType} } } was found, while using strict validation you will need to pass undefined into ${key} in order to deny any request ${key} input.`\n );\n\n if (\n key in validators &&\n validators?.[key] !== undefined &&\n validators?.[key] !== false &&\n !isValidValidator(validators[key])\n )\n throw Error(\n `Your validation resolver is set to ${arkosConfig.validation!.resolver}, please provide a valid ${validatorName} in order to use in { validation: { ${key}: ${validatorNameType} } } under route ${routeConfig.path}`\n );\n });\n\n return catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n for (const key of validatorsKey) {\n if (typeof validators === \"boolean\" && validators === false)\n throw new AppError(\n `No request ${key} is allowed on this route`,\n 400,\n `NoRequest${capitalize(key)}Allowed`,\n { [key]: req[key] }\n );\n\n const validator = validators?.[key];\n\n if (strictValidation && !validator && Object.keys(req[key]).length > 0)\n throw new AppError(\n `No request ${key} is allowed on this route`,\n 400,\n `NoRequest${capitalize(key)}Allowed`,\n { [key]: req[key] }\n );\n\n if (validator)\n req[key] = await validatorFn(\n validator,\n req[key],\n arkosConfig.validation?.validationOptions\n );\n }\n\n next();\n }\n );\n}\n"]}
@@ -16,7 +16,7 @@ const router_validator_1 = __importDefault(require("../router-validator"));
16
16
  const fs_helpers_1 = require("../../../../utils/helpers/fs.helpers");
17
17
  const prisma_schema_parser_1 = __importDefault(require("../../../../utils/prisma/prisma-schema-parser"));
18
18
  const debugger_service_1 = __importDefault(require("../../../debugger/debugger.service"));
19
- function setupRouters(router, arkosConfigs) {
19
+ function setupRouters(router, arkosConfig) {
20
20
  return prisma_schema_parser_1.default.getModelsAsArrayOfStrings().map(async (model) => {
21
21
  const modelNameInKebab = (0, utils_1.kebabCase)(model);
22
22
  const modelModules = (0, dynamic_loader_1.getModuleComponents)(modelNameInKebab) || {};
@@ -33,7 +33,7 @@ function setupRouters(router, arkosConfigs) {
33
33
  layer.method.toLowerCase() === method.toLowerCase());
34
34
  };
35
35
  const getValidationSchemaOrDto = (key) => {
36
- const validationConfigs = arkosConfigs?.validation;
36
+ const validationConfigs = arkosConfig?.validation;
37
37
  if (validationConfigs?.resolver === "class-validator") {
38
38
  return dtos?.[key];
39
39
  }
@@ -49,28 +49,28 @@ function setupRouters(router, arkosConfigs) {
49
49
  throw Error(`ValidationError: The exported router from ${modelNameInKebab}.router.${(0, fs_helpers_1.getUserFileExtension)()} is not a valid express Router.`);
50
50
  }
51
51
  if (!hasCustomImplementation(`/${routeName}`, "post")) {
52
- router.post((0, routers_helpers_1.createRouteConfig)("createOne", routeName, "", routerConfig, modelNameInKebab, authConfigs, getValidationSchemaOrDto("create")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "createOne"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeCreateOne), controller.createOne, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterCreateOne), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onCreateOneError, { type: "error" }));
52
+ router.post((0, routers_helpers_1.createRouteConfig)(arkosConfig, "createOne", routeName, "", routerConfig, modelNameInKebab, authConfigs, getValidationSchemaOrDto("create")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "createOne"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeCreateOne), controller.createOne, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterCreateOne), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onCreateOneError, { type: "error" }));
53
53
  }
54
54
  if (!hasCustomImplementation(`/${routeName}`, "get")) {
55
- router.get((0, routers_helpers_1.createRouteConfig)("findMany", routeName, "", routerConfig, modelNameInKebab, authConfigs), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "findMany"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeFindMany), controller.findMany, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterFindMany), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onFindManyError, { type: "error" }));
55
+ router.get((0, routers_helpers_1.createRouteConfig)(arkosConfig, "findMany", routeName, "", routerConfig, modelNameInKebab, authConfigs), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "findMany"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeFindMany), controller.findMany, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterFindMany), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onFindManyError, { type: "error" }));
56
56
  }
57
57
  if (!hasCustomImplementation(`/${routeName}/many`, "post")) {
58
- router.post((0, routers_helpers_1.createRouteConfig)("createMany", routeName, "/many", routerConfig, modelNameInKebab, authConfigs, getValidationSchemaOrDto("createMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "createMany"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeCreateMany), controller.createMany, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterCreateMany), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onCreateManyError, { type: "error" }));
58
+ router.post((0, routers_helpers_1.createRouteConfig)(arkosConfig, "createMany", routeName, "/many", routerConfig, modelNameInKebab, authConfigs, getValidationSchemaOrDto("createMany")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "createMany"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeCreateMany), controller.createMany, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterCreateMany), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onCreateManyError, { type: "error" }));
59
59
  }
60
60
  if (!hasCustomImplementation(`/${routeName}/many`, "patch")) {
61
- router.patch((0, routers_helpers_1.createRouteConfig)("updateMany", routeName, "/many", routerConfig, modelNameInKebab, authConfigs), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateMany"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeUpdateMany), controller.updateMany, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterUpdateMany), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onUpdateManyError, { type: "error" }));
61
+ router.patch((0, routers_helpers_1.createRouteConfig)(arkosConfig, "updateMany", routeName, "/many", routerConfig, modelNameInKebab, authConfigs), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateMany"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeUpdateMany), controller.updateMany, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterUpdateMany), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onUpdateManyError, { type: "error" }));
62
62
  }
63
63
  if (!hasCustomImplementation(`/${routeName}/many`, "delete")) {
64
- router.delete((0, routers_helpers_1.createRouteConfig)("deleteMany", routeName, "/many", routerConfig, modelNameInKebab, authConfigs), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteMany"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeDeleteMany), controller.deleteMany, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterDeleteMany), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onDeleteManyError, { type: "error" }));
64
+ router.delete((0, routers_helpers_1.createRouteConfig)(arkosConfig, "deleteMany", routeName, "/many", routerConfig, modelNameInKebab, authConfigs), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteMany"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeDeleteMany), controller.deleteMany, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterDeleteMany), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onDeleteManyError, { type: "error" }));
65
65
  }
66
66
  if (!hasCustomImplementation(`/${routeName}/:id`, "get")) {
67
- router.get((0, routers_helpers_1.createRouteConfig)("findOne", routeName, "/:id", routerConfig, modelNameInKebab, authConfigs), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "findOne"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeFindOne), controller.findOne, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterFindOne), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onFindOneError, { type: "error" }));
67
+ router.get((0, routers_helpers_1.createRouteConfig)(arkosConfig, "findOne", routeName, "/:id", routerConfig, modelNameInKebab, authConfigs), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "findOne"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeFindOne), controller.findOne, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterFindOne), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onFindOneError, { type: "error" }));
68
68
  }
69
69
  if (!hasCustomImplementation(`/${routeName}/:id`, "patch")) {
70
- router.patch((0, routers_helpers_1.createRouteConfig)("updateOne", routeName, "/:id", routerConfig, modelNameInKebab, authConfigs, getValidationSchemaOrDto("update")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateOne"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeUpdateOne), controller.updateOne, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterUpdateOne), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onUpdateOneError, { type: "error" }));
70
+ router.patch((0, routers_helpers_1.createRouteConfig)(arkosConfig, "updateOne", routeName, "/:id", routerConfig, modelNameInKebab, authConfigs, getValidationSchemaOrDto("update")), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "updateOne"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeUpdateOne), controller.updateOne, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterUpdateOne), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onUpdateOneError, { type: "error" }));
71
71
  }
72
72
  if (!hasCustomImplementation(`/${routeName}/:id`, "delete")) {
73
- router.delete((0, routers_helpers_1.createRouteConfig)("deleteOne", routeName, "/:id", routerConfig, modelNameInKebab, authConfigs), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteOne"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeDeleteOne), controller.deleteOne, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterDeleteOne), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onDeleteOneError, { type: "error" }));
73
+ router.delete((0, routers_helpers_1.createRouteConfig)(arkosConfig, "deleteOne", routeName, "/:id", routerConfig, modelNameInKebab, authConfigs), (0, base_middlewares_1.addPrismaQueryOptionsToRequest)(prismaQueryOptions, "deleteOne"), ...(0, routers_helpers_1.processMiddleware)(interceptors?.beforeDeleteOne), controller.deleteOne, ...(0, routers_helpers_1.processMiddleware)(interceptors?.afterDeleteOne), base_middlewares_1.sendResponse, ...(0, routers_helpers_1.processMiddleware)(interceptors?.onDeleteOneError, { type: "error" }));
74
74
  }
75
75
  debugger_service_1.default.logModuleFinalRouter(modelNameInKebab, router);
76
76
  });
@@ -1 +1 @@
1
- {"version":3,"file":"base.router.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.router.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport pluralize from \"pluralize\";\nimport { ArkosConfig, RouterConfig } from \"../../../../exports\";\nimport { kebabCase } from \"../../../../exports/utils\";\nimport { PrismaQueryOptions } from \"../../../../types\";\nimport {\n AuthRouterEndpoint,\n FileUploadRouterEndpoint,\n RouterEndpoint,\n} from \"../../../../types/router-config\";\nimport { getModuleComponents } from \"../../../../utils/dynamic-loader\";\nimport { BaseController } from \"../../base.controller\";\nimport {\n addPrismaQueryOptionsToRequest,\n sendResponse,\n} from \"../../base.middlewares\";\nimport {\n createRouteConfig,\n processMiddleware,\n} from \"../../../../utils/helpers/routers.helpers\";\nimport routerValidator from \"../router-validator\";\nimport { getUserFileExtension } from \"../../../../utils/helpers/fs.helpers\";\nimport prismaSchemaParser from \"../../../../utils/prisma/prisma-schema-parser\";\nimport debuggerService from \"../../../debugger/debugger.service\";\nimport { IArkosRouter } from \"../../../../utils/arkos-router/types\";\n\nexport function setupRouters(router: IArkosRouter, arkosConfigs: ArkosConfig) {\n return prismaSchemaParser.getModelsAsArrayOfStrings().map(async (model) => {\n const modelNameInKebab = kebabCase(model);\n const modelModules = getModuleComponents(modelNameInKebab) || {};\n\n const {\n interceptors,\n authConfigs,\n prismaQueryOptions,\n router: customRouterModule,\n dtos,\n schemas,\n } = modelModules;\n\n const routeName = pluralize.plural(modelNameInKebab);\n const controller = new BaseController(model);\n\n const routerConfig: RouterConfig<any> = customRouterModule?.config || {};\n\n const customRouter = customRouterModule?.default as Router;\n const hasCustomImplementation = (path: string, method: string) => {\n return customRouter?.stack?.some(\n (layer) =>\n (layer.path === `/api/${path}` ||\n layer.path === `api/${path}` ||\n layer.path === `api/${path}/` ||\n layer.path === `/api/${path}/`) &&\n layer.method.toLowerCase() === method.toLowerCase()\n );\n };\n\n const getValidationSchemaOrDto = (\n key: \"create\" | \"update\" | \"createMany\" | \"updateMany\"\n ) => {\n const validationConfigs = arkosConfigs?.validation;\n if (validationConfigs?.resolver === \"class-validator\") {\n return (dtos as any)?.[key];\n } else if (validationConfigs?.resolver === \"zod\") {\n return (schemas as any)?.[key];\n }\n return undefined;\n };\n\n if (customRouter && customRouterModule) {\n if (routerValidator.isExpressRouter(customRouter))\n router.use(`/${routeName}`, customRouter);\n else\n throw Error(\n `ValidationError: The exported router from ${modelNameInKebab}.router.${getUserFileExtension()} is not a valid express Router.`\n );\n }\n\n // CREATE ONE\n if (!hasCustomImplementation(`/${routeName}`, \"post\")) {\n router.post(\n createRouteConfig(\n \"createOne\",\n routeName,\n \"\",\n routerConfig,\n modelNameInKebab,\n authConfigs,\n getValidationSchemaOrDto(\"create\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createOne\"\n ),\n ...processMiddleware(interceptors?.beforeCreateOne),\n controller.createOne,\n ...processMiddleware(interceptors?.afterCreateOne),\n sendResponse,\n ...processMiddleware(interceptors?.onCreateOneError, { type: \"error\" })\n );\n }\n\n // FIND MANY\n if (!hasCustomImplementation(`/${routeName}`, \"get\")) {\n router.get(\n createRouteConfig(\n \"findMany\",\n routeName,\n \"\",\n routerConfig,\n modelNameInKebab,\n authConfigs\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findMany\"\n ),\n ...processMiddleware(interceptors?.beforeFindMany),\n controller.findMany,\n ...processMiddleware(interceptors?.afterFindMany),\n sendResponse,\n ...processMiddleware(interceptors?.onFindManyError, { type: \"error\" })\n );\n }\n\n // CREATE MANY\n if (!hasCustomImplementation(`/${routeName}/many`, \"post\")) {\n router.post(\n createRouteConfig(\n \"createMany\",\n routeName,\n \"/many\",\n routerConfig,\n modelNameInKebab,\n authConfigs,\n getValidationSchemaOrDto(\"createMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createMany\"\n ),\n ...processMiddleware(interceptors?.beforeCreateMany),\n controller.createMany,\n ...processMiddleware(interceptors?.afterCreateMany),\n sendResponse,\n ...processMiddleware(interceptors?.onCreateManyError, { type: \"error\" })\n );\n }\n\n // UPDATE MANY\n if (!hasCustomImplementation(`/${routeName}/many`, \"patch\")) {\n router.patch(\n createRouteConfig(\n \"updateMany\",\n routeName,\n \"/many\",\n routerConfig,\n modelNameInKebab,\n authConfigs\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateMany\"\n ),\n ...processMiddleware(interceptors?.beforeUpdateMany),\n controller.updateMany,\n ...processMiddleware(interceptors?.afterUpdateMany),\n sendResponse,\n ...processMiddleware(interceptors?.onUpdateManyError, { type: \"error\" })\n );\n }\n\n // DELETE MANY\n if (!hasCustomImplementation(`/${routeName}/many`, \"delete\")) {\n router.delete(\n createRouteConfig(\n \"deleteMany\",\n routeName,\n \"/many\",\n routerConfig,\n modelNameInKebab,\n authConfigs\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteMany\"\n ),\n ...processMiddleware(interceptors?.beforeDeleteMany),\n controller.deleteMany,\n ...processMiddleware(interceptors?.afterDeleteMany),\n sendResponse,\n ...processMiddleware(interceptors?.onDeleteManyError, { type: \"error\" })\n );\n }\n\n // FIND ONE\n if (!hasCustomImplementation(`/${routeName}/:id`, \"get\")) {\n router.get(\n createRouteConfig(\n \"findOne\",\n routeName,\n \"/:id\",\n routerConfig,\n modelNameInKebab,\n authConfigs\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findOne\"\n ),\n ...processMiddleware(interceptors?.beforeFindOne),\n controller.findOne,\n ...processMiddleware(interceptors?.afterFindOne),\n sendResponse,\n ...processMiddleware(interceptors?.onFindOneError, { type: \"error\" })\n );\n }\n\n // UPDATE ONE\n if (!hasCustomImplementation(`/${routeName}/:id`, \"patch\")) {\n router.patch(\n createRouteConfig(\n \"updateOne\",\n routeName,\n \"/:id\",\n routerConfig,\n modelNameInKebab,\n authConfigs,\n getValidationSchemaOrDto(\"update\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateOne\"\n ),\n ...processMiddleware(interceptors?.beforeUpdateOne),\n controller.updateOne,\n ...processMiddleware(interceptors?.afterUpdateOne),\n sendResponse,\n ...processMiddleware(interceptors?.onUpdateOneError, { type: \"error\" })\n );\n }\n\n // DELETE ONE\n if (!hasCustomImplementation(`/${routeName}/:id`, \"delete\")) {\n router.delete(\n createRouteConfig(\n \"deleteOne\",\n routeName,\n \"/:id\",\n routerConfig,\n modelNameInKebab,\n authConfigs\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteOne\"\n ),\n ...processMiddleware(interceptors?.beforeDeleteOne),\n controller.deleteOne,\n ...processMiddleware(interceptors?.afterDeleteOne),\n sendResponse,\n ...processMiddleware(interceptors?.onDeleteOneError, { type: \"error\" })\n );\n }\n\n debuggerService.logModuleFinalRouter(modelNameInKebab, router as any);\n });\n}\n\nexport function isEndpointDisabled(\n routerConfig: RouterConfig<any>,\n endpoint: RouterEndpoint | AuthRouterEndpoint | FileUploadRouterEndpoint\n): boolean {\n if (!routerConfig?.disable) return false;\n\n if (routerConfig.disable === true) return true;\n\n if (typeof routerConfig.disable === \"object\")\n return routerConfig.disable[endpoint as never] === true;\n\n return false;\n}\n\nexport function isParentEndpointAllowed(\n routerConfig: any,\n endpoint: string\n): boolean {\n if (!routerConfig?.parent) return false;\n\n const parentEndpoints = routerConfig.parent.endpoints;\n if (parentEndpoints === \"*\") return true;\n if (Array.isArray(parentEndpoints)) return parentEndpoints.includes(endpoint);\n\n return true;\n}\n"]}
1
+ {"version":3,"file":"base.router.helpers.js","sourceRoot":"","sources":["../../../../../../src/modules/base/utils/helpers/base.router.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { Router } from \"express\";\nimport pluralize from \"pluralize\";\nimport { ArkosConfig, RouterConfig } from \"../../../../exports\";\nimport { kebabCase } from \"../../../../exports/utils\";\nimport { PrismaQueryOptions } from \"../../../../types\";\nimport {\n AuthRouterEndpoint,\n FileUploadRouterEndpoint,\n RouterEndpoint,\n} from \"../../../../types/router-config\";\nimport { getModuleComponents } from \"../../../../utils/dynamic-loader\";\nimport { BaseController } from \"../../base.controller\";\nimport {\n addPrismaQueryOptionsToRequest,\n sendResponse,\n} from \"../../base.middlewares\";\nimport {\n createRouteConfig,\n processMiddleware,\n} from \"../../../../utils/helpers/routers.helpers\";\nimport routerValidator from \"../router-validator\";\nimport { getUserFileExtension } from \"../../../../utils/helpers/fs.helpers\";\nimport prismaSchemaParser from \"../../../../utils/prisma/prisma-schema-parser\";\nimport debuggerService from \"../../../debugger/debugger.service\";\nimport { IArkosRouter } from \"../../../../utils/arkos-router/types\";\n\nexport function setupRouters(router: IArkosRouter, arkosConfig: ArkosConfig) {\n return prismaSchemaParser.getModelsAsArrayOfStrings().map(async (model) => {\n const modelNameInKebab = kebabCase(model);\n const modelModules = getModuleComponents(modelNameInKebab) || {};\n\n const {\n interceptors,\n authConfigs,\n prismaQueryOptions,\n router: customRouterModule,\n dtos,\n schemas,\n } = modelModules;\n\n const routeName = pluralize.plural(modelNameInKebab);\n const controller = new BaseController(model);\n\n const routerConfig: RouterConfig<any> = customRouterModule?.config || {};\n\n const customRouter = customRouterModule?.default as Router;\n const hasCustomImplementation = (path: string, method: string) => {\n return customRouter?.stack?.some(\n (layer) =>\n (layer.path === `/api/${path}` ||\n layer.path === `api/${path}` ||\n layer.path === `api/${path}/` ||\n layer.path === `/api/${path}/`) &&\n layer.method.toLowerCase() === method.toLowerCase()\n );\n };\n\n const getValidationSchemaOrDto = (\n key: \"create\" | \"update\" | \"createMany\" | \"updateMany\"\n ) => {\n const validationConfigs = arkosConfig?.validation;\n if (validationConfigs?.resolver === \"class-validator\") {\n return (dtos as any)?.[key];\n } else if (validationConfigs?.resolver === \"zod\") {\n return (schemas as any)?.[key];\n }\n return undefined;\n };\n\n if (customRouter && customRouterModule) {\n if (routerValidator.isExpressRouter(customRouter))\n router.use(`/${routeName}`, customRouter);\n else\n throw Error(\n `ValidationError: The exported router from ${modelNameInKebab}.router.${getUserFileExtension()} is not a valid express Router.`\n );\n }\n\n // CREATE ONE\n if (!hasCustomImplementation(`/${routeName}`, \"post\")) {\n router.post(\n createRouteConfig(\n arkosConfig,\n \"createOne\",\n routeName,\n \"\",\n routerConfig,\n modelNameInKebab,\n authConfigs,\n getValidationSchemaOrDto(\"create\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createOne\"\n ),\n ...processMiddleware(interceptors?.beforeCreateOne),\n controller.createOne,\n ...processMiddleware(interceptors?.afterCreateOne),\n sendResponse,\n ...processMiddleware(interceptors?.onCreateOneError, { type: \"error\" })\n );\n }\n\n // FIND MANY\n if (!hasCustomImplementation(`/${routeName}`, \"get\")) {\n router.get(\n createRouteConfig(\n arkosConfig,\n \"findMany\",\n routeName,\n \"\",\n routerConfig,\n modelNameInKebab,\n authConfigs\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findMany\"\n ),\n ...processMiddleware(interceptors?.beforeFindMany),\n controller.findMany,\n ...processMiddleware(interceptors?.afterFindMany),\n sendResponse,\n ...processMiddleware(interceptors?.onFindManyError, { type: \"error\" })\n );\n }\n\n // CREATE MANY\n if (!hasCustomImplementation(`/${routeName}/many`, \"post\")) {\n router.post(\n createRouteConfig(\n arkosConfig,\n \"createMany\",\n routeName,\n \"/many\",\n routerConfig,\n modelNameInKebab,\n authConfigs,\n getValidationSchemaOrDto(\"createMany\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"createMany\"\n ),\n ...processMiddleware(interceptors?.beforeCreateMany),\n controller.createMany,\n ...processMiddleware(interceptors?.afterCreateMany),\n sendResponse,\n ...processMiddleware(interceptors?.onCreateManyError, { type: \"error\" })\n );\n }\n\n // UPDATE MANY\n if (!hasCustomImplementation(`/${routeName}/many`, \"patch\")) {\n router.patch(\n createRouteConfig(\n arkosConfig,\n \"updateMany\",\n routeName,\n \"/many\",\n routerConfig,\n modelNameInKebab,\n authConfigs\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateMany\"\n ),\n ...processMiddleware(interceptors?.beforeUpdateMany),\n controller.updateMany,\n ...processMiddleware(interceptors?.afterUpdateMany),\n sendResponse,\n ...processMiddleware(interceptors?.onUpdateManyError, { type: \"error\" })\n );\n }\n\n // DELETE MANY\n if (!hasCustomImplementation(`/${routeName}/many`, \"delete\")) {\n router.delete(\n createRouteConfig(\n arkosConfig,\n \"deleteMany\",\n routeName,\n \"/many\",\n routerConfig,\n modelNameInKebab,\n authConfigs\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteMany\"\n ),\n ...processMiddleware(interceptors?.beforeDeleteMany),\n controller.deleteMany,\n ...processMiddleware(interceptors?.afterDeleteMany),\n sendResponse,\n ...processMiddleware(interceptors?.onDeleteManyError, { type: \"error\" })\n );\n }\n\n // FIND ONE\n if (!hasCustomImplementation(`/${routeName}/:id`, \"get\")) {\n router.get(\n createRouteConfig(\n arkosConfig,\n \"findOne\",\n routeName,\n \"/:id\",\n routerConfig,\n modelNameInKebab,\n authConfigs\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"findOne\"\n ),\n ...processMiddleware(interceptors?.beforeFindOne),\n controller.findOne,\n ...processMiddleware(interceptors?.afterFindOne),\n sendResponse,\n ...processMiddleware(interceptors?.onFindOneError, { type: \"error\" })\n );\n }\n\n // UPDATE ONE\n if (!hasCustomImplementation(`/${routeName}/:id`, \"patch\")) {\n router.patch(\n createRouteConfig(\n arkosConfig,\n \"updateOne\",\n routeName,\n \"/:id\",\n routerConfig,\n modelNameInKebab,\n authConfigs,\n getValidationSchemaOrDto(\"update\")\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"updateOne\"\n ),\n ...processMiddleware(interceptors?.beforeUpdateOne),\n controller.updateOne,\n ...processMiddleware(interceptors?.afterUpdateOne),\n sendResponse,\n ...processMiddleware(interceptors?.onUpdateOneError, { type: \"error\" })\n );\n }\n\n // DELETE ONE\n if (!hasCustomImplementation(`/${routeName}/:id`, \"delete\")) {\n router.delete(\n createRouteConfig(\n arkosConfig,\n \"deleteOne\",\n routeName,\n \"/:id\",\n routerConfig,\n modelNameInKebab,\n authConfigs\n ),\n addPrismaQueryOptionsToRequest<any>(\n prismaQueryOptions as PrismaQueryOptions<any>,\n \"deleteOne\"\n ),\n ...processMiddleware(interceptors?.beforeDeleteOne),\n controller.deleteOne,\n ...processMiddleware(interceptors?.afterDeleteOne),\n sendResponse,\n ...processMiddleware(interceptors?.onDeleteOneError, { type: \"error\" })\n );\n }\n\n debuggerService.logModuleFinalRouter(modelNameInKebab, router as any);\n });\n}\n\nexport function isEndpointDisabled(\n routerConfig: RouterConfig<any>,\n endpoint: RouterEndpoint | AuthRouterEndpoint | FileUploadRouterEndpoint\n): boolean {\n if (!routerConfig?.disable) return false;\n\n if (routerConfig.disable === true) return true;\n\n if (typeof routerConfig.disable === \"object\")\n return routerConfig.disable[endpoint as never] === true;\n\n return false;\n}\n\nexport function isParentEndpointAllowed(\n routerConfig: any,\n endpoint: string\n): boolean {\n if (!routerConfig?.parent) return false;\n\n const parentEndpoints = routerConfig.parent.endpoints;\n if (parentEndpoints === \"*\") return true;\n if (Array.isArray(parentEndpoints)) return parentEndpoints.includes(endpoint);\n\n return true;\n}\n"]}
@@ -4,12 +4,12 @@ exports.default = classValidatorToJsonSchema;
4
4
  exports.resolveReferences = resolveReferences;
5
5
  exports.extractSchemaName = extractSchemaName;
6
6
  const class_validator_1 = require("class-validator");
7
- const storage_1 = require("class-transformer/cjs/storage");
7
+ const storage_js_1 = require("class-transformer/cjs/storage.js");
8
8
  const class_validator_jsonschema_1 = require("class-validator-jsonschema");
9
9
  function classValidatorToJsonSchema(decoratedClass) {
10
10
  const jsonSchemas = (0, class_validator_jsonschema_1.validationMetadatasToSchemas)({
11
11
  classValidatorMetadataStorage: (0, class_validator_1.getMetadataStorage)(),
12
- classTransformerMetadataStorage: storage_1.defaultMetadataStorage,
12
+ classTransformerMetadataStorage: storage_js_1.defaultMetadataStorage,
13
13
  refPointerPrefix: "#/components/schemas/",
14
14
  });
15
15
  const targetSchema = jsonSchemas[decoratedClass.name];
@@ -1 +1 @@
1
- {"version":3,"file":"class-validator-to-json-schema.js","sourceRoot":"","sources":["../../../../../../src/modules/swagger/utils/helpers/class-validator-to-json-schema.ts"],"names":[],"mappings":";;AAIA,6CAcC;AAED,8CAuCC;AAED,8CAGC;AAhED,qDAAqD;AACrD,2DAAuE;AACvE,2EAA0E;AAE1E,SAAwB,0BAA0B,CAChD,cAA8C;IAE9C,MAAM,WAAW,GAAG,IAAA,yDAA4B,EAAC;QAC/C,6BAA6B,EAAE,IAAA,oCAAkB,GAAE;QACnD,+BAA+B,EAAE,gCAAsB;QACvD,gBAAgB,EAAE,uBAAuB;KAC1C,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAEtD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,iBAAiB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,iBAAiB,CAC/B,MAAW,EACX,UAA+B,EAC/B,UAAU,IAAI,GAAG,EAAU;IAE3B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAEzD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YACtB,OAAO;gBACL,YAAY,EAAE,OAAO;gBACrB,WAAW,EAAE,yBAAyB,OAAO,EAAE;aAChD,CAAC;QAEJ,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1E,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAExB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;YACjC,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;QAClC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC","sourcesContent":["import { getMetadataStorage } from \"class-validator\";\nimport { defaultMetadataStorage } from \"class-transformer/cjs/storage\";\nimport { validationMetadatasToSchemas } from \"class-validator-jsonschema\";\n\nexport default function classValidatorToJsonSchema(\n decoratedClass: new (...args: any[]) => object\n): any {\n const jsonSchemas = validationMetadatasToSchemas({\n classValidatorMetadataStorage: getMetadataStorage(),\n classTransformerMetadataStorage: defaultMetadataStorage,\n refPointerPrefix: \"#/components/schemas/\",\n });\n\n const targetSchema = jsonSchemas[decoratedClass.name];\n\n if (!targetSchema) return null;\n\n return resolveReferences(targetSchema, jsonSchemas);\n}\n\nexport function resolveReferences(\n schema: any,\n allSchemas: Record<string, any>,\n visited = new Set<string>()\n): any {\n if (!schema || typeof schema !== \"object\") return schema;\n\n if (schema.$ref) {\n const refName = extractSchemaName(schema.$ref);\n\n if (visited.has(refName))\n return {\n $resolvedRef: refName,\n description: `Circular reference to ${refName}`,\n };\n\n const referencedSchema = allSchemas[refName];\n if (referencedSchema) {\n visited.add(refName);\n const resolved = resolveReferences(referencedSchema, allSchemas, visited);\n visited.delete(refName);\n\n const { $ref, ...rest } = schema;\n return { ...resolved, ...rest };\n }\n\n return schema;\n }\n\n if (Array.isArray(schema)) {\n return schema.map((item) => resolveReferences(item, allSchemas, visited));\n }\n\n const result: any = {};\n for (const [key, value] of Object.entries(schema)) {\n result[key] = resolveReferences(value, allSchemas, visited);\n }\n\n return result;\n}\n\nexport function extractSchemaName(ref: string): string {\n const parts = ref.split(\"/\");\n return parts[parts.length - 1];\n}\n"]}
1
+ {"version":3,"file":"class-validator-to-json-schema.js","sourceRoot":"","sources":["../../../../../../src/modules/swagger/utils/helpers/class-validator-to-json-schema.ts"],"names":[],"mappings":";;AAIA,6CAcC;AAED,8CAuCC;AAED,8CAGC;AAhED,qDAAqD;AACrD,iEAA0E;AAC1E,2EAA0E;AAE1E,SAAwB,0BAA0B,CAChD,cAA8C;IAE9C,MAAM,WAAW,GAAG,IAAA,yDAA4B,EAAC;QAC/C,6BAA6B,EAAE,IAAA,oCAAkB,GAAE;QACnD,+BAA+B,EAAE,mCAAsB;QACvD,gBAAgB,EAAE,uBAAuB;KAC1C,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAEtD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,iBAAiB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,iBAAiB,CAC/B,MAAW,EACX,UAA+B,EAC/B,UAAU,IAAI,GAAG,EAAU;IAE3B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAEzD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YACtB,OAAO;gBACL,YAAY,EAAE,OAAO;gBACrB,WAAW,EAAE,yBAAyB,OAAO,EAAE;aAChD,CAAC;QAEJ,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1E,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAExB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;YACjC,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;QAClC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,iBAAiB,CAAC,GAAW;IAC3C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACjC,CAAC","sourcesContent":["import { getMetadataStorage } from \"class-validator\";\nimport { defaultMetadataStorage } from \"class-transformer/cjs/storage.js\";\nimport { validationMetadatasToSchemas } from \"class-validator-jsonschema\";\n\nexport default function classValidatorToJsonSchema(\n decoratedClass: new (...args: any[]) => object\n): any {\n const jsonSchemas = validationMetadatasToSchemas({\n classValidatorMetadataStorage: getMetadataStorage(),\n classTransformerMetadataStorage: defaultMetadataStorage,\n refPointerPrefix: \"#/components/schemas/\",\n });\n\n const targetSchema = jsonSchemas[decoratedClass.name];\n\n if (!targetSchema) return null;\n\n return resolveReferences(targetSchema, jsonSchemas);\n}\n\nexport function resolveReferences(\n schema: any,\n allSchemas: Record<string, any>,\n visited = new Set<string>()\n): any {\n if (!schema || typeof schema !== \"object\") return schema;\n\n if (schema.$ref) {\n const refName = extractSchemaName(schema.$ref);\n\n if (visited.has(refName))\n return {\n $resolvedRef: refName,\n description: `Circular reference to ${refName}`,\n };\n\n const referencedSchema = allSchemas[refName];\n if (referencedSchema) {\n visited.add(refName);\n const resolved = resolveReferences(referencedSchema, allSchemas, visited);\n visited.delete(refName);\n\n const { $ref, ...rest } = schema;\n return { ...resolved, ...rest };\n }\n\n return schema;\n }\n\n if (Array.isArray(schema)) {\n return schema.map((item) => resolveReferences(item, allSchemas, visited));\n }\n\n const result: any = {};\n for (const [key, value] of Object.entries(schema)) {\n result[key] = resolveReferences(value, allSchemas, visited);\n }\n\n return result;\n}\n\nexport function extractSchemaName(ref: string): string {\n const parts = ref.split(\"/\");\n return parts[parts.length - 1];\n}\n"]}
@@ -10,7 +10,7 @@ const dynamic_loader_1 = require("../../../../../utils/dynamic-loader");
10
10
  const swagger_router_helpers_1 = require("../swagger.router.helpers");
11
11
  const prisma_schema_parser_1 = __importDefault(require("../../../../../utils/prisma/prisma-schema-parser"));
12
12
  const fs_helpers_1 = require("../../../../../utils/helpers/fs.helpers");
13
- const storage_1 = require("class-transformer/cjs/storage");
13
+ const storage_js_1 = require("class-transformer/cjs/storage.js");
14
14
  function generateClassValidatorJsonSchemas() {
15
15
  const requiredAppModules = [
16
16
  ...prisma_schema_parser_1.default.getModelsAsArrayOfStrings(),
@@ -19,7 +19,7 @@ function generateClassValidatorJsonSchemas() {
19
19
  const schemas = {};
20
20
  const jsonSchema = (0, class_validator_jsonschema_1.validationMetadatasToSchemas)({
21
21
  classValidatorMetadataStorage: (0, class_validator_1.getMetadataStorage)(),
22
- classTransformerMetadataStorage: storage_1.defaultMetadataStorage,
22
+ classTransformerMetadataStorage: storage_js_1.defaultMetadataStorage,
23
23
  refPointerPrefix: "#/components/schemas/",
24
24
  });
25
25
  requiredAppModules.forEach((modelName) => {
@@ -1 +1 @@
1
- {"version":3,"file":"generate-class-validator-json-schemas.js","sourceRoot":"","sources":["../../../../../../../src/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.ts"],"names":[],"mappings":";;;;;AAQA,8EA+CC;AAvDD,2EAA0E;AAC1E,qDAAqD;AACrD,wEAA0E;AAC1E,sEAAqE;AACrE,4GAAkF;AAClF,wEAA+E;AAC/E,2DAAuE;AAEvE,SAAgB,iCAAiC;IAC/C,MAAM,kBAAkB,GAAG;QACzB,GAAG,8BAAkB,CAAC,yBAAyB,EAAE;QACjD,MAAM;KACP,CAAC;IACF,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,MAAM,UAAU,GAAG,IAAA,yDAA4B,EAAC;QAC9C,6BAA6B,EAAE,IAAA,oCAAkB,GAAE;QACnD,+BAA+B,EAAE,gCAAsB;QACvD,gBAAgB,EAAE,uBAAuB;KAC1C,CAAC,CAAC;IAEH,kBAAkB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACvC,MAAM,gBAAgB,GAAG,IAAA,oCAAmB,EAAC,SAAS,CAAC,CAAC;QAExD,IAAI,gBAAgB,EAAE,IAAI,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE;gBACpE,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBACnD,IAAI,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACjE,IAAI,CAAC;wBACH,MAAM,UAAU,GAAG,IAAA,iDAAwB,EACzC,OAAO,EACP,SAAS,EACT,KAAK,CACN,CAAC;wBAEF,IAAI,OAAO,CAAC,UAAU,CAAC;4BACrB,MAAM,KAAK,CACT,qBAAqB,QAAQ,CAAC,IAAI,4BAA4B,IAAA,iCAAoB,GAAE,uFAAuF,CAC5K,CAAC;wBAEJ,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACxD,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,MAAM,IAAI,KAAK,CACb,iCAAiC,OAAO,IAAI,SAAS,KAAK,GAAG,CAAC,OAAO,EAAE,CACxE,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE;QACzD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { validationMetadatasToSchemas } from \"class-validator-jsonschema\";\nimport { getMetadataStorage } from \"class-validator\";\nimport { getModuleComponents } from \"../../../../../utils/dynamic-loader\";\nimport { getCorrectJsonSchemaName } from \"../swagger.router.helpers\";\nimport prismaSchemaParser from \"../../../../../utils/prisma/prisma-schema-parser\";\nimport { getUserFileExtension } from \"../../../../../utils/helpers/fs.helpers\";\nimport { defaultMetadataStorage } from \"class-transformer/cjs/storage\";\n\nexport function generateClassValidatorJsonSchemas() {\n const requiredAppModules = [\n ...prismaSchemaParser.getModelsAsArrayOfStrings(),\n \"auth\",\n ];\n const schemas: Record<string, any> = {};\n\n const jsonSchema = validationMetadatasToSchemas({\n classValidatorMetadataStorage: getMetadataStorage(),\n classTransformerMetadataStorage: defaultMetadataStorage,\n refPointerPrefix: \"#/components/schemas/\",\n });\n\n requiredAppModules.forEach((modelName) => {\n const moduleComponents = getModuleComponents(modelName);\n\n if (moduleComponents?.dtos) {\n Object.entries(moduleComponents.dtos).forEach(([dtoType, dtoClass]) => {\n const ignoredDtoTypes = [\"createone\", \"updateone\"];\n if (dtoClass && !ignoredDtoTypes.includes(dtoType.toLowerCase())) {\n try {\n const schemaName = getCorrectJsonSchemaName(\n dtoType,\n modelName,\n \"Dto\"\n );\n\n if (schemas[schemaName])\n throw Error(\n `Found more then 1 ${dtoClass.name} classes among your .dto.${getUserFileExtension()} files, there is no way to correctly generate json-schemas for swagger documentation.`\n );\n\n schemas[schemaName] = jsonSchema[dtoClass.name] || {};\n } catch (err: any) {\n throw new Error(\n `Failed to generate schema for ${dtoType} ${modelName}: ${err.message}`\n );\n }\n }\n });\n }\n });\n\n Object.entries(jsonSchema).forEach(([className, schema]) => {\n if (!schemas[className]) schemas[className] = schema;\n });\n return schemas;\n}\n"]}
1
+ {"version":3,"file":"generate-class-validator-json-schemas.js","sourceRoot":"","sources":["../../../../../../../src/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.ts"],"names":[],"mappings":";;;;;AAQA,8EA+CC;AAvDD,2EAA0E;AAC1E,qDAAqD;AACrD,wEAA0E;AAC1E,sEAAqE;AACrE,4GAAkF;AAClF,wEAA+E;AAC/E,iEAA0E;AAE1E,SAAgB,iCAAiC;IAC/C,MAAM,kBAAkB,GAAG;QACzB,GAAG,8BAAkB,CAAC,yBAAyB,EAAE;QACjD,MAAM;KACP,CAAC;IACF,MAAM,OAAO,GAAwB,EAAE,CAAC;IAExC,MAAM,UAAU,GAAG,IAAA,yDAA4B,EAAC;QAC9C,6BAA6B,EAAE,IAAA,oCAAkB,GAAE;QACnD,+BAA+B,EAAE,mCAAsB;QACvD,gBAAgB,EAAE,uBAAuB;KAC1C,CAAC,CAAC;IAEH,kBAAkB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACvC,MAAM,gBAAgB,GAAG,IAAA,oCAAmB,EAAC,SAAS,CAAC,CAAC;QAExD,IAAI,gBAAgB,EAAE,IAAI,EAAE,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE;gBACpE,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBACnD,IAAI,QAAQ,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACjE,IAAI,CAAC;wBACH,MAAM,UAAU,GAAG,IAAA,iDAAwB,EACzC,OAAO,EACP,SAAS,EACT,KAAK,CACN,CAAC;wBAEF,IAAI,OAAO,CAAC,UAAU,CAAC;4BACrB,MAAM,KAAK,CACT,qBAAqB,QAAQ,CAAC,IAAI,4BAA4B,IAAA,iCAAoB,GAAE,uFAAuF,CAC5K,CAAC;wBAEJ,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACxD,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,MAAM,IAAI,KAAK,CACb,iCAAiC,OAAO,IAAI,SAAS,KAAK,GAAG,CAAC,OAAO,EAAE,CACxE,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE;QACzD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;IACvD,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import { validationMetadatasToSchemas } from \"class-validator-jsonschema\";\nimport { getMetadataStorage } from \"class-validator\";\nimport { getModuleComponents } from \"../../../../../utils/dynamic-loader\";\nimport { getCorrectJsonSchemaName } from \"../swagger.router.helpers\";\nimport prismaSchemaParser from \"../../../../../utils/prisma/prisma-schema-parser\";\nimport { getUserFileExtension } from \"../../../../../utils/helpers/fs.helpers\";\nimport { defaultMetadataStorage } from \"class-transformer/cjs/storage.js\";\n\nexport function generateClassValidatorJsonSchemas() {\n const requiredAppModules = [\n ...prismaSchemaParser.getModelsAsArrayOfStrings(),\n \"auth\",\n ];\n const schemas: Record<string, any> = {};\n\n const jsonSchema = validationMetadatasToSchemas({\n classValidatorMetadataStorage: getMetadataStorage(),\n classTransformerMetadataStorage: defaultMetadataStorage,\n refPointerPrefix: \"#/components/schemas/\",\n });\n\n requiredAppModules.forEach((modelName) => {\n const moduleComponents = getModuleComponents(modelName);\n\n if (moduleComponents?.dtos) {\n Object.entries(moduleComponents.dtos).forEach(([dtoType, dtoClass]) => {\n const ignoredDtoTypes = [\"createone\", \"updateone\"];\n if (dtoClass && !ignoredDtoTypes.includes(dtoType.toLowerCase())) {\n try {\n const schemaName = getCorrectJsonSchemaName(\n dtoType,\n modelName,\n \"Dto\"\n );\n\n if (schemas[schemaName])\n throw Error(\n `Found more then 1 ${dtoClass.name} classes among your .dto.${getUserFileExtension()} files, there is no way to correctly generate json-schemas for swagger documentation.`\n );\n\n schemas[schemaName] = jsonSchema[dtoClass.name] || {};\n } catch (err: any) {\n throw new Error(\n `Failed to generate schema for ${dtoType} ${modelName}: ${err.message}`\n );\n }\n }\n });\n }\n });\n\n Object.entries(jsonSchema).forEach(([className, schema]) => {\n if (!schemas[className]) schemas[className] = schema;\n });\n return schemas;\n}\n"]}
@@ -35,8 +35,8 @@ function ArkosRouter() {
35
35
  return function (config, ...handlers) {
36
36
  if (config.disabled)
37
37
  return;
38
- const route = config.path;
39
- if (!route)
38
+ const path = config.path;
39
+ if (!path)
40
40
  throw Error("Please pass valid value for path field to use in your route");
41
41
  if (!route_config_validator_1.default.isArkosRouteConfig(config))
42
42
  throw Error(`First argument of ArkosRouter().${prop}() must be a valid ArkosRouteConfig object with path field, but recevied ${typeof config === "object" ? JSON.stringify(config, null, 2) : config}`);
@@ -58,6 +58,7 @@ function ArkosRouter() {
58
58
  const validationConfig = arkosConfig.validation;
59
59
  const authenticationConfig = arkosConfig.authentication;
60
60
  const strictValidation = validationConfig?.strict;
61
+ const route = `${method.toUpperCase()} ${path}`;
61
62
  if (strictValidation &&
62
63
  (!("validation" in config) ||
63
64
  ("validation" in config &&
@@ -65,14 +66,14 @@ function ArkosRouter() {
65
66
  config.validation !== undefined)))
66
67
  throw Error("When using strict validation you must either pass { validation: false } in order to explicitly tell that no input will be received, or pass `undefined` for each input type e.g { validation: { query: undefined } } in order to deny the input of given request input.");
67
68
  if (!validationConfig?.resolver && config.validation)
68
- throw Error("Trying to pass validators into route config validation option without choosing a validation resolver under arkos.init({ validation: { resolver: '' } })");
69
+ throw Error(`Trying to pass validators into route ${route} config validation option without choosing a validation resolver under arkos.init({ validation: { resolver: '' } })`);
69
70
  if (config.authentication && !authenticationConfig?.mode)
70
- throw Error("Trying to authenticate a route without choosing an authentication mode under arkos.init({ authentication: { mode: '' } })");
71
+ throw Error(`Trying to authenticate route ${route} without choosing an authentication mode under arkos.init({ authentication: { mode: '' } })`);
71
72
  handlers = [...(0, helpers_1.getMiddlewareStack)(config), ...handlers];
72
73
  if (config.experimental?.uploads &&
73
74
  config.experimental.uploads.deleteOnError !== false)
74
75
  handlers.push((0, error_handler_1.catchAsync)(upload_manager_1.default.handleFileCleanup(config.experimental.uploads), { type: "error" }));
75
- return originalMethod.call(target, route, ...handlers);
76
+ return originalMethod.call(target, path, ...handlers);
76
77
  };
77
78
  }
78
79
  return originalMethod;