@backstage/cli 0.28.1 → 0.29.0-next.1

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 (37) hide show
  1. package/CHANGELOG.md +67 -2
  2. package/config/jest.js +57 -29
  3. package/config/jestRejectNetworkRequests.js +59 -0
  4. package/config/nodeTransform.cjs +33 -0
  5. package/dist/commands/build/buildFrontend.cjs.js +8 -11
  6. package/dist/commands/buildWorkspace.cjs.js +1 -1
  7. package/dist/commands/index.cjs.js +9 -3
  8. package/dist/commands/repo/lint.cjs.js +15 -33
  9. package/dist/commands/repo/test.cjs.js +35 -33
  10. package/dist/commands/start/command.cjs.js +1 -0
  11. package/dist/commands/start/startBackend.cjs.js +23 -92
  12. package/dist/commands/start/startFrontend.cjs.js +6 -8
  13. package/dist/commands/versions/bump.cjs.js +9 -3
  14. package/dist/lib/bundler/config.cjs.js +20 -138
  15. package/dist/lib/bundler/linkWorkspaces.cjs.js +31 -0
  16. package/dist/lib/cache/SuccessCache.cjs.js +79 -0
  17. package/dist/lib/packager/createDistWorkspace.cjs.js +3 -3
  18. package/dist/lib/{experimental/startBackendExperimental.cjs.js → runner/runBackend.cjs.js} +6 -5
  19. package/dist/packages/backend-defaults/package.json.cjs.js +1 -1
  20. package/dist/packages/backend-plugin-api/package.json.cjs.js +1 -1
  21. package/dist/packages/backend-test-utils/package.json.cjs.js +1 -1
  22. package/dist/packages/catalog-client/package.json.cjs.js +1 -1
  23. package/dist/packages/cli/package.json.cjs.js +4 -6
  24. package/dist/packages/core-components/package.json.cjs.js +1 -1
  25. package/dist/packages/dev-utils/package.json.cjs.js +1 -1
  26. package/dist/packages/test-utils/package.json.cjs.js +1 -1
  27. package/dist/packages/theme/package.json.cjs.js +1 -1
  28. package/dist/plugins/auth-backend/package.json.cjs.js +1 -1
  29. package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +1 -1
  30. package/dist/plugins/catalog-node/package.json.cjs.js +1 -1
  31. package/dist/plugins/scaffolder-node/package.json.cjs.js +1 -1
  32. package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +1 -1
  33. package/package.json +30 -32
  34. package/dist/lib/bundler/LinkedPackageResolvePlugin.cjs.js +0 -47
  35. package/dist/lib/bundler/backend.cjs.js +0 -36
  36. /package/dist/lib/{experimental → ipc}/IpcServer.cjs.js +0 -0
  37. /package/dist/lib/{experimental → ipc}/ServerDataStore.cjs.js +0 -0
@@ -0,0 +1,79 @@
1
+ 'use strict';
2
+
3
+ var fs = require('fs-extra');
4
+ var node_path = require('node:path');
5
+ var paths = require('../paths.cjs.js');
6
+
7
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
8
+
9
+ var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
10
+
11
+ const DEFAULT_CACHE_BASE_PATH = "node_modules/.cache/backstage-cli";
12
+ const CACHE_MAX_AGE_MS = 7 * 24 * 36e5;
13
+ class SuccessCache {
14
+ #path;
15
+ /**
16
+ * Trim any occurrences of the workspace root path from the input string. This
17
+ * is useful to ensure stable hashes that don't vary based on the workspace
18
+ * location.
19
+ */
20
+ static trimPaths(input) {
21
+ return input.replaceAll(paths.paths.targetRoot, "");
22
+ }
23
+ constructor(name, basePath) {
24
+ this.#path = node_path.resolve(basePath ?? DEFAULT_CACHE_BASE_PATH, name);
25
+ }
26
+ async read() {
27
+ try {
28
+ const stat = await fs__default.default.stat(this.#path);
29
+ if (!stat.isDirectory()) {
30
+ await fs__default.default.rm(this.#path);
31
+ return /* @__PURE__ */ new Set();
32
+ }
33
+ } catch (error) {
34
+ if (error.code === "ENOENT") {
35
+ return /* @__PURE__ */ new Set();
36
+ }
37
+ throw error;
38
+ }
39
+ const items = await fs__default.default.readdir(this.#path);
40
+ const returned = /* @__PURE__ */ new Set();
41
+ const removed = /* @__PURE__ */ new Set();
42
+ const now = Date.now();
43
+ for (const item of items) {
44
+ const split = item.split("_");
45
+ if (split.length !== 2) {
46
+ removed.add(item);
47
+ continue;
48
+ }
49
+ const createdAt = parseInt(split[0], 10);
50
+ if (Number.isNaN(createdAt) || now - createdAt > CACHE_MAX_AGE_MS) {
51
+ removed.add(item);
52
+ } else {
53
+ returned.add(split[1]);
54
+ }
55
+ }
56
+ for (const item of removed) {
57
+ await fs__default.default.unlink(node_path.resolve(this.#path, item));
58
+ }
59
+ return returned;
60
+ }
61
+ async write(newEntries) {
62
+ const now = Date.now();
63
+ await fs__default.default.ensureDir(this.#path);
64
+ const existingItems = await fs__default.default.readdir(this.#path);
65
+ const empty = Buffer.alloc(0);
66
+ for (const key of newEntries) {
67
+ const trimmedItems = existingItems.filter(
68
+ (item) => item.endsWith(`_${key}`)
69
+ );
70
+ for (const trimmedItem of trimmedItems) {
71
+ await fs__default.default.unlink(node_path.resolve(this.#path, trimmedItem));
72
+ }
73
+ await fs__default.default.writeFile(node_path.resolve(this.#path, `${now}_${key}`), empty);
74
+ }
75
+ }
76
+ }
77
+
78
+ exports.SuccessCache = SuccessCache;
79
+ //# sourceMappingURL=SuccessCache.cjs.js.map
@@ -118,7 +118,7 @@ async function createDistWorkspace(packageNames, options = {}) {
118
118
  await moveToDistWorkspace(
119
119
  targetDir,
120
120
  targets,
121
- Boolean(options.alwaysYarnPack),
121
+ Boolean(options.alwaysPack),
122
122
  Boolean(options.enableFeatureDetection)
123
123
  );
124
124
  const files = options.files ?? ["yarn.lock", "package.json"];
@@ -150,10 +150,10 @@ const FAST_PACK_SCRIPTS = [
150
150
  "backstage-cli prepack",
151
151
  "backstage-cli package prepack"
152
152
  ];
153
- async function moveToDistWorkspace(workspaceDir, localPackages, alwaysYarnPack, enableFeatureDetection) {
153
+ async function moveToDistWorkspace(workspaceDir, localPackages, alwaysPack, enableFeatureDetection) {
154
154
  const [fastPackPackages, slowPackPackages] = partition__default.default(
155
155
  localPackages,
156
- (pkg) => !alwaysYarnPack && FAST_PACK_SCRIPTS.includes(pkg.packageJson.scripts?.prepack)
156
+ (pkg) => !alwaysPack && FAST_PACK_SCRIPTS.includes(pkg.packageJson.scripts?.prepack)
157
157
  );
158
158
  const featureDetectionProject = fastPackPackages.length > 0 && enableFeatureDetection ? await typeDistProject.createTypeDistProject() : void 0;
159
159
  await Promise.all(
@@ -2,8 +2,8 @@
2
2
 
3
3
  var chokidar = require('chokidar');
4
4
  var ctrlcWindows = require('ctrlc-windows');
5
- var IpcServer = require('./IpcServer.cjs.js');
6
- var ServerDataStore = require('./ServerDataStore.cjs.js');
5
+ var IpcServer = require('../ipc/IpcServer.cjs.js');
6
+ var ServerDataStore = require('../ipc/ServerDataStore.cjs.js');
7
7
  var debounce = require('lodash/debounce');
8
8
  var url = require('url');
9
9
  var path = require('path');
@@ -21,7 +21,7 @@ const loaderArgs = [
21
21
  require.resolve("@backstage/cli/config/nodeTransform.cjs")
22
22
  // TODO: Support modules, although there's currently no way to load them since import() is transpiled tp require()
23
23
  ];
24
- async function startBackendExperimental(options) {
24
+ async function runBackend(options) {
25
25
  const envEnv = process.env;
26
26
  if (!envEnv.NODE_ENV) {
27
27
  envEnv.NODE_ENV = "development";
@@ -77,6 +77,7 @@ async function startBackendExperimental(options) {
77
77
  stdio: ["ignore", "inherit", "inherit", "ipc"],
78
78
  env: {
79
79
  ...process.env,
80
+ BACKSTAGE_CLI_LINKED_WORKSPACE: options.linkedWorkspace,
80
81
  BACKSTAGE_CLI_CHANNEL: "1",
81
82
  ESBK_TSCONFIG_PATH: paths.paths.resolveTargetRoot("tsconfig.json")
82
83
  },
@@ -124,5 +125,5 @@ async function startBackendExperimental(options) {
124
125
  return () => exitPromise;
125
126
  }
126
127
 
127
- exports.startBackendExperimental = startBackendExperimental;
128
- //# sourceMappingURL=startBackendExperimental.cjs.js.map
128
+ exports.runBackend = runBackend;
129
+ //# sourceMappingURL=runBackend.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.5.2";
3
+ var version = "0.5.3-next.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 = "1.0.1";
3
+ var version = "1.0.2-next.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 = "1.0.2";
3
+ var version = "1.0.3-next.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 = "1.7.1";
3
+ var version = "1.8.0-next.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.28.1";
3
+ var version = "0.29.0-next.1";
4
4
  var dependencies = {
5
5
  "@backstage/catalog-model": "workspace:^",
6
6
  "@backstage/cli-common": "workspace:^",
@@ -101,7 +101,6 @@ var dependencies = {
101
101
  "rollup-plugin-esbuild": "^6.1.1",
102
102
  "rollup-plugin-postcss": "^4.0.0",
103
103
  "rollup-pluginutils": "^2.8.2",
104
- "run-script-webpack-plugin": "^0.2.0",
105
104
  semver: "^7.5.3",
106
105
  "style-loader": "^3.3.1",
107
106
  sucrase: "^3.20.2",
@@ -110,9 +109,8 @@ var dependencies = {
110
109
  "terser-webpack-plugin": "^5.1.3",
111
110
  "ts-morph": "^23.0.0",
112
111
  util: "^0.12.3",
113
- webpack: "^5.70.0",
112
+ webpack: "^5.94.0",
114
113
  "webpack-dev-server": "^5.0.0",
115
- "webpack-node-externals": "^3.0.0",
116
114
  yaml: "^2.0.0",
117
115
  yargs: "^16.2.0",
118
116
  "yml-loader": "^2.1.0",
@@ -146,7 +144,7 @@ var devDependencies = {
146
144
  "@types/fs-extra": "^11.0.0",
147
145
  "@types/http-proxy": "^1.17.4",
148
146
  "@types/inquirer": "^8.1.3",
149
- "@types/node": "^18.17.8",
147
+ "@types/node": "^20.16.0",
150
148
  "@types/npm-packlist": "^3.0.0",
151
149
  "@types/recursive-readdir": "^2.2.0",
152
150
  "@types/rollup-plugin-peer-deps-external": "^2.2.0",
@@ -157,7 +155,7 @@ var devDependencies = {
157
155
  "@types/webpack-sources": "^3.2.3",
158
156
  "@types/yarnpkg__lockfile": "^1.1.4",
159
157
  "@vitejs/plugin-react": "^4.3.1",
160
- del: "^7.0.0",
158
+ del: "^8.0.0",
161
159
  msw: "^1.0.0",
162
160
  nodemon: "^3.0.1",
163
161
  vite: "^5.0.0",
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.15.1";
3
+ var version = "0.16.0-next.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 = "1.1.2";
3
+ var version = "1.1.3-next.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 = "1.7.0";
3
+ var version = "1.7.1-next.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.6.0";
3
+ var version = "0.6.1-next.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.23.1";
3
+ var version = "0.24.0-next.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.2.1";
3
+ var version = "0.2.2-next.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 = "1.13.1";
3
+ var version = "1.14.0-next.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.5.0";
3
+ var version = "0.5.1-next.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.1.14";
3
+ var version = "0.1.15-next.1";
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.28.1",
3
+ "version": "0.29.0-next.1",
4
4
  "description": "CLI for developing Backstage plugins and apps",
5
5
  "backstage": {
6
6
  "role": "cli"
@@ -42,16 +42,16 @@
42
42
  "watch": "./src"
43
43
  },
44
44
  "dependencies": {
45
- "@backstage/catalog-model": "^1.7.0",
46
- "@backstage/cli-common": "^0.1.14",
47
- "@backstage/cli-node": "^0.2.9",
48
- "@backstage/config": "^1.2.0",
49
- "@backstage/config-loader": "^1.9.1",
50
- "@backstage/errors": "^1.2.4",
51
- "@backstage/eslint-plugin": "^0.1.10",
52
- "@backstage/integration": "^1.15.1",
53
- "@backstage/release-manifests": "^0.0.11",
54
- "@backstage/types": "^1.1.1",
45
+ "@backstage/catalog-model": "1.7.0",
46
+ "@backstage/cli-common": "0.1.15-next.0",
47
+ "@backstage/cli-node": "0.2.10-next.0",
48
+ "@backstage/config": "1.2.0",
49
+ "@backstage/config-loader": "1.9.2-next.0",
50
+ "@backstage/errors": "1.2.4",
51
+ "@backstage/eslint-plugin": "0.1.10",
52
+ "@backstage/integration": "1.15.1",
53
+ "@backstage/release-manifests": "0.0.11",
54
+ "@backstage/types": "1.1.1",
55
55
  "@manypkg/get-packages": "^1.1.3",
56
56
  "@module-federation/enhanced": "^0.6.0",
57
57
  "@octokit/graphql": "^5.0.0",
@@ -141,7 +141,6 @@
141
141
  "rollup-plugin-esbuild": "^6.1.1",
142
142
  "rollup-plugin-postcss": "^4.0.0",
143
143
  "rollup-pluginutils": "^2.8.2",
144
- "run-script-webpack-plugin": "^0.2.0",
145
144
  "semver": "^7.5.3",
146
145
  "style-loader": "^3.3.1",
147
146
  "sucrase": "^3.20.2",
@@ -150,9 +149,8 @@
150
149
  "terser-webpack-plugin": "^5.1.3",
151
150
  "ts-morph": "^23.0.0",
152
151
  "util": "^0.12.3",
153
- "webpack": "^5.70.0",
152
+ "webpack": "^5.94.0",
154
153
  "webpack-dev-server": "^5.0.0",
155
- "webpack-node-externals": "^3.0.0",
156
154
  "yaml": "^2.0.0",
157
155
  "yargs": "^16.2.0",
158
156
  "yml-loader": "^2.1.0",
@@ -161,22 +159,22 @@
161
159
  },
162
160
  "devDependencies": {
163
161
  "@backstage/backend-common": "^0.25.0",
164
- "@backstage/backend-plugin-api": "^1.0.1",
165
- "@backstage/backend-test-utils": "^1.0.2",
166
- "@backstage/catalog-client": "^1.7.1",
167
- "@backstage/config": "^1.2.0",
168
- "@backstage/core-app-api": "^1.15.1",
169
- "@backstage/core-components": "^0.15.1",
170
- "@backstage/core-plugin-api": "^1.10.0",
171
- "@backstage/dev-utils": "^1.1.2",
172
- "@backstage/errors": "^1.2.4",
173
- "@backstage/plugin-auth-backend": "^0.23.1",
174
- "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.1",
175
- "@backstage/plugin-catalog-node": "^1.13.1",
176
- "@backstage/plugin-scaffolder-node": "^0.5.0",
177
- "@backstage/plugin-scaffolder-node-test-utils": "^0.1.14",
178
- "@backstage/test-utils": "^1.7.0",
179
- "@backstage/theme": "^0.6.0",
162
+ "@backstage/backend-plugin-api": "1.0.2-next.1",
163
+ "@backstage/backend-test-utils": "1.0.3-next.1",
164
+ "@backstage/catalog-client": "1.8.0-next.0",
165
+ "@backstage/config": "1.2.0",
166
+ "@backstage/core-app-api": "1.15.1",
167
+ "@backstage/core-components": "0.16.0-next.1",
168
+ "@backstage/core-plugin-api": "1.10.0",
169
+ "@backstage/dev-utils": "1.1.3-next.1",
170
+ "@backstage/errors": "1.2.4",
171
+ "@backstage/plugin-auth-backend": "0.24.0-next.1",
172
+ "@backstage/plugin-auth-backend-module-guest-provider": "0.2.2-next.1",
173
+ "@backstage/plugin-catalog-node": "1.14.0-next.1",
174
+ "@backstage/plugin-scaffolder-node": "0.5.1-next.1",
175
+ "@backstage/plugin-scaffolder-node-test-utils": "0.1.15-next.1",
176
+ "@backstage/test-utils": "1.7.1-next.0",
177
+ "@backstage/theme": "0.6.1-next.0",
180
178
  "@rspack/core": "^1.0.10",
181
179
  "@rspack/dev-server": "^1.0.9",
182
180
  "@rspack/plugin-react-refresh": "^1.0.0",
@@ -186,7 +184,7 @@
186
184
  "@types/fs-extra": "^11.0.0",
187
185
  "@types/http-proxy": "^1.17.4",
188
186
  "@types/inquirer": "^8.1.3",
189
- "@types/node": "^18.17.8",
187
+ "@types/node": "^20.16.0",
190
188
  "@types/npm-packlist": "^3.0.0",
191
189
  "@types/recursive-readdir": "^2.2.0",
192
190
  "@types/rollup-plugin-peer-deps-external": "^2.2.0",
@@ -197,7 +195,7 @@
197
195
  "@types/webpack-sources": "^3.2.3",
198
196
  "@types/yarnpkg__lockfile": "^1.1.4",
199
197
  "@vitejs/plugin-react": "^4.3.1",
200
- "del": "^7.0.0",
198
+ "del": "^8.0.0",
201
199
  "msw": "^1.0.0",
202
200
  "nodemon": "^3.0.1",
203
201
  "vite": "^5.0.0",
@@ -1,47 +0,0 @@
1
- 'use strict';
2
-
3
- var path = require('path');
4
- var cliCommon = require('@backstage/cli-common');
5
-
6
- class LinkedPackageResolvePlugin {
7
- constructor(targetModules, packages) {
8
- this.targetModules = targetModules;
9
- this.packages = packages;
10
- }
11
- apply(resolver) {
12
- resolver.hooks.resolve.tapAsync(
13
- "LinkedPackageResolvePlugin",
14
- (data, context, callback) => {
15
- const pkg = this.packages.find(
16
- (pkge) => data.path && cliCommon.isChildPath(pkge.dir, data.path)
17
- );
18
- if (!pkg) {
19
- callback();
20
- return;
21
- }
22
- const modulesLocation = path.resolve(
23
- this.targetModules,
24
- pkg.packageJson.name
25
- );
26
- const newContext = data.context?.issuer ? {
27
- ...data.context,
28
- issuer: data.context.issuer.replace(pkg.dir, modulesLocation)
29
- } : data.context;
30
- resolver.doResolve(
31
- resolver.hooks.resolve,
32
- {
33
- ...data,
34
- context: newContext,
35
- path: data.path && data.path.replace(pkg.dir, modulesLocation)
36
- },
37
- `resolve ${data.request} in ${modulesLocation}`,
38
- context,
39
- callback
40
- );
41
- }
42
- );
43
- }
44
- }
45
-
46
- exports.LinkedPackageResolvePlugin = LinkedPackageResolvePlugin;
47
- //# sourceMappingURL=LinkedPackageResolvePlugin.cjs.js.map
@@ -1,36 +0,0 @@
1
- 'use strict';
2
-
3
- var webpack = require('webpack');
4
- var config = require('./config.cjs.js');
5
- var paths = require('./paths.cjs.js');
6
-
7
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
8
-
9
- var webpack__default = /*#__PURE__*/_interopDefaultCompat(webpack);
10
-
11
- async function serveBackend(options) {
12
- const paths$1 = paths.resolveBundlingPaths(options);
13
- const config$1 = await config.createBackendConfig(paths$1, {
14
- ...options,
15
- isDev: true
16
- });
17
- process.env.NODE_ENV = "development";
18
- const compiler = webpack__default.default(config$1, (err) => {
19
- if (err) {
20
- console.error(err);
21
- } else console.log("Build succeeded");
22
- });
23
- const waitForExit = async () => {
24
- for (const signal of ["SIGINT", "SIGTERM"]) {
25
- process.on(signal, () => {
26
- compiler.close(() => process.exit());
27
- });
28
- }
29
- return new Promise(() => {
30
- });
31
- };
32
- return waitForExit;
33
- }
34
-
35
- exports.serveBackend = serveBackend;
36
- //# sourceMappingURL=backend.cjs.js.map
File without changes