@backstage/cli 0.26.11 → 0.27.0-next.0

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 (48) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/config/eslint-factory.js +1 -0
  3. package/dist/cjs/Lockfile-B4mqBkH6.cjs.js +86 -0
  4. package/dist/cjs/{build-DwlXzIpR.cjs.js → build-D5DoFqm6.cjs.js} +8 -13
  5. package/dist/cjs/{buildBackend-CrncxAY5.cjs.js → buildBackend-UK6nC6VL.cjs.js} +17 -41
  6. package/dist/cjs/{buildWorkspace-D95Cv1QN.cjs.js → buildWorkspace-Z-hpJt9g.cjs.js} +4 -4
  7. package/dist/cjs/{bump-b90k9Vrg.cjs.js → bump-Qc4jNLOA.cjs.js} +7 -84
  8. package/dist/cjs/{clean-Bev614vS.cjs.js → clean-CB6dTqaG.cjs.js} +2 -2
  9. package/dist/cjs/{clean-Cn9pRgoI.cjs.js → clean-DlsJGDLw.cjs.js} +2 -2
  10. package/dist/cjs/{codeowners-C_BzEYI6.cjs.js → codeowners-0MT7UP_S.cjs.js} +2 -2
  11. package/dist/cjs/{config-EizsMYjy.cjs.js → config-B1bkp-HP.cjs.js} +43 -35
  12. package/dist/cjs/{createDistWorkspace-CqCdLqOV.cjs.js → createDistWorkspace-0v54ePDJ.cjs.js} +3 -3
  13. package/dist/cjs/{createPlugin-Dp_zJ1vU.cjs.js → createPlugin-CUOGhq6P.cjs.js} +6 -6
  14. package/dist/cjs/{diff-SflPPir6.cjs.js → diff-BaiaASdN.cjs.js} +2 -2
  15. package/dist/cjs/{docs-B0MlNQaZ.cjs.js → docs-D8vejOxE.cjs.js} +3 -3
  16. package/dist/cjs/{fix-BoMIpogO.cjs.js → fix-C7T4cvOB.cjs.js} +2 -2
  17. package/dist/cjs/{index-Do6EL2Yb.cjs.js → index-1VtfY6wb.cjs.js} +4 -4
  18. package/dist/cjs/{index-D6bTzT6C.cjs.js → index-B8Ebu0mP.cjs.js} +19 -15
  19. package/dist/cjs/{index-7vT98W4X.cjs.js → index-BAcLy7dK.cjs.js} +47 -47
  20. package/dist/cjs/{index-nl4fBJN1.cjs.js → index-Bu7Vqly9.cjs.js} +49 -63
  21. package/dist/cjs/{index-JoytU5ZM.cjs.js → index-F8W-9gIc.cjs.js} +2 -2
  22. package/dist/cjs/{info-BRPLyhql.cjs.js → info-D_IhL0i0.cjs.js} +4 -4
  23. package/dist/cjs/{install-DBTY3GMv.cjs.js → install-DGaf_UuL.cjs.js} +5 -5
  24. package/dist/cjs/{lint-DmKqylEy.cjs.js → lint-CRqMLZJ5.cjs.js} +2 -2
  25. package/dist/cjs/lint-Dkx_fBkS.cjs.js +10 -0
  26. package/dist/cjs/{lint-6Ua9puez.cjs.js → lint-EJvdRB7_.cjs.js} +2 -2
  27. package/dist/cjs/{list-deprecations-DNYfBnHZ.cjs.js → list-deprecations-COfvNjrB.cjs.js} +2 -2
  28. package/dist/cjs/{packageDetection-DlDcN5Ll.cjs.js → moduleFederation-CQZbFAit.cjs.js} +94 -25
  29. package/dist/cjs/{new-WebKpNSz.cjs.js → new-DB_oe66E.cjs.js} +6 -6
  30. package/dist/cjs/{pack-5if7U6_6.cjs.js → pack-BcxxlYor.cjs.js} +2 -2
  31. package/dist/cjs/{packageExports-Ddqkury2.cjs.js → packageExports-FpoAU1Be.cjs.js} +3 -3
  32. package/dist/cjs/{packageLintConfigs-CrhcoEVX.cjs.js → packageLintConfigs-D7LMvTow.cjs.js} +3 -3
  33. package/dist/cjs/{packageRole-CBF_rIK0.cjs.js → packageRole-BeuvccV9.cjs.js} +2 -2
  34. package/dist/cjs/{packages-RRALGdRj.cjs.js → packages-DPPEGYIi.cjs.js} +3 -3
  35. package/dist/cjs/{print-Caq1MMDY.cjs.js → print-DuJqsJ2y.cjs.js} +3 -3
  36. package/dist/cjs/{role-DNHddFRX.cjs.js → role-DAaP4LE5.cjs.js} +2 -2
  37. package/dist/cjs/{run-Dyr28990.cjs.js → run-CPcG7YxR.cjs.js} +2 -2
  38. package/dist/cjs/{schema-CXKpYRvf.cjs.js → schema-CR794PHv.cjs.js} +3 -3
  39. package/dist/cjs/{tasks-CMO3PrbZ.cjs.js → tasks-4L8FqWEM.cjs.js} +2 -2
  40. package/dist/cjs/{test-CTXtMelk.cjs.js → test-303IpaqN.cjs.js} +3 -3
  41. package/dist/cjs/{test-CyF0ge7_.cjs.js → test-y8AV0JOP.cjs.js} +3 -3
  42. package/dist/cjs/{validate-CPunUthn.cjs.js → validate-DZJIL6CK.cjs.js} +3 -3
  43. package/dist/index.cjs.js +1 -1
  44. package/package.json +10 -10
  45. package/templates/default-backend-plugin/package.json.hbs +0 -1
  46. package/templates/default-backend-plugin/src/service/router.ts +2 -3
  47. package/dist/cjs/Lockfile-BndFvzHc.cjs.js +0 -221
  48. package/dist/cjs/lint-CCzUmZcU.cjs.js +0 -112
@@ -1,14 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var role = require('./role-DNHddFRX.cjs.js');
3
+ var role = require('./role-DAaP4LE5.cjs.js');
4
4
  var fs = require('fs-extra');
5
- var index = require('./index-7vT98W4X.cjs.js');
5
+ var index = require('./index-BAcLy7dK.cjs.js');
6
6
  var webpack = require('webpack');
7
- var packageDetection = require('./packageDetection-DlDcN5Ll.cjs.js');
7
+ var moduleFederation = require('./moduleFederation-CQZbFAit.cjs.js');
8
8
  require('yn');
9
9
  var path = require('path');
10
10
  require('react-dev-utils/FileSizeReporter');
11
11
  require('react-dev-utils/formatWebpackMessages');
12
+ var chalk = require('chalk');
12
13
  require('eslint-webpack-plugin');
13
14
  require('fork-ts-checker-webpack-plugin');
14
15
  require('html-webpack-plugin');
@@ -16,35 +17,26 @@ require('@module-federation/enhanced/webpack');
16
17
  require('@backstage/cli-common');
17
18
  require('react-dev-utils/ModuleScopePlugin');
18
19
  require('run-script-webpack-plugin');
20
+ require('@pmmmwh/react-refresh-webpack-plugin');
19
21
  require('@manypkg/get-packages');
20
22
  require('webpack-node-externals');
21
23
  require('lodash/pickBy');
22
- require('./run-Dyr28990.cjs.js');
24
+ require('./run-CPcG7YxR.cjs.js');
23
25
  require('mini-css-extract-plugin');
24
- require('@pmmmwh/react-refresh-webpack-plugin');
25
- var chalk = require('chalk');
26
- var cliNode = require('@backstage/cli-node');
27
- var uniq = require('lodash/uniq');
28
26
  var openBrowser = require('react-dev-utils/openBrowser');
29
27
  var WebpackDevServer = require('webpack-dev-server');
30
- require('semver');
31
- require('@yarnpkg/parsers');
32
- require('@yarnpkg/lockfile');
33
- require('minimatch');
34
- require('./yarn-Ukl9MOS0.cjs.js');
35
- require('lodash/partition');
36
28
  require('@backstage/config-loader');
37
29
  require('@backstage/config');
30
+ require('@backstage/cli-node');
38
31
  var chokidar = require('chokidar');
39
32
  var ctrlcWindows = require('ctrlc-windows');
40
33
  var errors = require('@backstage/errors');
41
34
  var debounce = require('lodash/debounce');
42
35
  var url = require('url');
43
36
  var spawn = require('cross-spawn');
44
- var lint = require('./lint-CCzUmZcU.cjs.js');
45
- var config = require('./config-EizsMYjy.cjs.js');
46
- var Lockfile = require('./Lockfile-BndFvzHc.cjs.js');
37
+ var config = require('./config-B1bkp-HP.cjs.js');
47
38
  require('commander');
39
+ require('semver');
48
40
  require('./entryPoints-CoHH4lBA.cjs.js');
49
41
  require('./svgrTemplate-BTjBQ3by.cjs.js');
50
42
  require('p-queue');
@@ -56,15 +48,14 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
56
48
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
57
49
  var webpack__default = /*#__PURE__*/_interopDefaultCompat(webpack);
58
50
  var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
59
- var uniq__default = /*#__PURE__*/_interopDefaultCompat(uniq);
60
51
  var openBrowser__default = /*#__PURE__*/_interopDefaultCompat(openBrowser);
61
52
  var WebpackDevServer__default = /*#__PURE__*/_interopDefaultCompat(WebpackDevServer);
62
53
  var debounce__default = /*#__PURE__*/_interopDefaultCompat(debounce);
63
54
  var spawn__default = /*#__PURE__*/_interopDefaultCompat(spawn);
64
55
 
65
56
  async function serveBackend(options) {
66
- const paths = packageDetection.resolveBundlingPaths(options);
67
- const config = await packageDetection.createBackendConfig(paths, {
57
+ const paths = moduleFederation.resolveBundlingPaths(options);
58
+ const config = await moduleFederation.createBackendConfig(paths, {
68
59
  ...options,
69
60
  isDev: true
70
61
  });
@@ -87,37 +78,9 @@ async function serveBackend(options) {
87
78
  }
88
79
 
89
80
  async function serveBundle(options) {
90
- const paths = packageDetection.resolveBundlingPaths(options);
81
+ const paths = moduleFederation.resolveBundlingPaths(options);
91
82
  const targetPkg = await fs__default.default.readJson(paths.targetPackageJson);
92
83
  if (options.verifyVersions) {
93
- const lockfile = await Lockfile.Lockfile.load(
94
- index.paths.resolveTargetRoot("yarn.lock")
95
- );
96
- const result = lockfile.analyze({
97
- filter: lint.includedFilter,
98
- localPackages: cliNode.PackageGraph.fromPackages(
99
- await cliNode.PackageGraph.listTargetPackages()
100
- )
101
- });
102
- const problemPackages = [...result.newVersions, ...result.newRanges].map(({ name: name2 }) => name2).filter(lint.forbiddenDuplicatesFilter);
103
- if (problemPackages.length > 1) {
104
- console.log(
105
- chalk__default.default.yellow(
106
- `\u26A0\uFE0F Some of the following packages may be outdated or have duplicate installations:
107
-
108
- ${uniq__default.default(problemPackages).join(", ")}
109
- `
110
- )
111
- );
112
- console.log(
113
- chalk__default.default.yellow(
114
- `\u26A0\uFE0F This can be resolved using the following command:
115
-
116
- yarn backstage-cli versions:check --fix
117
- `
118
- )
119
- );
120
- }
121
84
  if (targetPkg.dependencies?.["react-router"]?.includes("beta") || targetPkg.dependencies?.["react-router-dom"]?.includes("beta")) {
122
85
  console.warn(
123
86
  chalk__default.default.yellow(`
@@ -162,10 +125,12 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
162
125
  );
163
126
  }
164
127
  const { frontendConfig, fullConfig } = cliConfig;
165
- const url = packageDetection.resolveBaseUrl(frontendConfig);
166
- const host = frontendConfig.getOptionalString("app.listen.host") || url.hostname;
167
- const port = frontendConfig.getOptionalNumber("app.listen.port") || Number(url.port) || (url.protocol === "https:" ? 443 : 80);
168
- const detectedModulesEntryPoint = await packageDetection.createDetectedModulesEntryPoint({
128
+ const url = moduleFederation.resolveBaseUrl(frontendConfig, options.moduleFederation);
129
+ const { host, port } = moduleFederation.resolveEndpoint(
130
+ frontendConfig,
131
+ options.moduleFederation
132
+ );
133
+ const detectedModulesEntryPoint = await moduleFederation.createDetectedModulesEntryPoint({
169
134
  config: fullConfig,
170
135
  targetPath: paths.targetPath,
171
136
  watch() {
@@ -183,9 +148,10 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
183
148
  return latestFrontendAppConfigs;
184
149
  }
185
150
  };
186
- const config$1 = await packageDetection.createConfig(paths, {
151
+ const config$1 = await moduleFederation.createConfig(paths, {
187
152
  ...commonConfigOptions,
188
- additionalEntryPoints: detectedModulesEntryPoint
153
+ additionalEntryPoints: detectedModulesEntryPoint,
154
+ moduleFederation: options.moduleFederation
189
155
  });
190
156
  if (process.env.EXPERIMENTAL_VITE) {
191
157
  const vite = require("vite");
@@ -201,7 +167,7 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
201
167
  "process.env.APP_CONFIG": JSON.stringify(cliConfig.frontendAppConfigs),
202
168
  // This allows for conditional imports of react-dom/client, since there's no way
203
169
  // to check for presence of it in source code without module resolution errors.
204
- "process.env.HAS_REACT_DOM_CLIENT": JSON.stringify(packageDetection.hasReactDomClient())
170
+ "process.env.HAS_REACT_DOM_CLIENT": JSON.stringify(moduleFederation.hasReactDomClient())
205
171
  },
206
172
  plugins: [
207
173
  viteReact(),
@@ -227,7 +193,7 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
227
193
  root: paths.targetPath
228
194
  });
229
195
  } else {
230
- const publicPaths = await packageDetection.resolveOptionalBundlingPaths({
196
+ const publicPaths = await moduleFederation.resolveOptionalBundlingPaths({
231
197
  entry: "src/index-public-experimental",
232
198
  dist: "dist/public"
233
199
  });
@@ -238,7 +204,7 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
238
204
  )
239
205
  );
240
206
  }
241
- const compiler = publicPaths ? webpack__default.default([config$1, await packageDetection.createConfig(publicPaths, commonConfigOptions)]) : webpack__default.default(config$1);
207
+ const compiler = publicPaths ? webpack__default.default([config$1, await moduleFederation.createConfig(publicPaths, commonConfigOptions)]) : webpack__default.default(config$1);
242
208
  webpackServer = new WebpackDevServer__default.default(
243
209
  {
244
210
  hot: !process.env.CI,
@@ -250,7 +216,7 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
250
216
  publicPath: config$1.output?.publicPath,
251
217
  directory: paths.targetPublic
252
218
  } : void 0,
253
- historyApiFallback: {
219
+ historyApiFallback: options.moduleFederation?.mode === "remote" ? false : {
254
220
  // Paths with dots should still use the history fallback.
255
221
  // See https://github.com/facebookincubator/create-react-app/issues/387.
256
222
  disableDotRule: true,
@@ -270,7 +236,12 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
270
236
  // When the dev server is behind a proxy, the host and public hostname differ
271
237
  allowedHosts: [url.hostname],
272
238
  client: {
273
- webSocketURL: "auto://0.0.0.0:0/ws"
239
+ webSocketURL: { hostname: host, port }
240
+ },
241
+ headers: {
242
+ "Access-Control-Allow-Origin": "*",
243
+ "Access-Control-Allow-Methods": "GET, OPTIONS",
244
+ "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
274
245
  }
275
246
  },
276
247
  compiler
@@ -290,7 +261,9 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
290
261
  resolve();
291
262
  }
292
263
  });
293
- openBrowser__default.default(url.href);
264
+ if (!options.skipOpenBrowser) {
265
+ openBrowser__default.default(url.href);
266
+ }
294
267
  const waitForExit = async () => {
295
268
  for (const signal of ["SIGINT", "SIGTERM"]) {
296
269
  process.on(signal, () => {
@@ -590,11 +563,17 @@ async function cleanDistAndServeBackend(options) {
590
563
  }
591
564
 
592
565
  async function startFrontend(options) {
566
+ const { name } = await fs.readJson(index.paths.resolveTarget("package.json"));
593
567
  const waitForExit = await serveBundle({
594
568
  entry: options.entry,
595
569
  checksEnabled: options.checksEnabled,
596
570
  configPaths: options.configPaths,
597
- verifyVersions: options.verifyVersions
571
+ verifyVersions: options.verifyVersions,
572
+ skipOpenBrowser: options.skipOpenBrowser,
573
+ moduleFederation: moduleFederation.getModuleFederationOptions(
574
+ name,
575
+ options.isModuleFederationRemote
576
+ )
598
577
  });
599
578
  await waitForExit();
600
579
  }
@@ -625,6 +604,13 @@ async function command(opts) {
625
604
  case "frontend-plugin":
626
605
  case "frontend-plugin-module":
627
606
  return startFrontend({ entry: "dev/index", ...options });
607
+ case "frontend-dynamic-container":
608
+ return startFrontend({
609
+ entry: "src/index",
610
+ ...options,
611
+ skipOpenBrowser: true,
612
+ isModuleFederationRemote: true
613
+ });
628
614
  default:
629
615
  throw new Error(
630
616
  `Start command is not supported for package role '${role$1}'`
@@ -633,4 +619,4 @@ async function command(opts) {
633
619
  }
634
620
 
635
621
  exports.command = command;
636
- //# sourceMappingURL=index-nl4fBJN1.cjs.js.map
622
+ //# sourceMappingURL=index-Bu7Vqly9.cjs.js.map
@@ -4,7 +4,7 @@ var fs = require('fs-extra');
4
4
  var chalk = require('chalk');
5
5
  var yaml = require('yaml');
6
6
  var inquirer = require('inquirer');
7
- var index$1 = require('./index-7vT98W4X.cjs.js');
7
+ var index$1 = require('./index-BAcLy7dK.cjs.js');
8
8
  var crypto = require('crypto');
9
9
  var openBrowser = require('react-dev-utils/openBrowser');
10
10
  var request = require('@octokit/request');
@@ -224,4 +224,4 @@ async function verifyGithubOrg(org) {
224
224
  }
225
225
 
226
226
  exports.default = index;
227
- //# sourceMappingURL=index-JoytU5ZM.cjs.js.map
227
+ //# sourceMappingURL=index-F8W-9gIc.cjs.js.map
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-7vT98W4X.cjs.js');
3
+ var index = require('./index-BAcLy7dK.cjs.js');
4
4
  var os = require('os');
5
- var run = require('./run-Dyr28990.cjs.js');
6
- var Lockfile = require('./Lockfile-BndFvzHc.cjs.js');
5
+ var run = require('./run-CPcG7YxR.cjs.js');
6
+ var Lockfile = require('./Lockfile-B4mqBkH6.cjs.js');
7
7
  require('minimatch');
8
8
  require('@manypkg/get-packages');
9
9
  require('chalk');
@@ -57,4 +57,4 @@ var info = async () => {
57
57
  };
58
58
 
59
59
  exports.default = info;
60
- //# sourceMappingURL=info-BRPLyhql.cjs.js.map
60
+ //# sourceMappingURL=info-D_IhL0i0.cjs.js.map
@@ -1,15 +1,14 @@
1
1
  'use strict';
2
2
 
3
3
  var fs = require('fs-extra');
4
- require('semver');
5
4
  require('@yarnpkg/parsers');
6
5
  require('@yarnpkg/lockfile');
7
- var packages = require('./packages-RRALGdRj.cjs.js');
8
- var index = require('./index-7vT98W4X.cjs.js');
6
+ var packages = require('./packages-DPPEGYIi.cjs.js');
7
+ var index = require('./index-BAcLy7dK.cjs.js');
9
8
  var chalk = require('chalk');
10
9
  var sortBy = require('lodash/sortBy');
11
10
  var groupBy = require('lodash/groupBy');
12
- var run = require('./run-Dyr28990.cjs.js');
11
+ var run = require('./run-CPcG7YxR.cjs.js');
13
12
  require('minimatch');
14
13
  require('@manypkg/get-packages');
15
14
  require('./yarn-Ukl9MOS0.cjs.js');
@@ -17,6 +16,7 @@ require('@backstage/errors');
17
16
  require('child_process');
18
17
  require('util');
19
18
  require('commander');
19
+ require('semver');
20
20
  require('@backstage/cli-common');
21
21
 
22
22
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -265,4 +265,4 @@ var install = async (pluginId, cmd) => {
265
265
  };
266
266
 
267
267
  exports.default = install;
268
- //# sourceMappingURL=install-DBTY3GMv.cjs.js.map
268
+ //# sourceMappingURL=install-DGaf_UuL.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-7vT98W4X.cjs.js');
3
+ var index = require('./index-BAcLy7dK.cjs.js');
4
4
  var eslint = require('eslint');
5
5
  require('commander');
6
6
  require('chalk');
@@ -33,4 +33,4 @@ var lint = async (directories, opts) => {
33
33
  };
34
34
 
35
35
  exports.default = lint;
36
- //# sourceMappingURL=lint-DmKqylEy.cjs.js.map
36
+ //# sourceMappingURL=lint-CRqMLZJ5.cjs.js.map
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var lint = async () => {
4
+ throw new Error(
5
+ "This command has been removed, please consider alternatives such as `yarn dedupe` instead."
6
+ );
7
+ };
8
+
9
+ exports.default = lint;
10
+ //# sourceMappingURL=lint-Dkx_fBkS.cjs.js.map
@@ -3,7 +3,7 @@
3
3
  var chalk = require('chalk');
4
4
  var path = require('path');
5
5
  var cliNode = require('@backstage/cli-node');
6
- var index = require('./index-7vT98W4X.cjs.js');
6
+ var index = require('./index-BAcLy7dK.cjs.js');
7
7
  var parallel = require('./parallel-BszNaKyc.cjs.js');
8
8
  require('commander');
9
9
  require('fs-extra');
@@ -88,4 +88,4 @@ async function command(opts) {
88
88
  }
89
89
 
90
90
  exports.command = command;
91
- //# sourceMappingURL=lint-6Ua9puez.cjs.js.map
91
+ //# sourceMappingURL=lint-EJvdRB7_.cjs.js.map
@@ -4,7 +4,7 @@ var chalk = require('chalk');
4
4
  var eslint = require('eslint');
5
5
  var path = require('path');
6
6
  var cliNode = require('@backstage/cli-node');
7
- var index = require('./index-7vT98W4X.cjs.js');
7
+ var index = require('./index-BAcLy7dK.cjs.js');
8
8
  require('commander');
9
9
  require('fs-extra');
10
10
  require('semver');
@@ -76,4 +76,4 @@ async function command(opts) {
76
76
  }
77
77
 
78
78
  exports.command = command;
79
- //# sourceMappingURL=list-deprecations-DNYfBnHZ.cjs.js.map
79
+ //# sourceMappingURL=list-deprecations-COfvNjrB.cjs.js.map
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var path = require('path');
4
+ var chalk = require('chalk');
4
5
  var webpack = require('webpack');
5
6
  var ESLintPlugin = require('eslint-webpack-plugin');
6
7
  var ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
@@ -9,16 +10,16 @@ var webpack$1 = require('@module-federation/enhanced/webpack');
9
10
  var cliCommon = require('@backstage/cli-common');
10
11
  var ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin');
11
12
  var runScriptWebpackPlugin = require('run-script-webpack-plugin');
12
- var index = require('./index-7vT98W4X.cjs.js');
13
+ var ReactRefreshPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
14
+ var index = require('./index-BAcLy7dK.cjs.js');
13
15
  var fs = require('fs-extra');
14
16
  var getPackages = require('@manypkg/get-packages');
15
17
  var nodeExternals = require('webpack-node-externals');
16
18
  var pickBy = require('lodash/pickBy');
17
19
  var entryPoints = require('./entryPoints-CoHH4lBA.cjs.js');
18
- var run = require('./run-Dyr28990.cjs.js');
20
+ var run = require('./run-CPcG7YxR.cjs.js');
19
21
  var MiniCssExtractPlugin = require('mini-css-extract-plugin');
20
22
  var svgrTemplate = require('./svgrTemplate-BTjBQ3by.cjs.js');
21
- var ReactRefreshPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
22
23
  var yn = require('yn');
23
24
  var config = require('@backstage/config');
24
25
  var chokidar = require('chokidar');
@@ -26,16 +27,17 @@ var PQueue = require('p-queue');
26
27
 
27
28
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
28
29
 
30
+ var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
29
31
  var webpack__default = /*#__PURE__*/_interopDefaultCompat(webpack);
30
32
  var ESLintPlugin__default = /*#__PURE__*/_interopDefaultCompat(ESLintPlugin);
31
33
  var ForkTsCheckerWebpackPlugin__default = /*#__PURE__*/_interopDefaultCompat(ForkTsCheckerWebpackPlugin);
32
34
  var HtmlWebpackPlugin__default = /*#__PURE__*/_interopDefaultCompat(HtmlWebpackPlugin);
33
35
  var ModuleScopePlugin__default = /*#__PURE__*/_interopDefaultCompat(ModuleScopePlugin);
36
+ var ReactRefreshPlugin__default = /*#__PURE__*/_interopDefaultCompat(ReactRefreshPlugin);
34
37
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
35
38
  var nodeExternals__default = /*#__PURE__*/_interopDefaultCompat(nodeExternals);
36
39
  var pickBy__default = /*#__PURE__*/_interopDefaultCompat(pickBy);
37
40
  var MiniCssExtractPlugin__default = /*#__PURE__*/_interopDefaultCompat(MiniCssExtractPlugin);
38
- var ReactRefreshPlugin__default = /*#__PURE__*/_interopDefaultCompat(ReactRefreshPlugin);
39
41
  var yn__default = /*#__PURE__*/_interopDefaultCompat(yn);
40
42
  var chokidar__default = /*#__PURE__*/_interopDefaultCompat(chokidar);
41
43
  var PQueue__default = /*#__PURE__*/_interopDefaultCompat(PQueue);
@@ -87,13 +89,13 @@ const optimization = (options) => {
87
89
  minimize: !isDev,
88
90
  minimizer: [
89
91
  new EsbuildPlugin({
90
- target: "es2019",
92
+ target: "ES2022",
91
93
  format: "iife",
92
94
  exclude: "remoteEntry.js"
93
95
  }),
94
96
  // Avoid iife wrapping of module federation remote entry as it breaks the variable assignment
95
97
  new EsbuildPlugin({
96
- target: "es2019",
98
+ target: "ES2022",
97
99
  format: void 0,
98
100
  include: "remoteEntry.js"
99
101
  })
@@ -159,7 +161,7 @@ const transforms = (options) => {
159
161
  loader: require.resolve("swc-loader"),
160
162
  options: {
161
163
  jsc: {
162
- target: "es2019",
164
+ target: "ES2022",
163
165
  externalHelpers: !isBackend,
164
166
  parser: {
165
167
  syntax: "typescript",
@@ -185,7 +187,7 @@ const transforms = (options) => {
185
187
  loader: require.resolve("swc-loader"),
186
188
  options: {
187
189
  jsc: {
188
- target: "es2019",
190
+ target: "ES2022",
189
191
  externalHelpers: !isBackend,
190
192
  parser: {
191
193
  syntax: "ecmascript",
@@ -216,7 +218,7 @@ const transforms = (options) => {
216
218
  loader: require.resolve("swc-loader"),
217
219
  options: {
218
220
  jsc: {
219
- target: "es2019",
221
+ target: "es2022",
220
222
  externalHelpers: !isBackend,
221
223
  parser: {
222
224
  syntax: "ecmascript",
@@ -286,15 +288,7 @@ const transforms = (options) => {
286
288
  }
287
289
  ];
288
290
  const plugins = new Array();
289
- if (isDev) {
290
- if (!isBackend) {
291
- plugins.push(
292
- new ReactRefreshPlugin__default.default({
293
- overlay: { sockProtocol: "ws" }
294
- })
295
- );
296
- }
297
- } else {
291
+ if (!isDev) {
298
292
  plugins.push(
299
293
  new MiniCssExtractPlugin__default.default({
300
294
  filename: "static/[name].[contenthash:8].css",
@@ -317,14 +311,22 @@ function hasReactDomClient() {
317
311
  }
318
312
 
319
313
  const BUILD_CACHE_ENV_VAR = "BACKSTAGE_CLI_EXPERIMENTAL_BUILD_CACHE";
320
- function resolveBaseUrl(config) {
314
+ function resolveBaseUrl(config, moduleFederation) {
321
315
  const baseUrl = config.getOptionalString("app.baseUrl");
316
+ const defaultBaseUrl = moduleFederation?.mode === "remote" ? `http://localhost:${process.env.PORT ?? "3000"}` : "http://localhost:3000";
322
317
  try {
323
- return new URL(baseUrl ?? "/", "http://localhost:3000");
318
+ return new URL(baseUrl ?? "/", defaultBaseUrl);
324
319
  } catch (error) {
325
320
  throw new Error(`Invalid app.baseUrl, ${error}`);
326
321
  }
327
322
  }
323
+ function resolveEndpoint(config, moduleFederation) {
324
+ const url = resolveBaseUrl(config, moduleFederation);
325
+ return {
326
+ host: config.getOptionalString("app.listen.host") ?? url.hostname,
327
+ port: config.getOptionalNumber("app.listen.port") ?? Number(url.port) ?? (url.protocol === "https:" ? 443 : 80)
328
+ };
329
+ }
328
330
  async function readBuildInfo() {
329
331
  const timestamp = Date.now();
330
332
  let commit;
@@ -354,15 +356,36 @@ async function readBuildInfo() {
354
356
  };
355
357
  }
356
358
  async function createConfig(paths, options) {
357
- const { checksEnabled, isDev, frontendConfig, publicSubPath = "" } = options;
359
+ const {
360
+ checksEnabled,
361
+ isDev,
362
+ frontendConfig,
363
+ moduleFederation,
364
+ publicSubPath = ""
365
+ } = options;
358
366
  const { plugins, loaders } = transforms(options);
359
367
  const { packages } = await getPackages.getPackages(index.paths.targetDir);
360
368
  const externalPkgs = packages.filter((p) => !cliCommon.isChildPath(paths.root, p.dir));
361
- const validBaseUrl = resolveBaseUrl(frontendConfig);
369
+ const validBaseUrl = resolveBaseUrl(frontendConfig, moduleFederation);
362
370
  let publicPath = validBaseUrl.pathname.replace(/\/$/, "");
363
371
  if (publicSubPath) {
364
372
  publicPath = `${publicPath}${publicSubPath}`.replace("//", "/");
365
373
  }
374
+ if (isDev) {
375
+ const { host, port } = resolveEndpoint(
376
+ options.frontendConfig,
377
+ options.moduleFederation
378
+ );
379
+ plugins.push(
380
+ new ReactRefreshPlugin__default.default({
381
+ overlay: {
382
+ sockProtocol: "ws",
383
+ sockHost: host,
384
+ sockPort: port
385
+ }
386
+ })
387
+ );
388
+ }
366
389
  if (checksEnabled) {
367
390
  plugins.push(
368
391
  new ForkTsCheckerWebpackPlugin__default.default({
@@ -475,11 +498,37 @@ async function createConfig(paths, options) {
475
498
  require.resolve("@pmmmwh/react-refresh-webpack-plugin/overlay/index.js"),
476
499
  require.resolve("react-refresh")
477
500
  ];
501
+ const mode = isDev ? "development" : "production";
502
+ const optimization$1 = optimization(options);
503
+ if (mode === "production" && process.env.EXPERIMENTAL_MODULE_FEDERATION && process.env.FORCE_REACT_DEVELOPMENT) {
504
+ console.log(
505
+ chalk__default.default.yellow(
506
+ `\u26A0\uFE0F WARNING: Forcing react and react-dom into development mode. This build should not be used in production.`
507
+ )
508
+ );
509
+ const reactPackageDirs = [
510
+ `${path.dirname(require.resolve("react/package.json"))}/`,
511
+ `${path.dirname(require.resolve("react-dom/package.json"))}/`
512
+ ];
513
+ optimization$1.nodeEnv = false;
514
+ plugins.push(
515
+ new webpack__default.default.DefinePlugin({
516
+ "process.env.NODE_ENV": webpack__default.default.DefinePlugin.runtimeValue(
517
+ ({ module }) => {
518
+ if (reactPackageDirs.some((val) => module.resource.startsWith(val))) {
519
+ return '"development"';
520
+ }
521
+ return `"${mode}"`;
522
+ }
523
+ )
524
+ })
525
+ );
526
+ }
478
527
  const withCache = yn__default.default(process.env[BUILD_CACHE_ENV_VAR], { default: false });
479
528
  return {
480
- mode: isDev ? "development" : "production",
529
+ mode,
481
530
  profile: false,
482
- optimization: optimization(options),
531
+ optimization: optimization$1,
483
532
  bail: false,
484
533
  performance: {
485
534
  hints: false
@@ -809,11 +858,31 @@ async function createDetectedModulesEntryPoint(options) {
809
858
  return [DETECTED_MODULES_MODULE_NAME];
810
859
  }
811
860
 
861
+ function getModuleFederationOptions(name, isModuleFederationRemote) {
862
+ if (!isModuleFederationRemote && !process.env.EXPERIMENTAL_MODULE_FEDERATION) {
863
+ return void 0;
864
+ }
865
+ console.log(
866
+ chalk__default.default.yellow(
867
+ `\u26A0\uFE0F WARNING: Module federation is experimental and will receive immediate breaking changes in the future.`
868
+ )
869
+ );
870
+ return {
871
+ mode: isModuleFederationRemote ? "remote" : "host",
872
+ // The default output mode requires the name to be a usable as a code
873
+ // symbol, there might be better options here but for now we need to
874
+ // sanitize the name.
875
+ name: name.replaceAll("@", "").replaceAll("/", "__").replaceAll("-", "_")
876
+ };
877
+ }
878
+
812
879
  exports.createBackendConfig = createBackendConfig;
813
880
  exports.createConfig = createConfig;
814
881
  exports.createDetectedModulesEntryPoint = createDetectedModulesEntryPoint;
882
+ exports.getModuleFederationOptions = getModuleFederationOptions;
815
883
  exports.hasReactDomClient = hasReactDomClient;
816
884
  exports.resolveBaseUrl = resolveBaseUrl;
817
885
  exports.resolveBundlingPaths = resolveBundlingPaths;
886
+ exports.resolveEndpoint = resolveEndpoint;
818
887
  exports.resolveOptionalBundlingPaths = resolveOptionalBundlingPaths;
819
- //# sourceMappingURL=packageDetection-DlDcN5Ll.cjs.js.map
888
+ //# sourceMappingURL=moduleFederation-CQZbFAit.cjs.js.map
@@ -7,14 +7,14 @@ var chalk = require('chalk');
7
7
  var inquirer = require('inquirer');
8
8
  var camelCase = require('lodash/camelCase');
9
9
  var upperFirst = require('lodash/upperFirst');
10
- var index = require('./index-7vT98W4X.cjs.js');
11
- var codeowners = require('./codeowners-C_BzEYI6.cjs.js');
12
- var tasks = require('./tasks-CMO3PrbZ.cjs.js');
13
- var Lockfile = require('./Lockfile-BndFvzHc.cjs.js');
10
+ var index = require('./index-BAcLy7dK.cjs.js');
11
+ var codeowners = require('./codeowners-0MT7UP_S.cjs.js');
12
+ var tasks = require('./tasks-4L8FqWEM.cjs.js');
13
+ var Lockfile = require('./Lockfile-B4mqBkH6.cjs.js');
14
14
  require('minimatch');
15
15
  require('@manypkg/get-packages');
16
16
  require('./yarn-Ukl9MOS0.cjs.js');
17
- require('./run-Dyr28990.cjs.js');
17
+ require('./run-CPcG7YxR.cjs.js');
18
18
  var partition = require('lodash/partition');
19
19
  var cliNode = require('@backstage/cli-node');
20
20
  var errors = require('@backstage/errors');
@@ -775,4 +775,4 @@ var _new = async (opts) => {
775
775
  };
776
776
 
777
777
  exports.default = _new;
778
- //# sourceMappingURL=new-WebKpNSz.cjs.js.map
778
+ //# sourceMappingURL=new-DB_oe66E.cjs.js.map
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var productionPack = require('./productionPack-BWU8WkGs.cjs.js');
4
- var index = require('./index-7vT98W4X.cjs.js');
4
+ var index = require('./index-BAcLy7dK.cjs.js');
5
5
  var fs = require('fs-extra');
6
6
  var publishing = require('./publishing-DQtsKTbc.cjs.js');
7
7
  require('npm-packlist');
@@ -30,4 +30,4 @@ const post = async () => {
30
30
 
31
31
  exports.post = post;
32
32
  exports.pre = pre;
33
- //# sourceMappingURL=pack-5if7U6_6.cjs.js.map
33
+ //# sourceMappingURL=pack-BcxxlYor.cjs.js.map
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var fix = require('./fix-BoMIpogO.cjs.js');
3
+ var fix = require('./fix-C7T4cvOB.cjs.js');
4
4
  require('@backstage/cli-node');
5
5
  require('fs-extra');
6
6
  require('path');
7
- require('./index-7vT98W4X.cjs.js');
7
+ require('./index-BAcLy7dK.cjs.js');
8
8
  require('commander');
9
9
  require('chalk');
10
10
  require('semver');
@@ -24,4 +24,4 @@ async function command() {
24
24
  }
25
25
 
26
26
  exports.command = command;
27
- //# sourceMappingURL=packageExports-Ddqkury2.cjs.js.map
27
+ //# sourceMappingURL=packageExports-FpoAU1Be.cjs.js.map