nestjs-ddd-cli 3.2.1 → 3.3.0
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 +118 -9
- package/ddd.schema.json +11 -1
- package/dist/commands/doctor-enhanced.d.ts +1 -0
- package/dist/commands/doctor-enhanced.js +94 -79
- package/dist/commands/doctor-enhanced.js.map +1 -1
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.js +68 -21
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/generate-all.js +238 -176
- package/dist/commands/generate-all.js.map +1 -1
- package/dist/commands/generate-controller.d.ts +1 -0
- package/dist/commands/generate-controller.js +71 -0
- package/dist/commands/generate-controller.js.map +1 -0
- package/dist/commands/generate-domain-service.d.ts +1 -1
- package/dist/commands/generate-domain-service.js +6 -4
- package/dist/commands/generate-domain-service.js.map +1 -1
- package/dist/commands/generate-dto.d.ts +4 -0
- package/dist/commands/generate-dto.js +162 -0
- package/dist/commands/generate-dto.js.map +1 -0
- package/dist/commands/generate-entity.js +44 -35
- package/dist/commands/generate-entity.js.map +1 -1
- package/dist/commands/generate-event.js +10 -4
- package/dist/commands/generate-event.js.map +1 -1
- package/dist/commands/generate-migration-deployment.d.ts +15 -0
- package/dist/commands/generate-migration-deployment.js +326 -0
- package/dist/commands/generate-migration-deployment.js.map +1 -0
- package/dist/commands/generate-migration-deployment.spec.d.ts +1 -0
- package/dist/commands/generate-migration-deployment.spec.js +337 -0
- package/dist/commands/generate-migration-deployment.spec.js.map +1 -0
- package/dist/commands/generate-module.js +41 -31
- package/dist/commands/generate-module.js.map +1 -1
- package/dist/commands/generate-query.js +23 -4
- package/dist/commands/generate-query.js.map +1 -1
- package/dist/commands/generate-repository.d.ts +1 -1
- package/dist/commands/generate-repository.js +17 -34
- package/dist/commands/generate-repository.js.map +1 -1
- package/dist/commands/generate-service.js +19 -4
- package/dist/commands/generate-service.js.map +1 -1
- package/dist/commands/generate-usecase.js +12 -31
- package/dist/commands/generate-usecase.js.map +1 -1
- package/dist/commands/generate-value-object.js +3 -14
- package/dist/commands/generate-value-object.js.map +1 -1
- package/dist/commands/init-project.d.ts +3 -0
- package/dist/commands/init-project.js +19 -9
- package/dist/commands/init-project.js.map +1 -1
- package/dist/commands/interactive-scaffold.js +10 -0
- package/dist/commands/interactive-scaffold.js.map +1 -1
- package/dist/commands/migration.d.ts +3 -0
- package/dist/commands/migration.js +83 -48
- package/dist/commands/migration.js.map +1 -1
- package/dist/commands/recipe.d.ts +2 -0
- package/dist/commands/recipe.js +282 -91
- package/dist/commands/recipe.js.map +1 -1
- package/dist/commands/recipes/banklink-connector-contract.recipe.d.ts +1 -0
- package/dist/commands/recipes/banklink-connector-contract.recipe.js +161 -0
- package/dist/commands/recipes/banklink-connector-contract.recipe.js.map +1 -0
- package/dist/commands/recipes/bounded-json-http.recipe.d.ts +2 -0
- package/dist/commands/recipes/bounded-json-http.recipe.js +53 -0
- package/dist/commands/recipes/bounded-json-http.recipe.js.map +1 -0
- package/dist/commands/recipes/business-reference-identifiers.recipe.d.ts +1 -0
- package/dist/commands/recipes/business-reference-identifiers.recipe.js +223 -0
- package/dist/commands/recipes/business-reference-identifiers.recipe.js.map +1 -0
- package/dist/commands/recipes/event-backbone.recipe.d.ts +1 -0
- package/dist/commands/recipes/event-backbone.recipe.js +1118 -0
- package/dist/commands/recipes/event-backbone.recipe.js.map +1 -0
- package/dist/commands/recipes/external-projection-worker.recipe.d.ts +6 -0
- package/dist/commands/recipes/external-projection-worker.recipe.js +211 -0
- package/dist/commands/recipes/external-projection-worker.recipe.js.map +1 -0
- package/dist/commands/recipes/index.d.ts +12 -0
- package/dist/commands/recipes/index.js +12 -0
- package/dist/commands/recipes/index.js.map +1 -1
- package/dist/commands/recipes/jest-cjs-compat.recipe.d.ts +3 -0
- package/dist/commands/recipes/jest-cjs-compat.recipe.js +130 -0
- package/dist/commands/recipes/jest-cjs-compat.recipe.js.map +1 -0
- package/dist/commands/recipes/joi-env.recipe.d.ts +1 -0
- package/dist/commands/recipes/joi-env.recipe.js +301 -0
- package/dist/commands/recipes/joi-env.recipe.js.map +1 -0
- package/dist/commands/recipes/kafka-consumer.recipe.d.ts +1 -0
- package/dist/commands/recipes/kafka-consumer.recipe.js +65 -0
- package/dist/commands/recipes/kafka-consumer.recipe.js.map +1 -0
- package/dist/commands/recipes/oauth2-client-credentials.recipe.d.ts +1 -0
- package/dist/commands/recipes/oauth2-client-credentials.recipe.js +60 -0
- package/dist/commands/recipes/oauth2-client-credentials.recipe.js.map +1 -0
- package/dist/commands/recipes/oauth2-token-introspection.recipe.d.ts +1 -0
- package/dist/commands/recipes/oauth2-token-introspection.recipe.js +67 -0
- package/dist/commands/recipes/oauth2-token-introspection.recipe.js.map +1 -0
- package/dist/commands/recipes/oidc-bff-session.recipe.d.ts +1 -0
- package/dist/commands/recipes/oidc-bff-session.recipe.js +57 -0
- package/dist/commands/recipes/oidc-bff-session.recipe.js.map +1 -0
- package/dist/commands/recipes/oidc-dashboard.recipe.d.ts +1 -0
- package/dist/commands/recipes/oidc-dashboard.recipe.js +463 -0
- package/dist/commands/recipes/oidc-dashboard.recipe.js.map +1 -0
- package/dist/commands/recipes/oidc-resource-server.recipe.d.ts +1 -0
- package/dist/commands/recipes/oidc-resource-server.recipe.js +85 -0
- package/dist/commands/recipes/oidc-resource-server.recipe.js.map +1 -0
- package/dist/commands/recipes/platform-context.recipe.d.ts +1 -0
- package/dist/commands/recipes/platform-context.recipe.js +229 -0
- package/dist/commands/recipes/platform-context.recipe.js.map +1 -0
- package/dist/commands/recipes/platform-parc-authorization.recipe.d.ts +1 -0
- package/dist/commands/recipes/platform-parc-authorization.recipe.js +339 -0
- package/dist/commands/recipes/platform-parc-authorization.recipe.js.map +1 -0
- package/dist/commands/recipes/platform-parc-bound-authorization.recipe.d.ts +1 -0
- package/dist/commands/recipes/platform-parc-bound-authorization.recipe.js +56 -0
- package/dist/commands/recipes/platform-parc-bound-authorization.recipe.js.map +1 -0
- package/dist/commands/recipes/platform-service-access-request-context.recipe.d.ts +1 -0
- package/dist/commands/recipes/platform-service-access-request-context.recipe.js +103 -0
- package/dist/commands/recipes/platform-service-access-request-context.recipe.js.map +1 -0
- package/dist/commands/recipes/platform-service-runtime.recipe.d.ts +1 -0
- package/dist/commands/recipes/platform-service-runtime.recipe.js +415 -0
- package/dist/commands/recipes/platform-service-runtime.recipe.js.map +1 -0
- package/dist/index.js +82 -11
- package/dist/index.js.map +1 -1
- package/dist/templates/ai-context/CLAUDE.md.hbs +54 -3
- package/dist/templates/ai-context/conventions.md.hbs +20 -8
- package/dist/templates/command/create-command.hbs +8 -3
- package/dist/templates/command/delete-command.hbs +1 -1
- package/dist/templates/command/update-command.hbs +1 -1
- package/dist/templates/controller/application-controller.hbs +7 -0
- package/dist/templates/controller/controller.hbs +6 -0
- package/dist/templates/dto/create-dto.hbs +17 -5
- package/dist/templates/dto/filter-dto.hbs +1 -1
- package/dist/templates/dto/response-dto.hbs +1 -1
- package/dist/templates/entity/entity.hbs +4 -0
- package/dist/templates/mapper/mapper.hbs +6 -2
- package/dist/templates/orm-entity/orm-entity.hbs +9 -1
- package/dist/templates/prisma/prisma-mapper.hbs +6 -0
- package/dist/templates/prisma/prisma-repository.hbs +57 -5
- package/dist/templates/prisma/prisma-schema.hbs +2 -0
- package/dist/templates/query/get-all.query.hbs +10 -2
- package/dist/templates/recipes/bounded-json-http/README.md.hbs +36 -0
- package/dist/templates/recipes/external-projection-worker/README.md.hbs +157 -0
- package/dist/templates/recipes/external-projection-worker/canonical-json.ts.hbs +123 -0
- package/dist/templates/recipes/external-projection-worker/enqueuer.ts.hbs +167 -0
- package/dist/templates/recipes/external-projection-worker/index.ts.hbs +6 -0
- package/dist/templates/recipes/external-projection-worker/migration.ts.hbs +88 -0
- package/dist/templates/recipes/external-projection-worker/module.ts.hbs +36 -0
- package/dist/templates/recipes/external-projection-worker/store.ts.hbs +354 -0
- package/dist/templates/recipes/external-projection-worker/types.ts.hbs +134 -0
- package/dist/templates/recipes/external-projection-worker/worker.ts.hbs +296 -0
- package/dist/templates/recipes/kafka-consumer/README.md.hbs +50 -0
- package/dist/templates/recipes/kafka-consumer/kafka-consumer.ts.hbs +135 -0
- package/dist/templates/recipes/kafka-consumer/migration.ts.hbs +17 -0
- package/dist/templates/recipes/oauth2-client-credentials/README.md.hbs +40 -0
- package/dist/templates/recipes/oauth2-client-credentials/client.spec.ts.hbs +234 -0
- package/dist/templates/recipes/oauth2-client-credentials/client.ts.hbs +210 -0
- package/dist/templates/recipes/oauth2-client-credentials/index.ts.hbs +2 -0
- package/dist/templates/recipes/oauth2-client-credentials/module.ts.hbs +58 -0
- package/dist/templates/recipes/oauth2-token-introspection/README.md.hbs +158 -0
- package/dist/templates/recipes/oauth2-token-introspection/client.spec.ts.hbs +350 -0
- package/dist/templates/recipes/oauth2-token-introspection/client.ts.hbs +241 -0
- package/dist/templates/recipes/oauth2-token-introspection/http-client.spec.ts.hbs +411 -0
- package/dist/templates/recipes/oauth2-token-introspection/http-client.ts.hbs +343 -0
- package/dist/templates/recipes/oauth2-token-introspection/index.ts.hbs +3 -0
- package/dist/templates/recipes/oauth2-token-introspection/module.ts.hbs +58 -0
- package/dist/templates/recipes/oidc-bff-session/README.md.hbs +96 -0
- package/dist/templates/recipes/oidc-bff-session/client.test.ts.hbs +663 -0
- package/dist/templates/recipes/oidc-bff-session/client.ts.hbs +635 -0
- package/dist/templates/recipes/oidc-bff-session/index.ts.hbs +3 -0
- package/dist/templates/recipes/oidc-bff-session/store.integration.test.ts.hbs +480 -0
- package/dist/templates/recipes/oidc-bff-session/store.test.ts.hbs +87 -0
- package/dist/templates/recipes/oidc-bff-session/store.ts.hbs +549 -0
- package/dist/templates/recipes/oidc-bff-session/valkey.test.ts.hbs +158 -0
- package/dist/templates/recipes/oidc-bff-session/valkey.ts.hbs +148 -0
- package/dist/templates/recipes/oidc-resource-server/README.md.hbs +74 -0
- package/dist/templates/recipes/oidc-resource-server/index.ts.hbs +2 -0
- package/dist/templates/recipes/oidc-resource-server/module.ts.hbs +51 -0
- package/dist/templates/recipes/oidc-resource-server/verifier.spec.ts.hbs +186 -0
- package/dist/templates/recipes/oidc-resource-server/verifier.ts.hbs +440 -0
- package/dist/templates/recipes/platform-parc-bound-authorization/README.md.hbs +92 -0
- package/dist/templates/recipes/platform-parc-bound-authorization/client.ts.hbs +142 -0
- package/dist/templates/recipes/platform-service-access-request-context/docs.md.hbs +61 -0
- package/dist/templates/recipes/platform-service-access-request-context/env.example.hbs +7 -0
- package/dist/templates/recipes/platform-service-access-request-context/index.ts.hbs +7 -0
- package/dist/templates/recipes/platform-service-access-request-context/request-context-headers.ts.hbs +61 -0
- package/dist/templates/recipes/platform-service-access-request-context/request-context-introspection.parser.ts.hbs +132 -0
- package/dist/templates/recipes/platform-service-access-request-context/request-context-introspection.types.ts.hbs +40 -0
- package/dist/templates/recipes/platform-service-access-request-context/service-access-request-context.client.ts.hbs +45 -0
- package/dist/templates/recipes/platform-service-access-request-context/service-access-request-context.config.ts.hbs +142 -0
- package/dist/templates/recipes/platform-service-access-request-context/service-access-request-context.guard.ts.hbs +77 -0
- package/dist/templates/recipes/platform-service-access-request-context/service-access-request-context.module.ts.hbs +17 -0
- package/dist/templates/repository/repository.hbs +43 -5
- package/dist/templates/resolver/graphql-input.hbs +23 -6
- package/dist/templates/resolver/resolver.hbs +4 -0
- package/dist/templates/service/domain-service.hbs +2 -2
- package/dist/templates/test/controller.spec.hbs +5 -1
- package/dist/templates/test/prisma-repository.spec.hbs +192 -0
- package/dist/templates/test/repository.spec.hbs +41 -2
- package/dist/templates/test/usecase.spec.hbs +24 -5
- package/dist/templates/usecase/application-usecase.hbs +17 -0
- package/dist/templates/usecase/create-usecase.hbs +34 -3
- package/dist/templates/usecase/update-usecase.hbs +15 -1
- package/dist/utils/config.utils.d.ts +2 -0
- package/dist/utils/config.utils.js +14 -2
- package/dist/utils/config.utils.js.map +1 -1
- package/dist/utils/dependency.utils.d.ts +18 -2
- package/dist/utils/dependency.utils.js +144 -15
- package/dist/utils/dependency.utils.js.map +1 -1
- package/dist/utils/field.utils.d.ts +6 -0
- package/dist/utils/field.utils.js +78 -24
- package/dist/utils/field.utils.js.map +1 -1
- package/dist/utils/field.utils.spec.d.ts +1 -0
- package/dist/utils/field.utils.spec.js +38 -0
- package/dist/utils/field.utils.spec.js.map +1 -0
- package/dist/utils/file.utils.d.ts +39 -3
- package/dist/utils/file.utils.js +150 -13
- package/dist/utils/file.utils.js.map +1 -1
- package/dist/utils/naming.utils.js +5 -4
- package/dist/utils/naming.utils.js.map +1 -1
- package/dist/utils/static-recipe.utils.d.ts +4 -0
- package/dist/utils/static-recipe.utils.js +148 -0
- package/dist/utils/static-recipe.utils.js.map +1 -0
- package/dist/utils/template-engine.utils.js +83 -68
- package/dist/utils/template-engine.utils.js.map +1 -1
- package/package.json +20 -11
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
import { Injectable } from "@nestjs/common";
|
|
2
|
-
import { {{entityNamePascal}}Entity } from "@modules/{{moduleNameKebab}}/domain/entities/{{entityNameKebab}}.entity";
|
|
1
|
+
import { Injectable{{#if hasServerOwnedFields}}, InternalServerErrorException{{/if}} } from "@nestjs/common";
|
|
2
|
+
import { {{entityNamePascal}}Entity{{#if hasServerOwnedFields}}, {{entityNamePascal}}EntityProps{{/if}} } from "@modules/{{moduleNameKebab}}/application/domain/entities/{{entityNameKebab}}.entity";
|
|
3
3
|
import { {{entityNamePascal}}Repository } from "@modules/{{moduleNameKebab}}/infrastructure/repositories/{{entityNameKebab}}.repository";
|
|
4
4
|
import { {{entityNamePascal}}Mapper } from "@modules/{{moduleNameKebab}}/infrastructure/mappers/{{entityNameKebab}}.mapper";
|
|
5
5
|
import { Create{{entityNamePascal}}Dto } from "@modules/{{moduleNameKebab}}/application/dto/requests/create-{{entityNameKebab}}.dto";
|
|
6
6
|
import { {{entityNamePascal}}ResponseDto } from "@modules/{{moduleNameKebab}}/application/dto/responses/{{entityNameKebab}}.response.dto";
|
|
7
7
|
|
|
8
|
+
{{#if hasServerOwnedFields}}
|
|
9
|
+
export type Create{{entityNamePascal}}ServerOwnedFields = Pick<
|
|
10
|
+
{{entityNamePascal}}EntityProps,
|
|
11
|
+
{{#each serverOwnedFields}}
|
|
12
|
+
| "{{this.camelCase}}"
|
|
13
|
+
{{/each}}
|
|
14
|
+
>;
|
|
15
|
+
|
|
16
|
+
{{/if}}
|
|
8
17
|
@Injectable()
|
|
9
18
|
export class Create{{entityNamePascal}}UseCase {
|
|
10
19
|
constructor(
|
|
@@ -12,9 +21,31 @@ export class Create{{entityNamePascal}}UseCase {
|
|
|
12
21
|
private readonly mapper: {{entityNamePascal}}Mapper,
|
|
13
22
|
) {}
|
|
14
23
|
|
|
15
|
-
async execute(
|
|
24
|
+
async execute(
|
|
25
|
+
dto: Create{{entityNamePascal}}Dto,
|
|
26
|
+
{{#if hasServerOwnedFields}}
|
|
27
|
+
serverOwnedFields?: Create{{entityNamePascal}}ServerOwnedFields,
|
|
28
|
+
{{/if}}
|
|
29
|
+
): Promise<{{entityNamePascal}}ResponseDto> {
|
|
30
|
+
{{#if hasServerOwnedFields}}
|
|
31
|
+
if (!serverOwnedFields) {
|
|
32
|
+
throw new InternalServerErrorException(
|
|
33
|
+
"Trusted server-owned fields are required to create {{entityNamePascal}}: {{#each serverOwnedFields}}{{#unless @first}}, {{/unless}}{{this.camelCase}}{{/each}}",
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
{{/if}}
|
|
16
38
|
const entity = new {{entityNamePascal}}Entity({
|
|
39
|
+
{{#if hasServerOwnedFields}}
|
|
40
|
+
{{#each requestFields}}
|
|
41
|
+
{{this.camelCase}}: dto.{{this.camelCase}},
|
|
42
|
+
{{/each}}
|
|
43
|
+
{{#each serverOwnedFields}}
|
|
44
|
+
{{this.camelCase}}: serverOwnedFields.{{this.camelCase}},
|
|
45
|
+
{{/each}}
|
|
46
|
+
{{else}}
|
|
17
47
|
...dto,
|
|
48
|
+
{{/if}}
|
|
18
49
|
isActive: true,
|
|
19
50
|
createdAt: new Date(),
|
|
20
51
|
updatedAt: new Date(),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Injectable, NotFoundException } from "@nestjs/common";
|
|
2
|
-
import { {{entityNamePascal}}Entity } from "@modules/{{moduleNameKebab}}/domain/entities/{{entityNameKebab}}.entity";
|
|
2
|
+
import { {{entityNamePascal}}Entity{{#if hasServerOwnedFields}}, {{entityNamePascal}}EntityProps{{/if}} } from "@modules/{{moduleNameKebab}}/application/domain/entities/{{entityNameKebab}}.entity";
|
|
3
3
|
import { {{entityNamePascal}}Repository } from "@modules/{{moduleNameKebab}}/infrastructure/repositories/{{entityNameKebab}}.repository";
|
|
4
4
|
import { {{entityNamePascal}}Mapper } from "@modules/{{moduleNameKebab}}/infrastructure/mappers/{{entityNameKebab}}.mapper";
|
|
5
5
|
import { Update{{entityNamePascal}}Dto } from "@modules/{{moduleNameKebab}}/application/dto/requests/update-{{entityNameKebab}}.dto";
|
|
@@ -19,11 +19,25 @@ export class Update{{entityNamePascal}}UseCase {
|
|
|
19
19
|
throw new NotFoundException(`{{entityNamePascal}} with id '${id}' not found`);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
{{#if hasServerOwnedFields}}
|
|
23
|
+
const updates: Partial<{{entityNamePascal}}EntityProps> = {};
|
|
24
|
+
{{#each requestFields}}
|
|
25
|
+
if (dto.{{this.camelCase}} !== undefined) {
|
|
26
|
+
updates.{{this.camelCase}} = dto.{{this.camelCase}};
|
|
27
|
+
}
|
|
28
|
+
{{/each}}
|
|
29
|
+
if (dto.isActive !== undefined) {
|
|
30
|
+
updates.isActive = dto.isActive;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const updatedEntity = existingEntity.update(updates);
|
|
34
|
+
{{else}}
|
|
22
35
|
const updatedEntity = new {{entityNamePascal}}Entity({
|
|
23
36
|
...existingEntity,
|
|
24
37
|
...dto,
|
|
25
38
|
updatedAt: new Date(),
|
|
26
39
|
});
|
|
40
|
+
{{/if}}
|
|
27
41
|
|
|
28
42
|
const savedEntity = await this.repository.update(id, updatedEntity);
|
|
29
43
|
return this.mapper.toResponseDto(savedEntity);
|
|
@@ -46,13 +46,15 @@ const DEFAULT_CONFIG = {
|
|
|
46
46
|
database: 'postgres',
|
|
47
47
|
naming: {
|
|
48
48
|
table: 'snake_case',
|
|
49
|
-
dto: '
|
|
49
|
+
dto: 'camelCase',
|
|
50
50
|
file: 'kebab-case',
|
|
51
51
|
},
|
|
52
52
|
features: {
|
|
53
53
|
swagger: true,
|
|
54
54
|
pagination: true,
|
|
55
|
+
delete: true,
|
|
55
56
|
softDelete: true,
|
|
57
|
+
hardDelete: false,
|
|
56
58
|
timestamps: true,
|
|
57
59
|
tests: false,
|
|
58
60
|
events: false,
|
|
@@ -168,7 +170,7 @@ function getConfigSchema() {
|
|
|
168
170
|
dto: {
|
|
169
171
|
type: 'string',
|
|
170
172
|
enum: ['snake_case', 'camelCase'],
|
|
171
|
-
default: '
|
|
173
|
+
default: 'camelCase',
|
|
172
174
|
},
|
|
173
175
|
file: {
|
|
174
176
|
type: 'string',
|
|
@@ -182,7 +184,17 @@ function getConfigSchema() {
|
|
|
182
184
|
properties: {
|
|
183
185
|
swagger: { type: 'boolean', default: true },
|
|
184
186
|
pagination: { type: 'boolean', default: true },
|
|
187
|
+
delete: {
|
|
188
|
+
type: 'boolean',
|
|
189
|
+
default: true,
|
|
190
|
+
description: 'Generate the generic aggregate deletion surface',
|
|
191
|
+
},
|
|
185
192
|
softDelete: { type: 'boolean', default: true },
|
|
193
|
+
hardDelete: {
|
|
194
|
+
type: 'boolean',
|
|
195
|
+
default: false,
|
|
196
|
+
description: 'Generate an explicit hardDelete compatibility helper when softDelete is enabled',
|
|
197
|
+
},
|
|
186
198
|
timestamps: { type: 'boolean', default: true },
|
|
187
199
|
tests: { type: 'boolean', default: false },
|
|
188
200
|
events: { type: 'boolean', default: false },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.utils.js","sourceRoot":"","sources":["../../src/utils/config.utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.utils.js","sourceRoot":"","sources":["../../src/utils/config.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export declare function getLatestVersion(packageName: string): Promise<string>;
|
|
|
10
10
|
* Check if the current version is the latest version
|
|
11
11
|
*/
|
|
12
12
|
export declare function isLatestVersion(packageName: string, currentVersion: string): Promise<boolean>;
|
|
13
|
+
export declare function isNewerVersion(candidateVersion: string, currentVersion: string): boolean;
|
|
14
|
+
export declare function compareVersions(leftVersion: string, rightVersion: string): number;
|
|
13
15
|
/**
|
|
14
16
|
* Update a package globally
|
|
15
17
|
*/
|
|
@@ -22,14 +24,28 @@ export declare function isNestJSCliInstalled(): Promise<boolean>;
|
|
|
22
24
|
* Install NestJS CLI globally
|
|
23
25
|
*/
|
|
24
26
|
export declare function installNestJSCli(): Promise<void>;
|
|
27
|
+
export declare function getNestProjectExecution(projectName: string, options?: {
|
|
28
|
+
directory?: string;
|
|
29
|
+
skipInstall?: boolean;
|
|
30
|
+
packageManager?: 'npm' | 'bun';
|
|
31
|
+
collection?: string;
|
|
32
|
+
}): {
|
|
33
|
+
args: string[];
|
|
34
|
+
cwd: string;
|
|
35
|
+
};
|
|
25
36
|
/**
|
|
26
37
|
* Create a new NestJS project
|
|
27
38
|
*/
|
|
28
|
-
export declare function createNestJSProject(projectName: string, options?:
|
|
39
|
+
export declare function createNestJSProject(projectName: string, options?: {
|
|
40
|
+
directory?: string;
|
|
41
|
+
skipInstall?: boolean;
|
|
42
|
+
packageManager?: 'npm' | 'bun';
|
|
43
|
+
collection?: string;
|
|
44
|
+
}): Promise<void>;
|
|
29
45
|
/**
|
|
30
46
|
* Install dependencies in a project
|
|
31
47
|
*/
|
|
32
|
-
export declare function installDependencies(projectPath: string, dependencies: string[], dev?: boolean): Promise<void>;
|
|
48
|
+
export declare function installDependencies(projectPath: string, dependencies: string[], dev?: boolean, packageManager?: 'npm' | 'bun'): Promise<void>;
|
|
33
49
|
/**
|
|
34
50
|
* Check for outdated dependencies in a project
|
|
35
51
|
*/
|
|
@@ -39,9 +39,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.isPackageInstalledGlobally = isPackageInstalledGlobally;
|
|
40
40
|
exports.getLatestVersion = getLatestVersion;
|
|
41
41
|
exports.isLatestVersion = isLatestVersion;
|
|
42
|
+
exports.isNewerVersion = isNewerVersion;
|
|
43
|
+
exports.compareVersions = compareVersions;
|
|
42
44
|
exports.updatePackageGlobally = updatePackageGlobally;
|
|
43
45
|
exports.isNestJSCliInstalled = isNestJSCliInstalled;
|
|
44
46
|
exports.installNestJSCli = installNestJSCli;
|
|
47
|
+
exports.getNestProjectExecution = getNestProjectExecution;
|
|
45
48
|
exports.createNestJSProject = createNestJSProject;
|
|
46
49
|
exports.installDependencies = installDependencies;
|
|
47
50
|
exports.checkOutdatedDependencies = checkOutdatedDependencies;
|
|
@@ -52,8 +55,10 @@ const child_process_1 = require("child_process");
|
|
|
52
55
|
const util_1 = require("util");
|
|
53
56
|
const fs = __importStar(require("fs-extra"));
|
|
54
57
|
const path = __importStar(require("path"));
|
|
58
|
+
const node_os_1 = require("node:os");
|
|
55
59
|
const chalk_1 = __importDefault(require("chalk"));
|
|
56
60
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
61
|
+
const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
|
|
57
62
|
/**
|
|
58
63
|
* Check if a package is installed globally
|
|
59
64
|
*/
|
|
@@ -62,7 +67,7 @@ async function isPackageInstalledGlobally(packageName) {
|
|
|
62
67
|
await execAsync(`npm list -g ${packageName} --depth=0`);
|
|
63
68
|
return true;
|
|
64
69
|
}
|
|
65
|
-
catch
|
|
70
|
+
catch {
|
|
66
71
|
return false;
|
|
67
72
|
}
|
|
68
73
|
}
|
|
@@ -84,13 +89,52 @@ async function getLatestVersion(packageName) {
|
|
|
84
89
|
async function isLatestVersion(packageName, currentVersion) {
|
|
85
90
|
try {
|
|
86
91
|
const latestVersion = await getLatestVersion(packageName);
|
|
87
|
-
return currentVersion
|
|
92
|
+
return !isNewerVersion(latestVersion, currentVersion);
|
|
88
93
|
}
|
|
89
94
|
catch (error) {
|
|
90
95
|
console.warn(chalk_1.default.yellow(`Warning: Could not check for updates: ${error.message}`));
|
|
91
96
|
return true; // Assume it's the latest version if we can't check
|
|
92
97
|
}
|
|
93
98
|
}
|
|
99
|
+
function isNewerVersion(candidateVersion, currentVersion) {
|
|
100
|
+
return compareVersions(candidateVersion, currentVersion) > 0;
|
|
101
|
+
}
|
|
102
|
+
function compareVersions(leftVersion, rightVersion) {
|
|
103
|
+
const left = parseVersion(leftVersion);
|
|
104
|
+
const right = parseVersion(rightVersion);
|
|
105
|
+
for (const index of [0, 1, 2]) {
|
|
106
|
+
const difference = left.parts[index] - right.parts[index];
|
|
107
|
+
if (difference !== 0) {
|
|
108
|
+
return difference > 0 ? 1 : -1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (left.preRelease === right.preRelease) {
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
if (!left.preRelease) {
|
|
115
|
+
return 1;
|
|
116
|
+
}
|
|
117
|
+
if (!right.preRelease) {
|
|
118
|
+
return -1;
|
|
119
|
+
}
|
|
120
|
+
return left.preRelease.localeCompare(right.preRelease);
|
|
121
|
+
}
|
|
122
|
+
function parseVersion(version) {
|
|
123
|
+
const normalized = version.trim().replace(/^v/i, '');
|
|
124
|
+
const [core = '', preRelease] = normalized.split('-', 2);
|
|
125
|
+
const rawParts = core
|
|
126
|
+
.split('.')
|
|
127
|
+
.slice(0, 3)
|
|
128
|
+
.map((part) => Number.parseInt(part, 10));
|
|
129
|
+
return {
|
|
130
|
+
parts: [versionPart(rawParts, 0), versionPart(rawParts, 1), versionPart(rawParts, 2)],
|
|
131
|
+
preRelease,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function versionPart(parts, index) {
|
|
135
|
+
const value = parts[index];
|
|
136
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : 0;
|
|
137
|
+
}
|
|
94
138
|
/**
|
|
95
139
|
* Update a package globally
|
|
96
140
|
*/
|
|
@@ -123,26 +167,104 @@ async function installNestJSCli() {
|
|
|
123
167
|
throw new Error(`Failed to install @nestjs/cli: ${error.message}`);
|
|
124
168
|
}
|
|
125
169
|
}
|
|
170
|
+
function getNestProjectExecution(projectName, options = {}) {
|
|
171
|
+
const args = [
|
|
172
|
+
'new',
|
|
173
|
+
projectName,
|
|
174
|
+
'--skip-git',
|
|
175
|
+
'--package-manager',
|
|
176
|
+
options.packageManager ?? 'npm',
|
|
177
|
+
];
|
|
178
|
+
let cwd = process.cwd();
|
|
179
|
+
if (options.collection)
|
|
180
|
+
args.push('--collection', options.collection);
|
|
181
|
+
if (options.directory) {
|
|
182
|
+
const targetDirectory = path.resolve(options.directory);
|
|
183
|
+
cwd = path.dirname(targetDirectory);
|
|
184
|
+
args.push('--directory', path.basename(targetDirectory));
|
|
185
|
+
}
|
|
186
|
+
if (options.skipInstall || options.packageManager === 'bun') {
|
|
187
|
+
args.push('--skip-install');
|
|
188
|
+
}
|
|
189
|
+
return { args, cwd };
|
|
190
|
+
}
|
|
126
191
|
/**
|
|
127
192
|
* Create a new NestJS project
|
|
128
193
|
*/
|
|
129
194
|
async function createNestJSProject(projectName, options = {}) {
|
|
130
195
|
try {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
196
|
+
let bunNest;
|
|
197
|
+
if (options.packageManager === 'bun') {
|
|
198
|
+
for (const directory of (process.env['PATH'] ?? '').split(path.delimiter)) {
|
|
199
|
+
if (!directory)
|
|
200
|
+
continue;
|
|
201
|
+
const executable = path.join(directory, 'nest');
|
|
202
|
+
try {
|
|
203
|
+
await fs.access(executable, fs.constants.X_OK);
|
|
204
|
+
bunNest = await fs.realpath(executable);
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
/* Inspect next existing executable; never install globally. */
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
if (!bunNest)
|
|
212
|
+
throw new Error('Bun init requires an existing Nest CLI executable');
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
// Existing defaults remain intact; explicit Bun skips npm probes/installation.
|
|
216
|
+
const isInstalled = await isNestJSCliInstalled();
|
|
217
|
+
if (!isInstalled)
|
|
218
|
+
await installNestJSCli();
|
|
135
219
|
}
|
|
136
220
|
console.log(chalk_1.default.blue(`Creating new NestJS project: ${projectName}...`));
|
|
137
|
-
|
|
138
|
-
let command = `nest new ${projectName} --skip-git --package-manager npm`;
|
|
221
|
+
const { args, cwd } = getNestProjectExecution(projectName, options);
|
|
139
222
|
if (options.directory) {
|
|
140
|
-
|
|
223
|
+
await fs.ensureDir(cwd);
|
|
141
224
|
}
|
|
142
|
-
|
|
143
|
-
|
|
225
|
+
// Avoid shell parsing of user-provided project names and paths.
|
|
226
|
+
if (bunNest) {
|
|
227
|
+
// Nest's schematics runner hardcodes `node`. The private invocation shim
|
|
228
|
+
// keeps those children on Bun without changing global PATH or installs.
|
|
229
|
+
const runtimeDirectory = await fs.mkdtemp(path.join((0, node_os_1.tmpdir)(), 'ddd-bun-init-'));
|
|
230
|
+
try {
|
|
231
|
+
let bunRuntime;
|
|
232
|
+
for (const directory of (process.env['PATH'] ?? '').split(path.delimiter)) {
|
|
233
|
+
if (!directory)
|
|
234
|
+
continue;
|
|
235
|
+
try {
|
|
236
|
+
const candidate = path.join(directory, 'bun');
|
|
237
|
+
await fs.access(candidate, fs.constants.X_OK);
|
|
238
|
+
bunRuntime = await fs.realpath(candidate);
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
/* No global installation. */
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
if (!bunRuntime)
|
|
246
|
+
throw new Error('Bun init requires an existing Bun executable');
|
|
247
|
+
await fs.symlink(bunRuntime, path.join(runtimeDirectory, 'node'));
|
|
248
|
+
await execFileAsync('bun', [bunNest, ...args], {
|
|
249
|
+
cwd,
|
|
250
|
+
env: {
|
|
251
|
+
...process.env,
|
|
252
|
+
PATH: `${runtimeDirectory}${path.delimiter}${process.env['PATH'] ?? ''}`,
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
finally {
|
|
257
|
+
await fs.remove(runtimeDirectory);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
await execFileAsync('nest', args, { cwd });
|
|
262
|
+
}
|
|
263
|
+
if (options.packageManager === 'bun' && !options.skipInstall) {
|
|
264
|
+
await execFileAsync('bun', ['install'], {
|
|
265
|
+
cwd: options.directory ? path.resolve(options.directory) : path.resolve(cwd, projectName),
|
|
266
|
+
});
|
|
144
267
|
}
|
|
145
|
-
await execAsync(command);
|
|
146
268
|
console.log(chalk_1.default.green(`✅ NestJS project ${projectName} created successfully!`));
|
|
147
269
|
}
|
|
148
270
|
catch (error) {
|
|
@@ -152,11 +274,18 @@ async function createNestJSProject(projectName, options = {}) {
|
|
|
152
274
|
/**
|
|
153
275
|
* Install dependencies in a project
|
|
154
276
|
*/
|
|
155
|
-
async function installDependencies(projectPath, dependencies, dev = false) {
|
|
277
|
+
async function installDependencies(projectPath, dependencies, dev = false, packageManager = 'npm') {
|
|
156
278
|
try {
|
|
157
279
|
const flag = dev ? '--save-dev' : '--save';
|
|
158
280
|
console.log(chalk_1.default.blue(`Installing ${dev ? 'dev ' : ''}dependencies: ${dependencies.join(', ')}...`));
|
|
159
|
-
|
|
281
|
+
if (packageManager === 'bun') {
|
|
282
|
+
await execFileAsync('bun', ['add', ...(dev ? ['--dev'] : []), ...dependencies], {
|
|
283
|
+
cwd: projectPath,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
await execAsync(`npm install ${flag} ${dependencies.join(' ')}`, { cwd: projectPath });
|
|
288
|
+
}
|
|
160
289
|
console.log(chalk_1.default.green('✅ Dependencies installed successfully!'));
|
|
161
290
|
}
|
|
162
291
|
catch (error) {
|
|
@@ -217,7 +346,7 @@ async function checkForCliUpdate() {
|
|
|
217
346
|
const currentVersion = getCurrentPackageVersion();
|
|
218
347
|
try {
|
|
219
348
|
const latestVersion = await getLatestVersion('nestjs-ddd-cli');
|
|
220
|
-
const needsUpdate = currentVersion
|
|
349
|
+
const needsUpdate = isNewerVersion(latestVersion, currentVersion);
|
|
221
350
|
return { needsUpdate, latestVersion, currentVersion };
|
|
222
351
|
}
|
|
223
352
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency.utils.js","sourceRoot":"","sources":["../../src/utils/dependency.utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"dependency.utils.js","sourceRoot":"","sources":["../../src/utils/dependency.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,8 @@ export interface FieldDefinition {
|
|
|
10
10
|
isRequired: boolean;
|
|
11
11
|
isOptional: boolean;
|
|
12
12
|
isUnique: boolean;
|
|
13
|
+
isMoney: boolean;
|
|
14
|
+
isServerOwned: boolean;
|
|
13
15
|
isArray: boolean;
|
|
14
16
|
validators: string[];
|
|
15
17
|
description: string;
|
|
@@ -27,6 +29,8 @@ export interface ParsedFields {
|
|
|
27
29
|
hasDate: boolean;
|
|
28
30
|
hasEnum: boolean;
|
|
29
31
|
hasRelation: boolean;
|
|
32
|
+
hasMoney: boolean;
|
|
33
|
+
hasServerOwned: boolean;
|
|
30
34
|
}
|
|
31
35
|
/**
|
|
32
36
|
* Parse field definitions from CLI --fields flag
|
|
@@ -37,6 +41,8 @@ export interface ParsedFields {
|
|
|
37
41
|
* "email:string:unique" -> required unique string with IsEmail
|
|
38
42
|
* "age:number:optional" -> optional number
|
|
39
43
|
* "status:enum:active,inactive" -> enum with values
|
|
44
|
+
* "amount:money" -> exact decimal stored as a TypeScript string
|
|
45
|
+
* "tenantId:uuid:serverOwned" -> persisted field excluded from request DTOs
|
|
40
46
|
* "tags:string[]" -> string array
|
|
41
47
|
* "userId:uuid:relation" -> foreign key relation
|
|
42
48
|
*/
|