@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 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 resolve from '@rollup/plugin-node-resolve';
146
+ import { nodeResolve } from '@rollup/plugin-node-resolve';
147
147
  import typescript2 from 'rollup-plugin-typescript2';
148
- import { terser } from 'rollup-plugin-terser';
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
- resolve(),
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: [resolve(), typescript(), terser()]
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
- var TerminateController = /** @class */ (function () {
9
- function TerminateController() {
5
+ class TerminateController {
6
+ constructor() {
10
7
  this.threads = [];
11
8
  this.pools = [];
12
9
  }
13
- TerminateController.prototype.addThread = function (thread) {
10
+ addThread(thread) {
14
11
  this.threads.push(thread);
15
- };
16
- TerminateController.prototype.addPool = function (pool) {
12
+ }
13
+ addPool(pool) {
17
14
  this.pools.push(pool);
18
- };
19
- TerminateController.prototype.terminate = function () {
20
- return tslib.__awaiter(this, arguments, void 0, function (force) {
21
- if (force === void 0) { force = false; }
22
- return tslib.__generator(this, function (_a) {
23
- switch (_a.label) {
24
- case 0: return [4 /*yield*/, Promise.all(tslib.__spreadArray(tslib.__spreadArray([], this.threads.map(function (t) { return threads.Thread.terminate(t); }), true), this.pools.map(function (p) { return p.terminate(force); }), true))];
25
- case 1:
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
- var Type = globalThis$1[className];
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
- var transferables = findTransferables(obj);
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
- var result_1 = [];
103
- obj.forEach(function (o) { return result_1.push.apply(result_1, findTransferables(o)); });
104
- return result_1;
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(function (acc, value) {
111
- acc.push.apply(acc, findTransferables(value));
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, _a) {
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
- var _this = this;
135
- return function () {
136
- var args = [];
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
- var mod = Object.entries(impl).reduce(function (mod, _a) {
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.js.map
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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"}
@@ -1,32 +1,23 @@
1
- import { __awaiter, __generator, __spreadArray } from 'tslib';
2
1
  import { Thread, Transfer, expose } from 'threads';
3
2
 
4
- var TerminateController = /** @class */ (function () {
5
- function TerminateController() {
3
+ class TerminateController {
4
+ constructor() {
6
5
  this.threads = [];
7
6
  this.pools = [];
8
7
  }
9
- TerminateController.prototype.addThread = function (thread) {
8
+ addThread(thread) {
10
9
  this.threads.push(thread);
11
- };
12
- TerminateController.prototype.addPool = function (pool) {
10
+ }
11
+ addPool(pool) {
13
12
  this.pools.push(pool);
14
- };
15
- TerminateController.prototype.terminate = function () {
16
- return __awaiter(this, arguments, void 0, function (force) {
17
- if (force === void 0) { force = false; }
18
- return __generator(this, function (_a) {
19
- switch (_a.label) {
20
- case 0: return [4 /*yield*/, Promise.all(__spreadArray(__spreadArray([], this.threads.map(function (t) { return Thread.terminate(t); }), true), this.pools.map(function (p) { return p.terminate(force); }), true))];
21
- case 1:
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
- var Type = globalThis$1[className];
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
- var transferables = findTransferables(obj);
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
- var result_1 = [];
99
- obj.forEach(function (o) { return result_1.push.apply(result_1, findTransferables(o)); });
100
- return result_1;
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(function (acc, value) {
107
- acc.push.apply(acc, findTransferables(value));
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, _a) {
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
- var _this = this;
131
- return function () {
132
- var args = [];
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
- var mod = Object.entries(impl).reduce(function (mod, _a) {
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
  }, {});
@@ -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 { 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":["globalThis","expose","threadsExpose"],"mappings":"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"}
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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"}
@@ -1,2 +1,3 @@
1
1
  declare const _default: any;
2
2
  export default _default;
3
+ //# sourceMappingURL=globalThis.d.ts.map
@@ -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
@@ -1,3 +1,4 @@
1
1
  export * from './terminate';
2
2
  export * from './transferable';
3
3
  export * from './worker';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -10,3 +10,4 @@ export declare class TerminateController {
10
10
  terminate(force?: boolean): Promise<void>;
11
11
  }
12
12
  export {};
13
+ //# sourceMappingURL=terminate.d.ts.map
@@ -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"}
@@ -7,3 +7,4 @@ import { Transfer } from 'threads';
7
7
  * @returns A `Transfer` from Threads.
8
8
  */
9
9
  export declare function makeTransferable<T>(obj: T): ReturnType<typeof Transfer> | T;
10
+ //# sourceMappingURL=transferable.d.ts.map
@@ -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 { WorkerFunction, WorkerModule } from 'threads/dist/types/worker';
1
+ import { expose as threadsExpose } from 'threads';
2
+ type Exposed = Parameters<typeof threadsExpose>[0];
2
3
  interface DefineWorkerOptions {
3
- expose?: (f: WorkerFunction | WorkerModule<string>) => void;
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: WorkerFunction | WorkerModule<string>, { expose }?: DefineWorkerOptions): void;
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-canary.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.js",
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 --ext .ts,.tsx,.js,.jsx --ignore-path ../../.gitignore .",
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": "74a95953dc7d8ced87ed76dafbc7a5486909db95"
54
+ "gitHead": "4fdca7bf2b8f66812c723f29a16c0257e11861bc"
54
55
  }
@@ -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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"}