@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
|
@@ -10,10 +10,10 @@ var camelCase = require('lodash/camelCase');
|
|
|
10
10
|
var upperFirst = require('lodash/upperFirst');
|
|
11
11
|
var os = require('os');
|
|
12
12
|
var errors = require('@backstage/errors');
|
|
13
|
-
var tasks = require('./tasks-
|
|
14
|
-
var index = require('./index-
|
|
15
|
-
var Lockfile = require('./Lockfile-
|
|
16
|
-
require('./run-
|
|
13
|
+
var tasks = require('./tasks-f12b95ba.cjs.js');
|
|
14
|
+
var index = require('./index-b2152549.cjs.js');
|
|
15
|
+
var Lockfile = require('./Lockfile-35661afa.cjs.js');
|
|
16
|
+
require('./run-8388d249.cjs.js');
|
|
17
17
|
require('handlebars');
|
|
18
18
|
require('ora');
|
|
19
19
|
require('recursive-readdir');
|
|
@@ -35,8 +35,8 @@ var os__default = /*#__PURE__*/_interopDefaultLegacy(os);
|
|
|
35
35
|
const exec = util.promisify(child_process.exec);
|
|
36
36
|
async function checkExists(destination) {
|
|
37
37
|
await tasks.Task.forItem("checking", destination, async () => {
|
|
38
|
-
if (await fs__default[
|
|
39
|
-
const existing = chalk__default[
|
|
38
|
+
if (await fs__default["default"].pathExists(destination)) {
|
|
39
|
+
const existing = chalk__default["default"].cyan(destination.replace(`${index.paths.targetRoot}/`, ""));
|
|
40
40
|
throw new Error(`A plugin with the same name already exists: ${existing}
|
|
41
41
|
Please try again with a different plugin ID`);
|
|
42
42
|
}
|
|
@@ -50,14 +50,14 @@ const sortObjectByKeys = (obj) => {
|
|
|
50
50
|
};
|
|
51
51
|
const capitalize = (str) => str.charAt(0).toUpperCase() + str.slice(1);
|
|
52
52
|
const addExportStatement = async (file, exportStatement) => {
|
|
53
|
-
const newContents = fs__default[
|
|
54
|
-
await fs__default[
|
|
53
|
+
const newContents = fs__default["default"].readFileSync(file, "utf8").split("\n").filter(Boolean).concat([exportStatement]).concat([""]).join("\n");
|
|
54
|
+
await fs__default["default"].writeFile(file, newContents, "utf8");
|
|
55
55
|
};
|
|
56
56
|
async function addPluginDependencyToApp(rootDir, pluginPackage, versionStr) {
|
|
57
57
|
const packageFilePath = "packages/app/package.json";
|
|
58
58
|
const packageFile = path.resolve(rootDir, packageFilePath);
|
|
59
59
|
await tasks.Task.forItem("processing", packageFilePath, async () => {
|
|
60
|
-
const packageFileContent = await fs__default[
|
|
60
|
+
const packageFileContent = await fs__default["default"].readFile(packageFile, "utf-8");
|
|
61
61
|
const packageFileJson = JSON.parse(packageFileContent);
|
|
62
62
|
const dependencies = packageFileJson.dependencies;
|
|
63
63
|
if (dependencies[pluginPackage]) {
|
|
@@ -67,19 +67,19 @@ async function addPluginDependencyToApp(rootDir, pluginPackage, versionStr) {
|
|
|
67
67
|
packageFileJson.dependencies = sortObjectByKeys(dependencies);
|
|
68
68
|
const newContents = `${JSON.stringify(packageFileJson, null, 2)}
|
|
69
69
|
`;
|
|
70
|
-
await fs__default[
|
|
70
|
+
await fs__default["default"].writeFile(packageFile, newContents, "utf-8").catch((error) => {
|
|
71
71
|
throw new Error(`Failed to add plugin as dependency to app: ${packageFile}: ${error.message}`);
|
|
72
72
|
});
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
async function addPluginExtensionToApp(pluginId, extensionName, pluginPackage) {
|
|
76
76
|
const pluginsFilePath = index.paths.resolveTargetRoot("packages/app/src/App.tsx");
|
|
77
|
-
if (!await fs__default[
|
|
77
|
+
if (!await fs__default["default"].pathExists(pluginsFilePath)) {
|
|
78
78
|
return;
|
|
79
79
|
}
|
|
80
80
|
await tasks.Task.forItem("processing", pluginsFilePath, async () => {
|
|
81
81
|
var _a;
|
|
82
|
-
const content = await fs__default[
|
|
82
|
+
const content = await fs__default["default"].readFile(pluginsFilePath, "utf8");
|
|
83
83
|
const revLines = content.split("\n").reverse();
|
|
84
84
|
const lastImportIndex = revLines.findIndex((line) => line.match(/ from ("|').*("|')/));
|
|
85
85
|
const lastRouteIndex = revLines.findIndex((line) => line.match(/<\/FlatRoutes/));
|
|
@@ -88,13 +88,13 @@ async function addPluginExtensionToApp(pluginId, extensionName, pluginPackage) {
|
|
|
88
88
|
const [indentation] = (_a = revLines[lastRouteIndex + 1].match(/^\s*/)) != null ? _a : [];
|
|
89
89
|
revLines.splice(lastRouteIndex + 1, 0, `${indentation}<Route path="/${pluginId}" element={<${extensionName} />}/>`);
|
|
90
90
|
const newContent = revLines.reverse().join("\n");
|
|
91
|
-
await fs__default[
|
|
91
|
+
await fs__default["default"].writeFile(pluginsFilePath, newContent, "utf8");
|
|
92
92
|
}
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
async function cleanUp(tempDir) {
|
|
96
96
|
await tasks.Task.forItem("remove", "temporary directory", async () => {
|
|
97
|
-
await fs__default[
|
|
97
|
+
await fs__default["default"].remove(tempDir);
|
|
98
98
|
});
|
|
99
99
|
}
|
|
100
100
|
async function buildPlugin(pluginFolder) {
|
|
@@ -112,7 +112,7 @@ async function buildPlugin(pluginFolder) {
|
|
|
112
112
|
}).catch((error) => {
|
|
113
113
|
process.stdout.write(error.stderr);
|
|
114
114
|
process.stdout.write(error.stdout);
|
|
115
|
-
throw new Error(`Warning: Could not execute command ${chalk__default[
|
|
115
|
+
throw new Error(`Warning: Could not execute command ${chalk__default["default"].cyan(command)}`);
|
|
116
116
|
});
|
|
117
117
|
} catch (error) {
|
|
118
118
|
errors.assertError(error);
|
|
@@ -123,7 +123,7 @@ async function buildPlugin(pluginFolder) {
|
|
|
123
123
|
}
|
|
124
124
|
async function movePlugin(tempDir, destination, id) {
|
|
125
125
|
await tasks.Task.forItem("moving", id, async () => {
|
|
126
|
-
await fs__default[
|
|
126
|
+
await fs__default["default"].move(tempDir, destination).catch((error) => {
|
|
127
127
|
throw new Error(`Failed to move plugin from ${tempDir} to ${destination}: ${error.message}`);
|
|
128
128
|
});
|
|
129
129
|
});
|
|
@@ -134,12 +134,12 @@ var createPlugin = async (cmd) => {
|
|
|
134
134
|
{
|
|
135
135
|
type: "input",
|
|
136
136
|
name: "id",
|
|
137
|
-
message: chalk__default[
|
|
137
|
+
message: chalk__default["default"].blue("Enter an ID for the plugin [required]"),
|
|
138
138
|
validate: (value) => {
|
|
139
139
|
if (!value) {
|
|
140
|
-
return chalk__default[
|
|
140
|
+
return chalk__default["default"].red("Please enter an ID for the plugin");
|
|
141
141
|
} else if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(value)) {
|
|
142
|
-
return chalk__default[
|
|
142
|
+
return chalk__default["default"].red("Plugin IDs must be lowercase and contain only letters, digits, and dashes.");
|
|
143
143
|
}
|
|
144
144
|
return true;
|
|
145
145
|
}
|
|
@@ -149,32 +149,31 @@ var createPlugin = async (cmd) => {
|
|
|
149
149
|
questions.push({
|
|
150
150
|
type: "input",
|
|
151
151
|
name: "owner",
|
|
152
|
-
message: chalk__default[
|
|
152
|
+
message: chalk__default["default"].blue("Enter the owner(s) of the plugin. If specified, this will be added to CODEOWNERS for the plugin path. [optional]"),
|
|
153
153
|
validate: (value) => {
|
|
154
154
|
if (!value) {
|
|
155
155
|
return true;
|
|
156
156
|
}
|
|
157
|
-
const
|
|
158
|
-
if (!
|
|
159
|
-
return chalk__default[
|
|
157
|
+
const ownerIds = tasks.parseOwnerIds(value);
|
|
158
|
+
if (!ownerIds) {
|
|
159
|
+
return chalk__default["default"].red("The owner must be a space separated list of team names (e.g. @org/team-name), usernames (e.g. @username), or the email addresses of users (e.g. user@example.com).");
|
|
160
160
|
}
|
|
161
161
|
return true;
|
|
162
162
|
}
|
|
163
163
|
});
|
|
164
164
|
}
|
|
165
|
-
const answers = await inquirer__default[
|
|
165
|
+
const answers = await inquirer__default["default"].prompt(questions);
|
|
166
166
|
const pluginId = cmd.backend && !answers.id.endsWith("-backend") ? `${answers.id}-backend` : answers.id;
|
|
167
167
|
const name = cmd.scope ? `@${cmd.scope.replace(/^@/, "")}/plugin-${pluginId}` : `plugin-${pluginId}`;
|
|
168
|
-
const pluginVar = `${camelCase__default[
|
|
169
|
-
const extensionName = `${upperFirst__default[
|
|
168
|
+
const pluginVar = `${camelCase__default["default"](answers.id)}Plugin`;
|
|
169
|
+
const extensionName = `${upperFirst__default["default"](camelCase__default["default"](answers.id))}Page`;
|
|
170
170
|
const npmRegistry = cmd.npmRegistry && cmd.scope ? cmd.npmRegistry : "";
|
|
171
171
|
const privatePackage = cmd.private === false ? false : true;
|
|
172
|
-
const isMonoRepo = await fs__default[
|
|
172
|
+
const isMonoRepo = await fs__default["default"].pathExists(index.paths.resolveTargetRoot("lerna.json"));
|
|
173
173
|
const appPackage = index.paths.resolveTargetRoot("packages/app");
|
|
174
174
|
const templateDir = index.paths.resolveOwn(cmd.backend ? "templates/default-backend-plugin" : "templates/default-plugin");
|
|
175
175
|
const pluginDir = isMonoRepo ? index.paths.resolveTargetRoot("plugins", pluginId) : index.paths.resolveTargetRoot(pluginId);
|
|
176
|
-
const
|
|
177
|
-
const {version: pluginVersion} = isMonoRepo ? await fs__default['default'].readJson(index.paths.resolveTargetRoot("lerna.json")) : {version: "0.1.0"};
|
|
176
|
+
const { version: pluginVersion } = isMonoRepo ? await fs__default["default"].readJson(index.paths.resolveTargetRoot("lerna.json")) : { version: "0.1.0" };
|
|
178
177
|
let lockfile;
|
|
179
178
|
try {
|
|
180
179
|
lockfile = await Lockfile.Lockfile.load(index.paths.resolveTargetRoot("yarn.lock"));
|
|
@@ -186,7 +185,7 @@ var createPlugin = async (cmd) => {
|
|
|
186
185
|
tasks.Task.section("Checking if the plugin ID is available");
|
|
187
186
|
await checkExists(pluginDir);
|
|
188
187
|
tasks.Task.section("Creating a temporary plugin directory");
|
|
189
|
-
const tempDir = await fs__default[
|
|
188
|
+
const tempDir = await fs__default["default"].mkdtemp(path.join(os__default["default"].tmpdir(), `backstage-plugin-${pluginId}`));
|
|
190
189
|
try {
|
|
191
190
|
tasks.Task.section("Preparing files");
|
|
192
191
|
await tasks.templatingTask(templateDir, tempDir, {
|
|
@@ -202,17 +201,17 @@ var createPlugin = async (cmd) => {
|
|
|
202
201
|
await movePlugin(tempDir, pluginDir, pluginId);
|
|
203
202
|
tasks.Task.section("Building the plugin");
|
|
204
203
|
await buildPlugin(pluginDir);
|
|
205
|
-
if (await fs__default[
|
|
204
|
+
if (await fs__default["default"].pathExists(appPackage) && !cmd.backend) {
|
|
206
205
|
tasks.Task.section("Adding plugin as dependency in app");
|
|
207
206
|
await addPluginDependencyToApp(index.paths.targetRoot, name, pluginVersion);
|
|
208
207
|
tasks.Task.section("Import plugin in app");
|
|
209
208
|
await addPluginExtensionToApp(pluginId, extensionName, name);
|
|
210
209
|
}
|
|
211
|
-
if (
|
|
212
|
-
await tasks.addCodeownersEntry(
|
|
210
|
+
if (answers.owner) {
|
|
211
|
+
await tasks.addCodeownersEntry(`/plugins/${pluginId}`, answers.owner);
|
|
213
212
|
}
|
|
214
213
|
tasks.Task.log();
|
|
215
|
-
tasks.Task.log(`\u{1F947} Successfully created ${chalk__default[
|
|
214
|
+
tasks.Task.log(`\u{1F947} Successfully created ${chalk__default["default"].cyan(`${name}`)}`);
|
|
216
215
|
tasks.Task.log();
|
|
217
216
|
tasks.Task.exit();
|
|
218
217
|
} catch (error) {
|
|
@@ -231,6 +230,6 @@ exports.addExportStatement = addExportStatement;
|
|
|
231
230
|
exports.addPluginDependencyToApp = addPluginDependencyToApp;
|
|
232
231
|
exports.addPluginExtensionToApp = addPluginExtensionToApp;
|
|
233
232
|
exports.capitalize = capitalize;
|
|
234
|
-
exports
|
|
233
|
+
exports["default"] = createPlugin;
|
|
235
234
|
exports.movePlugin = movePlugin;
|
|
236
|
-
//# sourceMappingURL=createPlugin-
|
|
235
|
+
//# sourceMappingURL=createPlugin-a8527ca3.cjs.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var fs = require('fs-extra');
|
|
4
|
-
var index = require('./index-
|
|
4
|
+
var index = require('./index-b2152549.cjs.js');
|
|
5
5
|
var webpack = require('webpack');
|
|
6
|
-
var paths = require('./paths-
|
|
6
|
+
var paths = require('./paths-f9c22b94.cjs.js');
|
|
7
7
|
require('commander');
|
|
8
8
|
require('chalk');
|
|
9
9
|
require('semver');
|
|
@@ -19,8 +19,8 @@ require('webpack-node-externals');
|
|
|
19
19
|
require('terser-webpack-plugin');
|
|
20
20
|
require('./parallel-a4714c72.cjs.js');
|
|
21
21
|
require('mini-css-extract-plugin');
|
|
22
|
-
require('./svgrTemplate-
|
|
23
|
-
require('./run-
|
|
22
|
+
require('./svgrTemplate-f19e974c.cjs.js');
|
|
23
|
+
require('./run-8388d249.cjs.js');
|
|
24
24
|
require('child_process');
|
|
25
25
|
require('util');
|
|
26
26
|
require('lodash/pickBy');
|
|
@@ -36,7 +36,7 @@ async function serveBackend(options) {
|
|
|
36
36
|
...options,
|
|
37
37
|
isDev: true
|
|
38
38
|
});
|
|
39
|
-
const compiler = webpack__default[
|
|
39
|
+
const compiler = webpack__default["default"](config, (err) => {
|
|
40
40
|
if (err) {
|
|
41
41
|
console.error(err);
|
|
42
42
|
} else
|
|
@@ -56,7 +56,7 @@ async function serveBackend(options) {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
var dev = async (cmd) => {
|
|
59
|
-
await fs__default[
|
|
59
|
+
await fs__default["default"].remove(index.paths.resolveTarget("dist"));
|
|
60
60
|
const waitForExit = await serveBackend({
|
|
61
61
|
entry: "src/index",
|
|
62
62
|
checksEnabled: cmd.check,
|
|
@@ -66,5 +66,5 @@ var dev = async (cmd) => {
|
|
|
66
66
|
await waitForExit();
|
|
67
67
|
};
|
|
68
68
|
|
|
69
|
-
exports
|
|
70
|
-
//# sourceMappingURL=dev-
|
|
69
|
+
exports["default"] = dev;
|
|
70
|
+
//# sourceMappingURL=dev-3713f802.cjs.js.map
|
|
@@ -7,7 +7,7 @@ var path = require('path');
|
|
|
7
7
|
var inquirer = require('inquirer');
|
|
8
8
|
var handlebars = require('handlebars');
|
|
9
9
|
var recursive = require('recursive-readdir');
|
|
10
|
-
var index = require('./index-
|
|
10
|
+
var index = require('./index-b2152549.cjs.js');
|
|
11
11
|
require('commander');
|
|
12
12
|
require('semver');
|
|
13
13
|
require('@backstage/cli-common');
|
|
@@ -38,7 +38,7 @@ class PackageJsonHandler {
|
|
|
38
38
|
this.targetPkg = targetPkg;
|
|
39
39
|
this.variant = variant;
|
|
40
40
|
}
|
|
41
|
-
static async handler({path, write, missing, targetContents, templateContents}, prompt, variant) {
|
|
41
|
+
static async handler({ path, write, missing, targetContents, templateContents }, prompt, variant) {
|
|
42
42
|
console.log("Checking package.json");
|
|
43
43
|
if (missing) {
|
|
44
44
|
throw new Error(`${path} doesn't exist`);
|
|
@@ -61,18 +61,20 @@ class PackageJsonHandler {
|
|
|
61
61
|
await this.syncScripts();
|
|
62
62
|
await this.syncPublishConfig();
|
|
63
63
|
await this.syncDependencies("dependencies");
|
|
64
|
+
await this.syncDependencies("peerDependencies", true);
|
|
64
65
|
await this.syncDependencies("devDependencies");
|
|
66
|
+
await this.syncReactDeps();
|
|
65
67
|
}
|
|
66
68
|
async syncField(fieldName, obj = this.pkg, targetObj = this.targetPkg, prefix, sort, optional) {
|
|
67
|
-
const fullFieldName = chalk__default[
|
|
69
|
+
const fullFieldName = chalk__default["default"].cyan(prefix ? `${prefix}[${fieldName}]` : fieldName);
|
|
68
70
|
const newValue = obj[fieldName];
|
|
69
|
-
const coloredNewValue = chalk__default[
|
|
71
|
+
const coloredNewValue = chalk__default["default"].cyan(JSON.stringify(newValue));
|
|
70
72
|
if (fieldName in targetObj) {
|
|
71
73
|
const oldValue = targetObj[fieldName];
|
|
72
74
|
if (JSON.stringify(oldValue) === JSON.stringify(newValue)) {
|
|
73
75
|
return;
|
|
74
76
|
}
|
|
75
|
-
const coloredOldValue = chalk__default[
|
|
77
|
+
const coloredOldValue = chalk__default["default"].cyan(JSON.stringify(oldValue));
|
|
76
78
|
const msg = `package.json has mismatched field, ${fullFieldName}, change from ${coloredOldValue} to ${coloredNewValue}?`;
|
|
77
79
|
if (await this.prompt(msg)) {
|
|
78
80
|
targetObj[fieldName] = newValue;
|
|
@@ -92,7 +94,7 @@ class PackageJsonHandler {
|
|
|
92
94
|
}
|
|
93
95
|
}
|
|
94
96
|
async syncFiles() {
|
|
95
|
-
const {configSchema} = this.targetPkg;
|
|
97
|
+
const { configSchema } = this.targetPkg;
|
|
96
98
|
const hasSchemaFile = typeof configSchema === "string";
|
|
97
99
|
if (!this.targetPkg.files) {
|
|
98
100
|
const expected = hasSchemaFile ? ["dist", configSchema] : ["dist"];
|
|
@@ -145,10 +147,10 @@ class PackageJsonHandler {
|
|
|
145
147
|
}
|
|
146
148
|
}
|
|
147
149
|
}
|
|
148
|
-
async syncDependencies(fieldName) {
|
|
150
|
+
async syncDependencies(fieldName, required = false) {
|
|
149
151
|
const pkgDeps = this.pkg[fieldName];
|
|
150
152
|
const targetDeps = this.targetPkg[fieldName] = this.targetPkg[fieldName] || {};
|
|
151
|
-
if (!pkgDeps) {
|
|
153
|
+
if (!pkgDeps && !required) {
|
|
152
154
|
return;
|
|
153
155
|
}
|
|
154
156
|
await this.syncField("@backstage/core", {}, targetDeps, fieldName, true);
|
|
@@ -157,17 +159,22 @@ class PackageJsonHandler {
|
|
|
157
159
|
if (this.variant === "app" && key.startsWith("plugin-")) {
|
|
158
160
|
continue;
|
|
159
161
|
}
|
|
160
|
-
await this.syncField(key, pkgDeps, targetDeps, fieldName, true,
|
|
162
|
+
await this.syncField(key, pkgDeps, targetDeps, fieldName, true, !required);
|
|
161
163
|
}
|
|
162
164
|
}
|
|
165
|
+
async syncReactDeps() {
|
|
166
|
+
const targetDeps = this.targetPkg.dependencies = this.targetPkg.dependencies || {};
|
|
167
|
+
await this.syncField("react", {}, targetDeps, "dependencies");
|
|
168
|
+
await this.syncField("react-dom", {}, targetDeps, "dependencies");
|
|
169
|
+
}
|
|
163
170
|
async write() {
|
|
164
171
|
await this.writeFunc(`${JSON.stringify(this.targetPkg, null, 2)}
|
|
165
172
|
`);
|
|
166
173
|
}
|
|
167
174
|
}
|
|
168
|
-
async function exactMatchHandler({path, write, missing, targetContents, templateContents}, prompt) {
|
|
175
|
+
async function exactMatchHandler({ path, write, missing, targetContents, templateContents }, prompt) {
|
|
169
176
|
console.log(`Checking ${path}`);
|
|
170
|
-
const coloredPath = chalk__default[
|
|
177
|
+
const coloredPath = chalk__default["default"].cyan(path);
|
|
171
178
|
if (missing) {
|
|
172
179
|
if (await prompt(`Missing ${coloredPath}, do you want to add it?`)) {
|
|
173
180
|
await write(templateContents);
|
|
@@ -180,9 +187,9 @@ async function exactMatchHandler({path, write, missing, targetContents, template
|
|
|
180
187
|
const diffs = diff$1.diffLines(targetContents, templateContents);
|
|
181
188
|
for (const diff of diffs) {
|
|
182
189
|
if (diff.added) {
|
|
183
|
-
process.stdout.write(chalk__default[
|
|
190
|
+
process.stdout.write(chalk__default["default"].green(`+${diff.value}`));
|
|
184
191
|
} else if (diff.removed) {
|
|
185
|
-
process.stdout.write(chalk__default[
|
|
192
|
+
process.stdout.write(chalk__default["default"].red(`-${diff.value}`));
|
|
186
193
|
} else {
|
|
187
194
|
process.stdout.write(` ${diff.value}`);
|
|
188
195
|
}
|
|
@@ -191,9 +198,9 @@ async function exactMatchHandler({path, write, missing, targetContents, template
|
|
|
191
198
|
await write(templateContents);
|
|
192
199
|
}
|
|
193
200
|
}
|
|
194
|
-
async function existsHandler({path, write, missing, templateContents}, prompt) {
|
|
201
|
+
async function existsHandler({ path, write, missing, templateContents }, prompt) {
|
|
195
202
|
console.log(`Making sure ${path} exists`);
|
|
196
|
-
const coloredPath = chalk__default[
|
|
203
|
+
const coloredPath = chalk__default["default"].cyan(path);
|
|
197
204
|
if (missing) {
|
|
198
205
|
if (await prompt(`Missing ${coloredPath}, do you want to add it?`)) {
|
|
199
206
|
await write(templateContents);
|
|
@@ -201,7 +208,7 @@ async function existsHandler({path, write, missing, templateContents}, prompt) {
|
|
|
201
208
|
return;
|
|
202
209
|
}
|
|
203
210
|
}
|
|
204
|
-
async function skipHandler({path}) {
|
|
211
|
+
async function skipHandler({ path }) {
|
|
205
212
|
console.log(`Skipping ${path}`);
|
|
206
213
|
}
|
|
207
214
|
const handlers = {
|
|
@@ -224,10 +231,10 @@ async function handleAllFiles(fileHandlers, files, promptFunc) {
|
|
|
224
231
|
}
|
|
225
232
|
|
|
226
233
|
const inquirerPromptFunc = async (msg) => {
|
|
227
|
-
const {result} = await inquirer__default[
|
|
234
|
+
const { result } = await inquirer__default["default"].prompt({
|
|
228
235
|
type: "confirm",
|
|
229
236
|
name: "result",
|
|
230
|
-
message: chalk__default[
|
|
237
|
+
message: chalk__default["default"].blue(msg)
|
|
231
238
|
});
|
|
232
239
|
return result;
|
|
233
240
|
};
|
|
@@ -235,7 +242,7 @@ const makeCheckPromptFunc = () => {
|
|
|
235
242
|
let failed = false;
|
|
236
243
|
const promptFunc = async (msg) => {
|
|
237
244
|
failed = true;
|
|
238
|
-
console.log(chalk__default[
|
|
245
|
+
console.log(chalk__default["default"].red(`[Check Failed] ${msg}`));
|
|
239
246
|
return false;
|
|
240
247
|
};
|
|
241
248
|
const finalize = () => {
|
|
@@ -251,12 +258,12 @@ const yesPromptFunc = async (msg) => {
|
|
|
251
258
|
};
|
|
252
259
|
|
|
253
260
|
async function readTemplateFile(templateFile, templateVars) {
|
|
254
|
-
const contents = await fs__default[
|
|
261
|
+
const contents = await fs__default["default"].readFile(templateFile, "utf8");
|
|
255
262
|
if (!templateFile.endsWith(".hbs")) {
|
|
256
263
|
return contents;
|
|
257
264
|
}
|
|
258
265
|
const packageVersionProvider = index.createPackageVersionProvider(void 0);
|
|
259
|
-
return handlebars__default[
|
|
266
|
+
return handlebars__default["default"].compile(contents)(templateVars, {
|
|
260
267
|
helpers: {
|
|
261
268
|
versionQuery(name, hint) {
|
|
262
269
|
return packageVersionProvider(name, typeof hint === "string" ? hint : void 0);
|
|
@@ -265,28 +272,28 @@ async function readTemplateFile(templateFile, templateVars) {
|
|
|
265
272
|
});
|
|
266
273
|
}
|
|
267
274
|
async function readTemplate(templateDir, templateVars) {
|
|
268
|
-
const templateFilePaths = await recursive__default[
|
|
275
|
+
const templateFilePaths = await recursive__default["default"](templateDir).catch((error) => {
|
|
269
276
|
throw new Error(`Failed to read template directory: ${error.message}`);
|
|
270
277
|
});
|
|
271
278
|
const templatedFiles = new Array();
|
|
272
279
|
for (const templateFile of templateFilePaths) {
|
|
273
280
|
const path$1 = path.relative(templateDir, templateFile).replace(/\.hbs$/, "");
|
|
274
281
|
const contents = await readTemplateFile(templateFile, templateVars);
|
|
275
|
-
templatedFiles.push({path: path$1, contents});
|
|
282
|
+
templatedFiles.push({ path: path$1, contents });
|
|
276
283
|
}
|
|
277
284
|
return templatedFiles;
|
|
278
285
|
}
|
|
279
286
|
async function diffTemplatedFiles(targetDir, templatedFiles) {
|
|
280
287
|
const fileDiffs = new Array();
|
|
281
|
-
for (const {path: path$1, contents: templateContents} of templatedFiles) {
|
|
288
|
+
for (const { path: path$1, contents: templateContents } of templatedFiles) {
|
|
282
289
|
const targetPath = path.resolve(targetDir, path$1);
|
|
283
|
-
const targetExists = await fs__default[
|
|
290
|
+
const targetExists = await fs__default["default"].pathExists(targetPath);
|
|
284
291
|
const write = async (contents) => {
|
|
285
|
-
await fs__default[
|
|
286
|
-
await fs__default[
|
|
292
|
+
await fs__default["default"].ensureDir(path.dirname(targetPath));
|
|
293
|
+
await fs__default["default"].writeFile(targetPath, contents, "utf8");
|
|
287
294
|
};
|
|
288
295
|
if (targetExists) {
|
|
289
|
-
const targetContents = await fs__default[
|
|
296
|
+
const targetContents = await fs__default["default"].readFile(targetPath, "utf8");
|
|
290
297
|
fileDiffs.push({
|
|
291
298
|
path: path$1,
|
|
292
299
|
write,
|
|
@@ -364,14 +371,14 @@ async function readPluginData() {
|
|
|
364
371
|
} catch (error) {
|
|
365
372
|
throw new Error(`Failed to read target package, ${error}`);
|
|
366
373
|
}
|
|
367
|
-
const pluginTsContents = await fs__default[
|
|
374
|
+
const pluginTsContents = await fs__default["default"].readFile(index.paths.resolveTarget("src/plugin.ts"), "utf8");
|
|
368
375
|
const pluginIdMatch = pluginTsContents.match(/id: ['"`](.+?)['"`]/);
|
|
369
376
|
if (!pluginIdMatch) {
|
|
370
377
|
throw new Error(`Failed to parse plugin.ts, no plugin ID found`);
|
|
371
378
|
}
|
|
372
379
|
const id = pluginIdMatch[1];
|
|
373
|
-
return {id, name, privatePackage, pluginVersion, npmRegistry};
|
|
380
|
+
return { id, name, privatePackage, pluginVersion, npmRegistry };
|
|
374
381
|
}
|
|
375
382
|
|
|
376
|
-
exports
|
|
377
|
-
//# sourceMappingURL=diff-
|
|
383
|
+
exports["default"] = diff;
|
|
384
|
+
//# sourceMappingURL=diff-79e33159.cjs.js.map
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
var configLoader = require('@backstage/config-loader');
|
|
4
4
|
var openBrowser = require('react-dev-utils/openBrowser');
|
|
5
|
-
var config = require('./config-
|
|
5
|
+
var config = require('./config-91083c1e.cjs.js');
|
|
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');
|
|
@@ -19,14 +19,14 @@ var openBrowser__default = /*#__PURE__*/_interopDefaultLegacy(openBrowser);
|
|
|
19
19
|
|
|
20
20
|
const DOCS_URL = "https://config.backstage.io";
|
|
21
21
|
var docs = async (cmd) => {
|
|
22
|
-
const {schema: appSchemas} = await config.loadCliConfig({
|
|
22
|
+
const { schema: appSchemas } = await config.loadCliConfig({
|
|
23
23
|
args: [],
|
|
24
24
|
fromPackage: cmd.package,
|
|
25
25
|
mockEnv: true
|
|
26
26
|
});
|
|
27
27
|
const schema = configLoader.mergeConfigSchemas(appSchemas.serialize().schemas.map((_) => _.value));
|
|
28
|
-
openBrowser__default[
|
|
28
|
+
openBrowser__default["default"](`${DOCS_URL}#schema=${JSON.stringify(schema)}`);
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
-
exports
|
|
32
|
-
//# sourceMappingURL=docs-
|
|
31
|
+
exports["default"] = docs;
|
|
32
|
+
//# sourceMappingURL=docs-a8506fde.cjs.js.map
|
|
@@ -4,8 +4,8 @@ var fs = require('fs-extra');
|
|
|
4
4
|
var path = require('path');
|
|
5
5
|
var os = require('os');
|
|
6
6
|
var tar = require('tar');
|
|
7
|
-
var index = require('./index-
|
|
8
|
-
var run = require('./run-
|
|
7
|
+
var index = require('./index-b2152549.cjs.js');
|
|
8
|
+
var run = require('./run-8388d249.cjs.js');
|
|
9
9
|
|
|
10
10
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
11
11
|
|
|
@@ -18,29 +18,32 @@ const UNSAFE_PACKAGES = [
|
|
|
18
18
|
];
|
|
19
19
|
async function createDistWorkspace(packageNames, options = {}) {
|
|
20
20
|
var _a, _b, _c;
|
|
21
|
-
const targetDir = (_a = options.targetDir) != null ? _a : await fs__default[
|
|
21
|
+
const targetDir = (_a = options.targetDir) != null ? _a : await fs__default["default"].mkdtemp(path.resolve(os.tmpdir(), "dist-workspace"));
|
|
22
22
|
const targets = await findTargetPackages(packageNames);
|
|
23
23
|
if (options.buildDependencies) {
|
|
24
24
|
const exclude = (_b = options.buildExcludes) != null ? _b : [];
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
const toBuild = targets.filter((target) => !exclude.includes(target.name));
|
|
26
|
+
if (toBuild.length > 0) {
|
|
27
|
+
const scopeArgs = toBuild.flatMap((target) => ["--scope", target.name]);
|
|
28
|
+
const lernaArgs = options.parallel && Number.isInteger(options.parallel) ? ["--concurrency", options.parallel.toString()] : [];
|
|
29
|
+
await run.run("yarn", ["lerna", ...lernaArgs, "run", ...scopeArgs, "build"], {
|
|
30
|
+
cwd: index.paths.targetRoot
|
|
31
|
+
});
|
|
32
|
+
}
|
|
30
33
|
}
|
|
31
34
|
await moveToDistWorkspace(targetDir, targets);
|
|
32
35
|
const files = (_c = options.files) != null ? _c : ["yarn.lock", "package.json"];
|
|
33
36
|
for (const file of files) {
|
|
34
37
|
const src = typeof file === "string" ? file : file.src;
|
|
35
38
|
const dest = typeof file === "string" ? file : file.dest;
|
|
36
|
-
await fs__default[
|
|
39
|
+
await fs__default["default"].copy(index.paths.resolveTargetRoot(src), path.resolve(targetDir, dest));
|
|
37
40
|
}
|
|
38
41
|
if (options.skeleton) {
|
|
39
42
|
const skeletonFiles = targets.map((target) => {
|
|
40
43
|
const dir = path.relative(index.paths.targetRoot, target.location);
|
|
41
44
|
return path.join(dir, "package.json");
|
|
42
45
|
});
|
|
43
|
-
await tar__default[
|
|
46
|
+
await tar__default["default"].create({
|
|
44
47
|
file: path.resolve(targetDir, options.skeleton),
|
|
45
48
|
cwd: targetDir,
|
|
46
49
|
portable: true,
|
|
@@ -58,24 +61,24 @@ async function moveToDistWorkspace(workspaceDir, localPackages) {
|
|
|
58
61
|
cwd: target.location
|
|
59
62
|
});
|
|
60
63
|
if (target.scripts.postpack) {
|
|
61
|
-
await run.run("yarn", ["postpack"], {cwd: target.location});
|
|
64
|
+
await run.run("yarn", ["postpack"], { cwd: target.location });
|
|
62
65
|
}
|
|
63
66
|
const outputDir = path.relative(index.paths.targetRoot, target.location);
|
|
64
67
|
const absoluteOutputPath = path.resolve(workspaceDir, outputDir);
|
|
65
|
-
await fs__default[
|
|
66
|
-
await tar__default[
|
|
68
|
+
await fs__default["default"].ensureDir(absoluteOutputPath);
|
|
69
|
+
await tar__default["default"].extract({
|
|
67
70
|
file: archivePath,
|
|
68
71
|
cwd: absoluteOutputPath,
|
|
69
72
|
strip: 1
|
|
70
73
|
});
|
|
71
|
-
await fs__default[
|
|
74
|
+
await fs__default["default"].remove(archivePath);
|
|
72
75
|
if (target.get("bundled")) {
|
|
73
|
-
const pkgJson = await fs__default[
|
|
76
|
+
const pkgJson = await fs__default["default"].readJson(path.resolve(absoluteOutputPath, "package.json"));
|
|
74
77
|
delete pkgJson.dependencies;
|
|
75
78
|
delete pkgJson.devDependencies;
|
|
76
79
|
delete pkgJson.peerDependencies;
|
|
77
80
|
delete pkgJson.optionalDependencies;
|
|
78
|
-
await fs__default[
|
|
81
|
+
await fs__default["default"].writeJson(path.resolve(absoluteOutputPath, "package.json"), pkgJson, {
|
|
79
82
|
spaces: 2
|
|
80
83
|
});
|
|
81
84
|
}
|
|
@@ -89,12 +92,12 @@ async function moveToDistWorkspace(workspaceDir, localPackages) {
|
|
|
89
92
|
}
|
|
90
93
|
async function findTargetPackages(pkgNames) {
|
|
91
94
|
var _a;
|
|
92
|
-
const {Project} = require("@lerna/project");
|
|
93
|
-
const {PackageGraph} = require("@lerna/package-graph");
|
|
95
|
+
const { Project } = require("@lerna/project");
|
|
96
|
+
const { PackageGraph } = require("@lerna/package-graph");
|
|
94
97
|
const project = new Project(index.paths.targetDir);
|
|
95
98
|
const packages = await project.getPackages();
|
|
96
99
|
const graph = new PackageGraph(packages);
|
|
97
|
-
const targets = new Map();
|
|
100
|
+
const targets = /* @__PURE__ */ new Map();
|
|
98
101
|
const searchNames = pkgNames.slice();
|
|
99
102
|
while (searchNames.length) {
|
|
100
103
|
const name = searchNames.pop();
|
|
@@ -117,4 +120,4 @@ async function findTargetPackages(pkgNames) {
|
|
|
117
120
|
}
|
|
118
121
|
|
|
119
122
|
exports.createDistWorkspace = createDistWorkspace;
|
|
120
|
-
//# sourceMappingURL=index-
|
|
123
|
+
//# sourceMappingURL=index-33d9cbba.cjs.js.map
|