blackflux / set-compressor

Compress and decompress Sets of non-negative Integers.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Set-Compressor

Build Status Test Coverage Dependabot Status Dependencies NPM Downloads Semantic-Release Gardener

Compress and decompress Sets of non-negative Integers.

Getting Started

$ npm install --save set-compressor

Usage

Consider an sequential array with gaps of the form [0, 1, 2, ..., 498, 499, 500, 700, 701, 702, ..., 998, 999, 1000]. We want to store this efficiently. This is where this utility comes in handy.

const compressor = require('set-compressor').Compressor({/* options */});

compressor.compress([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
// => /wc=

compressor.decompress('/wc=');
// => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Further examples can be found below.

Compressor

Options

The following options can be passed in when creating a Compressor.

gzip

Type: constants.GZIP_MODE
Default: AUTO

Controls how to use gzip: AUTO, FORCE and NEVER, where the default only uses compression if it improves the result size.

gzipLevel

Type: zlib.constants
Default: Z_BEST_COMPRESSION

Can be set to control the gzip compression level.

Functions

The following functions are available on the created Compressor.

compress(<iterable>)

Takes Iterable of non-negative Integers as input and returns compressed string.

decompress(<string>)

Takes compressed string as input and returns Array of unique, non-negative, sorted Integers.

Constants

GZIP_MODE

Values AUTO, NEVER, FORCE

Defines gzip mode used internally.

Examples

const compressor = require('set-compressor').Compressor({/* options */});

compressor.compress([0, 1, 2, /* ..., */ 9998, 9999, 10000]);
// => "H4sIAAAAAAACA/v/fxSMglEwCoYrYAAAhHk44+MEAIA="

compressor.decompress('H4sIAAAAAAACA/v/fxSMglEwCoYrYAAAhHk44+MEAIA=');
// => [0, 1, 2, ..., 9998, 9999, 10000]

compressor.decompress(compressor.compress([2, 2, 5, 1, 0]));
// => [0, 1, 2, 5]

Gotchas and Lmitations

This library operates with Arrays for performance reasons.

Any iterable containing non-negative integers can be provided as input, but re-inflating always outputs a unique and ordered Array.

This library is not meant to be used with and wont work well with huge Integers.

About

Compress and decompress Sets of non-negative Integers.

License:MIT License


Languages

Language:JavaScript 100.0%