Skip to content

Commit

Permalink
worker type.
Browse files Browse the repository at this point in the history
  • Loading branch information
dojyorin committed Jan 20, 2024
1 parent a52e3ad commit c65d37d
Showing 1 changed file with 21 additions and 5 deletions.
26 changes: 21 additions & 5 deletions src/worker.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,37 @@
/**
* WIP.
*/
export interface WorkerMessage<T>{
export interface WorkerMessage<T extends unknown>{
message: T;
transfer?: Transferable[];
}

/**
* WIP.
*/
export type WorkerTask<T, K> = (message:T) => WorkerMessage<K> | Promise<WorkerMessage<K>>;
export type WorkerTask<T extends unknown, K extends unknown> = (message:T) => WorkerMessage<K> | Promise<WorkerMessage<K>>;

/**
* WIP.
*/
export type WorkerContext<T extends unknown, K extends unknown> = (message:T, transfer?:Transferable[]) => Promise<K>;

/**
* WIP.
* @example
* ```ts
* const task = createTask(()=>{});
* const task = createTask<number, number>(async(data)=>{
* const {delay} = await import("https://deno.land/std/async/mod.ts");
* await delay(1000);
* return {
* message: data * 2
* };
* });
* const result1 = await task(1);
* const result2 = await task(2);
* ```
*/
export function createTask<T, K>(task:WorkerTask<T, K>){
export function createTask<T extends unknown, K extends unknown>(task:WorkerTask<T, K>):WorkerContext<T, K>{
const script = task.toString();
const regist = /*js*/`
globalThis.onmessage = async({data})=>{
Expand All @@ -33,7 +46,10 @@ export function createTask<T, K>(task:WorkerTask<T, K>){
return (message:T, transfer?:Transferable[])=>{
return new Promise<K>((res, rej)=>{
const worker = new Worker(url, {
type: "module"
type: "module",
deno: {
permissions: "inherit"
}
});

worker.onmessage = ({data})=>{
Expand Down

0 comments on commit c65d37d

Please sign in to comment.