@rxap/plugin-angular 20.0.1-dev.11 → 20.0.1-dev.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/package.json +16 -3
- package/.eslintignore +0 -6
- package/.eslintrc.json +0 -44
- package/LICENSE +0 -621
- package/README.md.handlebars +0 -115
- package/jest.config.ts +0 -11
- package/project.json +0 -68
- package/schematics.yaml +0 -6
- package/src/application.ts +0 -124
- package/src/executors/check-ng-package/executor.ts +0 -33
- package/src/executors/config/executor.ts +0 -74
- package/src/executors/i18n/executor.ts +0 -198
- package/src/executors/tailwind/executor.ts +0 -34
- package/src/generators/convert-to-buildable-library/generator.ts +0 -110
- package/src/generators/fix-schematic/generator.ts +0 -103
- package/src/generators/fix-schematic/index.ts +0 -5
- package/src/generators/init/coerce-nx-json.ts +0 -72
- package/src/generators/init/generator.ts +0 -28
- package/src/generators/init/index.ts +0 -5
- package/src/generators/init/init-workspace.ts +0 -84
- package/src/generators/init-application/assert-main-statements.ts +0 -74
- package/src/generators/init-application/cleanup.ts +0 -127
- package/src/generators/init-application/coerce-app-config.ts +0 -147
- package/src/generators/init-application/coerce-environment-files.ts +0 -105
- package/src/generators/init-application/coerce-localazy-config-file.ts +0 -26
- package/src/generators/init-application/coerce-project.ts +0 -128
- package/src/generators/init-application/generate-authentication.ts +0 -122
- package/src/generators/init-application/generate-monolithic.spec.ts +0 -45
- package/src/generators/init-application/generate-monolithic.ts +0 -57
- package/src/generators/init-application/generator.ts +0 -356
- package/src/generators/init-application/index.ts +0 -5
- package/src/generators/init-application/link-mfe-remote-with-host.ts +0 -60
- package/src/generators/init-application/project-i18n-configuration.ts +0 -4
- package/src/generators/init-application/update-git-ignore.ts +0 -22
- package/src/generators/init-application/update-main-file.ts +0 -118
- package/src/generators/init-application/update-project-targets.ts +0 -229
- package/src/generators/init-application/update-tags.ts +0 -30
- package/src/generators/init-application/update-target-defaults.ts +0 -43
- package/src/generators/init-application/update-ts-config.ts +0 -31
- package/src/generators/init-component/generator.ts +0 -147
- package/src/generators/init-component/index.ts +0 -5
- package/src/generators/init-feature/generator.ts +0 -77
- package/src/generators/init-feature/index.ts +0 -5
- package/src/generators/init-feature-library/generator.ts +0 -82
- package/src/generators/init-feature-library/index.ts +0 -5
- package/src/generators/init-feature-library/init-project.ts +0 -53
- package/src/generators/init-feature-library/init-workspace.ts +0 -10
- package/src/generators/init-library/check-if-secondary-entrypoint-include-in-the-ts-config.ts +0 -46
- package/src/generators/init-library/cleanup.ts +0 -22
- package/src/generators/init-library/coerce-projects.ts +0 -118
- package/src/generators/init-library/coerce-tailwind-theme-scss.ts +0 -27
- package/src/generators/init-library/extend-angular-specific-eslint.ts +0 -37
- package/src/generators/init-library/generator.ts +0 -87
- package/src/generators/init-library/has-index-scss.ts +0 -14
- package/src/generators/init-library/has-tailwind-config.ts +0 -9
- package/src/generators/init-library/index.ts +0 -5
- package/src/generators/init-library/init-project.ts +0 -46
- package/src/generators/init-library/init-workspace.ts +0 -26
- package/src/generators/init-library/is-ng-packagr-project.ts +0 -9
- package/src/generators/init-library/ng-package-json.ts +0 -23
- package/src/generators/init-library/set-general-target-defaults.ts +0 -36
- package/src/generators/init-library/update-package-json.ts +0 -26
- package/src/generators/init-library/update-project-ng-package-configuration.ts +0 -51
- package/src/generators/init-library/update-ts-config.ts +0 -24
- package/src/generators/schematic/generator.ts +0 -179
- package/src/generators/schematic/index.ts +0 -5
- package/src/i18n.ts +0 -130
- package/src/index.ts +0 -3
- package/src/lib/angular-version.ts +0 -1
- package/src/lib/coerce-cypress-component-testing.ts +0 -113
- package/src/lib/coerce-test-setup.ts +0 -60
- package/src/library.ts +0 -153
- package/src/migrations/update-19-0-0/add-m2-prefix-to-material-scss-functions.ts +0 -32
- package/src/migrations/update-19-0-0/migration.ts +0 -283
- package/src/test-setup.ts +0 -24
- package/tsconfig.json +0 -20
- package/tsconfig.lib.json +0 -10
- package/tsconfig.spec.json +0 -15
- package/tsconfig.typedoc.json +0 -5
|
@@ -1,356 +0,0 @@
|
|
|
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;
|
|
@@ -1,60 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,118 +0,0 @@
|
|
|
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
|
-
}
|