@nx/angular 21.3.0-beta.5 → 21.3.0-canary.20250613-18155f4

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 (59) hide show
  1. package/fesm2022/nx-angular-mf.mjs +10 -74
  2. package/fesm2022/nx-angular-mf.mjs.map +1 -1
  3. package/migrations.json +0 -74
  4. package/package.json +9 -9
  5. package/plugins/component-testing.js +14 -6
  6. package/src/builders/utilities/module-federation.js +3 -4
  7. package/src/builders/webpack-browser/schema.json +1 -1
  8. package/src/executors/application/schema.json +2 -4
  9. package/src/executors/application/utils/validate-options.js +0 -10
  10. package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.js +2 -5
  11. package/src/generators/application/application.js +2 -8
  12. package/src/generators/host/lib/update-ssr-setup.js +4 -4
  13. package/src/generators/library/lib/create-files.js +1 -2
  14. package/src/generators/library/lib/normalized-schema.d.ts +0 -1
  15. package/src/generators/library/lib/update-tsconfig-files.js +3 -6
  16. package/src/generators/library/library.js +0 -4
  17. package/src/generators/library/schema.d.ts +0 -1
  18. package/src/generators/library/schema.json +1 -2
  19. package/src/generators/move/lib/update-module-name.js +5 -7
  20. package/src/generators/ngrx/files/__directory__/__fileName__.facade.spec.ts__tmpl__ +9 -13
  21. package/src/generators/ngrx/lib/generate-files.js +0 -1
  22. package/src/generators/ngrx/lib/normalize-options.d.ts +0 -1
  23. package/src/generators/ngrx/lib/normalize-options.js +0 -3
  24. package/src/generators/ngrx-feature-store/files/__directory__/__fileName__.facade.spec.ts__tmpl__ +9 -13
  25. package/src/generators/ngrx-feature-store/lib/generate-files.js +0 -1
  26. package/src/generators/ngrx-feature-store/lib/normalize-options.d.ts +0 -1
  27. package/src/generators/ngrx-feature-store/lib/normalize-options.js +0 -3
  28. package/src/generators/ngrx-root-store/lib/normalize-options.js +4 -5
  29. package/src/generators/remote/lib/update-ssr-setup.js +4 -4
  30. package/src/generators/setup-mf/lib/add-cypress-workaround.js +1 -2
  31. package/src/generators/setup-mf/lib/add-remote-to-host.js +7 -9
  32. package/src/generators/setup-mf/lib/remove-dead-code-from-remote.js +6 -8
  33. package/src/generators/setup-ssr/lib/add-dependencies.js +1 -2
  34. package/src/generators/setup-ssr/lib/add-hydration.js +3 -5
  35. package/src/generators/setup-ssr/lib/add-server-file.js +1 -2
  36. package/src/generators/setup-ssr/lib/generate-files.js +1 -2
  37. package/src/generators/setup-ssr/lib/update-project-config.js +2 -3
  38. package/src/generators/setup-tailwind/lib/add-tailwind-config.js +1 -2
  39. package/src/generators/setup-tailwind/lib/update-application-styles.js +4 -6
  40. package/src/generators/utils/app-components-info.js +4 -6
  41. package/src/generators/utils/testing.js +1 -2
  42. package/src/migrations/update-16-2-0/switch-data-persistence-operators-imports-to-ngrx-router-store.js +2 -2
  43. package/src/migrations/update-17-1-0/replace-nguniversal-engines.js +3 -4
  44. package/src/migrations/update-17-1-0/update-zone-js-deep-import.js +3 -3
  45. package/src/migrations/update-20-2-0/disable-angular-eslint-prefer-standalone.js +2 -3
  46. package/src/migrations/update-20-2-0/remove-angular-eslint-rules.js +2 -3
  47. package/src/migrations/update-20-2-0/update-angular-ssr-imports-to-use-node-entry-point.js +3 -3
  48. package/src/migrations/update-21-0-0/change-data-persistence-operators-imports-to-ngrx-router-store-data-persistence.js +2 -2
  49. package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.js +3 -3
  50. package/src/migrations/update-21-2-0/replace-provide-server-routing.js +3 -3
  51. package/src/migrations/update-21-2-0/update-module-resolution.js +3 -3
  52. package/src/migrations/utils/projects.d.ts +5 -2
  53. package/src/migrations/utils/projects.js +5 -2
  54. package/src/utils/backward-compatible-versions.js +0 -2
  55. package/src/utils/nx-devkit/ast-utils.js +2 -3
  56. package/src/utils/versions.d.ts +4 -5
  57. package/src/utils/versions.js +5 -6
  58. package/src/migrations/update-21-3-0/update-angular-cli.d.ts +0 -3
  59. package/src/migrations/update-21-3-0/update-angular-cli.js +0 -23
@@ -1,76 +1,4 @@
1
- // Helper function to extract file extension from a path
2
- function extname(path) {
3
- const lastDot = path.lastIndexOf('.');
4
- const lastSlash = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\'));
5
- if (lastDot === -1 || lastDot < lastSlash) {
6
- return '';
7
- }
8
- return path.slice(lastDot);
9
- }
10
- /**
11
- * Checks if a URL string is absolute (has protocol)
12
- */
13
- function isAbsoluteUrl(url) {
14
- try {
15
- new URL(url);
16
- return true;
17
- }
18
- catch {
19
- return false;
20
- }
21
- }
22
- /**
23
- * Safely processes remote locations, handling both relative and absolute URLs
24
- * while preserving query parameters and hash fragments for absolute URLs
25
- */
26
- function processRemoteLocation(remoteLocation, remoteEntryExt) {
27
- // Handle promise-based remotes as-is
28
- if (remoteLocation.startsWith('promise new Promise')) {
29
- return remoteLocation;
30
- }
31
- if (isAbsoluteUrl(remoteLocation)) {
32
- // Use new URL parsing for absolute URLs (supports query params/hash)
33
- const url = new URL(remoteLocation);
34
- const ext = extname(url.pathname);
35
- const needsRemoteEntry = !['.js', '.mjs', '.json'].includes(ext);
36
- if (needsRemoteEntry) {
37
- url.pathname = url.pathname.endsWith('/')
38
- ? `${url.pathname}remoteEntry.${remoteEntryExt}`
39
- : `${url.pathname}/remoteEntry.${remoteEntryExt}`;
40
- }
41
- return url.href;
42
- }
43
- else {
44
- // Use string manipulation for relative URLs (backward compatibility)
45
- const ext = extname(remoteLocation);
46
- const needsRemoteEntry = !['.js', '.mjs', '.json'].includes(ext);
47
- if (needsRemoteEntry) {
48
- const baseRemote = remoteLocation.endsWith('/')
49
- ? remoteLocation.slice(0, -1)
50
- : remoteLocation;
51
- return `${baseRemote}/remoteEntry.${remoteEntryExt}`;
52
- }
53
- return remoteLocation;
54
- }
55
- }
56
- /**
57
- * Processes remote URLs for runtime environments, resolving relative URLs against window.location.origin
58
- */
59
- function processRuntimeRemoteUrl(remoteUrl, remoteEntryExt) {
60
- if (isAbsoluteUrl(remoteUrl)) {
61
- return processRemoteLocation(remoteUrl, remoteEntryExt);
62
- }
63
- else {
64
- // For runtime relative URLs, resolve against current origin
65
- const baseUrl = typeof globalThis !== 'undefined' &&
66
- typeof globalThis.window !== 'undefined' &&
67
- globalThis.window.location
68
- ? globalThis.window.location.origin
69
- : 'http://localhost';
70
- const absoluteUrl = new URL(remoteUrl, baseUrl).href;
71
- return processRemoteLocation(absoluteUrl, remoteEntryExt);
72
- }
73
- }
1
+ import { extname } from 'node:path';
74
2
 
75
3
  let resolveRemoteUrl;
76
4
  /**
@@ -178,7 +106,15 @@ async function loadRemoteContainer(remoteName) {
178
106
  const remoteUrl = remoteUrlDefinitions
179
107
  ? remoteUrlDefinitions[remoteName]
180
108
  : await resolveRemoteUrl(remoteName);
181
- const containerUrl = processRuntimeRemoteUrl(remoteUrl, 'mjs');
109
+ const url = new URL(remoteUrl);
110
+ const ext = extname(url.pathname);
111
+ const needsRemoteEntry = !['.js', '.mjs', '.json'].includes(ext);
112
+ if (needsRemoteEntry) {
113
+ url.pathname = url.pathname.endsWith('/')
114
+ ? `${url.pathname}remoteEntry.mjs`
115
+ : `${url.pathname}/remoteEntry.mjs`;
116
+ }
117
+ const containerUrl = url.href;
182
118
  const container = await loadModule(containerUrl);
183
119
  await container.init(__webpack_share_scopes__.default);
184
120
  remoteContainerMap.set(remoteName, container);
@@ -1 +1 @@
1
- {"version":3,"file":"nx-angular-mf.mjs","sources":["../tmp-esm2022/mf/url-helpers.js","../tmp-esm2022/mf/mf.js","../tmp-esm2022/mf/nx-angular-mf.js"],"sourcesContent":["// Helper function to extract file extension from a path\nfunction extname(path) {\n const lastDot = path.lastIndexOf('.');\n const lastSlash = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\\\'));\n if (lastDot === -1 || lastDot < lastSlash) {\n return '';\n }\n return path.slice(lastDot);\n}\n/**\n * Checks if a URL string is absolute (has protocol)\n */\nexport function isAbsoluteUrl(url) {\n try {\n new URL(url);\n return true;\n }\n catch {\n return false;\n }\n}\n/**\n * Safely processes remote locations, handling both relative and absolute URLs\n * while preserving query parameters and hash fragments for absolute URLs\n */\nexport function processRemoteLocation(remoteLocation, remoteEntryExt) {\n // Handle promise-based remotes as-is\n if (remoteLocation.startsWith('promise new Promise')) {\n return remoteLocation;\n }\n if (isAbsoluteUrl(remoteLocation)) {\n // Use new URL parsing for absolute URLs (supports query params/hash)\n const url = new URL(remoteLocation);\n const ext = extname(url.pathname);\n const needsRemoteEntry = !['.js', '.mjs', '.json'].includes(ext);\n if (needsRemoteEntry) {\n url.pathname = url.pathname.endsWith('/')\n ? `${url.pathname}remoteEntry.${remoteEntryExt}`\n : `${url.pathname}/remoteEntry.${remoteEntryExt}`;\n }\n return url.href;\n }\n else {\n // Use string manipulation for relative URLs (backward compatibility)\n const ext = extname(remoteLocation);\n const needsRemoteEntry = !['.js', '.mjs', '.json'].includes(ext);\n if (needsRemoteEntry) {\n const baseRemote = remoteLocation.endsWith('/')\n ? remoteLocation.slice(0, -1)\n : remoteLocation;\n return `${baseRemote}/remoteEntry.${remoteEntryExt}`;\n }\n return remoteLocation;\n }\n}\n/**\n * Processes remote URLs for runtime environments, resolving relative URLs against window.location.origin\n */\nexport function processRuntimeRemoteUrl(remoteUrl, remoteEntryExt) {\n if (isAbsoluteUrl(remoteUrl)) {\n return processRemoteLocation(remoteUrl, remoteEntryExt);\n }\n else {\n // For runtime relative URLs, resolve against current origin\n const baseUrl = typeof globalThis !== 'undefined' &&\n typeof globalThis.window !== 'undefined' &&\n globalThis.window.location\n ? globalThis.window.location.origin\n : 'http://localhost';\n const absoluteUrl = new URL(remoteUrl, baseUrl).href;\n return processRemoteLocation(absoluteUrl, remoteEntryExt);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL21mL3VybC1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHdEQUF3RDtBQUN4RCxTQUFTLE9BQU8sQ0FBQyxJQUFZO0lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRSxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsSUFBSSxPQUFPLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDMUMsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsR0FBVztJQUN2QyxJQUFJLENBQUM7UUFDSCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQ25DLGNBQXNCLEVBQ3RCLGNBQTRCO0lBRTVCLHFDQUFxQztJQUNyQyxJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDO1FBQ3JELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ2xDLHFFQUFxRTtRQUNyRSxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpFLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsZUFBZSxjQUFjLEVBQUU7Z0JBQ2hELENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLGdCQUFnQixjQUFjLEVBQUUsQ0FBQztRQUN0RCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ2xCLENBQUM7U0FBTSxDQUFDO1FBQ04scUVBQXFFO1FBQ3JFLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUNuQixPQUFPLEdBQUcsVUFBVSxnQkFBZ0IsY0FBYyxFQUFFLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLFNBQWlCLEVBQ2pCLGNBQTRCO0lBRTVCLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDMUQsQ0FBQztTQUFNLENBQUM7UUFDTiw0REFBNEQ7UUFDNUQsTUFBTSxPQUFPLEdBQ1gsT0FBTyxVQUFVLEtBQUssV0FBVztZQUNqQyxPQUFRLFVBQWtCLENBQUMsTUFBTSxLQUFLLFdBQVc7WUFDaEQsVUFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUNqQyxDQUFDLENBQUUsVUFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDNUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBQ3pCLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckQsT0FBTyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDNUQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCBmaWxlIGV4dGVuc2lvbiBmcm9tIGEgcGF0aFxuZnVuY3Rpb24gZXh0bmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBsYXN0RG90ID0gcGF0aC5sYXN0SW5kZXhPZignLicpO1xuICBjb25zdCBsYXN0U2xhc2ggPSBNYXRoLm1heChwYXRoLmxhc3RJbmRleE9mKCcvJyksIHBhdGgubGFzdEluZGV4T2YoJ1xcXFwnKSk7XG4gIGlmIChsYXN0RG90ID09PSAtMSB8fCBsYXN0RG90IDwgbGFzdFNsYXNoKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBwYXRoLnNsaWNlKGxhc3REb3QpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIFVSTCBzdHJpbmcgaXMgYWJzb2x1dGUgKGhhcyBwcm90b2NvbClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzb2x1dGVVcmwodXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFNhZmVseSBwcm9jZXNzZXMgcmVtb3RlIGxvY2F0aW9ucywgaGFuZGxpbmcgYm90aCByZWxhdGl2ZSBhbmQgYWJzb2x1dGUgVVJMc1xuICogd2hpbGUgcHJlc2VydmluZyBxdWVyeSBwYXJhbWV0ZXJzIGFuZCBoYXNoIGZyYWdtZW50cyBmb3IgYWJzb2x1dGUgVVJMc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JlbW90ZUxvY2F0aW9uKFxuICByZW1vdGVMb2NhdGlvbjogc3RyaW5nLFxuICByZW1vdGVFbnRyeUV4dDogJ2pzJyB8ICdtanMnXG4pOiBzdHJpbmcge1xuICAvLyBIYW5kbGUgcHJvbWlzZS1iYXNlZCByZW1vdGVzIGFzLWlzXG4gIGlmIChyZW1vdGVMb2NhdGlvbi5zdGFydHNXaXRoKCdwcm9taXNlIG5ldyBQcm9taXNlJykpIHtcbiAgICByZXR1cm4gcmVtb3RlTG9jYXRpb247XG4gIH1cblxuICBpZiAoaXNBYnNvbHV0ZVVybChyZW1vdGVMb2NhdGlvbikpIHtcbiAgICAvLyBVc2UgbmV3IFVSTCBwYXJzaW5nIGZvciBhYnNvbHV0ZSBVUkxzIChzdXBwb3J0cyBxdWVyeSBwYXJhbXMvaGFzaClcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlbW90ZUxvY2F0aW9uKTtcbiAgICBjb25zdCBleHQgPSBleHRuYW1lKHVybC5wYXRobmFtZSk7XG4gICAgY29uc3QgbmVlZHNSZW1vdGVFbnRyeSA9ICFbJy5qcycsICcubWpzJywgJy5qc29uJ10uaW5jbHVkZXMoZXh0KTtcblxuICAgIGlmIChuZWVkc1JlbW90ZUVudHJ5KSB7XG4gICAgICB1cmwucGF0aG5hbWUgPSB1cmwucGF0aG5hbWUuZW5kc1dpdGgoJy8nKVxuICAgICAgICA/IGAke3VybC5wYXRobmFtZX1yZW1vdGVFbnRyeS4ke3JlbW90ZUVudHJ5RXh0fWBcbiAgICAgICAgOiBgJHt1cmwucGF0aG5hbWV9L3JlbW90ZUVudHJ5LiR7cmVtb3RlRW50cnlFeHR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLmhyZWY7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIHN0cmluZyBtYW5pcHVsYXRpb24gZm9yIHJlbGF0aXZlIFVSTHMgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAgY29uc3QgZXh0ID0gZXh0bmFtZShyZW1vdGVMb2NhdGlvbik7XG4gICAgY29uc3QgbmVlZHNSZW1vdGVFbnRyeSA9ICFbJy5qcycsICcubWpzJywgJy5qc29uJ10uaW5jbHVkZXMoZXh0KTtcblxuICAgIGlmIChuZWVkc1JlbW90ZUVudHJ5KSB7XG4gICAgICBjb25zdCBiYXNlUmVtb3RlID0gcmVtb3RlTG9jYXRpb24uZW5kc1dpdGgoJy8nKVxuICAgICAgICA/IHJlbW90ZUxvY2F0aW9uLnNsaWNlKDAsIC0xKVxuICAgICAgICA6IHJlbW90ZUxvY2F0aW9uO1xuICAgICAgcmV0dXJuIGAke2Jhc2VSZW1vdGV9L3JlbW90ZUVudHJ5LiR7cmVtb3RlRW50cnlFeHR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVtb3RlTG9jYXRpb247XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgcmVtb3RlIFVSTHMgZm9yIHJ1bnRpbWUgZW52aXJvbm1lbnRzLCByZXNvbHZpbmcgcmVsYXRpdmUgVVJMcyBhZ2FpbnN0IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSdW50aW1lUmVtb3RlVXJsKFxuICByZW1vdGVVcmw6IHN0cmluZyxcbiAgcmVtb3RlRW50cnlFeHQ6ICdqcycgfCAnbWpzJ1xuKTogc3RyaW5nIHtcbiAgaWYgKGlzQWJzb2x1dGVVcmwocmVtb3RlVXJsKSkge1xuICAgIHJldHVybiBwcm9jZXNzUmVtb3RlTG9jYXRpb24ocmVtb3RlVXJsLCByZW1vdGVFbnRyeUV4dCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gRm9yIHJ1bnRpbWUgcmVsYXRpdmUgVVJMcywgcmVzb2x2ZSBhZ2FpbnN0IGN1cnJlbnQgb3JpZ2luXG4gICAgY29uc3QgYmFzZVVybCA9XG4gICAgICB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIHR5cGVvZiAoZ2xvYmFsVGhpcyBhcyBhbnkpLndpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIChnbG9iYWxUaGlzIGFzIGFueSkud2luZG93LmxvY2F0aW9uXG4gICAgICAgID8gKGdsb2JhbFRoaXMgYXMgYW55KS53aW5kb3cubG9jYXRpb24ub3JpZ2luXG4gICAgICAgIDogJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuICAgIGNvbnN0IGFic29sdXRlVXJsID0gbmV3IFVSTChyZW1vdGVVcmwsIGJhc2VVcmwpLmhyZWY7XG4gICAgcmV0dXJuIHByb2Nlc3NSZW1vdGVMb2NhdGlvbihhYnNvbHV0ZVVybCwgcmVtb3RlRW50cnlFeHQpO1xuICB9XG59XG4iXX0=","import { processRuntimeRemoteUrl } from './url-helpers';\nlet resolveRemoteUrl;\n/**\n * @deprecated Use Runtime Helpers from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n */\nexport function setRemoteUrlResolver(_resolveRemoteUrl) {\n resolveRemoteUrl = _resolveRemoteUrl;\n}\nlet remoteUrlDefinitions;\n/**\n * @deprecated Use init() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n * If you have a remote app called `my-remote-app` and you want to use the `http://localhost:4201/mf-manifest.json` as the remote url, you should change it from:\n * ```ts\n * import { setRemoteDefinitions } from '@nx/angular/mf';\n *\n * setRemoteDefinitions({\n * 'my-remote-app': 'http://localhost:4201/mf-manifest.json'\n * });\n * ```\n * to use init():\n * ```ts\n * import { init } from '@module-federation/enhanced/runtime';\n *\n * init({\n * name: 'host',\n * remotes: [{\n * name: 'my-remote-app',\n * entry: 'http://localhost:4201/mf-manifest.json'\n * }]\n * });\n * ```\n */\nexport function setRemoteDefinitions(definitions) {\n remoteUrlDefinitions = definitions;\n}\n/**\n * @deprecated Use registerRemotes() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n * If you set a remote app with `setRemoteDefinition` such as:\n * ```ts\n * import { setRemoteDefinition } from '@nx/angular/mf';\n *\n * setRemoteDefinition(\n * 'my-remote-app',\n * 'http://localhost:4201/mf-manifest.json'\n * );\n * ```\n * change it to use registerRemotes():\n * ```ts\n * import { registerRemotes } from '@module-federation/enhanced/runtime';\n *\n * registerRemotes([\n * {\n * name: 'my-remote-app',\n * entry: 'http://localhost:4201/mf-manifest.json'\n * }\n * ]);\n * ```\n */\nexport function setRemoteDefinition(remoteName, remoteUrl) {\n remoteUrlDefinitions ??= {};\n remoteUrlDefinitions[remoteName] = remoteUrl;\n}\nlet remoteModuleMap = new Map();\nlet remoteContainerMap = new Map();\n/**\n * @deprecated Use loadRemote() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n * If you set a load a remote with `loadRemoteModule` such as:\n * ```ts\n * import { loadRemoteModule } from '@nx/angular/mf';\n *\n * loadRemoteModule('my-remote-app', './Module').then(m => m.RemoteEntryModule);\n * ```\n * change it to use loadRemote():\n * ```ts\n * import { loadRemote } from '@module-federation/enhanced/runtime';\n *\n * loadRemote<typeof import('my-remote-app/Module')>('my-remote-app/Module').then(m => m.RemoteEntryModule);\n * ```\n */\nexport async function loadRemoteModule(remoteName, moduleName) {\n const remoteModuleKey = `${remoteName}:${moduleName}`;\n if (remoteModuleMap.has(remoteModuleKey)) {\n return remoteModuleMap.get(remoteModuleKey);\n }\n const container = remoteContainerMap.has(remoteName)\n ? remoteContainerMap.get(remoteName)\n : await loadRemoteContainer(remoteName);\n const factory = await container.get(moduleName);\n const Module = factory();\n remoteModuleMap.set(remoteModuleKey, Module);\n return Module;\n}\nfunction loadModule(url) {\n return import(/* webpackIgnore:true */ url);\n}\nlet initialSharingScopeCreated = false;\nasync function loadRemoteContainer(remoteName) {\n if (!resolveRemoteUrl && !remoteUrlDefinitions) {\n throw new Error('Call setRemoteDefinitions or setRemoteUrlResolver to allow Dynamic Federation to find the remote apps correctly.');\n }\n if (!initialSharingScopeCreated) {\n initialSharingScopeCreated = true;\n await __webpack_init_sharing__('default');\n }\n const remoteUrl = remoteUrlDefinitions\n ? remoteUrlDefinitions[remoteName]\n : await resolveRemoteUrl(remoteName);\n const containerUrl = processRuntimeRemoteUrl(remoteUrl, 'mjs');\n const container = await loadModule(containerUrl);\n await container.init(__webpack_share_scopes__.default);\n remoteContainerMap.set(remoteName, container);\n return container;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL21mL21mLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVN4RCxJQUFJLGdCQUEwQyxDQUFDO0FBRS9DOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxpQkFBMkM7SUFFM0MsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUM7QUFDdkMsQ0FBQztBQUVELElBQUksb0JBQTRDLENBQUM7QUFFakQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsV0FBbUM7SUFDdEUsb0JBQW9CLEdBQUcsV0FBVyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxVQUFrQixFQUFFLFNBQWlCO0lBQ3ZFLG9CQUFvQixLQUFLLEVBQUUsQ0FBQztJQUM1QixvQkFBb0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDL0MsQ0FBQztBQUVELElBQUksZUFBZSxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0FBQ2pELElBQUksa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsVUFBa0I7SUFDM0UsTUFBTSxlQUFlLEdBQUcsR0FBRyxVQUFVLElBQUksVUFBVSxFQUFFLENBQUM7SUFDdEQsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7UUFDekMsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ2xELENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxNQUFNLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRTFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNoRCxNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUV6QixlQUFlLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUU3QyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixPQUFPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQsSUFBSSwwQkFBMEIsR0FBRyxLQUFLLENBQUM7QUFFdkMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLFVBQWtCO0lBQ25ELElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FDYixrSEFBa0gsQ0FDbkgsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNoQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7UUFDbEMsTUFBTSx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsb0JBQW9CO1FBQ3BDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUM7UUFDbEMsQ0FBQyxDQUFDLE1BQU0sZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFdkMsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBRS9ELE1BQU0sU0FBUyxHQUFHLE1BQU0sVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pELE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV2RCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9jZXNzUnVudGltZVJlbW90ZVVybCB9IGZyb20gJy4vdXJsLWhlbHBlcnMnO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlUmVtb3RlVXJsRnVuY3Rpb24gPSAoXG4gIHJlbW90ZU5hbWU6IHN0cmluZ1xuKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG5cbmRlY2xhcmUgY29uc3QgX193ZWJwYWNrX2luaXRfc2hhcmluZ19fOiAoc2NvcGU6ICdkZWZhdWx0JykgPT4gUHJvbWlzZTx2b2lkPjtcbmRlY2xhcmUgY29uc3QgX193ZWJwYWNrX3NoYXJlX3Njb3Blc19fOiB7IGRlZmF1bHQ6IHVua25vd24gfTtcblxubGV0IHJlc29sdmVSZW1vdGVVcmw6IFJlc29sdmVSZW1vdGVVcmxGdW5jdGlvbjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgUnVudGltZSBIZWxwZXJzIGZyb20gJ0Btb2R1bGUtZmVkZXJhdGlvbi9lbmhhbmNlZC9ydW50aW1lJyBpbnN0ZWFkLiBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiBOeCAyMi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFJlbW90ZVVybFJlc29sdmVyKFxuICBfcmVzb2x2ZVJlbW90ZVVybDogUmVzb2x2ZVJlbW90ZVVybEZ1bmN0aW9uXG4pIHtcbiAgcmVzb2x2ZVJlbW90ZVVybCA9IF9yZXNvbHZlUmVtb3RlVXJsO1xufVxuXG5sZXQgcmVtb3RlVXJsRGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGluaXQoKSBmcm9tICdAbW9kdWxlLWZlZGVyYXRpb24vZW5oYW5jZWQvcnVudGltZScgaW5zdGVhZC4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gTnggMjIuXG4gKiBJZiB5b3UgaGF2ZSBhIHJlbW90ZSBhcHAgY2FsbGVkIGBteS1yZW1vdGUtYXBwYCBhbmQgeW91IHdhbnQgdG8gdXNlIHRoZSBgaHR0cDovL2xvY2FsaG9zdDo0MjAxL21mLW1hbmlmZXN0Lmpzb25gIGFzIHRoZSByZW1vdGUgdXJsLCB5b3Ugc2hvdWxkIGNoYW5nZSBpdCBmcm9tOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNldFJlbW90ZURlZmluaXRpb25zIH0gZnJvbSAnQG54L2FuZ3VsYXIvbWYnO1xuICpcbiAqIHNldFJlbW90ZURlZmluaXRpb25zKHtcbiAqICAgJ215LXJlbW90ZS1hcHAnOiAnaHR0cDovL2xvY2FsaG9zdDo0MjAxL21mLW1hbmlmZXN0Lmpzb24nXG4gKiB9KTtcbiAqIGBgYFxuICogdG8gdXNlIGluaXQoKTpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBpbml0IH0gZnJvbSAnQG1vZHVsZS1mZWRlcmF0aW9uL2VuaGFuY2VkL3J1bnRpbWUnO1xuICpcbiAqIGluaXQoe1xuICogICBuYW1lOiAnaG9zdCcsXG4gKiAgIHJlbW90ZXM6IFt7XG4gKiAgICAgbmFtZTogJ215LXJlbW90ZS1hcHAnLFxuICogICAgIGVudHJ5OiAnaHR0cDovL2xvY2FsaG9zdDo0MjAxL21mLW1hbmlmZXN0Lmpzb24nXG4gKiAgIH1dXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UmVtb3RlRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgcmVtb3RlVXJsRGVmaW5pdGlvbnMgPSBkZWZpbml0aW9ucztcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgcmVnaXN0ZXJSZW1vdGVzKCkgZnJvbSAnQG1vZHVsZS1mZWRlcmF0aW9uL2VuaGFuY2VkL3J1bnRpbWUnIGluc3RlYWQuIFRoaXMgd2lsbCBiZSByZW1vdmVkIGluIE54IDIyLlxuICogSWYgeW91IHNldCBhIHJlbW90ZSBhcHAgd2l0aCBgc2V0UmVtb3RlRGVmaW5pdGlvbmAgc3VjaCBhczpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzZXRSZW1vdGVEZWZpbml0aW9uIH0gZnJvbSAnQG54L2FuZ3VsYXIvbWYnO1xuICpcbiAqIHNldFJlbW90ZURlZmluaXRpb24oXG4gKiAgICdteS1yZW1vdGUtYXBwJyxcbiAqICAgJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMS9tZi1tYW5pZmVzdC5qc29uJ1xuICogKTtcbiAqIGBgYFxuICogY2hhbmdlIGl0IHRvIHVzZSByZWdpc3RlclJlbW90ZXMoKTpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyByZWdpc3RlclJlbW90ZXMgfSBmcm9tICdAbW9kdWxlLWZlZGVyYXRpb24vZW5oYW5jZWQvcnVudGltZSc7XG4gKlxuICogcmVnaXN0ZXJSZW1vdGVzKFtcbiAqICB7XG4gKiAgICAgbmFtZTogJ215LXJlbW90ZS1hcHAnLFxuICogICAgIGVudHJ5OiAnaHR0cDovL2xvY2FsaG9zdDo0MjAxL21mLW1hbmlmZXN0Lmpzb24nXG4gKiAgIH1cbiAqIF0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRSZW1vdGVEZWZpbml0aW9uKHJlbW90ZU5hbWU6IHN0cmluZywgcmVtb3RlVXJsOiBzdHJpbmcpIHtcbiAgcmVtb3RlVXJsRGVmaW5pdGlvbnMgPz89IHt9O1xuICByZW1vdGVVcmxEZWZpbml0aW9uc1tyZW1vdGVOYW1lXSA9IHJlbW90ZVVybDtcbn1cblxubGV0IHJlbW90ZU1vZHVsZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCB1bmtub3duPigpO1xubGV0IHJlbW90ZUNvbnRhaW5lck1hcCA9IG5ldyBNYXA8c3RyaW5nLCB1bmtub3duPigpO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBsb2FkUmVtb3RlKCkgZnJvbSAnQG1vZHVsZS1mZWRlcmF0aW9uL2VuaGFuY2VkL3J1bnRpbWUnIGluc3RlYWQuIFRoaXMgd2lsbCBiZSByZW1vdmVkIGluIE54IDIyLlxuICogSWYgeW91IHNldCBhIGxvYWQgYSByZW1vdGUgd2l0aCBgbG9hZFJlbW90ZU1vZHVsZWAgc3VjaCBhczpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBsb2FkUmVtb3RlTW9kdWxlIH0gZnJvbSAnQG54L2FuZ3VsYXIvbWYnO1xuICpcbiAqIGxvYWRSZW1vdGVNb2R1bGUoJ215LXJlbW90ZS1hcHAnLCAnLi9Nb2R1bGUnKS50aGVuKG0gPT4gbS5SZW1vdGVFbnRyeU1vZHVsZSk7XG4gKiBgYGBcbiAqIGNoYW5nZSBpdCB0byB1c2UgbG9hZFJlbW90ZSgpOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGxvYWRSZW1vdGUgfSBmcm9tICdAbW9kdWxlLWZlZGVyYXRpb24vZW5oYW5jZWQvcnVudGltZSc7XG4gKlxuICogbG9hZFJlbW90ZTx0eXBlb2YgaW1wb3J0KCdteS1yZW1vdGUtYXBwL01vZHVsZScpPignbXktcmVtb3RlLWFwcC9Nb2R1bGUnKS50aGVuKG0gPT4gbS5SZW1vdGVFbnRyeU1vZHVsZSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRSZW1vdGVNb2R1bGUocmVtb3RlTmFtZTogc3RyaW5nLCBtb2R1bGVOYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgcmVtb3RlTW9kdWxlS2V5ID0gYCR7cmVtb3RlTmFtZX06JHttb2R1bGVOYW1lfWA7XG4gIGlmIChyZW1vdGVNb2R1bGVNYXAuaGFzKHJlbW90ZU1vZHVsZUtleSkpIHtcbiAgICByZXR1cm4gcmVtb3RlTW9kdWxlTWFwLmdldChyZW1vdGVNb2R1bGVLZXkpO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gcmVtb3RlQ29udGFpbmVyTWFwLmhhcyhyZW1vdGVOYW1lKVxuICAgID8gcmVtb3RlQ29udGFpbmVyTWFwLmdldChyZW1vdGVOYW1lKVxuICAgIDogYXdhaXQgbG9hZFJlbW90ZUNvbnRhaW5lcihyZW1vdGVOYW1lKTtcblxuICBjb25zdCBmYWN0b3J5ID0gYXdhaXQgY29udGFpbmVyLmdldChtb2R1bGVOYW1lKTtcbiAgY29uc3QgTW9kdWxlID0gZmFjdG9yeSgpO1xuXG4gIHJlbW90ZU1vZHVsZU1hcC5zZXQocmVtb3RlTW9kdWxlS2V5LCBNb2R1bGUpO1xuXG4gIHJldHVybiBNb2R1bGU7XG59XG5cbmZ1bmN0aW9uIGxvYWRNb2R1bGUodXJsOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGltcG9ydCgvKiB3ZWJwYWNrSWdub3JlOnRydWUgKi8gdXJsKTtcbn1cblxubGV0IGluaXRpYWxTaGFyaW5nU2NvcGVDcmVhdGVkID0gZmFsc2U7XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRSZW1vdGVDb250YWluZXIocmVtb3RlTmFtZTogc3RyaW5nKSB7XG4gIGlmICghcmVzb2x2ZVJlbW90ZVVybCAmJiAhcmVtb3RlVXJsRGVmaW5pdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbCBzZXRSZW1vdGVEZWZpbml0aW9ucyBvciBzZXRSZW1vdGVVcmxSZXNvbHZlciB0byBhbGxvdyBEeW5hbWljIEZlZGVyYXRpb24gdG8gZmluZCB0aGUgcmVtb3RlIGFwcHMgY29ycmVjdGx5LidcbiAgICApO1xuICB9XG5cbiAgaWYgKCFpbml0aWFsU2hhcmluZ1Njb3BlQ3JlYXRlZCkge1xuICAgIGluaXRpYWxTaGFyaW5nU2NvcGVDcmVhdGVkID0gdHJ1ZTtcbiAgICBhd2FpdCBfX3dlYnBhY2tfaW5pdF9zaGFyaW5nX18oJ2RlZmF1bHQnKTtcbiAgfVxuXG4gIGNvbnN0IHJlbW90ZVVybCA9IHJlbW90ZVVybERlZmluaXRpb25zXG4gICAgPyByZW1vdGVVcmxEZWZpbml0aW9uc1tyZW1vdGVOYW1lXVxuICAgIDogYXdhaXQgcmVzb2x2ZVJlbW90ZVVybChyZW1vdGVOYW1lKTtcblxuICBjb25zdCBjb250YWluZXJVcmwgPSBwcm9jZXNzUnVudGltZVJlbW90ZVVybChyZW1vdGVVcmwsICdtanMnKTtcblxuICBjb25zdCBjb250YWluZXIgPSBhd2FpdCBsb2FkTW9kdWxlKGNvbnRhaW5lclVybCk7XG4gIGF3YWl0IGNvbnRhaW5lci5pbml0KF9fd2VicGFja19zaGFyZV9zY29wZXNfXy5kZWZhdWx0KTtcblxuICByZW1vdGVDb250YWluZXJNYXAuc2V0KHJlbW90ZU5hbWUsIGNvbnRhaW5lcik7XG4gIHJldHVybiBjb250YWluZXI7XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtYW5ndWxhci1tZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbWYvbngtYW5ndWxhci1tZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nx-angular-mf.mjs","sources":["../tmp-esm2022/mf/mf.js","../tmp-esm2022/mf/nx-angular-mf.js"],"sourcesContent":["import { extname } from 'node:path';\nlet resolveRemoteUrl;\n/**\n * @deprecated Use Runtime Helpers from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n */\nexport function setRemoteUrlResolver(_resolveRemoteUrl) {\n resolveRemoteUrl = _resolveRemoteUrl;\n}\nlet remoteUrlDefinitions;\n/**\n * @deprecated Use init() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n * If you have a remote app called `my-remote-app` and you want to use the `http://localhost:4201/mf-manifest.json` as the remote url, you should change it from:\n * ```ts\n * import { setRemoteDefinitions } from '@nx/angular/mf';\n *\n * setRemoteDefinitions({\n * 'my-remote-app': 'http://localhost:4201/mf-manifest.json'\n * });\n * ```\n * to use init():\n * ```ts\n * import { init } from '@module-federation/enhanced/runtime';\n *\n * init({\n * name: 'host',\n * remotes: [{\n * name: 'my-remote-app',\n * entry: 'http://localhost:4201/mf-manifest.json'\n * }]\n * });\n * ```\n */\nexport function setRemoteDefinitions(definitions) {\n remoteUrlDefinitions = definitions;\n}\n/**\n * @deprecated Use registerRemotes() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n * If you set a remote app with `setRemoteDefinition` such as:\n * ```ts\n * import { setRemoteDefinition } from '@nx/angular/mf';\n *\n * setRemoteDefinition(\n * 'my-remote-app',\n * 'http://localhost:4201/mf-manifest.json'\n * );\n * ```\n * change it to use registerRemotes():\n * ```ts\n * import { registerRemotes } from '@module-federation/enhanced/runtime';\n *\n * registerRemotes([\n * {\n * name: 'my-remote-app',\n * entry: 'http://localhost:4201/mf-manifest.json'\n * }\n * ]);\n * ```\n */\nexport function setRemoteDefinition(remoteName, remoteUrl) {\n remoteUrlDefinitions ??= {};\n remoteUrlDefinitions[remoteName] = remoteUrl;\n}\nlet remoteModuleMap = new Map();\nlet remoteContainerMap = new Map();\n/**\n * @deprecated Use loadRemote() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n * If you set a load a remote with `loadRemoteModule` such as:\n * ```ts\n * import { loadRemoteModule } from '@nx/angular/mf';\n *\n * loadRemoteModule('my-remote-app', './Module').then(m => m.RemoteEntryModule);\n * ```\n * change it to use loadRemote():\n * ```ts\n * import { loadRemote } from '@module-federation/enhanced/runtime';\n *\n * loadRemote<typeof import('my-remote-app/Module')>('my-remote-app/Module').then(m => m.RemoteEntryModule);\n * ```\n */\nexport async function loadRemoteModule(remoteName, moduleName) {\n const remoteModuleKey = `${remoteName}:${moduleName}`;\n if (remoteModuleMap.has(remoteModuleKey)) {\n return remoteModuleMap.get(remoteModuleKey);\n }\n const container = remoteContainerMap.has(remoteName)\n ? remoteContainerMap.get(remoteName)\n : await loadRemoteContainer(remoteName);\n const factory = await container.get(moduleName);\n const Module = factory();\n remoteModuleMap.set(remoteModuleKey, Module);\n return Module;\n}\nfunction loadModule(url) {\n return import(/* webpackIgnore:true */ url);\n}\nlet initialSharingScopeCreated = false;\nasync function loadRemoteContainer(remoteName) {\n if (!resolveRemoteUrl && !remoteUrlDefinitions) {\n throw new Error('Call setRemoteDefinitions or setRemoteUrlResolver to allow Dynamic Federation to find the remote apps correctly.');\n }\n if (!initialSharingScopeCreated) {\n initialSharingScopeCreated = true;\n await __webpack_init_sharing__('default');\n }\n const remoteUrl = remoteUrlDefinitions\n ? remoteUrlDefinitions[remoteName]\n : await resolveRemoteUrl(remoteName);\n const url = new URL(remoteUrl);\n const ext = extname(url.pathname);\n const needsRemoteEntry = !['.js', '.mjs', '.json'].includes(ext);\n if (needsRemoteEntry) {\n url.pathname = url.pathname.endsWith('/')\n ? `${url.pathname}remoteEntry.mjs`\n : `${url.pathname}/remoteEntry.mjs`;\n }\n const containerUrl = url.href;\n const container = await loadModule(containerUrl);\n await container.init(__webpack_share_scopes__.default);\n remoteContainerMap.set(remoteName, container);\n return container;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL21mL21mLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFTcEMsSUFBSSxnQkFBMEMsQ0FBQztBQUUvQzs7R0FFRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsaUJBQTJDO0lBRTNDLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDO0FBQ3ZDLENBQUM7QUFFRCxJQUFJLG9CQUE0QyxDQUFDO0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFdBQW1DO0lBQ3RFLG9CQUFvQixHQUFHLFdBQVcsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsVUFBa0IsRUFBRSxTQUFpQjtJQUN2RSxvQkFBb0IsS0FBSyxFQUFFLENBQUM7SUFDNUIsb0JBQW9CLENBQUMsVUFBVSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQy9DLENBQUM7QUFFRCxJQUFJLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztBQUNqRCxJQUFJLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0FBRXBEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxVQUFrQixFQUFFLFVBQWtCO0lBQzNFLE1BQU0sZUFBZSxHQUFHLEdBQUcsVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDO0lBQ3RELElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUNsRCxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUNwQyxDQUFDLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUUxQyxNQUFNLE9BQU8sR0FBRyxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFFekIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFN0MsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEdBQVc7SUFDN0IsT0FBTyxNQUFNLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELElBQUksMEJBQTBCLEdBQUcsS0FBSyxDQUFDO0FBRXZDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxVQUFrQjtJQUNuRCxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0hBQWtILENBQ25ILENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDaEMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLE1BQU0sd0JBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLG9CQUFvQjtRQUNwQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxNQUFNLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXZDLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFbEMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFakUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLGlCQUFpQjtZQUNsQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxrQkFBa0IsQ0FBQztJQUN4QyxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztJQUU5QixNQUFNLFNBQVMsR0FBRyxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFdkQsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5QyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0bmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmV4cG9ydCB0eXBlIFJlc29sdmVSZW1vdGVVcmxGdW5jdGlvbiA9IChcbiAgcmVtb3RlTmFtZTogc3RyaW5nXG4pID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcblxuZGVjbGFyZSBjb25zdCBfX3dlYnBhY2tfaW5pdF9zaGFyaW5nX186IChzY29wZTogJ2RlZmF1bHQnKSA9PiBQcm9taXNlPHZvaWQ+O1xuZGVjbGFyZSBjb25zdCBfX3dlYnBhY2tfc2hhcmVfc2NvcGVzX186IHsgZGVmYXVsdDogdW5rbm93biB9O1xuXG5sZXQgcmVzb2x2ZVJlbW90ZVVybDogUmVzb2x2ZVJlbW90ZVVybEZ1bmN0aW9uO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBSdW50aW1lIEhlbHBlcnMgZnJvbSAnQG1vZHVsZS1mZWRlcmF0aW9uL2VuaGFuY2VkL3J1bnRpbWUnIGluc3RlYWQuIFRoaXMgd2lsbCBiZSByZW1vdmVkIGluIE54IDIyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UmVtb3RlVXJsUmVzb2x2ZXIoXG4gIF9yZXNvbHZlUmVtb3RlVXJsOiBSZXNvbHZlUmVtb3RlVXJsRnVuY3Rpb25cbikge1xuICByZXNvbHZlUmVtb3RlVXJsID0gX3Jlc29sdmVSZW1vdGVVcmw7XG59XG5cbmxldCByZW1vdGVVcmxEZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgaW5pdCgpIGZyb20gJ0Btb2R1bGUtZmVkZXJhdGlvbi9lbmhhbmNlZC9ydW50aW1lJyBpbnN0ZWFkLiBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiBOeCAyMi5cbiAqIElmIHlvdSBoYXZlIGEgcmVtb3RlIGFwcCBjYWxsZWQgYG15LXJlbW90ZS1hcHBgIGFuZCB5b3Ugd2FudCB0byB1c2UgdGhlIGBodHRwOi8vbG9jYWxob3N0OjQyMDEvbWYtbWFuaWZlc3QuanNvbmAgYXMgdGhlIHJlbW90ZSB1cmwsIHlvdSBzaG91bGQgY2hhbmdlIGl0IGZyb206XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgc2V0UmVtb3RlRGVmaW5pdGlvbnMgfSBmcm9tICdAbngvYW5ndWxhci9tZic7XG4gKlxuICogc2V0UmVtb3RlRGVmaW5pdGlvbnMoe1xuICogICAnbXktcmVtb3RlLWFwcCc6ICdodHRwOi8vbG9jYWxob3N0OjQyMDEvbWYtbWFuaWZlc3QuanNvbidcbiAqIH0pO1xuICogYGBgXG4gKiB0byB1c2UgaW5pdCgpOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGluaXQgfSBmcm9tICdAbW9kdWxlLWZlZGVyYXRpb24vZW5oYW5jZWQvcnVudGltZSc7XG4gKlxuICogaW5pdCh7XG4gKiAgIG5hbWU6ICdob3N0JyxcbiAqICAgcmVtb3RlczogW3tcbiAqICAgICBuYW1lOiAnbXktcmVtb3RlLWFwcCcsXG4gKiAgICAgZW50cnk6ICdodHRwOi8vbG9jYWxob3N0OjQyMDEvbWYtbWFuaWZlc3QuanNvbidcbiAqICAgfV1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRSZW1vdGVEZWZpbml0aW9ucyhkZWZpbml0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICByZW1vdGVVcmxEZWZpbml0aW9ucyA9IGRlZmluaXRpb25zO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSByZWdpc3RlclJlbW90ZXMoKSBmcm9tICdAbW9kdWxlLWZlZGVyYXRpb24vZW5oYW5jZWQvcnVudGltZScgaW5zdGVhZC4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gTnggMjIuXG4gKiBJZiB5b3Ugc2V0IGEgcmVtb3RlIGFwcCB3aXRoIGBzZXRSZW1vdGVEZWZpbml0aW9uYCBzdWNoIGFzOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNldFJlbW90ZURlZmluaXRpb24gfSBmcm9tICdAbngvYW5ndWxhci9tZic7XG4gKlxuICogc2V0UmVtb3RlRGVmaW5pdGlvbihcbiAqICAgJ215LXJlbW90ZS1hcHAnLFxuICogICAnaHR0cDovL2xvY2FsaG9zdDo0MjAxL21mLW1hbmlmZXN0Lmpzb24nXG4gKiApO1xuICogYGBgXG4gKiBjaGFuZ2UgaXQgdG8gdXNlIHJlZ2lzdGVyUmVtb3RlcygpOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHJlZ2lzdGVyUmVtb3RlcyB9IGZyb20gJ0Btb2R1bGUtZmVkZXJhdGlvbi9lbmhhbmNlZC9ydW50aW1lJztcbiAqXG4gKiByZWdpc3RlclJlbW90ZXMoW1xuICogIHtcbiAqICAgICBuYW1lOiAnbXktcmVtb3RlLWFwcCcsXG4gKiAgICAgZW50cnk6ICdodHRwOi8vbG9jYWxob3N0OjQyMDEvbWYtbWFuaWZlc3QuanNvbidcbiAqICAgfVxuICogXSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFJlbW90ZURlZmluaXRpb24ocmVtb3RlTmFtZTogc3RyaW5nLCByZW1vdGVVcmw6IHN0cmluZykge1xuICByZW1vdGVVcmxEZWZpbml0aW9ucyA/Pz0ge307XG4gIHJlbW90ZVVybERlZmluaXRpb25zW3JlbW90ZU5hbWVdID0gcmVtb3RlVXJsO1xufVxuXG5sZXQgcmVtb3RlTW9kdWxlTWFwID0gbmV3IE1hcDxzdHJpbmcsIHVua25vd24+KCk7XG5sZXQgcmVtb3RlQ29udGFpbmVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIHVua25vd24+KCk7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIGxvYWRSZW1vdGUoKSBmcm9tICdAbW9kdWxlLWZlZGVyYXRpb24vZW5oYW5jZWQvcnVudGltZScgaW5zdGVhZC4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gTnggMjIuXG4gKiBJZiB5b3Ugc2V0IGEgbG9hZCBhIHJlbW90ZSB3aXRoIGBsb2FkUmVtb3RlTW9kdWxlYCBzdWNoIGFzOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGxvYWRSZW1vdGVNb2R1bGUgfSBmcm9tICdAbngvYW5ndWxhci9tZic7XG4gKlxuICogbG9hZFJlbW90ZU1vZHVsZSgnbXktcmVtb3RlLWFwcCcsICcuL01vZHVsZScpLnRoZW4obSA9PiBtLlJlbW90ZUVudHJ5TW9kdWxlKTtcbiAqIGBgYFxuICogY2hhbmdlIGl0IHRvIHVzZSBsb2FkUmVtb3RlKCk6XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbG9hZFJlbW90ZSB9IGZyb20gJ0Btb2R1bGUtZmVkZXJhdGlvbi9lbmhhbmNlZC9ydW50aW1lJztcbiAqXG4gKiBsb2FkUmVtb3RlPHR5cGVvZiBpbXBvcnQoJ215LXJlbW90ZS1hcHAvTW9kdWxlJyk+KCdteS1yZW1vdGUtYXBwL01vZHVsZScpLnRoZW4obSA9PiBtLlJlbW90ZUVudHJ5TW9kdWxlKTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFJlbW90ZU1vZHVsZShyZW1vdGVOYW1lOiBzdHJpbmcsIG1vZHVsZU5hbWU6IHN0cmluZykge1xuICBjb25zdCByZW1vdGVNb2R1bGVLZXkgPSBgJHtyZW1vdGVOYW1lfToke21vZHVsZU5hbWV9YDtcbiAgaWYgKHJlbW90ZU1vZHVsZU1hcC5oYXMocmVtb3RlTW9kdWxlS2V5KSkge1xuICAgIHJldHVybiByZW1vdGVNb2R1bGVNYXAuZ2V0KHJlbW90ZU1vZHVsZUtleSk7XG4gIH1cblxuICBjb25zdCBjb250YWluZXIgPSByZW1vdGVDb250YWluZXJNYXAuaGFzKHJlbW90ZU5hbWUpXG4gICAgPyByZW1vdGVDb250YWluZXJNYXAuZ2V0KHJlbW90ZU5hbWUpXG4gICAgOiBhd2FpdCBsb2FkUmVtb3RlQ29udGFpbmVyKHJlbW90ZU5hbWUpO1xuXG4gIGNvbnN0IGZhY3RvcnkgPSBhd2FpdCBjb250YWluZXIuZ2V0KG1vZHVsZU5hbWUpO1xuICBjb25zdCBNb2R1bGUgPSBmYWN0b3J5KCk7XG5cbiAgcmVtb3RlTW9kdWxlTWFwLnNldChyZW1vdGVNb2R1bGVLZXksIE1vZHVsZSk7XG5cbiAgcmV0dXJuIE1vZHVsZTtcbn1cblxuZnVuY3Rpb24gbG9hZE1vZHVsZSh1cmw6IHN0cmluZykge1xuICByZXR1cm4gaW1wb3J0KC8qIHdlYnBhY2tJZ25vcmU6dHJ1ZSAqLyB1cmwpO1xufVxuXG5sZXQgaW5pdGlhbFNoYXJpbmdTY29wZUNyZWF0ZWQgPSBmYWxzZTtcblxuYXN5bmMgZnVuY3Rpb24gbG9hZFJlbW90ZUNvbnRhaW5lcihyZW1vdGVOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKCFyZXNvbHZlUmVtb3RlVXJsICYmICFyZW1vdGVVcmxEZWZpbml0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdDYWxsIHNldFJlbW90ZURlZmluaXRpb25zIG9yIHNldFJlbW90ZVVybFJlc29sdmVyIHRvIGFsbG93IER5bmFtaWMgRmVkZXJhdGlvbiB0byBmaW5kIHRoZSByZW1vdGUgYXBwcyBjb3JyZWN0bHkuJ1xuICAgICk7XG4gIH1cblxuICBpZiAoIWluaXRpYWxTaGFyaW5nU2NvcGVDcmVhdGVkKSB7XG4gICAgaW5pdGlhbFNoYXJpbmdTY29wZUNyZWF0ZWQgPSB0cnVlO1xuICAgIGF3YWl0IF9fd2VicGFja19pbml0X3NoYXJpbmdfXygnZGVmYXVsdCcpO1xuICB9XG5cbiAgY29uc3QgcmVtb3RlVXJsID0gcmVtb3RlVXJsRGVmaW5pdGlvbnNcbiAgICA/IHJlbW90ZVVybERlZmluaXRpb25zW3JlbW90ZU5hbWVdXG4gICAgOiBhd2FpdCByZXNvbHZlUmVtb3RlVXJsKHJlbW90ZU5hbWUpO1xuXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwocmVtb3RlVXJsKTtcbiAgY29uc3QgZXh0ID0gZXh0bmFtZSh1cmwucGF0aG5hbWUpO1xuXG4gIGNvbnN0IG5lZWRzUmVtb3RlRW50cnkgPSAhWycuanMnLCAnLm1qcycsICcuanNvbiddLmluY2x1ZGVzKGV4dCk7XG5cbiAgaWYgKG5lZWRzUmVtb3RlRW50cnkpIHtcbiAgICB1cmwucGF0aG5hbWUgPSB1cmwucGF0aG5hbWUuZW5kc1dpdGgoJy8nKVxuICAgICAgPyBgJHt1cmwucGF0aG5hbWV9cmVtb3RlRW50cnkubWpzYFxuICAgICAgOiBgJHt1cmwucGF0aG5hbWV9L3JlbW90ZUVudHJ5Lm1qc2A7XG4gIH1cblxuICBjb25zdCBjb250YWluZXJVcmwgPSB1cmwuaHJlZjtcblxuICBjb25zdCBjb250YWluZXIgPSBhd2FpdCBsb2FkTW9kdWxlKGNvbnRhaW5lclVybCk7XG4gIGF3YWl0IGNvbnRhaW5lci5pbml0KF9fd2VicGFja19zaGFyZV9zY29wZXNfXy5kZWZhdWx0KTtcblxuICByZW1vdGVDb250YWluZXJNYXAuc2V0KHJlbW90ZU5hbWUsIGNvbnRhaW5lcik7XG4gIHJldHVybiBjb250YWluZXI7XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtYW5ndWxhci1tZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvbWYvbngtYW5ndWxhci1tZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
package/migrations.json CHANGED
@@ -343,15 +343,6 @@
343
343
  },
344
344
  "description": "Update 'moduleResolution' to 'bundler' in TypeScript configurations. You can read more about this here: https://www.typescriptlang.org/tsconfig/#moduleResolution.",
345
345
  "factory": "./src/migrations/update-21-2-0/update-module-resolution"
346
- },
347
- "update-angular-cli-version-20-1-0": {
348
- "cli": "nx",
349
- "version": "21.3.0-beta.4",
350
- "requires": {
351
- "@angular/core": ">=20.1.0"
352
- },
353
- "description": "Update the @angular/cli package version to ~20.1.0.",
354
- "factory": "./src/migrations/update-21-3-0/update-angular-cli"
355
346
  }
356
347
  },
357
348
  "packageJsonUpdates": {
@@ -1818,71 +1809,6 @@
1818
1809
  "alwaysAddToPackageJson": false
1819
1810
  }
1820
1811
  }
1821
- },
1822
- "21.3.0": {
1823
- "version": "21.3.0-beta.4",
1824
- "x-prompt": "Do you want to update the Angular version to v20.1?",
1825
- "requires": {
1826
- "@angular/core": ">=20.0.0 <20.1.0"
1827
- },
1828
- "packages": {
1829
- "@angular-devkit/build-angular": {
1830
- "version": "~20.1.0",
1831
- "alwaysAddToPackageJson": false
1832
- },
1833
- "@angular-devkit/core": {
1834
- "version": "~20.1.0",
1835
- "alwaysAddToPackageJson": false
1836
- },
1837
- "@angular-devkit/schematics": {
1838
- "version": "~20.1.0",
1839
- "alwaysAddToPackageJson": false
1840
- },
1841
- "@angular/build": {
1842
- "version": "~20.1.0",
1843
- "alwaysAddToPackageJson": false
1844
- },
1845
- "@angular/pwa": {
1846
- "version": "~20.1.0",
1847
- "alwaysAddToPackageJson": false
1848
- },
1849
- "@angular/ssr": {
1850
- "version": "~20.1.0",
1851
- "alwaysAddToPackageJson": false
1852
- },
1853
- "@schematics/angular": {
1854
- "version": "~20.1.0",
1855
- "alwaysAddToPackageJson": false
1856
- },
1857
- "@angular-devkit/architect": {
1858
- "version": "~0.2001.0",
1859
- "alwaysAddToPackageJson": false
1860
- },
1861
- "@angular-devkit/build-webpack": {
1862
- "version": "~0.2001.0",
1863
- "alwaysAddToPackageJson": false
1864
- },
1865
- "@angular/core": {
1866
- "version": "~20.1.0",
1867
- "alwaysAddToPackageJson": true
1868
- },
1869
- "@angular/material": {
1870
- "version": "~20.1.0",
1871
- "alwaysAddToPackageJson": false
1872
- },
1873
- "@angular/cdk": {
1874
- "version": "~20.1.0",
1875
- "alwaysAddToPackageJson": false
1876
- },
1877
- "@angular/google-maps": {
1878
- "version": "~20.1.0",
1879
- "alwaysAddToPackageJson": false
1880
- },
1881
- "ng-packagr": {
1882
- "version": "~20.1.0",
1883
- "alwaysAddToPackageJson": false
1884
- }
1885
- }
1886
1812
  }
1887
1813
  }
1888
1814
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/angular",
3
- "version": "21.3.0-beta.5",
3
+ "version": "21.3.0-canary.20250613-18155f4",
4
4
  "private": false,
5
5
  "description": "The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: \n\n- Integration with libraries such as Storybook, Jest, ESLint, Tailwind CSS, Playwright and Cypress. \n\n- Generators to help scaffold code quickly (like: Micro Frontends, Libraries, both internal to your codebase and publishable to npm) \n\n- Single Component Application Modules (SCAMs) \n\n- NgRx helpers. \n\n- Utilities for automatic workspace refactoring.",
6
6
  "repository": {
@@ -58,14 +58,14 @@
58
58
  "migrations": "./migrations.json"
59
59
  },
60
60
  "dependencies": {
61
- "@nx/devkit": "21.3.0-beta.5",
62
- "@nx/eslint": "21.3.0-beta.5",
63
- "@nx/js": "21.3.0-beta.5",
64
- "@nx/module-federation": "21.3.0-beta.5",
65
- "@nx/rspack": "21.3.0-beta.5",
66
- "@nx/web": "21.3.0-beta.5",
67
- "@nx/webpack": "21.3.0-beta.5",
68
- "@nx/workspace": "21.3.0-beta.5",
61
+ "@nx/devkit": "21.3.0-canary.20250613-18155f4",
62
+ "@nx/eslint": "21.3.0-canary.20250613-18155f4",
63
+ "@nx/js": "21.3.0-canary.20250613-18155f4",
64
+ "@nx/module-federation": "21.3.0-canary.20250613-18155f4",
65
+ "@nx/rspack": "21.3.0-canary.20250613-18155f4",
66
+ "@nx/web": "21.3.0-canary.20250613-18155f4",
67
+ "@nx/webpack": "21.3.0-canary.20250613-18155f4",
68
+ "@nx/workspace": "21.3.0-canary.20250613-18155f4",
69
69
  "@phenomnomnominal/tsquery": "~5.0.1",
70
70
  "@typescript-eslint/type-utils": "^8.0.0",
71
71
  "enquirer": "~2.3.6",
@@ -4,7 +4,6 @@ exports.nxComponentTestingPreset = nxComponentTestingPreset;
4
4
  const cypress_preset_1 = require("@nx/cypress/plugins/cypress-preset");
5
5
  const ct_helpers_1 = require("@nx/cypress/src/utils/ct-helpers");
6
6
  const devkit_1 = require("@nx/devkit");
7
- const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
8
7
  const fs_1 = require("fs");
9
8
  const path_1 = require("path");
10
9
  const semver_1 = require("semver");
@@ -116,8 +115,7 @@ function normalizeBuildTargetOptions(buildContext, ctContext, offset) {
116
115
  configuration: buildContext.configurationName,
117
116
  }, buildContext);
118
117
  const project = buildContext.projectsConfigurations.projects[buildContext.projectName];
119
- const sourceRoot = (0, ts_solution_setup_1.getProjectSourceRoot)(project);
120
- const buildOptions = withSchemaDefaults(options, sourceRoot, buildContext.root);
118
+ const buildOptions = withSchemaDefaults(options, project, buildContext.root);
121
119
  // cypress creates a tsconfig if one isn't preset
122
120
  // that contains all the support required for angular and component tests
123
121
  delete buildOptions.tsConfig;
@@ -191,9 +189,18 @@ function normalizeBuildTargetOptions(buildContext, ctContext, offset) {
191
189
  buildOptions.scripts = [];
192
190
  buildOptions.stylePreprocessorOptions = { includePaths: [] };
193
191
  }
192
+ const config = buildContext.projectGraph.nodes[buildContext.projectName]?.data;
193
+ if (!config.sourceRoot) {
194
+ devkit_1.logger.warn((0, devkit_1.stripIndents) `Unable to find the 'sourceRoot' in the project configuration.
195
+ Will set 'sourceRoot' to '${config.root}/src'
196
+ Note: this may fail, setting the correct 'sourceRoot' for ${buildContext.projectName} in the project.json file will ensure the correct value is used.`);
197
+ config.sourceRoot = (0, devkit_1.joinPathFragments)(config.root, 'src');
198
+ }
194
199
  return {
195
- root: offset ? (0, devkit_1.joinPathFragments)(offset, project.root) : project.root,
196
- sourceRoot: offset ? (0, devkit_1.joinPathFragments)(offset, sourceRoot) : sourceRoot,
200
+ root: offset ? (0, devkit_1.joinPathFragments)(offset, config.root) : config.root,
201
+ sourceRoot: offset
202
+ ? (0, devkit_1.joinPathFragments)(offset, config.sourceRoot)
203
+ : config.sourceRoot,
197
204
  buildOptions: {
198
205
  ...buildOptions,
199
206
  // this property is only valid for cy v12.9.0+
@@ -201,8 +208,9 @@ function normalizeBuildTargetOptions(buildContext, ctContext, offset) {
201
208
  },
202
209
  };
203
210
  }
204
- function withSchemaDefaults(options, sourceRoot, workspaceRoot) {
211
+ function withSchemaDefaults(options, project, workspaceRoot) {
205
212
  if (!options.main && !options.browser) {
213
+ const sourceRoot = project.sourceRoot ?? (0, devkit_1.joinPathFragments)(project.root, 'src');
206
214
  options.browser = (0, devkit_1.joinPathFragments)(sourceRoot, 'main.ts');
207
215
  if (!(0, fs_1.existsSync)((0, path_1.join)(workspaceRoot, options.browser))) {
208
216
  throw new Error('Missing executor options "main" and "browser"');
@@ -4,11 +4,10 @@ exports.getDynamicRemotes = getDynamicRemotes;
4
4
  exports.getStaticRemotes = getStaticRemotes;
5
5
  exports.validateDevRemotes = validateDevRemotes;
6
6
  exports.getDynamicMfManifestFile = getDynamicMfManifestFile;
7
+ const path_1 = require("path");
8
+ const fs_1 = require("fs");
7
9
  const devkit_1 = require("@nx/devkit");
8
10
  const internal_1 = require("@nx/js/src/internal");
9
- const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
10
- const fs_1 = require("fs");
11
- const path_1 = require("path");
12
11
  function getDynamicRemotes(project, context, workspaceProjects, remotesToSkip, pathToManifestFile) {
13
12
  pathToManifestFile ??= getDynamicMfManifestFile(project, context.workspaceRoot);
14
13
  // check for dynamic remotes
@@ -106,6 +105,6 @@ function getDynamicMfManifestFile(project, workspaceRoot) {
106
105
  // at the old path.
107
106
  return [
108
107
  (0, path_1.join)(workspaceRoot, project.root, 'public/module-federation.manifest.json'),
109
- (0, path_1.join)(workspaceRoot, (0, ts_solution_setup_1.getProjectSourceRoot)(project), 'assets/module-federation.manifest.json'),
108
+ (0, path_1.join)(workspaceRoot, project.sourceRoot, 'assets/module-federation.manifest.json'),
110
109
  ].find((path) => (0, fs_1.existsSync)(path));
111
110
  }
@@ -456,7 +456,7 @@
456
456
  "additionalProperties": false
457
457
  },
458
458
  "indexHtmlTransformer": {
459
- "description": "Path to a file containing a function to transform the index.html. The function should have the signature: `(target: Target, indexHtml: string) => string`, where `target` is the build target configuration and `indexHtml` is the original HTML content.",
459
+ "description": "Path to transformer function to transform the index.html",
460
460
  "type": "string",
461
461
  "alias": "indexFileTransformer"
462
462
  },
@@ -278,12 +278,10 @@
278
278
  ]
279
279
  },
280
280
  "loader": {
281
- "description": "Defines the type of loader to use with a specified file extension when used with a JavaScript `import`. `text` inlines the content as a string; `binary` inlines the content as a Uint8Array; `file` emits the file and provides the runtime location of the file; `dataurl` inlines the content as a data URL with best guess of MIME type; `base64` inlines the content as a Base64-encoded string; `empty` considers the content to be empty and not include it in bundles. _Note: `dataurl` and `base64` are only supported in Angular versions >= 20.1.0_.",
281
+ "description": "Defines the type of loader to use with a specified file extension when used with a JavaScript `import`. `text` inlines the content as a string; `binary` inlines the content as a Uint8Array; `file` emits the file and provides the runtime location of the file; `empty` considers the content to be empty and not include it in bundles.",
282
282
  "type": "object",
283
283
  "patternProperties": {
284
- "^\\.\\S+$": {
285
- "enum": ["text", "binary", "file", "dataurl", "base64", "empty"]
286
- }
284
+ "^\\.\\S+$": { "enum": ["text", "binary", "file", "empty"] }
287
285
  }
288
286
  },
289
287
  "define": {
@@ -32,14 +32,4 @@ function validateOptions(options) {
32
32
  throw new Error(`The "conditions" option requires Angular version 20.0.0 or greater. You are currently using version ${angularVersion}.`);
33
33
  }
34
34
  }
35
- if ((0, semver_1.lt)(angularVersion, '20.1.0')) {
36
- if (options.loader) {
37
- const invalidLoaders = Array.from(new Set(Object.values(options.loader).filter((l) => l === 'dataurl' || l === 'base64')));
38
- if (invalidLoaders.length) {
39
- throw new Error(`Using the ${invalidLoaders
40
- .map((l) => `"${l}"`)
41
- .join(' and ')} loader${invalidLoaders.length > 1 ? 's' : ''} requires Angular version 20.1.0 or greater. You are currently using version ${angularVersion}.`);
42
- }
43
- }
44
- }
45
35
  }
@@ -12,9 +12,8 @@ const tslib_1 = require("tslib");
12
12
  const devkit_1 = require("@nx/devkit");
13
13
  const browserslist_1 = tslib_1.__importDefault(require("browserslist"));
14
14
  const fs_1 = require("fs");
15
+ const color_1 = require("ng-packagr/src/lib/utils/color");
15
16
  const path_1 = require("path");
16
- const ng_packagr_version_1 = require("../ng-packagr-version");
17
- const package_imports_1 = require("../package-imports");
18
17
  const maxWorkersVariable = process.env['NG_BUILD_MAX_WORKERS'];
19
18
  const maxThreads = typeof maxWorkersVariable === 'string' && maxWorkersVariable !== ''
20
19
  ? +maxWorkersVariable
@@ -77,8 +76,6 @@ class StylesheetProcessor {
77
76
  devkit_1.workspaceRoot,
78
77
  ]);
79
78
  const tailwindConfigPath = findTailwindConfiguration(searchDirs);
80
- const { major: ngPackagrMajorVersion } = (0, ng_packagr_version_1.getNgPackagrVersionInfo)();
81
- const { colors } = (0, package_imports_1.importNgPackagrPath)('ng-packagr/src/lib/utils/color', ngPackagrMajorVersion);
82
79
  const Piscina = getPiscina();
83
80
  this.renderWorker = new Piscina({
84
81
  filename: require.resolve('ng-packagr/lib/styles/stylesheet-processor-worker'),
@@ -86,7 +83,7 @@ class StylesheetProcessor {
86
83
  recordTiming: false,
87
84
  env: {
88
85
  ...process.env,
89
- FORCE_COLOR: '' + colors.enabled,
86
+ FORCE_COLOR: '' + color_1.colors.enabled,
90
87
  },
91
88
  workerData: {
92
89
  postcssConfiguration,
@@ -80,11 +80,10 @@ async function applicationGenerator(tree, schema) {
80
80
  }
81
81
  if (!options.skipPackageJson) {
82
82
  const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
83
- const devDependencies = {};
84
- const packageVersions = (0, version_utils_1.versions)(tree);
85
83
  if (angularMajorVersion >= 20) {
86
84
  const angularDevkitVersion = (0, version_utils_1.getInstalledAngularDevkitVersion)(tree) ??
87
- packageVersions.angularDevkitVersion;
85
+ (0, version_utils_1.versions)(tree).angularDevkitVersion;
86
+ const devDependencies = {};
88
87
  if (options.bundler === 'esbuild') {
89
88
  devDependencies['@angular/build'] = angularDevkitVersion;
90
89
  }
@@ -95,11 +94,6 @@ async function applicationGenerator(tree, schema) {
95
94
  else {
96
95
  devDependencies['@angular-devkit/build-angular'] = angularDevkitVersion;
97
96
  }
98
- }
99
- if (options.style === 'less') {
100
- devDependencies['less'] = packageVersions.lessVersion;
101
- }
102
- if (Object.keys(devDependencies).length) {
103
97
  (0, devkit_1.addDependenciesToPackageJson)(tree, {}, devDependencies, undefined, true);
104
98
  }
105
99
  }
@@ -2,16 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.updateSsrSetup = updateSsrSetup;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
6
5
  const path_1 = require("path");
7
6
  const versions_1 = require("../../../utils/versions");
8
7
  const version_utils_1 = require("../../utils/version-utils");
9
8
  async function updateSsrSetup(tree, options, appName, typescriptConfiguration) {
10
9
  const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
11
10
  let project = (0, devkit_1.readProjectConfiguration)(tree, appName);
12
- const sourceRoot = (0, ts_solution_setup_1.getProjectSourceRoot)(project, tree);
13
- tree.rename((0, devkit_1.joinPathFragments)(sourceRoot, 'main.server.ts'), (0, devkit_1.joinPathFragments)(sourceRoot, 'bootstrap.server.ts'));
14
- const pathToServerEntry = (0, devkit_1.joinPathFragments)(angularMajorVersion >= 19 ? sourceRoot : project.root, 'server.ts');
11
+ tree.rename((0, devkit_1.joinPathFragments)(project.sourceRoot, 'main.server.ts'), (0, devkit_1.joinPathFragments)(project.sourceRoot, 'bootstrap.server.ts'));
12
+ const pathToServerEntry = (0, devkit_1.joinPathFragments)(angularMajorVersion >= 19
13
+ ? project.sourceRoot ?? (0, devkit_1.joinPathFragments)(project.root, 'src')
14
+ : project.root, 'server.ts');
15
15
  tree.write(pathToServerEntry, `import('./${angularMajorVersion >= 19 ? '' : 'src/'}main.server');`);
16
16
  (0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, '../files/common'), project.root, {
17
17
  appName,
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createFiles = createFiles;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const js_1 = require("@nx/js");
6
- const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
7
6
  const semver_1 = require("semver");
8
7
  const test_runners_1 = require("../../../utils/test-runners");
9
8
  const version_utils_1 = require("../../utils/version-utils");
@@ -51,7 +50,7 @@ function createFiles(tree, options, project) {
51
50
  }
52
51
  }
53
52
  if (!options.libraryOptions.routing) {
54
- tree.delete((0, devkit_1.joinPathFragments)((0, ts_solution_setup_1.getProjectSourceRoot)(project, tree), `lib/lib.routes.ts`));
53
+ tree.delete((0, devkit_1.joinPathFragments)(project.sourceRoot, `lib/lib.routes.ts`));
55
54
  }
56
55
  if (!options.libraryOptions.buildable &&
57
56
  !options.libraryOptions.publishable) {
@@ -24,7 +24,6 @@ export interface NormalizedSchema {
24
24
  skipModule?: boolean;
25
25
  skipPackageJson?: boolean;
26
26
  skipPostInstall?: boolean;
27
- skipTsConfig?: boolean;
28
27
  standalone?: boolean;
29
28
  linter: Linter | LinterType;
30
29
  unitTestRunner: UnitTestRunner;
@@ -11,12 +11,9 @@ function updateTsConfigFiles(tree, options) {
11
11
  (0, js_1.extractTsConfigBase)(tree);
12
12
  updateProjectConfig(tree, options);
13
13
  updateProjectIvyConfig(tree, options);
14
- // Only add tsconfig path mapping if skipTsConfig is not true
15
- if (!options.skipTsConfig) {
16
- (0, js_1.addTsConfigPath)(tree, options.importPath, [
17
- (0, devkit_1.joinPathFragments)(options.projectRoot, './src', 'index.ts'),
18
- ]);
19
- }
14
+ (0, js_1.addTsConfigPath)(tree, options.importPath, [
15
+ (0, devkit_1.joinPathFragments)(options.projectRoot, './src', 'index.ts'),
16
+ ]);
20
17
  const compilerOptions = {
21
18
  skipLibCheck: true,
22
19
  experimentalDecorators: true,
@@ -33,10 +33,6 @@ async function libraryGenerator(tree, schema) {
33
33
  if (schema.publishable === true && !schema.importPath) {
34
34
  throw new Error(`For publishable libs you have to provide a proper "--importPath" which needs to be a valid npm package name (e.g. my-awesome-lib or @myorg/my-lib)`);
35
35
  }
36
- if (schema.simpleName !== undefined && schema.simpleName !== false) {
37
- // TODO(v22): Remove simpleName as user should be using name.
38
- devkit_1.logger.warn(`The "--simpleName" option is deprecated and will be removed in Nx 22. Please use the "--name" option to provide the exact name you want for the library.`);
39
- }
40
36
  if (schema.addTailwind && !schema.buildable && !schema.publishable) {
41
37
  throw new Error(`To use "--addTailwind" option, you have to set either "--buildable" or "--publishable".`);
42
38
  }
@@ -38,5 +38,4 @@ export interface Schema {
38
38
  selector?: string;
39
39
  skipSelector?: boolean;
40
40
  addPlugin?: boolean;
41
- skipTsConfig?: boolean;
42
41
  }
@@ -47,8 +47,7 @@
47
47
  "simpleName": {
48
48
  "description": "Don't include the directory in the name of the module or standalone component entry of the library.",
49
49
  "type": "boolean",
50
- "default": false,
51
- "x-deprecated": "Use the --name option to provide the exact name instead. This option will be removed in Nx 22."
50
+ "default": false
52
51
  },
53
52
  "addModuleSpec": {
54
53
  "description": "Add a module spec file.",
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.updateModuleName = updateModuleName;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
6
5
  /**
7
6
  * Updates the Angular module name (including the spec file and index.ts)
8
7
  *
@@ -41,15 +40,14 @@ function updateModuleName(tree, { oldProjectName, newProjectName }) {
41
40
  to: `${unscopedNewProjectName}-module`,
42
41
  },
43
42
  ];
44
- const sourceRoot = (0, ts_solution_setup_1.getProjectSourceRoot)(project, tree);
45
43
  const filesToRename = moduleFiles.flatMap((moduleFile) => [
46
44
  {
47
- from: `${sourceRoot}/lib/${moduleFile.from}.ts`,
48
- to: `${sourceRoot}/lib/${moduleFile.to}.ts`,
45
+ from: `${project.sourceRoot}/lib/${moduleFile.from}.ts`,
46
+ to: `${project.sourceRoot}/lib/${moduleFile.to}.ts`,
49
47
  },
50
48
  {
51
- from: `${sourceRoot}/lib/${moduleFile.from}.spec.ts`,
52
- to: `${sourceRoot}/lib/${moduleFile.to}.spec.ts`,
49
+ from: `${project.sourceRoot}/lib/${moduleFile.from}.spec.ts`,
50
+ to: `${project.sourceRoot}/lib/${moduleFile.to}.spec.ts`,
53
51
  },
54
52
  ].filter((rename) => rename.from !== rename.to));
55
53
  if (filesToRename.length === 0) {
@@ -73,7 +71,7 @@ function updateModuleName(tree, { oldProjectName, newProjectName }) {
73
71
  }
74
72
  });
75
73
  // update index file
76
- const indexFile = (0, devkit_1.joinPathFragments)(sourceRoot, 'index.ts');
74
+ const indexFile = (0, devkit_1.joinPathFragments)(project.sourceRoot, 'index.ts');
77
75
  if (tree.exists(indexFile)) {
78
76
  updateFileContent(tree, replacements, indexFile);
79
77
  }