import { ThreadWorker } from 'poolifier'
-import {
- type BodyPayload,
- type ThreadWorkerData,
- type ThreadWorkerResponse
-} from './types.js'
-const factorial: (n: number) => number = n => {
- if (n === 0) {
- return 1
- }
- return factorial(n - 1) * n
-}
+import type {
+ DataPayload,
+ ThreadWorkerData,
+ ThreadWorkerResponse,
+} from './types.js'
class RequestHandlerWorker<
- Data extends ThreadWorkerData<BodyPayload>,
- Response extends ThreadWorkerResponse<BodyPayload>
+ Data extends ThreadWorkerData<DataPayload>,
+ Response extends ThreadWorkerResponse<DataPayload>
> extends ThreadWorker<Data, Response> {
+ private static readonly factorial = (n: number | bigint): bigint => {
+ if (n === 0 || n === 1) {
+ return 1n
+ } else {
+ n = BigInt(n)
+ let factorial = 1n
+ for (let i = 1n; i <= n; i++) {
+ factorial *= i
+ }
+ return factorial
+ }
+ }
+
public constructor () {
super({
echo: (workerData?: Data) => {
},
factorial: (workerData?: Data) => {
return {
- body: { number: factorial(workerData?.body?.number as number) }
+ data: {
+ number: RequestHandlerWorker.factorial(
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ workerData!.data.number!
+ ).toString(),
+ },
} as unknown as Response
- }
+ },
})
}
}
export const requestHandlerWorker = new RequestHandlerWorker<
-ThreadWorkerData<BodyPayload>,
-ThreadWorkerResponse<BodyPayload>
+ ThreadWorkerData<DataPayload>,
+ ThreadWorkerResponse<DataPayload>
>()