@mshima/generator-jhipster-nodejs 0.0.0-stage → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/LICENSE.txt +204 -0
  2. package/README.md +243 -2
  3. package/build-info.json +3 -0
  4. package/cli/cli-customizations.cjs +9 -0
  5. package/cli/cli.cjs +40 -0
  6. package/cli/logo.js +31 -0
  7. package/cli/version.cjs +12 -0
  8. package/generators/ci-cd/USAGE +5 -0
  9. package/generators/ci-cd/command.js +5 -0
  10. package/generators/ci-cd/generator.js +158 -0
  11. package/generators/ci-cd/index.js +2 -0
  12. package/generators/ci-cd/templates/.gitlab-ci.yml.ejs +137 -0
  13. package/generators/ci-cd/templates/azure-pipelines.yml.ejs +68 -0
  14. package/generators/ci-cd/templates/circle.yml.ejs +59 -0
  15. package/generators/ci-cd/templates/docker-registry.yml.ejs +58 -0
  16. package/generators/ci-cd/templates/github-ci.yml.ejs +90 -0
  17. package/generators/ci-cd/templates/jenkins/Jenkinsfile.ejs +104 -0
  18. package/generators/ci-cd/templates/jenkins/idea.gdsl +90 -0
  19. package/generators/ci-cd/templates/jenkins/jenkins.yml.ejs +33 -0
  20. package/generators/ci-cd/templates/travis.yml.ejs +75 -0
  21. package/generators/client/command.js +5 -0
  22. package/generators/client/generator.js +21 -0
  23. package/generators/client/generators/bootstrap/command.js +5 -0
  24. package/generators/client/generators/bootstrap/generator.js +28 -0
  25. package/generators/client/generators/bootstrap/index.js +2 -0
  26. package/generators/client/index.js +2 -0
  27. package/generators/common/generators/bootstrap/command.js +5 -0
  28. package/generators/common/generators/bootstrap/generator.js +37 -0
  29. package/generators/common/generators/bootstrap/index.js +2 -0
  30. package/generators/docker/command.js +5 -0
  31. package/generators/docker/generator.js +16 -0
  32. package/generators/docker/generators/bootstrap/command.js +5 -0
  33. package/generators/docker/generators/bootstrap/generator.js +56 -0
  34. package/generators/docker/generators/bootstrap/index.js +2 -0
  35. package/generators/docker/index.js +2 -0
  36. package/generators/docker/templates/docker/app.yml.ejs +25 -0
  37. package/generators/generator-nodejs-constants.js +32 -0
  38. package/generators/languages/command.js +5 -0
  39. package/generators/languages/generator.js +22 -0
  40. package/generators/languages/index.js +2 -0
  41. package/generators/languages/templates/src/main/webapp/i18n/en/home.json +19 -0
  42. package/generators/languages/templates/src/main/webapp/i18n/es/home.json +19 -0
  43. package/generators/languages/templates/src/main/webapp/i18n/it/home.json +19 -0
  44. package/generators/node-server/command.js +96 -0
  45. package/generators/node-server/entity-files.js +26 -0
  46. package/generators/node-server/files.js +254 -0
  47. package/generators/node-server/generator.js +705 -0
  48. package/generators/node-server/generators/bootstrap/command.js +5 -0
  49. package/generators/node-server/generators/bootstrap/generator.js +84 -0
  50. package/generators/node-server/generators/bootstrap/index.js +2 -0
  51. package/generators/node-server/generators/migrations/command.js +5 -0
  52. package/generators/node-server/generators/migrations/files.js +42 -0
  53. package/generators/node-server/generators/migrations/generator.js +108 -0
  54. package/generators/node-server/generators/migrations/index.js +2 -0
  55. package/generators/node-server/generators/migrations/templates/server/src/migrations/_entityConstraintsMigration_.ts.ejs +40 -0
  56. package/generators/node-server/generators/migrations/templates/server/src/migrations/_entityMigration_.ts.ejs +26 -0
  57. package/generators/node-server/generators/migrations/templates/server/src/migrations/_entityRemovedMigration_.ts.ejs +15 -0
  58. package/generators/node-server/generators/migrations/templates/server/src/migrations/_entityUpdatedConstraintsMigration_.ts.ejs +60 -0
  59. package/generators/node-server/generators/migrations/templates/server/src/migrations/_entityUpdatedMigration_.ts.ejs +28 -0
  60. package/generators/node-server/index.js +2 -0
  61. package/generators/node-server/resources/package.json +76 -0
  62. package/generators/node-server/support/api-fake-data.js +54 -0
  63. package/generators/node-server/support/columns.js +73 -0
  64. package/generators/node-server/support/database.js +24 -0
  65. package/generators/node-server/support/entity-authorities.js +32 -0
  66. package/generators/node-server/support/entity-paths.js +13 -0
  67. package/generators/node-server/support/enums.js +11 -0
  68. package/generators/node-server/support/index.js +9 -0
  69. package/generators/node-server/support/mail-templates.js +82 -0
  70. package/generators/node-server/support/migrations.js +376 -0
  71. package/generators/node-server/support/validators.js +25 -0
  72. package/generators/node-server/templates/.dockerignore.ejs +16 -0
  73. package/generators/node-server/templates/.gitignore.jhi.nodejs.ejs +24 -0
  74. package/generators/node-server/templates/Dockerfile.ejs +54 -0
  75. package/generators/node-server/templates/README.md.jhi.nodejs.ejs +220 -0
  76. package/generators/node-server/templates/package.json.ejs +82 -0
  77. package/generators/node-server/templates/server/README.md.ejs +277 -0
  78. package/generators/node-server/templates/server/e2e/_entityFileName_.database.e2e-spec.ts.ejs +192 -0
  79. package/generators/node-server/templates/server/e2e/_entityFileName_.e2e-spec.ts.ejs +402 -0
  80. package/generators/node-server/templates/server/e2e/account.e2e-spec.ts.ejs +349 -0
  81. package/generators/node-server/templates/server/e2e/app.e2e-spec.ts.ejs +188 -0
  82. package/generators/node-server/templates/server/e2e/authority.e2e-spec.ts.ejs +50 -0
  83. package/generators/node-server/templates/server/e2e/cors.e2e-spec.ts.ejs +110 -0
  84. package/generators/node-server/templates/server/e2e/management.e2e-spec.ts.ejs +180 -0
  85. package/generators/node-server/templates/server/e2e/oauth2-bearer.e2e-spec.ts.ejs +71 -0
  86. package/generators/node-server/templates/server/e2e/session.e2e-spec.ts.ejs +234 -0
  87. package/generators/node-server/templates/server/e2e/setup.test.js.ejs +1 -0
  88. package/generators/node-server/templates/server/e2e/user.e2e-spec.ts.ejs +318 -0
  89. package/generators/node-server/templates/server/env.ejs +1 -0
  90. package/generators/node-server/templates/server/eslint.config.mjs.ejs +48 -0
  91. package/generators/node-server/templates/server/nest-cli.json.ejs +11 -0
  92. package/generators/node-server/templates/server/ormconfig.ts.ejs +35 -0
  93. package/generators/node-server/templates/server/package.json.ejs +143 -0
  94. package/generators/node-server/templates/server/sonar-project.properties.ejs +10 -0
  95. package/generators/node-server/templates/server/src/app.config.spec.ts.ejs +13 -0
  96. package/generators/node-server/templates/server/src/app.config.ts.ejs +179 -0
  97. package/generators/node-server/templates/server/src/app.module.ts.ejs +80 -0
  98. package/generators/node-server/templates/server/src/application-config.ts.ejs +153 -0
  99. package/generators/node-server/templates/server/src/auth/account.controller.ts.ejs +183 -0
  100. package/generators/node-server/templates/server/src/auth/auth.module.ts.ejs +104 -0
  101. package/generators/node-server/templates/server/src/auth/auth.service.ts.ejs +294 -0
  102. package/generators/node-server/templates/server/src/auth/csrf.middleware.spec.ts.ejs +76 -0
  103. package/generators/node-server/templates/server/src/auth/csrf.middleware.ts.ejs +85 -0
  104. package/generators/node-server/templates/server/src/auth/decorators/auth-user.decorator.ts.ejs +8 -0
  105. package/generators/node-server/templates/server/src/auth/decorators/roles.decorator.ts.ejs +4 -0
  106. package/generators/node-server/templates/server/src/auth/dto/key-and-password.dto.ts.ejs +17 -0
  107. package/generators/node-server/templates/server/src/auth/dto/password-change.dto.ts.ejs +17 -0
  108. package/generators/node-server/templates/server/src/auth/dto/user-login.dto.ts.ejs +21 -0
  109. package/generators/node-server/templates/server/src/auth/guards/auth.guard.ts.ejs +50 -0
  110. package/generators/node-server/templates/server/src/auth/guards/oauth2-login.guard.ts.ejs +6 -0
  111. package/generators/node-server/templates/server/src/auth/guards/roles.guard.ts.ejs +25 -0
  112. package/generators/node-server/templates/server/src/auth/index.ts.ejs +8 -0
  113. package/generators/node-server/templates/server/src/auth/jwt.config.spec.ts.ejs +22 -0
  114. package/generators/node-server/templates/server/src/auth/jwt.config.ts.ejs +29 -0
  115. package/generators/node-server/templates/server/src/auth/oauth2.authorities.spec.ts.ejs +24 -0
  116. package/generators/node-server/templates/server/src/auth/oauth2.authorities.ts.ejs +33 -0
  117. package/generators/node-server/templates/server/src/auth/oauth2.config.ts.ejs +51 -0
  118. package/generators/node-server/templates/server/src/auth/passport.jwt.strategy.ts.ejs +45 -0
  119. package/generators/node-server/templates/server/src/auth/passport.oauth2-bearer.strategy.ts.ejs +32 -0
  120. package/generators/node-server/templates/server/src/auth/passport.oauth2.strategy.spec.ts.ejs +27 -0
  121. package/generators/node-server/templates/server/src/auth/passport.oauth2.strategy.ts.ejs +44 -0
  122. package/generators/node-server/templates/server/src/auth/password-util.ts.ejs +10 -0
  123. package/generators/node-server/templates/server/src/auth/password.service.ts.ejs +34 -0
  124. package/generators/node-server/templates/server/src/auth/payload.interface.ts.ejs +14 -0
  125. package/generators/node-server/templates/server/src/auth/role-type.ts.ejs +7 -0
  126. package/generators/node-server/templates/server/src/auth/session-user.middleware.ts.ejs +33 -0
  127. package/generators/node-server/templates/server/src/auth/session.entity.ts.ejs +36 -0
  128. package/generators/node-server/templates/server/src/auth/session.store.spec.ts.ejs +99 -0
  129. package/generators/node-server/templates/server/src/auth/session.store.ts.ejs +116 -0
  130. package/generators/node-server/templates/server/src/auth/user.jwt.controller.ts.ejs +26 -0
  131. package/generators/node-server/templates/server/src/auth/user.oauth2.controller.ts.ejs +78 -0
  132. package/generators/node-server/templates/server/src/auth/user.session.controller.ts.ejs +103 -0
  133. package/generators/node-server/templates/server/src/common/common.module.ts.ejs +19 -0
  134. package/generators/node-server/templates/server/src/common/database/base.entity.ts.ejs +13 -0
  135. package/generators/node-server/templates/server/src/common/database/column-transformers.spec.ts.ejs +46 -0
  136. package/generators/node-server/templates/server/src/common/database/column-transformers.ts.ejs +69 -0
  137. package/generators/node-server/templates/server/src/common/database/column-types.spec.ts.ejs +21 -0
  138. package/generators/node-server/templates/server/src/common/database/column-types.ts.ejs +29 -0
  139. package/generators/node-server/templates/server/src/common/database/pagination.entity.spec.ts.ejs +66 -0
  140. package/generators/node-server/templates/server/src/common/database/pagination.entity.ts.ejs +108 -0
  141. package/generators/node-server/templates/server/src/common/dto/base.dto.ts.ejs +19 -0
  142. package/generators/node-server/templates/server/src/common/errors/error-constants.ts.ejs +10 -0
  143. package/generators/node-server/templates/server/src/common/errors/problem-details.filter.ts.ejs +63 -0
  144. package/generators/node-server/templates/server/src/common/errors/problem.exception.ts.ejs +92 -0
  145. package/generators/node-server/templates/server/src/common/field_validators.ejs +77 -0
  146. package/generators/node-server/templates/server/src/common/header-util.ts.ejs +105 -0
  147. package/generators/node-server/templates/server/src/common/interceptors/logging.interceptor.spec.ts.ejs +93 -0
  148. package/generators/node-server/templates/server/src/common/interceptors/logging.interceptor.ts.ejs +48 -0
  149. package/generators/node-server/templates/server/src/common/logging.spec.ts.ejs +83 -0
  150. package/generators/node-server/templates/server/src/common/logging.ts.ejs +129 -0
  151. package/generators/node-server/templates/server/src/common/metrics.spec.ts.ejs +43 -0
  152. package/generators/node-server/templates/server/src/common/metrics.ts.ejs +198 -0
  153. package/generators/node-server/templates/server/src/common/request.ts.ejs +8 -0
  154. package/generators/node-server/templates/server/src/common/sortable-properties.ts.ejs +43 -0
  155. package/generators/node-server/templates/server/src/common/updatable-properties.ts.ejs +14 -0
  156. package/generators/node-server/templates/server/src/config/application-dev.yml.ejs +118 -0
  157. package/generators/node-server/templates/server/src/config/application-prod.yml.ejs +97 -0
  158. package/generators/node-server/templates/server/src/config/application-secret-samples.yml.ejs +42 -0
  159. package/generators/node-server/templates/server/src/config/application-test.yml.ejs +68 -0
  160. package/generators/node-server/templates/server/src/config/application-tls-samples.yml.ejs +15 -0
  161. package/generators/node-server/templates/server/src/config/application-tls.yml.ejs +15 -0
  162. package/generators/node-server/templates/server/src/config/application.yml.ejs +149 -0
  163. package/generators/node-server/templates/server/src/config.spec.ts.ejs +81 -0
  164. package/generators/node-server/templates/server/src/config.ts.ejs +255 -0
  165. package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.controller.ts.ejs +178 -0
  166. package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.entity.ts.ejs +110 -0
  167. package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.mapper.ts.ejs +37 -0
  168. package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.module.ts.ejs +14 -0
  169. package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.service.ts.ejs +123 -0
  170. package/generators/node-server/templates/server/src/entities/_entityFileName_/dto/_entityFileName_.dto.ts.ejs +99 -0
  171. package/generators/node-server/templates/server/src/mail/mail.module.ts.ejs +49 -0
  172. package/generators/node-server/templates/server/src/mail/mail.service.spec.ts.ejs +105 -0
  173. package/generators/node-server/templates/server/src/mail/mail.service.ts.ejs +120 -0
  174. package/generators/node-server/templates/server/src/main.ts.ejs +114 -0
  175. package/generators/node-server/templates/server/src/management/api-docs.controller.ts.ejs +27 -0
  176. package/generators/node-server/templates/server/src/management/api-docs.service.ts.ejs +8 -0
  177. package/generators/node-server/templates/server/src/management/configuration.controller.ts.ejs +80 -0
  178. package/generators/node-server/templates/server/src/management/health.controller.spec.ts.ejs +79 -0
  179. package/generators/node-server/templates/server/src/management/health.controller.ts.ejs +87 -0
  180. package/generators/node-server/templates/server/src/management/health.module.ts.ejs +9 -0
  181. package/generators/node-server/templates/server/src/management/loggers.controller.ts.ejs +40 -0
  182. package/generators/node-server/templates/server/src/management/management.controller.spec.ts.ejs +26 -0
  183. package/generators/node-server/templates/server/src/management/management.controller.ts.ejs +34 -0
  184. package/generators/node-server/templates/server/src/management/management.module.ts.ejs +21 -0
  185. package/generators/node-server/templates/server/src/management/metrics.controller.ts.ejs +85 -0
  186. package/generators/node-server/templates/server/src/migrations/1570200270081-CreateTables.ts.ejs +64 -0
  187. package/generators/node-server/templates/server/src/migrations/1570200270082-CreateSessions.ts.ejs +26 -0
  188. package/generators/node-server/templates/server/src/migrations/1570200490072-SeedUsersRoles.ts.ejs +74 -0
  189. package/generators/node-server/templates/server/src/migrations/support/schema.ts.ejs +254 -0
  190. package/generators/node-server/templates/server/src/orm.config.ts.ejs +147 -0
  191. package/generators/node-server/templates/server/src/registry/consul.service.ts.ejs +70 -0
  192. package/generators/node-server/templates/server/src/registry/eureka.service.ts.ejs +129 -0
  193. package/generators/node-server/templates/server/src/swagger.ts.ejs +24 -0
  194. package/generators/node-server/templates/server/src/tls.ts.ejs +27 -0
  195. package/generators/node-server/templates/server/src/users/authority.controller.ts.ejs +85 -0
  196. package/generators/node-server/templates/server/src/users/authority.entity.ts.ejs +22 -0
  197. package/generators/node-server/templates/server/src/users/dto/authority.dto.ts.ejs +10 -0
  198. package/generators/node-server/templates/server/src/users/dto/user.dto.ts.ejs +116 -0
  199. package/generators/node-server/templates/server/src/users/public.user.controller.ts.ejs +51 -0
  200. package/generators/node-server/templates/server/src/users/user.controller.ts.ejs +191 -0
  201. package/generators/node-server/templates/server/src/users/user.entity.ts.ejs +63 -0
  202. package/generators/node-server/templates/server/src/users/user.mapper.ts.ejs +26 -0
  203. package/generators/node-server/templates/server/src/users/user.module.ts.ejs +19 -0
  204. package/generators/node-server/templates/server/src/users/user.service.ts.ejs +156 -0
  205. package/generators/node-server/templates/server/tsconfig.build.json.ejs +9 -0
  206. package/generators/node-server/templates/server/tsconfig.json.ejs +23 -0
  207. package/generators/node-server/templates/server/typeorm-migration.ts.ejs +18 -0
  208. package/generators/node-server/templates/server/vitest.config.e2e.ts.ejs +16 -0
  209. package/generators/node-server/templates/server/vitest.config.ts.ejs +16 -0
  210. package/generators/server/command.js +7 -0
  211. package/generators/server/generator.js +20 -0
  212. package/generators/server/generators/bootstrap/command.js +5 -0
  213. package/generators/server/generators/bootstrap/generator.js +15 -0
  214. package/generators/server/generators/bootstrap/index.js +2 -0
  215. package/generators/server/index.js +2 -0
  216. package/package.json +75 -4
@@ -0,0 +1,156 @@
1
+ import { Injectable<% if (generateUserManagement) { %>, Logger<% } %> } from '@nestjs/common';
2
+ <%_ if (generateUserManagement) { _%>
3
+ import { Cron } from '@nestjs/schedule';
4
+ <%_ } _%>
5
+ import { InjectRepository } from '@nestjs/typeorm';
6
+ import { EntityMetadata, FindManyOptions, FindOneOptions, <% if (generateUserManagement && typeormRelationsSupport) { %>IsNull, LessThan, Not, <% } %>Repository } from 'typeorm';
7
+ import { <%= user.persistClass %> } from './user.entity.ts';
8
+ import { PublicUserDTO, <%= user.dtoClass%> } from './dto/user.dto.ts';
9
+ import { UserMapper } from './user.mapper.ts';
10
+ <%_ if (databaseTypeMongodb) { _%>
11
+ import { documentOrder } from '../common/sortable-properties.ts';
12
+ <%_ } _%>
13
+ import { User } from './user.entity.ts';
14
+ <%_ if (generateUserManagement) { _%>
15
+ import { PasswordService } from '../auth/password.service.ts';
16
+ <%_ } _%>
17
+
18
+ <%_ if (typeormRelationsSupport) { _%>
19
+ const relations = { authorities: true } as const;
20
+
21
+ <%_ } _%>
22
+ @Injectable()
23
+ export class UserService {
24
+ <%_ if (generateUserManagement) { _%>
25
+ logger = new Logger('UserService');
26
+
27
+ <%_ } _%>
28
+ constructor(
29
+ @InjectRepository(User) private userRepository: Repository<User>,
30
+ <%_ if (generateUserManagement) { _%>
31
+ private readonly passwordService: PasswordService,
32
+ <%_ } _%>
33
+ ) {}
34
+
35
+ /** The TypeORM metadata of the user, the sort of the user lists is validated with. */
36
+ get metadata(): EntityMetadata {
37
+ return this.userRepository.metadata;
38
+ }
39
+
40
+ async findById(id: <%= user.primaryKey.tsType %>): Promise<<%= user.dtoClass%> | undefined> {
41
+ const result = await this.userRepository.findOneBy({ id });
42
+ return UserMapper.fromEntityToDTO(this.flatAuthorities(result))
43
+ }
44
+
45
+ async findByFields(options: FindOneOptions<<%= user.dtoClass%>>): Promise<<%= user.dtoClass%> | undefined> {
46
+ const result = await this.userRepository.findOne(
47
+ <%_ if (typeormRelationsSupport) { _%>
48
+ { ...options, relations },
49
+ <%_ } else { _%>
50
+ options,
51
+ <%_ } _%>
52
+ );
53
+ return UserMapper.fromEntityToDTO(this.flatAuthorities(result));
54
+ }
55
+
56
+ async find(options: FindManyOptions<<%= user.dtoClass%>>): Promise<<%= user.dtoClass%> | undefined> {
57
+ const result = await this.userRepository.findOne(options);
58
+ return UserMapper.fromEntityToDTO(this.flatAuthorities(result));
59
+ }
60
+
61
+ async findAndCount(options: FindManyOptions<<%= user.dtoClass%>>): Promise<[<%= user.dtoClass%>[], number]> {
62
+ const resultList = await this.userRepository.findAndCount(
63
+ <%_ if (typeormRelationsSupport) { _%>
64
+ { ...options, relations },
65
+ <%_ } else { _%>
66
+ { ...options, order: documentOrder(this.metadata, options.order) },
67
+ <%_ } _%>
68
+ );
69
+ const usersDTO: <%= user.dtoClass%>[] = [];
70
+ if (resultList && resultList[0]) {
71
+ resultList[0].forEach(user => usersDTO.push(UserMapper.fromEntityToDTO(this.flatAuthorities(user))));
72
+ resultList[0] = usersDTO;
73
+ }
74
+ return resultList;
75
+ }
76
+
77
+ /** The users of the public user list, like JHipster Spring Boot: the activated ones, by their id and login only. */
78
+ async findPublicUsers(options: FindManyOptions<<%= user.persistClass %>>): Promise<[PublicUserDTO[], number]> {
79
+ const [users, count] = await this.userRepository.findAndCount({
80
+ ...options,
81
+ <%_ if (databaseTypeMongodb) { _%>
82
+ order: documentOrder(this.metadata, options.order),
83
+ <%_ } _%>
84
+ where: { activated: true },
85
+ });
86
+ return [users.map(user => ({ id: user.<%- user.primaryKey.name %>!, login: user.login })), count];
87
+ }
88
+
89
+ async save(userDTO: <%= user.dtoClass%>, creator?: string<% if (generateUserManagement) { %>, updatePassword = false<% } %>): Promise<<%= user.dtoClass%>> {
90
+ const user = this.convertInAuthorities(UserMapper.fromDTOtoEntity(userDTO));
91
+ <%_ if (generateUserManagement) { _%>
92
+ if (updatePassword) {
93
+ await this.passwordService.transform(user);
94
+ }
95
+ <%_ } _%>
96
+ if (creator) {
97
+ if (!user.createdBy ) {
98
+ user.createdBy = creator;
99
+ }
100
+ user.lastModifiedBy = creator;
101
+ }
102
+ const result = await this.userRepository.save(user);
103
+ return UserMapper.fromEntityToDTO(this.flatAuthorities(result));
104
+ }
105
+
106
+ async update(userDTO: <%= user.dtoClass%>, updater?: string): Promise<<%= user.dtoClass%>> {
107
+ return this.save(userDTO, updater);
108
+ }
109
+
110
+ async delete(userDTO: <%= user.dtoClass%>): Promise<<%= user.dtoClass%> | undefined> {
111
+ const user = UserMapper.fromDTOtoEntity(userDTO);
112
+ const result = await this.userRepository.remove(user)
113
+ return UserMapper.fromEntityToDTO(result);
114
+ }
115
+
116
+ <%_ if (generateUserManagement) { _%>
117
+ /**
118
+ * Like JHipster Spring Boot, removes every day, at 01:00, the users registered more than 3 days ago and still not
119
+ * activated: their login and mail are free again.
120
+ */
121
+ @Cron('0 0 1 * * *')
122
+ async removeNotActivatedUsers(): Promise<void> {
123
+ const registeredBefore = new Date(Date.now() - 3 * 24 * 60 * 60 * 1000);
124
+ const users = await this.userRepository.find({
125
+ <%_ if (typeormRelationsSupport) { _%>
126
+ where: { activated: false, activationKey: Not(IsNull()), createdDate: LessThan(registeredBefore) },
127
+ <%_ } else { _%>
128
+ // The operators of MongoDB: TypeORM does not translate its find operators (LessThan) for it.
129
+ where: { activated: false, activationKey: { $ne: null }, createdDate: { $lt: registeredBefore } } as any,
130
+ <%_ } _%>
131
+ });
132
+ for (const user of users) {
133
+ this.logger.debug(`Deleting not activated user ${user.login}`);
134
+ await this.userRepository.remove(user);
135
+ }
136
+ }
137
+
138
+ <%_ } _%>
139
+ private flatAuthorities<T extends <%= user.persistClass %> | null>(user: T): T {
140
+ if (user && user.authorities) {
141
+ const authorities: string[] = [];
142
+ user.authorities.forEach((authority: { name: string }) => authorities.push(authority.name));
143
+ user.authorities = authorities as any[];
144
+ }
145
+ return user;
146
+ }
147
+
148
+ private convertInAuthorities(user: any): <%= user.persistClass %> {
149
+ if (user && user.authorities) {
150
+ const authorities: any[] = [];
151
+ user.authorities.forEach((authority: string) => authorities.push({ name: authority }));
152
+ user.authorities = authorities;
153
+ }
154
+ return user;
155
+ }
156
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ // Emits dist/main.js; TypeScript 6 no longer infers it from the included files.
5
+ "rootDir": "src"
6
+ },
7
+ "include": ["src/**/*"],
8
+ "exclude": ["**/*spec.ts"]
9
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "lib": ["ES2022"],
5
+ // ES modules ("type": "module"), resolved like Node.js does.
6
+ "module": "nodenext",
7
+ "moduleResolution": "nodenext",
8
+ "esModuleInterop": true,
9
+ // Relative imports name the TypeScript file (./app.module.ts), emitted as the JavaScript one (./app.module.js), like
10
+ // the TypeScript files Node.js runs directly.
11
+ "rewriteRelativeImportExtensions": true,
12
+ // The ambient types (TypeScript 6 includes none by default); the specs import the test API from vitest.
13
+ "types": ["node"],
14
+ "outDir": "dist",
15
+ "sourceMap": true,
16
+ "skipLibCheck": true,
17
+ "strict": true,
18
+ // Required by the NestJS decorators and dependency injection.
19
+ "experimentalDecorators": true,
20
+ "emitDecoratorMetadata": true
21
+ },
22
+ "include": ["src/**/*", "**/*spec.ts", "e2e/setup.test.js", "ormconfig.ts", <% if (databaseTypeSql) { %>"typeorm-migration.ts", <% } %>"vitest.config*.ts"]
23
+ }
@@ -0,0 +1,18 @@
1
+ // Runs a command of the typeorm CLI creating a migration (migration:create, migration:generate) with the timestamp of the
2
+ // migrations of the developers: its time plus <%= nodejsMigrationTimestampOffset %>, after the constraints migrations
3
+ // JHipster generates for the entities (their changelogDate plus a smaller offset), like the changelogs added at the end of
4
+ // the master.xml of Liquibase. TypeORM runs the migrations in the order of their timestamp.
5
+ import { spawnSync } from 'node:child_process';
6
+ import process from 'node:process';
7
+ import { fileURLToPath } from 'node:url';
8
+
9
+ const MIGRATION_TIMESTAMP_OFFSET = <%= nodejsMigrationTimestampOffset %>;
10
+
11
+ // The CLI run by Node.js without a shell, which would split the arguments again (a path with a space).
12
+ const typeormCli = fileURLToPath(import.meta.resolve('typeorm/cli.js'));
13
+ const { status } = spawnSync(
14
+ process.execPath,
15
+ [typeormCli, ...process.argv.slice(2), '--timestamp', `${Date.now() + MIGRATION_TIMESTAMP_OFFSET}`],
16
+ { stdio: 'inherit' },
17
+ );
18
+ process.exit(status ?? 1);
@@ -0,0 +1,16 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ // The end-to-end tests of the REST API (supertest), on the test profile. The lcov report is read by SonarQube.
4
+ export default defineConfig({
5
+ test: {
6
+ include: ['e2e/**/*.e2e-spec.ts'],
7
+ setupFiles: ['./e2e/setup.test.js'],
8
+ testTimeout: 10000,
9
+ coverage: {
10
+ include: ['src/**/*.ts'],
11
+ // The specs next to the code are tests, not code to cover.
12
+ exclude: ['src/**/*.spec.ts'],
13
+ reporter: ['text', 'lcov'],
14
+ },
15
+ },
16
+ });
@@ -0,0 +1,16 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ // The unit tests: the specs next to the code. Vite transforms the decorators with their metadata from
4
+ // tsconfig.json (experimentalDecorators, emitDecoratorMetadata), which the dependency injection of NestJS needs.
5
+ export default defineConfig({
6
+ test: {
7
+ include: ['src/**/*.spec.ts'],
8
+ setupFiles: ['./e2e/setup.test.js'],
9
+ coverage: {
10
+ include: ['src/**/*.ts'],
11
+ // The specs next to the code are tests, not code to cover.
12
+ exclude: ['src/**/*.spec.ts'],
13
+ reporter: ['text', 'lcov'],
14
+ },
15
+ },
16
+ });
@@ -0,0 +1,7 @@
1
+ import { asCommand } from 'generator-jhipster';
2
+
3
+ export default asCommand({
4
+ configs: {},
5
+ override: true,
6
+ import: ['jhipster-nodejs:node-server'],
7
+ });
@@ -0,0 +1,20 @@
1
+ import ServerGenerator from 'generator-jhipster/generators/server';
2
+
3
+ export default class extends ServerGenerator {
4
+ constructor(args, opts, features) {
5
+ super(args, opts, { ...features, checkBlueprint: true });
6
+ }
7
+
8
+ async beforeQueue() {
9
+ await this.dependsOnBootstrap('server');
10
+ await this.dependsOnJHipster('common');
11
+ }
12
+
13
+ get [ServerGenerator.COMPOSING]() {
14
+ return this.asComposingTaskGroup({
15
+ async composingTemplateTask() {
16
+ await this.composeWithJHipster('jhipster-nodejs:node-server');
17
+ },
18
+ });
19
+ }
20
+ }
@@ -0,0 +1,5 @@
1
+ import { asCommand } from 'generator-jhipster';
2
+
3
+ export default asCommand({
4
+ configs: {},
5
+ });
@@ -0,0 +1,15 @@
1
+ import BaseApplicationGenerator from 'generator-jhipster/generators/base-application';
2
+
3
+ export default class extends BaseApplicationGenerator {
4
+ constructor(args, opts, features) {
5
+ super(args, opts, { ...features, sbsBlueprint: true });
6
+ }
7
+
8
+ get [BaseApplicationGenerator.COMPOSING]() {
9
+ return this.asComposingTaskGroup({
10
+ async composingTemplateTask() {
11
+ await this.composeWithJHipster('jhipster-nodejs:node-server:bootstrap');
12
+ },
13
+ });
14
+ }
15
+ }
@@ -0,0 +1,2 @@
1
+ export { default } from './generator.js';
2
+ export { default as command } from './command.js';
@@ -0,0 +1,2 @@
1
+ export { default } from './generator.js';
2
+ export { default as command } from './command.js';
package/package.json CHANGED
@@ -1,6 +1,77 @@
1
1
  {
2
2
  "name": "@mshima/generator-jhipster-nodejs",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.0.2",
4
+ "description": "A NodeJS blueprint that creates the backend using NodeJS with NestJS framework",
5
+ "keywords": [
6
+ "yeoman-generator",
7
+ "jhipster-blueprint",
8
+ "jhipster-8",
9
+ "nodejs"
10
+ ],
11
+ "homepage": "https://github.com/jhipster/generator-jhipster-nodejs",
12
+ "bugs": {
13
+ "url": "https://github.com/jhipster/generator-jhipster-nodejs/issues"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/jhipster/generator-jhipster-nodejs.git"
18
+ },
19
+ "license": "Apache-2.0",
20
+ "author": {
21
+ "name": "Angelo Manganiello",
22
+ "email": "angelo.mang@libero.it",
23
+ "url": "https://github.com/amanganiello90"
24
+ },
25
+ "contributors": [
26
+ "Deepu KS <d4udts@gmail.com> (https://deepu105.github.io)",
27
+ "Hadi Rasouli (https://github.com/hadirsa)",
28
+ "Iván García Sainz-Aja (https://github.com/ivangsa)",
29
+ "Daniel Franco <dandrfranco@gmail.com> (https://github.com/DanielFran)"
30
+ ],
31
+ "type": "module",
32
+ "main": "generators/app/index.js",
33
+ "bin": {
34
+ "nhipster": "cli/cli.cjs"
35
+ },
36
+ "files": [
37
+ "build-info.json",
38
+ "cli",
39
+ "generators",
40
+ "!**/__*",
41
+ "!**/*.snap",
42
+ "!**/*.spec.?(c|m)?(j|t)s"
43
+ ],
44
+ "scripts": {
45
+ "ejslint": "ejslint generators/**/*.ejs",
46
+ "lint": "eslint",
47
+ "lint-fix": "npm run ejslint && npm run lint -- --fix",
48
+ "prettier-check": "prettier --check \"{,**/}*.{md,json,yml,html,cjs,mjs,js,cts,mts,ts,tsx,css,scss,vue,java}\"",
49
+ "prettier-format": "prettier --write \"{,**/}*.{md,json,yml,html,cjs,mjs,js,cts,mts,ts,tsx,css,scss,vue,java}\"",
50
+ "sonar:scanner": "sonar-scanner",
51
+ "pretest": "npm run prettier-check && npm run lint",
52
+ "test": "vitest run",
53
+ "update-snapshot": "vitest run --update",
54
+ "vitest": "vitest"
55
+ },
56
+ "dependencies": {
57
+ "chalk": "^5.3.0",
58
+ "generator-jhipster": "npm:@mshima/generator-jhipster@0.0.10"
59
+ },
60
+ "devDependencies": {
61
+ "ejs-lint": "2.0.1",
62
+ "eslint": "10.10.0",
63
+ "eslint-config-prettier": "10.1.8",
64
+ "eslint-plugin-prettier": "5.5.6",
65
+ "globals": "17.12.0",
66
+ "jiti": "2.7.0",
67
+ "prettier": "3.9.6",
68
+ "prettier-plugin-packagejson": "3.0.2",
69
+ "sonarqube-scanner": "5.0.1",
70
+ "vitest": "5.0.5",
71
+ "yeoman-test": ">=10"
72
+ },
73
+ "engines": {
74
+ "generator-jhipster": "^9.4.0",
75
+ "node": "^22.18.0 || >=24.11.0"
76
+ }
77
+ }