@backstage/cli 0.27.1 → 0.28.0-next.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.
Files changed (47) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/config/jest.js +114 -68
  3. package/dist/cjs/{build-D9YZ-dyI.cjs.js → build-CQdcGuBr.cjs.js} +10 -9
  4. package/dist/cjs/{buildBackend-CmtimF8a.cjs.js → buildBackend-CkhZWCz1.cjs.js} +6 -6
  5. package/dist/cjs/{buildWorkspace-C4wCq5WM.cjs.js → buildWorkspace-CZPp9oRm.cjs.js} +7 -6
  6. package/dist/cjs/{bump-BQ6YRL6D.cjs.js → bump-BHEh5ytx.cjs.js} +73 -9
  7. package/dist/cjs/{clean-BllZTky1.cjs.js → clean-W6nxsHeK.cjs.js} +2 -2
  8. package/dist/cjs/{clean-CVl--Ec9.cjs.js → clean-a6Q4k9Vm.cjs.js} +2 -2
  9. package/dist/cjs/{config-BMsjTUVf.cjs.js → config-DBpmZirN.cjs.js} +2 -2
  10. package/dist/cjs/{createDistWorkspace-DxOWPD6z.cjs.js → createDistWorkspace-DdHPGSMS.cjs.js} +8 -6
  11. package/dist/cjs/{docs-DPzCP6Jp.cjs.js → docs-BGyA6jwW.cjs.js} +3 -3
  12. package/dist/cjs/{entryPoints-CoHH4lBA.cjs.js → entryPoints-coip0t-x.cjs.js} +4 -1
  13. package/dist/cjs/{fix-BM8I_DZ2.cjs.js → fix-COitqgqm.cjs.js} +2 -2
  14. package/dist/cjs/{index-CXG8-26G.cjs.js → index-BXv4Xa2e.cjs.js} +15 -12
  15. package/dist/cjs/{index-Cw0lUK20.cjs.js → index-CGuAP7nv.cjs.js} +11 -10
  16. package/dist/cjs/{index-DmUbBCFk.cjs.js → index-b1ouG3q6.cjs.js} +62 -82
  17. package/dist/cjs/{index-BgEQ8aeF.cjs.js → index-j193pV_Y.cjs.js} +2 -2
  18. package/dist/cjs/{info-FKrzx-9W.cjs.js → info-DuAv1Tsx.cjs.js} +5 -6
  19. package/dist/cjs/{lint-6vrbdjyg.cjs.js → lint-BwiDJkjE.cjs.js} +2 -2
  20. package/dist/cjs/{lint-Cm_9pg85.cjs.js → lint-Dsiocf9K.cjs.js} +2 -2
  21. package/dist/cjs/{list-deprecations-C6R3rEyS.cjs.js → list-deprecations-CtUaQgaP.cjs.js} +2 -2
  22. package/dist/cjs/{moduleFederation-8XXecxLD.cjs.js → moduleFederation-DmStnvEg.cjs.js} +4 -4
  23. package/dist/cjs/{new-DJUBFwiF.cjs.js → new-CEnFhTT-.cjs.js} +336 -97
  24. package/dist/cjs/{pack-BqFGqZb5.cjs.js → pack-XLRcGJqH.cjs.js} +5 -4
  25. package/dist/cjs/{packageExports-DvjdOWjC.cjs.js → packageExports-BJBwdvUH.cjs.js} +3 -3
  26. package/dist/cjs/{packageLintConfigs-DGkvTpBd.cjs.js → packageLintConfigs-DeUGBP17.cjs.js} +3 -3
  27. package/dist/cjs/{packageRole-CHz7zkIQ.cjs.js → packageRole-Iuv9NRii.cjs.js} +2 -2
  28. package/dist/cjs/{print-CQU7JzAh.cjs.js → print-Dd6aChXU.cjs.js} +3 -3
  29. package/dist/cjs/{productionPack-BWU8WkGs.cjs.js → productionPack-BxoMbBkH.cjs.js} +106 -5
  30. package/dist/cjs/{role-8b0z7P0n.cjs.js → role-BjiBExhi.cjs.js} +2 -2
  31. package/dist/cjs/{run-CSt1n0F1.cjs.js → run-CpZGNJQr.cjs.js} +2 -2
  32. package/dist/cjs/{schema-B4250t0W.cjs.js → schema-D93FRhBL.cjs.js} +3 -3
  33. package/dist/cjs/{test-Diil1uTk.cjs.js → test-COxIko8N.cjs.js} +3 -3
  34. package/dist/cjs/{test-DVUsmgyZ.cjs.js → test-JcLI2pPM.cjs.js} +3 -3
  35. package/dist/cjs/{validate-DDIGkK2r.cjs.js → validate-CELljsEX.cjs.js} +3 -3
  36. package/dist/cjs/{Lockfile-B4mqBkH6.cjs.js → yarn-6FNAgNBK.cjs.js} +31 -1
  37. package/dist/index.cjs.js +1 -1
  38. package/package.json +21 -22
  39. package/dist/cjs/codeowners-FKKtpciN.cjs.js +0 -91
  40. package/dist/cjs/createPlugin-Dj7O_us6.cjs.js +0 -280
  41. package/dist/cjs/diff-Drt115Zb.cjs.js +0 -436
  42. package/dist/cjs/index-DRp-18FB.cjs.js +0 -1027
  43. package/dist/cjs/install-BMA3RshT.cjs.js +0 -268
  44. package/dist/cjs/lint-Dkx_fBkS.cjs.js +0 -10
  45. package/dist/cjs/packages-Cuogjl7j.cjs.js +0 -75
  46. package/dist/cjs/tasks-DtAiMv5G.cjs.js +0 -188
  47. package/dist/cjs/yarn-Ukl9MOS0.cjs.js +0 -34
@@ -1,268 +0,0 @@
1
- 'use strict';
2
-
3
- var fs = require('fs-extra');
4
- require('@yarnpkg/parsers');
5
- require('@yarnpkg/lockfile');
6
- var packages = require('./packages-Cuogjl7j.cjs.js');
7
- var index = require('./index-DmUbBCFk.cjs.js');
8
- var chalk = require('chalk');
9
- var sortBy = require('lodash/sortBy');
10
- var groupBy = require('lodash/groupBy');
11
- var run = require('./run-CSt1n0F1.cjs.js');
12
- require('minimatch');
13
- require('@manypkg/get-packages');
14
- require('./yarn-Ukl9MOS0.cjs.js');
15
- require('@backstage/errors');
16
- require('child_process');
17
- require('util');
18
- require('commander');
19
- require('semver');
20
- require('@backstage/cli-common');
21
-
22
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
23
-
24
- var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
25
- var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
26
- var sortBy__default = /*#__PURE__*/_interopDefaultCompat(sortBy);
27
- var groupBy__default = /*#__PURE__*/_interopDefaultCompat(groupBy);
28
-
29
- function createStepDefinition(config) {
30
- return config;
31
- }
32
-
33
- class AppRouteStep {
34
- constructor(data) {
35
- this.data = data;
36
- }
37
- async run() {
38
- const { path, element, packageName } = this.data;
39
- const appTsxPath = index.paths.resolveTargetRoot("packages/app/src/App.tsx");
40
- const contents = await fs__default.default.readFile(appTsxPath, "utf-8");
41
- let failed = false;
42
- const contentsWithRoute = contents.replace(
43
- /(\s*)<\/FlatRoutes>/,
44
- `$1 <Route path="${path}" element={${element}} />$1</FlatRoutes>`
45
- );
46
- if (contentsWithRoute === contents) {
47
- failed = true;
48
- }
49
- const componentName = element.match(/[A-Za-z0-9]+/)?.[0];
50
- if (!componentName) {
51
- throw new Error(`Could not find component name in ${element}`);
52
- }
53
- const contentsWithImport = contentsWithRoute.replace(
54
- /^import /m,
55
- `import { ${componentName} } from '${packageName}';
56
- import `
57
- );
58
- if (contentsWithImport === contentsWithRoute) {
59
- failed = true;
60
- }
61
- if (failed) {
62
- console.log(
63
- "Failed to automatically add a route to package/app/src/App.tsx"
64
- );
65
- console.log(`Action needed, add the following:`);
66
- console.log(`1. import { ${componentName} } from '${packageName}';`);
67
- console.log(`2. <Route path="${path}" element={${element}} />`);
68
- } else {
69
- await fs__default.default.writeFile(appTsxPath, contentsWithImport);
70
- }
71
- }
72
- }
73
- const appRoute = createStepDefinition({
74
- type: "app-route",
75
- deserialize(obj, pkg) {
76
- const { path, element } = obj;
77
- if (!path || typeof path !== "string") {
78
- throw new Error("Invalid install step, 'path' must be a string");
79
- }
80
- if (!element || typeof element !== "string") {
81
- throw new Error("Invalid install step, 'element' must be a string");
82
- }
83
- return new AppRouteStep({ path, element, packageName: pkg.name });
84
- },
85
- create(data) {
86
- return new AppRouteStep(data);
87
- }
88
- });
89
-
90
- class DependenciesStep {
91
- constructor(data) {
92
- this.data = data;
93
- }
94
- async run() {
95
- const { dependencies: dependencies2 } = this.data;
96
- const byTarget = groupBy__default.default(dependencies2, "target");
97
- for (const [target, deps] of Object.entries(byTarget)) {
98
- const pkgPath = index.paths.resolveTargetRoot(target, "package.json");
99
- const pkgJson = await fs__default.default.readJson(pkgPath);
100
- const depTypes = /* @__PURE__ */ new Set();
101
- for (const dep of deps) {
102
- depTypes.add(dep.type);
103
- pkgJson[dep.type][dep.name] = dep.query;
104
- }
105
- for (const depType of depTypes) {
106
- pkgJson[depType] = Object.fromEntries(
107
- sortBy__default.default(Object.entries(pkgJson[depType]), ([key]) => key)
108
- );
109
- }
110
- await fs__default.default.writeJson(pkgPath, pkgJson, { spaces: 2 });
111
- }
112
- console.log();
113
- console.log(
114
- `Running ${chalk__default.default.blue("yarn install")} to install new versions`
115
- );
116
- console.log();
117
- await run.run("yarn", ["install"]);
118
- }
119
- }
120
- const dependencies = createStepDefinition({
121
- type: "dependencies",
122
- deserialize() {
123
- throw new Error("The dependency step may not be defined in JSON");
124
- },
125
- create(data) {
126
- return new DependenciesStep(data);
127
- }
128
- });
129
-
130
- class MessageStep {
131
- constructor(data) {
132
- this.data = data;
133
- }
134
- async run() {
135
- console.log(this.data.message);
136
- }
137
- }
138
- const message = createStepDefinition({
139
- type: "message",
140
- deserialize(obj) {
141
- const { message: msg } = obj;
142
- if (!msg || typeof msg !== "string" && !Array.isArray(msg)) {
143
- throw new Error(
144
- "Invalid install step, 'message' must be a string or array"
145
- );
146
- }
147
- return new MessageStep({ message: [msg].flat().join("") });
148
- },
149
- create(data) {
150
- return new MessageStep(data);
151
- }
152
- });
153
-
154
- var stepDefinitionMap = /*#__PURE__*/Object.freeze({
155
- __proto__: null,
156
- appRoute: appRoute,
157
- dependencies: dependencies,
158
- message: message
159
- });
160
-
161
- const stepDefinitions = Object.values(stepDefinitionMap);
162
- async function fetchPluginPackage(id) {
163
- const searchNames = [`@backstage/plugin-${id}`, `backstage-plugin-${id}`, id];
164
- for (const name of searchNames) {
165
- try {
166
- const packageInfo = await packages.fetchPackageInfo(
167
- name
168
- );
169
- return packageInfo;
170
- } catch (error) {
171
- if (error.name !== "NotFoundError") {
172
- throw error;
173
- }
174
- }
175
- }
176
- throw new index.NotFoundError(
177
- `No matching package found for '${id}', tried ${searchNames.join(", ")}`
178
- );
179
- }
180
- class PluginInstaller {
181
- constructor(steps) {
182
- this.steps = steps;
183
- }
184
- static async resolveSteps(pkg, versionToInstall) {
185
- const steps = [];
186
- const dependencies$1 = [];
187
- dependencies$1.push({
188
- target: "packages/app",
189
- type: "dependencies",
190
- name: pkg.name,
191
- query: versionToInstall || `^${pkg.version}`
192
- });
193
- steps.push({
194
- type: "dependencies",
195
- step: dependencies.create({ dependencies: dependencies$1 })
196
- });
197
- for (const step of pkg.experimentalInstallationRecipe?.steps ?? []) {
198
- const { type } = step;
199
- const definition = stepDefinitions.find((d) => d.type === type);
200
- if (definition) {
201
- steps.push({
202
- type,
203
- step: definition.deserialize(step, pkg)
204
- });
205
- } else {
206
- throw new Error(`Unsupported step type: ${type}`);
207
- }
208
- }
209
- return steps;
210
- }
211
- async run() {
212
- for (const { type, step } of this.steps) {
213
- console.log(`Running step ${type}`);
214
- await step.run();
215
- }
216
- }
217
- }
218
- async function installPluginAndPeerPlugins(pkg) {
219
- const pluginDeps = /* @__PURE__ */ new Map();
220
- pluginDeps.set(pkg.name, { pkg });
221
- await loadPeerPluginDeps(pkg, pluginDeps);
222
- console.log(`Installing ${pkg.name} AND any peer plugin dependencies.`);
223
- for (const [_pluginDepName, pluginDep] of pluginDeps.entries()) {
224
- const { pkg: pluginDepPkg, versionToInstall } = pluginDep;
225
- console.log(
226
- `Installing plugin: ${pluginDepPkg.name}: ${versionToInstall || pluginDepPkg.version}`
227
- );
228
- const steps = await PluginInstaller.resolveSteps(
229
- pluginDepPkg,
230
- versionToInstall
231
- );
232
- const installer = new PluginInstaller(steps);
233
- await installer.run();
234
- }
235
- }
236
- async function loadPackageJson(plugin) {
237
- if (plugin.endsWith("package.json")) {
238
- return await fs__default.default.readJson(plugin);
239
- }
240
- return await fetchPluginPackage(plugin);
241
- }
242
- async function loadPeerPluginDeps(pkg, pluginMap) {
243
- for (const [pluginId, pluginVersion] of Object.entries(
244
- pkg.experimentalInstallationRecipe?.peerPluginDependencies ?? {}
245
- )) {
246
- const depPkg = await loadPackageJson(pluginId);
247
- if (!pluginMap.get(depPkg.name)) {
248
- pluginMap.set(depPkg.name, {
249
- pkg: depPkg,
250
- versionToInstall: pluginVersion
251
- });
252
- await loadPeerPluginDeps(depPkg, pluginMap);
253
- }
254
- }
255
- }
256
- var install = async (pluginId, cmd) => {
257
- const from = pluginId || cmd?.from;
258
- if (!from) {
259
- throw new Error(
260
- "Missing both <plugin-id> or a package.json file path in the --from flag."
261
- );
262
- }
263
- const pkg = await loadPackageJson(from);
264
- await installPluginAndPeerPlugins(pkg);
265
- };
266
-
267
- exports.default = install;
268
- //# sourceMappingURL=install-BMA3RshT.cjs.js.map
@@ -1,10 +0,0 @@
1
- 'use strict';
2
-
3
- var lint = async () => {
4
- throw new Error(
5
- "This command has been removed, please consider alternatives such as `yarn dedupe` instead."
6
- );
7
- };
8
-
9
- exports.default = lint;
10
- //# sourceMappingURL=lint-Dkx_fBkS.cjs.js.map
@@ -1,75 +0,0 @@
1
- 'use strict';
2
-
3
- var minimatch = require('minimatch');
4
- var getPackages = require('@manypkg/get-packages');
5
- var index = require('./index-DmUbBCFk.cjs.js');
6
- var yarn = require('./yarn-Ukl9MOS0.cjs.js');
7
- var run = require('./run-CSt1n0F1.cjs.js');
8
-
9
- const DEP_TYPES = [
10
- "dependencies",
11
- "devDependencies",
12
- "peerDependencies",
13
- "optionalDependencies"
14
- ];
15
- async function fetchPackageInfo(name) {
16
- const yarnVersion = await yarn.detectYarnVersion();
17
- const cmd = yarnVersion === "classic" ? ["info"] : ["npm", "info"];
18
- try {
19
- const { stdout: output } = await run.execFile(
20
- "yarn",
21
- [...cmd, "--json", name],
22
- { shell: true }
23
- );
24
- if (!output) {
25
- throw new index.NotFoundError(
26
- `No package information found for package ${name}`
27
- );
28
- }
29
- if (yarnVersion === "berry") {
30
- return JSON.parse(output);
31
- }
32
- const info = JSON.parse(output);
33
- if (info.type !== "inspect") {
34
- throw new Error(`Received unknown yarn info for ${name}, ${output}`);
35
- }
36
- return info.data;
37
- } catch (error) {
38
- if (yarnVersion === "classic") {
39
- throw error;
40
- }
41
- if (error?.stdout.includes("Response Code: 404")) {
42
- throw new index.NotFoundError(
43
- `No package information found for package ${name}`
44
- );
45
- }
46
- throw error;
47
- }
48
- }
49
- async function mapDependencies(targetDir, pattern) {
50
- const { packages, root } = await getPackages.getPackages(targetDir);
51
- packages.push(root);
52
- const dependencyMap = /* @__PURE__ */ new Map();
53
- for (const pkg of packages) {
54
- const deps = DEP_TYPES.flatMap(
55
- (t) => Object.entries(pkg.packageJson[t] ?? {})
56
- );
57
- for (const [name, range] of deps) {
58
- if (minimatch.minimatch(name, pattern)) {
59
- dependencyMap.set(
60
- name,
61
- (dependencyMap.get(name) ?? []).concat({
62
- range,
63
- name: pkg.packageJson.name,
64
- location: pkg.dir
65
- })
66
- );
67
- }
68
- }
69
- }
70
- return dependencyMap;
71
- }
72
-
73
- exports.fetchPackageInfo = fetchPackageInfo;
74
- exports.mapDependencies = mapDependencies;
75
- //# sourceMappingURL=packages-Cuogjl7j.cjs.js.map
@@ -1,188 +0,0 @@
1
- 'use strict';
2
-
3
- var chalk = require('chalk');
4
- var fs = require('fs-extra');
5
- var handlebars = require('handlebars');
6
- var ora = require('ora');
7
- var util = require('util');
8
- var path = require('path');
9
- var recursive = require('recursive-readdir');
10
- var child_process = require('child_process');
11
- var errors = require('@backstage/errors');
12
- var index = require('./index-DmUbBCFk.cjs.js');
13
-
14
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
15
-
16
- var chalk__default = /*#__PURE__*/_interopDefaultCompat(chalk);
17
- var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
18
- var handlebars__default = /*#__PURE__*/_interopDefaultCompat(handlebars);
19
- var ora__default = /*#__PURE__*/_interopDefaultCompat(ora);
20
- var recursive__default = /*#__PURE__*/_interopDefaultCompat(recursive);
21
-
22
- const exec = util.promisify(child_process.exec);
23
- const TASK_NAME_MAX_LENGTH = 14;
24
- class Task {
25
- static log(name = "") {
26
- process.stderr.write(`${chalk__default.default.green(name)}
27
- `);
28
- }
29
- static error(message = "") {
30
- process.stderr.write(`
31
- ${chalk__default.default.red(message)}
32
-
33
- `);
34
- }
35
- static section(name) {
36
- const title = chalk__default.default.green(`${name}:`);
37
- process.stderr.write(`
38
- ${title}
39
- `);
40
- }
41
- static exit(code = 0) {
42
- process.exit(code);
43
- }
44
- static async forItem(task, item, taskFunc) {
45
- const paddedTask = chalk__default.default.green(task.padEnd(TASK_NAME_MAX_LENGTH));
46
- const spinner = ora__default.default({
47
- prefixText: chalk__default.default.green(` ${paddedTask}${chalk__default.default.cyan(item)}`),
48
- spinner: "arc",
49
- color: "green"
50
- }).start();
51
- try {
52
- const result = await taskFunc();
53
- spinner.succeed();
54
- return result;
55
- } catch (error) {
56
- spinner.fail();
57
- throw error;
58
- }
59
- }
60
- static async forCommand(command, options) {
61
- try {
62
- await Task.forItem("executing", command, async () => {
63
- await exec(command, { cwd: options?.cwd });
64
- });
65
- } catch (error) {
66
- errors.assertError(error);
67
- if (error.stderr) {
68
- process.stderr.write(error.stderr);
69
- }
70
- if (error.stdout) {
71
- process.stdout.write(error.stdout);
72
- }
73
- if (options?.optional) {
74
- Task.error(`Warning: Failed to execute command ${chalk__default.default.cyan(command)}`);
75
- } else {
76
- throw new Error(
77
- `Failed to execute command '${chalk__default.default.cyan(command)}', ${error}`
78
- );
79
- }
80
- }
81
- }
82
- }
83
- async function templatingTask(templateDir, destinationDir, context, versionProvider, isMonoRepo) {
84
- const files = await recursive__default.default(templateDir).catch((error) => {
85
- throw new Error(`Failed to read template directory: ${error.message}`);
86
- });
87
- for (const file of files) {
88
- const destinationFile = file.replace(templateDir, destinationDir);
89
- await fs__default.default.ensureDir(path.dirname(destinationFile));
90
- if (file.endsWith(".hbs")) {
91
- await Task.forItem("templating", path.basename(file), async () => {
92
- const destination = destinationFile.replace(/\.hbs$/, "");
93
- const template = await fs__default.default.readFile(file);
94
- const compiled = handlebars__default.default.compile(template.toString(), {
95
- strict: true
96
- });
97
- const contents = compiled(
98
- { name: path.basename(destination), ...context },
99
- {
100
- helpers: {
101
- versionQuery(name, versionHint) {
102
- return versionProvider(
103
- name,
104
- typeof versionHint === "string" ? versionHint : void 0
105
- );
106
- }
107
- }
108
- }
109
- );
110
- await fs__default.default.writeFile(destination, contents).catch((error) => {
111
- throw new Error(
112
- `Failed to create file: ${destination}: ${error.message}`
113
- );
114
- });
115
- });
116
- } else {
117
- if (isMonoRepo && file.match("tsconfig.json")) {
118
- continue;
119
- }
120
- await Task.forItem("copying", path.basename(file), async () => {
121
- await fs__default.default.copyFile(file, destinationFile).catch((error) => {
122
- const destination = destinationFile;
123
- throw new Error(
124
- `Failed to copy file to ${destination} : ${error.message}`
125
- );
126
- });
127
- });
128
- }
129
- }
130
- }
131
- async function addPackageDependency(path, options) {
132
- try {
133
- const pkgJson = await fs__default.default.readJson(path);
134
- const normalize = (obj) => {
135
- if (Object.keys(obj).length === 0) {
136
- return void 0;
137
- }
138
- return Object.fromEntries(
139
- Object.keys(obj).sort().map((key) => [key, obj[key]])
140
- );
141
- };
142
- pkgJson.dependencies = normalize({
143
- ...pkgJson.dependencies,
144
- ...options.dependencies
145
- });
146
- pkgJson.devDependencies = normalize({
147
- ...pkgJson.devDependencies,
148
- ...options.devDependencies
149
- });
150
- pkgJson.peerDependencies = normalize({
151
- ...pkgJson.peerDependencies,
152
- ...options.peerDependencies
153
- });
154
- await fs__default.default.writeJson(path, pkgJson, { spaces: 2 });
155
- } catch (error) {
156
- throw new Error(`Failed to add package dependencies, ${error}`);
157
- }
158
- }
159
- async function addToBackend(name, options) {
160
- if (await fs__default.default.pathExists(index.paths.resolveTargetRoot("packages/backend"))) {
161
- await Task.forItem("backend", `adding ${options.type}`, async () => {
162
- const backendFilePath = index.paths.resolveTargetRoot(
163
- "packages/backend/src/index.ts"
164
- );
165
- if (!await fs__default.default.pathExists(backendFilePath)) {
166
- return;
167
- }
168
- const content = await fs__default.default.readFile(backendFilePath, "utf8");
169
- const lines = content.split("\n");
170
- const backendAddLine = `backend.add(import('${name}'));`;
171
- const backendStartIndex = lines.findIndex(
172
- (line) => line.match(/backend.start/)
173
- );
174
- if (backendStartIndex !== -1) {
175
- const [indentation] = lines[backendStartIndex].match(/^\s*/);
176
- lines.splice(backendStartIndex, 0, `${indentation}${backendAddLine}`);
177
- const newContent = lines.join("\n");
178
- await fs__default.default.writeFile(backendFilePath, newContent, "utf8");
179
- }
180
- });
181
- }
182
- }
183
-
184
- exports.Task = Task;
185
- exports.addPackageDependency = addPackageDependency;
186
- exports.addToBackend = addToBackend;
187
- exports.templatingTask = templatingTask;
188
- //# sourceMappingURL=tasks-DtAiMv5G.cjs.js.map
@@ -1,34 +0,0 @@
1
- 'use strict';
2
-
3
- var errors = require('@backstage/errors');
4
- var child_process = require('child_process');
5
- var util = require('util');
6
-
7
- const execFile = util.promisify(child_process.execFile);
8
- const versions = /* @__PURE__ */ new Map();
9
- function detectYarnVersion(dir) {
10
- const cwd = process.cwd();
11
- if (versions.has(cwd)) {
12
- return versions.get(cwd);
13
- }
14
- const promise = Promise.resolve().then(async () => {
15
- try {
16
- const { stdout } = await execFile("yarn", ["--version"], {
17
- shell: true,
18
- cwd
19
- });
20
- return stdout.trim().startsWith("1.") ? "classic" : "berry";
21
- } catch (error) {
22
- errors.assertError(error);
23
- if ("stderr" in error) {
24
- process.stderr.write(error.stderr);
25
- }
26
- throw new errors.ForwardedError("Failed to determine yarn version", error);
27
- }
28
- });
29
- versions.set(cwd, promise);
30
- return promise;
31
- }
32
-
33
- exports.detectYarnVersion = detectYarnVersion;
34
- //# sourceMappingURL=yarn-Ukl9MOS0.cjs.js.map