UNPKG

better-webworker

Version:

[English](https://github.com/mchao123/better-webworker/blob/main/README.md) | [中文](https://github.com/mchao123/better-webworker/blob/main/README.zh-CN.md)

114 lines (79 loc) 2.8 kB
[English](https://github.com/mchao123/better-webworker/blob/main/README.md) | [中文](https://github.com/mchao123/better-webworker/blob/main/README.zh-CN.md) # Better WebWorker A library for creating type-safe Web Worker communication, providing better development experience and type safety. ## Features - Type-safe Worker communication - Support function transfer and deserialization - Automatic Worker lifecycle management - Built-in timeout control and error handling - Seamless integration with Vite ## Installation ```bash npm install better-webworker ``` ## Usage ### Main Thread ```typescript import { useWorker } from 'better-webworker'; // Create Worker instance const worker = new Worker(new URL('./worker.ts', import.meta.url), { type: 'module' }); // Get type-safe interface const { methods } = useWorker<{ add(a: number, b: number): number; fetchData(url: string): Promise<any>; }>(worker); // Call Worker methods const sum = await methods.add(1, 2); // 3 const data = await methods.fetchData('https://api.example.com/data'); ``` ### Worker Thread ```typescript import { defineReceive } from 'better-webworker'; export default defineReceive({ add(a: number, b: number) { return a + b; }, async fetchData(url: string) { const response = await fetch(url); return response.json(); } }); ``` ### Vite Configuration ```typescript import { defineConfig } from 'vite'; import betterWorker from 'better-webworker/vite'; export default defineConfig({ plugins: [ betterWorker() // Default handles .worker.ts files // Custom file pattern: // betterWorker(/\.worker\.(ts|js)$/) ] }); ``` ### Auto Compilation When using the Vite plugin, .worker.ts files will be automatically compiled and generate type-safe Worker instances. You just need to directly import the Worker file: ```typescript // main.ts import worker from './example.worker'; const { methods } = worker(); await methods.someTask(); ``` ## API ### `useWorker<T>(worker: Worker)` Creates a type-safe Worker interface. - `worker`: Web Worker instance - Returns: Object containing `methods` with type-safe interfaces for all Worker methods ### `defineReceive<T>(handlers: T)` Defines Worker-side handler functions. - `handlers`: Object containing handler functions - Returns: Worker initialization function ## Notes 1. Ensure Worker files end with `.worker.ts` 2. Vite plugin configuration is required when using Vite 3. Be cautious with closures when transferring functions 4. Set appropriate timeout values ## Examples Complete examples can be found in the [examples directory](https://github.com/mchao123/better-webworker/blob/main/examples).