@backstage/cli 0.35.4 → 0.35.5-next.0

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 (77) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/index.cjs.js +1 -0
  3. package/dist/lib/cache/SuccessCache.cjs.js +2 -2
  4. package/dist/lib/typeDistProject.cjs.js +2 -2
  5. package/dist/lib/version.cjs.js +4 -3
  6. package/dist/lib/yarnPlugin.cjs.js +2 -2
  7. package/dist/modules/build/commands/package/build/command.cjs.js +7 -7
  8. package/dist/modules/build/commands/package/start/command.cjs.js +3 -3
  9. package/dist/modules/build/commands/package/start/startBackend.cjs.js +2 -2
  10. package/dist/modules/build/commands/package/start/startFrontend.cjs.js +3 -4
  11. package/dist/modules/build/commands/repo/build.cjs.js +6 -7
  12. package/dist/modules/build/commands/repo/start.cjs.js +3 -3
  13. package/dist/modules/build/lib/buildBackend.cjs.js +0 -2
  14. package/dist/modules/build/lib/buildFrontend.cjs.js +1 -4
  15. package/dist/modules/build/lib/builder/config.cjs.js +5 -5
  16. package/dist/modules/build/lib/builder/packager.cjs.js +7 -8
  17. package/dist/modules/build/lib/bundler/config.cjs.js +1 -2
  18. package/dist/modules/build/lib/bundler/hasReactDomClient.cjs.js +2 -2
  19. package/dist/modules/build/lib/bundler/linkWorkspaces.cjs.js +2 -2
  20. package/dist/modules/build/lib/bundler/moduleFederation.cjs.js +2 -2
  21. package/dist/modules/build/lib/bundler/packageDetection.cjs.js +2 -2
  22. package/dist/modules/build/lib/bundler/paths.cjs.js +8 -6
  23. package/dist/modules/build/lib/bundler/server.cjs.js +10 -10
  24. package/dist/modules/build/lib/packager/createDistWorkspace.cjs.js +9 -9
  25. package/dist/modules/build/lib/packager/productionPack.cjs.js +1 -1
  26. package/dist/{lib → modules/build/lib}/role.cjs.js +2 -2
  27. package/dist/modules/build/lib/runner/runBackend.cjs.js +2 -2
  28. package/dist/modules/config/lib/config.cjs.js +4 -4
  29. package/dist/modules/create-github-app/commands/create-github-app/index.cjs.js +2 -2
  30. package/dist/modules/info/commands/info.cjs.js +4 -5
  31. package/dist/modules/lint/commands/package/lint.cjs.js +4 -4
  32. package/dist/modules/lint/commands/repo/lint.cjs.js +8 -9
  33. package/dist/modules/maintenance/commands/package/clean.cjs.js +4 -4
  34. package/dist/modules/maintenance/commands/package/pack.cjs.js +5 -5
  35. package/dist/modules/maintenance/commands/repo/clean.cjs.js +3 -4
  36. package/dist/modules/maintenance/commands/repo/fix.cjs.js +7 -7
  37. package/dist/modules/maintenance/commands/repo/list-deprecations.cjs.js +4 -4
  38. package/dist/modules/migrate/commands/packageRole.cjs.js +2 -2
  39. package/dist/modules/migrate/commands/versions/bump.cjs.js +8 -9
  40. package/dist/modules/new/lib/codeowners/codeowners.cjs.js +2 -2
  41. package/dist/modules/new/lib/execution/PortableTemplater.cjs.js +2 -3
  42. package/dist/modules/new/lib/execution/installNewPackage.cjs.js +4 -4
  43. package/dist/modules/new/lib/execution/writeTemplateContents.cjs.js +1 -2
  44. package/dist/modules/new/lib/preparation/collectPortableTemplateInput.cjs.js +2 -2
  45. package/dist/modules/new/lib/preparation/loadPortableTemplate.cjs.js +2 -2
  46. package/dist/modules/new/lib/preparation/loadPortableTemplateConfig.cjs.js +2 -2
  47. package/dist/modules/test/commands/package/test.cjs.js +1 -2
  48. package/dist/modules/test/commands/repo/test.cjs.js +3 -4
  49. package/dist/modules/test/index.cjs.js +3 -1
  50. package/dist/modules/translations/commands/export.cjs.js +104 -0
  51. package/dist/modules/translations/commands/import.cjs.js +141 -0
  52. package/dist/modules/translations/index.cjs.js +59 -0
  53. package/dist/modules/translations/lib/discoverPackages.cjs.js +121 -0
  54. package/dist/modules/translations/lib/extractTranslations.cjs.js +71 -0
  55. package/dist/modules/translations/lib/messageFilePath.cjs.js +43 -0
  56. package/dist/packages/backend-defaults/package.json.cjs.js +1 -1
  57. package/dist/packages/backend-plugin-api/package.json.cjs.js +1 -1
  58. package/dist/packages/backend-test-utils/package.json.cjs.js +1 -1
  59. package/dist/packages/catalog-client/package.json.cjs.js +1 -1
  60. package/dist/packages/cli/package.json.cjs.js +5 -5
  61. package/dist/packages/core-app-api/package.json.cjs.js +1 -1
  62. package/dist/packages/core-components/package.json.cjs.js +1 -1
  63. package/dist/packages/core-plugin-api/package.json.cjs.js +1 -1
  64. package/dist/packages/dev-utils/package.json.cjs.js +1 -1
  65. package/dist/packages/frontend-defaults/package.json.cjs.js +1 -1
  66. package/dist/packages/frontend-plugin-api/package.json.cjs.js +1 -1
  67. package/dist/packages/frontend-test-utils/package.json.cjs.js +1 -1
  68. package/dist/packages/test-utils/package.json.cjs.js +1 -1
  69. package/dist/plugins/auth-backend/package.json.cjs.js +1 -1
  70. package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +1 -1
  71. package/dist/plugins/catalog-node/package.json.cjs.js +1 -1
  72. package/dist/plugins/scaffolder-node/package.json.cjs.js +1 -1
  73. package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +1 -1
  74. package/package.json +33 -33
  75. package/dist/lib/parallel.cjs.js +0 -141
  76. package/dist/lib/paths.cjs.js +0 -8
  77. /package/dist/{lib → modules/build/lib}/entryPoints.cjs.js +0 -0
@@ -0,0 +1,71 @@
1
+ 'use strict';
2
+
3
+ var tsMorph = require('ts-morph');
4
+
5
+ function extractTranslationRefsFromSourceFile(sourceFile, packageName, exportPath) {
6
+ const results = [];
7
+ for (const exportSymbol of sourceFile.getExportSymbols()) {
8
+ const declarations = exportSymbol.getDeclarations();
9
+ if (declarations.length === 0) {
10
+ continue;
11
+ }
12
+ const declaration = declarations[0];
13
+ const exportType = declaration.getType();
14
+ const refInfo = extractTranslationRefFromType(exportType, declaration);
15
+ if (!refInfo) {
16
+ continue;
17
+ }
18
+ results.push({
19
+ ...refInfo,
20
+ packageName,
21
+ exportPath,
22
+ exportName: exportSymbol.getName()
23
+ });
24
+ }
25
+ return results;
26
+ }
27
+ function extractTranslationRefFromType(type, declaration) {
28
+ const resolvedType = type.getTargetType() ?? type;
29
+ const $$typeProperty = resolvedType.getProperties().find((p) => p.getName() === "$$type");
30
+ if (!$$typeProperty) {
31
+ return void 0;
32
+ }
33
+ const $$typeDecl = $$typeProperty.getValueDeclaration();
34
+ if (!$$typeDecl) {
35
+ return void 0;
36
+ }
37
+ if (!$$typeDecl.getText().includes("'@backstage/TranslationRef'")) {
38
+ return void 0;
39
+ }
40
+ const typeArgs = type.getTypeArguments();
41
+ if (typeArgs.length < 2) {
42
+ return void 0;
43
+ }
44
+ const [idType, messagesType] = typeArgs;
45
+ if (!idType.isStringLiteral()) {
46
+ return void 0;
47
+ }
48
+ const id = idType.getLiteralValueOrThrow();
49
+ const messages = {};
50
+ for (const messageProp of messagesType.getProperties()) {
51
+ const key = messageProp.getName();
52
+ const propType = messageProp.getTypeAtLocation(declaration);
53
+ if (propType.isStringLiteral()) {
54
+ messages[key] = propType.getLiteralValueOrThrow();
55
+ }
56
+ }
57
+ if (Object.keys(messages).length === 0) {
58
+ return void 0;
59
+ }
60
+ return { id, messages };
61
+ }
62
+ function createTranslationProject(tsconfigPath) {
63
+ return new tsMorph.Project({
64
+ tsConfigFilePath: tsconfigPath,
65
+ skipAddingFilesFromTsConfig: true
66
+ });
67
+ }
68
+
69
+ exports.createTranslationProject = createTranslationProject;
70
+ exports.extractTranslationRefsFromSourceFile = extractTranslationRefsFromSourceFile;
71
+ //# sourceMappingURL=extractTranslations.cjs.js.map
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ const DEFAULT_LANGUAGE = "en";
4
+ const DEFAULT_MESSAGE_PATTERN = "messages/{id}.{lang}.json";
5
+ function formatMessagePath(pattern, id, lang) {
6
+ return pattern.replace(/\{id\}/g, id).replace(/\{lang\}/g, lang);
7
+ }
8
+ function createMessagePathParser(pattern) {
9
+ validatePattern(pattern);
10
+ const escaped = pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/\\{id\\}/g, "(?<id>[^/]+)").replace(/\\{lang\\}/g, "(?<lang>[a-z]{2})");
11
+ const regex = new RegExp(`^${escaped}$`);
12
+ return (relPath) => {
13
+ const match = relPath.match(regex);
14
+ if (!match?.groups) {
15
+ return void 0;
16
+ }
17
+ return { id: match.groups.id, lang: match.groups.lang };
18
+ };
19
+ }
20
+ function validatePattern(pattern) {
21
+ if (!pattern.includes("{id}")) {
22
+ throw new Error(
23
+ `Invalid message file pattern: must contain {id} placeholder. Got: ${pattern}`
24
+ );
25
+ }
26
+ if (!pattern.includes("{lang}")) {
27
+ throw new Error(
28
+ `Invalid message file pattern: must contain {lang} placeholder. Got: ${pattern}`
29
+ );
30
+ }
31
+ if (!pattern.endsWith(".json")) {
32
+ throw new Error(
33
+ `Invalid message file pattern: must end with .json. Got: ${pattern}`
34
+ );
35
+ }
36
+ }
37
+
38
+ exports.DEFAULT_LANGUAGE = DEFAULT_LANGUAGE;
39
+ exports.DEFAULT_MESSAGE_PATTERN = DEFAULT_MESSAGE_PATTERN;
40
+ exports.createMessagePathParser = createMessagePathParser;
41
+ exports.formatMessagePath = formatMessagePath;
42
+ exports.validatePattern = validatePattern;
43
+ //# sourceMappingURL=messageFilePath.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.15.2";
3
+ var version = "0.15.3-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.7.0";
3
+ var version = "1.7.1-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.11.0";
3
+ var version = "1.11.1-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.13.0";
3
+ var version = "1.13.1-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.35.4";
3
+ var version = "0.35.5-next.0";
4
4
  var dependencies = {
5
5
  "@backstage/catalog-model": "workspace:^",
6
6
  "@backstage/cli-common": "workspace:^",
@@ -34,11 +34,11 @@ var dependencies = {
34
34
  "@typescript-eslint/parser": "^8.16.0",
35
35
  "@yarnpkg/lockfile": "^1.1.0",
36
36
  "@yarnpkg/parsers": "^3.0.0",
37
- bfj: "^8.0.0",
37
+ bfj: "^9.0.2",
38
38
  buffer: "^6.0.3",
39
39
  chalk: "^4.0.0",
40
40
  chokidar: "^3.3.1",
41
- commander: "^12.0.0",
41
+ commander: "^14.0.3",
42
42
  "cross-fetch": "^4.0.0",
43
43
  "cross-spawn": "^7.0.3",
44
44
  "css-loader": "^6.5.1",
@@ -67,7 +67,7 @@ var dependencies = {
67
67
  "jest-css-modules": "^2.1.0",
68
68
  "json-schema": "^0.4.0",
69
69
  lodash: "^4.17.21",
70
- minimatch: "^9.0.0",
70
+ minimatch: "^10.2.1",
71
71
  "node-stdlib-browser": "^1.3.1",
72
72
  "npm-packlist": "^5.0.0",
73
73
  ora: "^5.3.0",
@@ -148,7 +148,7 @@ var devDependencies = {
148
148
  msw: "^1.0.0",
149
149
  nodemon: "^3.0.1",
150
150
  "terser-webpack-plugin": "^5.1.3",
151
- webpack: "~5.104.0",
151
+ webpack: "~5.105.0",
152
152
  "webpack-dev-server": "^5.0.0"
153
153
  };
154
154
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.19.5";
3
+ var version = "1.19.6-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.18.7";
3
+ var version = "0.18.8-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.12.3";
3
+ var version = "1.12.4-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.1.20";
3
+ var version = "1.1.21-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.4.0";
3
+ var version = "0.4.1-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.14.0";
3
+ var version = "0.14.2-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.5.0";
3
+ var version = "0.5.1-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "1.7.15";
3
+ var version = "1.7.16-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.27.0";
3
+ var version = "0.27.1-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.2.16";
3
+ var version = "0.2.17-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "2.0.0";
3
+ var version = "2.1.0-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.12.5";
3
+ var version = "0.12.6-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "0.3.8";
3
+ var version = "0.3.9-next.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.cjs.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/cli",
3
- "version": "0.35.4",
3
+ "version": "0.35.5-next.0",
4
4
  "description": "CLI for developing Backstage plugins and apps",
5
5
  "backstage": {
6
6
  "role": "cli"
@@ -47,17 +47,17 @@
47
47
  ]
48
48
  },
49
49
  "dependencies": {
50
- "@backstage/catalog-model": "^1.7.6",
51
- "@backstage/cli-common": "^0.1.18",
52
- "@backstage/cli-node": "^0.2.18",
53
- "@backstage/config": "^1.3.6",
54
- "@backstage/config-loader": "^1.10.8",
55
- "@backstage/errors": "^1.2.7",
56
- "@backstage/eslint-plugin": "^0.2.1",
57
- "@backstage/integration": "^1.20.0",
58
- "@backstage/module-federation-common": "^0.1.0",
59
- "@backstage/release-manifests": "^0.0.13",
60
- "@backstage/types": "^1.2.2",
50
+ "@backstage/catalog-model": "1.7.6",
51
+ "@backstage/cli-common": "0.2.0-next.0",
52
+ "@backstage/cli-node": "0.2.19-next.0",
53
+ "@backstage/config": "1.3.6",
54
+ "@backstage/config-loader": "1.10.9-next.0",
55
+ "@backstage/errors": "1.2.7",
56
+ "@backstage/eslint-plugin": "0.2.2-next.0",
57
+ "@backstage/integration": "1.21.0-next.0",
58
+ "@backstage/module-federation-common": "0.1.0",
59
+ "@backstage/release-manifests": "0.0.13",
60
+ "@backstage/types": "1.2.2",
61
61
  "@manypkg/get-packages": "^1.1.3",
62
62
  "@module-federation/enhanced": "^0.21.6",
63
63
  "@octokit/request": "^8.0.0",
@@ -79,11 +79,11 @@
79
79
  "@typescript-eslint/parser": "^8.16.0",
80
80
  "@yarnpkg/lockfile": "^1.1.0",
81
81
  "@yarnpkg/parsers": "^3.0.0",
82
- "bfj": "^8.0.0",
82
+ "bfj": "^9.0.2",
83
83
  "buffer": "^6.0.3",
84
84
  "chalk": "^4.0.0",
85
85
  "chokidar": "^3.3.1",
86
- "commander": "^12.0.0",
86
+ "commander": "^14.0.3",
87
87
  "cross-fetch": "^4.0.0",
88
88
  "cross-spawn": "^7.0.3",
89
89
  "css-loader": "^6.5.1",
@@ -112,7 +112,7 @@
112
112
  "jest-css-modules": "^2.1.0",
113
113
  "json-schema": "^0.4.0",
114
114
  "lodash": "^4.17.21",
115
- "minimatch": "^9.0.0",
115
+ "minimatch": "^10.2.1",
116
116
  "node-stdlib-browser": "^1.3.1",
117
117
  "npm-packlist": "^5.0.0",
118
118
  "ora": "^5.3.0",
@@ -148,22 +148,22 @@
148
148
  "zod-validation-error": "^4.0.2"
149
149
  },
150
150
  "devDependencies": {
151
- "@backstage/backend-plugin-api": "^1.7.0",
152
- "@backstage/backend-test-utils": "^1.11.0",
153
- "@backstage/catalog-client": "^1.13.0",
154
- "@backstage/config": "^1.3.6",
155
- "@backstage/core-app-api": "^1.19.5",
156
- "@backstage/core-components": "^0.18.7",
157
- "@backstage/core-plugin-api": "^1.12.3",
158
- "@backstage/dev-utils": "^1.1.20",
159
- "@backstage/errors": "^1.2.7",
160
- "@backstage/plugin-auth-backend": "^0.27.0",
161
- "@backstage/plugin-auth-backend-module-guest-provider": "^0.2.16",
162
- "@backstage/plugin-catalog-node": "^2.0.0",
163
- "@backstage/plugin-scaffolder-node": "^0.12.5",
164
- "@backstage/plugin-scaffolder-node-test-utils": "^0.3.8",
165
- "@backstage/test-utils": "^1.7.15",
166
- "@backstage/theme": "^0.7.2",
151
+ "@backstage/backend-plugin-api": "1.7.1-next.0",
152
+ "@backstage/backend-test-utils": "1.11.1-next.0",
153
+ "@backstage/catalog-client": "1.13.1-next.0",
154
+ "@backstage/config": "1.3.6",
155
+ "@backstage/core-app-api": "1.19.6-next.0",
156
+ "@backstage/core-components": "0.18.8-next.0",
157
+ "@backstage/core-plugin-api": "1.12.4-next.0",
158
+ "@backstage/dev-utils": "1.1.21-next.0",
159
+ "@backstage/errors": "1.2.7",
160
+ "@backstage/plugin-auth-backend": "0.27.1-next.0",
161
+ "@backstage/plugin-auth-backend-module-guest-provider": "0.2.17-next.0",
162
+ "@backstage/plugin-catalog-node": "2.1.0-next.0",
163
+ "@backstage/plugin-scaffolder-node": "0.12.6-next.0",
164
+ "@backstage/plugin-scaffolder-node-test-utils": "0.3.9-next.0",
165
+ "@backstage/test-utils": "1.7.16-next.0",
166
+ "@backstage/theme": "0.7.2",
167
167
  "@jest/environment-jsdom-abstract": "^30.0.0",
168
168
  "@pmmmwh/react-refresh-webpack-plugin": "^0.6.0",
169
169
  "@types/cross-spawn": "^6.0.2",
@@ -193,7 +193,7 @@
193
193
  "msw": "^1.0.0",
194
194
  "nodemon": "^3.0.1",
195
195
  "terser-webpack-plugin": "^5.1.3",
196
- "webpack": "~5.104.0",
196
+ "webpack": "~5.105.0",
197
197
  "webpack-dev-server": "^5.0.0"
198
198
  },
199
199
  "peerDependencies": {
@@ -208,7 +208,7 @@
208
208
  "jsdom": "^27.1.0",
209
209
  "mini-css-extract-plugin": "^2.4.2",
210
210
  "terser-webpack-plugin": "^5.1.3",
211
- "webpack": "~5.104.0",
211
+ "webpack": "~5.105.0",
212
212
  "webpack-dev-server": "^5.0.0"
213
213
  },
214
214
  "peerDependenciesMeta": {
@@ -1,141 +0,0 @@
1
- 'use strict';
2
-
3
- var os = require('node:os');
4
- var node_worker_threads = require('node:worker_threads');
5
-
6
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
7
-
8
- var os__default = /*#__PURE__*/_interopDefaultCompat(os);
9
-
10
- const defaultParallelism = Math.ceil(os__default.default.cpus().length / 2);
11
- const PARALLEL_ENV_VAR = "BACKSTAGE_CLI_BUILD_PARALLEL";
12
- function parseParallelismOption(parallel) {
13
- if (parallel === void 0 || parallel === null) {
14
- return defaultParallelism;
15
- } else if (typeof parallel === "boolean") {
16
- return parallel ? defaultParallelism : 1;
17
- } else if (typeof parallel === "number" && Number.isInteger(parallel)) {
18
- if (parallel < 1) {
19
- return 1;
20
- }
21
- return parallel;
22
- } else if (typeof parallel === "string") {
23
- if (parallel === "true") {
24
- return parseParallelismOption(true);
25
- } else if (parallel === "false") {
26
- return parseParallelismOption(false);
27
- }
28
- const parsed = Number(parallel);
29
- if (Number.isInteger(parsed)) {
30
- return parseParallelismOption(parsed);
31
- }
32
- }
33
- throw Error(
34
- `Parallel option value '${parallel}' is not a boolean or integer`
35
- );
36
- }
37
- function getEnvironmentParallelism() {
38
- return parseParallelismOption(process.env[PARALLEL_ENV_VAR]);
39
- }
40
- async function runParallelWorkers(options) {
41
- const { parallelismFactor = 1, parallelismSetting, items, worker } = options;
42
- const parallelism = parallelismSetting ? parseParallelismOption(parallelismSetting) : getEnvironmentParallelism();
43
- const sharedIterator = items[Symbol.iterator]();
44
- const sharedIterable = {
45
- [Symbol.iterator]: () => sharedIterator
46
- };
47
- const workerCount = Math.max(Math.floor(parallelismFactor * parallelism), 1);
48
- return Promise.all(
49
- Array(workerCount).fill(0).map(async () => {
50
- for (const value of sharedIterable) {
51
- await worker(value);
52
- }
53
- })
54
- );
55
- }
56
- async function runWorkerQueueThreads(options) {
57
- const items = Array.from(options.items);
58
- const {
59
- workerFactory,
60
- workerData,
61
- threadCount = Math.min(getEnvironmentParallelism(), items.length)
62
- } = options;
63
- const iterator = items[Symbol.iterator]();
64
- const results = new Array();
65
- let itemIndex = 0;
66
- await Promise.all(
67
- Array(threadCount).fill(0).map(async () => {
68
- const thread = new node_worker_threads.Worker(`(${workerQueueThread})(${workerFactory})`, {
69
- eval: true,
70
- workerData
71
- });
72
- return new Promise((resolve, reject) => {
73
- thread.on("message", (message) => {
74
- if (message.type === "start" || message.type === "result") {
75
- if (message.type === "result") {
76
- results[message.index] = message.result;
77
- }
78
- const { value, done } = iterator.next();
79
- if (done) {
80
- thread.postMessage({ type: "done" });
81
- } else {
82
- thread.postMessage({
83
- type: "item",
84
- index: itemIndex,
85
- item: value
86
- });
87
- itemIndex += 1;
88
- }
89
- } else if (message.type === "error") {
90
- const error = new Error(message.error.message);
91
- error.name = message.error.name;
92
- error.stack = message.error.stack;
93
- reject(error);
94
- }
95
- });
96
- thread.on("error", reject);
97
- thread.on("exit", (code) => {
98
- if (code !== 0) {
99
- reject(new Error(`Worker thread exited with code ${code}`));
100
- } else {
101
- resolve();
102
- }
103
- });
104
- });
105
- })
106
- );
107
- return results;
108
- }
109
- function workerQueueThread(workerFuncFactory) {
110
- const { parentPort, workerData } = require("node:worker_threads");
111
- Promise.resolve().then(() => workerFuncFactory(workerData)).then(
112
- (workerFunc) => {
113
- parentPort.on("message", async (message) => {
114
- if (message.type === "done") {
115
- parentPort.close();
116
- return;
117
- }
118
- if (message.type === "item") {
119
- try {
120
- const result = await workerFunc(message.item);
121
- parentPort.postMessage({
122
- type: "result",
123
- index: message.index,
124
- result
125
- });
126
- } catch (error) {
127
- parentPort.postMessage({ type: "error", error });
128
- }
129
- }
130
- });
131
- parentPort.postMessage({ type: "start" });
132
- },
133
- (error) => parentPort.postMessage({ type: "error", error })
134
- );
135
- }
136
-
137
- exports.getEnvironmentParallelism = getEnvironmentParallelism;
138
- exports.parseParallelismOption = parseParallelismOption;
139
- exports.runParallelWorkers = runParallelWorkers;
140
- exports.runWorkerQueueThreads = runWorkerQueueThreads;
141
- //# sourceMappingURL=parallel.cjs.js.map
@@ -1,8 +0,0 @@
1
- 'use strict';
2
-
3
- var cliCommon = require('@backstage/cli-common');
4
-
5
- const paths = cliCommon.findPaths(__dirname);
6
-
7
- exports.paths = paths;
8
- //# sourceMappingURL=paths.cjs.js.map