diff --git a/src/index.ts b/src/index.ts index 0bc1d754b..ebe24acd9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -103,20 +103,10 @@ export function extractProperties<T>(object?: T) { } } -export function createSyncFn<T extends AnyAsyncFn>( +export function createSyncFn<T extends AnyAsyncFn<R>, R = unknown>( workerPath: string, - bufferSize?: number, - timeout?: number, -): Syncify<T> -export function createSyncFn<T extends AnyAsyncFn>( - workerPath: string, - options?: SynckitOptions, -): Syncify<T> -export function createSyncFn<R, T extends AnyAsyncFn<R>>( - workerPath: string, - bufferSizeOrOptions?: SynckitOptions | number, - timeout?: number, -) { + timeoutOrOptions?: SynckitOptions | number, +): Syncify<T> { if (!path.isAbsolute(workerPath)) { throw new Error('`workerPath` must be absolute') } @@ -124,19 +114,19 @@ export function createSyncFn<R, T extends AnyAsyncFn<R>>( const cachedSyncFn = syncFnCache.get(workerPath) if (cachedSyncFn) { - return cachedSyncFn + return cachedSyncFn as Syncify<T> } const syncFn = startWorkerThread<R, T>( workerPath, - /* istanbul ignore next */ typeof bufferSizeOrOptions === 'number' - ? { timeout } - : bufferSizeOrOptions, + /* istanbul ignore next */ typeof timeoutOrOptions === 'number' + ? { timeout: timeoutOrOptions } + : timeoutOrOptions, ) syncFnCache.set(workerPath, syncFn) - return syncFn + return syncFn as Syncify<T> } const cjsRequire = @@ -510,13 +500,12 @@ function startWorkerThread<R, T extends AnyAsyncFn<R>>( const syncFn = (...args: Parameters<T>): R => { const id = nextID++ - // Reset SharedArrayBuffer - Atomics.store(sharedBufferView, 0, 0) - const msg: MainToWorkerMessage<Parameters<T>> = { id, args } worker.postMessage(msg) const status = Atomics.wait(sharedBufferView, 0, 0, timeout) + // Reset SharedArrayBuffer for next call + Atomics.store(sharedBufferView, 0, 0) /* istanbul ignore if */ if (!['ok', 'not-equal'].includes(status)) { diff --git a/test/ts-runner.spec.ts b/test/ts-runner.spec.ts index cdb6601a8..089e40af5 100644 --- a/test/ts-runner.spec.ts +++ b/test/ts-runner.spec.ts @@ -134,8 +134,8 @@ test('unknown ts runner', async () => { const { createSyncFn } = await import('synckit') expect(() => - // @ts-expect-error createSyncFn<AsyncWorkerFn>(path.resolve(_dirname, 'worker.js'), { + // @ts-expect-error tsRunner: 'unknown', }), ).toThrowErrorMatchingInlineSnapshot(`"Unknown ts runner: unknown"`)