WorkerFunction,
WorkerSyncFunction
} from '../utility-types'
-import { EMPTY_FUNCTION } from '../utils'
+import { EMPTY_FUNCTION, isPlainObject } from '../utils'
import type { KillBehavior, WorkerOptions } from './worker-options'
import { KillBehaviors } from './worker-options'
this.opts.killBehavior = opts.killBehavior ?? DEFAULT_KILL_BEHAVIOR
this.opts.maxInactiveTime =
opts.maxInactiveTime ?? DEFAULT_MAX_INACTIVE_TIME
- this.opts.async = opts.async ?? false
+ delete this.opts.async
}
/**
if (taskFunctions == null) {
throw new Error('taskFunctions parameter is mandatory')
}
- if (
- typeof taskFunctions !== 'function' &&
- typeof taskFunctions !== 'object'
- ) {
- throw new Error('taskFunctions parameter is not a function or an object')
- }
- if (
- typeof taskFunctions === 'object' &&
- taskFunctions.constructor !== Object &&
- Object.prototype.toString.call(taskFunctions) !== '[object Object]'
- ) {
- throw new Error('taskFunctions parameter is not an object literal')
- }
this.taskFunctions = new Map<string, WorkerFunction<Data, Response>>()
- if (typeof taskFunctions !== 'function') {
+ if (typeof taskFunctions === 'function') {
+ this.taskFunctions.set(DEFAULT_FUNCTION_NAME, taskFunctions.bind(this))
+ } else if (isPlainObject(taskFunctions)) {
let firstEntry = true
for (const [name, fn] of Object.entries(taskFunctions)) {
if (typeof fn !== 'function') {
- throw new Error(
+ throw new TypeError(
'A taskFunctions parameter object value is not a function'
)
}
throw new Error('taskFunctions parameter object is empty')
}
} else {
- this.taskFunctions.set(DEFAULT_FUNCTION_NAME, taskFunctions.bind(this))
+ throw new TypeError(
+ 'taskFunctions parameter is not a function or a plain object'
+ )
}
}
): void {
try {
const startTimestamp = performance.now()
+ const waitTime = startTimestamp - (message.submissionTimestamp ?? 0)
const res = fn(message.data)
const runTime = performance.now() - startTimestamp
this.sendToMainWorker({
data: res,
id: message.id,
- runTime
+ runTime,
+ waitTime
})
} catch (e) {
const err = this.handleError(e as Error)
message: MessageValue<Data>
): void {
const startTimestamp = performance.now()
+ const waitTime = startTimestamp - (message.submissionTimestamp ?? 0)
fn(message.data)
.then(res => {
const runTime = performance.now() - startTimestamp
this.sendToMainWorker({
data: res,
id: message.id,
- runTime
+ runTime,
+ waitTime
})
return null
})
name = name ?? DEFAULT_FUNCTION_NAME
const fn = this.taskFunctions.get(name)
if (fn == null) {
- throw new Error(`Task function "${name}" not found`)
+ throw new Error(`Task function '${name}' not found`)
}
return fn
}