1
0
Fork 0
mirror of https://github.com/codedread/bitjs synced 2025-10-03 09:39:16 +02:00

For issue #44, remove the need for a pathToBitJS while unarchiving.

This commit is contained in:
Jeff Schiller 2023-12-12 17:18:42 -08:00
parent f71c893f63
commit d557383c9d
3 changed files with 13 additions and 17 deletions

View file

@ -130,6 +130,8 @@ export class Zipper {
*/ */
start(files, isLastFile) { start(files, isLastFile) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// TODO: Only use Worker if it exists (like decompress).
// TODO: Remove need for pathToBitJS (like decompress).
this.worker_ = new Worker(this.pathToBitJS + `archive/zip.js`); this.worker_ = new Worker(this.pathToBitJS + `archive/zip.js`);
this.worker_.onerror = (evt) => { this.worker_.onerror = (evt) => {
console.log('Worker error: message = ' + evt.message); console.log('Worker error: message = ' + evt.message);

View file

@ -9,6 +9,9 @@
* Copyright(c) 2021 Google Inc. * Copyright(c) 2021 Google Inc.
*/ */
// TODO(bitjs): Consider moving all this back into decompress.js to simplify the code now that
// the implementation isn't tied to Web Workers so heavily.
import { UnarchiveAppendEvent, UnarchiveErrorEvent, UnarchiveEvent, UnarchiveEventType, import { UnarchiveAppendEvent, UnarchiveErrorEvent, UnarchiveEvent, UnarchiveEventType,
UnarchiveExtractEvent, UnarchiveFinishEvent, UnarchiveInfoEvent, UnarchiveExtractEvent, UnarchiveFinishEvent, UnarchiveInfoEvent,
UnarchiveProgressEvent, UnarchiveStartEvent } from './events.js'; UnarchiveProgressEvent, UnarchiveStartEvent } from './events.js';
@ -20,11 +23,12 @@ import { findMimeType } from '../file/sniffer.js';
* @property {Uint8Array} fileData * @property {Uint8Array} fileData
*/ */
// TODO: Remove pathToBitJS completely from this.
/** /**
* @typedef UnarchiverOptions * @typedef UnarchiverOptions
* @property {string} pathToBitJS The path to the bitjs folder. * @property {string} pathToBitJS The path to the bitjs folder.
* @property {boolean=} debug Set to true for verbose unarchiver logging. * @property {boolean=} debug Set to true for verbose unarchiver logging.
* @property {ThreadingMode=} threadingMode The default is WEB_WORKER.
*/ */
/** /**
@ -72,13 +76,6 @@ export class Unarchiver extends EventTarget {
*/ */
this.connectPortFn_ = connectPortFn; this.connectPortFn_ = connectPortFn;
/**
* The path to the BitJS files.
* @type {string}
* @private
*/
this.pathToBitJS_ = options.pathToBitJS || '/';
/** /**
* @orivate * @orivate
* @type {boolean} * @type {boolean}
@ -160,8 +157,7 @@ export class Unarchiver extends EventTarget {
const me = this; const me = this;
const messageChannel = new MessageChannel(); const messageChannel = new MessageChannel();
this.port_ = messageChannel.port1; this.port_ = messageChannel.port1;
this.connectPortFn_(this.pathToBitJS_, this.connectPortFn_(this.getScriptFileName(), messageChannel.port2).then(() => {
this.getScriptFileName(), messageChannel.port2).then(() => {
this.port_.onerror = function (e) { this.port_.onerror = function (e) {
console.log('Impl error: message = ' + e.message); console.log('Impl error: message = ' + e.message);
throw e; throw e;

View file

@ -47,21 +47,19 @@ export {
* (e.g. web browsers or deno), imports the implementation inside a Web Worker. Otherwise, it * (e.g. web browsers or deno), imports the implementation inside a Web Worker. Otherwise, it
* dynamically imports the implementation inside the current JS context. * dynamically imports the implementation inside the current JS context.
* The MessagePort is used for communication between host and implementation. * The MessagePort is used for communication between host and implementation.
* @param {string} pathToBitJS The path to the bitjs folder.
* @param {string} implFilename The decompressor implementation filename relative to this path * @param {string} implFilename The decompressor implementation filename relative to this path
* (e.g. './unzip.js'). * (e.g. './unzip.js').
* @param {MessagePort} implPort The MessagePort to connect to the decompressor implementation. * @param {MessagePort} implPort The MessagePort to connect to the decompressor implementation.
* @returns {Promise<void>} The Promise resolves once the ports are connected. * @returns {Promise<void>} The Promise resolves once the ports are connected.
*/ */
const connectPortFn = async (pathToBitJS, implFilename, implPort) => { const connectPortFn = async (implFilename, implPort) => {
if (typeof Worker === 'undefined') { if (typeof Worker === 'undefined') {
return import(`${implFilename}`).then(implModule => { return import(`${implFilename}`).then(implModule => implModule.connect(implPort));
implModule.connect(implPort)
});
} }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const worker = new Worker(pathToBitJS + 'archive/unarchiver-webworker.js', { type: 'module' }); const workerScriptPath = new URL(`./unarchiver-webworker.js`, import.meta.url).href;
const worker = new Worker(workerScriptPath, { type: 'module' });
worker.postMessage({ implSrc: implFilename }, [implPort]); worker.postMessage({ implSrc: implFilename }, [implPort]);
resolve(); resolve();
}); });