zlib, gzip and zip implementation in JavaScript
npm install zlibjszlib.js
=======

zlib.js is ZLIB(RFC1950), DEFLATE(RFC1951), GZIP(RFC1952) and PKZIP implementation in JavaScript.
Usage
------
Use one in "bin" directory.
- zlib_and_gzip.min.js: ZLIB + GZIP
+ (Raw)
* rawdeflate.js: Raw Deflate
* rawinflate.js: Raw Inflate
+ zlib.min.js: ZLIB Inflate + Deflate
* inflate.min.js: ZLIB Inflate
* deflate.min.js: ZLIB Deflate
* inflate_stream.min.js: ZLIB Inflate (stream mode)
+ (GZIP)
* gzip.min.js: GZIP
* gunzip.min.js: GUNZIP
+ (PKZIP)
* zip.min.js ZIP
* unzip.min.js UNZIP
- node-zlib.js: (ZLIB + GZIP for node.js)
#### Raw Deflate
``js`
// plain = Array.
var deflate = new Zlib.RawDeflate(plain);
var compressed = deflate.compress();
#### Raw Deflate Option
See ZLIB Option.
#### ZLIB
`js`
// plain = Array.
var deflate = new Zlib.Deflate(plain);
var compressed = deflate.compress();
##### ZLIB Option
Second argument of Zlib.Deflate constructor
`js`
{
compressionType: Zlib.Deflate.CompressionType, // compression type
lazy: number // lazy matching parameter
}
Zlib.Deflate.CompressionType is enumerable,
Choose one in NONE (Store), FIXED (Fixed Huffman Coding), DYNAMIC (Dynamic Huffman Coding).
Default value is DYNAMIC.
lazy is Lazy Matching length.
This parameter is deprecated.
#### GZIP
GZIP implementation is incomplete.
However, there is no problem in usual use.
`js`
// plain = Array.
var gzip = new Zlib.Gzip(plain);
var compressed = gzip.compress();
##### GZIP Option
`js`
{
deflateOptions: Object, // see: deflate option (ZLIB Option)
flags: {
fname: boolean, // use filename?
comment: boolean, // use comment?
fhcrc: boolean // use file checksum?
},
filename: string, // filename
comment: string // comment
}
#### PKZIP
`js
var zip = new Zlib.Zip();
// plainData1
zip.addFile(plainData1, {
filename: stringToByteArray('foo.txt')
});
zip.addFile(plainData2, {
filename: stringToByteArray('bar.txt')
});
zip.addFile(plainData3, {
filename: stringToByteArray('baz.txt')
});
var compressed = zip.compress();
function stringToByteArray(str) {
var array = new (window.Uint8Array !== void 0 ? Uint8Array : Array)(str.length);
var i;
var il;
for (i = 0, il = str.length; i < il; ++i) {
array[i] = str.charCodeAt(i) & 0xff;
}
return array;
}
`
##### PKZIP Option
filename, comment, extraField are must use Uint8Array if enabled Typed Array.
`js`
{
filename: (Array.
comment: (Array.
extraField: (Array.
compress: boolean, // compress when called "addFile" method.
compressionMethod: Zlib.Zip.CompressionMethod, // STORE or DEFLATE
os: Zlib.Zip.OperatingSystem, // MSDOS or UNIX or MACINTOSH
deflateOption: Object // see: ZLIB Option
}
#### Raw Deflate
`js`
// compressed = Array.
var inflate = new Zlib.RawInflate(compressed);
var plain = inflate.decompress();
#### Raw Deflate Option
See ZLIB Option.
#### ZLIB
`js`
// compressed = Array.
var inflate = new Zlib.Inflate(compressed);
var plain = inflate.decompress();
##### ZLIB Option
Second argument of Zlib.Inflate constructor
`js`
{
'index': number, // start position in input buffer
'bufferSize': number, // initial output buffer size
'bufferType': Zlib.Inflate.BufferType, // buffer expantion type
'resize': boolean, // resize buffer(ArrayBuffer) when end of decompression (default: false)
'verify': boolean // verify decompression result (default: false)
}
Zlib.Inflate.BufferType is enumerable.
Choose one ADAPTIVE(default) and BLOCK.
- ADAPTIVE: buffer expansion based on compression ratio in filled buffer.
- BLOCK: buffer expansion based on BufferSize.
#### GZIP
`js`
// compressed = Array.
var gunzip = new Zlib.Gunzip(compressed);
var plain = gunzip.decompress();
#### PKZIP
`js`
// compressed = Array.
var unzip = new Zlib.Unzip(compressed);
var filenames = unzip.getFilenames();
var plain = unzip.decompress(filenames[0]);
see unit tests.
If you want to know the code before compile, SourceMaps and PrettyPrint can be used.
If you want to use the Source Map, use dev version.
For example, you want to use Inflate with Source Map.
- inflate.min.js // release version
- inflate.dev.min.js // development version <- use this
zlib.pretty.js is not renamed symbol.
How to build
------------
Build using Grunt and Closure Compiler.
- Grunt
- Python
Use "grunt" command.
``
$ grunt [target]
#### Build target
target | generate file | implementation
---------------|-----------------------|-------------
deps | deps.js | (dependency: deps.js)
deflate | deflate.min.js | ZLIB Deflate
inflate | inflate.min.js | ZLIB Inflate
inflate_stream | inflate_stream.min.js | ZLIB Inflate (stream)
zlib | zlib.min.js | ZLIB Deflate + Inflate
gzip | gzip.min.js | GZIP Compression
gunzip | gunzip.min.js | GZIP Decompression
zlib_and_gzip | zlib_and_gzip.min.js | ZLIB + GZIP
node | node-zlib.js | ZLIB + GZIP for node.js
zip | zip.min.js | PKZIP Compression
unzip | unzip.min.js | PKZIP Decompression
all | * | default target
Test
------
Unit tests are using Karma and mocha.
``
$ npm test
``
$ npm run test-karma
```
$ npm run test-mocha
Issue
-----
Preset dictionary is not implemented.
License
--------
Copyright © 2012 imaya.
Licensed under the MIT License.