cp3-kaitai-zlib
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.1 • Public • Published

    cp3-kaitai-zlib

    zlib processors for Kaitai Struct, with support for streams of unknown size.

    Installation

    # npm
    npm install cp3-kaitai-zlib
    
    # or yarn
    yarn add cp3-kaitai-zlib

    Usage

    # ./mydata.ksy
    meta:
      id: my-data
      # ...etc, etc...
    seq:
      - id: example_data
        size: 0
        process: cp3.kaitai.zlib.inflate(_io)

    Inflate

    Click to expand

    cp3.kaitai.zlib.inflate

    Decompresses the data. This will automatically detect gzip and zlib data (but not raw deflate data).

    Example

    seq:
      - id: glib_or_zlib_data_with_known_size
        size: 80
        process: cp3.kaitai.zlib.inflate

    cp3.kaitai.zlib.inflate(windowBits)

    Decompresses the data using the specified windowBits.

    Parameters

    • windowBits
      • 0 To use the windowBits from the zlib header.
      • A number between 8 and 15 for zlib.
      • A number between -8 and -15 for raw deflate.
      • A number between 24 and 31 for gzip.
      • A number between 40 and 47 to auto-detect zlib and gzip.
      • See Notes on windowBits.

    Example

    seq:
      - id: raw_data_with_known_size
        size: 80
        process: cp3.kaitai.zlib.inflate(-15)

    cp3.kaitai.zlib.inflate(stream)

    Decompresses the stream until the stream ends or the end of the compressed data is reached. This will automatically detect gzip and zlib data (but not raw deflate data).

    Parameters

    • stream - The kaitai stream to read from.

    Example

    seq:
      - id: glib_or_zlib_data_with_unknown_size
        size: 0
        process: cp3.kaitai.zlib.inflate(_io)

    cp3.kaitai.zlib.inflate(stream, windowBits)

    Decompresses the stream using the specified windowBits until the stream ends or the end of the compressed data is reached.

    Parameters

    • stream - The kaitai stream to read from.
    • windowBits
      • 0 To use the windowBits from the zlib header.
      • A number between 8 and 15 for zlib.
      • A number between -8 and -15 for raw deflate.
      • A number between 24 and 31 for gzip.
      • A number between 40 and 47 to auto-detect zlib and gzip.
      • See Notes on windowBits.

    Example

    seq:
      - id: glib_data_with_unknown_size
        size: 0
        process: cp3.kaitai.zlib.inflate(_io, 31)

    InflateRaw

    Click to expand

    cp3.kaitai.zlib.inflate_raw

    Decompresses raw deflate data.

    Example

    seq:
      - id: raw_data_with_known_size
        size: 80
        process: cp3.kaitai.zlib.inflate_raw

    cp3.kaitai.zlib.inflate_raw(windowBits)

    Decompresses raw deflate data with the given windowBits. Note: this will automatically adjust windowBits for raw deflate decompression.

    Parameters

    Example

    seq:
      - id: raw_data_with_known_size
        size: 80
        process: cp3.kaitai.zlib.inflate(15)

    InflateZlib

    Click to expand

    cp3.kaitai.zlib.inflate_zlib

    Decompresses zlib data.

    Example

    seq:
      - id: zlib_data_with_known_size
        size: 80
        process: cp3.kaitai.zlib.inflate_zlib

    cp3.kaitai.zlib.inflate_zlib(stream)

    Decompresses the zlib stream until the stream ends or the end of the compressed data is reached.

    Parameters

    • stream - The kaitai stream to read from.

    Example

    seq:
      - id: zlib_data_with_unknown_size
        size: 0
        process: cp3.kaitai.zlib.inflate_zlib(_io)

    cp3.kaitai.zlib.inflate_zlib(windowBits)

    Decompresses zlib data using the specified windowBits. Note: this will automatically adjust windowBits for zlib decompression.

    Parameters

    Example

    seq:
      - id: zlib_data_with_known_size
        size: 80
        process: cp3.kaitai.zlib.inflate_zlib(15)

    cp3.kaitai.zlib.inflate_zlib(stream, windowBits)

    Decompresses the zlib stream using the specified windowBits until the stream ends or the end of the compressed data is reached. Note: this will automatically adjust windowBits for zlib decompression.

    Parameters

    • stream - The kaitai stream to read from.
    • windowBits - A number between 8 and 15. See Notes on windowBits.

    Example

    seq:
      - id: zlib_data_with_unnown_size
        size: 0
        process: cp3.kaitai.zlib.inflate_zlib(_io, 15)

    InflateGzip

    Click to expand

    cp3.kaitai.zlib.inflate_gzip

    Decompresses gzip data.

    Example

    seq:
      - id: gzip_data_with_known_size
        size: 80
        process: cp3.kaitai.zlib.inflate_gzip

    cp3.kaitai.zlib.inflate_gzip(stream)

    Decompresses the gzip stream until the stream ends or the end of the compressed data is reached.

    Parameters

    • stream - The kaitai stream to read from.

    Example

    seq:
      - id: gzip_data_with_unknown_size
        size: 0
        process: cp3.kaitai.zlib.inflate_gzip(_io)

    cp3.kaitai.zlib.inflate_gzip(windowBits)

    Decompresses gzip data using the specified windowBits. Note: this will automatically adjust windowBits for gzip decompression.

    Parameters

    Example

    seq:
      - id: gzip_data_with_known_size
        size: 80
        process: cp3.kaitai.gzip.inflate_gzip(15)

    cp3.kaitai.zlib.inflate_gzip(stream, windowBits)

    Decompresses the gzip stream using the specified windowBits until the stream ends or the end of the compressed data is reached. Note: this will automatically adjust windowBits for gzip decompression.

    Parameters

    • stream - The kaitai stream to read from.
    • windowBits - A number between 8 and 15. See Notes on windowBits.

    Example

    seq:
      - id: gzip_data_with_unnown_size
        size: 0
        process: cp3.kaitai.zlib.inflate_gzip(_io, 15)

    Notes on windowBits

    The windowBits parameter in zlib is a bit confusing, here's what I know:

    • The windowBits parameter is the base two logarithm of the window size (the size of the history buffer).
    • windowBits is a number in the range 8..15
    • The window size used for decompressing needs to be greater than or equal to the window size used to compress the data.
    • windowBits can be adjusted to change the data format:
      • Left alone, data will be compressed/decompressed in zlib format (deflate data wrapped in a zlib header/trailer)
        • Setting windowBits to 0 will use the window size from the zlib header.
      • Negating windowBits will compress/decompress data as raw deflate data (data with no header or trailer).
      • Adding 16 to windowBits will compress/decompress data in gzip format (deflate data wrapped in a gzip header/trailer)
      • Adding 32 to windowBits will automatically detect gzip or zlib format when decompressing data

    You can also check the zlib manual: https://www.zlib.net/manual.html#Advanced

    License

    This project is licensed under the MIT License - see the LICENSE.md file for details.

    Install

    npm i cp3-kaitai-zlib

    DownloadsWeekly Downloads

    0

    Version

    1.0.1

    License

    MIT

    Unpacked Size

    23.4 kB

    Total Files

    17

    Last publish

    Collaborators

    • tschrock