Making processor-worker a real worker (to TypeScript) (#351)

This commit is contained in:
Jake Archibald
2018-11-29 08:39:48 +00:00
committed by GitHub
parent 723fc142ec
commit 7723bd3b5f
4 changed files with 34 additions and 12 deletions

View File

@@ -1,15 +1,15 @@
import { expose } from 'comlink'; import { expose } from 'comlink';
import { EncodeOptions as MozJPEGEncoderOptions } from './mozjpeg/encoder-meta'; import { EncodeOptions as MozJPEGEncoderOptions } from '../mozjpeg/encoder-meta';
import { QuantizeOptions } from './imagequant/processor-meta'; import { QuantizeOptions } from '../imagequant/processor-meta';
import { EncodeOptions as OptiPNGEncoderOptions } from './optipng/encoder-meta'; import { EncodeOptions as OptiPNGEncoderOptions } from '../optipng/encoder-meta';
import { EncodeOptions as WebPEncoderOptions } from './webp/encoder-meta'; import { EncodeOptions as WebPEncoderOptions } from '../webp/encoder-meta';
async function mozjpegEncode( async function mozjpegEncode(
data: ImageData, options: MozJPEGEncoderOptions, data: ImageData, options: MozJPEGEncoderOptions,
): Promise<ArrayBuffer> { ): Promise<ArrayBuffer> {
const { encode } = await import( const { encode } = await import(
/* webpackChunkName: "process-mozjpeg-enc" */ /* webpackChunkName: "process-mozjpeg-enc" */
'./mozjpeg/encoder', '../mozjpeg/encoder',
); );
return encode(data, options); return encode(data, options);
} }
@@ -17,7 +17,7 @@ async function mozjpegEncode(
async function quantize(data: ImageData, opts: QuantizeOptions): Promise<ImageData> { async function quantize(data: ImageData, opts: QuantizeOptions): Promise<ImageData> {
const { process } = await import( const { process } = await import(
/* webpackChunkName: "process-imagequant" */ /* webpackChunkName: "process-imagequant" */
'./imagequant/processor', '../imagequant/processor',
); );
return process(data, opts); return process(data, opts);
} }
@@ -27,7 +27,7 @@ async function optiPngEncode(
): Promise<ArrayBuffer> { ): Promise<ArrayBuffer> {
const { compress } = await import( const { compress } = await import(
/* webpackChunkName: "process-optipng" */ /* webpackChunkName: "process-optipng" */
'./optipng/encoder', '../optipng/encoder',
); );
return compress(data, options); return compress(data, options);
} }
@@ -37,7 +37,7 @@ async function webpEncode(
): Promise<ArrayBuffer> { ): Promise<ArrayBuffer> {
const { encode } = await import( const { encode } = await import(
/* webpackChunkName: "process-webp-enc" */ /* webpackChunkName: "process-webp-enc" */
'./webp/encoder', '../webp/encoder',
); );
return encode(data, options); return encode(data, options);
} }
@@ -45,7 +45,7 @@ async function webpEncode(
async function webpDecode(data: ArrayBuffer): Promise<ImageData> { async function webpDecode(data: ArrayBuffer): Promise<ImageData> {
const { decode } = await import( const { decode } = await import(
/* webpackChunkName: "process-webp-dec" */ /* webpackChunkName: "process-webp-dec" */
'./webp/decoder', '../webp/decoder',
); );
return decode(data); return decode(data);
} }

View File

@@ -0,0 +1,18 @@
{
"compileOnSave": false,
"compilerOptions": {
"strict": true,
"target": "esnext",
"module": "esnext",
"lib": [
"webworker",
"esnext"
],
"moduleResolution": "node",
"experimentalDecorators": true,
"noUnusedLocals": true,
"sourceMap": true,
"allowJs": false,
"baseUrl": "."
}
}

View File

@@ -1,6 +1,5 @@
import { proxy } from 'comlink'; import { proxy } from 'comlink';
import { QuantizeOptions } from './imagequant/processor-meta'; import { QuantizeOptions } from './imagequant/processor-meta';
import { ProcessorWorkerApi } from './processor-worker';
import { canvasEncode, blobToArrayBuffer } from '../lib/util'; import { canvasEncode, blobToArrayBuffer } from '../lib/util';
import { EncodeOptions as MozJPEGEncoderOptions } from './mozjpeg/encoder-meta'; import { EncodeOptions as MozJPEGEncoderOptions } from './mozjpeg/encoder-meta';
import { EncodeOptions as OptiPNGEncoderOptions } from './optipng/encoder-meta'; import { EncodeOptions as OptiPNGEncoderOptions } from './optipng/encoder-meta';
@@ -18,6 +17,8 @@ import * as browserTIFF from './browser-tiff/encoder';
import * as browserJP2 from './browser-jp2/encoder'; import * as browserJP2 from './browser-jp2/encoder';
import * as browserPDF from './browser-pdf/encoder'; import * as browserPDF from './browser-pdf/encoder';
type ProcessorWorkerApi = import('./processor-worker').ProcessorWorkerApi;
/** How long the worker should be idle before terminating. */ /** How long the worker should be idle before terminating. */
const workerTimeout = 1000; const workerTimeout = 1000;
@@ -62,7 +63,7 @@ export default class Processor {
// @ts-ignore - Typescript doesn't know about the 2nd param to new Worker, and the // @ts-ignore - Typescript doesn't know about the 2nd param to new Worker, and the
// definition can't be overwritten. // definition can't be overwritten.
this._worker = new Worker( this._worker = new Worker(
'./processor-worker.ts', './processor-worker',
{ name: 'processor-worker', type: 'module' }, { name: 'processor-worker', type: 'module' },
) as Worker; ) as Worker;
// Need to do some TypeScript trickery to make the type match. // Need to do some TypeScript trickery to make the type match.

View File

@@ -13,5 +13,8 @@
"allowJs": false, "allowJs": false,
"baseUrl": "." "baseUrl": "."
}, },
"exclude": ["src/sw/**/*"] "exclude": [
"src/sw/**/*",
"src/codecs/processor-worker/**/*"
]
} }