@backstage/cli 0.10.0 → 0.10.4

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 (43) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/config/jest.js +5 -3
  3. package/dist/cjs/{Lockfile-80f0eec4.cjs.js → Lockfile-35661afa.cjs.js} +18 -18
  4. package/dist/cjs/{build-555a7349.cjs.js → build-16f16d70.cjs.js} +9 -9
  5. package/dist/cjs/{build-8652aa69.cjs.js → build-ba4675b9.cjs.js} +8 -7
  6. package/dist/cjs/{build-be463597.cjs.js → build-e7dbdd80.cjs.js} +23 -23
  7. package/dist/cjs/{build-b5fb2b35.cjs.js → build-f3921423.cjs.js} +8 -7
  8. package/dist/cjs/{buildWorkspace-79c93924.cjs.js → buildWorkspace-a573304e.cjs.js} +6 -6
  9. package/dist/cjs/{bump-53a961f8.cjs.js → bump-0acacde9.cjs.js} +36 -36
  10. package/dist/cjs/{bundle-64a797f5.cjs.js → bundle-8bcde9c4.cjs.js} +15 -15
  11. package/dist/cjs/{clean-a28705b5.cjs.js → clean-f5d3a3ff.cjs.js} +6 -6
  12. package/dist/cjs/{config-3816244a.cjs.js → config-02308249.cjs.js} +17 -9
  13. package/dist/cjs/{create-d5e65154.cjs.js → create-2c1328b1.cjs.js} +41 -41
  14. package/dist/cjs/{createPlugin-77a95bbd.cjs.js → createPlugin-33636b2b.cjs.js} +31 -31
  15. package/dist/cjs/{dev-3b68b882.cjs.js → dev-c74959e4.cjs.js} +8 -8
  16. package/dist/cjs/{diff-7238cc6c.cjs.js → diff-d393a7d6.cjs.js} +39 -32
  17. package/dist/cjs/{docs-f46d6945.cjs.js → docs-43abe831.cjs.js} +6 -6
  18. package/dist/cjs/{index-8a512334.cjs.js → index-60792ea9.cjs.js} +65 -68
  19. package/dist/cjs/{index-05328067.cjs.js → index-d1f94b33.cjs.js} +15 -15
  20. package/dist/cjs/{index-c8a3517a.cjs.js → index-f5dcae68.cjs.js} +14 -14
  21. package/dist/cjs/{info-a069f3b4.cjs.js → info-f260605b.cjs.js} +6 -6
  22. package/dist/cjs/{install-43a8076b.cjs.js → install-db22d18d.cjs.js} +60 -33
  23. package/dist/cjs/{lint-60658813.cjs.js → lint-0c8dd45e.cjs.js} +5 -5
  24. package/dist/cjs/{lint-0053aded.cjs.js → lint-f4a40773.cjs.js} +7 -7
  25. package/dist/cjs/{pack-a4246579.cjs.js → pack-f5669e4f.cjs.js} +6 -6
  26. package/dist/cjs/{packager-b1a183ad.cjs.js → packager-ce069fd1.cjs.js} +37 -35
  27. package/dist/cjs/{packages-562fcd14.cjs.js → packages-587c99dd.cjs.js} +5 -5
  28. package/dist/cjs/{paths-f77bdf66.cjs.js → paths-8d6dfec1.cjs.js} +62 -46
  29. package/dist/cjs/{print-db876002.cjs.js → print-5db03c66.cjs.js} +5 -5
  30. package/dist/cjs/{removePlugin-1379b63a.cjs.js → removePlugin-5984ee26.cjs.js} +30 -30
  31. package/dist/cjs/{run-bacdaaf1.cjs.js → run-8b1e277a.cjs.js} +5 -5
  32. package/dist/cjs/{schema-3fe57ce7.cjs.js → schema-37d6a972.cjs.js} +5 -5
  33. package/dist/cjs/{serve-e89d4ea4.cjs.js → serve-aaec7087.cjs.js} +15 -15
  34. package/dist/cjs/{serve-a9cf4184.cjs.js → serve-bfb3e982.cjs.js} +10 -10
  35. package/dist/cjs/{server-4f0e40d3.cjs.js → server-d9492b36.cjs.js} +6 -6
  36. package/dist/cjs/{svgrTemplate-2d0d15cf.cjs.js → svgrTemplate-f19e974c.cjs.js} +3 -3
  37. package/dist/cjs/{tasks-29b7d09e.cjs.js → tasks-94b21b51.cjs.js} +29 -29
  38. package/dist/cjs/{testCommand-5602a58f.cjs.js → testCommand-0c162b80.cjs.js} +4 -4
  39. package/dist/cjs/{validate-9b1a5456.cjs.js → validate-89d918a7.cjs.js} +4 -4
  40. package/dist/index.cjs.js +1 -1
  41. package/package.json +18 -21
  42. package/templates/default-plugin/package.json.hbs +3 -2
  43. package/templates/serve_index.html +1 -1
@@ -4,11 +4,11 @@ var os = require('os');
4
4
  var fs = require('fs-extra');
5
5
  var path = require('path');
6
6
  var tar = require('tar');
7
- var index$1 = require('./index-05328067.cjs.js');
8
- var index = require('./index-8a512334.cjs.js');
7
+ var index$1 = require('./index-d1f94b33.cjs.js');
8
+ var index = require('./index-60792ea9.cjs.js');
9
9
  var parallel = require('./parallel-a4714c72.cjs.js');
10
- var packager = require('./packager-b1a183ad.cjs.js');
11
- require('./run-bacdaaf1.cjs.js');
10
+ var packager = require('./packager-ce069fd1.cjs.js');
11
+ require('./run-8b1e277a.cjs.js');
12
12
  require('child_process');
13
13
  require('util');
14
14
  require('@backstage/errors');
@@ -28,7 +28,7 @@ require('rollup-plugin-dts');
28
28
  require('@rollup/plugin-json');
29
29
  require('@rollup/plugin-yaml');
30
30
  require('rollup-pluginutils');
31
- require('./svgrTemplate-2d0d15cf.cjs.js');
31
+ require('./svgrTemplate-f19e974c.cjs.js');
32
32
 
33
33
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
34
34
 
@@ -40,9 +40,9 @@ const BUNDLE_FILE = "bundle.tar.gz";
40
40
  const SKELETON_FILE = "skeleton.tar.gz";
41
41
  var bundle = async (cmd) => {
42
42
  const targetDir = index.paths.resolveTarget("dist");
43
- const pkg = await fs__default['default'].readJson(index.paths.resolveTarget("package.json"));
44
- await packager.buildPackage({outputs: new Set([packager.Output.cjs])});
45
- const tmpDir = await fs__default['default'].mkdtemp(path.resolve(os__default['default'].tmpdir(), "backstage-bundle"));
43
+ const pkg = await fs__default["default"].readJson(index.paths.resolveTarget("package.json"));
44
+ await packager.buildPackage({ outputs: /* @__PURE__ */ new Set([packager.Output.cjs]) });
45
+ const tmpDir = await fs__default["default"].mkdtemp(path.resolve(os__default["default"].tmpdir(), "backstage-bundle"));
46
46
  try {
47
47
  await index$1.createDistWorkspace([pkg.name], {
48
48
  targetDir: tmpDir,
@@ -51,10 +51,10 @@ var bundle = async (cmd) => {
51
51
  parallel: parallel.parseParallel(process.env[parallel.PARALLEL_ENV_VAR]),
52
52
  skeleton: SKELETON_FILE
53
53
  });
54
- await fs__default['default'].remove(targetDir);
55
- await fs__default['default'].mkdir(targetDir);
56
- await fs__default['default'].move(path.resolve(tmpDir, SKELETON_FILE), path.resolve(targetDir, SKELETON_FILE));
57
- await tar__default['default'].create({
54
+ await fs__default["default"].remove(targetDir);
55
+ await fs__default["default"].mkdir(targetDir);
56
+ await fs__default["default"].move(path.resolve(tmpDir, SKELETON_FILE), path.resolve(targetDir, SKELETON_FILE));
57
+ await tar__default["default"].create({
58
58
  file: path.resolve(targetDir, BUNDLE_FILE),
59
59
  cwd: tmpDir,
60
60
  portable: true,
@@ -62,9 +62,9 @@ var bundle = async (cmd) => {
62
62
  gzip: true
63
63
  }, [""]);
64
64
  } finally {
65
- await fs__default['default'].remove(tmpDir);
65
+ await fs__default["default"].remove(tmpDir);
66
66
  }
67
67
  };
68
68
 
69
- exports.default = bundle;
70
- //# sourceMappingURL=bundle-64a797f5.cjs.js.map
69
+ exports["default"] = bundle;
70
+ //# sourceMappingURL=bundle-8bcde9c4.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-8a512334.cjs.js');
4
+ var index = require('./index-60792ea9.cjs.js');
5
5
  require('commander');
6
6
  require('chalk');
7
7
  require('semver');
@@ -14,10 +14,10 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
14
14
  var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
15
15
 
16
16
  async function clean() {
17
- await fs__default['default'].remove(index.paths.resolveTarget("dist"));
18
- await fs__default['default'].remove(index.paths.resolveTarget("dist-types"));
19
- await fs__default['default'].remove(index.paths.resolveTarget("coverage"));
17
+ await fs__default["default"].remove(index.paths.resolveTarget("dist"));
18
+ await fs__default["default"].remove(index.paths.resolveTarget("dist-types"));
19
+ await fs__default["default"].remove(index.paths.resolveTarget("coverage"));
20
20
  }
21
21
 
22
- exports.default = clean;
23
- //# sourceMappingURL=clean-a28705b5.cjs.js.map
22
+ exports["default"] = clean;
23
+ //# sourceMappingURL=clean-f5d3a3ff.cjs.js.map
@@ -2,7 +2,7 @@
2
2
 
3
3
  var configLoader = require('@backstage/config-loader');
4
4
  var config = require('@backstage/config');
5
- var index = require('./index-8a512334.cjs.js');
5
+ var index = require('./index-60792ea9.cjs.js');
6
6
 
7
7
  function isValidUrl(url) {
8
8
  try {
@@ -17,21 +17,29 @@ async function loadCliConfig(options) {
17
17
  const configTargets = [];
18
18
  options.args.forEach((arg) => {
19
19
  if (!isValidUrl(arg)) {
20
- configTargets.push({path: index.paths.resolveTarget(arg)});
20
+ configTargets.push({ path: index.paths.resolveTarget(arg) });
21
21
  }
22
22
  });
23
- const {Project} = require("@lerna/project");
23
+ const { Project } = require("@lerna/project");
24
24
  const project = new Project(index.paths.targetDir);
25
25
  const packages = await project.getPackages();
26
- const localPackageNames = options.fromPackage ? findPackages(packages, options.fromPackage) : packages.map((p) => p.name);
26
+ let localPackageNames;
27
+ if (options.fromPackage) {
28
+ if (packages.length) {
29
+ localPackageNames = findPackages(packages, options.fromPackage);
30
+ } else {
31
+ localPackageNames = [options.fromPackage];
32
+ }
33
+ } else {
34
+ localPackageNames = packages.map((p) => p.name);
35
+ }
27
36
  const schema = await configLoader.loadConfigSchema({
28
37
  dependencies: localPackageNames,
29
38
  packagePaths: [index.paths.resolveTargetRoot("package.json")]
30
39
  });
31
- const {appConfigs} = await configLoader.loadConfig({
40
+ const { appConfigs } = await configLoader.loadConfig({
32
41
  experimentalEnvFunc: options.mockEnv ? async (name) => process.env[name] || "x" : void 0,
33
42
  configRoot: index.paths.targetRoot,
34
- configPaths: [],
35
43
  configTargets
36
44
  });
37
45
  process.stderr.write(`Loaded config from ${appConfigs.map((c) => c.context).join(", ")}
@@ -60,9 +68,9 @@ async function loadCliConfig(options) {
60
68
  }
61
69
  }
62
70
  function findPackages(packages, fromPackage) {
63
- const {PackageGraph} = require("@lerna/package-graph");
71
+ const { PackageGraph } = require("@lerna/package-graph");
64
72
  const graph = new PackageGraph(packages);
65
- const targets = new Set();
73
+ const targets = /* @__PURE__ */ new Set();
66
74
  const searchNames = [fromPackage];
67
75
  while (searchNames.length) {
68
76
  const name = searchNames.pop();
@@ -82,4 +90,4 @@ function findPackages(packages, fromPackage) {
82
90
  }
83
91
 
84
92
  exports.loadCliConfig = loadCliConfig;
85
- //# sourceMappingURL=config-3816244a.cjs.js.map
93
+ //# sourceMappingURL=config-02308249.cjs.js.map
@@ -7,10 +7,10 @@ var chalk = require('chalk');
7
7
  var inquirer = require('inquirer');
8
8
  var camelCase = require('lodash/camelCase');
9
9
  var upperFirst = require('lodash/upperFirst');
10
- var index = require('./index-8a512334.cjs.js');
11
- var tasks = require('./tasks-29b7d09e.cjs.js');
12
- var Lockfile = require('./Lockfile-80f0eec4.cjs.js');
13
- require('./run-bacdaaf1.cjs.js');
10
+ var index = require('./index-60792ea9.cjs.js');
11
+ var tasks = require('./tasks-94b21b51.cjs.js');
12
+ var Lockfile = require('./Lockfile-35661afa.cjs.js');
13
+ require('./run-8b1e277a.cjs.js');
14
14
  var partition = require('lodash/partition');
15
15
  var errors = require('@backstage/errors');
16
16
  require('commander');
@@ -73,7 +73,7 @@ function ownerPrompt() {
73
73
  }
74
74
 
75
75
  async function executePluginPackageTemplate(ctx, options) {
76
- const {targetDir} = options;
76
+ const { targetDir } = options;
77
77
  let lockfile;
78
78
  try {
79
79
  lockfile = await Lockfile.Lockfile.load(index.paths.resolveTargetRoot("yarn.lock"));
@@ -82,8 +82,8 @@ async function executePluginPackageTemplate(ctx, options) {
82
82
  tasks.Task.section("Checking Prerequisites");
83
83
  const shortPluginDir = path.relative(index.paths.targetRoot, targetDir);
84
84
  await tasks.Task.forItem("availability", shortPluginDir, async () => {
85
- if (await fs__default['default'].pathExists(targetDir)) {
86
- throw new Error(`A package with the same plugin ID already exists at ${chalk__default['default'].cyan(shortPluginDir)}. Please try again with a different ID.`);
85
+ if (await fs__default["default"].pathExists(targetDir)) {
86
+ throw new Error(`A package with the same plugin ID already exists at ${chalk__default["default"].cyan(shortPluginDir)}. Please try again with a different ID.`);
87
87
  }
88
88
  });
89
89
  const tempDir = await tasks.Task.forItem("creating", "temp dir", async () => {
@@ -92,13 +92,13 @@ async function executePluginPackageTemplate(ctx, options) {
92
92
  tasks.Task.section("Executing Template");
93
93
  await tasks.templatingTask(index.paths.resolveOwn("templates", options.templateName), tempDir, options.values, index.createPackageVersionProvider(lockfile));
94
94
  const pkgJsonPath = path.resolve(tempDir, "package.json");
95
- if (await fs__default['default'].pathExists(pkgJsonPath)) {
96
- const pkgJson = await fs__default['default'].readJson(pkgJsonPath);
97
- await fs__default['default'].writeJson(pkgJsonPath, pkgJson, {spaces: 2});
95
+ if (await fs__default["default"].pathExists(pkgJsonPath)) {
96
+ const pkgJson = await fs__default["default"].readJson(pkgJsonPath);
97
+ await fs__default["default"].writeJson(pkgJsonPath, pkgJson, { spaces: 2 });
98
98
  }
99
99
  tasks.Task.section("Installing");
100
100
  await tasks.Task.forItem("moving", shortPluginDir, async () => {
101
- await fs__default['default'].move(tempDir, targetDir).catch((error) => {
101
+ await fs__default["default"].move(tempDir, targetDir).catch((error) => {
102
102
  throw new Error(`Failed to move package from ${tempDir} to ${targetDir}, ${error.message}`);
103
103
  });
104
104
  });
@@ -113,11 +113,11 @@ const frontendPlugin = createFactory({
113
113
  }),
114
114
  optionsPrompts: [pluginIdPrompt(), ownerPrompt()],
115
115
  async create(options, ctx) {
116
- const {id} = options;
116
+ const { id } = options;
117
117
  const name = ctx.scope ? `@${ctx.scope}/plugin-${id}` : `backstage-plugin-${id}`;
118
- const extensionName = `${upperFirst__default['default'](camelCase__default['default'](id))}Page`;
118
+ const extensionName = `${upperFirst__default["default"](camelCase__default["default"](id))}Page`;
119
119
  tasks.Task.log();
120
- tasks.Task.log(`Creating backend plugin ${chalk__default['default'].cyan(name)}`);
120
+ tasks.Task.log(`Creating backend plugin ${chalk__default["default"].cyan(name)}`);
121
121
  const targetDir = ctx.isMonoRepo ? index.paths.resolveTargetRoot("plugins", id) : index.paths.resolveTargetRoot(`backstage-plugin-${id}`);
122
122
  await executePluginPackageTemplate(ctx, {
123
123
  targetDir,
@@ -126,13 +126,13 @@ const frontendPlugin = createFactory({
126
126
  id,
127
127
  name,
128
128
  extensionName,
129
- pluginVar: `${camelCase__default['default'](id)}Plugin`,
129
+ pluginVar: `${camelCase__default["default"](id)}Plugin`,
130
130
  pluginVersion: ctx.defaultVersion,
131
131
  privatePackage: ctx.private,
132
132
  npmRegistry: ctx.npmRegistry
133
133
  }
134
134
  });
135
- if (await fs__default['default'].pathExists(index.paths.resolveTargetRoot("packages/app"))) {
135
+ if (await fs__default["default"].pathExists(index.paths.resolveTargetRoot("packages/app"))) {
136
136
  await tasks.Task.forItem("app", "adding dependency", async () => {
137
137
  await tasks.addPackageDependency(index.paths.resolveTargetRoot("packages/app/package.json"), {
138
138
  dependencies: {
@@ -143,10 +143,10 @@ const frontendPlugin = createFactory({
143
143
  await tasks.Task.forItem("app", "adding import", async () => {
144
144
  var _a;
145
145
  const pluginsFilePath = index.paths.resolveTargetRoot("packages/app/src/App.tsx");
146
- if (!await fs__default['default'].pathExists(pluginsFilePath)) {
146
+ if (!await fs__default["default"].pathExists(pluginsFilePath)) {
147
147
  return;
148
148
  }
149
- const content = await fs__default['default'].readFile(pluginsFilePath, "utf8");
149
+ const content = await fs__default["default"].readFile(pluginsFilePath, "utf8");
150
150
  const revLines = content.split("\n").reverse();
151
151
  const lastImportIndex = revLines.findIndex((line) => line.match(/ from ("|').*("|')/));
152
152
  const lastRouteIndex = revLines.findIndex((line) => line.match(/<\/FlatRoutes/));
@@ -161,14 +161,14 @@ const frontendPlugin = createFactory({
161
161
  revLines.splice(lastRouteIndex + 1, 0, indentation + componentLine);
162
162
  }
163
163
  const newContent = revLines.reverse().join("\n");
164
- await fs__default['default'].writeFile(pluginsFilePath, newContent, "utf8");
164
+ await fs__default["default"].writeFile(pluginsFilePath, newContent, "utf8");
165
165
  }
166
166
  });
167
167
  }
168
168
  if (options.owner) {
169
169
  await tasks.addCodeownersEntry(`/plugins/${id}`, options.owner);
170
170
  }
171
- await tasks.Task.forCommand("yarn install", {cwd: targetDir, optional: true});
171
+ await tasks.Task.forCommand("yarn install", { cwd: targetDir, optional: true });
172
172
  await tasks.Task.forCommand("yarn lint --fix", {
173
173
  cwd: targetDir,
174
174
  optional: true
@@ -187,7 +187,7 @@ const backendPlugin = createFactory({
187
187
  const id = `${options.id}-backend`;
188
188
  const name = ctx.scope ? `@${ctx.scope}/plugin-${id}` : `backstage-plugin-${id}`;
189
189
  tasks.Task.log();
190
- tasks.Task.log(`Creating backend plugin ${chalk__default['default'].cyan(name)}`);
190
+ tasks.Task.log(`Creating backend plugin ${chalk__default["default"].cyan(name)}`);
191
191
  const targetDir = ctx.isMonoRepo ? index.paths.resolveTargetRoot("plugins", id) : index.paths.resolveTargetRoot(`backstage-plugin-${id}`);
192
192
  await executePluginPackageTemplate(ctx, {
193
193
  targetDir,
@@ -195,13 +195,13 @@ const backendPlugin = createFactory({
195
195
  values: {
196
196
  id,
197
197
  name,
198
- pluginVar: `${camelCase__default['default'](id)}Plugin`,
198
+ pluginVar: `${camelCase__default["default"](id)}Plugin`,
199
199
  pluginVersion: ctx.defaultVersion,
200
200
  privatePackage: ctx.private,
201
201
  npmRegistry: ctx.npmRegistry
202
202
  }
203
203
  });
204
- if (await fs__default['default'].pathExists(index.paths.resolveTargetRoot("packages/backend"))) {
204
+ if (await fs__default["default"].pathExists(index.paths.resolveTargetRoot("packages/backend"))) {
205
205
  await tasks.Task.forItem("backend", "adding dependency", async () => {
206
206
  await tasks.addPackageDependency(index.paths.resolveTargetRoot("packages/backend/package.json"), {
207
207
  dependencies: {
@@ -213,7 +213,7 @@ const backendPlugin = createFactory({
213
213
  if (options.owner) {
214
214
  await tasks.addCodeownersEntry(`/plugins/${id}`, options.owner);
215
215
  }
216
- await tasks.Task.forCommand("yarn install", {cwd: targetDir, optional: true});
216
+ await tasks.Task.forCommand("yarn install", { cwd: targetDir, optional: true });
217
217
  await tasks.Task.forCommand("yarn lint --fix", {
218
218
  cwd: targetDir,
219
219
  optional: true
@@ -229,11 +229,11 @@ const pluginCommon = createFactory({
229
229
  }),
230
230
  optionsPrompts: [pluginIdPrompt(), ownerPrompt()],
231
231
  async create(options, ctx) {
232
- const {id} = options;
232
+ const { id } = options;
233
233
  const suffix = `${id}-common`;
234
234
  const name = ctx.scope ? `@${ctx.scope}/plugin-${suffix}` : `backstage-plugin-${suffix}`;
235
235
  tasks.Task.log();
236
- tasks.Task.log(`Creating backend plugin ${chalk__default['default'].cyan(name)}`);
236
+ tasks.Task.log(`Creating backend plugin ${chalk__default["default"].cyan(name)}`);
237
237
  const targetDir = ctx.isMonoRepo ? index.paths.resolveTargetRoot("plugins", suffix) : index.paths.resolveTargetRoot(`backstage-plugin-${suffix}`);
238
238
  await executePluginPackageTemplate(ctx, {
239
239
  targetDir,
@@ -249,7 +249,7 @@ const pluginCommon = createFactory({
249
249
  if (options.owner) {
250
250
  await tasks.addCodeownersEntry(`/plugins/${suffix}`, options.owner);
251
251
  }
252
- await tasks.Task.forCommand("yarn install", {cwd: targetDir, optional: true});
252
+ await tasks.Task.forCommand("yarn install", { cwd: targetDir, optional: true });
253
253
  await tasks.Task.forCommand("yarn lint --fix", {
254
254
  cwd: targetDir,
255
255
  optional: true
@@ -280,7 +280,7 @@ const scaffolderModule = createFactory({
280
280
  ownerPrompt()
281
281
  ],
282
282
  async create(options, ctx) {
283
- const {id} = options;
283
+ const { id } = options;
284
284
  const slug = `scaffolder-backend-module-${id}`;
285
285
  let name = `backstage-plugin-${slug}`;
286
286
  if (ctx.scope) {
@@ -291,7 +291,7 @@ const scaffolderModule = createFactory({
291
291
  }
292
292
  }
293
293
  tasks.Task.log();
294
- tasks.Task.log(`Creating module ${chalk__default['default'].cyan(name)}`);
294
+ tasks.Task.log(`Creating module ${chalk__default["default"].cyan(name)}`);
295
295
  const targetDir = ctx.isMonoRepo ? index.paths.resolveTargetRoot("plugins", slug) : index.paths.resolveTargetRoot(`backstage-plugin-${slug}`);
296
296
  await executePluginPackageTemplate(ctx, {
297
297
  targetDir,
@@ -307,7 +307,7 @@ const scaffolderModule = createFactory({
307
307
  if (options.owner) {
308
308
  await tasks.addCodeownersEntry(`/plugins/${slug}`, options.owner);
309
309
  }
310
- await tasks.Task.forCommand("yarn install", {cwd: targetDir, optional: true});
310
+ await tasks.Task.forCommand("yarn install", { cwd: targetDir, optional: true });
311
311
  await tasks.Task.forCommand("yarn lint --fix", {
312
312
  cwd: targetDir,
313
313
  optional: true
@@ -345,7 +345,7 @@ class FactoryRegistry {
345
345
  static async interactiveSelect(preselected) {
346
346
  let selected = preselected;
347
347
  if (!selected) {
348
- const answers = await inquirer__default['default'].prompt([
348
+ const answers = await inquirer__default["default"].prompt([
349
349
  {
350
350
  type: "list",
351
351
  name: "name",
@@ -374,7 +374,7 @@ class FactoryRegistry {
374
374
  };
375
375
  }
376
376
  if (factory.optionsPrompts) {
377
- const [hasAnswers, needsAnswers] = partition__default['default'](factory.optionsPrompts, (option) => option.name in currentOptions);
377
+ const [hasAnswers, needsAnswers] = partition__default["default"](factory.optionsPrompts, (option) => option.name in currentOptions);
378
378
  for (const option of hasAnswers) {
379
379
  const value = provided[option.name];
380
380
  if (option.validate) {
@@ -384,9 +384,9 @@ class FactoryRegistry {
384
384
  }
385
385
  }
386
386
  }
387
- currentOptions = await inquirer__default['default'].prompt(needsAnswers.map((option) => applyPromptMessageTransforms(option, {
388
- message: chalk__default['default'].blue,
389
- error: chalk__default['default'].red
387
+ currentOptions = await inquirer__default["default"].prompt(needsAnswers.map((option) => applyPromptMessageTransforms(option, {
388
+ message: chalk__default["default"].blue,
389
+ error: chalk__default["default"].red
390
390
  })), currentOptions);
391
391
  }
392
392
  return currentOptions;
@@ -414,7 +414,7 @@ var create = async (cmd) => {
414
414
  const options = await FactoryRegistry.populateOptions(factory, providedOptions);
415
415
  let isMonoRepo = false;
416
416
  try {
417
- const rootPackageJson = await fs__default['default'].readJson(index.paths.resolveTargetRoot("package.json"));
417
+ const rootPackageJson = await fs__default["default"].readJson(index.paths.resolveTargetRoot("package.json"));
418
418
  if (rootPackageJson.workspaces) {
419
419
  isMonoRepo = true;
420
420
  }
@@ -426,7 +426,7 @@ var create = async (cmd) => {
426
426
  }
427
427
  let defaultVersion = "0.1.0";
428
428
  try {
429
- const rootLernaJson = await fs__default['default'].readJson(index.paths.resolveTargetRoot("lerna.json"));
429
+ const rootLernaJson = await fs__default["default"].readJson(index.paths.resolveTargetRoot("lerna.json"));
430
430
  if (rootLernaJson.version) {
431
431
  defaultVersion = rootLernaJson.version;
432
432
  }
@@ -438,7 +438,7 @@ var create = async (cmd) => {
438
438
  }
439
439
  const tempDirs = new Array();
440
440
  async function createTemporaryDirectory(name) {
441
- const dir = await fs__default['default'].mkdtemp(path.join(os__default['default'].tmpdir(), name));
441
+ const dir = await fs__default["default"].mkdtemp(path.join(os__default["default"].tmpdir(), name));
442
442
  tempDirs.push(dir);
443
443
  return dir;
444
444
  }
@@ -471,7 +471,7 @@ var create = async (cmd) => {
471
471
  } finally {
472
472
  for (const dir of tempDirs) {
473
473
  try {
474
- await fs__default['default'].remove(dir);
474
+ await fs__default["default"].remove(dir);
475
475
  } catch (error) {
476
476
  console.error(`Failed to remove temporary directory '${dir}', ${error}`);
477
477
  }
@@ -479,5 +479,5 @@ var create = async (cmd) => {
479
479
  }
480
480
  };
481
481
 
482
- exports.default = create;
483
- //# sourceMappingURL=create-d5e65154.cjs.js.map
482
+ exports["default"] = create;
483
+ //# sourceMappingURL=create-2c1328b1.cjs.js.map
@@ -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-29b7d09e.cjs.js');
14
- var index = require('./index-8a512334.cjs.js');
15
- var Lockfile = require('./Lockfile-80f0eec4.cjs.js');
16
- require('./run-bacdaaf1.cjs.js');
13
+ var tasks = require('./tasks-94b21b51.cjs.js');
14
+ var index = require('./index-60792ea9.cjs.js');
15
+ var Lockfile = require('./Lockfile-35661afa.cjs.js');
16
+ require('./run-8b1e277a.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['default'].pathExists(destination)) {
39
- const existing = chalk__default['default'].cyan(destination.replace(`${index.paths.targetRoot}/`, ""));
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['default'].readFileSync(file, "utf8").split("\n").filter(Boolean).concat([exportStatement]).concat([""]).join("\n");
54
- await fs__default['default'].writeFile(file, newContents, "utf8");
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['default'].readFile(packageFile, "utf-8");
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['default'].writeFile(packageFile, newContents, "utf-8").catch((error) => {
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['default'].pathExists(pluginsFilePath)) {
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['default'].readFile(pluginsFilePath, "utf8");
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['default'].writeFile(pluginsFilePath, newContent, "utf8");
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['default'].remove(tempDir);
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['default'].cyan(command)}`);
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['default'].move(tempDir, destination).catch((error) => {
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['default'].blue("Enter an ID for the plugin [required]"),
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['default'].red("Please enter an ID for the plugin");
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['default'].red("Plugin IDs must be lowercase and contain only letters, digits, and dashes.");
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,31 +149,31 @@ var createPlugin = async (cmd) => {
149
149
  questions.push({
150
150
  type: "input",
151
151
  name: "owner",
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]"),
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
157
  const ownerIds = tasks.parseOwnerIds(value);
158
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).");
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['default'].prompt(questions);
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['default'](answers.id)}Plugin`;
169
- const extensionName = `${upperFirst__default['default'](camelCase__default['default'](answers.id))}Page`;
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['default'].pathExists(index.paths.resolveTargetRoot("lerna.json"));
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 {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" };
177
177
  let lockfile;
178
178
  try {
179
179
  lockfile = await Lockfile.Lockfile.load(index.paths.resolveTargetRoot("yarn.lock"));
@@ -185,7 +185,7 @@ var createPlugin = async (cmd) => {
185
185
  tasks.Task.section("Checking if the plugin ID is available");
186
186
  await checkExists(pluginDir);
187
187
  tasks.Task.section("Creating a temporary plugin directory");
188
- const tempDir = await fs__default['default'].mkdtemp(path.join(os__default['default'].tmpdir(), `backstage-plugin-${pluginId}`));
188
+ const tempDir = await fs__default["default"].mkdtemp(path.join(os__default["default"].tmpdir(), `backstage-plugin-${pluginId}`));
189
189
  try {
190
190
  tasks.Task.section("Preparing files");
191
191
  await tasks.templatingTask(templateDir, tempDir, {
@@ -201,7 +201,7 @@ var createPlugin = async (cmd) => {
201
201
  await movePlugin(tempDir, pluginDir, pluginId);
202
202
  tasks.Task.section("Building the plugin");
203
203
  await buildPlugin(pluginDir);
204
- if (await fs__default['default'].pathExists(appPackage) && !cmd.backend) {
204
+ if (await fs__default["default"].pathExists(appPackage) && !cmd.backend) {
205
205
  tasks.Task.section("Adding plugin as dependency in app");
206
206
  await addPluginDependencyToApp(index.paths.targetRoot, name, pluginVersion);
207
207
  tasks.Task.section("Import plugin in app");
@@ -211,7 +211,7 @@ var createPlugin = async (cmd) => {
211
211
  await tasks.addCodeownersEntry(`/plugins/${pluginId}`, answers.owner);
212
212
  }
213
213
  tasks.Task.log();
214
- tasks.Task.log(`\u{1F947} Successfully created ${chalk__default['default'].cyan(`${name}`)}`);
214
+ tasks.Task.log(`\u{1F947} Successfully created ${chalk__default["default"].cyan(`${name}`)}`);
215
215
  tasks.Task.log();
216
216
  tasks.Task.exit();
217
217
  } catch (error) {
@@ -230,6 +230,6 @@ exports.addExportStatement = addExportStatement;
230
230
  exports.addPluginDependencyToApp = addPluginDependencyToApp;
231
231
  exports.addPluginExtensionToApp = addPluginExtensionToApp;
232
232
  exports.capitalize = capitalize;
233
- exports.default = createPlugin;
233
+ exports["default"] = createPlugin;
234
234
  exports.movePlugin = movePlugin;
235
- //# sourceMappingURL=createPlugin-77a95bbd.cjs.js.map
235
+ //# sourceMappingURL=createPlugin-33636b2b.cjs.js.map