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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) 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 +41 -0
  46. package/generators/node-server/files.js +254 -0
  47. package/generators/node-server/generator.js +702 -0
  48. package/generators/node-server/generators/bootstrap/command.js +5 -0
  49. package/generators/node-server/generators/bootstrap/generator.js +83 -0
  50. package/generators/node-server/generators/bootstrap/index.js +2 -0
  51. package/generators/node-server/index.js +2 -0
  52. package/generators/node-server/resources/package.json +76 -0
  53. package/generators/node-server/support/api-fake-data.js +54 -0
  54. package/generators/node-server/support/columns.js +73 -0
  55. package/generators/node-server/support/database.js +24 -0
  56. package/generators/node-server/support/entity-authorities.js +32 -0
  57. package/generators/node-server/support/entity-paths.js +13 -0
  58. package/generators/node-server/support/enums.js +11 -0
  59. package/generators/node-server/support/index.js +9 -0
  60. package/generators/node-server/support/mail-templates.js +82 -0
  61. package/generators/node-server/support/migrations.js +197 -0
  62. package/generators/node-server/support/validators.js +25 -0
  63. package/generators/node-server/templates/.dockerignore.ejs +16 -0
  64. package/generators/node-server/templates/.gitignore.jhi.nodejs.ejs +24 -0
  65. package/generators/node-server/templates/Dockerfile.ejs +54 -0
  66. package/generators/node-server/templates/README.md.jhi.nodejs.ejs +220 -0
  67. package/generators/node-server/templates/package.json.ejs +84 -0
  68. package/generators/node-server/templates/server/README.md.ejs +269 -0
  69. package/generators/node-server/templates/server/e2e/_entityFileName_.database.e2e-spec.ts.ejs +192 -0
  70. package/generators/node-server/templates/server/e2e/_entityFileName_.e2e-spec.ts.ejs +402 -0
  71. package/generators/node-server/templates/server/e2e/account.e2e-spec.ts.ejs +349 -0
  72. package/generators/node-server/templates/server/e2e/app.e2e-spec.ts.ejs +188 -0
  73. package/generators/node-server/templates/server/e2e/authority.e2e-spec.ts.ejs +50 -0
  74. package/generators/node-server/templates/server/e2e/cors.e2e-spec.ts.ejs +110 -0
  75. package/generators/node-server/templates/server/e2e/management.e2e-spec.ts.ejs +180 -0
  76. package/generators/node-server/templates/server/e2e/oauth2-bearer.e2e-spec.ts.ejs +71 -0
  77. package/generators/node-server/templates/server/e2e/session.e2e-spec.ts.ejs +219 -0
  78. package/generators/node-server/templates/server/e2e/setup.test.js.ejs +1 -0
  79. package/generators/node-server/templates/server/e2e/user.e2e-spec.ts.ejs +318 -0
  80. package/generators/node-server/templates/server/env.ejs +1 -0
  81. package/generators/node-server/templates/server/eslint.config.mjs.ejs +48 -0
  82. package/generators/node-server/templates/server/nest-cli.json.ejs +11 -0
  83. package/generators/node-server/templates/server/ormconfig.ts.ejs +35 -0
  84. package/generators/node-server/templates/server/package.json.ejs +143 -0
  85. package/generators/node-server/templates/server/sonar-project.properties.ejs +10 -0
  86. package/generators/node-server/templates/server/src/app.config.spec.ts.ejs +13 -0
  87. package/generators/node-server/templates/server/src/app.config.ts.ejs +179 -0
  88. package/generators/node-server/templates/server/src/app.module.ts.ejs +80 -0
  89. package/generators/node-server/templates/server/src/application-config.ts.ejs +153 -0
  90. package/generators/node-server/templates/server/src/auth/account.controller.ts.ejs +183 -0
  91. package/generators/node-server/templates/server/src/auth/auth.module.ts.ejs +104 -0
  92. package/generators/node-server/templates/server/src/auth/auth.service.ts.ejs +294 -0
  93. package/generators/node-server/templates/server/src/auth/csrf.middleware.spec.ts.ejs +65 -0
  94. package/generators/node-server/templates/server/src/auth/csrf.middleware.ts.ejs +76 -0
  95. package/generators/node-server/templates/server/src/auth/decorators/auth-user.decorator.ts.ejs +8 -0
  96. package/generators/node-server/templates/server/src/auth/decorators/roles.decorator.ts.ejs +4 -0
  97. package/generators/node-server/templates/server/src/auth/dto/key-and-password.dto.ts.ejs +17 -0
  98. package/generators/node-server/templates/server/src/auth/dto/password-change.dto.ts.ejs +17 -0
  99. package/generators/node-server/templates/server/src/auth/dto/user-login.dto.ts.ejs +21 -0
  100. package/generators/node-server/templates/server/src/auth/guards/auth.guard.ts.ejs +50 -0
  101. package/generators/node-server/templates/server/src/auth/guards/oauth2-login.guard.ts.ejs +6 -0
  102. package/generators/node-server/templates/server/src/auth/guards/roles.guard.ts.ejs +25 -0
  103. package/generators/node-server/templates/server/src/auth/index.ts.ejs +8 -0
  104. package/generators/node-server/templates/server/src/auth/jwt.config.spec.ts.ejs +22 -0
  105. package/generators/node-server/templates/server/src/auth/jwt.config.ts.ejs +29 -0
  106. package/generators/node-server/templates/server/src/auth/oauth2.authorities.spec.ts.ejs +24 -0
  107. package/generators/node-server/templates/server/src/auth/oauth2.authorities.ts.ejs +33 -0
  108. package/generators/node-server/templates/server/src/auth/oauth2.config.ts.ejs +51 -0
  109. package/generators/node-server/templates/server/src/auth/passport.jwt.strategy.ts.ejs +45 -0
  110. package/generators/node-server/templates/server/src/auth/passport.oauth2-bearer.strategy.ts.ejs +32 -0
  111. package/generators/node-server/templates/server/src/auth/passport.oauth2.strategy.spec.ts.ejs +27 -0
  112. package/generators/node-server/templates/server/src/auth/passport.oauth2.strategy.ts.ejs +44 -0
  113. package/generators/node-server/templates/server/src/auth/password-util.ts.ejs +10 -0
  114. package/generators/node-server/templates/server/src/auth/password.service.ts.ejs +34 -0
  115. package/generators/node-server/templates/server/src/auth/payload.interface.ts.ejs +14 -0
  116. package/generators/node-server/templates/server/src/auth/role-type.ts.ejs +7 -0
  117. package/generators/node-server/templates/server/src/auth/session-user.middleware.ts.ejs +33 -0
  118. package/generators/node-server/templates/server/src/auth/session.entity.ts.ejs +36 -0
  119. package/generators/node-server/templates/server/src/auth/session.store.spec.ts.ejs +99 -0
  120. package/generators/node-server/templates/server/src/auth/session.store.ts.ejs +116 -0
  121. package/generators/node-server/templates/server/src/auth/user.jwt.controller.ts.ejs +26 -0
  122. package/generators/node-server/templates/server/src/auth/user.oauth2.controller.ts.ejs +78 -0
  123. package/generators/node-server/templates/server/src/auth/user.session.controller.ts.ejs +103 -0
  124. package/generators/node-server/templates/server/src/common/common.module.ts.ejs +19 -0
  125. package/generators/node-server/templates/server/src/common/database/base.entity.ts.ejs +13 -0
  126. package/generators/node-server/templates/server/src/common/database/column-transformers.spec.ts.ejs +46 -0
  127. package/generators/node-server/templates/server/src/common/database/column-transformers.ts.ejs +69 -0
  128. package/generators/node-server/templates/server/src/common/database/column-types.spec.ts.ejs +21 -0
  129. package/generators/node-server/templates/server/src/common/database/column-types.ts.ejs +29 -0
  130. package/generators/node-server/templates/server/src/common/database/pagination.entity.spec.ts.ejs +66 -0
  131. package/generators/node-server/templates/server/src/common/database/pagination.entity.ts.ejs +108 -0
  132. package/generators/node-server/templates/server/src/common/dto/base.dto.ts.ejs +19 -0
  133. package/generators/node-server/templates/server/src/common/errors/error-constants.ts.ejs +10 -0
  134. package/generators/node-server/templates/server/src/common/errors/problem-details.filter.ts.ejs +63 -0
  135. package/generators/node-server/templates/server/src/common/errors/problem.exception.ts.ejs +92 -0
  136. package/generators/node-server/templates/server/src/common/field_validators.ejs +77 -0
  137. package/generators/node-server/templates/server/src/common/header-util.ts.ejs +105 -0
  138. package/generators/node-server/templates/server/src/common/interceptors/logging.interceptor.spec.ts.ejs +93 -0
  139. package/generators/node-server/templates/server/src/common/interceptors/logging.interceptor.ts.ejs +48 -0
  140. package/generators/node-server/templates/server/src/common/logging.spec.ts.ejs +83 -0
  141. package/generators/node-server/templates/server/src/common/logging.ts.ejs +129 -0
  142. package/generators/node-server/templates/server/src/common/metrics.spec.ts.ejs +43 -0
  143. package/generators/node-server/templates/server/src/common/metrics.ts.ejs +198 -0
  144. package/generators/node-server/templates/server/src/common/request.ts.ejs +8 -0
  145. package/generators/node-server/templates/server/src/common/sortable-properties.ts.ejs +43 -0
  146. package/generators/node-server/templates/server/src/common/updatable-properties.ts.ejs +14 -0
  147. package/generators/node-server/templates/server/src/config/application-dev.yml.ejs +118 -0
  148. package/generators/node-server/templates/server/src/config/application-prod.yml.ejs +97 -0
  149. package/generators/node-server/templates/server/src/config/application-secret-samples.yml.ejs +42 -0
  150. package/generators/node-server/templates/server/src/config/application-test.yml.ejs +68 -0
  151. package/generators/node-server/templates/server/src/config/application-tls-samples.yml.ejs +15 -0
  152. package/generators/node-server/templates/server/src/config/application-tls.yml.ejs +15 -0
  153. package/generators/node-server/templates/server/src/config/application.yml.ejs +149 -0
  154. package/generators/node-server/templates/server/src/config.spec.ts.ejs +81 -0
  155. package/generators/node-server/templates/server/src/config.ts.ejs +255 -0
  156. package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.controller.ts.ejs +178 -0
  157. package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.entity.ts.ejs +110 -0
  158. package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.mapper.ts.ejs +37 -0
  159. package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.module.ts.ejs +14 -0
  160. package/generators/node-server/templates/server/src/entities/_entityFileName_/_entityFileName_.service.ts.ejs +123 -0
  161. package/generators/node-server/templates/server/src/entities/_entityFileName_/dto/_entityFileName_.dto.ts.ejs +99 -0
  162. package/generators/node-server/templates/server/src/mail/mail.module.ts.ejs +49 -0
  163. package/generators/node-server/templates/server/src/mail/mail.service.spec.ts.ejs +105 -0
  164. package/generators/node-server/templates/server/src/mail/mail.service.ts.ejs +120 -0
  165. package/generators/node-server/templates/server/src/main.ts.ejs +114 -0
  166. package/generators/node-server/templates/server/src/management/api-docs.controller.ts.ejs +27 -0
  167. package/generators/node-server/templates/server/src/management/api-docs.service.ts.ejs +8 -0
  168. package/generators/node-server/templates/server/src/management/configuration.controller.ts.ejs +80 -0
  169. package/generators/node-server/templates/server/src/management/health.controller.spec.ts.ejs +79 -0
  170. package/generators/node-server/templates/server/src/management/health.controller.ts.ejs +87 -0
  171. package/generators/node-server/templates/server/src/management/health.module.ts.ejs +9 -0
  172. package/generators/node-server/templates/server/src/management/loggers.controller.ts.ejs +40 -0
  173. package/generators/node-server/templates/server/src/management/management.controller.spec.ts.ejs +26 -0
  174. package/generators/node-server/templates/server/src/management/management.controller.ts.ejs +34 -0
  175. package/generators/node-server/templates/server/src/management/management.module.ts.ejs +21 -0
  176. package/generators/node-server/templates/server/src/management/metrics.controller.ts.ejs +85 -0
  177. package/generators/node-server/templates/server/src/migrations/1570200270081-CreateTables.ts.ejs +64 -0
  178. package/generators/node-server/templates/server/src/migrations/1570200270082-CreateSessions.ts.ejs +26 -0
  179. package/generators/node-server/templates/server/src/migrations/1570200490072-SeedUsersRoles.ts.ejs +74 -0
  180. package/generators/node-server/templates/server/src/migrations/_entityConstraintsMigration_.ts.ejs +40 -0
  181. package/generators/node-server/templates/server/src/migrations/_entityMigration_.ts.ejs +26 -0
  182. package/generators/node-server/templates/server/src/migrations/support/schema.ts.ejs +202 -0
  183. package/generators/node-server/templates/server/src/orm.config.ts.ejs +147 -0
  184. package/generators/node-server/templates/server/src/registry/consul.service.ts.ejs +70 -0
  185. package/generators/node-server/templates/server/src/registry/eureka.service.ts.ejs +129 -0
  186. package/generators/node-server/templates/server/src/swagger.ts.ejs +24 -0
  187. package/generators/node-server/templates/server/src/tls.ts.ejs +27 -0
  188. package/generators/node-server/templates/server/src/users/authority.controller.ts.ejs +85 -0
  189. package/generators/node-server/templates/server/src/users/authority.entity.ts.ejs +22 -0
  190. package/generators/node-server/templates/server/src/users/dto/authority.dto.ts.ejs +10 -0
  191. package/generators/node-server/templates/server/src/users/dto/user.dto.ts.ejs +116 -0
  192. package/generators/node-server/templates/server/src/users/public.user.controller.ts.ejs +51 -0
  193. package/generators/node-server/templates/server/src/users/user.controller.ts.ejs +191 -0
  194. package/generators/node-server/templates/server/src/users/user.entity.ts.ejs +63 -0
  195. package/generators/node-server/templates/server/src/users/user.mapper.ts.ejs +26 -0
  196. package/generators/node-server/templates/server/src/users/user.module.ts.ejs +19 -0
  197. package/generators/node-server/templates/server/src/users/user.service.ts.ejs +156 -0
  198. package/generators/node-server/templates/server/tsconfig.build.json.ejs +9 -0
  199. package/generators/node-server/templates/server/tsconfig.json.ejs +23 -0
  200. package/generators/node-server/templates/server/typeorm-migration.ts.ejs +18 -0
  201. package/generators/node-server/templates/server/vitest.config.e2e.ts.ejs +16 -0
  202. package/generators/node-server/templates/server/vitest.config.ts.ejs +16 -0
  203. package/generators/server/command.js +7 -0
  204. package/generators/server/generator.js +20 -0
  205. package/generators/server/generators/bootstrap/command.js +5 -0
  206. package/generators/server/generators/bootstrap/generator.js +15 -0
  207. package/generators/server/generators/bootstrap/index.js +2 -0
  208. package/generators/server/index.js +2 -0
  209. package/package.json +75 -4
@@ -0,0 +1,255 @@
1
+ import * as yaml from 'js-yaml';
2
+
3
+ import { type ApplicationConfig, validateConfiguration } from './application-config.ts';
4
+ import * as fs from 'fs';
5
+ import { randomBytes } from 'crypto';
6
+ import { networkInterfaces } from 'os';
7
+ import * as path from 'path';
8
+ import { Logger } from '@nestjs/common';
9
+
10
+ const logger = new Logger('Config');
11
+
12
+ export class Config {
13
+ [key: string]: any;
14
+
15
+ // The level of the loggers without a level of their own, like Spring Boot.
16
+ 'logging.level.ROOT' = 'INFO';
17
+ 'server.port' = '<%= serverPort %>';
18
+ 'jhipster.clientApp.name' = '<%= frontendAppName %>';
19
+ <%_ if (serviceDiscoveryEureka) { _%>
20
+ 'jhipster.registry.password' = 'admin';
21
+ <%_ } _%>
22
+ <%_ if (!skipClient) { _%>
23
+ 'jhipster.security.content-security-policy' = "default-src 'self'; frame-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval'<%- locals.microfrontend && locals.clientFrameworkAngular ? ' blob:' : '' %> https://storage.googleapis.com; style-src 'self'<%- locals.clientThemeAny ? ' https://fonts.googleapis.com' : '' %> 'unsafe-inline'; img-src 'self' data:; font-src 'self'<%- locals.clientThemeAny ? ' https://fonts.gstatic.com' : '' %> data:";
24
+ <%_ } _%>
25
+ <%_ if (authenticationType === 'jwt') { _%>
26
+ 'jhipster.security.authentication.jwt.base64-secret' = '';
27
+ 'jhipster.security.authentication.jwt.token-validity-in-seconds' = 86400;
28
+ 'jhipster.security.authentication.jwt.token-validity-in-seconds-for-remember-me' = 2592000;
29
+ 'jhipster.security.authentication.jwt.hash-salt-or-rounds' = 10;
30
+ <%_ } else if (authenticationTypeSession) { _%>
31
+ 'jhipster.security.session.secret' = '';
32
+ '<%= nodejsPasswordRoundsProperty %>' = 10;
33
+ <%_ } else if (authenticationType === 'oauth2') { _%>
34
+ 'jhipster.security.session.secret' = '';
35
+ 'jhipster.security.oauth2.audience' = 'account,api://default';
36
+ 'jhipster.security.oauth2.client.provider.oidc.issuer-uri' = '';
37
+ 'jhipster.security.oauth2.client.registration.oidc.client-id' = '';
38
+ 'jhipster.security.oauth2.client.registration.oidc.client-secret' = '';
39
+ <%_ } _%>
40
+ // The values of the env and configprops endpoints: never (shown as ******) like Spring Boot, or always.
41
+ 'management.endpoint.env.show-values' = 'never';
42
+ 'management.endpoint.configprops.show-values' = 'never';
43
+ // CORS is disabled without allowed-origins nor allowed-origin-patterns, like JHipster Spring Boot (application-dev.yml).
44
+ 'jhipster.cors.allowed-origins' = '';
45
+ 'jhipster.cors.allowed-origin-patterns' = '';
46
+ 'jhipster.cors.allowed-methods' = '';
47
+ 'jhipster.cors.allowed-headers' = '';
48
+ 'jhipster.cors.exposed-headers' = '';
49
+ 'jhipster.cors.allow-credentials' = false;
50
+ 'jhipster.cors.max-age' = 1800;
51
+ 'jhipster.mail.base-url' = 'http://127.0.0.1:${server.port}';
52
+ 'jhipster.mail.from' = '<%= baseName %>@localhost';
53
+ <%_ if (generateUserManagement) { _%>
54
+ 'mail.host' = 'localhost';
55
+ 'mail.port' = 25;
56
+ 'mail.username' = '';
57
+ 'mail.password' = '';
58
+ <%_ } _%>
59
+ 'jhipster.swagger.default-include-pattern' = '/api/.*';
60
+ 'jhipster.swagger.title' = '<%= baseName %> API';
61
+ 'jhipster.swagger.description' = '<%= baseName %> API documentation';
62
+ 'jhipster.swagger.version' = '0.0.1';
63
+ 'info.display-ribbon-on-profiles' = 'dev';
64
+ // The proxies whose X-Forwarded-* headers are trusted, like the server.forward-headers-strategy of Spring Boot: none or native.
65
+ 'server.forward-headers-strategy' = 'none';
66
+ 'server.ssl.enabled' = false;
67
+ 'server.ssl.key-store' = '';
68
+ 'server.ssl.key-store-password' = '';
69
+ 'server.ssl.key-store-type' = 'PKCS12';
70
+ <%_ if (serviceDiscoveryEureka) { _%>
71
+ 'eureka.client.enabled' = true;
72
+ 'eureka.client.fetch-registry' = true;
73
+ 'eureka.client.register-with-eureka' = true;
74
+ 'eureka.client.instance-info-replication-interval-seconds' = 10;
75
+ 'eureka.client.registry-fetch-interval-seconds' = 10;
76
+ 'eureka.instance.appname' = '<%= baseName %>';
77
+ 'eureka.instance.instanceId' = '<%= baseName %>:${random.value}';
78
+ 'eureka.instance.lease-renewal-interval-in-seconds' = 5;
79
+ 'eureka.instance.lease-expiration-duration-in-seconds' = 10;
80
+ 'eureka.instance.prefer-ip-address' = true;
81
+ 'eureka.client.service-url.defaultZone' = 'http://admin:${jhipster.registry.password}@localhost:8761/eureka/';
82
+ 'cloud.config.uri' = 'http://admin:${jhipster.registry.password}@localhost:8761/config';
83
+ 'cloud.config.name' = '<%= baseName %>';
84
+ 'cloud.config.profile' = 'prod';
85
+ 'cloud.config.label' = 'master';
86
+ <%_ } _%>
87
+ <%_ if (serviceDiscoveryConsul) { _%>
88
+ 'cloud.consul.enabled' = false;
89
+ 'cloud.consul.host' = 'localhost';
90
+ 'cloud.consul.port' = 8500;
91
+ 'cloud.consul.discovery.service-name' = '<%= baseName.toLowerCase() %>';
92
+ 'cloud.consul.discovery.instance-id' = '<%= baseName.toLowerCase() %>:${random.value}';
93
+ 'cloud.consul.discovery.health-check-path' = '/management/health';
94
+ 'cloud.consul.discovery.health-check-interval' = '10s';
95
+ 'cloud.consul.discovery.health-check-timeout' = '5s';
96
+ 'cloud.consul.discovery.prefer-ip-address' = false;
97
+ <%_ } _%>
98
+
99
+ constructor(properties: Record<string, any>) {
100
+ this.addAll(properties);
101
+ }
102
+
103
+ public get(key: string): any {
104
+ return this[key];
105
+ }
106
+
107
+ <%_ if (!skipClient) { _%>
108
+ public getClientPath(): string {
109
+ return path.join(import.meta.dirname, '../dist/static');
110
+ }
111
+ <%_ } _%>
112
+ public addAll(properties: Record<string, any>): any {
113
+ properties = objectToArray(properties);
114
+ for (const property in properties) {
115
+ if (properties.hasOwnProperty(property)) {
116
+ this[property] = properties[property];
117
+ }
118
+ }
119
+ this.applyEnvironment();
120
+ this.postProcess();
121
+ }
122
+
123
+ /**
124
+ * Environment variables override the properties, like the relaxed binding of Spring Boot: a property is set by its
125
+ * name in upper case with the dots as underscores and the dashes removed, like JHIPSTER_MAIL_BASEURL for
126
+ * jhipster.mail.base-url, or the dashes as underscores, like JHIPSTER_MAIL_BASE_URL.
127
+ */
128
+ private applyEnvironment(): void {
129
+ for (const property of Object.keys(this)) {
130
+ const name = property.toUpperCase().replace(/\./g, '_');
131
+ const value = process.env[name.replace(/-/g, '')] ?? process.env[name.replace(/-/g, '_')];
132
+ if (value !== undefined) {
133
+ const current = this[property];
134
+ this[property] = typeof current === 'number' ? Number(value) : typeof current === 'boolean' ? value === 'true' : value;
135
+ }
136
+ }
137
+ }
138
+
139
+ public postProcess(): any {
140
+ // ${random.value} is a random value, like in Spring Boot (the Eureka instance id).
141
+ const variables = { ...this, ...process.env, 'random.value': randomBytes(16).toString('hex') };
142
+ for (const property in this) {
143
+ if (this.hasOwnProperty(property)) {
144
+ const value = this[property];
145
+ const processedValue = this.processTemplate(value, variables);
146
+ this[property] = processedValue;
147
+ }
148
+ }
149
+ }
150
+
151
+ private processTemplate(template: any, variables: Record<string, any>): any {
152
+ // console.log(template);
153
+ if (typeof template === 'string') {
154
+ return template.replace(new RegExp('\\${[^{]+}', 'g'), name => variables[name.substring(2, name.length - 1)]);
155
+ }
156
+ return template;
157
+ }
158
+ }
159
+
160
+ const configFolder = path.join(import.meta.dirname, 'config');
161
+ const yamlConfig: any = yaml.load(fs.readFileSync(path.join(configFolder, 'application.yml'), 'utf8'));
162
+
163
+ /**
164
+ * The active profiles, like spring.profiles.active of Spring Boot: the comma separated profiles of BACKEND_ENV (the
165
+ * default profile without it), each followed by the profiles of its group (profiles.group of application.yml), like dev
166
+ * that activates secret-samples and api-docs.
167
+ */
168
+ export const activeProfiles: string[] = expandProfiles((process.env.BACKEND_ENV || 'default').split(','), yamlConfig?.profiles?.group ?? {});
169
+
170
+ /** Whether one of the profiles is active, like Environment.acceptsProfiles of Spring. */
171
+ export function isProfileActive(...profiles: string[]): boolean {
172
+ return profiles.some(profile => activeProfiles.includes(profile));
173
+ }
174
+
175
+ function expandProfiles(profiles: string[], groups: Record<string, string | string[]>, expanded: string[] = []): string[] {
176
+ for (const profile of profiles.map(name => name.trim()).filter(Boolean)) {
177
+ if (!expanded.includes(profile)) {
178
+ expanded.push(profile);
179
+ const group = groups[profile] ?? [];
180
+ expandProfiles(typeof group === 'string' ? group.split(',') : group, groups, expanded);
181
+ }
182
+ }
183
+ return expanded;
184
+ }
185
+
186
+ logger.log(`The following ${activeProfiles.length} profiles are active: ${activeProfiles.join(', ')}`);
187
+
188
+ // The application-{profile}.yml file of each active profile, when there is one, in the order of the profiles: the last
189
+ // one wins, like in Spring Boot.
190
+ const profileFiles = activeProfiles
191
+ .map(profile => `application-${profile}.yml`)
192
+ .filter(fileName => fs.existsSync(path.join(configFolder, fileName)));
193
+ const profileConfigs = profileFiles.map(fileName => objectToArray(yaml.load(fs.readFileSync(path.join(configFolder, fileName), 'utf8'))));
194
+
195
+ /**
196
+ * The files of the configuration with their properties, like the property sources of Spring Boot the env endpoint
197
+ * gives: the highest precedence first (the file of the last active profile), application.yml last.
198
+ */
199
+ export const configFiles: { name: string; properties: Record<string, any> }[] = [
200
+ ...profileFiles.map((fileName, index) => ({ name: `Config resource 'config/${fileName}'`, properties: profileConfigs[index] })).reverse(),
201
+ { name: "Config resource 'config/application.yml'", properties: objectToArray(yamlConfig) },
202
+ ];
203
+
204
+ const config = new Config(Object.assign(objectToArray(yamlConfig), ...profileConfigs, { ipAddress: ipAddress() }));
205
+
206
+ export { config };
207
+
208
+ /**
209
+ * The configuration of the ConfigModule of @nestjs/config: the properties of config (the application*.yml files, the
210
+ * environment variables and the cloud config), nested by their dotted names, so ConfigService.get('jhipster.swagger.title')
211
+ * finds them. ConfigModule calls it when the application is created, after the cloud config is loaded by main.ts.
212
+ * Providers and controllers read the configuration with ConfigService; config stays for the code running before the
213
+ * application or outside of it (main.ts, tls.ts, the migrations). Validated like the configuration properties of Spring
214
+ * Boot (application-config.ts): the application does not start with an invalid property.
215
+ */
216
+ export function configuration(): ApplicationConfig {
217
+ const nested: Record<string, any> = {};
218
+ for (const [key, value] of Object.entries(config)) {
219
+ const names = key.split('.');
220
+ let target = nested;
221
+ for (const name of names.slice(0, -1)) {
222
+ target = target[name] = typeof target[name] === 'object' && target[name] !== null ? target[name] : {};
223
+ }
224
+ target[names[names.length - 1]] = value;
225
+ }
226
+ return validateConfiguration(nested) as unknown as ApplicationConfig;
227
+ }
228
+
229
+ function objectToArray(source: any, currentKey?: string, target?: Record<string, any>): Record<string, any> {
230
+ target = target || {};
231
+ for (const property in source) {
232
+ if (source.hasOwnProperty(property)) {
233
+ const newKey = currentKey ? currentKey + '.' + property : property;
234
+ const newVal = source[property];
235
+
236
+ if (typeof newVal === 'object') {
237
+ objectToArray(newVal, newKey, target);
238
+ } else {
239
+ target[newKey] = newVal;
240
+ }
241
+ }
242
+ }
243
+ return target;
244
+ }
245
+
246
+ function ipAddress(): string | null {
247
+ for (const aliases of Object.values(networkInterfaces())) {
248
+ for (const alias of aliases ?? []) {
249
+ if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
250
+ return alias.address;
251
+ }
252
+ }
253
+ }
254
+ return null;
255
+ }
@@ -0,0 +1,178 @@
1
+ <%_
2
+ const pkType = primaryKey.tsType;
3
+ const idPipe = pkType === 'number' ? 'ParseIntPipe' : primaryKey.typeUUID ? 'ParseUUIDPipe' : undefined;
4
+ const idParam = `@Param('id'${idPipe ? `, ${idPipe}` : ''}) id: ${pkType}`;
5
+ _%>
6
+ import { Body, ClassSerializerInterceptor, Controller, Delete, Get, Logger, NotFoundException, Param,<% if (idPipe) { %> <%= idPipe %>,<% } %> Post as PostMethod, Put, UseGuards, Req, UseInterceptors } from '@nestjs/common';
7
+ import { <% if (authenticationTypeJwt) { _%> ApiBearerAuth, <% } else { _%> ApiSecurity, <% } _%> ApiTags, ApiResponse, ApiOperation } from '@nestjs/swagger';
8
+ import { <%= dtoClass %> } from './dto/<%= entityFileName %>.dto.ts';
9
+ import { <%= entityClass %>Service } from './<%= entityFileName %>.service.ts';
10
+ <%_ if (pagination !== 'no') { _%>
11
+ import { PageRequest, Page } from '../../common/database/pagination.entity.ts';
12
+ <%_ } else { _%>
13
+ import { PageRequest } from '../../common/database/pagination.entity.ts';
14
+ <%_ } _%>
15
+ import { AuthGuard, <% if (nodejsReadRoles) { %>Roles, <% } %>RolesGuard } from '../../auth/index.ts';
16
+ import { HeaderUtil } from '../../common/header-util.ts';
17
+ import { isSortableProperty } from '../../common/sortable-properties.ts';
18
+ import { Request } from '../../common/request.ts';
19
+
20
+ import { BadRequestAlertException } from '../../common/errors/problem.exception.ts';
21
+
22
+ const ENTITY_NAME = '<%= entityAlertName %>';
23
+ <%_
24
+ const sortLabels = relationships
25
+ .filter(relationship => relationship.ownerSide && !relationship.collection && relationship.otherEntityField)
26
+ .map(relationship => `${relationship.propertyName}: '${relationship.otherEntityField}'`);
27
+ _%>
28
+ /** The label of each relationship to one, the other field a list can be sorted on besides the id. */
29
+ const SORT_LABELS: Record<string, string> = { <%- sortLabels.join(', ') %> };
30
+
31
+ @Controller('api/<%= entityApiUrl %>')
32
+ @UseGuards(AuthGuard, RolesGuard)
33
+ @UseInterceptors(ClassSerializerInterceptor)
34
+ <%_ if (authenticationType === 'jwt') { _%>
35
+ @ApiBearerAuth()
36
+ <%_ } else { _%>
37
+ @ApiSecurity({})
38
+ <%_ } _%>
39
+ @ApiTags('<%= entityApiUrl %>')
40
+ export class <%= entityClass %>Controller {
41
+ logger = new Logger('<%= entityClass %>Controller');
42
+
43
+ constructor(
44
+ private readonly <%= entityInstance %>Service: <%= entityClass %>Service,
45
+ private readonly headerUtil: HeaderUtil,
46
+ ) {}
47
+
48
+
49
+ @Get('/')
50
+ <%_ if (nodejsReadRoles) { _%>
51
+ @Roles(<%- nodejsReadRoles %>)
52
+ <%_ } _%>
53
+ @ApiResponse({
54
+ status: 200,
55
+ description: 'List all records',
56
+ type: <%= dtoClass %>,
57
+ isArray: true,
58
+ })
59
+ async getAll(@Req() req: Request): Promise<<%= dtoClass %> []> {
60
+ <%_ for (const relationship of nodejsMappedByRelationships.filter(relationship => relationship.relationshipOneToOne)) { _%>
61
+ // The records without <%= relationship.relationshipName %>, for the form of the other entity, like JHipster Spring Boot.
62
+ if (req.query.filter === '<%- relationship.relationshipName.toLowerCase() %>-is-null') {
63
+ return this.<%= entityInstance %>Service.findAllWhere<%- relationship.relationshipNameCapitalized %>IsNull();
64
+ }
65
+ <%_ } _%>
66
+ const pageRequest: PageRequest = new PageRequest(
67
+ req.query.page,
68
+ req.query.size,
69
+ req.query.sort ?? '<%- primaryKey.name %>,ASC',
70
+ property => isSortableProperty(this.<%= entityInstance %>Service.metadata, property, { labels: SORT_LABELS }),
71
+ );
72
+ <%_ if (pagination === 'no') { _%>
73
+ // Like JHipster Spring Boot, an entity without pagination lists all its records, without the pagination headers.
74
+ const [results] = await this.<%= entityInstance %>Service.findAndCount({
75
+ order: pageRequest.asOrder(),
76
+ });
77
+ return results;
78
+ <%_ } else { _%>
79
+ const [results, count] = await this.<%= entityInstance %>Service.findAndCount({
80
+ skip: +pageRequest.page * pageRequest.size,
81
+ take: +pageRequest.size,
82
+ order: pageRequest.asOrder(),
83
+ });
84
+ this.headerUtil.addPaginationHeaders(req.res, new Page(results, count, pageRequest));
85
+ return results;
86
+ <%_ } _%>
87
+ }
88
+
89
+ @Get('/:id')
90
+ <%_ if (nodejsReadRoles) { _%>
91
+ @Roles(<%- nodejsReadRoles %>)
92
+ <%_ } _%>
93
+ @ApiResponse({
94
+ status: 200,
95
+ description: 'The found record',
96
+ type: <%= dtoClass %>,
97
+ })
98
+ async getOne(<%- idParam %>): Promise<<%= dtoClass %>> {
99
+ const <%= entityInstance %>DTO = await this.<%= entityInstance %>Service.findById(id);
100
+ if (!<%= entityInstance %>DTO) {
101
+ throw new NotFoundException();
102
+ }
103
+ return <%= entityInstance %>DTO;
104
+ }
105
+
106
+ @PostMethod('/')
107
+ <%_ if (nodejsWriteRoles) { _%>
108
+ @Roles(<%- nodejsWriteRoles %>)
109
+ <%_ } _%>
110
+ @ApiOperation({ summary: 'Create <%= entityInstance %>' })
111
+ @ApiResponse({
112
+ status: 201,
113
+ description: 'The record has been successfully created.',
114
+ type: <%= dtoClass %>,
115
+ })
116
+ @ApiResponse({ status: 400, description: 'The record already has an id.' })
117
+ @ApiResponse({ status: 403, description: 'Forbidden.' })
118
+ async post(@Req() req: Request, @Body() <%= entityInstance %>DTO: <%= dtoClass %>): Promise<<%= dtoClass %>> {
119
+ if (<%= entityInstance %>DTO.id !== undefined && <%= entityInstance %>DTO.id !== null) {
120
+ // Like JHipster Spring Boot, a new record cannot have an id: it would update an existing one.
121
+ throw new BadRequestAlertException('A new <%= entityInstance %> cannot already have an ID', ENTITY_NAME, 'idexists');
122
+ }
123
+ const created = await this.<%= entityInstance %>Service.save(<%= entityInstance %>DTO, req.user?.login);
124
+ this.headerUtil.addEntityCreatedHeaders(req.res, ENTITY_NAME, created.id);
125
+ req.res.location(`/api/<%= entityApiUrl %>/${created.id}`);
126
+ return created;
127
+ }
128
+
129
+ @Put('/:id')
130
+ <%_ if (nodejsWriteRoles) { _%>
131
+ @Roles(<%- nodejsWriteRoles %>)
132
+ <%_ } _%>
133
+ @ApiOperation({ summary: 'Update <%= entityInstance %> with id' })
134
+ @ApiResponse({
135
+ status: 200,
136
+ description: 'The record has been successfully updated.',
137
+ type: <%= dtoClass %>,
138
+ })
139
+ @ApiResponse({ status: 400, description: 'Invalid id, or the record does not exist.' })
140
+ async putId(@Req() req: Request, <%- idParam %>, @Body() <%= entityInstance %>DTO: <%= dtoClass %>): Promise<<%= dtoClass %>> {
141
+ await this.validateIdForUpdate(req, id, <%= entityInstance %>DTO);
142
+ const updated = await this.<%= entityInstance %>Service.update(<%= entityInstance %>DTO, req.user?.login);
143
+ this.headerUtil.addEntityUpdatedHeaders(req.res, ENTITY_NAME, id);
144
+ return updated;
145
+ }
146
+
147
+ @Delete('/:id')
148
+ <%_ if (nodejsWriteRoles) { _%>
149
+ @Roles(<%- nodejsWriteRoles %>)
150
+ <%_ } _%>
151
+ @ApiOperation({ summary: 'Delete <%= entityInstance %>' })
152
+ @ApiResponse({
153
+ status: 204,
154
+ description: 'The record has been successfully deleted.',
155
+ })
156
+ async deleteById(@Req() req: Request, <%- idParam %>): Promise<void> {
157
+ this.headerUtil.addEntityDeletedHeaders(req.res, ENTITY_NAME, id);
158
+ return await this.<%= entityInstance %>Service.deleteById(id);
159
+ }
160
+
161
+ /**
162
+ * Checks the id of an update like JHipster Spring Boot: the body must have the id of the path,
163
+ * and the record must exist, otherwise answers 400.
164
+ */
165
+ private async validateIdForUpdate(req: Request, id: <%= pkType %>, <%= entityInstance %>DTO: Partial<<%= dtoClass %>> | undefined): Promise<<%= dtoClass %>> {
166
+ if (<%= entityInstance %>DTO?.id === undefined || <%= entityInstance %>DTO.id === null) {
167
+ throw new BadRequestAlertException('Invalid id', ENTITY_NAME, 'idnull');
168
+ }
169
+ if (String(<%= entityInstance %>DTO.id) !== String(id)) {
170
+ throw new BadRequestAlertException('Invalid ID', ENTITY_NAME, 'idinvalid');
171
+ }
172
+ const existing = await this.<%= entityInstance %>Service.findById(id);
173
+ if (!existing) {
174
+ throw new BadRequestAlertException('Entity not found', ENTITY_NAME, 'idnotfound');
175
+ }
176
+ return existing;
177
+ }
178
+ }
@@ -0,0 +1,110 @@
1
+ import { <%_ if (databaseType === 'mongodb') { _%> ObjectIdColumn <%_ } else { _%> PrimaryGeneratedColumn <%_ } _%>, Entity, Column <%_ if (databaseType !== 'mongodb') { _%>, JoinColumn, OneToOne, ManyToOne, OneToMany, ManyToMany, JoinTable, type Relation <%_ } _%> } from 'typeorm';
2
+ import { BaseEntity } from '../../common/database/base.entity.ts';
3
+ <%_ if (nodejsColumnTransformers.length > 0) { _%>
4
+ import { <%- nodejsColumnTransformers.map(name => `${name}Transformer`).join(', ') %> } from '../../common/database/column-transformers.ts';
5
+ <%_ } _%>
6
+ <%_ if (nodejsColumnTypeImports.length > 0) { _%>
7
+ import { <%- nodejsColumnTypeImports.join(', ') %> } from '../../common/database/column-types.ts';
8
+ <%_ } _%>
9
+
10
+ <%_
11
+ let isUserRelationship = false;
12
+ const uniqueEntities = {};
13
+ const uniqueEnums = {};
14
+
15
+ for (idx in fields) {
16
+ if (fields[idx].fieldIsEnum && (
17
+ !uniqueEnums[fields[idx].fieldType] || (uniqueEnums[fields[idx].fieldType] && fields[idx].fieldValues.length !== 0))) {
18
+ uniqueEnums[fields[idx].fieldType] = this._.kebabCase(fields[idx].fieldType);
19
+ }
20
+ }
21
+ for (idx in relationships) {
22
+ const relationship = relationships[idx];
23
+ const otherEntityClass = relationship.otherEntity.persistClass;
24
+ if (relationship.otherEntity.entityClass === 'User'){
25
+ isUserRelationship = true;
26
+ }
27
+ else if (!uniqueEntities[otherEntityClass] && otherEntityClass != persistClass) {
28
+ uniqueEntities[otherEntityClass] = relationship.otherEntity.nodejsEntityPath;
29
+ }
30
+ }
31
+ _%>
32
+
33
+ <%_ Object.keys(uniqueEntities).forEach(function(entityClass) { _%>
34
+ import { <%= entityClass %> } from '../../<%= uniqueEntities[entityClass] %>';
35
+ <%_ }); _%>
36
+ <%_ Object.keys(uniqueEnums).forEach(function(enumClass) { _%>
37
+ import { <%= enumClass %> } from '../enumeration/<%= uniqueEnums[enumClass] %>.ts';
38
+ <%_ }); _%>
39
+
40
+ <%_ if (isUserRelationship === true) { _%>
41
+ import { <%= user.persistClass %> } from '../../users/user.entity.ts';
42
+ <%_ } _%>
43
+
44
+ <%_ if (typeof javadoc == 'undefined') { _%>
45
+ /**
46
+ * A <%= persistClass %>.
47
+ */
48
+ <%_ } else { _%>
49
+ <%- formatAsClassJavadoc(javadoc) %>
50
+ <%_ } _%>
51
+ @Entity('<%= entityTableName %>')
52
+ export class <%= persistClass %> extends BaseEntity {
53
+
54
+ <%_ if (databaseTypeMongodb) { _%>
55
+ @ObjectIdColumn({ name: '_<%- primaryKey.name %>' })
56
+ <%_ } else if (databaseTypeSql) { _%>
57
+ @PrimaryGeneratedColumn(<%- primaryKey.typeUUID ? "'uuid'" : '' %>)
58
+ <%_ } _%>
59
+ <%- primaryKey.name %>?: <%- primaryKey.tsType %>;
60
+
61
+ <%_ for (const field of fields.filter(field => !field.id)) {
62
+ if (typeof field.javadoc !== 'undefined') { _%>
63
+ <%- formatAsFieldJavadoc(field.javadoc) %>
64
+ <%_ }
65
+ const { fieldType, fieldTypeBlobContent, fieldName } = field; _%>
66
+ @Column({ <%- field.nodejsColumnOptions.join(', ') %> })
67
+ <%= fieldName %><%- field.fieldValidationRequired ? '!' : '?' %>: <%= field.nodejsFieldType %>;
68
+
69
+ <%_ if ((fieldType === 'byte[]' || fieldType === 'ByteBuffer') && fieldTypeBlobContent !== 'text') { _%>
70
+ @Column({ <%- field.nodejsContentTypeColumnOptions.join(', ') %> })
71
+ <%= fieldName %>ContentType<%- field.fieldValidationRequired ? '!' : '?' %>: string;
72
+ <%_ }
73
+ } _%>
74
+
75
+ <%_ for (const relationship of relationships) {
76
+ const { otherEntityRelationshipName, otherEntityRelationshipNamePlural, relationshipFieldName, relationshipFieldNamePlural, ownerSide, otherEntityUser } = relationship;
77
+ const otherEntityClass = relationship.otherEntity.persistClass;
78
+ if (relationship.relationshipOneToMany) { _%>
79
+ @OneToMany(() => <%= otherEntityClass %> <%_ if (!otherEntityUser) { _%>, other => other.<%= otherEntityRelationshipName %><%_ } _%>)
80
+ <%= relationshipFieldNamePlural %><%- relationship.relationshipRequired ? '!' : '?' %>: Relation<<%= otherEntityClass %>[]>;
81
+
82
+ <%_ } else if (relationship.relationshipManyToOne) { _%>
83
+ @ManyToOne(() => <%= otherEntityClass %> <%_ if (!ownerSide && !otherEntityUser) { _%>, other => other.<%= otherEntityRelationshipNamePlural %> <%_ } _%>)
84
+ <%= relationshipFieldName %><%- relationship.relationshipRequired ? '!' : '?' %>: Relation<<%= otherEntityClass %>>;
85
+
86
+ <%_ } else if (relationship.relationshipManyToMany) { _%>
87
+ @ManyToMany(() => <%= otherEntityClass %> )
88
+ <%_ if (relationship.nodejsJoinTable) { _%>
89
+ @JoinTable({
90
+ name: '<%= relationship.nodejsJoinTable.name %>',
91
+ joinColumn: { name: '<%= relationship.nodejsJoinTable.joinColumn.name %>', referencedColumnName: '<%= relationship.nodejsJoinTable.joinColumn.referencedColumnName %>' },
92
+ inverseJoinColumn: { name: '<%= relationship.nodejsJoinTable.inverseJoinColumn.name %>', referencedColumnName: '<%= relationship.nodejsJoinTable.inverseJoinColumn.referencedColumnName %>' }
93
+ })
94
+ <%_ } _%>
95
+ <%= relationshipFieldNamePlural %><%- relationship.relationshipRequired ? '!' : '?' %>: Relation<<%= otherEntityClass %>[]>;
96
+
97
+ <%_ } else { _%>
98
+ <%_ if (ownerSide) { _%>
99
+ @OneToOne(() => <%= otherEntityClass %>)
100
+ @JoinColumn()
101
+ <%_ } else { _%>
102
+ @OneToOne(() => <%= otherEntityClass %>, other => other.<%= otherEntityRelationshipName %>)
103
+ <%_ } _%>
104
+ <%= relationshipFieldName %><%- relationship.relationshipRequired ? '!' : '?' %>: Relation<<%= otherEntityClass %>>;
105
+
106
+ <%_ }
107
+ } _%>
108
+ // jhipster-needle-entity-add-field - JHipster will add fields here, do not remove
109
+
110
+ }
@@ -0,0 +1,37 @@
1
+ <%_
2
+ // The relationships the other entity stores (nodejsMappedByRelationships): never stored from this entity.
3
+ const inverseProperties = nodejsMappedByRelationships.map(relationship => relationship.propertyName);
4
+ _%>
5
+ import { <%= persistClass %> } from './<%= entityFileName %>.entity.ts';
6
+ import { <%= dtoClass %> } from './dto/<%= entityFileName %>.dto.ts';
7
+
8
+
9
+ /**
10
+ * A <%= entityClass %> mapper object.
11
+ */
12
+ export class <%= entityClass %>Mapper {
13
+
14
+ static fromDTOtoEntity(entityDTO: <%= dtoClass %>): <%= persistClass %>;
15
+ static fromDTOtoEntity(entityDTO: <%= dtoClass %> | null | undefined): <%= persistClass %> | undefined;
16
+ static fromDTOtoEntity(entityDTO: <%= dtoClass %> | null | undefined): <%= persistClass %> | undefined {
17
+ if (!entityDTO) {
18
+ return undefined;
19
+ }
20
+ <%_ if (inverseProperties.length > 0) { _%>
21
+ // The relationships the other entity owns are not stored from this one.
22
+ const { <%- inverseProperties.map(property => `${property}: _${property}`).join(', ') %>, ...fields } = entityDTO;
23
+ return Object.assign(new <%= persistClass %>(), fields);
24
+ <%_ } else { _%>
25
+ return Object.assign(new <%= persistClass %>(), entityDTO);
26
+ <%_ } _%>
27
+ }
28
+
29
+ static fromEntityToDTO(entity: <%= persistClass %>): <%= dtoClass %>;
30
+ static fromEntityToDTO(entity: <%= persistClass %> | null | undefined): <%= dtoClass %> | undefined;
31
+ static fromEntityToDTO(entity: <%= persistClass %> | null | undefined): <%= dtoClass %> | undefined {
32
+ if (!entity) {
33
+ return undefined;
34
+ }
35
+ return Object.assign(new <%= dtoClass %>(), entity);
36
+ }
37
+ }
@@ -0,0 +1,14 @@
1
+ import { Module } from '@nestjs/common';
2
+ import { TypeOrmModule } from '@nestjs/typeorm';
3
+ import { <%= entityClass %> } from './<%= entityFileName %>.entity.ts';
4
+ import { <%= entityClass %>Controller } from './<%= entityFileName %>.controller.ts';
5
+ import { <%= entityClass %>Service } from './<%= entityFileName %>.service.ts';
6
+
7
+
8
+ @Module({
9
+ imports: [TypeOrmModule.forFeature([<%= entityClass %>])],
10
+ controllers: [<%= entityClass %>Controller],
11
+ providers: [<%= entityClass %>Service],
12
+ exports: [<%= entityClass %>Service],
13
+ })
14
+ export class <%= entityClass %>Module {}