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
@@ -1 +1 @@
1
- {"version":3,"file":"change-case.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/change-case.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["// Regexps involved with splitting words in various case formats.\nconst SPLIT_LOWER_UPPER_RE = /([\\p{Ll}\\d])(\\p{Lu})/gu;\nconst SPLIT_UPPER_UPPER_RE = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu;\n\n// Used to iterate over the initial split result and separate numbers.\nconst SPLIT_SEPARATE_NUMBER_RE = /(\\d)\\p{Ll}|(\\p{L})\\d/u;\n\n// Regexp involved with stripping non-word characters from the result.\nconst DEFAULT_STRIP_REGEXP = /[^\\p{L}\\d]+/giu;\n\n// The replacement value for splits.\nconst SPLIT_REPLACE_VALUE = \"$1\\0$2\";\n\n// The default characters to keep after transforming case.\nconst DEFAULT_PREFIX_SUFFIX_CHARACTERS = \"\";\n\n/**\n * Supported locale values. Use `false` to ignore locale.\n * Defaults to `undefined`, which uses the host environment.\n */\nexport type Locale = string[] | string | false | undefined;\n\n/**\n * Options used for converting strings to pascal/camel case.\n */\nexport interface PascalCaseOptions extends Options {\n mergeAmbiguousCharacters?: boolean;\n}\n\n/**\n * Options used for converting strings to any case.\n */\nexport interface Options {\n locale?: Locale;\n split?: (value: string) => string[];\n /** @deprecated Pass `split: splitSeparateNumbers` instead. */\n separateNumbers?: boolean;\n delimiter?: string;\n prefixCharacters?: string;\n suffixCharacters?: string;\n}\n\n/**\n * Split any cased input strings into an array of words.\n */\nexport function split(value: string) {\n let result = value.trim();\n\n result = result\n .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)\n .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);\n\n result = result.replace(DEFAULT_STRIP_REGEXP, \"\\0\");\n\n let start = 0;\n let end = result.length;\n\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\") start++;\n if (start === end) return [];\n while (result.charAt(end - 1) === \"\\0\") end--;\n\n return result.slice(start, end).split(/\\0/g);\n}\n\n/**\n * Split the input string into an array of words, separating numbers.\n */\nexport function splitSeparateNumbers(value: string) {\n const words = split(value);\n for (let i = 0; i < words.length; i++) {\n const word = words[i];\n const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);\n if (match) {\n const offset = match.index + (match[1] ?? match[2]).length;\n words.splice(i, 1, word.slice(0, offset), word.slice(offset));\n }\n }\n return words;\n}\n\n/**\n * Convert a string to space separated lower case (`foo bar`).\n */\nexport function noCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (\n prefix +\n words.map(lowerFactory(options?.locale)).join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to camel case (`fooBar`).\n */\nexport function camelCase(input: string, options?: PascalCaseOptions) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return (\n prefix +\n words\n .map((word, index) => {\n if (index === 0) return lower(word);\n return transform(word, index);\n })\n .join(options?.delimiter ?? \"\") +\n suffix\n );\n}\n\n/**\n * Convert a string to pascal case (`FooBar`).\n */\nexport function pascalCase(input: string, options?: PascalCaseOptions) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return prefix + words.map(transform).join(options?.delimiter ?? \"\") + suffix;\n}\n\n/**\n * Convert a string to pascal snake case (`Foo_Bar`).\n */\nexport function pascalSnakeCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to capital case (`Foo Bar`).\n */\nexport function capitalCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n return (\n prefix +\n words\n .map(capitalCaseTransformFactory(lower, upper))\n .join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to constant case (`FOO_BAR`).\n */\nexport function constantCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (\n prefix +\n words.map(upperFactory(options?.locale)).join(options?.delimiter ?? \"_\") +\n suffix\n );\n}\n\n/**\n * Convert a string to dot case (`foo.bar`).\n */\nexport function dotCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \".\", ...options });\n}\n\n/**\n * Convert a string to kebab case (`foo-bar`).\n */\nexport function kebabCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"-\", ...options });\n}\n\n/**\n * Convert a string to path case (`foo/bar`).\n */\nexport function pathCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"/\", ...options });\n}\n\n/**\n * Convert a string to path case (`Foo bar`).\n */\nexport function sentenceCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = capitalCaseTransformFactory(lower, upper);\n return (\n prefix +\n words\n .map((word, index) => {\n if (index === 0) return transform(word);\n return lower(word);\n })\n .join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to snake case (`foo_bar`).\n */\nexport function snakeCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to header case (`Foo-Bar`).\n */\nexport function trainCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"-\", ...options });\n}\n\nfunction lowerFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toLowerCase()\n : (input: string) => input.toLocaleLowerCase(locale);\n}\n\nfunction upperFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toUpperCase()\n : (input: string) => input.toLocaleUpperCase(locale);\n}\n\nfunction capitalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string\n) {\n return (word: string) => `${upper(word[0])}${lower(word.slice(1))}`;\n}\n\nfunction pascalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string\n) {\n return (word: string, index: number) => {\n const char0 = word[0];\n const initial =\n index > 0 && char0 >= \"0\" && char0 <= \"9\" ? \"_\" + char0 : upper(char0);\n return initial + lower(word.slice(1));\n };\n}\n\nfunction splitPrefixSuffix(\n input: string,\n options: Options = {}\n): [string, string[], string] {\n const splitFn =\n options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);\n const prefixCharacters =\n options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n const suffixCharacters =\n options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n let prefixIndex = 0;\n let suffixIndex = input.length;\n\n while (prefixIndex < input.length) {\n const char = input.charAt(prefixIndex);\n if (!prefixCharacters.includes(char)) break;\n prefixIndex++;\n }\n\n while (suffixIndex > prefixIndex) {\n const index = suffixIndex - 1;\n const char = input.charAt(index);\n if (!suffixCharacters.includes(char)) break;\n suffixIndex = index;\n }\n\n return [\n input.slice(0, prefixIndex),\n splitFn(input.slice(prefixIndex, suffixIndex)),\n input.slice(suffixIndex),\n ];\n}\n"]}
1
+ {"version":3,"file":"change-case.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/change-case.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["// Regexps involved with splitting words in various case formats.\nconst SPLIT_LOWER_UPPER_RE = /([\\p{Ll}\\d])(\\p{Lu})/gu;\nconst SPLIT_UPPER_UPPER_RE = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu;\n\n// Used to iterate over the initial split result and separate numbers.\nconst SPLIT_SEPARATE_NUMBER_RE = /(\\d)\\p{Ll}|(\\p{L})\\d/u;\n\n// Regexp involved with stripping non-word characters from the result.\nconst DEFAULT_STRIP_REGEXP = /[^\\p{L}\\d]+/giu;\n\n// The replacement value for splits.\nconst SPLIT_REPLACE_VALUE = \"$1\\0$2\";\n\n// The default characters to keep after transforming case.\nconst DEFAULT_PREFIX_SUFFIX_CHARACTERS = \"\";\n\n/**\n * Supported locale values. Use `false` to ignore locale.\n * Defaults to `undefined`, which uses the host environment.\n */\nexport type Locale = string[] | string | false | undefined;\n\n/**\n * Options used for converting strings to pascal/camel case.\n */\nexport interface PascalCaseOptions extends Options {\n mergeAmbiguousCharacters?: boolean;\n}\n\n/**\n * Options used for converting strings to any case.\n */\nexport interface Options {\n locale?: Locale;\n split?: (value: string) => string[];\n /** @deprecated Pass `split: splitSeparateNumbers` instead. */\n separateNumbers?: boolean;\n delimiter?: string;\n prefixCharacters?: string;\n suffixCharacters?: string;\n}\n\n/**\n * Split any cased input strings into an array of words.\n */\nexport function split(value: string) {\n let result = value.trim();\n\n result = result\n .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)\n .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);\n\n result = result.replace(DEFAULT_STRIP_REGEXP, \"\\0\");\n\n let start = 0;\n let end = result.length;\n\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\") start++;\n if (start === end) return [];\n while (result.charAt(end - 1) === \"\\0\") end--;\n\n return result.slice(start, end).split(/\\0/g);\n}\n\n/**\n * Split the input string into an array of words, separating numbers.\n */\nexport function splitSeparateNumbers(value: string) {\n const words = split(value);\n for (let i = 0; i < words.length; i++) {\n const word = words[i];\n const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);\n if (match) {\n const offset = match.index + (match[1] ?? match[2]).length;\n words.splice(i, 1, word.slice(0, offset), word.slice(offset));\n }\n }\n return words;\n}\n\n/**\n * Convert a string to space separated lower case (`foo bar`).\n */\nexport function noCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (\n prefix +\n words.map(lowerFactory(options?.locale)).join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to camel case (`fooBar`).\n */\nexport function camelCase(input: string, options?: PascalCaseOptions) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return (\n prefix +\n words\n .map((word, index) => {\n if (index === 0) return lower(word);\n return transform(word, index);\n })\n .join(options?.delimiter ?? \"\") +\n suffix\n );\n}\n\n/**\n * Convert a string to pascal case (`FooBar`).\n */\nexport function pascalCase(input: string, options?: PascalCaseOptions) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = options?.mergeAmbiguousCharacters\n ? capitalCaseTransformFactory(lower, upper)\n : pascalCaseTransformFactory(lower, upper);\n return prefix + words.map(transform).join(options?.delimiter ?? \"\") + suffix;\n}\n\n/**\n * Convert a string to pascal snake case (`Foo_Bar`).\n */\nexport function pascalSnakeCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to capital case (`Foo Bar`).\n */\nexport function capitalCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n return (\n prefix +\n words\n .map(capitalCaseTransformFactory(lower, upper))\n .join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to constant case (`FOO_BAR`).\n */\nexport function constantCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n return (\n prefix +\n words.map(upperFactory(options?.locale)).join(options?.delimiter ?? \"_\") +\n suffix\n );\n}\n\n/**\n * Convert a string to dot case (`foo.bar`).\n */\nexport function dotCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \".\", ...options });\n}\n\n/**\n * Convert a string to kebab case (`foo-bar`).\n */\nexport function kebabCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"-\", ...options });\n}\n\n/**\n * Convert a string to path case (`foo/bar`).\n */\nexport function pathCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"/\", ...options });\n}\n\n/**\n * Convert a string to path case (`Foo bar`).\n */\nexport function sentenceCase(input: string, options?: Options) {\n const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n const lower = lowerFactory(options?.locale);\n const upper = upperFactory(options?.locale);\n const transform = capitalCaseTransformFactory(lower, upper);\n return (\n prefix +\n words\n .map((word, index) => {\n if (index === 0) return transform(word);\n return lower(word);\n })\n .join(options?.delimiter ?? \" \") +\n suffix\n );\n}\n\n/**\n * Convert a string to snake case (`foo_bar`).\n */\nexport function snakeCase(input: string, options?: Options) {\n return noCase(input, { delimiter: \"_\", ...options });\n}\n\n/**\n * Convert a string to header case (`Foo-Bar`).\n */\nexport function trainCase(input: string, options?: Options) {\n return capitalCase(input, { delimiter: \"-\", ...options });\n}\n\nfunction lowerFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toLowerCase()\n : (input: string) => input.toLocaleLowerCase(locale);\n}\n\nfunction upperFactory(locale: Locale): (input: string) => string {\n return locale === false\n ? (input: string) => input.toUpperCase()\n : (input: string) => input.toLocaleUpperCase(locale);\n}\n\nfunction capitalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string\n) {\n return (word: string) => `${upper(word[0])}${lower(word.slice(1))}`;\n}\n\nfunction pascalCaseTransformFactory(\n lower: (input: string) => string,\n upper: (input: string) => string\n) {\n return (word: string, index: number) => {\n const char0 = word[0];\n const initial =\n index > 0 && char0 >= \"0\" && char0 <= \"9\" ? \"_\" + char0 : upper(char0);\n return initial + lower(word.slice(1));\n };\n}\n\nfunction splitPrefixSuffix(\n input: string,\n options: Options = {}\n): [string, string[], string] {\n const splitFn =\n options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);\n const prefixCharacters =\n options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n const suffixCharacters =\n options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n let prefixIndex = 0;\n let suffixIndex = input.length;\n\n while (prefixIndex < input.length) {\n const char = input.charAt(prefixIndex);\n if (!prefixCharacters?.includes(char)) break;\n prefixIndex++;\n }\n\n while (suffixIndex > prefixIndex) {\n const index = suffixIndex - 1;\n const char = input.charAt(index);\n if (!suffixCharacters?.includes(char)) break;\n suffixIndex = index;\n }\n\n return [\n input.slice(0, prefixIndex),\n splitFn(input.slice(prefixIndex, suffixIndex)),\n input.slice(suffixIndex),\n ];\n}\n"]}
@@ -3,51 +3,17 @@ import fs from "fs";
3
3
  export const statAsync = promisify(fs.stat);
4
4
  export const accessAsync = promisify(fs.access);
5
5
  export const mkdirAsync = promisify(fs.mkdir);
6
- export const extension = (() => {
7
- var _a;
8
- let currentFile = "";
9
- try {
10
- if (typeof process !== "undefined" && process.env) {
11
- currentFile = __filename || "";
12
- }
13
- else {
14
- if (typeof (global === null || global === void 0 ? void 0 : global.document) === "undefined") {
15
- currentFile = new Function("return typeof import.meta !== 'undefined' ? import.meta.url : ''")();
16
- }
17
- }
18
- }
19
- catch (e) {
20
- }
21
- if (currentFile.endsWith(".ts") || currentFile.endsWith(".tsx")) {
22
- return "ts";
23
- }
24
- try {
25
- const globalObj = globalThis;
26
- if (typeof globalObj.Deno !== "undefined" && globalObj.Deno.emit) {
27
- return "ts";
28
- }
29
- if (typeof globalObj.Bun !== "undefined") {
30
- return "ts";
31
- }
32
- if (typeof process !== "undefined" &&
33
- process.versions &&
34
- parseInt(process.versions.node.split(".")[0]) >= 18) {
35
- const isUsingTypeScript = (_a = new Error().stack) === null || _a === void 0 ? void 0 : _a.includes(".ts:");
36
- if (isUsingTypeScript)
37
- return "ts";
38
- }
39
- }
40
- catch (e) {
41
- }
42
- return "js";
43
- })();
44
- export const userFileExtension = (() => {
6
+ export let userFileExtension;
7
+ export const getUserFileExtension = () => {
8
+ if (userFileExtension)
9
+ return userFileExtension;
45
10
  try {
46
11
  const fs = require("fs");
47
12
  const path = require("path");
48
13
  const projectRoot = process.cwd();
49
14
  if (fs.existsSync(path.join(projectRoot, "tsconfig.json"))) {
50
- return "ts";
15
+ userFileExtension = "ts";
16
+ return userFileExtension;
51
17
  }
52
18
  const srcDirs = ["src", "source", "app", "lib"]
53
19
  .map((dir) => path.join(projectRoot, dir))
@@ -56,13 +22,16 @@ export const userFileExtension = (() => {
56
22
  for (const dir of srcDirs) {
57
23
  const files = fs.readdirSync(dir);
58
24
  if (files.some((file) => file.endsWith(".ts") || file.endsWith(".tsx"))) {
59
- return "ts";
25
+ userFileExtension = "ts";
26
+ return userFileExtension;
60
27
  }
61
28
  }
62
- return "js";
29
+ userFileExtension = "js";
30
+ return userFileExtension;
63
31
  }
64
32
  catch (e) {
65
- return "js";
33
+ userFileExtension = "js";
34
+ return userFileExtension;
66
35
  }
67
- })();
36
+ };
68
37
  //# sourceMappingURL=fs.helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/fs.helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { promisify } from \"util\";\nimport fs from \"fs\";\n\nexport const statAsync = promisify(fs.stat);\nexport const accessAsync = promisify(fs.access);\nexport const mkdirAsync = promisify(fs.mkdir);\n\n// Runtime-agnostic approach with proper TypeScript support\nexport const extension = (() => {\n // Safely detect environment without direct import.meta reference\n let currentFile = \"\";\n\n // Try to determine the current file using environment-specific approaches\n try {\n if (typeof process !== \"undefined\" && process.env) {\n // Node.js environment - use __filename\n currentFile = __filename || \"\";\n } else {\n // Handle other environments (browser, Deno, etc.)\n // This branch won't be reached in CommonJS builds\n if (typeof (global as any)?.document === \"undefined\") {\n // Non-browser environment that might support import.meta\n // We'll use eval to prevent direct parsing of import.meta\n currentFile = new Function(\n \"return typeof import.meta !== 'undefined' ? import.meta.url : ''\"\n )();\n }\n }\n } catch (e) {\n // Ignore errors during detection\n }\n\n // Check file extension\n if (currentFile.endsWith(\".ts\") || currentFile.endsWith(\".tsx\")) {\n return \"ts\";\n }\n\n // Use \"any\" type and conditional checks to avoid TypeScript errors\n try {\n // Check for Deno\n const globalObj = globalThis as any;\n if (typeof globalObj.Deno !== \"undefined\" && globalObj.Deno.emit) {\n return \"ts\";\n }\n\n // Check for Bun\n if (typeof globalObj.Bun !== \"undefined\") {\n return \"ts\";\n }\n\n // Check for newer Node with TS support\n if (\n typeof process !== \"undefined\" &&\n process.versions &&\n parseInt((process.versions as any).node.split(\".\")[0]) >= 18\n ) {\n const isUsingTypeScript = new Error().stack?.includes(\".ts:\");\n if (isUsingTypeScript) return \"ts\";\n }\n } catch (e) {\n // Ignore errors during detection\n }\n\n return \"js\";\n})();\n\n/**\n * Immediately detects if the user's project uses TypeScript or JavaScript\n * @returns 'ts' | 'js'\n */\nexport const userFileExtension = ((): \"ts\" | \"js\" => {\n try {\n // Only works in Node.js environment\n const fs = require(\"fs\");\n const path = require(\"path\");\n\n // Get the project root\n const projectRoot = process.cwd();\n\n // Check for tsconfig.json in project root as the fastest check\n if (fs.existsSync(path.join(projectRoot, \"tsconfig.json\"))) {\n return \"ts\";\n }\n\n // Check common src directories\n const srcDirs = [\"src\", \"source\", \"app\", \"lib\"]\n .map((dir) => path.join(projectRoot, dir))\n .filter((dir) => fs.existsSync(dir) && fs.statSync(dir).isDirectory());\n\n // Add project root to directories to check\n srcDirs.push(projectRoot);\n\n // Check each directory for .ts files\n for (const dir of srcDirs) {\n const files = fs.readdirSync(dir);\n if (\n files.some((file: any) => file.endsWith(\".ts\") || file.endsWith(\".tsx\"))\n ) {\n return \"ts\";\n }\n }\n\n // Default to js if no TypeScript indicators found\n return \"js\";\n } catch (e) {\n // Fallback to js if any errors occur\n return \"js\";\n }\n})();\n"]}
1
+ {"version":3,"file":"fs.helpers.js","sourceRoot":"","sources":["../../../../src/utils/helpers/fs.helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AA6D9C,MAAM,CAAC,IAAI,iBAA0C,CAAC;AAMtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAgB,EAAE;IACpD,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAEhD,IAAI,CAAC;QAEH,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAG7B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAGlC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;YAC3D,iBAAiB,GAAG,IAAI,CAAC;YACzB,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QAGD,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC;aAC5C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;aACzC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAGzE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAG1B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAClC,IACE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EACxE,CAAC;gBACD,iBAAiB,GAAG,IAAI,CAAC;gBACzB,OAAO,iBAAiB,CAAC;YAC3B,CAAC;QACH,CAAC;QAGD,iBAAiB,GAAG,IAAI,CAAC;QACzB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAEX,iBAAiB,GAAG,IAAI,CAAC;QACzB,OAAO,iBAAiB,CAAC;IAC3B,CAAC;AACH,CAAC,CAAC","sourcesContent":["import { promisify } from \"util\";\nimport fs from \"fs\";\n\nexport const statAsync = promisify(fs.stat);\nexport const accessAsync = promisify(fs.access);\nexport const mkdirAsync = promisify(fs.mkdir);\n\n// // Runtime-agnostic approach with proper TypeScript support\n// export const extension = (() => {\n// // Safely detect environment without direct import.meta reference\n// let currentFile = \"\";\n\n// // Try to determine the current file using environment-specific approaches\n// try {\n// if (typeof process !== \"undefined\" && process.env) {\n// // Node.js environment - use __filename\n// currentFile = __filename || \"\";\n// } else {\n// // Handle other environments (browser, Deno, etc.)\n// // This branch won't be reached in CommonJS builds\n// if (typeof (global as any)?.document === \"undefined\") {\n// // Non-browser environment that might support import.meta\n// // We'll use eval to prevent direct parsing of import.meta\n// currentFile = new Function(\n// \"return typeof import.meta !== 'undefined' ? import.meta.url : ''\"\n// )();\n// }\n// }\n// } catch (e) {\n// // Ignore errors during detection\n// }\n\n// // Check file extension\n// if (currentFile.endsWith(\".ts\") || currentFile.endsWith(\".tsx\")) {\n// return \"ts\";\n// }\n\n// // Use \"any\" type and conditional checks to avoid TypeScript errors\n// try {\n// // Check for Deno\n// const globalObj = globalThis as any;\n// if (typeof globalObj.Deno !== \"undefined\" && globalObj.Deno.emit) {\n// return \"ts\";\n// }\n\n// // Check for Bun\n// if (typeof globalObj.Bun !== \"undefined\") {\n// return \"ts\";\n// }\n\n// // Check for newer Node with TS support\n// if (\n// typeof process !== \"undefined\" &&\n// process.versions &&\n// parseInt((process.versions as any).node.split(\".\")[0]) >= 18\n// ) {\n// const isUsingTypeScript = new Error().stack?.includes(\".ts:\");\n// if (isUsingTypeScript) return \"ts\";\n// }\n// } catch (e) {\n// // Ignore errors during detection\n// }\n\n// return \"js\";\n// })();\n\nexport let userFileExtension: \"ts\" | \"js\" | undefined;\n\n/**\n * Immediately detects if the user's project uses TypeScript or JavaScript\n * @returns 'ts' | 'js'\n */\nexport const getUserFileExtension = (): \"ts\" | \"js\" => {\n if (userFileExtension) return userFileExtension;\n\n try {\n // Only works in Node.js environment\n const fs = require(\"fs\");\n const path = require(\"path\");\n\n // Get the project root\n const projectRoot = process.cwd();\n\n // Check for tsconfig.json in project root as the fastest check\n if (fs.existsSync(path.join(projectRoot, \"tsconfig.json\"))) {\n userFileExtension = \"ts\";\n return userFileExtension;\n }\n\n // Check common src directories\n const srcDirs = [\"src\", \"source\", \"app\", \"lib\"]\n .map((dir) => path.join(projectRoot, dir))\n .filter((dir) => fs.existsSync(dir) && fs.statSync(dir).isDirectory());\n\n // Add project root to directories to check\n srcDirs.push(projectRoot);\n\n // Check each directory for .ts files\n for (const dir of srcDirs) {\n const files = fs.readdirSync(dir);\n if (\n files.some((file: any) => file.endsWith(\".ts\") || file.endsWith(\".tsx\"))\n ) {\n userFileExtension = \"ts\";\n return userFileExtension;\n }\n }\n\n // Default to js if no TypeScript indicators found\n userFileExtension = \"js\";\n return userFileExtension;\n } catch (e) {\n // Fallback to js if any errors occur\n userFileExtension = \"js\";\n return userFileExtension;\n }\n};\n"]}
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import path from "path";
11
11
  import fs from "fs";
12
12
  import { camelCase, kebabCase, pascalCase, } from "../../utils/helpers/change-case.helpers";
13
- import { userFileExtension } from "./fs.helpers";
13
+ import { getUserFileExtension } from "./fs.helpers";
14
14
  import { importModule } from "./global.helpers";
15
15
  export let prismaModelsModules = {};
16
16
  export function getModelModules(modelName) {
@@ -22,38 +22,38 @@ export function getFileModelModulesFileStructure(modelName) {
22
22
  const isAuthModule = modelName.toLowerCase() === "auth";
23
23
  return {
24
24
  core: {
25
- service: `${kebabModelName}.service.${userFileExtension}`,
26
- controller: `${kebabModelName}.controller.${userFileExtension}`,
27
- middlewares: `${kebabModelName}.middlewares.${userFileExtension}`,
28
- authConfigs: `${kebabModelName}.auth-configs.${userFileExtension}`,
29
- prismaQueryOptions: `${kebabModelName}.prisma-query-options.${userFileExtension}`,
30
- router: `${kebabModelName}.router.${userFileExtension}`,
25
+ service: `${kebabModelName}.service.${getUserFileExtension()}`,
26
+ controller: `${kebabModelName}.controller.${getUserFileExtension()}`,
27
+ middlewares: `${kebabModelName}.middlewares.${getUserFileExtension()}`,
28
+ authConfigs: `${kebabModelName}.auth-configs.${getUserFileExtension()}`,
29
+ prismaQueryOptions: `${kebabModelName}.prisma-query-options.${getUserFileExtension()}`,
30
+ router: `${kebabModelName}.router.${getUserFileExtension()}`,
31
31
  },
32
32
  dtos: isAuthModule
33
33
  ? {
34
- login: `login.dto.${userFileExtension}`,
35
- signup: `signup.dto.${userFileExtension}`,
36
- updateMe: `update-me.dto.${userFileExtension}`,
37
- updatePassword: `update-password.dto.${userFileExtension}`,
34
+ login: `login.dto.${getUserFileExtension()}`,
35
+ signup: `signup.dto.${getUserFileExtension()}`,
36
+ updateMe: `update-me.dto.${getUserFileExtension()}`,
37
+ updatePassword: `update-password.dto.${getUserFileExtension()}`,
38
38
  }
39
39
  : {
40
- model: `${lowerModelName}.dto.${userFileExtension}`,
41
- create: `create-${lowerModelName}.dto.${userFileExtension}`,
42
- update: `update-${lowerModelName}.dto.${userFileExtension}`,
43
- query: `query-${lowerModelName}.dto.${userFileExtension}`,
40
+ model: `${lowerModelName}.dto.${getUserFileExtension()}`,
41
+ create: `create-${lowerModelName}.dto.${getUserFileExtension()}`,
42
+ update: `update-${lowerModelName}.dto.${getUserFileExtension()}`,
43
+ query: `query-${lowerModelName}.dto.${getUserFileExtension()}`,
44
44
  },
45
45
  schemas: isAuthModule
46
46
  ? {
47
- login: `login.schema.${userFileExtension}`,
48
- signup: `signup.schema.${userFileExtension}`,
49
- updateMe: `update-me.schema.${userFileExtension}`,
50
- updatePassword: `update-password.schema.${userFileExtension}`,
47
+ login: `login.schema.${getUserFileExtension()}`,
48
+ signup: `signup.schema.${getUserFileExtension()}`,
49
+ updateMe: `update-me.schema.${getUserFileExtension()}`,
50
+ updatePassword: `update-password.schema.${getUserFileExtension()}`,
51
51
  }
52
52
  : {
53
- model: `${lowerModelName}.schema.${userFileExtension}`,
54
- create: `create-${lowerModelName}.schema.${userFileExtension}`,
55
- update: `update-${lowerModelName}.schema.${userFileExtension}`,
56
- query: `query-${lowerModelName}.schema.${userFileExtension}`,
53
+ model: `${lowerModelName}.schema.${getUserFileExtension()}`,
54
+ create: `create-${lowerModelName}.schema.${getUserFileExtension()}`,
55
+ update: `update-${lowerModelName}.schema.${getUserFileExtension()}`,
56
+ query: `query-${lowerModelName}.schema.${getUserFileExtension()}`,
57
57
  },
58
58
  };
59
59
  }
@@ -146,13 +146,13 @@ export function initializePrismaModels(testName) {
146
146
  const files = getAllPrismaFiles("./prisma");
147
147
  for (const file of files) {
148
148
  const content = fs.readFileSync(file, "utf-8");
149
- if (!prismaContent.includes(content))
149
+ if (!(prismaContent === null || prismaContent === void 0 ? void 0 : prismaContent.includes(content)))
150
150
  prismaContent.push(content);
151
151
  }
152
152
  const content = prismaContent
153
153
  .join("\n")
154
154
  .replace(modelRegex, (_, modelName) => {
155
- if (!models.includes(modelName))
155
+ if (!(models === null || models === void 0 ? void 0 : models.includes(modelName)))
156
156
  models.push(camelCase(modelName.trim()));
157
157
  return `model ${modelName} {`;
158
158
  });
@@ -173,7 +173,7 @@ export function initializePrismaModels(testName) {
173
173
  trimmedLine.startsWith("//"))
174
174
  continue;
175
175
  const [fieldName, type] = trimmedLine.split(/\s+/);
176
- const isUnique = trimmedLine.includes("@unique");
176
+ const isUnique = trimmedLine === null || trimmedLine === void 0 ? void 0 : trimmedLine.includes("@unique");
177
177
  if (isUnique) {
178
178
  const existingFields = prismaModelsUniqueFields[model] || [];
179
179
  const alreadyExists = existingFields.some((field) => field.name === fieldName &&
@@ -187,9 +187,9 @@ export function initializePrismaModels(testName) {
187
187
  }
188
188
  }
189
189
  const cleanType = type === null || type === void 0 ? void 0 : type.replace("[]", "").replace("?", "");
190
- if (trimmedLine.includes("@relation") ||
190
+ if ((trimmedLine === null || trimmedLine === void 0 ? void 0 : trimmedLine.includes("@relation")) ||
191
191
  trimmedLine.match(/\s+\w+(\[\])?(\s+@|$)/) ||
192
- models.includes(camelCase(cleanType || ""))) {
192
+ (models === null || models === void 0 ? void 0 : models.includes(camelCase(cleanType || "")))) {
193
193
  const modelStart = content.indexOf(`enum ${cleanType} {`);
194
194
  if (!cleanType ||
195
195
  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"]}
@@ -10,16 +10,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  import fs from "fs";
11
11
  import catchAsync from "../../modules/error-handler/utils/catch-async";
12
12
  import AppError from "../../modules/error-handler/utils/app-error";
13
- import { userFileExtension } from "./fs.helpers";
13
+ import { getUserFileExtension } from "./fs.helpers";
14
14
  import { importModule } from "./global.helpers";
15
15
  export let prismaInstance = null;
16
16
  export function loadPrismaModule(a) {
17
17
  return __awaiter(this, void 0, void 0, function* () {
18
18
  if (!prismaInstance) {
19
19
  try {
20
- let prismaPath = `${process.cwd()}/src/utils/prisma.${userFileExtension}`;
20
+ let prismaPath = `${process.cwd()}/src/utils/prisma.${getUserFileExtension()}`;
21
21
  if (!fs.existsSync(prismaPath)) {
22
- prismaPath = `${process.cwd()}/src/utils/prisma/index.${userFileExtension}`;
22
+ prismaPath = `${process.cwd()}/src/utils/prisma/index.${getUserFileExtension()}`;
23
23
  }
24
24
  const prismaModule = yield importModule(prismaPath);
25
25
  prismaInstance = prismaModule.default || prismaModule.prisma;
@@ -27,7 +27,9 @@ export function loadPrismaModule(a) {
27
27
  throw new Error("not found");
28
28
  }
29
29
  catch (error) {
30
- throw new AppError("Could not initialize Prisma module.", 500, { error });
30
+ throw new AppError("Could not initialize Prisma module.", 500, {
31
+ 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`,
32
+ });
31
33
  }
32
34
  }
33
35
  return prismaInstance;
@@ -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;AAEpB,OAAO,UAAU,MAAM,+CAA+C,CAAC;AACvE,OAAO,QAAQ,MAAM,6CAA6C,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,IAAI,cAAc,GAAQ,IAAI,CAAC;AAEtC,MAAM,UAAgB,gBAAgB,CAAC,CAAU;;QAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,IAAI,UAAU,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,qBAAqB,iBAAiB,EAAE,CAAC;gBAE1E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/B,UAAU,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,2BAA2B,iBAAiB,EAAE,CAAC;gBAC9E,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;gBACpD,cAAc,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC;gBAE7D,IAAI,CAAC,cAAc;oBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAEf,MAAM,IAAI,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;CAAA;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAC/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,QAAQ,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":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,UAAU,MAAM,+CAA+C,CAAC;AACvE,OAAO,QAAQ,MAAM,6CAA6C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,IAAI,cAAc,GAAQ,IAAI,CAAC;AAEtC,MAAM,UAAgB,gBAAgB,CAAC,CAAU;;QAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,IAAI,CAAC;gBACH,IAAI,UAAU,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,qBAAqB,oBAAoB,EAAE,EAAE,CAAC;gBAE/E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/B,UAAU,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,2BAA2B,oBAAoB,EAAE,EAAE,CAAC;gBACnF,CAAC;gBAED,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;gBACpD,cAAc,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC;gBAE7D,IAAI,CAAC,cAAc;oBAAE,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;oBAC7D,GAAG,EAAE,qEAAqE,oBAAoB,EAAE,gHAAgH;iBACjN,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;CAAA;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAC/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,QAAQ,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"]}
@@ -27,8 +27,8 @@ function isFieldDefinition(line) {
27
27
  }
28
28
  function parseFieldType(fieldType, line) {
29
29
  const baseType = fieldType.replace("?", "").replace("[]", "");
30
- const isArray = fieldType.includes("[]");
31
- if (line.includes("@relation")) {
30
+ const isArray = fieldType === null || fieldType === void 0 ? void 0 : fieldType.includes("[]");
31
+ if (line === null || line === void 0 ? void 0 : line.includes("@relation")) {
32
32
  return isArray ? `${baseType}[]` : baseType;
33
33
  }
34
34
  let tsType = baseType;
@@ -89,7 +89,7 @@ function generateTypes() {
89
89
  const parts = line.trim().split(/\s+/);
90
90
  const fieldName = parts[0];
91
91
  const fieldType = parts[1];
92
- const isOptional = line.includes("?");
92
+ const isOptional = line === null || line === void 0 ? void 0 : line.includes("?");
93
93
  const parsedType = parseFieldType(fieldType, line);
94
94
  typeDefinitions += ` ${fieldName}${isOptional ? "?" : ""}: ${parsedType};\n`;
95
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"export-prisma-types.js","sourceRoot":"","sources":["../../../../src/utils/scripts/export-prisma-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAE7C,SAAS,mBAAmB;IAC1B,MAAM,KAAK,GAAG,EAAE;SACb,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAE9C,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC;IACnC,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IAErC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAG/C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAG/D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAGnD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,SAAiB,EAAE,IAAY;IAErD,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAGzC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9C,CAAC;IAGD,IAAI,MAAM,GAAG,QAAQ,CAAC;IACtB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,MAAM,GAAG,QAAQ,CAAC;YAClB,MAAM;QACR,KAAK,KAAK,CAAC;QACX,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,MAAM,GAAG,QAAQ,CAAC;YAClB,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,GAAG,SAAS,CAAC;YACnB,MAAM;QACR,KAAK,UAAU;YACb,MAAM,GAAG,MAAM,CAAC;YAChB,MAAM;QACR,KAAK,MAAM;YACT,MAAM,GAAG,KAAK,CAAC;YACf,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,GAAG,QAAQ,CAAC;YAClB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,GAAG,QAAQ,CAAC;YAClB,MAAM;IACV,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,aAAa,GAAG,mBAAmB,EAAE,CAAC;IAE5C,IAAI,eAAe,GAAG,gDAAgD,CAAC;IAGvE,MAAM,SAAS,GAAG,2BAA2B,CAAC;IAC9C,IAAI,SAAS,CAAC;IACd,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5D,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,GAAG,SAAS,CAAC;QAC7C,MAAM,MAAM,GAAG,WAAW;aACvB,IAAI,EAAE;aACN,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;QAEnB,eAAe,IAAI,eAAe,QAAQ,MAAM,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,eAAe,IAAI,KAAK,KAAK,OAAO,KAAK,MAAM,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,eAAe,IAAI,OAAO,CAAC;IAC7B,CAAC;IAGD,MAAM,UAAU,GAAG,4BAA4B,CAAC;IAChD,IAAI,UAAU,CAAC;IACf,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9D,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,GAAG,UAAU,CAAC;QAEhD,eAAe,IAAI,oBAAoB,SAAS,MAAM,CAAC;QAEvD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEvC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAE3B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAEnD,eAAe,IAAI,KAAK,SAAS,GAC/B,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EACrB,KAAK,UAAU,KAAK,CAAC;QACvB,CAAC;QAED,eAAe,IAAI,OAAO,CAAC;IAC7B,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,UAAU,CAAC,CAAC;AAC/D,CAAC;AAGD,aAAa,EAAE,CAAC","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"]}
@@ -24,7 +24,7 @@ function generateZodSchemas(inputContent) {
24
24
  function typeToZodSchema(type, isOptional = false) {
25
25
  type = type.trim();
26
26
  const baseSchema = (() => {
27
- if (type.includes("Date")) {
27
+ if (type === null || type === void 0 ? void 0 : type.includes("Date")) {
28
28
  return `z.date().or(z.string()).refine((val) => val instanceof Date || !isNaN(Date.parse(val)), "Data inválida")`;
29
29
  }
30
30
  switch (type) {
@@ -37,7 +37,7 @@ function generateZodSchemas(inputContent) {
37
37
  case "any":
38
38
  return "z.any()";
39
39
  default:
40
- if (type.includes("[]")) {
40
+ if (type === null || type === void 0 ? void 0 : type.includes("[]")) {
41
41
  const arrayType = type.replace("[]", "");
42
42
  switch (arrayType) {
43
43
  case "string":
@@ -74,8 +74,9 @@ function generateZodSchemas(inputContent) {
74
74
  .map((line) => line.trim())
75
75
  .filter((line) => line)
76
76
  .map((line) => {
77
+ var _a;
77
78
  const [propName, type] = line.split(":").map((part) => part.trim());
78
- if (["createdAt", "updatedAt", "deletedAt"].includes(propName.replace("?", ""))) {
79
+ if ((_a = ["createdAt", "updatedAt", "deletedAt"]) === null || _a === void 0 ? void 0 : _a.includes(propName.replace("?", ""))) {
79
80
  return null;
80
81
  }
81
82
  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,2 @@
1
1
  export * from "../../utils/helpers/change-case.helpers";
2
+ export { MsDuration } from "../../modules/auth/utils/helpers/auth.controller.helpers";
@@ -0,0 +1,2 @@
1
+ import { ArkosRequest } from "../../../../types";
2
+ export declare const determineUsernameField: (req: ArkosRequest) => string;