xz-compat 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/compat.js.map +1 -1
- package/dist/cjs/filters/bcj/Bcj.js.map +1 -1
- package/dist/cjs/filters/bcj/BcjArm.js.map +1 -1
- package/dist/cjs/filters/bcj/BcjArm64.js.map +1 -1
- package/dist/cjs/filters/bcj/BcjArmt.js.map +1 -1
- package/dist/cjs/filters/bcj/BcjIa64.js.map +1 -1
- package/dist/cjs/filters/bcj/BcjPpc.js.map +1 -1
- package/dist/cjs/filters/bcj/BcjSparc.js.map +1 -1
- package/dist/cjs/filters/delta/Delta.js.map +1 -1
- package/dist/cjs/filters/index.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lzma/index.js.map +1 -1
- package/dist/cjs/lzma/lib/Lzma2ChunkParser.js.map +1 -1
- package/dist/cjs/lzma/stream/transforms.js.map +1 -1
- package/dist/cjs/lzma/sync/Lzma2Decoder.js.map +1 -1
- package/dist/cjs/lzma/sync/LzmaDecoder.js.map +1 -1
- package/dist/cjs/lzma/sync/RangeDecoder.js.map +1 -1
- package/dist/cjs/lzma/types.js.map +1 -1
- package/dist/cjs/native.js.map +1 -1
- package/dist/cjs/sevenz.js.map +1 -1
- package/dist/cjs/utils/createBufferingDecoder.js.map +1 -1
- package/dist/cjs/xz/Decoder.d.cts +2 -2
- package/dist/cjs/xz/Decoder.d.ts +2 -2
- package/dist/cjs/xz/Decoder.js +35 -11
- package/dist/cjs/xz/Decoder.js.map +1 -1
- package/dist/esm/compat.js.map +1 -1
- package/dist/esm/filters/bcj/Bcj.js.map +1 -1
- package/dist/esm/filters/bcj/BcjArm.js.map +1 -1
- package/dist/esm/filters/bcj/BcjArm64.js.map +1 -1
- package/dist/esm/filters/bcj/BcjArmt.js.map +1 -1
- package/dist/esm/filters/bcj/BcjIa64.js.map +1 -1
- package/dist/esm/filters/bcj/BcjPpc.js.map +1 -1
- package/dist/esm/filters/bcj/BcjSparc.js.map +1 -1
- package/dist/esm/filters/delta/Delta.js.map +1 -1
- package/dist/esm/filters/index.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lzma/index.js.map +1 -1
- package/dist/esm/lzma/lib/Lzma2ChunkParser.js.map +1 -1
- package/dist/esm/lzma/stream/transforms.js.map +1 -1
- package/dist/esm/lzma/sync/Lzma2Decoder.js.map +1 -1
- package/dist/esm/lzma/sync/LzmaDecoder.js.map +1 -1
- package/dist/esm/lzma/sync/RangeDecoder.js.map +1 -1
- package/dist/esm/lzma/types.js.map +1 -1
- package/dist/esm/native.js.map +1 -1
- package/dist/esm/sevenz.js.map +1 -1
- package/dist/esm/utils/createBufferingDecoder.js.map +1 -1
- package/dist/esm/xz/Decoder.d.ts +2 -2
- package/dist/esm/xz/Decoder.js +34 -14
- package/dist/esm/xz/Decoder.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/iterators/xz-compat/src/lzma/sync/LzmaDecoder.ts"],"sourcesContent":["/**\n * Synchronous LZMA1 Decoder\n *\n * Decodes LZMA1 compressed data from a buffer.\n * All operations are synchronous.\n */\n\nimport { allocBufferUnsafe, bufferFrom } from 'extract-base-iterator';\nimport {\n getLenToPosState,\n initBitModels,\n kEndPosModelIndex,\n kMatchMinLen,\n kNumAlignBits,\n kNumFullDistances,\n kNumLenToPosStates,\n kNumLitContextBitsMax,\n kNumPosSlotBits,\n kNumPosStatesBitsMax,\n kNumStates,\n kStartPosModelIndex,\n type OutputSink,\n parseProperties,\n stateIsCharState,\n stateUpdateChar,\n stateUpdateMatch,\n stateUpdateRep,\n stateUpdateShortRep,\n} from '../types.ts';\nimport { BitTreeDecoder, RangeDecoder, reverseDecodeFromArray } from './RangeDecoder.ts';\n\n/**\n * Length decoder for match/rep lengths\n */\nclass LenDecoder {\n private choice: Uint16Array;\n private lowCoder: BitTreeDecoder[];\n private midCoder: BitTreeDecoder[];\n private highCoder: BitTreeDecoder;\n private numPosStates: number;\n\n constructor() {\n this.choice = initBitModels(null, 2);\n this.lowCoder = [];\n this.midCoder = [];\n this.highCoder = new BitTreeDecoder(8);\n this.numPosStates = 0;\n }\n\n create(numPosStates: number): void {\n for (; this.numPosStates < numPosStates; this.numPosStates++) {\n this.lowCoder[this.numPosStates] = new BitTreeDecoder(3);\n this.midCoder[this.numPosStates] = new BitTreeDecoder(3);\n }\n }\n\n init(): void {\n initBitModels(this.choice);\n for (let i = this.numPosStates - 1; i >= 0; i--) {\n this.lowCoder[i].init();\n this.midCoder[i].init();\n }\n this.highCoder.init();\n }\n\n decode(rangeDecoder: RangeDecoder, posState: number): number {\n if (rangeDecoder.decodeBit(this.choice, 0) === 0) {\n return this.lowCoder[posState].decode(rangeDecoder);\n }\n if (rangeDecoder.decodeBit(this.choice, 1) === 0) {\n return 8 + this.midCoder[posState].decode(rangeDecoder);\n }\n return 16 + this.highCoder.decode(rangeDecoder);\n }\n}\n\n/**\n * Single literal decoder (decodes one byte)\n */\nclass LiteralDecoder2 {\n private decoders: Uint16Array;\n\n constructor() {\n this.decoders = initBitModels(null, 0x300);\n }\n\n init(): void {\n initBitModels(this.decoders);\n }\n\n decodeNormal(rangeDecoder: RangeDecoder): number {\n let symbol = 1;\n do {\n symbol = (symbol << 1) | rangeDecoder.decodeBit(this.decoders, symbol);\n } while (symbol < 0x100);\n return symbol & 0xff;\n }\n\n decodeWithMatchByte(rangeDecoder: RangeDecoder, matchByte: number): number {\n let symbol = 1;\n do {\n const matchBit = (matchByte >> 7) & 1;\n matchByte <<= 1;\n const bit = rangeDecoder.decodeBit(this.decoders, ((1 + matchBit) << 8) + symbol);\n symbol = (symbol << 1) | bit;\n if (matchBit !== bit) {\n while (symbol < 0x100) {\n symbol = (symbol << 1) | rangeDecoder.decodeBit(this.decoders, symbol);\n }\n break;\n }\n } while (symbol < 0x100);\n return symbol & 0xff;\n }\n}\n\n/**\n * Literal decoder (array of single decoders)\n */\nclass LiteralDecoder {\n private numPosBits: number;\n private numPrevBits: number;\n private posMask: number;\n private coders: (LiteralDecoder2 | undefined)[];\n\n constructor() {\n this.numPosBits = 0;\n this.numPrevBits = 0;\n this.posMask = 0;\n this.coders = [];\n }\n\n create(numPosBits: number, numPrevBits: number): void {\n if (this.coders.length > 0 && this.numPrevBits === numPrevBits && this.numPosBits === numPosBits) {\n return;\n }\n this.numPosBits = numPosBits;\n this.posMask = (1 << numPosBits) - 1;\n this.numPrevBits = numPrevBits;\n this.coders = [];\n }\n\n init(): void {\n for (let i = 0; i < this.coders.length; i++) {\n if (this.coders[i]) {\n this.coders[i]?.init();\n }\n }\n }\n\n getDecoder(pos: number, prevByte: number): LiteralDecoder2 {\n const index = ((pos & this.posMask) << this.numPrevBits) + ((prevByte & 0xff) >>> (8 - this.numPrevBits));\n let decoder = this.coders[index];\n if (!decoder) {\n decoder = new LiteralDecoder2();\n this.coders[index] = decoder;\n }\n return decoder;\n }\n}\n\n/**\n * Output window (sliding dictionary)\n */\nclass OutWindow {\n private buffer: Buffer;\n private windowSize: number;\n private pos: number;\n private sink?: {\n write(buffer: Buffer): void;\n };\n private streamPos: number;\n\n constructor(sink?: OutputSink) {\n this.buffer = allocBufferUnsafe(0); // Replaced by create() before use\n this.windowSize = 0;\n this.pos = 0;\n this.sink = sink;\n this.streamPos = 0;\n }\n\n create(windowSize: number): void {\n if (!this.buffer || this.windowSize !== windowSize) {\n this.buffer = allocBufferUnsafe(windowSize);\n }\n this.windowSize = windowSize;\n this.pos = 0;\n this.streamPos = 0;\n }\n\n init(solid: boolean): void {\n if (!solid) {\n this.pos = 0;\n this.streamPos = 0;\n }\n }\n\n putByte(b: number): void {\n this.buffer[this.pos++] = b;\n if (this.pos >= this.windowSize) {\n if (this.sink) {\n this.flush();\n this.pos = 0;\n this.streamPos = 0; // Reset streamPos after wrap to track new data from pos 0\n } else {\n this.pos = 0;\n }\n }\n }\n\n flush(): void {\n const size = this.pos - this.streamPos;\n if (size > 0 && this.sink) {\n // Use bufferFrom to create a COPY, not a view - the buffer is reused after wrapping\n const chunk = bufferFrom(this.buffer.slice(this.streamPos, this.streamPos + size));\n this.sink.write(chunk);\n this.streamPos = this.pos;\n }\n }\n\n getByte(distance: number): number {\n let pos = this.pos - distance - 1;\n if (pos < 0) {\n pos += this.windowSize;\n }\n return this.buffer[pos];\n }\n\n copyBlock(distance: number, len: number): void {\n let pos = this.pos - distance - 1;\n if (pos < 0) {\n pos += this.windowSize;\n }\n for (let i = 0; i < len; i++) {\n if (pos >= this.windowSize) {\n pos = 0;\n }\n this.putByte(this.buffer[pos++]);\n }\n }\n\n /**\n * Copy decoded data to output buffer\n */\n copyTo(output: Buffer, outputOffset: number, count: number): void {\n const srcPos = this.pos - count;\n if (srcPos < 0) {\n // Wrap around case - data spans end and beginning of buffer\n const firstPart = -srcPos;\n this.buffer.copy(output, outputOffset, this.windowSize + srcPos, this.windowSize);\n this.buffer.copy(output, outputOffset + firstPart, 0, count - firstPart);\n } else {\n this.buffer.copy(output, outputOffset, srcPos, srcPos + count);\n }\n }\n}\n\n/**\n * Synchronous LZMA1 decoder\n */\nexport class LzmaDecoder {\n private outWindow: OutWindow;\n private rangeDecoder: RangeDecoder;\n\n // Probability models\n private isMatchDecoders: Uint16Array;\n private isRepDecoders: Uint16Array;\n private isRepG0Decoders: Uint16Array;\n private isRepG1Decoders: Uint16Array;\n private isRepG2Decoders: Uint16Array;\n private isRep0LongDecoders: Uint16Array;\n private posSlotDecoder: BitTreeDecoder[];\n private posDecoders: Uint16Array;\n private posAlignDecoder: BitTreeDecoder;\n private lenDecoder: LenDecoder;\n private repLenDecoder: LenDecoder;\n private literalDecoder: LiteralDecoder;\n\n // Properties\n private dictionarySize: number;\n private dictionarySizeCheck: number;\n private posStateMask: number;\n\n // State (preserved across solid calls)\n private state: number;\n private rep0: number;\n private rep1: number;\n private rep2: number;\n private rep3: number;\n private prevByte: number;\n private totalPos: number;\n\n constructor(outputSink?: OutputSink) {\n this.outWindow = new OutWindow(outputSink);\n this.rangeDecoder = new RangeDecoder();\n\n this.isMatchDecoders = initBitModels(null, kNumStates << kNumPosStatesBitsMax);\n this.isRepDecoders = initBitModels(null, kNumStates);\n this.isRepG0Decoders = initBitModels(null, kNumStates);\n this.isRepG1Decoders = initBitModels(null, kNumStates);\n this.isRepG2Decoders = initBitModels(null, kNumStates);\n this.isRep0LongDecoders = initBitModels(null, kNumStates << kNumPosStatesBitsMax);\n this.posSlotDecoder = [];\n this.posDecoders = initBitModels(null, kNumFullDistances - kEndPosModelIndex);\n this.posAlignDecoder = new BitTreeDecoder(kNumAlignBits);\n this.lenDecoder = new LenDecoder();\n this.repLenDecoder = new LenDecoder();\n this.literalDecoder = new LiteralDecoder();\n\n for (let i = 0; i < kNumLenToPosStates; i++) {\n this.posSlotDecoder[i] = new BitTreeDecoder(kNumPosSlotBits);\n }\n\n this.dictionarySize = -1;\n this.dictionarySizeCheck = -1;\n this.posStateMask = 0;\n\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n }\n\n /**\n * Set dictionary size\n */\n setDictionarySize(dictionarySize: number): boolean {\n if (dictionarySize < 0) return false;\n if (this.dictionarySize !== dictionarySize) {\n this.dictionarySize = dictionarySize;\n this.dictionarySizeCheck = Math.max(dictionarySize, 1);\n this.outWindow.create(Math.max(this.dictionarySizeCheck, 1 << 12));\n }\n return true;\n }\n\n /**\n * Set lc, lp, pb properties\n */\n setLcLpPb(lc: number, lp: number, pb: number): boolean {\n if (lc > kNumLitContextBitsMax || lp > 4 || pb > kNumPosStatesBitsMax) {\n return false;\n }\n const numPosStates = 1 << pb;\n this.literalDecoder.create(lp, lc);\n this.lenDecoder.create(numPosStates);\n this.repLenDecoder.create(numPosStates);\n this.posStateMask = numPosStates - 1;\n return true;\n }\n\n /**\n * Set decoder properties from 5-byte buffer\n */\n setDecoderProperties(properties: Buffer | Uint8Array): boolean {\n const props = parseProperties(properties);\n if (!this.setLcLpPb(props.lc, props.lp, props.pb)) return false;\n return this.setDictionarySize(props.dictionarySize);\n }\n\n /**\n * Initialize probability tables\n */\n private initProbabilities(): void {\n initBitModels(this.isMatchDecoders);\n initBitModels(this.isRepDecoders);\n initBitModels(this.isRepG0Decoders);\n initBitModels(this.isRepG1Decoders);\n initBitModels(this.isRepG2Decoders);\n initBitModels(this.isRep0LongDecoders);\n initBitModels(this.posDecoders);\n this.literalDecoder.init();\n for (let i = kNumLenToPosStates - 1; i >= 0; i--) {\n this.posSlotDecoder[i].init();\n }\n this.lenDecoder.init();\n this.repLenDecoder.init();\n this.posAlignDecoder.init();\n }\n\n /**\n * Reset probabilities only (for LZMA2 state reset)\n */\n resetProbabilities(): void {\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n }\n\n /**\n * Reset dictionary position (for LZMA2 dictionary reset)\n */\n resetDictionary(): void {\n this.outWindow.init(false);\n this.totalPos = 0;\n }\n\n /**\n * Feed uncompressed data into the dictionary (for LZMA2 uncompressed chunks)\n * This updates the sliding window so subsequent LZMA chunks can reference this data.\n */\n feedUncompressed(data: Buffer): void {\n for (let i = 0; i < data.length; i++) {\n this.outWindow.putByte(data[i]);\n }\n this.totalPos += data.length;\n if (data.length > 0) {\n this.prevByte = data[data.length - 1];\n }\n }\n\n /**\n * Flush any remaining data in the OutWindow to the sink\n */\n flushOutWindow(): void {\n this.outWindow.flush();\n }\n\n /**\n * Decode LZMA data with streaming output (no buffer accumulation)\n * @param input - Compressed input buffer\n * @param inputOffset - Offset into input buffer\n * @param outSize - Expected output size\n * @param solid - If true, preserve state from previous decode\n * @returns Number of bytes written to sink\n */\n decodeWithSink(input: Buffer, inputOffset: number, outSize: number, solid = false): number {\n this.rangeDecoder.setInput(input, inputOffset);\n\n if (!solid) {\n this.outWindow.init(false);\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n } else {\n this.outWindow.init(true);\n }\n\n let outPos = 0;\n let cumPos = this.totalPos;\n\n while (outPos < outSize) {\n const posState = cumPos & this.posStateMask;\n\n if (this.rangeDecoder.decodeBit(this.isMatchDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n // Literal\n const decoder2 = this.literalDecoder.getDecoder(cumPos, this.prevByte);\n if (!stateIsCharState(this.state)) {\n this.prevByte = decoder2.decodeWithMatchByte(this.rangeDecoder, this.outWindow.getByte(this.rep0));\n } else {\n this.prevByte = decoder2.decodeNormal(this.rangeDecoder);\n }\n this.outWindow.putByte(this.prevByte);\n outPos++;\n this.state = stateUpdateChar(this.state);\n cumPos++;\n } else {\n // Match or rep\n let len: number;\n\n if (this.rangeDecoder.decodeBit(this.isRepDecoders, this.state) === 1) {\n // Rep match\n len = 0;\n if (this.rangeDecoder.decodeBit(this.isRepG0Decoders, this.state) === 0) {\n if (this.rangeDecoder.decodeBit(this.isRep0LongDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n this.state = stateUpdateShortRep(this.state);\n len = 1;\n }\n } else {\n let distance: number;\n if (this.rangeDecoder.decodeBit(this.isRepG1Decoders, this.state) === 0) {\n distance = this.rep1;\n } else {\n if (this.rangeDecoder.decodeBit(this.isRepG2Decoders, this.state) === 0) {\n distance = this.rep2;\n } else {\n distance = this.rep3;\n this.rep3 = this.rep2;\n }\n this.rep2 = this.rep1;\n }\n this.rep1 = this.rep0;\n this.rep0 = distance;\n }\n if (len === 0) {\n len = kMatchMinLen + this.repLenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateRep(this.state);\n }\n } else {\n // Normal match\n this.rep3 = this.rep2;\n this.rep2 = this.rep1;\n this.rep1 = this.rep0;\n len = kMatchMinLen + this.lenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateMatch(this.state);\n\n const posSlot = this.posSlotDecoder[getLenToPosState(len)].decode(this.rangeDecoder);\n if (posSlot >= kStartPosModelIndex) {\n const numDirectBits = (posSlot >> 1) - 1;\n this.rep0 = (2 | (posSlot & 1)) << numDirectBits;\n if (posSlot < kEndPosModelIndex) {\n this.rep0 += reverseDecodeFromArray(this.posDecoders, this.rep0 - posSlot - 1, this.rangeDecoder, numDirectBits);\n } else {\n this.rep0 += this.rangeDecoder.decodeDirectBits(numDirectBits - kNumAlignBits) << kNumAlignBits;\n this.rep0 += this.posAlignDecoder.reverseDecode(this.rangeDecoder);\n if (this.rep0 < 0) {\n if (this.rep0 === -1) break;\n throw new Error('LZMA: Invalid distance');\n }\n }\n } else {\n this.rep0 = posSlot;\n }\n }\n\n if (this.rep0 >= cumPos || this.rep0 >= this.dictionarySizeCheck) {\n throw new Error('LZMA: Invalid distance');\n }\n\n // Copy match bytes\n for (let i = 0; i < len; i++) {\n const b = this.outWindow.getByte(this.rep0);\n this.outWindow.putByte(b);\n outPos++;\n }\n cumPos += len;\n this.prevByte = this.outWindow.getByte(0);\n }\n }\n\n this.totalPos = cumPos;\n return outPos;\n }\n\n /**\n * Decode LZMA data directly into caller's buffer (zero-copy)\n * @param input - Compressed input buffer\n * @param inputOffset - Offset into input buffer\n * @param outSize - Expected output size\n * @param output - Pre-allocated output buffer to write to\n * @param outputOffset - Offset in output buffer to start writing\n * @param solid - If true, preserve state from previous decode\n * @returns Number of bytes written\n */\n decodeToBuffer(input: Buffer, inputOffset: number, outSize: number, output: Buffer, outputOffset: number, solid = false): number {\n this.rangeDecoder.setInput(input, inputOffset);\n\n if (!solid) {\n this.outWindow.init(false);\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n } else {\n // Solid mode: preserve dictionary state but reinitialize range decoder\n this.outWindow.init(true);\n }\n\n let outPos = outputOffset;\n const outEnd = outputOffset + outSize;\n let cumPos = this.totalPos;\n\n while (outPos < outEnd) {\n const posState = cumPos & this.posStateMask;\n\n if (this.rangeDecoder.decodeBit(this.isMatchDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n // Literal\n const decoder2 = this.literalDecoder.getDecoder(cumPos, this.prevByte);\n if (!stateIsCharState(this.state)) {\n this.prevByte = decoder2.decodeWithMatchByte(this.rangeDecoder, this.outWindow.getByte(this.rep0));\n } else {\n this.prevByte = decoder2.decodeNormal(this.rangeDecoder);\n }\n this.outWindow.putByte(this.prevByte);\n output[outPos++] = this.prevByte;\n this.state = stateUpdateChar(this.state);\n cumPos++;\n } else {\n // Match or rep\n let len: number;\n\n if (this.rangeDecoder.decodeBit(this.isRepDecoders, this.state) === 1) {\n // Rep match\n len = 0;\n if (this.rangeDecoder.decodeBit(this.isRepG0Decoders, this.state) === 0) {\n if (this.rangeDecoder.decodeBit(this.isRep0LongDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n this.state = stateUpdateShortRep(this.state);\n len = 1;\n }\n } else {\n let distance: number;\n if (this.rangeDecoder.decodeBit(this.isRepG1Decoders, this.state) === 0) {\n distance = this.rep1;\n } else {\n if (this.rangeDecoder.decodeBit(this.isRepG2Decoders, this.state) === 0) {\n distance = this.rep2;\n } else {\n distance = this.rep3;\n this.rep3 = this.rep2;\n }\n this.rep2 = this.rep1;\n }\n this.rep1 = this.rep0;\n this.rep0 = distance;\n }\n if (len === 0) {\n len = kMatchMinLen + this.repLenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateRep(this.state);\n }\n } else {\n // Normal match\n this.rep3 = this.rep2;\n this.rep2 = this.rep1;\n this.rep1 = this.rep0;\n len = kMatchMinLen + this.lenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateMatch(this.state);\n\n const posSlot = this.posSlotDecoder[getLenToPosState(len)].decode(this.rangeDecoder);\n if (posSlot >= kStartPosModelIndex) {\n const numDirectBits = (posSlot >> 1) - 1;\n this.rep0 = (2 | (posSlot & 1)) << numDirectBits;\n if (posSlot < kEndPosModelIndex) {\n this.rep0 += reverseDecodeFromArray(this.posDecoders, this.rep0 - posSlot - 1, this.rangeDecoder, numDirectBits);\n } else {\n this.rep0 += this.rangeDecoder.decodeDirectBits(numDirectBits - kNumAlignBits) << kNumAlignBits;\n this.rep0 += this.posAlignDecoder.reverseDecode(this.rangeDecoder);\n if (this.rep0 < 0) {\n if (this.rep0 === -1) break; // End marker\n throw new Error('LZMA: Invalid distance');\n }\n }\n } else {\n this.rep0 = posSlot;\n }\n }\n\n if (this.rep0 >= cumPos || this.rep0 >= this.dictionarySizeCheck) {\n throw new Error('LZMA: Invalid distance');\n }\n\n // Copy match bytes\n for (let i = 0; i < len; i++) {\n const b = this.outWindow.getByte(this.rep0);\n this.outWindow.putByte(b);\n output[outPos++] = b;\n }\n cumPos += len;\n this.prevByte = this.outWindow.getByte(0);\n }\n }\n\n this.totalPos = cumPos;\n return outPos - outputOffset;\n }\n\n /**\n * Decode LZMA data\n * @param input - Compressed input buffer\n * @param inputOffset - Offset into input buffer\n * @param outSize - Expected output size\n * @param solid - If true, preserve state from previous decode\n * @returns Decompressed data\n */\n decode(input: Buffer, inputOffset: number, outSize: number, solid = false): Buffer {\n const output = allocBufferUnsafe(outSize);\n this.decodeToBuffer(input, inputOffset, outSize, output, 0, solid);\n return output;\n }\n}\n\n/**\n * Decode LZMA1 data synchronously\n *\n * Note: LZMA1 is a low-level format. Native bindings (lzma-native) expect\n * self-describing data (like XZ), but here we accept raw LZMA with properties\n * specified separately. Pure JS implementation is used for LZMA1.\n *\n * @param input - Compressed data (without 5-byte properties header)\n * @param properties - 5-byte LZMA properties\n * @param outSize - Expected output size\n * @param outputSink - Optional output sink with write callback for streaming (returns bytes written)\n * @returns Decompressed data (or bytes written if outputSink provided)\n */\nexport function decodeLzma(input: Buffer, properties: Buffer | Uint8Array, outSize: number, outputSink?: { write(buffer: Buffer): void }): Buffer | number {\n const decoder = new LzmaDecoder(outputSink as OutputSink);\n decoder.setDecoderProperties(properties);\n if (outputSink) {\n // Zero-copy mode: write to sink during decode\n const bytesWritten = decoder.decodeWithSink(input, 0, outSize, false);\n decoder.flushOutWindow();\n return bytesWritten;\n }\n // Buffering mode: pre-allocated buffer, direct writes (zero-copy)\n return decoder.decode(input, 0, outSize, false);\n}\n"],"names":["LzmaDecoder","decodeLzma","LenDecoder","choice","initBitModels","lowCoder","midCoder","highCoder","BitTreeDecoder","numPosStates","create","init","i","decode","rangeDecoder","posState","decodeBit","LiteralDecoder2","decoders","decodeNormal","symbol","decodeWithMatchByte","matchByte","matchBit","bit","LiteralDecoder","numPosBits","numPrevBits","posMask","coders","length","getDecoder","pos","prevByte","index","decoder","OutWindow","sink","buffer","allocBufferUnsafe","windowSize","streamPos","solid","putByte","b","flush","size","chunk","bufferFrom","slice","write","getByte","distance","copyBlock","len","copyTo","output","outputOffset","count","srcPos","firstPart","copy","outputSink","outWindow","RangeDecoder","isMatchDecoders","kNumStates","kNumPosStatesBitsMax","isRepDecoders","isRepG0Decoders","isRepG1Decoders","isRepG2Decoders","isRep0LongDecoders","posSlotDecoder","posDecoders","kNumFullDistances","kEndPosModelIndex","posAlignDecoder","kNumAlignBits","lenDecoder","repLenDecoder","literalDecoder","kNumLenToPosStates","kNumPosSlotBits","dictionarySize","dictionarySizeCheck","posStateMask","state","rep0","rep1","rep2","rep3","totalPos","setDictionarySize","Math","max","setLcLpPb","lc","lp","pb","kNumLitContextBitsMax","setDecoderProperties","properties","props","parseProperties","initProbabilities","resetProbabilities","resetDictionary","feedUncompressed","data","flushOutWindow","decodeWithSink","input","inputOffset","outSize","setInput","outPos","cumPos","decoder2","stateIsCharState","stateUpdateChar","stateUpdateShortRep","kMatchMinLen","stateUpdateRep","stateUpdateMatch","posSlot","getLenToPosState","kStartPosModelIndex","numDirectBits","reverseDecodeFromArray","decodeDirectBits","reverseDecode","Error","decodeToBuffer","outEnd","bytesWritten"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/xz-compat/src/lzma/sync/LzmaDecoder.ts"],"sourcesContent":["/**\n * Synchronous LZMA1 Decoder\n *\n * Decodes LZMA1 compressed data from a buffer.\n * All operations are synchronous.\n */\n\nimport { allocBufferUnsafe, bufferFrom } from 'extract-base-iterator';\nimport {\n getLenToPosState,\n initBitModels,\n kEndPosModelIndex,\n kMatchMinLen,\n kNumAlignBits,\n kNumFullDistances,\n kNumLenToPosStates,\n kNumLitContextBitsMax,\n kNumPosSlotBits,\n kNumPosStatesBitsMax,\n kNumStates,\n kStartPosModelIndex,\n type OutputSink,\n parseProperties,\n stateIsCharState,\n stateUpdateChar,\n stateUpdateMatch,\n stateUpdateRep,\n stateUpdateShortRep,\n} from '../types.ts';\nimport { BitTreeDecoder, RangeDecoder, reverseDecodeFromArray } from './RangeDecoder.ts';\n\n/**\n * Length decoder for match/rep lengths\n */\nclass LenDecoder {\n private choice: Uint16Array;\n private lowCoder: BitTreeDecoder[];\n private midCoder: BitTreeDecoder[];\n private highCoder: BitTreeDecoder;\n private numPosStates: number;\n\n constructor() {\n this.choice = initBitModels(null, 2);\n this.lowCoder = [];\n this.midCoder = [];\n this.highCoder = new BitTreeDecoder(8);\n this.numPosStates = 0;\n }\n\n create(numPosStates: number): void {\n for (; this.numPosStates < numPosStates; this.numPosStates++) {\n this.lowCoder[this.numPosStates] = new BitTreeDecoder(3);\n this.midCoder[this.numPosStates] = new BitTreeDecoder(3);\n }\n }\n\n init(): void {\n initBitModels(this.choice);\n for (let i = this.numPosStates - 1; i >= 0; i--) {\n this.lowCoder[i].init();\n this.midCoder[i].init();\n }\n this.highCoder.init();\n }\n\n decode(rangeDecoder: RangeDecoder, posState: number): number {\n if (rangeDecoder.decodeBit(this.choice, 0) === 0) {\n return this.lowCoder[posState].decode(rangeDecoder);\n }\n if (rangeDecoder.decodeBit(this.choice, 1) === 0) {\n return 8 + this.midCoder[posState].decode(rangeDecoder);\n }\n return 16 + this.highCoder.decode(rangeDecoder);\n }\n}\n\n/**\n * Single literal decoder (decodes one byte)\n */\nclass LiteralDecoder2 {\n private decoders: Uint16Array;\n\n constructor() {\n this.decoders = initBitModels(null, 0x300);\n }\n\n init(): void {\n initBitModels(this.decoders);\n }\n\n decodeNormal(rangeDecoder: RangeDecoder): number {\n let symbol = 1;\n do {\n symbol = (symbol << 1) | rangeDecoder.decodeBit(this.decoders, symbol);\n } while (symbol < 0x100);\n return symbol & 0xff;\n }\n\n decodeWithMatchByte(rangeDecoder: RangeDecoder, matchByte: number): number {\n let symbol = 1;\n do {\n const matchBit = (matchByte >> 7) & 1;\n matchByte <<= 1;\n const bit = rangeDecoder.decodeBit(this.decoders, ((1 + matchBit) << 8) + symbol);\n symbol = (symbol << 1) | bit;\n if (matchBit !== bit) {\n while (symbol < 0x100) {\n symbol = (symbol << 1) | rangeDecoder.decodeBit(this.decoders, symbol);\n }\n break;\n }\n } while (symbol < 0x100);\n return symbol & 0xff;\n }\n}\n\n/**\n * Literal decoder (array of single decoders)\n */\nclass LiteralDecoder {\n private numPosBits: number;\n private numPrevBits: number;\n private posMask: number;\n private coders: (LiteralDecoder2 | undefined)[];\n\n constructor() {\n this.numPosBits = 0;\n this.numPrevBits = 0;\n this.posMask = 0;\n this.coders = [];\n }\n\n create(numPosBits: number, numPrevBits: number): void {\n if (this.coders.length > 0 && this.numPrevBits === numPrevBits && this.numPosBits === numPosBits) {\n return;\n }\n this.numPosBits = numPosBits;\n this.posMask = (1 << numPosBits) - 1;\n this.numPrevBits = numPrevBits;\n this.coders = [];\n }\n\n init(): void {\n for (let i = 0; i < this.coders.length; i++) {\n if (this.coders[i]) {\n this.coders[i]?.init();\n }\n }\n }\n\n getDecoder(pos: number, prevByte: number): LiteralDecoder2 {\n const index = ((pos & this.posMask) << this.numPrevBits) + ((prevByte & 0xff) >>> (8 - this.numPrevBits));\n let decoder = this.coders[index];\n if (!decoder) {\n decoder = new LiteralDecoder2();\n this.coders[index] = decoder;\n }\n return decoder;\n }\n}\n\n/**\n * Output window (sliding dictionary)\n */\nclass OutWindow {\n private buffer: Buffer;\n private windowSize: number;\n private pos: number;\n private sink?: {\n write(buffer: Buffer): void;\n };\n private streamPos: number;\n\n constructor(sink?: OutputSink) {\n this.buffer = allocBufferUnsafe(0); // Replaced by create() before use\n this.windowSize = 0;\n this.pos = 0;\n this.sink = sink;\n this.streamPos = 0;\n }\n\n create(windowSize: number): void {\n if (!this.buffer || this.windowSize !== windowSize) {\n this.buffer = allocBufferUnsafe(windowSize);\n }\n this.windowSize = windowSize;\n this.pos = 0;\n this.streamPos = 0;\n }\n\n init(solid: boolean): void {\n if (!solid) {\n this.pos = 0;\n this.streamPos = 0;\n }\n }\n\n putByte(b: number): void {\n this.buffer[this.pos++] = b;\n if (this.pos >= this.windowSize) {\n if (this.sink) {\n this.flush();\n this.pos = 0;\n this.streamPos = 0; // Reset streamPos after wrap to track new data from pos 0\n } else {\n this.pos = 0;\n }\n }\n }\n\n flush(): void {\n const size = this.pos - this.streamPos;\n if (size > 0 && this.sink) {\n // Use bufferFrom to create a COPY, not a view - the buffer is reused after wrapping\n const chunk = bufferFrom(this.buffer.slice(this.streamPos, this.streamPos + size));\n this.sink.write(chunk);\n this.streamPos = this.pos;\n }\n }\n\n getByte(distance: number): number {\n let pos = this.pos - distance - 1;\n if (pos < 0) {\n pos += this.windowSize;\n }\n return this.buffer[pos];\n }\n\n copyBlock(distance: number, len: number): void {\n let pos = this.pos - distance - 1;\n if (pos < 0) {\n pos += this.windowSize;\n }\n for (let i = 0; i < len; i++) {\n if (pos >= this.windowSize) {\n pos = 0;\n }\n this.putByte(this.buffer[pos++]);\n }\n }\n\n /**\n * Copy decoded data to output buffer\n */\n copyTo(output: Buffer, outputOffset: number, count: number): void {\n const srcPos = this.pos - count;\n if (srcPos < 0) {\n // Wrap around case - data spans end and beginning of buffer\n const firstPart = -srcPos;\n this.buffer.copy(output, outputOffset, this.windowSize + srcPos, this.windowSize);\n this.buffer.copy(output, outputOffset + firstPart, 0, count - firstPart);\n } else {\n this.buffer.copy(output, outputOffset, srcPos, srcPos + count);\n }\n }\n}\n\n/**\n * Synchronous LZMA1 decoder\n */\nexport class LzmaDecoder {\n private outWindow: OutWindow;\n private rangeDecoder: RangeDecoder;\n\n // Probability models\n private isMatchDecoders: Uint16Array;\n private isRepDecoders: Uint16Array;\n private isRepG0Decoders: Uint16Array;\n private isRepG1Decoders: Uint16Array;\n private isRepG2Decoders: Uint16Array;\n private isRep0LongDecoders: Uint16Array;\n private posSlotDecoder: BitTreeDecoder[];\n private posDecoders: Uint16Array;\n private posAlignDecoder: BitTreeDecoder;\n private lenDecoder: LenDecoder;\n private repLenDecoder: LenDecoder;\n private literalDecoder: LiteralDecoder;\n\n // Properties\n private dictionarySize: number;\n private dictionarySizeCheck: number;\n private posStateMask: number;\n\n // State (preserved across solid calls)\n private state: number;\n private rep0: number;\n private rep1: number;\n private rep2: number;\n private rep3: number;\n private prevByte: number;\n private totalPos: number;\n\n constructor(outputSink?: OutputSink) {\n this.outWindow = new OutWindow(outputSink);\n this.rangeDecoder = new RangeDecoder();\n\n this.isMatchDecoders = initBitModels(null, kNumStates << kNumPosStatesBitsMax);\n this.isRepDecoders = initBitModels(null, kNumStates);\n this.isRepG0Decoders = initBitModels(null, kNumStates);\n this.isRepG1Decoders = initBitModels(null, kNumStates);\n this.isRepG2Decoders = initBitModels(null, kNumStates);\n this.isRep0LongDecoders = initBitModels(null, kNumStates << kNumPosStatesBitsMax);\n this.posSlotDecoder = [];\n this.posDecoders = initBitModels(null, kNumFullDistances - kEndPosModelIndex);\n this.posAlignDecoder = new BitTreeDecoder(kNumAlignBits);\n this.lenDecoder = new LenDecoder();\n this.repLenDecoder = new LenDecoder();\n this.literalDecoder = new LiteralDecoder();\n\n for (let i = 0; i < kNumLenToPosStates; i++) {\n this.posSlotDecoder[i] = new BitTreeDecoder(kNumPosSlotBits);\n }\n\n this.dictionarySize = -1;\n this.dictionarySizeCheck = -1;\n this.posStateMask = 0;\n\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n }\n\n /**\n * Set dictionary size\n */\n setDictionarySize(dictionarySize: number): boolean {\n if (dictionarySize < 0) return false;\n if (this.dictionarySize !== dictionarySize) {\n this.dictionarySize = dictionarySize;\n this.dictionarySizeCheck = Math.max(dictionarySize, 1);\n this.outWindow.create(Math.max(this.dictionarySizeCheck, 1 << 12));\n }\n return true;\n }\n\n /**\n * Set lc, lp, pb properties\n */\n setLcLpPb(lc: number, lp: number, pb: number): boolean {\n if (lc > kNumLitContextBitsMax || lp > 4 || pb > kNumPosStatesBitsMax) {\n return false;\n }\n const numPosStates = 1 << pb;\n this.literalDecoder.create(lp, lc);\n this.lenDecoder.create(numPosStates);\n this.repLenDecoder.create(numPosStates);\n this.posStateMask = numPosStates - 1;\n return true;\n }\n\n /**\n * Set decoder properties from 5-byte buffer\n */\n setDecoderProperties(properties: Buffer | Uint8Array): boolean {\n const props = parseProperties(properties);\n if (!this.setLcLpPb(props.lc, props.lp, props.pb)) return false;\n return this.setDictionarySize(props.dictionarySize);\n }\n\n /**\n * Initialize probability tables\n */\n private initProbabilities(): void {\n initBitModels(this.isMatchDecoders);\n initBitModels(this.isRepDecoders);\n initBitModels(this.isRepG0Decoders);\n initBitModels(this.isRepG1Decoders);\n initBitModels(this.isRepG2Decoders);\n initBitModels(this.isRep0LongDecoders);\n initBitModels(this.posDecoders);\n this.literalDecoder.init();\n for (let i = kNumLenToPosStates - 1; i >= 0; i--) {\n this.posSlotDecoder[i].init();\n }\n this.lenDecoder.init();\n this.repLenDecoder.init();\n this.posAlignDecoder.init();\n }\n\n /**\n * Reset probabilities only (for LZMA2 state reset)\n */\n resetProbabilities(): void {\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n }\n\n /**\n * Reset dictionary position (for LZMA2 dictionary reset)\n */\n resetDictionary(): void {\n this.outWindow.init(false);\n this.totalPos = 0;\n }\n\n /**\n * Feed uncompressed data into the dictionary (for LZMA2 uncompressed chunks)\n * This updates the sliding window so subsequent LZMA chunks can reference this data.\n */\n feedUncompressed(data: Buffer): void {\n for (let i = 0; i < data.length; i++) {\n this.outWindow.putByte(data[i]);\n }\n this.totalPos += data.length;\n if (data.length > 0) {\n this.prevByte = data[data.length - 1];\n }\n }\n\n /**\n * Flush any remaining data in the OutWindow to the sink\n */\n flushOutWindow(): void {\n this.outWindow.flush();\n }\n\n /**\n * Decode LZMA data with streaming output (no buffer accumulation)\n * @param input - Compressed input buffer\n * @param inputOffset - Offset into input buffer\n * @param outSize - Expected output size\n * @param solid - If true, preserve state from previous decode\n * @returns Number of bytes written to sink\n */\n decodeWithSink(input: Buffer, inputOffset: number, outSize: number, solid = false): number {\n this.rangeDecoder.setInput(input, inputOffset);\n\n if (!solid) {\n this.outWindow.init(false);\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n } else {\n this.outWindow.init(true);\n }\n\n let outPos = 0;\n let cumPos = this.totalPos;\n\n while (outPos < outSize) {\n const posState = cumPos & this.posStateMask;\n\n if (this.rangeDecoder.decodeBit(this.isMatchDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n // Literal\n const decoder2 = this.literalDecoder.getDecoder(cumPos, this.prevByte);\n if (!stateIsCharState(this.state)) {\n this.prevByte = decoder2.decodeWithMatchByte(this.rangeDecoder, this.outWindow.getByte(this.rep0));\n } else {\n this.prevByte = decoder2.decodeNormal(this.rangeDecoder);\n }\n this.outWindow.putByte(this.prevByte);\n outPos++;\n this.state = stateUpdateChar(this.state);\n cumPos++;\n } else {\n // Match or rep\n let len: number;\n\n if (this.rangeDecoder.decodeBit(this.isRepDecoders, this.state) === 1) {\n // Rep match\n len = 0;\n if (this.rangeDecoder.decodeBit(this.isRepG0Decoders, this.state) === 0) {\n if (this.rangeDecoder.decodeBit(this.isRep0LongDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n this.state = stateUpdateShortRep(this.state);\n len = 1;\n }\n } else {\n let distance: number;\n if (this.rangeDecoder.decodeBit(this.isRepG1Decoders, this.state) === 0) {\n distance = this.rep1;\n } else {\n if (this.rangeDecoder.decodeBit(this.isRepG2Decoders, this.state) === 0) {\n distance = this.rep2;\n } else {\n distance = this.rep3;\n this.rep3 = this.rep2;\n }\n this.rep2 = this.rep1;\n }\n this.rep1 = this.rep0;\n this.rep0 = distance;\n }\n if (len === 0) {\n len = kMatchMinLen + this.repLenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateRep(this.state);\n }\n } else {\n // Normal match\n this.rep3 = this.rep2;\n this.rep2 = this.rep1;\n this.rep1 = this.rep0;\n len = kMatchMinLen + this.lenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateMatch(this.state);\n\n const posSlot = this.posSlotDecoder[getLenToPosState(len)].decode(this.rangeDecoder);\n if (posSlot >= kStartPosModelIndex) {\n const numDirectBits = (posSlot >> 1) - 1;\n this.rep0 = (2 | (posSlot & 1)) << numDirectBits;\n if (posSlot < kEndPosModelIndex) {\n this.rep0 += reverseDecodeFromArray(this.posDecoders, this.rep0 - posSlot - 1, this.rangeDecoder, numDirectBits);\n } else {\n this.rep0 += this.rangeDecoder.decodeDirectBits(numDirectBits - kNumAlignBits) << kNumAlignBits;\n this.rep0 += this.posAlignDecoder.reverseDecode(this.rangeDecoder);\n if (this.rep0 < 0) {\n if (this.rep0 === -1) break;\n throw new Error('LZMA: Invalid distance');\n }\n }\n } else {\n this.rep0 = posSlot;\n }\n }\n\n if (this.rep0 >= cumPos || this.rep0 >= this.dictionarySizeCheck) {\n throw new Error('LZMA: Invalid distance');\n }\n\n // Copy match bytes\n for (let i = 0; i < len; i++) {\n const b = this.outWindow.getByte(this.rep0);\n this.outWindow.putByte(b);\n outPos++;\n }\n cumPos += len;\n this.prevByte = this.outWindow.getByte(0);\n }\n }\n\n this.totalPos = cumPos;\n return outPos;\n }\n\n /**\n * Decode LZMA data directly into caller's buffer (zero-copy)\n * @param input - Compressed input buffer\n * @param inputOffset - Offset into input buffer\n * @param outSize - Expected output size\n * @param output - Pre-allocated output buffer to write to\n * @param outputOffset - Offset in output buffer to start writing\n * @param solid - If true, preserve state from previous decode\n * @returns Number of bytes written\n */\n decodeToBuffer(input: Buffer, inputOffset: number, outSize: number, output: Buffer, outputOffset: number, solid = false): number {\n this.rangeDecoder.setInput(input, inputOffset);\n\n if (!solid) {\n this.outWindow.init(false);\n this.initProbabilities();\n this.state = 0;\n this.rep0 = 0;\n this.rep1 = 0;\n this.rep2 = 0;\n this.rep3 = 0;\n this.prevByte = 0;\n this.totalPos = 0;\n } else {\n // Solid mode: preserve dictionary state but reinitialize range decoder\n this.outWindow.init(true);\n }\n\n let outPos = outputOffset;\n const outEnd = outputOffset + outSize;\n let cumPos = this.totalPos;\n\n while (outPos < outEnd) {\n const posState = cumPos & this.posStateMask;\n\n if (this.rangeDecoder.decodeBit(this.isMatchDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n // Literal\n const decoder2 = this.literalDecoder.getDecoder(cumPos, this.prevByte);\n if (!stateIsCharState(this.state)) {\n this.prevByte = decoder2.decodeWithMatchByte(this.rangeDecoder, this.outWindow.getByte(this.rep0));\n } else {\n this.prevByte = decoder2.decodeNormal(this.rangeDecoder);\n }\n this.outWindow.putByte(this.prevByte);\n output[outPos++] = this.prevByte;\n this.state = stateUpdateChar(this.state);\n cumPos++;\n } else {\n // Match or rep\n let len: number;\n\n if (this.rangeDecoder.decodeBit(this.isRepDecoders, this.state) === 1) {\n // Rep match\n len = 0;\n if (this.rangeDecoder.decodeBit(this.isRepG0Decoders, this.state) === 0) {\n if (this.rangeDecoder.decodeBit(this.isRep0LongDecoders, (this.state << kNumPosStatesBitsMax) + posState) === 0) {\n this.state = stateUpdateShortRep(this.state);\n len = 1;\n }\n } else {\n let distance: number;\n if (this.rangeDecoder.decodeBit(this.isRepG1Decoders, this.state) === 0) {\n distance = this.rep1;\n } else {\n if (this.rangeDecoder.decodeBit(this.isRepG2Decoders, this.state) === 0) {\n distance = this.rep2;\n } else {\n distance = this.rep3;\n this.rep3 = this.rep2;\n }\n this.rep2 = this.rep1;\n }\n this.rep1 = this.rep0;\n this.rep0 = distance;\n }\n if (len === 0) {\n len = kMatchMinLen + this.repLenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateRep(this.state);\n }\n } else {\n // Normal match\n this.rep3 = this.rep2;\n this.rep2 = this.rep1;\n this.rep1 = this.rep0;\n len = kMatchMinLen + this.lenDecoder.decode(this.rangeDecoder, posState);\n this.state = stateUpdateMatch(this.state);\n\n const posSlot = this.posSlotDecoder[getLenToPosState(len)].decode(this.rangeDecoder);\n if (posSlot >= kStartPosModelIndex) {\n const numDirectBits = (posSlot >> 1) - 1;\n this.rep0 = (2 | (posSlot & 1)) << numDirectBits;\n if (posSlot < kEndPosModelIndex) {\n this.rep0 += reverseDecodeFromArray(this.posDecoders, this.rep0 - posSlot - 1, this.rangeDecoder, numDirectBits);\n } else {\n this.rep0 += this.rangeDecoder.decodeDirectBits(numDirectBits - kNumAlignBits) << kNumAlignBits;\n this.rep0 += this.posAlignDecoder.reverseDecode(this.rangeDecoder);\n if (this.rep0 < 0) {\n if (this.rep0 === -1) break; // End marker\n throw new Error('LZMA: Invalid distance');\n }\n }\n } else {\n this.rep0 = posSlot;\n }\n }\n\n if (this.rep0 >= cumPos || this.rep0 >= this.dictionarySizeCheck) {\n throw new Error('LZMA: Invalid distance');\n }\n\n // Copy match bytes\n for (let i = 0; i < len; i++) {\n const b = this.outWindow.getByte(this.rep0);\n this.outWindow.putByte(b);\n output[outPos++] = b;\n }\n cumPos += len;\n this.prevByte = this.outWindow.getByte(0);\n }\n }\n\n this.totalPos = cumPos;\n return outPos - outputOffset;\n }\n\n /**\n * Decode LZMA data\n * @param input - Compressed input buffer\n * @param inputOffset - Offset into input buffer\n * @param outSize - Expected output size\n * @param solid - If true, preserve state from previous decode\n * @returns Decompressed data\n */\n decode(input: Buffer, inputOffset: number, outSize: number, solid = false): Buffer {\n const output = allocBufferUnsafe(outSize);\n this.decodeToBuffer(input, inputOffset, outSize, output, 0, solid);\n return output;\n }\n}\n\n/**\n * Decode LZMA1 data synchronously\n *\n * Note: LZMA1 is a low-level format. Native bindings (lzma-native) expect\n * self-describing data (like XZ), but here we accept raw LZMA with properties\n * specified separately. Pure JS implementation is used for LZMA1.\n *\n * @param input - Compressed data (without 5-byte properties header)\n * @param properties - 5-byte LZMA properties\n * @param outSize - Expected output size\n * @param outputSink - Optional output sink with write callback for streaming (returns bytes written)\n * @returns Decompressed data (or bytes written if outputSink provided)\n */\nexport function decodeLzma(input: Buffer, properties: Buffer | Uint8Array, outSize: number, outputSink?: { write(buffer: Buffer): void }): Buffer | number {\n const decoder = new LzmaDecoder(outputSink as OutputSink);\n decoder.setDecoderProperties(properties);\n if (outputSink) {\n // Zero-copy mode: write to sink during decode\n const bytesWritten = decoder.decodeWithSink(input, 0, outSize, false);\n decoder.flushOutWindow();\n return bytesWritten;\n }\n // Buffering mode: pre-allocated buffer, direct writes (zero-copy)\n return decoder.decode(input, 0, outSize, false);\n}\n"],"names":["LzmaDecoder","decodeLzma","LenDecoder","choice","initBitModels","lowCoder","midCoder","highCoder","BitTreeDecoder","numPosStates","create","init","i","decode","rangeDecoder","posState","decodeBit","LiteralDecoder2","decoders","decodeNormal","symbol","decodeWithMatchByte","matchByte","matchBit","bit","LiteralDecoder","numPosBits","numPrevBits","posMask","coders","length","getDecoder","pos","prevByte","index","decoder","OutWindow","sink","buffer","allocBufferUnsafe","windowSize","streamPos","solid","putByte","b","flush","size","chunk","bufferFrom","slice","write","getByte","distance","copyBlock","len","copyTo","output","outputOffset","count","srcPos","firstPart","copy","outputSink","outWindow","RangeDecoder","isMatchDecoders","kNumStates","kNumPosStatesBitsMax","isRepDecoders","isRepG0Decoders","isRepG1Decoders","isRepG2Decoders","isRep0LongDecoders","posSlotDecoder","posDecoders","kNumFullDistances","kEndPosModelIndex","posAlignDecoder","kNumAlignBits","lenDecoder","repLenDecoder","literalDecoder","kNumLenToPosStates","kNumPosSlotBits","dictionarySize","dictionarySizeCheck","posStateMask","state","rep0","rep1","rep2","rep3","totalPos","setDictionarySize","Math","max","setLcLpPb","lc","lp","pb","kNumLitContextBitsMax","setDecoderProperties","properties","props","parseProperties","initProbabilities","resetProbabilities","resetDictionary","feedUncompressed","data","flushOutWindow","decodeWithSink","input","inputOffset","outSize","setInput","outPos","cumPos","decoder2","stateIsCharState","stateUpdateChar","stateUpdateShortRep","kMatchMinLen","stateUpdateRep","stateUpdateMatch","posSlot","getLenToPosState","kStartPosModelIndex","numDirectBits","reverseDecodeFromArray","decodeDirectBits","reverseDecode","Error","decodeToBuffer","outEnd","bytesWritten"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/iterators/xz-compat/src/lzma/sync/RangeDecoder.ts"],"sourcesContent":["/**\n * Synchronous Range Decoder for LZMA\n *\n * Decodes arithmetic-coded bits from a buffer.\n * All operations are synchronous - for streaming use the async version.\n */\n\nimport { allocBuffer } from 'extract-base-iterator';\n\n/**\n * Range decoder for synchronous buffer-based LZMA decoding\n */\nexport class RangeDecoder {\n private input: Buffer;\n private pos: number;\n private code: number;\n private range: number;\n\n constructor() {\n this.input = allocBuffer(0); // Replaced by setInput() before use\n this.pos = 0;\n this.code = 0;\n this.range = 0;\n }\n\n /**\n * Set input buffer and initialize decoder state\n */\n setInput(input: Buffer, offset = 0): void {\n this.input = input;\n this.pos = offset;\n this.init();\n }\n\n /**\n * Initialize range decoder (reads first 5 bytes)\n */\n private init(): void {\n this.code = 0;\n this.range = -1; // 0xFFFFFFFF as signed int\n\n // First byte is ignored (should be 0)\n this.pos++;\n\n // Read 4 bytes into code\n for (let i = 0; i < 4; i++) {\n this.code = (this.code << 8) | this.input[this.pos++];\n }\n }\n\n /**\n * Get current position in input buffer\n */\n getPosition(): number {\n return this.pos;\n }\n\n /**\n * Normalize range if needed (read more bytes)\n */\n private normalize(): void {\n if ((this.range & 0xff000000) === 0) {\n this.code = (this.code << 8) | this.input[this.pos++];\n this.range <<= 8;\n }\n }\n\n /**\n * Decode a single bit using probability model\n * @param probs - Probability array\n * @param index - Index into probability array\n * @returns Decoded bit (0 or 1)\n */\n decodeBit(probs: Uint16Array, index: number): number {\n const prob = probs[index];\n const newBound = (this.range >>> 11) * prob;\n\n if ((this.code ^ 0x80000000) < (newBound ^ 0x80000000)) {\n this.range = newBound;\n probs[index] += (2048 - prob) >>> 5;\n this.normalize();\n return 0;\n }\n this.range -= newBound;\n this.code -= newBound;\n probs[index] -= prob >>> 5;\n this.normalize();\n return 1;\n }\n\n /**\n * Decode direct bits (not probability-based)\n * @param numTotalBits - Number of bits to decode\n * @returns Decoded value\n */\n decodeDirectBits(numTotalBits: number): number {\n let result = 0;\n for (let i = numTotalBits; i > 0; i--) {\n this.range >>>= 1;\n const t = (this.code - this.range) >>> 31;\n this.code -= this.range & (t - 1);\n result = (result << 1) | (1 - t);\n this.normalize();\n }\n return result;\n }\n}\n\n/**\n * Bit tree decoder for multi-bit symbols\n */\nexport class BitTreeDecoder {\n private numBitLevels: number;\n private models: Uint16Array;\n\n constructor(numBitLevels: number) {\n this.numBitLevels = numBitLevels;\n this.models = new Uint16Array(1 << numBitLevels);\n this.init();\n }\n\n /**\n * Initialize probability models\n */\n init(): void {\n for (let i = 0; i < this.models.length; i++) {\n this.models[i] = 1024; // kProbInitValue\n }\n }\n\n /**\n * Decode a symbol (forward bit order)\n */\n decode(rangeDecoder: RangeDecoder): number {\n let m = 1;\n for (let i = this.numBitLevels; i > 0; i--) {\n m = (m << 1) | rangeDecoder.decodeBit(this.models, m);\n }\n return m - (1 << this.numBitLevels);\n }\n\n /**\n * Decode a symbol (reverse bit order)\n */\n reverseDecode(rangeDecoder: RangeDecoder): number {\n let m = 1;\n let symbol = 0;\n for (let i = 0; i < this.numBitLevels; i++) {\n const bit = rangeDecoder.decodeBit(this.models, m);\n m = (m << 1) | bit;\n symbol |= bit << i;\n }\n return symbol;\n }\n}\n\n/**\n * Static reverse decode from external probability array\n */\nexport function reverseDecodeFromArray(models: Uint16Array, startIndex: number, rangeDecoder: RangeDecoder, numBitLevels: number): number {\n let m = 1;\n let symbol = 0;\n for (let i = 0; i < numBitLevels; i++) {\n const bit = rangeDecoder.decodeBit(models, startIndex + m);\n m = (m << 1) | bit;\n symbol |= bit << i;\n }\n return symbol;\n}\n"],"names":["BitTreeDecoder","RangeDecoder","reverseDecodeFromArray","input","allocBuffer","pos","code","range","setInput","offset","init","i","getPosition","normalize","decodeBit","probs","index","prob","newBound","decodeDirectBits","numTotalBits","result","t","numBitLevels","models","Uint16Array","length","decode","rangeDecoder","m","reverseDecode","symbol","bit","startIndex"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/xz-compat/src/lzma/sync/RangeDecoder.ts"],"sourcesContent":["/**\n * Synchronous Range Decoder for LZMA\n *\n * Decodes arithmetic-coded bits from a buffer.\n * All operations are synchronous - for streaming use the async version.\n */\n\nimport { allocBuffer } from 'extract-base-iterator';\n\n/**\n * Range decoder for synchronous buffer-based LZMA decoding\n */\nexport class RangeDecoder {\n private input: Buffer;\n private pos: number;\n private code: number;\n private range: number;\n\n constructor() {\n this.input = allocBuffer(0); // Replaced by setInput() before use\n this.pos = 0;\n this.code = 0;\n this.range = 0;\n }\n\n /**\n * Set input buffer and initialize decoder state\n */\n setInput(input: Buffer, offset = 0): void {\n this.input = input;\n this.pos = offset;\n this.init();\n }\n\n /**\n * Initialize range decoder (reads first 5 bytes)\n */\n private init(): void {\n this.code = 0;\n this.range = -1; // 0xFFFFFFFF as signed int\n\n // First byte is ignored (should be 0)\n this.pos++;\n\n // Read 4 bytes into code\n for (let i = 0; i < 4; i++) {\n this.code = (this.code << 8) | this.input[this.pos++];\n }\n }\n\n /**\n * Get current position in input buffer\n */\n getPosition(): number {\n return this.pos;\n }\n\n /**\n * Normalize range if needed (read more bytes)\n */\n private normalize(): void {\n if ((this.range & 0xff000000) === 0) {\n this.code = (this.code << 8) | this.input[this.pos++];\n this.range <<= 8;\n }\n }\n\n /**\n * Decode a single bit using probability model\n * @param probs - Probability array\n * @param index - Index into probability array\n * @returns Decoded bit (0 or 1)\n */\n decodeBit(probs: Uint16Array, index: number): number {\n const prob = probs[index];\n const newBound = (this.range >>> 11) * prob;\n\n if ((this.code ^ 0x80000000) < (newBound ^ 0x80000000)) {\n this.range = newBound;\n probs[index] += (2048 - prob) >>> 5;\n this.normalize();\n return 0;\n }\n this.range -= newBound;\n this.code -= newBound;\n probs[index] -= prob >>> 5;\n this.normalize();\n return 1;\n }\n\n /**\n * Decode direct bits (not probability-based)\n * @param numTotalBits - Number of bits to decode\n * @returns Decoded value\n */\n decodeDirectBits(numTotalBits: number): number {\n let result = 0;\n for (let i = numTotalBits; i > 0; i--) {\n this.range >>>= 1;\n const t = (this.code - this.range) >>> 31;\n this.code -= this.range & (t - 1);\n result = (result << 1) | (1 - t);\n this.normalize();\n }\n return result;\n }\n}\n\n/**\n * Bit tree decoder for multi-bit symbols\n */\nexport class BitTreeDecoder {\n private numBitLevels: number;\n private models: Uint16Array;\n\n constructor(numBitLevels: number) {\n this.numBitLevels = numBitLevels;\n this.models = new Uint16Array(1 << numBitLevels);\n this.init();\n }\n\n /**\n * Initialize probability models\n */\n init(): void {\n for (let i = 0; i < this.models.length; i++) {\n this.models[i] = 1024; // kProbInitValue\n }\n }\n\n /**\n * Decode a symbol (forward bit order)\n */\n decode(rangeDecoder: RangeDecoder): number {\n let m = 1;\n for (let i = this.numBitLevels; i > 0; i--) {\n m = (m << 1) | rangeDecoder.decodeBit(this.models, m);\n }\n return m - (1 << this.numBitLevels);\n }\n\n /**\n * Decode a symbol (reverse bit order)\n */\n reverseDecode(rangeDecoder: RangeDecoder): number {\n let m = 1;\n let symbol = 0;\n for (let i = 0; i < this.numBitLevels; i++) {\n const bit = rangeDecoder.decodeBit(this.models, m);\n m = (m << 1) | bit;\n symbol |= bit << i;\n }\n return symbol;\n }\n}\n\n/**\n * Static reverse decode from external probability array\n */\nexport function reverseDecodeFromArray(models: Uint16Array, startIndex: number, rangeDecoder: RangeDecoder, numBitLevels: number): number {\n let m = 1;\n let symbol = 0;\n for (let i = 0; i < numBitLevels; i++) {\n const bit = rangeDecoder.decodeBit(models, startIndex + m);\n m = (m << 1) | bit;\n symbol |= bit << i;\n }\n return symbol;\n}\n"],"names":["BitTreeDecoder","RangeDecoder","reverseDecodeFromArray","input","allocBuffer","pos","code","range","setInput","offset","init","i","getPosition","normalize","decodeBit","probs","index","prob","newBound","decodeDirectBits","numTotalBits","result","t","numBitLevels","models","Uint16Array","length","decode","rangeDecoder","m","reverseDecode","symbol","bit","startIndex"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/iterators/xz-compat/src/lzma/types.ts"],"sourcesContent":["/**\n * LZMA Types and Constants\n *\n * Shared types, constants, and state transition functions for LZMA decoding.\n * Based on the LZMA SDK specification.\n */\n\n// LZMA State Machine Constants\nexport const kNumRepDistances = 4;\nexport const kNumStates = 12;\n\n// Position slot constants\nexport const kNumPosSlotBits = 6;\nexport const kDicLogSizeMin = 0;\nexport const kNumLenToPosStatesBits = 2;\nexport const kNumLenToPosStates = 1 << kNumLenToPosStatesBits; // 4\n\n// Match length constants\nexport const kMatchMinLen = 2;\nexport const kNumLowLenBits = 3;\nexport const kNumMidLenBits = 3;\nexport const kNumHighLenBits = 8;\nexport const kNumLowLenSymbols = 1 << kNumLowLenBits; // 8\nexport const kNumMidLenSymbols = 1 << kNumMidLenBits; // 8\nexport const kNumLenSymbols = kNumLowLenSymbols + kNumMidLenSymbols + (1 << kNumHighLenBits); // 272\nexport const kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1; // 273\n\n// Alignment constants\nexport const kNumAlignBits = 4;\nexport const kAlignTableSize = 1 << kNumAlignBits; // 16\nexport const kAlignMask = kAlignTableSize - 1; // 15\n\n// Position model constants\nexport const kStartPosModelIndex = 4;\nexport const kEndPosModelIndex = 14;\nexport const kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; // 10\nexport const kNumFullDistances = 1 << (kEndPosModelIndex >>> 1); // 128\n\n// Literal/pos state constants\nexport const kNumLitPosStatesBitsEncodingMax = 4;\nexport const kNumLitContextBitsMax = 8;\nexport const kNumPosStatesBitsMax = 4;\nexport const kNumPosStatesMax = 1 << kNumPosStatesBitsMax; // 16\nexport const kNumPosStatesBitsEncodingMax = 4;\nexport const kNumPosStatesEncodingMax = 1 << kNumPosStatesBitsEncodingMax; // 16\n\n// Range coder probability constants\nexport const kNumBitModelTotalBits = 11;\nexport const kBitModelTotal = 1 << kNumBitModelTotalBits; // 2048\nexport const kNumMoveBits = 5;\nexport const kProbInitValue = kBitModelTotal >>> 1; // 1024\n\n/**\n * State transition: after literal byte\n */\nexport function stateUpdateChar(state: number): number {\n if (state < 4) return 0;\n if (state < 10) return state - 3;\n return state - 6;\n}\n\n/**\n * State transition: after match\n */\nexport function stateUpdateMatch(state: number): number {\n return state < 7 ? 7 : 10;\n}\n\n/**\n * State transition: after rep (repeated match)\n */\nexport function stateUpdateRep(state: number): number {\n return state < 7 ? 8 : 11;\n}\n\n/**\n * State transition: after short rep\n */\nexport function stateUpdateShortRep(state: number): number {\n return state < 7 ? 9 : 11;\n}\n\n/**\n * Check if state indicates previous symbol was a character (literal)\n */\nexport function stateIsCharState(state: number): boolean {\n return state < 7;\n}\n\n/**\n * Get length-to-position state index\n */\nexport function getLenToPosState(len: number): number {\n len -= kMatchMinLen;\n return len < kNumLenToPosStates ? len : kNumLenToPosStates - 1;\n}\n\n/**\n * Initialize probability array with default values\n * @param probs - Array to initialize (or null to create new)\n * @param count - Number of probabilities\n * @returns Initialized probability array\n */\nexport function initBitModels(probs: Uint16Array | null, count?: number): Uint16Array {\n if (probs === null) {\n if (count === undefined) {\n throw new Error('count required when probs is null');\n }\n probs = new Uint16Array(count);\n }\n for (let i = 0; i < probs.length; i++) {\n probs[i] = kProbInitValue;\n }\n return probs;\n}\n\n/**\n * LZMA properties parsed from the 5-byte header\n */\nexport interface LzmaProperties {\n /** Literal context bits (0-8) */\n lc: number;\n /** Literal pos bits (0-4) */\n lp: number;\n /** Pos bits (0-4) */\n pb: number;\n /** Dictionary size in bytes */\n dictionarySize: number;\n}\n\n/**\n * Parse LZMA properties from a 5-byte buffer\n */\nexport function parseProperties(properties: Buffer | Uint8Array): LzmaProperties {\n if (properties.length < 5) {\n throw new Error('LZMA properties must be at least 5 bytes');\n }\n\n const d = properties[0] & 0xff;\n const lc = d % 9;\n const remainder = ~~(d / 9);\n const lp = remainder % 5;\n const pb = ~~(remainder / 5);\n\n if (lc > kNumLitContextBitsMax || lp > 4 || pb > kNumPosStatesBitsMax) {\n throw new Error('Invalid LZMA properties');\n }\n\n let dictionarySize = 0;\n for (let i = 0; i < 4; i++) {\n dictionarySize |= (properties[1 + i] & 0xff) << (i * 8);\n }\n\n return { lc, lp, pb, dictionarySize };\n}\n\n/**\n * LZMA2 control byte meanings\n */\nexport const LZMA2_CONTROL = {\n END: 0x00,\n UNCOMPRESSED_RESET_DIC: 0x01,\n UNCOMPRESSED: 0x02,\n LZMA_RESET_STATE_NEW_PROP: 0xe0,\n} as const;\n\n/**\n * Check if LZMA2 control byte indicates reset state (new properties)\n */\nexport function lzma2NeedsNewProps(control: number): boolean {\n return control >= 0xe0;\n}\n\n/**\n * Check if LZMA2 control byte indicates reset probabilities\n */\nexport function lzma2NeedsResetProbs(control: number): boolean {\n return control >= 0xa0;\n}\n\n/**\n * Check if LZMA2 control byte indicates uncompressed chunk\n */\nexport function lzma2IsUncompressed(control: number): boolean {\n return control < 0x80;\n}\n\n/**\n * Parse LZMA2 dictionary size from property byte\n */\nexport function parseLzma2DictionarySize(prop: number): number {\n if (prop > 40) {\n throw new Error('Invalid LZMA2 dictionary size property');\n }\n if (prop === 40) {\n return 0xffffffff;\n }\n const base = 2 | (prop & 1);\n const exp = (prop >>> 1) + 11;\n return base << exp;\n}\n\n/**\n * Output sink interface for fast streaming decode\n * Can be a Buffer (with write method) or a stream with write() method\n */\nexport interface OutputSink {\n write(buffer: Buffer): void;\n}\n"],"names":["LZMA2_CONTROL","getLenToPosState","initBitModels","kAlignMask","kAlignTableSize","kBitModelTotal","kDicLogSizeMin","kEndPosModelIndex","kMatchMaxLen","kMatchMinLen","kNumAlignBits","kNumBitModelTotalBits","kNumFullDistances","kNumHighLenBits","kNumLenSymbols","kNumLenToPosStates","kNumLenToPosStatesBits","kNumLitContextBitsMax","kNumLitPosStatesBitsEncodingMax","kNumLowLenBits","kNumLowLenSymbols","kNumMidLenBits","kNumMidLenSymbols","kNumMoveBits","kNumPosModels","kNumPosSlotBits","kNumPosStatesBitsEncodingMax","kNumPosStatesBitsMax","kNumPosStatesEncodingMax","kNumPosStatesMax","kNumRepDistances","kNumStates","kProbInitValue","kStartPosModelIndex","lzma2IsUncompressed","lzma2NeedsNewProps","lzma2NeedsResetProbs","parseLzma2DictionarySize","parseProperties","stateIsCharState","stateUpdateChar","stateUpdateMatch","stateUpdateRep","stateUpdateShortRep","state","len","probs","count","undefined","Error","Uint16Array","i","length","properties","d","lc","remainder","lp","pb","dictionarySize","END","UNCOMPRESSED_RESET_DIC","UNCOMPRESSED","LZMA_RESET_STATE_NEW_PROP","control","prop","base","exp"],"mappings":"AAAA;;;;;CAKC,GAED,+BAA+B;;;;;;;;;;;;QAwJlBA;eAAAA;;QAnEGC;eAAAA;;QAWAC;eAAAA;;QAzEHC;eAAAA;;QADAC;eAAAA;;QAmBAC;eAAAA;;QAnCAC;eAAAA;;QAqBAC;eAAAA;;QATAC;eAAAA;;QAPAC;eAAAA;;QAUAC;eAAAA;;QAmBAC;eAAAA;;QAXAC;eAAAA;;QAfAC;eAAAA;;QAGAC;eAAAA;;QATAC;eAAAA;;QADAC;eAAAA;;QA0BAC;eAAAA;;QADAC;eAAAA;;QApBAC;eAAAA;;QAGAC;eAAAA;;QAFAC;eAAAA;;QAGAC;eAAAA;;QA0BAC;eAAAA;;QAdAC;eAAAA;;QAvBAC;eAAAA;;QA+BAC;eAAAA;;QAFAC;eAAAA;;QAGAC;eAAAA;;QAFAC;eAAAA;;QAlCAC;eAAAA;;QACAC;eAAAA;;QAyCAC;eAAAA;;QAjBAC;eAAAA;;QAsJGC;eAAAA;;QAdAC;eAAAA;;QAOAC;eAAAA;;QAcAC;eAAAA;;QAzDAC;eAAAA;;QAhDAC;eAAAA;;QA9BAC;eAAAA;;QASAC;eAAAA;;QAOAC;eAAAA;;QAOAC;eAAAA;;;AAtET,IAAMb,mBAAmB;AACzB,IAAMC,aAAa;AAGnB,IAAMN,kBAAkB;AACxB,IAAMnB,iBAAiB;AACvB,IAAMU,yBAAyB;AAC/B,IAAMD,qBAAqB,KAAKC,wBAAwB,IAAI;AAG5D,IAAMP,eAAe;AACrB,IAAMU,iBAAiB;AACvB,IAAME,iBAAiB;AACvB,IAAMR,kBAAkB;AACxB,IAAMO,oBAAoB,KAAKD,gBAAgB,IAAI;AACnD,IAAMG,oBAAoB,KAAKD,gBAAgB,IAAI;AACnD,IAAMP,iBAAiBM,oBAAoBE,oBAAqB,CAAA,KAAKT,eAAc,GAAI,MAAM;AAC7F,IAAML,eAAeC,eAAeK,iBAAiB,GAAG,MAAM;AAG9D,IAAMJ,gBAAgB;AACtB,IAAMN,kBAAkB,KAAKM,eAAe,KAAK;AACjD,IAAMP,aAAaC,kBAAkB,GAAG,KAAK;AAG7C,IAAM6B,sBAAsB;AAC5B,IAAM1B,oBAAoB;AAC1B,IAAMiB,gBAAgBjB,oBAAoB0B,qBAAqB,KAAK;AACpE,IAAMrB,oBAAoB,KAAML,CAAAA,sBAAsB,CAAA,GAAI,MAAM;AAGhE,IAAMW,kCAAkC;AACxC,IAAMD,wBAAwB;AAC9B,IAAMU,uBAAuB;AAC7B,IAAME,mBAAmB,KAAKF,sBAAsB,KAAK;AACzD,IAAMD,+BAA+B;AACrC,IAAME,2BAA2B,KAAKF,8BAA8B,KAAK;AAGzE,IAAMf,wBAAwB;AAC9B,IAAMN,iBAAiB,KAAKM,uBAAuB,OAAO;AAC1D,IAAMY,eAAe;AACrB,IAAMS,iBAAiB3B,mBAAmB,GAAG,OAAO;AAKpD,SAASmC,gBAAgBI,KAAa;IAC3C,IAAIA,QAAQ,GAAG,OAAO;IACtB,IAAIA,QAAQ,IAAI,OAAOA,QAAQ;IAC/B,OAAOA,QAAQ;AACjB;AAKO,SAASH,iBAAiBG,KAAa;IAC5C,OAAOA,QAAQ,IAAI,IAAI;AACzB;AAKO,SAASF,eAAeE,KAAa;IAC1C,OAAOA,QAAQ,IAAI,IAAI;AACzB;AAKO,SAASD,oBAAoBC,KAAa;IAC/C,OAAOA,QAAQ,IAAI,IAAI;AACzB;AAKO,SAASL,iBAAiBK,KAAa;IAC5C,OAAOA,QAAQ;AACjB;AAKO,SAAS3C,iBAAiB4C,GAAW;IAC1CA,OAAOpC;IACP,OAAOoC,MAAM9B,qBAAqB8B,MAAM9B,qBAAqB;AAC/D;AAQO,SAASb,cAAc4C,KAAyB,EAAEC,KAAc;IACrE,IAAID,UAAU,MAAM;QAClB,IAAIC,UAAUC,WAAW;YACvB,MAAM,IAAIC,MAAM;QAClB;QACAH,QAAQ,IAAII,YAAYH;IAC1B;IACA,IAAK,IAAII,IAAI,GAAGA,IAAIL,MAAMM,MAAM,EAAED,IAAK;QACrCL,KAAK,CAACK,EAAE,GAAGnB;IACb;IACA,OAAOc;AACT;AAmBO,SAASR,gBAAgBe,UAA+B;IAC7D,IAAIA,WAAWD,MAAM,GAAG,GAAG;QACzB,MAAM,IAAIH,MAAM;IAClB;IAEA,IAAMK,IAAID,UAAU,CAAC,EAAE,GAAG;IAC1B,IAAME,KAAKD,IAAI;IACf,IAAME,YAAY,CAAC,CAAEF,CAAAA,IAAI,CAAA;IACzB,IAAMG,KAAKD,YAAY;IACvB,IAAME,KAAK,CAAC,CAAEF,CAAAA,YAAY,CAAA;IAE1B,IAAID,KAAKtC,yBAAyBwC,KAAK,KAAKC,KAAK/B,sBAAsB;QACrE,MAAM,IAAIsB,MAAM;IAClB;IAEA,IAAIU,iBAAiB;IACrB,IAAK,IAAIR,IAAI,GAAGA,IAAI,GAAGA,IAAK;QAC1BQ,kBAAkB,AAACN,CAAAA,UAAU,CAAC,IAAIF,EAAE,GAAG,IAAG,KAAOA,IAAI;IACvD;IAEA,OAAO;QAAEI,IAAAA;QAAIE,IAAAA;QAAIC,IAAAA;QAAIC,gBAAAA;IAAe;AACtC;AAKO,IAAM3D,gBAAgB;IAC3B4D,KAAK;IACLC,wBAAwB;IACxBC,cAAc;IACdC,2BAA2B;AAC7B;AAKO,SAAS5B,mBAAmB6B,OAAe;IAChD,OAAOA,WAAW;AACpB;AAKO,SAAS5B,qBAAqB4B,OAAe;IAClD,OAAOA,WAAW;AACpB;AAKO,SAAS9B,oBAAoB8B,OAAe;IACjD,OAAOA,UAAU;AACnB;AAKO,SAAS3B,yBAAyB4B,IAAY;IACnD,IAAIA,OAAO,IAAI;QACb,MAAM,IAAIhB,MAAM;IAClB;IACA,IAAIgB,SAAS,IAAI;QACf,OAAO;IACT;IACA,IAAMC,OAAO,IAAKD,OAAO;IACzB,IAAME,MAAM,AAACF,CAAAA,SAAS,CAAA,IAAK;IAC3B,OAAOC,QAAQC;AACjB"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/xz-compat/src/lzma/types.ts"],"sourcesContent":["/**\n * LZMA Types and Constants\n *\n * Shared types, constants, and state transition functions for LZMA decoding.\n * Based on the LZMA SDK specification.\n */\n\n// LZMA State Machine Constants\nexport const kNumRepDistances = 4;\nexport const kNumStates = 12;\n\n// Position slot constants\nexport const kNumPosSlotBits = 6;\nexport const kDicLogSizeMin = 0;\nexport const kNumLenToPosStatesBits = 2;\nexport const kNumLenToPosStates = 1 << kNumLenToPosStatesBits; // 4\n\n// Match length constants\nexport const kMatchMinLen = 2;\nexport const kNumLowLenBits = 3;\nexport const kNumMidLenBits = 3;\nexport const kNumHighLenBits = 8;\nexport const kNumLowLenSymbols = 1 << kNumLowLenBits; // 8\nexport const kNumMidLenSymbols = 1 << kNumMidLenBits; // 8\nexport const kNumLenSymbols = kNumLowLenSymbols + kNumMidLenSymbols + (1 << kNumHighLenBits); // 272\nexport const kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1; // 273\n\n// Alignment constants\nexport const kNumAlignBits = 4;\nexport const kAlignTableSize = 1 << kNumAlignBits; // 16\nexport const kAlignMask = kAlignTableSize - 1; // 15\n\n// Position model constants\nexport const kStartPosModelIndex = 4;\nexport const kEndPosModelIndex = 14;\nexport const kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; // 10\nexport const kNumFullDistances = 1 << (kEndPosModelIndex >>> 1); // 128\n\n// Literal/pos state constants\nexport const kNumLitPosStatesBitsEncodingMax = 4;\nexport const kNumLitContextBitsMax = 8;\nexport const kNumPosStatesBitsMax = 4;\nexport const kNumPosStatesMax = 1 << kNumPosStatesBitsMax; // 16\nexport const kNumPosStatesBitsEncodingMax = 4;\nexport const kNumPosStatesEncodingMax = 1 << kNumPosStatesBitsEncodingMax; // 16\n\n// Range coder probability constants\nexport const kNumBitModelTotalBits = 11;\nexport const kBitModelTotal = 1 << kNumBitModelTotalBits; // 2048\nexport const kNumMoveBits = 5;\nexport const kProbInitValue = kBitModelTotal >>> 1; // 1024\n\n/**\n * State transition: after literal byte\n */\nexport function stateUpdateChar(state: number): number {\n if (state < 4) return 0;\n if (state < 10) return state - 3;\n return state - 6;\n}\n\n/**\n * State transition: after match\n */\nexport function stateUpdateMatch(state: number): number {\n return state < 7 ? 7 : 10;\n}\n\n/**\n * State transition: after rep (repeated match)\n */\nexport function stateUpdateRep(state: number): number {\n return state < 7 ? 8 : 11;\n}\n\n/**\n * State transition: after short rep\n */\nexport function stateUpdateShortRep(state: number): number {\n return state < 7 ? 9 : 11;\n}\n\n/**\n * Check if state indicates previous symbol was a character (literal)\n */\nexport function stateIsCharState(state: number): boolean {\n return state < 7;\n}\n\n/**\n * Get length-to-position state index\n */\nexport function getLenToPosState(len: number): number {\n len -= kMatchMinLen;\n return len < kNumLenToPosStates ? len : kNumLenToPosStates - 1;\n}\n\n/**\n * Initialize probability array with default values\n * @param probs - Array to initialize (or null to create new)\n * @param count - Number of probabilities\n * @returns Initialized probability array\n */\nexport function initBitModels(probs: Uint16Array | null, count?: number): Uint16Array {\n if (probs === null) {\n if (count === undefined) {\n throw new Error('count required when probs is null');\n }\n probs = new Uint16Array(count);\n }\n for (let i = 0; i < probs.length; i++) {\n probs[i] = kProbInitValue;\n }\n return probs;\n}\n\n/**\n * LZMA properties parsed from the 5-byte header\n */\nexport interface LzmaProperties {\n /** Literal context bits (0-8) */\n lc: number;\n /** Literal pos bits (0-4) */\n lp: number;\n /** Pos bits (0-4) */\n pb: number;\n /** Dictionary size in bytes */\n dictionarySize: number;\n}\n\n/**\n * Parse LZMA properties from a 5-byte buffer\n */\nexport function parseProperties(properties: Buffer | Uint8Array): LzmaProperties {\n if (properties.length < 5) {\n throw new Error('LZMA properties must be at least 5 bytes');\n }\n\n const d = properties[0] & 0xff;\n const lc = d % 9;\n const remainder = ~~(d / 9);\n const lp = remainder % 5;\n const pb = ~~(remainder / 5);\n\n if (lc > kNumLitContextBitsMax || lp > 4 || pb > kNumPosStatesBitsMax) {\n throw new Error('Invalid LZMA properties');\n }\n\n let dictionarySize = 0;\n for (let i = 0; i < 4; i++) {\n dictionarySize |= (properties[1 + i] & 0xff) << (i * 8);\n }\n\n return { lc, lp, pb, dictionarySize };\n}\n\n/**\n * LZMA2 control byte meanings\n */\nexport const LZMA2_CONTROL = {\n END: 0x00,\n UNCOMPRESSED_RESET_DIC: 0x01,\n UNCOMPRESSED: 0x02,\n LZMA_RESET_STATE_NEW_PROP: 0xe0,\n} as const;\n\n/**\n * Check if LZMA2 control byte indicates reset state (new properties)\n */\nexport function lzma2NeedsNewProps(control: number): boolean {\n return control >= 0xe0;\n}\n\n/**\n * Check if LZMA2 control byte indicates reset probabilities\n */\nexport function lzma2NeedsResetProbs(control: number): boolean {\n return control >= 0xa0;\n}\n\n/**\n * Check if LZMA2 control byte indicates uncompressed chunk\n */\nexport function lzma2IsUncompressed(control: number): boolean {\n return control < 0x80;\n}\n\n/**\n * Parse LZMA2 dictionary size from property byte\n */\nexport function parseLzma2DictionarySize(prop: number): number {\n if (prop > 40) {\n throw new Error('Invalid LZMA2 dictionary size property');\n }\n if (prop === 40) {\n return 0xffffffff;\n }\n const base = 2 | (prop & 1);\n const exp = (prop >>> 1) + 11;\n return base << exp;\n}\n\n/**\n * Output sink interface for fast streaming decode\n * Can be a Buffer (with write method) or a stream with write() method\n */\nexport interface OutputSink {\n write(buffer: Buffer): void;\n}\n"],"names":["LZMA2_CONTROL","getLenToPosState","initBitModels","kAlignMask","kAlignTableSize","kBitModelTotal","kDicLogSizeMin","kEndPosModelIndex","kMatchMaxLen","kMatchMinLen","kNumAlignBits","kNumBitModelTotalBits","kNumFullDistances","kNumHighLenBits","kNumLenSymbols","kNumLenToPosStates","kNumLenToPosStatesBits","kNumLitContextBitsMax","kNumLitPosStatesBitsEncodingMax","kNumLowLenBits","kNumLowLenSymbols","kNumMidLenBits","kNumMidLenSymbols","kNumMoveBits","kNumPosModels","kNumPosSlotBits","kNumPosStatesBitsEncodingMax","kNumPosStatesBitsMax","kNumPosStatesEncodingMax","kNumPosStatesMax","kNumRepDistances","kNumStates","kProbInitValue","kStartPosModelIndex","lzma2IsUncompressed","lzma2NeedsNewProps","lzma2NeedsResetProbs","parseLzma2DictionarySize","parseProperties","stateIsCharState","stateUpdateChar","stateUpdateMatch","stateUpdateRep","stateUpdateShortRep","state","len","probs","count","undefined","Error","Uint16Array","i","length","properties","d","lc","remainder","lp","pb","dictionarySize","END","UNCOMPRESSED_RESET_DIC","UNCOMPRESSED","LZMA_RESET_STATE_NEW_PROP","control","prop","base","exp"],"mappings":"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"}
|
package/dist/cjs/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/iterators/xz-compat/src/native.ts"],"sourcesContent":["/**\n * Native Acceleration Module\n *\n * Provides optional native acceleration via lzma-native on Node.js 10+.\n * Falls back gracefully to pure JS implementation on older Node versions\n * or when the native module is not available.\n */\n\nimport Module from 'module';\nimport path from 'path';\nimport url from 'url';\n\nimport { parseLzma2DictionarySize, parseProperties } from './lzma/types.ts';\n\n// Get __dirname for ES modules\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\n// Get node_modules path (go up from dist/cjs to package root, then to node_modules)\nconst nodeModulesPath = path.join(__dirname, '..', '..', 'node_modules');\nconst major = +process.versions.node.split('.')[0];\n\nconst nativeDisabled = process.env.LZMA_NATIVE_DISABLE === '1';\nconst NATIVE_PREBUILDS = ['darwin-arm64', 'darwin-x64', 'linux-arm64', 'linux-x64', 'win32-ia32', 'win32-x64'];\n\n// Cache for native module loading result\nlet nativeModule: NativeModule | null = null;\nlet installationAttempted = false;\n\ninterface NativeDecoderMethods {\n decompress(input: Buffer): Promise<Buffer>;\n}\n\ntype RawDecoder = (input: Buffer, properties: Buffer, unpackSize?: number) => Promise<Buffer>;\n\nexport interface NativeModule {\n xz?: NativeDecoderMethods;\n lzma?: RawDecoder;\n lzma2?: RawDecoder;\n}\n\ninterface LzmaNativeExports {\n decompress(input: Buffer, options?: unknown): Promise<Buffer>;\n createStream(coder?: string | Record<string, unknown>, options?: Record<string, unknown>): NodeJS.ReadWriteStream;\n FILTER_LZMA1: string;\n FILTER_LZMA2: string;\n}\n\ninterface RawFilterOptions {\n dictSize: number;\n lc?: number;\n lp?: number;\n pb?: number;\n}\n\nconst sizeMismatchError = (expected: number, actual: number): Error => new Error(`Native decode size mismatch (expected ${expected}, got ${actual})`);\n\nfunction collectStream(stream: NodeJS.ReadWriteStream, input: Buffer, expectedSize?: number): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n const chunks: Buffer[] = [];\n\n stream.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n });\n stream.once('error', reject);\n stream.once('end', () => {\n const output = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks);\n if (typeof expectedSize === 'number' && expectedSize >= 0 && output.length !== expectedSize) {\n reject(sizeMismatchError(expectedSize, output.length));\n return;\n }\n resolve(output);\n });\n\n stream.end(input);\n });\n}\n\nfunction createRawDecoder(lzma: LzmaNativeExports, filterId: string, buildOptions: (properties: Buffer) => RawFilterOptions): RawDecoder {\n return (input, properties, unpackSize) => {\n const filters = [\n {\n id: filterId,\n options: buildOptions(properties),\n },\n ];\n const stream = lzma.createStream('rawDecoder', { filters });\n return collectStream(stream, input, unpackSize);\n };\n}\n\nfunction createNativeModule(bindings: LzmaNativeExports): NativeModule {\n return {\n xz: {\n decompress: (input) => bindings.decompress(input),\n },\n lzma: createRawDecoder(bindings, bindings.FILTER_LZMA1, (properties) => {\n if (!properties || properties.length < 5) throw new Error('LZMA requires 5-byte properties');\n const { lc, lp, pb, dictionarySize } = parseProperties(properties);\n return {\n dictSize: dictionarySize,\n lc,\n lp,\n pb,\n };\n }),\n lzma2: createRawDecoder(bindings, bindings.FILTER_LZMA2, (properties) => {\n if (!properties || properties.length < 1) throw new Error('LZMA2 requires properties byte');\n return {\n dictSize: parseLzma2DictionarySize(properties[0]),\n };\n }),\n };\n}\n\n/**\n * Try to load the native lzma-native module\n * Returns null if not available or Node version is too old\n */\nexport function tryLoadNative(): NativeModule | null {\n if (installationAttempted) return nativeModule;\n installationAttempted = true;\n if (nativeDisabled) return null;\n if (major < 14) return null;\n if (NATIVE_PREBUILDS.indexOf(`${process.platform}-${process.arch}`) < 0) return null; // only supported prebuilds (or else tries to build from source on install)\n\n const load = (): NativeModule | null => {\n try {\n const bindings = _require('lzma-native') as LzmaNativeExports;\n nativeModule = createNativeModule(bindings);\n return nativeModule;\n } catch {\n return null;\n }\n };\n\n const loaded = load();\n if (loaded) return loaded;\n\n try {\n console.log('Installing lzma-native for native acceleration...');\n const installModule = _require('install-module-linked').default;\n installModule.sync('lzma-native', nodeModulesPath, {});\n return load();\n } catch {\n return null;\n }\n}\n\nexport function isNativeAvailable(): boolean {\n return tryLoadNative() !== null;\n}\n"],"names":["isNativeAvailable","tryLoadNative","_require","require","Module","createRequire","__dirname","path","dirname","__filename","url","fileURLToPath","nodeModulesPath","join","major","process","versions","node","split","nativeDisabled","env","LZMA_NATIVE_DISABLE","NATIVE_PREBUILDS","nativeModule","installationAttempted","sizeMismatchError","expected","actual","Error","collectStream","stream","input","expectedSize","Promise","resolve","reject","chunks","on","chunk","push","once","output","length","Buffer","concat","end","createRawDecoder","lzma","filterId","buildOptions","properties","unpackSize","filters","id","options","createStream","createNativeModule","bindings","xz","decompress","FILTER_LZMA1","parseProperties","lc","lp","pb","dictionarySize","dictSize","lzma2","FILTER_LZMA2","parseLzma2DictionarySize","indexOf","platform","arch","load","loaded","console","log","installModule","default","sync"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/xz-compat/src/native.ts"],"sourcesContent":["/**\n * Native Acceleration Module\n *\n * Provides optional native acceleration via lzma-native on Node.js 10+.\n * Falls back gracefully to pure JS implementation on older Node versions\n * or when the native module is not available.\n */\n\nimport Module from 'module';\nimport path from 'path';\nimport url from 'url';\n\nimport { parseLzma2DictionarySize, parseProperties } from './lzma/types.ts';\n\n// Get __dirname for ES modules\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\nconst __dirname = path.dirname(typeof __filename !== 'undefined' ? __filename : url.fileURLToPath(import.meta.url));\n\n// Get node_modules path (go up from dist/cjs to package root, then to node_modules)\nconst nodeModulesPath = path.join(__dirname, '..', '..', 'node_modules');\nconst major = +process.versions.node.split('.')[0];\n\nconst nativeDisabled = process.env.LZMA_NATIVE_DISABLE === '1';\nconst NATIVE_PREBUILDS = ['darwin-arm64', 'darwin-x64', 'linux-arm64', 'linux-x64', 'win32-ia32', 'win32-x64'];\n\n// Cache for native module loading result\nlet nativeModule: NativeModule | null = null;\nlet installationAttempted = false;\n\ninterface NativeDecoderMethods {\n decompress(input: Buffer): Promise<Buffer>;\n}\n\ntype RawDecoder = (input: Buffer, properties: Buffer, unpackSize?: number) => Promise<Buffer>;\n\nexport interface NativeModule {\n xz?: NativeDecoderMethods;\n lzma?: RawDecoder;\n lzma2?: RawDecoder;\n}\n\ninterface LzmaNativeExports {\n decompress(input: Buffer, options?: unknown): Promise<Buffer>;\n createStream(coder?: string | Record<string, unknown>, options?: Record<string, unknown>): NodeJS.ReadWriteStream;\n FILTER_LZMA1: string;\n FILTER_LZMA2: string;\n}\n\ninterface RawFilterOptions {\n dictSize: number;\n lc?: number;\n lp?: number;\n pb?: number;\n}\n\nconst sizeMismatchError = (expected: number, actual: number): Error => new Error(`Native decode size mismatch (expected ${expected}, got ${actual})`);\n\nfunction collectStream(stream: NodeJS.ReadWriteStream, input: Buffer, expectedSize?: number): Promise<Buffer> {\n return new Promise<Buffer>((resolve, reject) => {\n const chunks: Buffer[] = [];\n\n stream.on('data', (chunk: Buffer) => {\n chunks.push(chunk);\n });\n stream.once('error', reject);\n stream.once('end', () => {\n const output = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks);\n if (typeof expectedSize === 'number' && expectedSize >= 0 && output.length !== expectedSize) {\n reject(sizeMismatchError(expectedSize, output.length));\n return;\n }\n resolve(output);\n });\n\n stream.end(input);\n });\n}\n\nfunction createRawDecoder(lzma: LzmaNativeExports, filterId: string, buildOptions: (properties: Buffer) => RawFilterOptions): RawDecoder {\n return (input, properties, unpackSize) => {\n const filters = [\n {\n id: filterId,\n options: buildOptions(properties),\n },\n ];\n const stream = lzma.createStream('rawDecoder', { filters });\n return collectStream(stream, input, unpackSize);\n };\n}\n\nfunction createNativeModule(bindings: LzmaNativeExports): NativeModule {\n return {\n xz: {\n decompress: (input) => bindings.decompress(input),\n },\n lzma: createRawDecoder(bindings, bindings.FILTER_LZMA1, (properties) => {\n if (!properties || properties.length < 5) throw new Error('LZMA requires 5-byte properties');\n const { lc, lp, pb, dictionarySize } = parseProperties(properties);\n return {\n dictSize: dictionarySize,\n lc,\n lp,\n pb,\n };\n }),\n lzma2: createRawDecoder(bindings, bindings.FILTER_LZMA2, (properties) => {\n if (!properties || properties.length < 1) throw new Error('LZMA2 requires properties byte');\n return {\n dictSize: parseLzma2DictionarySize(properties[0]),\n };\n }),\n };\n}\n\n/**\n * Try to load the native lzma-native module\n * Returns null if not available or Node version is too old\n */\nexport function tryLoadNative(): NativeModule | null {\n if (installationAttempted) return nativeModule;\n installationAttempted = true;\n if (nativeDisabled) return null;\n if (major < 14) return null;\n if (NATIVE_PREBUILDS.indexOf(`${process.platform}-${process.arch}`) < 0) return null; // only supported prebuilds (or else tries to build from source on install)\n\n const load = (): NativeModule | null => {\n try {\n const bindings = _require('lzma-native') as LzmaNativeExports;\n nativeModule = createNativeModule(bindings);\n return nativeModule;\n } catch {\n return null;\n }\n };\n\n const loaded = load();\n if (loaded) return loaded;\n\n try {\n console.log('Installing lzma-native for native acceleration...');\n const installModule = _require('install-module-linked').default;\n installModule.sync('lzma-native', nodeModulesPath, {});\n return load();\n } catch {\n return null;\n }\n}\n\nexport function isNativeAvailable(): boolean {\n return tryLoadNative() !== null;\n}\n"],"names":["isNativeAvailable","tryLoadNative","_require","require","Module","createRequire","__dirname","path","dirname","__filename","url","fileURLToPath","nodeModulesPath","join","major","process","versions","node","split","nativeDisabled","env","LZMA_NATIVE_DISABLE","NATIVE_PREBUILDS","nativeModule","installationAttempted","sizeMismatchError","expected","actual","Error","collectStream","stream","input","expectedSize","Promise","resolve","reject","chunks","on","chunk","push","once","output","length","Buffer","concat","end","createRawDecoder","lzma","filterId","buildOptions","properties","unpackSize","filters","id","options","createStream","createNativeModule","bindings","xz","decompress","FILTER_LZMA1","parseProperties","lc","lp","pb","dictionarySize","dictSize","lzma2","FILTER_LZMA2","parseLzma2DictionarySize","indexOf","platform","arch","load","loaded","console","log","installModule","default","sync"],"mappings":"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"}
|
package/dist/cjs/sevenz.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/iterators/xz-compat/src/sevenz.ts"],"sourcesContent":["/**\n * High-Level 7z-Specific Decoders\n *\n * These functions accept properties separately (matching 7z format structure)\n * and execute either the native lzma-native path or the pure JS fallback.\n *\n * This provides automatic native acceleration for 7z files while maintaining\n * the API that 7z-iterator expects.\n *\n * IMPORTANT: Buffer Management Pattern\n *\n * ❌ SLOW - DO NOT use OutputSink with buffering:\n * const chunks: Buffer[] = [];\n * decodeLzma2(data, props, size, { write: c => chunks.push(c) });\n * return Buffer.concat(chunks); // ← 3 copies: push + concat + return\n *\n * OutWindow → chunks.push(chunk) → Buffer.concat(chunks) → result\n * COPY TO ARRAY COPY ALL FINAL BUFFER\n *\n * ✅ FAST - Direct return (let decoder manage buffer):\n * return decodeLzma2(data, props, size) as Buffer; // ← 1 copy\n *\n * OutWindow → pre-allocated buffer → result\n * DIRECT WRITE\n *\n * The decodeLzma2() function internally pre-allocates the exact output size\n * and writes directly to it. Wrapping with an OutputSink that buffers to an\n * array defeats this optimization by creating unnecessary intermediate copies.\n */\n\nimport { decodeLzma2 } from './lzma/sync/Lzma2Decoder.ts';\nimport { decodeLzma } from './lzma/sync/LzmaDecoder.ts';\nimport { tryLoadNative } from './native.ts';\n\n/** Callback for async decode operations: (error, result) => void */\nexport type DecodeCallback<T = Buffer> = (error: Error | null, result?: T) => void;\n\n/** Callback invoked when an async 7z decode completes */\nexport type SevenZDecodeCallback = DecodeCallback<Buffer>;\n\nconst schedule = typeof setImmediate === 'function' ? setImmediate : (fn: () => void) => process.nextTick(fn);\n\nexport function decode7zLzma(data: Buffer, properties: Buffer, unpackSize: number, callback: SevenZDecodeCallback): void;\nexport function decode7zLzma(data: Buffer, properties: Buffer, unpackSize: number): Promise<Buffer>;\n/**\n * Decode LZMA-compressed data from a 7z file\n */\nexport function decode7zLzma(data: Buffer, properties: Buffer, unpackSize: number, callback?: SevenZDecodeCallback): Promise<Buffer> | void {\n const worker = (cb: SevenZDecodeCallback) => {\n const fallback = () => {\n schedule(() => {\n try {\n cb(null, decodeLzma(data, properties, unpackSize) as Buffer);\n } catch (err) {\n cb(err as Error);\n }\n });\n };\n\n const native = tryLoadNative();\n if (native?.lzma) {\n try {\n const promise = native.lzma(data, properties, unpackSize);\n if (promise && typeof promise.then === 'function') {\n promise.then((value) => cb(null, value), fallback);\n return;\n }\n } catch {\n // fall through to fallback\n }\n }\n fallback();\n };\n\n if (typeof callback === 'function') return worker(callback);\n return new Promise((resolve, reject) => worker((err, value) => (err ? reject(err) : resolve(value as Buffer))));\n}\n\n/**\n * Decode LZMA2-compressed data from a 7z file\n */\nexport function decode7zLzma2(data: Buffer, properties: Buffer, unpackSize: number | undefined, callback: SevenZDecodeCallback): void;\nexport function decode7zLzma2(data: Buffer, properties: Buffer, unpackSize?: number): Promise<Buffer>;\nexport function decode7zLzma2(data: Buffer, properties: Buffer, unpackSize?: number, callback?: SevenZDecodeCallback): Promise<Buffer> | void {\n const worker = (cb: SevenZDecodeCallback) => {\n const fallback = () => {\n schedule(() => {\n try {\n cb(null, decodeLzma2(data, properties, unpackSize) as Buffer);\n } catch (err) {\n cb(err as Error);\n }\n });\n };\n\n const native = tryLoadNative();\n if (native?.lzma2) {\n try {\n const promise = native.lzma2(data, properties, unpackSize);\n if (promise && typeof promise.then === 'function') {\n promise.then((value) => cb(null, value), fallback);\n return;\n }\n } catch {\n // fall through to fallback\n }\n }\n fallback();\n };\n\n if (typeof callback === 'function') return worker(callback);\n return new Promise((resolve, reject) => worker((err, value) => (err ? reject(err) : resolve(value as Buffer))));\n}\n"],"names":["decode7zLzma","decode7zLzma2","schedule","setImmediate","fn","process","nextTick","data","properties","unpackSize","callback","worker","cb","fallback","decodeLzma","err","native","tryLoadNative","lzma","promise","then","value","Promise","resolve","reject","decodeLzma2","lzma2"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BC;;;;;;;;;;;QAmBeA;eAAAA;;QAoCAC;eAAAA;;;8BArDY;6BACD;wBACG;AAQ9B,IAAMC,WAAW,OAAOC,iBAAiB,aAAaA,eAAe,SAACC;WAAmBC,QAAQC,QAAQ,CAACF;;AAOnG,SAASJ,aAAaO,IAAY,EAAEC,UAAkB,EAAEC,UAAkB,EAAEC,QAA+B;IAChH,IAAMC,SAAS,SAACC;QACd,IAAMC,WAAW;YACfX,SAAS;gBACP,IAAI;oBACFU,GAAG,MAAME,IAAAA,yBAAU,EAACP,MAAMC,YAAYC;gBACxC,EAAE,OAAOM,KAAK;oBACZH,GAAGG;gBACL;YACF;QACF;QAEA,IAAMC,SAASC,IAAAA,uBAAa;QAC5B,IAAID,mBAAAA,6BAAAA,OAAQE,IAAI,EAAE;YAChB,IAAI;gBACF,IAAMC,UAAUH,OAAOE,IAAI,CAACX,MAAMC,YAAYC;gBAC9C,IAAIU,WAAW,OAAOA,QAAQC,IAAI,KAAK,YAAY;oBACjDD,QAAQC,IAAI,CAAC,SAACC;+BAAUT,GAAG,MAAMS;uBAAQR;oBACzC;gBACF;YACF,EAAE,eAAM;YACN,2BAA2B;YAC7B;QACF;QACAA;IACF;IAEA,IAAI,OAAOH,aAAa,YAAY,OAAOC,OAAOD;IAClD,OAAO,IAAIY,QAAQ,SAACC,SAASC;eAAWb,OAAO,SAACI,KAAKM;mBAAWN,MAAMS,OAAOT,OAAOQ,QAAQF;;;AAC9F;AAOO,SAASpB,cAAcM,IAAY,EAAEC,UAAkB,EAAEC,UAAmB,EAAEC,QAA+B;IAClH,IAAMC,SAAS,SAACC;QACd,IAAMC,WAAW;YACfX,SAAS;gBACP,IAAI;oBACFU,GAAG,MAAMa,IAAAA,2BAAW,EAAClB,MAAMC,YAAYC;gBACzC,EAAE,OAAOM,KAAK;oBACZH,GAAGG;gBACL;YACF;QACF;QAEA,IAAMC,SAASC,IAAAA,uBAAa;QAC5B,IAAID,mBAAAA,6BAAAA,OAAQU,KAAK,EAAE;YACjB,IAAI;gBACF,IAAMP,UAAUH,OAAOU,KAAK,CAACnB,MAAMC,YAAYC;gBAC/C,IAAIU,WAAW,OAAOA,QAAQC,IAAI,KAAK,YAAY;oBACjDD,QAAQC,IAAI,CAAC,SAACC;+BAAUT,GAAG,MAAMS;uBAAQR;oBACzC;gBACF;YACF,EAAE,eAAM;YACN,2BAA2B;YAC7B;QACF;QACAA;IACF;IAEA,IAAI,OAAOH,aAAa,YAAY,OAAOC,OAAOD;IAClD,OAAO,IAAIY,QAAQ,SAACC,SAASC;eAAWb,OAAO,SAACI,KAAKM;mBAAWN,MAAMS,OAAOT,OAAOQ,QAAQF;;;AAC9F"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/xz-compat/src/sevenz.ts"],"sourcesContent":["/**\n * High-Level 7z-Specific Decoders\n *\n * These functions accept properties separately (matching 7z format structure)\n * and execute either the native lzma-native path or the pure JS fallback.\n *\n * This provides automatic native acceleration for 7z files while maintaining\n * the API that 7z-iterator expects.\n *\n * IMPORTANT: Buffer Management Pattern\n *\n * ❌ SLOW - DO NOT use OutputSink with buffering:\n * const chunks: Buffer[] = [];\n * decodeLzma2(data, props, size, { write: c => chunks.push(c) });\n * return Buffer.concat(chunks); // ← 3 copies: push + concat + return\n *\n * OutWindow → chunks.push(chunk) → Buffer.concat(chunks) → result\n * COPY TO ARRAY COPY ALL FINAL BUFFER\n *\n * ✅ FAST - Direct return (let decoder manage buffer):\n * return decodeLzma2(data, props, size) as Buffer; // ← 1 copy\n *\n * OutWindow → pre-allocated buffer → result\n * DIRECT WRITE\n *\n * The decodeLzma2() function internally pre-allocates the exact output size\n * and writes directly to it. Wrapping with an OutputSink that buffers to an\n * array defeats this optimization by creating unnecessary intermediate copies.\n */\n\nimport { decodeLzma2 } from './lzma/sync/Lzma2Decoder.ts';\nimport { decodeLzma } from './lzma/sync/LzmaDecoder.ts';\nimport { tryLoadNative } from './native.ts';\n\n/** Callback for async decode operations: (error, result) => void */\nexport type DecodeCallback<T = Buffer> = (error: Error | null, result?: T) => void;\n\n/** Callback invoked when an async 7z decode completes */\nexport type SevenZDecodeCallback = DecodeCallback<Buffer>;\n\nconst schedule = typeof setImmediate === 'function' ? setImmediate : (fn: () => void) => process.nextTick(fn);\n\nexport function decode7zLzma(data: Buffer, properties: Buffer, unpackSize: number, callback: SevenZDecodeCallback): void;\nexport function decode7zLzma(data: Buffer, properties: Buffer, unpackSize: number): Promise<Buffer>;\n/**\n * Decode LZMA-compressed data from a 7z file\n */\nexport function decode7zLzma(data: Buffer, properties: Buffer, unpackSize: number, callback?: SevenZDecodeCallback): Promise<Buffer> | void {\n const worker = (cb: SevenZDecodeCallback) => {\n const fallback = () => {\n schedule(() => {\n try {\n cb(null, decodeLzma(data, properties, unpackSize) as Buffer);\n } catch (err) {\n cb(err as Error);\n }\n });\n };\n\n const native = tryLoadNative();\n if (native?.lzma) {\n try {\n const promise = native.lzma(data, properties, unpackSize);\n if (promise && typeof promise.then === 'function') {\n promise.then((value) => cb(null, value), fallback);\n return;\n }\n } catch {\n // fall through to fallback\n }\n }\n fallback();\n };\n\n if (typeof callback === 'function') return worker(callback);\n return new Promise((resolve, reject) => worker((err, value) => (err ? reject(err) : resolve(value as Buffer))));\n}\n\n/**\n * Decode LZMA2-compressed data from a 7z file\n */\nexport function decode7zLzma2(data: Buffer, properties: Buffer, unpackSize: number | undefined, callback: SevenZDecodeCallback): void;\nexport function decode7zLzma2(data: Buffer, properties: Buffer, unpackSize?: number): Promise<Buffer>;\nexport function decode7zLzma2(data: Buffer, properties: Buffer, unpackSize?: number, callback?: SevenZDecodeCallback): Promise<Buffer> | void {\n const worker = (cb: SevenZDecodeCallback) => {\n const fallback = () => {\n schedule(() => {\n try {\n cb(null, decodeLzma2(data, properties, unpackSize) as Buffer);\n } catch (err) {\n cb(err as Error);\n }\n });\n };\n\n const native = tryLoadNative();\n if (native?.lzma2) {\n try {\n const promise = native.lzma2(data, properties, unpackSize);\n if (promise && typeof promise.then === 'function') {\n promise.then((value) => cb(null, value), fallback);\n return;\n }\n } catch {\n // fall through to fallback\n }\n }\n fallback();\n };\n\n if (typeof callback === 'function') return worker(callback);\n return new Promise((resolve, reject) => worker((err, value) => (err ? reject(err) : resolve(value as Buffer))));\n}\n"],"names":["decode7zLzma","decode7zLzma2","schedule","setImmediate","fn","process","nextTick","data","properties","unpackSize","callback","worker","cb","fallback","decodeLzma","err","native","tryLoadNative","lzma","promise","then","value","Promise","resolve","reject","decodeLzma2","lzma2"],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BC;;;;;;;;;;;QAmBeA;eAAAA;;QAoCAC;eAAAA;;;8BArDY;6BACD;wBACG;AAQ9B,IAAMC,WAAW,OAAOC,iBAAiB,aAAaA,eAAe,SAACC;WAAmBC,QAAQC,QAAQ,CAACF;;AAOnG,SAASJ,aAAaO,IAAY,EAAEC,UAAkB,EAAEC,UAAkB,EAAEC,QAA+B;IAChH,IAAMC,SAAS,SAACC;QACd,IAAMC,WAAW;YACfX,SAAS;gBACP,IAAI;oBACFU,GAAG,MAAME,IAAAA,yBAAU,EAACP,MAAMC,YAAYC;gBACxC,EAAE,OAAOM,KAAK;oBACZH,GAAGG;gBACL;YACF;QACF;QAEA,IAAMC,SAASC,IAAAA,uBAAa;QAC5B,IAAID,mBAAAA,6BAAAA,OAAQE,IAAI,EAAE;YAChB,IAAI;gBACF,IAAMC,UAAUH,OAAOE,IAAI,CAACX,MAAMC,YAAYC;gBAC9C,IAAIU,WAAW,OAAOA,QAAQC,IAAI,KAAK,YAAY;oBACjDD,QAAQC,IAAI,CAAC,SAACC;+BAAUT,GAAG,MAAMS;uBAAQR;oBACzC;gBACF;YACF,EAAE,eAAM;YACN,2BAA2B;YAC7B;QACF;QACAA;IACF;IAEA,IAAI,OAAOH,aAAa,YAAY,OAAOC,OAAOD;IAClD,OAAO,IAAIY,QAAQ,SAACC,SAASC;eAAWb,OAAO,SAACI,KAAKM;mBAAWN,MAAMS,OAAOT,OAAOQ,QAAQF;;;AAC9F;AAOO,SAASpB,cAAcM,IAAY,EAAEC,UAAkB,EAAEC,UAAmB,EAAEC,QAA+B;IAClH,IAAMC,SAAS,SAACC;QACd,IAAMC,WAAW;YACfX,SAAS;gBACP,IAAI;oBACFU,GAAG,MAAMa,IAAAA,2BAAW,EAAClB,MAAMC,YAAYC;gBACzC,EAAE,OAAOM,KAAK;oBACZH,GAAGG;gBACL;YACF;QACF;QAEA,IAAMC,SAASC,IAAAA,uBAAa;QAC5B,IAAID,mBAAAA,6BAAAA,OAAQU,KAAK,EAAE;YACjB,IAAI;gBACF,IAAMP,UAAUH,OAAOU,KAAK,CAACnB,MAAMC,YAAYC;gBAC/C,IAAIU,WAAW,OAAOA,QAAQC,IAAI,KAAK,YAAY;oBACjDD,QAAQC,IAAI,CAAC,SAACC;+BAAUT,GAAG,MAAMS;uBAAQR;oBACzC;gBACF;YACF,EAAE,eAAM;YACN,2BAA2B;YAC7B;QACF;QACAA;IACF;IAEA,IAAI,OAAOH,aAAa,YAAY,OAAOC,OAAOD;IAClD,OAAO,IAAIY,QAAQ,SAACC,SAASC;eAAWb,OAAO,SAACI,KAAKM;mBAAWN,MAAMS,OAAOT,OAAOQ,QAAQF;;;AAC9F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/iterators/xz-compat/src/utils/createBufferingDecoder.ts"],"sourcesContent":["import { bufferFrom, Transform } from 'extract-base-iterator';\nimport type { Transform as TransformType } from 'stream';\n\ntype DecodeFn = (input: Buffer, properties?: Buffer, unpackSize?: number) => Buffer;\n\n/**\n * Helper to create a Transform stream from a synchronous decoder\n *\n * This buffers all input and applies the decoder when the stream ends.\n * This is suitable for codecs that don't support true streaming.\n */\nexport default function createBufferingDecoder(decodeFn: DecodeFn, properties?: Buffer, unpackSize?: number): InstanceType<typeof TransformType> {\n const chunks: Buffer[] = [];\n let _totalSize = 0;\n\n return new Transform({\n transform: (chunk: Buffer, _encoding: string, callback: (err?: Error | null, data?: Buffer) => void) => {\n chunks.push(chunk);\n _totalSize += chunk.length;\n callback();\n },\n flush: function (this: InstanceType<typeof TransformType>, callback: (err?: Error | null) => void) {\n try {\n // Concatenate all chunks\n const input = bufferFrom(Buffer.concat(chunks));\n // Decode using the synchronous decoder\n const output = decodeFn(input, properties, unpackSize);\n // Push the result\n this.push(output);\n callback();\n } catch (err) {\n callback(err as Error);\n }\n },\n });\n}\n"],"names":["createBufferingDecoder","decodeFn","properties","unpackSize","chunks","_totalSize","Transform","transform","chunk","_encoding","callback","push","length","flush","input","bufferFrom","Buffer","concat","output","err"],"mappings":";;;;+BAKA;;;;;CAKC,GACD;;;eAAwBA;;;mCAXc;AAWvB,SAASA,uBAAuBC,QAAkB,EAAEC,UAAmB,EAAEC,UAAmB;IACzG,IAAMC,SAAmB,EAAE;IAC3B,IAAIC,aAAa;IAEjB,OAAO,IAAIC,8BAAS,CAAC;QACnBC,WAAW,SAACC,OAAeC,WAAmBC;YAC5CN,OAAOO,IAAI,CAACH;YACZH,cAAcG,MAAMI,MAAM;YAC1BF;QACF;QACAG,OAAO,SAAPA,MAA2DH,QAAsC;YAC/F,IAAI;gBACF,yBAAyB;gBACzB,IAAMI,QAAQC,IAAAA,+BAAU,EAACC,OAAOC,MAAM,CAACb;gBACvC,uCAAuC;gBACvC,IAAMc,SAASjB,SAASa,OAAOZ,YAAYC;gBAC3C,kBAAkB;gBAClB,IAAI,CAACQ,IAAI,CAACO;gBACVR;YACF,EAAE,OAAOS,KAAK;gBACZT,SAASS;YACX;QACF;IACF;AACF"}
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/xz-compat/src/utils/createBufferingDecoder.ts"],"sourcesContent":["import { bufferFrom, Transform } from 'extract-base-iterator';\nimport type { Transform as TransformType } from 'stream';\n\ntype DecodeFn = (input: Buffer, properties?: Buffer, unpackSize?: number) => Buffer;\n\n/**\n * Helper to create a Transform stream from a synchronous decoder\n *\n * This buffers all input and applies the decoder when the stream ends.\n * This is suitable for codecs that don't support true streaming.\n */\nexport default function createBufferingDecoder(decodeFn: DecodeFn, properties?: Buffer, unpackSize?: number): InstanceType<typeof TransformType> {\n const chunks: Buffer[] = [];\n let _totalSize = 0;\n\n return new Transform({\n transform: (chunk: Buffer, _encoding: string, callback: (err?: Error | null, data?: Buffer) => void) => {\n chunks.push(chunk);\n _totalSize += chunk.length;\n callback();\n },\n flush: function (this: InstanceType<typeof TransformType>, callback: (err?: Error | null) => void) {\n try {\n // Concatenate all chunks\n const input = bufferFrom(Buffer.concat(chunks));\n // Decode using the synchronous decoder\n const output = decodeFn(input, properties, unpackSize);\n // Push the result\n this.push(output);\n callback();\n } catch (err) {\n callback(err as Error);\n }\n },\n });\n}\n"],"names":["createBufferingDecoder","decodeFn","properties","unpackSize","chunks","_totalSize","Transform","transform","chunk","_encoding","callback","push","length","flush","input","bufferFrom","Buffer","concat","output","err"],"mappings":";;;;+BAKA;;;;;CAKC,GACD;;;eAAwBA;;;mCAXc;AAWvB,SAASA,uBAAuBC,QAAkB,EAAEC,UAAmB,EAAEC,UAAmB;IACzG,IAAMC,SAAmB,EAAE;IAC3B,IAAIC,aAAa;IAEjB,OAAO,IAAIC,8BAAS,CAAC;QACnBC,WAAW,SAACC,OAAeC,WAAmBC;YAC5CN,OAAOO,IAAI,CAACH;YACZH,cAAcG,MAAMI,MAAM;YAC1BF;QACF;QACAG,OAAO,SAAPA,MAA2DH,QAAsC;YAC/F,IAAI;gBACF,yBAAyB;gBACzB,IAAMI,QAAQC,IAAAA,+BAAU,EAACC,OAAOC,MAAM,CAACb;gBACvC,uCAAuC;gBACvC,IAAMc,SAASjB,SAASa,OAAOZ,YAAYC;gBAC3C,kBAAkB;gBAClB,IAAI,CAACQ,IAAI,CAACO;gBACVR;YACF,EAAE,OAAOS,KAAK;gBACZT,SAASS;YACX;QACF;IACF;AACF"}
|
|
@@ -37,7 +37,7 @@ export declare function decodeXZ(input: Buffer): Promise<BufferLike>;
|
|
|
37
37
|
* Create an XZ decompression Transform stream
|
|
38
38
|
* @returns Transform stream that decompresses XZ data
|
|
39
39
|
*
|
|
40
|
-
* Uses
|
|
41
|
-
*
|
|
40
|
+
* Uses native lzma-native bindings when available for better performance.
|
|
41
|
+
* Falls back to pure JS implementation on older Node versions or when native is unavailable.
|
|
42
42
|
*/
|
|
43
43
|
export declare function createXZDecoder(): TransformType;
|
package/dist/cjs/xz/Decoder.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ export declare function decodeXZ(input: Buffer): Promise<BufferLike>;
|
|
|
37
37
|
* Create an XZ decompression Transform stream
|
|
38
38
|
* @returns Transform stream that decompresses XZ data
|
|
39
39
|
*
|
|
40
|
-
* Uses
|
|
41
|
-
*
|
|
40
|
+
* Uses native lzma-native bindings when available for better performance.
|
|
41
|
+
* Falls back to pure JS implementation on older Node versions or when native is unavailable.
|
|
42
42
|
*/
|
|
43
43
|
export declare function createXZDecoder(): TransformType;
|
package/dist/cjs/xz/Decoder.js
CHANGED
|
@@ -323,6 +323,8 @@ var FILTER_LZMA2 = 0x21;
|
|
|
323
323
|
var indexStart = footerEnd - 12 - backwardSize;
|
|
324
324
|
// Parse Index to get block information
|
|
325
325
|
var blockRecords = parseIndex(input, indexStart, checkSize);
|
|
326
|
+
// Handle empty files (no blocks) - return empty buffer
|
|
327
|
+
if (blockRecords.length === 0) return (0, _extractbaseiterator.allocBuffer)(0);
|
|
326
328
|
// Calculate total uncompressed size for multi-block decision
|
|
327
329
|
var totalUncompressedSize = 0;
|
|
328
330
|
for(var i = 0; i < blockRecords.length; i++){
|
|
@@ -407,6 +409,23 @@ function decodeXZ(input, callback) {
|
|
|
407
409
|
}
|
|
408
410
|
function createXZDecoder() {
|
|
409
411
|
var bufferList = new _extractbaseiterator.BufferList();
|
|
412
|
+
// Cache native module lookup (only done once)
|
|
413
|
+
var native = (0, _nativets.tryLoadNative)();
|
|
414
|
+
// Choose decoder: native (async via callback) or pure JS (sync wrapped in callback)
|
|
415
|
+
var decodeLzma2Block = (native === null || native === void 0 ? void 0 : native.lzma2) ? function(data, props, size, cb) {
|
|
416
|
+
var _native_lzma2;
|
|
417
|
+
(_native_lzma2 = native.lzma2) === null || _native_lzma2 === void 0 ? void 0 : _native_lzma2.call(native, data, props, size).then(function(result) {
|
|
418
|
+
return cb(null, result);
|
|
419
|
+
}, function(err) {
|
|
420
|
+
return cb(err);
|
|
421
|
+
});
|
|
422
|
+
} : function(data, props, size, cb) {
|
|
423
|
+
try {
|
|
424
|
+
cb(null, (0, _indexts.decodeLzma2)(data, props, size));
|
|
425
|
+
} catch (err) {
|
|
426
|
+
cb(err);
|
|
427
|
+
}
|
|
428
|
+
};
|
|
410
429
|
return new _extractbaseiterator.Transform({
|
|
411
430
|
transform: function transform(chunk, _encoding, callback) {
|
|
412
431
|
bufferList.append(chunk);
|
|
@@ -473,7 +492,7 @@ function createXZDecoder() {
|
|
|
473
492
|
var indexStart = footerEnd - 12 - backwardSize;
|
|
474
493
|
// Parse Index to get block information
|
|
475
494
|
var blockRecords = parseIndex(input, indexStart, checkSize);
|
|
476
|
-
// Decompress
|
|
495
|
+
// Decompress blocks sequentially (native is async)
|
|
477
496
|
var blockIndex = 0;
|
|
478
497
|
var pushBlock = function(err) {
|
|
479
498
|
if (err) {
|
|
@@ -499,16 +518,21 @@ function createXZDecoder() {
|
|
|
499
518
|
var dataStart = recordStart + headerSize;
|
|
500
519
|
var dataEnd = dataStart + record.compressedDataSize;
|
|
501
520
|
var compressedData = input.slice(dataStart, dataEnd);
|
|
502
|
-
// Decompress this block
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
521
|
+
// Decompress this block (native or pure JS, callback-based)
|
|
522
|
+
decodeLzma2Block(compressedData, blockInfo.lzma2Props, record.uncompressedSize, function(decodeErr, blockOutput) {
|
|
523
|
+
if (decodeErr || !blockOutput) {
|
|
524
|
+
pushBlock(decodeErr || new Error('Decode returned no data'));
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
// Apply preprocessing filters in reverse order
|
|
528
|
+
for(var j = blockInfo.filters.length - 1; j >= 0; j--){
|
|
529
|
+
blockOutput = applyFilter(blockOutput, blockInfo.filters[j]);
|
|
530
|
+
}
|
|
531
|
+
// Push the block output immediately (streaming)
|
|
532
|
+
_this.push(blockOutput);
|
|
533
|
+
// Continue with next block
|
|
534
|
+
pushBlock(null);
|
|
535
|
+
});
|
|
512
536
|
};
|
|
513
537
|
// Start processing blocks
|
|
514
538
|
pushBlock(null);
|