@vertexvis/web-workers 0.2.1-canary.1 → 0.2.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/README.md +4 -4
- package/dist/__mocks__/browser.d.ts +1 -0
- package/dist/__mocks__/browser.d.ts.map +1 -0
- package/dist/{bundle.cjs.js → bundle.cjs} +26 -53
- package/dist/bundle.cjs.map +1 -0
- package/dist/bundle.esm.js +25 -50
- package/dist/bundle.esm.js.map +1 -1
- package/dist/globalThis.d.ts +1 -0
- package/dist/globalThis.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/terminate.d.ts +1 -0
- package/dist/terminate.d.ts.map +1 -0
- package/dist/transferable.d.ts +1 -0
- package/dist/transferable.d.ts.map +1 -0
- package/dist/worker.d.ts +5 -3
- package/dist/worker.d.ts.map +1 -0
- package/package.json +5 -4
- package/dist/bundle.cjs.js.map +0 -1
package/README.md
CHANGED
|
@@ -143,9 +143,9 @@ async function main(): Promise<void> {
|
|
|
143
143
|
See [@vertexvis/rollup-plugin-web-workers] for more details.
|
|
144
144
|
|
|
145
145
|
```js
|
|
146
|
-
import
|
|
146
|
+
import { nodeResolve } from '@rollup/plugin-node-resolve';
|
|
147
147
|
import typescript2 from 'rollup-plugin-typescript2';
|
|
148
|
-
import
|
|
148
|
+
import terser from '@rollup/plugin-terser';
|
|
149
149
|
import workers from '@vertexvis/rollup-plugin-web-workers';
|
|
150
150
|
|
|
151
151
|
export default {
|
|
@@ -155,11 +155,11 @@ export default {
|
|
|
155
155
|
format: 'esm',
|
|
156
156
|
},
|
|
157
157
|
plugins: [
|
|
158
|
-
|
|
158
|
+
nodeResolve(),
|
|
159
159
|
workers({
|
|
160
160
|
// Workers are bundled separately. Pass a list of plugins to use when
|
|
161
161
|
// bundling the worker.
|
|
162
|
-
plugins: [
|
|
162
|
+
plugins: [nodeResolve(), typescript2(), terser()]
|
|
163
163
|
}),
|
|
164
164
|
typescript2(),
|
|
165
165
|
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/__mocks__/browser.ts"],"names":[],"mappings":""}
|
|
@@ -1,36 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var tslib = require('tslib');
|
|
6
3
|
var threads = require('threads');
|
|
7
4
|
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
class TerminateController {
|
|
6
|
+
constructor() {
|
|
10
7
|
this.threads = [];
|
|
11
8
|
this.pools = [];
|
|
12
9
|
}
|
|
13
|
-
|
|
10
|
+
addThread(thread) {
|
|
14
11
|
this.threads.push(thread);
|
|
15
|
-
}
|
|
16
|
-
|
|
12
|
+
}
|
|
13
|
+
addPool(pool) {
|
|
17
14
|
this.pools.push(pool);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
_a.sent();
|
|
27
|
-
return [2 /*return*/];
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
};
|
|
32
|
-
return TerminateController;
|
|
33
|
-
}());
|
|
15
|
+
}
|
|
16
|
+
async terminate(force = false) {
|
|
17
|
+
await Promise.all([
|
|
18
|
+
...this.threads.map((t) => threads.Thread.terminate(t)),
|
|
19
|
+
...this.pools.map((p) => p.terminate(force)),
|
|
20
|
+
]);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
34
23
|
|
|
35
24
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
36
25
|
function getGlobal() {
|
|
@@ -52,7 +41,7 @@ var globalThis$1 = getGlobal();
|
|
|
52
41
|
|
|
53
42
|
function instanceOf(obj, className) {
|
|
54
43
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
55
|
-
|
|
44
|
+
const Type = globalThis$1[className];
|
|
56
45
|
return Type != null && obj instanceof Type;
|
|
57
46
|
}
|
|
58
47
|
function isTransferable(obj) {
|
|
@@ -86,7 +75,7 @@ function makeTransferable(obj) {
|
|
|
86
75
|
return threads.Transfer(obj);
|
|
87
76
|
}
|
|
88
77
|
else if (obj != null && typeof obj === 'object') {
|
|
89
|
-
|
|
78
|
+
const transferables = findTransferables(obj);
|
|
90
79
|
return threads.Transfer(obj, transferables);
|
|
91
80
|
}
|
|
92
81
|
else {
|
|
@@ -99,16 +88,16 @@ function findTransferables(obj) {
|
|
|
99
88
|
}
|
|
100
89
|
else if (typeof obj === 'object') {
|
|
101
90
|
if (Array.isArray(obj)) {
|
|
102
|
-
|
|
103
|
-
obj.forEach(
|
|
104
|
-
return
|
|
91
|
+
const result = [];
|
|
92
|
+
obj.forEach((o) => result.push(...findTransferables(o)));
|
|
93
|
+
return result;
|
|
105
94
|
}
|
|
106
95
|
else if (isTypedArray(obj)) {
|
|
107
96
|
return [obj.buffer];
|
|
108
97
|
}
|
|
109
98
|
else if (obj != null) {
|
|
110
|
-
return Object.values(obj).reduce(
|
|
111
|
-
acc.push
|
|
99
|
+
return Object.values(obj).reduce((acc, value) => {
|
|
100
|
+
acc.push(...findTransferables(value));
|
|
112
101
|
return acc;
|
|
113
102
|
}, []);
|
|
114
103
|
}
|
|
@@ -128,34 +117,18 @@ function findTransferables(obj) {
|
|
|
128
117
|
* @param impl The worker implementation.
|
|
129
118
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/Transferable
|
|
130
119
|
*/
|
|
131
|
-
function defineWorker(impl,
|
|
132
|
-
var _b = _a === void 0 ? {} : _a, _c = _b.expose, expose = _c === void 0 ? threads.expose : _c;
|
|
120
|
+
function defineWorker(impl, { expose = threads.expose } = {}) {
|
|
133
121
|
function wrap(f) {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
138
|
-
args[_i] = arguments[_i];
|
|
139
|
-
}
|
|
140
|
-
return tslib.__awaiter(_this, void 0, void 0, function () {
|
|
141
|
-
var res;
|
|
142
|
-
return tslib.__generator(this, function (_a) {
|
|
143
|
-
switch (_a.label) {
|
|
144
|
-
case 0: return [4 /*yield*/, f.apply(void 0, args)];
|
|
145
|
-
case 1:
|
|
146
|
-
res = _a.sent();
|
|
147
|
-
return [2 /*return*/, makeTransferable(res)];
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
});
|
|
122
|
+
return async (...args) => {
|
|
123
|
+
const res = await f(...args);
|
|
124
|
+
return makeTransferable(res);
|
|
151
125
|
};
|
|
152
126
|
}
|
|
153
127
|
if (typeof impl === 'function') {
|
|
154
128
|
return expose(wrap(impl));
|
|
155
129
|
}
|
|
156
130
|
else {
|
|
157
|
-
|
|
158
|
-
var key = _a[0], fn = _a[1];
|
|
131
|
+
const mod = Object.entries(impl).reduce((mod, [key, fn]) => {
|
|
159
132
|
mod[key] = wrap(fn);
|
|
160
133
|
return mod;
|
|
161
134
|
}, {});
|
|
@@ -166,4 +139,4 @@ function defineWorker(impl, _a) {
|
|
|
166
139
|
exports.TerminateController = TerminateController;
|
|
167
140
|
exports.defineWorker = defineWorker;
|
|
168
141
|
exports.makeTransferable = makeTransferable;
|
|
169
|
-
//# sourceMappingURL=bundle.cjs.
|
|
142
|
+
//# sourceMappingURL=bundle.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.cjs","sources":["../src/terminate.ts","../src/globalThis.ts","../src/transferable.ts","../src/worker.ts"],"sourcesContent":["import { Thread } from 'threads';\n\ninterface WorkerPoolLike {\n terminate(force?: boolean): Promise<void>;\n}\n\nexport class TerminateController {\n private threads: Thread[] = [];\n private pools: WorkerPoolLike[] = [];\n\n public addThread(thread: Thread): void {\n this.threads.push(thread);\n }\n\n public addPool(pool: WorkerPoolLike): void {\n this.pools.push(pool);\n }\n\n public async terminate(force = false): Promise<void> {\n await Promise.all([\n ...this.threads.map((t) => Thread.terminate(t)),\n ...this.pools.map((p) => p.terminate(force)),\n ]);\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getGlobal(): any {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n } else if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n\nexport default getGlobal();\n","import { Transfer } from 'threads';\n\nimport globalThis from './globalThis';\n\ntype TypedArray =\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array;\n\nfunction instanceOf(obj: unknown, className: string): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const Type = globalThis[className];\n return Type != null && obj instanceof Type;\n}\n\nfunction isTransferable(obj: unknown): obj is Transferable {\n return (\n instanceOf(obj, 'ArrayBuffer') ||\n instanceOf(obj, 'MessagePort') ||\n instanceOf(obj, 'ImageBitmap') ||\n instanceOf(obj, 'OffscreenCanvas')\n );\n}\n\nfunction isTypedArray(obj: unknown): obj is TypedArray {\n return (\n instanceOf(obj, 'Int8Array') ||\n instanceOf(obj, 'Uint8Array') ||\n instanceOf(obj, 'Uint8ClampedArray') ||\n instanceOf(obj, 'Int16Array') ||\n instanceOf(obj, 'Uint16Array') ||\n instanceOf(obj, 'Int32Array') ||\n instanceOf(obj, 'Uint32Array') ||\n instanceOf(obj, 'Float32Array') ||\n instanceOf(obj, 'Float64Array') ||\n instanceOf(obj, 'BigInt64Array') ||\n instanceOf(obj, 'BigUint64Array')\n );\n}\n\n/**\n * A function that will recursively inspect an object and return a Threads\n * `Transfer` that contains all the `Transferable`s in the given object.\n *\n * @param obj The object to make transferable.\n * @returns A `Transfer` from Threads.\n */\nexport function makeTransferable<T>(obj: T): ReturnType<typeof Transfer> | T {\n if (isTransferable(obj)) {\n return Transfer(obj);\n } else if (obj != null && typeof obj === 'object') {\n const transferables = findTransferables(obj);\n return Transfer(obj, transferables);\n } else {\n return obj;\n }\n}\n\nfunction findTransferables<T>(obj: T): Transferable[] {\n if (isTransferable(obj)) {\n return [obj];\n } else if (typeof obj === 'object') {\n if (Array.isArray(obj)) {\n const result: Transferable[] = [];\n obj.forEach((o) => result.push(...findTransferables(o)));\n return result;\n } else if (isTypedArray(obj)) {\n return [obj.buffer];\n } else if (obj != null) {\n return Object.values(obj).reduce((acc, value) => {\n acc.push(...findTransferables(value));\n return acc;\n }, []);\n } else {\n return [];\n }\n } else {\n return [];\n }\n}\n","import { expose as threadsExpose } from 'threads';\n\nimport { makeTransferable } from './transferable';\n\ntype Exposed = Parameters<typeof threadsExpose>[0];\ntype WorkerFunction = Extract<Exposed, (...args: any[]) => any>;\ntype WorkerModule = Exclude<Exposed, WorkerFunction>;\n\ninterface DefineWorkerOptions {\n expose?: typeof threadsExpose;\n}\n\n/**\n * Defines a web worker implementation. This function wraps the `expose` method\n * of Threads and handles automatic conversion of Transferable types.\n *\n * @param impl The worker implementation.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Transferable\n */\nexport function defineWorker(\n impl: Exposed,\n { expose = threadsExpose }: DefineWorkerOptions = {}\n): void {\n function wrap(f: WorkerFunction): WorkerFunction {\n return async (...args: unknown[]) => {\n const res = await f(...args);\n return makeTransferable(res);\n };\n }\n\n if (typeof impl === 'function') {\n return expose(wrap(impl));\n } else {\n const mod = Object.entries(impl).reduce((mod, [key, fn]) => {\n mod[key] = wrap(fn);\n return mod;\n }, {} as WorkerModule);\n return expose(mod);\n }\n}\n"],"names":["Thread","globalThis","Transfer","threadsExpose"],"mappings":"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"}
|
package/dist/bundle.esm.js
CHANGED
|
@@ -1,32 +1,23 @@
|
|
|
1
|
-
import { __awaiter, __generator, __spreadArray } from 'tslib';
|
|
2
1
|
import { Thread, Transfer, expose } from 'threads';
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
class TerminateController {
|
|
4
|
+
constructor() {
|
|
6
5
|
this.threads = [];
|
|
7
6
|
this.pools = [];
|
|
8
7
|
}
|
|
9
|
-
|
|
8
|
+
addThread(thread) {
|
|
10
9
|
this.threads.push(thread);
|
|
11
|
-
}
|
|
12
|
-
|
|
10
|
+
}
|
|
11
|
+
addPool(pool) {
|
|
13
12
|
this.pools.push(pool);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
_a.sent();
|
|
23
|
-
return [2 /*return*/];
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
};
|
|
28
|
-
return TerminateController;
|
|
29
|
-
}());
|
|
13
|
+
}
|
|
14
|
+
async terminate(force = false) {
|
|
15
|
+
await Promise.all([
|
|
16
|
+
...this.threads.map((t) => Thread.terminate(t)),
|
|
17
|
+
...this.pools.map((p) => p.terminate(force)),
|
|
18
|
+
]);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
30
21
|
|
|
31
22
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
23
|
function getGlobal() {
|
|
@@ -48,7 +39,7 @@ var globalThis$1 = getGlobal();
|
|
|
48
39
|
|
|
49
40
|
function instanceOf(obj, className) {
|
|
50
41
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
51
|
-
|
|
42
|
+
const Type = globalThis$1[className];
|
|
52
43
|
return Type != null && obj instanceof Type;
|
|
53
44
|
}
|
|
54
45
|
function isTransferable(obj) {
|
|
@@ -82,7 +73,7 @@ function makeTransferable(obj) {
|
|
|
82
73
|
return Transfer(obj);
|
|
83
74
|
}
|
|
84
75
|
else if (obj != null && typeof obj === 'object') {
|
|
85
|
-
|
|
76
|
+
const transferables = findTransferables(obj);
|
|
86
77
|
return Transfer(obj, transferables);
|
|
87
78
|
}
|
|
88
79
|
else {
|
|
@@ -95,16 +86,16 @@ function findTransferables(obj) {
|
|
|
95
86
|
}
|
|
96
87
|
else if (typeof obj === 'object') {
|
|
97
88
|
if (Array.isArray(obj)) {
|
|
98
|
-
|
|
99
|
-
obj.forEach(
|
|
100
|
-
return
|
|
89
|
+
const result = [];
|
|
90
|
+
obj.forEach((o) => result.push(...findTransferables(o)));
|
|
91
|
+
return result;
|
|
101
92
|
}
|
|
102
93
|
else if (isTypedArray(obj)) {
|
|
103
94
|
return [obj.buffer];
|
|
104
95
|
}
|
|
105
96
|
else if (obj != null) {
|
|
106
|
-
return Object.values(obj).reduce(
|
|
107
|
-
acc.push
|
|
97
|
+
return Object.values(obj).reduce((acc, value) => {
|
|
98
|
+
acc.push(...findTransferables(value));
|
|
108
99
|
return acc;
|
|
109
100
|
}, []);
|
|
110
101
|
}
|
|
@@ -124,34 +115,18 @@ function findTransferables(obj) {
|
|
|
124
115
|
* @param impl The worker implementation.
|
|
125
116
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/Transferable
|
|
126
117
|
*/
|
|
127
|
-
function defineWorker(impl,
|
|
128
|
-
var _b = _a === void 0 ? {} : _a, _c = _b.expose, expose$1 = _c === void 0 ? expose : _c;
|
|
118
|
+
function defineWorker(impl, { expose: expose$1 = expose } = {}) {
|
|
129
119
|
function wrap(f) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
134
|
-
args[_i] = arguments[_i];
|
|
135
|
-
}
|
|
136
|
-
return __awaiter(_this, void 0, void 0, function () {
|
|
137
|
-
var res;
|
|
138
|
-
return __generator(this, function (_a) {
|
|
139
|
-
switch (_a.label) {
|
|
140
|
-
case 0: return [4 /*yield*/, f.apply(void 0, args)];
|
|
141
|
-
case 1:
|
|
142
|
-
res = _a.sent();
|
|
143
|
-
return [2 /*return*/, makeTransferable(res)];
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
});
|
|
120
|
+
return async (...args) => {
|
|
121
|
+
const res = await f(...args);
|
|
122
|
+
return makeTransferable(res);
|
|
147
123
|
};
|
|
148
124
|
}
|
|
149
125
|
if (typeof impl === 'function') {
|
|
150
126
|
return expose$1(wrap(impl));
|
|
151
127
|
}
|
|
152
128
|
else {
|
|
153
|
-
|
|
154
|
-
var key = _a[0], fn = _a[1];
|
|
129
|
+
const mod = Object.entries(impl).reduce((mod, [key, fn]) => {
|
|
155
130
|
mod[key] = wrap(fn);
|
|
156
131
|
return mod;
|
|
157
132
|
}, {});
|
package/dist/bundle.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.esm.js","sources":["../src/terminate.ts","../src/globalThis.ts","../src/transferable.ts","../src/worker.ts"],"sourcesContent":["import { Thread } from 'threads';\n\ninterface WorkerPoolLike {\n terminate(force?: boolean): Promise<void>;\n}\n\nexport class TerminateController {\n private threads: Thread[] = [];\n private pools: WorkerPoolLike[] = [];\n\n public addThread(thread: Thread): void {\n this.threads.push(thread);\n }\n\n public addPool(pool: WorkerPoolLike): void {\n this.pools.push(pool);\n }\n\n public async terminate(force = false): Promise<void> {\n await Promise.all([\n ...this.threads.map((t) => Thread.terminate(t)),\n ...this.pools.map((p) => p.terminate(force)),\n ]);\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getGlobal(): any {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n } else if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n\nexport default getGlobal();\n","import { Transfer } from 'threads';\n\nimport globalThis from './globalThis';\n\ntype TypedArray =\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array;\n\nfunction instanceOf(obj: unknown, className: string): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const Type = globalThis[className];\n return Type != null && obj instanceof Type;\n}\n\nfunction isTransferable(obj: unknown): obj is Transferable {\n return (\n instanceOf(obj, 'ArrayBuffer') ||\n instanceOf(obj, 'MessagePort') ||\n instanceOf(obj, 'ImageBitmap') ||\n instanceOf(obj, 'OffscreenCanvas')\n );\n}\n\nfunction isTypedArray(obj: unknown): obj is TypedArray {\n return (\n instanceOf(obj, 'Int8Array') ||\n instanceOf(obj, 'Uint8Array') ||\n instanceOf(obj, 'Uint8ClampedArray') ||\n instanceOf(obj, 'Int16Array') ||\n instanceOf(obj, 'Uint16Array') ||\n instanceOf(obj, 'Int32Array') ||\n instanceOf(obj, 'Uint32Array') ||\n instanceOf(obj, 'Float32Array') ||\n instanceOf(obj, 'Float64Array') ||\n instanceOf(obj, 'BigInt64Array') ||\n instanceOf(obj, 'BigUint64Array')\n );\n}\n\n/**\n * A function that will recursively inspect an object and return a Threads\n * `Transfer` that contains all the `Transferable`s in the given object.\n *\n * @param obj The object to make transferable.\n * @returns A `Transfer` from Threads.\n */\nexport function makeTransferable<T>(obj: T): ReturnType<typeof Transfer> | T {\n if (isTransferable(obj)) {\n return Transfer(obj);\n } else if (obj != null && typeof obj === 'object') {\n const transferables = findTransferables(obj);\n return Transfer(obj, transferables);\n } else {\n return obj;\n }\n}\n\nfunction findTransferables<T>(obj: T): Transferable[] {\n if (isTransferable(obj)) {\n return [obj];\n } else if (typeof obj === 'object') {\n if (Array.isArray(obj)) {\n const result: Transferable[] = [];\n obj.forEach((o) => result.push(...findTransferables(o)));\n return result;\n } else if (isTypedArray(obj)) {\n return [obj.buffer];\n } else if (obj != null) {\n return Object.values(obj).reduce((acc, value) => {\n acc.push(...findTransferables(value));\n return acc;\n }, []);\n } else {\n return [];\n }\n } else {\n return [];\n }\n}\n","import { expose as threadsExpose } from 'threads';\nimport {
|
|
1
|
+
{"version":3,"file":"bundle.esm.js","sources":["../src/terminate.ts","../src/globalThis.ts","../src/transferable.ts","../src/worker.ts"],"sourcesContent":["import { Thread } from 'threads';\n\ninterface WorkerPoolLike {\n terminate(force?: boolean): Promise<void>;\n}\n\nexport class TerminateController {\n private threads: Thread[] = [];\n private pools: WorkerPoolLike[] = [];\n\n public addThread(thread: Thread): void {\n this.threads.push(thread);\n }\n\n public addPool(pool: WorkerPoolLike): void {\n this.pools.push(pool);\n }\n\n public async terminate(force = false): Promise<void> {\n await Promise.all([\n ...this.threads.map((t) => Thread.terminate(t)),\n ...this.pools.map((p) => p.terminate(force)),\n ]);\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getGlobal(): any {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n } else if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n\nexport default getGlobal();\n","import { Transfer } from 'threads';\n\nimport globalThis from './globalThis';\n\ntype TypedArray =\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array;\n\nfunction instanceOf(obj: unknown, className: string): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const Type = globalThis[className];\n return Type != null && obj instanceof Type;\n}\n\nfunction isTransferable(obj: unknown): obj is Transferable {\n return (\n instanceOf(obj, 'ArrayBuffer') ||\n instanceOf(obj, 'MessagePort') ||\n instanceOf(obj, 'ImageBitmap') ||\n instanceOf(obj, 'OffscreenCanvas')\n );\n}\n\nfunction isTypedArray(obj: unknown): obj is TypedArray {\n return (\n instanceOf(obj, 'Int8Array') ||\n instanceOf(obj, 'Uint8Array') ||\n instanceOf(obj, 'Uint8ClampedArray') ||\n instanceOf(obj, 'Int16Array') ||\n instanceOf(obj, 'Uint16Array') ||\n instanceOf(obj, 'Int32Array') ||\n instanceOf(obj, 'Uint32Array') ||\n instanceOf(obj, 'Float32Array') ||\n instanceOf(obj, 'Float64Array') ||\n instanceOf(obj, 'BigInt64Array') ||\n instanceOf(obj, 'BigUint64Array')\n );\n}\n\n/**\n * A function that will recursively inspect an object and return a Threads\n * `Transfer` that contains all the `Transferable`s in the given object.\n *\n * @param obj The object to make transferable.\n * @returns A `Transfer` from Threads.\n */\nexport function makeTransferable<T>(obj: T): ReturnType<typeof Transfer> | T {\n if (isTransferable(obj)) {\n return Transfer(obj);\n } else if (obj != null && typeof obj === 'object') {\n const transferables = findTransferables(obj);\n return Transfer(obj, transferables);\n } else {\n return obj;\n }\n}\n\nfunction findTransferables<T>(obj: T): Transferable[] {\n if (isTransferable(obj)) {\n return [obj];\n } else if (typeof obj === 'object') {\n if (Array.isArray(obj)) {\n const result: Transferable[] = [];\n obj.forEach((o) => result.push(...findTransferables(o)));\n return result;\n } else if (isTypedArray(obj)) {\n return [obj.buffer];\n } else if (obj != null) {\n return Object.values(obj).reduce((acc, value) => {\n acc.push(...findTransferables(value));\n return acc;\n }, []);\n } else {\n return [];\n }\n } else {\n return [];\n }\n}\n","import { expose as threadsExpose } from 'threads';\n\nimport { makeTransferable } from './transferable';\n\ntype Exposed = Parameters<typeof threadsExpose>[0];\ntype WorkerFunction = Extract<Exposed, (...args: any[]) => any>;\ntype WorkerModule = Exclude<Exposed, WorkerFunction>;\n\ninterface DefineWorkerOptions {\n expose?: typeof threadsExpose;\n}\n\n/**\n * Defines a web worker implementation. This function wraps the `expose` method\n * of Threads and handles automatic conversion of Transferable types.\n *\n * @param impl The worker implementation.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Transferable\n */\nexport function defineWorker(\n impl: Exposed,\n { expose = threadsExpose }: DefineWorkerOptions = {}\n): void {\n function wrap(f: WorkerFunction): WorkerFunction {\n return async (...args: unknown[]) => {\n const res = await f(...args);\n return makeTransferable(res);\n };\n }\n\n if (typeof impl === 'function') {\n return expose(wrap(impl));\n } else {\n const mod = Object.entries(impl).reduce((mod, [key, fn]) => {\n mod[key] = wrap(fn);\n return mod;\n }, {} as WorkerModule);\n return expose(mod);\n }\n}\n"],"names":["globalThis","expose","threadsExpose"],"mappings":"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"}
|
package/dist/globalThis.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"globalThis.d.ts","sourceRoot":"","sources":["../src/globalThis.ts"],"names":[],"mappings":";AAcA,wBAA2B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
|
package/dist/terminate.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminate.d.ts","sourceRoot":"","sources":["../src/terminate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,UAAU,cAAc;IACtB,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAwB;IAE9B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAI7B,SAAS,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAMrD"}
|
package/dist/transferable.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transferable.d.ts","sourceRoot":"","sources":["../src/transferable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAgDnC;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAS3E"}
|
package/dist/worker.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { expose as threadsExpose } from 'threads';
|
|
2
|
+
type Exposed = Parameters<typeof threadsExpose>[0];
|
|
2
3
|
interface DefineWorkerOptions {
|
|
3
|
-
expose?:
|
|
4
|
+
expose?: typeof threadsExpose;
|
|
4
5
|
}
|
|
5
6
|
/**
|
|
6
7
|
* Defines a web worker implementation. This function wraps the `expose` method
|
|
@@ -9,5 +10,6 @@ interface DefineWorkerOptions {
|
|
|
9
10
|
* @param impl The worker implementation.
|
|
10
11
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/Transferable
|
|
11
12
|
*/
|
|
12
|
-
export declare function defineWorker(impl:
|
|
13
|
+
export declare function defineWorker(impl: Exposed, { expose }?: DefineWorkerOptions): void;
|
|
13
14
|
export {};
|
|
15
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,SAAS,CAAC;AAIlD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AAInD,UAAU,mBAAmB;IAC3B,MAAM,CAAC,EAAE,OAAO,aAAa,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,EAAE,MAAsB,EAAE,GAAE,mBAAwB,GACnD,IAAI,CAiBN"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vertexvis/web-workers",
|
|
3
|
-
"version": "0.2.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"type": "module",
|
|
4
5
|
"license": "MIT",
|
|
5
6
|
"description": "A wrapper around ThreadsJS to make bundling and using web workers even simpler.",
|
|
6
7
|
"keywords": [
|
|
@@ -18,7 +19,7 @@
|
|
|
18
19
|
"bugs": {
|
|
19
20
|
"url": "https://github.com/Vertexvis/vertex-web-sdk/issues"
|
|
20
21
|
},
|
|
21
|
-
"main": "./dist/bundle.cjs
|
|
22
|
+
"main": "./dist/bundle.cjs",
|
|
22
23
|
"module": "./dist/bundle.esm.js",
|
|
23
24
|
"typings": "./dist/index.d.ts",
|
|
24
25
|
"publishConfig": {
|
|
@@ -35,7 +36,7 @@
|
|
|
35
36
|
"prebuild": "yarn clean",
|
|
36
37
|
"build": "rollup --config ./rollup.config.js && cp ./extensions.d.ts ./dist",
|
|
37
38
|
"format": "yarn lint --fix",
|
|
38
|
-
"lint": "eslint
|
|
39
|
+
"lint": "eslint .",
|
|
39
40
|
"start": "jest --watch",
|
|
40
41
|
"test": "jest",
|
|
41
42
|
"test:coverage": "yarn test --coverage"
|
|
@@ -50,5 +51,5 @@
|
|
|
50
51
|
"threads": "^1",
|
|
51
52
|
"tslib": "^2"
|
|
52
53
|
},
|
|
53
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "4fdca7bf2b8f66812c723f29a16c0257e11861bc"
|
|
54
55
|
}
|
package/dist/bundle.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.cjs.js","sources":["../src/terminate.ts","../src/globalThis.ts","../src/transferable.ts","../src/worker.ts"],"sourcesContent":["import { Thread } from 'threads';\n\ninterface WorkerPoolLike {\n terminate(force?: boolean): Promise<void>;\n}\n\nexport class TerminateController {\n private threads: Thread[] = [];\n private pools: WorkerPoolLike[] = [];\n\n public addThread(thread: Thread): void {\n this.threads.push(thread);\n }\n\n public addPool(pool: WorkerPoolLike): void {\n this.pools.push(pool);\n }\n\n public async terminate(force = false): Promise<void> {\n await Promise.all([\n ...this.threads.map((t) => Thread.terminate(t)),\n ...this.pools.map((p) => p.terminate(force)),\n ]);\n }\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction getGlobal(): any {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n } else if (typeof self !== 'undefined') {\n return self;\n } else if (typeof window !== 'undefined') {\n return window;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n}\n\nexport default getGlobal();\n","import { Transfer } from 'threads';\n\nimport globalThis from './globalThis';\n\ntype TypedArray =\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array\n | BigInt64Array\n | BigUint64Array;\n\nfunction instanceOf(obj: unknown, className: string): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const Type = globalThis[className];\n return Type != null && obj instanceof Type;\n}\n\nfunction isTransferable(obj: unknown): obj is Transferable {\n return (\n instanceOf(obj, 'ArrayBuffer') ||\n instanceOf(obj, 'MessagePort') ||\n instanceOf(obj, 'ImageBitmap') ||\n instanceOf(obj, 'OffscreenCanvas')\n );\n}\n\nfunction isTypedArray(obj: unknown): obj is TypedArray {\n return (\n instanceOf(obj, 'Int8Array') ||\n instanceOf(obj, 'Uint8Array') ||\n instanceOf(obj, 'Uint8ClampedArray') ||\n instanceOf(obj, 'Int16Array') ||\n instanceOf(obj, 'Uint16Array') ||\n instanceOf(obj, 'Int32Array') ||\n instanceOf(obj, 'Uint32Array') ||\n instanceOf(obj, 'Float32Array') ||\n instanceOf(obj, 'Float64Array') ||\n instanceOf(obj, 'BigInt64Array') ||\n instanceOf(obj, 'BigUint64Array')\n );\n}\n\n/**\n * A function that will recursively inspect an object and return a Threads\n * `Transfer` that contains all the `Transferable`s in the given object.\n *\n * @param obj The object to make transferable.\n * @returns A `Transfer` from Threads.\n */\nexport function makeTransferable<T>(obj: T): ReturnType<typeof Transfer> | T {\n if (isTransferable(obj)) {\n return Transfer(obj);\n } else if (obj != null && typeof obj === 'object') {\n const transferables = findTransferables(obj);\n return Transfer(obj, transferables);\n } else {\n return obj;\n }\n}\n\nfunction findTransferables<T>(obj: T): Transferable[] {\n if (isTransferable(obj)) {\n return [obj];\n } else if (typeof obj === 'object') {\n if (Array.isArray(obj)) {\n const result: Transferable[] = [];\n obj.forEach((o) => result.push(...findTransferables(o)));\n return result;\n } else if (isTypedArray(obj)) {\n return [obj.buffer];\n } else if (obj != null) {\n return Object.values(obj).reduce((acc, value) => {\n acc.push(...findTransferables(value));\n return acc;\n }, []);\n } else {\n return [];\n }\n } else {\n return [];\n }\n}\n","import { expose as threadsExpose } from 'threads';\nimport { WorkerFunction, WorkerModule } from 'threads/dist/types/worker';\n\nimport { makeTransferable } from './transferable';\n\ninterface DefineWorkerOptions {\n expose?: (f: WorkerFunction | WorkerModule<string>) => void;\n}\n\n/**\n * Defines a web worker implementation. This function wraps the `expose` method\n * of Threads and handles automatic conversion of Transferable types.\n *\n * @param impl The worker implementation.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Transferable\n */\nexport function defineWorker(\n impl: WorkerFunction | WorkerModule<string>,\n { expose = threadsExpose }: DefineWorkerOptions = {}\n): void {\n function wrap(f: WorkerFunction): WorkerFunction {\n return async (...args: unknown[]) => {\n const res = await f(...args);\n return makeTransferable(res);\n };\n }\n\n if (typeof impl === 'function') {\n return expose(wrap(impl));\n } else {\n const mod = Object.entries(impl).reduce((mod, [key, fn]) => {\n mod[key] = wrap(fn);\n return mod;\n }, {} as WorkerModule<string>);\n return expose(mod);\n }\n}\n"],"names":["__spreadArray","Thread","globalThis","Transfer","threadsExpose"],"mappings":"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"}
|