@backstage/cli 0.34.6-next.0 → 0.35.0-next.2

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 (40) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/config/nodeTransform.cjs +1 -1
  3. package/config/nodeTransformHooks.mjs +1 -1
  4. package/config/tsconfig.json +4 -4
  5. package/dist/lib/errors.cjs.js +0 -10
  6. package/dist/lib/versioning/packages.cjs.js +3 -7
  7. package/dist/lib/versioning/yarn.cjs.js +2 -8
  8. package/dist/modules/build/commands/package/start/startFrontend.cjs.js +1 -1
  9. package/dist/modules/build/lib/buildFrontend.cjs.js +1 -1
  10. package/dist/modules/build/lib/builder/config.cjs.js +1 -1
  11. package/dist/modules/build/lib/bundler/config.cjs.js +3 -3
  12. package/dist/modules/build/lib/bundler/optimization.cjs.js +2 -2
  13. package/dist/modules/build/lib/bundler/transforms.cjs.js +2 -2
  14. package/dist/modules/build/lib/packager/createDistWorkspace.cjs.js +7 -7
  15. package/dist/modules/config/index.cjs.js +4 -4
  16. package/dist/modules/info/commands/info.cjs.js +2 -3
  17. package/dist/modules/maintenance/commands/repo/clean.cjs.js +4 -9
  18. package/dist/modules/migrate/commands/packageLintConfigs.cjs.js +2 -2
  19. package/dist/modules/migrate/commands/versions/bump.cjs.js +1 -2
  20. package/dist/modules/migrate/lib/utils.cjs.js +5 -5
  21. package/dist/modules/new/lib/execution/PortableTemplater.cjs.js +1 -2
  22. package/dist/modules/new/lib/execution/executePortableTemplate.cjs.js +20 -8
  23. package/dist/modules/new/lib/tasks.cjs.js +0 -26
  24. package/dist/modules/test/commands/package/test.cjs.js +3 -3
  25. package/dist/modules/test/commands/repo/test.cjs.js +5 -6
  26. package/dist/packages/backend-defaults/package.json.cjs.js +1 -1
  27. package/dist/packages/backend-plugin-api/package.json.cjs.js +1 -1
  28. package/dist/packages/backend-test-utils/package.json.cjs.js +1 -1
  29. package/dist/packages/cli/package.json.cjs.js +6 -6
  30. package/dist/packages/core-app-api/package.json.cjs.js +1 -1
  31. package/dist/packages/core-components/package.json.cjs.js +1 -1
  32. package/dist/packages/dev-utils/package.json.cjs.js +1 -1
  33. package/dist/packages/frontend-plugin-api/package.json.cjs.js +1 -1
  34. package/dist/plugins/auth-backend/package.json.cjs.js +1 -1
  35. package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +1 -1
  36. package/dist/plugins/catalog-node/package.json.cjs.js +1 -1
  37. package/dist/plugins/scaffolder-node/package.json.cjs.js +1 -1
  38. package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +1 -1
  39. package/package.json +22 -22
  40. package/dist/lib/run.cjs.js +0 -82
package/CHANGELOG.md CHANGED
@@ -1,5 +1,47 @@
1
1
  # @backstage/cli
2
2
 
3
+ ## 0.35.0-next.2
4
+
5
+ ### Minor Changes
6
+
7
+ - f8dff94: Switched the default module resolution to `bundler` and the `module` setting to `ES2020`.
8
+
9
+ You may need to bump some dependencies as part of this change and fix imports in code. The most common source of this is that type checking will now consider the `exports` field in `package.json` when resolving imports. This in turn can break older versions of packages that had incompatible `exports` fields. Generally these issues will have already been fixed in the upstream packages.
10
+
11
+ You might be tempted to use `--skipLibCheck` to hide issues due to this change, but it will weaken the type safety of your project. If you run into a large number of issues and want to keep the old behavior, you can reset the `moduleResolution` and `module` settings your own `tsconfig.json` file to `node` and `ESNext` respectively. But keep in mind that the `node` option will be removed in future versions of TypeScript.
12
+
13
+ A future version of Backstage will make these new settings mandatory, as we move to rely on the `exports` field for type resolution in packages, rather than the `typesVersions` field.
14
+
15
+ ### Patch Changes
16
+
17
+ - de96a60: chore(deps): bump `express` from 4.21.2 to 4.22.0
18
+ - 1226647: Updated dependency `esbuild` to `^0.27.0`.
19
+ - f89a074: Updated dependency `@pmmmwh/react-refresh-webpack-plugin` to `^0.6.0`.
20
+ - 2b81751: Updated dependency `webpack` to `~5.103.0`.
21
+ - fafd9e1: Fixed internal usage of `yargs`.
22
+ - 2bae83a: Switched ECMAScript version to ES2023.
23
+ - 2bae83a: Bumped dev dependencies `@types/node`
24
+ - Updated dependencies
25
+ - @backstage/integration@1.18.3-next.1
26
+ - @backstage/config-loader@1.10.7-next.1
27
+ - @backstage/cli-common@0.1.16-next.2
28
+ - @backstage/catalog-model@1.7.6
29
+ - @backstage/cli-node@0.2.16-next.1
30
+ - @backstage/config@1.3.6
31
+ - @backstage/errors@1.2.7
32
+ - @backstage/eslint-plugin@0.2.0
33
+ - @backstage/release-manifests@0.0.13
34
+ - @backstage/types@1.2.2
35
+
36
+ ## 0.34.6-next.1
37
+
38
+ ### Patch Changes
39
+
40
+ - 7fbac5c: Updated to use new utilities from `@backstage/cli-common`.
41
+ - Updated dependencies
42
+ - @backstage/cli-node@0.2.16-next.1
43
+ - @backstage/cli-common@0.1.16-next.1
44
+
3
45
  ## 0.34.6-next.0
4
46
 
5
47
  ### Patch Changes
@@ -61,7 +61,7 @@ addHook(
61
61
  ignoreDynamic: true,
62
62
  },
63
63
  jsc: {
64
- target: 'es2022',
64
+ target: 'es2023',
65
65
  parser: {
66
66
  syntax: 'typescript',
67
67
  },
@@ -277,7 +277,7 @@ export async function load(url, context, nextLoad) {
277
277
  exportInteropAnnotation: true,
278
278
  },
279
279
  jsc: {
280
- target: 'es2022',
280
+ target: 'es2023',
281
281
  parser: {
282
282
  syntax: 'typescript',
283
283
  },
@@ -12,9 +12,9 @@
12
12
  "incremental": true,
13
13
  "isolatedModules": true,
14
14
  "jsx": "react",
15
- "lib": ["DOM", "DOM.Iterable", "ScriptHost", "ES2022"],
16
- "module": "ESNext",
17
- "moduleResolution": "node",
15
+ "lib": ["DOM", "DOM.Iterable", "ScriptHost", "ES2023"],
16
+ "module": "ES2020",
17
+ "moduleResolution": "bundler",
18
18
  "noEmit": false,
19
19
  "noFallthroughCasesInSwitch": true,
20
20
  "noImplicitAny": true,
@@ -33,7 +33,7 @@
33
33
  "strictNullChecks": true,
34
34
  "strictPropertyInitialization": true,
35
35
  "stripInternal": true,
36
- "target": "ES2022",
36
+ "target": "ES2023",
37
37
  "types": ["node", "jest", "webpack-env"],
38
38
  "useDefineForClassFields": true
39
39
  }
@@ -7,15 +7,6 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
7
7
 
8
8
  var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
9
9
 
10
- class ExitCodeError extends errors.CustomErrorBase {
11
- code;
12
- constructor(code, command) {
13
- super(
14
- command ? `Command '${command}' exited with code ${code}` : `Child exited with code ${code}`
15
- );
16
- this.code = code;
17
- }
18
- }
19
10
  function exit(message, code = 1) {
20
11
  process.stderr.write(`
21
12
  ${chalk__default.default.red(message)}
@@ -67,6 +58,5 @@ ${chalk__default.default.red(errors.stringifyError(error))}
67
58
  }
68
59
  }
69
60
 
70
- exports.ExitCodeError = ExitCodeError;
71
61
  exports.exitWithError = exitWithError;
72
62
  //# sourceMappingURL=errors.cjs.js.map
@@ -3,7 +3,7 @@
3
3
  var minimatch = require('minimatch');
4
4
  var getPackages = require('@manypkg/get-packages');
5
5
  var yarn = require('./yarn.cjs.js');
6
- var run = require('../run.cjs.js');
6
+ var cliCommon = require('@backstage/cli-common');
7
7
  var errors = require('@backstage/errors');
8
8
 
9
9
  const DEP_TYPES = [
@@ -16,11 +16,7 @@ async function fetchPackageInfo(name) {
16
16
  const yarnVersion = await yarn.detectYarnVersion();
17
17
  const cmd = yarnVersion === "classic" ? ["info"] : ["npm", "info"];
18
18
  try {
19
- const { stdout: output } = await run.execFile(
20
- "yarn",
21
- [...cmd, "--json", name],
22
- { shell: true }
23
- );
19
+ const output = await cliCommon.runOutput(["yarn", ...cmd, "--json", name]);
24
20
  if (!output) {
25
21
  throw new errors.NotFoundError(
26
22
  `No package information found for package ${name}`
@@ -38,7 +34,7 @@ async function fetchPackageInfo(name) {
38
34
  if (yarnVersion === "classic") {
39
35
  throw error;
40
36
  }
41
- if (error?.stdout.includes("Response Code: 404")) {
37
+ if (error instanceof Error && "stdout" in error && typeof error.stdout === "string" && error.stdout.includes("Response Code: 404")) {
42
38
  throw new errors.NotFoundError(
43
39
  `No package information found for package ${name}`
44
40
  );
@@ -1,10 +1,8 @@
1
1
  'use strict';
2
2
 
3
3
  var errors = require('@backstage/errors');
4
- var child_process = require('child_process');
5
- var util = require('util');
4
+ var cliCommon = require('@backstage/cli-common');
6
5
 
7
- const execFile = util.promisify(child_process.execFile);
8
6
  const versions = /* @__PURE__ */ new Map();
9
7
  function detectYarnVersion(dir) {
10
8
  const cwd = process.cwd();
@@ -13,16 +11,12 @@ function detectYarnVersion(dir) {
13
11
  }
14
12
  const promise = Promise.resolve().then(async () => {
15
13
  try {
16
- const { stdout } = await execFile("yarn", ["--version"], {
17
- shell: true,
14
+ const stdout = await cliCommon.runOutput(["yarn", "--version"], {
18
15
  cwd
19
16
  });
20
17
  return stdout.trim().startsWith("1.") ? "classic" : "berry";
21
18
  } catch (error) {
22
19
  errors.assertError(error);
23
- if ("stderr" in error) {
24
- process.stderr.write(error.stderr);
25
- }
26
20
  throw new errors.ForwardedError("Failed to determine yarn version", error);
27
21
  }
28
22
  });
@@ -13,7 +13,7 @@ require('react-dev-utils/ModuleScopePlugin');
13
13
  require('@module-federation/enhanced/rspack');
14
14
  var paths = require('../../../../../lib/paths.cjs.js');
15
15
  require('lodash/pickBy');
16
- require('../../../../../lib/run.cjs.js');
16
+ require('@backstage/cli-common');
17
17
  require('../../../../../lib/version.cjs.js');
18
18
  var hasReactDomClient = require('../../../lib/bundler/hasReactDomClient.cjs.js');
19
19
  require('@manypkg/get-packages');
@@ -16,7 +16,7 @@ require('html-webpack-plugin');
16
16
  require('react-dev-utils/ModuleScopePlugin');
17
17
  require('@module-federation/enhanced/rspack');
18
18
  require('lodash/pickBy');
19
- require('../../../lib/run.cjs.js');
19
+ require('@backstage/cli-common');
20
20
  require('../../../lib/version.cjs.js');
21
21
  require('yn');
22
22
  require('@manypkg/get-packages');
@@ -199,7 +199,7 @@ async function makeRollupConfigs(options) {
199
199
  json__default.default(),
200
200
  yaml__default.default(),
201
201
  esbuild__default.default({
202
- target: "ES2022",
202
+ target: "ES2023",
203
203
  minify: options.minify
204
204
  })
205
205
  ]
@@ -11,7 +11,7 @@ var paths = require('../../../../lib/paths.cjs.js');
11
11
  var fs = require('fs-extra');
12
12
  var optimization = require('./optimization.cjs.js');
13
13
  var pickBy = require('lodash/pickBy');
14
- var run = require('../../../../lib/run.cjs.js');
14
+ var cliCommon = require('@backstage/cli-common');
15
15
  var transforms = require('./transforms.cjs.js');
16
16
  var version = require('../../../../lib/version.cjs.js');
17
17
  var yn = require('yn');
@@ -48,12 +48,12 @@ async function readBuildInfo() {
48
48
  const timestamp = Date.now();
49
49
  let commit;
50
50
  try {
51
- commit = await run.runPlain("git", "rev-parse", "HEAD");
51
+ commit = await cliCommon.runOutput(["git", "rev-parse", "HEAD"]);
52
52
  } catch (error) {
53
53
  }
54
54
  let gitVersion;
55
55
  try {
56
- gitVersion = await run.runPlain("git", "describe", "--always");
56
+ gitVersion = await cliCommon.runOutput(["git", "describe", "--always"]);
57
57
  } catch (error) {
58
58
  }
59
59
  if (commit === void 0 || gitVersion === void 0) {
@@ -9,13 +9,13 @@ const optimization = (options) => {
9
9
  minimize: !isDev,
10
10
  minimizer: [
11
11
  new MinifyPlugin({
12
- target: "ES2022",
12
+ target: "ES2023",
13
13
  format: "iife",
14
14
  exclude: "remoteEntry.js"
15
15
  }),
16
16
  // Avoid iife wrapping of module federation remote entry as it breaks the variable assignment
17
17
  new MinifyPlugin({
18
- target: "ES2022",
18
+ target: "ES2023",
19
19
  format: void 0,
20
20
  include: "remoteEntry.js"
21
21
  }),
@@ -23,7 +23,7 @@ const transforms = (options) => {
23
23
  loader: webpack ? require.resolve("swc-loader") : "builtin:swc-loader",
24
24
  options: {
25
25
  jsc: {
26
- target: "es2022",
26
+ target: "es2023",
27
27
  externalHelpers: !isBackend,
28
28
  parser: {
29
29
  syntax: "typescript",
@@ -49,7 +49,7 @@ const transforms = (options) => {
49
49
  loader: webpack ? require.resolve("swc-loader") : "builtin:swc-loader",
50
50
  options: {
51
51
  jsc: {
52
- target: "es2022",
52
+ target: "es2023",
53
53
  externalHelpers: !isBackend,
54
54
  parser: {
55
55
  syntax: "ecmascript",
@@ -7,7 +7,7 @@ var os = require('os');
7
7
  var tar = require('tar');
8
8
  var partition = require('lodash/partition');
9
9
  var paths = require('../../../../lib/paths.cjs.js');
10
- var run = require('../../../../lib/run.cjs.js');
10
+ var cliCommon = require('@backstage/cli-common');
11
11
  var _package = require('../../../../packages/cli/package.json.cjs.js');
12
12
  var packager = require('../builder/packager.cjs.js');
13
13
  var types = require('../builder/types.cjs.js');
@@ -104,11 +104,11 @@ async function createDistWorkspace(packageNames, options = {}) {
104
104
  await parallel.runParallelWorkers({
105
105
  items: customBuild,
106
106
  worker: async ({ name, dir, args }) => {
107
- await run.run("yarn", ["run", "build", ...args || []], {
107
+ await cliCommon.run(["yarn", "run", "build", ...args || []], {
108
108
  cwd: dir,
109
- stdoutLogFunc: prefixLogFunc(`${name}: `, "stdout"),
110
- stderrLogFunc: prefixLogFunc(`${name}: `, "stderr")
111
- });
109
+ onStdout: prefixLogFunc(`${name}: `, "stdout"),
110
+ onStderr: prefixLogFunc(`${name}: `, "stderr")
111
+ }).waitForExit();
112
112
  }
113
113
  });
114
114
  }
@@ -169,9 +169,9 @@ async function moveToDistWorkspace(workspaceDir, localPackages, alwaysPack, enab
169
169
  async function pack(target, archive) {
170
170
  console.log(`Repacking ${target.name} into dist workspace`);
171
171
  const archivePath = path.resolve(workspaceDir, archive);
172
- await run.run("yarn", ["pack", "--filename", archivePath], {
172
+ await cliCommon.run(["yarn", "pack", "--filename", archivePath], {
173
173
  cwd: target.dir
174
- });
174
+ }).waitForExit();
175
175
  const outputDir = path.relative(paths.paths.targetRoot, target.dir);
176
176
  const absoluteOutputPath = path.resolve(workspaceDir, outputDir);
177
177
  await fs__default.default.ensureDir(absoluteOutputPath);
@@ -46,7 +46,7 @@ var index = factory.createCliPlugin({
46
46
  path: ["config:print"],
47
47
  description: "Print the app configuration for the current package",
48
48
  execute: async ({ args, info }) => {
49
- const argv = await yargs__default.default.options({
49
+ const argv = await yargs__default.default().options({
50
50
  package: { type: "string" },
51
51
  lax: { type: "boolean" },
52
52
  frontend: { type: "boolean" },
@@ -61,7 +61,7 @@ var index = factory.createCliPlugin({
61
61
  path: ["config:check"],
62
62
  description: "Validate that the given configuration loads and matches schema",
63
63
  execute: async ({ args }) => {
64
- const argv = await yargs__default.default.options({
64
+ const argv = await yargs__default.default().options({
65
65
  package: { type: "string" },
66
66
  lax: { type: "boolean" },
67
67
  frontend: { type: "boolean" },
@@ -80,7 +80,7 @@ var index = factory.createCliPlugin({
80
80
  path: ["config:schema"],
81
81
  description: "Print the JSON schema for the given configuration",
82
82
  execute: async ({ args }) => {
83
- const argv = await yargs__default.default.options({
83
+ const argv = await yargs__default.default().options({
84
84
  package: { type: "string" },
85
85
  format: { type: "string" },
86
86
  merge: { type: "boolean" },
@@ -93,7 +93,7 @@ var index = factory.createCliPlugin({
93
93
  path: ["config", "schema"],
94
94
  description: "Print the JSON schema for the given configuration",
95
95
  execute: async ({ args }) => {
96
- const argv = await yargs__default.default.options({
96
+ const argv = await yargs__default.default().options({
97
97
  package: { type: "string" },
98
98
  format: { type: "string" },
99
99
  merge: { type: "boolean" },
@@ -4,12 +4,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _package = require('../../../packages/cli/package.json.cjs.js');
6
6
  var os = require('os');
7
- var run = require('../../../lib/run.cjs.js');
7
+ var cliCommon = require('@backstage/cli-common');
8
8
  var paths = require('../../../lib/paths.cjs.js');
9
9
  var Lockfile = require('../../../lib/versioning/Lockfile.cjs.js');
10
10
  require('minimatch');
11
11
  require('@manypkg/get-packages');
12
- require('../../../lib/versioning/yarn.cjs.js');
13
12
  require('@backstage/errors');
14
13
  var fs = require('fs-extra');
15
14
 
@@ -20,7 +19,7 @@ var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
20
19
 
21
20
  var info = async () => {
22
21
  await new Promise(async () => {
23
- const yarnVersion = await run.runPlain("yarn --version");
22
+ const yarnVersion = await cliCommon.runOutput(["yarn", "--version"]);
24
23
  const isLocal = fs__default.default.existsSync(paths.paths.resolveOwn("./src"));
25
24
  const backstageFile = paths.paths.resolveTargetRoot("backstage.json");
26
25
  let backstageVersion = "N/A";
@@ -1,17 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var child_process = require('child_process');
4
3
  var fs = require('fs-extra');
5
4
  var path = require('path');
6
- var util = require('util');
7
5
  var cliNode = require('@backstage/cli-node');
8
6
  var paths = require('../../../../lib/paths.cjs.js');
7
+ var cliCommon = require('@backstage/cli-common');
9
8
 
10
9
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
11
10
 
12
11
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
13
12
 
14
- const execFile = util.promisify(child_process.execFile);
15
13
  async function command() {
16
14
  const packages = await cliNode.PackageGraph.listTargetPackages();
17
15
  await fs__default.default.remove(paths.paths.resolveTargetRoot("dist"));
@@ -27,12 +25,9 @@ async function command() {
27
25
  await fs__default.default.remove(path.resolve(pkg.dir, "dist-types"));
28
26
  await fs__default.default.remove(path.resolve(pkg.dir, "coverage"));
29
27
  } else if (cleanScript) {
30
- const result = await execFile("yarn", ["run", "clean"], {
31
- cwd: pkg.dir,
32
- shell: true
33
- });
34
- process.stdout.write(result.stdout);
35
- process.stderr.write(result.stderr);
28
+ await cliCommon.run(["yarn", "run", "clean"], {
29
+ cwd: pkg.dir
30
+ }).waitForExit();
36
31
  }
37
32
  }
38
33
  })
@@ -3,7 +3,7 @@
3
3
  var fs = require('fs-extra');
4
4
  var path = require('path');
5
5
  var cliNode = require('@backstage/cli-node');
6
- var run = require('../../../lib/run.cjs.js');
6
+ var cliCommon = require('@backstage/cli-common');
7
7
 
8
8
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
9
9
 
@@ -65,7 +65,7 @@ async function command() {
65
65
  } catch {
66
66
  }
67
67
  if (hasPrettier) {
68
- await run.runPlain("prettier", "--write", ...configPaths);
68
+ await cliCommon.runOutput(["prettier", "--write", ...configPaths]);
69
69
  }
70
70
  }
71
71
 
@@ -18,7 +18,6 @@ var parallel = require('../../../../lib/parallel.cjs.js');
18
18
  var releaseManifests = require('@backstage/release-manifests');
19
19
  var migrate = require('./migrate.cjs.js');
20
20
  var utils = require('../../lib/utils.cjs.js');
21
- var run = require('../../../../lib/run.cjs.js');
22
21
 
23
22
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
24
23
 
@@ -94,7 +93,7 @@ var bump = async (opts) => {
94
93
  );
95
94
  console.log();
96
95
  const yarnPluginUrl = process.env.BACKSTAGE_VERSIONS_BASE_URL ? `${process.env.BACKSTAGE_VERSIONS_BASE_URL}/v1/releases/${releaseManifest.releaseVersion}/yarn-plugin` : `https://versions.backstage.io/v1/releases/${releaseManifest.releaseVersion}/yarn-plugin`;
97
- await run.run("yarn", ["plugin", "import", yarnPluginUrl]);
96
+ await cliCommon.run(["yarn", "plugin", "import", yarnPluginUrl]).waitForExit();
98
97
  console.log();
99
98
  }
100
99
  const dependencyMap = await packages.mapDependencies(paths.paths.targetDir, pattern);
@@ -2,7 +2,7 @@
2
2
 
3
3
  var ora = require('ora');
4
4
  var chalk = require('chalk');
5
- var run = require('../../../lib/run.cjs.js');
5
+ var cliCommon = require('@backstage/cli-common');
6
6
 
7
7
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
8
8
 
@@ -17,7 +17,7 @@ async function runYarnInstall() {
17
17
  }).start();
18
18
  const installOutput = new Array();
19
19
  try {
20
- await run.run("yarn", ["install"], {
20
+ await cliCommon.run(["yarn", "install"], {
21
21
  env: {
22
22
  FORCE_COLOR: "true",
23
23
  // We filter out all of the npm_* environment variables that are added when
@@ -29,9 +29,9 @@ async function runYarnInstall() {
29
29
  )
30
30
  )
31
31
  },
32
- stdoutLogFunc: (data) => installOutput.push(data),
33
- stderrLogFunc: (data) => installOutput.push(data)
34
- });
32
+ onStdout: (data) => installOutput.push(data),
33
+ onStderr: (data) => installOutput.push(data)
34
+ }).waitForExit();
35
35
  spinner.succeed();
36
36
  } catch (error) {
37
37
  spinner.fail();
@@ -12,9 +12,8 @@ var lowerFirst = require('lodash/lowerFirst');
12
12
  var Lockfile = require('../../../../lib/versioning/Lockfile.cjs.js');
13
13
  require('minimatch');
14
14
  require('@manypkg/get-packages');
15
- require('../../../../lib/versioning/yarn.cjs.js');
16
- require('../../../../lib/run.cjs.js');
17
15
  require('@backstage/errors');
16
+ require('@backstage/cli-common');
18
17
  var paths = require('../../../../lib/paths.cjs.js');
19
18
  var version = require('../../../../lib/version.cjs.js');
20
19
  var yarnPlugin = require('../../../../lib/yarnPlugin.cjs.js');
@@ -5,6 +5,7 @@ var codeowners = require('../codeowners/codeowners.cjs.js');
5
5
  var tasks = require('../tasks.cjs.js');
6
6
  var installNewPackage = require('./installNewPackage.cjs.js');
7
7
  var writeTemplateContents = require('./writeTemplateContents.cjs.js');
8
+ var cliCommon = require('@backstage/cli-common');
8
9
 
9
10
  async function executePortableTemplate(options) {
10
11
  const { template, input } = options;
@@ -21,14 +22,25 @@ async function executePortableTemplate(options) {
21
22
  await codeowners.addCodeownersEntry(targetDir, input.owner);
22
23
  }
23
24
  if (!options.skipInstall) {
24
- await tasks.Task.forCommand("yarn install", {
25
- cwd: targetDir,
26
- optional: true
27
- });
28
- await tasks.Task.forCommand("yarn lint --fix", {
29
- cwd: targetDir,
30
- optional: true
31
- });
25
+ for (const command of [
26
+ ["yarn", "install"],
27
+ ["yarn", "lint", "--fix"]
28
+ ]) {
29
+ const commandStr = command.join(" ");
30
+ try {
31
+ await tasks.Task.forItem("executing", commandStr, async () => {
32
+ await cliCommon.run(command, {
33
+ cwd: targetDir,
34
+ stdio: "ignore"
35
+ }).waitForExit();
36
+ });
37
+ } catch (error) {
38
+ errors.assertError(error);
39
+ tasks.Task.error(
40
+ `Warning: Failed to execute command '${commandStr}', ${error}`
41
+ );
42
+ }
43
+ }
32
44
  }
33
45
  tasks.Task.log();
34
46
  tasks.Task.log(`\u{1F389} Successfully created ${template.name}`);
@@ -2,16 +2,12 @@
2
2
 
3
3
  var chalk = require('chalk');
4
4
  var ora = require('ora');
5
- var util = require('util');
6
- var child_process = require('child_process');
7
- var errors = require('@backstage/errors');
8
5
 
9
6
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
10
7
 
11
8
  var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
12
9
  var ora__default = /*#__PURE__*/_interopDefaultCompat(ora);
13
10
 
14
- const exec = util.promisify(child_process.exec);
15
11
  const TASK_NAME_MAX_LENGTH = 14;
16
12
  class Task {
17
13
  static log(name = "") {
@@ -49,28 +45,6 @@ ${chalk__default.default.red(message)}
49
45
  throw error;
50
46
  }
51
47
  }
52
- static async forCommand(command, options) {
53
- try {
54
- await Task.forItem("executing", command, async () => {
55
- await exec(command, { cwd: options?.cwd });
56
- });
57
- } catch (error) {
58
- errors.assertError(error);
59
- if (error.stderr) {
60
- process.stderr.write(error.stderr);
61
- }
62
- if (error.stdout) {
63
- process.stdout.write(error.stdout);
64
- }
65
- if (options?.optional) {
66
- Task.error(`Warning: Failed to execute command ${chalk__default.default.cyan(command)}`);
67
- } else {
68
- throw new Error(
69
- `Failed to execute command '${chalk__default.default.cyan(command)}', ${error}`
70
- );
71
- }
72
- }
73
- }
74
48
  }
75
49
 
76
50
  exports.Task = Task;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var paths = require('../../../../lib/paths.cjs.js');
6
- var run = require('../../../../lib/run.cjs.js');
6
+ var cliCommon = require('@backstage/cli-common');
7
7
 
8
8
  function includesAnyOf(hayStack, ...needles) {
9
9
  for (const needle of needles) {
@@ -29,8 +29,8 @@ var test = async (_opts, cmd) => {
29
29
  if (!process.env.CI && !args.includes("--coverage") && // explicitly no watching
30
30
  !includesAnyOf(args, "--no-watch", "--watch=false", "--watchAll=false") && // already watching
31
31
  !includesAnyOf(args, "--watch", "--watchAll")) {
32
- const isGitRepo = () => run.runCheck("git", "rev-parse", "--is-inside-work-tree");
33
- const isMercurialRepo = () => run.runCheck("hg", "--cwd", ".", "root");
32
+ const isGitRepo = () => cliCommon.runCheck(["git", "rev-parse", "--is-inside-work-tree"]);
33
+ const isMercurialRepo = () => cliCommon.runCheck(["hg", "--cwd", ".", "root"]);
34
34
  if (await isGitRepo() || await isMercurialRepo()) {
35
35
  args.push("--watch");
36
36
  } else {
@@ -7,7 +7,6 @@ var jestCli = require('jest-cli');
7
7
  var path = require('path');
8
8
  var cliNode = require('@backstage/cli-node');
9
9
  var paths = require('../../../../lib/paths.cjs.js');
10
- var run = require('../../../../lib/run.cjs.js');
11
10
  var cliCommon = require('@backstage/cli-common');
12
11
  var SuccessCache = require('../../../../lib/cache/SuccessCache.cjs.js');
13
12
 
@@ -22,14 +21,14 @@ async function readPackageTreeHashes(graph) {
22
21
  ...pkg,
23
22
  path: path.relative(paths.paths.targetRoot, pkg.dir)
24
23
  }));
25
- const output = await run.runPlain(
24
+ const output = await cliCommon.runOutput([
26
25
  "git",
27
26
  "ls-tree",
28
- '--format="%(objectname)=%(path)"',
27
+ "--format=%(objectname)=%(path)",
29
28
  "HEAD",
30
29
  "--",
31
30
  ...pkgs.map((pkg) => pkg.path)
32
- );
31
+ ]);
33
32
  const map = new Map(
34
33
  output.trim().split(/\r?\n/).map((line) => {
35
34
  const [itemSha, ...itemPathParts] = line.split("=");
@@ -108,8 +107,8 @@ async function command(opts, cmd) {
108
107
  }
109
108
  let isSingleWatchMode = args.includes("--watch");
110
109
  if (!opts.since && !process.env.CI && !hasFlags("--coverage", "--watch", "--watchAll")) {
111
- const isGitRepo = () => run.runCheck("git", "rev-parse", "--is-inside-work-tree");
112
- const isMercurialRepo = () => run.runCheck("hg", "--cwd", ".", "root");
110
+ const isGitRepo = () => cliCommon.runCheck(["git", "rev-parse", "--is-inside-work-tree"]);
111
+ const isMercurialRepo = () => cliCommon.runCheck(["hg", "--cwd", ".", "root"]);
113
112
  if (await isGitRepo() || await isMercurialRepo()) {
114
113
  isSingleWatchMode = true;
115
114
  args.push("--watch");
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.14.0-next.0";
3
+ var version = "0.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 = "1.5.1-next.0";
3
+ var version = "1.6.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.10.1-next.0";
3
+ var version = "1.10.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 = "0.34.6-next.0";
3
+ var version = "0.35.0-next.2";
4
4
  var dependencies = {
5
5
  "@backstage/catalog-model": "workspace:^",
6
6
  "@backstage/cli-common": "workspace:^",
@@ -43,7 +43,7 @@ var dependencies = {
43
43
  "cross-spawn": "^7.0.3",
44
44
  "css-loader": "^6.5.1",
45
45
  "ctrlc-windows": "^2.1.0",
46
- esbuild: "^0.25.0",
46
+ esbuild: "^0.27.0",
47
47
  eslint: "^8.6.0",
48
48
  "eslint-config-prettier": "^9.0.0",
49
49
  "eslint-formatter-friendly": "^7.0.0",
@@ -55,7 +55,7 @@ var dependencies = {
55
55
  "eslint-plugin-react-hooks": "^5.0.0",
56
56
  "eslint-plugin-unused-imports": "^4.1.4",
57
57
  "eslint-rspack-plugin": "^4.2.1",
58
- express: "^4.17.1",
58
+ express: "^4.22.0",
59
59
  "fs-extra": "^11.2.0",
60
60
  "git-url-parse": "^15.0.0",
61
61
  glob: "^7.1.7",
@@ -122,14 +122,14 @@ var devDependencies = {
122
122
  "@backstage/plugin-scaffolder-node-test-utils": "workspace:^",
123
123
  "@backstage/test-utils": "workspace:^",
124
124
  "@backstage/theme": "workspace:^",
125
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
125
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.6.0",
126
126
  "@types/cross-spawn": "^6.0.2",
127
127
  "@types/ejs": "^3.1.3",
128
128
  "@types/express": "^4.17.6",
129
129
  "@types/fs-extra": "^11.0.0",
130
130
  "@types/http-proxy": "^1.17.4",
131
131
  "@types/inquirer": "^8.1.3",
132
- "@types/node": "^20.16.0",
132
+ "@types/node": "^22.13.14",
133
133
  "@types/npm-packlist": "^3.0.0",
134
134
  "@types/recursive-readdir": "^2.2.0",
135
135
  "@types/rollup-plugin-peer-deps-external": "^2.2.0",
@@ -147,7 +147,7 @@ var devDependencies = {
147
147
  msw: "^1.0.0",
148
148
  nodemon: "^3.0.1",
149
149
  "terser-webpack-plugin": "^5.1.3",
150
- webpack: "~5.96.0",
150
+ webpack: "~5.103.0",
151
151
  "webpack-dev-server": "^5.0.0"
152
152
  };
153
153
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.19.3-next.0";
3
+ var version = "1.19.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 = "0.18.4-next.0";
3
+ var version = "0.18.4-next.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 = "1.1.18-next.0";
3
+ var version = "1.1.18-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.13.2-next.0";
3
+ var version = "0.13.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 = "0.25.7-next.0";
3
+ var version = "0.25.7-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.15-next.0";
3
+ var version = "0.2.15-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.20.1-next.0";
3
+ var version = "1.20.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.12.2-next.0";
3
+ var version = "0.12.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 = "0.3.6-next.0";
3
+ var version = "0.3.6-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.34.6-next.0",
3
+ "version": "0.35.0-next.2",
4
4
  "description": "CLI for developing Backstage plugins and apps",
5
5
  "backstage": {
6
6
  "role": "cli"
@@ -48,13 +48,13 @@
48
48
  },
49
49
  "dependencies": {
50
50
  "@backstage/catalog-model": "1.7.6",
51
- "@backstage/cli-common": "0.1.16-next.0",
52
- "@backstage/cli-node": "0.2.16-next.0",
51
+ "@backstage/cli-common": "0.1.16-next.2",
52
+ "@backstage/cli-node": "0.2.16-next.1",
53
53
  "@backstage/config": "1.3.6",
54
- "@backstage/config-loader": "1.10.7-next.0",
54
+ "@backstage/config-loader": "1.10.7-next.1",
55
55
  "@backstage/errors": "1.2.7",
56
56
  "@backstage/eslint-plugin": "0.2.0",
57
- "@backstage/integration": "1.18.3-next.0",
57
+ "@backstage/integration": "1.18.3-next.1",
58
58
  "@backstage/release-manifests": "0.0.13",
59
59
  "@backstage/types": "1.2.2",
60
60
  "@manypkg/get-packages": "^1.1.3",
@@ -88,7 +88,7 @@
88
88
  "cross-spawn": "^7.0.3",
89
89
  "css-loader": "^6.5.1",
90
90
  "ctrlc-windows": "^2.1.0",
91
- "esbuild": "^0.25.0",
91
+ "esbuild": "^0.27.0",
92
92
  "eslint": "^8.6.0",
93
93
  "eslint-config-prettier": "^9.0.0",
94
94
  "eslint-formatter-friendly": "^7.0.0",
@@ -100,7 +100,7 @@
100
100
  "eslint-plugin-react-hooks": "^5.0.0",
101
101
  "eslint-plugin-unused-imports": "^4.1.4",
102
102
  "eslint-rspack-plugin": "^4.2.1",
103
- "express": "^4.17.1",
103
+ "express": "^4.22.0",
104
104
  "fs-extra": "^11.2.0",
105
105
  "git-url-parse": "^15.0.0",
106
106
  "glob": "^7.1.7",
@@ -151,30 +151,30 @@
151
151
  "zod-validation-error": "^3.4.0"
152
152
  },
153
153
  "devDependencies": {
154
- "@backstage/backend-plugin-api": "1.5.1-next.0",
155
- "@backstage/backend-test-utils": "1.10.1-next.0",
154
+ "@backstage/backend-plugin-api": "1.6.0-next.1",
155
+ "@backstage/backend-test-utils": "1.10.2-next.1",
156
156
  "@backstage/catalog-client": "1.12.1",
157
157
  "@backstage/config": "1.3.6",
158
- "@backstage/core-app-api": "1.19.3-next.0",
159
- "@backstage/core-components": "0.18.4-next.0",
158
+ "@backstage/core-app-api": "1.19.3-next.1",
159
+ "@backstage/core-components": "0.18.4-next.2",
160
160
  "@backstage/core-plugin-api": "1.12.1-next.0",
161
- "@backstage/dev-utils": "1.1.18-next.0",
161
+ "@backstage/dev-utils": "1.1.18-next.1",
162
162
  "@backstage/errors": "1.2.7",
163
- "@backstage/plugin-auth-backend": "0.25.7-next.0",
164
- "@backstage/plugin-auth-backend-module-guest-provider": "0.2.15-next.0",
165
- "@backstage/plugin-catalog-node": "1.20.1-next.0",
166
- "@backstage/plugin-scaffolder-node": "0.12.2-next.0",
167
- "@backstage/plugin-scaffolder-node-test-utils": "0.3.6-next.0",
163
+ "@backstage/plugin-auth-backend": "0.25.7-next.1",
164
+ "@backstage/plugin-auth-backend-module-guest-provider": "0.2.15-next.1",
165
+ "@backstage/plugin-catalog-node": "1.20.1-next.1",
166
+ "@backstage/plugin-scaffolder-node": "0.12.2-next.1",
167
+ "@backstage/plugin-scaffolder-node-test-utils": "0.3.6-next.1",
168
168
  "@backstage/test-utils": "1.7.14-next.0",
169
169
  "@backstage/theme": "0.7.1-next.0",
170
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
170
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.6.0",
171
171
  "@types/cross-spawn": "^6.0.2",
172
172
  "@types/ejs": "^3.1.3",
173
173
  "@types/express": "^4.17.6",
174
174
  "@types/fs-extra": "^11.0.0",
175
175
  "@types/http-proxy": "^1.17.4",
176
176
  "@types/inquirer": "^8.1.3",
177
- "@types/node": "^20.16.0",
177
+ "@types/node": "^22.13.14",
178
178
  "@types/npm-packlist": "^3.0.0",
179
179
  "@types/recursive-readdir": "^2.2.0",
180
180
  "@types/rollup-plugin-peer-deps-external": "^2.2.0",
@@ -192,18 +192,18 @@
192
192
  "msw": "^1.0.0",
193
193
  "nodemon": "^3.0.1",
194
194
  "terser-webpack-plugin": "^5.1.3",
195
- "webpack": "~5.96.0",
195
+ "webpack": "~5.103.0",
196
196
  "webpack-dev-server": "^5.0.0"
197
197
  },
198
198
  "peerDependencies": {
199
199
  "@module-federation/enhanced": "^0.9.0",
200
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
200
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.6.0",
201
201
  "esbuild-loader": "^4.0.0",
202
202
  "eslint-webpack-plugin": "^4.2.0",
203
203
  "fork-ts-checker-webpack-plugin": "^9.0.0",
204
204
  "mini-css-extract-plugin": "^2.4.2",
205
205
  "terser-webpack-plugin": "^5.1.3",
206
- "webpack": "~5.96.0",
206
+ "webpack": "~5.103.0",
207
207
  "webpack-dev-server": "^5.0.0"
208
208
  },
209
209
  "peerDependenciesMeta": {
@@ -1,82 +0,0 @@
1
- 'use strict';
2
-
3
- var child_process = require('child_process');
4
- var errors = require('./errors.cjs.js');
5
- var util = require('util');
6
- var errors$1 = require('@backstage/errors');
7
-
8
- const execFile = util.promisify(child_process.execFile);
9
- async function run(name, args = [], options = {}) {
10
- const { stdoutLogFunc, stderrLogFunc } = options;
11
- const env = {
12
- ...process.env,
13
- FORCE_COLOR: "true",
14
- ...options.env ?? {}
15
- };
16
- const stdio = [
17
- "inherit",
18
- stdoutLogFunc ? "pipe" : "inherit",
19
- stderrLogFunc ? "pipe" : "inherit"
20
- ];
21
- const child = child_process.spawn(name, args, {
22
- stdio,
23
- shell: true,
24
- ...options,
25
- env
26
- });
27
- if (stdoutLogFunc && child.stdout) {
28
- child.stdout.on("data", stdoutLogFunc);
29
- }
30
- if (stderrLogFunc && child.stderr) {
31
- child.stderr.on("data", stderrLogFunc);
32
- }
33
- await waitForExit(child, name);
34
- }
35
- async function runPlain(cmd, ...args) {
36
- try {
37
- const { stdout } = await execFile(cmd, args, { shell: true });
38
- return stdout.trim();
39
- } catch (error) {
40
- errors$1.assertError(error);
41
- if ("stderr" in error) {
42
- process.stderr.write(error.stderr);
43
- }
44
- if (typeof error.code === "number") {
45
- throw new errors.ExitCodeError(error.code, [cmd, ...args].join(" "));
46
- }
47
- throw new errors$1.ForwardedError("Unknown execution error", error);
48
- }
49
- }
50
- async function runCheck(cmd, ...args) {
51
- try {
52
- await execFile(cmd, args, { shell: true });
53
- return true;
54
- } catch (error) {
55
- return false;
56
- }
57
- }
58
- async function waitForExit(child, name) {
59
- if (typeof child.exitCode === "number") {
60
- if (child.exitCode) {
61
- throw new errors.ExitCodeError(child.exitCode, name);
62
- }
63
- return;
64
- }
65
- await new Promise((resolve, reject) => {
66
- child.once("error", (error) => reject(error));
67
- child.once("exit", (code) => {
68
- if (code) {
69
- reject(new errors.ExitCodeError(code, name));
70
- } else {
71
- resolve();
72
- }
73
- });
74
- });
75
- }
76
-
77
- exports.execFile = execFile;
78
- exports.run = run;
79
- exports.runCheck = runCheck;
80
- exports.runPlain = runPlain;
81
- exports.waitForExit = waitForExit;
82
- //# sourceMappingURL=run.cjs.js.map