@backstage/cli 0.18.0 → 0.18.1-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.
- package/CHANGELOG.md +7 -0
- package/dist/cjs/{Lockfile-48dc675e.cjs.js → Lockfile-72b7072e.cjs.js} +25 -9
- package/dist/cjs/{PackageGraph-1d7b086a.cjs.js → PackageGraph-6e1d4bd4.cjs.js} +17 -9
- package/dist/cjs/{build-52ba70a2.cjs.js → build-3b11f7c9.cjs.js} +26 -15
- package/dist/cjs/{buildBackend-55985c84.cjs.js → buildBackend-87996ad4.cjs.js} +61 -36
- package/dist/cjs/{buildWorkspace-d663903d.cjs.js → buildWorkspace-425726da.cjs.js} +7 -7
- package/dist/cjs/{bump-1a3769e9.cjs.js → bump-f3c6b3cd.cjs.js} +88 -33
- package/dist/cjs/{clean-9a8c294a.cjs.js → clean-798512b5.cjs.js} +2 -2
- package/dist/cjs/{config-de1bf46a.cjs.js → config-4a59f918.cjs.js} +15 -11
- package/dist/cjs/{create-b0ca2add.cjs.js → create-a7269bb5.cjs.js} +80 -32
- package/dist/cjs/{createDistWorkspace-fc94c796.cjs.js → createDistWorkspace-cb9a9a84.cjs.js} +137 -65
- package/dist/cjs/{createPlugin-4d7e1b01.cjs.js → createPlugin-fca2c26e.cjs.js} +69 -30
- package/dist/cjs/{diff-a561bee3.cjs.js → diff-3dec490d.cjs.js} +68 -16
- package/dist/cjs/{docs-bd70b38e.cjs.js → docs-e60d4fe7.cjs.js} +9 -5
- package/dist/cjs/{fix-47eb8dc4.cjs.js → fix-b60a5395.cjs.js} +17 -7
- package/dist/cjs/{index-27d57881.cjs.js → index-131467e2.cjs.js} +10 -10
- package/dist/cjs/{index-7e13cc9d.cjs.js → index-50703ee1.cjs.js} +151 -50
- package/dist/cjs/{index-4f4a8498.cjs.js → index-71d143d5.cjs.js} +57 -38
- package/dist/cjs/{index-bb24147b.cjs.js → index-7efbd23e.cjs.js} +39 -12
- package/dist/cjs/{info-29f0ee36.cjs.js → info-04610119.cjs.js} +20 -6
- package/dist/cjs/{install-fea0e3f5.cjs.js → install-589f1c25.cjs.js} +44 -17
- package/dist/cjs/{lint-81a75364.cjs.js → lint-41010f96.cjs.js} +37 -11
- package/dist/cjs/{lint-1711bbbb.cjs.js → lint-6fcb9a70.cjs.js} +5 -3
- package/dist/cjs/{lint-0db8937c.cjs.js → lint-7f6b0d33.cjs.js} +4 -4
- package/dist/cjs/{list-deprecations-cea8fad3.cjs.js → list-deprecations-8aee2123.cjs.js} +3 -3
- package/dist/cjs/{pack-8ab429c0.cjs.js → pack-91881c2f.cjs.js} +17 -11
- package/dist/cjs/packageLintConfigs-f9e5fcc6.cjs.js +83 -0
- package/dist/cjs/packageRole-16eb6c89.cjs.js +59 -0
- package/dist/cjs/{packageRoles-a310f84c.cjs.js → packageRoles-96528891.cjs.js} +5 -3
- package/dist/cjs/packageScripts-eb2443c2.cjs.js +98 -0
- package/dist/cjs/{packages-ea5c38ec.cjs.js → packages-1b40c101.cjs.js} +17 -12
- package/dist/cjs/parallel-a8f6219c.cjs.js +187 -0
- package/dist/cjs/{paths-d98c9d0c.cjs.js → paths-b34f135a.cjs.js} +100 -55
- package/dist/cjs/{print-4cbe70e7.cjs.js → print-e99d7c2e.cjs.js} +4 -4
- package/dist/cjs/{run-5e05ba2c.cjs.js → run-722b1384.cjs.js} +2 -2
- package/dist/cjs/{schema-2c842cbe.cjs.js → schema-c636e913.cjs.js} +9 -5
- package/dist/cjs/{tasks-b054c9ce.cjs.js → tasks-4776baa6.cjs.js} +29 -12
- package/dist/cjs/{test-b5969f53.cjs.js → test-76539f57.cjs.js} +3 -3
- package/dist/cjs/{validate-8a03d402.cjs.js → validate-f9273594.cjs.js} +4 -4
- package/dist/index.cjs.js +1 -1
- package/package.json +12 -12
- package/dist/cjs/packageLintConfigs-77b71b79.cjs.js +0 -74
- package/dist/cjs/packageRole-d1e7c7d6.cjs.js +0 -53
- package/dist/cjs/packageScripts-6731503e.cjs.js +0 -96
- package/dist/cjs/parallel-8286d3fa.cjs.js +0 -171
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/cli",
|
|
3
3
|
"description": "CLI for developing Backstage plugins and apps",
|
|
4
|
-
"version": "0.18.0",
|
|
4
|
+
"version": "0.18.1-next.0",
|
|
5
5
|
"private": false,
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
"@spotify/eslint-config-typescript": "^14.0.0",
|
|
51
51
|
"@sucrase/jest-plugin": "^2.1.1",
|
|
52
52
|
"@sucrase/webpack-loader": "^2.0.0",
|
|
53
|
-
"@svgr/plugin-jsx": "6.
|
|
54
|
-
"@svgr/plugin-svgo": "6.
|
|
55
|
-
"@svgr/rollup": "6.
|
|
56
|
-
"@svgr/webpack": "6.
|
|
53
|
+
"@svgr/plugin-jsx": "6.3.x",
|
|
54
|
+
"@svgr/plugin-svgo": "6.3.x",
|
|
55
|
+
"@svgr/rollup": "6.3.x",
|
|
56
|
+
"@svgr/webpack": "6.3.x",
|
|
57
57
|
"@types/webpack-env": "^1.15.2",
|
|
58
58
|
"@typescript-eslint/eslint-plugin": "^5.9.0",
|
|
59
59
|
"@typescript-eslint/parser": "^5.9.0",
|
|
@@ -126,13 +126,13 @@
|
|
|
126
126
|
"zod": "^3.11.6"
|
|
127
127
|
},
|
|
128
128
|
"devDependencies": {
|
|
129
|
-
"@backstage/backend-common": "^0.
|
|
129
|
+
"@backstage/backend-common": "^0.15.0-next.0",
|
|
130
130
|
"@backstage/config": "^1.0.1",
|
|
131
|
-
"@backstage/core-app-api": "^1.0.
|
|
132
|
-
"@backstage/core-components": "^0.10.0",
|
|
133
|
-
"@backstage/core-plugin-api": "^1.0.
|
|
134
|
-
"@backstage/dev-utils": "^1.0.
|
|
135
|
-
"@backstage/test-utils": "^1.1.
|
|
131
|
+
"@backstage/core-app-api": "^1.0.5-next.0",
|
|
132
|
+
"@backstage/core-components": "^0.10.1-next.0",
|
|
133
|
+
"@backstage/core-plugin-api": "^1.0.5-next.0",
|
|
134
|
+
"@backstage/dev-utils": "^1.0.5-next.0",
|
|
135
|
+
"@backstage/test-utils": "^1.1.3-next.0",
|
|
136
136
|
"@backstage/theme": "^0.2.16",
|
|
137
137
|
"@types/diff": "^5.0.0",
|
|
138
138
|
"@types/express": "^4.17.6",
|
|
@@ -250,5 +250,5 @@
|
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
252
|
},
|
|
253
|
-
"gitHead": "
|
|
253
|
+
"gitHead": "fc3229c49caf6eced02ed9516199015bf4682664"
|
|
254
254
|
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var fs = require('fs-extra');
|
|
4
|
-
var path = require('path');
|
|
5
|
-
var PackageGraph = require('./PackageGraph-1d7b086a.cjs.js');
|
|
6
|
-
var run = require('./run-5e05ba2c.cjs.js');
|
|
7
|
-
require('@manypkg/get-packages');
|
|
8
|
-
require('./index-7e13cc9d.cjs.js');
|
|
9
|
-
require('commander');
|
|
10
|
-
require('chalk');
|
|
11
|
-
require('semver');
|
|
12
|
-
require('@backstage/cli-common');
|
|
13
|
-
require('@backstage/errors');
|
|
14
|
-
require('child_process');
|
|
15
|
-
require('util');
|
|
16
|
-
|
|
17
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
18
|
-
|
|
19
|
-
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
20
|
-
|
|
21
|
-
const PREFIX = `module.exports = require('@backstage/cli/config/eslint-factory')`;
|
|
22
|
-
async function command() {
|
|
23
|
-
const packages = await PackageGraph.PackageGraph.listTargetPackages();
|
|
24
|
-
const oldConfigs = [
|
|
25
|
-
require.resolve("@backstage/cli/config/eslint.js"),
|
|
26
|
-
require.resolve("@backstage/cli/config/eslint.backend.js")
|
|
27
|
-
];
|
|
28
|
-
const configPaths = new Array();
|
|
29
|
-
await Promise.all(packages.map(async ({ dir, packageJson }) => {
|
|
30
|
-
var _a;
|
|
31
|
-
const configPath = path.resolve(dir, ".eslintrc.js");
|
|
32
|
-
if (!await fs__default["default"].pathExists(configPath)) {
|
|
33
|
-
console.log(`Skipping ${packageJson.name}, missing .eslintrc.js`);
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
let existingConfig;
|
|
37
|
-
try {
|
|
38
|
-
existingConfig = require(configPath);
|
|
39
|
-
} catch (error) {
|
|
40
|
-
console.log(`Skipping ${packageJson.name}, failed to load .eslintrc.js, ${error}`);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const extendsArray = (_a = existingConfig.extends) != null ? _a : [];
|
|
44
|
-
const extendIndex = extendsArray.findIndex((p) => oldConfigs.includes(p));
|
|
45
|
-
if (extendIndex === -1) {
|
|
46
|
-
console.log(`Skipping ${packageJson.name}, .eslintrc.js does not extend the legacy config`);
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
extendsArray.splice(extendIndex, 1);
|
|
50
|
-
if (extendsArray.length === 0) {
|
|
51
|
-
delete existingConfig.extends;
|
|
52
|
-
}
|
|
53
|
-
if (Object.keys(existingConfig).length > 0) {
|
|
54
|
-
await fs__default["default"].writeFile(configPath, `${PREFIX}(__dirname, ${JSON.stringify(existingConfig, null, 2)});
|
|
55
|
-
`);
|
|
56
|
-
} else {
|
|
57
|
-
await fs__default["default"].writeFile(configPath, `${PREFIX}(__dirname);
|
|
58
|
-
`);
|
|
59
|
-
}
|
|
60
|
-
configPaths.push(configPath);
|
|
61
|
-
}));
|
|
62
|
-
let hasPrettier = false;
|
|
63
|
-
try {
|
|
64
|
-
require.resolve("prettier");
|
|
65
|
-
hasPrettier = true;
|
|
66
|
-
} catch {
|
|
67
|
-
}
|
|
68
|
-
if (hasPrettier) {
|
|
69
|
-
await run.runPlain("prettier", "--write", ...configPaths);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
exports.command = command;
|
|
74
|
-
//# sourceMappingURL=packageLintConfigs-77b71b79.cjs.js.map
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var fs = require('fs-extra');
|
|
4
|
-
var path = require('path');
|
|
5
|
-
var getPackages = require('@manypkg/get-packages');
|
|
6
|
-
var index = require('./index-7e13cc9d.cjs.js');
|
|
7
|
-
var packageRoles = require('./packageRoles-a310f84c.cjs.js');
|
|
8
|
-
require('commander');
|
|
9
|
-
require('chalk');
|
|
10
|
-
require('semver');
|
|
11
|
-
require('@backstage/cli-common');
|
|
12
|
-
require('@backstage/errors');
|
|
13
|
-
require('zod');
|
|
14
|
-
|
|
15
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
16
|
-
|
|
17
|
-
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
18
|
-
|
|
19
|
-
var packageRole = async () => {
|
|
20
|
-
const { packages } = await getPackages.getPackages(index.paths.targetDir);
|
|
21
|
-
await Promise.all(packages.map(async ({ dir, packageJson: pkg }) => {
|
|
22
|
-
const { name } = pkg;
|
|
23
|
-
const existingRole = packageRoles.getRoleFromPackage(pkg);
|
|
24
|
-
if (existingRole) {
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
const detectedRole = packageRoles.detectRoleFromPackage(pkg);
|
|
28
|
-
if (!detectedRole) {
|
|
29
|
-
console.error(`No role detected for package ${name}`);
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
console.log(`Detected package role of ${name} as ${detectedRole}`);
|
|
33
|
-
let newPkg = pkg;
|
|
34
|
-
const pkgKeys = Object.keys(pkg);
|
|
35
|
-
if (pkgKeys.includes("backstage")) {
|
|
36
|
-
newPkg.backstage = {
|
|
37
|
-
...newPkg.backstage,
|
|
38
|
-
role: detectedRole
|
|
39
|
-
};
|
|
40
|
-
} else {
|
|
41
|
-
const index = Math.max(pkgKeys.indexOf("version"), pkgKeys.indexOf("private"), pkgKeys.indexOf("publishConfig")) + 1 || pkgKeys.length;
|
|
42
|
-
const pkgEntries = Object.entries(pkg);
|
|
43
|
-
pkgEntries.splice(index, 0, ["backstage", { role: detectedRole }]);
|
|
44
|
-
newPkg = Object.fromEntries(pkgEntries);
|
|
45
|
-
}
|
|
46
|
-
await fs__default["default"].writeJson(path.resolve(dir, "package.json"), newPkg, {
|
|
47
|
-
spaces: 2
|
|
48
|
-
});
|
|
49
|
-
}));
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
exports["default"] = packageRole;
|
|
53
|
-
//# sourceMappingURL=packageRole-d1e7c7d6.cjs.js.map
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var fs = require('fs-extra');
|
|
4
|
-
var path = require('path');
|
|
5
|
-
var PackageGraph = require('./PackageGraph-1d7b086a.cjs.js');
|
|
6
|
-
var packageRoles = require('./packageRoles-a310f84c.cjs.js');
|
|
7
|
-
require('@manypkg/get-packages');
|
|
8
|
-
require('./index-7e13cc9d.cjs.js');
|
|
9
|
-
require('commander');
|
|
10
|
-
require('chalk');
|
|
11
|
-
require('semver');
|
|
12
|
-
require('@backstage/cli-common');
|
|
13
|
-
require('@backstage/errors');
|
|
14
|
-
require('child_process');
|
|
15
|
-
require('util');
|
|
16
|
-
require('zod');
|
|
17
|
-
|
|
18
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
19
|
-
|
|
20
|
-
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
|
|
21
|
-
|
|
22
|
-
const configArgPattern = /--config[=\s][^\s$]+/;
|
|
23
|
-
const noStartRoles = ["cli", "common-library"];
|
|
24
|
-
async function command() {
|
|
25
|
-
const packages = await PackageGraph.PackageGraph.listTargetPackages();
|
|
26
|
-
await Promise.all(packages.map(async ({ dir, packageJson }) => {
|
|
27
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
28
|
-
const role = packageRoles.getRoleFromPackage(packageJson);
|
|
29
|
-
if (!role) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
const roleInfo = packageRoles.getRoleInfo(role);
|
|
33
|
-
const hasStart = !noStartRoles.includes(role);
|
|
34
|
-
const needsPack = !(roleInfo.output.includes("bundle") || role === "cli");
|
|
35
|
-
const scripts = (_a = packageJson.scripts) != null ? _a : {};
|
|
36
|
-
const startCmd = ["start"];
|
|
37
|
-
if ((_b = scripts.start) == null ? void 0 : _b.includes("--check")) {
|
|
38
|
-
startCmd.push("--check");
|
|
39
|
-
}
|
|
40
|
-
if ((_c = scripts.start) == null ? void 0 : _c.includes("--config")) {
|
|
41
|
-
startCmd.push(...(_d = scripts.start.match(configArgPattern)) != null ? _d : []);
|
|
42
|
-
}
|
|
43
|
-
const buildCmd = ["build"];
|
|
44
|
-
if ((_e = scripts.build) == null ? void 0 : _e.includes("--minify")) {
|
|
45
|
-
buildCmd.push("--minify");
|
|
46
|
-
}
|
|
47
|
-
if ((_f = scripts.build) == null ? void 0 : _f.includes("--experimental-type-build")) {
|
|
48
|
-
buildCmd.push("--experimental-type-build");
|
|
49
|
-
}
|
|
50
|
-
if ((_g = scripts.build) == null ? void 0 : _g.includes("--config")) {
|
|
51
|
-
buildCmd.push(...(_h = scripts.build.match(configArgPattern)) != null ? _h : []);
|
|
52
|
-
}
|
|
53
|
-
const testCmd = ["test"];
|
|
54
|
-
if ((_i = scripts.test) == null ? void 0 : _i.startsWith("backstage-cli test")) {
|
|
55
|
-
const args = scripts.test.slice("backstage-cli test".length).split(" ").filter(Boolean);
|
|
56
|
-
if (args.includes("--passWithNoTests")) {
|
|
57
|
-
args.splice(args.indexOf("--passWithNoTests"), 1);
|
|
58
|
-
}
|
|
59
|
-
testCmd.push(...args);
|
|
60
|
-
}
|
|
61
|
-
const expectedScripts = {
|
|
62
|
-
...hasStart && {
|
|
63
|
-
start: `backstage-cli package ${startCmd.join(" ")}`
|
|
64
|
-
},
|
|
65
|
-
build: `backstage-cli package ${buildCmd.join(" ")}`,
|
|
66
|
-
lint: "backstage-cli package lint",
|
|
67
|
-
test: `backstage-cli package ${testCmd.join(" ")}`,
|
|
68
|
-
clean: "backstage-cli package clean",
|
|
69
|
-
...needsPack && {
|
|
70
|
-
postpack: "backstage-cli package postpack",
|
|
71
|
-
prepack: "backstage-cli package prepack"
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
let changed = false;
|
|
75
|
-
const currentScripts = packageJson.scripts = packageJson.scripts || {};
|
|
76
|
-
for (const [name, value] of Object.entries(expectedScripts)) {
|
|
77
|
-
const currentScript = currentScripts[name];
|
|
78
|
-
const isMissing = !currentScript;
|
|
79
|
-
const isDifferent = currentScript !== value;
|
|
80
|
-
const isBackstageScript = currentScript == null ? void 0 : currentScript.includes("backstage-cli");
|
|
81
|
-
if (isMissing || isDifferent && isBackstageScript) {
|
|
82
|
-
changed = true;
|
|
83
|
-
currentScripts[name] = value;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (changed) {
|
|
87
|
-
console.log(`Updating scripts for ${packageJson.name}`);
|
|
88
|
-
await fs__default["default"].writeJson(path.resolve(dir, "package.json"), packageJson, {
|
|
89
|
-
spaces: 2
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
}));
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
exports.command = command;
|
|
96
|
-
//# sourceMappingURL=packageScripts-6731503e.cjs.js.map
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var os = require('os');
|
|
4
|
-
var worker_threads = require('worker_threads');
|
|
5
|
-
|
|
6
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
7
|
-
|
|
8
|
-
var os__default = /*#__PURE__*/_interopDefaultLegacy(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(`Parallel option value '${parallel}' is not a boolean or integer`);
|
|
34
|
-
}
|
|
35
|
-
function getEnvironmentParallelism() {
|
|
36
|
-
return parseParallelismOption(process.env[PARALLEL_ENV_VAR]);
|
|
37
|
-
}
|
|
38
|
-
async function runParallelWorkers(options) {
|
|
39
|
-
const { parallelismFactor = 1, parallelismSetting, items, worker } = options;
|
|
40
|
-
const parallelism = parallelismSetting ? parseParallelismOption(parallelismSetting) : getEnvironmentParallelism();
|
|
41
|
-
const sharedIterator = items[Symbol.iterator]();
|
|
42
|
-
const sharedIterable = {
|
|
43
|
-
[Symbol.iterator]: () => sharedIterator
|
|
44
|
-
};
|
|
45
|
-
const workerCount = Math.max(Math.floor(parallelismFactor * parallelism), 1);
|
|
46
|
-
return Promise.all(Array(workerCount).fill(0).map(async () => {
|
|
47
|
-
for (const value of sharedIterable) {
|
|
48
|
-
await worker(value);
|
|
49
|
-
}
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
async function runWorkerQueueThreads(options) {
|
|
53
|
-
const items = Array.from(options.items);
|
|
54
|
-
const {
|
|
55
|
-
workerFactory,
|
|
56
|
-
workerData,
|
|
57
|
-
threadCount = Math.min(getEnvironmentParallelism(), items.length)
|
|
58
|
-
} = options;
|
|
59
|
-
const iterator = items[Symbol.iterator]();
|
|
60
|
-
const results = new Array();
|
|
61
|
-
let itemIndex = 0;
|
|
62
|
-
await Promise.all(Array(threadCount).fill(0).map(async () => {
|
|
63
|
-
const thread = new worker_threads.Worker(`(${workerQueueThread})(${workerFactory})`, {
|
|
64
|
-
eval: true,
|
|
65
|
-
workerData
|
|
66
|
-
});
|
|
67
|
-
return new Promise((resolve, reject) => {
|
|
68
|
-
thread.on("message", (message) => {
|
|
69
|
-
if (message.type === "start" || message.type === "result") {
|
|
70
|
-
if (message.type === "result") {
|
|
71
|
-
results[message.index] = message.result;
|
|
72
|
-
}
|
|
73
|
-
const { value, done } = iterator.next();
|
|
74
|
-
if (done) {
|
|
75
|
-
thread.postMessage({ type: "done" });
|
|
76
|
-
} else {
|
|
77
|
-
thread.postMessage({
|
|
78
|
-
type: "item",
|
|
79
|
-
index: itemIndex,
|
|
80
|
-
item: value
|
|
81
|
-
});
|
|
82
|
-
itemIndex += 1;
|
|
83
|
-
}
|
|
84
|
-
} else if (message.type === "error") {
|
|
85
|
-
const error = new Error(message.error.message);
|
|
86
|
-
error.name = message.error.name;
|
|
87
|
-
error.stack = message.error.stack;
|
|
88
|
-
reject(error);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
thread.on("error", reject);
|
|
92
|
-
thread.on("exit", (code) => {
|
|
93
|
-
if (code !== 0) {
|
|
94
|
-
reject(new Error(`Worker thread exited with code ${code}`));
|
|
95
|
-
} else {
|
|
96
|
-
resolve();
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
}));
|
|
101
|
-
return results;
|
|
102
|
-
}
|
|
103
|
-
function workerQueueThread(workerFuncFactory) {
|
|
104
|
-
const { parentPort, workerData } = require("worker_threads");
|
|
105
|
-
Promise.resolve().then(() => workerFuncFactory(workerData)).then((workerFunc) => {
|
|
106
|
-
parentPort.on("message", async (message) => {
|
|
107
|
-
if (message.type === "done") {
|
|
108
|
-
parentPort.close();
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
if (message.type === "item") {
|
|
112
|
-
try {
|
|
113
|
-
const result = await workerFunc(message.item);
|
|
114
|
-
parentPort.postMessage({
|
|
115
|
-
type: "result",
|
|
116
|
-
index: message.index,
|
|
117
|
-
result
|
|
118
|
-
});
|
|
119
|
-
} catch (error) {
|
|
120
|
-
parentPort.postMessage({ type: "error", error });
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
parentPort.postMessage({ type: "start" });
|
|
125
|
-
}, (error) => parentPort.postMessage({ type: "error", error }));
|
|
126
|
-
}
|
|
127
|
-
async function runWorkerThreads(options) {
|
|
128
|
-
const { worker, workerData, threadCount = 1, onMessage } = options;
|
|
129
|
-
return Promise.all(Array(threadCount).fill(0).map(async () => {
|
|
130
|
-
const thread = new worker_threads.Worker(`(${workerThread})(${worker})`, {
|
|
131
|
-
eval: true,
|
|
132
|
-
workerData
|
|
133
|
-
});
|
|
134
|
-
return new Promise((resolve, reject) => {
|
|
135
|
-
thread.on("message", (message) => {
|
|
136
|
-
if (message.type === "result") {
|
|
137
|
-
resolve(message.result);
|
|
138
|
-
} else if (message.type === "error") {
|
|
139
|
-
reject(message.error);
|
|
140
|
-
} else if (message.type === "message") {
|
|
141
|
-
onMessage == null ? void 0 : onMessage(message.message);
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
thread.on("error", reject);
|
|
145
|
-
thread.on("exit", (code) => {
|
|
146
|
-
reject(new Error(`Unexpected worker thread exit with code ${code}`));
|
|
147
|
-
});
|
|
148
|
-
});
|
|
149
|
-
}));
|
|
150
|
-
}
|
|
151
|
-
function workerThread(workerFunc) {
|
|
152
|
-
const { parentPort, workerData } = require("worker_threads");
|
|
153
|
-
const sendMessage = (message) => {
|
|
154
|
-
parentPort.postMessage({ type: "message", message });
|
|
155
|
-
};
|
|
156
|
-
workerFunc(workerData, sendMessage).then((result) => {
|
|
157
|
-
parentPort.postMessage({
|
|
158
|
-
type: "result",
|
|
159
|
-
index: 0,
|
|
160
|
-
result
|
|
161
|
-
});
|
|
162
|
-
}, (error) => {
|
|
163
|
-
parentPort.postMessage({ type: "error", error });
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
exports.getEnvironmentParallelism = getEnvironmentParallelism;
|
|
168
|
-
exports.runParallelWorkers = runParallelWorkers;
|
|
169
|
-
exports.runWorkerQueueThreads = runWorkerQueueThreads;
|
|
170
|
-
exports.runWorkerThreads = runWorkerThreads;
|
|
171
|
-
//# sourceMappingURL=parallel-8286d3fa.cjs.js.map
|