arkos 1.2.14-test.1 → 1.2.14-test.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/cjs/app.js.map +1 -1
  2. package/dist/cjs/modules/base/base.middlewares.js +1 -1
  3. package/dist/cjs/modules/base/base.middlewares.js.map +1 -1
  4. package/dist/cjs/modules/error-handler/error-handler.controller.js +1 -1
  5. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +1 -1
  6. package/dist/cjs/server.js +2 -2
  7. package/dist/cjs/server.js.map +1 -1
  8. package/dist/cjs/utils/cli/build.js +2 -3
  9. package/dist/cjs/utils/cli/build.js.map +1 -1
  10. package/dist/cjs/utils/cli/dev.js +5 -5
  11. package/dist/cjs/utils/cli/dev.js.map +1 -1
  12. package/dist/cjs/utils/cli/start.js +1 -5
  13. package/dist/cjs/utils/cli/start.js.map +1 -1
  14. package/dist/cjs/utils/cli/utils/cli.helpers.js +1 -1
  15. package/dist/cjs/utils/cli/utils/watermark-stamper.js +3 -0
  16. package/dist/cjs/utils/cli/utils/watermark-stamper.js.map +1 -0
  17. package/dist/cjs/utils/features/api.features.js +1 -1
  18. package/dist/cjs/utils/features/api.features.js.map +1 -1
  19. package/dist/cjs/utils/features/port-and-host-allocator.js +1 -0
  20. package/dist/cjs/utils/features/port-and-host-allocator.js.map +1 -0
  21. package/dist/cjs/utils/helpers/api.features.helpers.js +1 -1
  22. package/dist/cjs/utils/helpers/api.features.helpers.js.map +1 -1
  23. package/dist/cjs/utils/helpers/models.helpers.js +1 -1
  24. package/dist/cjs/utils/helpers/models.helpers.js.map +1 -1
  25. package/dist/cjs/utils/helpers/prisma.helpers.js +1 -1
  26. package/dist/cjs/utils/helpers/prisma.helpers.js.map +1 -1
  27. package/dist/cjs/utils/helpers/routers.helpers.js +1 -1
  28. package/dist/cjs/utils/helpers/routers.helpers.js.map +1 -1
  29. package/dist/cjs/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -1
  30. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +1 -1
  31. package/dist/cjs/utils/sheu.js +1 -1
  32. package/dist/cjs/utils/sheu.js.map +1 -1
  33. package/dist/esm/app.js.map +1 -1
  34. package/dist/esm/modules/base/base.middlewares.js +1 -1
  35. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  36. package/dist/esm/modules/error-handler/error-handler.controller.js +2 -2
  37. package/dist/esm/modules/error-handler/error-handler.controller.js.map +1 -1
  38. package/dist/esm/server.js +3 -3
  39. package/dist/esm/server.js.map +1 -1
  40. package/dist/esm/utils/cli/build.js +3 -4
  41. package/dist/esm/utils/cli/build.js.map +1 -1
  42. package/dist/esm/utils/cli/dev.js +5 -5
  43. package/dist/esm/utils/cli/dev.js.map +1 -1
  44. package/dist/esm/utils/cli/start.js +1 -5
  45. package/dist/esm/utils/cli/start.js.map +1 -1
  46. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
  47. package/dist/esm/utils/cli/utils/watermark-stamper.js +3 -0
  48. package/dist/esm/utils/cli/utils/watermark-stamper.js.map +1 -0
  49. package/dist/esm/utils/features/api.features.js +1 -1
  50. package/dist/esm/utils/features/api.features.js.map +1 -1
  51. package/dist/esm/utils/features/port-and-host-allocator.js +1 -0
  52. package/dist/esm/utils/features/port-and-host-allocator.js.map +1 -0
  53. package/dist/esm/utils/helpers/api.features.helpers.js +1 -1
  54. package/dist/esm/utils/helpers/api.features.helpers.js.map +1 -1
  55. package/dist/esm/utils/helpers/models.helpers.js +1 -1
  56. package/dist/esm/utils/helpers/models.helpers.js.map +1 -1
  57. package/dist/esm/utils/helpers/prisma.helpers.js +1 -1
  58. package/dist/esm/utils/helpers/prisma.helpers.js.map +1 -1
  59. package/dist/esm/utils/helpers/routers.helpers.js +1 -1
  60. package/dist/esm/utils/helpers/routers.helpers.js.map +1 -1
  61. package/dist/esm/utils/prisma/enhaced-prisma-json-schema-generator.js.map +1 -1
  62. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -1
  63. package/dist/esm/utils/sheu.js +1 -1
  64. package/dist/esm/utils/sheu.js.map +1 -1
  65. package/dist/types/modules/error-handler/error-handler.controller.d.ts +1 -1
  66. package/dist/types/utils/cli/utils/watermark-stamper.d.ts +9 -0
  67. package/dist/types/utils/features/port-and-host-allocator.d.ts +21 -0
  68. package/dist/types/utils/prisma/enhaced-prisma-json-schema-generator.d.ts +1 -1
  69. package/package.json +10 -9
  70. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +0 -1
  71. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +0 -1
  72. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +0 -1
  73. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +0 -1
  74. package/dist/types/utils/prisma/prisma-json-schema-generator.d.ts +0 -10
@@ -0,0 +1,21 @@
1
+ import { ArkosConfig } from "../../exports";
2
+ declare class PortAndHostAllocator {
3
+ private host;
4
+ private port;
5
+ private prevWarnings;
6
+ getCorrectHostAndPortToUse(env: Record<string, any>, config?: ArkosConfig): {
7
+ port: string;
8
+ host: string;
9
+ };
10
+ getHostAndAvailablePort(env: Record<string, any>, config?: ArkosConfig & {
11
+ logWarning?: boolean;
12
+ caller?: string;
13
+ }): Promise<{
14
+ port: string;
15
+ host: string;
16
+ }>;
17
+ private isPortAvailable;
18
+ logWarnings(): void;
19
+ }
20
+ declare const portAndHostAllocator: PortAndHostAllocator;
21
+ export default portAndHostAllocator;
@@ -10,7 +10,7 @@ export interface GeneratedSchemas {
10
10
  [key: string]: JsonSchema;
11
11
  }
12
12
  export declare class EnhancedPrismaJsonSchemaGenerator {
13
- private schema;
13
+ schema: import("./types").PrismaSchema;
14
14
  generateModelSchemas(config: SchemaGenerationConfig): Promise<GeneratedSchemas>;
15
15
  private generateAuthSchemas;
16
16
  private generateCrudSchemas;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arkos",
3
- "version": "1.2.14-test.1",
3
+ "version": "1.2.14-test.2",
4
4
  "description": "The Express & Prisma Framework For RESTful API",
5
5
  "main": "dist/cjs/exports/index.js",
6
6
  "module": "dist/esm/exports/index.js",
@@ -62,7 +62,7 @@
62
62
  }
63
63
  },
64
64
  "bin": {
65
- "arkos": "./cli.js"
65
+ "arkos": "cli.js"
66
66
  },
67
67
  "typesVersions": {
68
68
  "*": {
@@ -121,7 +121,7 @@
121
121
  "license": "MIT",
122
122
  "repository": {
123
123
  "type": "git",
124
- "url": "https://github.com/uanela/arkos.git"
124
+ "url": "git+https://github.com/uanela/arkos.git"
125
125
  },
126
126
  "bugs": {
127
127
  "url": "https://github.com/uanela/arkos/issues"
@@ -156,17 +156,14 @@
156
156
  "prisma": "^6.4.1",
157
157
  "ts-jest": "^29.3.1",
158
158
  "tsup": "^8.5.0",
159
+ "tsx": "^4.20.3",
159
160
  "type-fest": "^4.41.0",
160
161
  "typescript": "^5.8.2"
161
162
  },
162
163
  "dependencies": {
163
164
  "chokidar": "^4.0.3",
164
- "class-validator-jsonschema": "^5.0.2",
165
165
  "commander": "^13.1.0",
166
- "pluralize": "^8.0.0",
167
- "swagger-jsdoc": "^6.2.8",
168
- "swagger-ui-express": "^5.0.1",
169
- "zod-to-json-schema": "^3.24.6"
166
+ "pluralize": "^8.0.0"
170
167
  },
171
168
  "peerDependencies": {
172
169
  "@prisma/client": "^6.4.1",
@@ -174,6 +171,7 @@
174
171
  "bcryptjs": "^3.0.2",
175
172
  "class-transformer": "^0.5.1",
176
173
  "class-validator": "^0.14.1",
174
+ "class-validator-jsonschema": "^5.0.2",
177
175
  "compression": "^1.8.0",
178
176
  "cookie-parser": "^1.4.7",
179
177
  "cors": "^2.8.5",
@@ -186,7 +184,10 @@
186
184
  "multer": "2.0.1",
187
185
  "nodemailer": "^6.10.0",
188
186
  "sharp": "^0.33.5",
189
- "zod": "^3.24.2"
187
+ "swagger-jsdoc": "^6.2.8",
188
+ "swagger-ui-express": "^5.0.1",
189
+ "zod": "^3.24.2",
190
+ "zod-to-json-schema": "^3.24.6"
190
191
  },
191
192
  "engines": {
192
193
  "node": ">=14.16"
@@ -1 +0,0 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.PrismaJsonSchemaGenerator=void 0;const prisma_schema_parser_1=__importDefault(require("./prisma-schema-parser"));class PrismaJsonSchemaGenerator{generateSchema(e){const r={},t=[];for(const s of e.fields){if(s.isId)continue;const n=this.convertFieldToJsonSchema(s);r[s.name]=n,!s.isOptional&&s.defaultValue===void 0&&!s.isArray&&t.push(s.name)}return{type:"object",properties:r,required:t}}convertFieldToJsonSchema(e){const t={type:this.mapPrismaTypeToJsonSchema(e.type)};e.isArray&&(t.type="array",t.items={type:this.mapPrismaTypeToJsonSchema(e.type)}),e.defaultValue!==void 0&&(t.default=e.defaultValue),e.type==="DateTime"&&(t.format="date-time");const s=prisma_schema_parser_1.default.parse();if(this.isEnum(e.type)){const n=s.enums.find(o=>o.name===e.type);n&&(t.enum=n.values)}return t}mapPrismaTypeToJsonSchema(e){const r={String:"string",Int:"number",Float:"number",Boolean:"boolean",DateTime:"string",Json:"object",Bytes:"string"};return r[e]?r[e]:this.isEnum(e)?"string":this.isModel(e)?"object":"string"}isEnum(e){return prisma_schema_parser_1.default.parse().enums.some(t=>t.name===e)}isModel(e){return prisma_schema_parser_1.default.parse().models.some(t=>t.name===e)}}exports.PrismaJsonSchemaGenerator=PrismaJsonSchemaGenerator;const prismaJsonSchemaGenerator=new PrismaJsonSchemaGenerator;exports.default=prismaJsonSchemaGenerator;
@@ -1 +0,0 @@
1
- {"version":3,"file":"prisma-json-schema-generator.js","sourceRoot":"","sources":["../../../../src/utils/prisma/prisma-json-schema-generator.ts"],"names":[],"mappings":";;;;;;AAAA,kFAAwD;AAiCxD,MAAa,yBAAyB;IAqCpC,cAAc,CAAC,KAAkB;QAC/B,MAAM,UAAU,GAA0C,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI;gBAAE,SAAS;YAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;YACtD,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;YAMlC,IACE,CAAC,KAAK,CAAC,UAAU;gBACjB,KAAK,CAAC,YAAY,KAAK,SAAS;gBAChC,CAAC,KAAK,CAAC,OAAO,EACd,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,QAAQ;SACT,CAAC;IACJ,CAAC;IA0BO,wBAAwB,CAAC,KAAkB;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAuB;YACnC,IAAI,EAAE,QAAQ;SACf,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;YACxB,QAAQ,CAAC,KAAK,GAAG;gBACf,IAAI,EAAE,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC;aACjD,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACrC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC;QACxC,CAAC;QAGD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC;QAChC,CAAC;QAED,MAAM,MAAM,GAAG,8BAAkB,CAAC,KAAK,EAAE,CAAC;QAE1C,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,OAAO,EAAE,CAAC;gBACZ,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAyBO,yBAAyB,CAAC,UAAkB;QAClD,MAAM,OAAO,GAA8B;YACzC,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC;QAGF,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACxB,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAGD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAGD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAGD,OAAO,QAAQ,CAAC;IAClB,CAAC;IASO,MAAM,CAAC,QAAgB;QAC7B,MAAM,MAAM,GAAG,8BAAkB,CAAC,KAAK,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACvD,CAAC;IASO,OAAO,CAAC,QAAgB;QAC9B,MAAM,MAAM,GAAG,8BAAkB,CAAC,KAAK,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACxD,CAAC;CACF;AAzMD,8DAyMC;AAED,MAAM,yBAAyB,GAAG,IAAI,yBAAyB,EAAE,CAAC;AAElE,kBAAe,yBAAyB,CAAC","sourcesContent":["import prismaSchemaParser from \"./prisma-schema-parser\";\nimport {\n PrismaModel,\n PrismaField,\n JsonSchema,\n JsonSchemaProperty,\n} from \"./types\";\n\n/**\n * Generates JSON Schema definitions from Prisma models for validation and documentation purposes.\n *\n * This generator converts Prisma model definitions into JSON Schema format, which can be used\n * for client-side validation, API documentation, or form generation. It handles type mapping,\n * required fields, default values, arrays, enums, and relationships.\n *\n * @example\n * ```typescript\n * const generator = new JsonSchemaGenerator();\n *\n * const userModel = prismaSchema.models.find(m => m.name === 'User');\n * const jsonSchema = generator.generateSchema(userModel);\n *\n * // Result:\n * // {\n * // type: \"object\",\n * // properties: {\n * // email: { type: \"string\" },\n * // age: { type: \"number\", default: 18 }\n * // },\n * // required: [\"email\"]\n * // }\n * ```\n */\nexport class PrismaJsonSchemaGenerator {\n /**\n * Generates a JSON Schema definition for a specific Prisma model.\n *\n * This method converts a Prisma model into a JSON Schema object that can be used\n * for validation. It automatically excludes ID fields (for MongoDB compatibility),\n * maps Prisma types to JSON Schema types, and determines required fields based on\n * optionality, default values, and array types.\n *\n * @param model - The Prisma model to convert to JSON Schema\n * @returns A JSON Schema object representing the model structure\n *\n * @example\n * ```typescript\n * const userModel = {\n * name: \"User\",\n * fields: [\n * { name: \"id\", type: \"String\", isId: true, isOptional: false },\n * { name: \"email\", type: \"String\", isOptional: false },\n * { name: \"age\", type: \"Int\", isOptional: true, defaultValue: 18 },\n * { name: \"tags\", type: \"String\", isArray: true }\n * ]\n * };\n *\n * const schema = generator.generateSchema(userModel);\n * // Returns:\n * // {\n * // type: \"object\",\n *PrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrisma // properties: {\n * // email: { type: \"string\" },\n * // age: { type: \"number\", default: 18 },\n * // tags: { type: \"array\", items: { type: \"string\" } }\n * // },\n * // required: [\"email\"]\n * // }\n * ```\n */\n generateSchema(model: PrismaModel): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n\n for (const field of model.fields) {\n if (field.isId) continue; // Skip ID fields for MongoDB\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n // A field is required if:\n // 1. It's not optional (no ?)\n // 2. It has no default value\n // 3. It's not an array (arrays can be empty)\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 * Converts a single Prisma field to a JSON Schema property.\n *\n * This method handles the conversion of individual fields, including:\n * - Type mapping from Prisma to JSON Schema types\n * - Array type conversion to JSON Schema array format\n * - Default value assignment\n * - DateTime format specification\n * - Enum value constraints\n *\n * @private\n * @param field - The Prisma field to convert\n * @returns A JSON Schema property object\n *\n * @example\n * ```typescript\n * // For a field: { name: \"status\", type: \"UserStatus\", isArray: false, defaultValue: \"ACTIVE\" }\n * // where UserStatus is an enum with values [\"ACTIVE\", \"INACTIVE\"]\n * // Returns: { type: \"string\", enum: [\"ACTIVE\", \"INACTIVE\"], default: \"ACTIVE\" }\n *\n * // For a field: { name: \"tags\", type: \"String\", isArray: true }\n * // Returns: { type: \"array\", items: { type: \"string\" } }\n * ```\n */\n private convertFieldToJsonSchema(field: PrismaField): JsonSchemaProperty {\n const baseType = this.mapPrismaTypeToJsonSchema(field.type);\n const property: JsonSchemaProperty = {\n type: baseType,\n };\n\n if (field.isArray) {\n property.type = \"array\";\n property.items = {\n type: this.mapPrismaTypeToJsonSchema(field.type),\n };\n }\n\n if (field.defaultValue !== undefined) {\n property.default = field.defaultValue;\n }\n\n // Add format for specific types\n if (field.type === \"DateTime\") {\n property.format = \"date-time\";\n }\n\n const schema = prismaSchemaParser.parse();\n // Add enum values\n if (this.isEnum(field.type)) {\n const enumDef = 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 /**\n * Maps Prisma data types to their corresponding JSON Schema types.\n *\n * This method provides the core type conversion logic between Prisma's type system\n * and JSON Schema's type system. It handles primitive types, enums, model relations,\n * and provides fallback behavior for unknown types.\n *\n * @private\n * @param prismaType - The Prisma type name to convert\n * @returns The corresponding JSON Schema type string\n *\n * @example\n * ```typescript\n * mapPrismaTypeToJsonSchema(\"String\") // returns \"string\"\n * mapPrismaTypeToJsonSchema(\"Int\") // returns \"number\"\n * mapPrismaTypeToJsonSchema(\"Boolean\") // returns \"boolean\"\n * mapPrismaTypeToJsonSchema(\"DateTime\") // returns \"string\"\n * mapPrismaTypeToJsonSchema(\"Json\") // returns \"object\"\n * mapPrismaTypeToJsonSchema(\"UserStatus\") // returns \"string\" (if UserStatus is enum)\n * mapPrismaTypeToJsonSchema(\"User\") // returns \"object\" (if User is model)\n * mapPrismaTypeToJsonSchema(\"Unknown\") // returns \"string\" (fallback)\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 it's a known primitive type, use the mapping\n if (typeMap[prismaType]) {\n return typeMap[prismaType];\n }\n\n // If it's an enum, it's a string with enum values\n if (this.isEnum(prismaType)) {\n return \"string\";\n }\n\n // If it's a model (relation), it's an object\n if (this.isModel(prismaType)) {\n return \"object\";\n }\n\n // Default to string for unknown types\n return \"string\";\n }\n\n /**\n * Checks if a given type name corresponds to a defined enum in the schema.\n *\n * @private\n * @param typeName - The type name to check\n * @returns True if the type is an enum, false otherwise\n */\n private isEnum(typeName: string): boolean {\n const schema = prismaSchemaParser.parse();\n return schema.enums.some((e) => e.name === typeName);\n }\n\n /**\n * Checks if a given type name corresponds to a defined model in the schema.\n *\n * @private\n * @param typeName - The type name to check\n * @returns True if the type is a model, false otherwise\n */\n private isModel(typeName: string): boolean {\n const schema = prismaSchemaParser.parse();\n return schema.models.some((m) => m.name === typeName);\n }\n}\n\nconst prismaJsonSchemaGenerator = new PrismaJsonSchemaGenerator();\n\nexport default prismaJsonSchemaGenerator;\n"]}
@@ -1 +0,0 @@
1
- "use strict";import a from"./prisma-schema-parser.js";export class PrismaJsonSchemaGenerator{generateSchema(e){const n={},t=[];for(const s of e.fields){if(s.isId)continue;const r=this.convertFieldToJsonSchema(s);n[s.name]=r,!s.isOptional&&s.defaultValue===void 0&&!s.isArray&&t.push(s.name)}return{type:"object",properties:n,required:t}}convertFieldToJsonSchema(e){const t={type:this.mapPrismaTypeToJsonSchema(e.type)};e.isArray&&(t.type="array",t.items={type:this.mapPrismaTypeToJsonSchema(e.type)}),e.defaultValue!==void 0&&(t.default=e.defaultValue),e.type==="DateTime"&&(t.format="date-time");const s=a.parse();if(this.isEnum(e.type)){const r=s.enums.find(o=>o.name===e.type);r&&(t.enum=r.values)}return t}mapPrismaTypeToJsonSchema(e){const n={String:"string",Int:"number",Float:"number",Boolean:"boolean",DateTime:"string",Json:"object",Bytes:"string"};return n[e]?n[e]:this.isEnum(e)?"string":this.isModel(e)?"object":"string"}isEnum(e){return a.parse().enums.some(t=>t.name===e)}isModel(e){return a.parse().models.some(t=>t.name===e)}}const m=new PrismaJsonSchemaGenerator;export default m;
@@ -1 +0,0 @@
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 prismaSchemaParser from \"./prisma-schema-parser\";\nimport {\n PrismaModel,\n PrismaField,\n JsonSchema,\n JsonSchemaProperty,\n} from \"./types\";\n\n/**\n * Generates JSON Schema definitions from Prisma models for validation and documentation purposes.\n *\n * This generator converts Prisma model definitions into JSON Schema format, which can be used\n * for client-side validation, API documentation, or form generation. It handles type mapping,\n * required fields, default values, arrays, enums, and relationships.\n *\n * @example\n * ```typescript\n * const generator = new JsonSchemaGenerator();\n *\n * const userModel = prismaSchema.models.find(m => m.name === 'User');\n * const jsonSchema = generator.generateSchema(userModel);\n *\n * // Result:\n * // {\n * // type: \"object\",\n * // properties: {\n * // email: { type: \"string\" },\n * // age: { type: \"number\", default: 18 }\n * // },\n * // required: [\"email\"]\n * // }\n * ```\n */\nexport class PrismaJsonSchemaGenerator {\n /**\n * Generates a JSON Schema definition for a specific Prisma model.\n *\n * This method converts a Prisma model into a JSON Schema object that can be used\n * for validation. It automatically excludes ID fields (for MongoDB compatibility),\n * maps Prisma types to JSON Schema types, and determines required fields based on\n * optionality, default values, and array types.\n *\n * @param model - The Prisma model to convert to JSON Schema\n * @returns A JSON Schema object representing the model structure\n *\n * @example\n * ```typescript\n * const userModel = {\n * name: \"User\",\n * fields: [\n * { name: \"id\", type: \"String\", isId: true, isOptional: false },\n * { name: \"email\", type: \"String\", isOptional: false },\n * { name: \"age\", type: \"Int\", isOptional: true, defaultValue: 18 },\n * { name: \"tags\", type: \"String\", isArray: true }\n * ]\n * };\n *\n * const schema = generator.generateSchema(userModel);\n * // Returns:\n * // {\n * // type: \"object\",\n *PrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrismaPrisma // properties: {\n * // email: { type: \"string\" },\n * // age: { type: \"number\", default: 18 },\n * // tags: { type: \"array\", items: { type: \"string\" } }\n * // },\n * // required: [\"email\"]\n * // }\n * ```\n */\n generateSchema(model: PrismaModel): JsonSchema {\n const properties: { [key: string]: JsonSchemaProperty } = {};\n const required: string[] = [];\n\n for (const field of model.fields) {\n if (field.isId) continue; // Skip ID fields for MongoDB\n\n const property = this.convertFieldToJsonSchema(field);\n properties[field.name] = property;\n\n // A field is required if:\n // 1. It's not optional (no ?)\n // 2. It has no default value\n // 3. It's not an array (arrays can be empty)\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 * Converts a single Prisma field to a JSON Schema property.\n *\n * This method handles the conversion of individual fields, including:\n * - Type mapping from Prisma to JSON Schema types\n * - Array type conversion to JSON Schema array format\n * - Default value assignment\n * - DateTime format specification\n * - Enum value constraints\n *\n * @private\n * @param field - The Prisma field to convert\n * @returns A JSON Schema property object\n *\n * @example\n * ```typescript\n * // For a field: { name: \"status\", type: \"UserStatus\", isArray: false, defaultValue: \"ACTIVE\" }\n * // where UserStatus is an enum with values [\"ACTIVE\", \"INACTIVE\"]\n * // Returns: { type: \"string\", enum: [\"ACTIVE\", \"INACTIVE\"], default: \"ACTIVE\" }\n *\n * // For a field: { name: \"tags\", type: \"String\", isArray: true }\n * // Returns: { type: \"array\", items: { type: \"string\" } }\n * ```\n */\n private convertFieldToJsonSchema(field: PrismaField): JsonSchemaProperty {\n const baseType = this.mapPrismaTypeToJsonSchema(field.type);\n const property: JsonSchemaProperty = {\n type: baseType,\n };\n\n if (field.isArray) {\n property.type = \"array\";\n property.items = {\n type: this.mapPrismaTypeToJsonSchema(field.type),\n };\n }\n\n if (field.defaultValue !== undefined) {\n property.default = field.defaultValue;\n }\n\n // Add format for specific types\n if (field.type === \"DateTime\") {\n property.format = \"date-time\";\n }\n\n const schema = prismaSchemaParser.parse();\n // Add enum values\n if (this.isEnum(field.type)) {\n const enumDef = 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 /**\n * Maps Prisma data types to their corresponding JSON Schema types.\n *\n * This method provides the core type conversion logic between Prisma's type system\n * and JSON Schema's type system. It handles primitive types, enums, model relations,\n * and provides fallback behavior for unknown types.\n *\n * @private\n * @param prismaType - The Prisma type name to convert\n * @returns The corresponding JSON Schema type string\n *\n * @example\n * ```typescript\n * mapPrismaTypeToJsonSchema(\"String\") // returns \"string\"\n * mapPrismaTypeToJsonSchema(\"Int\") // returns \"number\"\n * mapPrismaTypeToJsonSchema(\"Boolean\") // returns \"boolean\"\n * mapPrismaTypeToJsonSchema(\"DateTime\") // returns \"string\"\n * mapPrismaTypeToJsonSchema(\"Json\") // returns \"object\"\n * mapPrismaTypeToJsonSchema(\"UserStatus\") // returns \"string\" (if UserStatus is enum)\n * mapPrismaTypeToJsonSchema(\"User\") // returns \"object\" (if User is model)\n * mapPrismaTypeToJsonSchema(\"Unknown\") // returns \"string\" (fallback)\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 it's a known primitive type, use the mapping\n if (typeMap[prismaType]) {\n return typeMap[prismaType];\n }\n\n // If it's an enum, it's a string with enum values\n if (this.isEnum(prismaType)) {\n return \"string\";\n }\n\n // If it's a model (relation), it's an object\n if (this.isModel(prismaType)) {\n return \"object\";\n }\n\n // Default to string for unknown types\n return \"string\";\n }\n\n /**\n * Checks if a given type name corresponds to a defined enum in the schema.\n *\n * @private\n * @param typeName - The type name to check\n * @returns True if the type is an enum, false otherwise\n */\n private isEnum(typeName: string): boolean {\n const schema = prismaSchemaParser.parse();\n return schema.enums.some((e) => e.name === typeName);\n }\n\n /**\n * Checks if a given type name corresponds to a defined model in the schema.\n *\n * @private\n * @param typeName - The type name to check\n * @returns True if the type is a model, false otherwise\n */\n private isModel(typeName: string): boolean {\n const schema = prismaSchemaParser.parse();\n return schema.models.some((m) => m.name === typeName);\n }\n}\n\nconst prismaJsonSchemaGenerator = new PrismaJsonSchemaGenerator();\n\nexport default prismaJsonSchemaGenerator;\n"]}
@@ -1,10 +0,0 @@
1
- import { PrismaModel, JsonSchema } from "./types";
2
- export declare class PrismaJsonSchemaGenerator {
3
- generateSchema(model: PrismaModel): JsonSchema;
4
- private convertFieldToJsonSchema;
5
- private mapPrismaTypeToJsonSchema;
6
- private isEnum;
7
- private isModel;
8
- }
9
- declare const prismaJsonSchemaGenerator: PrismaJsonSchemaGenerator;
10
- export default prismaJsonSchemaGenerator;