@xylabs/threads
Advanced tools
Comparing version 3.6.7 to 3.6.8
@@ -32,5 +32,5 @@ "use strict"; | ||
} | ||
if (typeof url === 'string' && | ||
isAbsoluteURL(url) && | ||
(options?.CORSWorkaround ?? true)) { | ||
if (typeof url === 'string' | ||
&& isAbsoluteURL(url) | ||
&& (options?.CORSWorkaround ?? true)) { | ||
url = createSourceBlobURL(`importScripts(${JSON.stringify(url)});`); | ||
@@ -37,0 +37,0 @@ } |
@@ -59,4 +59,4 @@ "use strict"; | ||
}; | ||
return typeof __non_webpack_require__ === 'function' ? | ||
__non_webpack_require__.resolve(makeRelative(scriptPath)) | ||
return typeof __non_webpack_require__ === 'function' | ||
? __non_webpack_require__.resolve(makeRelative(scriptPath)) | ||
: eval('require').resolve(makeRelative(rebaseScriptPath(scriptPath, /[/\\]worker_threads[/\\]/))); | ||
@@ -100,3 +100,3 @@ } | ||
const terminateWorkersAndMaster = () => { | ||
Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1)); | ||
Promise.all(allWorkers.map(worker => worker.terminate())).then(() => process.exit(0), () => process.exit(1)); | ||
allWorkers = []; | ||
@@ -125,4 +125,6 @@ }; | ||
constructor(scriptPath, options) { | ||
const resolvedScriptPath = options && options.fromSource ? null | ||
: process.platform === 'win32' ? `file:///${resolveScriptPath(scriptPath).replaceAll('\\', '/')}` | ||
const resolvedScriptPath = options && options.fromSource | ||
? null | ||
: process.platform === 'win32' | ||
? `file:///${resolveScriptPath(scriptPath).replaceAll('\\', '/')}` | ||
: resolveScriptPath(scriptPath); | ||
@@ -154,3 +156,3 @@ if (!resolvedScriptPath) { | ||
terminate() { | ||
allWorkers = allWorkers.filter((worker) => worker !== this); | ||
allWorkers = allWorkers.filter(worker => worker !== this); | ||
return super.terminate(); | ||
@@ -160,3 +162,3 @@ } | ||
const terminateWorkersAndMaster = () => { | ||
Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1)); | ||
Promise.all(allWorkers.map(worker => worker.terminate())).then(() => process.exit(0), () => process.exit(1)); | ||
allWorkers = []; | ||
@@ -203,4 +205,4 @@ }; | ||
else { | ||
const isMainThread = typeof __non_webpack_require__ === 'function' ? | ||
__non_webpack_require__('worker_threads').isMainThread | ||
const isMainThread = typeof __non_webpack_require__ === 'function' | ||
? __non_webpack_require__('worker_threads').isMainThread | ||
: eval('require')('worker_threads').isMainThread; | ||
@@ -207,0 +209,0 @@ return !isMainThread; |
@@ -22,3 +22,3 @@ "use strict"; | ||
function delay(ms) { | ||
return new Promise((resolve) => setTimeout(resolve, ms)); | ||
return new Promise(resolve => setTimeout(resolve, ms)); | ||
} | ||
@@ -55,3 +55,3 @@ function flatMap(array, mapper) { | ||
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({ | ||
Promise.all(this.workers.map(worker => worker.init)).then(() => this.eventSubject.next({ | ||
size: this.workers.length, | ||
@@ -67,3 +67,3 @@ type: pool_types_1.PoolEventType.initialized, | ||
const { concurrency = 1 } = this.options; | ||
return this.workers.find((worker) => worker.runningTasks.length < concurrency); | ||
return this.workers.find(worker => worker.runningTasks.length < concurrency); | ||
} | ||
@@ -101,3 +101,3 @@ async runPoolTask(worker, task) { | ||
const removeTaskFromWorkersRunningTasks = () => { | ||
worker.runningTasks = worker.runningTasks.filter((someRunPromise) => someRunPromise !== runPromise); | ||
worker.runningTasks = worker.runningTasks.filter(someRunPromise => someRunPromise !== runPromise); | ||
}; | ||
@@ -149,3 +149,3 @@ await delay(0); | ||
async settled(allowResolvingImmediately = false) { | ||
const getCurrentlyRunningTasks = () => flatMap(this.workers, (worker) => worker.runningTasks); | ||
const getCurrentlyRunningTasks = () => flatMap(this.workers, worker => worker.runningTasks); | ||
const taskFailures = []; | ||
@@ -221,3 +221,3 @@ const failureSubscription = this.eventObservable.subscribe((event) => { | ||
return; | ||
this.taskQueue = this.taskQueue.filter((someTask) => someTask !== task); | ||
this.taskQueue = this.taskQueue.filter(someTask => someTask !== task); | ||
this.eventSubject.next({ | ||
@@ -233,5 +233,5 @@ taskID: task.id, | ||
if (this.taskQueue.length >= maxQueuedJobs) { | ||
throw new Error('Maximum number of pool tasks queued. Refusing to queue another one.\n' + | ||
'This usually happens for one of two reasons: We are either at peak ' + | ||
"workload right now or some tasks just won't finish, thus blocking the pool."); | ||
throw new Error('Maximum number of pool tasks queued. Refusing to queue another one.\n' | ||
+ 'This usually happens for one of two reasons: We are either at peak ' | ||
+ "workload right now or some tasks just won't finish, thus blocking the pool."); | ||
} | ||
@@ -238,0 +238,0 @@ this.debug(`Queueing task #${task.id}...`); |
@@ -19,4 +19,4 @@ "use strict"; | ||
const isUncaughtErrorMessage = (data) => data && data.type === 'uncaughtError'; | ||
const initMessageTimeout = typeof process !== 'undefined' && process.env !== undefined && process.env.THREADS_WORKER_INIT_TIMEOUT ? | ||
Number.parseInt(process.env.THREADS_WORKER_INIT_TIMEOUT, 10) | ||
const initMessageTimeout = typeof process !== 'undefined' && process.env !== undefined && process.env.THREADS_WORKER_INIT_TIMEOUT | ||
? Number.parseInt(process.env.THREADS_WORKER_INIT_TIMEOUT, 10) | ||
: 10_000; | ||
@@ -89,4 +89,4 @@ async function withTimeout(promise, timeoutInMs, errorMessage) { | ||
const workerErrors = workerEvents | ||
.filter((event) => event.type === master_1.WorkerEventType.internalError) | ||
.map((errorEvent) => errorEvent.error); | ||
.filter(event => event.type === master_1.WorkerEventType.internalError) | ||
.map(errorEvent => errorEvent.error); | ||
return Object.assign(raw, { | ||
@@ -93,0 +93,0 @@ [symbols_1.$errors]: workerErrors, |
@@ -118,4 +118,4 @@ "use strict"; | ||
static from(thing) { | ||
return isThenable(thing) ? | ||
new ObservablePromise((observer) => { | ||
return isThenable(thing) | ||
? new ObservablePromise((observer) => { | ||
const onFulfilled = (value) => { | ||
@@ -122,0 +122,0 @@ observer.next(value); |
@@ -12,3 +12,3 @@ "use strict"; | ||
const unsubscribe = () => { | ||
this[$observers] = this[$observers].filter((someObserver) => someObserver !== observer); | ||
this[$observers] = this[$observers].filter(someObserver => someObserver !== observer); | ||
}; | ||
@@ -15,0 +15,0 @@ return unsubscribe; |
@@ -98,3 +98,3 @@ "use strict"; | ||
if (isObservable(syncResult)) { | ||
const subscription = syncResult.subscribe((value) => postJobResultMessage(jobUID, false, (0, common_1.serialize)(value)), (error) => { | ||
const subscription = syncResult.subscribe(value => postJobResultMessage(jobUID, false, (0, common_1.serialize)(value)), (error) => { | ||
postJobErrorMessage(jobUID, (0, common_1.serialize)(error)); | ||
@@ -140,3 +140,3 @@ activeSubscriptions.delete(jobUID); | ||
}); | ||
const methodNames = Object.keys(exposed).filter((key) => typeof exposed[key] === 'function'); | ||
const methodNames = Object.keys(exposed).filter(key => typeof exposed[key] === 'function'); | ||
postModuleInitMessage(methodNames); | ||
@@ -143,0 +143,0 @@ } |
@@ -32,5 +32,5 @@ "use strict"; | ||
} | ||
if (typeof url === 'string' && | ||
isAbsoluteURL(url) && | ||
(options?.CORSWorkaround ?? true)) { | ||
if (typeof url === 'string' | ||
&& isAbsoluteURL(url) | ||
&& (options?.CORSWorkaround ?? true)) { | ||
url = createSourceBlobURL(`importScripts(${JSON.stringify(url)});`); | ||
@@ -37,0 +37,0 @@ } |
@@ -59,4 +59,4 @@ "use strict"; | ||
}; | ||
return typeof __non_webpack_require__ === 'function' ? | ||
__non_webpack_require__.resolve(makeRelative(scriptPath)) | ||
return typeof __non_webpack_require__ === 'function' | ||
? __non_webpack_require__.resolve(makeRelative(scriptPath)) | ||
: eval('require').resolve(makeRelative(rebaseScriptPath(scriptPath, /[/\\]worker_threads[/\\]/))); | ||
@@ -100,3 +100,3 @@ } | ||
const terminateWorkersAndMaster = () => { | ||
Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1)); | ||
Promise.all(allWorkers.map(worker => worker.terminate())).then(() => process.exit(0), () => process.exit(1)); | ||
allWorkers = []; | ||
@@ -125,4 +125,6 @@ }; | ||
constructor(scriptPath, options) { | ||
const resolvedScriptPath = options && options.fromSource ? null | ||
: process.platform === 'win32' ? `file:///${resolveScriptPath(scriptPath).replaceAll('\\', '/')}` | ||
const resolvedScriptPath = options && options.fromSource | ||
? null | ||
: process.platform === 'win32' | ||
? `file:///${resolveScriptPath(scriptPath).replaceAll('\\', '/')}` | ||
: resolveScriptPath(scriptPath); | ||
@@ -154,3 +156,3 @@ if (!resolvedScriptPath) { | ||
terminate() { | ||
allWorkers = allWorkers.filter((worker) => worker !== this); | ||
allWorkers = allWorkers.filter(worker => worker !== this); | ||
return super.terminate(); | ||
@@ -160,3 +162,3 @@ } | ||
const terminateWorkersAndMaster = () => { | ||
Promise.all(allWorkers.map((worker) => worker.terminate())).then(() => process.exit(0), () => process.exit(1)); | ||
Promise.all(allWorkers.map(worker => worker.terminate())).then(() => process.exit(0), () => process.exit(1)); | ||
allWorkers = []; | ||
@@ -203,4 +205,4 @@ }; | ||
else { | ||
const isMainThread = typeof __non_webpack_require__ === 'function' ? | ||
__non_webpack_require__('worker_threads').isMainThread | ||
const isMainThread = typeof __non_webpack_require__ === 'function' | ||
? __non_webpack_require__('worker_threads').isMainThread | ||
: eval('require')('worker_threads').isMainThread; | ||
@@ -207,0 +209,0 @@ return !isMainThread; |
@@ -22,3 +22,3 @@ "use strict"; | ||
function delay(ms) { | ||
return new Promise((resolve) => setTimeout(resolve, ms)); | ||
return new Promise(resolve => setTimeout(resolve, ms)); | ||
} | ||
@@ -55,3 +55,3 @@ function flatMap(array, mapper) { | ||
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({ | ||
Promise.all(this.workers.map(worker => worker.init)).then(() => this.eventSubject.next({ | ||
size: this.workers.length, | ||
@@ -67,3 +67,3 @@ type: pool_types_1.PoolEventType.initialized, | ||
const { concurrency = 1 } = this.options; | ||
return this.workers.find((worker) => worker.runningTasks.length < concurrency); | ||
return this.workers.find(worker => worker.runningTasks.length < concurrency); | ||
} | ||
@@ -101,3 +101,3 @@ async runPoolTask(worker, task) { | ||
const removeTaskFromWorkersRunningTasks = () => { | ||
worker.runningTasks = worker.runningTasks.filter((someRunPromise) => someRunPromise !== runPromise); | ||
worker.runningTasks = worker.runningTasks.filter(someRunPromise => someRunPromise !== runPromise); | ||
}; | ||
@@ -149,3 +149,3 @@ await delay(0); | ||
async settled(allowResolvingImmediately = false) { | ||
const getCurrentlyRunningTasks = () => flatMap(this.workers, (worker) => worker.runningTasks); | ||
const getCurrentlyRunningTasks = () => flatMap(this.workers, worker => worker.runningTasks); | ||
const taskFailures = []; | ||
@@ -221,3 +221,3 @@ const failureSubscription = this.eventObservable.subscribe((event) => { | ||
return; | ||
this.taskQueue = this.taskQueue.filter((someTask) => someTask !== task); | ||
this.taskQueue = this.taskQueue.filter(someTask => someTask !== task); | ||
this.eventSubject.next({ | ||
@@ -233,5 +233,5 @@ taskID: task.id, | ||
if (this.taskQueue.length >= maxQueuedJobs) { | ||
throw new Error('Maximum number of pool tasks queued. Refusing to queue another one.\n' + | ||
'This usually happens for one of two reasons: We are either at peak ' + | ||
"workload right now or some tasks just won't finish, thus blocking the pool."); | ||
throw new Error('Maximum number of pool tasks queued. Refusing to queue another one.\n' | ||
+ 'This usually happens for one of two reasons: We are either at peak ' | ||
+ "workload right now or some tasks just won't finish, thus blocking the pool."); | ||
} | ||
@@ -238,0 +238,0 @@ this.debug(`Queueing task #${task.id}...`); |
@@ -19,4 +19,4 @@ "use strict"; | ||
const isUncaughtErrorMessage = (data) => data && data.type === 'uncaughtError'; | ||
const initMessageTimeout = typeof process !== 'undefined' && process.env !== undefined && process.env.THREADS_WORKER_INIT_TIMEOUT ? | ||
Number.parseInt(process.env.THREADS_WORKER_INIT_TIMEOUT, 10) | ||
const initMessageTimeout = typeof process !== 'undefined' && process.env !== undefined && process.env.THREADS_WORKER_INIT_TIMEOUT | ||
? Number.parseInt(process.env.THREADS_WORKER_INIT_TIMEOUT, 10) | ||
: 10_000; | ||
@@ -89,4 +89,4 @@ async function withTimeout(promise, timeoutInMs, errorMessage) { | ||
const workerErrors = workerEvents | ||
.filter((event) => event.type === master_1.WorkerEventType.internalError) | ||
.map((errorEvent) => errorEvent.error); | ||
.filter(event => event.type === master_1.WorkerEventType.internalError) | ||
.map(errorEvent => errorEvent.error); | ||
return Object.assign(raw, { | ||
@@ -93,0 +93,0 @@ [symbols_1.$errors]: workerErrors, |
@@ -118,4 +118,4 @@ "use strict"; | ||
static from(thing) { | ||
return isThenable(thing) ? | ||
new ObservablePromise((observer) => { | ||
return isThenable(thing) | ||
? new ObservablePromise((observer) => { | ||
const onFulfilled = (value) => { | ||
@@ -122,0 +122,0 @@ observer.next(value); |
@@ -12,3 +12,3 @@ "use strict"; | ||
const unsubscribe = () => { | ||
this[$observers] = this[$observers].filter((someObserver) => someObserver !== observer); | ||
this[$observers] = this[$observers].filter(someObserver => someObserver !== observer); | ||
}; | ||
@@ -15,0 +15,0 @@ return unsubscribe; |
@@ -98,3 +98,3 @@ "use strict"; | ||
if (isObservable(syncResult)) { | ||
const subscription = syncResult.subscribe((value) => postJobResultMessage(jobUID, false, (0, common_1.serialize)(value)), (error) => { | ||
const subscription = syncResult.subscribe(value => postJobResultMessage(jobUID, false, (0, common_1.serialize)(value)), (error) => { | ||
postJobErrorMessage(jobUID, (0, common_1.serialize)(error)); | ||
@@ -140,3 +140,3 @@ activeSubscriptions.delete(jobUID); | ||
}); | ||
const methodNames = Object.keys(exposed).filter((key) => typeof exposed[key] === 'function'); | ||
const methodNames = Object.keys(exposed).filter(key => typeof exposed[key] === 'function'); | ||
postModuleInitMessage(methodNames); | ||
@@ -143,0 +143,0 @@ } |
{ | ||
"name": "@xylabs/threads", | ||
"version": "3.6.7", | ||
"version": "3.6.8", | ||
"description": "Web workers & worker threads as simple as a function call", | ||
@@ -10,3 +10,3 @@ "license": "MIT", | ||
"package-compile": "yarn build", | ||
"clean": "rimraf dist/ dist-esm/", | ||
"clean": "rimraf ./dist ./dist-esm", | ||
"dev": "npm run clean && tsc -p tsconfig.json --watch", | ||
@@ -109,3 +109,3 @@ "build": "npm run clean && npm run build:cjs && npm run build:es", | ||
"raw-loader": "^4.0.2", | ||
"rimraf": "^4.4.1", | ||
"rimraf": "^5.0.10", | ||
"rollup": "^4.19.2", | ||
@@ -112,0 +112,0 @@ "threads-plugin": "^1.4.0", |
@@ -40,6 +40,6 @@ /* eslint-disable import/no-internal-modules */ | ||
if ( | ||
typeof url === 'string' && | ||
isAbsoluteURL(url) && // Create source code blob loading JS file via `importScripts()` | ||
typeof url === 'string' | ||
&& isAbsoluteURL(url) // Create source code blob loading JS file via `importScripts()` | ||
// to circumvent worker CORS restrictions | ||
(options?.CORSWorkaround ?? true) | ||
&& (options?.CORSWorkaround ?? true) | ||
) { | ||
@@ -46,0 +46,0 @@ url = createSourceBlobURL(`importScripts(${JSON.stringify(url)});`) |
@@ -0,7 +1,7 @@ | ||
/* eslint-disable @typescript-eslint/no-require-imports */ | ||
/* eslint-disable import/no-internal-modules */ | ||
/* eslint-disable unicorn/no-process-exit */ | ||
/* eslint-disable sonarjs/no-identical-functions */ | ||
/* eslint-disable unicorn/prefer-logical-operator-over-ternary */ | ||
/* eslint-disable unicorn/prefer-regexp-test */ | ||
/* eslint-disable @typescript-eslint/no-var-requires */ | ||
/* eslint-disable unicorn/prefer-add-event-listener */ | ||
@@ -89,4 +89,4 @@ /* eslint-disable unicorn/prefer-event-target */ | ||
return typeof __non_webpack_require__ === 'function' ? | ||
__non_webpack_require__.resolve(makeRelative(scriptPath)) | ||
return typeof __non_webpack_require__ === 'function' | ||
? __non_webpack_require__.resolve(makeRelative(scriptPath)) | ||
: eval('require').resolve(makeRelative(rebaseScriptPath(scriptPath, /[/\\]worker_threads[/\\]/))) | ||
@@ -97,4 +97,4 @@ } | ||
// Webpack hack | ||
const NativeWorker = | ||
typeof __non_webpack_require__ === 'function' ? __non_webpack_require__('worker_threads').Worker : eval('require')('worker_threads').Worker | ||
const NativeWorker | ||
= typeof __non_webpack_require__ === 'function' ? __non_webpack_require__('worker_threads').Worker : eval('require')('worker_threads').Worker | ||
@@ -142,3 +142,3 @@ let allWorkers: Array<typeof NativeWorker> = [] | ||
// we should terminate all workers and then gracefully shutdown self process | ||
Promise.all(allWorkers.map((worker) => worker.terminate())).then( | ||
Promise.all(allWorkers.map(worker => worker.terminate())).then( | ||
() => process.exit(0), | ||
@@ -181,6 +181,8 @@ () => process.exit(1), | ||
// (`Error [ERR_INVALID_PROTOCOL]: Protocol 'c:' not supported`) | ||
const resolvedScriptPath = | ||
options && options.fromSource ? null | ||
: process.platform === 'win32' ? `file:///${resolveScriptPath(scriptPath).replaceAll('\\', '/')}` | ||
: resolveScriptPath(scriptPath) | ||
const resolvedScriptPath | ||
= options && options.fromSource | ||
? null | ||
: process.platform === 'win32' | ||
? `file:///${resolveScriptPath(scriptPath).replaceAll('\\', '/')}` | ||
: resolveScriptPath(scriptPath) | ||
@@ -216,3 +218,3 @@ if (!resolvedScriptPath) { | ||
terminate() { | ||
allWorkers = allWorkers.filter((worker) => worker !== this) | ||
allWorkers = allWorkers.filter(worker => worker !== this) | ||
return super.terminate() | ||
@@ -224,3 +226,3 @@ } | ||
// we should terminate all workers and then gracefully shutdown self process | ||
Promise.all(allWorkers.map((worker) => worker.terminate())).then( | ||
Promise.all(allWorkers.map(worker => worker.terminate())).then( | ||
() => process.exit(0), | ||
@@ -280,8 +282,8 @@ () => process.exit(1), | ||
// Webpack hack | ||
const isMainThread = | ||
typeof __non_webpack_require__ === 'function' ? | ||
__non_webpack_require__('worker_threads').isMainThread | ||
: eval('require')('worker_threads').isMainThread | ||
const isMainThread | ||
= typeof __non_webpack_require__ === 'function' | ||
? __non_webpack_require__('worker_threads').isMainThread | ||
: eval('require')('worker_threads').isMainThread | ||
return !isMainThread | ||
} | ||
} |
/* eslint-disable import/no-internal-modules */ | ||
/* eslint-disable sonarjs/no-all-duplicated-branches */ | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
@@ -4,0 +3,0 @@ /* |
@@ -22,37 +22,37 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ | ||
| { | ||
type: PoolEventType.initialized | ||
size: number | ||
} | ||
type: PoolEventType.initialized | ||
size: number | ||
} | ||
| { | ||
type: PoolEventType.taskQueued | ||
taskID: number | ||
} | ||
type: PoolEventType.taskQueued | ||
taskID: number | ||
} | ||
| { | ||
type: PoolEventType.taskQueueDrained | ||
} | ||
type: PoolEventType.taskQueueDrained | ||
} | ||
| { | ||
type: PoolEventType.taskStart | ||
taskID: number | ||
workerID: number | ||
} | ||
type: PoolEventType.taskStart | ||
taskID: number | ||
workerID: number | ||
} | ||
| { | ||
type: PoolEventType.taskCompleted | ||
returnValue: any | ||
taskID: number | ||
workerID: number | ||
} | ||
type: PoolEventType.taskCompleted | ||
returnValue: any | ||
taskID: number | ||
workerID: number | ||
} | ||
| { | ||
type: PoolEventType.taskFailed | ||
error: Error | ||
taskID: number | ||
workerID: number | ||
} | ||
type: PoolEventType.taskFailed | ||
error: Error | ||
taskID: number | ||
workerID: number | ||
} | ||
| { | ||
type: PoolEventType.taskCanceled | ||
taskID: number | ||
} | ||
type: PoolEventType.taskCanceled | ||
taskID: number | ||
} | ||
| { | ||
type: PoolEventType.terminated | ||
remainingQueue: Array<QueuedTask<ThreadType, any>> | ||
} | ||
type: PoolEventType.terminated | ||
remainingQueue: Array<QueuedTask<ThreadType, any>> | ||
} | ||
@@ -59,0 +59,0 @@ export interface WorkerDescriptor<ThreadType extends Thread> { |
@@ -34,3 +34,3 @@ /* eslint-disable import/export */ | ||
function delay(ms: number) { | ||
return new Promise((resolve) => setTimeout(resolve, ms)) | ||
return new Promise(resolve => setTimeout(resolve, ms)) | ||
} | ||
@@ -137,3 +137,3 @@ | ||
Promise.all(this.workers.map((worker) => worker.init)).then( | ||
Promise.all(this.workers.map(worker => worker.init)).then( | ||
() => | ||
@@ -154,3 +154,3 @@ this.eventSubject.next({ | ||
const { concurrency = 1 } = this.options | ||
return this.workers.find((worker) => worker.runningTasks.length < concurrency) | ||
return this.workers.find(worker => worker.runningTasks.length < concurrency) | ||
} | ||
@@ -192,3 +192,3 @@ | ||
const removeTaskFromWorkersRunningTasks = () => { | ||
worker.runningTasks = worker.runningTasks.filter((someRunPromise) => someRunPromise !== runPromise) | ||
worker.runningTasks = worker.runningTasks.filter(someRunPromise => someRunPromise !== runPromise) | ||
} | ||
@@ -247,3 +247,3 @@ | ||
async settled(allowResolvingImmediately: boolean = false): Promise<Error[]> { | ||
const getCurrentlyRunningTasks = () => flatMap(this.workers, (worker) => worker.runningTasks) | ||
const getCurrentlyRunningTasks = () => flatMap(this.workers, worker => worker.runningTasks) | ||
@@ -335,3 +335,3 @@ const taskFailures: Error[] = [] | ||
if (!this.taskQueue.includes(task)) return | ||
this.taskQueue = this.taskQueue.filter((someTask) => someTask !== task) | ||
this.taskQueue = this.taskQueue.filter(someTask => someTask !== task) | ||
this.eventSubject.next({ | ||
@@ -349,5 +349,5 @@ taskID: task.id, | ||
throw new Error( | ||
'Maximum number of pool tasks queued. Refusing to queue another one.\n' + | ||
'This usually happens for one of two reasons: We are either at peak ' + | ||
"workload right now or some tasks just won't finish, thus blocking the pool.", | ||
'Maximum number of pool tasks queued. Refusing to queue another one.\n' | ||
+ 'This usually happens for one of two reasons: We are either at peak ' | ||
+ "workload right now or some tasks just won't finish, thus blocking the pool.", | ||
) | ||
@@ -378,3 +378,3 @@ } | ||
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.terminate(await worker.init))) | ||
} | ||
@@ -381,0 +381,0 @@ } |
@@ -31,5 +31,5 @@ /* eslint-disable import/no-internal-modules */ | ||
Exposed extends ArbitraryWorkerInterface ? ArbitraryThreadType | ||
: Exposed extends WorkerFunction ? FunctionThread<Parameters<Exposed>, StripAsync<ReturnType<Exposed>>> | ||
: Exposed extends WorkerModule<any> ? ModuleThread<Exposed> | ||
: never | ||
: Exposed extends WorkerFunction ? FunctionThread<Parameters<Exposed>, StripAsync<ReturnType<Exposed>>> | ||
: Exposed extends WorkerModule<any> ? ModuleThread<Exposed> | ||
: never | ||
@@ -43,6 +43,6 @@ const debugMessages = DebugLogger('threads:master:messages') | ||
const initMessageTimeout = | ||
typeof process !== 'undefined' && process.env !== undefined && process.env.THREADS_WORKER_INIT_TIMEOUT ? | ||
Number.parseInt(process.env.THREADS_WORKER_INIT_TIMEOUT, 10) | ||
: 10_000 | ||
const initMessageTimeout | ||
= typeof process !== 'undefined' && process.env !== undefined && process.env.THREADS_WORKER_INIT_TIMEOUT | ||
? Number.parseInt(process.env.THREADS_WORKER_INIT_TIMEOUT, 10) | ||
: 10_000 | ||
@@ -127,4 +127,4 @@ async function withTimeout<T>(promise: Promise<T>, timeoutInMs: number, errorMessage: string): Promise<T> { | ||
const workerErrors = workerEvents | ||
.filter((event) => event.type === WorkerEventType.internalError) | ||
.map((errorEvent) => (errorEvent as WorkerInternalErrorEvent).error) | ||
.filter(event => event.type === WorkerEventType.internalError) | ||
.map(errorEvent => (errorEvent as WorkerInternalErrorEvent).error) | ||
@@ -131,0 +131,0 @@ return Object.assign(raw as any, { |
@@ -169,15 +169,15 @@ /* eslint-disable unicorn/no-thenable */ | ||
static from<T>(thing: Observable<T> | ObservableLike<T> | ArrayLike<T> | Thenable<T>): ObservablePromise<T> { | ||
return isThenable(thing) ? | ||
new ObservablePromise((observer) => { | ||
const onFulfilled = (value: T) => { | ||
observer.next(value) | ||
observer.complete() | ||
} | ||
const onRejected = (error: any) => { | ||
observer.error(error) | ||
} | ||
thing.then(onFulfilled, onRejected) | ||
}) | ||
return isThenable(thing) | ||
? new ObservablePromise((observer) => { | ||
const onFulfilled = (value: T) => { | ||
observer.next(value) | ||
observer.complete() | ||
} | ||
const onRejected = (error: any) => { | ||
observer.error(error) | ||
} | ||
thing.then(onFulfilled, onRejected) | ||
}) | ||
: (super.from(thing) as ObservablePromise<T>) | ||
} | ||
} |
@@ -1,2 +0,1 @@ | ||
/* eslint-disable sonarjs/prefer-immediate-return */ | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
@@ -23,3 +22,3 @@ import { Observable, ObservableLike, SubscriptionObserver } from 'observable-fns' | ||
const unsubscribe = () => { | ||
this[$observers] = this[$observers].filter((someObserver) => someObserver !== observer) | ||
this[$observers] = this[$observers].filter(someObserver => someObserver !== observer) | ||
} | ||
@@ -26,0 +25,0 @@ return unsubscribe |
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
export type SettlementResult<T> = | ||
| { | ||
status: 'fulfilled' | ||
value: T | ||
} | ||
status: 'fulfilled' | ||
value: T | ||
} | ||
| { | ||
reason: any | ||
status: 'rejected' | ||
} | ||
reason: any | ||
status: 'rejected' | ||
} | ||
@@ -12,0 +12,0 @@ // Based on <https://github.com/es-shims/Promise.allSettled/blob/master/implementation.js> |
@@ -1,2 +0,1 @@ | ||
/* eslint-disable sonarjs/prefer-single-boolean-return */ | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
@@ -3,0 +2,0 @@ import { $transferable } from './symbols' |
@@ -23,4 +23,4 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ | ||
Type extends Promise<infer PromiseBaseType> ? PromiseBaseType | ||
: Type extends ObservableLike<infer ObservableBaseType> ? ObservableBaseType | ||
: Type | ||
: Type extends ObservableLike<infer ObservableBaseType> ? ObservableBaseType | ||
: Type | ||
@@ -36,3 +36,3 @@ export type StripTransfer<Type> = Type extends TransferDescriptor<infer BaseType> ? BaseType : Type | ||
Args extends [] ? () => ObservablePromise<StripTransfer<StripAsync<ReturnType>>> | ||
: (...args: ProxyableArgs<Args>) => ObservablePromise<StripTransfer<StripAsync<ReturnType>>> | ||
: (...args: ProxyableArgs<Args>) => ObservablePromise<StripTransfer<StripAsync<ReturnType>>> | ||
@@ -60,2 +60,3 @@ export type ModuleProxy<Methods extends ModuleMethods> = { | ||
// tslint:disable-next-line no-empty-interface | ||
// eslint-disable-next-line @typescript-eslint/no-empty-object-type | ||
interface AnyModuleThread extends PrivateThreadProps { | ||
@@ -62,0 +63,0 @@ // Not specifying an index signature here as that would make `ModuleThread` incompatible |
/* eslint-disable import/no-internal-modules */ | ||
/* eslint-disable sonarjs/prefer-immediate-return */ | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
@@ -4,0 +3,0 @@ /// <reference lib="dom" /> |
@@ -134,3 +134,3 @@ /* eslint-disable import/no-internal-modules */ | ||
const subscription = syncResult.subscribe( | ||
(value) => postJobResultMessage(jobUID, false, serialize(value)), | ||
value => postJobResultMessage(jobUID, false, serialize(value)), | ||
(error) => { | ||
@@ -186,3 +186,3 @@ postJobErrorMessage(jobUID, serialize(error) as any) | ||
const methodNames = Object.keys(exposed).filter((key) => typeof exposed[key] === 'function') | ||
const methodNames = Object.keys(exposed).filter(key => typeof exposed[key] === 'function') | ||
postModuleInitMessage(methodNames) | ||
@@ -189,0 +189,0 @@ } else { |
@@ -1,2 +0,1 @@ | ||
/* eslint-disable sonarjs/no-use-of-empty-return-value */ | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
@@ -12,6 +11,6 @@ | ||
const results = await Promise.all([ | ||
pool.queue((hello) => hello('World')), | ||
pool.queue((hello) => hello('World')), | ||
pool.queue((hello) => hello('World')), | ||
pool.queue((hello) => hello('World')), | ||
pool.queue(hello => hello('World')), | ||
pool.queue(hello => hello('World')), | ||
pool.queue(hello => hello('World')), | ||
pool.queue(hello => hello('World')), | ||
]) | ||
@@ -18,0 +17,0 @@ await pool.terminate() |
@@ -1,2 +0,2 @@ | ||
/* eslint-disable @typescript-eslint/no-var-requires */ | ||
/* eslint-disable @typescript-eslint/no-require-imports */ | ||
// NOTE: | ||
@@ -3,0 +3,0 @@ // We are gonna test the bundles previously built by the AVA tests (see webpack.test.ts) |
@@ -0,4 +1,6 @@ | ||
/* eslint-disable @typescript-eslint/no-unused-expressions */ | ||
/* eslint-disable @typescript-eslint/no-require-imports */ | ||
/* eslint-disable require-await */ | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
/* eslint-disable @typescript-eslint/no-var-requires */ | ||
import path from 'node:path' | ||
@@ -13,7 +15,9 @@ | ||
const stringifyWebpackError = (error: any) => | ||
error ? | ||
typeof error.stack === 'string' ? error.stack | ||
: typeof error.message === 'string' ? error.message | ||
: error | ||
: '' | ||
error | ||
? typeof error.stack === 'string' | ||
? error.stack | ||
: typeof error.message === 'string' | ||
? error.message | ||
: error | ||
: '' | ||
@@ -23,3 +27,5 @@ async function runWebpack(config: any) { | ||
Webpack(config).run((error, stats) => { | ||
error ? reject(error) : resolve(stats) | ||
if (stats) { | ||
error ? reject(error) : resolve(stats) | ||
} | ||
}) | ||
@@ -26,0 +32,0 @@ }) |
@@ -31,4 +31,4 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ | ||
serialize(data, fallback) { | ||
return data instanceof Foo ? | ||
{ | ||
return data instanceof Foo | ||
? { | ||
__type: '$$foo', | ||
@@ -35,0 +35,0 @@ val: data.getValue(), |
/* eslint-disable import/no-internal-modules */ | ||
/* eslint-disable sonarjs/no-duplicate-string */ | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
@@ -9,3 +8,3 @@ import test from 'ava' | ||
const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) | ||
const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) | ||
@@ -47,5 +46,5 @@ test('can create an observable promise', async (t) => { | ||
const promise1 = async.then((value) => t.is(value, 123), t.fail) | ||
const promise1 = async.then(value => t.is(value, 123), t.fail) | ||
await delay(10) | ||
const promise2 = async.then((value) => t.is(value, 123), t.fail) | ||
const promise2 = async.then(value => t.is(value, 123), t.fail) | ||
@@ -109,3 +108,3 @@ await Promise.all([promise1, promise2]) | ||
async.subscribe( | ||
(value) => capturedValues.push(value), | ||
value => capturedValues.push(value), | ||
() => {}, | ||
@@ -137,4 +136,4 @@ () => capturedCompletions++, | ||
async.subscribe( | ||
(value) => capturedValues.push(value), | ||
(error) => capturedErrorMessages.push(error.message), | ||
value => capturedValues.push(value), | ||
error => capturedErrorMessages.push(error.message), | ||
() => capturedCompletions++, | ||
@@ -168,4 +167,4 @@ ) | ||
async.subscribe( | ||
(value) => capturedValues.push(value), | ||
(error) => capturedErrorMessages.push(error.message), | ||
value => capturedValues.push(value), | ||
error => capturedErrorMessages.push(error.message), | ||
() => capturedCompletions++, | ||
@@ -172,0 +171,0 @@ ) |
@@ -20,3 +20,3 @@ /* eslint-disable import/no-internal-modules */ | ||
const subscription1 = subject.subscribe( | ||
(value) => values1.push(value), | ||
value => values1.push(value), | ||
undefined, | ||
@@ -26,3 +26,3 @@ () => (completed1 = true), | ||
subject.subscribe( | ||
(value) => values2.push(value), | ||
value => values2.push(value), | ||
undefined, | ||
@@ -32,3 +32,3 @@ () => (completed2 = true), | ||
observable.subscribe( | ||
(value) => values3.push(value), | ||
value => values3.push(value), | ||
undefined, | ||
@@ -65,3 +65,3 @@ () => (completed3 = true), | ||
() => {}, | ||
(error) => (error1 = error), | ||
error => (error1 = error), | ||
() => (completed1 = true), | ||
@@ -71,3 +71,3 @@ ) | ||
() => {}, | ||
(error) => (error2 = error), | ||
error => (error2 = error), | ||
() => (completed2 = true), | ||
@@ -77,3 +77,3 @@ ) | ||
() => {}, | ||
(error) => (error3 = error), | ||
error => (error3 = error), | ||
() => (completed3 = true), | ||
@@ -80,0 +80,0 @@ ) |
/* eslint-disable import/no-internal-modules */ | ||
/* eslint-disable @typescript-eslint/no-floating-promises */ | ||
/* eslint-disable require-await */ | ||
@@ -25,3 +25,3 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ | ||
const pool = Pool(spawnHelloWorld, 3) | ||
pool.events().subscribe((event) => events.push(event)) | ||
pool.events().subscribe(event => events.push(event)) | ||
@@ -33,3 +33,3 @@ // Just to make sure all worker threads are initialized before starting to queue | ||
.events() | ||
.filter((event) => event.type === PoolEventType.initialized) | ||
.filter(event => event.type === PoolEventType.initialized) | ||
.subscribe(resolve, reject) | ||
@@ -117,3 +117,2 @@ }) | ||
test.serial('pool.settled() does not reject on task failure', async (t) => { | ||
// eslint-disable-next-line sonarjs/no-unused-collection | ||
const returned: any[] = [] | ||
@@ -136,3 +135,3 @@ | ||
t.is(errors.length, 2) | ||
t.deepEqual(errors.map((error) => error.message).sort(), ['Test error one', 'Test error two']) | ||
t.deepEqual(errors.map(error => error.message).sort(), ['Test error one', 'Test error two']) | ||
}) | ||
@@ -153,3 +152,3 @@ | ||
pool.events().subscribe((event) => events.push(event)) | ||
pool.events().subscribe(event => events.push(event)) | ||
@@ -173,3 +172,3 @@ let executionCount = 0 | ||
const cancellationEvents = events.filter((event) => event.type === 'taskCanceled') | ||
const cancellationEvents = events.filter(event => event.type === 'taskCanceled') | ||
t.deepEqual(cancellationEvents, [ | ||
@@ -176,0 +175,0 @@ { |
/* eslint-disable import/no-internal-modules */ | ||
/* eslint-disable @typescript-eslint/no-var-requires */ | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
@@ -31,3 +31,3 @@ import test from 'ava' | ||
const observable = countToFive() | ||
observable.subscribe((value) => encounteredValues.push(value)) | ||
observable.subscribe(value => encounteredValues.push(value)) | ||
await observable | ||
@@ -56,2 +56,3 @@ | ||
test('thread transfer errors are handled', async (t) => { | ||
// eslint-disable-next-line @typescript-eslint/no-require-imports | ||
const builtin = require('node:module').builtinModules | ||
@@ -58,0 +59,0 @@ if (builtin.includes('worker_threads')) { |
@@ -9,3 +9,3 @@ import test from 'ava' | ||
const minmax = await spawn(new Worker('./workers/minmax')) | ||
minmax.values().subscribe((values) => captured.push(values)) | ||
minmax.values().subscribe(values => captured.push(values)) | ||
@@ -12,0 +12,0 @@ await minmax.push(2) |
@@ -28,3 +28,3 @@ /* eslint-disable import/no-internal-modules */ | ||
} else if (Array.isArray(obj)) { | ||
return (obj as any[]).map((element) => replaceArrayBufferWithPlaceholder(element, arrayBuffer)) as any | ||
return (obj as any[]).map(element => replaceArrayBufferWithPlaceholder(element, arrayBuffer)) as any | ||
} else if (obj && typeof obj === 'object') { | ||
@@ -48,3 +48,3 @@ const result: In = Object.create(Object.getPrototypeOf(obj)) | ||
worker.postMessage = spyOn(worker.postMessage.bind(worker), (postMessage) => (...args) => { | ||
worker.postMessage = spyOn(worker.postMessage.bind(worker), postMessage => (...args) => { | ||
postMessageCalls.push(replaceArrayBufferWithPlaceholder(args, testData)) | ||
@@ -51,0 +51,0 @@ return postMessage(...args) |
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
6645
273465