@xylabs/threads
Advanced tools
Comparing version 3.5.5 to 3.5.6
@@ -1,11 +0,16 @@ | ||
import { DefaultSerializer, extendSerializer } from './serializers'; | ||
let registeredSerializer = DefaultSerializer; | ||
export function registerSerializer(serializer) { | ||
registeredSerializer = extendSerializer(registeredSerializer, serializer); | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.registerSerializer = registerSerializer; | ||
exports.deserialize = deserialize; | ||
exports.serialize = serialize; | ||
const serializers_1 = require("./serializers"); | ||
let registeredSerializer = serializers_1.DefaultSerializer; | ||
function registerSerializer(serializer) { | ||
registeredSerializer = (0, serializers_1.extendSerializer)(registeredSerializer, serializer); | ||
} | ||
export function deserialize(message) { | ||
function deserialize(message) { | ||
return registeredSerializer.deserialize(message); | ||
} | ||
export function serialize(input) { | ||
function serialize(input) { | ||
return registeredSerializer.serialize(input); | ||
} |
@@ -1,5 +0,26 @@ | ||
export { registerSerializer } from './common'; | ||
export * from './master/index'; | ||
export { DefaultSerializer } from './serializers'; | ||
export { Transfer } from './transferable'; | ||
export { expose } from './worker/index'; | ||
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
var desc = Object.getOwnPropertyDescriptor(m, k); | ||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
desc = { enumerable: true, get: function() { return m[k]; } }; | ||
} | ||
Object.defineProperty(o, k2, desc); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __exportStar = (this && this.__exportStar) || function(m, exports) { | ||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.expose = exports.Transfer = exports.DefaultSerializer = exports.registerSerializer = void 0; | ||
var common_1 = require("./common"); | ||
Object.defineProperty(exports, "registerSerializer", { enumerable: true, get: function () { return common_1.registerSerializer; } }); | ||
__exportStar(require("./master/index"), exports); | ||
var serializers_1 = require("./serializers"); | ||
Object.defineProperty(exports, "DefaultSerializer", { enumerable: true, get: function () { return serializers_1.DefaultSerializer; } }); | ||
var transferable_1 = require("./transferable"); | ||
Object.defineProperty(exports, "Transfer", { enumerable: true, get: function () { return transferable_1.Transfer; } }); | ||
var index_1 = require("./worker/index"); | ||
Object.defineProperty(exports, "expose", { enumerable: true, get: function () { return index_1.expose; } }); |
@@ -0,1 +1,5 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.getBaseURL = getBaseURL; | ||
exports.getBundleURL = getBundleURLCached; | ||
let bundleURL; | ||
@@ -23,2 +27,1 @@ function getBundleURLCached() { | ||
} | ||
export { getBaseURL, getBundleURLCached as getBundleURL }; |
@@ -1,3 +0,8 @@ | ||
import { getBundleURL } from './get-bundle-url.browser'; | ||
export const defaultPoolSize = typeof navigator !== 'undefined' && navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.defaultPoolSize = void 0; | ||
exports.getWorkerImplementation = getWorkerImplementation; | ||
exports.isWorkerRuntime = isWorkerRuntime; | ||
const get_bundle_url_browser_1 = require("./get-bundle-url.browser"); | ||
exports.defaultPoolSize = typeof navigator !== 'undefined' && navigator.hardwareConcurrency ? navigator.hardwareConcurrency : 4; | ||
const isAbsoluteURL = (value) => /^[A-Za-z][\d+.A-Za-z\-]*:/.test(value); | ||
@@ -21,4 +26,4 @@ function createSourceBlobURL(code) { | ||
} | ||
else if (typeof url === 'string' && !isAbsoluteURL(url) && /^file:\/\//i.test(getBundleURL())) { | ||
url = new URL(url, getBundleURL().replace(/\/[^/]+$/, '/')); | ||
else if (typeof url === 'string' && !isAbsoluteURL(url) && /^file:\/\//i.test((0, get_bundle_url_browser_1.getBundleURL)())) { | ||
url = new URL(url, (0, get_bundle_url_browser_1.getBundleURL)().replace(/\/[^/]+$/, '/')); | ||
if (options?.CORSWorkaround ?? true) { | ||
@@ -52,3 +57,3 @@ url = createSourceBlobURL(`importScripts(${JSON.stringify(url)});`); | ||
let implementation; | ||
export function getWorkerImplementation() { | ||
function getWorkerImplementation() { | ||
if (!implementation) { | ||
@@ -59,5 +64,5 @@ implementation = selectWorkerImplementation(); | ||
} | ||
export function isWorkerRuntime() { | ||
function isWorkerRuntime() { | ||
const isWindowContext = typeof self !== 'undefined' && typeof Window !== 'undefined' && self instanceof Window; | ||
return typeof self !== 'undefined' && self['postMessage'] && !isWindowContext ? true : false; | ||
} |
@@ -1,7 +0,33 @@ | ||
import * as BrowserImplementation from './implementation.browser'; | ||
import * as NodeImplementation from './implementation.node'; | ||
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
var desc = Object.getOwnPropertyDescriptor(m, k); | ||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
desc = { enumerable: true, get: function() { return m[k]; } }; | ||
} | ||
Object.defineProperty(o, k2, desc); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
}) : function(o, v) { | ||
o["default"] = v; | ||
}); | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
__setModuleDefault(result, mod); | ||
return result; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isWorkerRuntime = exports.getWorkerImplementation = exports.defaultPoolSize = void 0; | ||
const BrowserImplementation = __importStar(require("./implementation.browser")); | ||
const NodeImplementation = __importStar(require("./implementation.node")); | ||
const runningInNode = typeof process !== 'undefined' && process.arch !== 'browser' && 'pid' in process; | ||
const implementation = runningInNode ? NodeImplementation : BrowserImplementation; | ||
export const defaultPoolSize = implementation.defaultPoolSize; | ||
export const getWorkerImplementation = implementation.getWorkerImplementation; | ||
export const isWorkerRuntime = implementation.isWorkerRuntime; | ||
exports.defaultPoolSize = implementation.defaultPoolSize; | ||
exports.getWorkerImplementation = implementation.getWorkerImplementation; | ||
exports.isWorkerRuntime = implementation.isWorkerRuntime; |
@@ -1,8 +0,16 @@ | ||
import { EventEmitter } from 'node:events'; | ||
import { cpus } from 'node:os'; | ||
import path from 'node:path'; | ||
import { fileURLToPath } from 'node:url'; | ||
import getCallsites from 'callsites-3-1-0'; | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.defaultPoolSize = void 0; | ||
exports.getWorkerImplementation = getWorkerImplementation; | ||
exports.isWorkerRuntime = isWorkerRuntime; | ||
const node_events_1 = require("node:events"); | ||
const node_os_1 = require("node:os"); | ||
const node_path_1 = __importDefault(require("node:path")); | ||
const node_url_1 = require("node:url"); | ||
const callsites_3_1_0_1 = __importDefault(require("callsites-3-1-0")); | ||
let tsNodeAvailable; | ||
export const defaultPoolSize = cpus().length; | ||
exports.defaultPoolSize = (0, node_os_1.cpus)().length; | ||
function detectTsNode() { | ||
@@ -37,3 +45,3 @@ if (typeof __non_webpack_require__ === 'function') { | ||
function rebaseScriptPath(scriptPath, ignoreRegex) { | ||
const parentCallSite = getCallsites().find((callsite) => { | ||
const parentCallSite = (0, callsites_3_1_0_1.default)().find((callsite) => { | ||
const filename = callsite.getFileName(); | ||
@@ -45,5 +53,5 @@ return Boolean(filename && !filename.match(ignoreRegex) && !/[/\\]master[/\\]implementation/.test(filename) && !/^internal\/process/.test(filename)); | ||
if (callerPath && callerPath.startsWith('file:')) { | ||
callerPath = fileURLToPath(callerPath); | ||
callerPath = (0, node_url_1.fileURLToPath)(callerPath); | ||
} | ||
const rebasedScriptPath = callerPath ? path.join(path.dirname(callerPath), scriptPath) : scriptPath; | ||
const rebasedScriptPath = callerPath ? node_path_1.default.join(node_path_1.default.dirname(callerPath), scriptPath) : scriptPath; | ||
return rebasedScriptPath; | ||
@@ -53,3 +61,3 @@ } | ||
const makeRelative = (filePath) => { | ||
return path.isAbsolute(filePath) ? filePath : path.join(baseURL || eval('__dirname'), filePath); | ||
return node_path_1.default.isAbsolute(filePath) ? filePath : node_path_1.default.join(baseURL || eval('__dirname'), filePath); | ||
}; | ||
@@ -138,3 +146,3 @@ const workerFilePath = typeof __non_webpack_require__ === 'function' ? | ||
allWorkers.push(this); | ||
this.emitter = new EventEmitter(); | ||
this.emitter = new node_events_1.EventEmitter(); | ||
this.onerror = (error) => this.emitter.emit('error', error); | ||
@@ -186,3 +194,3 @@ this.onmessage = (message) => this.emitter.emit('message', message); | ||
} | ||
export function getWorkerImplementation() { | ||
function getWorkerImplementation() { | ||
if (!implementation) { | ||
@@ -193,3 +201,3 @@ implementation = selectWorkerImplementation(); | ||
} | ||
export function isWorkerRuntime() { | ||
function isWorkerRuntime() { | ||
if (isTinyWorker) { | ||
@@ -196,0 +204,0 @@ return self !== undefined && self['postMessage'] ? true : false; |
@@ -1,7 +0,14 @@ | ||
import { getWorkerImplementation } from './implementation'; | ||
export { Pool } from './pool'; | ||
export { spawn } from './spawn'; | ||
export { Thread } from './thread'; | ||
export const BlobWorker = getWorkerImplementation().blob; | ||
export const Worker = getWorkerImplementation().default; | ||
export { isWorkerRuntime } from './implementation'; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isWorkerRuntime = exports.Worker = exports.BlobWorker = exports.Thread = exports.spawn = exports.Pool = void 0; | ||
const implementation_1 = require("./implementation"); | ||
var pool_1 = require("./pool"); | ||
Object.defineProperty(exports, "Pool", { enumerable: true, get: function () { return pool_1.Pool; } }); | ||
var spawn_1 = require("./spawn"); | ||
Object.defineProperty(exports, "spawn", { enumerable: true, get: function () { return spawn_1.spawn; } }); | ||
var thread_1 = require("./thread"); | ||
Object.defineProperty(exports, "Thread", { enumerable: true, get: function () { return thread_1.Thread; } }); | ||
exports.BlobWorker = (0, implementation_1.getWorkerImplementation)().blob; | ||
exports.Worker = (0, implementation_1.getWorkerImplementation)().default; | ||
var implementation_2 = require("./implementation"); | ||
Object.defineProperty(exports, "isWorkerRuntime", { enumerable: true, get: function () { return implementation_2.isWorkerRuntime; } }); |
@@ -1,15 +0,22 @@ | ||
import DebugLogger from 'debug'; | ||
import { multicast, Observable } from 'observable-fns'; | ||
import { deserialize, serialize } from '../common'; | ||
import { ObservablePromise } from '../observable-promise'; | ||
import { isTransferDescriptor } from '../transferable'; | ||
import { MasterMessageType, WorkerMessageType, } from '../types/messages'; | ||
const debugMessages = DebugLogger('threads:master:messages'); | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createProxyFunction = createProxyFunction; | ||
exports.createProxyModule = createProxyModule; | ||
const debug_1 = __importDefault(require("debug")); | ||
const observable_fns_1 = require("observable-fns"); | ||
const common_1 = require("../common"); | ||
const observable_promise_1 = require("../observable-promise"); | ||
const transferable_1 = require("../transferable"); | ||
const messages_1 = require("../types/messages"); | ||
const debugMessages = (0, debug_1.default)('threads:master:messages'); | ||
let nextJobUID = 1; | ||
const dedupe = (array) => [...new Set(array)]; | ||
const isJobErrorMessage = (data) => data && data.type === WorkerMessageType.error; | ||
const isJobResultMessage = (data) => data && data.type === WorkerMessageType.result; | ||
const isJobStartMessage = (data) => data && data.type === WorkerMessageType.running; | ||
const isJobErrorMessage = (data) => data && data.type === messages_1.WorkerMessageType.error; | ||
const isJobResultMessage = (data) => data && data.type === messages_1.WorkerMessageType.result; | ||
const isJobStartMessage = (data) => data && data.type === messages_1.WorkerMessageType.running; | ||
function createObservableForJob(worker, jobUID) { | ||
return new Observable((observer) => { | ||
return new observable_fns_1.Observable((observer) => { | ||
let asyncType; | ||
@@ -26,3 +33,3 @@ const messageHandler = ((event) => { | ||
if (event.data.payload !== undefined) { | ||
observer.next(deserialize(event.data.payload)); | ||
observer.next((0, common_1.deserialize)(event.data.payload)); | ||
} | ||
@@ -34,3 +41,3 @@ observer.complete(); | ||
if (event.data.payload) { | ||
observer.next(deserialize(event.data.payload)); | ||
observer.next((0, common_1.deserialize)(event.data.payload)); | ||
} | ||
@@ -44,3 +51,3 @@ if (event.data.complete) { | ||
else if (isJobErrorMessage(event.data)) { | ||
const error = deserialize(event.data.error); | ||
const error = (0, common_1.deserialize)(event.data.error); | ||
if (asyncType === 'promise' || !asyncType) { | ||
@@ -59,3 +66,3 @@ observer.error(error); | ||
const cancelMessage = { | ||
type: MasterMessageType.cancel, | ||
type: messages_1.MasterMessageType.cancel, | ||
uid: jobUID, | ||
@@ -79,8 +86,8 @@ }; | ||
for (const arg of rawArgs) { | ||
if (isTransferDescriptor(arg)) { | ||
args.push(serialize(arg.send)); | ||
if ((0, transferable_1.isTransferDescriptor)(arg)) { | ||
args.push((0, common_1.serialize)(arg.send)); | ||
transferables.push(...arg.transferables); | ||
} | ||
else { | ||
args.push(serialize(arg)); | ||
args.push((0, common_1.serialize)(arg)); | ||
} | ||
@@ -93,3 +100,3 @@ } | ||
} | ||
export function createProxyFunction(worker, method) { | ||
function createProxyFunction(worker, method) { | ||
return ((...rawArgs) => { | ||
@@ -101,3 +108,3 @@ const uid = nextJobUID++; | ||
method, | ||
type: MasterMessageType.run, | ||
type: messages_1.MasterMessageType.run, | ||
uid, | ||
@@ -110,8 +117,8 @@ }; | ||
catch (error) { | ||
return ObservablePromise.from(Promise.reject(error)); | ||
return observable_promise_1.ObservablePromise.from(Promise.reject(error)); | ||
} | ||
return ObservablePromise.from(multicast(createObservableForJob(worker, uid))); | ||
return observable_promise_1.ObservablePromise.from((0, observable_fns_1.multicast)(createObservableForJob(worker, uid))); | ||
}); | ||
} | ||
export function createProxyModule(worker, methodNames) { | ||
function createProxyModule(worker, methodNames) { | ||
const proxy = {}; | ||
@@ -118,0 +125,0 @@ for (const methodName of methodNames) { |
@@ -1,2 +0,5 @@ | ||
export var PoolEventType; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.PoolEventType = void 0; | ||
var PoolEventType; | ||
(function (PoolEventType) { | ||
@@ -11,2 +14,2 @@ PoolEventType["initialized"] = "initialized"; | ||
PoolEventType["terminated"] = "terminated"; | ||
})(PoolEventType || (PoolEventType = {})); | ||
})(PoolEventType || (exports.PoolEventType = PoolEventType = {})); |
@@ -1,7 +0,13 @@ | ||
import DebugLogger from 'debug'; | ||
import { multicast, Observable, Subject } from 'observable-fns'; | ||
import { allSettled } from '../ponyfills'; | ||
import { defaultPoolSize } from './implementation'; | ||
import { PoolEventType } from './pool-types'; | ||
import { Thread } from './thread'; | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Thread = exports.PoolEventType = exports.Pool = void 0; | ||
const debug_1 = __importDefault(require("debug")); | ||
const observable_fns_1 = require("observable-fns"); | ||
const ponyfills_1 = require("../ponyfills"); | ||
const implementation_1 = require("./implementation"); | ||
const pool_types_1 = require("./pool-types"); | ||
const thread_1 = require("./thread"); | ||
let nextPoolID = 1; | ||
@@ -31,3 +37,3 @@ function createArray(size) { | ||
class WorkerPool { | ||
static EventType = PoolEventType; | ||
static EventType = pool_types_1.PoolEventType; | ||
debug; | ||
@@ -37,3 +43,3 @@ eventObservable; | ||
workers; | ||
eventSubject = new Subject(); | ||
eventSubject = new observable_fns_1.Subject(); | ||
initErrors = []; | ||
@@ -45,10 +51,10 @@ isClosing = false; | ||
const options = typeof optionsOrSize === 'number' ? { size: optionsOrSize } : optionsOrSize || {}; | ||
const { size = defaultPoolSize } = options; | ||
this.debug = DebugLogger(`threads:pool:${slugify(options.name || String(nextPoolID++))}`); | ||
const { size = implementation_1.defaultPoolSize } = options; | ||
this.debug = (0, debug_1.default)(`threads:pool:${slugify(options.name || String(nextPoolID++))}`); | ||
this.options = options; | ||
this.workers = spawnWorkers(spawnWorker, size); | ||
this.eventObservable = multicast(Observable.from(this.eventSubject)); | ||
this.eventObservable = (0, observable_fns_1.multicast)(observable_fns_1.Observable.from(this.eventSubject)); | ||
Promise.all(this.workers.map((worker) => worker.init)).then(() => this.eventSubject.next({ | ||
size: this.workers.length, | ||
type: PoolEventType.initialized, | ||
type: pool_types_1.PoolEventType.initialized, | ||
}), (error) => { | ||
@@ -69,3 +75,3 @@ this.debug('Error while initializing pool worker:', error); | ||
taskID: task.id, | ||
type: PoolEventType.taskStart, | ||
type: pool_types_1.PoolEventType.taskStart, | ||
workerID, | ||
@@ -79,3 +85,3 @@ }); | ||
taskID: task.id, | ||
type: PoolEventType.taskCompleted, | ||
type: pool_types_1.PoolEventType.taskCompleted, | ||
workerID, | ||
@@ -89,3 +95,3 @@ }); | ||
taskID: task.id, | ||
type: PoolEventType.taskFailed, | ||
type: pool_types_1.PoolEventType.taskFailed, | ||
workerID, | ||
@@ -121,3 +127,3 @@ }); | ||
this.debug('Task queue is empty'); | ||
this.eventSubject.next({ type: PoolEventType.taskQueueDrained }); | ||
this.eventSubject.next({ type: pool_types_1.PoolEventType.taskQueueDrained }); | ||
return; | ||
@@ -130,11 +136,11 @@ } | ||
const eventSubscription = this.events().subscribe((event) => { | ||
if (event.type === PoolEventType.taskCompleted && event.taskID === taskID) { | ||
if (event.type === pool_types_1.PoolEventType.taskCompleted && event.taskID === taskID) { | ||
eventSubscription.unsubscribe(); | ||
resolve(event.returnValue); | ||
} | ||
else if (event.type === PoolEventType.taskFailed && event.taskID === taskID) { | ||
else if (event.type === pool_types_1.PoolEventType.taskFailed && event.taskID === taskID) { | ||
eventSubscription.unsubscribe(); | ||
reject(event.error); | ||
} | ||
else if (event.type === PoolEventType.terminated) { | ||
else if (event.type === pool_types_1.PoolEventType.terminated) { | ||
eventSubscription.unsubscribe(); | ||
@@ -150,3 +156,3 @@ reject(new Error('Pool has been terminated before task was run.')); | ||
const failureSubscription = this.eventObservable.subscribe((event) => { | ||
if (event.type === PoolEventType.taskFailed) { | ||
if (event.type === pool_types_1.PoolEventType.taskFailed) { | ||
taskFailures.push(event.error); | ||
@@ -159,3 +165,3 @@ } | ||
if (allowResolvingImmediately && this.taskQueue.length === 0) { | ||
await allSettled(getCurrentlyRunningTasks()); | ||
await (0, ponyfills_1.allSettled)(getCurrentlyRunningTasks()); | ||
return taskFailures; | ||
@@ -167,3 +173,3 @@ } | ||
next(event) { | ||
if (event.type === PoolEventType.taskQueueDrained) { | ||
if (event.type === pool_types_1.PoolEventType.taskQueueDrained) { | ||
subscription.unsubscribe(); | ||
@@ -175,3 +181,3 @@ resolve(void 0); | ||
}); | ||
await allSettled(getCurrentlyRunningTasks()); | ||
await (0, ponyfills_1.allSettled)(getCurrentlyRunningTasks()); | ||
failureSubscription.unsubscribe(); | ||
@@ -186,7 +192,7 @@ return taskFailures; | ||
next(event) { | ||
if (event.type === PoolEventType.taskQueueDrained) { | ||
if (event.type === pool_types_1.PoolEventType.taskQueueDrained) { | ||
subscription.unsubscribe(); | ||
resolve(settlementPromise); | ||
} | ||
else if (event.type === PoolEventType.taskFailed) { | ||
else if (event.type === pool_types_1.PoolEventType.taskFailed) { | ||
subscription.unsubscribe(); | ||
@@ -226,3 +232,3 @@ reject(event.error); | ||
taskID: task.id, | ||
type: PoolEventType.taskCanceled, | ||
type: pool_types_1.PoolEventType.taskCanceled, | ||
}); | ||
@@ -243,3 +249,3 @@ }, | ||
taskID: task.id, | ||
type: PoolEventType.taskQueued, | ||
type: pool_types_1.PoolEventType.taskQueued, | ||
}); | ||
@@ -256,6 +262,6 @@ this.scheduleWork(); | ||
remainingQueue: [...this.taskQueue], | ||
type: PoolEventType.terminated, | ||
type: pool_types_1.PoolEventType.terminated, | ||
}); | ||
this.eventSubject.complete(); | ||
await Promise.all(this.workers.map(async (worker) => Thread.terminate(await worker.init))); | ||
await Promise.all(this.workers.map(async (worker) => thread_1.Thread.terminate(await worker.init))); | ||
} | ||
@@ -267,5 +273,7 @@ } | ||
; | ||
PoolConstructor.EventType = PoolEventType; | ||
export const Pool = PoolConstructor; | ||
export { PoolEventType } from './pool-types'; | ||
export { Thread } from './thread'; | ||
PoolConstructor.EventType = pool_types_1.PoolEventType; | ||
exports.Pool = PoolConstructor; | ||
var pool_types_2 = require("./pool-types"); | ||
Object.defineProperty(exports, "PoolEventType", { enumerable: true, get: function () { return pool_types_2.PoolEventType; } }); | ||
var thread_2 = require("./thread"); | ||
Object.defineProperty(exports, "Thread", { enumerable: true, get: function () { return thread_2.Thread; } }); |
@@ -1,9 +0,11 @@ | ||
import { Worker as WorkerImplementation } from './index'; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const index_1 = require("./index"); | ||
if (typeof global !== 'undefined') { | ||
; | ||
global.Worker = WorkerImplementation; | ||
global.Worker = index_1.Worker; | ||
} | ||
else if (window !== undefined) { | ||
; | ||
window.Worker = WorkerImplementation; | ||
window.Worker = index_1.Worker; | ||
} |
@@ -1,11 +0,17 @@ | ||
import DebugLogger from 'debug'; | ||
import { Observable } from 'observable-fns'; | ||
import { deserialize } from '../common'; | ||
import { createPromiseWithResolver } from '../promise'; | ||
import { $errors, $events, $terminate, $worker } from '../symbols'; | ||
import { WorkerEventType, } from '../types/master'; | ||
import { createProxyFunction, createProxyModule } from './invocation-proxy'; | ||
const debugMessages = DebugLogger('threads:master:messages'); | ||
const debugSpawn = DebugLogger('threads:master:spawn'); | ||
const debugThreadUtils = DebugLogger('threads:master:thread-utils'); | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.spawn = spawn; | ||
const debug_1 = __importDefault(require("debug")); | ||
const observable_fns_1 = require("observable-fns"); | ||
const common_1 = require("../common"); | ||
const promise_1 = require("../promise"); | ||
const symbols_1 = require("../symbols"); | ||
const master_1 = require("../types/master"); | ||
const invocation_proxy_1 = require("./invocation-proxy"); | ||
const debugMessages = (0, debug_1.default)('threads:master:messages'); | ||
const debugSpawn = (0, debug_1.default)('threads:master:spawn'); | ||
const debugThreadUtils = (0, debug_1.default)('threads:master:thread-utils'); | ||
const isInitMessage = (data) => data && data.type === 'init'; | ||
@@ -35,3 +41,3 @@ const isUncaughtErrorMessage = (data) => data && data.type === 'uncaughtError'; | ||
worker.removeEventListener('message', messageHandler); | ||
reject(deserialize(event.data.error)); | ||
reject((0, common_1.deserialize)(event.data.error)); | ||
} | ||
@@ -43,7 +49,7 @@ }); | ||
function createEventObservable(worker, workerTermination) { | ||
return new Observable((observer) => { | ||
return new observable_fns_1.Observable((observer) => { | ||
const messageHandler = ((messageEvent) => { | ||
const workerEvent = { | ||
data: messageEvent.data, | ||
type: WorkerEventType.message, | ||
type: master_1.WorkerEventType.message, | ||
}; | ||
@@ -56,3 +62,3 @@ observer.next(workerEvent); | ||
error: new Error(errorEvent.reason), | ||
type: WorkerEventType.internalError, | ||
type: master_1.WorkerEventType.internalError, | ||
}; | ||
@@ -65,3 +71,3 @@ observer.next(workerEvent); | ||
const terminationEvent = { | ||
type: WorkerEventType.termination, | ||
type: master_1.WorkerEventType.termination, | ||
}; | ||
@@ -76,3 +82,3 @@ worker.removeEventListener('message', messageHandler); | ||
function createTerminator(worker) { | ||
const [termination, resolver] = createPromiseWithResolver(); | ||
const [termination, resolver] = (0, promise_1.createPromiseWithResolver)(); | ||
const terminate = async () => { | ||
@@ -87,12 +93,12 @@ debugThreadUtils('Terminating worker'); | ||
const workerErrors = workerEvents | ||
.filter((event) => event.type === WorkerEventType.internalError) | ||
.filter((event) => event.type === master_1.WorkerEventType.internalError) | ||
.map((errorEvent) => errorEvent.error); | ||
return Object.assign(raw, { | ||
[$errors]: workerErrors, | ||
[$events]: workerEvents, | ||
[$terminate]: terminate, | ||
[$worker]: worker, | ||
[symbols_1.$errors]: workerErrors, | ||
[symbols_1.$events]: workerEvents, | ||
[symbols_1.$terminate]: terminate, | ||
[symbols_1.$worker]: worker, | ||
}); | ||
} | ||
export async function spawn(worker, options) { | ||
async function spawn(worker, options) { | ||
debugSpawn('Initializing new thread'); | ||
@@ -105,7 +111,7 @@ const timeout = options && options.timeout ? options.timeout : initMessageTimeout; | ||
if (exposed.type === 'function') { | ||
const proxy = createProxyFunction(worker); | ||
const proxy = (0, invocation_proxy_1.createProxyFunction)(worker); | ||
return setPrivateThreadProps(proxy, worker, events, terminate); | ||
} | ||
else if (exposed.type === 'module') { | ||
const proxy = createProxyModule(worker, exposed.methods); | ||
const proxy = (0, invocation_proxy_1.createProxyModule)(worker, exposed.methods); | ||
return setPrivateThreadProps(proxy, worker, events, terminate); | ||
@@ -112,0 +118,0 @@ } |
@@ -1,15 +0,18 @@ | ||
import { $errors, $events, $terminate } from '../symbols'; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Thread = void 0; | ||
const symbols_1 = require("../symbols"); | ||
function fail(message) { | ||
throw new Error(message); | ||
} | ||
export const Thread = { | ||
exports.Thread = { | ||
errors(thread) { | ||
return thread[$errors] || fail('Error observable not found. Make sure to pass a thread instance as returned by the spawn() promise.'); | ||
return thread[symbols_1.$errors] || fail('Error observable not found. Make sure to pass a thread instance as returned by the spawn() promise.'); | ||
}, | ||
events(thread) { | ||
return thread[$events] || fail('Events observable not found. Make sure to pass a thread instance as returned by the spawn() promise.'); | ||
return thread[symbols_1.$events] || fail('Events observable not found. Make sure to pass a thread instance as returned by the spawn() promise.'); | ||
}, | ||
terminate(thread) { | ||
return thread[$terminate](); | ||
return thread[symbols_1.$terminate](); | ||
}, | ||
}; |
@@ -1,2 +0,5 @@ | ||
import { Observable } from 'observable-fns'; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.ObservablePromise = void 0; | ||
const observable_fns_1 = require("observable-fns"); | ||
const doNothing = () => { }; | ||
@@ -11,3 +14,3 @@ const returnInput = (input) => input; | ||
} | ||
export class ObservablePromise extends Observable { | ||
class ObservablePromise extends observable_fns_1.Observable { | ||
[Symbol.toStringTag] = '[object ObservablePromise]'; | ||
@@ -130,1 +133,2 @@ initHasRun = false; | ||
} | ||
exports.ObservablePromise = ObservablePromise; |
@@ -1,4 +0,7 @@ | ||
import { Observable } from 'observable-fns'; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Observable = exports.Subject = void 0; | ||
const observable_fns_1 = require("observable-fns"); | ||
const $observers = Symbol('observers'); | ||
export class Subject extends Observable { | ||
class Subject extends observable_fns_1.Observable { | ||
[$observers]; | ||
@@ -28,2 +31,4 @@ constructor() { | ||
} | ||
export { Observable } from 'observable-fns'; | ||
exports.Subject = Subject; | ||
var observable_fns_2 = require("observable-fns"); | ||
Object.defineProperty(exports, "Observable", { enumerable: true, get: function () { return observable_fns_2.Observable; } }); |
@@ -1,2 +0,5 @@ | ||
export function allSettled(values) { | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.allSettled = allSettled; | ||
function allSettled(values) { | ||
return Promise.all(values.map((item) => { | ||
@@ -3,0 +6,0 @@ const onFulfill = (value) => { |
@@ -0,3 +1,6 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.createPromiseWithResolver = createPromiseWithResolver; | ||
const doNothing = () => undefined; | ||
export function createPromiseWithResolver() { | ||
function createPromiseWithResolver() { | ||
let alreadyResolved = false; | ||
@@ -4,0 +7,0 @@ let resolvedTo; |
@@ -1,2 +0,6 @@ | ||
export function extendSerializer(extend, implementation) { | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.DefaultSerializer = void 0; | ||
exports.extendSerializer = extendSerializer; | ||
function extendSerializer(extend, implementation) { | ||
const fallbackDeserializer = extend.deserialize.bind(extend); | ||
@@ -30,3 +34,3 @@ const fallbackSerializer = extend.serialize.bind(extend); | ||
const isSerializedError = (thing) => thing && typeof thing === 'object' && '__error_marker' in thing && thing.__error_marker === '$$error'; | ||
export const DefaultSerializer = { | ||
exports.DefaultSerializer = { | ||
deserialize(message) { | ||
@@ -33,0 +37,0 @@ return isSerializedError(message) ? DefaultErrorSerializer.deserialize(message) : message; |
@@ -1,5 +0,8 @@ | ||
export const $errors = Symbol('thread.errors'); | ||
export const $events = Symbol('thread.events'); | ||
export const $terminate = Symbol('thread.terminate'); | ||
export const $transferable = Symbol('thread.transferable'); | ||
export const $worker = Symbol('thread.worker'); | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.$worker = exports.$transferable = exports.$terminate = exports.$events = exports.$errors = void 0; | ||
exports.$errors = Symbol('thread.errors'); | ||
exports.$events = Symbol('thread.events'); | ||
exports.$terminate = Symbol('thread.terminate'); | ||
exports.$transferable = Symbol('thread.transferable'); | ||
exports.$worker = Symbol('thread.worker'); |
@@ -1,2 +0,6 @@ | ||
import { $transferable } from './symbols'; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isTransferDescriptor = isTransferDescriptor; | ||
exports.Transfer = Transfer; | ||
const symbols_1 = require("./symbols"); | ||
function isTransferable(thing) { | ||
@@ -7,6 +11,6 @@ if (!thing || typeof thing !== 'object') | ||
} | ||
export function isTransferDescriptor(thing) { | ||
return thing && typeof thing === 'object' && thing[$transferable]; | ||
function isTransferDescriptor(thing) { | ||
return thing && typeof thing === 'object' && thing[symbols_1.$transferable]; | ||
} | ||
export function Transfer(payload, transferables) { | ||
function Transfer(payload, transferables) { | ||
if (!transferables) { | ||
@@ -18,3 +22,3 @@ if (!isTransferable(payload)) | ||
return { | ||
[$transferable]: true, | ||
[symbols_1.$transferable]: true, | ||
send: payload, | ||
@@ -21,0 +25,0 @@ transferables, |
@@ -1,3 +0,6 @@ | ||
import { $errors, $events, $terminate, $worker } from '../symbols'; | ||
export var WorkerEventType; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.WorkerEventType = void 0; | ||
const symbols_1 = require("../symbols"); | ||
var WorkerEventType; | ||
(function (WorkerEventType) { | ||
@@ -7,2 +10,2 @@ WorkerEventType["internalError"] = "internalError"; | ||
WorkerEventType["termination"] = "termination"; | ||
})(WorkerEventType || (WorkerEventType = {})); | ||
})(WorkerEventType || (exports.WorkerEventType = WorkerEventType = {})); |
@@ -1,7 +0,10 @@ | ||
export var MasterMessageType; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.WorkerMessageType = exports.MasterMessageType = void 0; | ||
var MasterMessageType; | ||
(function (MasterMessageType) { | ||
MasterMessageType["cancel"] = "cancel"; | ||
MasterMessageType["run"] = "run"; | ||
})(MasterMessageType || (MasterMessageType = {})); | ||
export var WorkerMessageType; | ||
})(MasterMessageType || (exports.MasterMessageType = MasterMessageType = {})); | ||
var WorkerMessageType; | ||
(function (WorkerMessageType) { | ||
@@ -13,2 +16,2 @@ WorkerMessageType["error"] = "error"; | ||
WorkerMessageType["uncaughtError"] = "uncaughtError"; | ||
})(WorkerMessageType || (WorkerMessageType = {})); | ||
})(WorkerMessageType || (exports.WorkerMessageType = WorkerMessageType = {})); |
@@ -1,1 +0,2 @@ | ||
export {}; | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); |
@@ -0,1 +1,4 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.default = getImplementation; | ||
let implementation; | ||
@@ -5,3 +8,3 @@ function selectImplementation() { | ||
} | ||
export default function getImplementation() { | ||
function getImplementation() { | ||
if (!implementation) { | ||
@@ -8,0 +11,0 @@ implementation = selectImplementation(); |
@@ -1,10 +0,26 @@ | ||
import { expose } from './index'; | ||
export * from './index'; | ||
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
var desc = Object.getOwnPropertyDescriptor(m, k); | ||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | ||
desc = { enumerable: true, get: function() { return m[k]; } }; | ||
} | ||
Object.defineProperty(o, k2, desc); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __exportStar = (this && this.__exportStar) || function(m, exports) { | ||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const index_1 = require("./index"); | ||
__exportStar(require("./index"), exports); | ||
if (typeof global !== 'undefined') { | ||
; | ||
global.expose = expose; | ||
global.expose = index_1.expose; | ||
} | ||
if (typeof self !== 'undefined') { | ||
; | ||
self.expose = expose; | ||
self.expose = index_1.expose; | ||
} |
@@ -0,1 +1,3 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const isWorkerRuntime = function isWorkerRuntime() { | ||
@@ -18,3 +20,3 @@ const isWindowContext = self !== undefined && typeof Window !== 'undefined' && self instanceof Window; | ||
}; | ||
export default { | ||
exports.default = { | ||
isWorkerRuntime, | ||
@@ -21,0 +23,0 @@ postMessageToMaster, |
@@ -1,14 +0,19 @@ | ||
import WebWorkerImplementation from './implementation.browser'; | ||
import TinyWorkerImplementation from './implementation.tiny-worker'; | ||
import WorkerThreadsImplementation from './implementation.worker_threads'; | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const implementation_browser_1 = __importDefault(require("./implementation.browser")); | ||
const implementation_tiny_worker_1 = __importDefault(require("./implementation.tiny-worker")); | ||
const implementation_worker_threads_1 = __importDefault(require("./implementation.worker_threads")); | ||
const runningInNode = typeof process !== 'undefined' && process.arch !== 'browser' && 'pid' in process; | ||
function selectNodeImplementation() { | ||
try { | ||
WorkerThreadsImplementation.testImplementation(); | ||
return WorkerThreadsImplementation; | ||
implementation_worker_threads_1.default.testImplementation(); | ||
return implementation_worker_threads_1.default; | ||
} | ||
catch { | ||
return TinyWorkerImplementation; | ||
return implementation_tiny_worker_1.default; | ||
} | ||
} | ||
export default runningInNode ? selectNodeImplementation() : WebWorkerImplementation; | ||
exports.default = runningInNode ? selectNodeImplementation() : implementation_browser_1.default; |
@@ -0,1 +1,3 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
try { | ||
@@ -31,3 +33,3 @@ if (self === undefined) { | ||
}; | ||
export default { | ||
exports.default = { | ||
isWorkerRuntime, | ||
@@ -34,0 +36,0 @@ postMessageToMaster, |
@@ -1,2 +0,7 @@ | ||
import WorkerThreads from '../worker_threads'; | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const worker_threads_1 = __importDefault(require("../worker_threads")); | ||
function assertMessagePort(port) { | ||
@@ -9,9 +14,9 @@ if (!port) { | ||
const isWorkerRuntime = function isWorkerRuntime() { | ||
return !WorkerThreads().isMainThread; | ||
return !(0, worker_threads_1.default)().isMainThread; | ||
}; | ||
const postMessageToMaster = function postMessageToMaster(data, transferList) { | ||
assertMessagePort(WorkerThreads().parentPort).postMessage(data, transferList); | ||
assertMessagePort((0, worker_threads_1.default)().parentPort).postMessage(data, transferList); | ||
}; | ||
const subscribeToMasterMessages = function subscribeToMasterMessages(onMessage) { | ||
const parentPort = WorkerThreads().parentPort; | ||
const parentPort = (0, worker_threads_1.default)().parentPort; | ||
if (!parentPort) { | ||
@@ -30,5 +35,5 @@ throw new Error('Invariant violation: MessagePort to parent is not available.'); | ||
function testImplementation() { | ||
WorkerThreads(); | ||
(0, worker_threads_1.default)(); | ||
} | ||
export default { | ||
exports.default = { | ||
isWorkerRuntime, | ||
@@ -35,0 +40,0 @@ postMessageToMaster, |
@@ -1,14 +0,23 @@ | ||
import isSomeObservable from 'is-observable-2-1-0'; | ||
import { deserialize, serialize } from '../common'; | ||
import { isTransferDescriptor } from '../transferable'; | ||
import { MasterMessageType, WorkerMessageType, } from '../types/messages'; | ||
import Implementation from './implementation'; | ||
export { registerSerializer } from '../common'; | ||
export { Transfer } from '../transferable'; | ||
export const isWorkerRuntime = Implementation.isWorkerRuntime; | ||
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.isWorkerRuntime = exports.Transfer = exports.registerSerializer = void 0; | ||
exports.expose = expose; | ||
const is_observable_2_1_0_1 = __importDefault(require("is-observable-2-1-0")); | ||
const common_1 = require("../common"); | ||
const transferable_1 = require("../transferable"); | ||
const messages_1 = require("../types/messages"); | ||
const implementation_1 = __importDefault(require("./implementation")); | ||
var common_2 = require("../common"); | ||
Object.defineProperty(exports, "registerSerializer", { enumerable: true, get: function () { return common_2.registerSerializer; } }); | ||
var transferable_2 = require("../transferable"); | ||
Object.defineProperty(exports, "Transfer", { enumerable: true, get: function () { return transferable_2.Transfer; } }); | ||
exports.isWorkerRuntime = implementation_1.default.isWorkerRuntime; | ||
let exposeCalled = false; | ||
const activeSubscriptions = new Map(); | ||
const isMasterJobCancelMessage = (thing) => thing && thing.type === MasterMessageType.cancel; | ||
const isMasterJobRunMessage = (thing) => thing && thing.type === MasterMessageType.run; | ||
const isObservable = (thing) => isSomeObservable(thing) || isZenObservable(thing); | ||
const isMasterJobCancelMessage = (thing) => thing && thing.type === messages_1.MasterMessageType.cancel; | ||
const isMasterJobRunMessage = (thing) => thing && thing.type === messages_1.MasterMessageType.run; | ||
const isObservable = (thing) => (0, is_observable_2_1_0_1.default)(thing) || isZenObservable(thing); | ||
function isZenObservable(thing) { | ||
@@ -18,3 +27,3 @@ return thing && typeof thing === 'object' && typeof thing.subscribe === 'function'; | ||
function deconstructTransfer(thing) { | ||
return isTransferDescriptor(thing) ? { payload: thing.send, transferables: thing.transferables } : { payload: thing, transferables: undefined }; | ||
return (0, transferable_1.isTransferDescriptor)(thing) ? { payload: thing.send, transferables: thing.transferables } : { payload: thing, transferables: undefined }; | ||
} | ||
@@ -26,5 +35,5 @@ function postFunctionInitMessage() { | ||
}, | ||
type: WorkerMessageType.init, | ||
type: messages_1.WorkerMessageType.init, | ||
}; | ||
Implementation.postMessageToMaster(initMessage); | ||
implementation_1.default.postMessageToMaster(initMessage); | ||
} | ||
@@ -37,5 +46,5 @@ function postModuleInitMessage(methodNames) { | ||
}, | ||
type: WorkerMessageType.init, | ||
type: messages_1.WorkerMessageType.init, | ||
}; | ||
Implementation.postMessageToMaster(initMessage); | ||
implementation_1.default.postMessageToMaster(initMessage); | ||
} | ||
@@ -45,7 +54,7 @@ function postJobErrorMessage(uid, rawError) { | ||
const errorMessage = { | ||
error: serialize(error), | ||
type: WorkerMessageType.error, | ||
error: (0, common_1.serialize)(error), | ||
type: messages_1.WorkerMessageType.error, | ||
uid, | ||
}; | ||
Implementation.postMessageToMaster(errorMessage, transferables); | ||
implementation_1.default.postMessageToMaster(errorMessage, transferables); | ||
} | ||
@@ -57,6 +66,6 @@ function postJobResultMessage(uid, completed, resultValue) { | ||
payload, | ||
type: WorkerMessageType.result, | ||
type: messages_1.WorkerMessageType.result, | ||
uid, | ||
}; | ||
Implementation.postMessageToMaster(resultMessage, transferables); | ||
implementation_1.default.postMessageToMaster(resultMessage, transferables); | ||
} | ||
@@ -66,6 +75,6 @@ function postJobStartMessage(uid, resultType) { | ||
resultType, | ||
type: WorkerMessageType.running, | ||
type: messages_1.WorkerMessageType.running, | ||
uid, | ||
}; | ||
Implementation.postMessageToMaster(startMessage); | ||
implementation_1.default.postMessageToMaster(startMessage); | ||
} | ||
@@ -75,6 +84,6 @@ function postUncaughtErrorMessage(error) { | ||
const errorMessage = { | ||
error: serialize(error), | ||
type: WorkerMessageType.uncaughtError, | ||
error: (0, common_1.serialize)(error), | ||
type: messages_1.WorkerMessageType.uncaughtError, | ||
}; | ||
Implementation.postMessageToMaster(errorMessage); | ||
implementation_1.default.postMessageToMaster(errorMessage); | ||
} | ||
@@ -96,4 +105,4 @@ catch (subError) { | ||
if (isObservable(syncResult)) { | ||
const subscription = syncResult.subscribe((value) => postJobResultMessage(jobUID, false, serialize(value)), (error) => { | ||
postJobErrorMessage(jobUID, serialize(error)); | ||
const subscription = syncResult.subscribe((value) => postJobResultMessage(jobUID, false, (0, common_1.serialize)(value)), (error) => { | ||
postJobErrorMessage(jobUID, (0, common_1.serialize)(error)); | ||
activeSubscriptions.delete(jobUID); | ||
@@ -109,11 +118,11 @@ }, () => { | ||
const result = await syncResult; | ||
postJobResultMessage(jobUID, true, serialize(result)); | ||
postJobResultMessage(jobUID, true, (0, common_1.serialize)(result)); | ||
} | ||
catch (error) { | ||
postJobErrorMessage(jobUID, serialize(error)); | ||
postJobErrorMessage(jobUID, (0, common_1.serialize)(error)); | ||
} | ||
} | ||
} | ||
export function expose(exposed) { | ||
if (!Implementation.isWorkerRuntime()) { | ||
function expose(exposed) { | ||
if (!implementation_1.default.isWorkerRuntime()) { | ||
throw new Error('expose() called in the master thread.'); | ||
@@ -126,5 +135,5 @@ } | ||
if (typeof exposed === 'function') { | ||
Implementation.subscribeToMasterMessages((messageData) => { | ||
implementation_1.default.subscribeToMasterMessages((messageData) => { | ||
if (isMasterJobRunMessage(messageData) && !messageData.method) { | ||
runFunction(messageData.uid, exposed, messageData.args.map(deserialize)); | ||
runFunction(messageData.uid, exposed, messageData.args.map(common_1.deserialize)); | ||
} | ||
@@ -135,5 +144,5 @@ }); | ||
else if (typeof exposed === 'object' && exposed) { | ||
Implementation.subscribeToMasterMessages((messageData) => { | ||
implementation_1.default.subscribeToMasterMessages((messageData) => { | ||
if (isMasterJobRunMessage(messageData) && messageData.method) { | ||
runFunction(messageData.uid, exposed[messageData.method], messageData.args.map(deserialize)); | ||
runFunction(messageData.uid, exposed[messageData.method], messageData.args.map(common_1.deserialize)); | ||
} | ||
@@ -147,3 +156,3 @@ }); | ||
} | ||
Implementation.subscribeToMasterMessages((messageData) => { | ||
implementation_1.default.subscribeToMasterMessages((messageData) => { | ||
if (isMasterJobCancelMessage(messageData)) { | ||
@@ -159,3 +168,3 @@ const jobUID = messageData.uid; | ||
} | ||
if (typeof self !== 'undefined' && typeof self.addEventListener === 'function' && Implementation.isWorkerRuntime()) { | ||
if (typeof self !== 'undefined' && typeof self.addEventListener === 'function' && implementation_1.default.isWorkerRuntime()) { | ||
self.addEventListener('error', (event) => { | ||
@@ -171,3 +180,3 @@ setTimeout(() => postUncaughtErrorMessage(event.error || event), 250); | ||
} | ||
if (typeof process !== 'undefined' && typeof process.on === 'function' && Implementation.isWorkerRuntime()) { | ||
if (typeof process !== 'undefined' && typeof process.on === 'function' && implementation_1.default.isWorkerRuntime()) { | ||
process.on('uncaughtException', (error) => { | ||
@@ -174,0 +183,0 @@ setTimeout(() => postUncaughtErrorMessage(error), 250); |
{ | ||
"name": "@xylabs/threads", | ||
"version": "3.5.5", | ||
"version": "3.5.6", | ||
"description": "Web workers & worker threads as simple as a function call", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
272523
6629