arkos 1.2.13-beta → 1.2.13-test.1
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.
- package/dist/cjs/app.js +138 -1
- package/dist/cjs/app.js.map +1 -1
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/modules/base/base.middlewares.js +4 -4
- package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
- package/dist/cjs/modules/swagger/swagger.router.js +62 -43
- package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +82 -62
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +23 -16
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +40 -11
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +419 -9
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +253 -0
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -0
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js +31 -20
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -1
- package/dist/cjs/paths.js +9 -1
- package/dist/cjs/server.js +85 -5
- package/dist/cjs/server.js.map +1 -1
- package/dist/cjs/types/arkos-config.js.map +1 -1
- package/dist/cjs/utils/cli/dev.js +7 -7
- package/dist/cjs/utils/cli/dev.js.map +1 -1
- package/dist/cjs/utils/cli/start.js +4 -3
- package/dist/cjs/utils/cli/start.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/generate-service-template.js +1 -1
- package/dist/cjs/utils/features/api.features.js +1 -1
- package/dist/cjs/utils/features/api.features.js.map +1 -1
- package/dist/cjs/utils/helpers/global.helpers.js.map +1 -1
- package/dist/cjs/utils/helpers/models.helpers.js +43 -21
- package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
- package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js +451 -0
- package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -0
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +88 -0
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -0
- package/dist/cjs/utils/prisma/prisma-schema-parser.js +158 -0
- package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -0
- package/dist/cjs/utils/prisma/types.js +3 -0
- package/dist/cjs/utils/prisma/types.js.map +1 -0
- package/dist/esm/index.d.mts +280 -0
- package/dist/esm/index.mjs +22 -0
- package/dist/exports/index.js +1 -0
- package/dist/types/arkos-config.js +1 -0
- package/dist/types/auth.js +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/modules/base/base.middlewares.d.ts +4 -4
- package/dist/types/modules/swagger/utils/helpers/get-authentication-json-schema-paths.d.ts +2 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.d.ts +2 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.d.ts +2 -1
- package/dist/types/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.d.ts +2 -1
- package/dist/types/modules/swagger/utils/helpers/missing-json-schemas-generator.d.ts +34 -0
- package/dist/types/modules/swagger/utils/helpers/swagger.router.helpers.d.ts +2 -2
- package/dist/types/router-config.js +1 -0
- package/dist/types/types/arkos-config.d.ts +3 -1
- package/dist/types/utils/helpers/models.helpers.d.ts +18 -4
- package/dist/types/utils/prisma/enhaced-prisma-json-schema-generator.d.ts +34 -0
- package/dist/types/utils/prisma/prisma-json-schema-generator.d.ts +10 -0
- package/dist/types/utils/prisma/prisma-schema-parser.d.ts +18 -0
- package/dist/types/utils/prisma/types.d.ts +48 -0
- package/dist/utils/arkos-env.js +1 -0
- package/dist/utils/dotenv.helpers.js +1 -0
- package/dist/utils/sheu.js +1 -0
- package/dist/utils/validate-dto.js +1 -0
- package/dist/utils/validate-schema.js +1 -0
- package/package.json +11 -6
- package/dist/esm/app.js +0 -1
- package/dist/esm/app.js.map +0 -1
- package/dist/esm/exports/auth/index.js +0 -2
- package/dist/esm/exports/auth/index.js.map +0 -1
- package/dist/esm/exports/controllers/index.js +0 -4
- package/dist/esm/exports/controllers/index.js.map +0 -1
- package/dist/esm/exports/error-handler/index.js +0 -4
- package/dist/esm/exports/error-handler/index.js.map +0 -1
- package/dist/esm/exports/index.js +0 -8
- package/dist/esm/exports/index.js.map +0 -1
- package/dist/esm/exports/middlewares/index.js +0 -2
- package/dist/esm/exports/middlewares/index.js.map +0 -1
- package/dist/esm/exports/prisma/index.js +0 -3
- package/dist/esm/exports/prisma/index.js.map +0 -1
- package/dist/esm/exports/services/index.js +0 -9
- package/dist/esm/exports/services/index.js.map +0 -1
- package/dist/esm/exports/utils/index.js +0 -4
- package/dist/esm/exports/utils/index.js.map +0 -1
- package/dist/esm/exports/validation/index.js +0 -4
- package/dist/esm/exports/validation/index.js.map +0 -1
- package/dist/esm/modules/auth/auth.controller.js +0 -187
- package/dist/esm/modules/auth/auth.controller.js.map +0 -1
- package/dist/esm/modules/auth/auth.router.js +0 -44
- package/dist/esm/modules/auth/auth.router.js.map +0 -1
- package/dist/esm/modules/auth/auth.service.js +0 -178
- package/dist/esm/modules/auth/auth.service.js.map +0 -1
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js +0 -73
- package/dist/esm/modules/auth/utils/helpers/auth.controller.helpers.js.map +0 -1
- package/dist/esm/modules/base/base.controller.js +0 -150
- package/dist/esm/modules/base/base.controller.js.map +0 -1
- package/dist/esm/modules/base/base.middlewares.js +0 -81
- package/dist/esm/modules/base/base.middlewares.js.map +0 -1
- package/dist/esm/modules/base/base.router.js +0 -17
- package/dist/esm/modules/base/base.router.js.map +0 -1
- package/dist/esm/modules/base/base.service.js +0 -120
- package/dist/esm/modules/base/base.service.js.map +0 -1
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js +0 -77
- package/dist/esm/modules/base/utils/helpers/base.controller.helpers.js.map +0 -1
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js +0 -44
- package/dist/esm/modules/base/utils/helpers/base.middlewares.helpers.js.map +0 -1
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +0 -89
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +0 -1
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +0 -165
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +0 -1
- package/dist/esm/modules/email/email.service.js +0 -97
- package/dist/esm/modules/email/email.service.js.map +0 -1
- package/dist/esm/modules/error-handler/error-handler.controller.js +0 -107
- package/dist/esm/modules/error-handler/error-handler.controller.js.map +0 -1
- package/dist/esm/modules/error-handler/utils/app-error.js +0 -15
- package/dist/esm/modules/error-handler/utils/app-error.js.map +0 -1
- package/dist/esm/modules/error-handler/utils/catch-async.js +0 -10
- package/dist/esm/modules/error-handler/utils/catch-async.js.map +0 -1
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js +0 -160
- package/dist/esm/modules/error-handler/utils/error-handler.helpers.js.map +0 -1
- package/dist/esm/modules/file-upload/file-upload.controller.js +0 -266
- package/dist/esm/modules/file-upload/file-upload.controller.js.map +0 -1
- package/dist/esm/modules/file-upload/file-upload.router.js +0 -38
- package/dist/esm/modules/file-upload/file-upload.router.js.map +0 -1
- package/dist/esm/modules/file-upload/file-upload.service.js +0 -314
- package/dist/esm/modules/file-upload/file-upload.service.js.map +0 -1
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +0 -87
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +0 -1
- package/dist/esm/modules/swagger/swagger.router.js +0 -94
- package/dist/esm/modules/swagger/swagger.router.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +0 -247
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js +0 -63
- package/dist/esm/modules/swagger/utils/helpers/get-system-json-schema-paths.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +0 -38
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js +0 -19
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-prisma-json-schemas.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js +0 -24
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-zod-json-schema.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js +0 -436
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js +0 -159
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes.js.map +0 -1
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js +0 -84
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +0 -1
- package/dist/esm/paths.js +0 -1
- package/dist/esm/paths.js.map +0 -1
- package/dist/esm/server.js +0 -5
- package/dist/esm/server.js.map +0 -1
- package/dist/esm/types/arkos-config.js +0 -2
- package/dist/esm/types/arkos-config.js.map +0 -1
- package/dist/esm/types/auth.js +0 -2
- package/dist/esm/types/auth.js.map +0 -1
- package/dist/esm/types/index.js +0 -8
- package/dist/esm/types/index.js.map +0 -1
- package/dist/esm/types/router-config.js +0 -2
- package/dist/esm/types/router-config.js.map +0 -1
- package/dist/esm/utils/arkos-env.js +0 -7
- package/dist/esm/utils/arkos-env.js.map +0 -1
- package/dist/esm/utils/cli/build.js +0 -206
- package/dist/esm/utils/cli/build.js.map +0 -1
- package/dist/esm/utils/cli/dev.js +0 -249
- package/dist/esm/utils/cli/dev.js.map +0 -1
- package/dist/esm/utils/cli/generate.js +0 -183
- package/dist/esm/utils/cli/generate.js.map +0 -1
- package/dist/esm/utils/cli/index.js +0 -74
- package/dist/esm/utils/cli/index.js.map +0 -1
- package/dist/esm/utils/cli/start.js +0 -86
- package/dist/esm/utils/cli/start.js.map +0 -1
- package/dist/esm/utils/cli/utils/cli.helpers.js +0 -16
- package/dist/esm/utils/cli/utils/cli.helpers.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js +0 -33
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-auth-configs-template.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -18
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js +0 -232
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-middlewares.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js +0 -61
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-prisma-query-options.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js +0 -37
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-router-template.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js +0 -32
- package/dist/esm/utils/cli/utils/template-generator/templates/generate-service-template.js.map +0 -1
- package/dist/esm/utils/cli/utils/template-generators.js +0 -25
- package/dist/esm/utils/cli/utils/template-generators.js.map +0 -1
- package/dist/esm/utils/dotenv.helpers.js +0 -37
- package/dist/esm/utils/dotenv.helpers.js.map +0 -1
- package/dist/esm/utils/features/api.features.js +0 -160
- package/dist/esm/utils/features/api.features.js.map +0 -1
- package/dist/esm/utils/features/change-case.features.js +0 -31
- package/dist/esm/utils/features/change-case.features.js.map +0 -1
- package/dist/esm/utils/helpers/api.features.helpers.js +0 -103
- package/dist/esm/utils/helpers/api.features.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/change-case.helpers.js +0 -161
- package/dist/esm/utils/helpers/change-case.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/deepmerge.helper.js +0 -113
- package/dist/esm/utils/helpers/deepmerge.helper.js.map +0 -1
- package/dist/esm/utils/helpers/fs.helpers.js +0 -52
- package/dist/esm/utils/helpers/fs.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/global.helpers.js +0 -47
- package/dist/esm/utils/helpers/global.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/models.helpers.js +0 -300
- package/dist/esm/utils/helpers/models.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/prisma.helpers.js +0 -44
- package/dist/esm/utils/helpers/prisma.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/query-parser.helpers.js +0 -40
- package/dist/esm/utils/helpers/query-parser.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/routers.helpers.js +0 -16
- package/dist/esm/utils/helpers/routers.helpers.js.map +0 -1
- package/dist/esm/utils/helpers/text.helpers.js +0 -22
- package/dist/esm/utils/helpers/text.helpers.js.map +0 -1
- package/dist/esm/utils/sheu.js +0 -117
- package/dist/esm/utils/sheu.js.map +0 -1
- package/dist/esm/utils/validate-dto.js +0 -11
- package/dist/esm/utils/validate-dto.js.map +0 -1
- package/dist/esm/utils/validate-schema.js +0 -9
- package/dist/esm/utils/validate-schema.js.map +0 -1
|
@@ -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 { crd, getUserFileExtension } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\nimport { AuthConfigs } from \"../../types/auth\";\nimport { killServerChildProcess } from \"../cli/utils/cli.helpers\";\nimport { ArkosConfig } from \"../../exports\";\n\ntype ModeModules = Awaited<ReturnType<typeof importPrismaModelModules>>;\n\n// Must be exported to not cause problems on cjs\nlet prismaModelsModules: Record<string, ModeModules> = {};\n\nexport function setModelModules(modelName: string, modules: ModeModules) {\n prismaModelsModules[kebabCase(modelName)] = modules;\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 isAuthModule = modelName.toLowerCase() === \"auth\";\n const ext = getUserFileExtension();\n\n return {\n core: {\n service: `${kebabModelName}.service.${ext}`,\n controller: `${kebabModelName}.controller.${ext}`,\n middlewares: `${kebabModelName}.middlewares.${ext}`,\n authConfigs: `${kebabModelName}.auth-configs.${ext}`,\n authConfigsNew: `${kebabModelName}.auth.${ext}`,\n prismaQueryOptions: `${kebabModelName}.prisma-query-options.${ext}`,\n prismaQueryOptionsNew: `${kebabModelName}.query.${ext}`,\n router: `${kebabModelName}.router.${ext}`,\n },\n dtos: isAuthModule\n ? {\n login: `login.dto.${ext}`,\n signup: `signup.dto.${ext}`,\n updateMe: `update-me.dto.${ext}`,\n updatePassword: `update-password.dto.${ext}`,\n }\n : {\n model: `${kebabModelName}.dto.${ext}`,\n create: `create-${kebabModelName}.dto.${ext}`,\n createMany: `create-many-${kebabModelName}.dto.${ext}`,\n update: `update-${kebabModelName}.dto.${ext}`,\n updateMany: `update-many-${kebabModelName}.dto.${ext}`,\n findOne: `find-one-${kebabModelName}.dto.${ext}`,\n findMany: `find-many-${kebabModelName}.dto.${ext}`,\n query: `query-${kebabModelName}.dto.${ext}`,\n },\n schemas: isAuthModule\n ? {\n login: `login.schema.${ext}`,\n signup: `signup.schema.${ext}`,\n updateMe: `update-me.schema.${ext}`,\n updatePassword: `update-password.schema.${ext}`,\n }\n : {\n model: `${kebabModelName}.schema.${ext}`,\n create: `create-${kebabModelName}.schema.${ext}`,\n createMany: `create-many-${kebabModelName}.schema.${ext}`,\n update: `update-${kebabModelName}.schema.${ext}`,\n updateMany: `update-many-${kebabModelName}.schema.${ext}`,\n findOne: `find-one-${kebabModelName}.schema.${ext}`,\n findMany: `find-many-${kebabModelName}.schema.${ext}`,\n query: `query-${kebabModelName}.schema.${ext}`,\n },\n };\n}\n\nexport async function processSubdir(\n modelName: string,\n type: \"dtos\" | \"schemas\"\n) {\n const moduleDir = path.resolve(crd(), \"src\", \"modules\", kebabCase(modelName));\n\n const subdir = path.join(moduleDir, type);\n const fileStructure = getFileModelModulesFileStructure(modelName);\n const result: Record<string, any> = {};\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 importModule(filePath).catch(() => null);\n if (module) result[key] = module.default;\n } catch (error) {\n // Silent fail - file might not exist\n console.error(error);\n }\n })\n );\n } catch (error) {\n // Directory doesn't exist, continue silently\n console.error(error);\n }\n\n return result;\n}\n\ntype importPrismaModelModulesReturnType = {\n service?: any;\n controller?: any;\n middlewares?: any;\n authConfigs?: AuthConfigs;\n authConfigsNew?: AuthConfigs;\n prismaQueryOptions?: any;\n prismaQueryOptionsNew?: any;\n router?: any;\n dtos?: Record<string, any>;\n schemas?: Record<string, any>;\n};\n\n/**\n * Validates naming convention conflicts for prismaQueryOptions and authConfigs\n * @param {string} key - The current file key being processed\n * @param {string} fileName - The filename being imported\n * @param {importPrismaModelModulesReturnType} result - The current result object\n * @throws {Error} When conflicting naming conventions are detected\n */\nexport function validateNamingConventions(\n key: string,\n fileName: string,\n result: importPrismaModelModulesReturnType\n): void {\n if (key === \"prismaQueryOptions\") {\n if (result.prismaQueryOptions) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"prisma-query-options\",\n \"query\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n } else if (key === \"prismaQueryOptionsNew\") {\n if (result.prismaQueryOptions) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"query\",\n \"prisma-query-options\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n } else if (key === \"authConfigs\") {\n if (result.authConfigs) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"auth-configs\",\n \"auth\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n } else if (key === \"authConfigsNew\") {\n if (result.authConfigs) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"auth\",\n \"auth-configs\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n }\n}\n\n/**\n * Processes and assigns module to the result object based on the key\n * @param {string} key - The file key being processed\n * @param {any} module - The imported module\n * @param {importPrismaModelModulesReturnType} result - The result object to modify\n */\nexport function assignModuleToResult(\n key: string,\n module: any,\n result: importPrismaModelModulesReturnType\n): void {\n if (key === \"prismaQueryOptions\" || key === \"prismaQueryOptionsNew\") {\n result.prismaQueryOptions = module.default || module;\n } else if (key === \"authConfigs\" || key === \"authConfigsNew\") {\n result.authConfigs = module.default || module;\n } else if (key === \"middlewares\" || key === \"router\") {\n result[key] = module;\n } else {\n result[key as keyof typeof result] = module.default || module;\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 arkosConfig: ArkosConfig\n): Promise<importPrismaModelModulesReturnType> {\n const moduleDir = path.resolve(crd(), \"src\", \"modules\", kebabCase(modelName));\n\n const result: importPrismaModelModulesReturnType = {\n dtos: {},\n schemas: {},\n };\n\n if (getModelModules(modelName)) return getModelModules(modelName);\n\n const fileStructure = getFileModelModulesFileStructure(modelName);\n\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((err) => {\n if (!err.message.includes(\"Cannot find module\")) {\n console.error(`Failed to import ${fileName}: \\n`);\n console.error(err);\n killServerChildProcess();\n process.exit(1);\n }\n });\n\n if (module) {\n // Validate naming conventions before assignment\n validateNamingConventions(key, fileName, result);\n\n // Assign module to result\n assignModuleToResult(key, module, result);\n }\n } catch (err: any) {\n if (err.message.includes(\"Cannot use both\")) throw err;\n console.error(err);\n killServerChildProcess();\n }\n })\n );\n\n const validationSubdir = arkosConfig.validation?.resolver\n ? arkosConfig.validation.resolver === \"zod\"\n ? \"schemas\"\n : \"dtos\"\n : null;\n\n let validators = {};\n if (validationSubdir)\n validators = await processSubdir(modelName, validationSubdir);\n\n // Removed because caused problems with cached ZObjects\n // Cache the result making shallow copy to not cause problems after build\n prismaModelsModules[modelName] = {\n ...result,\n ...(validationSubdir && { [validationSubdir]: validators }),\n };\n\n return {\n ...result,\n ...(validationSubdir && { [validationSubdir]: validators }),\n };\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 let prismaSchemasContent: string;\nexport const prismaModelsUniqueFields: Record<string, ModelFieldDefition[]> =\n [] as any;\n\nexport function initializePrismaModels() {\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 // Gather the content of all *.prisma files into single one\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 const copiedContent = content;\n prismaSchemasContent = content;\n\n for (const model of models) {\n const modelName = pascalCase(model);\n\n const modelStart = copiedContent.indexOf(`model ${modelName} {`);\n const modelEnd = copiedContent.indexOf(\"}\", modelStart);\n const modelDefinition = copiedContent.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 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 enumStart = copiedContent.indexOf(`enum ${cleanType} {`);\n const typeStart = copiedContent.indexOf(`type ${cleanType} {`);\n\n if (\n !cleanType ||\n enumStart >= 0 ||\n typeStart >= 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\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(\n modelName: string\n): RelationFields | undefined {\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(): string[] {\n return models;\n}\n\n/**\n * Returns all content of all .prisma files gathered together\n *\n * @returns {string}\n */\nexport function getPrismaSchemasContent(): string {\n return prismaSchemasContent;\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): ModelFieldDefition[] {\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 { crd, getUserFileExtension } from \"./fs.helpers\";\nimport { importModule } from \"./global.helpers\";\nimport { AuthConfigs } from \"../../types/auth\";\nimport { killServerChildProcess } from \"../cli/utils/cli.helpers\";\nimport { ArkosConfig } from \"../../exports\";\nimport sheu from \"../sheu\";\n\ntype ModeModules = Awaited<ReturnType<typeof importPrismaModelModules>>;\n\n// Must be exported to not cause problems on cjs\nlet prismaModelsModules: Record<string, ModeModules> = {};\n\nexport function setModelModules(modelName: string, modules: ModeModules) {\n prismaModelsModules[kebabCase(modelName)] = modules;\n}\n\nexport function getModelModules(modelName: string) {\n return prismaModelsModules[kebabCase(modelName)];\n}\n\n/**\n * To be reused on other part of code for correct typing\n *\n * @param key\n * @param fileName\n * @param result\n */\nexport type ValidationFileMappingKey = keyof ReturnType<\n typeof getFileModelModulesFileStructure\n>[\"dtos\"];\n\nexport function getFileModelModulesFileStructure(modelName: string) {\n const kebabModelName = kebabCase(modelName).toLowerCase();\n const isAuthModule = modelName.toLowerCase() === \"auth\";\n const ext = getUserFileExtension();\n\n return {\n core: {\n service: `${kebabModelName}.service.${ext}`,\n controller: `${kebabModelName}.controller.${ext}`,\n middlewares: `${kebabModelName}.middlewares.${ext}`,\n authConfigs: `${kebabModelName}.auth-configs.${ext}`,\n authConfigsNew: `${kebabModelName}.auth.${ext}`,\n prismaQueryOptions: `${kebabModelName}.prisma-query-options.${ext}`,\n prismaQueryOptionsNew: `${kebabModelName}.query.${ext}`,\n router: `${kebabModelName}.router.${ext}`,\n },\n dtos: isAuthModule\n ? {\n login: `login.dto.${ext}`,\n signup: `signup.dto.${ext}`,\n getMe: `get-me.dto.${ext}`,\n updateMe: `update-me.dto.${ext}`,\n updatePassword: `update-password.dto.${ext}`,\n }\n : {\n model: `${kebabModelName}.dto.${ext}`,\n create: `create-${kebabModelName}.dto.${ext}`,\n createOne: `create-${kebabModelName}.dto.${ext}`, // just for sake of completion and reusability around other parts of code\n createMany: `create-many-${kebabModelName}.dto.${ext}`,\n update: `update-${kebabModelName}.dto.${ext}`,\n updateOne: `update-${kebabModelName}.dto.${ext}`, // same as createOne\n updateMany: `update-many-${kebabModelName}.dto.${ext}`,\n query: `query-${kebabModelName}.dto.${ext}`,\n // looking for some better naming convetion\n findOne: `find-one-${kebabModelName}.dto.${ext}`,\n findMany: `find-many-${kebabModelName}.dto.${ext}`,\n },\n schemas: isAuthModule\n ? {\n login: `login.schema.${ext}`,\n signup: `signup.schema.${ext}`,\n getMe: `get-me.schema.${ext}`,\n updateMe: `update-me.schema.${ext}`,\n updatePassword: `update-password.schema.${ext}`,\n }\n : {\n model: `${kebabModelName}.schema.${ext}`,\n create: `create-${kebabModelName}.schema.${ext}`,\n createOne: `create-${kebabModelName}.schema.${ext}`,\n createMany: `create-many-${kebabModelName}.schema.${ext}`, // just for sake of completion and reusability around other parts of code\n update: `update-${kebabModelName}.schema.${ext}`,\n updateOne: `update-${kebabModelName}.schema.${ext}`, // same as createOne\n updateMany: `update-many-${kebabModelName}.schema.${ext}`,\n query: `query-${kebabModelName}.schema.${ext}`,\n // looking for some better naming convetion\n findOne: `find-one-${kebabModelName}.schema.${ext}`,\n findMany: `find-many-${kebabModelName}.schema.${ext}`,\n },\n };\n}\n\nexport async function processSubdir(\n modelName: string,\n type: \"dtos\" | \"schemas\"\n) {\n const moduleDir = path.resolve(crd(), \"src\", \"modules\", kebabCase(modelName));\n\n const subdir = path.join(moduleDir, type);\n const fileStructure = getFileModelModulesFileStructure(modelName);\n const result: Record<string, any> = {};\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 importModule(filePath).catch((err) => {\n if (!err.message.includes(\"Cannot find module\")) {\n sheu.error(`Failed to import ${fileName}:`);\n console.error(err);\n killServerChildProcess();\n process.exit(1);\n }\n });\n\n if (module) result[key] = module.default;\n } catch (error) {\n // Silent fail - file might not exist\n console.error(error);\n }\n })\n );\n } catch (error) {\n // Directory doesn't exist, continue silently\n console.error(error);\n }\n\n return result;\n}\n\ntype importPrismaModelModulesReturnType = {\n service?: any;\n controller?: any;\n middlewares?: any;\n authConfigs?: AuthConfigs;\n authConfigsNew?: AuthConfigs;\n prismaQueryOptions?: any;\n prismaQueryOptionsNew?: any;\n router?: any;\n dtos?: Record<string, any>;\n schemas?: Record<string, any>;\n};\n\n/**\n * Validates naming convention conflicts for prismaQueryOptions and authConfigs\n * @param {string} key - The current file key being processed\n * @param {string} fileName - The filename being imported\n * @param {importPrismaModelModulesReturnType} result - The current result object\n * @throws {Error} When conflicting naming conventions are detected\n */\nexport function validateNamingConventions(\n key: string,\n fileName: string,\n result: importPrismaModelModulesReturnType\n): void {\n if (key === \"prismaQueryOptions\") {\n if (result.prismaQueryOptions) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"prisma-query-options\",\n \"query\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n } else if (key === \"prismaQueryOptionsNew\") {\n if (result.prismaQueryOptions) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"query\",\n \"prisma-query-options\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n } else if (key === \"authConfigs\") {\n if (result.authConfigs) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"auth-configs\",\n \"auth\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n } else if (key === \"authConfigsNew\") {\n if (result.authConfigs) {\n killServerChildProcess();\n throw new Error(\n `\\n Cannot use both ${fileName} and ${fileName.replace(\n \"auth\",\n \"auth-configs\"\n )} at once, please choose only one name convention. \\n`\n );\n }\n }\n}\n\n/**\n * Processes and assigns module to the result object based on the key\n * @param {string} key - The file key being processed\n * @param {any} module - The imported module\n * @param {importPrismaModelModulesReturnType} result - The result object to modify\n */\nexport function assignModuleToResult(\n key: string,\n module: any,\n result: importPrismaModelModulesReturnType\n): void {\n if (key === \"prismaQueryOptions\" || key === \"prismaQueryOptionsNew\") {\n result.prismaQueryOptions = module.default || module;\n } else if (key === \"authConfigs\" || key === \"authConfigsNew\") {\n result.authConfigs = module.default || module;\n } else if (key === \"middlewares\" || key === \"router\") {\n result[key] = module;\n } else {\n result[key as keyof typeof result] = module.default || module;\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 arkosConfig: ArkosConfig\n): Promise<importPrismaModelModulesReturnType> {\n const moduleDir = path.resolve(crd(), \"src\", \"modules\", kebabCase(modelName));\n\n const result: importPrismaModelModulesReturnType = {\n dtos: {},\n schemas: {},\n };\n\n if (getModelModules(modelName)) return getModelModules(modelName);\n\n const fileStructure = getFileModelModulesFileStructure(modelName);\n\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((err) => {\n if (!err.message.includes(\"Cannot find module\")) {\n sheu.error(`Failed to import ${fileName}:`);\n console.error(err);\n killServerChildProcess();\n process.exit(1);\n }\n });\n\n if (module) {\n // Validate naming conventions before assignment\n validateNamingConventions(key, fileName, result);\n\n // Assign module to result\n assignModuleToResult(key, module, result);\n }\n } catch (err: any) {\n if (err.message.includes(\"Cannot use both\")) throw err;\n console.error(err);\n killServerChildProcess();\n }\n })\n );\n\n const validationSubdir = arkosConfig.validation?.resolver\n ? arkosConfig.validation.resolver === \"zod\"\n ? \"schemas\"\n : \"dtos\"\n : null;\n\n let validators = {};\n if (validationSubdir)\n validators = await processSubdir(modelName, validationSubdir);\n\n prismaModelsModules[modelName] = {\n ...result,\n ...(validationSubdir && { [validationSubdir]: validators }),\n };\n\n return {\n ...result,\n ...(validationSubdir && { [validationSubdir]: validators }),\n };\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 */\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 let prismaSchemasContent: string;\nexport const prismaModelsUniqueFields: Record<string, ModelFieldDefition[]> =\n [] as any;\n\nexport function initializePrismaModels() {\n const copiedContent = getPrismaSchemasContent();\n\n for (const model of models) {\n const modelName = pascalCase(model);\n\n const modelStart = copiedContent.indexOf(`model ${modelName} {`);\n const modelEnd = copiedContent.indexOf(\"}\", modelStart);\n const modelDefinition = copiedContent.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 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 enumStart = copiedContent.indexOf(`enum ${cleanType} {`);\n const typeStart = copiedContent.indexOf(`type ${cleanType} {`);\n\n if (\n !cleanType ||\n enumStart >= 0 ||\n typeStart >= 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\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(\n modelName: string\n): RelationFields | undefined {\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(): string[] {\n return models;\n}\n\n/**\n * Returns all content of all .prisma files gathered together\n *\n * @returns {string}\n */\nexport function getPrismaSchemasContent(): string {\n if (prismaSchemasContent) return prismaSchemasContent;\n\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 if (!prismaContent?.includes?.(content)) prismaContent.push(content);\n }\n\n // Gather the content of all *.prisma files into single one\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 return content;\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): ModelFieldDefition[] {\n return prismaModelsUniqueFields[modelName];\n}\n\n/**\n * Helps in finding out whether a given dto/schema file exits under the user project according to the validation arkos configuration.\n *\n * @param action {ValidationFileMappingKey} - the action of the dto, e.g: create, findMany.\n * @param modelName {string} - the model to be checked\n * @param arkosConfig {ArkosConfig} - the arkos.js configuration\n * @returns boolean\n */\nexport async function localValidatorFileExists(\n action: ValidationFileMappingKey,\n modelName: string,\n arkosConfig: ArkosConfig\n) {\n if (arkosConfig?.swagger?.mode === \"prisma\") return false;\n const modelModules = await importPrismaModelModules(modelName, arkosConfig);\n\n return !!modelModules?.[\n arkosConfig.validation?.resolver === \"zod\" ? \"schemas\" : \"dtos\"\n ]?.[camelCase(action)];\n}\n\nexport { getModels, getModelUniqueFields };\n"]}
|
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EnhancedPrismaJsonSchemaGenerator = void 0;
|
|
7
|
+
const deepmerge_helper_1 = __importDefault(require("../helpers/deepmerge.helper"));
|
|
8
|
+
const models_helpers_1 = require("../helpers/models.helpers");
|
|
9
|
+
const prisma_schema_parser_1 = __importDefault(require("./prisma-schema-parser"));
|
|
10
|
+
class EnhancedPrismaJsonSchemaGenerator {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.schema = prisma_schema_parser_1.default.parse();
|
|
13
|
+
}
|
|
14
|
+
async generateModelSchemas(config) {
|
|
15
|
+
const { modelName, arkosConfig, schemasToGenerate = [
|
|
16
|
+
"model",
|
|
17
|
+
"login",
|
|
18
|
+
"signup",
|
|
19
|
+
"getMe",
|
|
20
|
+
"updateMe",
|
|
21
|
+
"updatePassword",
|
|
22
|
+
"create",
|
|
23
|
+
"createOne",
|
|
24
|
+
"createMany",
|
|
25
|
+
"update",
|
|
26
|
+
"updateOne",
|
|
27
|
+
"updateMany",
|
|
28
|
+
"query",
|
|
29
|
+
"findOne",
|
|
30
|
+
"findMany",
|
|
31
|
+
], } = config;
|
|
32
|
+
const modelModules = await (0, models_helpers_1.importPrismaModelModules)(modelName, arkosConfig);
|
|
33
|
+
const routerConfig = modelModules?.router?.config || {};
|
|
34
|
+
const prismaQueryOptions = modelModules?.prismaQueryOptions || {};
|
|
35
|
+
const authModuleModel = ["auth", "me", "password", "signup", "login"];
|
|
36
|
+
const isAuthModule = authModuleModel.includes(modelName.toLowerCase());
|
|
37
|
+
if (arkosConfig?.swagger?.strict && arkosConfig.swagger.mode !== "prisma")
|
|
38
|
+
return {};
|
|
39
|
+
if (routerConfig?.disable === true)
|
|
40
|
+
return {};
|
|
41
|
+
const model = this.schema.models.find((m) => m.name.toLowerCase() === modelName.toLowerCase());
|
|
42
|
+
if (!model && !isAuthModule)
|
|
43
|
+
throw new Error(`Model ${modelName} not found in schema`);
|
|
44
|
+
const schemas = {};
|
|
45
|
+
if (isAuthModule) {
|
|
46
|
+
await this.generateAuthSchemas(this.schema.models.find((m) => m.name.toLowerCase() === "user"), schemas, arkosConfig, schemasToGenerate, prismaQueryOptions);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
if (model)
|
|
50
|
+
await this.generateCrudSchemas(model, schemas, arkosConfig, schemasToGenerate, prismaQueryOptions, routerConfig);
|
|
51
|
+
}
|
|
52
|
+
return { ...schemas };
|
|
53
|
+
}
|
|
54
|
+
async generateAuthSchemas(model, schemas, arkosConfig, schemasToGenerate, queryOptions, routerConfig) {
|
|
55
|
+
const modelName = "Auth";
|
|
56
|
+
if (!arkosConfig?.authentication)
|
|
57
|
+
return schemas;
|
|
58
|
+
if (schemasToGenerate.includes("login") &&
|
|
59
|
+
!this.isEndpointDisabled("login", routerConfig) &&
|
|
60
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("login", modelName, arkosConfig))) {
|
|
61
|
+
schemas[`LoginSchema`] = this.generateLoginSchema(arkosConfig);
|
|
62
|
+
}
|
|
63
|
+
if (schemasToGenerate.includes("signup") &&
|
|
64
|
+
!this.isEndpointDisabled("signup", routerConfig) &&
|
|
65
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("signup", modelName, arkosConfig))) {
|
|
66
|
+
schemas[`SignupSchema`] = this.generateSignupSchema(model, queryOptions?.signup);
|
|
67
|
+
}
|
|
68
|
+
if (schemasToGenerate.includes("updateMe") &&
|
|
69
|
+
!this.isEndpointDisabled("updateMe", routerConfig) &&
|
|
70
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("updateMe", modelName, arkosConfig))) {
|
|
71
|
+
schemas[`UpdateMeSchema`] = this.generateUpdateMeSchema(model, queryOptions?.updateMe);
|
|
72
|
+
}
|
|
73
|
+
if (schemasToGenerate.includes("updatePassword") &&
|
|
74
|
+
!this.isEndpointDisabled("updatePassword", routerConfig) &&
|
|
75
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("updatePassword", modelName, arkosConfig))) {
|
|
76
|
+
schemas[`UpdatePasswordSchema`] = this.generateUpdatePasswordSchema(model, queryOptions?.updatePassword);
|
|
77
|
+
}
|
|
78
|
+
if (schemasToGenerate.includes("getMe") &&
|
|
79
|
+
!this.isEndpointDisabled("getMe", routerConfig) &&
|
|
80
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("getMe", modelName, arkosConfig))) {
|
|
81
|
+
schemas[`GetMeSchema`] = this.generateResponseSchema(model, queryOptions?.getMe || {}, "findOne");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async generateCrudSchemas(model, schemas, arkosConfig, schemasToGenerate, queryOptions, routerConfig) {
|
|
85
|
+
const modelName = model.name;
|
|
86
|
+
const ensureBaseSchemaReference = async (operation, modelName) => {
|
|
87
|
+
const suffix = arkosConfig.validation?.resolver === "zod" ? "Schema" : "Dto";
|
|
88
|
+
const singleOpName = operation === "Create" ? "createOne" : "updateOne";
|
|
89
|
+
const hasLocalValidator = await (0, models_helpers_1.localValidatorFileExists)(singleOpName, modelName, arkosConfig);
|
|
90
|
+
if (hasLocalValidator) {
|
|
91
|
+
return `${operation}${modelName}${suffix}`;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const modelSchemaKey = `${operation}${modelName}ModelSchema`;
|
|
95
|
+
if (!schemas[modelSchemaKey]) {
|
|
96
|
+
if (operation === "Create") {
|
|
97
|
+
schemas[modelSchemaKey] = this.generateCreateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "createOne"));
|
|
98
|
+
}
|
|
99
|
+
else if (operation === "Update") {
|
|
100
|
+
schemas[modelSchemaKey] = this.generateUpdateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "updateOne"));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return modelSchemaKey;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
if (schemasToGenerate.includes("createOne") &&
|
|
107
|
+
!this.isEndpointDisabled("createOne", routerConfig) &&
|
|
108
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("createOne", modelName, arkosConfig))) {
|
|
109
|
+
schemas[`Create${modelName}ModelSchema`] = this.generateCreateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "createOne"));
|
|
110
|
+
}
|
|
111
|
+
if (schemasToGenerate.includes("createMany") &&
|
|
112
|
+
!this.isEndpointDisabled("createMany", routerConfig) &&
|
|
113
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("createMany", modelName, arkosConfig))) {
|
|
114
|
+
const baseSchemaKey = await ensureBaseSchemaReference("Create", modelName);
|
|
115
|
+
schemas[`CreateMany${modelName}ModelSchema`] = {
|
|
116
|
+
type: "array",
|
|
117
|
+
items: { $ref: `#/components/schemas/${baseSchemaKey}` },
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (schemasToGenerate.includes("updateOne") &&
|
|
121
|
+
!this.isEndpointDisabled("updateOne", routerConfig) &&
|
|
122
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("updateOne", modelName, arkosConfig))) {
|
|
123
|
+
schemas[`Update${modelName}ModelSchema`] = this.generateUpdateSchema(model, this.resolvePrismaQueryOptions(queryOptions, "updateOne"));
|
|
124
|
+
}
|
|
125
|
+
if (schemasToGenerate.includes("updateMany") &&
|
|
126
|
+
!this.isEndpointDisabled("updateMany", routerConfig) &&
|
|
127
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("updateMany", modelName, arkosConfig))) {
|
|
128
|
+
const baseSchemaKey = await ensureBaseSchemaReference("Update", modelName);
|
|
129
|
+
schemas[`UpdateMany${modelName}ModelSchema`] = {
|
|
130
|
+
type: "object",
|
|
131
|
+
properties: {
|
|
132
|
+
data: {
|
|
133
|
+
type: "object",
|
|
134
|
+
$ref: `#/components/schemas/${baseSchemaKey}`,
|
|
135
|
+
},
|
|
136
|
+
where: { type: "object" },
|
|
137
|
+
},
|
|
138
|
+
required: ["data"],
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (schemasToGenerate.includes("findOne") &&
|
|
142
|
+
!this.isEndpointDisabled("findOne", routerConfig) &&
|
|
143
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("findOne", modelName, arkosConfig))) {
|
|
144
|
+
schemas[`FindOne${modelName}ModelSchema`] = this.generateResponseSchema(model, this.resolvePrismaQueryOptions(queryOptions, "findOne"), "findOne");
|
|
145
|
+
}
|
|
146
|
+
if (schemasToGenerate.includes("findMany") &&
|
|
147
|
+
!this.isEndpointDisabled("findMany", routerConfig) &&
|
|
148
|
+
!(await (0, models_helpers_1.localValidatorFileExists)("findMany", modelName, arkosConfig))) {
|
|
149
|
+
schemas[`FindMany${modelName}ModelSchema`] = {
|
|
150
|
+
type: "array",
|
|
151
|
+
items: this.generateResponseSchema(model, this.resolvePrismaQueryOptions(queryOptions, "findMany"), "findMany"),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
generateCreateSchema(model, _) {
|
|
156
|
+
const properties = {};
|
|
157
|
+
const required = [];
|
|
158
|
+
const restrictedFields = ["createdAt", "updatedAt", "deletedAt", "id"];
|
|
159
|
+
if (model.name.toLowerCase() === "auth")
|
|
160
|
+
restrictedFields.push("roles", "role", "isActive", "isStaff", "isSuperUser", "passwordChangedAt", "deletedSelfAccountAt", "lastLoginAt");
|
|
161
|
+
for (const field of model.fields) {
|
|
162
|
+
if (field.isId || restrictedFields.includes(field.name))
|
|
163
|
+
continue;
|
|
164
|
+
if (this.isModelRelation(field.type)) {
|
|
165
|
+
if (!field.isArray) {
|
|
166
|
+
properties[field.connectionField] = {
|
|
167
|
+
type: this.mapPrismaTypeToJsonSchema(model.fields.find((_field) => _field.name === field.connectionField)?.type || "String"),
|
|
168
|
+
};
|
|
169
|
+
if (!field.isOptional && field.defaultValue === undefined)
|
|
170
|
+
required.push(field.name);
|
|
171
|
+
}
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
const property = this.convertFieldToJsonSchema(field);
|
|
175
|
+
properties[field.name] = property;
|
|
176
|
+
if (!field.isOptional &&
|
|
177
|
+
field.defaultValue === undefined &&
|
|
178
|
+
!field.isArray) {
|
|
179
|
+
required.push(field.name);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
type: "object",
|
|
184
|
+
properties,
|
|
185
|
+
required,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
generateUpdateSchema(model, _) {
|
|
189
|
+
const properties = {};
|
|
190
|
+
const autoFillFields = ["createdAt", "updatedAt", "deletedAt", "id"];
|
|
191
|
+
for (const field of model.fields) {
|
|
192
|
+
if (field.isId || autoFillFields.includes(field.name))
|
|
193
|
+
continue;
|
|
194
|
+
if (this.isModelRelation(field.type)) {
|
|
195
|
+
if (!field.isArray)
|
|
196
|
+
properties[field.connectionField] = {
|
|
197
|
+
type: this.mapPrismaTypeToJsonSchema(model.fields.find((_field) => _field.name === field.connectionField)?.type || "String"),
|
|
198
|
+
};
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
const property = this.convertFieldToJsonSchema(field);
|
|
202
|
+
properties[field.name] = property;
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
type: "object",
|
|
206
|
+
properties,
|
|
207
|
+
required: [],
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
generateResponseSchema(model, options, _) {
|
|
211
|
+
const properties = {};
|
|
212
|
+
const required = [];
|
|
213
|
+
const selectFields = options?.select;
|
|
214
|
+
const includeRelations = options?.include;
|
|
215
|
+
for (const field of model.fields) {
|
|
216
|
+
if (field.name.toLowerCase().includes("password"))
|
|
217
|
+
continue;
|
|
218
|
+
if (selectFields && !selectFields[field.name])
|
|
219
|
+
continue;
|
|
220
|
+
if (this.isModelRelation(field.type)) {
|
|
221
|
+
if (includeRelations?.[field.name]) {
|
|
222
|
+
const relationModel = this.schema.models.find((m) => m.name === field.type);
|
|
223
|
+
if (relationModel) {
|
|
224
|
+
const relationSchema = this.generateNestedRelationSchema(relationModel, includeRelations[field.name]);
|
|
225
|
+
properties[field.name] = field.isArray
|
|
226
|
+
? { type: "array", items: relationSchema }
|
|
227
|
+
: relationSchema;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
const property = this.convertFieldToJsonSchema(field);
|
|
233
|
+
properties[field.name] = property;
|
|
234
|
+
if (!field.isOptional)
|
|
235
|
+
required.push(field.name);
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
type: "object",
|
|
239
|
+
properties,
|
|
240
|
+
required,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
generateNestedRelationSchema(model, includeOptions) {
|
|
244
|
+
const properties = {};
|
|
245
|
+
const required = [];
|
|
246
|
+
const selectFields = includeOptions?.select;
|
|
247
|
+
const nestedIncludes = includeOptions?.include;
|
|
248
|
+
for (const field of model.fields) {
|
|
249
|
+
if (field.name.toLowerCase().includes("password")) {
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
if (selectFields && !selectFields[field.name]) {
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
if (this.isModelRelation(field.type)) {
|
|
256
|
+
if (nestedIncludes?.[field.name]) {
|
|
257
|
+
const relationModel = this.schema.models.find((m) => m.name === field.type);
|
|
258
|
+
if (relationModel) {
|
|
259
|
+
const nestedSchema = this.generateNestedRelationSchema(relationModel, nestedIncludes[field.name]);
|
|
260
|
+
properties[field.name] = field.isArray
|
|
261
|
+
? { type: "array", items: nestedSchema }
|
|
262
|
+
: nestedSchema;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
const property = this.convertFieldToJsonSchema(field);
|
|
268
|
+
properties[field.name] = property;
|
|
269
|
+
if (!field.isOptional) {
|
|
270
|
+
required.push(field.name);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return {
|
|
274
|
+
type: "object",
|
|
275
|
+
properties,
|
|
276
|
+
required,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
generateLoginSchema(arkosConfig) {
|
|
280
|
+
const userNameFields = arkosConfig?.authentication?.login?.allowedUsernames || [];
|
|
281
|
+
const getDisplayName = (field) => {
|
|
282
|
+
if (field.includes("."))
|
|
283
|
+
return field.split(".").pop() || field;
|
|
284
|
+
return field;
|
|
285
|
+
};
|
|
286
|
+
const baseSchema = {
|
|
287
|
+
type: "object",
|
|
288
|
+
properties: {
|
|
289
|
+
password: {
|
|
290
|
+
type: "string",
|
|
291
|
+
minLength: 8,
|
|
292
|
+
},
|
|
293
|
+
},
|
|
294
|
+
required: ["password"],
|
|
295
|
+
};
|
|
296
|
+
userNameFields.forEach((field) => {
|
|
297
|
+
const displayName = getDisplayName(field);
|
|
298
|
+
baseSchema.properties[displayName] = {
|
|
299
|
+
type: "string",
|
|
300
|
+
format: "string",
|
|
301
|
+
description: `Username field: ${field}`,
|
|
302
|
+
};
|
|
303
|
+
});
|
|
304
|
+
if (userNameFields.length > 0) {
|
|
305
|
+
const usernameDisplayNames = userNameFields.map(getDisplayName);
|
|
306
|
+
return {
|
|
307
|
+
...baseSchema,
|
|
308
|
+
anyOf: usernameDisplayNames.map(() => ({
|
|
309
|
+
required: [...baseSchema.required],
|
|
310
|
+
})),
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
return baseSchema;
|
|
314
|
+
}
|
|
315
|
+
generateSignupSchema(model, options) {
|
|
316
|
+
const singupSchema = this.generateCreateSchema(model, options || {});
|
|
317
|
+
const restrictedFields = [
|
|
318
|
+
"roles",
|
|
319
|
+
"role",
|
|
320
|
+
"isActive",
|
|
321
|
+
"isStaff",
|
|
322
|
+
"isSuperUser",
|
|
323
|
+
"passwordChangedAt",
|
|
324
|
+
"deletedSelfAccountAt",
|
|
325
|
+
"lastLoginAt",
|
|
326
|
+
];
|
|
327
|
+
restrictedFields.forEach((field) => {
|
|
328
|
+
delete singupSchema?.properties?.[field];
|
|
329
|
+
});
|
|
330
|
+
return singupSchema;
|
|
331
|
+
}
|
|
332
|
+
generateUpdateMeSchema(model, options) {
|
|
333
|
+
const updateSchema = this.generateUpdateSchema(model, options || {});
|
|
334
|
+
const restrictedFields = [
|
|
335
|
+
"roles",
|
|
336
|
+
"role",
|
|
337
|
+
"isActive",
|
|
338
|
+
"isStaff",
|
|
339
|
+
"isSuperUser",
|
|
340
|
+
"passwordChangedAt",
|
|
341
|
+
"deletedSelfAccountAt",
|
|
342
|
+
"password",
|
|
343
|
+
"lastLoginAt",
|
|
344
|
+
];
|
|
345
|
+
restrictedFields.forEach((field) => {
|
|
346
|
+
delete updateSchema?.properties?.[field];
|
|
347
|
+
});
|
|
348
|
+
return updateSchema;
|
|
349
|
+
}
|
|
350
|
+
generateUpdatePasswordSchema(_, _1) {
|
|
351
|
+
return {
|
|
352
|
+
type: "object",
|
|
353
|
+
properties: {
|
|
354
|
+
currentPassword: { type: "string" },
|
|
355
|
+
newPassword: { type: "string", minLength: 8 },
|
|
356
|
+
},
|
|
357
|
+
required: ["currentPassword", "newPassword"],
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
resolvePrismaQueryOptions(prismaQueryOptions, action) {
|
|
361
|
+
if (!prismaQueryOptions || !action) {
|
|
362
|
+
return {};
|
|
363
|
+
}
|
|
364
|
+
const options = prismaQueryOptions;
|
|
365
|
+
const actionOptions = options[action] || {};
|
|
366
|
+
let mergedOptions = options.queryOptions || {};
|
|
367
|
+
if (options.global)
|
|
368
|
+
mergedOptions = (0, deepmerge_helper_1.default)(mergedOptions, options.global);
|
|
369
|
+
const generalOptions = this.getGeneralOptionsForAction(options, action);
|
|
370
|
+
if (generalOptions)
|
|
371
|
+
mergedOptions = (0, deepmerge_helper_1.default)(mergedOptions, generalOptions);
|
|
372
|
+
if (actionOptions)
|
|
373
|
+
mergedOptions = (0, deepmerge_helper_1.default)(mergedOptions, actionOptions);
|
|
374
|
+
return mergedOptions;
|
|
375
|
+
}
|
|
376
|
+
getGeneralOptionsForAction(options, action) {
|
|
377
|
+
const actionMap = {
|
|
378
|
+
find: ["findOne", "findMany"],
|
|
379
|
+
create: ["createOne", "createMany"],
|
|
380
|
+
update: ["updateOne", "updateMany"],
|
|
381
|
+
delete: ["deleteOne", "deleteMany"],
|
|
382
|
+
save: ["createOne", "createMany", "updateOne", "updateMany"],
|
|
383
|
+
saveOne: ["createOne", "updateOne"],
|
|
384
|
+
saveMany: ["createMany", "updateMany"],
|
|
385
|
+
};
|
|
386
|
+
for (const [optionKey, actions] of Object.entries(actionMap)) {
|
|
387
|
+
if (actions.includes(action) && options[optionKey]) {
|
|
388
|
+
return options[optionKey];
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return null;
|
|
392
|
+
}
|
|
393
|
+
isEndpointDisabled(endpoint, routerConfig) {
|
|
394
|
+
if (!routerConfig?.disable)
|
|
395
|
+
return false;
|
|
396
|
+
if (typeof routerConfig.disable === "boolean") {
|
|
397
|
+
return routerConfig.disable;
|
|
398
|
+
}
|
|
399
|
+
return (routerConfig.disable[endpoint] ||
|
|
400
|
+
false);
|
|
401
|
+
}
|
|
402
|
+
isModelRelation(typeName) {
|
|
403
|
+
return this.schema.models.some((m) => m.name === typeName);
|
|
404
|
+
}
|
|
405
|
+
convertFieldToJsonSchema(field) {
|
|
406
|
+
const baseType = this.mapPrismaTypeToJsonSchema(field.type);
|
|
407
|
+
const property = { type: baseType };
|
|
408
|
+
if (field.isArray) {
|
|
409
|
+
property.type = "array";
|
|
410
|
+
property.items = { type: this.mapPrismaTypeToJsonSchema(field.type) };
|
|
411
|
+
}
|
|
412
|
+
if (field.defaultValue !== undefined) {
|
|
413
|
+
property.default = field.defaultValue;
|
|
414
|
+
}
|
|
415
|
+
if (field.type === "DateTime") {
|
|
416
|
+
property.format = "date-time";
|
|
417
|
+
}
|
|
418
|
+
if (this.isEnum(field.type)) {
|
|
419
|
+
const enumDef = this.schema.enums.find((e) => e.name === field.type);
|
|
420
|
+
if (enumDef) {
|
|
421
|
+
property.enum = enumDef.values;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
return property;
|
|
425
|
+
}
|
|
426
|
+
mapPrismaTypeToJsonSchema(prismaType) {
|
|
427
|
+
const typeMap = {
|
|
428
|
+
String: "string",
|
|
429
|
+
Int: "number",
|
|
430
|
+
Float: "number",
|
|
431
|
+
Boolean: "boolean",
|
|
432
|
+
DateTime: "string",
|
|
433
|
+
Json: "object",
|
|
434
|
+
Bytes: "string",
|
|
435
|
+
};
|
|
436
|
+
if (typeMap[prismaType])
|
|
437
|
+
return typeMap[prismaType];
|
|
438
|
+
if (this.isEnum(prismaType))
|
|
439
|
+
return "string";
|
|
440
|
+
if (this.isModelRelation(prismaType))
|
|
441
|
+
return "object";
|
|
442
|
+
return "string";
|
|
443
|
+
}
|
|
444
|
+
isEnum(typeName) {
|
|
445
|
+
return this.schema.enums.some((e) => e.name === typeName);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
exports.EnhancedPrismaJsonSchemaGenerator = EnhancedPrismaJsonSchemaGenerator;
|
|
449
|
+
const enhancedPrismaJsonSchemaGenerator = new EnhancedPrismaJsonSchemaGenerator();
|
|
450
|
+
exports.default = enhancedPrismaJsonSchemaGenerator;
|
|
451
|
+
//# sourceMappingURL=enhaced-prisma-json-schema-generator.js.map
|