arkos 1.3.4-canary.4 → 1.3.4-canary.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import catchAsync from \"../error-handler/utils/catch-async\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { CookieOptions } from \"express\";\nimport { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport authService from \"./auth.service\";\nimport { BaseService } from \"../base/base.service\";\nimport { User } from \"../../types\";\nimport arkosEnv from \"../../utils/arkos-env\";\nimport { getArkosConfig } from \"../../server\";\nimport {\n createPrismaWhereClause,\n determineUsernameField,\n getNestedValue,\n MsDuration,\n toMs,\n} from \"./utils/helpers/auth.controller.helpers\";\nimport authActionService from \"./utils/services/auth-action.service\";\n\n/**\n * Default fields to exclude from user object when returning to client\n */\nexport const defaultExcludedUserFields = {\n password: false,\n};\n\n/**\n * Factory function to create authentication controller with configurable interceptors\n *\n * @param interceptors - Optional middleware functions to execute after controller actions\n * @returns An object containing all authentication controller methods\n */\nexport const authControllerFactory = async (interceptors: any = {}) => {\n const userService = new BaseService(\"user\");\n\n return {\n /**\n * Retrieves the current authenticated user's information\n */\n getMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const user = (await userService.findOne(\n { id: req.user!.id },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (interceptors?.afterGetMe) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Updates the current authenticated user's information\n */\n updateMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n if (\"password\" in req.body)\n throw new AppError(\n \"In order to update password use the update-password endpoint.\",\n 400,\n {},\n \"InvalidFieldPassword\"\n );\n\n const user = (await userService.updateOne(\n { id: req.user!.id },\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (interceptors?.afterUpdateMe) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Logs out the current user by invalidating their access token cookie\n */\n logout: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n res.cookie(\"arkos_access_token\", \"no-token\", {\n expires: new Date(Date.now() + 10 * 1000),\n httpOnly: true,\n });\n\n if (interceptors?.afterLogout) {\n req.responseData = null;\n res.locals.data = null;\n req.responseStatus = 204;\n res.locals.status = 204;\n return next();\n }\n\n res.status(204).json();\n }\n ),\n\n /**\n * Authenticates a user using configurable username field and password\n * Username field can be specified in query parameter or config\n *\n * Supports nested fields and array queries (e.g., \"profile.nickname\", \"phones.some.number\")\n */\n login: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const authConfigs = getArkosConfig()?.authentication;\n\n const usernameField = determineUsernameField(req);\n\n // For the error message, we only care about the top-level field name\n const lastField =\n usernameField.split(\".\")[usernameField.split(\".\").length - 1];\n\n const usernameValue = req.body[lastField];\n\n const { password } = req.body;\n\n if (!usernameValue || !password)\n return next(\n new AppError(`Please provide both ${lastField} and password`, 400)\n );\n\n // Create appropriate where clause for the query\n let whereClause: Record<string, any>;\n\n if (usernameField?.includes?.(\".\")) {\n // For nested paths, we need to extract the actual value to search for\n const valueToFind = getNestedValue(req.body, usernameField);\n if (valueToFind === undefined) {\n return next(new AppError(`Invalid ${usernameField} provided`, 400));\n }\n whereClause = createPrismaWhereClause(usernameField, valueToFind);\n } else {\n // Simple field case\n whereClause = { [usernameField]: usernameValue };\n }\n\n // Use findFirst instead of findUnique for complex queries\n const user = (await userService.findOne(\n whereClause,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (\n !user ||\n !(await authService.isCorrectPassword(password, user.password))\n ) {\n return next(new AppError(`Incorrect ${lastField} or password`, 401));\n }\n\n const token = authService.signJwtToken(user.id!);\n\n const cookieOptions: CookieOptions = {\n expires: new Date(\n Date.now() +\n Number(\n toMs(\n authConfigs?.jwt?.expiresIn ||\n (process.env.JWT_EXPIRES_IN as MsDuration) ||\n (arkosEnv.JWT_EXPIRES_IN as MsDuration)\n )\n )\n ),\n httpOnly:\n authConfigs?.jwt?.cookie?.httpOnly ||\n process.env.JWT_COOKIE_HTTP_ONLY === \"true\" ||\n true,\n secure:\n authConfigs?.jwt?.cookie?.secure ||\n process.env.JWT_COOKIE_SECURE === \"true\" ||\n req.secure ||\n req.headers[\"x-forwarded-proto\"] === \"https\",\n sameSite:\n authConfigs?.jwt?.cookie?.sameSite ||\n (process.env.JWT_COOKIE_SAME_SITE as\n | \"none\"\n | \"lax\"\n | \"strict\"\n | undefined) ||\n (process.env.NODE_ENV === \"production\" ? \"none\" : \"lax\"),\n };\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n req.responseData = { accessToken: token };\n res.locals.data = { accessToken: token };\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n\n req.accessToken = token;\n\n if (interceptors?.afterLogin) {\n req.additionalData = { user };\n res.locals.additional = { user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n res.status(200).json(req.responseData);\n } else if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.status(200).send();\n }\n ),\n\n /**\n * Creates a new user account using the userService\n */\n signup: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const user = (await userService.createOne(\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (interceptors?.afterSignup) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete user[key as keyof User];\n });\n\n res.status(201).json({ data: user });\n }\n ),\n /**\n * Marks user account as self-deleted by setting deletedSelfAccountAt timestamp\n */\n deleteMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const userId = req.user!.id; // Assuming the authenticated user's ID is available in req.user\n\n const updatedUser = (await userService.updateOne(\n { id: userId },\n {\n deletedSelfAccountAt: new Date().toISOString(),\n },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (interceptors?.afterDeleteMe) {\n req.responseData = { data: updatedUser };\n res.locals.data = { data: updatedUser };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete updatedUser[key as keyof User];\n });\n\n res.status(200).json({\n message: \"Account deleted successfully\",\n });\n }\n ),\n\n /**\n * Updates the password of the authenticated user\n */\n updatePassword: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const { currentPassword, newPassword } = req.body;\n\n if (!currentPassword || !newPassword)\n return next(\n new AppError(\"currentPassword and newPassword are required\", 400)\n );\n\n const user = req.user;\n\n if (!user || user?.isActive === false || user?.deletedSelfAccountAt)\n return next(new AppError(\"User not found!\", 404));\n\n // Check if the current password is correct\n const isPasswordCorrect = await authService.isCorrectPassword(\n String(currentPassword),\n String(user.password)\n );\n\n const configs = getArkosConfig();\n const initAuthConfigs = configs?.authentication;\n\n if (!isPasswordCorrect)\n return next(new AppError(\"Current password is incorrect.\", 400));\n\n // Check password strength (optional but recommended)\n if (\n !authService.isPasswordStrong(String(newPassword)) &&\n !configs?.validation\n ) {\n return next(\n new AppError(\n initAuthConfigs?.passwordValidation?.message ||\n \"The new password must contain at least one uppercase letter, one lowercase letter, and one number\",\n 400\n )\n );\n }\n\n // Update the password\n await userService.updateOne(\n { id: user.id },\n {\n password: await authService.hashPassword(newPassword),\n passwordChangedAt: new Date(Date.now()),\n }\n );\n\n if (interceptors?.afterUpdatePassword) {\n req.additionalData = {\n user,\n };\n req.responseData = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n res.locals.data = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({\n status: \"success\",\n message: \"Password updated successfully!\",\n });\n }\n ),\n\n findManyAuthAction: catchAsync(\n async (_: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const authActions = authActionService.getAll()?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n ),\n\n findOneAuthAction: catchAsync(\n async (req: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const resourceName = req.params?.resourceName;\n\n if (!resourceName)\n throw new AppError(`Please provide a resoureName`, 400);\n\n const authActions = authActionService\n .getByResource(req.params?.resourceName)\n ?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n if (!authActions)\n throw new AppError(\n `No auth action with resource name ${resourceName}`,\n 404\n );\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n ),\n };\n};\n"]}
1
+ {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import catchAsync from \"../error-handler/utils/catch-async\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { CookieOptions } from \"express\";\nimport { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport authService from \"./auth.service\";\nimport { BaseService } from \"../base/base.service\";\nimport { User } from \"../../types\";\nimport arkosEnv from \"../../utils/arkos-env\";\nimport { getArkosConfig } from \"../../server\";\nimport {\n createPrismaWhereClause,\n determineUsernameField,\n getNestedValue,\n MsDuration,\n toMs,\n} from \"./utils/helpers/auth.controller.helpers\";\nimport authActionService from \"./utils/services/auth-action.service\";\n\n/**\n * Default fields to exclude from user object when returning to client\n */\nexport const defaultExcludedUserFields = {\n password: false,\n};\n\n/**\n * Factory function to create authentication controller with configurable interceptors\n *\n * @param interceptors - Optional middleware functions to execute after controller actions\n * @returns An object containing all authentication controller methods\n */\nexport const authControllerFactory = async (interceptors: any = {}) => {\n const userService = new BaseService(\"user\");\n\n return {\n /**\n * Retrieves the current authenticated user's information\n */\n getMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const user = (await userService.findOne(\n { id: req.user!.id },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (interceptors?.afterGetMe) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Updates the current authenticated user's information\n */\n updateMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n if (\"password\" in req.body)\n throw new AppError(\n \"In order to update password use the update-password endpoint.\",\n 400,\n {},\n \"InvalidFieldPassword\"\n );\n\n const user = (await userService.updateOne(\n { id: req.user!.id },\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (interceptors?.afterUpdateMe) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Logs out the current user by invalidating their access token cookie\n */\n logout: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n res.cookie(\"arkos_access_token\", \"no-token\", {\n expires: new Date(Date.now() + 10 * 1000),\n httpOnly: true,\n });\n\n if (interceptors?.afterLogout) {\n req.responseData = null;\n res.locals.data = null;\n req.responseStatus = 204;\n res.locals.status = 204;\n return next();\n }\n\n res.status(204).json();\n }\n ),\n\n /**\n * Authenticates a user using configurable username field and password\n * Username field can be specified in query parameter or config\n *\n * Supports nested fields and array queries (e.g., \"profile.nickname\", \"phones.some.number\")\n */\n login: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const authConfigs = getArkosConfig()?.authentication;\n\n const usernameField = determineUsernameField(req);\n\n // For the error message, we only care about the top-level field name\n const lastField =\n usernameField.split(\".\")[usernameField.split(\".\").length - 1];\n\n const usernameValue = req.body[lastField];\n\n const { password } = req.body;\n\n if (!usernameValue || !password)\n return next(\n new AppError(`Please provide both ${lastField} and password`, 400)\n );\n\n // Create appropriate where clause for the query\n let whereClause: Record<string, any>;\n\n if (usernameField?.includes?.(\".\")) {\n // For nested paths, we need to extract the actual value to search for\n const valueToFind = getNestedValue(req.body, usernameField);\n if (valueToFind === undefined) {\n return next(new AppError(`Invalid ${usernameField} provided`, 400));\n }\n whereClause = createPrismaWhereClause(usernameField, valueToFind);\n } else {\n // Simple field case\n whereClause = { [usernameField]: usernameValue };\n }\n\n // Use findFirst instead of findUnique for complex queries\n const user = (await userService.findOne(\n whereClause,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (\n !user ||\n !(await authService.isCorrectPassword(password, user.password))\n ) {\n return next(new AppError(`Incorrect ${lastField} or password`, 401));\n }\n\n const token = authService.signJwtToken(user.id!);\n\n const cookieOptions: CookieOptions = {\n expires: new Date(\n Date.now() +\n Number(\n toMs(\n authConfigs?.jwt?.expiresIn ||\n (process.env.JWT_EXPIRES_IN as MsDuration) ||\n (arkosEnv.JWT_EXPIRES_IN as MsDuration)\n )\n )\n ),\n httpOnly:\n authConfigs?.jwt?.cookie?.httpOnly ||\n process.env.JWT_COOKIE_HTTP_ONLY === \"true\" ||\n true,\n secure:\n authConfigs?.jwt?.cookie?.secure ||\n process.env.JWT_COOKIE_SECURE === \"true\" ||\n req.secure ||\n req.headers[\"x-forwarded-proto\"] === \"https\",\n sameSite:\n authConfigs?.jwt?.cookie?.sameSite ||\n (process.env.JWT_COOKIE_SAME_SITE as\n | \"none\"\n | \"lax\"\n | \"strict\"\n | undefined) ||\n (process.env.NODE_ENV === \"production\" ? \"none\" : \"lax\"),\n };\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n req.responseData = { accessToken: token };\n res.locals.data = { accessToken: token };\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n\n req.accessToken = token;\n\n if (interceptors?.afterLogin) {\n req.additionalData = { user };\n res.locals.additional = { user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n res.status(200).json(req.responseData);\n } else if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.status(200).send();\n }\n ),\n\n /**\n * Creates a new user account using the userService\n */\n signup: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const user = (await userService.createOne(\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (interceptors?.afterSignup) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete user[key as keyof User];\n });\n\n res.status(201).json({ data: user });\n }\n ),\n /**\n * Marks user account as self-deleted by setting deletedSelfAccountAt timestamp\n */\n deleteMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const userId = req.user!.id;\n\n const updatedUser = (await userService.updateOne(\n { id: userId },\n {\n deletedSelfAccountAt: new Date().toISOString(),\n },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (interceptors?.afterDeleteMe) {\n req.responseData = { data: updatedUser };\n res.locals.data = { data: updatedUser };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete updatedUser[key as keyof User];\n });\n\n res.status(200).json({\n message: \"Account deleted successfully\",\n });\n }\n ),\n\n /**\n * Updates the password of the authenticated user\n */\n updatePassword: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const { currentPassword, newPassword } = req.body;\n\n if (!currentPassword || !newPassword)\n return next(\n new AppError(\"currentPassword and newPassword are required\", 400)\n );\n\n const user = req.user;\n\n if (!user || user?.isActive === false || user?.deletedSelfAccountAt)\n return next(new AppError(\"User not found!\", 404));\n\n // Check if the current password is correct\n const isPasswordCorrect = await authService.isCorrectPassword(\n String(currentPassword),\n String(user.password)\n );\n\n const configs = getArkosConfig();\n const initAuthConfigs = configs?.authentication;\n\n if (!isPasswordCorrect)\n return next(new AppError(\"Current password is incorrect.\", 400));\n\n // Check password strength (optional but recommended)\n if (\n !authService.isPasswordStrong(String(newPassword)) &&\n !configs?.validation\n ) {\n return next(\n new AppError(\n initAuthConfigs?.passwordValidation?.message ||\n \"The new password must contain at least one uppercase letter, one lowercase letter, and one number\",\n 400\n )\n );\n }\n\n // Update the password\n await userService.updateOne(\n { id: user.id },\n {\n password: await authService.hashPassword(newPassword),\n passwordChangedAt: new Date(Date.now()),\n }\n );\n\n if (interceptors?.afterUpdatePassword) {\n req.additionalData = {\n user,\n };\n req.responseData = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n res.locals.data = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({\n status: \"success\",\n message: \"Password updated successfully!\",\n });\n }\n ),\n\n findManyAuthAction: catchAsync(\n async (_: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const authActions = authActionService.getAll()?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n ),\n\n findOneAuthAction: catchAsync(\n async (req: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const resourceName = req.params?.resourceName;\n\n if (!resourceName)\n throw new AppError(`Please provide a resoureName`, 400);\n\n const authActions = authActionService\n .getByResource(req.params?.resourceName)\n ?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n if (!authActions)\n throw new AppError(\n `No auth action with resource name ${resourceName}`,\n 404\n );\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n ),\n };\n};\n"]}
@@ -110,7 +110,7 @@ class BaseController {
110
110
  res.status(200).json({ data });
111
111
  });
112
112
  this.updateMany = (0, catch_async_1.default)(async (req, res, next) => {
113
- if (!Object.keys(req.query).some((key) => key !== "prismaQueryOptions")) {
113
+ if (Object.keys(req.query).every((key) => ["filterMode", "prismaQueryOptions"].includes(key))) {
114
114
  return next(new app_error_1.default("Filter criteria not provided for bulk update.", 400, {}, "MissingRequestQueryParameters"));
115
115
  }
116
116
  if (req.query.filterMode === "OR")
@@ -171,7 +171,7 @@ class BaseController {
171
171
  res.status(204).send();
172
172
  });
173
173
  this.deleteMany = (0, catch_async_1.default)(async (req, res, next) => {
174
- if (!Object.keys(req.query).some((key) => key !== "prismaQueryOptions")) {
174
+ if (Object.keys(req.query).every((key) => ["filterMode", "prismaQueryOptions"].includes(key))) {
175
175
  return next(new app_error_1.default("Filter criteria not provided for bulk deletion.", 400, {}, "MissingRequestQueryParameters"));
176
176
  }
177
177
  if (req.query.filterMode === "OR")
@@ -1 +1 @@
1
- {"version":3,"file":"base.controller.js","sourceRoot":"","sources":["../../../../src/modules/base/base.controller.ts"],"names":[],"mappings":";;;;;;AACA,qFAA4D;AAC5D,iDAA6C;AAC7C,iFAAwD;AACxD,iFAAgF;AAChF,+DAAiE;AACjE,0DAAkC;AAClC,4DAAoC;AACpC,mGAAyE;AACzE,+CAAkD;AAClD,4FAA6D;AA2B7D,MAAa,cAAc;IAuBzB,YAAY,SAAiB;QAe7B,cAAS,GAAG,IAAA,qBAAU,EACpB,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;YACvE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,mBAAW,CAChD,GAAG,EACH,IAAI,CAAC,SAAS,CACf,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CACvC,GAAG,CAAC,IAAI,EACR,IAAA,0BAAS,EAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,YAAY,CAAC,EACrD,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,CACnD,CAAC;YAEF,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;gBACrC,GAAG,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC3B,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC,CACF,CAAC;QASF,eAAU,GAAG,IAAA,qBAAU,EACrB,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;YACvE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,mBAAW,CAChD,GAAG,EACH,IAAI,CAAC,SAAS,CACf,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CACxC,GAAG,CAAC,IAAI,EACR,IAAA,0BAAS,EAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,YAAY,CAAC,EACrD,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,CACnD,CAAC;YAEF,IAAI,CAAC,IAAI;gBACP,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,0DAA0D,EAC1D,GAAG,EACH,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CACnB,CACF,CAAC;YAEJ,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;gBACtC,GAAG,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC3B,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC,CACF,CAAC;QASF,aAAQ,GAAG,IAAA,qBAAU,EACnB,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;YACvE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,mBAAW,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC;iBACpE,MAAM,EAAE;iBACR,IAAI,EAAE;iBACN,WAAW,EAAE;iBACb,QAAQ,EAAE,CAAC,OAAO,CAAC;YAEtB,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE;oBACzC,IAAI,EAAE,GAAG,EAAE,IAAI;oBACf,WAAW,EAAE,GAAG,EAAE,WAAW;iBAC9B,CAAC;gBACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE;oBACxB,IAAI,EAAE,GAAG,EAAE,IAAI;oBACf,WAAW,EAAE,GAAG,EAAE,WAAW;iBAC9B,CAAC;aACH,CAAC,CAAoC,CAAC;YAEvC,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;gBACpC,GAAG,CAAC,YAAY,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBACzD,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBACxD,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC,CACF,CAAC;QASF,YAAO,GAAG,IAAA,qBAAU,EAClB,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;YACvE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,mBAAW,CAChD,GAAG,EACH,IAAI,CAAC,SAAS,CACf,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACrC,GAAG,CAAC,MAAM,EACV,IAAA,0BAAS,EAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,YAAY,CAAC,EACrD,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,CACnD,CAAC;YAEF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IACE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;oBACpC,IAAI,IAAI,GAAG,CAAC,MAAM;oBAClB,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,EACtB,CAAC;oBACD,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,GAAG,IAAA,gCAAU,EAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,YACnC,GAAG,CAAC,MAAM,EAAE,EACd,YAAY,EACZ,GAAG,EACH,EAAE,EACF,UAAU,CACX,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,GAAG,IAAA,gCAAU,EAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,EACjD,GAAG,EACH,EAAE,EACF,UAAU,CACX,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;gBACnC,GAAG,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC3B,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC,CACF,CAAC;QASF,cAAS,GAAG,IAAA,qBAAU,EACpB,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;YACvE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,mBAAW,CAChD,GAAG,EACH,IAAI,CAAC,SAAS,CACf,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CACvC,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,IAAI,EACR,IAAA,0BAAS,EAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,YAAY,CAAC,EACrD,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,CACnD,CAAC;YAEF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBAC/D,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,GAAG,IAAA,gCAAU,EAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,YACnC,GAAG,CAAC,MAAM,EAAE,EACd,YAAY,EACZ,GAAG,EACH,EAAE,EACF,UAAU,CACX,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,GAAG,IAAA,gCAAU,EAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,EACjD,GAAG,EACH,EAAE,EACF,UAAU,CACX,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;gBACrC,GAAG,CAAC,YAAY,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC3B,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC,CACF,CAAC;QASF,eAAU,GAAG,IAAA,qBAAU,EACrB,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;YACvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,oBAAoB,CAAC,EAAE,CAAC;gBACxE,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,+CAA+C,EAC/C,GAAG,EACH,EAAE,EACF,+BAA+B,CAChC,CACF,CAAC;YACJ,CAAC;YAED,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI;gBAC/B,MAAM,IAAI,mBAAQ,CAChB,oEAAoE,EACpE,GAAG,CACJ,CAAC;YAEJ,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;YAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,mBAAW,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC;iBACpE,MAAM,EAAE;iBACR,IAAI,EAAE;iBACN,WAAW,EAAE;iBACb,QAAQ,EAAE,CAAC,OAAO,CAAC;YAEtB,OAAO,YAAY,CAAC,OAAO,CAAC;YAE5B,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CACzC,KAAK,EACL,GAAG,CAAC,IAAI,EACR,YAAY,EACZ,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,CACnD,CAAsB,CAAC;YAExB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;gBAC3B,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,GAAG,IAAA,mBAAS,EAAC,IAAA,gCAAU,EAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAC5D,GAAG,CACJ,CACF,CAAC;YAEJ,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;gBACtC,GAAG,CAAC,YAAY,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;gBACjD,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;gBAChD,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC,CACF,CAAC;QASF,gBAAW,GAAG,IAAA,qBAAU,EACtB,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;YACvE,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,IAAI,mBAAW,CAChD,GAAG,EACH,IAAI,CAAC,SAAS,CACf,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC;YAExB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CACzC,GAAG,CAAC,IAAI,EACR,IAAA,0BAAS,EAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,EAAE,YAAY,CAAC,EACrD,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,CACnD,CAAC;YAEF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAC5B,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,0DAA0D,EAC1D,GAAG,EACH,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CACnB,CACF,CAAC;YAEJ,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;gBACvC,GAAG,CAAC,YAAY,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBAClD,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBACjD,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC,CACF,CAAC;QASF,cAAS,GAAG,IAAA,qBAAU,EACpB,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;YACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;gBACpD,IAAI,EAAE,GAAG,EAAE,IAAI;gBACf,WAAW,EAAE,GAAG,EAAE,WAAW;aAC9B,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBAC/D,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,GAAG,IAAA,gCAAU,EAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,YACnC,GAAG,CAAC,MAAM,EAAE,EACd,YAAY,EACZ,GAAG,EACH,EAAE,EACF,UAAU,CACX,CACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,GAAG,IAAA,gCAAU,EAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,EACjD,GAAG,EACH,EAAE,EACF,UAAU,CACX,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;gBACrC,GAAG,CAAC,cAAc,GAAG,EAAE,IAAI,EAAE,CAAC;gBAC9B,GAAG,CAAC,MAAM,CAAC,cAAc,GAAG,EAAE,IAAI,EAAE,CAAC;gBACrC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC,CACF,CAAC;QASF,eAAU,GAAG,IAAA,qBAAU,EACrB,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;YACvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,oBAAoB,CAAC,EAAE,CAAC;gBACxE,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,iDAAiD,EACjD,GAAG,EACH,EAAE,EACF,+BAA+B,CAChC,CACF,CAAC;YACJ,CAAC;YAED,IAAI,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,IAAI;gBAC/B,MAAM,IAAI,mBAAQ,CAChB,oEAAoE,EACpE,GAAG,CACJ,CAAC;YAEJ,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;YAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,mBAAW,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC;YAExE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE;gBAChD,IAAI,EAAE,GAAG,EAAE,IAAI;gBACf,WAAW,EAAE,GAAG,EAAE,WAAW;aAC9B,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,IAAI,CACT,IAAI,mBAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC,CAChE,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;gBACtC,GAAG,CAAC,YAAY,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;gBACjD,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;gBAChD,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC,CACF,CAAC;QASF,gBAAW,GAAG,IAAA,qBAAU,EACtB,KAAK,EAAE,GAAiB,EAAE,GAAkB,EAAE,IAAuB,EAAE,EAAE;YACvE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;gBACpD,IAAI,EAAE,GAAG,EAAE,IAAI;gBACf,WAAW,EAAE,GAAG,EAAE,WAAW;aAC9B,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAC5B,OAAO,IAAI,CACT,IAAI,mBAAQ,CACV,0DAA0D,EAC1D,GAAG,EACH,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CACnB,CACF,CAAC;YAEJ,IAAI,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;gBACvC,GAAG,CAAC,YAAY,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBAClD,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;gBACjD,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;gBACxB,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YAED,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC,CACF,CAAC;QAzdA,MAAM,UAAU,GAAG,IAAA,oCAAmB,EAAC,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,0BAAW,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,UAAU,EAAE,YAAY,IAAI,EAAE,CAAC;IACrD,CAAC;CAqdF;AAlfD,wCAkfC;AAYY,QAAA,qBAAqB,GAAG,IAAA,qBAAU,EAC7C,KAAK,EAAE,CAAM,EAAE,GAAkB,EAAE,EAAE;IACnC,cAAI,CAAC,IAAI,CACP,qHAAqH,CACtH,CAAC;IAEF,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACnB,IAAI,EAAE;YACJ,GAAG,8BAAkB;iBAClB,yBAAyB,EAAE;iBAC3B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,+BAAS,EAAC,KAAK,CAAC,CAAC;YACnC,aAAa;SACd;KACF,CAAC,CAAC;AACL,CAAC,CACF,CAAC","sourcesContent":["import { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport { BaseService } from \"./base.service\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { kebabCase, pascalCase } from \"../../utils/helpers/change-case.helpers\";\nimport { getModuleComponents } from \"../../utils/dynamic-loader\";\nimport pluralize from \"pluralize\";\nimport sheu from \"../../utils/sheu\";\nimport prismaSchemaParser from \"../../utils/prisma/prisma-schema-parser\";\nimport { APIFeatures } from \"../../exports/utils\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\n\n/**\n * The `BaseController` class provides standardized RESTful API endpoints\n * for any Prisma model based on its name. It supports automatic integration\n * with Prisma services and dynamic middleware hooks for extending behaviors.\n *\n * This controller includes:\n * - `createOne` / `createMany`\n * - `findOne` / `findMany`\n * - `updateOne` / `updateMany`\n * - `deleteOne` / `deleteMany`\n *\n * It handles:\n * - Prisma query options\n * - APIFeatures: filtering, sorting, pagination, field limiting\n * - Middleware hooks: `afterCreateOne`, `afterUpdateMany`, etc.\n *\n * @class BaseController\n *\n * @param {string} modelName - The Prisma model name this controller handles.\n *\n * @see {@link https://www.arkosjs.com/docs/api-reference/the-base-controller-class}\n *--\n * **See about how Arkos handles routers**\n * @see {@link https://www.arkosjs.com/docs/guide/adding-custom-routers}\n */\nexport class BaseController {\n /**\n * Service instance to handle business logic operations\n * @private\n */\n private service: BaseService<any>;\n\n /**\n * Name of the model this controller handles\n * @private\n */\n private modelName: string;\n\n /**\n * Model-specific interceptors loaded from model modules\n * @private\n */\n private interceptors: any;\n\n /**\n * Creates a new BaseController instance\n * @param {string} modelName - The name of the model for which this controller will handle operations\n */\n constructor(modelName: string) {\n const components = getModuleComponents(modelName);\n\n this.modelName = modelName;\n this.service = new BaseService(modelName);\n this.interceptors = components?.interceptors || {};\n }\n\n /**\n * Creates a single resource\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.createOne(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (this.interceptors.afterCreateOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n res.status(201).json({ data });\n }\n );\n\n /**\n * Creates multiple resources in a single operation\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.createMany(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data)\n return next(\n new AppError(\n \"Failed to create the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterCreateMany) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n res.status(201).json({ data });\n }\n );\n\n /**\n * Retrieves multiple resources with filtering, sorting, pagination, and field selection\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(req, this.modelName)\n .filter()\n .sort()\n .limitFields()\n .paginate().filters;\n\n const [data, total] = (await Promise.all([\n this.service.findMany(where, queryOptions, {\n user: req?.user,\n accessToken: req?.accessToken,\n }),\n this.service.count(where, {\n user: req?.user,\n accessToken: req?.accessToken,\n }),\n ])) as [Record<string, any>[], number];\n\n if (this.interceptors.afterFindMany) {\n req.responseData = { total, results: data.length, data };\n res.locals.data = { total, results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ total, results: data.length, data });\n }\n );\n\n /**\n * Retrieves a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.findOne(\n req.params,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data) {\n if (\n Object.keys(req.params).length === 1 &&\n \"id\" in req.params &&\n req.params.id !== \"me\"\n ) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterFindOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.updateOne(\n req.params,\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data) {\n if (Object.keys(req.params).length === 1 && \"id\" in req.params) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterUpdateOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (!Object.keys(req.query).some((key) => key !== \"prismaQueryOptions\")) {\n return next(\n new AppError(\n \"Filter criteria not provided for bulk update.\",\n 400,\n {},\n \"MissingRequestQueryParameters\"\n )\n );\n }\n\n if (req.query.filterMode === \"OR\")\n throw new AppError(\n \"req.query.filterMode === OR is not valid for update many operation\",\n 400\n );\n\n req.query.filterMode = \"AND\";\n const { where, ...queryOptions } = new APIFeatures(req, this.modelName)\n .filter()\n .sort()\n .limitFields()\n .paginate().filters;\n\n delete queryOptions.include;\n\n const data = (await this.service.updateMany(\n where,\n req.body,\n queryOptions,\n { user: req?.user, accessToken: req?.accessToken }\n )) as { count: number };\n\n if (!data || data.count === 0)\n return next(\n new AppError(\n `${pluralize(pascalCase(String(this.modelName)))} not found`,\n 404\n )\n );\n\n if (this.interceptors.afterUpdateMany) {\n req.responseData = { results: data.count, data };\n res.locals.data = { results: data.count, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.count, data });\n }\n );\n\n /**\n * Updates multiple resources with different data in a single transaction\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n batchUpdate = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.batchUpdate(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data || data.length === 0)\n return next(\n new AppError(\n \"Failed to update the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterBatchUpdate) {\n req.responseData = { results: data.length, data };\n res.locals.data = { results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.length, data });\n }\n );\n\n /**\n * Deletes a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.service.deleteOne(req.params, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data) {\n if (Object.keys(req.params).length === 1 && \"id\" in req.params) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterDeleteOne) {\n req.additionalData = { data };\n res.locals.additionalData = { data };\n req.responseStatus = 204;\n res.locals.status = 204;\n return next();\n }\n\n res.status(204).send();\n }\n );\n\n /**\n * Deletes multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (!Object.keys(req.query).some((key) => key !== \"prismaQueryOptions\")) {\n return next(\n new AppError(\n \"Filter criteria not provided for bulk deletion.\",\n 400,\n {},\n \"MissingRequestQueryParameters\"\n )\n );\n }\n\n if (req.query.filterMode === \"OR\")\n throw new AppError(\n \"req.query.filterMode === OR is not valid for delete many operation\",\n 400\n );\n\n req.query.filterMode = \"AND\";\n const { where } = new APIFeatures(req, this.modelName).filter().filters;\n\n const data = await this.service.deleteMany(where, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data || data.count === 0) {\n return next(\n new AppError(`No records found to delete`, 404, {}, \"NotFound\")\n );\n }\n\n if (this.interceptors.afterDeleteMany) {\n req.responseData = { results: data.count, data };\n res.locals.data = { results: data.count, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.count, data });\n }\n );\n\n /**\n * Deletes multiple resources with different filters in a single transaction\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n batchDelete = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.service.batchDelete(req.body, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data || data.length === 0)\n return next(\n new AppError(\n \"Failed to delete the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterBatchDelete) {\n req.responseData = { results: data.length, data };\n res.locals.data = { results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.length, data });\n }\n );\n}\n\n/**\n * Returns a list of all available resource endpoints based on the application's models\n *\n * Will soon be removed\n *\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\nexport const getAvailableResources = catchAsync(\n async (_: any, res: ArkosResponse) => {\n sheu.warn(\n \"This route `/api/available-resources` will be deprecated from 1.4.0-beta, consider using /api/auth-actions instead.\"\n );\n\n res.status(200).json({\n data: [\n ...prismaSchemaParser\n .getModelsAsArrayOfStrings()\n .map((model) => kebabCase(model)),\n \"file-upload\",\n ],\n });\n }\n);\n"]}
1
+ {"version":3,"file":"base.controller.js","sourceRoot":"","sources":["../../../../src/modules/base/base.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport { BaseService } from \"./base.service\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { kebabCase, pascalCase } from \"../../utils/helpers/change-case.helpers\";\nimport { getModuleComponents } from \"../../utils/dynamic-loader\";\nimport pluralize from \"pluralize\";\nimport sheu from \"../../utils/sheu\";\nimport prismaSchemaParser from \"../../utils/prisma/prisma-schema-parser\";\nimport { APIFeatures } from \"../../exports/utils\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\n\n/**\n * The `BaseController` class provides standardized RESTful API endpoints\n * for any Prisma model based on its name. It supports automatic integration\n * with Prisma services and dynamic middleware hooks for extending behaviors.\n *\n * This controller includes:\n * - `createOne` / `createMany`\n * - `findOne` / `findMany`\n * - `updateOne` / `updateMany`\n * - `deleteOne` / `deleteMany`\n *\n * It handles:\n * - Prisma query options\n * - APIFeatures: filtering, sorting, pagination, field limiting\n * - Middleware hooks: `afterCreateOne`, `afterUpdateMany`, etc.\n *\n * @class BaseController\n *\n * @param {string} modelName - The Prisma model name this controller handles.\n *\n * @see {@link https://www.arkosjs.com/docs/api-reference/the-base-controller-class}\n *--\n * **See about how Arkos handles routers**\n * @see {@link https://www.arkosjs.com/docs/guide/adding-custom-routers}\n */\nexport class BaseController {\n /**\n * Service instance to handle business logic operations\n * @private\n */\n private service: BaseService<any>;\n\n /**\n * Name of the model this controller handles\n * @private\n */\n private modelName: string;\n\n /**\n * Model-specific interceptors loaded from model modules\n * @private\n */\n private interceptors: any;\n\n /**\n * Creates a new BaseController instance\n * @param {string} modelName - The name of the model for which this controller will handle operations\n */\n constructor(modelName: string) {\n const components = getModuleComponents(modelName);\n\n this.modelName = modelName;\n this.service = new BaseService(modelName);\n this.interceptors = components?.interceptors || {};\n }\n\n /**\n * Creates a single resource\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.createOne(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (this.interceptors.afterCreateOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n res.status(201).json({ data });\n }\n );\n\n /**\n * Creates multiple resources in a single operation\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.createMany(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data)\n return next(\n new AppError(\n \"Failed to create the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterCreateMany) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n res.status(201).json({ data });\n }\n );\n\n /**\n * Retrieves multiple resources with filtering, sorting, pagination, and field selection\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(req, this.modelName)\n .filter()\n .sort()\n .limitFields()\n .paginate().filters;\n\n const [data, total] = (await Promise.all([\n this.service.findMany(where, queryOptions, {\n user: req?.user,\n accessToken: req?.accessToken,\n }),\n this.service.count(where, {\n user: req?.user,\n accessToken: req?.accessToken,\n }),\n ])) as [Record<string, any>[], number];\n\n if (this.interceptors.afterFindMany) {\n req.responseData = { total, results: data.length, data };\n res.locals.data = { total, results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ total, results: data.length, data });\n }\n );\n\n /**\n * Retrieves a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.findOne(\n req.params,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data) {\n if (\n Object.keys(req.params).length === 1 &&\n \"id\" in req.params &&\n req.params.id !== \"me\"\n ) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterFindOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.updateOne(\n req.params,\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data) {\n if (Object.keys(req.params).length === 1 && \"id\" in req.params) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterUpdateOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (\n Object.keys(req.query).every((key) =>\n [\"filterMode\", \"prismaQueryOptions\"].includes(key)\n )\n ) {\n return next(\n new AppError(\n \"Filter criteria not provided for bulk update.\",\n 400,\n {},\n \"MissingRequestQueryParameters\"\n )\n );\n }\n\n if (req.query.filterMode === \"OR\")\n throw new AppError(\n \"req.query.filterMode === OR is not valid for update many operation\",\n 400\n );\n\n req.query.filterMode = \"AND\";\n const { where, ...queryOptions } = new APIFeatures(req, this.modelName)\n .filter()\n .sort()\n .limitFields()\n .paginate().filters;\n\n delete queryOptions.include;\n\n const data = (await this.service.updateMany(\n where,\n req.body,\n queryOptions,\n { user: req?.user, accessToken: req?.accessToken }\n )) as { count: number };\n\n if (!data || data.count === 0)\n return next(\n new AppError(\n `${pluralize(pascalCase(String(this.modelName)))} not found`,\n 404\n )\n );\n\n if (this.interceptors.afterUpdateMany) {\n req.responseData = { results: data.count, data };\n res.locals.data = { results: data.count, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.count, data });\n }\n );\n\n /**\n * Updates multiple resources with different data in a single transaction\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n batchUpdate = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.batchUpdate(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data || data.length === 0)\n return next(\n new AppError(\n \"Failed to update the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterBatchUpdate) {\n req.responseData = { results: data.length, data };\n res.locals.data = { results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.length, data });\n }\n );\n\n /**\n * Deletes a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.service.deleteOne(req.params, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data) {\n if (Object.keys(req.params).length === 1 && \"id\" in req.params) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterDeleteOne) {\n req.additionalData = { data };\n res.locals.additionalData = { data };\n req.responseStatus = 204;\n res.locals.status = 204;\n return next();\n }\n\n res.status(204).send();\n }\n );\n\n /**\n * Deletes multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (\n Object.keys(req.query).every((key) =>\n [\"filterMode\", \"prismaQueryOptions\"].includes(key)\n )\n ) {\n return next(\n new AppError(\n \"Filter criteria not provided for bulk deletion.\",\n 400,\n {},\n \"MissingRequestQueryParameters\"\n )\n );\n }\n\n if (req.query.filterMode === \"OR\")\n throw new AppError(\n \"req.query.filterMode === OR is not valid for delete many operation\",\n 400\n );\n\n req.query.filterMode = \"AND\";\n const { where } = new APIFeatures(req, this.modelName).filter().filters;\n\n const data = await this.service.deleteMany(where, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data || data.count === 0) {\n return next(\n new AppError(`No records found to delete`, 404, {}, \"NotFound\")\n );\n }\n\n if (this.interceptors.afterDeleteMany) {\n req.responseData = { results: data.count, data };\n res.locals.data = { results: data.count, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.count, data });\n }\n );\n\n /**\n * Deletes multiple resources with different filters in a single transaction\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n batchDelete = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.service.batchDelete(req.body, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data || data.length === 0)\n return next(\n new AppError(\n \"Failed to delete the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterBatchDelete) {\n req.responseData = { results: data.length, data };\n res.locals.data = { results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.length, data });\n }\n );\n}\n\n/**\n * Returns a list of all available resource endpoints based on the application's models\n *\n * Will soon be removed\n *\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\nexport const getAvailableResources = catchAsync(\n async (_: any, res: ArkosResponse) => {\n sheu.warn(\n \"This route `/api/available-resources` will be deprecated from 1.4.0-beta, consider using /api/auth-actions instead.\"\n );\n\n res.status(200).json({\n data: [\n ...prismaSchemaParser\n .getModelsAsArrayOfStrings()\n .map((model) => kebabCase(model)),\n \"file-upload\",\n ],\n });\n }\n);\n"]}
@@ -19,6 +19,6 @@ function killServerChildProcess() {
19
19
  (0, start_1.killProductionServerChildProcess)();
20
20
  }
21
21
  function getVersion() {
22
- return "1.3.4-canary.4";
22
+ return "1.3.4-canary.5";
23
23
  }
24
24
  //# sourceMappingURL=cli.helpers.js.map
@@ -81,7 +81,7 @@ function generateHooksTemplate(options) {
81
81
  const args = isTypeScript
82
82
  ? `{ ${params.join(", ")} }: ${argsType}`
83
83
  : `{ ${params.join(", ")} }`;
84
- return `async function (${args}) {}`;
84
+ return `async (${args}) => {}`;
85
85
  };
86
86
  const hooks = `
87
87
  // export const beforeFindOne = [
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/hooks-template.ts"],"names":[],"mappings":"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","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\n// Main function to generate hooks template based on provided options\nexport default function generateHooksTemplate(\n options: TemplateOptions\n): string {\n const { modelName } = options;\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName) throw new Error(\"Module name is required for hooks template\");\n\n const baseImports = isTypeScript\n ? `// import { \n// BeforeFindOneHookArgs, \n// AfterFindOneHookArgs, \n// BeforeUpdateOneHookArgs, \n// AfterUpdateOneHookArgs,\n// BeforeCreateOneHookArgs,\n// AfterCreateOneHookArgs,\n// BeforeCreateManyHookArgs,\n// AfterCreateManyHookArgs,\n// BeforeCountHookArgs,\n// AfterCountHookArgs,\n// BeforeFindManyHookArgs,\n// AfterFindManyHookArgs,\n// BeforeUpdateManyHookArgs,\n// AfterUpdateManyHookArgs,\n// BeforeDeleteOneHookArgs,\n// AfterDeleteOneHookArgs,\n// BeforeDeleteManyHookArgs,\n// AfterDeleteManyHookArgs,\n// OnCreateOneErrorHookArgs,\n// OnCreateManyErrorHookArgs,\n// OnCountErrorHookArgs,\n// OnFindManyErrorHookArgs,\n// OnFindByIdErrorHookArgs,\n// OnFindOneErrorHookArgs,\n// OnUpdateOneErrorHookArgs,\n// OnUpdateManyErrorHookArgs,\n// OnDeleteOneErrorHookArgs,\n// OnDeleteManyErrorHookArgs\n// } from \"arkos/services\";`\n : ``;\n\n const serviceImport = `\"./${modelName.kebab}.service${ext === \"ts\" ? \"\" : \".\" + \"js\"}\";`;\n\n const getHookArgsType = (hookName: string) => {\n if (!isTypeScript) return \"\";\n\n const typeMap: Record<string, string> = {\n beforeFindOne: `BeforeFindOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterFindOne: `AfterFindOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeUpdateOne: `BeforeUpdateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterUpdateOne: `AfterUpdateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCreateOne: `BeforeCreateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCreateOne: `AfterCreateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCreateMany: `BeforeCreateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCreateMany: `AfterCreateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCount: `BeforeCountHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCount: `AfterCountHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeFindMany: `BeforeFindManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterFindMany: `AfterFindManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeUpdateMany: `BeforeUpdateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterUpdateMany: `AfterUpdateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeDeleteOne: `BeforeDeleteOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterDeleteOne: `AfterDeleteOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeDeleteMany: `BeforeDeleteManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterDeleteMany: `AfterDeleteManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n // Error hook types\n onCreateOneError: `OnCreateOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onCreateManyError: `OnCreateManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onCountError: `OnCountErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindManyError: `OnFindManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindByIdError: `OnFindByIdErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindOneError: `OnFindOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onUpdateOneError: `OnUpdateOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onUpdateManyError: `OnUpdateManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onDeleteOneError: `OnDeleteOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onDeleteManyError: `OnDeleteManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n };\n\n return typeMap[hookName];\n };\n\n const generateHookFunction = (hookName: string, params: string[]) => {\n const argsType = getHookArgsType(hookName);\n const args = isTypeScript\n ? `{ ${params.join(\", \")} }: ${argsType}`\n : `{ ${params.join(\", \")} }`;\n return `async function (${args}) {}`;\n };\n\n const hooks = `\n// export const beforeFindOne = [\n// ${generateHookFunction(\"beforeFindOne\", [\"context\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const afterFindOne = [\n// ${generateHookFunction(\"afterFindOne\", [\"context\", \"result\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const onFindOneError = [\n// ${generateHookFunction(\"onFindOneError\", [\"context\", \"error\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const beforeUpdateOne = [\n// ${generateHookFunction(\"beforeUpdateOne\", [\"context\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterUpdateOne = [\n// ${generateHookFunction(\"afterUpdateOne\", [\"context\", \"result\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onUpdateOneError = [\n// ${generateHookFunction(\"onUpdateOneError\", [\"context\", \"error\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCreateOne = [\n// ${generateHookFunction(\"beforeCreateOne\", [\"context\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterCreateOne = [\n// ${generateHookFunction(\"afterCreateOne\", [\"context\", \"result\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onCreateOneError = [\n// ${generateHookFunction(\"onCreateOneError\", [\"context\", \"error\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCreateMany = [\n// ${generateHookFunction(\"beforeCreateMany\", [\"context\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterCreateMany = [\n// ${generateHookFunction(\"afterCreateMany\", [\"context\", \"result\", \"queryOptions\"])}\n// ];\n\n// export const onCreateManyError = [\n// ${generateHookFunction(\"onCreateManyError\", [\"context\", \"error\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCount = [\n// ${generateHookFunction(\"beforeCount\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterCount = [\n// ${generateHookFunction(\"afterCount\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onCountError = [\n// ${generateHookFunction(\"onCountError\", [\"context\", \"error\", \"filters\"])}\n// ];\n\n// export const beforeFindMany = [\n// ${generateHookFunction(\"beforeFindMany\", [\"context\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const afterFindMany = [\n// ${generateHookFunction(\"afterFindMany\", [\"context\", \"result\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const onFindManyError = [\n// ${generateHookFunction(\"onFindManyError\", [\"context\", \"error\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const beforeUpdateMany = [\n// ${generateHookFunction(\"beforeUpdateMany\", [\"context\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterUpdateMany = [\n// ${generateHookFunction(\"afterUpdateMany\", [\"context\", \"result\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onUpdateManyError = [\n// ${generateHookFunction(\"onUpdateManyError\", [\"context\", \"error\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeDeleteOne = [\n// ${generateHookFunction(\"beforeDeleteOne\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterDeleteOne = [\n// ${generateHookFunction(\"afterDeleteOne\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onDeleteOneError = [\n// ${generateHookFunction(\"onDeleteOneError\", [\"context\", \"error\", \"filters\"])}\n// ];\n\n// export const beforeDeleteMany = [\n// ${generateHookFunction(\"beforeDeleteMany\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterDeleteMany = [\n// ${generateHookFunction(\"afterDeleteMany\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onDeleteManyError = [\n// ${generateHookFunction(\"onDeleteManyError\", [\"context\", \"error\", \"filters\"])}\n// ];\n`;\n\n return `${baseImports}\n// import { Prisma } from \"@prisma/client\"\n// import ${modelName.camel}Service from ${serviceImport}\n\n${hooks}`;\n}\n"]}
1
+ {"version":3,"file":"hooks-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/hooks-template.ts"],"names":[],"mappings":"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","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\n// Main function to generate hooks template based on provided options\nexport default function generateHooksTemplate(\n options: TemplateOptions\n): string {\n const { modelName } = options;\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName) throw new Error(\"Module name is required for hooks template\");\n\n const baseImports = isTypeScript\n ? `// import { \n// BeforeFindOneHookArgs, \n// AfterFindOneHookArgs, \n// BeforeUpdateOneHookArgs, \n// AfterUpdateOneHookArgs,\n// BeforeCreateOneHookArgs,\n// AfterCreateOneHookArgs,\n// BeforeCreateManyHookArgs,\n// AfterCreateManyHookArgs,\n// BeforeCountHookArgs,\n// AfterCountHookArgs,\n// BeforeFindManyHookArgs,\n// AfterFindManyHookArgs,\n// BeforeUpdateManyHookArgs,\n// AfterUpdateManyHookArgs,\n// BeforeDeleteOneHookArgs,\n// AfterDeleteOneHookArgs,\n// BeforeDeleteManyHookArgs,\n// AfterDeleteManyHookArgs,\n// OnCreateOneErrorHookArgs,\n// OnCreateManyErrorHookArgs,\n// OnCountErrorHookArgs,\n// OnFindManyErrorHookArgs,\n// OnFindByIdErrorHookArgs,\n// OnFindOneErrorHookArgs,\n// OnUpdateOneErrorHookArgs,\n// OnUpdateManyErrorHookArgs,\n// OnDeleteOneErrorHookArgs,\n// OnDeleteManyErrorHookArgs\n// } from \"arkos/services\";`\n : ``;\n\n const serviceImport = `\"./${modelName.kebab}.service${ext === \"ts\" ? \"\" : \".\" + \"js\"}\";`;\n\n const getHookArgsType = (hookName: string) => {\n if (!isTypeScript) return \"\";\n\n const typeMap: Record<string, string> = {\n beforeFindOne: `BeforeFindOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterFindOne: `AfterFindOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeUpdateOne: `BeforeUpdateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterUpdateOne: `AfterUpdateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCreateOne: `BeforeCreateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCreateOne: `AfterCreateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCreateMany: `BeforeCreateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCreateMany: `AfterCreateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCount: `BeforeCountHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCount: `AfterCountHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeFindMany: `BeforeFindManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterFindMany: `AfterFindManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeUpdateMany: `BeforeUpdateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterUpdateMany: `AfterUpdateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeDeleteOne: `BeforeDeleteOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterDeleteOne: `AfterDeleteOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeDeleteMany: `BeforeDeleteManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterDeleteMany: `AfterDeleteManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n // Error hook types\n onCreateOneError: `OnCreateOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onCreateManyError: `OnCreateManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onCountError: `OnCountErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindManyError: `OnFindManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindByIdError: `OnFindByIdErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindOneError: `OnFindOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onUpdateOneError: `OnUpdateOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onUpdateManyError: `OnUpdateManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onDeleteOneError: `OnDeleteOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onDeleteManyError: `OnDeleteManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n };\n\n return typeMap[hookName];\n };\n\n const generateHookFunction = (hookName: string, params: string[]) => {\n const argsType = getHookArgsType(hookName);\n const args = isTypeScript\n ? `{ ${params.join(\", \")} }: ${argsType}`\n : `{ ${params.join(\", \")} }`;\n return `async (${args}) => {}`;\n };\n\n const hooks = `\n// export const beforeFindOne = [\n// ${generateHookFunction(\"beforeFindOne\", [\"context\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const afterFindOne = [\n// ${generateHookFunction(\"afterFindOne\", [\"context\", \"result\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const onFindOneError = [\n// ${generateHookFunction(\"onFindOneError\", [\"context\", \"error\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const beforeUpdateOne = [\n// ${generateHookFunction(\"beforeUpdateOne\", [\"context\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterUpdateOne = [\n// ${generateHookFunction(\"afterUpdateOne\", [\"context\", \"result\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onUpdateOneError = [\n// ${generateHookFunction(\"onUpdateOneError\", [\"context\", \"error\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCreateOne = [\n// ${generateHookFunction(\"beforeCreateOne\", [\"context\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterCreateOne = [\n// ${generateHookFunction(\"afterCreateOne\", [\"context\", \"result\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onCreateOneError = [\n// ${generateHookFunction(\"onCreateOneError\", [\"context\", \"error\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCreateMany = [\n// ${generateHookFunction(\"beforeCreateMany\", [\"context\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterCreateMany = [\n// ${generateHookFunction(\"afterCreateMany\", [\"context\", \"result\", \"queryOptions\"])}\n// ];\n\n// export const onCreateManyError = [\n// ${generateHookFunction(\"onCreateManyError\", [\"context\", \"error\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCount = [\n// ${generateHookFunction(\"beforeCount\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterCount = [\n// ${generateHookFunction(\"afterCount\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onCountError = [\n// ${generateHookFunction(\"onCountError\", [\"context\", \"error\", \"filters\"])}\n// ];\n\n// export const beforeFindMany = [\n// ${generateHookFunction(\"beforeFindMany\", [\"context\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const afterFindMany = [\n// ${generateHookFunction(\"afterFindMany\", [\"context\", \"result\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const onFindManyError = [\n// ${generateHookFunction(\"onFindManyError\", [\"context\", \"error\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const beforeUpdateMany = [\n// ${generateHookFunction(\"beforeUpdateMany\", [\"context\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterUpdateMany = [\n// ${generateHookFunction(\"afterUpdateMany\", [\"context\", \"result\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onUpdateManyError = [\n// ${generateHookFunction(\"onUpdateManyError\", [\"context\", \"error\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeDeleteOne = [\n// ${generateHookFunction(\"beforeDeleteOne\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterDeleteOne = [\n// ${generateHookFunction(\"afterDeleteOne\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onDeleteOneError = [\n// ${generateHookFunction(\"onDeleteOneError\", [\"context\", \"error\", \"filters\"])}\n// ];\n\n// export const beforeDeleteMany = [\n// ${generateHookFunction(\"beforeDeleteMany\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterDeleteMany = [\n// ${generateHookFunction(\"afterDeleteMany\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onDeleteManyError = [\n// ${generateHookFunction(\"onDeleteManyError\", [\"context\", \"error\", \"filters\"])}\n// ];\n`;\n\n return `${baseImports}\n// import { Prisma } from \"@prisma/client\"\n// import ${modelName.camel}Service from ${serviceImport}\n\n${hooks}`;\n}\n"]}
@@ -10,8 +10,6 @@ const fs_1 = __importDefault(require("fs"));
10
10
  const app_error_1 = __importDefault(require("../../modules/error-handler/utils/app-error"));
11
11
  const fs_helpers_1 = require("./fs.helpers");
12
12
  const global_helpers_1 = require("./global.helpers");
13
- const prisma_schema_parser_1 = __importDefault(require("../prisma/prisma-schema-parser"));
14
- const change_case_helpers_1 = require("./change-case.helpers");
15
13
  exports.prismaInstance = null;
16
14
  async function loadPrismaModule() {
17
15
  if (!exports.prismaInstance) {
@@ -25,9 +23,7 @@ async function loadPrismaModule() {
25
23
  fixExtension: false,
26
24
  });
27
25
  exports.prismaInstance = prismaModule.default;
28
- if (!exports.prismaInstance ||
29
- typeof exports.prismaInstance[(0, change_case_helpers_1.pascalCase)(prisma_schema_parser_1.default.models?.[0].name)]
30
- ?.findFirst !== "function")
26
+ if (!exports.prismaInstance || typeof exports.prismaInstance?.["$connect"] !== "function")
31
27
  throw new Error("Prisma not found");
32
28
  }
33
29
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":";;;;;;AASA,4CAiCC;AAED,8CAEC;AA9CD,4CAAoB;AACpB,4FAAmE;AACnE,6CAAgE;AAChE,qDAAgD;AAChD,0FAAgE;AAChE,+DAAmD;AAExC,QAAA,cAAc,GAAQ,IAAI,CAAC;AAE/B,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,sBAAc,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,UAAU,GAAG,GAAG,IAAA,gBAAG,GAAE,qBAAqB,IAAA,iCAAG,GAAE,EAAE,CAAC;YAEtD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC5B,UAAU,GAAG,GAAG,IAAA,gBAAG,GAAE,2BAA2B,IAAA,iCAAG,GAAE,EAAE,CAAC;YAE1D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAEpE,MAAM,YAAY,GAAG,MAAM,IAAA,6BAAY,EAAC,UAAU,EAAE;gBAClD,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,sBAAc,GAAG,YAAY,CAAC,OAAO,CAAC;YAEtC,IACE,CAAC,sBAAc;gBACf,OAAO,sBAAc,CAAC,IAAA,gCAAU,EAAC,8BAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACpE,EAAE,SAAS,KAAK,UAAU;gBAE5B,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB;gBACtC,MAAM,IAAI,mBAAQ,CAChB,0HAA0H,IAAA,iCAAG,GAAE,uIAAuI,EACtQ,GAAG,EACH,EAAE,EACF,wBAAwB,CACzB,CAAC;YACJ,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,sBAAc,CAAC;AACxB,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,sBAAc,CAAC;AACxB,CAAC","sourcesContent":["import fs from \"fs\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { crd, getUserFileExtension as ext } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\nimport prismaSchemaParser from \"../prisma/prisma-schema-parser\";\nimport { pascalCase } from \"./change-case.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport async function loadPrismaModule() {\n if (!prismaInstance) {\n try {\n let prismaPath = `${crd()}/src/utils/prisma.${ext()}`;\n\n if (!fs.existsSync(prismaPath))\n prismaPath = `${crd()}/src/utils/prisma/index.${ext()}`;\n\n if (!fs.existsSync(prismaPath)) throw new Error(`Prisma not found`);\n\n const prismaModule = await importModule(prismaPath, {\n fixExtension: false,\n });\n prismaInstance = prismaModule.default;\n\n if (\n !prismaInstance ||\n typeof prismaInstance[pascalCase(prismaSchemaParser.models?.[0].name)]\n ?.findFirst !== \"function\"\n )\n throw new Error(\"Prisma not found\");\n } catch (error: any) {\n if (error.message === \"Prisma not found\")\n throw new AppError(\n `Could not initialize Prisma module. Make sure your prisma instance is exported as default under src/utils/prisma/index.${ext()}, read more about Arkos.js Project Structure under https://www.arkosjs.com/docs/getting-started/project-structure#utilities-directory`,\n 500,\n {},\n \"PrismaInstanceNotFound\"\n );\n throw error;\n }\n }\n return prismaInstance;\n}\n\nexport function getPrismaInstance() {\n return prismaInstance;\n}\n"]}
1
+ {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":";;;;;;AASA,4CA6BC;AAED,8CAEC;AA1CD,4CAAoB;AACpB,4FAAmE;AACnE,6CAAgE;AAChE,qDAAgD;AAIrC,QAAA,cAAc,GAAQ,IAAI,CAAC;AAE/B,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,sBAAc,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,UAAU,GAAG,GAAG,IAAA,gBAAG,GAAE,qBAAqB,IAAA,iCAAG,GAAE,EAAE,CAAC;YAEtD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC5B,UAAU,GAAG,GAAG,IAAA,gBAAG,GAAE,2BAA2B,IAAA,iCAAG,GAAE,EAAE,CAAC;YAE1D,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAEpE,MAAM,YAAY,GAAG,MAAM,IAAA,6BAAY,EAAC,UAAU,EAAE;gBAClD,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,sBAAc,GAAG,YAAY,CAAC,OAAO,CAAC;YAEtC,IAAI,CAAC,sBAAc,IAAI,OAAO,sBAAc,EAAE,CAAC,UAAU,CAAC,KAAK,UAAU;gBACvE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB;gBACtC,MAAM,IAAI,mBAAQ,CAChB,0HAA0H,IAAA,iCAAG,GAAE,uIAAuI,EACtQ,GAAG,EACH,EAAE,EACF,wBAAwB,CACzB,CAAC;YACJ,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,sBAAc,CAAC;AACxB,CAAC;AAED,SAAgB,iBAAiB;IAC/B,OAAO,sBAAc,CAAC;AACxB,CAAC","sourcesContent":["import fs from \"fs\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { crd, getUserFileExtension as ext } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\nimport prismaSchemaParser from \"../prisma/prisma-schema-parser\";\nimport { pascalCase } from \"./change-case.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport async function loadPrismaModule() {\n if (!prismaInstance) {\n try {\n let prismaPath = `${crd()}/src/utils/prisma.${ext()}`;\n\n if (!fs.existsSync(prismaPath))\n prismaPath = `${crd()}/src/utils/prisma/index.${ext()}`;\n\n if (!fs.existsSync(prismaPath)) throw new Error(`Prisma not found`);\n\n const prismaModule = await importModule(prismaPath, {\n fixExtension: false,\n });\n prismaInstance = prismaModule.default;\n\n if (!prismaInstance || typeof prismaInstance?.[\"$connect\"] !== \"function\")\n throw new Error(\"Prisma not found\");\n } catch (error: any) {\n if (error.message === \"Prisma not found\")\n throw new AppError(\n `Could not initialize Prisma module. Make sure your prisma instance is exported as default under src/utils/prisma/index.${ext()}, read more about Arkos.js Project Structure under https://www.arkosjs.com/docs/getting-started/project-structure#utilities-directory`,\n 500,\n {},\n \"PrismaInstanceNotFound\"\n );\n throw error;\n }\n }\n return prismaInstance;\n}\n\nexport function getPrismaInstance() {\n return prismaInstance;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import catchAsync from \"../error-handler/utils/catch-async\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { CookieOptions } from \"express\";\nimport { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport authService from \"./auth.service\";\nimport { BaseService } from \"../base/base.service\";\nimport { User } from \"../../types\";\nimport arkosEnv from \"../../utils/arkos-env\";\nimport { getArkosConfig } from \"../../server\";\nimport {\n createPrismaWhereClause,\n determineUsernameField,\n getNestedValue,\n MsDuration,\n toMs,\n} from \"./utils/helpers/auth.controller.helpers\";\nimport authActionService from \"./utils/services/auth-action.service\";\n\n/**\n * Default fields to exclude from user object when returning to client\n */\nexport const defaultExcludedUserFields = {\n password: false,\n};\n\n/**\n * Factory function to create authentication controller with configurable interceptors\n *\n * @param interceptors - Optional middleware functions to execute after controller actions\n * @returns An object containing all authentication controller methods\n */\nexport const authControllerFactory = async (interceptors: any = {}) => {\n const userService = new BaseService(\"user\");\n\n return {\n /**\n * Retrieves the current authenticated user's information\n */\n getMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const user = (await userService.findOne(\n { id: req.user!.id },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (interceptors?.afterGetMe) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Updates the current authenticated user's information\n */\n updateMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n if (\"password\" in req.body)\n throw new AppError(\n \"In order to update password use the update-password endpoint.\",\n 400,\n {},\n \"InvalidFieldPassword\"\n );\n\n const user = (await userService.updateOne(\n { id: req.user!.id },\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (interceptors?.afterUpdateMe) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Logs out the current user by invalidating their access token cookie\n */\n logout: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n res.cookie(\"arkos_access_token\", \"no-token\", {\n expires: new Date(Date.now() + 10 * 1000),\n httpOnly: true,\n });\n\n if (interceptors?.afterLogout) {\n req.responseData = null;\n res.locals.data = null;\n req.responseStatus = 204;\n res.locals.status = 204;\n return next();\n }\n\n res.status(204).json();\n }\n ),\n\n /**\n * Authenticates a user using configurable username field and password\n * Username field can be specified in query parameter or config\n *\n * Supports nested fields and array queries (e.g., \"profile.nickname\", \"phones.some.number\")\n */\n login: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const authConfigs = getArkosConfig()?.authentication;\n\n const usernameField = determineUsernameField(req);\n\n // For the error message, we only care about the top-level field name\n const lastField =\n usernameField.split(\".\")[usernameField.split(\".\").length - 1];\n\n const usernameValue = req.body[lastField];\n\n const { password } = req.body;\n\n if (!usernameValue || !password)\n return next(\n new AppError(`Please provide both ${lastField} and password`, 400)\n );\n\n // Create appropriate where clause for the query\n let whereClause: Record<string, any>;\n\n if (usernameField?.includes?.(\".\")) {\n // For nested paths, we need to extract the actual value to search for\n const valueToFind = getNestedValue(req.body, usernameField);\n if (valueToFind === undefined) {\n return next(new AppError(`Invalid ${usernameField} provided`, 400));\n }\n whereClause = createPrismaWhereClause(usernameField, valueToFind);\n } else {\n // Simple field case\n whereClause = { [usernameField]: usernameValue };\n }\n\n // Use findFirst instead of findUnique for complex queries\n const user = (await userService.findOne(\n whereClause,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (\n !user ||\n !(await authService.isCorrectPassword(password, user.password))\n ) {\n return next(new AppError(`Incorrect ${lastField} or password`, 401));\n }\n\n const token = authService.signJwtToken(user.id!);\n\n const cookieOptions: CookieOptions = {\n expires: new Date(\n Date.now() +\n Number(\n toMs(\n authConfigs?.jwt?.expiresIn ||\n (process.env.JWT_EXPIRES_IN as MsDuration) ||\n (arkosEnv.JWT_EXPIRES_IN as MsDuration)\n )\n )\n ),\n httpOnly:\n authConfigs?.jwt?.cookie?.httpOnly ||\n process.env.JWT_COOKIE_HTTP_ONLY === \"true\" ||\n true,\n secure:\n authConfigs?.jwt?.cookie?.secure ||\n process.env.JWT_COOKIE_SECURE === \"true\" ||\n req.secure ||\n req.headers[\"x-forwarded-proto\"] === \"https\",\n sameSite:\n authConfigs?.jwt?.cookie?.sameSite ||\n (process.env.JWT_COOKIE_SAME_SITE as\n | \"none\"\n | \"lax\"\n | \"strict\"\n | undefined) ||\n (process.env.NODE_ENV === \"production\" ? \"none\" : \"lax\"),\n };\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n req.responseData = { accessToken: token };\n res.locals.data = { accessToken: token };\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n\n req.accessToken = token;\n\n if (interceptors?.afterLogin) {\n req.additionalData = { user };\n res.locals.additional = { user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n res.status(200).json(req.responseData);\n } else if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.status(200).send();\n }\n ),\n\n /**\n * Creates a new user account using the userService\n */\n signup: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const user = (await userService.createOne(\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (interceptors?.afterSignup) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete user[key as keyof User];\n });\n\n res.status(201).json({ data: user });\n }\n ),\n /**\n * Marks user account as self-deleted by setting deletedSelfAccountAt timestamp\n */\n deleteMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const userId = req.user!.id; // Assuming the authenticated user's ID is available in req.user\n\n const updatedUser = (await userService.updateOne(\n { id: userId },\n {\n deletedSelfAccountAt: new Date().toISOString(),\n },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (interceptors?.afterDeleteMe) {\n req.responseData = { data: updatedUser };\n res.locals.data = { data: updatedUser };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete updatedUser[key as keyof User];\n });\n\n res.status(200).json({\n message: \"Account deleted successfully\",\n });\n }\n ),\n\n /**\n * Updates the password of the authenticated user\n */\n updatePassword: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const { currentPassword, newPassword } = req.body;\n\n if (!currentPassword || !newPassword)\n return next(\n new AppError(\"currentPassword and newPassword are required\", 400)\n );\n\n const user = req.user;\n\n if (!user || user?.isActive === false || user?.deletedSelfAccountAt)\n return next(new AppError(\"User not found!\", 404));\n\n // Check if the current password is correct\n const isPasswordCorrect = await authService.isCorrectPassword(\n String(currentPassword),\n String(user.password)\n );\n\n const configs = getArkosConfig();\n const initAuthConfigs = configs?.authentication;\n\n if (!isPasswordCorrect)\n return next(new AppError(\"Current password is incorrect.\", 400));\n\n // Check password strength (optional but recommended)\n if (\n !authService.isPasswordStrong(String(newPassword)) &&\n !configs?.validation\n ) {\n return next(\n new AppError(\n initAuthConfigs?.passwordValidation?.message ||\n \"The new password must contain at least one uppercase letter, one lowercase letter, and one number\",\n 400\n )\n );\n }\n\n // Update the password\n await userService.updateOne(\n { id: user.id },\n {\n password: await authService.hashPassword(newPassword),\n passwordChangedAt: new Date(Date.now()),\n }\n );\n\n if (interceptors?.afterUpdatePassword) {\n req.additionalData = {\n user,\n };\n req.responseData = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n res.locals.data = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({\n status: \"success\",\n message: \"Password updated successfully!\",\n });\n }\n ),\n\n findManyAuthAction: catchAsync(\n async (_: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const authActions = authActionService.getAll()?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n ),\n\n findOneAuthAction: catchAsync(\n async (req: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const resourceName = req.params?.resourceName;\n\n if (!resourceName)\n throw new AppError(`Please provide a resoureName`, 400);\n\n const authActions = authActionService\n .getByResource(req.params?.resourceName)\n ?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n if (!authActions)\n throw new AppError(\n `No auth action with resource name ${resourceName}`,\n 404\n );\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n ),\n };\n};\n"]}
1
+ {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import catchAsync from \"../error-handler/utils/catch-async\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { CookieOptions } from \"express\";\nimport { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport authService from \"./auth.service\";\nimport { BaseService } from \"../base/base.service\";\nimport { User } from \"../../types\";\nimport arkosEnv from \"../../utils/arkos-env\";\nimport { getArkosConfig } from \"../../server\";\nimport {\n createPrismaWhereClause,\n determineUsernameField,\n getNestedValue,\n MsDuration,\n toMs,\n} from \"./utils/helpers/auth.controller.helpers\";\nimport authActionService from \"./utils/services/auth-action.service\";\n\n/**\n * Default fields to exclude from user object when returning to client\n */\nexport const defaultExcludedUserFields = {\n password: false,\n};\n\n/**\n * Factory function to create authentication controller with configurable interceptors\n *\n * @param interceptors - Optional middleware functions to execute after controller actions\n * @returns An object containing all authentication controller methods\n */\nexport const authControllerFactory = async (interceptors: any = {}) => {\n const userService = new BaseService(\"user\");\n\n return {\n /**\n * Retrieves the current authenticated user's information\n */\n getMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const user = (await userService.findOne(\n { id: req.user!.id },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (interceptors?.afterGetMe) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Updates the current authenticated user's information\n */\n updateMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n if (\"password\" in req.body)\n throw new AppError(\n \"In order to update password use the update-password endpoint.\",\n 400,\n {},\n \"InvalidFieldPassword\"\n );\n\n const user = (await userService.updateOne(\n { id: req.user!.id },\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (interceptors?.afterUpdateMe) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n ),\n\n /**\n * Logs out the current user by invalidating their access token cookie\n */\n logout: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n res.cookie(\"arkos_access_token\", \"no-token\", {\n expires: new Date(Date.now() + 10 * 1000),\n httpOnly: true,\n });\n\n if (interceptors?.afterLogout) {\n req.responseData = null;\n res.locals.data = null;\n req.responseStatus = 204;\n res.locals.status = 204;\n return next();\n }\n\n res.status(204).json();\n }\n ),\n\n /**\n * Authenticates a user using configurable username field and password\n * Username field can be specified in query parameter or config\n *\n * Supports nested fields and array queries (e.g., \"profile.nickname\", \"phones.some.number\")\n */\n login: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const authConfigs = getArkosConfig()?.authentication;\n\n const usernameField = determineUsernameField(req);\n\n // For the error message, we only care about the top-level field name\n const lastField =\n usernameField.split(\".\")[usernameField.split(\".\").length - 1];\n\n const usernameValue = req.body[lastField];\n\n const { password } = req.body;\n\n if (!usernameValue || !password)\n return next(\n new AppError(`Please provide both ${lastField} and password`, 400)\n );\n\n // Create appropriate where clause for the query\n let whereClause: Record<string, any>;\n\n if (usernameField?.includes?.(\".\")) {\n // For nested paths, we need to extract the actual value to search for\n const valueToFind = getNestedValue(req.body, usernameField);\n if (valueToFind === undefined) {\n return next(new AppError(`Invalid ${usernameField} provided`, 400));\n }\n whereClause = createPrismaWhereClause(usernameField, valueToFind);\n } else {\n // Simple field case\n whereClause = { [usernameField]: usernameValue };\n }\n\n // Use findFirst instead of findUnique for complex queries\n const user = (await userService.findOne(\n whereClause,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (\n !user ||\n !(await authService.isCorrectPassword(password, user.password))\n ) {\n return next(new AppError(`Incorrect ${lastField} or password`, 401));\n }\n\n const token = authService.signJwtToken(user.id!);\n\n const cookieOptions: CookieOptions = {\n expires: new Date(\n Date.now() +\n Number(\n toMs(\n authConfigs?.jwt?.expiresIn ||\n (process.env.JWT_EXPIRES_IN as MsDuration) ||\n (arkosEnv.JWT_EXPIRES_IN as MsDuration)\n )\n )\n ),\n httpOnly:\n authConfigs?.jwt?.cookie?.httpOnly ||\n process.env.JWT_COOKIE_HTTP_ONLY === \"true\" ||\n true,\n secure:\n authConfigs?.jwt?.cookie?.secure ||\n process.env.JWT_COOKIE_SECURE === \"true\" ||\n req.secure ||\n req.headers[\"x-forwarded-proto\"] === \"https\",\n sameSite:\n authConfigs?.jwt?.cookie?.sameSite ||\n (process.env.JWT_COOKIE_SAME_SITE as\n | \"none\"\n | \"lax\"\n | \"strict\"\n | undefined) ||\n (process.env.NODE_ENV === \"production\" ? \"none\" : \"lax\"),\n };\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n req.responseData = { accessToken: token };\n res.locals.data = { accessToken: token };\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n\n req.accessToken = token;\n\n if (interceptors?.afterLogin) {\n req.additionalData = { user };\n res.locals.additional = { user };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n res.status(200).json(req.responseData);\n } else if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.status(200).send();\n }\n ),\n\n /**\n * Creates a new user account using the userService\n */\n signup: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const user = (await userService.createOne(\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (interceptors?.afterSignup) {\n req.responseData = { data: user };\n res.locals.data = { data: user };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete user[key as keyof User];\n });\n\n res.status(201).json({ data: user });\n }\n ),\n /**\n * Marks user account as self-deleted by setting deletedSelfAccountAt timestamp\n */\n deleteMe: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const userId = req.user!.id;\n\n const updatedUser = (await userService.updateOne(\n { id: userId },\n {\n deletedSelfAccountAt: new Date().toISOString(),\n },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (interceptors?.afterDeleteMe) {\n req.responseData = { data: updatedUser };\n res.locals.data = { data: updatedUser };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete updatedUser[key as keyof User];\n });\n\n res.status(200).json({\n message: \"Account deleted successfully\",\n });\n }\n ),\n\n /**\n * Updates the password of the authenticated user\n */\n updatePassword: catchAsync(\n async (\n req: ArkosRequest,\n res: ArkosResponse,\n next: ArkosNextFunction\n ) => {\n const { currentPassword, newPassword } = req.body;\n\n if (!currentPassword || !newPassword)\n return next(\n new AppError(\"currentPassword and newPassword are required\", 400)\n );\n\n const user = req.user;\n\n if (!user || user?.isActive === false || user?.deletedSelfAccountAt)\n return next(new AppError(\"User not found!\", 404));\n\n // Check if the current password is correct\n const isPasswordCorrect = await authService.isCorrectPassword(\n String(currentPassword),\n String(user.password)\n );\n\n const configs = getArkosConfig();\n const initAuthConfigs = configs?.authentication;\n\n if (!isPasswordCorrect)\n return next(new AppError(\"Current password is incorrect.\", 400));\n\n // Check password strength (optional but recommended)\n if (\n !authService.isPasswordStrong(String(newPassword)) &&\n !configs?.validation\n ) {\n return next(\n new AppError(\n initAuthConfigs?.passwordValidation?.message ||\n \"The new password must contain at least one uppercase letter, one lowercase letter, and one number\",\n 400\n )\n );\n }\n\n // Update the password\n await userService.updateOne(\n { id: user.id },\n {\n password: await authService.hashPassword(newPassword),\n passwordChangedAt: new Date(Date.now()),\n }\n );\n\n if (interceptors?.afterUpdatePassword) {\n req.additionalData = {\n user,\n };\n req.responseData = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n res.locals.data = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({\n status: \"success\",\n message: \"Password updated successfully!\",\n });\n }\n ),\n\n findManyAuthAction: catchAsync(\n async (_: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const authActions = authActionService.getAll()?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n ),\n\n findOneAuthAction: catchAsync(\n async (req: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const resourceName = req.params?.resourceName;\n\n if (!resourceName)\n throw new AppError(`Please provide a resoureName`, 400);\n\n const authActions = authActionService\n .getByResource(req.params?.resourceName)\n ?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n if (!authActions)\n throw new AppError(\n `No auth action with resource name ${resourceName}`,\n 404\n );\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n ),\n };\n};\n"]}
@@ -104,7 +104,7 @@ export class BaseController {
104
104
  res.status(200).json({ data });
105
105
  });
106
106
  this.updateMany = catchAsync(async (req, res, next) => {
107
- if (!Object.keys(req.query).some((key) => key !== "prismaQueryOptions")) {
107
+ if (Object.keys(req.query).every((key) => ["filterMode", "prismaQueryOptions"].includes(key))) {
108
108
  return next(new AppError("Filter criteria not provided for bulk update.", 400, {}, "MissingRequestQueryParameters"));
109
109
  }
110
110
  if (req.query.filterMode === "OR")
@@ -165,7 +165,7 @@ export class BaseController {
165
165
  res.status(204).send();
166
166
  });
167
167
  this.deleteMany = catchAsync(async (req, res, next) => {
168
- if (!Object.keys(req.query).some((key) => key !== "prismaQueryOptions")) {
168
+ if (Object.keys(req.query).every((key) => ["filterMode", "prismaQueryOptions"].includes(key))) {
169
169
  return next(new AppError("Filter criteria not provided for bulk deletion.", 400, {}, "MissingRequestQueryParameters"));
170
170
  }
171
171
  if (req.query.filterMode === "OR")
@@ -1 +1 @@
1
- {"version":3,"file":"base.controller.js","sourceRoot":"","sources":["../../../../src/modules/base/base.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport { BaseService } from \"./base.service\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { kebabCase, pascalCase } from \"../../utils/helpers/change-case.helpers\";\nimport { getModuleComponents } from \"../../utils/dynamic-loader\";\nimport pluralize from \"pluralize\";\nimport sheu from \"../../utils/sheu\";\nimport prismaSchemaParser from \"../../utils/prisma/prisma-schema-parser\";\nimport { APIFeatures } from \"../../exports/utils\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\n\n/**\n * The `BaseController` class provides standardized RESTful API endpoints\n * for any Prisma model based on its name. It supports automatic integration\n * with Prisma services and dynamic middleware hooks for extending behaviors.\n *\n * This controller includes:\n * - `createOne` / `createMany`\n * - `findOne` / `findMany`\n * - `updateOne` / `updateMany`\n * - `deleteOne` / `deleteMany`\n *\n * It handles:\n * - Prisma query options\n * - APIFeatures: filtering, sorting, pagination, field limiting\n * - Middleware hooks: `afterCreateOne`, `afterUpdateMany`, etc.\n *\n * @class BaseController\n *\n * @param {string} modelName - The Prisma model name this controller handles.\n *\n * @see {@link https://www.arkosjs.com/docs/api-reference/the-base-controller-class}\n *--\n * **See about how Arkos handles routers**\n * @see {@link https://www.arkosjs.com/docs/guide/adding-custom-routers}\n */\nexport class BaseController {\n /**\n * Service instance to handle business logic operations\n * @private\n */\n private service: BaseService<any>;\n\n /**\n * Name of the model this controller handles\n * @private\n */\n private modelName: string;\n\n /**\n * Model-specific interceptors loaded from model modules\n * @private\n */\n private interceptors: any;\n\n /**\n * Creates a new BaseController instance\n * @param {string} modelName - The name of the model for which this controller will handle operations\n */\n constructor(modelName: string) {\n const components = getModuleComponents(modelName);\n\n this.modelName = modelName;\n this.service = new BaseService(modelName);\n this.interceptors = components?.interceptors || {};\n }\n\n /**\n * Creates a single resource\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.createOne(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (this.interceptors.afterCreateOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n res.status(201).json({ data });\n }\n );\n\n /**\n * Creates multiple resources in a single operation\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.createMany(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data)\n return next(\n new AppError(\n \"Failed to create the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterCreateMany) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n res.status(201).json({ data });\n }\n );\n\n /**\n * Retrieves multiple resources with filtering, sorting, pagination, and field selection\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(req, this.modelName)\n .filter()\n .sort()\n .limitFields()\n .paginate().filters;\n\n const [data, total] = (await Promise.all([\n this.service.findMany(where, queryOptions, {\n user: req?.user,\n accessToken: req?.accessToken,\n }),\n this.service.count(where, {\n user: req?.user,\n accessToken: req?.accessToken,\n }),\n ])) as [Record<string, any>[], number];\n\n if (this.interceptors.afterFindMany) {\n req.responseData = { total, results: data.length, data };\n res.locals.data = { total, results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ total, results: data.length, data });\n }\n );\n\n /**\n * Retrieves a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.findOne(\n req.params,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data) {\n if (\n Object.keys(req.params).length === 1 &&\n \"id\" in req.params &&\n req.params.id !== \"me\"\n ) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterFindOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.updateOne(\n req.params,\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data) {\n if (Object.keys(req.params).length === 1 && \"id\" in req.params) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterUpdateOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (!Object.keys(req.query).some((key) => key !== \"prismaQueryOptions\")) {\n return next(\n new AppError(\n \"Filter criteria not provided for bulk update.\",\n 400,\n {},\n \"MissingRequestQueryParameters\"\n )\n );\n }\n\n if (req.query.filterMode === \"OR\")\n throw new AppError(\n \"req.query.filterMode === OR is not valid for update many operation\",\n 400\n );\n\n req.query.filterMode = \"AND\";\n const { where, ...queryOptions } = new APIFeatures(req, this.modelName)\n .filter()\n .sort()\n .limitFields()\n .paginate().filters;\n\n delete queryOptions.include;\n\n const data = (await this.service.updateMany(\n where,\n req.body,\n queryOptions,\n { user: req?.user, accessToken: req?.accessToken }\n )) as { count: number };\n\n if (!data || data.count === 0)\n return next(\n new AppError(\n `${pluralize(pascalCase(String(this.modelName)))} not found`,\n 404\n )\n );\n\n if (this.interceptors.afterUpdateMany) {\n req.responseData = { results: data.count, data };\n res.locals.data = { results: data.count, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.count, data });\n }\n );\n\n /**\n * Updates multiple resources with different data in a single transaction\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n batchUpdate = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.batchUpdate(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data || data.length === 0)\n return next(\n new AppError(\n \"Failed to update the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterBatchUpdate) {\n req.responseData = { results: data.length, data };\n res.locals.data = { results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.length, data });\n }\n );\n\n /**\n * Deletes a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.service.deleteOne(req.params, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data) {\n if (Object.keys(req.params).length === 1 && \"id\" in req.params) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterDeleteOne) {\n req.additionalData = { data };\n res.locals.additionalData = { data };\n req.responseStatus = 204;\n res.locals.status = 204;\n return next();\n }\n\n res.status(204).send();\n }\n );\n\n /**\n * Deletes multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (!Object.keys(req.query).some((key) => key !== \"prismaQueryOptions\")) {\n return next(\n new AppError(\n \"Filter criteria not provided for bulk deletion.\",\n 400,\n {},\n \"MissingRequestQueryParameters\"\n )\n );\n }\n\n if (req.query.filterMode === \"OR\")\n throw new AppError(\n \"req.query.filterMode === OR is not valid for delete many operation\",\n 400\n );\n\n req.query.filterMode = \"AND\";\n const { where } = new APIFeatures(req, this.modelName).filter().filters;\n\n const data = await this.service.deleteMany(where, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data || data.count === 0) {\n return next(\n new AppError(`No records found to delete`, 404, {}, \"NotFound\")\n );\n }\n\n if (this.interceptors.afterDeleteMany) {\n req.responseData = { results: data.count, data };\n res.locals.data = { results: data.count, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.count, data });\n }\n );\n\n /**\n * Deletes multiple resources with different filters in a single transaction\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n batchDelete = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.service.batchDelete(req.body, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data || data.length === 0)\n return next(\n new AppError(\n \"Failed to delete the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterBatchDelete) {\n req.responseData = { results: data.length, data };\n res.locals.data = { results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.length, data });\n }\n );\n}\n\n/**\n * Returns a list of all available resource endpoints based on the application's models\n *\n * Will soon be removed\n *\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\nexport const getAvailableResources = catchAsync(\n async (_: any, res: ArkosResponse) => {\n sheu.warn(\n \"This route `/api/available-resources` will be deprecated from 1.4.0-beta, consider using /api/auth-actions instead.\"\n );\n\n res.status(200).json({\n data: [\n ...prismaSchemaParser\n .getModelsAsArrayOfStrings()\n .map((model) => kebabCase(model)),\n \"file-upload\",\n ],\n });\n }\n);\n"]}
1
+ {"version":3,"file":"base.controller.js","sourceRoot":"","sources":["../../../../src/modules/base/base.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport { BaseService } from \"./base.service\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { kebabCase, pascalCase } from \"../../utils/helpers/change-case.helpers\";\nimport { getModuleComponents } from \"../../utils/dynamic-loader\";\nimport pluralize from \"pluralize\";\nimport sheu from \"../../utils/sheu\";\nimport prismaSchemaParser from \"../../utils/prisma/prisma-schema-parser\";\nimport { APIFeatures } from \"../../exports/utils\";\nimport deepmerge from \"../../utils/helpers/deepmerge.helper\";\n\n/**\n * The `BaseController` class provides standardized RESTful API endpoints\n * for any Prisma model based on its name. It supports automatic integration\n * with Prisma services and dynamic middleware hooks for extending behaviors.\n *\n * This controller includes:\n * - `createOne` / `createMany`\n * - `findOne` / `findMany`\n * - `updateOne` / `updateMany`\n * - `deleteOne` / `deleteMany`\n *\n * It handles:\n * - Prisma query options\n * - APIFeatures: filtering, sorting, pagination, field limiting\n * - Middleware hooks: `afterCreateOne`, `afterUpdateMany`, etc.\n *\n * @class BaseController\n *\n * @param {string} modelName - The Prisma model name this controller handles.\n *\n * @see {@link https://www.arkosjs.com/docs/api-reference/the-base-controller-class}\n *--\n * **See about how Arkos handles routers**\n * @see {@link https://www.arkosjs.com/docs/guide/adding-custom-routers}\n */\nexport class BaseController {\n /**\n * Service instance to handle business logic operations\n * @private\n */\n private service: BaseService<any>;\n\n /**\n * Name of the model this controller handles\n * @private\n */\n private modelName: string;\n\n /**\n * Model-specific interceptors loaded from model modules\n * @private\n */\n private interceptors: any;\n\n /**\n * Creates a new BaseController instance\n * @param {string} modelName - The name of the model for which this controller will handle operations\n */\n constructor(modelName: string) {\n const components = getModuleComponents(modelName);\n\n this.modelName = modelName;\n this.service = new BaseService(modelName);\n this.interceptors = components?.interceptors || {};\n }\n\n /**\n * Creates a single resource\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.createOne(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (this.interceptors.afterCreateOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n res.status(201).json({ data });\n }\n );\n\n /**\n * Creates multiple resources in a single operation\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n createMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.createMany(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data)\n return next(\n new AppError(\n \"Failed to create the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterCreateMany) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n res.status(201).json({ data });\n }\n );\n\n /**\n * Retrieves multiple resources with filtering, sorting, pagination, and field selection\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(req, this.modelName)\n .filter()\n .sort()\n .limitFields()\n .paginate().filters;\n\n const [data, total] = (await Promise.all([\n this.service.findMany(where, queryOptions, {\n user: req?.user,\n accessToken: req?.accessToken,\n }),\n this.service.count(where, {\n user: req?.user,\n accessToken: req?.accessToken,\n }),\n ])) as [Record<string, any>[], number];\n\n if (this.interceptors.afterFindMany) {\n req.responseData = { total, results: data.length, data };\n res.locals.data = { total, results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ total, results: data.length, data });\n }\n );\n\n /**\n * Retrieves a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n findOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.findOne(\n req.params,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data) {\n if (\n Object.keys(req.params).length === 1 &&\n \"id\" in req.params &&\n req.params.id !== \"me\"\n ) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterFindOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.updateOne(\n req.params,\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data) {\n if (Object.keys(req.params).length === 1 && \"id\" in req.params) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterUpdateOne) {\n req.responseData = { data };\n res.locals.data = { data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data });\n }\n );\n\n /**\n * Updates multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n updateMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (\n Object.keys(req.query).every((key) =>\n [\"filterMode\", \"prismaQueryOptions\"].includes(key)\n )\n ) {\n return next(\n new AppError(\n \"Filter criteria not provided for bulk update.\",\n 400,\n {},\n \"MissingRequestQueryParameters\"\n )\n );\n }\n\n if (req.query.filterMode === \"OR\")\n throw new AppError(\n \"req.query.filterMode === OR is not valid for update many operation\",\n 400\n );\n\n req.query.filterMode = \"AND\";\n const { where, ...queryOptions } = new APIFeatures(req, this.modelName)\n .filter()\n .sort()\n .limitFields()\n .paginate().filters;\n\n delete queryOptions.include;\n\n const data = (await this.service.updateMany(\n where,\n req.body,\n queryOptions,\n { user: req?.user, accessToken: req?.accessToken }\n )) as { count: number };\n\n if (!data || data.count === 0)\n return next(\n new AppError(\n `${pluralize(pascalCase(String(this.modelName)))} not found`,\n 404\n )\n );\n\n if (this.interceptors.afterUpdateMany) {\n req.responseData = { results: data.count, data };\n res.locals.data = { results: data.count, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.count, data });\n }\n );\n\n /**\n * Updates multiple resources with different data in a single transaction\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n batchUpdate = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { where, ...queryOptions } = new APIFeatures(\n req,\n this.modelName\n ).limitFields().filters;\n\n const data = await this.service.batchUpdate(\n req.body,\n deepmerge(req.prismaQueryOptions || {}, queryOptions),\n { user: req?.user, accessToken: req?.accessToken }\n );\n\n if (!data || data.length === 0)\n return next(\n new AppError(\n \"Failed to update the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterBatchUpdate) {\n req.responseData = { results: data.length, data };\n res.locals.data = { results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.length, data });\n }\n );\n\n /**\n * Deletes a single resource by its identifier\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteOne = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.service.deleteOne(req.params, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data) {\n if (Object.keys(req.params).length === 1 && \"id\" in req.params) {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} with ID ${\n req.params?.id\n } not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n } else {\n return next(\n new AppError(\n `${pascalCase(String(this.modelName))} not found`,\n 404,\n {},\n \"NotFound\"\n )\n );\n }\n }\n\n if (this.interceptors.afterDeleteOne) {\n req.additionalData = { data };\n res.locals.additionalData = { data };\n req.responseStatus = 204;\n res.locals.status = 204;\n return next();\n }\n\n res.status(204).send();\n }\n );\n\n /**\n * Deletes multiple resources that match specified criteria\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n deleteMany = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (\n Object.keys(req.query).every((key) =>\n [\"filterMode\", \"prismaQueryOptions\"].includes(key)\n )\n ) {\n return next(\n new AppError(\n \"Filter criteria not provided for bulk deletion.\",\n 400,\n {},\n \"MissingRequestQueryParameters\"\n )\n );\n }\n\n if (req.query.filterMode === \"OR\")\n throw new AppError(\n \"req.query.filterMode === OR is not valid for delete many operation\",\n 400\n );\n\n req.query.filterMode = \"AND\";\n const { where } = new APIFeatures(req, this.modelName).filter().filters;\n\n const data = await this.service.deleteMany(where, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data || data.count === 0) {\n return next(\n new AppError(`No records found to delete`, 404, {}, \"NotFound\")\n );\n }\n\n if (this.interceptors.afterDeleteMany) {\n req.responseData = { results: data.count, data };\n res.locals.data = { results: data.count, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.count, data });\n }\n );\n\n /**\n * Deletes multiple resources with different filters in a single transaction\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\n batchDelete = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const data = await this.service.batchDelete(req.body, {\n user: req?.user,\n accessToken: req?.accessToken,\n });\n\n if (!data || data.length === 0)\n return next(\n new AppError(\n \"Failed to delete the resources. Please check your input.\",\n 400,\n { body: req.body }\n )\n );\n\n if (this.interceptors.afterBatchDelete) {\n req.responseData = { results: data.length, data };\n res.locals.data = { results: data.length, data };\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ results: data.length, data });\n }\n );\n}\n\n/**\n * Returns a list of all available resource endpoints based on the application's models\n *\n * Will soon be removed\n *\n * @param {ArkosRequest} req - Express request object\n * @param {ArkosResponse} res - Express response object\n * @param {ArkosNextFunction} next - Express next function\n * @returns {Promise<void>}\n */\nexport const getAvailableResources = catchAsync(\n async (_: any, res: ArkosResponse) => {\n sheu.warn(\n \"This route `/api/available-resources` will be deprecated from 1.4.0-beta, consider using /api/auth-actions instead.\"\n );\n\n res.status(200).json({\n data: [\n ...prismaSchemaParser\n .getModelsAsArrayOfStrings()\n .map((model) => kebabCase(model)),\n \"file-upload\",\n ],\n });\n }\n);\n"]}
@@ -11,6 +11,6 @@ export function killServerChildProcess() {
11
11
  killProductionServerChildProcess();
12
12
  }
13
13
  export function getVersion() {
14
- return "1.3.4-canary.4";
14
+ return "1.3.4-canary.5";
15
15
  }
16
16
  //# sourceMappingURL=cli.helpers.js.map
@@ -78,7 +78,7 @@ export default function generateHooksTemplate(options) {
78
78
  const args = isTypeScript
79
79
  ? `{ ${params.join(", ")} }: ${argsType}`
80
80
  : `{ ${params.join(", ")} }`;
81
- return `async function (${args}) {}`;
81
+ return `async (${args}) => {}`;
82
82
  };
83
83
  const hooks = `
84
84
  // export const beforeFindOne = [
@@ -1 +1 @@
1
- {"version":3,"file":"hooks-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/hooks-template.ts"],"names":[],"mappings":"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","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\n// Main function to generate hooks template based on provided options\nexport default function generateHooksTemplate(\n options: TemplateOptions\n): string {\n const { modelName } = options;\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName) throw new Error(\"Module name is required for hooks template\");\n\n const baseImports = isTypeScript\n ? `// import { \n// BeforeFindOneHookArgs, \n// AfterFindOneHookArgs, \n// BeforeUpdateOneHookArgs, \n// AfterUpdateOneHookArgs,\n// BeforeCreateOneHookArgs,\n// AfterCreateOneHookArgs,\n// BeforeCreateManyHookArgs,\n// AfterCreateManyHookArgs,\n// BeforeCountHookArgs,\n// AfterCountHookArgs,\n// BeforeFindManyHookArgs,\n// AfterFindManyHookArgs,\n// BeforeUpdateManyHookArgs,\n// AfterUpdateManyHookArgs,\n// BeforeDeleteOneHookArgs,\n// AfterDeleteOneHookArgs,\n// BeforeDeleteManyHookArgs,\n// AfterDeleteManyHookArgs,\n// OnCreateOneErrorHookArgs,\n// OnCreateManyErrorHookArgs,\n// OnCountErrorHookArgs,\n// OnFindManyErrorHookArgs,\n// OnFindByIdErrorHookArgs,\n// OnFindOneErrorHookArgs,\n// OnUpdateOneErrorHookArgs,\n// OnUpdateManyErrorHookArgs,\n// OnDeleteOneErrorHookArgs,\n// OnDeleteManyErrorHookArgs\n// } from \"arkos/services\";`\n : ``;\n\n const serviceImport = `\"./${modelName.kebab}.service${ext === \"ts\" ? \"\" : \".\" + \"js\"}\";`;\n\n const getHookArgsType = (hookName: string) => {\n if (!isTypeScript) return \"\";\n\n const typeMap: Record<string, string> = {\n beforeFindOne: `BeforeFindOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterFindOne: `AfterFindOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeUpdateOne: `BeforeUpdateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterUpdateOne: `AfterUpdateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCreateOne: `BeforeCreateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCreateOne: `AfterCreateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCreateMany: `BeforeCreateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCreateMany: `AfterCreateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCount: `BeforeCountHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCount: `AfterCountHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeFindMany: `BeforeFindManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterFindMany: `AfterFindManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeUpdateMany: `BeforeUpdateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterUpdateMany: `AfterUpdateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeDeleteOne: `BeforeDeleteOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterDeleteOne: `AfterDeleteOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeDeleteMany: `BeforeDeleteManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterDeleteMany: `AfterDeleteManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n // Error hook types\n onCreateOneError: `OnCreateOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onCreateManyError: `OnCreateManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onCountError: `OnCountErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindManyError: `OnFindManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindByIdError: `OnFindByIdErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindOneError: `OnFindOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onUpdateOneError: `OnUpdateOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onUpdateManyError: `OnUpdateManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onDeleteOneError: `OnDeleteOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onDeleteManyError: `OnDeleteManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n };\n\n return typeMap[hookName];\n };\n\n const generateHookFunction = (hookName: string, params: string[]) => {\n const argsType = getHookArgsType(hookName);\n const args = isTypeScript\n ? `{ ${params.join(\", \")} }: ${argsType}`\n : `{ ${params.join(\", \")} }`;\n return `async function (${args}) {}`;\n };\n\n const hooks = `\n// export const beforeFindOne = [\n// ${generateHookFunction(\"beforeFindOne\", [\"context\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const afterFindOne = [\n// ${generateHookFunction(\"afterFindOne\", [\"context\", \"result\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const onFindOneError = [\n// ${generateHookFunction(\"onFindOneError\", [\"context\", \"error\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const beforeUpdateOne = [\n// ${generateHookFunction(\"beforeUpdateOne\", [\"context\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterUpdateOne = [\n// ${generateHookFunction(\"afterUpdateOne\", [\"context\", \"result\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onUpdateOneError = [\n// ${generateHookFunction(\"onUpdateOneError\", [\"context\", \"error\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCreateOne = [\n// ${generateHookFunction(\"beforeCreateOne\", [\"context\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterCreateOne = [\n// ${generateHookFunction(\"afterCreateOne\", [\"context\", \"result\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onCreateOneError = [\n// ${generateHookFunction(\"onCreateOneError\", [\"context\", \"error\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCreateMany = [\n// ${generateHookFunction(\"beforeCreateMany\", [\"context\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterCreateMany = [\n// ${generateHookFunction(\"afterCreateMany\", [\"context\", \"result\", \"queryOptions\"])}\n// ];\n\n// export const onCreateManyError = [\n// ${generateHookFunction(\"onCreateManyError\", [\"context\", \"error\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCount = [\n// ${generateHookFunction(\"beforeCount\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterCount = [\n// ${generateHookFunction(\"afterCount\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onCountError = [\n// ${generateHookFunction(\"onCountError\", [\"context\", \"error\", \"filters\"])}\n// ];\n\n// export const beforeFindMany = [\n// ${generateHookFunction(\"beforeFindMany\", [\"context\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const afterFindMany = [\n// ${generateHookFunction(\"afterFindMany\", [\"context\", \"result\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const onFindManyError = [\n// ${generateHookFunction(\"onFindManyError\", [\"context\", \"error\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const beforeUpdateMany = [\n// ${generateHookFunction(\"beforeUpdateMany\", [\"context\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterUpdateMany = [\n// ${generateHookFunction(\"afterUpdateMany\", [\"context\", \"result\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onUpdateManyError = [\n// ${generateHookFunction(\"onUpdateManyError\", [\"context\", \"error\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeDeleteOne = [\n// ${generateHookFunction(\"beforeDeleteOne\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterDeleteOne = [\n// ${generateHookFunction(\"afterDeleteOne\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onDeleteOneError = [\n// ${generateHookFunction(\"onDeleteOneError\", [\"context\", \"error\", \"filters\"])}\n// ];\n\n// export const beforeDeleteMany = [\n// ${generateHookFunction(\"beforeDeleteMany\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterDeleteMany = [\n// ${generateHookFunction(\"afterDeleteMany\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onDeleteManyError = [\n// ${generateHookFunction(\"onDeleteManyError\", [\"context\", \"error\", \"filters\"])}\n// ];\n`;\n\n return `${baseImports}\n// import { Prisma } from \"@prisma/client\"\n// import ${modelName.camel}Service from ${serviceImport}\n\n${hooks}`;\n}\n"]}
1
+ {"version":3,"file":"hooks-template.js","sourceRoot":"","sources":["../../../../../../../src/utils/cli/utils/template-generator/templates/hooks-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAItE,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAC3C,OAAwB;IAExB,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,MAAM,YAAY,GAAG,GAAG,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAE9E,MAAM,WAAW,GAAG,YAAY;QAC9B,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BA6BsB;QACxB,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,KAAK,WAAW,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC;IAEzF,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC3C,IAAI,CAAC,YAAY;YAAE,OAAO,EAAE,CAAC;QAE7B,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,gCAAgC,SAAS,CAAC,MAAM,WAAW;YAC1E,YAAY,EAAE,+BAA+B,SAAS,CAAC,MAAM,WAAW;YACxE,eAAe,EAAE,kCAAkC,SAAS,CAAC,MAAM,WAAW;YAC9E,cAAc,EAAE,iCAAiC,SAAS,CAAC,MAAM,WAAW;YAC5E,eAAe,EAAE,kCAAkC,SAAS,CAAC,MAAM,WAAW;YAC9E,cAAc,EAAE,iCAAiC,SAAS,CAAC,MAAM,WAAW;YAC5E,gBAAgB,EAAE,mCAAmC,SAAS,CAAC,MAAM,WAAW;YAChF,eAAe,EAAE,kCAAkC,SAAS,CAAC,MAAM,WAAW;YAC9E,WAAW,EAAE,8BAA8B,SAAS,CAAC,MAAM,WAAW;YACtE,UAAU,EAAE,6BAA6B,SAAS,CAAC,MAAM,WAAW;YACpE,cAAc,EAAE,iCAAiC,SAAS,CAAC,MAAM,WAAW;YAC5E,aAAa,EAAE,gCAAgC,SAAS,CAAC,MAAM,WAAW;YAC1E,gBAAgB,EAAE,mCAAmC,SAAS,CAAC,MAAM,WAAW;YAChF,eAAe,EAAE,kCAAkC,SAAS,CAAC,MAAM,WAAW;YAC9E,eAAe,EAAE,kCAAkC,SAAS,CAAC,MAAM,WAAW;YAC9E,cAAc,EAAE,iCAAiC,SAAS,CAAC,MAAM,WAAW;YAC5E,gBAAgB,EAAE,mCAAmC,SAAS,CAAC,MAAM,WAAW;YAChF,eAAe,EAAE,kCAAkC,SAAS,CAAC,MAAM,WAAW;YAE9E,gBAAgB,EAAE,mCAAmC,SAAS,CAAC,MAAM,WAAW;YAChF,iBAAiB,EAAE,oCAAoC,SAAS,CAAC,MAAM,WAAW;YAClF,YAAY,EAAE,+BAA+B,SAAS,CAAC,MAAM,WAAW;YACxE,eAAe,EAAE,kCAAkC,SAAS,CAAC,MAAM,WAAW;YAC9E,eAAe,EAAE,kCAAkC,SAAS,CAAC,MAAM,WAAW;YAC9E,cAAc,EAAE,iCAAiC,SAAS,CAAC,MAAM,WAAW;YAC5E,gBAAgB,EAAE,mCAAmC,SAAS,CAAC,MAAM,WAAW;YAChF,iBAAiB,EAAE,oCAAoC,SAAS,CAAC,MAAM,WAAW;YAClF,gBAAgB,EAAE,mCAAmC,SAAS,CAAC,MAAM,WAAW;YAChF,iBAAiB,EAAE,oCAAoC,SAAS,CAAC,MAAM,WAAW;SACnF,CAAC;QAEF,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAE,MAAgB,EAAE,EAAE;QAClE,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,YAAY;YACvB,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE;YACzC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,OAAO,UAAU,IAAI,SAAS,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG;;OAET,oBAAoB,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;;;;OAI7E,oBAAoB,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;;;;OAItF,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;;;;OAIvF,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAIvF,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAIhG,oBAAoB,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAIjG,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAI5E,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAIrF,oBAAoB,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAItF,oBAAoB,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAI7E,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;;;;OAI9E,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAIvF,oBAAoB,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;;;OAI3D,oBAAoB,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;;;;OAIpE,oBAAoB,CAAC,cAAc,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;;;;OAIrE,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;;;;OAI9E,oBAAoB,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;;;;OAIvF,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;;;;OAIxF,oBAAoB,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAIxF,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAIjG,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;;;;OAIlG,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;;;OAI/D,oBAAoB,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;;;;OAIxE,oBAAoB,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;;;;OAIzE,oBAAoB,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;;;OAIhE,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;;;;OAIzE,oBAAoB,CAAC,mBAAmB,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;;CAEhF,CAAC;IAEA,OAAO,GAAG,WAAW;;YAEX,SAAS,CAAC,KAAK,gBAAgB,aAAa;;EAEtD,KAAK,EAAE,CAAC;AACV,CAAC","sourcesContent":["import { getUserFileExtension } from \"../../../../helpers/fs.helpers\";\nimport { TemplateOptions } from \"../../template-generators\";\n\n// Main function to generate hooks template based on provided options\nexport default function generateHooksTemplate(\n options: TemplateOptions\n): string {\n const { modelName } = options;\n const ext = getUserFileExtension();\n const isTypeScript = ext === \"ts\";\n\n if (!modelName) throw new Error(\"Module name is required for hooks template\");\n\n const baseImports = isTypeScript\n ? `// import { \n// BeforeFindOneHookArgs, \n// AfterFindOneHookArgs, \n// BeforeUpdateOneHookArgs, \n// AfterUpdateOneHookArgs,\n// BeforeCreateOneHookArgs,\n// AfterCreateOneHookArgs,\n// BeforeCreateManyHookArgs,\n// AfterCreateManyHookArgs,\n// BeforeCountHookArgs,\n// AfterCountHookArgs,\n// BeforeFindManyHookArgs,\n// AfterFindManyHookArgs,\n// BeforeUpdateManyHookArgs,\n// AfterUpdateManyHookArgs,\n// BeforeDeleteOneHookArgs,\n// AfterDeleteOneHookArgs,\n// BeforeDeleteManyHookArgs,\n// AfterDeleteManyHookArgs,\n// OnCreateOneErrorHookArgs,\n// OnCreateManyErrorHookArgs,\n// OnCountErrorHookArgs,\n// OnFindManyErrorHookArgs,\n// OnFindByIdErrorHookArgs,\n// OnFindOneErrorHookArgs,\n// OnUpdateOneErrorHookArgs,\n// OnUpdateManyErrorHookArgs,\n// OnDeleteOneErrorHookArgs,\n// OnDeleteManyErrorHookArgs\n// } from \"arkos/services\";`\n : ``;\n\n const serviceImport = `\"./${modelName.kebab}.service${ext === \"ts\" ? \"\" : \".\" + \"js\"}\";`;\n\n const getHookArgsType = (hookName: string) => {\n if (!isTypeScript) return \"\";\n\n const typeMap: Record<string, string> = {\n beforeFindOne: `BeforeFindOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterFindOne: `AfterFindOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeUpdateOne: `BeforeUpdateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterUpdateOne: `AfterUpdateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCreateOne: `BeforeCreateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCreateOne: `AfterCreateOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCreateMany: `BeforeCreateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCreateMany: `AfterCreateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeCount: `BeforeCountHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterCount: `AfterCountHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeFindMany: `BeforeFindManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterFindMany: `AfterFindManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeUpdateMany: `BeforeUpdateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterUpdateMany: `AfterUpdateManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeDeleteOne: `BeforeDeleteOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterDeleteOne: `AfterDeleteOneHookArgs<Prisma.${modelName.pascal}Delegate>`,\n beforeDeleteMany: `BeforeDeleteManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n afterDeleteMany: `AfterDeleteManyHookArgs<Prisma.${modelName.pascal}Delegate>`,\n // Error hook types\n onCreateOneError: `OnCreateOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onCreateManyError: `OnCreateManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onCountError: `OnCountErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindManyError: `OnFindManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindByIdError: `OnFindByIdErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onFindOneError: `OnFindOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onUpdateOneError: `OnUpdateOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onUpdateManyError: `OnUpdateManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onDeleteOneError: `OnDeleteOneErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n onDeleteManyError: `OnDeleteManyErrorHookArgs<Prisma.${modelName.pascal}Delegate>`,\n };\n\n return typeMap[hookName];\n };\n\n const generateHookFunction = (hookName: string, params: string[]) => {\n const argsType = getHookArgsType(hookName);\n const args = isTypeScript\n ? `{ ${params.join(\", \")} }: ${argsType}`\n : `{ ${params.join(\", \")} }`;\n return `async (${args}) => {}`;\n };\n\n const hooks = `\n// export const beforeFindOne = [\n// ${generateHookFunction(\"beforeFindOne\", [\"context\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const afterFindOne = [\n// ${generateHookFunction(\"afterFindOne\", [\"context\", \"result\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const onFindOneError = [\n// ${generateHookFunction(\"onFindOneError\", [\"context\", \"error\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const beforeUpdateOne = [\n// ${generateHookFunction(\"beforeUpdateOne\", [\"context\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterUpdateOne = [\n// ${generateHookFunction(\"afterUpdateOne\", [\"context\", \"result\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onUpdateOneError = [\n// ${generateHookFunction(\"onUpdateOneError\", [\"context\", \"error\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCreateOne = [\n// ${generateHookFunction(\"beforeCreateOne\", [\"context\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterCreateOne = [\n// ${generateHookFunction(\"afterCreateOne\", [\"context\", \"result\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onCreateOneError = [\n// ${generateHookFunction(\"onCreateOneError\", [\"context\", \"error\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCreateMany = [\n// ${generateHookFunction(\"beforeCreateMany\", [\"context\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterCreateMany = [\n// ${generateHookFunction(\"afterCreateMany\", [\"context\", \"result\", \"queryOptions\"])}\n// ];\n\n// export const onCreateManyError = [\n// ${generateHookFunction(\"onCreateManyError\", [\"context\", \"error\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeCount = [\n// ${generateHookFunction(\"beforeCount\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterCount = [\n// ${generateHookFunction(\"afterCount\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onCountError = [\n// ${generateHookFunction(\"onCountError\", [\"context\", \"error\", \"filters\"])}\n// ];\n\n// export const beforeFindMany = [\n// ${generateHookFunction(\"beforeFindMany\", [\"context\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const afterFindMany = [\n// ${generateHookFunction(\"afterFindMany\", [\"context\", \"result\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const onFindManyError = [\n// ${generateHookFunction(\"onFindManyError\", [\"context\", \"error\", \"filters\", \"queryOptions\"])}\n// ];\n\n// export const beforeUpdateMany = [\n// ${generateHookFunction(\"beforeUpdateMany\", [\"context\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const afterUpdateMany = [\n// ${generateHookFunction(\"afterUpdateMany\", [\"context\", \"result\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const onUpdateManyError = [\n// ${generateHookFunction(\"onUpdateManyError\", [\"context\", \"error\", \"filters\", \"data\", \"queryOptions\"])}\n// ];\n\n// export const beforeDeleteOne = [\n// ${generateHookFunction(\"beforeDeleteOne\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterDeleteOne = [\n// ${generateHookFunction(\"afterDeleteOne\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onDeleteOneError = [\n// ${generateHookFunction(\"onDeleteOneError\", [\"context\", \"error\", \"filters\"])}\n// ];\n\n// export const beforeDeleteMany = [\n// ${generateHookFunction(\"beforeDeleteMany\", [\"context\", \"filters\"])}\n// ];\n\n// export const afterDeleteMany = [\n// ${generateHookFunction(\"afterDeleteMany\", [\"context\", \"result\", \"filters\"])}\n// ];\n\n// export const onDeleteManyError = [\n// ${generateHookFunction(\"onDeleteManyError\", [\"context\", \"error\", \"filters\"])}\n// ];\n`;\n\n return `${baseImports}\n// import { Prisma } from \"@prisma/client\"\n// import ${modelName.camel}Service from ${serviceImport}\n\n${hooks}`;\n}\n"]}
@@ -2,8 +2,6 @@ import fs from "fs";
2
2
  import AppError from "../../modules/error-handler/utils/app-error.js";
3
3
  import { crd, getUserFileExtension as ext } from "./fs.helpers.js";
4
4
  import { importModule } from "./global.helpers.js";
5
- import prismaSchemaParser from "../prisma/prisma-schema-parser.js";
6
- import { pascalCase } from "./change-case.helpers.js";
7
5
  export let prismaInstance = null;
8
6
  export async function loadPrismaModule() {
9
7
  if (!prismaInstance) {
@@ -17,9 +15,7 @@ export async function loadPrismaModule() {
17
15
  fixExtension: false,
18
16
  });
19
17
  prismaInstance = prismaModule.default;
20
- if (!prismaInstance ||
21
- typeof prismaInstance[pascalCase(prismaSchemaParser.models?.[0].name)]
22
- ?.findFirst !== "function")
18
+ if (!prismaInstance || typeof prismaInstance?.["$connect"] !== "function")
23
19
  throw new Error("Prisma not found");
24
20
  }
25
21
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,QAAQ,MAAM,6CAA6C,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,oBAAoB,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,CAAC,IAAI,cAAc,GAAQ,IAAI,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,UAAU,GAAG,GAAG,GAAG,EAAE,qBAAqB,GAAG,EAAE,EAAE,CAAC;YAEtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC5B,UAAU,GAAG,GAAG,GAAG,EAAE,2BAA2B,GAAG,EAAE,EAAE,CAAC;YAE1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAEpE,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE;gBAClD,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC;YAEtC,IACE,CAAC,cAAc;gBACf,OAAO,cAAc,CAAC,UAAU,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACpE,EAAE,SAAS,KAAK,UAAU;gBAE5B,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB;gBACtC,MAAM,IAAI,QAAQ,CAChB,0HAA0H,GAAG,EAAE,uIAAuI,EACtQ,GAAG,EACH,EAAE,EACF,wBAAwB,CACzB,CAAC;YACJ,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC","sourcesContent":["import fs from \"fs\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { crd, getUserFileExtension as ext } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\nimport prismaSchemaParser from \"../prisma/prisma-schema-parser\";\nimport { pascalCase } from \"./change-case.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport async function loadPrismaModule() {\n if (!prismaInstance) {\n try {\n let prismaPath = `${crd()}/src/utils/prisma.${ext()}`;\n\n if (!fs.existsSync(prismaPath))\n prismaPath = `${crd()}/src/utils/prisma/index.${ext()}`;\n\n if (!fs.existsSync(prismaPath)) throw new Error(`Prisma not found`);\n\n const prismaModule = await importModule(prismaPath, {\n fixExtension: false,\n });\n prismaInstance = prismaModule.default;\n\n if (\n !prismaInstance ||\n typeof prismaInstance[pascalCase(prismaSchemaParser.models?.[0].name)]\n ?.findFirst !== \"function\"\n )\n throw new Error(\"Prisma not found\");\n } catch (error: any) {\n if (error.message === \"Prisma not found\")\n throw new AppError(\n `Could not initialize Prisma module. Make sure your prisma instance is exported as default under src/utils/prisma/index.${ext()}, read more about Arkos.js Project Structure under https://www.arkosjs.com/docs/getting-started/project-structure#utilities-directory`,\n 500,\n {},\n \"PrismaInstanceNotFound\"\n );\n throw error;\n }\n }\n return prismaInstance;\n}\n\nexport function getPrismaInstance() {\n return prismaInstance;\n}\n"]}
1
+ {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,QAAQ,MAAM,6CAA6C,CAAC;AACnE,OAAO,EAAE,GAAG,EAAE,oBAAoB,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIhD,MAAM,CAAC,IAAI,cAAc,GAAQ,IAAI,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,UAAU,GAAG,GAAG,GAAG,EAAE,qBAAqB,GAAG,EAAE,EAAE,CAAC;YAEtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAC5B,UAAU,GAAG,GAAG,GAAG,EAAE,2BAA2B,GAAG,EAAE,EAAE,CAAC;YAE1D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAEpE,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE;gBAClD,YAAY,EAAE,KAAK;aACpB,CAAC,CAAC;YACH,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC;YAEtC,IAAI,CAAC,cAAc,IAAI,OAAO,cAAc,EAAE,CAAC,UAAU,CAAC,KAAK,UAAU;gBACvE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,OAAO,KAAK,kBAAkB;gBACtC,MAAM,IAAI,QAAQ,CAChB,0HAA0H,GAAG,EAAE,uIAAuI,EACtQ,GAAG,EACH,EAAE,EACF,wBAAwB,CACzB,CAAC;YACJ,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC","sourcesContent":["import fs from \"fs\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { crd, getUserFileExtension as ext } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\nimport prismaSchemaParser from \"../prisma/prisma-schema-parser\";\nimport { pascalCase } from \"./change-case.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport async function loadPrismaModule() {\n if (!prismaInstance) {\n try {\n let prismaPath = `${crd()}/src/utils/prisma.${ext()}`;\n\n if (!fs.existsSync(prismaPath))\n prismaPath = `${crd()}/src/utils/prisma/index.${ext()}`;\n\n if (!fs.existsSync(prismaPath)) throw new Error(`Prisma not found`);\n\n const prismaModule = await importModule(prismaPath, {\n fixExtension: false,\n });\n prismaInstance = prismaModule.default;\n\n if (!prismaInstance || typeof prismaInstance?.[\"$connect\"] !== \"function\")\n throw new Error(\"Prisma not found\");\n } catch (error: any) {\n if (error.message === \"Prisma not found\")\n throw new AppError(\n `Could not initialize Prisma module. Make sure your prisma instance is exported as default under src/utils/prisma/index.${ext()}, read more about Arkos.js Project Structure under https://www.arkosjs.com/docs/getting-started/project-structure#utilities-directory`,\n 500,\n {},\n \"PrismaInstanceNotFound\"\n );\n throw error;\n }\n }\n return prismaInstance;\n}\n\nexport function getPrismaInstance() {\n return prismaInstance;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkos",
3
- "version": "1.3.4-canary.4",
3
+ "version": "1.3.4-canary.5",
4
4
  "description": "The Express & Prisma RESTful Framework",
5
5
  "main": "dist/cjs/exports/index.js",
6
6
  "module": "dist/esm/exports/index.js",