Socket
Socket
Sign inDemoInstall

@xylabs/threads

Package Overview
Dependencies
Maintainers
5
Versions
77
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@xylabs/threads - npm Package Compare versions

Comparing version 3.5.5 to 3.5.6

17

dist/esm/common.js

@@ -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",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc