{"_id":"@capnp-js/trans-packing","_rev":"1-e57c7335de89110be9b149217dbade42","name":"@capnp-js/trans-packing","dist-tags":{"latest":"0.4.0"},"versions":{"0.4.0":{"name":"@capnp-js/trans-packing","version":"0.4.0","description":"Transform to and from Cap'n Proto packed bytes.","main":"lib/index.js","scripts":{"build":"gulp build","refresh":"rm -f package-lock.json && npm run clean && npm unpublish --force && rm -rf node_modules/@capnp-js/ && npm run build && npm publish","clean":"gulp clean","test-flow":"flow check --show-all-errors --strip-root","test-unit":"nyc --cache=false --reporter=html --reporter=text mocha --require @babel/register test/unit/**/*.js","test":"npm run test-flow && npm run test-unit"},"repository":{"type":"git","url":"git+https://github.com/capnp-js/trans-packing.git"},"author":{"name":"Tim Popham"},"license":"MIT","bugs":{"url":"https://github.com/capnp-js/trans-packing/issues"},"homepage":"https://github.com/capnp-js/trans-packing#readme","devDependencies":{"@babel/core":"^7.2.2","@babel/plugin-transform-flow-strip-types":"^7.2.3","@babel/preset-env":"^7.2.3","@babel/register":"^7.0.0","babel-eslint":"^10.0.1","del":"^3.0.0","eslint-plugin-flowtype":"^3.2.0","flow-bin":"^0.89.0","flow-typed":"^2.5.1","gulp":"^4.0.0","gulp-babel":"^8.0.0","gulp-eslint":"^5.0.0","gulp-ext-replace":"^0.3.0","gulp-jscc":"^1.2.0","gulp-uglify":"^3.0.1","mocha":"^5.2.0","nyc":"^13.2.0","prando":"^5.1.0","rollup":"^0.68.1"},"dependencies":{"@capnp-js/bytes":"^0.4.0","@capnp-js/transform":"^0.4.0"},"babel":{"presets":[["@babel/preset-env",{"targets":{"node":"8.9"},"modules":"commonjs"}]],"plugins":["@babel/transform-flow-strip-types"]},"nyc":{"all":true,"include":["src/**/*.js"]},"gitHead":"0eebf351e63d947f54d01837f31d74c35c279887","_id":"@capnp-js/trans-packing@0.4.0","_npmVersion":"6.5.0","_nodeVersion":"11.6.0","_npmUser":{"name":"popham","email":"popham@uw.edu"},"dist":{"integrity":"sha512-zL+yaWtD4tJ93P7vQq1647mdKIBvv6Q8TQwI+kK80tl+NLXJ6cJgKQKzRmKlQ8XXE/XRT+Qjk5yKuVHdVJyBuA==","shasum":"1cbf57fcf198344654596e93a855784f5b0645d4","tarball":"https://registry.npmjs.org/@capnp-js/trans-packing/-/trans-packing-0.4.0.tgz","fileCount":62,"unpackedSize":147825,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcsl4KCRA9TVsSAnZWagAAI58P/Rd/Ab7G1moNtA6VKeBi\nmPATM+TcVvmwJoxtYWpEsjL2rVmXmX+ZysZyeA+J4a9ZwWEbqZqsKQeP2OXG\nOq0iexxFqruQ0M2yikg8A8WceK2VFofLmFhB3+tdlfcrFZs/YGPrCAGPDUY6\nI2m95gg3Itbtp5Wh4fTICxcNVglzQtOt3w2hxxIzMOMq92/DjcAYO2QX33sV\nbUJKuTcDjgHa3Ezi4+gL135mu8ExMxjy6z05fb5yzuqGwt042sQUVA7jSWT/\nunyuP9t2P29+O/ToUe3xHf3S/JfmB7VA2bfOycMMQmsA8wQ7+AY23VJimBZf\njSri1V++LlsD1Xzmsd2PqbbkIZKsmKCAOmI+CB8/D+KjtvZjpubruZxRYQoS\n2Z2jbR1tfGOa4ykvT0nIjcfEjQ660/MG5YL+MdUBQaQxzVFFBoe1yZbvt01K\neJiKku0vQzLKXTy8UpZRsfo4CfjJ2x5frRva1tsQB8Qy5U/AHtOSqWMka7GX\nem2FZAwlFPLFc0fA5EBQq3jMZkA+wL2+BaES7wRa7Y8QYZlz8VVXZN9yG614\nbvAniyECaA/H9Ag+0AmG80DXR087I/GIU4xFptUOnmSIc8r/+qI+QEn4LsdJ\nqG0aL7h/mEY53+aKj/xtJGEXbgxXJ9PZ5BRyFtsPlvmLxik4XQbfxBQIb5bQ\nAQTr\r\n=qQXH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHZAJ/+d4ZQExGZmu00PIcXAK03O3wMNv3Qd0DmyaBKcAiEA8A1euaUfrVMx/7EDcUW89BQF1kMlrgPEEMTW+CY7QrU="}]},"maintainers":[{"name":"popham","email":"popham@uw.edu"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/trans-packing_0.4.0_1555193354064_0.025832437505201478"},"_hasShrinkwrap":false}},"time":{"created":"2019-04-13T22:09:13.892Z","0.4.0":"2019-04-13T22:09:14.190Z","modified":"2022-04-04T21:46:12.374Z"},"maintainers":[{"name":"popham","email":"popham@uw.edu"}],"description":"Transform to and from Cap'n Proto packed bytes.","homepage":"https://github.com/capnp-js/trans-packing#readme","repository":{"type":"git","url":"git+https://github.com/capnp-js/trans-packing.git"},"author":{"name":"Tim Popham"},"bugs":{"url":"https://github.com/capnp-js/trans-packing/issues"},"license":"MIT","readme":"# Cap'n Proto Packing Compression\nBasic zero-deflating compression.\nSee [the spec](https://capnproto.org/encoding.html#packing).\nThis library uses the pattern described at\n[capnp-js/transform](https://github.com/capnp-js/transform) to (1) encode\nunpacked `Uint8Array` sequences into packed `Uint8Array` sequences and to (2) decode\npacked `Uint8Array` sequences into unpacked `Uint8Array` sequences.\n\n## Encoding\nGiven aliases `type Unpacked = Uint8Array` and `type Packed = Uint8Array`,\n\n```js\nimport { encoder } from \"@capnp-js/packing\";\n\nencoder(buffer: Uint8Array): IteratorTransform<Unpacked, Packed>\n\ntype IteratorTransform<Unpacked, Packed> = (source: SugarlessIterator<Unpacked>) => SugarlessIterator<Packed>\n\ninterface SugarlessIterator<T> {\n  next(): SugarlessIteratorResult<T>;\n}\n\ntype SugarlessIteratorResult<T> = { done: true | Error } | { done: false, value: T };\n```\n\nThe `encoder` function requires a buffer with at least 2048 bytes of space.\nThe resulting `IteratorTransform` converts a source of unpacked data into a source of packed data.\nConsider, for example, the following infinite source of word-aligned, unpacked data:\n\n```js\nconst source = {\n  next() {\n    const wordWidth = 8;\n    const randomLength = wordWidth * Math.floor(Math.random() * 250);\n    const randomData = new Uint8Array(randomLength);\n    for (let i=0; i<randomLength; ++i) {\n      randomData[i] = Math.floor(Math.random() * 0xff);\n    }\n\n    return randomData;\n  },\n};\n```\n\nI can pack data from this source by providing a buffer to `encoder`:\n\n```js\nconst encode = encoder(new Uint8Array(2048));\nconst packed: SugarlessIterator<Packed> = encode(source);\nfor (let i=0; i<10; ++i) {\n  const p = packed.next();\n  const compressedLength = p.value.length;\n  console.log(compressedLength);\n}\n```\n\nNote that without an end to its source stream, `p.done` will always evaluate to false.\n\n## Decoding\nGiven aliases `type Unpacked = Uint8Array` and `type Packed = Uint8Array`,\n\n```js\nimport { decoder } from \"@capnp-js/packing\";\n\ndecoder(buffer: Uint8Array): IteratorTransform<Packed, Unpacked>\n\ntype IteratorTransform<Packed, Unpacked> = (source: SugarlessIterator<Packed>) => SugarlessIterator<Unpacked>\n\ninterface SugarlessIterator<T> {\n  next(): SugarlessIteratorResult<T>;\n}\n\ntype SugarlessIteratorResult<T> = { done: true | Error } | { done: false, value: T };\n```\n\nThe `decoder` function requires a buffer with at least 2048 bytes of space.\nThe resulting `IteratorTransform` converts a source of packed data into a source of unpacked data.\nConsider, for example, the `packed` source that I just created under [Encoding](https://github.com/capnp-js/packing#encoding).\n\nI can unpack this data by providing a buffer to `decoder`:\n\n```js\nconst decode = decoder(new Uint8Array(2048));\nconst unpacked: SugarlessIterator<Unpacked> = decode(packed);\nfor (let i=0; i<10; ++i) {\n  const u = unpacked.next();\n  const randomLength = p.value.length;\n  console.log(randomLength);\n}\n```\n\nNote that without an end to its source stream, `u.done` will always evaluate to false.\n","readmeFilename":"README.md"}