@backstage/cli 0.8.2 → 0.10.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.
- package/CHANGELOG.md +73 -0
- package/config/jest.js +1 -0
- package/config/jestSucraseTransform.js +5 -1
- package/dist/cjs/{Lockfile-80f0eec4.cjs.js → Lockfile-35661afa.cjs.js} +18 -18
- package/dist/cjs/{build-bae5a019.cjs.js → build-4c85e374.cjs.js} +9 -9
- package/dist/cjs/{build-1cbb9e7d.cjs.js → build-574ad84f.cjs.js} +23 -20
- package/dist/cjs/{build-70dd213a.cjs.js → build-c587cc8c.cjs.js} +8 -7
- package/dist/cjs/{build-b25b29ed.cjs.js → build-dc2484e7.cjs.js} +8 -7
- package/dist/cjs/{buildWorkspace-424d4929.cjs.js → buildWorkspace-29b42a0b.cjs.js} +6 -6
- package/dist/cjs/{bump-bce7f9c2.cjs.js → bump-24057de2.cjs.js} +55 -33
- package/dist/cjs/{bundle-cc6870fb.cjs.js → bundle-854deefb.cjs.js} +15 -15
- package/dist/cjs/{clean-7a981ea7.cjs.js → clean-ecf90e6b.cjs.js} +6 -6
- package/dist/cjs/{config-24fce3c1.cjs.js → config-91083c1e.cjs.js} +7 -7
- package/dist/cjs/create-89dd36f0.cjs.js +483 -0
- package/dist/cjs/{createPlugin-2c2b30fc.cjs.js → createPlugin-a8527ca3.cjs.js} +35 -36
- package/dist/cjs/{dev-efe399b8.cjs.js → dev-3713f802.cjs.js} +8 -8
- package/dist/cjs/{diff-e3661054.cjs.js → diff-79e33159.cjs.js} +39 -32
- package/dist/cjs/{docs-ceb404a3.cjs.js → docs-a8506fde.cjs.js} +6 -6
- package/dist/cjs/{index-26bec8ac.cjs.js → index-33d9cbba.cjs.js} +23 -20
- package/dist/cjs/{index-fbff7b78.cjs.js → index-9cf6e421.cjs.js} +14 -14
- package/dist/cjs/{index-6fee1c9a.cjs.js → index-b2152549.cjs.js} +81 -79
- package/dist/cjs/{info-5e7c2679.cjs.js → info-d8ce894c.cjs.js} +6 -6
- package/dist/cjs/{install-5920b5df.cjs.js → install-9e5b8576.cjs.js} +23 -23
- package/dist/cjs/{lint-306bb8fe.cjs.js → lint-955bc62d.cjs.js} +4 -4
- package/dist/cjs/{lint-6175d471.cjs.js → lint-a78b8bb6.cjs.js} +7 -7
- package/dist/cjs/{pack-32228ad6.cjs.js → pack-f474f79b.cjs.js} +6 -6
- package/dist/cjs/{packager-1ad7272f.cjs.js → packager-6c80f203.cjs.js} +37 -35
- package/dist/cjs/{packages-a5b6a3df.cjs.js → packages-bcde9079.cjs.js} +5 -5
- package/dist/cjs/{paths-09202a46.cjs.js → paths-f9c22b94.cjs.js} +51 -36
- package/dist/cjs/{print-806676fe.cjs.js → print-5e70799c.cjs.js} +5 -5
- package/dist/cjs/{removePlugin-f82ac16a.cjs.js → removePlugin-891ec166.cjs.js} +32 -29
- package/dist/cjs/{run-59c4395e.cjs.js → run-8388d249.cjs.js} +5 -5
- package/dist/cjs/{schema-398d8593.cjs.js → schema-80516b43.cjs.js} +5 -5
- package/dist/cjs/{serve-708fbf98.cjs.js → serve-1b0ace54.cjs.js} +15 -15
- package/dist/cjs/{serve-f4bb3cb0.cjs.js → serve-6c335165.cjs.js} +9 -9
- package/dist/cjs/{server-107d9cc0.cjs.js → server-b2f87b69.cjs.js} +6 -6
- package/dist/cjs/{svgrTemplate-2d0d15cf.cjs.js → svgrTemplate-f19e974c.cjs.js} +3 -3
- package/dist/cjs/{tasks-9bd3e946.cjs.js → tasks-f12b95ba.cjs.js} +96 -30
- package/dist/cjs/{testCommand-e32fbd45.cjs.js → testCommand-1c515cf7.cjs.js} +4 -4
- package/dist/cjs/{validate-9523a11e.cjs.js → validate-9907afbb.cjs.js} +4 -4
- package/dist/index.cjs.js +1 -1
- package/package.json +22 -23
- package/templates/default-backend-plugin/package.json.hbs +39 -37
- package/templates/default-backend-plugin/src/run.ts.hbs +1 -1
- package/templates/default-common-plugin-package/.eslintrc.js +3 -0
- package/templates/default-common-plugin-package/README.md.hbs +5 -0
- package/templates/default-common-plugin-package/package.json.hbs +34 -0
- package/templates/default-common-plugin-package/src/index.ts.hbs +19 -0
- package/templates/default-common-plugin-package/src/setupTests.ts +1 -0
- package/templates/default-common-plugin-package/tsconfig.json +9 -0
- package/templates/default-plugin/package.json.hbs +7 -4
- package/templates/default-plugin/src/routes.ts.hbs +1 -1
- package/templates/scaffolder-module/.eslintrc.js +3 -0
- package/templates/scaffolder-module/README.md.hbs +5 -0
- package/templates/scaffolder-module/package.json.hbs +37 -0
- package/templates/scaffolder-module/src/actions/example/example.test.ts +50 -0
- package/templates/scaffolder-module/src/actions/example/example.ts +57 -0
- package/templates/scaffolder-module/src/actions/example/index.ts +1 -0
- package/templates/scaffolder-module/src/actions/index.ts +1 -0
- package/templates/scaffolder-module/src/index.ts.hbs +8 -0
- package/templates/scaffolder-module/tsconfig.json +9 -0
- package/dist/cjs/buildImage-6b35526c.cjs.js +0 -77
|
@@ -4,12 +4,14 @@ var fs = require('fs-extra');
|
|
|
4
4
|
var path = require('path');
|
|
5
5
|
var chalk = require('chalk');
|
|
6
6
|
var inquirer = require('inquirer');
|
|
7
|
-
var tasks = require('./tasks-
|
|
8
|
-
var index = require('./index-
|
|
7
|
+
var tasks = require('./tasks-f12b95ba.cjs.js');
|
|
8
|
+
var index = require('./index-b2152549.cjs.js');
|
|
9
9
|
var errors = require('@backstage/errors');
|
|
10
10
|
require('handlebars');
|
|
11
11
|
require('ora');
|
|
12
|
+
require('util');
|
|
12
13
|
require('recursive-readdir');
|
|
14
|
+
require('child_process');
|
|
13
15
|
require('commander');
|
|
14
16
|
require('semver');
|
|
15
17
|
require('@backstage/cli-common');
|
|
@@ -26,45 +28,45 @@ const BACKSTAGE = "@backstage";
|
|
|
26
28
|
const checkExists = async (rootDir, pluginName) => {
|
|
27
29
|
await tasks.Task.forItem("checking", pluginName, async () => {
|
|
28
30
|
try {
|
|
29
|
-
const destination = path__default[
|
|
30
|
-
const pathExist = await fs__default[
|
|
31
|
+
const destination = path__default["default"].join(rootDir, "plugins", pluginName);
|
|
32
|
+
const pathExist = await fs__default["default"].pathExists(destination);
|
|
31
33
|
if (!pathExist) {
|
|
32
|
-
throw new Error(chalk__default[
|
|
34
|
+
throw new Error(chalk__default["default"].red(` Plugin ${chalk__default["default"].cyan(pluginName)} does not exist!`));
|
|
33
35
|
}
|
|
34
36
|
} catch (e) {
|
|
35
37
|
errors.assertError(e);
|
|
36
|
-
throw new Error(chalk__default[
|
|
38
|
+
throw new Error(chalk__default["default"].red(` There was an error removing plugin ${chalk__default["default"].cyan(pluginName)}: ${e.message}`));
|
|
37
39
|
}
|
|
38
40
|
});
|
|
39
41
|
};
|
|
40
42
|
const removePluginDirectory = async (destination) => {
|
|
41
43
|
await tasks.Task.forItem("removing", "plugin files", async () => {
|
|
42
44
|
try {
|
|
43
|
-
await fs__default[
|
|
45
|
+
await fs__default["default"].remove(destination);
|
|
44
46
|
} catch (e) {
|
|
45
47
|
errors.assertError(e);
|
|
46
|
-
throw Error(chalk__default[
|
|
48
|
+
throw Error(chalk__default["default"].red(` There was a problem removing the plugin directory: ${e.message}`));
|
|
47
49
|
}
|
|
48
50
|
});
|
|
49
51
|
};
|
|
50
52
|
const removeSymLink = async (destination) => {
|
|
51
53
|
await tasks.Task.forItem("removing", "symbolic link", async () => {
|
|
52
|
-
const symLinkExists = await fs__default[
|
|
54
|
+
const symLinkExists = await fs__default["default"].pathExists(destination);
|
|
53
55
|
if (symLinkExists) {
|
|
54
56
|
try {
|
|
55
|
-
await fs__default[
|
|
57
|
+
await fs__default["default"].remove(destination);
|
|
56
58
|
} catch (e) {
|
|
57
59
|
errors.assertError(e);
|
|
58
|
-
throw Error(chalk__default[
|
|
60
|
+
throw Error(chalk__default["default"].red(` Could not remove symbolic link ${chalk__default["default"].cyan(destination)}: ${e.message}`));
|
|
59
61
|
}
|
|
60
62
|
}
|
|
61
63
|
});
|
|
62
64
|
};
|
|
63
65
|
const removeAllStatementsContainingID = async (file, ID) => {
|
|
64
|
-
const originalContent = await fs__default[
|
|
66
|
+
const originalContent = await fs__default["default"].readFile(file, "utf8");
|
|
65
67
|
const contentAfterRemoval = originalContent.split("\n").filter((statement) => !statement.includes(`${ID}`)).join("\n");
|
|
66
68
|
if (originalContent !== contentAfterRemoval) {
|
|
67
|
-
await fs__default[
|
|
69
|
+
await fs__default["default"].writeFile(file, contentAfterRemoval, "utf8");
|
|
68
70
|
}
|
|
69
71
|
};
|
|
70
72
|
const capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1);
|
|
@@ -75,7 +77,7 @@ const removeReferencesFromPluginsFile = async (pluginsFile, pluginName) => {
|
|
|
75
77
|
await removeAllStatementsContainingID(pluginsFile, pluginNameCapitalized);
|
|
76
78
|
} catch (e) {
|
|
77
79
|
errors.assertError(e);
|
|
78
|
-
throw new Error(chalk__default[
|
|
80
|
+
throw new Error(chalk__default["default"].red(` There was an error removing export statement for plugin ${chalk__default["default"].cyan(pluginNameCapitalized)}: ${e.message}`));
|
|
79
81
|
}
|
|
80
82
|
});
|
|
81
83
|
};
|
|
@@ -85,7 +87,7 @@ const removePluginFromCodeOwners = async (codeOwnersFile, pluginName) => {
|
|
|
85
87
|
await removeAllStatementsContainingID(codeOwnersFile, pluginName);
|
|
86
88
|
} catch (e) {
|
|
87
89
|
errors.assertError(e);
|
|
88
|
-
throw new Error(chalk__default[
|
|
90
|
+
throw new Error(chalk__default["default"].red(` There was an error removing code owners statement for plugin ${chalk__default["default"].cyan(pluginName)}: ${e.message}`));
|
|
89
91
|
}
|
|
90
92
|
});
|
|
91
93
|
};
|
|
@@ -93,44 +95,45 @@ const removeReferencesFromAppPackage = async (appPackageFile, pluginName) => {
|
|
|
93
95
|
const pluginPackage = `${BACKSTAGE}/plugin-${pluginName}`;
|
|
94
96
|
await tasks.Task.forItem("removing", "plugin app dependency", async () => {
|
|
95
97
|
try {
|
|
96
|
-
const appPackageFileContent = await fs__default[
|
|
98
|
+
const appPackageFileContent = await fs__default["default"].readFile(appPackageFile, "utf-8");
|
|
97
99
|
const appPackageFileContentJSON = JSON.parse(appPackageFileContent);
|
|
98
100
|
const dependencies = appPackageFileContentJSON.dependencies;
|
|
99
101
|
if (!dependencies[pluginPackage]) {
|
|
100
|
-
throw new Error(chalk__default[
|
|
102
|
+
throw new Error(chalk__default["default"].red(` Plugin ${chalk__default["default"].cyan(pluginPackage)} does not exist in ${chalk__default["default"].cyan(appPackageFile)}`));
|
|
101
103
|
}
|
|
102
104
|
delete dependencies[pluginPackage];
|
|
103
|
-
await fs__default[
|
|
105
|
+
await fs__default["default"].writeFile(appPackageFile, `${JSON.stringify(appPackageFileContentJSON, null, 2)}
|
|
104
106
|
`, "utf-8");
|
|
105
107
|
} catch (e) {
|
|
106
108
|
errors.assertError(e);
|
|
107
|
-
throw new Error(chalk__default[
|
|
109
|
+
throw new Error(chalk__default["default"].red(` Failed to remove plugin as dependency in app: ${chalk__default["default"].cyan(appPackageFile)}: ${e.message}`));
|
|
108
110
|
}
|
|
109
111
|
});
|
|
110
112
|
};
|
|
111
113
|
var removePlugin = async () => {
|
|
114
|
+
console.warn(chalk__default["default"].yellow("[DEPRECATED] - The remove-plugin command is deprecated and will be removed in the future."));
|
|
112
115
|
const questions = [
|
|
113
116
|
{
|
|
114
117
|
type: "input",
|
|
115
118
|
name: "pluginName",
|
|
116
|
-
message: chalk__default[
|
|
119
|
+
message: chalk__default["default"].blue("Enter the ID of the plugin to be removed [required]"),
|
|
117
120
|
validate: (value) => {
|
|
118
121
|
if (!value) {
|
|
119
|
-
return chalk__default[
|
|
122
|
+
return chalk__default["default"].red("Please enter an ID for the plugin");
|
|
120
123
|
} else if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(value)) {
|
|
121
|
-
return chalk__default[
|
|
124
|
+
return chalk__default["default"].red("Plugin IDs must be lowercase and contain only letters, digits and dashes.");
|
|
122
125
|
}
|
|
123
126
|
return true;
|
|
124
127
|
}
|
|
125
128
|
}
|
|
126
129
|
];
|
|
127
|
-
const answers = await inquirer__default[
|
|
130
|
+
const answers = await inquirer__default["default"].prompt(questions);
|
|
128
131
|
const pluginName = answers.pluginName;
|
|
129
132
|
const appPackage = index.paths.resolveTargetRoot("packages/app");
|
|
130
133
|
const pluginDir = index.paths.resolveTargetRoot("plugins", answers.pluginName);
|
|
131
134
|
const codeOwnersFile = await tasks.getCodeownersFilePath(index.paths.targetRoot);
|
|
132
|
-
const appPackageFile = path__default[
|
|
133
|
-
const appPluginsFile = path__default[
|
|
135
|
+
const appPackageFile = path__default["default"].join(appPackage, "package.json");
|
|
136
|
+
const appPluginsFile = path__default["default"].join(appPackage, "src", "plugins.ts");
|
|
134
137
|
const pluginScopedDirectory = index.paths.resolveTargetRoot("node_modules", BACKSTAGE, `plugin-${pluginName}`);
|
|
135
138
|
tasks.Task.log();
|
|
136
139
|
tasks.Task.log("Removing the plugin...");
|
|
@@ -142,7 +145,7 @@ var removePlugin = async () => {
|
|
|
142
145
|
await removePluginDirectory(pluginDir);
|
|
143
146
|
tasks.Task.section("Removing symbolic link from @backstage.");
|
|
144
147
|
await removeSymLink(pluginScopedDirectory);
|
|
145
|
-
if (await fs__default[
|
|
148
|
+
if (await fs__default["default"].pathExists(appPackage)) {
|
|
146
149
|
tasks.Task.section("Removing references from plugins.ts.");
|
|
147
150
|
await removeReferencesFromPluginsFile(appPluginsFile, pluginName);
|
|
148
151
|
tasks.Task.section("Removing plugin dependency from app.");
|
|
@@ -153,7 +156,7 @@ var removePlugin = async () => {
|
|
|
153
156
|
await removePluginFromCodeOwners(codeOwnersFile, pluginName);
|
|
154
157
|
}
|
|
155
158
|
tasks.Task.log();
|
|
156
|
-
tasks.Task.log(`\u{1F947} Successfully removed ${chalk__default[
|
|
159
|
+
tasks.Task.log(`\u{1F947} Successfully removed ${chalk__default["default"].cyan(`@backstage/plugin-${answers.id}`)}`);
|
|
157
160
|
tasks.Task.log();
|
|
158
161
|
} catch (error) {
|
|
159
162
|
errors.assertError(error);
|
|
@@ -163,10 +166,10 @@ var removePlugin = async () => {
|
|
|
163
166
|
};
|
|
164
167
|
|
|
165
168
|
exports.checkExists = checkExists;
|
|
166
|
-
exports
|
|
169
|
+
exports["default"] = removePlugin;
|
|
167
170
|
exports.removePluginDirectory = removePluginDirectory;
|
|
168
171
|
exports.removePluginFromCodeOwners = removePluginFromCodeOwners;
|
|
169
172
|
exports.removeReferencesFromAppPackage = removeReferencesFromAppPackage;
|
|
170
173
|
exports.removeReferencesFromPluginsFile = removeReferencesFromPluginsFile;
|
|
171
174
|
exports.removeSymLink = removeSymLink;
|
|
172
|
-
//# sourceMappingURL=removePlugin-
|
|
175
|
+
//# sourceMappingURL=removePlugin-891ec166.cjs.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var child_process = require('child_process');
|
|
4
|
-
var index = require('./index-
|
|
4
|
+
var index = require('./index-b2152549.cjs.js');
|
|
5
5
|
var util = require('util');
|
|
6
6
|
var errors = require('@backstage/errors');
|
|
7
7
|
|
|
8
8
|
const execFile = util.promisify(child_process.execFile);
|
|
9
9
|
async function run(name, args = [], options = {}) {
|
|
10
10
|
var _a;
|
|
11
|
-
const {stdoutLogFunc, stderrLogFunc} = options;
|
|
11
|
+
const { stdoutLogFunc, stderrLogFunc } = options;
|
|
12
12
|
const env = {
|
|
13
13
|
...process.env,
|
|
14
14
|
FORCE_COLOR: "true",
|
|
@@ -35,7 +35,7 @@ async function run(name, args = [], options = {}) {
|
|
|
35
35
|
}
|
|
36
36
|
async function runPlain(cmd, ...args) {
|
|
37
37
|
try {
|
|
38
|
-
const {stdout} = await execFile(cmd, args, {shell: true});
|
|
38
|
+
const { stdout } = await execFile(cmd, args, { shell: true });
|
|
39
39
|
return stdout.trim();
|
|
40
40
|
} catch (error) {
|
|
41
41
|
errors.assertError(error);
|
|
@@ -50,7 +50,7 @@ async function runPlain(cmd, ...args) {
|
|
|
50
50
|
}
|
|
51
51
|
async function runCheck(cmd, ...args) {
|
|
52
52
|
try {
|
|
53
|
-
await execFile(cmd, args, {shell: true});
|
|
53
|
+
await execFile(cmd, args, { shell: true });
|
|
54
54
|
return true;
|
|
55
55
|
} catch (error) {
|
|
56
56
|
return false;
|
|
@@ -78,4 +78,4 @@ async function waitForExit(child, name) {
|
|
|
78
78
|
exports.run = run;
|
|
79
79
|
exports.runCheck = runCheck;
|
|
80
80
|
exports.runPlain = runPlain;
|
|
81
|
-
//# sourceMappingURL=run-
|
|
81
|
+
//# sourceMappingURL=run-8388d249.cjs.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var yaml = require('yaml');
|
|
4
|
-
var config = require('./config-
|
|
4
|
+
var config = require('./config-91083c1e.cjs.js');
|
|
5
5
|
var configLoader = require('@backstage/config-loader');
|
|
6
6
|
require('@backstage/config');
|
|
7
|
-
require('./index-
|
|
7
|
+
require('./index-b2152549.cjs.js');
|
|
8
8
|
require('commander');
|
|
9
9
|
require('chalk');
|
|
10
10
|
require('fs-extra');
|
|
@@ -14,7 +14,7 @@ require('@backstage/config/package.json');
|
|
|
14
14
|
require('@backstage/errors');
|
|
15
15
|
|
|
16
16
|
var schema = async (cmd) => {
|
|
17
|
-
const {schema} = await config.loadCliConfig({
|
|
17
|
+
const { schema } = await config.loadCliConfig({
|
|
18
18
|
args: [],
|
|
19
19
|
fromPackage: cmd.package,
|
|
20
20
|
mockEnv: true
|
|
@@ -31,5 +31,5 @@ var schema = async (cmd) => {
|
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
exports
|
|
35
|
-
//# sourceMappingURL=schema-
|
|
34
|
+
exports["default"] = schema;
|
|
35
|
+
//# sourceMappingURL=schema-80516b43.cjs.js.map
|
|
@@ -13,16 +13,16 @@ require('webpack-node-externals');
|
|
|
13
13
|
require('@backstage/cli-common');
|
|
14
14
|
require('terser-webpack-plugin');
|
|
15
15
|
require('mini-css-extract-plugin');
|
|
16
|
-
var index = require('./index-
|
|
17
|
-
require('./run-
|
|
16
|
+
var index = require('./index-b2152549.cjs.js');
|
|
17
|
+
require('./run-8388d249.cjs.js');
|
|
18
18
|
require('lodash/pickBy');
|
|
19
19
|
require('yn');
|
|
20
20
|
require('react-dev-utils/FileSizeReporter');
|
|
21
21
|
require('react-dev-utils/formatWebpackMessages');
|
|
22
|
-
var server = require('./server-
|
|
23
|
-
var config = require('./config-
|
|
24
|
-
var Lockfile = require('./Lockfile-
|
|
25
|
-
var lint = require('./lint-
|
|
22
|
+
var server = require('./server-b2f87b69.cjs.js');
|
|
23
|
+
var config = require('./config-91083c1e.cjs.js');
|
|
24
|
+
var Lockfile = require('./Lockfile-35661afa.cjs.js');
|
|
25
|
+
var lint = require('./lint-a78b8bb6.cjs.js');
|
|
26
26
|
require('commander');
|
|
27
27
|
require('semver');
|
|
28
28
|
require('@backstage/config/package.json');
|
|
@@ -31,9 +31,9 @@ require('child_process');
|
|
|
31
31
|
require('util');
|
|
32
32
|
require('webpack-dev-server');
|
|
33
33
|
require('react-dev-utils/openBrowser');
|
|
34
|
-
require('./paths-
|
|
34
|
+
require('./paths-f9c22b94.cjs.js');
|
|
35
35
|
require('./parallel-a4714c72.cjs.js');
|
|
36
|
-
require('./svgrTemplate-
|
|
36
|
+
require('./svgrTemplate-f19e974c.cjs.js');
|
|
37
37
|
require('@backstage/config-loader');
|
|
38
38
|
require('@backstage/config');
|
|
39
39
|
require('@yarnpkg/lockfile');
|
|
@@ -50,18 +50,18 @@ var serve = async (cmd) => {
|
|
|
50
50
|
const result = lockfile.analyze({
|
|
51
51
|
filter: lint.includedFilter
|
|
52
52
|
});
|
|
53
|
-
const problemPackages = [...result.newVersions, ...result.newRanges].map(({name: name2}) => name2);
|
|
53
|
+
const problemPackages = [...result.newVersions, ...result.newRanges].map(({ name: name2 }) => name2);
|
|
54
54
|
if (problemPackages.length > 1) {
|
|
55
|
-
console.log(chalk__default[
|
|
55
|
+
console.log(chalk__default["default"].yellow(`\u26A0\uFE0F Some of the following packages may be outdated or have duplicate installations:
|
|
56
56
|
|
|
57
|
-
${uniq__default[
|
|
57
|
+
${uniq__default["default"](problemPackages).join(", ")}
|
|
58
58
|
`));
|
|
59
|
-
console.log(chalk__default[
|
|
59
|
+
console.log(chalk__default["default"].yellow(`\u26A0\uFE0F This can be resolved using the following command:
|
|
60
60
|
|
|
61
61
|
yarn backstage-cli versions:check --fix
|
|
62
62
|
`));
|
|
63
63
|
}
|
|
64
|
-
const {name} = await fs__default[
|
|
64
|
+
const { name } = await fs__default["default"].readJson(index.paths.resolveTarget("package.json"));
|
|
65
65
|
const waitForExit = await server.serveBundle({
|
|
66
66
|
entry: "src/index",
|
|
67
67
|
checksEnabled: cmd.check,
|
|
@@ -74,5 +74,5 @@ var serve = async (cmd) => {
|
|
|
74
74
|
await waitForExit();
|
|
75
75
|
};
|
|
76
76
|
|
|
77
|
-
exports
|
|
78
|
-
//# sourceMappingURL=serve-
|
|
77
|
+
exports["default"] = serve;
|
|
78
|
+
//# sourceMappingURL=serve-1b0ace54.cjs.js.map
|
|
@@ -11,15 +11,15 @@ require('webpack-node-externals');
|
|
|
11
11
|
require('@backstage/cli-common');
|
|
12
12
|
require('terser-webpack-plugin');
|
|
13
13
|
require('mini-css-extract-plugin');
|
|
14
|
-
var index = require('./index-
|
|
15
|
-
require('./run-
|
|
14
|
+
var index = require('./index-b2152549.cjs.js');
|
|
15
|
+
require('./run-8388d249.cjs.js');
|
|
16
16
|
require('lodash/pickBy');
|
|
17
17
|
require('yn');
|
|
18
18
|
require('react-dev-utils/FileSizeReporter');
|
|
19
19
|
require('react-dev-utils/formatWebpackMessages');
|
|
20
20
|
require('chalk');
|
|
21
|
-
var server = require('./server-
|
|
22
|
-
var config = require('./config-
|
|
21
|
+
var server = require('./server-b2f87b69.cjs.js');
|
|
22
|
+
var config = require('./config-91083c1e.cjs.js');
|
|
23
23
|
require('commander');
|
|
24
24
|
require('semver');
|
|
25
25
|
require('@backstage/config/package.json');
|
|
@@ -28,9 +28,9 @@ require('child_process');
|
|
|
28
28
|
require('util');
|
|
29
29
|
require('webpack-dev-server');
|
|
30
30
|
require('react-dev-utils/openBrowser');
|
|
31
|
-
require('./paths-
|
|
31
|
+
require('./paths-f9c22b94.cjs.js');
|
|
32
32
|
require('./parallel-a4714c72.cjs.js');
|
|
33
|
-
require('./svgrTemplate-
|
|
33
|
+
require('./svgrTemplate-f19e974c.cjs.js');
|
|
34
34
|
require('@backstage/config-loader');
|
|
35
35
|
require('@backstage/config');
|
|
36
36
|
|
|
@@ -39,7 +39,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
39
39
|
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
40
40
|
|
|
41
41
|
var serve = async (cmd) => {
|
|
42
|
-
const {name} = await fs__default[
|
|
42
|
+
const { name } = await fs__default["default"].readJson(index.paths.resolveTarget("package.json"));
|
|
43
43
|
const waitForExit = await server.serveBundle({
|
|
44
44
|
entry: "dev/index",
|
|
45
45
|
checksEnabled: cmd.check,
|
|
@@ -52,5 +52,5 @@ var serve = async (cmd) => {
|
|
|
52
52
|
await waitForExit();
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
exports
|
|
56
|
-
//# sourceMappingURL=serve-
|
|
55
|
+
exports["default"] = serve;
|
|
56
|
+
//# sourceMappingURL=serve-6c335165.cjs.js.map
|
|
@@ -4,7 +4,7 @@ var fs = require('fs-extra');
|
|
|
4
4
|
var webpack = require('webpack');
|
|
5
5
|
var WebpackDevServer = require('webpack-dev-server');
|
|
6
6
|
var openBrowser = require('react-dev-utils/openBrowser');
|
|
7
|
-
var paths = require('./paths-
|
|
7
|
+
var paths = require('./paths-f9c22b94.cjs.js');
|
|
8
8
|
|
|
9
9
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
10
|
|
|
@@ -20,14 +20,14 @@ async function serveBundle(options) {
|
|
|
20
20
|
const port = options.frontendConfig.getOptionalNumber("app.listen.port") || Number(url.port) || (url.protocol === "https:" ? 443 : 80);
|
|
21
21
|
const paths$1 = paths.resolveBundlingPaths(options);
|
|
22
22
|
const pkgPath = paths$1.targetPackageJson;
|
|
23
|
-
const pkg = await fs__default[
|
|
23
|
+
const pkg = await fs__default["default"].readJson(pkgPath);
|
|
24
24
|
const config = await paths.createConfig(paths$1, {
|
|
25
25
|
...options,
|
|
26
26
|
isDev: true,
|
|
27
27
|
baseUrl: url
|
|
28
28
|
});
|
|
29
|
-
const compiler = webpack__default[
|
|
30
|
-
const server = new WebpackDevServer__default[
|
|
29
|
+
const compiler = webpack__default["default"](config);
|
|
30
|
+
const server = new WebpackDevServer__default["default"](compiler, {
|
|
31
31
|
hot: !process.env.CI,
|
|
32
32
|
devMiddleware: {
|
|
33
33
|
publicPath: (_a = config.output) == null ? void 0 : _a.publicPath,
|
|
@@ -52,7 +52,7 @@ async function serveBundle(options) {
|
|
|
52
52
|
reject(err);
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
openBrowser__default[
|
|
55
|
+
openBrowser__default["default"](url.href);
|
|
56
56
|
resolve();
|
|
57
57
|
});
|
|
58
58
|
});
|
|
@@ -70,4 +70,4 @@ async function serveBundle(options) {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
exports.serveBundle = serveBundle;
|
|
73
|
-
//# sourceMappingURL=server-
|
|
73
|
+
//# sourceMappingURL=server-b2f87b69.cjs.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
function svgrTemplate({template}, _opts, {imports, interfaces, componentName, jsx}) {
|
|
3
|
+
function svgrTemplate({ template }, _opts, { imports, interfaces, componentName, jsx }) {
|
|
4
4
|
const iconName = {
|
|
5
5
|
...componentName,
|
|
6
6
|
name: `${componentName.name.replace(/icon$/, "")}Icon`
|
|
@@ -9,7 +9,7 @@ function svgrTemplate({template}, _opts, {imports, interfaces, componentName, js
|
|
|
9
9
|
type: "ExportDefaultDeclaration",
|
|
10
10
|
declaration: iconName
|
|
11
11
|
};
|
|
12
|
-
const typeScriptTemplate = template.smart({plugins: ["typescript"]});
|
|
12
|
+
const typeScriptTemplate = template.smart({ plugins: ["typescript"] });
|
|
13
13
|
return typeScriptTemplate.ast`
|
|
14
14
|
${imports}
|
|
15
15
|
import SvgIcon from '@material-ui/core/SvgIcon';
|
|
@@ -22,4 +22,4 @@ ${defaultExport}`;
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
exports.svgrTemplate = svgrTemplate;
|
|
25
|
-
//# sourceMappingURL=svgrTemplate-
|
|
25
|
+
//# sourceMappingURL=svgrTemplate-f19e974c.cjs.js.map
|
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
var fs = require('fs-extra');
|
|
4
4
|
var path = require('path');
|
|
5
|
+
var index = require('./index-b2152549.cjs.js');
|
|
5
6
|
var chalk = require('chalk');
|
|
6
7
|
var handlebars = require('handlebars');
|
|
7
8
|
var ora = require('ora');
|
|
9
|
+
var util = require('util');
|
|
8
10
|
var recursive = require('recursive-readdir');
|
|
9
|
-
var
|
|
11
|
+
var child_process = require('child_process');
|
|
12
|
+
var errors = require('@backstage/errors');
|
|
10
13
|
|
|
11
14
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
15
|
|
|
@@ -22,14 +25,14 @@ const USER_ID_RE = /^@[-\w]+$/;
|
|
|
22
25
|
const EMAIL_RE = /^[^@]+@[-.\w]+\.[-\w]+$/i;
|
|
23
26
|
const DEFAULT_OWNER = "@backstage/maintainers";
|
|
24
27
|
async function getCodeownersFilePath(rootDir) {
|
|
25
|
-
const
|
|
26
|
-
path__default[
|
|
27
|
-
path__default[
|
|
28
|
-
path__default[
|
|
29
|
-
path__default[
|
|
28
|
+
const possiblePaths = [
|
|
29
|
+
path__default["default"].join(rootDir, ".github", "CODEOWNERS"),
|
|
30
|
+
path__default["default"].join(rootDir, ".gitlab", "CODEOWNERS"),
|
|
31
|
+
path__default["default"].join(rootDir, "docs", "CODEOWNERS"),
|
|
32
|
+
path__default["default"].join(rootDir, "CODEOWNERS")
|
|
30
33
|
];
|
|
31
|
-
for (const p of
|
|
32
|
-
if (await fs__default[
|
|
34
|
+
for (const p of possiblePaths) {
|
|
35
|
+
if (await fs__default["default"].pathExists(p)) {
|
|
33
36
|
return p;
|
|
34
37
|
}
|
|
35
38
|
}
|
|
@@ -51,8 +54,19 @@ function parseOwnerIds(spaceSeparatedOwnerIds) {
|
|
|
51
54
|
}
|
|
52
55
|
return ids;
|
|
53
56
|
}
|
|
54
|
-
async function addCodeownersEntry(
|
|
55
|
-
const
|
|
57
|
+
async function addCodeownersEntry(ownedPath, ownerStr, codeownersFilePath) {
|
|
58
|
+
const ownerIds = parseOwnerIds(ownerStr);
|
|
59
|
+
if (!ownerIds || ownerIds.length === 0) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
let filePath = codeownersFilePath;
|
|
63
|
+
if (!filePath) {
|
|
64
|
+
filePath = await getCodeownersFilePath(index.paths.targetRoot);
|
|
65
|
+
if (!filePath) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const allLines = (await fs__default["default"].readFile(filePath, "utf8")).split("\n");
|
|
56
70
|
const commentLines = [];
|
|
57
71
|
for (const line of allLines) {
|
|
58
72
|
if (line[0] !== "#") {
|
|
@@ -64,7 +78,7 @@ async function addCodeownersEntry(codeownersFilePath, ownedPath, ownerIds) {
|
|
|
64
78
|
ownedPath: tokens[0],
|
|
65
79
|
ownerIds: tokens.slice(1)
|
|
66
80
|
}));
|
|
67
|
-
const newDeclarationEntries = oldDeclarationEntries.filter((entry) => entry.ownedPath !== "*").concat([{ownedPath, ownerIds}]).sort((l1, l2) => l1.ownedPath.localeCompare(l2.ownedPath));
|
|
81
|
+
const newDeclarationEntries = oldDeclarationEntries.filter((entry) => entry.ownedPath !== "*").concat([{ ownedPath, ownerIds }]).sort((l1, l2) => l1.ownedPath.localeCompare(l2.ownedPath));
|
|
68
82
|
newDeclarationEntries.unshift({
|
|
69
83
|
ownedPath: "*",
|
|
70
84
|
ownerIds: [DEFAULT_OWNER]
|
|
@@ -75,24 +89,26 @@ async function addCodeownersEntry(codeownersFilePath, ownedPath, ownerIds) {
|
|
|
75
89
|
return [entryPath, ...entry.ownerIds].join(" ");
|
|
76
90
|
});
|
|
77
91
|
const newLines = [...commentLines, "", ...newDeclarationLines, ""];
|
|
78
|
-
await fs__default[
|
|
92
|
+
await fs__default["default"].writeFile(filePath, newLines.join("\n"), "utf8");
|
|
93
|
+
return true;
|
|
79
94
|
}
|
|
80
95
|
|
|
96
|
+
const exec = util.promisify(child_process.exec);
|
|
81
97
|
const TASK_NAME_MAX_LENGTH = 14;
|
|
82
98
|
class Task {
|
|
83
99
|
static log(name = "") {
|
|
84
|
-
process.
|
|
100
|
+
process.stderr.write(`${chalk__default["default"].green(name)}
|
|
85
101
|
`);
|
|
86
102
|
}
|
|
87
103
|
static error(message = "") {
|
|
88
|
-
process.
|
|
89
|
-
${chalk__default[
|
|
104
|
+
process.stderr.write(`
|
|
105
|
+
${chalk__default["default"].red(message)}
|
|
90
106
|
|
|
91
107
|
`);
|
|
92
108
|
}
|
|
93
109
|
static section(name) {
|
|
94
|
-
const title = chalk__default[
|
|
95
|
-
process.
|
|
110
|
+
const title = chalk__default["default"].green(`${name}:`);
|
|
111
|
+
process.stderr.write(`
|
|
96
112
|
${title}
|
|
97
113
|
`);
|
|
98
114
|
}
|
|
@@ -100,42 +116,65 @@ ${chalk__default['default'].red(message)}
|
|
|
100
116
|
process.exit(code);
|
|
101
117
|
}
|
|
102
118
|
static async forItem(task, item, taskFunc) {
|
|
103
|
-
const paddedTask = chalk__default[
|
|
104
|
-
const spinner = ora__default[
|
|
105
|
-
prefixText: chalk__default[
|
|
119
|
+
const paddedTask = chalk__default["default"].green(task.padEnd(TASK_NAME_MAX_LENGTH));
|
|
120
|
+
const spinner = ora__default["default"]({
|
|
121
|
+
prefixText: chalk__default["default"].green(` ${paddedTask}${chalk__default["default"].cyan(item)}`),
|
|
106
122
|
spinner: "arc",
|
|
107
123
|
color: "green"
|
|
108
124
|
}).start();
|
|
109
125
|
try {
|
|
110
|
-
await taskFunc();
|
|
126
|
+
const result = await taskFunc();
|
|
111
127
|
spinner.succeed();
|
|
128
|
+
return result;
|
|
112
129
|
} catch (error) {
|
|
113
130
|
spinner.fail();
|
|
114
131
|
throw error;
|
|
115
132
|
}
|
|
116
133
|
}
|
|
134
|
+
static async forCommand(command, options) {
|
|
135
|
+
try {
|
|
136
|
+
await Task.forItem("executing", command, async () => {
|
|
137
|
+
await exec(command, { cwd: options == null ? void 0 : options.cwd });
|
|
138
|
+
});
|
|
139
|
+
} catch (error) {
|
|
140
|
+
errors.assertError(error);
|
|
141
|
+
if (error.stderr) {
|
|
142
|
+
process.stderr.write(error.stderr);
|
|
143
|
+
}
|
|
144
|
+
if (error.stdout) {
|
|
145
|
+
process.stdout.write(error.stdout);
|
|
146
|
+
}
|
|
147
|
+
if (options == null ? void 0 : options.optional) {
|
|
148
|
+
Task.error(`Warning: Failed to execute command ${chalk__default["default"].cyan(command)}`);
|
|
149
|
+
} else {
|
|
150
|
+
throw new Error(`Failed to execute command '${chalk__default["default"].cyan(command)}', ${error}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
117
154
|
}
|
|
118
155
|
async function templatingTask(templateDir, destinationDir, context, versionProvider) {
|
|
119
|
-
const files = await recursive__default[
|
|
156
|
+
const files = await recursive__default["default"](templateDir).catch((error) => {
|
|
120
157
|
throw new Error(`Failed to read template directory: ${error.message}`);
|
|
121
158
|
});
|
|
122
|
-
const isMonoRepo = await fs__default[
|
|
159
|
+
const isMonoRepo = await fs__default["default"].pathExists(index.paths.resolveTargetRoot("lerna.json"));
|
|
123
160
|
for (const file of files) {
|
|
124
161
|
const destinationFile = file.replace(templateDir, destinationDir);
|
|
125
|
-
await fs__default[
|
|
162
|
+
await fs__default["default"].ensureDir(path.dirname(destinationFile));
|
|
126
163
|
if (file.endsWith(".hbs")) {
|
|
127
164
|
await Task.forItem("templating", path.basename(file), async () => {
|
|
128
165
|
const destination = destinationFile.replace(/\.hbs$/, "");
|
|
129
|
-
const template = await fs__default[
|
|
130
|
-
const compiled = handlebars__default[
|
|
131
|
-
|
|
166
|
+
const template = await fs__default["default"].readFile(file);
|
|
167
|
+
const compiled = handlebars__default["default"].compile(template.toString(), {
|
|
168
|
+
strict: true
|
|
169
|
+
});
|
|
170
|
+
const contents = compiled({ name: path.basename(destination), ...context }, {
|
|
132
171
|
helpers: {
|
|
133
172
|
versionQuery(name, versionHint) {
|
|
134
173
|
return versionProvider(name, typeof versionHint === "string" ? versionHint : void 0);
|
|
135
174
|
}
|
|
136
175
|
}
|
|
137
176
|
});
|
|
138
|
-
await fs__default[
|
|
177
|
+
await fs__default["default"].writeFile(destination, contents).catch((error) => {
|
|
139
178
|
throw new Error(`Failed to create file: ${destination}: ${error.message}`);
|
|
140
179
|
});
|
|
141
180
|
});
|
|
@@ -144,7 +183,7 @@ async function templatingTask(templateDir, destinationDir, context, versionProvi
|
|
|
144
183
|
continue;
|
|
145
184
|
}
|
|
146
185
|
await Task.forItem("copying", path.basename(file), async () => {
|
|
147
|
-
await fs__default[
|
|
186
|
+
await fs__default["default"].copyFile(file, destinationFile).catch((error) => {
|
|
148
187
|
const destination = destinationFile;
|
|
149
188
|
throw new Error(`Failed to copy file to ${destination} : ${error.message}`);
|
|
150
189
|
});
|
|
@@ -152,10 +191,37 @@ async function templatingTask(templateDir, destinationDir, context, versionProvi
|
|
|
152
191
|
}
|
|
153
192
|
}
|
|
154
193
|
}
|
|
194
|
+
async function addPackageDependency(path, options) {
|
|
195
|
+
try {
|
|
196
|
+
const pkgJson = await fs__default["default"].readJson(path);
|
|
197
|
+
const normalize = (obj) => {
|
|
198
|
+
if (Object.keys(obj).length === 0) {
|
|
199
|
+
return void 0;
|
|
200
|
+
}
|
|
201
|
+
return Object.fromEntries(Object.keys(obj).sort().map((key) => [key, obj[key]]));
|
|
202
|
+
};
|
|
203
|
+
pkgJson.dependencies = normalize({
|
|
204
|
+
...pkgJson.dependencies,
|
|
205
|
+
...options.dependencies
|
|
206
|
+
});
|
|
207
|
+
pkgJson.devDependencies = normalize({
|
|
208
|
+
...pkgJson.devDependencies,
|
|
209
|
+
...options.devDependencies
|
|
210
|
+
});
|
|
211
|
+
pkgJson.peerDependencies = normalize({
|
|
212
|
+
...pkgJson.peerDependencies,
|
|
213
|
+
...options.peerDependencies
|
|
214
|
+
});
|
|
215
|
+
await fs__default["default"].writeJson(path, pkgJson, { spaces: 2 });
|
|
216
|
+
} catch (error) {
|
|
217
|
+
throw new Error(`Failed to add package dependencies, ${error}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
155
220
|
|
|
156
221
|
exports.Task = Task;
|
|
157
222
|
exports.addCodeownersEntry = addCodeownersEntry;
|
|
223
|
+
exports.addPackageDependency = addPackageDependency;
|
|
158
224
|
exports.getCodeownersFilePath = getCodeownersFilePath;
|
|
159
225
|
exports.parseOwnerIds = parseOwnerIds;
|
|
160
226
|
exports.templatingTask = templatingTask;
|
|
161
|
-
//# sourceMappingURL=tasks-
|
|
227
|
+
//# sourceMappingURL=tasks-f12b95ba.cjs.js.map
|