arkos 1.0.17 → 1.0.19-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/cjs/app.js +1 -1
  2. package/dist/cjs/app.js.map +1 -1
  3. package/dist/cjs/exports/utils/index.js.map +1 -1
  4. package/dist/cjs/modules/auth/auth.controller.js +8 -12
  5. package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
  6. package/dist/cjs/modules/auth/auth.service.js +4 -4
  7. package/dist/cjs/modules/auth/auth.service.js.map +1 -1
  8. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +4 -8
  9. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -1
  10. package/dist/cjs/modules/auth/utils/helpers/auth.helpers.js +19 -0
  11. package/dist/cjs/modules/auth/utils/helpers/auth.helpers.js.map +1 -0
  12. package/dist/cjs/modules/base/base.middlewares.js +6 -1
  13. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  14. package/dist/cjs/modules/base/utils/helpers/base.helpers.js +183 -0
  15. package/dist/cjs/modules/base/utils/helpers/base.helpers.js.map +1 -0
  16. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +5 -5
  17. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  18. package/dist/cjs/modules/file-uploader/file-uploader.service.js +3 -3
  19. package/dist/cjs/modules/file-uploader/file-uploader.service.js.map +1 -1
  20. package/dist/cjs/types/arkos-config.js.map +1 -1
  21. package/dist/cjs/types/prisma-model-router-config.js +3 -0
  22. package/dist/cjs/types/prisma-model-router-config.js.map +1 -0
  23. package/dist/cjs/utils/features/api.features.js +2 -2
  24. package/dist/cjs/utils/features/api.features.js.map +1 -1
  25. package/dist/cjs/utils/helpers/api.features.helpers.js +4 -3
  26. package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
  27. package/dist/cjs/utils/helpers/change-case.helpers.js +2 -2
  28. package/dist/cjs/utils/helpers/change-case.helpers.js.map +1 -1
  29. package/dist/cjs/utils/helpers/fs.helpers.js +14 -45
  30. package/dist/cjs/utils/helpers/fs.helpers.js.map +1 -1
  31. package/dist/cjs/utils/helpers/models.helpers.js +27 -27
  32. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  33. package/dist/cjs/utils/helpers/prisma.helpers.js +5 -3
  34. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  35. package/dist/cjs/utils/scripts/export-prisma-types.js +3 -3
  36. package/dist/cjs/utils/scripts/export-prisma-types.js.map +1 -1
  37. package/dist/cjs/utils/scripts/generate-zod-schemas.js +4 -3
  38. package/dist/cjs/utils/scripts/generate-zod-schemas.js.map +1 -1
  39. package/dist/es2020/app.js +1 -1
  40. package/dist/es2020/app.js.map +1 -1
  41. package/dist/es2020/exports/utils/index.js.map +1 -1
  42. package/dist/es2020/modules/auth/auth.controller.js +8 -12
  43. package/dist/es2020/modules/auth/auth.controller.js.map +1 -1
  44. package/dist/es2020/modules/auth/auth.service.js +4 -4
  45. package/dist/es2020/modules/auth/auth.service.js.map +1 -1
  46. package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js +4 -8
  47. package/dist/es2020/modules/auth/utils/helpers/auth.controller.helpers.js.map +1 -1
  48. package/dist/es2020/modules/auth/utils/helpers/auth.helpers.js +12 -0
  49. package/dist/es2020/modules/auth/utils/helpers/auth.helpers.js.map +1 -0
  50. package/dist/es2020/modules/base/base.middlewares.js +6 -1
  51. package/dist/es2020/modules/base/base.middlewares.js.map +1 -1
  52. package/dist/es2020/modules/base/utils/helpers/base.helpers.js +177 -0
  53. package/dist/es2020/modules/base/utils/helpers/base.helpers.js.map +1 -0
  54. package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js +5 -5
  55. package/dist/es2020/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
  56. package/dist/es2020/modules/file-uploader/file-uploader.service.js +3 -3
  57. package/dist/es2020/modules/file-uploader/file-uploader.service.js.map +1 -1
  58. package/dist/es2020/types/arkos-config.js.map +1 -1
  59. package/dist/es2020/types/prisma-model-router-config.js +2 -0
  60. package/dist/es2020/types/prisma-model-router-config.js.map +1 -0
  61. package/dist/es2020/utils/features/api.features.js +2 -2
  62. package/dist/es2020/utils/features/api.features.js.map +1 -1
  63. package/dist/es2020/utils/helpers/api.features.helpers.js +4 -3
  64. package/dist/es2020/utils/helpers/api.features.helpers.js.map +1 -1
  65. package/dist/es2020/utils/helpers/change-case.helpers.js +2 -2
  66. package/dist/es2020/utils/helpers/change-case.helpers.js.map +1 -1
  67. package/dist/es2020/utils/helpers/fs.helpers.js +13 -44
  68. package/dist/es2020/utils/helpers/fs.helpers.js.map +1 -1
  69. package/dist/es2020/utils/helpers/models.helpers.js +28 -28
  70. package/dist/es2020/utils/helpers/models.helpers.js.map +1 -1
  71. package/dist/es2020/utils/helpers/prisma.helpers.js +6 -4
  72. package/dist/es2020/utils/helpers/prisma.helpers.js.map +1 -1
  73. package/dist/es2020/utils/scripts/export-prisma-types.js +3 -3
  74. package/dist/es2020/utils/scripts/export-prisma-types.js.map +1 -1
  75. package/dist/es2020/utils/scripts/generate-zod-schemas.js +4 -3
  76. package/dist/es2020/utils/scripts/generate-zod-schemas.js.map +1 -1
  77. package/dist/types/exports/utils/index.d.ts +1 -0
  78. package/dist/types/modules/auth/utils/helpers/auth.helpers.d.ts +2 -0
  79. package/dist/types/modules/base/utils/helpers/base.helpers.d.ts +5 -0
  80. package/dist/types/types/arkos-config.d.ts +5 -0
  81. package/dist/types/types/prisma-model-router-config.d.ts +18 -0
  82. package/dist/types/utils/helpers/fs.helpers.d.ts +2 -2
  83. package/package.json +46 -34
@@ -70,38 +70,38 @@ function getFileModelModulesFileStructure(modelName) {
70
70
  const isAuthModule = modelName.toLowerCase() === "auth";
71
71
  return {
72
72
  core: {
73
- service: `${kebabModelName}.service.${fs_helpers_1.userFileExtension}`,
74
- controller: `${kebabModelName}.controller.${fs_helpers_1.userFileExtension}`,
75
- middlewares: `${kebabModelName}.middlewares.${fs_helpers_1.userFileExtension}`,
76
- authConfigs: `${kebabModelName}.auth-configs.${fs_helpers_1.userFileExtension}`,
77
- prismaQueryOptions: `${kebabModelName}.prisma-query-options.${fs_helpers_1.userFileExtension}`,
78
- router: `${kebabModelName}.router.${fs_helpers_1.userFileExtension}`,
73
+ service: `${kebabModelName}.service.${(0, fs_helpers_1.getUserFileExtension)()}`,
74
+ controller: `${kebabModelName}.controller.${(0, fs_helpers_1.getUserFileExtension)()}`,
75
+ middlewares: `${kebabModelName}.middlewares.${(0, fs_helpers_1.getUserFileExtension)()}`,
76
+ authConfigs: `${kebabModelName}.auth-configs.${(0, fs_helpers_1.getUserFileExtension)()}`,
77
+ prismaQueryOptions: `${kebabModelName}.prisma-query-options.${(0, fs_helpers_1.getUserFileExtension)()}`,
78
+ router: `${kebabModelName}.router.${(0, fs_helpers_1.getUserFileExtension)()}`,
79
79
  },
80
80
  dtos: isAuthModule
81
81
  ? {
82
- login: `login.dto.${fs_helpers_1.userFileExtension}`,
83
- signup: `signup.dto.${fs_helpers_1.userFileExtension}`,
84
- updateMe: `update-me.dto.${fs_helpers_1.userFileExtension}`,
85
- updatePassword: `update-password.dto.${fs_helpers_1.userFileExtension}`,
82
+ login: `login.dto.${(0, fs_helpers_1.getUserFileExtension)()}`,
83
+ signup: `signup.dto.${(0, fs_helpers_1.getUserFileExtension)()}`,
84
+ updateMe: `update-me.dto.${(0, fs_helpers_1.getUserFileExtension)()}`,
85
+ updatePassword: `update-password.dto.${(0, fs_helpers_1.getUserFileExtension)()}`,
86
86
  }
87
87
  : {
88
- model: `${lowerModelName}.dto.${fs_helpers_1.userFileExtension}`,
89
- create: `create-${lowerModelName}.dto.${fs_helpers_1.userFileExtension}`,
90
- update: `update-${lowerModelName}.dto.${fs_helpers_1.userFileExtension}`,
91
- query: `query-${lowerModelName}.dto.${fs_helpers_1.userFileExtension}`,
88
+ model: `${lowerModelName}.dto.${(0, fs_helpers_1.getUserFileExtension)()}`,
89
+ create: `create-${lowerModelName}.dto.${(0, fs_helpers_1.getUserFileExtension)()}`,
90
+ update: `update-${lowerModelName}.dto.${(0, fs_helpers_1.getUserFileExtension)()}`,
91
+ query: `query-${lowerModelName}.dto.${(0, fs_helpers_1.getUserFileExtension)()}`,
92
92
  },
93
93
  schemas: isAuthModule
94
94
  ? {
95
- login: `login.schema.${fs_helpers_1.userFileExtension}`,
96
- signup: `signup.schema.${fs_helpers_1.userFileExtension}`,
97
- updateMe: `update-me.schema.${fs_helpers_1.userFileExtension}`,
98
- updatePassword: `update-password.schema.${fs_helpers_1.userFileExtension}`,
95
+ login: `login.schema.${(0, fs_helpers_1.getUserFileExtension)()}`,
96
+ signup: `signup.schema.${(0, fs_helpers_1.getUserFileExtension)()}`,
97
+ updateMe: `update-me.schema.${(0, fs_helpers_1.getUserFileExtension)()}`,
98
+ updatePassword: `update-password.schema.${(0, fs_helpers_1.getUserFileExtension)()}`,
99
99
  }
100
100
  : {
101
- model: `${lowerModelName}.schema.${fs_helpers_1.userFileExtension}`,
102
- create: `create-${lowerModelName}.schema.${fs_helpers_1.userFileExtension}`,
103
- update: `update-${lowerModelName}.schema.${fs_helpers_1.userFileExtension}`,
104
- query: `query-${lowerModelName}.schema.${fs_helpers_1.userFileExtension}`,
101
+ model: `${lowerModelName}.schema.${(0, fs_helpers_1.getUserFileExtension)()}`,
102
+ create: `create-${lowerModelName}.schema.${(0, fs_helpers_1.getUserFileExtension)()}`,
103
+ update: `update-${lowerModelName}.schema.${(0, fs_helpers_1.getUserFileExtension)()}`,
104
+ query: `query-${lowerModelName}.schema.${(0, fs_helpers_1.getUserFileExtension)()}`,
105
105
  },
106
106
  };
107
107
  }
@@ -194,13 +194,13 @@ function initializePrismaModels(testName) {
194
194
  const files = getAllPrismaFiles("./prisma");
195
195
  for (const file of files) {
196
196
  const content = fs_1.default.readFileSync(file, "utf-8");
197
- if (!prismaContent.includes(content))
197
+ if (!(prismaContent === null || prismaContent === void 0 ? void 0 : prismaContent.includes(content)))
198
198
  prismaContent.push(content);
199
199
  }
200
200
  const content = prismaContent
201
201
  .join("\n")
202
202
  .replace(modelRegex, (_, modelName) => {
203
- if (!exports.models.includes(modelName))
203
+ if (!(exports.models === null || exports.models === void 0 ? void 0 : exports.models.includes(modelName)))
204
204
  exports.models.push((0, change_case_helpers_1.camelCase)(modelName.trim()));
205
205
  return `model ${modelName} {`;
206
206
  });
@@ -221,7 +221,7 @@ function initializePrismaModels(testName) {
221
221
  trimmedLine.startsWith("//"))
222
222
  continue;
223
223
  const [fieldName, type] = trimmedLine.split(/\s+/);
224
- const isUnique = trimmedLine.includes("@unique");
224
+ const isUnique = trimmedLine === null || trimmedLine === void 0 ? void 0 : trimmedLine.includes("@unique");
225
225
  if (isUnique) {
226
226
  const existingFields = exports.prismaModelsUniqueFields[model] || [];
227
227
  const alreadyExists = existingFields.some((field) => field.name === fieldName &&
@@ -235,9 +235,9 @@ function initializePrismaModels(testName) {
235
235
  }
236
236
  }
237
237
  const cleanType = type === null || type === void 0 ? void 0 : type.replace("[]", "").replace("?", "");
238
- if (trimmedLine.includes("@relation") ||
238
+ if ((trimmedLine === null || trimmedLine === void 0 ? void 0 : trimmedLine.includes("@relation")) ||
239
239
  trimmedLine.match(/\s+\w+(\[\])?(\s+@|$)/) ||
240
- exports.models.includes((0, change_case_helpers_1.camelCase)(cleanType || ""))) {
240
+ (exports.models === null || exports.models === void 0 ? void 0 : exports.models.includes((0, change_case_helpers_1.camelCase)(cleanType || "")))) {
241
241
  const modelStart = content.indexOf(`enum ${cleanType} {`);
242
242
  if (!cleanType ||
243
243
  modelStart >= 0 ||
@@ -1 +1 @@
1
- {"version":3,"file":"models.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/models.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"path\";\nimport fs from \"fs\";\nimport {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../../utils/helpers/change-case.helpers\";\nimport { userFileExtension } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\n\nexport let prismaModelsModules: Record<\n string,\n Awaited<ReturnType<typeof importPrismaModelModules>>\n> = {};\n\nexport function getModelModules(modelName: string) {\n return prismaModelsModules[kebabCase(modelName)];\n}\n\nexport function getFileModelModulesFileStructure(modelName: string) {\n const kebabModelName = kebabCase(modelName).toLowerCase();\n const lowerModelName = kebabModelName.toLowerCase();\n const isAuthModule = modelName.toLowerCase() === \"auth\";\n\n return {\n core: {\n service: `${kebabModelName}.service.${userFileExtension}`,\n controller: `${kebabModelName}.controller.${userFileExtension}`,\n middlewares: `${kebabModelName}.middlewares.${userFileExtension}`,\n authConfigs: `${kebabModelName}.auth-configs.${userFileExtension}`,\n prismaQueryOptions: `${kebabModelName}.prisma-query-options.${userFileExtension}`,\n router: `${kebabModelName}.router.${userFileExtension}`,\n },\n dtos: isAuthModule\n ? {\n login: `login.dto.${userFileExtension}`,\n signup: `signup.dto.${userFileExtension}`,\n updateMe: `update-me.dto.${userFileExtension}`,\n updatePassword: `update-password.dto.${userFileExtension}`,\n }\n : {\n model: `${lowerModelName}.dto.${userFileExtension}`,\n create: `create-${lowerModelName}.dto.${userFileExtension}`,\n update: `update-${lowerModelName}.dto.${userFileExtension}`,\n query: `query-${lowerModelName}.dto.${userFileExtension}`,\n },\n schemas: isAuthModule\n ? {\n login: `login.schema.${userFileExtension}`,\n signup: `signup.schema.${userFileExtension}`,\n updateMe: `update-me.schema.${userFileExtension}`,\n updatePassword: `update-password.schema.${userFileExtension}`,\n }\n : {\n model: `${lowerModelName}.schema.${userFileExtension}`,\n create: `create-${lowerModelName}.schema.${userFileExtension}`,\n update: `update-${lowerModelName}.schema.${userFileExtension}`,\n query: `query-${lowerModelName}.schema.${userFileExtension}`,\n },\n };\n}\n\nexport async function processSubdir(\n modelName: string,\n type: \"dtos\" | \"schemas\",\n result: Record<string, any>\n) {\n const moduleDir = path.resolve(\n process.cwd(),\n \"src\",\n \"modules\",\n kebabCase(modelName)\n );\n\n const subdir = path.join(moduleDir, type);\n const pascalModelName = pascalCase(modelName);\n const fileStructure = getFileModelModulesFileStructure(modelName);\n const isAuthModule = modelName.toLowerCase() === \"auth\";\n\n // Skip if directory doesn't exist\n try {\n await fs.promises.access(subdir).catch(() => {\n return; // Directory doesn't exist\n });\n\n await Promise.all(\n Object.entries(fileStructure[type]).map(async ([key, fileName]) => {\n const filePath = path.join(subdir, fileName);\n try {\n const module = await import(filePath).catch(() => null);\n if (module) {\n if (isAuthModule) {\n // Auth module uses different naming conventions\n const pascalKey = key.charAt(0).toUpperCase() + key.slice(1);\n const expectedName = `${pascalKey}${\n type === \"dtos\" ? \"Dto\" : \"Schema\"\n }`;\n result[type][key] = module.default;\n } else {\n // Standard modules\n const expectedName =\n key === \"model\"\n ? `${pascalModelName}${type === \"dtos\" ? \"Dto\" : \"Schema\"}`\n : `${\n key.charAt(0).toUpperCase() + key.slice(1)\n }${pascalModelName}${type === \"dtos\" ? \"Dto\" : \"Schema\"}`;\n\n result[type][key] = module.default;\n }\n }\n } catch (error) {\n // Silent fail - file might not exist\n }\n })\n );\n } catch (error) {\n // Directory doesn't exist, continue silently\n }\n}\n\n/**\n * Dynamically imports model-specific modules for a given model with optimized file handling.\n * Includes special handling for the Auth module.\n *\n * @param {string} modelName - The name of the model (e.g., \"User\", \"Post\", \"Auth\").\n * @returns {Promise<Object>} An object containing the imported modules\n */\nexport async function importPrismaModelModules(\n modelName: string\n): Promise<Record<string, any>> {\n const moduleDir = path.resolve(process.cwd(), \"src\", \"modules\", modelName);\n\n const result: {\n service?: any;\n controller?: any;\n middlewares?: any;\n authConfigs?: any;\n prismaQueryOptions?: any;\n router?: any;\n dtos: Record<string, any>;\n schemas: Record<string, any>;\n } = {\n dtos: {},\n schemas: {},\n };\n\n const fileStructure = getFileModelModulesFileStructure(modelName);\n // Batch process core files\n await Promise.all(\n Object.entries(fileStructure.core).map(async ([key, fileName]) => {\n const filePath = path.join(moduleDir, fileName);\n try {\n const module = await importModule(filePath).catch(() => null);\n if (module) {\n if (key === \"middlewares\") result[key] = module;\n else result[key as keyof typeof result] = module.default || module;\n }\n } catch {}\n })\n );\n\n await Promise.all([\n processSubdir(modelName, \"dtos\", result),\n processSubdir(modelName, \"schemas\", result),\n ]);\n\n // Cache the result\n prismaModelsModules[modelName] = result;\n\n return result;\n}\n\nexport type ModelFieldDefition = {\n name: string;\n type: string;\n isUnique: boolean;\n};\n\n/**\n * Represents the structure of relation fields for Prisma models.\n * It includes both singular (one-to-one) and list (one-to-many) relationships.\n *\n * @typedef {Object} RelationFields\n * @property {Array<{name: string, type: string}>} singular - List of singular relationships.\n * @property {Array<{name: string, type: string}>} list - List of list relationships.\n */\nexport type RelationFields = {\n singular: Omit<ModelFieldDefition, \"isUnique\">[];\n list: Omit<ModelFieldDefition, \"isUnique\">[];\n};\n\n/**\n * Reads the Prisma schema files and extracts all model definitions,\n * identifying their relations (one-to-one and one-to-many).\n */\nexport const prismaModelRelationFields: Record<string, RelationFields> = {};\n\nexport function getAllPrismaFiles(dirPath: string, fileList: string[] = []) {\n const files = fs.readdirSync(dirPath);\n\n files?.forEach((file) => {\n const filePath = path.join(dirPath, file);\n const stat = fs.statSync(filePath);\n\n // Skip migrations folder\n if (stat.isDirectory() && file !== \"migrations\") {\n fileList = getAllPrismaFiles(filePath, fileList);\n } else if (stat.isFile() && file.endsWith(\".prisma\")) {\n fileList.push(filePath);\n }\n });\n\n return fileList;\n}\n\nconst modelRegex = /model\\s+(\\w+)\\s*{/g;\nexport const models: string[] = [];\nexport const prismaModelsUniqueFields: Record<string, ModelFieldDefition[]> =\n [] as any;\n\nexport function initializePrismaModels(testName?: string) {\n const prismaContent: string[] = [];\n\n const files = getAllPrismaFiles(\"./prisma\");\n\n for (const file of files) {\n const content = fs.readFileSync(file, \"utf-8\");\n\n if (!prismaContent.includes(content)) prismaContent.push(content);\n }\n\n const content = prismaContent\n .join(\"\\n\")\n .replace(modelRegex, (_, modelName) => {\n if (!models.includes(modelName)) models.push(camelCase(modelName.trim()));\n return `model ${modelName} {`;\n });\n\n for (const model of models) {\n const modelName = pascalCase(model);\n\n // let modelFile;\n // for (const file of files) {\n // const filePath = path.join(file);\n // const stats = fs.statSync(filePath);\n\n // if (stats.isFile()) {\n // const content = fs.readFileSync(filePath, \"utf-8\");\n // prismaContent.push(content);\n // if (content.includes(`model ${modelName} {`)) {\n // modelFile = file;\n // break;\n // }\n // }\n // }\n\n // if (!modelFile) {\n // return;\n // }\n\n // const content = fs.readFileSync(path.join(modelFile), \"utf-8\");\n const modelStart = content.indexOf(`model ${modelName} {`);\n const modelEnd = content.indexOf(\"}\", modelStart);\n const modelDefinition = content.slice(modelStart, modelEnd);\n\n const relations: RelationFields = {\n singular: [],\n list: [],\n };\n const lines = modelDefinition.split(\"\\n\");\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n if (\n !trimmedLine ||\n trimmedLine.startsWith(\"model\") ||\n trimmedLine.startsWith(\"//\")\n )\n continue;\n\n const [fieldName, type] = trimmedLine.split(/\\s+/);\n const isUnique = trimmedLine.includes(\"@unique\");\n\n if (isUnique) {\n const existingFields = prismaModelsUniqueFields[model] || [];\n\n const alreadyExists = existingFields.some(\n (field) =>\n field.name === fieldName &&\n field.type === type &&\n field.isUnique === isUnique\n );\n\n if (!alreadyExists) {\n prismaModelsUniqueFields[model] = [\n ...existingFields,\n { name: fieldName, type, isUnique },\n ];\n }\n }\n\n const cleanType = type?.replace(\"[]\", \"\").replace(\"?\", \"\");\n\n if (\n trimmedLine.includes(\"@relation\") ||\n trimmedLine.match(/\\s+\\w+(\\[\\])?(\\s+@|$)/) ||\n models.includes(camelCase(cleanType || \"\"))\n ) {\n const modelStart = content.indexOf(`enum ${cleanType} {`);\n\n if (\n !cleanType ||\n modelStart >= 0 ||\n cleanType === \"String\" ||\n cleanType === \"Int\" ||\n cleanType === \"Float\" ||\n cleanType === \"Boolean\" ||\n cleanType === \"DateTime\" ||\n cleanType === \"Bytes\" ||\n cleanType === \"Decimal\" ||\n cleanType === \"BigInt\" ||\n cleanType === \"Json\"\n ) {\n continue;\n }\n\n if (!type?.includes(\"[]\")) {\n relations.singular.push({\n name: fieldName,\n type: cleanType,\n });\n } else {\n relations.list.push({\n name: fieldName,\n type: cleanType,\n });\n }\n }\n\n prismaModelRelationFields[modelName] = relations;\n }\n }\n}\n\ninitializePrismaModels();\n\n/**\n * Retrieves the relations for a given Prisma model.\n *\n * @param {string} modelName - The name of the model (e.g., \"User\").\n * @returns {RelationFields|undefined} The relation fields for the model, or `undefined` if no relations are found.\n */\nexport function getPrismaModelRelations(modelName: string) {\n modelName = pascalCase(modelName);\n\n if (!(modelName in prismaModelRelationFields)) return;\n return prismaModelRelationFields[modelName];\n}\n\n/**\n * Retrieves all the model names from the Prisma schema.\n *\n * @returns {string[]} An array of model names (e.g., [\"User\", \"Post\"]).\n */\nfunction getModels() {\n return models;\n}\n\n/** Retuns a given model unique fields\n * @param {string} modelName - The name of model in PascalCase\n * @returns {string[]} An array of all unique fields,\n */\nfunction getModelUniqueFields(modelName: string) {\n return prismaModelsUniqueFields[modelName];\n}\n\nexport { getModels, getModelUniqueFields };\n"]}
1
+ {"version":3,"file":"models.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/models.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"path\";\nimport fs from \"fs\";\nimport {\n camelCase,\n kebabCase,\n pascalCase,\n} from \"../../utils/helpers/change-case.helpers\";\nimport { getUserFileExtension } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\n\nexport let prismaModelsModules: Record<\n string,\n Awaited<ReturnType<typeof importPrismaModelModules>>\n> = {};\n\nexport function getModelModules(modelName: string) {\n return prismaModelsModules[kebabCase(modelName)];\n}\n\nexport function getFileModelModulesFileStructure(modelName: string) {\n const kebabModelName = kebabCase(modelName).toLowerCase();\n const lowerModelName = kebabModelName.toLowerCase();\n const isAuthModule = modelName.toLowerCase() === \"auth\";\n\n return {\n core: {\n service: `${kebabModelName}.service.${getUserFileExtension()}`,\n controller: `${kebabModelName}.controller.${getUserFileExtension()}`,\n middlewares: `${kebabModelName}.middlewares.${getUserFileExtension()}`,\n authConfigs: `${kebabModelName}.auth-configs.${getUserFileExtension()}`,\n prismaQueryOptions: `${kebabModelName}.prisma-query-options.${getUserFileExtension()}`,\n router: `${kebabModelName}.router.${getUserFileExtension()}`,\n },\n dtos: isAuthModule\n ? {\n login: `login.dto.${getUserFileExtension()}`,\n signup: `signup.dto.${getUserFileExtension()}`,\n updateMe: `update-me.dto.${getUserFileExtension()}`,\n updatePassword: `update-password.dto.${getUserFileExtension()}`,\n }\n : {\n model: `${lowerModelName}.dto.${getUserFileExtension()}`,\n create: `create-${lowerModelName}.dto.${getUserFileExtension()}`,\n update: `update-${lowerModelName}.dto.${getUserFileExtension()}`,\n query: `query-${lowerModelName}.dto.${getUserFileExtension()}`,\n },\n schemas: isAuthModule\n ? {\n login: `login.schema.${getUserFileExtension()}`,\n signup: `signup.schema.${getUserFileExtension()}`,\n updateMe: `update-me.schema.${getUserFileExtension()}`,\n updatePassword: `update-password.schema.${getUserFileExtension()}`,\n }\n : {\n model: `${lowerModelName}.schema.${getUserFileExtension()}`,\n create: `create-${lowerModelName}.schema.${getUserFileExtension()}`,\n update: `update-${lowerModelName}.schema.${getUserFileExtension()}`,\n query: `query-${lowerModelName}.schema.${getUserFileExtension()}`,\n },\n };\n}\n\nexport async function processSubdir(\n modelName: string,\n type: \"dtos\" | \"schemas\",\n result: Record<string, any>\n) {\n const moduleDir = path.resolve(\n process.cwd(),\n \"src\",\n \"modules\",\n kebabCase(modelName)\n );\n\n const subdir = path.join(moduleDir, type);\n const pascalModelName = pascalCase(modelName);\n const fileStructure = getFileModelModulesFileStructure(modelName);\n const isAuthModule = modelName.toLowerCase() === \"auth\";\n\n // Skip if directory doesn't exist\n try {\n await fs.promises.access(subdir).catch(() => {\n return; // Directory doesn't exist\n });\n\n await Promise.all(\n Object.entries(fileStructure[type]).map(async ([key, fileName]) => {\n const filePath = path.join(subdir, fileName);\n try {\n const module = await import(filePath).catch(() => null);\n if (module) {\n if (isAuthModule) {\n // Auth module uses different naming conventions\n const pascalKey = key.charAt(0).toUpperCase() + key.slice(1);\n const expectedName = `${pascalKey}${\n type === \"dtos\" ? \"Dto\" : \"Schema\"\n }`;\n result[type][key] = module.default;\n } else {\n // Standard modules\n const expectedName =\n key === \"model\"\n ? `${pascalModelName}${type === \"dtos\" ? \"Dto\" : \"Schema\"}`\n : `${\n key.charAt(0).toUpperCase() + key.slice(1)\n }${pascalModelName}${type === \"dtos\" ? \"Dto\" : \"Schema\"}`;\n\n result[type][key] = module.default;\n }\n }\n } catch (error) {\n // Silent fail - file might not exist\n }\n })\n );\n } catch (error) {\n // Directory doesn't exist, continue silently\n }\n}\n\n/**\n * Dynamically imports model-specific modules for a given model with optimized file handling.\n * Includes special handling for the Auth module.\n *\n * @param {string} modelName - The name of the model (e.g., \"User\", \"Post\", \"Auth\").\n * @returns {Promise<Object>} An object containing the imported modules\n */\nexport async function importPrismaModelModules(\n modelName: string\n): Promise<Record<string, any>> {\n const moduleDir = path.resolve(process.cwd(), \"src\", \"modules\", modelName);\n\n const result: {\n service?: any;\n controller?: any;\n middlewares?: any;\n authConfigs?: any;\n prismaQueryOptions?: any;\n router?: any;\n dtos: Record<string, any>;\n schemas: Record<string, any>;\n } = {\n dtos: {},\n schemas: {},\n };\n\n const fileStructure = getFileModelModulesFileStructure(modelName);\n // Batch process core files\n await Promise.all(\n Object.entries(fileStructure.core).map(async ([key, fileName]) => {\n const filePath = path.join(moduleDir, fileName);\n try {\n const module = await importModule(filePath).catch(() => null);\n if (module) {\n if (key === \"middlewares\") result[key] = module;\n else result[key as keyof typeof result] = module.default || module;\n }\n } catch {}\n })\n );\n\n await Promise.all([\n processSubdir(modelName, \"dtos\", result),\n processSubdir(modelName, \"schemas\", result),\n ]);\n\n // Cache the result\n prismaModelsModules[modelName] = result;\n\n return result;\n}\n\nexport type ModelFieldDefition = {\n name: string;\n type: string;\n isUnique: boolean;\n};\n\n/**\n * Represents the structure of relation fields for Prisma models.\n * It includes both singular (one-to-one) and list (one-to-many) relationships.\n *\n * @typedef {Object} RelationFields\n * @property {Array<{name: string, type: string}>} singular - List of singular relationships.\n * @property {Array<{name: string, type: string}>} list - List of list relationships.\n */\nexport type RelationFields = {\n singular: Omit<ModelFieldDefition, \"isUnique\">[];\n list: Omit<ModelFieldDefition, \"isUnique\">[];\n};\n\n/**\n * Reads the Prisma schema files and extracts all model definitions,\n * identifying their relations (one-to-one and one-to-many).\n */\nexport const prismaModelRelationFields: Record<string, RelationFields> = {};\n\nexport function getAllPrismaFiles(dirPath: string, fileList: string[] = []) {\n const files = fs.readdirSync(dirPath);\n\n files?.forEach((file) => {\n const filePath = path.join(dirPath, file);\n const stat = fs.statSync(filePath);\n\n // Skip migrations folder\n if (stat.isDirectory() && file !== \"migrations\") {\n fileList = getAllPrismaFiles(filePath, fileList);\n } else if (stat.isFile() && file.endsWith(\".prisma\")) {\n fileList.push(filePath);\n }\n });\n\n return fileList;\n}\n\nconst modelRegex = /model\\s+(\\w+)\\s*{/g;\nexport const models: string[] = [];\nexport const prismaModelsUniqueFields: Record<string, ModelFieldDefition[]> =\n [] as any;\n\nexport function initializePrismaModels(testName?: string) {\n const prismaContent: string[] = [];\n\n const files = getAllPrismaFiles(\"./prisma\");\n\n for (const file of files) {\n const content = fs.readFileSync(file, \"utf-8\");\n\n if (!prismaContent?.includes(content)) prismaContent.push(content);\n }\n\n const content = prismaContent\n .join(\"\\n\")\n .replace(modelRegex, (_, modelName) => {\n if (!models?.includes(modelName))\n models.push(camelCase(modelName.trim()));\n return `model ${modelName} {`;\n });\n\n for (const model of models) {\n const modelName = pascalCase(model);\n\n // let modelFile;\n // for (const file of files) {\n // const filePath = path.join(file);\n // const stats = fs.statSync(filePath);\n\n // if (stats.isFile()) {\n // const content = fs.readFileSync(filePath, \"utf-8\");\n // prismaContent.push(content);\n // if (content?.includes(`model ${modelName} {`)) {\n // modelFile = file;\n // break;\n // }\n // }\n // }\n\n // if (!modelFile) {\n // return;\n // }\n\n // const content = fs.readFileSync(path.join(modelFile), \"utf-8\");\n const modelStart = content.indexOf(`model ${modelName} {`);\n const modelEnd = content.indexOf(\"}\", modelStart);\n const modelDefinition = content.slice(modelStart, modelEnd);\n\n const relations: RelationFields = {\n singular: [],\n list: [],\n };\n const lines = modelDefinition.split(\"\\n\");\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n\n if (\n !trimmedLine ||\n trimmedLine.startsWith(\"model\") ||\n trimmedLine.startsWith(\"//\")\n )\n continue;\n\n const [fieldName, type] = trimmedLine.split(/\\s+/);\n const isUnique = trimmedLine?.includes(\"@unique\");\n\n if (isUnique) {\n const existingFields = prismaModelsUniqueFields[model] || [];\n\n const alreadyExists = existingFields.some(\n (field) =>\n field.name === fieldName &&\n field.type === type &&\n field.isUnique === isUnique\n );\n\n if (!alreadyExists) {\n prismaModelsUniqueFields[model] = [\n ...existingFields,\n { name: fieldName, type, isUnique },\n ];\n }\n }\n\n const cleanType = type?.replace(\"[]\", \"\").replace(\"?\", \"\");\n\n if (\n trimmedLine?.includes(\"@relation\") ||\n trimmedLine.match(/\\s+\\w+(\\[\\])?(\\s+@|$)/) ||\n models?.includes(camelCase(cleanType || \"\"))\n ) {\n const modelStart = content.indexOf(`enum ${cleanType} {`);\n\n if (\n !cleanType ||\n modelStart >= 0 ||\n cleanType === \"String\" ||\n cleanType === \"Int\" ||\n cleanType === \"Float\" ||\n cleanType === \"Boolean\" ||\n cleanType === \"DateTime\" ||\n cleanType === \"Bytes\" ||\n cleanType === \"Decimal\" ||\n cleanType === \"BigInt\" ||\n cleanType === \"Json\"\n ) {\n continue;\n }\n\n if (!type?.includes(\"[]\")) {\n relations.singular.push({\n name: fieldName,\n type: cleanType,\n });\n } else {\n relations.list.push({\n name: fieldName,\n type: cleanType,\n });\n }\n }\n\n prismaModelRelationFields[modelName] = relations;\n }\n }\n}\n\ninitializePrismaModels();\n\n/**\n * Retrieves the relations for a given Prisma model.\n *\n * @param {string} modelName - The name of the model (e.g., \"User\").\n * @returns {RelationFields|undefined} The relation fields for the model, or `undefined` if no relations are found.\n */\nexport function getPrismaModelRelations(modelName: string) {\n modelName = pascalCase(modelName);\n\n if (!(modelName in prismaModelRelationFields)) return;\n return prismaModelRelationFields[modelName];\n}\n\n/**\n * Retrieves all the model names from the Prisma schema.\n *\n * @returns {string[]} An array of model names (e.g., [\"User\", \"Post\"]).\n */\nfunction getModels() {\n return models;\n}\n\n/** Retuns a given model unique fields\n * @param {string} modelName - The name of model in PascalCase\n * @returns {string[]} An array of all unique fields,\n */\nfunction getModelUniqueFields(modelName: string) {\n return prismaModelsUniqueFields[modelName];\n}\n\nexport { getModels, getModelUniqueFields };\n"]}
@@ -25,9 +25,9 @@ function loadPrismaModule(a) {
25
25
  return __awaiter(this, void 0, void 0, function* () {
26
26
  if (!exports.prismaInstance) {
27
27
  try {
28
- let prismaPath = `${process.cwd()}/src/utils/prisma.${fs_helpers_1.userFileExtension}`;
28
+ let prismaPath = `${process.cwd()}/src/utils/prisma.${(0, fs_helpers_1.getUserFileExtension)()}`;
29
29
  if (!fs_1.default.existsSync(prismaPath)) {
30
- prismaPath = `${process.cwd()}/src/utils/prisma/index.${fs_helpers_1.userFileExtension}`;
30
+ prismaPath = `${process.cwd()}/src/utils/prisma/index.${(0, fs_helpers_1.getUserFileExtension)()}`;
31
31
  }
32
32
  const prismaModule = yield (0, global_helpers_1.importModule)(prismaPath);
33
33
  exports.prismaInstance = prismaModule.default || prismaModule.prisma;
@@ -35,7 +35,9 @@ function loadPrismaModule(a) {
35
35
  throw new Error("not found");
36
36
  }
37
37
  catch (error) {
38
- throw new app_error_1.default("Could not initialize Prisma module.", 500, { error });
38
+ throw new app_error_1.default("Could not initialize Prisma module.", 500, {
39
+ tip: `Make sure your prisma instance is exported under src/utils/prisma.${(0, fs_helpers_1.getUserFileExtension)()}, read more about Arkos' Project Structure under https://www.arkosjs.com/docs/project-structure#root-structure`,
40
+ });
39
41
  }
40
42
  }
41
43
  return exports.prismaInstance;
@@ -1 +1 @@
1
- {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AASA,4CAmBC;AAED,8CAEC;AAhCD,4CAAoB;AAEpB,gGAAuE;AACvE,4FAAmE;AACnE,6CAAiD;AACjD,qDAAgD;AAErC,QAAA,cAAc,GAAQ,IAAI,CAAC;AAEtC,SAAsB,gBAAgB,CAAC,CAAU;;QAC/C,IAAI,CAAC,sBAAc,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,IAAI,UAAU,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,qBAAqB,8BAAiB,EAAE,CAAC;gBAE1E,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/B,UAAU,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,2BAA2B,8BAAiB,EAAE,CAAC;gBAC9E,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,IAAA,6BAAY,EAAC,UAAU,CAAC,CAAC;gBACpD,sBAAc,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC;gBAE7D,IAAI,CAAC,sBAAc;oBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAEf,MAAM,IAAI,mBAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,OAAO,sBAAc,CAAC;IACxB,CAAC;CAAA;AAED,SAAgB,iBAAiB;IAC/B,OAAO,sBAAc,CAAC;AACxB,CAAC;AAEY,QAAA,uBAAuB,GAAG,IAAA,qBAAU,EAC/C,CAAO,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IACxD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,IAAI,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,mBAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAA,CACF,CAAC","sourcesContent":["import fs from \"fs\";\nimport { Request, Response, NextFunction } from \"express\";\nimport catchAsync from \"../../modules/error-handler/utils/catch-async\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { userFileExtension } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport async function loadPrismaModule(a?: string) {\n if (!prismaInstance) {\n try {\n let prismaPath = `${process.cwd()}/src/utils/prisma.${userFileExtension}`;\n\n if (!fs.existsSync(prismaPath)) {\n prismaPath = `${process.cwd()}/src/utils/prisma/index.${userFileExtension}`;\n }\n\n const prismaModule = await importModule(prismaPath);\n prismaInstance = prismaModule.default || prismaModule.prisma;\n\n if (!prismaInstance) throw new Error(\"not found\");\n } catch (error) {\n // console.error(`Failed to load prisma.${userFileExtension}:`, error);\n throw new AppError(\"Could not initialize Prisma module.\", 500, { error });\n }\n }\n return prismaInstance;\n}\n\nexport function getPrismaInstance() {\n return prismaInstance;\n}\n\nexport const checkDatabaseConnection = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const prisma = await loadPrismaModule();\n try {\n await prisma.$connect();\n next();\n } catch (error: any) {\n console.error(\"Database connection error\", error.message);\n next(new AppError(error.message, 503));\n }\n }\n);\n"]}
1
+ {"version":3,"file":"prisma.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/prisma.helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AASA,4CAoBC;AAED,8CAEC;AAjCD,4CAAoB;AAEpB,gGAAuE;AACvE,4FAAmE;AACnE,6CAAoD;AACpD,qDAAgD;AAErC,QAAA,cAAc,GAAQ,IAAI,CAAC;AAEtC,SAAsB,gBAAgB,CAAC,CAAU;;QAC/C,IAAI,CAAC,sBAAc,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,IAAI,UAAU,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,qBAAqB,IAAA,iCAAoB,GAAE,EAAE,CAAC;gBAE/E,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/B,UAAU,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,2BAA2B,IAAA,iCAAoB,GAAE,EAAE,CAAC;gBACnF,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,IAAA,6BAAY,EAAC,UAAU,CAAC,CAAC;gBACpD,sBAAc,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC;gBAE7D,IAAI,CAAC,sBAAc;oBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,mBAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;oBAC7D,GAAG,EAAE,qEAAqE,IAAA,iCAAoB,GAAE,gHAAgH;iBACjN,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,sBAAc,CAAC;IACxB,CAAC;CAAA;AAED,SAAgB,iBAAiB;IAC/B,OAAO,sBAAc,CAAC;AACxB,CAAC;AAEY,QAAA,uBAAuB,GAAG,IAAA,qBAAU,EAC/C,CAAO,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IACxD,MAAM,MAAM,GAAG,MAAM,gBAAgB,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,IAAI,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,mBAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAA,CACF,CAAC","sourcesContent":["import fs from \"fs\";\nimport { Request, Response, NextFunction } from \"express\";\nimport catchAsync from \"../../modules/error-handler/utils/catch-async\";\nimport AppError from \"../../modules/error-handler/utils/app-error\";\nimport { getUserFileExtension } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\n\nexport let prismaInstance: any = null;\n\nexport async function loadPrismaModule(a?: string) {\n if (!prismaInstance) {\n try {\n let prismaPath = `${process.cwd()}/src/utils/prisma.${getUserFileExtension()}`;\n\n if (!fs.existsSync(prismaPath)) {\n prismaPath = `${process.cwd()}/src/utils/prisma/index.${getUserFileExtension()}`;\n }\n\n const prismaModule = await importModule(prismaPath);\n prismaInstance = prismaModule.default || prismaModule.prisma;\n\n if (!prismaInstance) throw new Error(\"not found\");\n } catch (error) {\n throw new AppError(\"Could not initialize Prisma module.\", 500, {\n tip: `Make sure your prisma instance is exported under src/utils/prisma.${getUserFileExtension()}, read more about Arkos' Project Structure under https://www.arkosjs.com/docs/project-structure#root-structure`,\n });\n }\n }\n return prismaInstance;\n}\n\nexport function getPrismaInstance() {\n return prismaInstance;\n}\n\nexport const checkDatabaseConnection = catchAsync(\n async (req: Request, res: Response, next: NextFunction) => {\n const prisma = await loadPrismaModule();\n try {\n await prisma.$connect();\n next();\n } catch (error: any) {\n console.error(\"Database connection error\", error.message);\n next(new AppError(error.message, 503));\n }\n }\n);\n"]}
@@ -62,8 +62,8 @@ function isFieldDefinition(line) {
62
62
  }
63
63
  function parseFieldType(fieldType, line) {
64
64
  const baseType = fieldType.replace("?", "").replace("[]", "");
65
- const isArray = fieldType.includes("[]");
66
- if (line.includes("@relation")) {
65
+ const isArray = fieldType === null || fieldType === void 0 ? void 0 : fieldType.includes("[]");
66
+ if (line === null || line === void 0 ? void 0 : line.includes("@relation")) {
67
67
  return isArray ? `${baseType}[]` : baseType;
68
68
  }
69
69
  let tsType = baseType;
@@ -124,7 +124,7 @@ function generateTypes() {
124
124
  const parts = line.trim().split(/\s+/);
125
125
  const fieldName = parts[0];
126
126
  const fieldType = parts[1];
127
- const isOptional = line.includes("?");
127
+ const isOptional = line === null || line === void 0 ? void 0 : line.includes("?");
128
128
  const parsedType = parseFieldType(fieldType, line);
129
129
  typeDefinitions += ` ${fieldName}${isOptional ? "?" : ""}: ${parsedType};\n`;
130
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"export-prisma-types.js","sourceRoot":"","sources":["../../../../src/utils/scripts/export-prisma-types.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\n\nconst SCHEMA_FOLDER_PATH = \"./prisma/schema\";\n\nfunction getAllSchemaContent(): string {\n const files = fs\n .readdirSync(SCHEMA_FOLDER_PATH)\n .filter((file) => file.endsWith(\".prisma\"));\n\n let combinedSchema = \"\";\n for (const file of files) {\n const filePath = path.join(SCHEMA_FOLDER_PATH, file);\n const content = fs.readFileSync(filePath, \"utf-8\");\n combinedSchema += \"\\n\" + content;\n }\n\n return combinedSchema;\n}\n\nfunction isFieldDefinition(line: string): boolean {\n // Ignore lines that start with @@ (model attributes)\n if (line.trim().startsWith(\"@@\")) return false;\n\n // Ignore empty lines and comments\n if (!line.trim() || line.trim().startsWith(\"//\")) return false;\n\n // Must start with a valid field name (letter or underscore)\n if (!/^\\s*[a-zA-Z_]\\w*\\s/.test(line)) return false;\n\n // Must have at least a name and type\n const parts = line.trim().split(/\\s+/);\n if (parts.length < 2) return false;\n\n return true;\n}\n\nfunction parseFieldType(fieldType: string, line: string): string {\n // Remove any ? or [] from the type for the switch\n const baseType = fieldType.replace(\"?\", \"\").replace(\"[]\", \"\");\n const isArray = fieldType.includes(\"[]\");\n\n // If it's a relation (has @relation), keep the original type\n if (line.includes(\"@relation\")) {\n return isArray ? `${baseType}[]` : baseType;\n }\n\n // Convert Prisma scalar types to TypeScript types\n let tsType = baseType;\n switch (baseType) {\n case \"String\":\n tsType = \"string\";\n break;\n case \"Int\":\n case \"Float\":\n case \"Decimal\":\n tsType = \"number\";\n break;\n case \"Boolean\":\n tsType = \"boolean\";\n break;\n case \"DateTime\":\n tsType = \"Date\";\n break;\n case \"Json\":\n tsType = \"any\";\n break;\n case \"BigInt\":\n tsType = \"bigint\";\n break;\n case \"Bytes\":\n tsType = \"Buffer\";\n break;\n }\n\n return isArray ? `${tsType}[]` : tsType;\n}\n\nfunction generateTypes() {\n const schemaContent = getAllSchemaContent();\n\n let typeDefinitions = `// Auto-generated types from Prisma Schema\\n\\n`;\n\n // Generate enum types\n const enumRegex = /enum\\s+(\\w+)\\s*{([^}]*)}/g;\n let enumMatch;\n while ((enumMatch = enumRegex.exec(schemaContent)) !== null) {\n const [_, enumName, enumContent] = enumMatch;\n const values = enumContent\n .trim()\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean);\n\n typeDefinitions += `export enum ${enumName} {\\n`;\n values.forEach((value) => {\n typeDefinitions += ` ${value} = \"${value}\",\\n`;\n });\n typeDefinitions += `}\\n\\n`;\n }\n\n // Generate interface types\n const modelRegex = /model\\s+(\\w+)\\s*{([^}]*)}/g;\n let modelMatch;\n while ((modelMatch = modelRegex.exec(schemaContent)) !== null) {\n const [_, modelName, modelContent] = modelMatch;\n\n typeDefinitions += `export interface ${modelName} {\\n`;\n\n const lines = modelContent.split(\"\\n\");\n for (const line of lines) {\n if (!isFieldDefinition(line)) continue;\n\n const parts = line.trim().split(/\\s+/);\n const fieldName = parts[0];\n const fieldType = parts[1];\n\n const isOptional = line.includes(\"?\");\n const parsedType = parseFieldType(fieldType, line);\n\n typeDefinitions += ` ${fieldName}${\n isOptional ? \"?\" : \"\"\n }: ${parsedType};\\n`;\n }\n\n typeDefinitions += `}\\n\\n`;\n }\n\n const outputDir = path.join(process.cwd(), \".cache/types\");\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const outputPath = path.join(outputDir, \"prisma.ts\");\n fs.writeFileSync(outputPath, typeDefinitions);\n console.info(\"Types generated successfully at:\", outputPath);\n}\n\n// Run the type generator\ngenerateTypes();\n"]}
1
+ {"version":3,"file":"export-prisma-types.js","sourceRoot":"","sources":["../../../../src/utils/scripts/export-prisma-types.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\n\nconst SCHEMA_FOLDER_PATH = \"./prisma/schema\";\n\nfunction getAllSchemaContent(): string {\n const files = fs\n .readdirSync(SCHEMA_FOLDER_PATH)\n .filter((file) => file.endsWith(\".prisma\"));\n\n let combinedSchema = \"\";\n for (const file of files) {\n const filePath = path.join(SCHEMA_FOLDER_PATH, file);\n const content = fs.readFileSync(filePath, \"utf-8\");\n combinedSchema += \"\\n\" + content;\n }\n\n return combinedSchema;\n}\n\nfunction isFieldDefinition(line: string): boolean {\n // Ignore lines that start with @@ (model attributes)\n if (line.trim().startsWith(\"@@\")) return false;\n\n // Ignore empty lines and comments\n if (!line.trim() || line.trim().startsWith(\"//\")) return false;\n\n // Must start with a valid field name (letter or underscore)\n if (!/^\\s*[a-zA-Z_]\\w*\\s/.test(line)) return false;\n\n // Must have at least a name and type\n const parts = line.trim().split(/\\s+/);\n if (parts.length < 2) return false;\n\n return true;\n}\n\nfunction parseFieldType(fieldType: string, line: string): string {\n // Remove any ? or [] from the type for the switch\n const baseType = fieldType.replace(\"?\", \"\").replace(\"[]\", \"\");\n const isArray = fieldType?.includes(\"[]\");\n\n // If it's a relation (has @relation), keep the original type\n if (line?.includes(\"@relation\")) {\n return isArray ? `${baseType}[]` : baseType;\n }\n\n // Convert Prisma scalar types to TypeScript types\n let tsType = baseType;\n switch (baseType) {\n case \"String\":\n tsType = \"string\";\n break;\n case \"Int\":\n case \"Float\":\n case \"Decimal\":\n tsType = \"number\";\n break;\n case \"Boolean\":\n tsType = \"boolean\";\n break;\n case \"DateTime\":\n tsType = \"Date\";\n break;\n case \"Json\":\n tsType = \"any\";\n break;\n case \"BigInt\":\n tsType = \"bigint\";\n break;\n case \"Bytes\":\n tsType = \"Buffer\";\n break;\n }\n\n return isArray ? `${tsType}[]` : tsType;\n}\n\nfunction generateTypes() {\n const schemaContent = getAllSchemaContent();\n\n let typeDefinitions = `// Auto-generated types from Prisma Schema\\n\\n`;\n\n // Generate enum types\n const enumRegex = /enum\\s+(\\w+)\\s*{([^}]*)}/g;\n let enumMatch;\n while ((enumMatch = enumRegex.exec(schemaContent)) !== null) {\n const [_, enumName, enumContent] = enumMatch;\n const values = enumContent\n .trim()\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean);\n\n typeDefinitions += `export enum ${enumName} {\\n`;\n values.forEach((value) => {\n typeDefinitions += ` ${value} = \"${value}\",\\n`;\n });\n typeDefinitions += `}\\n\\n`;\n }\n\n // Generate interface types\n const modelRegex = /model\\s+(\\w+)\\s*{([^}]*)}/g;\n let modelMatch;\n while ((modelMatch = modelRegex.exec(schemaContent)) !== null) {\n const [_, modelName, modelContent] = modelMatch;\n\n typeDefinitions += `export interface ${modelName} {\\n`;\n\n const lines = modelContent.split(\"\\n\");\n for (const line of lines) {\n if (!isFieldDefinition(line)) continue;\n\n const parts = line.trim().split(/\\s+/);\n const fieldName = parts[0];\n const fieldType = parts[1];\n\n const isOptional = line?.includes(\"?\");\n const parsedType = parseFieldType(fieldType, line);\n\n typeDefinitions += ` ${fieldName}${\n isOptional ? \"?\" : \"\"\n }: ${parsedType};\\n`;\n }\n\n typeDefinitions += `}\\n\\n`;\n }\n\n const outputDir = path.join(process.cwd(), \".cache/types\");\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n const outputPath = path.join(outputDir, \"prisma.ts\");\n fs.writeFileSync(outputPath, typeDefinitions);\n console.info(\"Types generated successfully at:\", outputPath);\n}\n\n// Run the type generator\ngenerateTypes();\n"]}
@@ -29,7 +29,7 @@ function generateZodSchemas(inputContent) {
29
29
  function typeToZodSchema(type, isOptional = false) {
30
30
  type = type.trim();
31
31
  const baseSchema = (() => {
32
- if (type.includes("Date")) {
32
+ if (type === null || type === void 0 ? void 0 : type.includes("Date")) {
33
33
  return `z.date().or(z.string()).refine((val) => val instanceof Date || !isNaN(Date.parse(val)), "Data inválida")`;
34
34
  }
35
35
  switch (type) {
@@ -42,7 +42,7 @@ function generateZodSchemas(inputContent) {
42
42
  case "any":
43
43
  return "z.any()";
44
44
  default:
45
- if (type.includes("[]")) {
45
+ if (type === null || type === void 0 ? void 0 : type.includes("[]")) {
46
46
  const arrayType = type.replace("[]", "");
47
47
  switch (arrayType) {
48
48
  case "string":
@@ -79,8 +79,9 @@ function generateZodSchemas(inputContent) {
79
79
  .map((line) => line.trim())
80
80
  .filter((line) => line)
81
81
  .map((line) => {
82
+ var _a;
82
83
  const [propName, type] = line.split(":").map((part) => part.trim());
83
- if (["createdAt", "updatedAt", "deletedAt"].includes(propName.replace("?", ""))) {
84
+ if ((_a = ["createdAt", "updatedAt", "deletedAt"]) === null || _a === void 0 ? void 0 : _a.includes(propName.replace("?", ""))) {
84
85
  return null;
85
86
  }
86
87
  const isOptional = propName.endsWith("?");
@@ -1 +1 @@
1
- {"version":3,"file":"generate-zod-schemas.js","sourceRoot":"","sources":["../../../../src/utils/scripts/generate-zod-schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs/promises\";\nimport path from \"path\";\n\nasync function generateZodSchemas(inputContent: string): Promise<any> {\n let output = `import { z } from \"zod\";\\n\\n`;\n\n // Extract enum names first to help identify enum types later\n const enumNames = new Set();\n const enumRegex = /export enum (\\w+) {([^}]+)}/g;\n let enumMatch;\n while ((enumMatch = enumRegex.exec(inputContent)) !== null) {\n const enumName = enumMatch[1];\n const enumValues = enumMatch[2];\n enumNames.add(enumName);\n\n // Keep original enum definition\n output += `export enum ${enumName} {\\n${enumValues}\\n}\\n\\n`;\n }\n\n // Helper function to convert type to zod schema\n function typeToZodSchema(type: string, isOptional: boolean = false): string {\n type = type.trim();\n const baseSchema = (() => {\n if (type.includes(\"Date\")) {\n return `z.date().or(z.string()).refine((val) => val instanceof Date || !isNaN(Date.parse(val)), \"Data inválida\")`;\n }\n switch (type) {\n case \"string\":\n return \"z.string()\";\n case \"number\":\n return \"z.number()\";\n case \"boolean\":\n return \"z.boolean()\";\n case \"any\":\n return \"z.any()\";\n default:\n // Handle arrays\n if (type.includes(\"[]\")) {\n const arrayType = type.replace(\"[]\", \"\");\n // Handle primitive types in arrays\n switch (arrayType) {\n case \"string\":\n return \"z.array(z.string())\";\n case \"number\":\n return \"z.array(z.number())\";\n case \"boolean\":\n return \"z.array(z.boolean())\";\n default:\n // Check if it's an enum type\n if (enumNames.has(arrayType)) {\n return `z.array(z.nativeEnum(${arrayType}))`;\n }\n // Otherwise it's a relation/model type\n return `z.array(${arrayType}Schema)`;\n }\n }\n // Handle single types\n if (type.match(/^[A-Z]/)) {\n // Check if it's an enum type\n if (enumNames.has(type)) {\n return `z.nativeEnum(${type})`;\n }\n // Otherwise it's a relation/model type\n return `${type}Schema`;\n }\n return \"z.any()\";\n }\n })();\n\n return isOptional ? `${baseSchema}.optional()` : baseSchema;\n }\n\n // Extract and generate interface schemas\n const interfaceRegex = /export interface (\\w+) {([^}]+)}/g;\n let interfaceMatch;\n while ((interfaceMatch = interfaceRegex.exec(inputContent)) !== null) {\n const interfaceName = interfaceMatch[1];\n const interfaceBody = interfaceMatch[2];\n\n // Parse interface properties\n const properties = interfaceBody\n .split(\";\")\n .map((line) => line.trim())\n .filter((line) => line)\n .map((line) => {\n const [propName, type] = line.split(\":\").map((part) => part.trim());\n // Skip createdAt, updatedAt, and deletedAt\n if (\n [\"createdAt\", \"updatedAt\", \"deletedAt\"].includes(\n propName.replace(\"?\", \"\")\n )\n ) {\n return null;\n }\n const isOptional = propName.endsWith(\"?\");\n const cleanPropName = propName.replace(\"?\", \"\");\n return { name: cleanPropName, type, isOptional };\n })\n .filter((prop) => prop !== null);\n\n output += `export const ${interfaceName}Schema = z.object({\\n`;\n properties.forEach((prop, index) => {\n if (prop) {\n output += ` ${prop.name}: ${typeToZodSchema(\n prop.type,\n prop.isOptional\n )}`;\n if (index < properties.length - 1) output += \",\";\n output += \"\\n\";\n }\n });\n output += \"});\\n\\n\";\n }\n\n return output;\n}\n\n// Main execution\nasync function main() {\n try {\n const inputContent = await fs.readFile(\n path.join(process.cwd(), \".cache/types\", \"prisma.ts\"),\n \"utf-8\"\n );\n const generatedSchemas = await generateZodSchemas(inputContent);\n await fs.writeFile(\n path.join(process.cwd(), \".cache/generated-schemas.ts\"),\n generatedSchemas\n );\n console.info(\"Zod schemas generated successfully!\");\n } catch (error) {\n console.error(\"Error generating schemas:\", error);\n process.exit(1);\n }\n}\n\nmain();\n"]}
1
+ {"version":3,"file":"generate-zod-schemas.js","sourceRoot":"","sources":["../../../../src/utils/scripts/generate-zod-schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"fs/promises\";\nimport path from \"path\";\n\nasync function generateZodSchemas(inputContent: string): Promise<any> {\n let output = `import { z } from \"zod\";\\n\\n`;\n\n // Extract enum names first to help identify enum types later\n const enumNames = new Set();\n const enumRegex = /export enum (\\w+) {([^}]+)}/g;\n let enumMatch;\n while ((enumMatch = enumRegex.exec(inputContent)) !== null) {\n const enumName = enumMatch[1];\n const enumValues = enumMatch[2];\n enumNames.add(enumName);\n\n // Keep original enum definition\n output += `export enum ${enumName} {\\n${enumValues}\\n}\\n\\n`;\n }\n\n // Helper function to convert type to zod schema\n function typeToZodSchema(type: string, isOptional: boolean = false): string {\n type = type.trim();\n const baseSchema = (() => {\n if (type?.includes(\"Date\")) {\n return `z.date().or(z.string()).refine((val) => val instanceof Date || !isNaN(Date.parse(val)), \"Data inválida\")`;\n }\n switch (type) {\n case \"string\":\n return \"z.string()\";\n case \"number\":\n return \"z.number()\";\n case \"boolean\":\n return \"z.boolean()\";\n case \"any\":\n return \"z.any()\";\n default:\n // Handle arrays\n if (type?.includes(\"[]\")) {\n const arrayType = type.replace(\"[]\", \"\");\n // Handle primitive types in arrays\n switch (arrayType) {\n case \"string\":\n return \"z.array(z.string())\";\n case \"number\":\n return \"z.array(z.number())\";\n case \"boolean\":\n return \"z.array(z.boolean())\";\n default:\n // Check if it's an enum type\n if (enumNames.has(arrayType)) {\n return `z.array(z.nativeEnum(${arrayType}))`;\n }\n // Otherwise it's a relation/model type\n return `z.array(${arrayType}Schema)`;\n }\n }\n // Handle single types\n if (type.match(/^[A-Z]/)) {\n // Check if it's an enum type\n if (enumNames.has(type)) {\n return `z.nativeEnum(${type})`;\n }\n // Otherwise it's a relation/model type\n return `${type}Schema`;\n }\n return \"z.any()\";\n }\n })();\n\n return isOptional ? `${baseSchema}.optional()` : baseSchema;\n }\n\n // Extract and generate interface schemas\n const interfaceRegex = /export interface (\\w+) {([^}]+)}/g;\n let interfaceMatch;\n while ((interfaceMatch = interfaceRegex.exec(inputContent)) !== null) {\n const interfaceName = interfaceMatch[1];\n const interfaceBody = interfaceMatch[2];\n\n // Parse interface properties\n const properties = interfaceBody\n .split(\";\")\n .map((line) => line.trim())\n .filter((line) => line)\n .map((line) => {\n const [propName, type] = line.split(\":\").map((part) => part.trim());\n // Skip createdAt, updatedAt, and deletedAt\n if (\n [\"createdAt\", \"updatedAt\", \"deletedAt\"]?.includes(\n propName.replace(\"?\", \"\")\n )\n ) {\n return null;\n }\n const isOptional = propName.endsWith(\"?\");\n const cleanPropName = propName.replace(\"?\", \"\");\n return { name: cleanPropName, type, isOptional };\n })\n .filter((prop) => prop !== null);\n\n output += `export const ${interfaceName}Schema = z.object({\\n`;\n properties.forEach((prop, index) => {\n if (prop) {\n output += ` ${prop.name}: ${typeToZodSchema(\n prop.type,\n prop.isOptional\n )}`;\n if (index < properties.length - 1) output += \",\";\n output += \"\\n\";\n }\n });\n output += \"});\\n\\n\";\n }\n\n return output;\n}\n\n// Main execution\nasync function main() {\n try {\n const inputContent = await fs.readFile(\n path.join(process.cwd(), \".cache/types\", \"prisma.ts\"),\n \"utf-8\"\n );\n const generatedSchemas = await generateZodSchemas(inputContent);\n await fs.writeFile(\n path.join(process.cwd(), \".cache/generated-schemas.ts\"),\n generatedSchemas\n );\n console.info(\"Zod schemas generated successfully!\");\n } catch (error) {\n console.error(\"Error generating schemas:\", error);\n process.exit(1);\n }\n}\n\nmain();\n"]}
@@ -1 +1 @@
1
- "use strict";var R=function(e,m,s,u){function n(i){return i instanceof s?i:new s(function(t){t(i)})}return new(s||(s=Promise))(function(i,t){function d(l){try{o(u.next(l))}catch(r){t(r)}}function a(l){try{o(u.throw(l))}catch(r){t(r)}}function o(l){l.done?i(l.value):n(l.value).then(d,a)}o((u=u.apply(e,m||[])).next())})};import y from"express";import P from"cors";import b from"cookie-parser";import{getAuthRouter as q}from"./modules/auth/auth.router";import{getPrismaModelsRouter as E,getAvailableResourcesAndRoutesRouter as A}from"./modules/base/base.router";import O from"./modules/error-handler/error-handler.controller";import{rateLimit as _}from"express-rate-limit";import p from"path";import*as H from"dotenv";import M from"compression";import{handleRequestLogs as x}from"./modules/base/base.middlewares";import{checkDatabaseConnection as T,loadPrismaModule as L}from"./utils/helpers/prisma.helpers";import{getFileUploaderRouter as U}from"./modules/file-uploader/file-uploader.router";import{queryParser as N}from"./utils/helpers/query-parser.helpers";import h from"./utils/helpers/deepmerge.helper";const v=process.env.NODE_ENV;let c=".env";v==="production"?c=p.resolve(process.cwd(),".env.production"):v==="staging"?c=p.resolve(process.cwd(),".env.staging"):v==="development"?c=p.resolve(process.cwd(),".env.development"):v==="local"?c=p.resolve(process.cwd(),".env.local"):v==="test"?c=p.resolve(process.cwd(),".env.test"):v==="qa"&&(c=p.resolve(process.cwd(),".env.qa")),H.config({path:c});export const app=y();export function bootstrap(e){return R(this,void 0,void 0,function*(){var m,s,u;yield L(),e.configureApp&&(yield e.configureApp(app));const n=e?.middlewares,i=n?.disable||[],t=n?.replace||{};i.includes("compression")||app.use(t.compression||M(e?.compressionOptions)),i.includes("global-rate-limit")||app.use(t.globalRateLimit||_(h({windowMs:60*1e3,limit:1e3,standardHeaders:"draft-7",legacyHeaders:!1},e?.globalRequestRateLimitOptions||{}))),i.includes("cors")||app.use(t.cors||P(!((m=e?.cors)===null||m===void 0)&&m.customHandler?e.cors.customHandler:h({origin:(l,r)=>{var f;const w=(f=e?.cors)===null||f===void 0?void 0:f.allowedOrigins;w==="*"?r(null,!0):Array.isArray(w)?r(null,!l||w.includes(l)):typeof w=="string"?r(null,!l||w===l):r(null,!1)},methods:["GET","POST","PUT","DELETE","PATCH","OPTIONS"],allowedHeaders:["Content-Type","Authorization","Connection"],credentials:!0},((s=e?.cors)===null||s===void 0?void 0:s.options)||{}))),i.includes("express-json")||app.use(t.expressJson||y.json(e?.jsonBodyParserOptions)),i.includes("cookie-parser")||app.use(t.cookieParser||b(...e?.cookieParserParameters||[])),i.includes("query-parser")||app.use(t.queryParser||N(h({parseNull:!0,parseUndefined:!0,parseBoolean:!0},e?.queryParserOptions||{}))),i.includes("database-connection")||app.use(t.databaseConnection||T),i.includes("request-logger")||app.use(t.requestLogger||x),!((u=e?.middlewares)===null||u===void 0)&&u.additional&&e.middlewares.additional.forEach(l=>{app.use(l)});const d=e?.routers,a=d?.disable||[],o=d?.replace||{};if(a.includes("welcome-endpoint")||app.get("/api",o.welcomeEndpoint||((l,r)=>{r.status(200).json({message:e.welcomeMessage})})),!a.includes("file-uploader")){const l=o.fileUploader?yield o.fileUploader(e):yield U(e);app.use(l)}if(!a.includes("auth-router")&&e.authentication){const l=o.authRouter?yield o.authRouter(e):yield q(e);app.use("/api",l)}if(!a.includes("prisma-models-router")){const l=o.prismaModelsRouter?yield o.prismaModelsRouter(e):yield E(e);app.use("/api",l)}return app.use("/api",A()),d?.additional&&d.additional.forEach(l=>{app.use(l)}),i.includes("global-error-handler")||app.use(t.globalErrorHandler||O),app})}
1
+ "use strict";var R=function(e,w,u,n){function c(l){return l instanceof u?l:new u(function(d){d(l)})}return new(u||(u=Promise))(function(l,d){function t(i){try{r(n.next(i))}catch(s){d(s)}}function o(i){try{r(n.throw(i))}catch(s){d(s)}}function r(i){i.done?l(i.value):c(i.value).then(t,o)}r((n=n.apply(e,w||[])).next())})};import y from"express";import P from"cors";import b from"cookie-parser";import{getAuthRouter as q}from"./modules/auth/auth.router";import{getPrismaModelsRouter as E,getAvailableResourcesAndRoutesRouter as A}from"./modules/base/base.router";import O from"./modules/error-handler/error-handler.controller";import{rateLimit as _}from"express-rate-limit";import p from"path";import*as H from"dotenv";import M from"compression";import{handleRequestLogs as x}from"./modules/base/base.middlewares";import{checkDatabaseConnection as T,loadPrismaModule as L}from"./utils/helpers/prisma.helpers";import{getFileUploaderRouter as U}from"./modules/file-uploader/file-uploader.router";import{queryParser as N}from"./utils/helpers/query-parser.helpers";import h from"./utils/helpers/deepmerge.helper";const m=process.env.NODE_ENV;let a=".env";m==="production"?a=p.resolve(process.cwd(),".env.production"):m==="staging"?a=p.resolve(process.cwd(),".env.staging"):m==="development"?a=p.resolve(process.cwd(),".env.development"):m==="local"?a=p.resolve(process.cwd(),".env.local"):m==="test"?a=p.resolve(process.cwd(),".env.test"):m==="qa"&&(a=p.resolve(process.cwd(),".env.qa")),H.config({path:a});export const app=y();export function bootstrap(e){return R(this,void 0,void 0,function*(){var w,u,n;yield L(),e.configureApp&&(yield e.configureApp(app));const c=e?.middlewares,l=c?.disable||[],d=c?.replace||{};l?.includes("compression")||app.use(d.compression||M(e?.compressionOptions)),l?.includes("global-rate-limit")||app.use(d.globalRateLimit||_(h({windowMs:60*1e3,limit:1e3,standardHeaders:"draft-7",legacyHeaders:!1},e?.globalRequestRateLimitOptions||{}))),l?.includes("cors")||app.use(d.cors||P(!((w=e?.cors)===null||w===void 0)&&w.customHandler?e.cors.customHandler:h({origin:(i,s)=>{var f;const v=(f=e?.cors)===null||f===void 0?void 0:f.allowedOrigins;v==="*"?s(null,!0):Array.isArray(v)?s(null,!i||v?.includes(i)):typeof v=="string"?s(null,!i||v===i):s(null,!1)},methods:["GET","POST","PUT","DELETE","PATCH","OPTIONS"],allowedHeaders:["Content-Type","Authorization","Connection"],credentials:!0},((u=e?.cors)===null||u===void 0?void 0:u.options)||{}))),l?.includes("express-json")||app.use(d.expressJson||y.json(e?.jsonBodyParserOptions)),l?.includes("cookie-parser")||app.use(d.cookieParser||b(...e?.cookieParserParameters||[])),l?.includes("query-parser")||app.use(d.queryParser||N(h({parseNull:!0,parseUndefined:!0,parseBoolean:!0},e?.queryParserOptions||{}))),l?.includes("database-connection")||app.use(d.databaseConnection||T),l?.includes("request-logger")||app.use(d.requestLogger||x),!((n=e?.middlewares)===null||n===void 0)&&n.additional&&e.middlewares.additional.forEach(i=>{app.use(i)});const t=e?.routers,o=t?.disable||[],r=t?.replace||{};if(o?.includes("welcome-endpoint")||app.get("/api",r.welcomeEndpoint||((i,s)=>{s.status(200).json({message:e.welcomeMessage})})),!o?.includes("file-uploader")){const i=r.fileUploader?yield r.fileUploader(e):yield U(e);app.use(i)}if(!o?.includes("auth-router")&&e.authentication){const i=r.authRouter?yield r.authRouter(e):yield q(e);app.use("/api",i)}if(!o?.includes("prisma-models-router")){const i=r.prismaModelsRouter?yield r.prismaModelsRouter(e):yield E(e);app.use("/api",i)}return app.use("/api",A()),t?.additional&&t.additional.forEach(i=>{app.use(i)}),l?.includes("global-error-handler")||app.use(d.globalErrorHandler||O),app})}
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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","sourcesContent":["import express from \"express\";\nimport cors from \"cors\";\nimport cookieParser from \"cookie-parser\";\nimport { getAuthRouter } from \"./modules/auth/auth.router\";\nimport {\n getPrismaModelsRouter,\n getAvailableResourcesAndRoutesRouter,\n} from \"./modules/base/base.router\";\nimport errorHandler from \"./modules/error-handler/error-handler.controller\";\nimport { rateLimit } from \"express-rate-limit\";\nimport path from \"path\";\nimport * as dotenv from \"dotenv\";\nimport compression from \"compression\";\nimport { handleRequestLogs } from \"./modules/base/base.middlewares\";\nimport {\n checkDatabaseConnection,\n loadPrismaModule,\n} from \"./utils/helpers/prisma.helpers\";\nimport { getFileUploaderRouter } from \"./modules/file-uploader/file-uploader.router\";\nimport { ArkosConfig } from \"./types/arkos-config\";\nimport { queryParser } from \"./utils/helpers/query-parser.helpers\";\nimport deepmerge from \"./utils/helpers/deepmerge.helper\";\n\nconst ENV = process.env.NODE_ENV;\nlet envPath = \".env\";\n\n// Default to `.env.local` if available in any environment\nif (ENV === \"production\") {\n envPath = path.resolve(process.cwd(), \".env.production\");\n} else if (ENV === \"staging\") {\n envPath = path.resolve(process.cwd(), \".env.staging\");\n} else if (ENV === \"development\") {\n envPath = path.resolve(process.cwd(), \".env.development\");\n} else if (ENV === \"local\") {\n // For local development, .env.local can be used\n envPath = path.resolve(process.cwd(), \".env.local\");\n}\n\n// Optionally, add support for `.env.test`, `.env.qa`, or other environments if required\nelse if (ENV === \"test\") {\n envPath = path.resolve(process.cwd(), \".env.test\");\n} else if (ENV === \"qa\") {\n envPath = path.resolve(process.cwd(), \".env.qa\");\n}\n\ndotenv.config({ path: envPath });\n\nexport const app: express.Express = express();\n\nexport async function bootstrap(\n arkosConfig: ArkosConfig\n): Promise<express.Express> {\n await loadPrismaModule();\n\n if (arkosConfig.configureApp) await arkosConfig.configureApp(app);\n\n const middlewaresConfig = arkosConfig?.middlewares;\n const disabledMiddlewares = middlewaresConfig?.disable || [];\n const replacedMiddlewares = middlewaresConfig?.replace || {};\n\n // Compression middleware\n if (!disabledMiddlewares.includes(\"compression\"))\n app.use(\n replacedMiddlewares.compression ||\n compression(arkosConfig?.compressionOptions)\n );\n\n // Global rate limit middleware\n if (!disabledMiddlewares.includes(\"global-rate-limit\"))\n app.use(\n replacedMiddlewares.globalRateLimit ||\n rateLimit(\n deepmerge(\n {\n windowMs: 60 * 1000,\n limit: 1000,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n },\n arkosConfig?.globalRequestRateLimitOptions || {}\n )\n )\n );\n\n // CORS middleware\n if (!disabledMiddlewares.includes(\"cors\"))\n app.use(\n replacedMiddlewares.cors ||\n cors(\n arkosConfig?.cors?.customHandler\n ? arkosConfig.cors.customHandler\n : deepmerge(\n {\n origin: (\n origin: string,\n cb: (err: Error | null, allow?: boolean) => void\n ) => {\n const allowed = arkosConfig?.cors?.allowedOrigins;\n\n if (allowed === \"*\") {\n cb(null, true);\n } else if (Array.isArray(allowed)) {\n cb(null, !origin || allowed.includes(origin));\n } else if (typeof allowed === \"string\") {\n cb(null, !origin || allowed === origin);\n } else {\n cb(null, false);\n }\n },\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\n \"Content-Type\",\n \"Authorization\",\n \"Connection\",\n ],\n credentials: true,\n },\n arkosConfig?.cors?.options || {}\n )\n )\n );\n\n // JSON body parser middleware\n if (!disabledMiddlewares.includes(\"express-json\"))\n app.use(\n replacedMiddlewares.expressJson ||\n express.json(arkosConfig?.jsonBodyParserOptions)\n );\n\n // Cookie parser middleware\n if (!disabledMiddlewares.includes(\"cookie-parser\"))\n app.use(\n replacedMiddlewares.cookieParser ||\n cookieParser(...[...(arkosConfig?.cookieParserParameters || [])])\n );\n\n // Query parser middleware\n if (!disabledMiddlewares.includes(\"query-parser\"))\n app.use(\n replacedMiddlewares.queryParser ||\n queryParser(\n deepmerge(\n {\n parseNull: true,\n parseUndefined: true,\n parseBoolean: true,\n },\n arkosConfig?.queryParserOptions || {}\n )\n )\n );\n\n // Database connection check middleware\n if (!disabledMiddlewares.includes(\"database-connection\"))\n app.use(replacedMiddlewares.databaseConnection || checkDatabaseConnection);\n\n // Request logger middleware\n if (!disabledMiddlewares.includes(\"request-logger\"))\n app.use(replacedMiddlewares.requestLogger || handleRequestLogs);\n\n // Additional custom middlewares\n if (arkosConfig?.middlewares?.additional)\n arkosConfig.middlewares.additional.forEach((middleware) => {\n app.use(middleware);\n });\n\n // Configure routers\n const routersConfig = arkosConfig?.routers;\n const disabledRouters = routersConfig?.disable || [];\n const replacedRouters = routersConfig?.replace || {};\n\n // Welcome endpoint\n if (!disabledRouters.includes(\"welcome-endpoint\"))\n app.get(\n \"/api\",\n replacedRouters.welcomeEndpoint ||\n ((req, res) => {\n res.status(200).json({ message: arkosConfig.welcomeMessage });\n })\n );\n\n // File uploader router\n if (!disabledRouters.includes(\"file-uploader\")) {\n const fileUploaderRouter = replacedRouters.fileUploader\n ? await replacedRouters.fileUploader(arkosConfig)\n : await getFileUploaderRouter(arkosConfig);\n app.use(fileUploaderRouter);\n }\n\n // Auth router\n if (!disabledRouters.includes(\"auth-router\") && arkosConfig.authentication) {\n const authRouter = replacedRouters.authRouter\n ? await replacedRouters.authRouter(arkosConfig)\n : await getAuthRouter(arkosConfig);\n app.use(\"/api\", authRouter);\n }\n\n // Prisma models router\n if (!disabledRouters.includes(\"prisma-models-router\")) {\n const modelsRouter = replacedRouters.prismaModelsRouter\n ? await replacedRouters.prismaModelsRouter(arkosConfig)\n : await getPrismaModelsRouter(arkosConfig);\n app.use(\"/api\", modelsRouter);\n }\n\n app.use(\"/api\", getAvailableResourcesAndRoutesRouter());\n\n // Additional custom routers\n if (routersConfig?.additional) {\n routersConfig.additional.forEach((router) => {\n app.use(router);\n });\n }\n\n // Global error handler middleware (must be last)\n if (!disabledMiddlewares.includes(\"global-error-handler\"))\n app.use(replacedMiddlewares.globalErrorHandler || errorHandler);\n\n return app;\n}\n"]}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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","sourcesContent":["import express from \"express\";\nimport cors from \"cors\";\nimport cookieParser from \"cookie-parser\";\nimport { getAuthRouter } from \"./modules/auth/auth.router\";\nimport {\n getPrismaModelsRouter,\n getAvailableResourcesAndRoutesRouter,\n} from \"./modules/base/base.router\";\nimport errorHandler from \"./modules/error-handler/error-handler.controller\";\nimport { rateLimit } from \"express-rate-limit\";\nimport path from \"path\";\nimport * as dotenv from \"dotenv\";\nimport compression from \"compression\";\nimport { handleRequestLogs } from \"./modules/base/base.middlewares\";\nimport {\n checkDatabaseConnection,\n loadPrismaModule,\n} from \"./utils/helpers/prisma.helpers\";\nimport { getFileUploaderRouter } from \"./modules/file-uploader/file-uploader.router\";\nimport { ArkosConfig } from \"./types/arkos-config\";\nimport { queryParser } from \"./utils/helpers/query-parser.helpers\";\nimport deepmerge from \"./utils/helpers/deepmerge.helper\";\n\nconst ENV = process.env.NODE_ENV;\nlet envPath = \".env\";\n\n// Default to `.env.local` if available in any environment\nif (ENV === \"production\") {\n envPath = path.resolve(process.cwd(), \".env.production\");\n} else if (ENV === \"staging\") {\n envPath = path.resolve(process.cwd(), \".env.staging\");\n} else if (ENV === \"development\") {\n envPath = path.resolve(process.cwd(), \".env.development\");\n} else if (ENV === \"local\") {\n // For local development, .env.local can be used\n envPath = path.resolve(process.cwd(), \".env.local\");\n}\n\n// Optionally, add support for `.env.test`, `.env.qa`, or other environments if required\nelse if (ENV === \"test\") {\n envPath = path.resolve(process.cwd(), \".env.test\");\n} else if (ENV === \"qa\") {\n envPath = path.resolve(process.cwd(), \".env.qa\");\n}\n\ndotenv.config({ path: envPath });\n\nexport const app: express.Express = express();\n\nexport async function bootstrap(\n arkosConfig: ArkosConfig\n): Promise<express.Express> {\n await loadPrismaModule();\n\n if (arkosConfig.configureApp) await arkosConfig.configureApp(app);\n\n const middlewaresConfig = arkosConfig?.middlewares;\n const disabledMiddlewares = middlewaresConfig?.disable || [];\n const replacedMiddlewares = middlewaresConfig?.replace || {};\n\n // Compression middleware\n if (!disabledMiddlewares?.includes(\"compression\"))\n app.use(\n replacedMiddlewares.compression ||\n compression(arkosConfig?.compressionOptions)\n );\n\n // Global rate limit middleware\n if (!disabledMiddlewares?.includes(\"global-rate-limit\"))\n app.use(\n replacedMiddlewares.globalRateLimit ||\n rateLimit(\n deepmerge(\n {\n windowMs: 60 * 1000,\n limit: 1000,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n },\n arkosConfig?.globalRequestRateLimitOptions || {}\n )\n )\n );\n\n // CORS middleware\n if (!disabledMiddlewares?.includes(\"cors\"))\n app.use(\n replacedMiddlewares.cors ||\n cors(\n arkosConfig?.cors?.customHandler\n ? arkosConfig.cors.customHandler\n : deepmerge(\n {\n origin: (\n origin: string,\n cb: (err: Error | null, allow?: boolean) => void\n ) => {\n const allowed = arkosConfig?.cors?.allowedOrigins;\n\n if (allowed === \"*\") {\n cb(null, true);\n } else if (Array.isArray(allowed)) {\n cb(null, !origin || allowed?.includes(origin));\n } else if (typeof allowed === \"string\") {\n cb(null, !origin || allowed === origin);\n } else {\n cb(null, false);\n }\n },\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\n \"Content-Type\",\n \"Authorization\",\n \"Connection\",\n ],\n credentials: true,\n },\n arkosConfig?.cors?.options || {}\n )\n )\n );\n\n // JSON body parser middleware\n if (!disabledMiddlewares?.includes(\"express-json\"))\n app.use(\n replacedMiddlewares.expressJson ||\n express.json(arkosConfig?.jsonBodyParserOptions)\n );\n\n // Cookie parser middleware\n if (!disabledMiddlewares?.includes(\"cookie-parser\"))\n app.use(\n replacedMiddlewares.cookieParser ||\n cookieParser(...[...(arkosConfig?.cookieParserParameters || [])])\n );\n\n // Query parser middleware\n if (!disabledMiddlewares?.includes(\"query-parser\"))\n app.use(\n replacedMiddlewares.queryParser ||\n queryParser(\n deepmerge(\n {\n parseNull: true,\n parseUndefined: true,\n parseBoolean: true,\n },\n arkosConfig?.queryParserOptions || {}\n )\n )\n );\n\n // Database connection check middleware\n if (!disabledMiddlewares?.includes(\"database-connection\"))\n app.use(replacedMiddlewares.databaseConnection || checkDatabaseConnection);\n\n // Request logger middleware\n if (!disabledMiddlewares?.includes(\"request-logger\"))\n app.use(replacedMiddlewares.requestLogger || handleRequestLogs);\n\n // Additional custom middlewares\n if (arkosConfig?.middlewares?.additional)\n arkosConfig.middlewares.additional.forEach((middleware) => {\n app.use(middleware);\n });\n\n // Configure routers\n const routersConfig = arkosConfig?.routers;\n const disabledRouters = routersConfig?.disable || [];\n const replacedRouters = routersConfig?.replace || {};\n\n // Welcome endpoint\n if (!disabledRouters?.includes(\"welcome-endpoint\"))\n app.get(\n \"/api\",\n replacedRouters.welcomeEndpoint ||\n ((req, res) => {\n res.status(200).json({ message: arkosConfig.welcomeMessage });\n })\n );\n\n // File uploader router\n if (!disabledRouters?.includes(\"file-uploader\")) {\n const fileUploaderRouter = replacedRouters.fileUploader\n ? await replacedRouters.fileUploader(arkosConfig)\n : await getFileUploaderRouter(arkosConfig);\n app.use(fileUploaderRouter);\n }\n\n // Auth router\n if (!disabledRouters?.includes(\"auth-router\") && arkosConfig.authentication) {\n const authRouter = replacedRouters.authRouter\n ? await replacedRouters.authRouter(arkosConfig)\n : await getAuthRouter(arkosConfig);\n app.use(\"/api\", authRouter);\n }\n\n // Prisma models router\n if (!disabledRouters?.includes(\"prisma-models-router\")) {\n const modelsRouter = replacedRouters.prismaModelsRouter\n ? await replacedRouters.prismaModelsRouter(arkosConfig)\n : await getPrismaModelsRouter(arkosConfig);\n app.use(\"/api\", modelsRouter);\n }\n\n app.use(\"/api\", getAvailableResourcesAndRoutesRouter());\n\n // Additional custom routers\n if (routersConfig?.additional) {\n routersConfig.additional.forEach((router) => {\n app.use(router);\n });\n }\n\n // Global error handler middleware (must be last)\n if (!disabledMiddlewares?.includes(\"global-error-handler\"))\n app.use(replacedMiddlewares.globalErrorHandler || errorHandler);\n\n return app;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC","sourcesContent":["export * from \"../../utils/helpers/change-case.helpers\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC","sourcesContent":["export * from \"../../utils/helpers/change-case.helpers\";\n\nexport { MsDuration } from \"../../modules/auth/utils/helpers/auth.controller.helpers\";\n"]}
@@ -72,15 +72,14 @@ export const authControllerFactory = (...args_1) => __awaiter(void 0, [...args_1
72
72
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
73
73
  const authConfigs = (_a = getArkosConfig()) === null || _a === void 0 ? void 0 : _a.authentication;
74
74
  const usernameField = determineUsernameField(req);
75
- const topLevelField = usernameField.split(".")[0];
76
- const usernameValue = req.body[topLevelField];
75
+ const lastField = usernameField.split(".")[usernameField.split(".").length - 1];
76
+ const usernameValue = req.body[lastField];
77
77
  const { password } = req.body;
78
- if (!usernameValue || !password) {
79
- return next(new AppError(`Please provide ${topLevelField} and password`, 400));
80
- }
78
+ if (!usernameValue || !password)
79
+ return next(new AppError(`Please provide both ${lastField} and password`, 400));
81
80
  const prisma = getPrismaInstance();
82
81
  let whereClause;
83
- if (usernameField.includes(".")) {
82
+ if (usernameField === null || usernameField === void 0 ? void 0 : usernameField.includes(".")) {
84
83
  const valueToFind = getNestedValue(req.body, usernameField);
85
84
  if (valueToFind === undefined) {
86
85
  return next(new AppError(`Invalid ${usernameField} provided`, 400));
@@ -95,17 +94,14 @@ export const authControllerFactory = (...args_1) => __awaiter(void 0, [...args_1
95
94
  });
96
95
  if (!user ||
97
96
  !(yield authService.isCorrectPassword(password, user.password))) {
98
- return next(new AppError(`Incorrect ${topLevelField.toLowerCase()} or password`, 401));
97
+ return next(new AppError(`Incorrect ${lastField} or password`, 401));
99
98
  }
100
99
  const token = authService.signJwtToken(user.id);
101
100
  const cookieOptions = {
102
101
  expires: new Date(Date.now() +
103
102
  Number(toMs(((_b = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.jwt) === null || _b === void 0 ? void 0 : _b.expiresIn) ||
104
- arkosEnv.JWT_EXPIRES_IN)) *
105
- 24 *
106
- 60 *
107
- 60 *
108
- 1000),
103
+ process.env.JWT_EXPIRES_IN ||
104
+ arkosEnv.JWT_EXPIRES_IN))),
109
105
  httpOnly: ((_d = (_c = authConfigs === null || authConfigs === void 0 ? void 0 : authConfigs.jwt) === null || _c === void 0 ? void 0 : _c.cookie) === null || _d === void 0 ? void 0 : _d.httpOnly) ||
110
106
  process.env.JWT_COOKIE_HTTP_ONLY === "true" ||
111
107
  true,