Skip to content

Commit

Permalink
implement DataStream in EntryDataReader, remove incorrect exports in …
Browse files Browse the repository at this point in the history
…index-browser.js
  • Loading branch information
KurtThiemann committed Feb 23, 2024
1 parent 8958ff6 commit f842cad
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 47 deletions.
20 changes: 0 additions & 20 deletions index-browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,28 +32,8 @@ export { default as Zip64ExtendedInformation } from "./src/Archive/Structure/Ext
export { default as ExtraField } from "./src/Archive/Structure/ExtraField/ExtraField.js";
export { default as UnicodeExtraField } from "./src/Archive/Structure/ExtraField/UnicodeExtraField.js";

export { default as DataReader } from "./src/Reader/DataReader.js";
export { default as BufferedDataReader } from "./src/Reader/BufferedDataReader.js";
export { default as BrowserFileReader } from "./src/Reader/BrowserFileReader.js";
export { default as ArrayBufferReader } from "./src/Reader/ArrayBufferReader.js";

export { default as CP437 } from "./src/Util/CP437.js";
export { default as CRC32 } from "./src/Util/CRC32.js";
export { default as MsDosTime } from "./src/Util/MsDosTime.js";
export { default as BufferUtils } from "./src/Util/BufferUtils.js";

export { default as DataProcessor } from "./src/DataProcessor/DataProcessor.js";
export { default as AbstractDataProcessor } from "./src/DataProcessor/AbstractDataProcessor.js";
export { default as FflateInflateDataProcessor } from "./src/DataProcessor/Fflate/FflateInflateDataProcessor.js";
export { default as PassThroughDataProcessor } from "./src/DataProcessor/PassThroughDataProcessor.js";
export { default as FflateDeflateDataProcessor } from "./src/DataProcessor/Fflate/FflateDeflateDataProcessor.js";
export { default as FflateDataProcessor } from "./src/DataProcessor/Fflate/FflateDataProcessor.js";
export { default as NativeDeflateDataProcessor } from "./src/DataProcessor/Native/NativeDeflateDataProcessor.js";
export { default as NativeInflateDataProcessor } from "./src/DataProcessor/Native/NativeInflateDataProcessor.js";
export { default as NativeStreamDataProcessor } from "./src/DataProcessor/Native/NativeStreamDataProcessor.js";
export { default as FallbackDataProcessor } from "./src/DataProcessor/FallbackDataProcessor.js";
export { default as DefaultInflateDataProcessor } from "./src/DataProcessor/DefaultInflateDataProcessor.js";
export { default as DefaultDeflateDataProcessor } from "./src/DataProcessor/DefaultDeflateDataProcessor.js";

export { default as Options } from "./src/Options/Options.js";
export { default as EntrySourceOptions } from "./src/Options/EntrySourceOptions.js";
Expand Down
29 changes: 9 additions & 20 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "armarius",
"version": "2.0.0",
"version": "2.1.0",
"description": "A JavaScript library to read, write, and merge ZIP archives in web browsers.",
"repository": "github:aternosorg/armarius",
"type": "module",
Expand All @@ -15,7 +15,7 @@
"author": "Kurt Thiemann <[email protected]>",
"license": "MIT",
"dependencies": {
"armarius-io": "^1.0.1"
"armarius-io": "^1.2.0"
},
"devDependencies": {
"@jest/globals": "^29.7.0",
Expand Down
3 changes: 2 additions & 1 deletion src/Archive/Entry/ArchiveEntry.js
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,8 @@ export default class ArchiveEntry {
await this.readLocalFileHeader();
return new EntryDataReader(
await this.getDataProcessor(),
this.centralDirectoryFileHeader.crc32
this.centralDirectoryFileHeader.crc32,
Number(this.getUncompressedSize())
);
}

Expand Down
44 changes: 40 additions & 4 deletions src/Archive/Entry/EntryDataReader.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,33 @@
import ChecksumError from '../../Error/ChecksumError.js';
import {DataStream} from 'armarius-io';

export default class EntryDataReader {
/** @type {DataProcessor} */ dataProcessor;
export default class EntryDataReader extends DataStream {
/** @type {import("armarius-io").DataProcessor} */ dataProcessor;
/** @type {import("armarius-io").CRC32} */ crc32;
/** @type {number} */ expectedCrc32;
/** @type {number} */ expectedSize;
/** @type {number} */ offset = 0;

/**
* @param {DataProcessor} dataProcessor
* @param {import("armarius-io").DataProcessor} dataProcessor
* @param {number} expectedCrc32
* @param {number} expectedSize
*/
constructor(dataProcessor, expectedCrc32) {
constructor(dataProcessor, expectedCrc32, expectedSize) {
super();
this.dataProcessor = dataProcessor;
this.expectedCrc32 = expectedCrc32;
this.expectedSize = expectedSize;
}

/**
* @inheritDoc
*/
async reset() {
await this.dataProcessor.reset();
this.offset = 0;
this.eof = false;
return this;
}

/**
Expand All @@ -27,6 +38,10 @@ export default class EntryDataReader {
let uncompressed = await this.dataProcessor.read(length);
let eof = uncompressed === null;

if (!eof) {
this.offset += uncompressed.byteLength;
}

if (this.dataProcessor.getPostCrc()) {
if (eof && this.dataProcessor.getPostCrc().finish() !== this.expectedCrc32) {
throw new ChecksumError('CRC32 checksum does not match expected value');
Expand All @@ -35,5 +50,26 @@ export default class EntryDataReader {

return uncompressed;
}

/**
* @returns {number}
*/
getFinalLength() {
return this.expectedSize;
}

/**
* @inheritDoc
*/
async pull(length) {
return await this.read(length);
}

/**
* @inheritDoc
*/
getOffset() {
return this.offset;
}
}

0 comments on commit f842cad

Please sign in to comment.