@backstage/cli 0.0.0-nightly-20241216023741 → 0.0.0-nightly-20241221023113

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 (27) hide show
  1. package/CHANGELOG.md +29 -9
  2. package/dist/commands/build/buildFrontend.cjs.js +7 -4
  3. package/dist/commands/repo/build.cjs.js +4 -1
  4. package/dist/commands/start/startFrontend.cjs.js +7 -4
  5. package/dist/lib/bundler/bundle.cjs.js +5 -0
  6. package/dist/lib/bundler/config.cjs.js +9 -3
  7. package/dist/lib/bundler/moduleFederation.cjs.js +26 -2
  8. package/dist/lib/bundler/server.cjs.js +5 -0
  9. package/dist/packages/backend-defaults/package.json.cjs.js +1 -1
  10. package/dist/packages/backend-plugin-api/package.json.cjs.js +1 -1
  11. package/dist/packages/backend-test-utils/package.json.cjs.js +1 -1
  12. package/dist/packages/catalog-client/package.json.cjs.js +1 -1
  13. package/dist/packages/cli/package.json.cjs.js +1 -1
  14. package/dist/packages/config/package.json.cjs.js +1 -1
  15. package/dist/packages/core-app-api/package.json.cjs.js +1 -1
  16. package/dist/packages/core-components/package.json.cjs.js +1 -1
  17. package/dist/packages/core-plugin-api/package.json.cjs.js +1 -1
  18. package/dist/packages/dev-utils/package.json.cjs.js +1 -1
  19. package/dist/packages/errors/package.json.cjs.js +1 -1
  20. package/dist/packages/test-utils/package.json.cjs.js +1 -1
  21. package/dist/packages/theme/package.json.cjs.js +1 -1
  22. package/dist/plugins/auth-backend/package.json.cjs.js +1 -1
  23. package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +1 -1
  24. package/dist/plugins/catalog-node/package.json.cjs.js +1 -1
  25. package/dist/plugins/scaffolder-node/package.json.cjs.js +1 -1
  26. package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +1 -1
  27. package/package.json +24 -24
package/CHANGELOG.md CHANGED
@@ -1,6 +1,22 @@
1
1
  # @backstage/cli
2
2
 
3
- ## 0.0.0-nightly-20241216023741
3
+ ## 0.0.0-nightly-20241221023113
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @backstage/config-loader@0.0.0-nightly-20241221023113
9
+ - @backstage/integration@1.16.0
10
+ - @backstage/cli-node@0.2.11
11
+ - @backstage/catalog-model@1.7.2
12
+ - @backstage/cli-common@0.1.15
13
+ - @backstage/config@1.3.1
14
+ - @backstage/errors@1.2.6
15
+ - @backstage/eslint-plugin@0.1.10
16
+ - @backstage/release-manifests@0.0.12
17
+ - @backstage/types@1.2.0
18
+
19
+ ## 0.29.4
4
20
 
5
21
  ### Patch Changes
6
22
 
@@ -14,16 +30,20 @@
14
30
  - 5f04976: Update `rollup` to avoid issues with build output when running `backstage-cli package build`.
15
31
  - 5f04976: Fixed a bug that caused missing code in published packages.
16
32
  - a49030a: Add support for `--output-file` option from ESLint to `package lint` and `repo lint` commands.
33
+ - 96331fa: Enhance the behavior of the experimental support for module federation in the backstage CLI,
34
+ by using the `package.json` exports (when present) to complete the list of exposed modules.
35
+ This allows, for example, using exported `alpha` definitions through module federation.
17
36
  - 5c9cc05: Use native fetch instead of node-fetch
18
- - Updated dependencies
19
- - @backstage/integration@0.0.0-nightly-20241216023741
20
- - @backstage/release-manifests@0.0.0-nightly-20241216023741
21
- - @backstage/cli-node@0.0.0-nightly-20241216023741
22
- - @backstage/config-loader@0.0.0-nightly-20241216023741
23
- - @backstage/errors@0.0.0-nightly-20241216023741
24
- - @backstage/catalog-model@0.0.0-nightly-20241216023741
37
+ - dcd99d2: added experimental RSPack support for build command in the repo scope
38
+ - Updated dependencies
39
+ - @backstage/integration@1.16.0
40
+ - @backstage/release-manifests@0.0.12
41
+ - @backstage/cli-node@0.2.11
42
+ - @backstage/config-loader@1.9.3
43
+ - @backstage/errors@1.2.6
44
+ - @backstage/catalog-model@1.7.2
25
45
  - @backstage/cli-common@0.1.15
26
- - @backstage/config@0.0.0-nightly-20241216023741
46
+ - @backstage/config@1.3.1
27
47
  - @backstage/eslint-plugin@0.1.10
28
48
  - @backstage/types@1.2.0
29
49
 
@@ -32,19 +32,22 @@ var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
32
32
 
33
33
  async function buildFrontend(options) {
34
34
  const { targetDir, writeStats, configPaths, rspack } = options;
35
- const { name } = await fs__default.default.readJson(path.resolve(targetDir, "package.json"));
35
+ const packageJson = await fs__default.default.readJson(
36
+ path.resolve(targetDir, "package.json")
37
+ );
36
38
  await bundle.buildBundle({
37
39
  targetDir,
38
40
  entry: "src/index",
39
41
  parallelism: parallel.getEnvironmentParallelism(),
40
42
  statsJsonEnabled: writeStats,
41
- moduleFederation: moduleFederation.getModuleFederationOptions(
42
- name,
43
+ moduleFederation: await moduleFederation.getModuleFederationOptions(
44
+ packageJson,
45
+ path.resolve(targetDir),
43
46
  options.isModuleFederationRemote
44
47
  ),
45
48
  ...await config.loadCliConfig({
46
49
  args: configPaths,
47
- fromPackage: name
50
+ fromPackage: packageJson.name
48
51
  }),
49
52
  rspack
50
53
  });
@@ -16,6 +16,8 @@ var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
16
16
 
17
17
  async function command(opts, cmd) {
18
18
  let packages = await cliNode.PackageGraph.listTargetPackages();
19
+ const shouldUseRspack = Boolean(process.env.EXPERIMENTAL_RSPACK);
20
+ const rspack = shouldUseRspack ? require("@rspack/core") : void 0;
19
21
  if (opts.since) {
20
22
  const graph = cliNode.PackageGraph.fromPackages(packages);
21
23
  const changedPackages = await graph.listChangedPackages({
@@ -83,7 +85,8 @@ async function command(opts, cmd) {
83
85
  await buildFrontend.buildFrontend({
84
86
  targetDir: pkg.dir,
85
87
  configPaths: buildOptions.config ?? [],
86
- writeStats: Boolean(buildOptions.stats)
88
+ writeStats: Boolean(buildOptions.stats),
89
+ rspack
87
90
  });
88
91
  }
89
92
  });
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var fs = require('fs-extra');
4
+ var path = require('path');
4
5
  require('yn');
5
- require('path');
6
6
  require('webpack');
7
7
  require('react-dev-utils/FileSizeReporter');
8
8
  require('react-dev-utils/formatWebpackMessages');
@@ -25,7 +25,9 @@ var moduleFederation = require('../../lib/bundler/moduleFederation.cjs.js');
25
25
  var server = require('../../lib/bundler/server.cjs.js');
26
26
 
27
27
  async function startFrontend(options) {
28
- const { name } = await fs.readJson(paths.paths.resolveTarget("package.json"));
28
+ const packageJson = await fs.readJson(
29
+ paths.paths.resolveTarget("package.json")
30
+ );
29
31
  const waitForExit = await server.serveBundle({
30
32
  entry: options.entry,
31
33
  checksEnabled: options.checksEnabled,
@@ -33,8 +35,9 @@ async function startFrontend(options) {
33
35
  verifyVersions: options.verifyVersions,
34
36
  skipOpenBrowser: options.skipOpenBrowser,
35
37
  linkedWorkspace: options.linkedWorkspace,
36
- moduleFederation: moduleFederation.getModuleFederationOptions(
37
- name,
38
+ moduleFederation: await moduleFederation.getModuleFederationOptions(
39
+ packageJson,
40
+ path.resolve(paths.paths.targetDir),
38
41
  options.isModuleFederationRemote
39
42
  )
40
43
  });
@@ -91,6 +91,11 @@ async function buildBundle(options) {
91
91
  { spaces: 2 }
92
92
  );
93
93
  }
94
+ if (rspack) {
95
+ console.log(
96
+ chalk__default.default.yellow(`\u26A0\uFE0F WARNING: Using experimental RSPack bundler.`)
97
+ );
98
+ }
94
99
  const { stats } = await build(configs, isCi, rspack);
95
100
  if (!stats) {
96
101
  throw new Error("No stats returned");
@@ -170,13 +170,19 @@ async function createConfig(paths, options) {
170
170
  if (options.moduleFederation) {
171
171
  const isRemote = options.moduleFederation?.mode === "remote";
172
172
  const AdaptedModuleFederationPlugin = rspack ? rspack.container.ModuleFederationPlugin : webpack.ModuleFederationPlugin;
173
+ const exposes = options.moduleFederation?.exposes ? Object.fromEntries(
174
+ Object.entries(options.moduleFederation?.exposes).map(([k, v]) => [
175
+ k,
176
+ path.resolve(paths.targetPath, v)
177
+ ])
178
+ ) : {
179
+ ".": paths.targetEntry
180
+ };
173
181
  plugins.push(
174
182
  new AdaptedModuleFederationPlugin({
175
183
  ...isRemote && {
176
184
  filename: "remoteEntry.js",
177
- exposes: {
178
- ".": paths.targetEntry
179
- }
185
+ exposes
180
186
  },
181
187
  name: options.moduleFederation.name,
182
188
  runtime: false,
@@ -1,12 +1,14 @@
1
1
  'use strict';
2
2
 
3
3
  var chalk = require('chalk');
4
+ var entryPoints = require('../entryPoints.cjs.js');
5
+ var typeDistProject = require('../typeDistProject.cjs.js');
4
6
 
5
7
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
6
8
 
7
9
  var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
8
10
 
9
- function getModuleFederationOptions(name, isModuleFederationRemote) {
11
+ async function getModuleFederationOptions(packageJson, packageDir, isModuleFederationRemote) {
10
12
  if (!isModuleFederationRemote && !process.env.EXPERIMENTAL_MODULE_FEDERATION) {
11
13
  return void 0;
12
14
  }
@@ -15,12 +17,34 @@ function getModuleFederationOptions(name, isModuleFederationRemote) {
15
17
  `\u26A0\uFE0F WARNING: Module federation is experimental and will receive immediate breaking changes in the future.`
16
18
  )
17
19
  );
20
+ let exposes;
21
+ const packageRole = packageJson.backstage?.role;
22
+ if (isModuleFederationRemote && packageJson.exports && packageRole) {
23
+ const project = await typeDistProject.createTypeDistProject();
24
+ exposes = Object.fromEntries(
25
+ entryPoints.readEntryPoints(packageJson).filter((ep) => {
26
+ if (ep.mount === "./package.json") {
27
+ return false;
28
+ }
29
+ if (ep.mount === ".") {
30
+ return true;
31
+ }
32
+ return typeDistProject.getEntryPointDefaultFeatureType(
33
+ packageRole,
34
+ packageDir,
35
+ project,
36
+ ep.path
37
+ ) !== null;
38
+ }).map((ep) => [ep.mount, ep.path])
39
+ );
40
+ }
18
41
  return {
19
42
  mode: isModuleFederationRemote ? "remote" : "host",
20
43
  // The default output mode requires the name to be a usable as a code
21
44
  // symbol, there might be better options here but for now we need to
22
45
  // sanitize the name.
23
- name: name.replaceAll("@", "").replaceAll("/", "__").replaceAll("-", "_")
46
+ name: packageJson.name.replaceAll("@", "").replaceAll("/", "__").replaceAll("-", "_"),
47
+ exposes
24
48
  };
25
49
  }
26
50
 
@@ -188,6 +188,11 @@ DEPRECATION WARNING: React Router Beta is deprecated and support for it will be
188
188
  } else {
189
189
  const bundler = rspack ?? webpack__default.default;
190
190
  const DevServer = rspack ? require("@rspack/dev-server").RspackDevServer : WebpackDevServer__default.default;
191
+ if (rspack) {
192
+ console.log(
193
+ chalk__default.default.yellow(`\u26A0\uFE0F WARNING: Using experimental RSPack dev server.`)
194
+ );
195
+ }
191
196
  const publicPaths = await paths.resolveOptionalBundlingPaths({
192
197
  entry: "src/index-public-experimental",
193
198
  dist: "dist/public"
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "0.0.0-nightly-20241221023113";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "1.1.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "0.0.0-nightly-20241221023113";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "1.9.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "0.0.0-nightly-20241221023113";
4
4
  var dependencies = {
5
5
  "@backstage/catalog-model": "workspace:*",
6
6
  "@backstage/cli-common": "workspace:*",
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "1.3.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "1.15.3";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "0.16.2";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "1.10.2";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "1.1.5";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "1.2.6";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "1.7.3";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "0.6.3";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "0.24.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "0.2.3";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "1.15.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "0.0.0-nightly-20241221023113";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.0.0-nightly-20241216023741";
3
+ var version = "0.0.0-nightly-20241221023113";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/cli",
3
- "version": "0.0.0-nightly-20241216023741",
3
+ "version": "0.0.0-nightly-20241221023113",
4
4
  "description": "CLI for developing Backstage plugins and apps",
5
5
  "backstage": {
6
6
  "role": "cli"
@@ -42,15 +42,15 @@
42
42
  "watch": "./src"
43
43
  },
44
44
  "dependencies": {
45
- "@backstage/catalog-model": "0.0.0-nightly-20241216023741",
45
+ "@backstage/catalog-model": "1.7.2",
46
46
  "@backstage/cli-common": "0.1.15",
47
- "@backstage/cli-node": "0.0.0-nightly-20241216023741",
48
- "@backstage/config": "0.0.0-nightly-20241216023741",
49
- "@backstage/config-loader": "0.0.0-nightly-20241216023741",
50
- "@backstage/errors": "0.0.0-nightly-20241216023741",
47
+ "@backstage/cli-node": "0.2.11",
48
+ "@backstage/config": "1.3.1",
49
+ "@backstage/config-loader": "0.0.0-nightly-20241221023113",
50
+ "@backstage/errors": "1.2.6",
51
51
  "@backstage/eslint-plugin": "0.1.10",
52
- "@backstage/integration": "0.0.0-nightly-20241216023741",
53
- "@backstage/release-manifests": "0.0.0-nightly-20241216023741",
52
+ "@backstage/integration": "1.16.0",
53
+ "@backstage/release-manifests": "0.0.12",
54
54
  "@backstage/types": "1.2.0",
55
55
  "@manypkg/get-packages": "^1.1.3",
56
56
  "@module-federation/enhanced": "^0.8.0",
@@ -157,22 +157,22 @@
157
157
  "zod": "^3.22.4"
158
158
  },
159
159
  "devDependencies": {
160
- "@backstage/backend-plugin-api": "0.0.0-nightly-20241216023741",
161
- "@backstage/backend-test-utils": "0.0.0-nightly-20241216023741",
162
- "@backstage/catalog-client": "0.0.0-nightly-20241216023741",
163
- "@backstage/config": "0.0.0-nightly-20241216023741",
164
- "@backstage/core-app-api": "0.0.0-nightly-20241216023741",
165
- "@backstage/core-components": "0.0.0-nightly-20241216023741",
166
- "@backstage/core-plugin-api": "0.0.0-nightly-20241216023741",
167
- "@backstage/dev-utils": "0.0.0-nightly-20241216023741",
168
- "@backstage/errors": "0.0.0-nightly-20241216023741",
169
- "@backstage/plugin-auth-backend": "0.0.0-nightly-20241216023741",
170
- "@backstage/plugin-auth-backend-module-guest-provider": "0.0.0-nightly-20241216023741",
171
- "@backstage/plugin-catalog-node": "0.0.0-nightly-20241216023741",
172
- "@backstage/plugin-scaffolder-node": "0.0.0-nightly-20241216023741",
173
- "@backstage/plugin-scaffolder-node-test-utils": "0.0.0-nightly-20241216023741",
174
- "@backstage/test-utils": "0.0.0-nightly-20241216023741",
175
- "@backstage/theme": "0.0.0-nightly-20241216023741",
160
+ "@backstage/backend-plugin-api": "1.1.0",
161
+ "@backstage/backend-test-utils": "0.0.0-nightly-20241221023113",
162
+ "@backstage/catalog-client": "1.9.0",
163
+ "@backstage/config": "1.3.1",
164
+ "@backstage/core-app-api": "1.15.3",
165
+ "@backstage/core-components": "0.16.2",
166
+ "@backstage/core-plugin-api": "1.10.2",
167
+ "@backstage/dev-utils": "1.1.5",
168
+ "@backstage/errors": "1.2.6",
169
+ "@backstage/plugin-auth-backend": "0.24.1",
170
+ "@backstage/plugin-auth-backend-module-guest-provider": "0.2.3",
171
+ "@backstage/plugin-catalog-node": "1.15.0",
172
+ "@backstage/plugin-scaffolder-node": "0.0.0-nightly-20241221023113",
173
+ "@backstage/plugin-scaffolder-node-test-utils": "0.0.0-nightly-20241221023113",
174
+ "@backstage/test-utils": "1.7.3",
175
+ "@backstage/theme": "0.6.3",
176
176
  "@rspack/core": "^1.0.10",
177
177
  "@rspack/dev-server": "^1.0.9",
178
178
  "@rspack/plugin-react-refresh": "^1.0.0",