arkos 1.3.2-canary.4 → 1.3.3-beta.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/README.md +8 -4
- package/dist/cjs/app.js +39 -4
- package/dist/cjs/app.js.map +1 -1
- package/dist/cjs/exports/utils/index.js +5 -25
- package/dist/cjs/exports/utils/index.js.map +1 -1
- package/dist/cjs/modules/auth/auth.controller.js +18 -0
- package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
- package/dist/cjs/modules/auth/auth.router.js +2 -0
- package/dist/cjs/modules/auth/auth.router.js.map +1 -1
- package/dist/cjs/modules/base/base.controller.js +49 -11
- package/dist/cjs/modules/base/base.controller.js.map +1 -1
- package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
- package/dist/cjs/modules/base/base.service.js +108 -0
- package/dist/cjs/modules/base/base.service.js.map +1 -1
- package/dist/cjs/modules/base/types/base.service.types.js.map +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js +29 -14
- package/dist/cjs/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +2 -2
- package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/cjs/modules/base/utils/router-validator.js +1 -4
- package/dist/cjs/modules/base/utils/router-validator.js.map +1 -1
- package/dist/cjs/modules/base/utils/service-hooks-manager.js.map +1 -1
- package/dist/cjs/modules/debugger/debugger.service.js +82 -0
- package/dist/cjs/modules/debugger/debugger.service.js.map +1 -0
- package/dist/cjs/modules/debugger/utils/loaded-components-logger.js +55 -0
- package/dist/cjs/modules/debugger/utils/loaded-components-logger.js.map +1 -0
- package/dist/cjs/modules/file-upload/file-upload.controller.js +4 -0
- package/dist/cjs/modules/file-upload/file-upload.controller.js.map +1 -1
- package/dist/cjs/modules/file-upload/file-upload.router.js +3 -1
- package/dist/cjs/modules/file-upload/file-upload.router.js.map +1 -1
- package/dist/cjs/modules/swagger/swagger.router.js +2 -1
- package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +2 -1
- 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-class-validator-json-schemas.js +12 -8
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +3 -3
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +2 -1
- package/dist/cjs/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +3 -3
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -1
- package/dist/cjs/server.js +11 -0
- package/dist/cjs/server.js.map +1 -1
- package/dist/cjs/types/arkos-config.js.map +1 -1
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/utils/cli/generate.js +9 -4
- package/dist/cjs/utils/cli/generate.js.map +1 -1
- package/dist/cjs/utils/cli/prisma-generate.js +1 -2
- package/dist/cjs/utils/cli/prisma-generate.js.map +1 -1
- package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js +34 -10
- package/dist/cjs/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js +2 -6
- package/dist/cjs/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js +31 -36
- package/dist/cjs/utils/cli/utils/template-generator/templates/hooks-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/middlewares-template.js +0 -2
- package/dist/cjs/utils/cli/utils/template-generator/templates/middlewares-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -1
- package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js +7 -10
- package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js.map +1 -1
- package/dist/cjs/utils/dynamic-loader.js +11 -2
- package/dist/cjs/utils/dynamic-loader.js.map +1 -1
- package/dist/cjs/utils/features/api.features.js +130 -73
- package/dist/cjs/utils/features/api.features.js.map +1 -1
- package/dist/cjs/utils/helpers/deepmerge.helper.js.map +1 -1
- package/dist/cjs/utils/helpers/prisma.helpers.js +8 -4
- package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -1
- package/dist/cjs/utils/sheu.js +11 -0
- package/dist/cjs/utils/sheu.js.map +1 -1
- package/dist/esm/app.js +6 -4
- package/dist/esm/app.js.map +1 -1
- package/dist/esm/exports/utils/index.js +2 -2
- package/dist/esm/exports/utils/index.js.map +1 -1
- package/dist/esm/modules/auth/auth.controller.js +18 -0
- package/dist/esm/modules/auth/auth.controller.js.map +1 -1
- package/dist/esm/modules/auth/auth.router.js +3 -1
- package/dist/esm/modules/auth/auth.router.js.map +1 -1
- package/dist/esm/modules/base/base.controller.js +49 -11
- package/dist/esm/modules/base/base.controller.js.map +1 -1
- package/dist/esm/modules/base/base.middlewares.js.map +1 -1
- package/dist/esm/modules/base/base.service.js +108 -0
- package/dist/esm/modules/base/base.service.js.map +1 -1
- package/dist/esm/modules/base/types/base.service.types.js.map +1 -1
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js +29 -15
- package/dist/esm/modules/base/utils/helpers/base.router.helpers.js.map +1 -1
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js +2 -2
- package/dist/esm/modules/base/utils/helpers/base.service.helpers.js.map +1 -1
- package/dist/esm/modules/base/utils/router-validator.js +1 -4
- package/dist/esm/modules/base/utils/router-validator.js.map +1 -1
- package/dist/esm/modules/base/utils/service-hooks-manager.js.map +1 -1
- package/dist/esm/modules/debugger/debugger.service.js +77 -0
- package/dist/esm/modules/debugger/debugger.service.js.map +1 -0
- package/dist/esm/modules/debugger/utils/loaded-components-logger.js +50 -0
- package/dist/esm/modules/debugger/utils/loaded-components-logger.js.map +1 -0
- package/dist/esm/modules/file-upload/file-upload.controller.js +4 -0
- package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
- package/dist/esm/modules/file-upload/file-upload.router.js +3 -1
- package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
- package/dist/esm/modules/swagger/swagger.router.js +2 -1
- package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js +2 -1
- package/dist/esm/modules/swagger/utils/helpers/get-authentication-json-schema-paths.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js +12 -8
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/generate-class-validator-json-schemas.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js +3 -3
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-main-routes-paths.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js +2 -1
- package/dist/esm/modules/swagger/utils/helpers/json-schema-generators/prisma-models/generate-prisma-model-parent-routes-paths.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +3 -3
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/swagger.router.helpers.js.map +1 -1
- package/dist/esm/server.js +11 -0
- package/dist/esm/server.js.map +1 -1
- package/dist/esm/types/arkos-config.js.map +1 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/cli/generate.js +9 -4
- package/dist/esm/utils/cli/generate.js.map +1 -1
- package/dist/esm/utils/cli/prisma-generate.js +1 -2
- package/dist/esm/utils/cli/prisma-generate.js.map +1 -1
- package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js +34 -10
- package/dist/esm/utils/cli/utils/template-generator/templates/auth-configs-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js +2 -6
- package/dist/esm/utils/cli/utils/template-generator/templates/controller-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/hooks-template.js +31 -36
- package/dist/esm/utils/cli/utils/template-generator/templates/hooks-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/middlewares-template.js +0 -2
- package/dist/esm/utils/cli/utils/template-generator/templates/middlewares-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/query-options-template.js.map +1 -1
- package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js +7 -7
- package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js.map +1 -1
- package/dist/esm/utils/dynamic-loader.js +11 -2
- package/dist/esm/utils/dynamic-loader.js.map +1 -1
- package/dist/esm/utils/features/api.features.js +130 -72
- package/dist/esm/utils/features/api.features.js.map +1 -1
- package/dist/esm/utils/helpers/deepmerge.helper.js.map +1 -1
- package/dist/esm/utils/helpers/prisma.helpers.js +8 -4
- package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -1
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -1
- package/dist/esm/utils/sheu.js +11 -0
- package/dist/esm/utils/sheu.js.map +1 -1
- package/dist/types/exports/utils/index.d.ts +2 -2
- package/dist/types/modules/base/base.controller.d.ts +2 -0
- package/dist/types/modules/base/base.service.d.ts +5 -0
- package/dist/types/modules/base/types/base.service.types.d.ts +8 -8
- package/dist/types/modules/base/utils/helpers/base.router.helpers.d.ts +3 -1
- package/dist/types/modules/base/utils/service-hooks-manager.d.ts +1 -1
- package/dist/types/modules/debugger/debugger.service.d.ts +15 -0
- package/dist/types/modules/debugger/utils/loaded-components-logger.d.ts +9 -0
- package/dist/types/types/arkos-config.d.ts +14 -0
- package/dist/types/types/index.d.ts +3 -0
- package/dist/types/utils/dynamic-loader.d.ts +33 -13
- package/dist/types/utils/features/api.features.d.ts +3 -5
- package/dist/types/utils/sheu.d.ts +8 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma-json-schema-generator.js","sourceRoot":"","sources":["../../../../src/utils/prisma/prisma-json-schema-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArkosConfig, RouterConfig } from \"../../exports\";\nimport { AuthPrismaQueryOptions, PrismaQueryOptions } from \"../../types\";\nimport deepmerge from \"../helpers/deepmerge.helper\";\nimport {\n getModuleComponents,\n ValidationFileMappingKey,\n} from \"../dynamic-loader\";\nimport prismaSchemaParser from \"./prisma-schema-parser\";\nimport {\n PrismaModel,\n PrismaField,\n JsonSchema,\n JsonSchemaProperty,\n} from \"./types\";\nimport { localValidatorFileExists } from \"../../modules/swagger/utils/helpers/swagger.router.helpers\";\n\n// Add these types to your existing types file\nexport interface SchemaGenerationConfig {\n modelName: string;\n arkosConfig: ArkosConfig;\n schemasToGenerate?: ValidationFileMappingKey[];\n}\n\nexport interface GeneratedSchemas {\n [key: string]: JsonSchema;\n}\n\n/**\n * Enhanced JSON Schema generator that creates schemas based on Prisma models and query options\n */\nexport class PrismaJsonSchemaGenerator {\n schema = prismaSchemaParser.parse();\n\n /**\n * Main method to generate all schemas for a model\n */\n async generateModelSchemas(\n config: SchemaGenerationConfig\n ): Promise<GeneratedSchemas> {\n const {\n modelName,\n arkosConfig,\n schemasToGenerate = [\n \"model\",\n \"login\",\n \"signup\",\n \"getMe\",\n \"updateMe\",\n \"updatePassword\",\n \"create\",\n \"createOne\",\n \"createMany\",\n \"update\",\n \"updateOne\",\n \"updateMany\",\n \"query\",\n \"findOne\",\n \"findMany\",\n ],\n } = config;\n\n const moduleComponents = getModuleComponents(modelName);\n const routerConfig = moduleComponents?.router?.config || {};\n const prismaQueryOptions = moduleComponents?.prismaQueryOptions || {};\n const authModuleModel = [\"auth\", \"me\", \"password\", \"signup\", \"login\"];\n const isAuthModule = authModuleModel.includes(modelName.toLowerCase());\n\n // Check if generation should be skipped\n if (arkosConfig?.swagger?.strict && arkosConfig.swagger.mode !== \"prisma\")\n return {};\n\n // Check if router is disabled\n if (routerConfig?.disable === true) return {};\n\n const model = this.schema.models.find(\n (m) => m.name.toLowerCase() === modelName.toLowerCase()\n );\n if (!model && !isAuthModule) return {};\n // throw new Error(`Model ${modelName} not found in schema`);\n\n const schemas: { [key: string]: JsonSchema } = {};\n\n if (isAuthModule) {\n // Generate auth-specific schemas\n await this.generateAuthSchemas(\n this.schema.models.find((m) => m.name.toLowerCase() === \"user\")!,\n schemas,\n arkosConfig,\n schemasToGenerate,\n prismaQueryOptions as AuthPrismaQueryOptions<any>\n );\n } else {\n // Generate standard CRUD schemas\n if (model)\n await this.generateCrudSchemas(\n model,\n schemas,\n arkosConfig,\n schemasToGenerate,\n prismaQueryOptions as PrismaQueryOptions<any>,\n routerConfig\n );\n }\n\n return { ...schemas };\n }\n\n /**\n * Generate auth-specific schemas\n */\n private async generateAuthSchemas(\n model: PrismaModel,\n schemas: { [key: string]: JsonSchema },\n arkosConfig: ArkosConfig,\n schemasToGenerate: ValidationFileMappingKey[],\n queryOptions?: AuthPrismaQueryOptions<any>,\n routerConfig?: RouterConfig\n ) {\n const modelName = \"Auth\";\n\n // if no auth activated forget those json schemas\n if (!arkosConfig?.authentication) return schemas;\n\n // Login schema (input)\n if (\n schemasToGenerate.includes(\"login\") &&\n !this.isEndpointDisabled(\"login\", routerConfig) &&\n !(await localValidatorFileExists(\"login\", modelName, arkosConfig))\n ) {\n schemas[`LoginSchema`] = this.generateLoginSchema(arkosConfig);\n }\n\n // Signup schema (input)\n if (\n schemasToGenerate.includes(\"signup\") &&\n !this.isEndpointDisabled(\"signup\", routerConfig) &&\n !(await localValidatorFileExists(\"signup\", modelName, arkosConfig))\n ) {\n schemas[`SignupSchema`] = this.generateSignupSchema(\n model,\n queryOptions?.signup\n );\n }\n\n // UpdateMe schema (input)\n if (\n schemasToGenerate.includes(\"updateMe\") &&\n !this.isEndpointDisabled(\"updateMe\", routerConfig) &&\n !(await localValidatorFileExists(\"updateMe\", modelName, arkosConfig))\n ) {\n schemas[`UpdateMeSchema`] = this.generateUpdateMeSchema(\n model,\n queryOptions?.updateMe\n );\n }\n\n // UpdatePassword schema (input)\n if (\n schemasToGenerate.includes(\"updatePassword\") &&\n !this.isEndpointDisabled(\"updatePassword\", routerConfig) &&\n !(await localValidatorFileExists(\n \"updatePassword\",\n modelName,\n arkosConfig\n ))\n ) {\n schemas[`UpdatePasswordSchema`] = this.generateUpdatePasswordSchema(\n model,\n queryOptions?.updatePassword\n );\n }\n\n // GetMe response schema\n if (\n schemasToGenerate.includes(\"getMe\") &&\n !this.isEndpointDisabled(\"getMe\", routerConfig) &&\n !(await localValidatorFileExists(\"getMe\", modelName, arkosConfig))\n ) {\n schemas[`GetMeSchema`] = this.generateResponseSchema(\n model,\n queryOptions?.getMe || {},\n \"findOne\"\n );\n }\n }\n\n /**\n * Generate standard CRUD schemas\n */\n private async generateCrudSchemas(\n model: PrismaModel,\n schemas: { [key: string]: JsonSchema },\n arkosConfig: ArkosConfig,\n schemasToGenerate: ValidationFileMappingKey[],\n queryOptions?: PrismaQueryOptions<any>,\n routerConfig?: RouterConfig\n ) {\n const modelName = model.name;\n\n // // Create schemas\n // if (\n // schemasToGenerate.includes(\"createOne\") &&\n // !this.isEndpointDisabled(\"createOne\", routerConfig) &&\n // !(await localValidatorFileExists(\"createOne\", modelName, arkosConfig))\n // ) {\n // schemas[`Create${modelName}ModelSchema`] = this.generateCreateSchema(\n // model,\n // this.resolvePrismaQueryOptions(queryOptions, \"createOne\")\n // );\n // }\n\n // if (\n // schemasToGenerate.includes(\"createMany\") &&\n // !this.isEndpointDisabled(\"createMany\", routerConfig) &&\n // !(await localValidatorFileExists(\"createMany\", modelName, arkosConfig))\n // ) {\n // schemas[`CreateMany${modelName}ModelSchema`] = {\n // type: \"array\",\n // items: { $ref: `#/components/schemas/Create${modelName}ModelSchema` },\n // };\n // }\n\n // // Update schemas\n // if (\n // schemasToGenerate.includes(\"updateOne\") &&\n // !this.isEndpointDisabled(\"updateOne\", routerConfig) &&\n // !(await localValidatorFileExists(\"updateOne\", modelName, arkosConfig))\n // ) {\n // schemas[`Update${modelName}ModelSchema`] = this.generateUpdateSchema(\n // model,\n // this.resolvePrismaQueryOptions(queryOptions, \"updateOne\")\n // );\n // }\n\n // if (\n // schemasToGenerate.includes(\"updateMany\") &&\n // !this.isEndpointDisabled(\"updateMany\", routerConfig) &&\n // !(await localValidatorFileExists(\"updateMany\", modelName, arkosConfig))\n // ) {\n // schemas[`UpdateMany${modelName}ModelSchema`] = {\n // type: \"object\",\n // properties: {\n // data: {\n // type: \"object\",\n // $ref: `#/components/schemas/Update${modelName}ModelSchema`,\n // },\n // where: { type: \"object\" },\n // },\n // required: [\"data\"],\n // };\n // }\n // Helper function to ensure base schema exists\n\n const ensureBaseSchemaReference = async (\n operation: string,\n modelName: string\n ) => {\n const suffix =\n arkosConfig.validation?.resolver === \"zod\" ? \"Schema\" : \"Dto\";\n\n // Check if local validator file exists for single operation\n const singleOpName = operation === \"Create\" ? \"createOne\" : \"updateOne\";\n const hasLocalValidator = await localValidatorFileExists(\n singleOpName,\n modelName,\n arkosConfig\n );\n\n if (hasLocalValidator) {\n // Point to local validator schema (Schema or Dto)\n return `${operation}${modelName}${suffix}`;\n } else {\n // Point to ModelSchema, generate if doesn't exist\n const modelSchemaKey = `${operation}${modelName}ModelSchema`;\n\n if (!schemas[modelSchemaKey]) {\n // Generate ModelSchema as fallback\n if (operation === \"Create\") {\n schemas[modelSchemaKey] = this.generateCreateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"createOne\")\n );\n } else if (operation === \"Update\") {\n schemas[modelSchemaKey] = this.generateUpdateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"updateOne\")\n );\n }\n }\n\n return modelSchemaKey;\n }\n };\n\n // Create schemas (unchanged)\n if (\n schemasToGenerate.includes(\"createOne\") &&\n !this.isEndpointDisabled(\"createOne\", routerConfig) &&\n !(await localValidatorFileExists(\"createOne\", modelName, arkosConfig))\n ) {\n schemas[`Create${modelName}ModelSchema`] = this.generateCreateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"createOne\")\n );\n }\n\n if (\n schemasToGenerate.includes(\"createMany\") &&\n !this.isEndpointDisabled(\"createMany\", routerConfig) &&\n !(await localValidatorFileExists(\"createMany\", modelName, arkosConfig))\n ) {\n // Only fix the reference\n const baseSchemaKey = await ensureBaseSchemaReference(\n \"Create\",\n modelName\n );\n schemas[`CreateMany${modelName}ModelSchema`] = {\n type: \"array\",\n items: { $ref: `#/components/schemas/${baseSchemaKey}` },\n };\n }\n\n // Update schemas (unchanged)\n if (\n schemasToGenerate.includes(\"updateOne\") &&\n !this.isEndpointDisabled(\"updateOne\", routerConfig) &&\n !(await localValidatorFileExists(\"updateOne\", modelName, arkosConfig))\n ) {\n schemas[`Update${modelName}ModelSchema`] = this.generateUpdateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"updateOne\")\n );\n }\n\n if (\n schemasToGenerate.includes(\"updateMany\") &&\n !this.isEndpointDisabled(\"updateMany\", routerConfig) &&\n !(await localValidatorFileExists(\"updateMany\", modelName, arkosConfig))\n ) {\n // Only fix the reference\n\n const baseSchemaKey = await ensureBaseSchemaReference(\n \"Update\",\n modelName\n );\n schemas[`UpdateMany${modelName}ModelSchema`] = {\n type: \"object\",\n properties: {\n data: {\n type: \"object\",\n $ref: `#/components/schemas/${baseSchemaKey}`,\n },\n where: { type: \"object\" },\n },\n required: [\"data\"],\n };\n }\n // Response schemas\n if (\n schemasToGenerate.includes(\"findOne\") &&\n !this.isEndpointDisabled(\"findOne\", routerConfig) &&\n !(await localValidatorFileExists(\"findOne\", modelName, arkosConfig))\n ) {\n schemas[`FindOne${modelName}ModelSchema`] = this.generateResponseSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"findOne\"),\n \"findOne\"\n );\n }\n\n if (\n schemasToGenerate.includes(\"findMany\") &&\n !this.isEndpointDisabled(\"findMany\", routerConfig) &&\n !(await localValidatorFileExists(\"findMany\", modelName, arkosConfig))\n ) {\n schemas[`FindMany${modelName}ModelSchema`] = {\n type: \"array\",\n items: this.generateResponseSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"findMany\"),\n \"findMany\"\n ),\n };\n }\n }\n\n /**\n * Generate create schema (excludes ID, includes relation IDs only)\n */\n private generateCreateSchema(\n model: PrismaModel,\n _: Record<string, any>\n ): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n const restrictedFields = [\"createdAt\", \"updatedAt\", \"deletedAt\", \"id\"];\n\n if (model.name.toLowerCase() === \"auth\")\n restrictedFields.push(\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"lastLoginAt\"\n );\n\n for (const field of model.fields) {\n // Skip ID fields\n if (field.isId || restrictedFields.includes(field.name)) continue;\n\n // Handle relations\n if (this.isModelRelation(field.type)) {\n // For single relations, include only the ID field\n if (!field.isArray && field.connectionField) {\n properties[field.connectionField] = {\n type: this.mapPrismaTypeToJsonSchema(\n model.fields.find(\n (_field) => _field.name === field.connectionField\n )?.type || \"String\"\n ),\n };\n\n // Check if relation ID is required\n if (!field.isOptional && field.defaultValue === undefined)\n required.push(field.name);\n }\n // Skip array relations in create schema\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n // Field is required if not optional, no default, and not array\n if (\n !field.isOptional &&\n field.defaultValue === undefined &&\n !field.isArray\n ) {\n required.push(field.name);\n }\n }\n\n return {\n type: \"object\",\n properties,\n required,\n };\n }\n\n /**\n * Generate update schema (all fields optional, includes relation IDs only)\n */\n private generateUpdateSchema(\n model: PrismaModel,\n _: Record<string, any>\n ): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const autoFillFields = [\"createdAt\", \"updatedAt\", \"deletedAt\", \"id\"];\n\n for (const field of model.fields) {\n // Skip ID fields\n if (field.isId || autoFillFields.includes(field.name)) continue;\n\n // Handle relations\n if (this.isModelRelation(field.type)) {\n // For single relations, include only the ID field\n if (!field.isArray && field.connectionField)\n properties[field.connectionField] = {\n type: this.mapPrismaTypeToJsonSchema(\n model.fields.find(\n (_field) => _field.name === field.connectionField\n )?.type || \"String\"\n ),\n };\n\n // Skip array relations in update schema\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n }\n\n return {\n type: \"object\",\n properties,\n required: [], // All fields are optional in update\n };\n }\n\n /**\n * Generate response schema (includes nested relations based on query options)\n */\n private generateResponseSchema(\n model: PrismaModel,\n options: Record<string, any>,\n _: \"findOne\" | \"findMany\"\n ): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n\n // Get select and include options\n const selectFields = options?.select;\n const omittedFields = options?.omit;\n const includeRelations = options?.include;\n\n for (const field of model.fields) {\n // Skip password fields\n if (field.name === \"password\") continue;\n\n // Skip ommited fields\n if (omittedFields && omittedFields[field.name]) continue;\n\n // If select is specified, only include selected fields\n if (selectFields && !selectFields[field.name]) continue;\n\n // Handle relations\n if (this.isModelRelation(field.type)) {\n // Include relation if specified in include option\n if (includeRelations?.[field.name]) {\n const relationModel = this.schema.models.find(\n (m) => m.name === field.type\n );\n\n if (relationModel) {\n const relationSchema = this.generateNestedRelationSchema(\n relationModel,\n includeRelations[field.name]\n );\n properties[field.name] = field.isArray\n ? { type: \"array\", items: relationSchema }\n : relationSchema;\n }\n }\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n // Field is required if not optional (for response schemas, we include all by default)\n if (!field.isOptional) required.push(field.name);\n }\n\n return {\n type: \"object\",\n properties,\n required,\n };\n }\n\n /**\n * Generate nested relation schema\n */\n private generateNestedRelationSchema(\n model: PrismaModel,\n includeOptions: any\n ): JsonSchemaProperty {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n\n // Handle nested select\n const selectFields = includeOptions?.select;\n const nestedIncludes = includeOptions?.include;\n\n for (const field of model.fields) {\n // Skip password fields\n if (field.name.toLowerCase().includes(\"password\")) {\n continue;\n }\n\n if (selectFields && !selectFields[field.name]) {\n continue;\n }\n\n if (this.isModelRelation(field.type)) {\n if (nestedIncludes?.[field.name]) {\n const relationModel = this.schema.models.find(\n (m) => m.name === field.type\n );\n if (relationModel) {\n const nestedSchema = this.generateNestedRelationSchema(\n relationModel,\n nestedIncludes[field.name]\n );\n properties[field.name] = field.isArray\n ? { type: \"array\", items: nestedSchema }\n : nestedSchema;\n }\n }\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n if (!field.isOptional) {\n required.push(field.name);\n }\n }\n\n return {\n type: \"object\",\n properties,\n required,\n };\n }\n\n /**\n * Auth-specific schema generators\n */\n private generateLoginSchema(arkosConfig?: ArkosConfig): JsonSchema {\n const userNameFields =\n arkosConfig?.authentication?.login?.allowedUsernames || [];\n\n // Helper function to get display name for nested fields\n const getDisplayName = (field: string) => {\n if (field.includes(\".\")) return field.split(\".\").pop() || field; // Get the part after the last dot\n return field;\n };\n\n // Base schema with password (always required)\n const baseSchema: JsonSchemaProperty = {\n type: \"object\",\n properties: {\n password: {\n type: \"string\",\n minLength: 8,\n },\n },\n required: [\"password\"],\n };\n\n // Add all username fields to properties\n userNameFields.forEach((field) => {\n const displayName = getDisplayName(field);\n baseSchema.properties![displayName] = {\n type: \"string\",\n format: \"string\",\n description: `Username field: ${field}`, // Optional: show original field path\n };\n });\n\n // At least one username field must be provided along with password\n if (userNameFields.length > 0) {\n const usernameDisplayNames = userNameFields.map(getDisplayName);\n\n return {\n ...baseSchema,\n anyOf: usernameDisplayNames.map(() => ({\n required: [...baseSchema.required!],\n })),\n };\n }\n\n return baseSchema;\n }\n private generateSignupSchema(\n model: PrismaModel,\n options?: Record<string, any>\n ): JsonSchema {\n // Similar to create but might have specific required fields\n const singupSchema = this.generateCreateSchema(model, options || {});\n\n const restrictedFields = [\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"lastLoginAt\",\n ];\n restrictedFields.forEach((field) => {\n delete singupSchema?.properties?.[field];\n });\n\n return singupSchema;\n }\n\n private generateUpdateMeSchema(\n model: PrismaModel,\n options?: Record<string, any>\n ): JsonSchema {\n // Similar to update but might exclude certain fields like role, etc.\n const updateSchema = this.generateUpdateSchema(model, options || {});\n\n // Remove sensitive fields that users shouldn't update themselves\n const restrictedFields = [\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"password\",\n \"lastLoginAt\",\n ];\n restrictedFields.forEach((field) => {\n delete updateSchema?.properties?.[field];\n });\n\n return updateSchema;\n }\n\n private generateUpdatePasswordSchema(\n _: PrismaModel,\n _1?: Record<string, any>\n ): JsonSchema {\n return {\n type: \"object\",\n properties: {\n currentPassword: { type: \"string\" },\n newPassword: { type: \"string\", minLength: 8 },\n },\n required: [\"currentPassword\", \"newPassword\"],\n };\n }\n\n /**\n * Utility methods\n */\n private resolvePrismaQueryOptions(\n prismaQueryOptions?: PrismaQueryOptions<any> | AuthPrismaQueryOptions<any>,\n action?: ValidationFileMappingKey\n ): Record<string, any> {\n if (!prismaQueryOptions || !action) {\n return {};\n }\n\n const options = prismaQueryOptions as any;\n const actionOptions = options[action] || {};\n\n // Start with deprecated queryOptions (for backward compatibility)\n let mergedOptions = options.queryOptions || {};\n\n // Apply global options (replaces queryOptions)\n if (options.global)\n mergedOptions = deepmerge(mergedOptions, options.global);\n\n // Apply general operation options based on action type\n const generalOptions = this.getGeneralOptionsForAction(options, action);\n if (generalOptions)\n mergedOptions = deepmerge(mergedOptions, generalOptions);\n\n // Finally apply specific action options (highest priority)\n if (actionOptions) mergedOptions = deepmerge(mergedOptions, actionOptions);\n\n return mergedOptions;\n }\n\n /**\n * Helps in remmaping those prisma query options that combines many operations for example find, save...\n */\n private getGeneralOptionsForAction(\n options: any,\n action: ValidationFileMappingKey\n ): Record<string, any> | null {\n const actionMap: { [key: string]: string[] } = {\n find: [\"findOne\", \"findMany\"],\n create: [\"createOne\", \"createMany\"],\n update: [\"updateOne\", \"updateMany\"],\n delete: [\"deleteOne\", \"deleteMany\"],\n save: [\"createOne\", \"createMany\", \"updateOne\", \"updateMany\"],\n saveOne: [\"createOne\", \"updateOne\"],\n saveMany: [\"createMany\", \"updateMany\"],\n };\n\n for (const [optionKey, actions] of Object.entries(actionMap)) {\n if (actions.includes(action) && options[optionKey]) {\n return options[optionKey];\n }\n }\n\n return null;\n }\n\n private isEndpointDisabled(\n endpoint: string,\n routerConfig?: RouterConfig\n ): boolean {\n if (!routerConfig?.disable) return false;\n\n if (typeof routerConfig.disable === \"boolean\") {\n return routerConfig.disable;\n }\n\n return (\n routerConfig.disable[endpoint as keyof typeof routerConfig.disable] ||\n false\n );\n }\n\n private isModelRelation(typeName: string): boolean {\n return this.schema.models.some((m) => m.name === typeName);\n }\n\n private convertFieldToJsonSchema(field: PrismaField): JsonSchemaProperty {\n // Reuse the existing method from the original generator\n const baseType = this.mapPrismaTypeToJsonSchema(field.type);\n const property: JsonSchemaProperty = { type: baseType };\n\n if (field.isArray) {\n property.type = \"array\";\n property.items = { type: this.mapPrismaTypeToJsonSchema(field.type) };\n }\n\n if (field.defaultValue !== undefined) {\n property.default = field.defaultValue;\n }\n\n if (field.type === \"DateTime\") {\n property.format = \"date-time\";\n }\n\n if (this.isEnum(field.type)) {\n const enumDef = this.schema.enums.find((e) => e.name === field.type);\n if (enumDef) {\n property.enum = enumDef.values;\n }\n }\n\n return property;\n }\n\n private mapPrismaTypeToJsonSchema(prismaType: string): string {\n const typeMap: { [key: string]: string } = {\n String: \"string\",\n Int: \"number\",\n Float: \"number\",\n Boolean: \"boolean\",\n DateTime: \"string\",\n Json: \"object\",\n Bytes: \"string\",\n };\n\n if (typeMap[prismaType]) return typeMap[prismaType];\n\n if (this.isEnum(prismaType)) return \"string\";\n\n if (this.isModelRelation(prismaType)) return \"object\";\n\n return \"string\";\n }\n\n private isEnum(typeName: string): boolean {\n return this.schema.enums.some((e) => e.name === typeName);\n }\n}\n\nconst prismaJsonSchemaGenerator = new PrismaJsonSchemaGenerator();\n\nexport default prismaJsonSchemaGenerator;\n"]}
|
|
1
|
+
{"version":3,"file":"prisma-json-schema-generator.js","sourceRoot":"","sources":["../../../../src/utils/prisma/prisma-json-schema-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { ArkosConfig, RouterConfig } from \"../../exports\";\nimport { AuthPrismaQueryOptions, PrismaQueryOptions } from \"../../types\";\nimport deepmerge from \"../helpers/deepmerge.helper\";\nimport {\n getModuleComponents,\n ValidationFileMappingKey,\n} from \"../dynamic-loader\";\nimport prismaSchemaParser from \"./prisma-schema-parser\";\nimport {\n PrismaModel,\n PrismaField,\n JsonSchema,\n JsonSchemaProperty,\n} from \"./types\";\nimport { localValidatorFileExists } from \"../../modules/swagger/utils/helpers/swagger.router.helpers\";\n\n// Add these types to your existing types file\nexport interface SchemaGenerationConfig {\n modelName: string;\n arkosConfig: ArkosConfig;\n schemasToGenerate?: ValidationFileMappingKey[];\n}\n\nexport interface GeneratedSchemas {\n [key: string]: JsonSchema;\n}\n\n/**\n * Enhanced JSON Schema generator that creates schemas based on Prisma models and query options\n */\nexport class PrismaJsonSchemaGenerator {\n schema = prismaSchemaParser.parse();\n\n /**\n * Main method to generate all schemas for a model\n */\n async generateModelSchemas(\n config: SchemaGenerationConfig\n ): Promise<GeneratedSchemas> {\n const {\n modelName,\n arkosConfig,\n schemasToGenerate = [\n \"model\",\n \"login\",\n \"signup\",\n \"getMe\",\n \"updateMe\",\n \"updatePassword\",\n \"create\",\n \"createOne\",\n \"createMany\",\n \"update\",\n \"updateOne\",\n \"updateMany\",\n \"query\",\n \"findOne\",\n \"findMany\",\n ],\n } = config;\n\n const moduleComponents = getModuleComponents(modelName);\n const routerConfig = moduleComponents?.router?.config || {};\n const prismaQueryOptions = moduleComponents?.prismaQueryOptions || {};\n const authModuleModel = [\"auth\", \"me\", \"password\", \"signup\", \"login\"];\n const isAuthModule = authModuleModel.includes(modelName.toLowerCase());\n\n // Check if generation should be skipped\n if (arkosConfig?.swagger?.strict && arkosConfig.swagger.mode !== \"prisma\")\n return {};\n\n // Check if router is disabled\n if (routerConfig?.disable === true) return {};\n\n const model = this.schema.models.find(\n (m) => m.name.toLowerCase() === modelName.toLowerCase()\n );\n if (!model && !isAuthModule) return {};\n // throw new Error(`Model ${modelName} not found in schema`);\n\n const schemas: { [key: string]: JsonSchema } = {};\n\n if (isAuthModule) {\n // Generate auth-specific schemas\n await this.generateAuthSchemas(\n this.schema.models.find((m) => m.name.toLowerCase() === \"user\")!,\n schemas,\n arkosConfig,\n schemasToGenerate,\n prismaQueryOptions as AuthPrismaQueryOptions<any>\n );\n } else {\n // Generate standard CRUD schemas\n if (model)\n await this.generateCrudSchemas(\n model,\n schemas,\n arkosConfig,\n schemasToGenerate,\n prismaQueryOptions as PrismaQueryOptions<any>,\n routerConfig\n );\n }\n\n return { ...schemas };\n }\n\n /**\n * Generate auth-specific schemas\n */\n private async generateAuthSchemas(\n model: PrismaModel,\n schemas: { [key: string]: JsonSchema },\n arkosConfig: ArkosConfig,\n schemasToGenerate: ValidationFileMappingKey[],\n queryOptions?: AuthPrismaQueryOptions<any>,\n routerConfig?: RouterConfig\n ) {\n const modelName = \"Auth\";\n\n // if no auth activated forget those json schemas\n if (!arkosConfig?.authentication) return schemas;\n\n // Login schema (input)\n if (\n schemasToGenerate.includes(\"login\") &&\n !this.isEndpointDisabled(\"login\", routerConfig) &&\n !(await localValidatorFileExists(\"login\", modelName, arkosConfig))\n ) {\n schemas[`LoginSchema`] = this.generateLoginSchema(arkosConfig);\n }\n\n // Signup schema (input)\n if (\n schemasToGenerate.includes(\"signup\") &&\n !this.isEndpointDisabled(\"signup\", routerConfig) &&\n !(await localValidatorFileExists(\"signup\", modelName, arkosConfig))\n ) {\n schemas[`SignupSchema`] = this.generateSignupSchema(\n model,\n queryOptions?.signup\n );\n }\n\n // UpdateMe schema (input)\n if (\n schemasToGenerate.includes(\"updateMe\") &&\n !this.isEndpointDisabled(\"updateMe\", routerConfig) &&\n !(await localValidatorFileExists(\"updateMe\", modelName, arkosConfig))\n ) {\n schemas[`UpdateMeSchema`] = this.generateUpdateMeSchema(\n model,\n queryOptions?.updateMe\n );\n }\n\n // UpdatePassword schema (input)\n if (\n schemasToGenerate.includes(\"updatePassword\") &&\n !this.isEndpointDisabled(\"updatePassword\", routerConfig) &&\n !(await localValidatorFileExists(\n \"updatePassword\",\n modelName,\n arkosConfig\n ))\n ) {\n schemas[`UpdatePasswordSchema`] = this.generateUpdatePasswordSchema(\n model,\n queryOptions?.updatePassword\n );\n }\n\n // GetMe response schema\n if (\n schemasToGenerate.includes(\"getMe\") &&\n !this.isEndpointDisabled(\"getMe\", routerConfig) &&\n !(await localValidatorFileExists(\"getMe\", modelName, arkosConfig))\n ) {\n schemas[`GetMeSchema`] = this.generateResponseSchema(\n model,\n queryOptions?.getMe || {},\n \"findOne\"\n );\n }\n }\n\n /**\n * Generate standard CRUD schemas\n */\n private async generateCrudSchemas(\n model: PrismaModel,\n schemas: { [key: string]: JsonSchema },\n arkosConfig: ArkosConfig,\n schemasToGenerate: ValidationFileMappingKey[],\n queryOptions?: PrismaQueryOptions<any>,\n routerConfig?: RouterConfig<any>\n ) {\n const modelName = model.name;\n\n // // Create schemas\n // if (\n // schemasToGenerate.includes(\"createOne\") &&\n // !this.isEndpointDisabled(\"createOne\", routerConfig) &&\n // !(await localValidatorFileExists(\"createOne\", modelName, arkosConfig))\n // ) {\n // schemas[`Create${modelName}ModelSchema`] = this.generateCreateSchema(\n // model,\n // this.resolvePrismaQueryOptions(queryOptions, \"createOne\")\n // );\n // }\n\n // if (\n // schemasToGenerate.includes(\"createMany\") &&\n // !this.isEndpointDisabled(\"createMany\", routerConfig) &&\n // !(await localValidatorFileExists(\"createMany\", modelName, arkosConfig))\n // ) {\n // schemas[`CreateMany${modelName}ModelSchema`] = {\n // type: \"array\",\n // items: { $ref: `#/components/schemas/Create${modelName}ModelSchema` },\n // };\n // }\n\n // // Update schemas\n // if (\n // schemasToGenerate.includes(\"updateOne\") &&\n // !this.isEndpointDisabled(\"updateOne\", routerConfig) &&\n // !(await localValidatorFileExists(\"updateOne\", modelName, arkosConfig))\n // ) {\n // schemas[`Update${modelName}ModelSchema`] = this.generateUpdateSchema(\n // model,\n // this.resolvePrismaQueryOptions(queryOptions, \"updateOne\")\n // );\n // }\n\n // if (\n // schemasToGenerate.includes(\"updateMany\") &&\n // !this.isEndpointDisabled(\"updateMany\", routerConfig) &&\n // !(await localValidatorFileExists(\"updateMany\", modelName, arkosConfig))\n // ) {\n // schemas[`UpdateMany${modelName}ModelSchema`] = {\n // type: \"object\",\n // properties: {\n // data: {\n // type: \"object\",\n // $ref: `#/components/schemas/Update${modelName}ModelSchema`,\n // },\n // where: { type: \"object\" },\n // },\n // required: [\"data\"],\n // };\n // }\n // Helper function to ensure base schema exists\n\n const ensureBaseSchemaReference = async (\n operation: string,\n modelName: string\n ) => {\n const suffix =\n arkosConfig.validation?.resolver === \"zod\" ? \"Schema\" : \"Dto\";\n\n // Check if local validator file exists for single operation\n const singleOpName = operation === \"Create\" ? \"createOne\" : \"updateOne\";\n const hasLocalValidator = await localValidatorFileExists(\n singleOpName,\n modelName,\n arkosConfig\n );\n\n if (hasLocalValidator) {\n // Point to local validator schema (Schema or Dto)\n return `${operation}${modelName}${suffix}`;\n } else {\n // Point to ModelSchema, generate if doesn't exist\n const modelSchemaKey = `${operation}${modelName}ModelSchema`;\n\n if (!schemas[modelSchemaKey]) {\n // Generate ModelSchema as fallback\n if (operation === \"Create\") {\n schemas[modelSchemaKey] = this.generateCreateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"createOne\")\n );\n } else if (operation === \"Update\") {\n schemas[modelSchemaKey] = this.generateUpdateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"updateOne\")\n );\n }\n }\n\n return modelSchemaKey;\n }\n };\n\n // Create schemas (unchanged)\n if (\n schemasToGenerate.includes(\"createOne\") &&\n !this.isEndpointDisabled(\"createOne\", routerConfig) &&\n !(await localValidatorFileExists(\"createOne\", modelName, arkosConfig))\n ) {\n schemas[`Create${modelName}ModelSchema`] = this.generateCreateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"createOne\")\n );\n }\n\n if (\n schemasToGenerate.includes(\"createMany\") &&\n !this.isEndpointDisabled(\"createMany\", routerConfig) &&\n !(await localValidatorFileExists(\"createMany\", modelName, arkosConfig))\n ) {\n // Only fix the reference\n const baseSchemaKey = await ensureBaseSchemaReference(\n \"Create\",\n modelName\n );\n schemas[`CreateMany${modelName}ModelSchema`] = {\n type: \"array\",\n items: { $ref: `#/components/schemas/${baseSchemaKey}` },\n };\n }\n\n // Update schemas (unchanged)\n if (\n schemasToGenerate.includes(\"updateOne\") &&\n !this.isEndpointDisabled(\"updateOne\", routerConfig) &&\n !(await localValidatorFileExists(\"updateOne\", modelName, arkosConfig))\n ) {\n schemas[`Update${modelName}ModelSchema`] = this.generateUpdateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"updateOne\")\n );\n }\n\n if (\n schemasToGenerate.includes(\"updateMany\") &&\n !this.isEndpointDisabled(\"updateMany\", routerConfig) &&\n !(await localValidatorFileExists(\"updateMany\", modelName, arkosConfig))\n ) {\n // Only fix the reference\n\n const baseSchemaKey = await ensureBaseSchemaReference(\n \"Update\",\n modelName\n );\n schemas[`UpdateMany${modelName}ModelSchema`] = {\n type: \"object\",\n properties: {\n data: {\n type: \"object\",\n $ref: `#/components/schemas/${baseSchemaKey}`,\n },\n where: { type: \"object\" },\n },\n required: [\"data\"],\n };\n }\n // Response schemas\n if (\n schemasToGenerate.includes(\"findOne\") &&\n !this.isEndpointDisabled(\"findOne\", routerConfig) &&\n !(await localValidatorFileExists(\"findOne\", modelName, arkosConfig))\n ) {\n schemas[`FindOne${modelName}ModelSchema`] = this.generateResponseSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"findOne\"),\n \"findOne\"\n );\n }\n\n if (\n schemasToGenerate.includes(\"findMany\") &&\n !this.isEndpointDisabled(\"findMany\", routerConfig) &&\n !(await localValidatorFileExists(\"findMany\", modelName, arkosConfig))\n ) {\n schemas[`FindMany${modelName}ModelSchema`] = {\n type: \"array\",\n items: this.generateResponseSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"findMany\"),\n \"findMany\"\n ),\n };\n }\n }\n\n /**\n * Generate create schema (excludes ID, includes relation IDs only)\n */\n private generateCreateSchema(\n model: PrismaModel,\n _: Record<string, any>\n ): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n const restrictedFields = [\"createdAt\", \"updatedAt\", \"deletedAt\", \"id\"];\n\n if (model.name.toLowerCase() === \"auth\")\n restrictedFields.push(\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"lastLoginAt\"\n );\n\n for (const field of model.fields) {\n // Skip ID fields\n if (field.isId || restrictedFields.includes(field.name)) continue;\n\n // Handle relations\n if (this.isModelRelation(field.type)) {\n // For single relations, include only the ID field\n if (!field.isArray && field.connectionField) {\n properties[field.connectionField] = {\n type: this.mapPrismaTypeToJsonSchema(\n model.fields.find(\n (_field) => _field.name === field.connectionField\n )?.type || \"String\"\n ),\n };\n\n // Check if relation ID is required\n if (!field.isOptional && field.defaultValue === undefined)\n required.push(field.name);\n }\n // Skip array relations in create schema\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n // Field is required if not optional, no default, and not array\n if (\n !field.isOptional &&\n field.defaultValue === undefined &&\n !field.isArray\n ) {\n required.push(field.name);\n }\n }\n\n return {\n type: \"object\",\n properties,\n required,\n };\n }\n\n /**\n * Generate update schema (all fields optional, includes relation IDs only)\n */\n private generateUpdateSchema(\n model: PrismaModel,\n _: Record<string, any>\n ): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const autoFillFields = [\"createdAt\", \"updatedAt\", \"deletedAt\", \"id\"];\n\n for (const field of model.fields) {\n // Skip ID fields\n if (field.isId || autoFillFields.includes(field.name)) continue;\n\n // Handle relations\n if (this.isModelRelation(field.type)) {\n // For single relations, include only the ID field\n if (!field.isArray && field.connectionField)\n properties[field.connectionField] = {\n type: this.mapPrismaTypeToJsonSchema(\n model.fields.find(\n (_field) => _field.name === field.connectionField\n )?.type || \"String\"\n ),\n };\n\n // Skip array relations in update schema\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n }\n\n return {\n type: \"object\",\n properties,\n required: [], // All fields are optional in update\n };\n }\n\n /**\n * Generate response schema (includes nested relations based on query options)\n */\n private generateResponseSchema(\n model: PrismaModel,\n options: Record<string, any>,\n _: \"findOne\" | \"findMany\"\n ): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n\n // Get select and include options\n const selectFields = options?.select;\n const omittedFields = options?.omit;\n const includeRelations = options?.include;\n\n for (const field of model.fields) {\n // Skip password fields\n if (field.name === \"password\") continue;\n\n // Skip ommited fields\n if (omittedFields && omittedFields[field.name]) continue;\n\n // If select is specified, only include selected fields\n if (selectFields && !selectFields[field.name]) continue;\n\n // Handle relations\n if (this.isModelRelation(field.type)) {\n // Include relation if specified in include option\n if (includeRelations?.[field.name]) {\n const relationModel = this.schema.models.find(\n (m) => m.name === field.type\n );\n\n if (relationModel) {\n const relationSchema = this.generateNestedRelationSchema(\n relationModel,\n includeRelations[field.name]\n );\n properties[field.name] = field.isArray\n ? { type: \"array\", items: relationSchema }\n : relationSchema;\n }\n }\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n // Field is required if not optional (for response schemas, we include all by default)\n if (!field.isOptional) required.push(field.name);\n }\n\n return {\n type: \"object\",\n properties,\n required,\n };\n }\n\n /**\n * Generate nested relation schema\n */\n private generateNestedRelationSchema(\n model: PrismaModel,\n includeOptions: any\n ): JsonSchemaProperty {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n\n // Handle nested select\n const selectFields = includeOptions?.select;\n const nestedIncludes = includeOptions?.include;\n\n for (const field of model.fields) {\n // Skip password fields\n if (field.name.toLowerCase().includes(\"password\")) {\n continue;\n }\n\n if (selectFields && !selectFields[field.name]) {\n continue;\n }\n\n if (this.isModelRelation(field.type)) {\n if (nestedIncludes?.[field.name]) {\n const relationModel = this.schema.models.find(\n (m) => m.name === field.type\n );\n if (relationModel) {\n const nestedSchema = this.generateNestedRelationSchema(\n relationModel,\n nestedIncludes[field.name]\n );\n properties[field.name] = field.isArray\n ? { type: \"array\", items: nestedSchema }\n : nestedSchema;\n }\n }\n continue;\n }\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n if (!field.isOptional) {\n required.push(field.name);\n }\n }\n\n return {\n type: \"object\",\n properties,\n required,\n };\n }\n\n /**\n * Auth-specific schema generators\n */\n private generateLoginSchema(arkosConfig?: ArkosConfig): JsonSchema {\n const userNameFields =\n arkosConfig?.authentication?.login?.allowedUsernames || [];\n\n // Helper function to get display name for nested fields\n const getDisplayName = (field: string) => {\n if (field.includes(\".\")) return field.split(\".\").pop() || field; // Get the part after the last dot\n return field;\n };\n\n // Base schema with password (always required)\n const baseSchema: JsonSchemaProperty = {\n type: \"object\",\n properties: {\n password: {\n type: \"string\",\n minLength: 8,\n },\n },\n required: [\"password\"],\n };\n\n // Add all username fields to properties\n userNameFields.forEach((field) => {\n const displayName = getDisplayName(field);\n baseSchema.properties![displayName] = {\n type: \"string\",\n format: \"string\",\n description: `Username field: ${field}`, // Optional: show original field path\n };\n });\n\n // At least one username field must be provided along with password\n if (userNameFields.length > 0) {\n const usernameDisplayNames = userNameFields.map(getDisplayName);\n\n return {\n ...baseSchema,\n anyOf: usernameDisplayNames.map(() => ({\n required: [...baseSchema.required!],\n })),\n };\n }\n\n return baseSchema;\n }\n private generateSignupSchema(\n model: PrismaModel,\n options?: Record<string, any>\n ): JsonSchema {\n // Similar to create but might have specific required fields\n const singupSchema = this.generateCreateSchema(model, options || {});\n\n const restrictedFields = [\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"lastLoginAt\",\n ];\n restrictedFields.forEach((field) => {\n delete singupSchema?.properties?.[field];\n });\n\n return singupSchema;\n }\n\n private generateUpdateMeSchema(\n model: PrismaModel,\n options?: Record<string, any>\n ): JsonSchema {\n // Similar to update but might exclude certain fields like role, etc.\n const updateSchema = this.generateUpdateSchema(model, options || {});\n\n // Remove sensitive fields that users shouldn't update themselves\n const restrictedFields = [\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"password\",\n \"lastLoginAt\",\n ];\n restrictedFields.forEach((field) => {\n delete updateSchema?.properties?.[field];\n });\n\n return updateSchema;\n }\n\n private generateUpdatePasswordSchema(\n _: PrismaModel,\n _1?: Record<string, any>\n ): JsonSchema {\n return {\n type: \"object\",\n properties: {\n currentPassword: { type: \"string\" },\n newPassword: { type: \"string\", minLength: 8 },\n },\n required: [\"currentPassword\", \"newPassword\"],\n };\n }\n\n /**\n * Utility methods\n */\n private resolvePrismaQueryOptions(\n prismaQueryOptions?: PrismaQueryOptions<any> | AuthPrismaQueryOptions<any>,\n action?: ValidationFileMappingKey\n ): Record<string, any> {\n if (!prismaQueryOptions || !action) {\n return {};\n }\n\n const options = prismaQueryOptions as any;\n const actionOptions = options[action] || {};\n\n // Start with deprecated queryOptions (for backward compatibility)\n let mergedOptions = options.queryOptions || {};\n\n // Apply global options (replaces queryOptions)\n if (options.global)\n mergedOptions = deepmerge(mergedOptions, options.global);\n\n // Apply general operation options based on action type\n const generalOptions = this.getGeneralOptionsForAction(options, action);\n if (generalOptions)\n mergedOptions = deepmerge(mergedOptions, generalOptions);\n\n // Finally apply specific action options (highest priority)\n if (actionOptions) mergedOptions = deepmerge(mergedOptions, actionOptions);\n\n return mergedOptions;\n }\n\n /**\n * Helps in remmaping those prisma query options that combines many operations for example find, save...\n */\n private getGeneralOptionsForAction(\n options: any,\n action: ValidationFileMappingKey\n ): Record<string, any> | null {\n const actionMap: { [key: string]: string[] } = {\n find: [\"findOne\", \"findMany\"],\n create: [\"createOne\", \"createMany\"],\n update: [\"updateOne\", \"updateMany\"],\n delete: [\"deleteOne\", \"deleteMany\"],\n save: [\"createOne\", \"createMany\", \"updateOne\", \"updateMany\"],\n saveOne: [\"createOne\", \"updateOne\"],\n saveMany: [\"createMany\", \"updateMany\"],\n };\n\n for (const [optionKey, actions] of Object.entries(actionMap)) {\n if (actions.includes(action) && options[optionKey]) {\n return options[optionKey];\n }\n }\n\n return null;\n }\n\n private isEndpointDisabled(\n endpoint: string,\n routerConfig?: RouterConfig<any>\n ): boolean {\n if (!routerConfig?.disable) return false;\n\n if (typeof routerConfig.disable === \"boolean\") {\n return routerConfig.disable;\n }\n\n return (\n routerConfig.disable[endpoint as keyof typeof routerConfig.disable] ||\n false\n );\n }\n\n private isModelRelation(typeName: string): boolean {\n return this.schema.models.some((m) => m.name === typeName);\n }\n\n private convertFieldToJsonSchema(field: PrismaField): JsonSchemaProperty {\n // Reuse the existing method from the original generator\n const baseType = this.mapPrismaTypeToJsonSchema(field.type);\n const property: JsonSchemaProperty = { type: baseType };\n\n if (field.isArray) {\n property.type = \"array\";\n property.items = { type: this.mapPrismaTypeToJsonSchema(field.type) };\n }\n\n if (field.defaultValue !== undefined) {\n property.default = field.defaultValue;\n }\n\n if (field.type === \"DateTime\") {\n property.format = \"date-time\";\n }\n\n if (this.isEnum(field.type)) {\n const enumDef = this.schema.enums.find((e) => e.name === field.type);\n if (enumDef) {\n property.enum = enumDef.values;\n }\n }\n\n return property;\n }\n\n private mapPrismaTypeToJsonSchema(prismaType: string): string {\n const typeMap: { [key: string]: string } = {\n String: \"string\",\n Int: \"number\",\n Float: \"number\",\n Boolean: \"boolean\",\n DateTime: \"string\",\n Json: \"object\",\n Bytes: \"string\",\n };\n\n if (typeMap[prismaType]) return typeMap[prismaType];\n\n if (this.isEnum(prismaType)) return \"string\";\n\n if (this.isModelRelation(prismaType)) return \"object\";\n\n return \"string\";\n }\n\n private isEnum(typeName: string): boolean {\n return this.schema.enums.some((e) => e.name === typeName);\n }\n}\n\nconst prismaJsonSchemaGenerator = new PrismaJsonSchemaGenerator();\n\nexport default prismaJsonSchemaGenerator;\n"]}
|
package/dist/cjs/utils/sheu.js
CHANGED
|
@@ -90,6 +90,11 @@ class Sheu {
|
|
|
90
90
|
console.info(result);
|
|
91
91
|
return result;
|
|
92
92
|
}
|
|
93
|
+
print(message, options) {
|
|
94
|
+
const result = this.formatText(message, { ...options });
|
|
95
|
+
console.info(result);
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
93
98
|
error(message, options) {
|
|
94
99
|
const label = `[\x1b[31mError\x1b[0m]`;
|
|
95
100
|
const result = this.formatText(message, { ...options, label });
|
|
@@ -114,6 +119,12 @@ class Sheu {
|
|
|
114
119
|
console.warn(result);
|
|
115
120
|
return result;
|
|
116
121
|
}
|
|
122
|
+
debug(message, options) {
|
|
123
|
+
const label = `[\x1b[35mDebug\x1b[0m]`;
|
|
124
|
+
const result = this.formatText(message, { ...options, label });
|
|
125
|
+
console.debug(result);
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
117
128
|
}
|
|
118
129
|
const sheu = new Sheu();
|
|
119
130
|
exports.default = sheu;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheu.js","sourceRoot":"","sources":["../../../src/utils/sheu.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Sheu - Simplified terminal color utility for styling console output\n */\nclass Sheu {\n /**\n * Get current timestamp in HH:MM:SS format\n */\n private getTimestamp(): string {\n return new Date().toTimeString().split(\" \")[0];\n }\n\n /**\n * Apply timestamp and bold formatting if requested\n */\n private formatText(\n content: any = \"\",\n options: {\n timestamp?: boolean | string;\n bold?: boolean;\n label?: string;\n } = {}\n ): string {\n const label = options?.label\n ? content\n ? options?.label + \" \"\n : content === null\n ? options?.label + \" \"\n : options?.label\n : \"\";\n let result = `${label}${content}`;\n\n // Apply timestamp if requested\n if (options.timestamp) {\n const timestamp = this.getTimestamp();\n if (options.timestamp === true)\n result = `${label}\\x1b[90m${timestamp}\\x1b[0m ${content}`;\n else if (typeof options.timestamp === \"string\") {\n const colorCode = this.getColorCode(options.timestamp);\n result = `${label}${colorCode}${timestamp}\\x1b[0m ${content}`;\n }\n }\n\n if (options.bold) result = `\\x1b[1m${result}\\x1b[0m`;\n\n return result;\n }\n\n /**\n * Get ANSI color code for color name\n */\n private getColorCode(color: string): string {\n const colorMap: { [key: string]: string } = {\n red: \"\\x1b[31m\",\n blue: \"\\x1b[34m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n cyan: \"\\x1b[36m\",\n magenta: \"\\x1b[35m\",\n white: \"\\x1b[37m\",\n black: \"\\x1b[30m\",\n gray: \"\\x1b[90m\",\n orange: \"\\x1b[91m\",\n };\n return colorMap[color] || \"\\x1b[90m\"; // Default to gray if color not found\n }\n\n /**\n * Red color\n */\n red(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[31m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Blue color\n */\n blue(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[34m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Green color\n */\n green(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[32m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Yellow color\n */\n yellow(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[33m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Cyan color\n */\n cyan(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[36m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Magenta color\n */\n magenta(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[35m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * White color\n */\n white(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[37m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Black color\n */\n black(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[30m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Gray color\n */\n gray(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[90m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Orange color\n */\n orange(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[91m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Bold text formatting\n */\n bold(content: any, options?: { timestamp?: boolean | string }): string {\n return this.formatText(content, { ...options, bold: true }); // Don't double-bold\n }\n\n /**\n * Info label with cyan color [INFO]\n */\n info(\n message: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const label = `[\\x1b[36mInfo\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.info(result);\n return result;\n }\n\n /**\n * Error label with red color [ERROR]\n */\n error(\n message: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const label = `[\\x1b[31mError\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.error(result);\n return result;\n }\n\n /**\n * Ready label with green color [READY]\n */\n ready(\n message: string,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n // const label = `\\x1b[32m✓\\x1b[0m`;\n const label = `[\\x1b[32mReady\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.info(result);\n return result;\n }\n\n /**\n * Done label with green color [DONE]\n */\n done(\n message: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const label = `[\\x1b[32mDone\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.info(result);\n return result;\n }\n\n /**\n * Warning label with yellow color [WARN]\n */\n warn(\n message: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const label = `[\\x1b[33mWarn\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.warn(result);\n return result;\n }\n}\n\nconst sheu = new Sheu();\n\nexport default sheu;\n"]}
|
|
1
|
+
{"version":3,"file":"sheu.js","sourceRoot":"","sources":["../../../src/utils/sheu.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Sheu - Simplified terminal color utility for styling console output\n */\nclass Sheu {\n /**\n * Get current timestamp in HH:MM:SS format\n */\n private getTimestamp(): string {\n return new Date().toTimeString().split(\" \")[0];\n }\n\n /**\n * Apply timestamp and bold formatting if requested\n */\n private formatText(\n content: any = \"\",\n options: {\n timestamp?: boolean | string;\n bold?: boolean;\n label?: string;\n } = {}\n ): string {\n const label = options?.label\n ? content\n ? options?.label + \" \"\n : content === null\n ? options?.label + \" \"\n : options?.label\n : \"\";\n let result = `${label}${content}`;\n\n // Apply timestamp if requested\n if (options.timestamp) {\n const timestamp = this.getTimestamp();\n if (options.timestamp === true)\n result = `${label}\\x1b[90m${timestamp}\\x1b[0m ${content}`;\n else if (typeof options.timestamp === \"string\") {\n const colorCode = this.getColorCode(options.timestamp);\n result = `${label}${colorCode}${timestamp}\\x1b[0m ${content}`;\n }\n }\n\n if (options.bold) result = `\\x1b[1m${result}\\x1b[0m`;\n\n return result;\n }\n\n /**\n * Get ANSI color code for color name\n */\n private getColorCode(color: string): string {\n const colorMap: { [key: string]: string } = {\n red: \"\\x1b[31m\",\n blue: \"\\x1b[34m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n cyan: \"\\x1b[36m\",\n magenta: \"\\x1b[35m\",\n white: \"\\x1b[37m\",\n black: \"\\x1b[30m\",\n gray: \"\\x1b[90m\",\n orange: \"\\x1b[91m\",\n };\n return colorMap[color] || \"\\x1b[90m\"; // Default to gray if color not found\n }\n\n /**\n * Red color\n */\n red(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[31m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Blue color\n */\n blue(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[34m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Green color\n */\n green(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[32m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Yellow color\n */\n yellow(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[33m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Cyan color\n */\n cyan(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[36m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Magenta color\n */\n magenta(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[35m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * White color\n */\n white(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[37m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Black color\n */\n black(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[30m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Gray color\n */\n gray(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[90m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Orange color\n */\n orange(\n content: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const coloredText = `\\x1b[91m${content}\\x1b[0m`;\n return this.formatText(coloredText, options || {});\n }\n\n /**\n * Bold text formatting\n */\n bold(content: any, options?: { timestamp?: boolean | string }): string {\n return this.formatText(content, { ...options, bold: true });\n }\n\n /**\n * Info label with cyan color [INFO]\n */\n info(\n message: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const label = `[\\x1b[36mInfo\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.info(result);\n return result;\n }\n\n /**\n * Simple Log with no label\n */\n print(\n message: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const result = this.formatText(message, { ...options });\n console.info(result);\n return result;\n }\n\n /**\n * Error label with red color [ERROR]\n */\n error(\n message: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const label = `[\\x1b[31mError\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.error(result);\n return result;\n }\n\n /**\n * Ready label with green color [READY]\n */\n ready(\n message: string,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n // const label = `\\x1b[32m✓\\x1b[0m`;\n const label = `[\\x1b[32mReady\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.info(result);\n return result;\n }\n\n /**\n * Done label with green color [DONE]\n */\n done(\n message: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const label = `[\\x1b[32mDone\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.info(result);\n return result;\n }\n\n /**\n * Warning label with yellow color [WARN]\n */\n warn(\n message: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const label = `[\\x1b[33mWarn\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.warn(result);\n return result;\n }\n\n /**\n * Debug label with magenta color [DEBUG]\n */\n debug(\n message: any,\n options?: { timestamp?: boolean | string; bold?: boolean }\n ): string {\n const label = `[\\x1b[35mDebug\\x1b[0m]`;\n const result = this.formatText(message, { ...options, label });\n console.debug(result);\n return result;\n }\n}\n\nconst sheu = new Sheu();\n\nexport default sheu;\n"]}
|
package/dist/esm/app.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import express from "express";
|
|
1
|
+
import express, { Router } from "express";
|
|
2
2
|
import cors from "cors";
|
|
3
3
|
import cookieParser from "cookie-parser";
|
|
4
4
|
import { getAuthRouter } from "./modules/auth/auth.router.js";
|
|
@@ -14,6 +14,7 @@ import deepmerge from "./utils/helpers/deepmerge.helper.js";
|
|
|
14
14
|
import { getSwaggerRouter } from "./modules/swagger/swagger.router.js";
|
|
15
15
|
import { loadAllModuleComponents } from "./utils/dynamic-loader.js";
|
|
16
16
|
export const app = express();
|
|
17
|
+
const knowModulesRouter = Router();
|
|
17
18
|
export async function bootstrap(arkosConfig) {
|
|
18
19
|
await Promise.all([
|
|
19
20
|
loadPrismaModule(),
|
|
@@ -98,21 +99,22 @@ export async function bootstrap(arkosConfig) {
|
|
|
98
99
|
const fileUploadRouter = replacedRouters.fileUpload
|
|
99
100
|
? await replacedRouters.fileUpload(arkosConfig)
|
|
100
101
|
: await getFileUploadRouter(arkosConfig);
|
|
101
|
-
|
|
102
|
+
knowModulesRouter.use(fileUploadRouter);
|
|
102
103
|
}
|
|
103
104
|
if (!disabledRouters?.includes?.("auth-router") &&
|
|
104
105
|
arkosConfig.authentication) {
|
|
105
106
|
const authRouter = replacedRouters.authRouter
|
|
106
107
|
? await replacedRouters.authRouter(arkosConfig)
|
|
107
108
|
: await getAuthRouter(arkosConfig);
|
|
108
|
-
|
|
109
|
+
knowModulesRouter.use("/api", authRouter);
|
|
109
110
|
}
|
|
110
111
|
if (!disabledRouters?.includes?.("prisma-models-router")) {
|
|
111
112
|
const modelsRouter = replacedRouters.prismaModelsRouter
|
|
112
113
|
? await replacedRouters.prismaModelsRouter(arkosConfig)
|
|
113
114
|
: await getPrismaModelsRouter(arkosConfig);
|
|
114
|
-
|
|
115
|
+
knowModulesRouter.use("/api", modelsRouter);
|
|
115
116
|
}
|
|
117
|
+
app.use(knowModulesRouter);
|
|
116
118
|
app.use("/api", getAvailableResourcesAndRoutesRouter());
|
|
117
119
|
if (arkosConfig.swagger &&
|
|
118
120
|
(process.env.ARKOS_BUILD !== "true" ||
|
package/dist/esm/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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","sourcesContent":["import express from \"express\";\nimport cors from \"cors\";\nimport cookieParser from \"cookie-parser\";\nimport { getAuthRouter } from \"./modules/auth/auth.router\";\nimport {\n getPrismaModelsRouter,\n getAvailableResourcesAndRoutesRouter,\n} from \"./modules/base/base.router\";\nimport errorHandler from \"./modules/error-handler/error-handler.controller\";\nimport { rateLimit } from \"express-rate-limit\";\nimport compression from \"compression\";\nimport { handleRequestLogs } from \"./modules/base/base.middlewares\";\nimport { loadPrismaModule } from \"./utils/helpers/prisma.helpers\";\nimport { getFileUploadRouter } from \"./modules/file-upload/file-upload.router\";\nimport { ArkosConfig } from \"./types/arkos-config\";\nimport { queryParser } from \"./utils/helpers/query-parser.helpers\";\nimport deepmerge from \"./utils/helpers/deepmerge.helper\";\nimport { getSwaggerRouter } from \"./modules/swagger/swagger.router\";\nimport { loadAllModuleComponents } from \"./utils/dynamic-loader\";\n\nexport const app: express.Express = express();\n\nexport async function bootstrap(\n arkosConfig: ArkosConfig\n): Promise<express.Express> {\n await Promise.all([\n loadPrismaModule(),\n loadAllModuleComponents(arkosConfig),\n arkosConfig?.configureApp && (await arkosConfig?.configureApp(app)),\n ]);\n\n const middlewaresConfig = arkosConfig?.middlewares;\n const disabledMiddlewares = middlewaresConfig?.disable || [];\n const replacedMiddlewares = middlewaresConfig?.replace || {};\n\n // Compression middleware\n if (!disabledMiddlewares?.includes?.(\"compression\"))\n app.use(\n replacedMiddlewares.compression ||\n compression(arkosConfig?.compressionOptions)\n );\n\n // Global rate limit middleware\n if (!disabledMiddlewares?.includes?.(\"global-rate-limit\"))\n app.use(\n replacedMiddlewares.globalRateLimit ||\n rateLimit(\n deepmerge(\n {\n windowMs: 60 * 1000,\n limit: 500,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n handler: (_, res) => {\n res.status(429).json({\n message: \"Too many requests, please try again later\",\n });\n },\n },\n arkosConfig?.globalRequestRateLimitOptions || {}\n )\n )\n );\n\n // CORS middleware\n if (!disabledMiddlewares?.includes?.(\"cors\"))\n app.use(\n replacedMiddlewares.cors ||\n cors(\n arkosConfig?.cors?.customHandler\n ? arkosConfig.cors.customHandler\n : deepmerge(\n {\n origin: (\n origin: string,\n cb: (err: Error | null, allow?: boolean) => void\n ) => {\n const allowed = arkosConfig?.cors?.allowedOrigins;\n\n if (allowed === \"*\") {\n cb(null, true);\n } else if (Array.isArray(allowed)) {\n cb(null, !origin || allowed?.includes?.(origin));\n } else if (typeof allowed === \"string\") {\n cb(null, !origin || allowed === origin);\n } else {\n cb(null, false);\n }\n },\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\n \"Content-Type\",\n \"Authorization\",\n \"Connection\",\n ],\n credentials: true,\n },\n arkosConfig?.cors?.options || {}\n )\n )\n );\n\n // JSON body parser middleware\n if (!disabledMiddlewares?.includes?.(\"express-json\"))\n app.use(\n replacedMiddlewares.expressJson ||\n express.json(arkosConfig?.jsonBodyParserOptions)\n );\n\n // Cookie parser middleware\n if (!disabledMiddlewares?.includes?.(\"cookie-parser\"))\n app.use(\n replacedMiddlewares.cookieParser ||\n cookieParser(...[...(arkosConfig?.cookieParserParameters || [])])\n );\n\n // Query parser middleware\n if (!disabledMiddlewares?.includes?.(\"query-parser\"))\n app.use(\n replacedMiddlewares.queryParser ||\n queryParser(\n deepmerge(\n {\n parseNull: true,\n parseUndefined: true,\n parseBoolean: true,\n },\n arkosConfig?.queryParserOptions || {}\n )\n )\n );\n\n // Request logger middleware\n if (!disabledMiddlewares?.includes?.(\"request-logger\"))\n app.use(replacedMiddlewares.requestLogger || handleRequestLogs);\n\n // Additional custom middlewares\n if (arkosConfig?.middlewares?.additional)\n arkosConfig.middlewares.additional.forEach((middleware) => {\n app.use(middleware);\n });\n\n // Configure routers\n const routersConfig = arkosConfig?.routers;\n const disabledRouters = routersConfig?.disable || [];\n const replacedRouters = routersConfig?.replace || {};\n\n // Welcome endpoint\n if (!disabledRouters?.includes?.(\"welcome-endpoint\"))\n app.get(\n \"/api\",\n replacedRouters.welcomeEndpoint ||\n ((_, res) => {\n res.status(200).json({ message: arkosConfig.welcomeMessage });\n })\n );\n\n // File upload router\n if (!disabledRouters?.includes?.(\"file-upload\")) {\n const fileUploadRouter = replacedRouters.fileUpload\n ? await replacedRouters.fileUpload(arkosConfig)\n : await getFileUploadRouter(arkosConfig);\n app.use(fileUploadRouter);\n }\n\n // Auth router\n if (\n !disabledRouters?.includes?.(\"auth-router\") &&\n arkosConfig.authentication\n ) {\n const authRouter = replacedRouters.authRouter\n ? await replacedRouters.authRouter(arkosConfig)\n : await getAuthRouter(arkosConfig);\n app.use(\"/api\", authRouter);\n }\n\n // Prisma models router\n if (!disabledRouters?.includes?.(\"prisma-models-router\")) {\n const modelsRouter = replacedRouters.prismaModelsRouter\n ? await replacedRouters.prismaModelsRouter(arkosConfig)\n : await getPrismaModelsRouter(arkosConfig);\n app.use(\"/api\", modelsRouter);\n }\n\n app.use(\"/api\", getAvailableResourcesAndRoutesRouter());\n\n if (\n arkosConfig.swagger &&\n (process.env.ARKOS_BUILD !== \"true\" ||\n arkosConfig.swagger.enableAfterBuild === true)\n )\n app.use(\"/api\", await getSwaggerRouter(arkosConfig));\n\n // Additional custom routers\n if (routersConfig?.additional)\n routersConfig.additional.forEach((router) => {\n app.use(router);\n });\n\n // Global error handler middleware (must be last)\n if (!disabledMiddlewares?.includes?.(\"global-error-handler\"))\n app.use(replacedMiddlewares.globalErrorHandler || errorHandler);\n\n app.use(\"*\", (_, res) => {\n res.status(404).json({ message: \"Route not found!\" });\n });\n\n return app;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app.ts"],"names":[],"mappings":"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","sourcesContent":["import express, { Router } from \"express\";\nimport cors from \"cors\";\nimport cookieParser from \"cookie-parser\";\nimport { getAuthRouter } from \"./modules/auth/auth.router\";\nimport {\n getPrismaModelsRouter,\n getAvailableResourcesAndRoutesRouter,\n} from \"./modules/base/base.router\";\nimport errorHandler from \"./modules/error-handler/error-handler.controller\";\nimport { rateLimit } from \"express-rate-limit\";\nimport compression from \"compression\";\nimport { handleRequestLogs } from \"./modules/base/base.middlewares\";\nimport { loadPrismaModule } from \"./utils/helpers/prisma.helpers\";\nimport { getFileUploadRouter } from \"./modules/file-upload/file-upload.router\";\nimport { ArkosConfig } from \"./types/arkos-config\";\nimport { queryParser } from \"./utils/helpers/query-parser.helpers\";\nimport deepmerge from \"./utils/helpers/deepmerge.helper\";\nimport { getSwaggerRouter } from \"./modules/swagger/swagger.router\";\nimport { loadAllModuleComponents } from \"./utils/dynamic-loader\";\n\nexport const app: express.Express = express();\nconst knowModulesRouter = Router();\n\nexport async function bootstrap(\n arkosConfig: ArkosConfig\n): Promise<express.Express> {\n await Promise.all([\n loadPrismaModule(),\n loadAllModuleComponents(arkosConfig),\n arkosConfig?.configureApp && (await arkosConfig?.configureApp(app)),\n ]);\n\n const middlewaresConfig = arkosConfig?.middlewares;\n const disabledMiddlewares = middlewaresConfig?.disable || [];\n const replacedMiddlewares = middlewaresConfig?.replace || {};\n\n if (!disabledMiddlewares?.includes?.(\"compression\"))\n app.use(\n replacedMiddlewares.compression ||\n compression(arkosConfig?.compressionOptions)\n );\n\n if (!disabledMiddlewares?.includes?.(\"global-rate-limit\"))\n app.use(\n replacedMiddlewares.globalRateLimit ||\n rateLimit(\n deepmerge(\n {\n windowMs: 60 * 1000,\n limit: 500,\n standardHeaders: \"draft-7\",\n legacyHeaders: false,\n handler: (_, res) => {\n res.status(429).json({\n message: \"Too many requests, please try again later\",\n });\n },\n },\n arkosConfig?.globalRequestRateLimitOptions || {}\n )\n )\n );\n\n if (!disabledMiddlewares?.includes?.(\"cors\"))\n app.use(\n replacedMiddlewares.cors ||\n cors(\n arkosConfig?.cors?.customHandler\n ? arkosConfig.cors.customHandler\n : deepmerge(\n {\n origin: (\n origin: string,\n cb: (err: Error | null, allow?: boolean) => void\n ) => {\n const allowed = arkosConfig?.cors?.allowedOrigins;\n\n if (allowed === \"*\") {\n cb(null, true);\n } else if (Array.isArray(allowed)) {\n cb(null, !origin || allowed?.includes?.(origin));\n } else if (typeof allowed === \"string\") {\n cb(null, !origin || allowed === origin);\n } else {\n cb(null, false);\n }\n },\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n allowedHeaders: [\n \"Content-Type\",\n \"Authorization\",\n \"Connection\",\n ],\n credentials: true,\n },\n arkosConfig?.cors?.options || {}\n )\n )\n );\n\n if (!disabledMiddlewares?.includes?.(\"express-json\"))\n app.use(\n replacedMiddlewares.expressJson ||\n express.json(arkosConfig?.jsonBodyParserOptions)\n );\n\n if (!disabledMiddlewares?.includes?.(\"cookie-parser\"))\n app.use(\n replacedMiddlewares.cookieParser ||\n cookieParser(...[...(arkosConfig?.cookieParserParameters || [])])\n );\n\n if (!disabledMiddlewares?.includes?.(\"query-parser\"))\n app.use(\n replacedMiddlewares.queryParser ||\n queryParser(\n deepmerge(\n {\n parseNull: true,\n parseUndefined: true,\n parseBoolean: true,\n },\n arkosConfig?.queryParserOptions || {}\n )\n )\n );\n\n if (!disabledMiddlewares?.includes?.(\"request-logger\"))\n app.use(replacedMiddlewares.requestLogger || handleRequestLogs);\n\n if (arkosConfig?.middlewares?.additional)\n arkosConfig.middlewares.additional.forEach((middleware) => {\n app.use(middleware);\n });\n\n const routersConfig = arkosConfig?.routers;\n const disabledRouters = routersConfig?.disable || [];\n const replacedRouters = routersConfig?.replace || {};\n\n if (!disabledRouters?.includes?.(\"welcome-endpoint\"))\n app.get(\n \"/api\",\n replacedRouters.welcomeEndpoint ||\n ((_, res) => {\n res.status(200).json({ message: arkosConfig.welcomeMessage });\n })\n );\n\n if (!disabledRouters?.includes?.(\"file-upload\")) {\n const fileUploadRouter = replacedRouters.fileUpload\n ? await replacedRouters.fileUpload(arkosConfig)\n : await getFileUploadRouter(arkosConfig);\n knowModulesRouter.use(fileUploadRouter);\n }\n\n if (\n !disabledRouters?.includes?.(\"auth-router\") &&\n arkosConfig.authentication\n ) {\n const authRouter = replacedRouters.authRouter\n ? await replacedRouters.authRouter(arkosConfig)\n : await getAuthRouter(arkosConfig);\n knowModulesRouter.use(\"/api\", authRouter);\n }\n\n if (!disabledRouters?.includes?.(\"prisma-models-router\")) {\n const modelsRouter = replacedRouters.prismaModelsRouter\n ? await replacedRouters.prismaModelsRouter(arkosConfig)\n : await getPrismaModelsRouter(arkosConfig);\n knowModulesRouter.use(\"/api\", modelsRouter);\n }\n\n app.use(knowModulesRouter);\n app.use(\"/api\", getAvailableResourcesAndRoutesRouter());\n\n if (\n arkosConfig.swagger &&\n (process.env.ARKOS_BUILD !== \"true\" ||\n arkosConfig.swagger.enableAfterBuild === true)\n )\n app.use(\"/api\", await getSwaggerRouter(arkosConfig));\n\n if (routersConfig?.additional)\n routersConfig.additional.forEach((router) => {\n app.use(router);\n });\n\n if (!disabledMiddlewares?.includes?.(\"global-error-handler\"))\n app.use(replacedMiddlewares.globalErrorHandler || errorHandler);\n\n app.use(\"*\", (_, res) => {\n res.status(404).json({ message: \"Route not found!\" });\n });\n\n return app;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from "../../utils/helpers/change-case.helpers.js";
|
|
2
|
-
import APIFeatures
|
|
3
|
-
export { APIFeatures
|
|
2
|
+
import APIFeatures from "../../utils/features/api.features.js";
|
|
3
|
+
export { APIFeatures };
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AAExD,OAAO,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/exports/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,yCAAyC,CAAC;AAExD,OAAO,WAAW,MAAM,mCAAmC,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,CAAC","sourcesContent":["export * from \"../../utils/helpers/change-case.helpers\";\nexport { MsDuration } from \"../../modules/auth/utils/helpers/auth.controller.helpers\";\nimport APIFeatures from \"../../utils/features/api.features\";\n\nexport { APIFeatures };\n"]}
|
|
@@ -20,7 +20,9 @@ export const authControllerFactory = async (interceptors = {}) => {
|
|
|
20
20
|
});
|
|
21
21
|
if (interceptors?.afterGetMe) {
|
|
22
22
|
req.responseData = { data: user };
|
|
23
|
+
res.locals.data = { data: user };
|
|
23
24
|
req.responseStatus = 200;
|
|
25
|
+
res.locals.status = 200;
|
|
24
26
|
return next();
|
|
25
27
|
}
|
|
26
28
|
res.status(200).json({ data: user });
|
|
@@ -35,7 +37,9 @@ export const authControllerFactory = async (interceptors = {}) => {
|
|
|
35
37
|
});
|
|
36
38
|
if (interceptors?.afterUpdateMe) {
|
|
37
39
|
req.responseData = { data: user };
|
|
40
|
+
res.locals.data = { data: user };
|
|
38
41
|
req.responseStatus = 200;
|
|
42
|
+
res.locals.status = 200;
|
|
39
43
|
return next();
|
|
40
44
|
}
|
|
41
45
|
res.status(200).json({ data: user });
|
|
@@ -47,7 +51,9 @@ export const authControllerFactory = async (interceptors = {}) => {
|
|
|
47
51
|
});
|
|
48
52
|
if (interceptors?.afterLogout) {
|
|
49
53
|
req.responseData = null;
|
|
54
|
+
res.locals.data = null;
|
|
50
55
|
req.responseStatus = 204;
|
|
56
|
+
res.locals.status = 204;
|
|
51
57
|
return next();
|
|
52
58
|
}
|
|
53
59
|
res.status(204).json();
|
|
@@ -97,6 +103,7 @@ export const authControllerFactory = async (interceptors = {}) => {
|
|
|
97
103
|
authConfigs?.login?.sendAccessTokenThrough === "both" ||
|
|
98
104
|
!authConfigs?.login?.sendAccessTokenThrough) {
|
|
99
105
|
req.responseData = { accessToken: token };
|
|
106
|
+
res.locals.data = { accessToken: token };
|
|
100
107
|
}
|
|
101
108
|
if (authConfigs?.login?.sendAccessTokenThrough === "cookie-only" ||
|
|
102
109
|
authConfigs?.login?.sendAccessTokenThrough === "both" ||
|
|
@@ -105,7 +112,9 @@ export const authControllerFactory = async (interceptors = {}) => {
|
|
|
105
112
|
req.accessToken = token;
|
|
106
113
|
if (interceptors?.afterLogin) {
|
|
107
114
|
req.additionalData = { user };
|
|
115
|
+
res.locals.additional = { user };
|
|
108
116
|
req.responseStatus = 200;
|
|
117
|
+
res.locals.status = 200;
|
|
109
118
|
return next();
|
|
110
119
|
}
|
|
111
120
|
if (authConfigs?.login?.sendAccessTokenThrough === "response-only" ||
|
|
@@ -122,7 +131,9 @@ export const authControllerFactory = async (interceptors = {}) => {
|
|
|
122
131
|
const user = (await userService.createOne(req.body, req.prismaQueryOptions || {}));
|
|
123
132
|
if (interceptors?.afterSignup) {
|
|
124
133
|
req.responseData = { data: user };
|
|
134
|
+
res.locals.data = { data: user };
|
|
125
135
|
req.responseStatus = 201;
|
|
136
|
+
res.locals.status = 201;
|
|
126
137
|
return next();
|
|
127
138
|
}
|
|
128
139
|
Object.keys(defaultExcludedUserFields).forEach((key) => {
|
|
@@ -137,7 +148,9 @@ export const authControllerFactory = async (interceptors = {}) => {
|
|
|
137
148
|
}, req.prismaQueryOptions || {}));
|
|
138
149
|
if (interceptors?.afterDeleteMe) {
|
|
139
150
|
req.responseData = { data: updatedUser };
|
|
151
|
+
res.locals.data = { data: updatedUser };
|
|
140
152
|
req.responseStatus = 200;
|
|
153
|
+
res.locals.status = 200;
|
|
141
154
|
return next();
|
|
142
155
|
}
|
|
143
156
|
Object.keys(defaultExcludedUserFields).forEach((key) => {
|
|
@@ -176,7 +189,12 @@ export const authControllerFactory = async (interceptors = {}) => {
|
|
|
176
189
|
status: "success",
|
|
177
190
|
message: "Password updated successfully!",
|
|
178
191
|
};
|
|
192
|
+
res.locals.data = {
|
|
193
|
+
status: "success",
|
|
194
|
+
message: "Password updated successfully!",
|
|
195
|
+
};
|
|
179
196
|
req.responseStatus = 200;
|
|
197
|
+
res.locals.status = 200;
|
|
180
198
|
return next();
|
|
181
199
|
}
|
|
182
200
|
res.status(200).json({
|