Skip to content

Commit dac745c

Browse files
committed
Track which decoders prefer to be run in a worker
1 parent 36062e1 commit dac745c

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

src/compression/index.js

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
const registry = new Map();
2+
const preferWorkerMap = new Map();
23

3-
export function addDecoder(cases, importFn) {
4+
/**
5+
* Register a decoder for a specific compression method or a range of compressions
6+
* @param {(number|undefined|(number|undefined)[]))} cases ids of the compression methods to register for
7+
* @param {function():Promise} importFn the function to import the decoder
8+
* @param {boolean} preferWorker_ Whether to prefer running the decoder in a worker
9+
*/
10+
export function addDecoder(cases, importFn, preferWorker_ = true) {
411
if (!Array.isArray(cases)) {
512
cases = [cases]; // eslint-disable-line no-param-reassign
613
}
7-
cases.forEach((c) => registry.set(c, importFn));
14+
cases.forEach((c) => {
15+
registry.set(c, importFn);
16+
preferWorkerMap.set(c, preferWorker_);
17+
});
818
}
919

20+
/**
21+
* Get a decoder for a specific file directory
22+
* @param {object} fileDirectory the file directory of the image
23+
* @returns {Promise<Decoder>}
24+
*/
1025
export async function getDecoder(fileDirectory) {
1126
const importFn = registry.get(fileDirectory.Compression);
1227
if (!importFn) {
@@ -16,8 +31,17 @@ export async function getDecoder(fileDirectory) {
1631
return new Decoder(fileDirectory);
1732
}
1833

34+
/**
35+
* Whether to prefer running the decoder in a worker
36+
* @param {object} fileDirectory the file directory of the image
37+
* @returns {boolean}
38+
*/
39+
export function preferWorker(fileDirectory) {
40+
return preferWorkerMap.get(fileDirectory.Compression);
41+
}
42+
1943
// Add default decoders to registry (end-user may override with other implementations)
20-
addDecoder([undefined, 1], () => import('./raw.js').then((m) => m.default));
44+
addDecoder([undefined, 1], () => import('./raw.js').then((m) => m.default), false);
2145
addDecoder(5, () => import('./lzw.js').then((m) => m.default));
2246
addDecoder(6, () => {
2347
throw new Error('old style JPEG compression is not supported.');
@@ -32,4 +56,4 @@ addDecoder(34887, () => import('./lerc.js')
3256
})
3357
.then((m) => m.default),
3458
);
35-
addDecoder(50001, () => import('./webimage.js').then((m) => m.default));
59+
addDecoder(50001, () => import('./webimage.js').then((m) => m.default), false);

0 commit comments

Comments
 (0)