You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
4 months ago
|
/**
|
||
|
* DON'T depend on anything from the outside like `promiseTry`, as this module is part of a separate lazy-loaded chunk.
|
||
|
*
|
||
|
* Including anything from the main chunk would include the whole chunk by default.
|
||
|
* Even it it would be tree-shaken during build, it won't be tree-shaken in dev.
|
||
|
*
|
||
|
* In the future consider separating common utils into a separate shared chunk.
|
||
|
*/
|
||
|
|
||
|
import { Commands, subsetToBinary } from "./subset-shared.chunk";
|
||
|
|
||
|
/**
|
||
|
* Due to this export (and related dynamic import), this worker code will be included in the bundle automatically (as a separate chunk),
|
||
|
* without the need for esbuild / vite /rollup plugins and special browser / server treatment.
|
||
|
*
|
||
|
* `import.meta.url` is undefined in nodejs
|
||
|
*/
|
||
|
export const WorkerUrl: URL | undefined = import.meta.url
|
||
|
? new URL(import.meta.url)
|
||
|
: undefined;
|
||
|
|
||
|
// run only in the worker context
|
||
|
if (typeof window === "undefined" && typeof self !== "undefined") {
|
||
|
self.onmessage = async (e: {
|
||
|
data: {
|
||
|
command: typeof Commands.Subset;
|
||
|
arrayBuffer: ArrayBuffer;
|
||
|
codePoints: Array<number>;
|
||
|
};
|
||
|
}) => {
|
||
|
switch (e.data.command) {
|
||
|
case Commands.Subset:
|
||
|
const buffer = await subsetToBinary(
|
||
|
e.data.arrayBuffer,
|
||
|
e.data.codePoints,
|
||
|
);
|
||
|
|
||
|
self.postMessage(buffer, { transfer: [buffer] });
|
||
|
break;
|
||
|
}
|
||
|
};
|
||
|
}
|