nestjs-ddd-cli 2.2.0 → 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.
- package/README.md +247 -408
- package/ddd.schema.json +111 -0
- package/dist/commands/aggregate-validator.d.ts +9 -0
- package/dist/commands/aggregate-validator.js +953 -0
- package/dist/commands/aggregate-validator.js.map +1 -0
- package/dist/commands/ai-assist.d.ts +8 -0
- package/dist/commands/ai-assist.js +337 -0
- package/dist/commands/ai-assist.js.map +1 -0
- package/dist/commands/api-contracts.d.ts +9 -0
- package/dist/commands/api-contracts.js +1368 -0
- package/dist/commands/api-contracts.js.map +1 -0
- package/dist/commands/api-docs.d.ts +8 -0
- package/dist/commands/api-docs.js +408 -0
- package/dist/commands/api-docs.js.map +1 -0
- package/dist/commands/api-versioning.d.ts +11 -0
- package/dist/commands/api-versioning.js +643 -0
- package/dist/commands/api-versioning.js.map +1 -0
- package/dist/commands/audit-logging.d.ts +9 -0
- package/dist/commands/audit-logging.js +1129 -0
- package/dist/commands/audit-logging.js.map +1 -0
- package/dist/commands/batch-generate.d.ts +10 -0
- package/dist/commands/batch-generate.js +405 -0
- package/dist/commands/batch-generate.js.map +1 -0
- package/dist/commands/caching-strategies.d.ts +9 -0
- package/dist/commands/caching-strategies.js +874 -0
- package/dist/commands/caching-strategies.js.map +1 -0
- package/dist/commands/code-analyzer.d.ts +42 -0
- package/dist/commands/code-analyzer.js +474 -0
- package/dist/commands/code-analyzer.js.map +1 -0
- package/dist/commands/database-seeding.d.ts +6 -0
- package/dist/commands/database-seeding.js +621 -0
- package/dist/commands/database-seeding.js.map +1 -0
- package/dist/commands/db-optimization.d.ts +7 -0
- package/dist/commands/db-optimization.js +687 -0
- package/dist/commands/db-optimization.js.map +1 -0
- package/dist/commands/dependency-graph.d.ts +6 -0
- package/dist/commands/dependency-graph.js +329 -0
- package/dist/commands/dependency-graph.js.map +1 -0
- package/dist/commands/doctor-enhanced.d.ts +22 -0
- package/dist/commands/doctor-enhanced.js +543 -0
- package/dist/commands/doctor-enhanced.js.map +1 -0
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.js +151 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/env-manager.d.ts +6 -0
- package/dist/commands/env-manager.js +419 -0
- package/dist/commands/env-manager.js.map +1 -0
- package/dist/commands/event-sourcing-full.d.ts +10 -0
- package/dist/commands/event-sourcing-full.js +1107 -0
- package/dist/commands/event-sourcing-full.js.map +1 -0
- package/dist/commands/feature-flags.d.ts +9 -0
- package/dist/commands/feature-flags.js +824 -0
- package/dist/commands/feature-flags.js.map +1 -0
- package/dist/commands/filter-dsl.d.ts +10 -0
- package/dist/commands/filter-dsl.js +1407 -0
- package/dist/commands/filter-dsl.js.map +1 -0
- package/dist/commands/generate-all.js +485 -32
- package/dist/commands/generate-all.js.map +1 -1
- package/dist/commands/generate-deployment.d.ts +8 -0
- package/dist/commands/generate-deployment.js +746 -0
- package/dist/commands/generate-deployment.js.map +1 -0
- package/dist/commands/generate-domain-service.d.ts +14 -0
- package/dist/commands/generate-domain-service.js +796 -0
- package/dist/commands/generate-domain-service.js.map +1 -0
- package/dist/commands/generate-entity.js +82 -24
- package/dist/commands/generate-entity.js.map +1 -1
- package/dist/commands/generate-from-schema.d.ts +56 -0
- package/dist/commands/generate-from-schema.js +222 -0
- package/dist/commands/generate-from-schema.js.map +1 -0
- package/dist/commands/generate-orchestrator.d.ts +14 -0
- package/dist/commands/generate-orchestrator.js +887 -0
- package/dist/commands/generate-orchestrator.js.map +1 -0
- package/dist/commands/generate-repository.d.ts +14 -0
- package/dist/commands/generate-repository.js +1019 -0
- package/dist/commands/generate-repository.js.map +1 -0
- package/dist/commands/generate-shared.d.ts +4 -0
- package/dist/commands/generate-shared.js +388 -0
- package/dist/commands/generate-shared.js.map +1 -0
- package/dist/commands/generate-value-object.d.ts +32 -0
- package/dist/commands/generate-value-object.js +700 -0
- package/dist/commands/generate-value-object.js.map +1 -0
- package/dist/commands/graphql-subscriptions.d.ts +6 -0
- package/dist/commands/graphql-subscriptions.js +607 -0
- package/dist/commands/graphql-subscriptions.js.map +1 -0
- package/dist/commands/graphql-types.d.ts +5 -0
- package/dist/commands/graphql-types.js +423 -0
- package/dist/commands/graphql-types.js.map +1 -0
- package/dist/commands/health-probes-advanced.d.ts +6 -0
- package/dist/commands/health-probes-advanced.js +655 -0
- package/dist/commands/health-probes-advanced.js.map +1 -0
- package/dist/commands/i18n-setup.d.ts +10 -0
- package/dist/commands/i18n-setup.js +677 -0
- package/dist/commands/i18n-setup.js.map +1 -0
- package/dist/commands/init-config.d.ts +6 -0
- package/dist/commands/init-config.js +370 -0
- package/dist/commands/init-config.js.map +1 -0
- package/dist/commands/init-project.js +56 -6
- package/dist/commands/init-project.js.map +1 -1
- package/dist/commands/interactive-scaffold.d.ts +5 -0
- package/dist/commands/interactive-scaffold.js +271 -0
- package/dist/commands/interactive-scaffold.js.map +1 -0
- package/dist/commands/metrics-prometheus.d.ts +6 -0
- package/dist/commands/metrics-prometheus.js +681 -0
- package/dist/commands/metrics-prometheus.js.map +1 -0
- package/dist/commands/migration-engine.d.ts +6 -0
- package/dist/commands/migration-engine.js +446 -0
- package/dist/commands/migration-engine.js.map +1 -0
- package/dist/commands/migration.d.ts +12 -0
- package/dist/commands/migration.js +484 -0
- package/dist/commands/migration.js.map +1 -0
- package/dist/commands/monorepo.d.ts +8 -0
- package/dist/commands/monorepo.js +483 -0
- package/dist/commands/monorepo.js.map +1 -0
- package/dist/commands/multi-database.d.ts +5 -0
- package/dist/commands/multi-database.js +439 -0
- package/dist/commands/multi-database.js.map +1 -0
- package/dist/commands/observability-tracing.d.ts +10 -0
- package/dist/commands/observability-tracing.js +740 -0
- package/dist/commands/observability-tracing.js.map +1 -0
- package/dist/commands/openapi-export.d.ts +8 -0
- package/dist/commands/openapi-export.js +359 -0
- package/dist/commands/openapi-export.js.map +1 -0
- package/dist/commands/perf-analyzer.d.ts +8 -0
- package/dist/commands/perf-analyzer.js +423 -0
- package/dist/commands/perf-analyzer.js.map +1 -0
- package/dist/commands/rate-limiting.d.ts +10 -0
- package/dist/commands/rate-limiting.js +953 -0
- package/dist/commands/rate-limiting.js.map +1 -0
- package/dist/commands/recipe-plugin.d.ts +56 -0
- package/dist/commands/recipe-plugin.js +315 -0
- package/dist/commands/recipe-plugin.js.map +1 -0
- package/dist/commands/recipe.d.ts +6 -0
- package/dist/commands/recipe.js +3941 -0
- package/dist/commands/recipe.js.map +1 -0
- package/dist/commands/recipes/elasticsearch.recipe.d.ts +1 -0
- package/dist/commands/recipes/elasticsearch.recipe.js +761 -0
- package/dist/commands/recipes/elasticsearch.recipe.js.map +1 -0
- package/dist/commands/recipes/event-sourcing.recipe.d.ts +1 -0
- package/dist/commands/recipes/event-sourcing.recipe.js +889 -0
- package/dist/commands/recipes/event-sourcing.recipe.js.map +1 -0
- package/dist/commands/recipes/index.d.ts +7 -0
- package/dist/commands/recipes/index.js +24 -0
- package/dist/commands/recipes/index.js.map +1 -0
- package/dist/commands/recipes/message-queue.recipe.d.ts +1 -0
- package/dist/commands/recipes/message-queue.recipe.js +706 -0
- package/dist/commands/recipes/message-queue.recipe.js.map +1 -0
- package/dist/commands/recipes/middleware.recipe.d.ts +1 -0
- package/dist/commands/recipes/middleware.recipe.js +383 -0
- package/dist/commands/recipes/middleware.recipe.js.map +1 -0
- package/dist/commands/recipes/multi-tenancy.recipe.d.ts +1 -0
- package/dist/commands/recipes/multi-tenancy.recipe.js +520 -0
- package/dist/commands/recipes/multi-tenancy.recipe.js.map +1 -0
- package/dist/commands/recipes/oauth2.recipe.d.ts +1 -0
- package/dist/commands/recipes/oauth2.recipe.js +472 -0
- package/dist/commands/recipes/oauth2.recipe.js.map +1 -0
- package/dist/commands/recipes/websocket.recipe.d.ts +1 -0
- package/dist/commands/recipes/websocket.recipe.js +453 -0
- package/dist/commands/recipes/websocket.recipe.js.map +1 -0
- package/dist/commands/resilience-patterns.d.ts +13 -0
- package/dist/commands/resilience-patterns.js +1029 -0
- package/dist/commands/resilience-patterns.js.map +1 -0
- package/dist/commands/security-patterns.d.ts +11 -0
- package/dist/commands/security-patterns.js +2233 -0
- package/dist/commands/security-patterns.js.map +1 -0
- package/dist/commands/template-debug.d.ts +27 -0
- package/dist/commands/template-debug.js +388 -0
- package/dist/commands/template-debug.js.map +1 -0
- package/dist/commands/test-factory-full.d.ts +9 -0
- package/dist/commands/test-factory-full.js +1570 -0
- package/dist/commands/test-factory-full.js.map +1 -0
- package/dist/commands/test-scaffold.d.ts +7 -0
- package/dist/commands/test-scaffold.js +621 -0
- package/dist/commands/test-scaffold.js.map +1 -0
- package/dist/index.js +1088 -0
- package/dist/index.js.map +1 -1
- package/dist/templates/ai-context/CLAUDE.md.hbs +158 -0
- package/dist/templates/ai-context/conventions.md.hbs +154 -0
- package/dist/templates/command/create-command.hbs +6 -14
- package/dist/templates/command/delete-command.hbs +19 -0
- package/dist/templates/command/update-command.hbs +24 -0
- package/dist/templates/controller/controller.hbs +64 -17
- package/dist/templates/dto/create-dto.hbs +29 -5
- package/dist/templates/dto/filter-dto.hbs +52 -0
- package/dist/templates/dto/filter-query.dto.hbs +148 -0
- package/dist/templates/dto/paginated-response.dto.hbs +29 -0
- package/dist/templates/dto/pagination-query.dto.hbs +30 -0
- package/dist/templates/dto/response-dto.hbs +38 -0
- package/dist/templates/dto/update-dto.hbs +11 -0
- package/dist/templates/entity/entity.hbs +32 -1
- package/dist/templates/event/domain-event.hbs +33 -7
- package/dist/templates/event/event-handler.hbs +40 -0
- package/dist/templates/exception/base-exceptions.hbs +69 -0
- package/dist/templates/exception/entity-not-found.exception.hbs +7 -0
- package/dist/templates/mapper/mapper.hbs +49 -24
- package/dist/templates/module/module.hbs +34 -10
- package/dist/templates/orm-entity/orm-entity.hbs +63 -12
- package/dist/templates/prisma/prisma-mapper.hbs +71 -0
- package/dist/templates/prisma/prisma-repository.hbs +114 -0
- package/dist/templates/prisma/prisma-schema.hbs +20 -0
- package/dist/templates/prisma/prisma-service.hbs +51 -0
- package/dist/templates/query/get-all.query.hbs +50 -0
- package/dist/templates/query/get-by-id.query.hbs +31 -0
- package/dist/templates/repository/repository.hbs +55 -13
- package/dist/templates/resolver/graphql-input.hbs +54 -0
- package/dist/templates/resolver/graphql-type.hbs +58 -0
- package/dist/templates/resolver/pagination-args.hbs +33 -0
- package/dist/templates/resolver/resolver.hbs +62 -0
- package/dist/templates/shared/prisma-query-builder.util.hbs +189 -0
- package/dist/templates/shared/query-builder.util.hbs +218 -0
- package/dist/templates/test/controller.spec.hbs +124 -0
- package/dist/templates/test/repository.spec.hbs +158 -0
- package/dist/templates/test/usecase.spec.hbs +116 -0
- package/dist/templates/usecase/create-usecase.hbs +19 -7
- package/dist/templates/usecase/delete-usecase.hbs +17 -0
- package/dist/templates/usecase/update-usecase.hbs +31 -0
- package/dist/utils/config.utils.d.ts +45 -0
- package/dist/utils/config.utils.js +211 -0
- package/dist/utils/config.utils.js.map +1 -0
- package/dist/utils/error.utils.d.ts +145 -0
- package/dist/utils/error.utils.js +422 -0
- package/dist/utils/error.utils.js.map +1 -0
- package/dist/utils/field.utils.d.ts +54 -0
- package/dist/utils/field.utils.js +389 -0
- package/dist/utils/field.utils.js.map +1 -0
- package/dist/utils/file.utils.d.ts +19 -8
- package/dist/utils/file.utils.js +135 -4
- package/dist/utils/file.utils.js.map +1 -1
- package/dist/utils/idempotency.utils.d.ts +123 -0
- package/dist/utils/idempotency.utils.js +444 -0
- package/dist/utils/idempotency.utils.js.map +1 -0
- package/dist/utils/naming.utils.js +26 -3
- package/dist/utils/naming.utils.js.map +1 -1
- package/dist/utils/performance.utils.d.ts +37 -0
- package/dist/utils/performance.utils.js +158 -0
- package/dist/utils/performance.utils.js.map +1 -0
- package/dist/utils/relation.utils.d.ts +92 -0
- package/dist/utils/relation.utils.js +388 -0
- package/dist/utils/relation.utils.js.map +1 -0
- package/dist/utils/rollback.utils.d.ts +49 -0
- package/dist/utils/rollback.utils.js +306 -0
- package/dist/utils/rollback.utils.js.map +1 -0
- package/dist/utils/schema.utils.d.ts +123 -0
- package/dist/utils/schema.utils.js +419 -0
- package/dist/utils/schema.utils.js.map +1 -0
- package/dist/utils/security.utils.d.ts +57 -0
- package/dist/utils/security.utils.js +315 -0
- package/dist/utils/security.utils.js.map +1 -0
- package/dist/utils/template-engine.utils.d.ts +80 -0
- package/dist/utils/template-engine.utils.js +463 -0
- package/dist/utils/template-engine.utils.js.map +1 -0
- package/dist/utils/validation-registry.utils.d.ts +160 -0
- package/dist/utils/validation-registry.utils.js +526 -0
- package/dist/utils/validation-registry.utils.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.initConfig = initConfig;
|
|
40
|
+
exports.listPresets = listPresets;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
const readline = __importStar(require("readline"));
|
|
45
|
+
const PRESETS = {
|
|
46
|
+
'minimal': {
|
|
47
|
+
name: 'Minimal',
|
|
48
|
+
description: 'Basic DDD structure with TypeORM and REST API',
|
|
49
|
+
config: {
|
|
50
|
+
orm: 'typeorm',
|
|
51
|
+
database: 'postgres',
|
|
52
|
+
features: {
|
|
53
|
+
graphql: false,
|
|
54
|
+
swagger: true,
|
|
55
|
+
cqrs: false,
|
|
56
|
+
eventSourcing: false,
|
|
57
|
+
},
|
|
58
|
+
naming: {
|
|
59
|
+
entitySuffix: '',
|
|
60
|
+
repositorySuffix: 'Repository',
|
|
61
|
+
serviceSuffix: 'Service',
|
|
62
|
+
controllerSuffix: 'Controller',
|
|
63
|
+
},
|
|
64
|
+
paths: {
|
|
65
|
+
modules: 'src/modules',
|
|
66
|
+
shared: 'src/shared',
|
|
67
|
+
templates: '.ddd/templates',
|
|
68
|
+
},
|
|
69
|
+
testing: {
|
|
70
|
+
framework: 'jest',
|
|
71
|
+
e2e: false,
|
|
72
|
+
factories: false,
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
'standard': {
|
|
77
|
+
name: 'Standard',
|
|
78
|
+
description: 'Full DDD with CQRS, Swagger, and test factories',
|
|
79
|
+
config: {
|
|
80
|
+
orm: 'typeorm',
|
|
81
|
+
database: 'postgres',
|
|
82
|
+
features: {
|
|
83
|
+
graphql: false,
|
|
84
|
+
swagger: true,
|
|
85
|
+
cqrs: true,
|
|
86
|
+
eventSourcing: false,
|
|
87
|
+
},
|
|
88
|
+
naming: {
|
|
89
|
+
entitySuffix: '',
|
|
90
|
+
repositorySuffix: 'Repository',
|
|
91
|
+
serviceSuffix: 'Service',
|
|
92
|
+
controllerSuffix: 'Controller',
|
|
93
|
+
},
|
|
94
|
+
paths: {
|
|
95
|
+
modules: 'src/modules',
|
|
96
|
+
shared: 'src/shared',
|
|
97
|
+
templates: '.ddd/templates',
|
|
98
|
+
},
|
|
99
|
+
testing: {
|
|
100
|
+
framework: 'jest',
|
|
101
|
+
e2e: true,
|
|
102
|
+
factories: true,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
'enterprise': {
|
|
107
|
+
name: 'Enterprise',
|
|
108
|
+
description: 'Full-featured with GraphQL, CQRS, Event Sourcing',
|
|
109
|
+
config: {
|
|
110
|
+
orm: 'typeorm',
|
|
111
|
+
database: 'postgres',
|
|
112
|
+
features: {
|
|
113
|
+
graphql: true,
|
|
114
|
+
swagger: true,
|
|
115
|
+
cqrs: true,
|
|
116
|
+
eventSourcing: true,
|
|
117
|
+
},
|
|
118
|
+
naming: {
|
|
119
|
+
entitySuffix: '',
|
|
120
|
+
repositorySuffix: 'Repository',
|
|
121
|
+
serviceSuffix: 'Service',
|
|
122
|
+
controllerSuffix: 'Controller',
|
|
123
|
+
},
|
|
124
|
+
paths: {
|
|
125
|
+
modules: 'src/modules',
|
|
126
|
+
shared: 'src/shared',
|
|
127
|
+
templates: '.ddd/templates',
|
|
128
|
+
},
|
|
129
|
+
testing: {
|
|
130
|
+
framework: 'jest',
|
|
131
|
+
e2e: true,
|
|
132
|
+
factories: true,
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
'prisma': {
|
|
137
|
+
name: 'Prisma',
|
|
138
|
+
description: 'Prisma ORM with modern TypeScript patterns',
|
|
139
|
+
config: {
|
|
140
|
+
orm: 'prisma',
|
|
141
|
+
database: 'postgres',
|
|
142
|
+
features: {
|
|
143
|
+
graphql: false,
|
|
144
|
+
swagger: true,
|
|
145
|
+
cqrs: true,
|
|
146
|
+
eventSourcing: false,
|
|
147
|
+
},
|
|
148
|
+
naming: {
|
|
149
|
+
entitySuffix: '',
|
|
150
|
+
repositorySuffix: 'Repository',
|
|
151
|
+
serviceSuffix: 'Service',
|
|
152
|
+
controllerSuffix: 'Controller',
|
|
153
|
+
},
|
|
154
|
+
paths: {
|
|
155
|
+
modules: 'src/modules',
|
|
156
|
+
shared: 'src/shared',
|
|
157
|
+
templates: '.ddd/templates',
|
|
158
|
+
},
|
|
159
|
+
testing: {
|
|
160
|
+
framework: 'jest',
|
|
161
|
+
e2e: true,
|
|
162
|
+
factories: true,
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
'graphql': {
|
|
167
|
+
name: 'GraphQL First',
|
|
168
|
+
description: 'GraphQL-centric with code-first schema generation',
|
|
169
|
+
config: {
|
|
170
|
+
orm: 'typeorm',
|
|
171
|
+
database: 'postgres',
|
|
172
|
+
features: {
|
|
173
|
+
graphql: true,
|
|
174
|
+
swagger: false,
|
|
175
|
+
cqrs: true,
|
|
176
|
+
eventSourcing: false,
|
|
177
|
+
},
|
|
178
|
+
naming: {
|
|
179
|
+
entitySuffix: '',
|
|
180
|
+
repositorySuffix: 'Repository',
|
|
181
|
+
serviceSuffix: 'Service',
|
|
182
|
+
controllerSuffix: 'Resolver',
|
|
183
|
+
},
|
|
184
|
+
paths: {
|
|
185
|
+
modules: 'src/modules',
|
|
186
|
+
shared: 'src/shared',
|
|
187
|
+
templates: '.ddd/templates',
|
|
188
|
+
},
|
|
189
|
+
testing: {
|
|
190
|
+
framework: 'jest',
|
|
191
|
+
e2e: true,
|
|
192
|
+
factories: true,
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
function createReadlineInterface() {
|
|
198
|
+
return readline.createInterface({
|
|
199
|
+
input: process.stdin,
|
|
200
|
+
output: process.stdout,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
async function question(rl, prompt) {
|
|
204
|
+
return new Promise((resolve) => {
|
|
205
|
+
rl.question(prompt, (answer) => {
|
|
206
|
+
resolve(answer.trim());
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
async function selectOption(rl, prompt, options, defaultIndex = 0) {
|
|
211
|
+
console.log(chalk_1.default.cyan(`\n${prompt}`));
|
|
212
|
+
options.forEach((opt, i) => {
|
|
213
|
+
const marker = i === defaultIndex ? chalk_1.default.green('→') : ' ';
|
|
214
|
+
console.log(` ${marker} ${i + 1}. ${opt}`);
|
|
215
|
+
});
|
|
216
|
+
const answer = await question(rl, chalk_1.default.gray(`Enter choice [${defaultIndex + 1}]: `));
|
|
217
|
+
const index = answer ? parseInt(answer, 10) - 1 : defaultIndex;
|
|
218
|
+
if (index >= 0 && index < options.length) {
|
|
219
|
+
return options[index];
|
|
220
|
+
}
|
|
221
|
+
return options[defaultIndex];
|
|
222
|
+
}
|
|
223
|
+
async function confirm(rl, prompt, defaultYes = true) {
|
|
224
|
+
const hint = defaultYes ? '[Y/n]' : '[y/N]';
|
|
225
|
+
const answer = await question(rl, chalk_1.default.cyan(`${prompt} ${hint}: `));
|
|
226
|
+
if (!answer)
|
|
227
|
+
return defaultYes;
|
|
228
|
+
return answer.toLowerCase().startsWith('y');
|
|
229
|
+
}
|
|
230
|
+
async function initConfig(options = {}) {
|
|
231
|
+
const configPath = path.join(process.cwd(), '.dddrc.json');
|
|
232
|
+
if (fs.existsSync(configPath) && !options.force) {
|
|
233
|
+
console.log(chalk_1.default.yellow('⚠️ Config file .dddrc.json already exists.'));
|
|
234
|
+
console.log(chalk_1.default.gray(' Use --force to overwrite.'));
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
console.log(chalk_1.default.bold.blue('\n🔧 NestJS DDD CLI Configuration Wizard\n'));
|
|
238
|
+
// If preset provided, use it directly
|
|
239
|
+
if (options.preset && PRESETS[options.preset]) {
|
|
240
|
+
const preset = PRESETS[options.preset];
|
|
241
|
+
fs.writeFileSync(configPath, JSON.stringify(preset.config, null, 2));
|
|
242
|
+
console.log(chalk_1.default.green(`✅ Created .dddrc.json with "${preset.name}" preset`));
|
|
243
|
+
printConfigSummary(preset.config);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const rl = createReadlineInterface();
|
|
247
|
+
try {
|
|
248
|
+
// Step 1: Choose preset or custom
|
|
249
|
+
console.log(chalk_1.default.bold('Available Presets:\n'));
|
|
250
|
+
Object.entries(PRESETS).forEach(([key, preset]) => {
|
|
251
|
+
console.log(` ${chalk_1.default.cyan(key.padEnd(12))} ${preset.description}`);
|
|
252
|
+
});
|
|
253
|
+
console.log(` ${chalk_1.default.cyan('custom'.padEnd(12))} Configure everything manually`);
|
|
254
|
+
const presetChoice = await question(rl, chalk_1.default.yellow('\nChoose preset [standard]: '));
|
|
255
|
+
const selectedPreset = presetChoice || 'standard';
|
|
256
|
+
if (selectedPreset !== 'custom' && PRESETS[selectedPreset]) {
|
|
257
|
+
const preset = PRESETS[selectedPreset];
|
|
258
|
+
// Ask if they want to customize
|
|
259
|
+
const customize = await confirm(rl, 'Customize this preset?', false);
|
|
260
|
+
if (!customize) {
|
|
261
|
+
fs.writeFileSync(configPath, JSON.stringify(preset.config, null, 2));
|
|
262
|
+
console.log(chalk_1.default.green(`\n✅ Created .dddrc.json with "${preset.name}" preset`));
|
|
263
|
+
printConfigSummary(preset.config);
|
|
264
|
+
rl.close();
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
// Start with preset as base for customization
|
|
268
|
+
const config = { ...preset.config };
|
|
269
|
+
await customizeConfig(rl, config);
|
|
270
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
271
|
+
console.log(chalk_1.default.green('\n✅ Created .dddrc.json with custom configuration'));
|
|
272
|
+
printConfigSummary(config);
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
// Full custom configuration
|
|
276
|
+
const config = await buildCustomConfig(rl);
|
|
277
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
278
|
+
console.log(chalk_1.default.green('\n✅ Created .dddrc.json with custom configuration'));
|
|
279
|
+
printConfigSummary(config);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
finally {
|
|
283
|
+
rl.close();
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
async function customizeConfig(rl, config) {
|
|
287
|
+
// ORM
|
|
288
|
+
const ormChoice = await selectOption(rl, 'Select ORM:', ['typeorm', 'prisma'], config.orm === 'prisma' ? 1 : 0);
|
|
289
|
+
config.orm = ormChoice;
|
|
290
|
+
// Database
|
|
291
|
+
const dbChoice = await selectOption(rl, 'Select Database:', ['postgres', 'mysql', 'sqlite', 'mongodb'], ['postgres', 'mysql', 'sqlite', 'mongodb'].indexOf(config.database));
|
|
292
|
+
config.database = dbChoice;
|
|
293
|
+
// Features
|
|
294
|
+
console.log(chalk_1.default.cyan('\nFeatures:'));
|
|
295
|
+
config.features.graphql = await confirm(rl, ' Enable GraphQL?', config.features.graphql);
|
|
296
|
+
config.features.swagger = await confirm(rl, ' Enable Swagger/OpenAPI?', config.features.swagger);
|
|
297
|
+
config.features.cqrs = await confirm(rl, ' Enable CQRS pattern?', config.features.cqrs);
|
|
298
|
+
config.features.eventSourcing = await confirm(rl, ' Enable Event Sourcing?', config.features.eventSourcing);
|
|
299
|
+
// Testing
|
|
300
|
+
console.log(chalk_1.default.cyan('\nTesting:'));
|
|
301
|
+
const testFramework = await selectOption(rl, 'Test framework:', ['jest', 'vitest'], config.testing.framework === 'vitest' ? 1 : 0);
|
|
302
|
+
config.testing.framework = testFramework;
|
|
303
|
+
config.testing.e2e = await confirm(rl, ' Generate E2E tests?', config.testing.e2e);
|
|
304
|
+
config.testing.factories = await confirm(rl, ' Generate test factories?', config.testing.factories);
|
|
305
|
+
}
|
|
306
|
+
async function buildCustomConfig(rl) {
|
|
307
|
+
const config = {
|
|
308
|
+
orm: 'typeorm',
|
|
309
|
+
database: 'postgres',
|
|
310
|
+
features: {
|
|
311
|
+
graphql: false,
|
|
312
|
+
swagger: true,
|
|
313
|
+
cqrs: false,
|
|
314
|
+
eventSourcing: false,
|
|
315
|
+
},
|
|
316
|
+
naming: {
|
|
317
|
+
entitySuffix: '',
|
|
318
|
+
repositorySuffix: 'Repository',
|
|
319
|
+
serviceSuffix: 'Service',
|
|
320
|
+
controllerSuffix: 'Controller',
|
|
321
|
+
},
|
|
322
|
+
paths: {
|
|
323
|
+
modules: 'src/modules',
|
|
324
|
+
shared: 'src/shared',
|
|
325
|
+
templates: '.ddd/templates',
|
|
326
|
+
},
|
|
327
|
+
testing: {
|
|
328
|
+
framework: 'jest',
|
|
329
|
+
e2e: false,
|
|
330
|
+
factories: false,
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
await customizeConfig(rl, config);
|
|
334
|
+
// Additional custom paths
|
|
335
|
+
console.log(chalk_1.default.cyan('\nPaths (press Enter for defaults):'));
|
|
336
|
+
const modulesPath = await question(rl, ` Modules path [${config.paths.modules}]: `);
|
|
337
|
+
if (modulesPath)
|
|
338
|
+
config.paths.modules = modulesPath;
|
|
339
|
+
const sharedPath = await question(rl, ` Shared path [${config.paths.shared}]: `);
|
|
340
|
+
if (sharedPath)
|
|
341
|
+
config.paths.shared = sharedPath;
|
|
342
|
+
return config;
|
|
343
|
+
}
|
|
344
|
+
function printConfigSummary(config) {
|
|
345
|
+
console.log(chalk_1.default.gray('\n─────────────────────────────────────'));
|
|
346
|
+
console.log(chalk_1.default.bold('Configuration Summary:\n'));
|
|
347
|
+
console.log(` ORM: ${chalk_1.default.cyan(config.orm)}`);
|
|
348
|
+
console.log(` Database: ${chalk_1.default.cyan(config.database)}`);
|
|
349
|
+
console.log(` GraphQL: ${config.features.graphql ? chalk_1.default.green('✓') : chalk_1.default.gray('✗')}`);
|
|
350
|
+
console.log(` Swagger: ${config.features.swagger ? chalk_1.default.green('✓') : chalk_1.default.gray('✗')}`);
|
|
351
|
+
console.log(` CQRS: ${config.features.cqrs ? chalk_1.default.green('✓') : chalk_1.default.gray('✗')}`);
|
|
352
|
+
console.log(` Testing: ${chalk_1.default.cyan(config.testing.framework)}${config.testing.e2e ? ' + E2E' : ''}`);
|
|
353
|
+
console.log(chalk_1.default.gray('─────────────────────────────────────\n'));
|
|
354
|
+
}
|
|
355
|
+
function listPresets() {
|
|
356
|
+
console.log(chalk_1.default.bold.blue('\n📋 Available Configuration Presets\n'));
|
|
357
|
+
Object.entries(PRESETS).forEach(([key, preset]) => {
|
|
358
|
+
console.log(chalk_1.default.bold.cyan(` ${key}`));
|
|
359
|
+
console.log(chalk_1.default.gray(` ${preset.description}`));
|
|
360
|
+
console.log(chalk_1.default.gray(` ORM: ${preset.config.orm}, DB: ${preset.config.database}`));
|
|
361
|
+
const features = Object.entries(preset.config.features)
|
|
362
|
+
.filter(([, v]) => v)
|
|
363
|
+
.map(([k]) => k);
|
|
364
|
+
if (features.length > 0) {
|
|
365
|
+
console.log(chalk_1.default.gray(` Features: ${features.join(', ')}`));
|
|
366
|
+
}
|
|
367
|
+
console.log();
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=init-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init-config.js","sourceRoot":"","sources":["../../src/commands/init-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,8 @@ const path = __importStar(require("path"));
|
|
|
41
41
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
42
42
|
const chalk_1 = __importDefault(require("chalk"));
|
|
43
43
|
const dependency_utils_1 = require("../utils/dependency.utils");
|
|
44
|
+
const file_utils_1 = require("../utils/file.utils");
|
|
45
|
+
const config_utils_1 = require("../utils/config.utils");
|
|
44
46
|
async function initProject(projectName, options) {
|
|
45
47
|
try {
|
|
46
48
|
// First, check for CLI updates if not skipped
|
|
@@ -64,7 +66,9 @@ async function initProject(projectName, options) {
|
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
68
|
// Determine the project directory
|
|
67
|
-
const projectDir = options.path
|
|
69
|
+
const projectDir = options.path
|
|
70
|
+
? path.resolve(options.path, projectName)
|
|
71
|
+
: path.resolve(process.cwd(), projectName);
|
|
68
72
|
// Create a new NestJS project
|
|
69
73
|
await (0, dependency_utils_1.createNestJSProject)(projectName, {
|
|
70
74
|
directory: options.path,
|
|
@@ -72,12 +76,27 @@ async function initProject(projectName, options) {
|
|
|
72
76
|
});
|
|
73
77
|
// If withDdd option is enabled, install DDD-related dependencies
|
|
74
78
|
if (options.withDdd) {
|
|
75
|
-
const dependencies = [
|
|
79
|
+
const dependencies = [
|
|
80
|
+
'@nestjs/cqrs',
|
|
81
|
+
'@nestjs/swagger',
|
|
82
|
+
'class-validator',
|
|
83
|
+
'class-transformer',
|
|
84
|
+
];
|
|
76
85
|
await (0, dependency_utils_1.installDependencies)(projectDir, dependencies);
|
|
77
86
|
// Create DDD folder structure
|
|
78
87
|
console.log(chalk_1.default.blue('Setting up DDD folder structure...'));
|
|
79
|
-
//
|
|
80
|
-
|
|
88
|
+
// Create directories
|
|
89
|
+
await (0, file_utils_1.ensureDir)(path.join(projectDir, 'src/modules'));
|
|
90
|
+
await (0, file_utils_1.ensureDir)(path.join(projectDir, 'src/shared'));
|
|
91
|
+
await (0, file_utils_1.ensureDir)(path.join(projectDir, 'src/migrations'));
|
|
92
|
+
// Create .dddrc.json config file
|
|
93
|
+
console.log(chalk_1.default.cyan(' Creating configuration file...'));
|
|
94
|
+
await (0, config_utils_1.createDefaultConfig)(projectDir);
|
|
95
|
+
// Create AI context files
|
|
96
|
+
console.log(chalk_1.default.cyan(' Creating AI context files...'));
|
|
97
|
+
await createAiContextFiles(projectDir, projectName);
|
|
98
|
+
// Create tsconfig paths for module aliases
|
|
99
|
+
await updateTsConfig(projectDir);
|
|
81
100
|
console.log(chalk_1.default.green('✅ DDD folder structure set up successfully!'));
|
|
82
101
|
}
|
|
83
102
|
console.log(chalk_1.default.green(`\n✅ Project ${projectName} initialized successfully!`));
|
|
@@ -86,9 +105,10 @@ async function initProject(projectName, options) {
|
|
|
86
105
|
console.log(chalk_1.default.blue(` 2. npm run start:dev`));
|
|
87
106
|
if (options.withDdd) {
|
|
88
107
|
console.log(chalk_1.default.blue(`\nTo generate DDD components, use:`));
|
|
108
|
+
console.log(chalk_1.default.blue(` ddd scaffold User -m users --fields "name:string email:string:unique"`));
|
|
89
109
|
console.log(chalk_1.default.blue(` ddd generate module <module-name>`));
|
|
90
|
-
console.log(chalk_1.default.blue(` ddd generate entity <entity-name>
|
|
91
|
-
console.log(chalk_1.default.blue(` ddd generate usecase <usecase-name>
|
|
110
|
+
console.log(chalk_1.default.blue(` ddd generate entity <entity-name> -m <module-name>`));
|
|
111
|
+
console.log(chalk_1.default.blue(` ddd generate usecase <usecase-name> -m <module-name>`));
|
|
92
112
|
}
|
|
93
113
|
}
|
|
94
114
|
catch (error) {
|
|
@@ -96,4 +116,34 @@ async function initProject(projectName, options) {
|
|
|
96
116
|
process.exit(1);
|
|
97
117
|
}
|
|
98
118
|
}
|
|
119
|
+
async function createAiContextFiles(projectDir, projectName) {
|
|
120
|
+
const templateData = { projectName };
|
|
121
|
+
// Create CLAUDE.md (AI context file for Claude Code and similar tools)
|
|
122
|
+
const claudeTemplatePath = path.join(__dirname, '../templates/ai-context/CLAUDE.md.hbs');
|
|
123
|
+
const claudeOutputPath = path.join(projectDir, 'CLAUDE.md');
|
|
124
|
+
await (0, file_utils_1.generateFromTemplate)(claudeTemplatePath, claudeOutputPath, templateData);
|
|
125
|
+
// Create conventions.md
|
|
126
|
+
const conventionsTemplatePath = path.join(__dirname, '../templates/ai-context/conventions.md.hbs');
|
|
127
|
+
const conventionsOutputPath = path.join(projectDir, 'docs/conventions.md');
|
|
128
|
+
await (0, file_utils_1.ensureDir)(path.join(projectDir, 'docs'));
|
|
129
|
+
await (0, file_utils_1.generateFromTemplate)(conventionsTemplatePath, conventionsOutputPath, templateData);
|
|
130
|
+
}
|
|
131
|
+
async function updateTsConfig(projectDir) {
|
|
132
|
+
const tsconfigPath = path.join(projectDir, 'tsconfig.json');
|
|
133
|
+
try {
|
|
134
|
+
const tsconfig = require(tsconfigPath);
|
|
135
|
+
// Add path aliases
|
|
136
|
+
tsconfig.compilerOptions = tsconfig.compilerOptions || {};
|
|
137
|
+
tsconfig.compilerOptions.paths = {
|
|
138
|
+
'@modules/*': ['src/modules/*'],
|
|
139
|
+
'@shared/*': ['src/shared/*'],
|
|
140
|
+
...(tsconfig.compilerOptions.paths || {}),
|
|
141
|
+
};
|
|
142
|
+
await (0, file_utils_1.writeFile)(tsconfigPath, JSON.stringify(tsconfig, null, 2));
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
// If we can't update tsconfig, that's okay - continue with the setup
|
|
146
|
+
console.log(chalk_1.default.yellow(' Note: Could not update tsconfig.json paths. You may need to add them manually.'));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
99
149
|
//# sourceMappingURL=init-project.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../src/commands/init-project.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../src/commands/init-project.ts"],"names":[],"mappings":"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"}
|