@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,12 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var productionPack = require('./productionPack-BWU8WkGs.cjs.js');
4
- var index = require('./index-DmUbBCFk.cjs.js');
3
+ var productionPack = require('./productionPack-BxoMbBkH.cjs.js');
4
+ var index = require('./index-b1ouG3q6.cjs.js');
5
5
  var fs = require('fs-extra');
6
6
  var publishing = require('./publishing-DQtsKTbc.cjs.js');
7
7
  require('npm-packlist');
8
8
  require('path');
9
- require('./entryPoints-CoHH4lBA.cjs.js');
9
+ require('./entryPoints-coip0t-x.cjs.js');
10
+ require('ts-morph');
10
11
  require('commander');
11
12
  require('chalk');
12
13
  require('semver');
@@ -30,4 +31,4 @@ const post = async () => {
30
31
 
31
32
  exports.post = post;
32
33
  exports.pre = pre;
33
- //# sourceMappingURL=pack-BqFGqZb5.cjs.js.map
34
+ //# sourceMappingURL=pack-XLRcGJqH.cjs.js.map
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var fix = require('./fix-BM8I_DZ2.cjs.js');
3
+ var fix = require('./fix-COitqgqm.cjs.js');
4
4
  require('@backstage/cli-node');
5
5
  require('fs-extra');
6
6
  require('path');
7
- require('./index-DmUbBCFk.cjs.js');
7
+ require('./index-b1ouG3q6.cjs.js');
8
8
  require('commander');
9
9
  require('chalk');
10
10
  require('semver');
@@ -24,4 +24,4 @@ async function command() {
24
24
  }
25
25
 
26
26
  exports.command = command;
27
- //# sourceMappingURL=packageExports-DvjdOWjC.cjs.js.map
27
+ //# sourceMappingURL=packageExports-BJBwdvUH.cjs.js.map
@@ -3,9 +3,9 @@
3
3
  var fs = require('fs-extra');
4
4
  var path = require('path');
5
5
  var cliNode = require('@backstage/cli-node');
6
- var run = require('./run-CSt1n0F1.cjs.js');
6
+ var run = require('./run-CpZGNJQr.cjs.js');
7
7
  require('child_process');
8
- require('./index-DmUbBCFk.cjs.js');
8
+ require('./index-b1ouG3q6.cjs.js');
9
9
  require('commander');
10
10
  require('chalk');
11
11
  require('semver');
@@ -78,4 +78,4 @@ async function command() {
78
78
  }
79
79
 
80
80
  exports.command = command;
81
- //# sourceMappingURL=packageLintConfigs-DGkvTpBd.cjs.js.map
81
+ //# sourceMappingURL=packageLintConfigs-DeUGBP17.cjs.js.map
@@ -4,7 +4,7 @@ var fs = require('fs-extra');
4
4
  var path = require('path');
5
5
  var getPackages = require('@manypkg/get-packages');
6
6
  var cliNode = require('@backstage/cli-node');
7
- var index = require('./index-DmUbBCFk.cjs.js');
7
+ var index = require('./index-b1ouG3q6.cjs.js');
8
8
  require('commander');
9
9
  require('chalk');
10
10
  require('semver');
@@ -55,4 +55,4 @@ var packageRole = async () => {
55
55
  };
56
56
 
57
57
  exports.default = packageRole;
58
- //# sourceMappingURL=packageRole-CHz7zkIQ.cjs.js.map
58
+ //# sourceMappingURL=packageRole-Iuv9NRii.cjs.js.map
@@ -2,9 +2,9 @@
2
2
 
3
3
  var yaml = require('yaml');
4
4
  var config$1 = require('@backstage/config');
5
- var config = require('./config-BMsjTUVf.cjs.js');
5
+ var config = require('./config-DBpmZirN.cjs.js');
6
6
  require('@backstage/config-loader');
7
- require('./index-DmUbBCFk.cjs.js');
7
+ require('./index-b1ouG3q6.cjs.js');
8
8
  require('commander');
9
9
  require('chalk');
10
10
  require('fs-extra');
@@ -58,4 +58,4 @@ function serializeConfigData(appConfigs, schema, visibility) {
58
58
  }
59
59
 
60
60
  exports.default = print;
61
- //# sourceMappingURL=print-CQU7JzAh.cjs.js.map
61
+ //# sourceMappingURL=print-Dd6aChXU.cjs.js.map
@@ -3,13 +3,100 @@
3
3
  var fs = require('fs-extra');
4
4
  var npmPackList = require('npm-packlist');
5
5
  var path = require('path');
6
- var entryPoints = require('./entryPoints-CoHH4lBA.cjs.js');
6
+ var entryPoints = require('./entryPoints-coip0t-x.cjs.js');
7
+ var tsMorph = require('ts-morph');
8
+ var index = require('./index-b1ouG3q6.cjs.js');
7
9
 
8
10
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
9
11
 
10
12
  var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
11
13
  var npmPackList__default = /*#__PURE__*/_interopDefaultCompat(npmPackList);
12
14
 
15
+ const createTypeDistProject = async () => {
16
+ return new tsMorph.Project({
17
+ tsConfigFilePath: index.paths.resolveTargetRoot("tsconfig.json"),
18
+ skipAddingFilesFromTsConfig: true
19
+ });
20
+ };
21
+ const targetPackageRoles = [
22
+ "backend-plugin",
23
+ "backend-plugin-module",
24
+ "frontend-plugin",
25
+ "frontend-plugin-module",
26
+ "web-library",
27
+ "node-library"
28
+ ];
29
+ const targetFeatureTypes = [
30
+ "@backstage/BackendFeature",
31
+ "@backstage/BackstagePlugin",
32
+ "@backstage/FrontendPlugin",
33
+ "@backstage/FrontendModule"
34
+ ];
35
+ const getEntryPointDefaultFeatureType = (role, packageDir, project, entryPoint) => {
36
+ if (isTargetPackageRole(role)) {
37
+ const distPath = path.resolve(packageDir, entryPoint);
38
+ try {
39
+ const defaultFeatureType = getSourceFileDefaultFeatureType(
40
+ project.addSourceFileAtPath(distPath)
41
+ );
42
+ if (defaultFeatureType) {
43
+ return defaultFeatureType;
44
+ }
45
+ } catch (error) {
46
+ console.error(
47
+ `Failed to extract default feature type from ${distPath}, ${error}. Your package will publish fine but it may be missing metadata about its default feature.`
48
+ );
49
+ }
50
+ }
51
+ return null;
52
+ };
53
+ function getSourceFileDefaultFeatureType(sourceFile) {
54
+ for (const exportSymbol of sourceFile.getExportSymbols()) {
55
+ const declaration = exportSymbol.getDeclarations()[0];
56
+ const exportName = declaration.getSymbol()?.getName();
57
+ if (exportName !== "default") {
58
+ continue;
59
+ }
60
+ let exportType;
61
+ if (declaration) {
62
+ if (declaration.isKind(tsMorph.SyntaxKind.ExportAssignment)) {
63
+ exportType = declaration.getExpression().getType();
64
+ } else if (declaration.isKind(tsMorph.SyntaxKind.ExportSpecifier)) {
65
+ if (!declaration.isTypeOnly()) {
66
+ exportType = declaration.getType();
67
+ }
68
+ } else if (declaration.isKind(tsMorph.SyntaxKind.VariableDeclaration)) {
69
+ exportType = declaration.getType();
70
+ }
71
+ }
72
+ if (exportName && exportType) {
73
+ const $$type = getBackstagePackageFeature$$TypeFromType(exportType);
74
+ if ($$type) {
75
+ return $$type;
76
+ }
77
+ }
78
+ }
79
+ return null;
80
+ }
81
+ function getBackstagePackageFeature$$TypeFromType(type) {
82
+ const exportType = type.getTargetType() ?? type;
83
+ for (const property of exportType.getProperties()) {
84
+ if (property.getName() === "$$type") {
85
+ const $$type = property.getValueDeclaration()?.getText().match(/(\$\$type: '(?<type>.+)')/)?.groups?.type;
86
+ if ($$type && isTargetFeatureType($$type)) {
87
+ return $$type;
88
+ }
89
+ }
90
+ }
91
+ return null;
92
+ }
93
+ function isTargetPackageRole(role) {
94
+ return !!role && targetPackageRoles.includes(role);
95
+ }
96
+ function isTargetFeatureType(type) {
97
+ return !!type && targetFeatureTypes.includes(type);
98
+ }
99
+
13
100
  const PKG_PATH = "package.json";
14
101
  const PKG_BACKUP_PATH = "package.json-prepack";
15
102
  const SKIPPED_KEYS = ["access", "registry", "tag"];
@@ -24,7 +111,8 @@ async function productionPack(options) {
24
111
  }
25
112
  const writeCompatibilityEntryPoints = await prepareExportsEntryPoints(
26
113
  pkg,
27
- packageDir
114
+ packageDir,
115
+ options.project
28
116
  );
29
117
  const publishConfig = pkg.publishConfig ?? {};
30
118
  for (const key of Object.keys(publishConfig)) {
@@ -85,7 +173,7 @@ const EXPORT_MAP = {
85
173
  require: ".cjs.js",
86
174
  types: ".d.ts"
87
175
  };
88
- async function prepareExportsEntryPoints(pkg, packageDir) {
176
+ async function prepareExportsEntryPoints(pkg, packageDir, commonProject) {
89
177
  const distPath = path.resolve(packageDir, "dist");
90
178
  if (!await fs__default.default.pathExists(distPath)) {
91
179
  return void 0;
@@ -94,12 +182,13 @@ async function prepareExportsEntryPoints(pkg, packageDir) {
94
182
  const outputExports = {};
95
183
  const compatibilityWriters = new Array();
96
184
  const entryPoints$1 = entryPoints.readEntryPoints(pkg);
185
+ const project = commonProject || await createTypeDistProject();
97
186
  for (const entryPoint of entryPoints$1) {
98
187
  if (!SCRIPT_EXTS.includes(entryPoint.ext)) {
99
188
  outputExports[entryPoint.mount] = entryPoint.path;
100
189
  continue;
101
190
  }
102
- const exp = {};
191
+ let exp = {};
103
192
  for (const [key, ext] of Object.entries(EXPORT_MAP)) {
104
193
  const name = `${entryPoint.name}${ext}`;
105
194
  if (distFiles.includes(name)) {
@@ -107,6 +196,17 @@ async function prepareExportsEntryPoints(pkg, packageDir) {
107
196
  }
108
197
  }
109
198
  exp.default = exp.require ?? exp.import;
199
+ if (exp.types) {
200
+ const defaultFeatureType = pkg.backstage?.role && getEntryPointDefaultFeatureType(
201
+ pkg.backstage?.role,
202
+ packageDir,
203
+ project,
204
+ exp.types
205
+ );
206
+ if (defaultFeatureType) {
207
+ exp = { backstage: defaultFeatureType, ...exp };
208
+ }
209
+ }
110
210
  if (entryPoint.mount === ".") {
111
211
  if (exp.default) {
112
212
  pkg.main = exp.default;
@@ -155,6 +255,7 @@ async function prepareExportsEntryPoints(pkg, packageDir) {
155
255
  return void 0;
156
256
  }
157
257
 
258
+ exports.createTypeDistProject = createTypeDistProject;
158
259
  exports.productionPack = productionPack;
159
260
  exports.revertProductionPack = revertProductionPack;
160
- //# sourceMappingURL=productionPack-BWU8WkGs.cjs.js.map
261
+ //# sourceMappingURL=productionPack-BxoMbBkH.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-DmUbBCFk.cjs.js');
4
+ var index = require('./index-b1ouG3q6.cjs.js');
5
5
  var cliNode = require('@backstage/cli-node');
6
6
 
7
7
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -21,4 +21,4 @@ async function findRoleFromCommand(opts) {
21
21
  }
22
22
 
23
23
  exports.findRoleFromCommand = findRoleFromCommand;
24
- //# sourceMappingURL=role-8b0z7P0n.cjs.js.map
24
+ //# sourceMappingURL=role-BjiBExhi.cjs.js.map
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var child_process = require('child_process');
4
- var index = require('./index-DmUbBCFk.cjs.js');
4
+ var index = require('./index-b1ouG3q6.cjs.js');
5
5
  var util = require('util');
6
6
  var errors = require('@backstage/errors');
7
7
 
@@ -78,4 +78,4 @@ exports.execFile = execFile;
78
78
  exports.run = run;
79
79
  exports.runCheck = runCheck;
80
80
  exports.runPlain = runPlain;
81
- //# sourceMappingURL=run-CSt1n0F1.cjs.js.map
81
+ //# sourceMappingURL=run-CpZGNJQr.cjs.js.map
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
3
  var yaml = require('yaml');
4
- var config = require('./config-BMsjTUVf.cjs.js');
4
+ var config = require('./config-DBpmZirN.cjs.js');
5
5
  var configLoader = require('@backstage/config-loader');
6
6
  require('@backstage/config');
7
- require('./index-DmUbBCFk.cjs.js');
7
+ require('./index-b1ouG3q6.cjs.js');
8
8
  require('commander');
9
9
  require('chalk');
10
10
  require('fs-extra');
@@ -42,4 +42,4 @@ var schema = async (opts) => {
42
42
  };
43
43
 
44
44
  exports.default = schema;
45
- //# sourceMappingURL=schema-B4250t0W.cjs.js.map
45
+ //# sourceMappingURL=schema-D93FRhBL.cjs.js.map
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-DmUbBCFk.cjs.js');
4
- var run = require('./run-CSt1n0F1.cjs.js');
3
+ var index = require('./index-b1ouG3q6.cjs.js');
4
+ var run = require('./run-CpZGNJQr.cjs.js');
5
5
  require('commander');
6
6
  require('chalk');
7
7
  require('fs-extra');
@@ -56,4 +56,4 @@ var test = async (_opts, cmd) => {
56
56
  };
57
57
 
58
58
  exports.default = test;
59
- //# sourceMappingURL=test-Diil1uTk.cjs.js.map
59
+ //# sourceMappingURL=test-COxIko8N.cjs.js.map
@@ -2,8 +2,8 @@
2
2
 
3
3
  var os = require('os');
4
4
  var cliNode = require('@backstage/cli-node');
5
- var index = require('./index-DmUbBCFk.cjs.js');
6
- var run = require('./run-CSt1n0F1.cjs.js');
5
+ var index = require('./index-b1ouG3q6.cjs.js');
6
+ var run = require('./run-CpZGNJQr.cjs.js');
7
7
  require('commander');
8
8
  require('chalk');
9
9
  require('fs-extra');
@@ -123,4 +123,4 @@ async function command(opts, cmd) {
123
123
 
124
124
  exports.command = command;
125
125
  exports.createFlagFinder = createFlagFinder;
126
- //# sourceMappingURL=test-DVUsmgyZ.cjs.js.map
126
+ //# sourceMappingURL=test-JcLI2pPM.cjs.js.map
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var config = require('./config-BMsjTUVf.cjs.js');
3
+ var config = require('./config-DBpmZirN.cjs.js');
4
4
  require('@backstage/config-loader');
5
5
  require('@backstage/config');
6
- require('./index-DmUbBCFk.cjs.js');
6
+ require('./index-b1ouG3q6.cjs.js');
7
7
  require('commander');
8
8
  require('chalk');
9
9
  require('fs-extra');
@@ -25,4 +25,4 @@ var validate = async (opts) => {
25
25
  };
26
26
 
27
27
  exports.default = validate;
28
- //# sourceMappingURL=validate-DDIGkK2r.cjs.js.map
28
+ //# sourceMappingURL=validate-CELljsEX.cjs.js.map
@@ -3,6 +3,9 @@
3
3
  var fs = require('fs-extra');
4
4
  var parsers = require('@yarnpkg/parsers');
5
5
  var lockfile = require('@yarnpkg/lockfile');
6
+ var errors = require('@backstage/errors');
7
+ var child_process = require('child_process');
8
+ var util = require('util');
6
9
 
7
10
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
8
11
 
@@ -82,5 +85,32 @@ class Lockfile {
82
85
  }
83
86
  }
84
87
 
88
+ const execFile = util.promisify(child_process.execFile);
89
+ const versions = /* @__PURE__ */ new Map();
90
+ function detectYarnVersion(dir) {
91
+ const cwd = process.cwd();
92
+ if (versions.has(cwd)) {
93
+ return versions.get(cwd);
94
+ }
95
+ const promise = Promise.resolve().then(async () => {
96
+ try {
97
+ const { stdout } = await execFile("yarn", ["--version"], {
98
+ shell: true,
99
+ cwd
100
+ });
101
+ return stdout.trim().startsWith("1.") ? "classic" : "berry";
102
+ } catch (error) {
103
+ errors.assertError(error);
104
+ if ("stderr" in error) {
105
+ process.stderr.write(error.stderr);
106
+ }
107
+ throw new errors.ForwardedError("Failed to determine yarn version", error);
108
+ }
109
+ });
110
+ versions.set(cwd, promise);
111
+ return promise;
112
+ }
113
+
85
114
  exports.Lockfile = Lockfile;
86
- //# sourceMappingURL=Lockfile-B4mqBkH6.cjs.js.map
115
+ exports.detectYarnVersion = detectYarnVersion;
116
+ //# sourceMappingURL=yarn-6FNAgNBK.cjs.js.map
package/dist/index.cjs.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('commander');
4
4
  require('chalk');
5
- require('./cjs/index-DmUbBCFk.cjs.js');
5
+ require('./cjs/index-b1ouG3q6.cjs.js');
6
6
  require('fs-extra');
7
7
  require('semver');
8
8
  require('@backstage/cli-common');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/cli",
3
- "version": "0.27.1",
3
+ "version": "0.28.0-next.1",
4
4
  "description": "CLI for developing Backstage plugins and apps",
5
5
  "backstage": {
6
6
  "role": "cli"
@@ -42,16 +42,16 @@
42
42
  "watch": "./src"
43
43
  },
44
44
  "dependencies": {
45
- "@backstage/catalog-model": "^1.7.0",
46
- "@backstage/cli-common": "^0.1.14",
47
- "@backstage/cli-node": "^0.2.8",
48
- "@backstage/config": "^1.2.0",
49
- "@backstage/config-loader": "^1.9.1",
50
- "@backstage/errors": "^1.2.4",
51
- "@backstage/eslint-plugin": "^0.1.9",
52
- "@backstage/integration": "^1.15.0",
53
- "@backstage/release-manifests": "^0.0.11",
54
- "@backstage/types": "^1.1.1",
45
+ "@backstage/catalog-model": "1.7.0",
46
+ "@backstage/cli-common": "0.1.14",
47
+ "@backstage/cli-node": "0.2.8",
48
+ "@backstage/config": "1.2.0",
49
+ "@backstage/config-loader": "1.9.1",
50
+ "@backstage/errors": "1.2.4",
51
+ "@backstage/eslint-plugin": "0.1.10-next.0",
52
+ "@backstage/integration": "1.15.1-next.0",
53
+ "@backstage/release-manifests": "0.0.11",
54
+ "@backstage/types": "1.1.1",
55
55
  "@manypkg/get-packages": "^1.1.3",
56
56
  "@module-federation/enhanced": "^0.6.0",
57
57
  "@octokit/graphql": "^5.0.0",
@@ -90,7 +90,6 @@
90
90
  "cross-spawn": "^7.0.3",
91
91
  "css-loader": "^6.5.1",
92
92
  "ctrlc-windows": "^2.1.0",
93
- "diff": "^5.0.0",
94
93
  "esbuild": "^0.23.0",
95
94
  "esbuild-loader": "^4.0.0",
96
95
  "eslint": "^8.6.0",
@@ -147,6 +146,7 @@
147
146
  "swc-loader": "^0.2.3",
148
147
  "tar": "^6.1.12",
149
148
  "terser-webpack-plugin": "^5.1.3",
149
+ "ts-morph": "^23.0.0",
150
150
  "util": "^0.12.3",
151
151
  "webpack": "^5.70.0",
152
152
  "webpack-dev-server": "^5.0.0",
@@ -158,17 +158,16 @@
158
158
  },
159
159
  "devDependencies": {
160
160
  "@backstage/backend-common": "^0.25.0",
161
- "@backstage/backend-plugin-api": "^1.0.0",
162
- "@backstage/backend-test-utils": "^1.0.0",
163
- "@backstage/config": "^1.2.0",
164
- "@backstage/core-app-api": "^1.15.0",
165
- "@backstage/core-components": "^0.15.0",
166
- "@backstage/core-plugin-api": "^1.9.4",
167
- "@backstage/dev-utils": "^1.1.0",
168
- "@backstage/test-utils": "^1.6.0",
169
- "@backstage/theme": "^0.5.7",
161
+ "@backstage/backend-plugin-api": "1.0.1-next.0",
162
+ "@backstage/backend-test-utils": "1.0.1-next.1",
163
+ "@backstage/config": "1.2.0",
164
+ "@backstage/core-app-api": "1.15.1-next.1",
165
+ "@backstage/core-components": "0.15.1-next.1",
166
+ "@backstage/core-plugin-api": "1.10.0-next.1",
167
+ "@backstage/dev-utils": "1.1.2-next.1",
168
+ "@backstage/test-utils": "1.6.1-next.1",
169
+ "@backstage/theme": "0.5.8-next.0",
170
170
  "@types/cross-spawn": "^6.0.2",
171
- "@types/diff": "^5.0.0",
172
171
  "@types/ejs": "^3.1.3",
173
172
  "@types/express": "^4.17.6",
174
173
  "@types/fs-extra": "^11.0.0",
@@ -1,91 +0,0 @@
1
- 'use strict';
2
-
3
- var fs = require('fs-extra');
4
- var path = require('path');
5
- var index = require('./index-DmUbBCFk.cjs.js');
6
-
7
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
8
-
9
- var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
10
- var path__default = /*#__PURE__*/_interopDefaultCompat(path);
11
-
12
- const TEAM_ID_RE = /^@[-\w]+\/[-\w]+$/;
13
- const USER_ID_RE = /^@[-\w]+$/;
14
- const EMAIL_RE = /^[^@]+@[-.\w]+\.[-\w]+$/i;
15
- const DEFAULT_OWNER = "@backstage/maintainers";
16
- async function getCodeownersFilePath(rootDir) {
17
- const possiblePaths = [
18
- path__default.default.join(rootDir, ".github", "CODEOWNERS"),
19
- path__default.default.join(rootDir, ".gitlab", "CODEOWNERS"),
20
- path__default.default.join(rootDir, "docs", "CODEOWNERS"),
21
- path__default.default.join(rootDir, "CODEOWNERS")
22
- ];
23
- for (const p of possiblePaths) {
24
- if (await fs__default.default.pathExists(p)) {
25
- return p;
26
- }
27
- }
28
- return void 0;
29
- }
30
- function isValidSingleOwnerId(id) {
31
- if (!id || typeof id !== "string") {
32
- return false;
33
- }
34
- return TEAM_ID_RE.test(id) || USER_ID_RE.test(id) || EMAIL_RE.test(id);
35
- }
36
- function parseOwnerIds(spaceSeparatedOwnerIds) {
37
- if (!spaceSeparatedOwnerIds || typeof spaceSeparatedOwnerIds !== "string") {
38
- return void 0;
39
- }
40
- const ids = spaceSeparatedOwnerIds.split(" ").filter(Boolean);
41
- if (!ids.every(isValidSingleOwnerId)) {
42
- return void 0;
43
- }
44
- return ids;
45
- }
46
- async function addCodeownersEntry(ownedPath, ownerStr, codeownersFilePath) {
47
- const ownerIds = parseOwnerIds(ownerStr);
48
- if (!ownerIds || ownerIds.length === 0) {
49
- return false;
50
- }
51
- let filePath = codeownersFilePath;
52
- if (!filePath) {
53
- filePath = await getCodeownersFilePath(index.paths.targetRoot);
54
- if (!filePath) {
55
- return false;
56
- }
57
- }
58
- const allLines = (await fs__default.default.readFile(filePath, "utf8")).split("\n");
59
- const commentLines = [];
60
- for (const line of allLines) {
61
- if (line[0] !== "#") {
62
- break;
63
- }
64
- commentLines.push(line);
65
- }
66
- const oldDeclarationEntries = allLines.filter((line) => line[0] !== "#").map((line) => line.split(/\s+/).filter(Boolean)).filter((tokens) => tokens.length >= 2).map((tokens) => ({
67
- ownedPath: tokens[0],
68
- ownerIds: tokens.slice(1)
69
- }));
70
- const newDeclarationEntries = oldDeclarationEntries.filter((entry) => entry.ownedPath !== "*").concat([{ ownedPath, ownerIds }]).sort((l1, l2) => l1.ownedPath.localeCompare(l2.ownedPath));
71
- newDeclarationEntries.unshift({
72
- ownedPath: "*",
73
- ownerIds: [DEFAULT_OWNER]
74
- });
75
- const longestOwnedPath = newDeclarationEntries.reduce(
76
- (length, entry) => Math.max(length, entry.ownedPath.length),
77
- 0
78
- );
79
- const newDeclarationLines = newDeclarationEntries.map((entry) => {
80
- const entryPath = entry.ownedPath + " ".repeat(longestOwnedPath - entry.ownedPath.length);
81
- return [entryPath, ...entry.ownerIds].join(" ");
82
- });
83
- const newLines = [...commentLines, "", ...newDeclarationLines, ""];
84
- await fs__default.default.writeFile(filePath, newLines.join("\n"), "utf8");
85
- return true;
86
- }
87
-
88
- exports.addCodeownersEntry = addCodeownersEntry;
89
- exports.getCodeownersFilePath = getCodeownersFilePath;
90
- exports.parseOwnerIds = parseOwnerIds;
91
- //# sourceMappingURL=codeowners-FKKtpciN.cjs.js.map