1
1
const registry = new Map ( ) ;
2
+ const preferWorkerMap = new Map ( ) ;
2
3
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 ) {
4
11
if ( ! Array . isArray ( cases ) ) {
5
12
cases = [ cases ] ; // eslint-disable-line no-param-reassign
6
13
}
7
- cases . forEach ( ( c ) => registry . set ( c , importFn ) ) ;
14
+ cases . forEach ( ( c ) => {
15
+ registry . set ( c , importFn ) ;
16
+ preferWorkerMap . set ( c , preferWorker_ ) ;
17
+ } ) ;
8
18
}
9
19
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
+ */
10
25
export async function getDecoder ( fileDirectory ) {
11
26
const importFn = registry . get ( fileDirectory . Compression ) ;
12
27
if ( ! importFn ) {
@@ -16,8 +31,17 @@ export async function getDecoder(fileDirectory) {
16
31
return new Decoder ( fileDirectory ) ;
17
32
}
18
33
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
+
19
43
// 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 ) ;
21
45
addDecoder ( 5 , ( ) => import ( './lzw.js' ) . then ( ( m ) => m . default ) ) ;
22
46
addDecoder ( 6 , ( ) => {
23
47
throw new Error ( 'old style JPEG compression is not supported.' ) ;
@@ -32,4 +56,4 @@ addDecoder(34887, () => import('./lerc.js')
32
56
} )
33
57
. then ( ( m ) => m . default ) ,
34
58
) ;
35
- addDecoder ( 50001 , ( ) => import ( './webimage.js' ) . then ( ( m ) => m . default ) ) ;
59
+ addDecoder ( 50001 , ( ) => import ( './webimage.js' ) . then ( ( m ) => m . default ) , false ) ;
0 commit comments