nestjs-ddd-cli 2.2.1 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/README.md +247 -408
  2. package/ddd.schema.json +111 -0
  3. package/dist/commands/aggregate-validator.d.ts +9 -0
  4. package/dist/commands/aggregate-validator.js +953 -0
  5. package/dist/commands/aggregate-validator.js.map +1 -0
  6. package/dist/commands/ai-assist.d.ts +8 -0
  7. package/dist/commands/ai-assist.js +337 -0
  8. package/dist/commands/ai-assist.js.map +1 -0
  9. package/dist/commands/api-contracts.d.ts +9 -0
  10. package/dist/commands/api-contracts.js +1368 -0
  11. package/dist/commands/api-contracts.js.map +1 -0
  12. package/dist/commands/api-docs.d.ts +8 -0
  13. package/dist/commands/api-docs.js +408 -0
  14. package/dist/commands/api-docs.js.map +1 -0
  15. package/dist/commands/api-versioning.d.ts +11 -0
  16. package/dist/commands/api-versioning.js +643 -0
  17. package/dist/commands/api-versioning.js.map +1 -0
  18. package/dist/commands/audit-logging.d.ts +9 -0
  19. package/dist/commands/audit-logging.js +1129 -0
  20. package/dist/commands/audit-logging.js.map +1 -0
  21. package/dist/commands/batch-generate.d.ts +10 -0
  22. package/dist/commands/batch-generate.js +405 -0
  23. package/dist/commands/batch-generate.js.map +1 -0
  24. package/dist/commands/caching-strategies.d.ts +9 -0
  25. package/dist/commands/caching-strategies.js +874 -0
  26. package/dist/commands/caching-strategies.js.map +1 -0
  27. package/dist/commands/code-analyzer.d.ts +42 -0
  28. package/dist/commands/code-analyzer.js +474 -0
  29. package/dist/commands/code-analyzer.js.map +1 -0
  30. package/dist/commands/database-seeding.d.ts +6 -0
  31. package/dist/commands/database-seeding.js +621 -0
  32. package/dist/commands/database-seeding.js.map +1 -0
  33. package/dist/commands/db-optimization.d.ts +7 -0
  34. package/dist/commands/db-optimization.js +687 -0
  35. package/dist/commands/db-optimization.js.map +1 -0
  36. package/dist/commands/dependency-graph.d.ts +6 -0
  37. package/dist/commands/dependency-graph.js +329 -0
  38. package/dist/commands/dependency-graph.js.map +1 -0
  39. package/dist/commands/doctor-enhanced.d.ts +22 -0
  40. package/dist/commands/doctor-enhanced.js +543 -0
  41. package/dist/commands/doctor-enhanced.js.map +1 -0
  42. package/dist/commands/doctor.d.ts +4 -0
  43. package/dist/commands/doctor.js +151 -0
  44. package/dist/commands/doctor.js.map +1 -0
  45. package/dist/commands/env-manager.d.ts +6 -0
  46. package/dist/commands/env-manager.js +419 -0
  47. package/dist/commands/env-manager.js.map +1 -0
  48. package/dist/commands/event-sourcing-full.d.ts +10 -0
  49. package/dist/commands/event-sourcing-full.js +1107 -0
  50. package/dist/commands/event-sourcing-full.js.map +1 -0
  51. package/dist/commands/feature-flags.d.ts +9 -0
  52. package/dist/commands/feature-flags.js +824 -0
  53. package/dist/commands/feature-flags.js.map +1 -0
  54. package/dist/commands/filter-dsl.d.ts +10 -0
  55. package/dist/commands/filter-dsl.js +1407 -0
  56. package/dist/commands/filter-dsl.js.map +1 -0
  57. package/dist/commands/generate-all.js +485 -32
  58. package/dist/commands/generate-all.js.map +1 -1
  59. package/dist/commands/generate-deployment.d.ts +8 -0
  60. package/dist/commands/generate-deployment.js +746 -0
  61. package/dist/commands/generate-deployment.js.map +1 -0
  62. package/dist/commands/generate-domain-service.d.ts +14 -0
  63. package/dist/commands/generate-domain-service.js +796 -0
  64. package/dist/commands/generate-domain-service.js.map +1 -0
  65. package/dist/commands/generate-entity.js +82 -24
  66. package/dist/commands/generate-entity.js.map +1 -1
  67. package/dist/commands/generate-from-schema.d.ts +56 -0
  68. package/dist/commands/generate-from-schema.js +222 -0
  69. package/dist/commands/generate-from-schema.js.map +1 -0
  70. package/dist/commands/generate-orchestrator.d.ts +14 -0
  71. package/dist/commands/generate-orchestrator.js +887 -0
  72. package/dist/commands/generate-orchestrator.js.map +1 -0
  73. package/dist/commands/generate-repository.d.ts +14 -0
  74. package/dist/commands/generate-repository.js +1019 -0
  75. package/dist/commands/generate-repository.js.map +1 -0
  76. package/dist/commands/generate-shared.d.ts +4 -0
  77. package/dist/commands/generate-shared.js +388 -0
  78. package/dist/commands/generate-shared.js.map +1 -0
  79. package/dist/commands/generate-value-object.d.ts +32 -0
  80. package/dist/commands/generate-value-object.js +700 -0
  81. package/dist/commands/generate-value-object.js.map +1 -0
  82. package/dist/commands/graphql-subscriptions.d.ts +6 -0
  83. package/dist/commands/graphql-subscriptions.js +607 -0
  84. package/dist/commands/graphql-subscriptions.js.map +1 -0
  85. package/dist/commands/graphql-types.d.ts +5 -0
  86. package/dist/commands/graphql-types.js +423 -0
  87. package/dist/commands/graphql-types.js.map +1 -0
  88. package/dist/commands/health-probes-advanced.d.ts +6 -0
  89. package/dist/commands/health-probes-advanced.js +655 -0
  90. package/dist/commands/health-probes-advanced.js.map +1 -0
  91. package/dist/commands/i18n-setup.d.ts +10 -0
  92. package/dist/commands/i18n-setup.js +677 -0
  93. package/dist/commands/i18n-setup.js.map +1 -0
  94. package/dist/commands/init-config.d.ts +6 -0
  95. package/dist/commands/init-config.js +370 -0
  96. package/dist/commands/init-config.js.map +1 -0
  97. package/dist/commands/init-project.js +56 -6
  98. package/dist/commands/init-project.js.map +1 -1
  99. package/dist/commands/interactive-scaffold.d.ts +5 -0
  100. package/dist/commands/interactive-scaffold.js +271 -0
  101. package/dist/commands/interactive-scaffold.js.map +1 -0
  102. package/dist/commands/metrics-prometheus.d.ts +6 -0
  103. package/dist/commands/metrics-prometheus.js +681 -0
  104. package/dist/commands/metrics-prometheus.js.map +1 -0
  105. package/dist/commands/migration-engine.d.ts +6 -0
  106. package/dist/commands/migration-engine.js +446 -0
  107. package/dist/commands/migration-engine.js.map +1 -0
  108. package/dist/commands/migration.d.ts +12 -0
  109. package/dist/commands/migration.js +484 -0
  110. package/dist/commands/migration.js.map +1 -0
  111. package/dist/commands/monorepo.d.ts +8 -0
  112. package/dist/commands/monorepo.js +483 -0
  113. package/dist/commands/monorepo.js.map +1 -0
  114. package/dist/commands/multi-database.d.ts +5 -0
  115. package/dist/commands/multi-database.js +439 -0
  116. package/dist/commands/multi-database.js.map +1 -0
  117. package/dist/commands/observability-tracing.d.ts +10 -0
  118. package/dist/commands/observability-tracing.js +740 -0
  119. package/dist/commands/observability-tracing.js.map +1 -0
  120. package/dist/commands/openapi-export.d.ts +8 -0
  121. package/dist/commands/openapi-export.js +359 -0
  122. package/dist/commands/openapi-export.js.map +1 -0
  123. package/dist/commands/perf-analyzer.d.ts +8 -0
  124. package/dist/commands/perf-analyzer.js +423 -0
  125. package/dist/commands/perf-analyzer.js.map +1 -0
  126. package/dist/commands/rate-limiting.d.ts +10 -0
  127. package/dist/commands/rate-limiting.js +953 -0
  128. package/dist/commands/rate-limiting.js.map +1 -0
  129. package/dist/commands/recipe-plugin.d.ts +56 -0
  130. package/dist/commands/recipe-plugin.js +315 -0
  131. package/dist/commands/recipe-plugin.js.map +1 -0
  132. package/dist/commands/recipe.d.ts +6 -0
  133. package/dist/commands/recipe.js +3941 -0
  134. package/dist/commands/recipe.js.map +1 -0
  135. package/dist/commands/recipes/elasticsearch.recipe.d.ts +1 -0
  136. package/dist/commands/recipes/elasticsearch.recipe.js +761 -0
  137. package/dist/commands/recipes/elasticsearch.recipe.js.map +1 -0
  138. package/dist/commands/recipes/event-sourcing.recipe.d.ts +1 -0
  139. package/dist/commands/recipes/event-sourcing.recipe.js +889 -0
  140. package/dist/commands/recipes/event-sourcing.recipe.js.map +1 -0
  141. package/dist/commands/recipes/index.d.ts +7 -0
  142. package/dist/commands/recipes/index.js +24 -0
  143. package/dist/commands/recipes/index.js.map +1 -0
  144. package/dist/commands/recipes/message-queue.recipe.d.ts +1 -0
  145. package/dist/commands/recipes/message-queue.recipe.js +706 -0
  146. package/dist/commands/recipes/message-queue.recipe.js.map +1 -0
  147. package/dist/commands/recipes/middleware.recipe.d.ts +1 -0
  148. package/dist/commands/recipes/middleware.recipe.js +383 -0
  149. package/dist/commands/recipes/middleware.recipe.js.map +1 -0
  150. package/dist/commands/recipes/multi-tenancy.recipe.d.ts +1 -0
  151. package/dist/commands/recipes/multi-tenancy.recipe.js +520 -0
  152. package/dist/commands/recipes/multi-tenancy.recipe.js.map +1 -0
  153. package/dist/commands/recipes/oauth2.recipe.d.ts +1 -0
  154. package/dist/commands/recipes/oauth2.recipe.js +472 -0
  155. package/dist/commands/recipes/oauth2.recipe.js.map +1 -0
  156. package/dist/commands/recipes/websocket.recipe.d.ts +1 -0
  157. package/dist/commands/recipes/websocket.recipe.js +453 -0
  158. package/dist/commands/recipes/websocket.recipe.js.map +1 -0
  159. package/dist/commands/resilience-patterns.d.ts +13 -0
  160. package/dist/commands/resilience-patterns.js +1029 -0
  161. package/dist/commands/resilience-patterns.js.map +1 -0
  162. package/dist/commands/security-patterns.d.ts +11 -0
  163. package/dist/commands/security-patterns.js +2233 -0
  164. package/dist/commands/security-patterns.js.map +1 -0
  165. package/dist/commands/template-debug.d.ts +27 -0
  166. package/dist/commands/template-debug.js +388 -0
  167. package/dist/commands/template-debug.js.map +1 -0
  168. package/dist/commands/test-factory-full.d.ts +9 -0
  169. package/dist/commands/test-factory-full.js +1570 -0
  170. package/dist/commands/test-factory-full.js.map +1 -0
  171. package/dist/commands/test-scaffold.d.ts +7 -0
  172. package/dist/commands/test-scaffold.js +621 -0
  173. package/dist/commands/test-scaffold.js.map +1 -0
  174. package/dist/index.js +1088 -0
  175. package/dist/index.js.map +1 -1
  176. package/dist/templates/ai-context/CLAUDE.md.hbs +158 -0
  177. package/dist/templates/ai-context/conventions.md.hbs +154 -0
  178. package/dist/templates/command/create-command.hbs +6 -14
  179. package/dist/templates/command/delete-command.hbs +19 -0
  180. package/dist/templates/command/update-command.hbs +24 -0
  181. package/dist/templates/controller/controller.hbs +64 -17
  182. package/dist/templates/dto/create-dto.hbs +29 -5
  183. package/dist/templates/dto/filter-dto.hbs +52 -0
  184. package/dist/templates/dto/filter-query.dto.hbs +148 -0
  185. package/dist/templates/dto/paginated-response.dto.hbs +29 -0
  186. package/dist/templates/dto/pagination-query.dto.hbs +30 -0
  187. package/dist/templates/dto/response-dto.hbs +38 -0
  188. package/dist/templates/dto/update-dto.hbs +11 -0
  189. package/dist/templates/entity/entity.hbs +32 -1
  190. package/dist/templates/event/domain-event.hbs +33 -7
  191. package/dist/templates/event/event-handler.hbs +40 -0
  192. package/dist/templates/exception/base-exceptions.hbs +69 -0
  193. package/dist/templates/exception/entity-not-found.exception.hbs +7 -0
  194. package/dist/templates/mapper/mapper.hbs +49 -24
  195. package/dist/templates/module/module.hbs +34 -10
  196. package/dist/templates/orm-entity/orm-entity.hbs +63 -12
  197. package/dist/templates/prisma/prisma-mapper.hbs +71 -0
  198. package/dist/templates/prisma/prisma-repository.hbs +114 -0
  199. package/dist/templates/prisma/prisma-schema.hbs +20 -0
  200. package/dist/templates/prisma/prisma-service.hbs +51 -0
  201. package/dist/templates/query/get-all.query.hbs +50 -0
  202. package/dist/templates/query/get-by-id.query.hbs +31 -0
  203. package/dist/templates/repository/repository.hbs +55 -13
  204. package/dist/templates/resolver/graphql-input.hbs +54 -0
  205. package/dist/templates/resolver/graphql-type.hbs +58 -0
  206. package/dist/templates/resolver/pagination-args.hbs +33 -0
  207. package/dist/templates/resolver/resolver.hbs +62 -0
  208. package/dist/templates/shared/prisma-query-builder.util.hbs +189 -0
  209. package/dist/templates/shared/query-builder.util.hbs +218 -0
  210. package/dist/templates/test/controller.spec.hbs +124 -0
  211. package/dist/templates/test/repository.spec.hbs +158 -0
  212. package/dist/templates/test/usecase.spec.hbs +116 -0
  213. package/dist/templates/usecase/create-usecase.hbs +19 -7
  214. package/dist/templates/usecase/delete-usecase.hbs +17 -0
  215. package/dist/templates/usecase/update-usecase.hbs +31 -0
  216. package/dist/utils/config.utils.d.ts +45 -0
  217. package/dist/utils/config.utils.js +211 -0
  218. package/dist/utils/config.utils.js.map +1 -0
  219. package/dist/utils/error.utils.d.ts +145 -0
  220. package/dist/utils/error.utils.js +422 -0
  221. package/dist/utils/error.utils.js.map +1 -0
  222. package/dist/utils/field.utils.d.ts +54 -0
  223. package/dist/utils/field.utils.js +389 -0
  224. package/dist/utils/field.utils.js.map +1 -0
  225. package/dist/utils/file.utils.d.ts +19 -8
  226. package/dist/utils/file.utils.js +135 -4
  227. package/dist/utils/file.utils.js.map +1 -1
  228. package/dist/utils/idempotency.utils.d.ts +123 -0
  229. package/dist/utils/idempotency.utils.js +444 -0
  230. package/dist/utils/idempotency.utils.js.map +1 -0
  231. package/dist/utils/naming.utils.js +24 -5
  232. package/dist/utils/naming.utils.js.map +1 -1
  233. package/dist/utils/performance.utils.d.ts +37 -0
  234. package/dist/utils/performance.utils.js +158 -0
  235. package/dist/utils/performance.utils.js.map +1 -0
  236. package/dist/utils/relation.utils.d.ts +92 -0
  237. package/dist/utils/relation.utils.js +388 -0
  238. package/dist/utils/relation.utils.js.map +1 -0
  239. package/dist/utils/rollback.utils.d.ts +49 -0
  240. package/dist/utils/rollback.utils.js +306 -0
  241. package/dist/utils/rollback.utils.js.map +1 -0
  242. package/dist/utils/schema.utils.d.ts +123 -0
  243. package/dist/utils/schema.utils.js +419 -0
  244. package/dist/utils/schema.utils.js.map +1 -0
  245. package/dist/utils/security.utils.d.ts +57 -0
  246. package/dist/utils/security.utils.js +315 -0
  247. package/dist/utils/security.utils.js.map +1 -0
  248. package/dist/utils/template-engine.utils.d.ts +80 -0
  249. package/dist/utils/template-engine.utils.js +463 -0
  250. package/dist/utils/template-engine.utils.js.map +1 -0
  251. package/dist/utils/validation-registry.utils.d.ts +160 -0
  252. package/dist/utils/validation-registry.utils.js +526 -0
  253. package/dist/utils/validation-registry.utils.js.map +1 -0
  254. package/package.json +3 -1
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Unified Error & Exception Framework
3
+ * Provides centralized exception handling for CLI and generated code
4
+ */
5
+ /**
6
+ * Base CLI Error with error codes
7
+ */
8
+ export declare class CliError extends Error {
9
+ readonly code: string;
10
+ readonly details?: Record<string, any>;
11
+ readonly suggestion?: string;
12
+ readonly cause?: Error;
13
+ constructor(message: string, code: string, options?: {
14
+ details?: Record<string, any>;
15
+ suggestion?: string;
16
+ cause?: Error;
17
+ });
18
+ toJSON(): {
19
+ name: string;
20
+ code: string;
21
+ message: string;
22
+ details: Record<string, any>;
23
+ suggestion: string;
24
+ };
25
+ }
26
+ export declare class ValidationError extends CliError {
27
+ constructor(message: string, details?: Record<string, any>);
28
+ }
29
+ export declare class FileNotFoundError extends CliError {
30
+ constructor(filePath: string);
31
+ }
32
+ export declare class FileExistsError extends CliError {
33
+ constructor(filePath: string);
34
+ }
35
+ export declare class ModuleNotFoundError extends CliError {
36
+ constructor(moduleName: string);
37
+ }
38
+ export declare class EntityNotFoundError extends CliError {
39
+ constructor(entityName: string, moduleName?: string);
40
+ }
41
+ export declare class InvalidFieldError extends CliError {
42
+ constructor(fieldStr: string, reason: string);
43
+ }
44
+ export declare class DuplicateEntityError extends CliError {
45
+ constructor(entityName: string, existingPath: string);
46
+ }
47
+ export declare class CircularDependencyError extends CliError {
48
+ constructor(chain: string[]);
49
+ }
50
+ export declare class TemplateError extends CliError {
51
+ constructor(templateName: string, reason: string);
52
+ }
53
+ export declare class ConfigurationError extends CliError {
54
+ constructor(message: string, configKey?: string);
55
+ }
56
+ export declare class RelationError extends CliError {
57
+ constructor(message: string, details?: Record<string, any>);
58
+ }
59
+ export declare class SchemaError extends CliError {
60
+ constructor(message: string, details?: Record<string, any>);
61
+ }
62
+ export declare class GenerationError extends CliError {
63
+ constructor(message: string, details?: Record<string, any>);
64
+ }
65
+ /**
66
+ * Error codes for structured error handling
67
+ */
68
+ export declare const ErrorCodes: {
69
+ readonly VALIDATION_ERROR: "E1000";
70
+ readonly INVALID_FIELD: "E1001";
71
+ readonly INVALID_NAME: "E1002";
72
+ readonly INVALID_TYPE: "E1003";
73
+ readonly MISSING_REQUIRED: "E1004";
74
+ readonly SCHEMA_INVALID: "E1005";
75
+ readonly FILE_NOT_FOUND: "E2000";
76
+ readonly FILE_EXISTS: "E2001";
77
+ readonly FILE_WRITE_ERROR: "E2002";
78
+ readonly FILE_READ_ERROR: "E2003";
79
+ readonly DIRECTORY_NOT_FOUND: "E2004";
80
+ readonly ENTITY_NOT_FOUND: "E3000";
81
+ readonly DUPLICATE_ENTITY: "E3001";
82
+ readonly ENTITY_INVALID: "E3002";
83
+ readonly MODULE_NOT_FOUND: "E4000";
84
+ readonly DUPLICATE_MODULE: "E4001";
85
+ readonly MODULE_INVALID: "E4002";
86
+ readonly RELATION_ERROR: "E5000";
87
+ readonly CIRCULAR_DEPENDENCY: "E5001";
88
+ readonly INVALID_RELATION_TYPE: "E5002";
89
+ readonly MISSING_INVERSE_SIDE: "E5003";
90
+ readonly TEMPLATE_ERROR: "E6000";
91
+ readonly TEMPLATE_NOT_FOUND: "E6001";
92
+ readonly TEMPLATE_PARSE_ERROR: "E6002";
93
+ readonly CONFIGURATION_ERROR: "E7000";
94
+ readonly CONFIG_NOT_FOUND: "E7001";
95
+ readonly CONFIG_INVALID: "E7002";
96
+ readonly GENERATION_ERROR: "E8000";
97
+ readonly GENERATION_FAILED: "E8001";
98
+ readonly ROLLBACK_FAILED: "E8002";
99
+ };
100
+ /**
101
+ * Error handler for consistent error output
102
+ */
103
+ export interface ErrorHandler {
104
+ handle(error: Error): void;
105
+ format(error: Error): string;
106
+ }
107
+ /**
108
+ * Default error handler with chalk output
109
+ */
110
+ export declare function createErrorHandler(options?: {
111
+ verbose?: boolean;
112
+ }): ErrorHandler;
113
+ /**
114
+ * Domain Exception Templates
115
+ * These are templates for generated domain exceptions
116
+ * SECURITY: Designed to prevent information disclosure (OWASP A01:2021)
117
+ */
118
+ export declare const DomainExceptionTemplates: {
119
+ entityNotFound: (entityName: string) => string;
120
+ entityAlreadyExists: (entityName: string) => string;
121
+ validationFailed: (entityName: string) => string;
122
+ operationFailed: (entityName: string) => string;
123
+ domainException: (entityName: string) => string;
124
+ };
125
+ /**
126
+ * Generate domain exceptions for an entity
127
+ */
128
+ export declare function generateDomainExceptions(entityName: string): string;
129
+ /**
130
+ * Error result type for operations that can fail
131
+ */
132
+ export type Result<T, E = Error> = {
133
+ success: true;
134
+ data: T;
135
+ } | {
136
+ success: false;
137
+ error: E;
138
+ };
139
+ export declare function ok<T>(data: T): Result<T, never>;
140
+ export declare function err<E>(error: E): Result<never, E>;
141
+ /**
142
+ * Try-catch wrapper returning Result type
143
+ */
144
+ export declare function tryAsync<T>(fn: () => Promise<T>): Promise<Result<T, Error>>;
145
+ export declare function trySync<T>(fn: () => T): Result<T, Error>;
@@ -0,0 +1,422 @@
1
+ "use strict";
2
+ /**
3
+ * Unified Error & Exception Framework
4
+ * Provides centralized exception handling for CLI and generated code
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DomainExceptionTemplates = exports.ErrorCodes = exports.GenerationError = exports.SchemaError = exports.RelationError = exports.ConfigurationError = exports.TemplateError = exports.CircularDependencyError = exports.DuplicateEntityError = exports.InvalidFieldError = exports.EntityNotFoundError = exports.ModuleNotFoundError = exports.FileExistsError = exports.FileNotFoundError = exports.ValidationError = exports.CliError = void 0;
8
+ exports.createErrorHandler = createErrorHandler;
9
+ exports.generateDomainExceptions = generateDomainExceptions;
10
+ exports.ok = ok;
11
+ exports.err = err;
12
+ exports.tryAsync = tryAsync;
13
+ exports.trySync = trySync;
14
+ /**
15
+ * Base CLI Error with error codes
16
+ */
17
+ class CliError extends Error {
18
+ constructor(message, code, options) {
19
+ super(message);
20
+ this.name = 'CliError';
21
+ this.code = code;
22
+ this.details = options?.details;
23
+ this.suggestion = options?.suggestion;
24
+ this.cause = options?.cause;
25
+ }
26
+ toJSON() {
27
+ return {
28
+ name: this.name,
29
+ code: this.code,
30
+ message: this.message,
31
+ details: this.details,
32
+ suggestion: this.suggestion,
33
+ };
34
+ }
35
+ }
36
+ exports.CliError = CliError;
37
+ // Specific error classes
38
+ class ValidationError extends CliError {
39
+ constructor(message, details) {
40
+ super(message, 'VALIDATION_ERROR', { details });
41
+ this.name = 'ValidationError';
42
+ }
43
+ }
44
+ exports.ValidationError = ValidationError;
45
+ class FileNotFoundError extends CliError {
46
+ constructor(filePath) {
47
+ super(`File not found: ${filePath}`, 'FILE_NOT_FOUND', {
48
+ details: { filePath },
49
+ suggestion: `Ensure the file exists at the specified path`,
50
+ });
51
+ this.name = 'FileNotFoundError';
52
+ }
53
+ }
54
+ exports.FileNotFoundError = FileNotFoundError;
55
+ class FileExistsError extends CliError {
56
+ constructor(filePath) {
57
+ super(`File already exists: ${filePath}`, 'FILE_EXISTS', {
58
+ details: { filePath },
59
+ suggestion: `Use --force to overwrite or choose a different name`,
60
+ });
61
+ this.name = 'FileExistsError';
62
+ }
63
+ }
64
+ exports.FileExistsError = FileExistsError;
65
+ class ModuleNotFoundError extends CliError {
66
+ constructor(moduleName) {
67
+ super(`Module not found: ${moduleName}`, 'MODULE_NOT_FOUND', {
68
+ details: { moduleName },
69
+ suggestion: `Create the module first with: ddd g module ${moduleName}`,
70
+ });
71
+ this.name = 'ModuleNotFoundError';
72
+ }
73
+ }
74
+ exports.ModuleNotFoundError = ModuleNotFoundError;
75
+ class EntityNotFoundError extends CliError {
76
+ constructor(entityName, moduleName) {
77
+ super(`Entity not found: ${entityName}`, 'ENTITY_NOT_FOUND', {
78
+ details: { entityName, moduleName },
79
+ suggestion: moduleName
80
+ ? `Create the entity first with: ddd g entity ${entityName} -m ${moduleName}`
81
+ : `Create the entity first with: ddd g entity ${entityName}`,
82
+ });
83
+ this.name = 'EntityNotFoundError';
84
+ }
85
+ }
86
+ exports.EntityNotFoundError = EntityNotFoundError;
87
+ class InvalidFieldError extends CliError {
88
+ constructor(fieldStr, reason) {
89
+ super(`Invalid field definition: ${fieldStr}`, 'INVALID_FIELD', {
90
+ details: { fieldStr, reason },
91
+ suggestion: `Use format: name:type:modifier (e.g., email:string:unique)`,
92
+ });
93
+ this.name = 'InvalidFieldError';
94
+ }
95
+ }
96
+ exports.InvalidFieldError = InvalidFieldError;
97
+ class DuplicateEntityError extends CliError {
98
+ constructor(entityName, existingPath) {
99
+ super(`Entity already exists: ${entityName}`, 'DUPLICATE_ENTITY', {
100
+ details: { entityName, existingPath },
101
+ suggestion: `Use a different name or remove the existing entity first`,
102
+ });
103
+ this.name = 'DuplicateEntityError';
104
+ }
105
+ }
106
+ exports.DuplicateEntityError = DuplicateEntityError;
107
+ class CircularDependencyError extends CliError {
108
+ constructor(chain) {
109
+ super(`Circular dependency detected: ${chain.join(' -> ')}`, 'CIRCULAR_DEPENDENCY', {
110
+ details: { chain },
111
+ suggestion: `Break the cycle by introducing an interface or restructuring the modules`,
112
+ });
113
+ this.name = 'CircularDependencyError';
114
+ }
115
+ }
116
+ exports.CircularDependencyError = CircularDependencyError;
117
+ class TemplateError extends CliError {
118
+ constructor(templateName, reason) {
119
+ super(`Template error in ${templateName}: ${reason}`, 'TEMPLATE_ERROR', {
120
+ details: { templateName, reason },
121
+ });
122
+ this.name = 'TemplateError';
123
+ }
124
+ }
125
+ exports.TemplateError = TemplateError;
126
+ class ConfigurationError extends CliError {
127
+ constructor(message, configKey) {
128
+ super(message, 'CONFIGURATION_ERROR', {
129
+ details: { configKey },
130
+ suggestion: `Check your .dddrc.json configuration file`,
131
+ });
132
+ this.name = 'ConfigurationError';
133
+ }
134
+ }
135
+ exports.ConfigurationError = ConfigurationError;
136
+ class RelationError extends CliError {
137
+ constructor(message, details) {
138
+ super(message, 'RELATION_ERROR', {
139
+ details,
140
+ suggestion: `Ensure both entities exist and relation types are compatible`,
141
+ });
142
+ this.name = 'RelationError';
143
+ }
144
+ }
145
+ exports.RelationError = RelationError;
146
+ class SchemaError extends CliError {
147
+ constructor(message, details) {
148
+ super(message, 'SCHEMA_ERROR', { details });
149
+ this.name = 'SchemaError';
150
+ }
151
+ }
152
+ exports.SchemaError = SchemaError;
153
+ class GenerationError extends CliError {
154
+ constructor(message, details) {
155
+ super(message, 'GENERATION_ERROR', { details });
156
+ this.name = 'GenerationError';
157
+ }
158
+ }
159
+ exports.GenerationError = GenerationError;
160
+ /**
161
+ * Error codes for structured error handling
162
+ */
163
+ exports.ErrorCodes = {
164
+ // Validation errors (1xxx)
165
+ VALIDATION_ERROR: 'E1000',
166
+ INVALID_FIELD: 'E1001',
167
+ INVALID_NAME: 'E1002',
168
+ INVALID_TYPE: 'E1003',
169
+ MISSING_REQUIRED: 'E1004',
170
+ SCHEMA_INVALID: 'E1005',
171
+ // File errors (2xxx)
172
+ FILE_NOT_FOUND: 'E2000',
173
+ FILE_EXISTS: 'E2001',
174
+ FILE_WRITE_ERROR: 'E2002',
175
+ FILE_READ_ERROR: 'E2003',
176
+ DIRECTORY_NOT_FOUND: 'E2004',
177
+ // Entity errors (3xxx)
178
+ ENTITY_NOT_FOUND: 'E3000',
179
+ DUPLICATE_ENTITY: 'E3001',
180
+ ENTITY_INVALID: 'E3002',
181
+ // Module errors (4xxx)
182
+ MODULE_NOT_FOUND: 'E4000',
183
+ DUPLICATE_MODULE: 'E4001',
184
+ MODULE_INVALID: 'E4002',
185
+ // Relation errors (5xxx)
186
+ RELATION_ERROR: 'E5000',
187
+ CIRCULAR_DEPENDENCY: 'E5001',
188
+ INVALID_RELATION_TYPE: 'E5002',
189
+ MISSING_INVERSE_SIDE: 'E5003',
190
+ // Template errors (6xxx)
191
+ TEMPLATE_ERROR: 'E6000',
192
+ TEMPLATE_NOT_FOUND: 'E6001',
193
+ TEMPLATE_PARSE_ERROR: 'E6002',
194
+ // Configuration errors (7xxx)
195
+ CONFIGURATION_ERROR: 'E7000',
196
+ CONFIG_NOT_FOUND: 'E7001',
197
+ CONFIG_INVALID: 'E7002',
198
+ // Generation errors (8xxx)
199
+ GENERATION_ERROR: 'E8000',
200
+ GENERATION_FAILED: 'E8001',
201
+ ROLLBACK_FAILED: 'E8002',
202
+ };
203
+ /**
204
+ * Default error handler with chalk output
205
+ */
206
+ function createErrorHandler(options = {}) {
207
+ return {
208
+ handle(error) {
209
+ console.error(this.format(error));
210
+ if (options.verbose && error.stack) {
211
+ console.error(error.stack);
212
+ }
213
+ },
214
+ format(error) {
215
+ if (error instanceof CliError) {
216
+ let msg = `Error [${error.code}]: ${error.message}`;
217
+ if (error.suggestion) {
218
+ msg += `\n Suggestion: ${error.suggestion}`;
219
+ }
220
+ if (options.verbose && error.details) {
221
+ msg += `\n Details: ${JSON.stringify(error.details, null, 2)}`;
222
+ }
223
+ return msg;
224
+ }
225
+ return `Error: ${error.message}`;
226
+ },
227
+ };
228
+ }
229
+ /**
230
+ * Domain Exception Templates
231
+ * These are templates for generated domain exceptions
232
+ * SECURITY: Designed to prevent information disclosure (OWASP A01:2021)
233
+ */
234
+ exports.DomainExceptionTemplates = {
235
+ entityNotFound: (entityName) => `
236
+ import { NotFoundException, Logger } from '@nestjs/common';
237
+
238
+ export class ${entityName}NotFoundException extends NotFoundException {
239
+ private readonly logger = new Logger(${entityName}NotFoundException.name);
240
+
241
+ constructor(id: string) {
242
+ // Don't expose internal IDs in production
243
+ const isProduction = process.env.NODE_ENV === 'production';
244
+ const message = isProduction
245
+ ? '${entityName} not found'
246
+ : \`${entityName} with id \${id} not found\`;
247
+
248
+ super(message);
249
+
250
+ // Log the actual ID for debugging
251
+ this.logger.debug(\`${entityName} not found: \${id}\`);
252
+ }
253
+ }
254
+ `,
255
+ entityAlreadyExists: (entityName) => `
256
+ import { ConflictException, Logger } from '@nestjs/common';
257
+
258
+ export class ${entityName}AlreadyExistsException extends ConflictException {
259
+ private readonly logger = new Logger(${entityName}AlreadyExistsException.name);
260
+
261
+ constructor(identifier: string) {
262
+ // Don't expose which field/value conflicts in production
263
+ const isProduction = process.env.NODE_ENV === 'production';
264
+ const message = isProduction
265
+ ? '${entityName} already exists'
266
+ : \`${entityName} with identifier \${identifier} already exists\`;
267
+
268
+ super(message);
269
+ this.logger.debug(\`${entityName} conflict: \${identifier}\`);
270
+ }
271
+ }
272
+ `,
273
+ validationFailed: (entityName) => `
274
+ import { BadRequestException, Logger } from '@nestjs/common';
275
+
276
+ export class ${entityName}ValidationException extends BadRequestException {
277
+ private readonly logger = new Logger(${entityName}ValidationException.name);
278
+
279
+ constructor(errors: string[]) {
280
+ // In production, provide generic message; in dev, show field errors
281
+ const isProduction = process.env.NODE_ENV === 'production';
282
+ const message = isProduction
283
+ ? { message: 'Validation failed', errorCount: errors.length }
284
+ : { message: '${entityName} validation failed', errors };
285
+
286
+ super(message);
287
+ this.logger.debug(\`Validation errors: \${errors.join(', ')}\`);
288
+ }
289
+ }
290
+ `,
291
+ operationFailed: (entityName) => `
292
+ import { InternalServerErrorException, Logger } from '@nestjs/common';
293
+
294
+ export class ${entityName}OperationFailedException extends InternalServerErrorException {
295
+ private readonly logger = new Logger(${entityName}OperationFailedException.name);
296
+
297
+ constructor(operation: string, reason?: string) {
298
+ // NEVER expose internal error details to client in production
299
+ const isProduction = process.env.NODE_ENV === 'production';
300
+ const clientMessage = isProduction
301
+ ? 'An error occurred processing your request'
302
+ : \`${entityName} \${operation} failed\`;
303
+
304
+ super(clientMessage);
305
+
306
+ // Log the actual reason for debugging
307
+ this.logger.error(\`${entityName} \${operation} failed: \${reason || 'unknown'}\`);
308
+ }
309
+ }
310
+ `,
311
+ domainException: (entityName) => `
312
+ import { HttpException, HttpStatus, Logger } from '@nestjs/common';
313
+
314
+ /**
315
+ * Base domain exception with secure error handling
316
+ * Does not expose internal details in production
317
+ */
318
+ export abstract class ${entityName}DomainException extends HttpException {
319
+ protected readonly logger = new Logger(${entityName}DomainException.name);
320
+ protected readonly isProduction = process.env.NODE_ENV === 'production';
321
+
322
+ constructor(
323
+ publicMessage: string,
324
+ internalMessage: string,
325
+ status: HttpStatus = HttpStatus.BAD_REQUEST
326
+ ) {
327
+ // Use generic message in production
328
+ super(
329
+ process.env.NODE_ENV === 'production' ? publicMessage : internalMessage,
330
+ status
331
+ );
332
+
333
+ // Always log the internal message for debugging
334
+ this.logger.debug(internalMessage);
335
+ }
336
+ }
337
+
338
+ export class ${entityName}NotFoundException extends ${entityName}DomainException {
339
+ constructor(id: string) {
340
+ super(
341
+ '${entityName} not found',
342
+ \`${entityName} with id \${id} not found\`,
343
+ HttpStatus.NOT_FOUND
344
+ );
345
+ }
346
+ }
347
+
348
+ export class ${entityName}AlreadyExistsException extends ${entityName}DomainException {
349
+ constructor(field: string, value: string) {
350
+ super(
351
+ '${entityName} already exists',
352
+ \`${entityName} with \${field} '\${value}' already exists\`,
353
+ HttpStatus.CONFLICT
354
+ );
355
+ }
356
+ }
357
+
358
+ export class ${entityName}ValidationException extends ${entityName}DomainException {
359
+ constructor(errors: string[]) {
360
+ super(
361
+ 'Validation failed',
362
+ \`Validation failed: \${errors.join(', ')}\`,
363
+ HttpStatus.BAD_REQUEST
364
+ );
365
+ }
366
+ }
367
+
368
+ export class ${entityName}InvalidStateException extends ${entityName}DomainException {
369
+ constructor(currentState: string, expectedState: string) {
370
+ super(
371
+ 'Operation not allowed',
372
+ \`Cannot perform operation: ${entityName} is in '\${currentState}' state, expected '\${expectedState}'\`,
373
+ HttpStatus.UNPROCESSABLE_ENTITY
374
+ );
375
+ }
376
+ }
377
+
378
+ export class ${entityName}UnauthorizedException extends ${entityName}DomainException {
379
+ constructor(action: string) {
380
+ super(
381
+ 'Unauthorized',
382
+ \`Unauthorized to \${action} ${entityName}\`,
383
+ HttpStatus.FORBIDDEN
384
+ );
385
+ }
386
+ }
387
+ `,
388
+ };
389
+ /**
390
+ * Generate domain exceptions for an entity
391
+ */
392
+ function generateDomainExceptions(entityName) {
393
+ return exports.DomainExceptionTemplates.domainException(entityName);
394
+ }
395
+ function ok(data) {
396
+ return { success: true, data };
397
+ }
398
+ function err(error) {
399
+ return { success: false, error };
400
+ }
401
+ /**
402
+ * Try-catch wrapper returning Result type
403
+ */
404
+ async function tryAsync(fn) {
405
+ try {
406
+ const data = await fn();
407
+ return ok(data);
408
+ }
409
+ catch (error) {
410
+ return err(error instanceof Error ? error : new Error(String(error)));
411
+ }
412
+ }
413
+ function trySync(fn) {
414
+ try {
415
+ const data = fn();
416
+ return ok(data);
417
+ }
418
+ catch (error) {
419
+ return err(error instanceof Error ? error : new Error(String(error)));
420
+ }
421
+ }
422
+ //# sourceMappingURL=error.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.utils.js","sourceRoot":"","sources":["../../src/utils/error.utils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAgOH,gDAuBC;AA0KD,4DAEC;AASD,gBAEC;AAED,kBAEC;AAKD,4BAOC;AAED,0BAOC;AArcD;;GAEG;AACH,MAAa,QAAS,SAAQ,KAAK;IAMjC,YACE,OAAe,EACf,IAAY,EACZ,OAIC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;QAChC,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;QACtC,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;IAC9B,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;CACF;AAhCD,4BAgCC;AAED,yBAAyB;AACzB,MAAa,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED,MAAa,iBAAkB,SAAQ,QAAQ;IAC7C,YAAY,QAAgB;QAC1B,KAAK,CAAC,mBAAmB,QAAQ,EAAE,EAAE,gBAAgB,EAAE;YACrD,OAAO,EAAE,EAAE,QAAQ,EAAE;YACrB,UAAU,EAAE,8CAA8C;SAC3D,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AARD,8CAQC;AAED,MAAa,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,QAAgB;QAC1B,KAAK,CAAC,wBAAwB,QAAQ,EAAE,EAAE,aAAa,EAAE;YACvD,OAAO,EAAE,EAAE,QAAQ,EAAE;YACrB,UAAU,EAAE,qDAAqD;SAClE,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AARD,0CAQC;AAED,MAAa,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,UAAkB;QAC5B,KAAK,CAAC,qBAAqB,UAAU,EAAE,EAAE,kBAAkB,EAAE;YAC3D,OAAO,EAAE,EAAE,UAAU,EAAE;YACvB,UAAU,EAAE,8CAA8C,UAAU,EAAE;SACvE,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AARD,kDAQC;AAED,MAAa,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,UAAkB,EAAE,UAAmB;QACjD,KAAK,CAAC,qBAAqB,UAAU,EAAE,EAAE,kBAAkB,EAAE;YAC3D,OAAO,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE;YACnC,UAAU,EAAE,UAAU;gBACpB,CAAC,CAAC,8CAA8C,UAAU,OAAO,UAAU,EAAE;gBAC7E,CAAC,CAAC,8CAA8C,UAAU,EAAE;SAC/D,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAVD,kDAUC;AAED,MAAa,iBAAkB,SAAQ,QAAQ;IAC7C,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CAAC,6BAA6B,QAAQ,EAAE,EAAE,eAAe,EAAE;YAC9D,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;YAC7B,UAAU,EAAE,4DAA4D;SACzE,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AARD,8CAQC;AAED,MAAa,oBAAqB,SAAQ,QAAQ;IAChD,YAAY,UAAkB,EAAE,YAAoB;QAClD,KAAK,CAAC,0BAA0B,UAAU,EAAE,EAAE,kBAAkB,EAAE;YAChE,OAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE;YACrC,UAAU,EAAE,0DAA0D;SACvE,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AARD,oDAQC;AAED,MAAa,uBAAwB,SAAQ,QAAQ;IACnD,YAAY,KAAe;QACzB,KAAK,CAAC,iCAAiC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,qBAAqB,EAAE;YAClF,OAAO,EAAE,EAAE,KAAK,EAAE;YAClB,UAAU,EAAE,0EAA0E;SACvF,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AARD,0DAQC;AAED,MAAa,aAAc,SAAQ,QAAQ;IACzC,YAAY,YAAoB,EAAE,MAAc;QAC9C,KAAK,CAAC,qBAAqB,YAAY,KAAK,MAAM,EAAE,EAAE,gBAAgB,EAAE;YACtE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAPD,sCAOC;AAED,MAAa,kBAAmB,SAAQ,QAAQ;IAC9C,YAAY,OAAe,EAAE,SAAkB;QAC7C,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE;YACpC,OAAO,EAAE,EAAE,SAAS,EAAE;YACtB,UAAU,EAAE,2CAA2C;SACxD,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AARD,gDAQC;AAED,MAAa,aAAc,SAAQ,QAAQ;IACzC,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE;YAC/B,OAAO;YACP,UAAU,EAAE,8DAA8D;SAC3E,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AARD,sCAQC;AAED,MAAa,WAAY,SAAQ,QAAQ;IACvC,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AALD,kCAKC;AAED,MAAa,eAAgB,SAAQ,QAAQ;IAC3C,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AALD,0CAKC;AAED;;GAEG;AACU,QAAA,UAAU,GAAG;IACxB,2BAA2B;IAC3B,gBAAgB,EAAE,OAAO;IACzB,aAAa,EAAE,OAAO;IACtB,YAAY,EAAE,OAAO;IACrB,YAAY,EAAE,OAAO;IACrB,gBAAgB,EAAE,OAAO;IACzB,cAAc,EAAE,OAAO;IAEvB,qBAAqB;IACrB,cAAc,EAAE,OAAO;IACvB,WAAW,EAAE,OAAO;IACpB,gBAAgB,EAAE,OAAO;IACzB,eAAe,EAAE,OAAO;IACxB,mBAAmB,EAAE,OAAO;IAE5B,uBAAuB;IACvB,gBAAgB,EAAE,OAAO;IACzB,gBAAgB,EAAE,OAAO;IACzB,cAAc,EAAE,OAAO;IAEvB,uBAAuB;IACvB,gBAAgB,EAAE,OAAO;IACzB,gBAAgB,EAAE,OAAO;IACzB,cAAc,EAAE,OAAO;IAEvB,yBAAyB;IACzB,cAAc,EAAE,OAAO;IACvB,mBAAmB,EAAE,OAAO;IAC5B,qBAAqB,EAAE,OAAO;IAC9B,oBAAoB,EAAE,OAAO;IAE7B,yBAAyB;IACzB,cAAc,EAAE,OAAO;IACvB,kBAAkB,EAAE,OAAO;IAC3B,oBAAoB,EAAE,OAAO;IAE7B,8BAA8B;IAC9B,mBAAmB,EAAE,OAAO;IAC5B,gBAAgB,EAAE,OAAO;IACzB,cAAc,EAAE,OAAO;IAEvB,2BAA2B;IAC3B,gBAAgB,EAAE,OAAO;IACzB,iBAAiB,EAAE,OAAO;IAC1B,eAAe,EAAE,OAAO;CAChB,CAAC;AAUX;;GAEG;AACH,SAAgB,kBAAkB,CAAC,UAAiC,EAAE;IACpE,OAAO;QACL,MAAM,CAAC,KAAY;YACjB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAClC,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,CAAC,KAAY;YACjB,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;gBAC9B,IAAI,GAAG,GAAG,UAAU,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;gBACpD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;oBACrB,GAAG,IAAI,mBAAmB,KAAK,CAAC,UAAU,EAAE,CAAC;gBAC/C,CAAC;gBACD,IAAI,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACrC,GAAG,IAAI,gBAAgB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClE,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC;YACD,OAAO,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACU,QAAA,wBAAwB,GAAG;IACtC,cAAc,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC;;;eAG3B,UAAU;yCACgB,UAAU;;;;;;WAMxC,UAAU;YACT,UAAU;;;;;0BAKI,UAAU;;;CAGnC;IAEC,mBAAmB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC;;;eAGhC,UAAU;yCACgB,UAAU;;;;;;WAMxC,UAAU;YACT,UAAU;;;0BAGI,UAAU;;;CAGnC;IAEC,gBAAgB,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC;;;eAG7B,UAAU;yCACgB,UAAU;;;;;;;sBAO7B,UAAU;;;;;;CAM/B;IAEC,eAAe,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC;;;eAG5B,UAAU;yCACgB,UAAU;;;;;;;YAOvC,UAAU;;;;;0BAKI,UAAU;;;CAGnC;IAEC,eAAe,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC;;;;;;;wBAOnB,UAAU;2CACS,UAAU;;;;;;;;;;;;;;;;;;;eAmBtC,UAAU,6BAA6B,UAAU;;;SAGvD,UAAU;UACT,UAAU;;;;;;eAML,UAAU,kCAAkC,UAAU;;;SAG5D,UAAU;UACT,UAAU;;;;;;eAML,UAAU,+BAA+B,UAAU;;;;;;;;;;eAUnD,UAAU,iCAAiC,UAAU;;;;oCAIhC,UAAU;;;;;;eAM/B,UAAU,iCAAiC,UAAU;;;;qCAI/B,UAAU;;;;;CAK9C;CACA,CAAC;AAEF;;GAEG;AACH,SAAgB,wBAAwB,CAAC,UAAkB;IACzD,OAAO,gCAAwB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAC9D,CAAC;AASD,SAAgB,EAAE,CAAI,IAAO;IAC3B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAgB,GAAG,CAAI,KAAQ;IAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,QAAQ,CAAI,EAAoB;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAgB,OAAO,CAAI,EAAW;IACpC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,GAAG,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;AACH,CAAC"}
@@ -0,0 +1,54 @@
1
+ export interface FieldDefinition {
2
+ name: string;
3
+ camelCase: string;
4
+ snakeCase: string;
5
+ pascalCase: string;
6
+ type: string;
7
+ tsType: string;
8
+ dbType: string;
9
+ prismaType: string;
10
+ isRequired: boolean;
11
+ isOptional: boolean;
12
+ isUnique: boolean;
13
+ isArray: boolean;
14
+ validators: string[];
15
+ description: string;
16
+ example?: string;
17
+ defaultValue?: string;
18
+ enumValues?: string[];
19
+ isRelation: boolean;
20
+ relationType?: 'OneToOne' | 'OneToMany' | 'ManyToOne' | 'ManyToMany';
21
+ relationTarget?: string;
22
+ relationInverse?: string;
23
+ }
24
+ export interface ParsedFields {
25
+ fields: FieldDefinition[];
26
+ hasEmail: boolean;
27
+ hasDate: boolean;
28
+ hasEnum: boolean;
29
+ hasRelation: boolean;
30
+ }
31
+ /**
32
+ * Parse field definitions from CLI --fields flag
33
+ * Format: "name:type:modifier1:modifier2"
34
+ *
35
+ * Examples:
36
+ * "name:string" -> required string
37
+ * "email:string:unique" -> required unique string with IsEmail
38
+ * "age:number:optional" -> optional number
39
+ * "status:enum:active,inactive" -> enum with values
40
+ * "tags:string[]" -> string array
41
+ * "userId:uuid:relation" -> foreign key relation
42
+ */
43
+ export declare function parseFields(fieldsString: string): ParsedFields;
44
+ /**
45
+ * Generate field-aware template data
46
+ */
47
+ export declare function generateFieldsTemplateData(fields: FieldDefinition[]): {
48
+ entityProperties: string;
49
+ entityPropsInterface: string;
50
+ dtoProperties: string;
51
+ ormColumns: string;
52
+ migrationColumns: string;
53
+ responseProperties: string;
54
+ };