@xylabs/threads 4.7.0 → 4.7.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.
- package/dist/{types/common.d.ts → common.d.ts} +1 -5
- package/dist/common.js +16 -0
- package/dist/esm/common.js +16 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/master/get-bundle-url.browser.js +25 -0
- package/dist/esm/master/implementation.browser.js +65 -0
- package/dist/esm/master/implementation.js +43 -0
- package/dist/esm/master/implementation.node.js +205 -0
- package/dist/esm/master/index.js +14 -0
- package/dist/esm/master/invocation-proxy.js +121 -0
- package/dist/esm/master/pool-types.js +14 -0
- package/dist/esm/master/pool.js +262 -0
- package/dist/esm/master/register.js +11 -0
- package/dist/esm/master/spawn.js +114 -0
- package/dist/esm/master/thread.js +18 -0
- package/dist/esm/observable-promise.js +132 -0
- package/dist/esm/observable.js +33 -0
- package/dist/esm/ponyfills.js +20 -0
- package/dist/esm/promise.js +23 -0
- package/dist/esm/serializers.js +41 -0
- package/dist/esm/symbols.js +8 -0
- package/dist/esm/transferable.js +25 -0
- package/dist/esm/types/master.js +9 -0
- package/dist/esm/types/messages.js +16 -0
- package/dist/esm/types/worker.js +2 -0
- package/dist/esm/worker/bundle-entry.js +26 -0
- package/dist/esm/worker/implementation.browser.js +24 -0
- package/dist/esm/worker/implementation.js +19 -0
- package/dist/esm/worker/implementation.tiny-worker.js +37 -0
- package/dist/esm/worker/implementation.worker_threads.js +41 -0
- package/dist/esm/worker/index.js +174 -0
- package/dist/esm/worker_threads.js +13 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +26 -0
- package/dist/{types/master → master}/get-bundle-url.browser.d.ts +0 -1
- package/dist/master/get-bundle-url.browser.js +25 -0
- package/dist/{types/master → master}/implementation.browser.d.ts +1 -2
- package/dist/master/implementation.browser.js +65 -0
- package/dist/{types/master → master}/implementation.d.ts +1 -4
- package/dist/master/implementation.js +43 -0
- package/dist/{types/master → master}/implementation.node.d.ts +1 -2
- package/dist/master/implementation.node.js +205 -0
- package/dist/master/index.d.ts +10 -0
- package/dist/master/index.js +14 -0
- package/dist/{types/master → master}/invocation-proxy.d.ts +1 -2
- package/dist/master/invocation-proxy.js +121 -0
- package/dist/{types/master → master}/pool-types.d.ts +1 -16
- package/dist/master/pool-types.js +14 -0
- package/dist/master/pool.d.ts +50 -0
- package/dist/master/pool.js +262 -0
- package/dist/master/register.d.ts +1 -0
- package/dist/master/register.js +11 -0
- package/dist/{types/master → master}/spawn.d.ts +2 -12
- package/dist/master/spawn.js +114 -0
- package/dist/master/thread.d.ts +8 -0
- package/dist/master/thread.js +18 -0
- package/dist/{types/observable-promise.d.ts → observable-promise.d.ts} +0 -14
- package/dist/observable-promise.js +132 -0
- package/dist/observable.d.ts +11 -0
- package/dist/observable.js +33 -0
- package/dist/{types/ponyfills.d.ts → ponyfills.d.ts} +0 -1
- package/dist/ponyfills.js +20 -0
- package/dist/promise.d.ts +1 -0
- package/dist/promise.js +23 -0
- package/dist/{types/serializers.d.ts → serializers.d.ts} +0 -1
- package/dist/serializers.js +41 -0
- package/dist/{types/symbols.d.ts → symbols.d.ts} +0 -1
- package/dist/symbols.js +8 -0
- package/dist/transferable.d.ts +9 -0
- package/dist/transferable.js +25 -0
- package/dist/types/{types/master.d.ts → master.d.ts} +3 -17
- package/dist/types/master.js +9 -0
- package/dist/types/{types/messages.d.ts → messages.d.ts} +0 -1
- package/dist/types/messages.js +16 -0
- package/dist/types/{types/worker.d.ts → worker.d.ts} +0 -1
- package/dist/types/worker.js +2 -0
- package/dist/worker/bundle-entry.d.ts +1 -0
- package/dist/worker/bundle-entry.js +26 -0
- package/dist/worker/implementation.browser.d.ts +6 -0
- package/dist/worker/implementation.browser.js +24 -0
- package/dist/worker/implementation.d.ts +3 -0
- package/dist/worker/implementation.js +19 -0
- package/dist/worker/implementation.tiny-worker.d.ts +6 -0
- package/dist/worker/implementation.tiny-worker.js +37 -0
- package/dist/worker/implementation.worker_threads.d.ts +8 -0
- package/dist/worker/implementation.worker_threads.js +41 -0
- package/dist/worker/index.d.ts +5 -0
- package/dist/worker/index.js +174 -0
- package/dist/worker_threads.d.ts +8 -0
- package/dist/worker_threads.js +13 -0
- package/observable.d.ts +2 -0
- package/observable.js +2 -0
- package/observable.mjs +4 -0
- package/package.json +77 -66
- package/register.d.ts +2 -0
- package/register.js +2 -0
- package/register.mjs +1 -0
- package/rollup.config.js +16 -0
- package/src/common.ts +6 -10
- package/src/index.ts +9 -10
- package/src/master/get-bundle-url.browser.ts +1 -2
- package/src/master/implementation.browser.ts +2 -2
- package/src/master/implementation.node.ts +96 -19
- package/src/master/implementation.ts +2 -2
- package/src/master/index.ts +7 -7
- package/src/master/invocation-proxy.ts +6 -6
- package/src/master/pool-types.ts +1 -1
- package/src/master/pool.ts +13 -14
- package/src/master/register.ts +1 -2
- package/src/master/spawn.ts +8 -8
- package/src/master/thread.ts +2 -2
- package/src/observable-promise.ts +2 -3
- package/src/serializers.ts +1 -1
- package/src/transferable.ts +1 -2
- package/src/types/master.ts +3 -3
- package/src/worker/bundle-entry.ts +10 -0
- package/src/worker/{worker.browser.ts → implementation.browser.ts} +10 -26
- package/src/worker/implementation.tiny-worker.ts +55 -0
- package/src/worker/implementation.ts +23 -0
- package/src/worker/{worker.node.ts → implementation.worker_threads.ts} +12 -30
- package/src/worker/index.ts +230 -0
- package/src/worker_threads.ts +27 -0
- package/test/lib/index.ts +1 -0
- package/test/lib/serialization.ts +38 -0
- package/test/observable-promise.test.ts +205 -0
- package/test/observable.test.ts +87 -0
- package/test/pool.test.ts +183 -0
- package/test/serialization.test.ts +23 -0
- package/test/spawn.chromium.mocha.ts +53 -0
- package/test/spawn.test.ts +87 -0
- package/test/streaming.test.ts +29 -0
- package/test/transferables.test.ts +71 -0
- package/test/workers/arraybuffer-xor.ts +10 -0
- package/test/workers/count-to-five.ts +12 -0
- package/test/workers/counter.ts +19 -0
- package/test/workers/faulty-function.ts +5 -0
- package/test/workers/hello-world.ts +5 -0
- package/test/workers/increment.ts +8 -0
- package/test/workers/minmax.ts +25 -0
- package/test/workers/serialization.ts +13 -0
- package/test/workers/top-level-throw.ts +1 -0
- package/test-tooling/rollup/app.js +21 -0
- package/test-tooling/rollup/rollup.config.ts +14 -0
- package/test-tooling/rollup/worker.js +7 -0
- package/test-tooling/tsconfig/minimal.ts +12 -0
- package/test-tooling/webpack/addition-worker.ts +9 -0
- package/test-tooling/webpack/app-with-inlined-worker.ts +28 -0
- package/test-tooling/webpack/app.ts +61 -0
- package/test-tooling/webpack/pool-worker.ts +5 -0
- package/test-tooling/webpack/raw-loader.d.ts +4 -0
- package/test-tooling/webpack/webpack.chromium.mocha.ts +21 -0
- package/test-tooling/webpack/webpack.node.config.js +29 -0
- package/test-tooling/webpack/webpack.web.config.js +28 -0
- package/types/is-observable.d.ts +1 -1
- package/types/webworker.d.ts +9 -0
- package/worker.d.ts +2 -0
- package/worker.js +2 -0
- package/worker.mjs +6 -0
- package/dist/browser/master/implementation.browser.mjs +0 -89
- package/dist/browser/master/implementation.browser.mjs.map +0 -1
- package/dist/browser/worker/worker.browser.mjs +0 -291
- package/dist/browser/worker/worker.browser.mjs.map +0 -1
- package/dist/neutral/index.mjs +0 -1022
- package/dist/neutral/index.mjs.map +0 -1
- package/dist/neutral/master/implementation.mjs +0 -264
- package/dist/neutral/master/implementation.mjs.map +0 -1
- package/dist/neutral/master/index.mjs +0 -988
- package/dist/neutral/master/index.mjs.map +0 -1
- package/dist/neutral/master/pool.mjs +0 -579
- package/dist/neutral/master/pool.mjs.map +0 -1
- package/dist/neutral/master/register.mjs +0 -272
- package/dist/neutral/master/register.mjs.map +0 -1
- package/dist/neutral/master/spawn.mjs +0 -412
- package/dist/neutral/master/spawn.mjs.map +0 -1
- package/dist/neutral/master/thread.mjs +0 -29
- package/dist/neutral/master/thread.mjs.map +0 -1
- package/dist/neutral/observable-promise.mjs +0 -132
- package/dist/neutral/observable-promise.mjs.map +0 -1
- package/dist/neutral/observable.mjs +0 -31
- package/dist/neutral/observable.mjs.map +0 -1
- package/dist/node/master/implementation.node.mjs +0 -154
- package/dist/node/master/implementation.node.mjs.map +0 -1
- package/dist/node/worker/worker.node.mjs +0 -304
- package/dist/node/worker/worker.node.mjs.map +0 -1
- package/dist/types/common.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -9
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/master/get-bundle-url.browser.d.ts.map +0 -1
- package/dist/types/master/implementation.browser.d.ts.map +0 -1
- package/dist/types/master/implementation.d.ts.map +0 -1
- package/dist/types/master/implementation.node.d.ts.map +0 -1
- package/dist/types/master/index.d.ts +0 -13
- package/dist/types/master/index.d.ts.map +0 -1
- package/dist/types/master/invocation-proxy.d.ts.map +0 -1
- package/dist/types/master/pool-types.d.ts.map +0 -1
- package/dist/types/master/pool.d.ts +0 -93
- package/dist/types/master/pool.d.ts.map +0 -1
- package/dist/types/master/register.d.ts +0 -2
- package/dist/types/master/register.d.ts.map +0 -1
- package/dist/types/master/spawn.d.ts.map +0 -1
- package/dist/types/master/thread.d.ts +0 -13
- package/dist/types/master/thread.d.ts.map +0 -1
- package/dist/types/observable-promise.d.ts.map +0 -1
- package/dist/types/observable.d.ts +0 -21
- package/dist/types/observable.d.ts.map +0 -1
- package/dist/types/ponyfills.d.ts.map +0 -1
- package/dist/types/promise.d.ts +0 -6
- package/dist/types/promise.d.ts.map +0 -1
- package/dist/types/serializers.d.ts.map +0 -1
- package/dist/types/symbols.d.ts.map +0 -1
- package/dist/types/transferable.d.ts +0 -43
- package/dist/types/transferable.d.ts.map +0 -1
- package/dist/types/types/master.d.ts.map +0 -1
- package/dist/types/types/messages.d.ts.map +0 -1
- package/dist/types/types/worker.d.ts.map +0 -1
- package/dist/types/worker/WorkerGlobalScope.d.ts +0 -6
- package/dist/types/worker/WorkerGlobalScope.d.ts.map +0 -1
- package/dist/types/worker/expose.d.ts +0 -4
- package/dist/types/worker/expose.d.ts.map +0 -1
- package/dist/types/worker/worker.browser.d.ts +0 -14
- package/dist/types/worker/worker.browser.d.ts.map +0 -1
- package/dist/types/worker/worker.node.d.ts +0 -25
- package/dist/types/worker/worker.node.d.ts.map +0 -1
- package/src/worker/WorkerGlobalScope.ts +0 -5
- package/src/worker/expose.ts +0 -234
- package/src/worker/is-observable.d.ts +0 -7
- package/xy.config.ts +0 -24
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xylabs/threads",
|
|
3
|
-
"version": "4.7.
|
|
3
|
+
"version": "4.7.1",
|
|
4
4
|
"description": "Web workers & worker threads as simple as a function call",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"thread",
|
|
@@ -29,88 +29,85 @@
|
|
|
29
29
|
"./register.*js",
|
|
30
30
|
"./worker.*js"
|
|
31
31
|
],
|
|
32
|
-
"type": "module",
|
|
33
32
|
"exports": {
|
|
34
33
|
".": {
|
|
35
|
-
"types": "./dist/
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
"./implementation": {
|
|
40
|
-
"browser": {
|
|
41
|
-
"types": "./dist/types/master/implementation.browser.d.ts",
|
|
42
|
-
"import": "./dist/browser/master/implementation.browser.mjs",
|
|
43
|
-
"default": "./dist/browser/master/implementation.browser.mjs"
|
|
44
|
-
},
|
|
45
|
-
"node": {
|
|
46
|
-
"types": "./dist/types/master/implementation.node.d.ts",
|
|
47
|
-
"import": "./dist/node/master/implementation.node.mjs",
|
|
48
|
-
"default": "./dist/node/master/implementation.node.mjs"
|
|
49
|
-
},
|
|
50
|
-
"types": "./dist/types/master/implementation.d.ts",
|
|
51
|
-
"import": "./dist/neutral/master/implementation.mjs",
|
|
52
|
-
"default": "./dist/neutral/master/implementation.mjs"
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"require": "./dist/index.js",
|
|
36
|
+
"import": "./dist/esm/index.js",
|
|
37
|
+
"default": "./dist/esm/index.js"
|
|
53
38
|
},
|
|
54
39
|
"./master": {
|
|
55
|
-
"types": "./dist/types/master
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
"./spawn": {
|
|
60
|
-
"types": "./dist/types/master/spawn.d.ts",
|
|
61
|
-
"import": "./dist/neutral/master/spawn.mjs",
|
|
62
|
-
"default": "./dist/neutral/master/spawn.mjs"
|
|
63
|
-
},
|
|
64
|
-
"./thread": {
|
|
65
|
-
"types": "./dist/types/master/thread.d.ts",
|
|
66
|
-
"import": "./dist/neutral/master/thread.mjs",
|
|
67
|
-
"default": "./dist/neutral/master/thread.mjs"
|
|
40
|
+
"types": "./dist/types/master.d.ts",
|
|
41
|
+
"require": "./dist/master.js",
|
|
42
|
+
"import": "./dist/esm/master.js",
|
|
43
|
+
"default": "./dist/esm/master.js"
|
|
68
44
|
},
|
|
69
45
|
"./messenger": {
|
|
70
|
-
"types": "./dist/types/
|
|
46
|
+
"types": "./dist/types/messenger.d.ts"
|
|
71
47
|
},
|
|
72
48
|
"./observable": {
|
|
73
|
-
"types": "./dist/
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
|
|
77
|
-
"./pool": {
|
|
78
|
-
"types": "./dist/types/master/pool.d.ts",
|
|
79
|
-
"import": "./dist/neutral/master/pool.mjs",
|
|
80
|
-
"default": "./dist/neutral/master/pool.mjs"
|
|
81
|
-
},
|
|
82
|
-
"./observable-promise": {
|
|
83
|
-
"types": "./dist/types/observable-promise.d.ts",
|
|
84
|
-
"import": "./dist/neutral/observable-promise.mjs",
|
|
85
|
-
"default": "./dist/neutral/observable-promise.mjs"
|
|
49
|
+
"types": "./dist/observable.d.ts",
|
|
50
|
+
"require": "./dist/observable.js",
|
|
51
|
+
"import": "./dist/esm/observable.js",
|
|
52
|
+
"default": "./dist/esm/observable.js"
|
|
86
53
|
},
|
|
87
54
|
"./register": {
|
|
88
|
-
"types": "./dist/
|
|
89
|
-
"
|
|
90
|
-
"
|
|
55
|
+
"types": "./dist/master/register.d.ts",
|
|
56
|
+
"require": "./dist/master/register/index.js",
|
|
57
|
+
"import": "./dist/esm/master/register/index.js",
|
|
58
|
+
"default": "./dist/esm/master/register/index.js"
|
|
91
59
|
},
|
|
92
60
|
"./worker": {
|
|
93
|
-
"
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
},
|
|
98
|
-
"node": {
|
|
99
|
-
"types": "./dist/types/worker/worker.node.d.ts",
|
|
100
|
-
"import": "./dist/node/worker/worker.node.mjs",
|
|
101
|
-
"default": "./dist/node/worker/worker.node.mjs"
|
|
102
|
-
}
|
|
61
|
+
"types": "./dist/types/worker.d.ts",
|
|
62
|
+
"require": "./dist/worker/index.js",
|
|
63
|
+
"import": "./dist/esm/worker/index.js",
|
|
64
|
+
"default": "./dist/esm/worker/index.js"
|
|
103
65
|
}
|
|
104
66
|
},
|
|
105
|
-
"main": "dist/
|
|
106
|
-
"module": "dist/
|
|
107
|
-
"
|
|
67
|
+
"main": "dist/index.js",
|
|
68
|
+
"module": "dist/esm/index.js",
|
|
69
|
+
"browser": {
|
|
70
|
+
"./dist/esm/master/implementation.js": "./dist/esm/master/implementation.browser.js",
|
|
71
|
+
"./dist/esm/master/implementation.node.js": false,
|
|
72
|
+
"./dist/esm/worker/implementation.js": "./dist/esm/worker/implementation.browser.js",
|
|
73
|
+
"./dist/esm/worker/implementation.tiny-worker.js": false,
|
|
74
|
+
"./dist/esm/worker/implementation.worker_threads.js": false,
|
|
75
|
+
"./dist/master/implementation.js": "./dist/master/implementation.browser.js",
|
|
76
|
+
"./dist/master/implementation.node.js": false,
|
|
77
|
+
"./dist/worker/implementation.js": "./dist/worker/implementation.browser.js",
|
|
78
|
+
"./dist/worker/implementation.tiny-worker.js": false,
|
|
79
|
+
"./dist/worker/implementation.worker_threads.js": false,
|
|
80
|
+
"callsites": false,
|
|
81
|
+
"tiny-worker": false,
|
|
82
|
+
"ts-node": false,
|
|
83
|
+
"ts-node/register": false,
|
|
84
|
+
"worker_threads": false
|
|
85
|
+
},
|
|
86
|
+
"types": "dist/index.d.ts",
|
|
108
87
|
"files": [
|
|
109
88
|
"dist/**",
|
|
110
89
|
"*.js",
|
|
111
90
|
"*.mjs",
|
|
112
91
|
"*.ts"
|
|
113
92
|
],
|
|
93
|
+
"scripts": {
|
|
94
|
+
"build-threads": "yarn clean && yarn build:cjs && yarn build:es",
|
|
95
|
+
"build:cjs": "tsc -p tsconfig.json",
|
|
96
|
+
"build:es": "tsc -p tsconfig-esm.json",
|
|
97
|
+
"bundle": "rollup -c -f umd --file=bundle/worker.js --name=threads --silent -- dist/esm/worker/bundle-entry.js",
|
|
98
|
+
"clean": "rimraf ./dist ./dist-esm",
|
|
99
|
+
"dev": "yarn clean && tsc -p tsconfig.json --watch",
|
|
100
|
+
"package-build": "echo BUILD && yarn build-threads && echo BUILD_DONE",
|
|
101
|
+
"package-compile": "echo COMPILE && yarn build-threads && echo COMPILE_DONE",
|
|
102
|
+
"package-publint": "echo Skipping Publint - @xylabs/threads",
|
|
103
|
+
"postbuild": "yarn bundle",
|
|
104
|
+
"prepare": "yarn build-threads",
|
|
105
|
+
"test": "yarn test:library && yarn test:tooling && yarn test:puppeteer:basic && yarn test:puppeteer:webpack",
|
|
106
|
+
"test:library": "cross-env TS_NODE_FILES=true vitest ./test/**/*.test.ts",
|
|
107
|
+
"test:puppeteer:basic": "puppet-run --plugin=mocha --bundle=./test/workers/:workers/ --serve=./bundle/worker.js:/worker.js ./test/*.chromium*.ts",
|
|
108
|
+
"test:puppeteer:webpack": "puppet-run --serve ./test-tooling/webpack/dist/app.web/0.worker.js --serve ./test-tooling/webpack/dist/app.web/1.worker.js --plugin=mocha ./test-tooling/webpack/webpack.chromium.mocha.ts",
|
|
109
|
+
"test:tooling": "cross-env TS_NODE_FILES=true vitest ./test-tooling/**/*.test.ts"
|
|
110
|
+
},
|
|
114
111
|
"ava": {
|
|
115
112
|
"extensions": [
|
|
116
113
|
"ts"
|
|
@@ -125,16 +122,30 @@
|
|
|
125
122
|
"serial": true
|
|
126
123
|
},
|
|
127
124
|
"dependencies": {
|
|
125
|
+
"callsites-3-1-0": "npm:callsites@3.1.0",
|
|
128
126
|
"debug": "^4.4.0",
|
|
129
127
|
"is-observable-2-1-0": "npm:is-observable@2.1.0",
|
|
130
128
|
"observable-fns": "^0.6.1"
|
|
131
129
|
},
|
|
132
130
|
"devDependencies": {
|
|
131
|
+
"@babel/types": "^7.26.10",
|
|
132
|
+
"@rollup/plugin-commonjs": "^28.0.3",
|
|
133
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
133
134
|
"@types/debug": "^4.1.12",
|
|
134
135
|
"@types/node": "^22.13.10",
|
|
135
|
-
"@xylabs/eslint-config-flat": "^6.1.
|
|
136
|
-
"@xylabs/ts-scripts-yarn3": "^6.1.
|
|
137
|
-
"
|
|
136
|
+
"@xylabs/eslint-config-flat": "^6.1.3",
|
|
137
|
+
"@xylabs/ts-scripts-yarn3": "^6.1.3",
|
|
138
|
+
"cross-env": "^7.0.3",
|
|
139
|
+
"puppet-run": "^0.11.4",
|
|
140
|
+
"raw-loader": "^4.0.2",
|
|
141
|
+
"rimraf": "^6.0.1",
|
|
142
|
+
"rollup": "^4.36.0",
|
|
143
|
+
"threads-plugin": "^1.4.0",
|
|
144
|
+
"tiny-worker": "^2.3.0",
|
|
145
|
+
"tslib": "^2.8.1",
|
|
146
|
+
"typescript": "^5.8.2",
|
|
147
|
+
"vitest": "^3.0.9",
|
|
148
|
+
"webpack": "^5.98.0"
|
|
138
149
|
},
|
|
139
150
|
"optionalDependencies": {
|
|
140
151
|
"tiny-worker": "^2.3.0"
|
package/register.d.ts
ADDED
package/register.js
ADDED
package/register.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './dist/master/register.js'
|
package/rollup.config.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
2
|
+
const commonjs = require('@rollup/plugin-commonjs')
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
4
|
+
const { nodeResolve } = require('@rollup/plugin-node-resolve')
|
|
5
|
+
|
|
6
|
+
module.exports = {
|
|
7
|
+
plugins: [
|
|
8
|
+
nodeResolve({
|
|
9
|
+
browser: true,
|
|
10
|
+
mainFields: ['module', 'main'],
|
|
11
|
+
preferBuiltins: true,
|
|
12
|
+
}),
|
|
13
|
+
|
|
14
|
+
commonjs(),
|
|
15
|
+
],
|
|
16
|
+
}
|
package/src/common.ts
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
import type {
|
|
3
3
|
JsonSerializable, Serializer, SerializerImplementation,
|
|
4
|
-
} from './serializers
|
|
5
|
-
import { DefaultSerializer, extendSerializer } from './serializers
|
|
4
|
+
} from './serializers'
|
|
5
|
+
import { DefaultSerializer, extendSerializer } from './serializers'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
var registeredSerializer: Serializer<JsonSerializable>
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
globalThis.registeredSerializer = globalThis.registeredSerializer ?? DefaultSerializer
|
|
7
|
+
let registeredSerializer: Serializer<JsonSerializable> = DefaultSerializer
|
|
12
8
|
|
|
13
9
|
export function registerSerializer(serializer: SerializerImplementation<JsonSerializable>) {
|
|
14
|
-
|
|
10
|
+
registeredSerializer = extendSerializer(registeredSerializer, serializer)
|
|
15
11
|
}
|
|
16
12
|
|
|
17
13
|
export function deserialize(message: JsonSerializable): any {
|
|
18
|
-
return
|
|
14
|
+
return registeredSerializer.deserialize(message)
|
|
19
15
|
}
|
|
20
16
|
|
|
21
17
|
export function serialize(input: any): JsonSerializable {
|
|
22
|
-
return
|
|
18
|
+
return registeredSerializer.serialize(input)
|
|
23
19
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/* eslint-disable import-x/no-internal-modules */
|
|
2
|
-
export { registerSerializer } from './common
|
|
3
|
-
export * from './master/index
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
JsonSerializable, Serializer, SerializerImplementation,
|
|
8
|
-
} from './serializers
|
|
9
|
-
export {
|
|
10
|
-
export
|
|
11
|
-
export { Transfer } from './transferable.ts'
|
|
2
|
+
export { registerSerializer } from './common'
|
|
3
|
+
export * from './master/index'
|
|
4
|
+
export { QueuedTask } from './master/pool'
|
|
5
|
+
export { ExposedToThreadType as ExposedAs } from './master/spawn'
|
|
6
|
+
export {
|
|
7
|
+
DefaultSerializer, JsonSerializable, Serializer, SerializerImplementation,
|
|
8
|
+
} from './serializers'
|
|
9
|
+
export { Transfer, TransferDescriptor } from './transferable'
|
|
10
|
+
export { expose } from './worker/index'
|
|
@@ -14,8 +14,7 @@ function getBundleURL(): string {
|
|
|
14
14
|
// Attempt to find the URL of the current script and use that as the base URL
|
|
15
15
|
try {
|
|
16
16
|
throw new Error('getBundleURL failed')
|
|
17
|
-
} catch (
|
|
18
|
-
const err = ex as Error
|
|
17
|
+
} catch (err) {
|
|
19
18
|
const matches = ('' + err.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^\n)]+/g)
|
|
20
19
|
if (matches) {
|
|
21
20
|
return getBaseURL(matches[0])
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
/* eslint-disable import-x/no-internal-modules */
|
|
3
3
|
// tslint:disable max-classes-per-file
|
|
4
4
|
|
|
5
|
-
import type { ImplementationExport, ThreadsWorkerOptions } from '../types/master
|
|
6
|
-
import { getBundleURL } from './get-bundle-url.browser
|
|
5
|
+
import type { ImplementationExport, ThreadsWorkerOptions } from '../types/master'
|
|
6
|
+
import { getBundleURL } from './get-bundle-url.browser'
|
|
7
7
|
|
|
8
8
|
export const defaultPoolSize = typeof navigator !== 'undefined' && navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4
|
|
9
9
|
|
|
@@ -1,50 +1,123 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
2
|
+
/* eslint-disable import-x/no-internal-modules */
|
|
3
|
+
/* eslint-disable unicorn/no-process-exit */
|
|
4
|
+
/* eslint-disable unicorn/prefer-logical-operator-over-ternary */
|
|
5
|
+
/* eslint-disable unicorn/prefer-regexp-test */
|
|
2
6
|
|
|
3
7
|
/* eslint-disable unicorn/prefer-add-event-listener */
|
|
4
8
|
/* eslint-disable unicorn/prefer-event-target */
|
|
5
9
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
10
|
/* eslint-disable unicorn/text-encoding-identifier-case */
|
|
11
|
+
/// <reference lib="dom" />
|
|
7
12
|
|
|
8
13
|
import { EventEmitter } from 'node:events'
|
|
9
14
|
import { cpus } from 'node:os'
|
|
10
15
|
import path from 'node:path'
|
|
11
|
-
import {
|
|
12
|
-
|
|
16
|
+
import { fileURLToPath } from 'node:url'
|
|
17
|
+
|
|
18
|
+
import type { CallSite } from 'callsites-3-1-0'
|
|
19
|
+
import getCallsites from 'callsites-3-1-0'
|
|
13
20
|
|
|
14
21
|
import type {
|
|
15
22
|
ImplementationExport, ThreadsWorkerOptions, WorkerImplementation,
|
|
16
|
-
|
|
17
|
-
|
|
23
|
+
} from '../types/master'
|
|
24
|
+
|
|
25
|
+
interface WorkerGlobalScope {
|
|
26
|
+
addEventListener(eventName: string, listener: (event: Event) => void): void
|
|
27
|
+
postMessage(message: any, transferables?: any[]): void
|
|
28
|
+
removeEventListener(eventName: string, listener: (event: Event) => void): void
|
|
29
|
+
}
|
|
18
30
|
|
|
19
31
|
declare const __non_webpack_require__: typeof require
|
|
32
|
+
declare const self: WorkerGlobalScope
|
|
20
33
|
|
|
21
34
|
type WorkerEventName = 'error' | 'message'
|
|
22
35
|
|
|
36
|
+
let tsNodeAvailable: boolean | undefined
|
|
37
|
+
|
|
23
38
|
export const defaultPoolSize = cpus().length
|
|
24
39
|
|
|
40
|
+
function detectTsNode() {
|
|
41
|
+
if (typeof __non_webpack_require__ === 'function') {
|
|
42
|
+
// Webpack build: => No ts-node required or possible
|
|
43
|
+
return false
|
|
44
|
+
}
|
|
45
|
+
if (tsNodeAvailable) {
|
|
46
|
+
return tsNodeAvailable
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
try {
|
|
50
|
+
eval('require').resolve('ts-node')
|
|
51
|
+
tsNodeAvailable = true
|
|
52
|
+
} catch (error) {
|
|
53
|
+
if (error && error.code === 'MODULE_NOT_FOUND') {
|
|
54
|
+
tsNodeAvailable = false
|
|
55
|
+
} else {
|
|
56
|
+
// Re-throw
|
|
57
|
+
throw error
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return tsNodeAvailable
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function createTsNodeModule(scriptPath: string) {
|
|
64
|
+
return `
|
|
65
|
+
require("ts-node/register/transpile-only");
|
|
66
|
+
require(${JSON.stringify(scriptPath)});
|
|
67
|
+
`
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function rebaseScriptPath(scriptPath: string, ignoreRegex: RegExp) {
|
|
71
|
+
const parentCallSite = getCallsites().find((callsite: CallSite) => {
|
|
72
|
+
const filename = callsite.getFileName()
|
|
73
|
+
return Boolean(
|
|
74
|
+
filename && !filename.match(ignoreRegex) && !/[/\\]master[/\\]implementation/.test(filename) && !/^internal\/process/.test(filename),
|
|
75
|
+
)
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
const rawCallerPath = parentCallSite ? parentCallSite.getFileName() : null
|
|
79
|
+
let callerPath = rawCallerPath ? rawCallerPath : null
|
|
80
|
+
if (callerPath && callerPath.startsWith('file:')) {
|
|
81
|
+
callerPath = fileURLToPath(callerPath)
|
|
82
|
+
}
|
|
83
|
+
return callerPath ? path.join(path.dirname(callerPath), scriptPath) : scriptPath
|
|
84
|
+
}
|
|
85
|
+
|
|
25
86
|
function resolveScriptPath(scriptPath: string, baseURL?: string | undefined) {
|
|
26
|
-
const
|
|
27
|
-
|
|
87
|
+
const makeRelative = (filePath: string) => {
|
|
88
|
+
// eval() hack is also webpack-related
|
|
89
|
+
return path.isAbsolute(filePath) ? filePath : path.join(baseURL || eval('__dirname'), filePath)
|
|
28
90
|
}
|
|
29
91
|
|
|
30
|
-
|
|
31
|
-
|
|
92
|
+
return typeof __non_webpack_require__ === 'function'
|
|
93
|
+
? __non_webpack_require__.resolve(makeRelative(scriptPath))
|
|
94
|
+
: eval('require').resolve(makeRelative(rebaseScriptPath(scriptPath, /[/\\]worker_threads[/\\]/)))
|
|
32
95
|
}
|
|
33
96
|
|
|
34
97
|
function initWorkerThreadsWorker(): ImplementationExport {
|
|
35
|
-
|
|
98
|
+
// Webpack hack
|
|
99
|
+
const NativeWorker
|
|
100
|
+
= typeof __non_webpack_require__ === 'function' ? __non_webpack_require__('worker_threads').Worker : eval('require')('worker_threads').Worker
|
|
101
|
+
|
|
102
|
+
let allWorkers: Array<typeof NativeWorker> = []
|
|
36
103
|
|
|
37
104
|
class Worker extends NativeWorker {
|
|
38
105
|
private mappedEventListeners: WeakMap<EventListener, EventListener>
|
|
39
106
|
|
|
40
107
|
constructor(scriptPath: string, options?: ThreadsWorkerOptions & { fromSource: boolean }) {
|
|
41
|
-
const resolvedScriptPath = options && options.fromSource ? null : resolveScriptPath(scriptPath, (options
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
} else {
|
|
108
|
+
const resolvedScriptPath = options && options.fromSource ? null : resolveScriptPath(scriptPath, (options || {})._baseURL)
|
|
109
|
+
|
|
110
|
+
if (!resolvedScriptPath) {
|
|
45
111
|
// `options.fromSource` is true
|
|
46
112
|
const sourceCode = scriptPath
|
|
47
113
|
super(sourceCode, { ...options, eval: true })
|
|
114
|
+
} else if (/\.tsx?$/i.test(resolvedScriptPath) && detectTsNode()) {
|
|
115
|
+
super(createTsNodeModule(resolvedScriptPath), { ...options, eval: true })
|
|
116
|
+
} else if (/\.asar[/\\]/.test(resolvedScriptPath)) {
|
|
117
|
+
// See <https://github.com/andywer/threads-plugin/issues/17>
|
|
118
|
+
super(resolvedScriptPath.replace(/\.asar([/\\])/, '.asar.unpacked$1'), options)
|
|
119
|
+
} else {
|
|
120
|
+
super(resolvedScriptPath, options)
|
|
48
121
|
}
|
|
49
122
|
|
|
50
123
|
this.mappedEventListeners = new WeakMap()
|
|
@@ -112,12 +185,17 @@ function initTinyWorker(): ImplementationExport {
|
|
|
112
185
|
? `file:///${resolveScriptPath(scriptPath).replaceAll('\\', '/')}`
|
|
113
186
|
: resolveScriptPath(scriptPath)
|
|
114
187
|
|
|
115
|
-
if (resolvedScriptPath) {
|
|
116
|
-
super(resolvedScriptPath, [], { esm: true })
|
|
117
|
-
} else {
|
|
188
|
+
if (!resolvedScriptPath) {
|
|
118
189
|
// `options.fromSource` is true
|
|
119
190
|
const sourceCode = scriptPath
|
|
120
191
|
super(new Function(sourceCode), [], { esm: true })
|
|
192
|
+
} else if (/\.tsx?$/i.test(resolvedScriptPath) && detectTsNode()) {
|
|
193
|
+
super(new Function(createTsNodeModule(resolveScriptPath(scriptPath))), [], { esm: true })
|
|
194
|
+
} else if (/\.asar[/\\]/.test(resolvedScriptPath)) {
|
|
195
|
+
// See <https://github.com/andywer/threads-plugin/issues/17>
|
|
196
|
+
super(resolvedScriptPath.replace(/\.asar([/\\])/, '.asar.unpacked$1'), [], { esm: true })
|
|
197
|
+
} else {
|
|
198
|
+
super(resolvedScriptPath, [], { esm: true })
|
|
121
199
|
}
|
|
122
200
|
|
|
123
201
|
allWorkers.push(this)
|
|
@@ -178,8 +256,7 @@ function selectWorkerImplementation(): ImplementationExport {
|
|
|
178
256
|
try {
|
|
179
257
|
isTinyWorker = false
|
|
180
258
|
return initWorkerThreadsWorker()
|
|
181
|
-
} catch
|
|
182
|
-
console.error(ex)
|
|
259
|
+
} catch {
|
|
183
260
|
// tslint:disable-next-line no-console
|
|
184
261
|
console.debug('Node worker_threads not available. Trying to fall back to tiny-worker polyfill...')
|
|
185
262
|
isTinyWorker = true
|
|
@@ -196,7 +273,7 @@ export function getWorkerImplementation(): ImplementationExport {
|
|
|
196
273
|
|
|
197
274
|
export function isWorkerRuntime() {
|
|
198
275
|
if (isTinyWorker) {
|
|
199
|
-
return
|
|
276
|
+
return self !== undefined && self['postMessage'] ? true : false
|
|
200
277
|
} else {
|
|
201
278
|
// Webpack hack
|
|
202
279
|
const isMainThread
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
// browsers already in the package.json, so if get here, it's safe to pass-through the
|
|
7
7
|
// node implementation
|
|
8
8
|
|
|
9
|
-
import * as BrowserImplementation from './implementation.browser
|
|
10
|
-
import * as NodeImplementation from './implementation.node
|
|
9
|
+
import * as BrowserImplementation from './implementation.browser'
|
|
10
|
+
import * as NodeImplementation from './implementation.node'
|
|
11
11
|
|
|
12
12
|
const runningInNode = typeof process !== 'undefined' && (process.arch as string) !== 'browser' && 'pid' in process
|
|
13
13
|
const implementation = runningInNode ? NodeImplementation : BrowserImplementation
|
package/src/master/index.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/* eslint-disable import-x/no-internal-modules */
|
|
2
|
-
import type { BlobWorker as BlobWorkerClass, Worker as WorkerType } from '../types/master
|
|
3
|
-
import { getWorkerImplementation } from './implementation
|
|
2
|
+
import type { BlobWorker as BlobWorkerClass, Worker as WorkerType } from '../types/master'
|
|
3
|
+
import { getWorkerImplementation } from './implementation'
|
|
4
4
|
|
|
5
|
-
export
|
|
6
|
-
export { Pool } from './pool
|
|
7
|
-
export { spawn } from './spawn
|
|
8
|
-
export { Thread } from './thread
|
|
5
|
+
export { FunctionThread, ModuleThread } from '../types/master'
|
|
6
|
+
export { Pool } from './pool'
|
|
7
|
+
export { spawn } from './spawn'
|
|
8
|
+
export { Thread } from './thread'
|
|
9
9
|
|
|
10
10
|
export type BlobWorker = typeof BlobWorkerClass
|
|
11
11
|
export type Worker = WorkerType
|
|
@@ -16,4 +16,4 @@ export const BlobWorker = getWorkerImplementation().blob
|
|
|
16
16
|
/** Worker implementation. Either web worker or a node.js Worker class. */
|
|
17
17
|
export const Worker = getWorkerImplementation().default
|
|
18
18
|
|
|
19
|
-
export { isWorkerRuntime } from './implementation
|
|
19
|
+
export { isWorkerRuntime } from './implementation'
|
|
@@ -10,23 +10,23 @@
|
|
|
10
10
|
import DebugLogger from 'debug'
|
|
11
11
|
import { multicast, Observable } from 'observable-fns'
|
|
12
12
|
|
|
13
|
-
import { deserialize, serialize } from '../common
|
|
14
|
-
import { ObservablePromise } from '../observable-promise
|
|
15
|
-
import { isTransferDescriptor } from '../transferable
|
|
13
|
+
import { deserialize, serialize } from '../common'
|
|
14
|
+
import { ObservablePromise } from '../observable-promise'
|
|
15
|
+
import { isTransferDescriptor } from '../transferable'
|
|
16
16
|
import type {
|
|
17
17
|
ModuleMethods, ModuleProxy, ProxyableFunction, Worker as WorkerType,
|
|
18
|
-
} from '../types/master
|
|
18
|
+
} from '../types/master'
|
|
19
19
|
import type {
|
|
20
20
|
MasterJobCancelMessage,
|
|
21
21
|
MasterJobRunMessage,
|
|
22
22
|
WorkerJobErrorMessage,
|
|
23
23
|
WorkerJobResultMessage,
|
|
24
24
|
WorkerJobStartMessage,
|
|
25
|
-
} from '../types/messages
|
|
25
|
+
} from '../types/messages'
|
|
26
26
|
import {
|
|
27
27
|
MasterMessageType,
|
|
28
28
|
WorkerMessageType,
|
|
29
|
-
} from '../types/messages
|
|
29
|
+
} from '../types/messages'
|
|
30
30
|
|
|
31
31
|
const debugMessages = DebugLogger('threads:master:messages')
|
|
32
32
|
|
package/src/master/pool-types.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/* eslint-disable @typescript-eslint/member-ordering */
|
|
3
|
-
import type { Thread } from './thread
|
|
3
|
+
import type { Thread } from './thread'
|
|
4
4
|
|
|
5
5
|
/** Pool event type. Specifies the type of each `PoolEvent`. */
|
|
6
6
|
export enum PoolEventType {
|
package/src/master/pool.ts
CHANGED
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
/* eslint-disable import-x/export */
|
|
2
2
|
/* eslint-disable unicorn/no-thenable */
|
|
3
3
|
|
|
4
|
+
/* eslint-disable require-await */
|
|
4
5
|
/* eslint-disable @typescript-eslint/member-ordering */
|
|
5
6
|
/* eslint-disable unicorn/no-array-reduce */
|
|
6
7
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
7
8
|
/* eslint-disable @typescript-eslint/no-namespace */
|
|
8
|
-
|
|
9
|
-
/// <reference lib="esnext" />
|
|
10
|
-
|
|
9
|
+
/* eslint-disable @typescript-eslint/no-floating-promises */
|
|
11
10
|
import DebugLogger from 'debug'
|
|
12
11
|
import {
|
|
13
12
|
multicast, Observable, Subject,
|
|
14
13
|
} from 'observable-fns'
|
|
15
14
|
|
|
16
|
-
import { allSettled } from '../ponyfills
|
|
17
|
-
import { defaultPoolSize } from './implementation
|
|
15
|
+
import { allSettled } from '../ponyfills'
|
|
16
|
+
import { defaultPoolSize } from './implementation'
|
|
18
17
|
import type {
|
|
19
18
|
PoolEvent, QueuedTask, TaskRunFunction, WorkerDescriptor,
|
|
20
|
-
} from './pool-types
|
|
21
|
-
import { PoolEventType } from './pool-types
|
|
22
|
-
import { Thread } from './thread
|
|
19
|
+
} from './pool-types'
|
|
20
|
+
import { PoolEventType } from './pool-types'
|
|
21
|
+
import { Thread } from './thread'
|
|
23
22
|
|
|
24
23
|
export declare namespace Pool {
|
|
25
24
|
type Event<ThreadType extends Thread = any> = PoolEvent<ThreadType>
|
|
@@ -178,8 +177,7 @@ class WorkerPool<ThreadType extends Thread> implements Pool<ThreadType> {
|
|
|
178
177
|
type: PoolEventType.taskCompleted,
|
|
179
178
|
workerID,
|
|
180
179
|
})
|
|
181
|
-
} catch (
|
|
182
|
-
const error = ex as Error
|
|
180
|
+
} catch (error) {
|
|
183
181
|
this.debug(`Task #${task.id} failed`)
|
|
184
182
|
this.eventSubject.next({
|
|
185
183
|
error,
|
|
@@ -190,7 +188,7 @@ class WorkerPool<ThreadType extends Thread> implements Pool<ThreadType> {
|
|
|
190
188
|
}
|
|
191
189
|
}
|
|
192
190
|
|
|
193
|
-
private run(worker: WorkerDescriptor<ThreadType>, task: QueuedTask<ThreadType, any>) {
|
|
191
|
+
private async run(worker: WorkerDescriptor<ThreadType>, task: QueuedTask<ThreadType, any>) {
|
|
194
192
|
const runPromise = (async () => {
|
|
195
193
|
const removeTaskFromWorkersRunningTasks = () => {
|
|
196
194
|
worker.runningTasks = worker.runningTasks.filter(someRunPromise => someRunPromise !== runPromise)
|
|
@@ -395,6 +393,7 @@ function PoolConstructor<ThreadType extends Thread>(spawnWorker: () => Promise<T
|
|
|
395
393
|
*/
|
|
396
394
|
export const Pool = PoolConstructor as typeof PoolConstructor & { EventType: typeof PoolEventType }
|
|
397
395
|
|
|
398
|
-
export
|
|
399
|
-
|
|
400
|
-
|
|
396
|
+
export {
|
|
397
|
+
PoolEvent, PoolEventType, QueuedTask,
|
|
398
|
+
} from './pool-types'
|
|
399
|
+
export { Thread } from './thread'
|
package/src/master/register.ts
CHANGED