f88ead7dcbcd238cb990ebaed48e23f625201c4c
[poolifier.git] / src / worker / utils.ts
1 import { isPlainObject } from '../utils'
2 import type { TaskFunction } from './task-functions'
3 import { KillBehaviors, type WorkerOptions } from './worker-options'
4
5 export const checkValidWorkerOptions = (opts: WorkerOptions): void => {
6 if (opts != null && !isPlainObject(opts)) {
7 throw new TypeError('opts worker options parameter is not a plain object')
8 }
9 if (
10 opts?.killBehavior != null &&
11 !Object.values(KillBehaviors).includes(opts.killBehavior)
12 ) {
13 throw new TypeError(
14 `killBehavior option '${opts.killBehavior}' is not valid`
15 )
16 }
17 if (
18 opts?.maxInactiveTime != null &&
19 !Number.isSafeInteger(opts.maxInactiveTime)
20 ) {
21 throw new TypeError('maxInactiveTime option is not an integer')
22 }
23 if (opts?.maxInactiveTime != null && opts.maxInactiveTime < 5) {
24 throw new TypeError(
25 'maxInactiveTime option is not a positive integer greater or equal than 5'
26 )
27 }
28 if (opts?.killHandler != null && typeof opts.killHandler !== 'function') {
29 throw new TypeError('killHandler option is not a function')
30 }
31 if (opts?.async != null) {
32 throw new Error('async option is deprecated')
33 }
34 }
35
36 export const checkValidTaskFunctionEntry = <Data = unknown, Response = unknown>(
37 name: string,
38 fn: TaskFunction<Data, Response>
39 ): void => {
40 if (typeof name !== 'string') {
41 throw new TypeError('A taskFunctions parameter object key is not a string')
42 }
43 if (typeof name === 'string' && name.trim().length === 0) {
44 throw new TypeError(
45 'A taskFunctions parameter object key is an empty string'
46 )
47 }
48 if (typeof fn !== 'function') {
49 throw new TypeError(
50 'A taskFunctions parameter object value is not a function'
51 )
52 }
53 }
54
55 export const checkTaskFunctionName = (name: string): void => {
56 if (typeof name !== 'string') {
57 throw new TypeError('name parameter is not a string')
58 }
59 if (typeof name === 'string' && name.trim().length === 0) {
60 throw new TypeError('name parameter is an empty string')
61 }
62 }