@rxap/plugin-angular 20.0.1-dev.1 → 20.0.1-dev.11

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 (274) hide show
  1. package/.eslintignore +6 -0
  2. package/.eslintrc.json +44 -0
  3. package/CHANGELOG.md +43 -0
  4. package/LICENSE +621 -0
  5. package/README.md.handlebars +115 -0
  6. package/jest.config.ts +11 -0
  7. package/package.json +11 -24
  8. package/project.json +68 -0
  9. package/schematics.yaml +6 -0
  10. package/src/application.ts +124 -0
  11. package/src/executors/check-ng-package/executor.ts +33 -0
  12. package/src/executors/config/executor.ts +74 -0
  13. package/src/executors/i18n/executor.ts +198 -0
  14. package/src/executors/tailwind/executor.ts +34 -0
  15. package/src/generators/convert-to-buildable-library/generator.ts +110 -0
  16. package/src/generators/fix-schematic/generator.ts +103 -0
  17. package/src/generators/fix-schematic/index.ts +5 -0
  18. package/src/generators/init/coerce-nx-json.ts +72 -0
  19. package/src/generators/init/generator.ts +28 -0
  20. package/src/generators/init/index.ts +5 -0
  21. package/src/generators/init/init-workspace.ts +84 -0
  22. package/src/generators/init-application/assert-main-statements.ts +74 -0
  23. package/src/generators/init-application/cleanup.ts +127 -0
  24. package/src/generators/init-application/coerce-app-config.ts +147 -0
  25. package/src/generators/init-application/coerce-environment-files.ts +105 -0
  26. package/src/generators/init-application/coerce-localazy-config-file.ts +26 -0
  27. package/src/generators/init-application/coerce-project.ts +128 -0
  28. package/src/generators/init-application/generate-authentication.ts +122 -0
  29. package/src/generators/init-application/generate-monolithic.spec.ts +45 -0
  30. package/src/generators/init-application/generate-monolithic.ts +57 -0
  31. package/src/generators/init-application/generator.ts +356 -0
  32. package/src/generators/init-application/index.ts +5 -0
  33. package/src/generators/init-application/link-mfe-remote-with-host.ts +60 -0
  34. package/src/generators/init-application/project-i18n-configuration.ts +4 -0
  35. package/src/generators/init-application/update-git-ignore.ts +22 -0
  36. package/src/generators/init-application/update-main-file.ts +118 -0
  37. package/src/generators/init-application/update-project-targets.ts +229 -0
  38. package/src/generators/init-application/update-tags.ts +30 -0
  39. package/src/generators/init-application/update-target-defaults.ts +43 -0
  40. package/src/generators/init-application/update-ts-config.ts +31 -0
  41. package/src/generators/init-component/generator.ts +147 -0
  42. package/src/generators/init-component/index.ts +5 -0
  43. package/src/generators/init-feature/generator.ts +77 -0
  44. package/src/generators/init-feature/index.ts +5 -0
  45. package/src/generators/init-feature-library/generator.ts +82 -0
  46. package/src/generators/init-feature-library/index.ts +5 -0
  47. package/src/generators/init-feature-library/init-project.ts +53 -0
  48. package/src/generators/init-feature-library/init-workspace.ts +10 -0
  49. package/src/generators/init-library/check-if-secondary-entrypoint-include-in-the-ts-config.ts +46 -0
  50. package/src/generators/init-library/cleanup.ts +22 -0
  51. package/src/generators/init-library/coerce-projects.ts +118 -0
  52. package/src/generators/init-library/coerce-tailwind-theme-scss.ts +27 -0
  53. package/src/generators/init-library/extend-angular-specific-eslint.ts +37 -0
  54. package/src/generators/init-library/generator.ts +87 -0
  55. package/src/generators/init-library/has-index-scss.ts +14 -0
  56. package/src/generators/init-library/has-tailwind-config.ts +9 -0
  57. package/src/generators/init-library/index.ts +5 -0
  58. package/src/generators/init-library/init-project.ts +46 -0
  59. package/src/generators/init-library/init-workspace.ts +26 -0
  60. package/src/generators/init-library/is-ng-packagr-project.ts +9 -0
  61. package/src/generators/init-library/ng-package-json.ts +23 -0
  62. package/src/generators/init-library/set-general-target-defaults.ts +36 -0
  63. package/src/generators/init-library/update-package-json.ts +26 -0
  64. package/src/generators/init-library/update-project-ng-package-configuration.ts +51 -0
  65. package/src/generators/init-library/update-ts-config.ts +24 -0
  66. package/src/generators/schematic/generator.ts +179 -0
  67. package/src/generators/schematic/index.ts +5 -0
  68. package/src/i18n.ts +130 -0
  69. package/src/lib/angular-version.ts +1 -0
  70. package/src/lib/coerce-cypress-component-testing.ts +113 -0
  71. package/src/lib/coerce-test-setup.ts +60 -0
  72. package/src/library.ts +153 -0
  73. package/src/migrations/update-19-0-0/add-m2-prefix-to-material-scss-functions.ts +32 -0
  74. package/src/migrations/update-19-0-0/migration.ts +283 -0
  75. package/src/test-setup.ts +24 -0
  76. package/tsconfig.json +20 -0
  77. package/tsconfig.lib.json +10 -0
  78. package/tsconfig.spec.json +15 -0
  79. package/tsconfig.typedoc.json +5 -0
  80. package/src/application.d.ts +0 -6
  81. package/src/application.js +0 -77
  82. package/src/application.js.map +0 -1
  83. package/src/executors/check-ng-package/executor.d.ts +0 -5
  84. package/src/executors/check-ng-package/executor.js +0 -30
  85. package/src/executors/check-ng-package/executor.js.map +0 -1
  86. package/src/executors/config/executor.d.ts +0 -10
  87. package/src/executors/config/executor.js +0 -65
  88. package/src/executors/config/executor.js.map +0 -1
  89. package/src/executors/i18n/executor.d.ts +0 -9
  90. package/src/executors/i18n/executor.js +0 -158
  91. package/src/executors/i18n/executor.js.map +0 -1
  92. package/src/executors/tailwind/executor.d.ts +0 -5
  93. package/src/executors/tailwind/executor.js +0 -31
  94. package/src/executors/tailwind/executor.js.map +0 -1
  95. package/src/generators/convert-to-buildable-library/generator.d.ts +0 -4
  96. package/src/generators/convert-to-buildable-library/generator.js +0 -88
  97. package/src/generators/convert-to-buildable-library/generator.js.map +0 -1
  98. package/src/generators/fix-schematic/generator.d.ts +0 -4
  99. package/src/generators/fix-schematic/generator.js +0 -72
  100. package/src/generators/fix-schematic/generator.js.map +0 -1
  101. package/src/generators/fix-schematic/index.d.ts +0 -2
  102. package/src/generators/fix-schematic/index.js +0 -7
  103. package/src/generators/fix-schematic/index.js.map +0 -1
  104. package/src/generators/init/coerce-nx-json.d.ts +0 -3
  105. package/src/generators/init/coerce-nx-json.js +0 -74
  106. package/src/generators/init/coerce-nx-json.js.map +0 -1
  107. package/src/generators/init/generator.d.ts +0 -4
  108. package/src/generators/init/generator.js +0 -19
  109. package/src/generators/init/generator.js.map +0 -1
  110. package/src/generators/init/index.d.ts +0 -2
  111. package/src/generators/init/index.js +0 -7
  112. package/src/generators/init/index.js.map +0 -1
  113. package/src/generators/init/init-workspace.d.ts +0 -3
  114. package/src/generators/init/init-workspace.js +0 -73
  115. package/src/generators/init/init-workspace.js.map +0 -1
  116. package/src/generators/init-application/assert-main-statements.d.ts +0 -4
  117. package/src/generators/init-application/assert-main-statements.js +0 -76
  118. package/src/generators/init-application/assert-main-statements.js.map +0 -1
  119. package/src/generators/init-application/cleanup.d.ts +0 -3
  120. package/src/generators/init-application/cleanup.js +0 -108
  121. package/src/generators/init-application/cleanup.js.map +0 -1
  122. package/src/generators/init-application/coerce-app-config.d.ts +0 -3
  123. package/src/generators/init-application/coerce-app-config.js +0 -143
  124. package/src/generators/init-application/coerce-app-config.js.map +0 -1
  125. package/src/generators/init-application/coerce-environment-files.d.ts +0 -5
  126. package/src/generators/init-application/coerce-environment-files.js +0 -75
  127. package/src/generators/init-application/coerce-environment-files.js.map +0 -1
  128. package/src/generators/init-application/coerce-localazy-config-file.d.ts +0 -2
  129. package/src/generators/init-application/coerce-localazy-config-file.js +0 -25
  130. package/src/generators/init-application/coerce-localazy-config-file.js.map +0 -1
  131. package/src/generators/init-application/coerce-project.d.ts +0 -4
  132. package/src/generators/init-application/coerce-project.js +0 -56
  133. package/src/generators/init-application/coerce-project.js.map +0 -1
  134. package/src/generators/init-application/generate-authentication.d.ts +0 -3
  135. package/src/generators/init-application/generate-authentication.js +0 -97
  136. package/src/generators/init-application/generate-authentication.js.map +0 -1
  137. package/src/generators/init-application/generate-monolithic.d.ts +0 -3
  138. package/src/generators/init-application/generate-monolithic.js +0 -45
  139. package/src/generators/init-application/generate-monolithic.js.map +0 -1
  140. package/src/generators/init-application/generator.d.ts +0 -4
  141. package/src/generators/init-application/generator.js +0 -257
  142. package/src/generators/init-application/generator.js.map +0 -1
  143. package/src/generators/init-application/index.d.ts +0 -2
  144. package/src/generators/init-application/index.js +0 -7
  145. package/src/generators/init-application/index.js.map +0 -1
  146. package/src/generators/init-application/link-mfe-remote-with-host.d.ts +0 -3
  147. package/src/generators/init-application/link-mfe-remote-with-host.js +0 -54
  148. package/src/generators/init-application/link-mfe-remote-with-host.js.map +0 -1
  149. package/src/generators/init-application/project-i18n-configuration.d.ts +0 -7
  150. package/src/generators/init-application/project-i18n-configuration.js +0 -3
  151. package/src/generators/init-application/project-i18n-configuration.js.map +0 -1
  152. package/src/generators/init-application/update-git-ignore.d.ts +0 -3
  153. package/src/generators/init-application/update-git-ignore.js +0 -17
  154. package/src/generators/init-application/update-git-ignore.js.map +0 -1
  155. package/src/generators/init-application/update-main-file.d.ts +0 -3
  156. package/src/generators/init-application/update-main-file.js +0 -106
  157. package/src/generators/init-application/update-main-file.js.map +0 -1
  158. package/src/generators/init-application/update-project-targets.d.ts +0 -6
  159. package/src/generators/init-application/update-project-targets.js +0 -210
  160. package/src/generators/init-application/update-project-targets.js.map +0 -1
  161. package/src/generators/init-application/update-tags.d.ts +0 -3
  162. package/src/generators/init-application/update-tags.js +0 -25
  163. package/src/generators/init-application/update-tags.js.map +0 -1
  164. package/src/generators/init-application/update-target-defaults.d.ts +0 -3
  165. package/src/generators/init-application/update-target-defaults.js +0 -30
  166. package/src/generators/init-application/update-target-defaults.js.map +0 -1
  167. package/src/generators/init-application/update-ts-config.d.ts +0 -2
  168. package/src/generators/init-application/update-ts-config.js +0 -30
  169. package/src/generators/init-application/update-ts-config.js.map +0 -1
  170. package/src/generators/init-component/generator.d.ts +0 -5
  171. package/src/generators/init-component/generator.js +0 -106
  172. package/src/generators/init-component/generator.js.map +0 -1
  173. package/src/generators/init-component/index.d.ts +0 -2
  174. package/src/generators/init-component/index.js +0 -7
  175. package/src/generators/init-component/index.js.map +0 -1
  176. package/src/generators/init-feature/generator.d.ts +0 -4
  177. package/src/generators/init-feature/generator.js +0 -53
  178. package/src/generators/init-feature/generator.js.map +0 -1
  179. package/src/generators/init-feature/index.d.ts +0 -2
  180. package/src/generators/init-feature/index.js +0 -7
  181. package/src/generators/init-feature/index.js.map +0 -1
  182. package/src/generators/init-feature-library/generator.d.ts +0 -4
  183. package/src/generators/init-feature-library/generator.js +0 -51
  184. package/src/generators/init-feature-library/generator.js.map +0 -1
  185. package/src/generators/init-feature-library/index.d.ts +0 -2
  186. package/src/generators/init-feature-library/index.js +0 -7
  187. package/src/generators/init-feature-library/index.js.map +0 -1
  188. package/src/generators/init-feature-library/init-project.d.ts +0 -3
  189. package/src/generators/init-feature-library/init-project.js +0 -41
  190. package/src/generators/init-feature-library/init-project.js.map +0 -1
  191. package/src/generators/init-feature-library/init-workspace.d.ts +0 -3
  192. package/src/generators/init-feature-library/init-workspace.js +0 -12
  193. package/src/generators/init-feature-library/init-workspace.js.map +0 -1
  194. package/src/generators/init-library/check-if-secondary-entrypoint-include-in-the-ts-config.d.ts +0 -2
  195. package/src/generators/init-library/check-if-secondary-entrypoint-include-in-the-ts-config.js +0 -39
  196. package/src/generators/init-library/check-if-secondary-entrypoint-include-in-the-ts-config.js.map +0 -1
  197. package/src/generators/init-library/cleanup.d.ts +0 -2
  198. package/src/generators/init-library/cleanup.js +0 -16
  199. package/src/generators/init-library/cleanup.js.map +0 -1
  200. package/src/generators/init-library/coerce-projects.d.ts +0 -3
  201. package/src/generators/init-library/coerce-projects.js +0 -92
  202. package/src/generators/init-library/coerce-projects.js.map +0 -1
  203. package/src/generators/init-library/coerce-tailwind-theme-scss.d.ts +0 -2
  204. package/src/generators/init-library/coerce-tailwind-theme-scss.js +0 -22
  205. package/src/generators/init-library/coerce-tailwind-theme-scss.js.map +0 -1
  206. package/src/generators/init-library/extend-angular-specific-eslint.d.ts +0 -2
  207. package/src/generators/init-library/extend-angular-specific-eslint.js +0 -25
  208. package/src/generators/init-library/extend-angular-specific-eslint.js.map +0 -1
  209. package/src/generators/init-library/generator.d.ts +0 -4
  210. package/src/generators/init-library/generator.js +0 -56
  211. package/src/generators/init-library/generator.js.map +0 -1
  212. package/src/generators/init-library/has-index-scss.d.ts +0 -2
  213. package/src/generators/init-library/has-index-scss.js +0 -11
  214. package/src/generators/init-library/has-index-scss.js.map +0 -1
  215. package/src/generators/init-library/has-tailwind-config.d.ts +0 -2
  216. package/src/generators/init-library/has-tailwind-config.js +0 -8
  217. package/src/generators/init-library/has-tailwind-config.js.map +0 -1
  218. package/src/generators/init-library/index.d.ts +0 -2
  219. package/src/generators/init-library/index.js +0 -7
  220. package/src/generators/init-library/index.js.map +0 -1
  221. package/src/generators/init-library/init-project.d.ts +0 -3
  222. package/src/generators/init-library/init-project.js +0 -37
  223. package/src/generators/init-library/init-project.js.map +0 -1
  224. package/src/generators/init-library/init-workspace.d.ts +0 -3
  225. package/src/generators/init-library/init-workspace.js +0 -21
  226. package/src/generators/init-library/init-workspace.js.map +0 -1
  227. package/src/generators/init-library/is-ng-packagr-project.d.ts +0 -2
  228. package/src/generators/init-library/is-ng-packagr-project.js +0 -8
  229. package/src/generators/init-library/is-ng-packagr-project.js.map +0 -1
  230. package/src/generators/init-library/ng-package-json.d.ts +0 -8
  231. package/src/generators/init-library/ng-package-json.js +0 -16
  232. package/src/generators/init-library/ng-package-json.js.map +0 -1
  233. package/src/generators/init-library/set-general-target-defaults.d.ts +0 -2
  234. package/src/generators/init-library/set-general-target-defaults.js +0 -27
  235. package/src/generators/init-library/set-general-target-defaults.js.map +0 -1
  236. package/src/generators/init-library/update-package-json.d.ts +0 -2
  237. package/src/generators/init-library/update-package-json.js +0 -17
  238. package/src/generators/init-library/update-package-json.js.map +0 -1
  239. package/src/generators/init-library/update-project-ng-package-configuration.d.ts +0 -2
  240. package/src/generators/init-library/update-project-ng-package-configuration.js +0 -37
  241. package/src/generators/init-library/update-project-ng-package-configuration.js.map +0 -1
  242. package/src/generators/init-library/update-ts-config.d.ts +0 -2
  243. package/src/generators/init-library/update-ts-config.js +0 -22
  244. package/src/generators/init-library/update-ts-config.js.map +0 -1
  245. package/src/generators/schematic/generator.d.ts +0 -6
  246. package/src/generators/schematic/generator.js +0 -127
  247. package/src/generators/schematic/generator.js.map +0 -1
  248. package/src/generators/schematic/index.d.ts +0 -2
  249. package/src/generators/schematic/index.js +0 -7
  250. package/src/generators/schematic/index.js.map +0 -1
  251. package/src/i18n.d.ts +0 -6
  252. package/src/i18n.js +0 -83
  253. package/src/i18n.js.map +0 -1
  254. package/src/index.js +0 -10
  255. package/src/index.js.map +0 -1
  256. package/src/lib/angular-version.d.ts +0 -1
  257. package/src/lib/angular-version.js +0 -5
  258. package/src/lib/angular-version.js.map +0 -1
  259. package/src/lib/coerce-cypress-component-testing.d.ts +0 -2
  260. package/src/lib/coerce-cypress-component-testing.js +0 -78
  261. package/src/lib/coerce-cypress-component-testing.js.map +0 -1
  262. package/src/lib/coerce-test-setup.d.ts +0 -2
  263. package/src/lib/coerce-test-setup.js +0 -47
  264. package/src/lib/coerce-test-setup.js.map +0 -1
  265. package/src/library.d.ts +0 -6
  266. package/src/library.js +0 -100
  267. package/src/library.js.map +0 -1
  268. package/src/migrations/update-19-0-0/add-m2-prefix-to-material-scss-functions.d.ts +0 -2
  269. package/src/migrations/update-19-0-0/add-m2-prefix-to-material-scss-functions.js +0 -29
  270. package/src/migrations/update-19-0-0/add-m2-prefix-to-material-scss-functions.js.map +0 -1
  271. package/src/migrations/update-19-0-0/migration.d.ts +0 -9
  272. package/src/migrations/update-19-0-0/migration.js +0 -220
  273. package/src/migrations/update-19-0-0/migration.js.map +0 -1
  274. /package/src/{index.d.ts → index.ts} +0 -0
@@ -0,0 +1,356 @@
1
+ import {
2
+ formatFiles,
3
+ generateFiles,
4
+ getProjects,
5
+ ProjectConfiguration,
6
+ Tree,
7
+ updateProjectConfiguration,
8
+ } from '@nx/devkit';
9
+ import {
10
+ ApplicationInitProject,
11
+ ApplicationInitWorkspace,
12
+ } from '@rxap/plugin-application';
13
+ import {
14
+ classify,
15
+ CoerceArrayItems,
16
+ dasherize,
17
+ DeleteProperties,
18
+ } from '@rxap/utilities';
19
+ import {
20
+ AddPackageJsonDependency,
21
+ AddPackageJsonDevDependency,
22
+ CoerceFile,
23
+ CoerceFilesStructure,
24
+ GenerateSerializedSchematicFile,
25
+ GetProjectPrefix,
26
+ GetProjectRoot,
27
+ GetProjectSourceRoot,
28
+ SkipNonAngularProject,
29
+ SkipNonApplicationProject,
30
+ } from '@rxap/workspace-utilities';
31
+ import {
32
+ join,
33
+ relative,
34
+ } from 'path';
35
+ import { ANGULAR_VERSION } from '../../lib/angular-version';
36
+ import { coerceTestSetup } from '../../lib/coerce-test-setup';
37
+ import { cleanup } from './cleanup';
38
+ import { coerceAppConfig } from './coerce-app-config';
39
+ import { coerceEnvironmentFiles } from './coerce-environment-files';
40
+ import { coerceLocalazyConfigFile } from './coerce-localazy-config-file';
41
+ import { CoerceProjects } from './coerce-project';
42
+ import { generateAuthentication } from './generate-authentication';
43
+ import { generateMonolithic } from './generate-monolithic';
44
+ import { linkMfeRemoteWithHost } from './link-mfe-remote-with-host';
45
+ import { InitApplicationGeneratorSchema } from './schema';
46
+ import { updateGitIgnore } from './update-git-ignore';
47
+ import { updateMainFile } from './update-main-file';
48
+ import { updateProjectTargets } from './update-project-targets';
49
+ import { updateTags } from './update-tags';
50
+ import { updateTargetDefaults } from './update-target-defaults';
51
+ import { updateTsConfig } from './update-ts-config';
52
+
53
+ function skipProject(tree: Tree, options: InitApplicationGeneratorSchema, project: ProjectConfiguration, projectName: string) {
54
+
55
+ if (options.project === projectName) {
56
+ return false;
57
+ }
58
+
59
+ if (SkipNonAngularProject(tree, options, project, projectName)) {
60
+ return true;
61
+ }
62
+
63
+ if (SkipNonApplicationProject(tree, options, project, projectName)) {
64
+ return true;
65
+ }
66
+
67
+ return false;
68
+
69
+ }
70
+
71
+ export async function initApplicationGenerator(
72
+ tree: Tree,
73
+ options: InitApplicationGeneratorSchema,
74
+ ) {
75
+ if (options.authentik) {
76
+ options.oauth = true;
77
+ }
78
+ if (options.monolithic) {
79
+ options.openApi = true;
80
+ }
81
+ if (options.i18n) {
82
+ options.languages ??= ['en'];
83
+ }
84
+ if (options.project) {
85
+ options.projects ??= [];
86
+ CoerceArrayItems(options.projects, [options.project]);
87
+ }
88
+ if (options.host) {
89
+ options.moduleFederation = 'remote';
90
+ }
91
+ if (options.moduleFederation === 'remote') {
92
+ options.authentication = false;
93
+ options.oauth = false;
94
+ options.authentik = false;
95
+ options.serviceWorker = false;
96
+ options.sentry = false;
97
+ options.monolithic = false;
98
+ }
99
+ console.log('angular application init generator:', options);
100
+
101
+ await ApplicationInitWorkspace(tree, options);
102
+
103
+ await AddPackageJsonDependency(tree, '@mdi/angular-material', 'latest', { soft: true });
104
+ await AddPackageJsonDependency(tree, '@rxap/ngx-bootstrap', 'latest', { soft: true });
105
+ await AddPackageJsonDependency(tree, 'ngx-logger', 'latest', { soft: true });
106
+ await AddPackageJsonDependency(tree, '@rxap/environment', 'latest', { soft: true });
107
+ await AddPackageJsonDependency(tree, '@rxap/ngx-status-check', 'latest', { soft: true });
108
+ await AddPackageJsonDependency(tree, '@rxap/ngx-error', 'latest', { soft: true });
109
+ await AddPackageJsonDependency(tree, '@rxap/ngx-localize', 'latest', { soft: true });
110
+ await AddPackageJsonDependency(tree, '@rxap/ngx-changelog', 'latest', { soft: true });
111
+ await AddPackageJsonDependency(tree, 'ngx-markdown', 'latest', { soft: true });
112
+ await AddPackageJsonDependency(tree, 'marked', '4.3.0', { soft: true });
113
+ await AddPackageJsonDependency(tree, '@rxap/config', 'latest', { soft: true });
114
+ await AddPackageJsonDependency(tree, '@rxap/directives', 'latest', { soft: true });
115
+ await AddPackageJsonDependency(tree, '@rxap/components', 'latest', { soft: true });
116
+ await AddPackageJsonDependency(tree, '@rxap/rxjs', 'latest', { soft: true });
117
+ await AddPackageJsonDependency(tree, '@rxap/data-grid', 'latest', { soft: true });
118
+ await AddPackageJsonDependency(tree, '@rxap/forms', 'latest', { soft: true });
119
+ await AddPackageJsonDependency(tree, '@rxap/validator', 'latest', { soft: true });
120
+ await AddPackageJsonDependency(tree, '@rxap/pipes', 'latest', { soft: true });
121
+ await AddPackageJsonDependency(tree, '@rxap/mixin', 'latest', { soft: true });
122
+ await AddPackageJsonDependency(tree, '@rxap/reflect-metadata', 'latest', { soft: true });
123
+ await AddPackageJsonDevDependency(tree, '@rxap/browser-tailwind', 'latest', { soft: true, withoutNonRxapPeerDependencies: false });
124
+ // must always be added as some rxap components use the i18n tag
125
+ await AddPackageJsonDependency(tree, '@angular/localize', ANGULAR_VERSION, { soft: true });
126
+ // must always be added as some rxap components use interfaces from the package
127
+ // TODO : refactor the @rxap/ngx-error and @rxap/ngx-status-check to be independent from the @sentry/angular package
128
+ await AddPackageJsonDependency(tree, '@sentry/angular', 'latest', { soft: true });
129
+
130
+ if (options.oauth) {
131
+ await AddPackageJsonDependency(tree, 'angular-oauth2-oidc', 'latest', { soft: true });
132
+ await AddPackageJsonDependency(tree, 'angular-oauth2-oidc-jwks', 'latest', { soft: true });
133
+ await AddPackageJsonDependency(tree, '@rxap/oauth', 'latest', { soft: true });
134
+ }
135
+
136
+ if (options.material) {
137
+ await AddPackageJsonDependency(tree, '@angular/material', ANGULAR_VERSION, { soft: true });
138
+ await AddPackageJsonDependency(tree, '@angular/cdk', ANGULAR_VERSION, { soft: true });
139
+ }
140
+
141
+ if (options.serviceWorker) {
142
+ await AddPackageJsonDependency(tree, '@rxap/service-worker', 'latest', { soft: true });
143
+ await AddPackageJsonDependency(tree, '@rxap/life-cycle', 'latest', { soft: true });
144
+ await AddPackageJsonDependency(tree, '@angular/service-worker', ANGULAR_VERSION, { soft: true });
145
+ }
146
+
147
+ if (options.monolithic) {
148
+ await AddPackageJsonDependency(tree, '@rxap/layout', 'latest', { soft: true });
149
+ await AddPackageJsonDependency(tree, '@rxap/ngx-theme', 'latest', { soft: true });
150
+ await AddPackageJsonDependency(tree, '@ctrl/tinycolor', 'latest', { soft: true });
151
+ await AddPackageJsonDependency(tree, '@rxap/ngx-pub-sub', 'latest', { soft: true });
152
+ await AddPackageJsonDependency(tree, '@rxap/services', 'latest', { soft: true });
153
+ await AddPackageJsonDependency(tree, '@rxap/data-source', 'latest', { soft: true });
154
+ await AddPackageJsonDependency(tree, '@rxap/pattern', 'latest', { soft: true });
155
+ await AddPackageJsonDependency(tree, '@rxap/definition', 'latest', { soft: true });
156
+ await AddPackageJsonDependency(tree, '@rxap/authentication', 'latest', { soft: true });
157
+ await AddPackageJsonDependency(tree, '@rxap/icon', 'latest', { soft: true });
158
+ await AddPackageJsonDependency(tree, '@rxap/material-directives', 'latest', { soft: true });
159
+ await AddPackageJsonDependency(tree, '@rxap/browser-utilities', 'latest', { soft: true });
160
+ await AddPackageJsonDependency(tree, '@rxap/authorization', 'latest', { soft: true });
161
+ await AddPackageJsonDependency(tree, '@rxap/ngx-user', 'latest', { soft: true });
162
+ }
163
+
164
+ if (options.openApi) {
165
+ await AddPackageJsonDependency(tree, '@rxap/open-api', 'latest', { soft: true });
166
+ await AddPackageJsonDependency(tree, '@rxap/remote-method', 'latest', { soft: true });
167
+ await AddPackageJsonDependency(tree, '@rxap/definition', 'latest', { soft: true });
168
+ }
169
+
170
+ if (options.sentry) {
171
+ await AddPackageJsonDependency(tree, '@rxap/ngx-sentry', 'latest', { soft: true });
172
+ }
173
+
174
+ if (options.i18n) {
175
+ await AddPackageJsonDependency(tree, '@rxap/ngx-localize', 'latest', { soft: true });
176
+ await AddPackageJsonDependency(tree, '@rxap/ngx-user', 'latest', { soft: true });
177
+ }
178
+
179
+ if (options.localazy) {
180
+ await AddPackageJsonDevDependency(tree, '@localazy/cli', 'latest', { soft: true });
181
+ await AddPackageJsonDevDependency(tree, '@rxap/plugin-localazy', 'latest', { soft: true });
182
+ }
183
+
184
+ if (options.deploy === 'web3-storage') {
185
+ await AddPackageJsonDevDependency(tree, '@rxap/plugin-web3-storage', 'latest', { soft: true });
186
+ }
187
+
188
+ if (options.i18n && options.deploy === 'web3-storage') {
189
+ CoerceFilesStructure(tree, {
190
+ srcFolder: join(__dirname, 'files', 'i18n'),
191
+ target: 'shared/angular',
192
+ overwrite: options.overwrite,
193
+ });
194
+ }
195
+
196
+ CoerceFilesStructure(tree, {
197
+ srcFolder: join(__dirname, 'files', 'shared'),
198
+ target: 'shared/angular',
199
+ overwrite: options.overwrite,
200
+ });
201
+
202
+ CoerceFile(tree, 'shared/angular/assets/custom.svg', '<svg></svg>');
203
+
204
+ if (options.i18n && !options.skipDocker) {
205
+ let dockerfileContent = tree.read('shared/angular/Dockerfile', 'utf-8')!;
206
+ dockerfileContent = dockerfileContent.replace('registry.gitlab.com/rxap/docker/nginx:', 'registry.gitlab.com/rxap/docker/i18n-nginx:');
207
+ CoerceFile(tree, 'shared/angular/Dockerfile', dockerfileContent, true);
208
+ }
209
+
210
+ CoerceFilesStructure(tree, {
211
+ srcFolder: join(__dirname, 'files', 'styles'),
212
+ target: 'shared/angular/styles',
213
+ overwrite: options.overwrite,
214
+ });
215
+
216
+ if (options.oauth) {
217
+ CoerceFilesStructure(tree, {
218
+ srcFolder: join(__dirname, 'files', 'oauth'),
219
+ target: 'shared/angular/assets',
220
+ overwrite: options.overwrite,
221
+ });
222
+ }
223
+
224
+ updateTargetDefaults(tree, options);
225
+
226
+ await CoerceProjects(tree, options);
227
+
228
+ if (!options.skipProjects) {
229
+ for (const [ projectName, project ] of getProjects(tree).entries()) {
230
+
231
+ if (skipProject(tree, options, project, projectName)) {
232
+ continue;
233
+ }
234
+
235
+ GenerateSerializedSchematicFile(
236
+ tree,
237
+ GetProjectRoot(tree, projectName),
238
+ '@rxap/plugin-angular',
239
+ 'init-application',
240
+ DeleteProperties(options, [ 'generateMain' ]),
241
+ );
242
+
243
+ console.log(`init angular application project: ${ projectName }`);
244
+
245
+ const sourceRoot = GetProjectSourceRoot(tree, projectName);
246
+
247
+ ApplicationInitProject(tree, projectName, project, options);
248
+
249
+ if (options.overwrite || !tree.read(join(sourceRoot, 'styles.scss'), 'utf-8')?.match(/@use ".+\/shared\/angular\/styles";/)) {
250
+ generateFiles(tree, join(__dirname, 'files', 'root'), sourceRoot, {
251
+ serviceWorker: false,
252
+ ...options,
253
+ relativePathToWorkspaceRoot: relative(sourceRoot, ''),
254
+ name: projectName.replace(/^user-interface-/, ''),
255
+ classify,
256
+ prefix: GetProjectPrefix(tree, projectName, 'rxap'),
257
+ });
258
+ }
259
+
260
+ if (options.overwrite) {
261
+ const publicDirectory = join(sourceRoot, 'public');
262
+ const usePublicDirectory = tree.exists(publicDirectory);
263
+ const baseDirectory = usePublicDirectory ? publicDirectory : sourceRoot;
264
+ generateFiles(tree, join(__dirname, 'files', 'public'), baseDirectory, {});
265
+ }
266
+
267
+ updateProjectTargets(tree, projectName, project, options);
268
+ updateTags(project, options);
269
+ updateGitIgnore(project, tree, options);
270
+ updateTsConfig(tree, projectName);
271
+
272
+ if (options.cleanup || options.coerce) {
273
+ cleanup(tree, projectName, options);
274
+ }
275
+
276
+ coerceEnvironmentFiles(
277
+ tree,
278
+ {
279
+ ...options,
280
+ project: projectName,
281
+ },
282
+ );
283
+
284
+ coerceAppConfig(tree, projectName, options);
285
+
286
+ if (options.generateMain) {
287
+ updateMainFile(tree, projectName, project, options);
288
+ }
289
+ if (options.localazy) {
290
+ coerceLocalazyConfigFile(tree, project);
291
+ }
292
+ if (options.authentication) {
293
+ await generateAuthentication(tree, projectName, project, options);
294
+ }
295
+ if (options.monolithic) {
296
+ generateMonolithic(tree, projectName, project, options);
297
+ }
298
+ if (options.moduleFederation === 'remote') {
299
+ if (options.overwrite) {
300
+ generateFiles(tree, join(__dirname, 'files', 'mfe-remote'), sourceRoot, {
301
+ ...options,
302
+ relativePathToWorkspaceRoot: relative(sourceRoot, ''),
303
+ name: projectName
304
+ .replace(/^user-interface-/, '')
305
+ .replace(/^remote-/, '')
306
+ .replace(/^feature-/, ''),
307
+ classify,
308
+ dasherize,
309
+ prefix: GetProjectPrefix(tree, projectName, 'rxap'),
310
+ });
311
+ }
312
+ if (options.host) {
313
+ linkMfeRemoteWithHost(tree, projectName, options);
314
+ }
315
+ }
316
+ if (options.moduleFederation) {
317
+ CoerceFilesStructure(tree, {
318
+ srcFolder: join(__dirname, 'files', 'mfe'),
319
+ target: '',
320
+ overwrite: options.overwrite,
321
+ });
322
+ }
323
+ if (options.serviceWorker) {
324
+ const publicDirectory = join(sourceRoot, 'public');
325
+ const usePublicDirectory = tree.exists(publicDirectory);
326
+ const baseDirectory = usePublicDirectory ? publicDirectory : sourceRoot;
327
+ if (options.overwrite || !tree.exists(join(baseDirectory, 'manifest.webmanifest'))) {
328
+ generateFiles(tree, join(__dirname, 'files', 'service-worker'), baseDirectory, {
329
+ ...options,
330
+ name: projectName.replace(/^user-interface-/, ''),
331
+ classify,
332
+ dasherize,
333
+ });
334
+ }
335
+ }
336
+
337
+ CoerceFilesStructure(tree, {
338
+ srcFolder: join(__dirname, 'files', 'assets'),
339
+ target: join(sourceRoot, 'assets'),
340
+ overwrite: options.overwrite,
341
+ });
342
+ coerceTestSetup(tree, projectName);
343
+
344
+ // apply changes to the project configuration
345
+ updateProjectConfiguration(tree, projectName, project);
346
+
347
+ }
348
+ }
349
+
350
+ if (!options.skipFormat) {
351
+ await formatFiles(tree);
352
+ }
353
+
354
+ }
355
+
356
+ export default initApplicationGenerator;
@@ -0,0 +1,5 @@
1
+ import { convertNxGenerator } from '@nx/devkit';
2
+ import generator from './generator';
3
+
4
+ const schematic = convertNxGenerator(generator);
5
+ export default schematic;
@@ -0,0 +1,60 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import {
3
+ CoerceAppRoutes,
4
+ CoerceLayoutRoutes,
5
+ } from '@rxap/ts-morph';
6
+ import { TsMorphAngularProjectTransform } from '@rxap/workspace-ts-morph';
7
+ import { GetProjectSourceRoot } from '@rxap/workspace-utilities';
8
+ import { join } from 'path';
9
+ import { InitApplicationGeneratorSchema } from './schema';
10
+
11
+ export function linkMfeRemoteWithHost(tree: Tree, projectName: string, options: InitApplicationGeneratorSchema) {
12
+
13
+ if (!options.host) {
14
+ throw new Error('The host project must be defined');
15
+ }
16
+
17
+ const hostSourceRoot = GetProjectSourceRoot(tree, options.host);
18
+ const isHostMonolithic = tree.exists(join(hostSourceRoot, 'app/layout.routes.ts'));
19
+
20
+ const path = projectName
21
+ .replace(/^user-interface-/, '')
22
+ .replace(/^remote-/, '')
23
+ .replace(/^feature-/, '');
24
+
25
+ if (isHostMonolithic && !options.standaloneImport) {
26
+ TsMorphAngularProjectTransform(tree, {
27
+ project: options.host,
28
+ }, (project, [ layoutSourceFile ]) => {
29
+ CoerceLayoutRoutes(layoutSourceFile, {
30
+ itemList: [
31
+ {
32
+ route: {
33
+ path,
34
+ loadRemoteModule: projectName,
35
+ },
36
+ component: 'MinimalLayoutComponent',
37
+ },
38
+ ],
39
+ withStatusCheckGuard: options.apiStatusCheck,
40
+ withNavigation: true,
41
+ });
42
+ }, [ 'app/layout.routes.ts' ]);
43
+ } else {
44
+ TsMorphAngularProjectTransform(tree, {
45
+ project: options.host,
46
+ }, (project, [ appRoutes ]) => {
47
+ CoerceAppRoutes(appRoutes, {
48
+ itemList: [
49
+ {
50
+ route: {
51
+ path,
52
+ loadRemoteModule: projectName,
53
+ },
54
+ },
55
+ ],
56
+ });
57
+ }, [ 'app/app.routes.ts' ]);
58
+ }
59
+
60
+ }
@@ -0,0 +1,4 @@
1
+ export interface ProjectI18nConfiguration {
2
+ sourceLocale?: string;
3
+ locales?: Record<string, { translation: string, baseHref: string }>;
4
+ }
@@ -0,0 +1,22 @@
1
+ import {
2
+ ProjectConfiguration,
3
+ Tree,
4
+ } from '@nx/devkit';
5
+ import { CoerceIgnorePattern } from '@rxap/workspace-utilities';
6
+ import { join } from 'path';
7
+ import { InitApplicationGeneratorSchema } from './schema';
8
+
9
+ export function updateGitIgnore(project: ProjectConfiguration, tree: Tree, options: InitApplicationGeneratorSchema) {
10
+
11
+ if (options.i18n) {
12
+
13
+ if (!project.sourceRoot) {
14
+ throw new Error(`The project ${ project.name } has no source root`);
15
+ }
16
+
17
+ CoerceIgnorePattern(tree, join(project.sourceRoot, '.gitignore'), [
18
+ '/i18n',
19
+ ]);
20
+ }
21
+
22
+ }
@@ -0,0 +1,118 @@
1
+ import {
2
+ ProjectConfiguration,
3
+ Tree,
4
+ } from '@nx/devkit';
5
+ import { CoerceImports } from '@rxap/ts-morph';
6
+ import { TsMorphAngularProjectTransform } from '@rxap/workspace-ts-morph';
7
+ import { Statement } from 'ts-morph';
8
+ import {
9
+ assertMainStatements,
10
+ MAIN_BOOTSTRAP_STATEMENT,
11
+ } from './assert-main-statements';
12
+ import { InitApplicationGeneratorSchema } from './schema';
13
+
14
+ export function updateMainFile(
15
+ tree: Tree, projectName: string, project: ProjectConfiguration, options: InitApplicationGeneratorSchema) {
16
+ TsMorphAngularProjectTransform(tree, {
17
+ project: projectName,
18
+ // directory: '..' // to move from the apps/demo/src/app folder into the apps/demo/src folder
19
+ }, (project, [ sourceFile, mainSourceFile ]) => {
20
+
21
+ assertMainStatements(sourceFile, options);
22
+
23
+ const importDeclarations = [];
24
+ const statements: string[] = [];
25
+
26
+ if (options.serviceWorker) {
27
+ importDeclarations.push({
28
+ moduleSpecifier: '@rxap/service-worker',
29
+ namedImports: [ 'UnregisterServiceWorker' ],
30
+ });
31
+ statements.push('application.before(() => UnregisterServiceWorker(environment));');
32
+ }
33
+
34
+ if (options.openApi) {
35
+ importDeclarations.push({
36
+ moduleSpecifier: '@rxap/open-api',
37
+ namedImports: [ 'OpenApiInit' ],
38
+ });
39
+ if (options.openApiLegacy) {
40
+ statements.push('application.before(() => OpenApiInit(environment, { load: true }));');
41
+ } else {
42
+ statements.push('application.before(() => OpenApiInit(environment));');
43
+ }
44
+ }
45
+
46
+ if (options.sentry) {
47
+ importDeclarations.push({
48
+ moduleSpecifier: '@rxap/ngx-sentry',
49
+ namedImports: [ 'SentryInit' ],
50
+ });
51
+ statements.push('application.before(() => SentryInit(environment));');
52
+ }
53
+
54
+ CoerceImports(sourceFile, importDeclarations);
55
+
56
+ for (let i = 0; i < statements.length; i++) {
57
+ const statement = statements[i];
58
+ const lastStatement = i > 0 ? statements[i - 1] : null;
59
+ const nestStatement = i < statements.length - 1 ? statements[i + 1] : null;
60
+ const existingStatements: string[] = sourceFile.getStatements().map((s: Statement) => s.getText()) ?? [];
61
+ if (!existingStatements.includes(statement)) {
62
+ let index: number;
63
+ if (lastStatement) {
64
+ index = existingStatements.findIndex(s => s.includes(lastStatement)) + 1;
65
+ } else if (nestStatement) {
66
+ index = existingStatements.findIndex(s => s.includes(nestStatement));
67
+ } else {
68
+ index = existingStatements.findIndex(s => s.includes(MAIN_BOOTSTRAP_STATEMENT));
69
+ }
70
+ console.log(`insert statement: ${ statement } at index ${ index }`);
71
+ sourceFile.insertStatements(index, statement);
72
+ }
73
+ }
74
+
75
+ if (options.moduleFederation === 'host') {
76
+ mainSourceFile.set({
77
+ statements: [
78
+ `import {
79
+ setRemoteDefinitions,
80
+ setRemoteUrlResolver
81
+ } from '@nx/angular/mf';
82
+ import type { Environment } from '@rxap/environment';
83
+ import { environment } from './environments/environment';
84
+
85
+ export async function SetupDynamicMfe(environment: Environment) {
86
+
87
+ const manifest = environment.moduleFederation?.manifest;
88
+
89
+ if (!manifest) {
90
+ const release = environment.tag || environment.branch || 'latest';
91
+ setRemoteUrlResolver((remoteName: string) => \`\${ location.origin }/__mfe/\${ release }/\${ remoteName }\`);
92
+ } else {
93
+
94
+ let definitions: Record<string, string>;
95
+
96
+ if (typeof manifest === 'object') {
97
+ definitions = manifest;
98
+ } else {
99
+ definitions = await fetch(manifest).then((res) => res.json());
100
+ }
101
+
102
+ setRemoteDefinitions(definitions);
103
+
104
+ }
105
+
106
+ }
107
+
108
+ SetupDynamicMfe(environment).then(() => import('./bootstrap').catch((err) => console.error(err)));
109
+ `,
110
+ ],
111
+ });
112
+ }
113
+
114
+ }, [
115
+ options.moduleFederation ? 'bootstrap.ts' : 'main.ts',
116
+ 'main.ts',
117
+ ]);
118
+ }