@backstage/cli 0.13.1-next.1 → 0.14.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 (63) hide show
  1. package/CHANGELOG.md +88 -0
  2. package/config/eslint.backend.js +1 -12
  3. package/config/eslint.js +6 -17
  4. package/config/jest.js +4 -3
  5. package/config/jestSucraseTransform.js +60 -39
  6. package/dist/cjs/PackageGraph-d7b9d768.cjs.js +143 -0
  7. package/dist/cjs/backend-7919a693.cjs.js +36 -0
  8. package/dist/cjs/build-29fe454d.cjs.js +59 -0
  9. package/dist/cjs/{build-cda9d14b.cjs.js → build-30d6e823.cjs.js} +9 -4
  10. package/dist/cjs/build-8fe538f0.cjs.js +173 -0
  11. package/dist/cjs/{build-a0537ac0.cjs.js → build-ef788e26.cjs.js} +9 -4
  12. package/dist/cjs/buildBackend-1727e26d.cjs.js +84 -0
  13. package/dist/cjs/buildWorkspace-cdb5a92d.cjs.js +54 -0
  14. package/dist/cjs/bump-3e73eb63.cjs.js +348 -0
  15. package/dist/cjs/{build-0e234c9c.cjs.js → bundle-cfe3be2c.cjs.js} +10 -49
  16. package/dist/cjs/{bundle-82ebca5c.cjs.js → bundle-f5e5afd4.cjs.js} +16 -11
  17. package/dist/cjs/{clean-2a744d8e.cjs.js → clean-677131a4.cjs.js} +2 -2
  18. package/dist/cjs/{config-08b1d0e3.cjs.js → config-147bac17.cjs.js} +3 -3
  19. package/dist/cjs/{create-3c1059f8.cjs.js → create-95febe68.cjs.js} +4 -4
  20. package/dist/cjs/createDistWorkspace-59a08943.cjs.js +211 -0
  21. package/dist/cjs/{createPlugin-98d2404a.cjs.js → createPlugin-fd799616.cjs.js} +4 -4
  22. package/dist/cjs/{dev-35175ac8.cjs.js → dev-70024fd0.cjs.js} +8 -33
  23. package/dist/cjs/{diff-0f4d8b16.cjs.js → diff-4cf33d7e.cjs.js} +8 -8
  24. package/dist/cjs/{docs-1df9fa22.cjs.js → docs-1ce5cd6c.cjs.js} +7 -4
  25. package/dist/cjs/index-1823ab16.cjs.js +94 -0
  26. package/dist/cjs/{index-db3186f9.cjs.js → index-2b8588e8.cjs.js} +88 -59
  27. package/dist/cjs/{index-4fd2a731.cjs.js → index-9879526e.cjs.js} +2 -2
  28. package/dist/cjs/index-ba0436fb.cjs.js +125 -0
  29. package/dist/cjs/{info-0c58ae61.cjs.js → info-da6c4aef.cjs.js} +3 -3
  30. package/dist/cjs/{install-8bc1ba18.cjs.js → install-28e7640d.cjs.js} +4 -4
  31. package/dist/cjs/lint-985567f6.cjs.js +92 -0
  32. package/dist/cjs/{lint-9da50914.cjs.js → lint-a9e3c169.cjs.js} +3 -3
  33. package/dist/cjs/lint-ad2a1c74.cjs.js +35 -0
  34. package/dist/cjs/{build-f89d7092.cjs.js → oldBuild-a88f7903.cjs.js} +11 -6
  35. package/dist/cjs/{pack-8ef0a3ba.cjs.js → pack-b252bbb6.cjs.js} +2 -2
  36. package/dist/cjs/packageRole-5f116d95.cjs.js +54 -0
  37. package/dist/cjs/packageRoles-f375a99e.cjs.js +158 -0
  38. package/dist/cjs/packageScripts-890cd7af.cjs.js +97 -0
  39. package/dist/cjs/{packager-89d7686b.cjs.js → packager-8f82846e.cjs.js} +141 -58
  40. package/dist/cjs/{packages-fd09251d.cjs.js → packages-572642d7.cjs.js} +5 -4
  41. package/dist/cjs/parallel-d8e5bcbf.cjs.js +171 -0
  42. package/dist/cjs/{paths-f273ca03.cjs.js → paths-8e0b151d.cjs.js} +20 -19
  43. package/dist/cjs/{print-bd48d728.cjs.js → print-b7e68297.cjs.js} +7 -4
  44. package/dist/cjs/{run-448b5912.cjs.js → run-d3528c59.cjs.js} +2 -2
  45. package/dist/cjs/{schema-c5b2f512.cjs.js → schema-0d43bb71.cjs.js} +7 -4
  46. package/dist/cjs/{serve-32362ee1.cjs.js → serve-b7ae013f.cjs.js} +8 -8
  47. package/dist/cjs/{serve-b11d7c66.cjs.js → serve-cd62a6bb.cjs.js} +9 -9
  48. package/dist/cjs/{server-114c20ca.cjs.js → server-894abd58.cjs.js} +2 -2
  49. package/dist/cjs/svgrTemplate-b7a4ee52.cjs.js +21 -0
  50. package/dist/cjs/{tasks-f57f3a8c.cjs.js → tasks-f55f3d7e.cjs.js} +2 -2
  51. package/dist/cjs/{testCommand-a0ab3b2f.cjs.js → testCommand-f9b311fb.cjs.js} +11 -4
  52. package/dist/cjs/{validate-dfd64471.cjs.js → validate-cff0ae61.cjs.js} +7 -4
  53. package/dist/index.cjs.js +1 -1
  54. package/package.json +31 -22
  55. package/templates/default-backend-plugin/package.json.hbs +1 -1
  56. package/templates/default-plugin/package.json.hbs +1 -1
  57. package/dist/cjs/PackageGraph-7a0d3a83.cjs.js +0 -73
  58. package/dist/cjs/buildWorkspace-5494b433.cjs.js +0 -35
  59. package/dist/cjs/bump-ab6e31e7.cjs.js +0 -240
  60. package/dist/cjs/index-c868bb2d.cjs.js +0 -106
  61. package/dist/cjs/lint-f037ffc0.cjs.js +0 -29
  62. package/dist/cjs/parallel-7e32a8d0.cjs.js +0 -25
  63. package/dist/cjs/svgrTemplate-f19e974c.cjs.js +0 -25
@@ -3,9 +3,9 @@
3
3
  var Lockfile = require('./Lockfile-35661afa.cjs.js');
4
4
  require('minimatch');
5
5
  require('@manypkg/get-packages');
6
- require('./run-448b5912.cjs.js');
6
+ require('./run-d3528c59.cjs.js');
7
7
  require('chalk');
8
- var index = require('./index-db3186f9.cjs.js');
8
+ var index = require('./index-2b8588e8.cjs.js');
9
9
  var partition = require('lodash/partition');
10
10
  require('fs-extra');
11
11
  require('semver');
@@ -76,4 +76,4 @@ function logArray(arr, header, each) {
76
76
  exports["default"] = lint;
77
77
  exports.forbiddenDuplicatesFilter = forbiddenDuplicatesFilter;
78
78
  exports.includedFilter = includedFilter;
79
- //# sourceMappingURL=lint-9da50914.cjs.js.map
79
+ //# sourceMappingURL=lint-a9e3c169.cjs.js.map
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-2b8588e8.cjs.js');
4
+ var eslint = require('eslint');
5
+ require('commander');
6
+ require('chalk');
7
+ require('fs-extra');
8
+ require('semver');
9
+ require('@backstage/cli-common');
10
+ require('@backstage/config/package.json');
11
+ require('@backstage/errors');
12
+
13
+ var lint = async (cmd, cmdArgs) => {
14
+ const eslint$1 = new eslint.ESLint({
15
+ cwd: index.paths.targetDir,
16
+ fix: cmd.fix,
17
+ extensions: ["js", "jsx", "ts", "tsx", "mjs", "cjs"]
18
+ });
19
+ const results = await eslint$1.lintFiles(cmdArgs != null ? cmdArgs : ["."]);
20
+ if (cmd.fix) {
21
+ await eslint.ESLint.outputFixes(results);
22
+ }
23
+ const formatter = await eslint$1.loadFormatter(cmd.format);
24
+ if (cmd.format === "eslint-formatter-friendly") {
25
+ process.chdir(index.paths.targetRoot);
26
+ }
27
+ const resultText = formatter.format(results);
28
+ if (resultText) {
29
+ console.log(resultText);
30
+ process.exit(1);
31
+ }
32
+ };
33
+
34
+ exports["default"] = lint;
35
+ //# sourceMappingURL=lint-ad2a1c74.cjs.js.map
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var packager = require('./packager-89d7686b.cjs.js');
3
+ var packager = require('./packager-8f82846e.cjs.js');
4
4
  require('fs-extra');
5
5
  require('rollup');
6
6
  require('chalk');
7
7
  require('path');
8
- require('./index-db3186f9.cjs.js');
8
+ require('./index-2b8588e8.cjs.js');
9
9
  require('commander');
10
10
  require('semver');
11
11
  require('@backstage/cli-common');
@@ -21,9 +21,14 @@ require('rollup-plugin-dts');
21
21
  require('@rollup/plugin-json');
22
22
  require('@rollup/plugin-yaml');
23
23
  require('rollup-pluginutils');
24
- require('./svgrTemplate-f19e974c.cjs.js');
24
+ require('./svgrTemplate-b7a4ee52.cjs.js');
25
+ require('./parallel-d8e5bcbf.cjs.js');
26
+ require('os');
27
+ require('worker_threads');
28
+ require('./packageRoles-f375a99e.cjs.js');
29
+ require('zod');
25
30
 
26
- var build = async (cmd) => {
31
+ var oldBuild = async (cmd) => {
27
32
  let outputs = /* @__PURE__ */ new Set();
28
33
  const { outputs: outputsStr } = cmd;
29
34
  if (outputsStr) {
@@ -44,5 +49,5 @@ var build = async (cmd) => {
44
49
  });
45
50
  };
46
51
 
47
- exports["default"] = build;
48
- //# sourceMappingURL=build-f89d7092.cjs.js.map
52
+ exports["default"] = oldBuild;
53
+ //# sourceMappingURL=oldBuild-a88f7903.cjs.js.map
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var fs = require('fs-extra');
4
- var index = require('./index-db3186f9.cjs.js');
4
+ var index = require('./index-2b8588e8.cjs.js');
5
5
  var path = require('path');
6
6
  require('commander');
7
7
  require('chalk');
@@ -66,4 +66,4 @@ const post = async () => {
66
66
 
67
67
  exports.post = post;
68
68
  exports.pre = pre;
69
- //# sourceMappingURL=pack-8ef0a3ba.cjs.js.map
69
+ //# sourceMappingURL=pack-b252bbb6.cjs.js.map
@@ -0,0 +1,54 @@
1
+ 'use strict';
2
+
3
+ var fs = require('fs-extra');
4
+ var path = require('path');
5
+ var getPackages = require('@manypkg/get-packages');
6
+ var index = require('./index-2b8588e8.cjs.js');
7
+ var packageRoles = require('./packageRoles-f375a99e.cjs.js');
8
+ require('commander');
9
+ require('chalk');
10
+ require('semver');
11
+ require('@backstage/cli-common');
12
+ require('@backstage/config/package.json');
13
+ require('@backstage/errors');
14
+ require('zod');
15
+
16
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
17
+
18
+ var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
19
+
20
+ var packageRole = async () => {
21
+ const { packages } = await getPackages.getPackages(index.paths.targetDir);
22
+ await Promise.all(packages.map(async ({ dir, packageJson: pkg }) => {
23
+ const { name } = pkg;
24
+ const existingRole = packageRoles.getRoleFromPackage(pkg);
25
+ if (existingRole) {
26
+ return;
27
+ }
28
+ const detectedRole = packageRoles.detectRoleFromPackage(pkg);
29
+ if (!detectedRole) {
30
+ console.error(`No role detected for package ${name}`);
31
+ return;
32
+ }
33
+ console.log(`Detected package role of ${name} as ${detectedRole}`);
34
+ let newPkg = pkg;
35
+ const pkgKeys = Object.keys(pkg);
36
+ if (pkgKeys.includes("backstage")) {
37
+ newPkg.backstage = {
38
+ ...newPkg.backstage,
39
+ role: detectedRole
40
+ };
41
+ } else {
42
+ const index = Math.max(pkgKeys.indexOf("version"), pkgKeys.indexOf("private"), pkgKeys.indexOf("publishConfig")) + 1 || pkgKeys.length;
43
+ const pkgEntries = Object.entries(pkg);
44
+ pkgEntries.splice(index, 0, ["backstage", { role: detectedRole }]);
45
+ newPkg = Object.fromEntries(pkgEntries);
46
+ }
47
+ await fs__default["default"].writeJson(path.resolve(dir, "package.json"), newPkg, {
48
+ spaces: 2
49
+ });
50
+ }));
51
+ };
52
+
53
+ exports["default"] = packageRole;
54
+ //# sourceMappingURL=packageRole-5f116d95.cjs.js.map
@@ -0,0 +1,158 @@
1
+ 'use strict';
2
+
3
+ var zod = require('zod');
4
+ var fs = require('fs-extra');
5
+ var index = require('./index-2b8588e8.cjs.js');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
10
+
11
+ const packageRoleInfos = [
12
+ {
13
+ role: "frontend",
14
+ platform: "web",
15
+ output: ["bundle"]
16
+ },
17
+ {
18
+ role: "backend",
19
+ platform: "node",
20
+ output: ["bundle"]
21
+ },
22
+ {
23
+ role: "cli",
24
+ platform: "node",
25
+ output: ["cjs"]
26
+ },
27
+ {
28
+ role: "web-library",
29
+ platform: "web",
30
+ output: ["types", "esm"]
31
+ },
32
+ {
33
+ role: "node-library",
34
+ platform: "node",
35
+ output: ["types", "cjs"]
36
+ },
37
+ {
38
+ role: "common-library",
39
+ platform: "common",
40
+ output: ["types", "esm", "cjs"]
41
+ },
42
+ {
43
+ role: "frontend-plugin",
44
+ platform: "web",
45
+ output: ["types", "esm"]
46
+ },
47
+ {
48
+ role: "frontend-plugin-module",
49
+ platform: "web",
50
+ output: ["types", "esm"]
51
+ },
52
+ {
53
+ role: "backend-plugin",
54
+ platform: "node",
55
+ output: ["types", "cjs"]
56
+ },
57
+ {
58
+ role: "backend-plugin-module",
59
+ platform: "node",
60
+ output: ["types", "cjs"]
61
+ }
62
+ ];
63
+ function getRoleInfo(role) {
64
+ const roleInfo = packageRoleInfos.find((r) => r.role === role);
65
+ if (!roleInfo) {
66
+ throw new Error(`Unknown package role '${role}'`);
67
+ }
68
+ return roleInfo;
69
+ }
70
+ const readSchema = zod.z.object({
71
+ name: zod.z.string().optional(),
72
+ backstage: zod.z.object({
73
+ role: zod.z.string().optional()
74
+ }).optional()
75
+ });
76
+ function getRoleFromPackage(pkgJson) {
77
+ const pkg = readSchema.parse(pkgJson);
78
+ if (pkg.backstage) {
79
+ const { role } = pkg.backstage;
80
+ if (!role) {
81
+ throw new Error(`Package ${pkg.name} must specify a role in the "backstage" field`);
82
+ }
83
+ return getRoleInfo(role).role;
84
+ }
85
+ return void 0;
86
+ }
87
+ async function findRoleFromCommand(cmd) {
88
+ var _a;
89
+ if (cmd.role) {
90
+ return (_a = getRoleInfo(cmd.role)) == null ? void 0 : _a.role;
91
+ }
92
+ const pkg = await fs__default["default"].readJson(index.paths.resolveTarget("package.json"));
93
+ const info = getRoleFromPackage(pkg);
94
+ if (!info) {
95
+ throw new Error(`Target package must have 'backstage.role' set`);
96
+ }
97
+ return info;
98
+ }
99
+ const detectionSchema = zod.z.object({
100
+ name: zod.z.string().optional(),
101
+ scripts: zod.z.object({
102
+ start: zod.z.string().optional(),
103
+ build: zod.z.string().optional()
104
+ }).optional(),
105
+ publishConfig: zod.z.object({
106
+ main: zod.z.string().optional(),
107
+ types: zod.z.string().optional(),
108
+ module: zod.z.string().optional()
109
+ }).optional(),
110
+ main: zod.z.string().optional(),
111
+ types: zod.z.string().optional(),
112
+ module: zod.z.string().optional()
113
+ });
114
+ function detectRoleFromPackage(pkgJson) {
115
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
116
+ const pkg = detectionSchema.parse(pkgJson);
117
+ if ((_b = (_a = pkg.scripts) == null ? void 0 : _a.start) == null ? void 0 : _b.includes("app:serve")) {
118
+ return "frontend";
119
+ }
120
+ if ((_d = (_c = pkg.scripts) == null ? void 0 : _c.build) == null ? void 0 : _d.includes("backend:bundle")) {
121
+ return "backend";
122
+ }
123
+ if (((_e = pkg.name) == null ? void 0 : _e.includes("plugin-")) && ((_f = pkg.name) == null ? void 0 : _f.includes("-backend-module-"))) {
124
+ return "backend-plugin-module";
125
+ }
126
+ if (((_g = pkg.name) == null ? void 0 : _g.includes("plugin-")) && ((_h = pkg.name) == null ? void 0 : _h.includes("-module-"))) {
127
+ return "frontend-plugin-module";
128
+ }
129
+ if ((_j = (_i = pkg.scripts) == null ? void 0 : _i.start) == null ? void 0 : _j.includes("plugin:serve")) {
130
+ return "frontend-plugin";
131
+ }
132
+ if ((_l = (_k = pkg.scripts) == null ? void 0 : _k.start) == null ? void 0 : _l.includes("backend:dev")) {
133
+ return "backend-plugin";
134
+ }
135
+ const mainEntry = ((_m = pkg.publishConfig) == null ? void 0 : _m.main) || pkg.main;
136
+ const moduleEntry = ((_n = pkg.publishConfig) == null ? void 0 : _n.module) || pkg.module;
137
+ const typesEntry = ((_o = pkg.publishConfig) == null ? void 0 : _o.types) || pkg.types;
138
+ if (typesEntry) {
139
+ if (mainEntry && moduleEntry) {
140
+ return "common-library";
141
+ }
142
+ if (moduleEntry || (mainEntry == null ? void 0 : mainEntry.endsWith(".esm.js"))) {
143
+ return "web-library";
144
+ }
145
+ if (mainEntry) {
146
+ return "node-library";
147
+ }
148
+ } else if (mainEntry) {
149
+ return "cli";
150
+ }
151
+ return void 0;
152
+ }
153
+
154
+ exports.detectRoleFromPackage = detectRoleFromPackage;
155
+ exports.findRoleFromCommand = findRoleFromCommand;
156
+ exports.getRoleFromPackage = getRoleFromPackage;
157
+ exports.getRoleInfo = getRoleInfo;
158
+ //# sourceMappingURL=packageRoles-f375a99e.cjs.js.map
@@ -0,0 +1,97 @@
1
+ 'use strict';
2
+
3
+ var fs = require('fs-extra');
4
+ var path = require('path');
5
+ var PackageGraph = require('./PackageGraph-d7b9d768.cjs.js');
6
+ var packageRoles = require('./packageRoles-f375a99e.cjs.js');
7
+ require('@manypkg/get-packages');
8
+ require('./index-2b8588e8.cjs.js');
9
+ require('commander');
10
+ require('chalk');
11
+ require('semver');
12
+ require('@backstage/cli-common');
13
+ require('@backstage/config/package.json');
14
+ require('@backstage/errors');
15
+ require('child_process');
16
+ require('util');
17
+ require('zod');
18
+
19
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
20
+
21
+ var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
22
+
23
+ const configArgPattern = /--config[=\s][^\s$]+/;
24
+ const noStartRoles = ["cli", "common-library"];
25
+ async function command() {
26
+ const packages = await PackageGraph.PackageGraph.listTargetPackages();
27
+ await Promise.all(packages.map(async ({ dir, packageJson }) => {
28
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
29
+ const role = packageRoles.getRoleFromPackage(packageJson);
30
+ if (!role) {
31
+ return;
32
+ }
33
+ const roleInfo = packageRoles.getRoleInfo(role);
34
+ const hasStart = !noStartRoles.includes(role);
35
+ const needsPack = !(roleInfo.output.includes("bundle") || role === "cli");
36
+ const scripts = (_a = packageJson.scripts) != null ? _a : {};
37
+ const startCmd = ["start"];
38
+ if ((_b = scripts.start) == null ? void 0 : _b.includes("--check")) {
39
+ startCmd.push("--check");
40
+ }
41
+ if ((_c = scripts.start) == null ? void 0 : _c.includes("--config")) {
42
+ startCmd.push(...(_d = scripts.start.match(configArgPattern)) != null ? _d : []);
43
+ }
44
+ const buildCmd = ["build"];
45
+ if ((_e = scripts.build) == null ? void 0 : _e.includes("--minify")) {
46
+ buildCmd.push("--minify");
47
+ }
48
+ if ((_f = scripts.build) == null ? void 0 : _f.includes("--experimental-type-build")) {
49
+ buildCmd.push("--experimental-type-build");
50
+ }
51
+ if ((_g = scripts.build) == null ? void 0 : _g.includes("--config")) {
52
+ buildCmd.push(...(_h = scripts.build.match(configArgPattern)) != null ? _h : []);
53
+ }
54
+ const testCmd = ["test"];
55
+ if ((_i = scripts.test) == null ? void 0 : _i.startsWith("backstage-cli test")) {
56
+ const args = scripts.test.slice("backstage-cli test".length).split(" ").filter(Boolean);
57
+ if (args.includes("--passWithNoTests")) {
58
+ args.splice(args.indexOf("--passWithNoTests"), 1);
59
+ }
60
+ testCmd.push(...args);
61
+ }
62
+ const expectedScripts = {
63
+ ...hasStart && {
64
+ start: `backstage-cli package ${startCmd.join(" ")}`
65
+ },
66
+ build: `backstage-cli package ${buildCmd.join(" ")}`,
67
+ lint: "backstage-cli package lint",
68
+ test: `backstage-cli package ${testCmd.join(" ")}`,
69
+ clean: "backstage-cli package clean",
70
+ ...needsPack && {
71
+ postpack: "backstage-cli package postpack",
72
+ prepack: "backstage-cli package prepack"
73
+ }
74
+ };
75
+ let changed = false;
76
+ const currentScripts = packageJson.scripts = packageJson.scripts || {};
77
+ for (const [name, value] of Object.entries(expectedScripts)) {
78
+ const currentScript = currentScripts[name];
79
+ const isMissing = !currentScript;
80
+ const isDifferent = currentScript !== value;
81
+ const isBackstageScript = currentScript == null ? void 0 : currentScript.includes("backstage-cli");
82
+ if (isMissing || isDifferent && isBackstageScript) {
83
+ changed = true;
84
+ currentScripts[name] = value;
85
+ }
86
+ }
87
+ if (changed) {
88
+ console.log(`Updating scripts for ${packageJson.name}`);
89
+ await fs__default["default"].writeJson(path.resolve(dir, "package.json"), packageJson, {
90
+ spaces: 2
91
+ });
92
+ }
93
+ }));
94
+ }
95
+
96
+ exports.command = command;
97
+ //# sourceMappingURL=packageScripts-890cd7af.cjs.js.map