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.
Files changed (214) hide show
  1. package/README.md +118 -9
  2. package/ddd.schema.json +11 -1
  3. package/dist/commands/doctor-enhanced.d.ts +1 -0
  4. package/dist/commands/doctor-enhanced.js +94 -79
  5. package/dist/commands/doctor-enhanced.js.map +1 -1
  6. package/dist/commands/doctor.d.ts +9 -0
  7. package/dist/commands/doctor.js +68 -21
  8. package/dist/commands/doctor.js.map +1 -1
  9. package/dist/commands/generate-all.js +238 -176
  10. package/dist/commands/generate-all.js.map +1 -1
  11. package/dist/commands/generate-controller.d.ts +1 -0
  12. package/dist/commands/generate-controller.js +71 -0
  13. package/dist/commands/generate-controller.js.map +1 -0
  14. package/dist/commands/generate-domain-service.d.ts +1 -1
  15. package/dist/commands/generate-domain-service.js +6 -4
  16. package/dist/commands/generate-domain-service.js.map +1 -1
  17. package/dist/commands/generate-dto.d.ts +4 -0
  18. package/dist/commands/generate-dto.js +162 -0
  19. package/dist/commands/generate-dto.js.map +1 -0
  20. package/dist/commands/generate-entity.js +44 -35
  21. package/dist/commands/generate-entity.js.map +1 -1
  22. package/dist/commands/generate-event.js +10 -4
  23. package/dist/commands/generate-event.js.map +1 -1
  24. package/dist/commands/generate-migration-deployment.d.ts +15 -0
  25. package/dist/commands/generate-migration-deployment.js +326 -0
  26. package/dist/commands/generate-migration-deployment.js.map +1 -0
  27. package/dist/commands/generate-migration-deployment.spec.d.ts +1 -0
  28. package/dist/commands/generate-migration-deployment.spec.js +337 -0
  29. package/dist/commands/generate-migration-deployment.spec.js.map +1 -0
  30. package/dist/commands/generate-module.js +41 -31
  31. package/dist/commands/generate-module.js.map +1 -1
  32. package/dist/commands/generate-query.js +23 -4
  33. package/dist/commands/generate-query.js.map +1 -1
  34. package/dist/commands/generate-repository.d.ts +1 -1
  35. package/dist/commands/generate-repository.js +17 -34
  36. package/dist/commands/generate-repository.js.map +1 -1
  37. package/dist/commands/generate-service.js +19 -4
  38. package/dist/commands/generate-service.js.map +1 -1
  39. package/dist/commands/generate-usecase.js +12 -31
  40. package/dist/commands/generate-usecase.js.map +1 -1
  41. package/dist/commands/generate-value-object.js +3 -14
  42. package/dist/commands/generate-value-object.js.map +1 -1
  43. package/dist/commands/init-project.d.ts +3 -0
  44. package/dist/commands/init-project.js +19 -9
  45. package/dist/commands/init-project.js.map +1 -1
  46. package/dist/commands/interactive-scaffold.js +10 -0
  47. package/dist/commands/interactive-scaffold.js.map +1 -1
  48. package/dist/commands/migration.d.ts +3 -0
  49. package/dist/commands/migration.js +83 -48
  50. package/dist/commands/migration.js.map +1 -1
  51. package/dist/commands/recipe.d.ts +2 -0
  52. package/dist/commands/recipe.js +282 -91
  53. package/dist/commands/recipe.js.map +1 -1
  54. package/dist/commands/recipes/banklink-connector-contract.recipe.d.ts +1 -0
  55. package/dist/commands/recipes/banklink-connector-contract.recipe.js +161 -0
  56. package/dist/commands/recipes/banklink-connector-contract.recipe.js.map +1 -0
  57. package/dist/commands/recipes/bounded-json-http.recipe.d.ts +2 -0
  58. package/dist/commands/recipes/bounded-json-http.recipe.js +53 -0
  59. package/dist/commands/recipes/bounded-json-http.recipe.js.map +1 -0
  60. package/dist/commands/recipes/business-reference-identifiers.recipe.d.ts +1 -0
  61. package/dist/commands/recipes/business-reference-identifiers.recipe.js +223 -0
  62. package/dist/commands/recipes/business-reference-identifiers.recipe.js.map +1 -0
  63. package/dist/commands/recipes/event-backbone.recipe.d.ts +1 -0
  64. package/dist/commands/recipes/event-backbone.recipe.js +1118 -0
  65. package/dist/commands/recipes/event-backbone.recipe.js.map +1 -0
  66. package/dist/commands/recipes/external-projection-worker.recipe.d.ts +6 -0
  67. package/dist/commands/recipes/external-projection-worker.recipe.js +211 -0
  68. package/dist/commands/recipes/external-projection-worker.recipe.js.map +1 -0
  69. package/dist/commands/recipes/index.d.ts +12 -0
  70. package/dist/commands/recipes/index.js +12 -0
  71. package/dist/commands/recipes/index.js.map +1 -1
  72. package/dist/commands/recipes/jest-cjs-compat.recipe.d.ts +3 -0
  73. package/dist/commands/recipes/jest-cjs-compat.recipe.js +130 -0
  74. package/dist/commands/recipes/jest-cjs-compat.recipe.js.map +1 -0
  75. package/dist/commands/recipes/joi-env.recipe.d.ts +1 -0
  76. package/dist/commands/recipes/joi-env.recipe.js +301 -0
  77. package/dist/commands/recipes/joi-env.recipe.js.map +1 -0
  78. package/dist/commands/recipes/kafka-consumer.recipe.d.ts +1 -0
  79. package/dist/commands/recipes/kafka-consumer.recipe.js +65 -0
  80. package/dist/commands/recipes/kafka-consumer.recipe.js.map +1 -0
  81. package/dist/commands/recipes/oauth2-client-credentials.recipe.d.ts +1 -0
  82. package/dist/commands/recipes/oauth2-client-credentials.recipe.js +60 -0
  83. package/dist/commands/recipes/oauth2-client-credentials.recipe.js.map +1 -0
  84. package/dist/commands/recipes/oauth2-token-introspection.recipe.d.ts +1 -0
  85. package/dist/commands/recipes/oauth2-token-introspection.recipe.js +67 -0
  86. package/dist/commands/recipes/oauth2-token-introspection.recipe.js.map +1 -0
  87. package/dist/commands/recipes/oidc-bff-session.recipe.d.ts +1 -0
  88. package/dist/commands/recipes/oidc-bff-session.recipe.js +57 -0
  89. package/dist/commands/recipes/oidc-bff-session.recipe.js.map +1 -0
  90. package/dist/commands/recipes/oidc-dashboard.recipe.d.ts +1 -0
  91. package/dist/commands/recipes/oidc-dashboard.recipe.js +463 -0
  92. package/dist/commands/recipes/oidc-dashboard.recipe.js.map +1 -0
  93. package/dist/commands/recipes/oidc-resource-server.recipe.d.ts +1 -0
  94. package/dist/commands/recipes/oidc-resource-server.recipe.js +85 -0
  95. package/dist/commands/recipes/oidc-resource-server.recipe.js.map +1 -0
  96. package/dist/commands/recipes/platform-context.recipe.d.ts +1 -0
  97. package/dist/commands/recipes/platform-context.recipe.js +229 -0
  98. package/dist/commands/recipes/platform-context.recipe.js.map +1 -0
  99. package/dist/commands/recipes/platform-parc-authorization.recipe.d.ts +1 -0
  100. package/dist/commands/recipes/platform-parc-authorization.recipe.js +339 -0
  101. package/dist/commands/recipes/platform-parc-authorization.recipe.js.map +1 -0
  102. package/dist/commands/recipes/platform-parc-bound-authorization.recipe.d.ts +1 -0
  103. package/dist/commands/recipes/platform-parc-bound-authorization.recipe.js +56 -0
  104. package/dist/commands/recipes/platform-parc-bound-authorization.recipe.js.map +1 -0
  105. package/dist/commands/recipes/platform-service-access-request-context.recipe.d.ts +1 -0
  106. package/dist/commands/recipes/platform-service-access-request-context.recipe.js +103 -0
  107. package/dist/commands/recipes/platform-service-access-request-context.recipe.js.map +1 -0
  108. package/dist/commands/recipes/platform-service-runtime.recipe.d.ts +1 -0
  109. package/dist/commands/recipes/platform-service-runtime.recipe.js +415 -0
  110. package/dist/commands/recipes/platform-service-runtime.recipe.js.map +1 -0
  111. package/dist/index.js +82 -11
  112. package/dist/index.js.map +1 -1
  113. package/dist/templates/ai-context/CLAUDE.md.hbs +54 -3
  114. package/dist/templates/ai-context/conventions.md.hbs +20 -8
  115. package/dist/templates/command/create-command.hbs +8 -3
  116. package/dist/templates/command/delete-command.hbs +1 -1
  117. package/dist/templates/command/update-command.hbs +1 -1
  118. package/dist/templates/controller/application-controller.hbs +7 -0
  119. package/dist/templates/controller/controller.hbs +6 -0
  120. package/dist/templates/dto/create-dto.hbs +17 -5
  121. package/dist/templates/dto/filter-dto.hbs +1 -1
  122. package/dist/templates/dto/response-dto.hbs +1 -1
  123. package/dist/templates/entity/entity.hbs +4 -0
  124. package/dist/templates/mapper/mapper.hbs +6 -2
  125. package/dist/templates/orm-entity/orm-entity.hbs +9 -1
  126. package/dist/templates/prisma/prisma-mapper.hbs +6 -0
  127. package/dist/templates/prisma/prisma-repository.hbs +57 -5
  128. package/dist/templates/prisma/prisma-schema.hbs +2 -0
  129. package/dist/templates/query/get-all.query.hbs +10 -2
  130. package/dist/templates/recipes/bounded-json-http/README.md.hbs +36 -0
  131. package/dist/templates/recipes/external-projection-worker/README.md.hbs +157 -0
  132. package/dist/templates/recipes/external-projection-worker/canonical-json.ts.hbs +123 -0
  133. package/dist/templates/recipes/external-projection-worker/enqueuer.ts.hbs +167 -0
  134. package/dist/templates/recipes/external-projection-worker/index.ts.hbs +6 -0
  135. package/dist/templates/recipes/external-projection-worker/migration.ts.hbs +88 -0
  136. package/dist/templates/recipes/external-projection-worker/module.ts.hbs +36 -0
  137. package/dist/templates/recipes/external-projection-worker/store.ts.hbs +354 -0
  138. package/dist/templates/recipes/external-projection-worker/types.ts.hbs +134 -0
  139. package/dist/templates/recipes/external-projection-worker/worker.ts.hbs +296 -0
  140. package/dist/templates/recipes/kafka-consumer/README.md.hbs +50 -0
  141. package/dist/templates/recipes/kafka-consumer/kafka-consumer.ts.hbs +135 -0
  142. package/dist/templates/recipes/kafka-consumer/migration.ts.hbs +17 -0
  143. package/dist/templates/recipes/oauth2-client-credentials/README.md.hbs +40 -0
  144. package/dist/templates/recipes/oauth2-client-credentials/client.spec.ts.hbs +234 -0
  145. package/dist/templates/recipes/oauth2-client-credentials/client.ts.hbs +210 -0
  146. package/dist/templates/recipes/oauth2-client-credentials/index.ts.hbs +2 -0
  147. package/dist/templates/recipes/oauth2-client-credentials/module.ts.hbs +58 -0
  148. package/dist/templates/recipes/oauth2-token-introspection/README.md.hbs +158 -0
  149. package/dist/templates/recipes/oauth2-token-introspection/client.spec.ts.hbs +350 -0
  150. package/dist/templates/recipes/oauth2-token-introspection/client.ts.hbs +241 -0
  151. package/dist/templates/recipes/oauth2-token-introspection/http-client.spec.ts.hbs +411 -0
  152. package/dist/templates/recipes/oauth2-token-introspection/http-client.ts.hbs +343 -0
  153. package/dist/templates/recipes/oauth2-token-introspection/index.ts.hbs +3 -0
  154. package/dist/templates/recipes/oauth2-token-introspection/module.ts.hbs +58 -0
  155. package/dist/templates/recipes/oidc-bff-session/README.md.hbs +96 -0
  156. package/dist/templates/recipes/oidc-bff-session/client.test.ts.hbs +663 -0
  157. package/dist/templates/recipes/oidc-bff-session/client.ts.hbs +635 -0
  158. package/dist/templates/recipes/oidc-bff-session/index.ts.hbs +3 -0
  159. package/dist/templates/recipes/oidc-bff-session/store.integration.test.ts.hbs +480 -0
  160. package/dist/templates/recipes/oidc-bff-session/store.test.ts.hbs +87 -0
  161. package/dist/templates/recipes/oidc-bff-session/store.ts.hbs +549 -0
  162. package/dist/templates/recipes/oidc-bff-session/valkey.test.ts.hbs +158 -0
  163. package/dist/templates/recipes/oidc-bff-session/valkey.ts.hbs +148 -0
  164. package/dist/templates/recipes/oidc-resource-server/README.md.hbs +74 -0
  165. package/dist/templates/recipes/oidc-resource-server/index.ts.hbs +2 -0
  166. package/dist/templates/recipes/oidc-resource-server/module.ts.hbs +51 -0
  167. package/dist/templates/recipes/oidc-resource-server/verifier.spec.ts.hbs +186 -0
  168. package/dist/templates/recipes/oidc-resource-server/verifier.ts.hbs +440 -0
  169. package/dist/templates/recipes/platform-parc-bound-authorization/README.md.hbs +92 -0
  170. package/dist/templates/recipes/platform-parc-bound-authorization/client.ts.hbs +142 -0
  171. package/dist/templates/recipes/platform-service-access-request-context/docs.md.hbs +61 -0
  172. package/dist/templates/recipes/platform-service-access-request-context/env.example.hbs +7 -0
  173. package/dist/templates/recipes/platform-service-access-request-context/index.ts.hbs +7 -0
  174. package/dist/templates/recipes/platform-service-access-request-context/request-context-headers.ts.hbs +61 -0
  175. package/dist/templates/recipes/platform-service-access-request-context/request-context-introspection.parser.ts.hbs +132 -0
  176. package/dist/templates/recipes/platform-service-access-request-context/request-context-introspection.types.ts.hbs +40 -0
  177. package/dist/templates/recipes/platform-service-access-request-context/service-access-request-context.client.ts.hbs +45 -0
  178. package/dist/templates/recipes/platform-service-access-request-context/service-access-request-context.config.ts.hbs +142 -0
  179. package/dist/templates/recipes/platform-service-access-request-context/service-access-request-context.guard.ts.hbs +77 -0
  180. package/dist/templates/recipes/platform-service-access-request-context/service-access-request-context.module.ts.hbs +17 -0
  181. package/dist/templates/repository/repository.hbs +43 -5
  182. package/dist/templates/resolver/graphql-input.hbs +23 -6
  183. package/dist/templates/resolver/resolver.hbs +4 -0
  184. package/dist/templates/service/domain-service.hbs +2 -2
  185. package/dist/templates/test/controller.spec.hbs +5 -1
  186. package/dist/templates/test/prisma-repository.spec.hbs +192 -0
  187. package/dist/templates/test/repository.spec.hbs +41 -2
  188. package/dist/templates/test/usecase.spec.hbs +24 -5
  189. package/dist/templates/usecase/application-usecase.hbs +17 -0
  190. package/dist/templates/usecase/create-usecase.hbs +34 -3
  191. package/dist/templates/usecase/update-usecase.hbs +15 -1
  192. package/dist/utils/config.utils.d.ts +2 -0
  193. package/dist/utils/config.utils.js +14 -2
  194. package/dist/utils/config.utils.js.map +1 -1
  195. package/dist/utils/dependency.utils.d.ts +18 -2
  196. package/dist/utils/dependency.utils.js +144 -15
  197. package/dist/utils/dependency.utils.js.map +1 -1
  198. package/dist/utils/field.utils.d.ts +6 -0
  199. package/dist/utils/field.utils.js +78 -24
  200. package/dist/utils/field.utils.js.map +1 -1
  201. package/dist/utils/field.utils.spec.d.ts +1 -0
  202. package/dist/utils/field.utils.spec.js +38 -0
  203. package/dist/utils/field.utils.spec.js.map +1 -0
  204. package/dist/utils/file.utils.d.ts +39 -3
  205. package/dist/utils/file.utils.js +150 -13
  206. package/dist/utils/file.utils.js.map +1 -1
  207. package/dist/utils/naming.utils.js +5 -4
  208. package/dist/utils/naming.utils.js.map +1 -1
  209. package/dist/utils/static-recipe.utils.d.ts +4 -0
  210. package/dist/utils/static-recipe.utils.js +148 -0
  211. package/dist/utils/static-recipe.utils.js.map +1 -0
  212. package/dist/utils/template-engine.utils.js +83 -68
  213. package/dist/utils/template-engine.utils.js.map +1 -1
  214. 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(dto: Create{{entityNamePascal}}Dto): Promise<{{entityNamePascal}}ResponseDto> {
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);
@@ -9,7 +9,9 @@ export interface DddConfig {
9
9
  features: {
10
10
  swagger: boolean;
11
11
  pagination: boolean;
12
+ delete: boolean;
12
13
  softDelete: boolean;
14
+ hardDelete: boolean;
13
15
  timestamps: boolean;
14
16
  tests: boolean;
15
17
  events: boolean;
@@ -46,13 +46,15 @@ const DEFAULT_CONFIG = {
46
46
  database: 'postgres',
47
47
  naming: {
48
48
  table: 'snake_case',
49
- dto: 'snake_case',
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: 'snake_case',
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":"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"}
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?: any): Promise<void>;
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 (error) {
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 === latestVersion;
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
- // Check if @nestjs/cli is installed
132
- const isInstalled = await isNestJSCliInstalled();
133
- if (!isInstalled) {
134
- await installNestJSCli();
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
- // Build the command with options
138
- let command = `nest new ${projectName} --skip-git --package-manager npm`;
221
+ const { args, cwd } = getNestProjectExecution(projectName, options);
139
222
  if (options.directory) {
140
- command += ` --directory ${options.directory}`;
223
+ await fs.ensureDir(cwd);
141
224
  }
142
- if (options.skipInstall) {
143
- command += ' --skip-install';
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
- await execAsync(`npm install ${flag} ${dependencies.join(' ')}`, { cwd: projectPath });
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 !== latestVersion;
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":"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"}
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
  */