64 lines
2.4 KiB
JavaScript
64 lines
2.4 KiB
JavaScript
|
|
/*
|
||
|
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
||
|
|
|
||
|
|
Redistribution and use in source and binary forms, with or without
|
||
|
|
modification, are permitted provided that the following conditions are met:
|
||
|
|
|
||
|
|
1. Redistributions of source code must retain the above copyright notice,
|
||
|
|
this list of conditions and the following disclaimer.
|
||
|
|
|
||
|
|
2. Redistributions in binary form must reproduce the above copyright
|
||
|
|
notice, this list of conditions and the following disclaimer in
|
||
|
|
the documentation and/or other materials provided with the distribution.
|
||
|
|
|
||
|
|
3. The names of the authors may not be used to endorse or promote products
|
||
|
|
derived from this software without specific prior written permission.
|
||
|
|
|
||
|
|
THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
|
||
|
|
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||
|
|
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
|
||
|
|
INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||
|
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||
|
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||
|
|
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||
|
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||
|
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||
|
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { FUNCTION_TYPE } from "./core/constants.js";
|
||
|
|
import { configure } from "./core/configuration.js";
|
||
|
|
import { configureZlibModule } from "./core/zlib-streams-inline.js";
|
||
|
|
import { configureWorker } from "./core/codec-worker.js";
|
||
|
|
import { terminateWorkers } from "./core/codec-pool.js";
|
||
|
|
import { initModule, resetWasmModule, CompressionStreamZlib, DecompressionStreamZlib } from "./core/streams/zlib-wasm/zlib-streams-loader.js";
|
||
|
|
|
||
|
|
let modulePromise;
|
||
|
|
|
||
|
|
configureZlibModule(configure);
|
||
|
|
configureWorker({
|
||
|
|
initModule: config => {
|
||
|
|
if (!modulePromise) {
|
||
|
|
let { wasmURI } = config;
|
||
|
|
// deno-lint-ignore valid-typeof
|
||
|
|
if (typeof wasmURI == FUNCTION_TYPE) {
|
||
|
|
wasmURI = wasmURI();
|
||
|
|
}
|
||
|
|
modulePromise = initModule(wasmURI, config);
|
||
|
|
|
||
|
|
}
|
||
|
|
return modulePromise;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
configure({
|
||
|
|
CompressionStreamZlib,
|
||
|
|
DecompressionStreamZlib
|
||
|
|
});
|
||
|
|
|
||
|
|
export { terminateWorkersAndModule as terminateWorkers };
|
||
|
|
|
||
|
|
function terminateWorkersAndModule() {
|
||
|
|
modulePromise = null;
|
||
|
|
terminateWorkers();
|
||
|
|
resetWasmModule();
|
||
|
|
}
|