arkos 1.3.8-canary.8 → 1.3.9-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +2 -5
- package/dist/cjs/modules/auth/auth.controller.js +7 -7
- package/dist/cjs/modules/auth/auth.controller.js.map +1 -1
- package/dist/cjs/modules/auth/auth.service.js +4 -4
- package/dist/cjs/modules/auth/auth.service.js.map +1 -1
- package/dist/cjs/modules/error-handler/error-handler.controller.js +3 -4
- package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
- package/dist/cjs/modules/file-upload/file-upload.controller.js +4 -4
- package/dist/cjs/modules/file-upload/file-upload.controller.js.map +1 -1
- package/dist/cjs/modules/file-upload/file-upload.service.js +6 -9
- package/dist/cjs/modules/file-upload/file-upload.service.js.map +1 -1
- package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +6 -2
- package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -1
- package/dist/cjs/modules/swagger/swagger.router.js.map +1 -1
- package/dist/cjs/modules/swagger/utils/helpers/missing-json-schemas-generator.js +2 -4
- 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/utils/cli/build.js +3 -2
- package/dist/cjs/utils/cli/build.js.map +1 -1
- package/dist/cjs/utils/cli/start.js +1 -0
- package/dist/cjs/utils/cli/start.js.map +1 -1
- package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -1
- package/dist/cjs/utils/dotenv.helpers.js +2 -1
- package/dist/cjs/utils/dotenv.helpers.js.map +1 -1
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +1 -12
- package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +1 -1
- package/dist/cjs/utils/prisma/prisma-schema-parser.js +3 -4
- package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -1
- package/dist/esm/modules/auth/auth.controller.js +7 -7
- package/dist/esm/modules/auth/auth.controller.js.map +1 -1
- package/dist/esm/modules/auth/auth.service.js +4 -4
- package/dist/esm/modules/auth/auth.service.js.map +1 -1
- package/dist/esm/modules/error-handler/error-handler.controller.js +3 -4
- package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -1
- package/dist/esm/modules/file-upload/file-upload.controller.js +4 -4
- package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
- package/dist/esm/modules/file-upload/file-upload.service.js +6 -9
- package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -1
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js +6 -2
- package/dist/esm/modules/file-upload/utils/helpers/file-upload.helpers.js.map +1 -1
- package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
- package/dist/esm/modules/swagger/utils/helpers/missing-json-schemas-generator.js +2 -4
- 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/utils/cli/build.js +3 -2
- package/dist/esm/utils/cli/build.js.map +1 -1
- package/dist/esm/utils/cli/start.js +1 -0
- package/dist/esm/utils/cli/start.js.map +1 -1
- package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
- package/dist/esm/utils/dotenv.helpers.js +2 -1
- package/dist/esm/utils/dotenv.helpers.js.map +1 -1
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js +1 -12
- package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -1
- package/dist/esm/utils/prisma/prisma-schema-parser.js +3 -4
- package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -1
- package/dist/types/modules/file-upload/file-upload.service.d.ts +2 -2
- package/dist/types/modules/file-upload/utils/helpers/file-upload.helpers.d.ts +1 -1
- 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\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 if (arkosConfig?.swagger?.strict && arkosConfig.swagger.mode !== \"prisma\")\n return {};\n\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\n const schemas: { [key: string]: JsonSchema } = {};\n\n if (isAuthModule) {\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 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 const ensureBaseSchemaReference = async (\n operation: string,\n modelName: string\n ) => {\n const suffix =\n arkosConfig.validation?.resolver === \"zod\" ? \"Schema\" : \"Dto\";\n\n const singleOpName = operation === \"Create\" ? \"createOne\" : \"updateOne\";\n const hasLocalValidator = await localValidatorFileExists(\n singleOpName,\n modelName,\n arkosConfig\n );\n\n if (hasLocalValidator) return `${operation}${modelName}${suffix}`;\n else {\n const modelSchemaKey = `${operation}${modelName}ModelSchema`;\n\n if (!schemas[modelSchemaKey]) {\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 const isForeignKey = model.fields.some(\n (_field) => _field.foreignKeyField === field.name\n );\n if (field.isId || restrictedFields.includes(field.name) || isForeignKey)\n continue;\n\n if (this.isModelRelation(field.type)) {\n if (!field.isArray) {\n const referencedModel = prismaSchemaParser.models.find(\n (_model) => _model.name === field.type\n )!;\n\n properties[field.name] = {\n type: \"object\",\n properties: {\n [field.foreignReferenceField || \"id\"]: {\n type: this.mapPrismaTypeToJsonSchema(\n referencedModel?.fields.find(\n (_field) => _field.name === field.foreignReferenceField\n )?.type || \"String\"\n ),\n },\n },\n };\n\n if (!field.isOptional && field.defaultValue === undefined)\n required.push(field.name);\n }\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 const isForeignKey = model.fields.some(\n (_field) => _field.foreignKeyField === field.name\n );\n if (field.isId || autoFillFields.includes(field.name) || isForeignKey)\n continue;\n\n if (this.isModelRelation(field.type)) {\n if (!field.isArray) {\n const referencedModel = prismaSchemaParser.models.find(\n (_model) => _model.name === field.type\n )!;\n\n properties[field.name] = {\n type: \"object\",\n properties: {\n [field.foreignReferenceField || \"id\"]: {\n type: this.mapPrismaTypeToJsonSchema(\n referencedModel?.fields.find(\n (_field) => _field.name === field.foreignReferenceField\n )?.type || \"String\"\n ),\n },\n },\n };\n }\n\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"]}
|
|
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\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 if (arkosConfig?.swagger?.strict && arkosConfig.swagger.mode !== \"prisma\")\n return {};\n\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\n const schemas: { [key: string]: JsonSchema } = {};\n\n if (isAuthModule) {\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 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 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 const ensureBaseSchemaReference = async (\n operation: string,\n modelName: string\n ) => {\n const suffix =\n arkosConfig.validation?.resolver === \"zod\" ? \"Schema\" : \"Dto\";\n\n const singleOpName = operation === \"Create\" ? \"createOne\" : \"updateOne\";\n const hasLocalValidator = await localValidatorFileExists(\n singleOpName,\n modelName,\n arkosConfig\n );\n\n if (hasLocalValidator) return `${operation}${modelName}${suffix}`;\n else {\n const modelSchemaKey = `${operation}${modelName}ModelSchema`;\n\n if (!schemas[modelSchemaKey]) {\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 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 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 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 // const baseSchemaKey = await ensureBaseSchemaReference(\n // \"Update\",\n // modelName\n // );\n schemas[`UpdateMany${modelName}ModelSchema`] = this.generateUpdateSchema(\n model,\n this.resolvePrismaQueryOptions(queryOptions, \"updateOne\")\n );\n }\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 const isForeignKey = model.fields.some(\n (_field) => _field.foreignKeyField === field.name\n );\n if (field.isId || restrictedFields.includes(field.name) || isForeignKey)\n continue;\n\n if (this.isModelRelation(field.type)) {\n if (!field.isArray) {\n const referencedModel = prismaSchemaParser.models.find(\n (_model) => _model.name === field.type\n )!;\n\n properties[field.name] = {\n type: \"object\",\n properties: {\n [field.foreignReferenceField || \"id\"]: {\n type: this.mapPrismaTypeToJsonSchema(\n referencedModel?.fields.find(\n (_field) => _field.name === field.foreignReferenceField\n )?.type || \"String\"\n ),\n },\n },\n };\n\n if (!field.isOptional && field.defaultValue === undefined)\n required.push(field.name);\n }\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 const isForeignKey = model.fields.some(\n (_field) => _field.foreignKeyField === field.name\n );\n if (field.isId || autoFillFields.includes(field.name) || isForeignKey)\n continue;\n\n if (this.isModelRelation(field.type)) {\n if (!field.isArray) {\n const referencedModel = prismaSchemaParser.models.find(\n (_model) => _model.name === field.type\n )!;\n\n properties[field.name] = {\n type: \"object\",\n properties: {\n [field.foreignReferenceField || \"id\"]: {\n type: this.mapPrismaTypeToJsonSchema(\n referencedModel?.fields.find(\n (_field) => _field.name === field.foreignReferenceField\n )?.type || \"String\"\n ),\n },\n },\n };\n }\n\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"]}
|
|
@@ -78,13 +78,12 @@ export class PrismaSchemaParser {
|
|
|
78
78
|
const fieldLines = block
|
|
79
79
|
.split("\n")
|
|
80
80
|
.map((line) => line.trim())
|
|
81
|
-
.filter((line) => line &&
|
|
82
|
-
!line.startsWith("model") &&
|
|
83
|
-
!line.startsWith("{") &&
|
|
84
|
-
!line.startsWith("}"));
|
|
81
|
+
.filter((line) => line && !line.startsWith("{") && !line.startsWith("}"));
|
|
85
82
|
for (const line of fieldLines) {
|
|
86
83
|
if (line.startsWith("//") || line.startsWith("@@"))
|
|
87
84
|
continue;
|
|
85
|
+
if (/^model\s+\w+\s*\{/.test(line))
|
|
86
|
+
continue;
|
|
88
87
|
const field = this.parseFieldLine(line);
|
|
89
88
|
if (field) {
|
|
90
89
|
fields.push(field);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prisma-schema-parser.js","sourceRoot":"","sources":["../../../../src/utils/prisma/prisma-schema-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"path\";\nimport { PrismaSchema, PrismaModel, PrismaEnum, PrismaField } from \"./types\";\nimport { camelCase, pascalCase } from \"../helpers/change-case.helpers\";\nimport fs from \"fs\";\n\n/**\n * A parser for Prisma schema files that extracts models, enums, and their properties.\n *\n * @example\n * ```typescript\n * const schemaContent = `\n * model User {\n * id Int @id @default(autoincrement())\n * email String @unique\n * }\n * `;\n * const parser = new PrismaSchemaParser();\n * const schema = parser.parse();\n * ```\n */\nexport class PrismaSchemaParser {\n /** Collection of parsed enum definitions */\n enums: PrismaEnum[] = [];\n /** Collection of parsed model definitions */\n models: PrismaModel[] = [];\n /** Current loaded prisma schemas content as a single file */\n prismaSchemasContent: string = \"\";\n parsed: boolean = false;\n\n constructor() {\n this.parse();\n }\n\n /**\n * Parses the Prisma schema and extracts all models and enums.\n *\n * @returns The parsed schema containing arrays of models and enums\n */\n parse(\n { override }: { override: boolean } = { override: false }\n ): PrismaSchema {\n if (!this.parsed || override) {\n this.enums = this.extractEnums();\n this.models = this.extractModels();\n this.parsed = true;\n }\n\n return {\n models: this.models,\n enums: this.enums,\n };\n }\n\n /**\n * Extracts all enum definitions from the schema.\n *\n * @private\n * @returns Array of parsed enum objects\n */\n private extractEnums(): PrismaEnum[] {\n const enums: PrismaEnum[] = [];\n const schema = this.getPrismaSchemasContent() || \"\";\n const enumBlocks = schema.match(/enum\\s+\\w+\\s*\\{[^}]*\\}/g) || [];\n\n for (const block of enumBlocks) {\n const enumObj = this.parseEnumBlock(block);\n if (enumObj) {\n enums.push(enumObj);\n }\n }\n\n return enums;\n }\n\n /**\n * Parses a single enum block and extracts its name and values.\n *\n * @private\n * @param block - The enum block string (e.g., \"enum Status { ACTIVE INACTIVE }\")\n * @returns The parsed enum object or null if parsing fails\n */\n private parseEnumBlock(block: string): PrismaEnum | null {\n const nameMatch = block.match(/enum\\s+(\\w+)/);\n if (!nameMatch) return null;\n\n const name = nameMatch[1];\n const values = block\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(\n (line) =>\n line &&\n !line.startsWith(\"enum\") &&\n !line.startsWith(\"{\") &&\n !line.startsWith(\"}\")\n )\n .map((line) => line.replace(/,$/, \"\"));\n\n return { name, values };\n }\n\n /**\n * Extracts all model definitions from the schema.\n *\n * @private\n * @returns Array of parsed model objects\n */\n private extractModels(): PrismaModel[] {\n const models: PrismaModel[] = [];\n const modelBlocks = this.extractModelBlocks();\n\n for (const block of modelBlocks) {\n const model = this.parseModelBlock(block);\n if (model) {\n models.push(model);\n }\n }\n\n return models;\n }\n\n /**\n * Extracts raw model block strings from the schema using regex.\n *\n * @private\n * @returns Array of model block strings\n */\n private extractModelBlocks(): string[] {\n const modelRegex = /model\\s+\\w+\\s*\\{((?:[^{}]*(?:\\{[^{}]*\\}[^{}]*)*)*)\\}/g;\n const schema = this.getPrismaSchemasContent() || \"\";\n return schema.match(modelRegex) || [];\n }\n\n /**\n * Parses a single model block and extracts its name, fields, and metadata.\n *\n * @private\n * @param block - The model block string\n * @returns The parsed model object or null if parsing fails\n */\n private parseModelBlock(block: string): PrismaModel | null {\n const nameMatch = block.match(/model\\s+(\\w+)/);\n if (!nameMatch) return null;\n\n const name = nameMatch[1];\n const fields = this.parseFields(block);\n\n // Check for @@map directive\n const mapMatch = block.match(/@@map\\s*\\(\\s*\"([^\"]+)\"\\s*\\)/);\n const mapName = mapMatch ? mapMatch[1] : undefined;\n\n return { name, fields, mapName };\n }\n\n /**\n * Parses all field definitions within a model block.\n *\n * @private\n * @param block - The model block string containing field definitions\n * @returns Array of parsed field objects\n */\n private parseFields(block: string): PrismaField[] {\n const fields: PrismaField[] = [];\n const fieldLines = block\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(\n (line) =>\n line &&\n !line.startsWith(\"model\") &&\n !line.startsWith(\"{\") &&\n !line.startsWith(\"}\")\n );\n\n for (const line of fieldLines) {\n if (line.startsWith(\"//\") || line.startsWith(\"@@\")) continue;\n\n const field = this.parseFieldLine(line);\n if (field) {\n fields.push(field);\n }\n }\n\n return fields;\n }\n\n /**\n * Parses a single field line and extracts all field properties.\n *\n * @private\n * @param line - A single field definition line (e.g., \"id Int @id @default(autoincrement())\")\n * @returns The parsed field object or null if parsing fails\n *\n * @example\n * ```typescript\n * // Input: \"email String? @unique @default(\"user@example.com\")\"\n * // Output: {\n * // name: \"email\",\n * // type: \"String\",\n * // isOptional: true,\n * // isArray: false,\n * // defaultValue: \"user@example.com\",\n * // isId: false,\n * // isUnique: true,\n * // attributes: [\"@unique\", \"@default(\\\"user@example.com\\\")\"]\n * // }\n * ```\n */\n private parseFieldLine(line: string): PrismaField | null {\n const fieldMatch = line.match(/^(\\w+)\\s+(\\w+(?:\\[\\])?)\\??\\s*(.*)/);\n if (!fieldMatch) return null;\n\n const [, name, typeWithArray, attributesStr] = fieldMatch;\n const isArray = typeWithArray.endsWith(\"[]\");\n const type = isArray ? typeWithArray.slice(0, -2) : typeWithArray;\n const isOptional = line.includes(\"?\");\n\n const attributes = attributesStr\n .split(/\\s+/)\n .filter((attr) => attr.startsWith(\"@\"));\n\n // Extract default value\n let defaultValue: any = undefined;\n const defaultMatch = attributesStr.match(/@default\\(([^)]+)\\)/);\n if (defaultMatch) {\n defaultValue = this.parseDefaultValue(defaultMatch[1]);\n }\n\n let foreignKeyField = \"\";\n const relationMatch = attributesStr.match(\n /@relation\\([^)]*fields:\\s*\\[([^\\]]+)\\]/\n );\n if (relationMatch)\n foreignKeyField = relationMatch[1].trim().replace(/['\"]/g, \"\");\n\n let foreignReferenceField = \"\";\n const foreignReferenceFieldMatch = attributesStr.match(\n /@relation\\([^)]*references:\\s*\\[([^\\]]+)\\]/\n );\n if (foreignReferenceFieldMatch)\n foreignReferenceField = foreignReferenceFieldMatch[1]\n .trim()\n .replace(/['\"]/g, \"\");\n\n const isId = attributes.some((attr) => attr.startsWith(\"@id\"));\n const isUnique = attributes.some((attr) => attr.startsWith(\"@unique\"));\n const models = this.models;\n\n return {\n name,\n type,\n isOptional,\n isRelation:\n models.map((model) => model.name).includes(type) ||\n this.getPrismaSchemasContent().includes(`model ${type} {`),\n isArray,\n foreignKeyField,\n foreignReferenceField,\n defaultValue,\n isId,\n isUnique,\n attributes,\n };\n }\n\n /**\n * Parses a default value string and converts it to the appropriate JavaScript type.\n *\n * @private\n * @param defaultStr - The default value string from @default() attribute\n * @returns The parsed default value in appropriate JavaScript type, or undefined for functions\n *\n * @example\n * ```typescript\n * parseDefaultValue('\"hello\"') // returns \"hello\"\n * parseDefaultValue('true') // returns true\n * parseDefaultValue('42') // returns 42\n * parseDefaultValue('3.14') // returns 3.14\n * parseDefaultValue('ACTIVE') // returns \"ACTIVE\" (enum value)\n * parseDefaultValue('now()') // returns undefined (function)\n * ```\n */\n private parseDefaultValue(defaultStr: string): any {\n defaultStr = defaultStr.trim();\n // Handle string values\n if (defaultStr.startsWith('\"') && defaultStr.endsWith('\"'))\n return defaultStr.slice(1, -1);\n // Handle boolean values\n if (defaultStr === \"true\") return true;\n if (defaultStr === \"false\") return false;\n // Handle numeric values (including negative numbers)\n if (/^-?\\d+$/.test(defaultStr)) return parseInt(defaultStr, 10);\n if (/^-?\\d+\\.\\d+$/.test(defaultStr)) return parseFloat(defaultStr);\n // Handle enum values (no quotes, not a function)\n if (!defaultStr.includes(\"(\")) return defaultStr;\n // Handle functions (like now(), auto(), etc.)\n if (defaultStr.includes(\"(\"))\n // For MongoDB, we'll skip function defaults as they're handled by the DB\n return undefined;\n return defaultStr;\n }\n\n getPrismaSchemasContent(): string {\n if (this.prismaSchemasContent) return this.prismaSchemasContent;\n\n const models: string[] = [];\n const modelRegex = /model\\s+(\\w+)\\s*{/g;\n\n const prismaContent: string[] = [];\n const prismaPath = path.resolve(process.cwd(), \"prisma\");\n\n const files = this.getAllPrismaFiles(prismaPath);\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 private 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 = this.getAllPrismaFiles(filePath, fileList);\n } else if (stat.isFile() && file.endsWith(\".prisma\")) {\n fileList.push(filePath);\n }\n });\n\n return fileList;\n }\n /**\n * Checks if a given type name corresponds to a defined enum.\n *\n * @param typeName - The type name to check\n * @returns True if the type is an enum, false otherwise\n *\n * @example\n * ```typescript\n * const parser = new PrismaSchemaParser(schemaWithStatusEnum);\n * parser.parse();\n * parser.isEnum('Status'); // true\n * parser.isEnum('String'); // false\n * ```\n */\n isEnum(typeName: string): boolean {\n return this.enums.some((e) => e.name === typeName);\n }\n\n /**\n * Checks if a given type name corresponds to a defined model.\n *\n * @param typeName - The type name to check\n * @returns True if the type is a model, false otherwise\n *\n * @example\n * ```typescript\n * const parser = new PrismaSchemaParser(schemaWithUserModel);\n * parser.parse();\n * parser.isModel('User'); // true\n * parser.isModel('String'); // false\n * ```\n */\n isModel(typeName: string): boolean {\n return this.models.some((m) => m.name === typeName);\n }\n\n getModelUniqueFields(modelName: string) {\n return this.models\n .find(({ name }) => pascalCase(name) === pascalCase(modelName))\n ?.fields.filter(({ isUnique }) => isUnique);\n }\n\n getModelRelations(modelName: string) {\n return this.models\n .find((model) => pascalCase(model.name) === pascalCase(modelName))\n ?.fields.filter((field) => field.isRelation);\n }\n\n getModelsAsArrayOfStrings() {\n return this.models.map(({ name }) => name);\n }\n\n getField(criteria: Partial<PrismaField>): PrismaField | undefined {\n return this.models\n .reduce((acc, model) => {\n acc.push(...model.fields);\n return acc;\n }, [] as PrismaField[])\n .find((field) => {\n return Object.keys(criteria).every((key) => {\n return (\n field[key as keyof PrismaField] ===\n criteria[key as keyof PrismaField]\n );\n });\n });\n }\n}\n\nconst prismaSchemaParser = new PrismaSchemaParser();\n\nexport default prismaSchemaParser;\n"]}
|
|
1
|
+
{"version":3,"file":"prisma-schema-parser.js","sourceRoot":"","sources":["../../../../src/utils/prisma/prisma-schema-parser.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"path\";\nimport { PrismaSchema, PrismaModel, PrismaEnum, PrismaField } from \"./types\";\nimport { camelCase, pascalCase } from \"../helpers/change-case.helpers\";\nimport fs from \"fs\";\n\n/**\n * A parser for Prisma schema files that extracts models, enums, and their properties.\n *\n * @example\n * ```typescript\n * const schemaContent = `\n * model User {\n * id Int @id @default(autoincrement())\n * email String @unique\n * }\n * `;\n * const parser = new PrismaSchemaParser();\n * const schema = parser.parse();\n * ```\n */\nexport class PrismaSchemaParser {\n /** Collection of parsed enum definitions */\n enums: PrismaEnum[] = [];\n /** Collection of parsed model definitions */\n models: PrismaModel[] = [];\n /** Current loaded prisma schemas content as a single file */\n prismaSchemasContent: string = \"\";\n parsed: boolean = false;\n\n constructor() {\n this.parse();\n }\n\n /**\n * Parses the Prisma schema and extracts all models and enums.\n *\n * @returns The parsed schema containing arrays of models and enums\n */\n parse(\n { override }: { override: boolean } = { override: false }\n ): PrismaSchema {\n if (!this.parsed || override) {\n this.enums = this.extractEnums();\n this.models = this.extractModels();\n this.parsed = true;\n }\n\n return {\n models: this.models,\n enums: this.enums,\n };\n }\n\n /**\n * Extracts all enum definitions from the schema.\n *\n * @private\n * @returns Array of parsed enum objects\n */\n private extractEnums(): PrismaEnum[] {\n const enums: PrismaEnum[] = [];\n const schema = this.getPrismaSchemasContent() || \"\";\n const enumBlocks = schema.match(/enum\\s+\\w+\\s*\\{[^}]*\\}/g) || [];\n\n for (const block of enumBlocks) {\n const enumObj = this.parseEnumBlock(block);\n if (enumObj) {\n enums.push(enumObj);\n }\n }\n\n return enums;\n }\n\n /**\n * Parses a single enum block and extracts its name and values.\n *\n * @private\n * @param block - The enum block string (e.g., \"enum Status { ACTIVE INACTIVE }\")\n * @returns The parsed enum object or null if parsing fails\n */\n private parseEnumBlock(block: string): PrismaEnum | null {\n const nameMatch = block.match(/enum\\s+(\\w+)/);\n if (!nameMatch) return null;\n\n const name = nameMatch[1];\n const values = block\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(\n (line) =>\n line &&\n !line.startsWith(\"enum\") &&\n !line.startsWith(\"{\") &&\n !line.startsWith(\"}\")\n )\n .map((line) => line.replace(/,$/, \"\"));\n\n return { name, values };\n }\n\n /**\n * Extracts all model definitions from the schema.\n *\n * @private\n * @returns Array of parsed model objects\n */\n private extractModels(): PrismaModel[] {\n const models: PrismaModel[] = [];\n const modelBlocks = this.extractModelBlocks();\n\n for (const block of modelBlocks) {\n const model = this.parseModelBlock(block);\n if (model) {\n models.push(model);\n }\n }\n\n return models;\n }\n\n /**\n * Extracts raw model block strings from the schema using regex.\n *\n * @private\n * @returns Array of model block strings\n */\n private extractModelBlocks(): string[] {\n const modelRegex = /model\\s+\\w+\\s*\\{((?:[^{}]*(?:\\{[^{}]*\\}[^{}]*)*)*)\\}/g;\n const schema = this.getPrismaSchemasContent() || \"\";\n return schema.match(modelRegex) || [];\n }\n\n /**\n * Parses a single model block and extracts its name, fields, and metadata.\n *\n * @private\n * @param block - The model block string\n * @returns The parsed model object or null if parsing fails\n */\n private parseModelBlock(block: string): PrismaModel | null {\n const nameMatch = block.match(/model\\s+(\\w+)/);\n if (!nameMatch) return null;\n\n const name = nameMatch[1];\n const fields = this.parseFields(block);\n\n // Check for @@map directive\n const mapMatch = block.match(/@@map\\s*\\(\\s*\"([^\"]+)\"\\s*\\)/);\n const mapName = mapMatch ? mapMatch[1] : undefined;\n\n return { name, fields, mapName };\n }\n\n /**\n * Parses all field definitions within a model block.\n *\n * @private\n * @param block - The model block string containing field definitions\n * @returns Array of parsed field objects\n */\n private parseFields(block: string): PrismaField[] {\n const fields: PrismaField[] = [];\n const fieldLines = block\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line && !line.startsWith(\"{\") && !line.startsWith(\"}\"));\n\n for (const line of fieldLines) {\n if (line.startsWith(\"//\") || line.startsWith(\"@@\")) continue;\n if (/^model\\s+\\w+\\s*\\{/.test(line)) continue;\n\n const field = this.parseFieldLine(line);\n if (field) {\n fields.push(field);\n }\n }\n\n return fields;\n }\n\n /**\n * Parses a single field line and extracts all field properties.\n *\n * @private\n * @param line - A single field definition line (e.g., \"id Int @id @default(autoincrement())\")\n * @returns The parsed field object or null if parsing fails\n *\n * @example\n * ```typescript\n * // Input: \"email String? @unique @default(\"user@example.com\")\"\n * // Output: {\n * // name: \"email\",\n * // type: \"String\",\n * // isOptional: true,\n * // isArray: false,\n * // defaultValue: \"user@example.com\",\n * // isId: false,\n * // isUnique: true,\n * // attributes: [\"@unique\", \"@default(\\\"user@example.com\\\")\"]\n * // }\n * ```\n */\n private parseFieldLine(line: string): PrismaField | null {\n const fieldMatch = line.match(/^(\\w+)\\s+(\\w+(?:\\[\\])?)\\??\\s*(.*)/);\n if (!fieldMatch) return null;\n\n const [, name, typeWithArray, attributesStr] = fieldMatch;\n const isArray = typeWithArray.endsWith(\"[]\");\n const type = isArray ? typeWithArray.slice(0, -2) : typeWithArray;\n const isOptional = line.includes(\"?\");\n\n const attributes = attributesStr\n .split(/\\s+/)\n .filter((attr) => attr.startsWith(\"@\"));\n\n // Extract default value\n let defaultValue: any = undefined;\n const defaultMatch = attributesStr.match(/@default\\(([^)]+)\\)/);\n if (defaultMatch) {\n defaultValue = this.parseDefaultValue(defaultMatch[1]);\n }\n\n let foreignKeyField = \"\";\n const relationMatch = attributesStr.match(\n /@relation\\([^)]*fields:\\s*\\[([^\\]]+)\\]/\n );\n if (relationMatch)\n foreignKeyField = relationMatch[1].trim().replace(/['\"]/g, \"\");\n\n let foreignReferenceField = \"\";\n const foreignReferenceFieldMatch = attributesStr.match(\n /@relation\\([^)]*references:\\s*\\[([^\\]]+)\\]/\n );\n if (foreignReferenceFieldMatch)\n foreignReferenceField = foreignReferenceFieldMatch[1]\n .trim()\n .replace(/['\"]/g, \"\");\n\n const isId = attributes.some((attr) => attr.startsWith(\"@id\"));\n const isUnique = attributes.some((attr) => attr.startsWith(\"@unique\"));\n const models = this.models;\n\n return {\n name,\n type,\n isOptional,\n isRelation:\n models.map((model) => model.name).includes(type) ||\n this.getPrismaSchemasContent().includes(`model ${type} {`),\n isArray,\n foreignKeyField,\n foreignReferenceField,\n defaultValue,\n isId,\n isUnique,\n attributes,\n };\n }\n\n /**\n * Parses a default value string and converts it to the appropriate JavaScript type.\n *\n * @private\n * @param defaultStr - The default value string from @default() attribute\n * @returns The parsed default value in appropriate JavaScript type, or undefined for functions\n *\n * @example\n * ```typescript\n * parseDefaultValue('\"hello\"') // returns \"hello\"\n * parseDefaultValue('true') // returns true\n * parseDefaultValue('42') // returns 42\n * parseDefaultValue('3.14') // returns 3.14\n * parseDefaultValue('ACTIVE') // returns \"ACTIVE\" (enum value)\n * parseDefaultValue('now()') // returns undefined (function)\n * ```\n */\n private parseDefaultValue(defaultStr: string): any {\n defaultStr = defaultStr.trim();\n // Handle string values\n if (defaultStr.startsWith('\"') && defaultStr.endsWith('\"'))\n return defaultStr.slice(1, -1);\n // Handle boolean values\n if (defaultStr === \"true\") return true;\n if (defaultStr === \"false\") return false;\n // Handle numeric values (including negative numbers)\n if (/^-?\\d+$/.test(defaultStr)) return parseInt(defaultStr, 10);\n if (/^-?\\d+\\.\\d+$/.test(defaultStr)) return parseFloat(defaultStr);\n // Handle enum values (no quotes, not a function)\n if (!defaultStr.includes(\"(\")) return defaultStr;\n // Handle functions (like now(), auto(), etc.)\n if (defaultStr.includes(\"(\"))\n // For MongoDB, we'll skip function defaults as they're handled by the DB\n return undefined;\n return defaultStr;\n }\n\n getPrismaSchemasContent(): string {\n if (this.prismaSchemasContent) return this.prismaSchemasContent;\n\n const models: string[] = [];\n const modelRegex = /model\\s+(\\w+)\\s*{/g;\n\n const prismaContent: string[] = [];\n const prismaPath = path.resolve(process.cwd(), \"prisma\");\n\n const files = this.getAllPrismaFiles(prismaPath);\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 private 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 = this.getAllPrismaFiles(filePath, fileList);\n } else if (stat.isFile() && file.endsWith(\".prisma\")) {\n fileList.push(filePath);\n }\n });\n\n return fileList;\n }\n /**\n * Checks if a given type name corresponds to a defined enum.\n *\n * @param typeName - The type name to check\n * @returns True if the type is an enum, false otherwise\n *\n * @example\n * ```typescript\n * const parser = new PrismaSchemaParser(schemaWithStatusEnum);\n * parser.parse();\n * parser.isEnum('Status'); // true\n * parser.isEnum('String'); // false\n * ```\n */\n isEnum(typeName: string): boolean {\n return this.enums.some((e) => e.name === typeName);\n }\n\n /**\n * Checks if a given type name corresponds to a defined model.\n *\n * @param typeName - The type name to check\n * @returns True if the type is a model, false otherwise\n *\n * @example\n * ```typescript\n * const parser = new PrismaSchemaParser(schemaWithUserModel);\n * parser.parse();\n * parser.isModel('User'); // true\n * parser.isModel('String'); // false\n * ```\n */\n isModel(typeName: string): boolean {\n return this.models.some((m) => m.name === typeName);\n }\n\n getModelUniqueFields(modelName: string) {\n return this.models\n .find(({ name }) => pascalCase(name) === pascalCase(modelName))\n ?.fields.filter(({ isUnique }) => isUnique);\n }\n\n getModelRelations(modelName: string) {\n return this.models\n .find((model) => pascalCase(model.name) === pascalCase(modelName))\n ?.fields.filter((field) => field.isRelation);\n }\n\n getModelsAsArrayOfStrings() {\n return this.models.map(({ name }) => name);\n }\n\n getField(criteria: Partial<PrismaField>): PrismaField | undefined {\n return this.models\n .reduce((acc, model) => {\n acc.push(...model.fields);\n return acc;\n }, [] as PrismaField[])\n .find((field) => {\n return Object.keys(criteria).every((key) => {\n return (\n field[key as keyof PrismaField] ===\n criteria[key as keyof PrismaField]\n );\n });\n });\n }\n}\n\nconst prismaSchemaParser = new PrismaSchemaParser();\n\nexport default prismaSchemaParser;\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import multer from "multer";
|
|
2
|
-
import { ArkosRequest, ArkosRequestHandler, ArkosResponse } from "../../types";
|
|
2
|
+
import { ArkosNextFunction, ArkosRequest, ArkosRequestHandler, ArkosResponse } from "../../types";
|
|
3
3
|
export declare class FileUploadService {
|
|
4
4
|
readonly uploadDir: string;
|
|
5
5
|
private fileSizeLimit;
|
|
@@ -14,7 +14,7 @@ export declare class FileUploadService {
|
|
|
14
14
|
handleDeleteSingleFile(oldFilePath: string): ArkosRequestHandler;
|
|
15
15
|
deleteFileByUrl(fileUrl: string): Promise<boolean>;
|
|
16
16
|
private getFieldName;
|
|
17
|
-
upload(req: ArkosRequest, res: ArkosResponse, options?: {
|
|
17
|
+
upload(req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction, options?: {
|
|
18
18
|
format?: string;
|
|
19
19
|
width?: number;
|
|
20
20
|
height?: number;
|
|
@@ -5,4 +5,4 @@ export declare function extractRequestInfo(req: ArkosRequest): {
|
|
|
5
5
|
baseRoute: string;
|
|
6
6
|
};
|
|
7
7
|
export declare const processFile: (req: ArkosRequest, filePath: string) => Promise<string>;
|
|
8
|
-
export declare const processImage: (req: ArkosRequest, filePath: string, options: Record<string, any>) => Promise<string | null>;
|
|
8
|
+
export declare const processImage: (req: ArkosRequest, next: ArkosNextFunction, filePath: string, options: Record<string, any>) => Promise<string | null>;
|