{"_id":"gutter","_rev":"22-2de7ffdcece2172be449391dc2a337c5","name":"gutter","description":"streaming JSON.stringify() for nested streams","dist-tags":{"latest":"1.0.3"},"versions":{"0.0.0":{"name":"gutter","description":"streaming JSON.stringify() for nested streams","version":"0.0.0","repository":{"type":"git","url":"git://github.com/substack/node-gutter.git"},"main":"index.js","keywords":["stream","stringify","json"],"directories":{"lib":".","example":"example","test":"test"},"scripts":{"test":"tap test/*.js"},"dependencies":{"traverse":"0.5.x","JSONStream":"0.1.x","morestreams":"0.1.x"},"devDependencies":{"tap":"0.0.x","event-stream":"0.6.x"},"engines":{"node":">=0.4.0"},"license":"MIT","author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"_npmUser":{"name":"substack","email":"mail@substack.net"},"_id":"gutter@0.0.0","_engineSupported":true,"_npmVersion":"1.0.101","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"37806fea529bc13c6872a36125e21375ee7a6e0d","tarball":"https://registry.npmjs.org/gutter/-/gutter-0.0.0.tgz","integrity":"sha512-5ayCuDupv7ZM4QWlO76MR7j8gtOhY7F/uo+mszasTVAbLLdMutScTR2CxOkMkO0T7/HcFbPsGUFb+XR4foZveg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTbNlR9LZOcie5W8oTA7f0VXYlN9qwjkkV19V/R7fNzQIgBq3K2OYJIE6JQAW5jaxvK4qvNdWR/cNzWjS19hGC8lg="}]},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"0.0.1":{"name":"gutter","description":"streaming JSON.stringify() for nested streams","version":"0.0.1","repository":{"type":"git","url":"git://github.com/substack/node-gutter.git"},"main":"index.js","keywords":["stream","stringify","json"],"directories":{"lib":".","example":"example","test":"test"},"scripts":{"test":"tap test/*.js"},"dependencies":{"traverse":"0.5.x","JSONStream":"0.1.x","morestreams":"0.1.x"},"devDependencies":{"tap":"0.0.x","event-stream":"0.6.x"},"engines":{"node":">=0.4.0"},"license":"MIT","author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"_npmUser":{"name":"substack","email":"mail@substack.net"},"_id":"gutter@0.0.1","_engineSupported":true,"_npmVersion":"1.0.101","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"d7e5403973ff2d73ca33ab91ebaf896132ed3fd5","tarball":"https://registry.npmjs.org/gutter/-/gutter-0.0.1.tgz","integrity":"sha512-sHA9mOIDLqjI1MsxRKOsrELsoBaYmH5tQGdykDwWQ7WD1wlzS6oehbqLxq2kkw+OZ721k73o7R+zjqnC6BDvfQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBSFkrOY5QoQw2c4x0u9NnSFVeyiI4nxFTO4uXrJMXSfAiAsVpSIZ6k9UrvNFiwzOMgN+BD00NJVR23NsWnbTn2GMw=="}]},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"0.1.0":{"name":"gutter","description":"streaming JSON.stringify() for nested streams","version":"0.1.0","repository":{"type":"git","url":"git://github.com/substack/node-gutter.git"},"main":"index.js","keywords":["stream","stringify","json"],"directories":{"lib":".","example":"example","test":"test"},"scripts":{"test":"tap test/*.js"},"dependencies":{"traverse":"0.5.x","JSONStream":"https://github.com/substack/JSONStream/tarball/master","morestreams":"0.1.x"},"devDependencies":{"tap":"~0.2.1","event-stream":"0.6.x"},"engines":{"node":">=0.4.0"},"license":"MIT","author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"_npmUser":{"name":"substack","email":"mail@substack.net"},"_id":"gutter@0.1.0","_engineSupported":true,"_npmVersion":"1.0.106","_nodeVersion":"v0.4.12","_defaultsLoaded":true,"dist":{"shasum":"f489027e0520270fe1d78db82d401ee8bd88d2f7","tarball":"https://registry.npmjs.org/gutter/-/gutter-0.1.0.tgz","integrity":"sha512-qTvFgmGj78Mzzn7QlukM/QtU0P3h+5FcR3AuvdbcOoNrPOKwB9DTl3p88Ioi/PvCkDWlk/5QLsLPQZU31GrzuQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAvpXRdIgH/FjwJr7eewf++5iROAWP7dZNw+2DVf55FiAiEAqjsKfSHKxUmeNxahKjz0lcxMTS1pHIvpsHP5tQ9pOsU="}]},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"0.2.0":{"name":"gutter","description":"streaming JSON.stringify() for nested streams","version":"0.2.0","repository":{"type":"git","url":"git://github.com/substack/node-gutter.git"},"main":"index.js","keywords":["stream","stringify","json"],"directories":{"lib":".","example":"example","test":"test"},"scripts":{"test":"tap test/*.js"},"dependencies":{"traverse":"~0.6.3","JSONStream":"https://github.com/substack/JSONStream/tarball/master","pause-stream":"~0.0.4"},"devDependencies":{"tap":"~0.3.1","event-stream":"0.6.x"},"engines":{"node":">=0.4.0"},"license":"MIT","author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"_id":"gutter@0.2.0","dist":{"shasum":"fe7f06d512ef0c323bd6a6ae41e530c44a0c731e","tarball":"https://registry.npmjs.org/gutter/-/gutter-0.2.0.tgz","integrity":"sha512-FCsYPgBuNqvQ8i9aQKEnZyo2tFs+6AJViIScTTZmTAjQIDD69gcx9VTauie7cLZqfLsQgAFc/9zgoQYbeTldaA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIELZopps1XwDDltOBdNefadwX1odJXE+M0a/Pjs0QRh4AiAuAyo2Ac0wixo4s7x+xJQh6EQoHIGgkiNjnx3oGi6R8g=="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}]},"1.0.0":{"name":"gutter","description":"streaming JSON.stringify() for nested streams","version":"1.0.0","repository":{"type":"git","url":"git://github.com/substack/node-gutter.git"},"main":"index.js","keywords":["stream","stringify","json"],"scripts":{"test":"tape test/*.js test/server/*.js"},"devDependencies":{"through2":"~0.2.3","through":"~2.3.4","concat-stream":"~1.2.1","tape":"~2.3.0"},"license":"MIT","author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"dependencies":{"inherits":"~2.0.1"},"testling":{"files":"test/*.js","browsers":["ie/6..latest","firefox/15","firefox/latest","firefox/nightly","chrome/15","chrome/latest","chrome/canary","opera/12..latest","opera/next","safari/5.1..latest","ipad/6.0..latest","iphone/6.0..latest","android-browser/4.2..latest"]},"bugs":{"url":"https://github.com/substack/node-gutter/issues"},"homepage":"https://github.com/substack/node-gutter","_id":"gutter@1.0.0","dist":{"shasum":"6b1dca56f599081e661d60c65d21320a841925f2","tarball":"https://registry.npmjs.org/gutter/-/gutter-1.0.0.tgz","integrity":"sha512-r1udaJA1ySApDpnU1o9/Ad2BTxx0bPUxOEUi5gQeaZtIcjTiowph35725UDFDnvGRtGWRS9rGU6XN8V8sQzy5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpba7mBYwBOpY0SXZD1fLJov4mX6Rx/79WI/EvvF47GwIhAP/nhG38BeorD0TGjVxB6oGYIGBHJgQ5PxU7mdt7GOGy"}]},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}],"directories":{}},"1.0.1":{"name":"gutter","description":"streaming JSON.stringify() for nested streams","version":"1.0.1","repository":{"type":"git","url":"git://github.com/substack/node-gutter.git"},"main":"index.js","keywords":["stream","stringify","json"],"scripts":{"test":"tape test/*.js test/server/*.js"},"devDependencies":{"through2":"~0.2.3","through":"~2.3.4","concat-stream":"~1.2.1","tape":"~2.3.0"},"license":"MIT","author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"dependencies":{"inherits":"~2.0.1","jsonify":"0.0.0","concat-stream":"~1.4.5","readable-stream":"^1.0.27-1"},"testling":{"files":"test/*.js","browsers":["ie/6..latest","firefox/15","firefox/latest","firefox/nightly","chrome/15","chrome/latest","chrome/canary","opera/12..latest","opera/next","safari/5.1..latest","ipad/6.0..latest","iphone/6.0..latest","android-browser/4.2..latest"]},"bugs":{"url":"https://github.com/substack/node-gutter/issues"},"homepage":"https://github.com/substack/node-gutter","_id":"gutter@1.0.1","dist":{"shasum":"942637e2335f7d6e8f144a44fdc222396d6f5166","tarball":"https://registry.npmjs.org/gutter/-/gutter-1.0.1.tgz","integrity":"sha512-TjUFFWXeQQH7kJDGq+vO0D0kFGynWbuaDQ0liK/uTEInCzqOogifjcKIUorBobpR2ttN/t5uQyoARrcJd6K3eQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAzFh3kFm5gDEaLDhRD8vdxDZxuzWdyJo3B3VuwJOL3lAiADjtZbzyMi3XZLBo00f38NCdrIPOiMSJNi6J/xsOFM5A=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}],"directories":{}},"1.0.2":{"name":"gutter","description":"streaming JSON.stringify() for nested streams","version":"1.0.2","repository":{"type":"git","url":"git://github.com/substack/node-gutter.git"},"main":"index.js","keywords":["stream","stringify","json"],"scripts":{"test":"tape test/*.js test/server/*.js"},"devDependencies":{"through2":"~0.2.3","through":"~2.3.4","concat-stream":"~1.4.5","tape":"~2.3.0"},"license":"MIT","author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"dependencies":{"inherits":"~2.0.1","jsonify":"0.0.0","readable-stream":"^1.0.27-1"},"testling":{"files":"test/*.js","browsers":["ie/6..latest","firefox/15","firefox/latest","firefox/nightly","chrome/15","chrome/latest","chrome/canary","opera/12..latest","opera/next","safari/5.1..latest","ipad/6.0..latest","iphone/6.0..latest","android-browser/4.2..latest"]},"bugs":{"url":"https://github.com/substack/node-gutter/issues"},"homepage":"https://github.com/substack/node-gutter","_id":"gutter@1.0.2","dist":{"shasum":"ae3c57d61339befef80a28f379dd8acdff300c40","tarball":"https://registry.npmjs.org/gutter/-/gutter-1.0.2.tgz","integrity":"sha512-avHXbk068ZFhpCZe87oe0waZ2woRHyE9W0b+sPP6hM5JSt6PelxC5mCLQAOMlDIej6Qr8nSnXYaSF7mxrt47sw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAULO/zQRXgi86tE0aXQ4B7ngiSGeuCssQFpqvZsjDdrAiB9ruNoBziiJ66vnK0kxBxbdoIIP/Z0NVGdbFOYSPL3wg=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}],"directories":{}},"1.0.3":{"name":"gutter","description":"streaming JSON.stringify() for nested streams","version":"1.0.3","repository":{"type":"git","url":"git://github.com/substack/node-gutter.git"},"main":"index.js","keywords":["stream","stringify","json"],"scripts":{"test":"tape test/*.js test/server/*.js"},"devDependencies":{"through2":"^1.0.0","through":"~2.3.4","concat-stream":"~1.4.5","tape":"~2.3.0"},"license":"MIT","author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"dependencies":{"inherits":"~2.0.1","jsonify":"0.0.0","readable-stream":"^1.0.27-1"},"testling":{"files":"test/*.js","browsers":["ie/6..latest","firefox/15","firefox/latest","firefox/nightly","chrome/15","chrome/latest","chrome/canary","opera/12..latest","opera/next","safari/5.1..latest","ipad/6.0..latest","iphone/6.0..latest","android-browser/4.2..latest"]},"bugs":{"url":"https://github.com/substack/node-gutter/issues"},"homepage":"https://github.com/substack/node-gutter","_id":"gutter@1.0.3","dist":{"shasum":"e3d571f3344d7ba35ed1d3cb29a50b0356dd0ff0","tarball":"https://registry.npmjs.org/gutter/-/gutter-1.0.3.tgz","integrity":"sha512-aRswkLweWtFw0FNv+yr0jw/G1tjmo1BZMiTk517MPY7KTkrDiZmgAhMlm0Hh1DcMwQlC2ZspSM3+K861zjFILQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHib5h94LGEGy4B3DhA7udITYddA5iON//QVgvBvFudfAiB/pK5MyKLAhRrSYFrkLh5Gt3iqfN5kO3dYDNV0udMpRg=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"substack","email":"mail@substack.net"},"maintainers":[{"name":"substack","email":"mail@substack.net"}],"directories":{}}},"maintainers":[{"email":"nopersonsmodules@gmail.com","name":"nopersonsmodules"}],"time":{"modified":"2022-11-08T10:39:07.406Z","created":"2011-11-10T08:26:23.418Z","0.0.0":"2011-11-10T08:26:25.950Z","0.0.1":"2011-11-10T09:06:30.399Z","0.1.0":"2012-02-22T18:18:25.587Z","0.2.0":"2012-09-19T12:16:54.314Z","1.0.0":"2013-12-24T11:34:37.938Z","1.0.1":"2014-04-26T21:35:59.676Z","1.0.2":"2014-04-26T21:39:43.138Z","1.0.3":"2014-04-26T21:49:43.079Z"},"author":{"name":"James Halliday","email":"mail@substack.net","url":"http://substack.net"},"repository":{"type":"git","url":"git://github.com/substack/node-gutter.git"},"users":{"tokuhirom":true,"leesei":true},"readme":"# gutter\n\njson stringify nested streams\n\n[![build status](https://secure.travis-ci.org/substack/node-gutter.png)](https://travis-ci.org/substack/node-gutter)\n\n[![testling badge](https://ci.testling.com/substack/node-gutter.png)](https://ci.testling.com/substack/node-gutter)\n\n# example\n\nGutter behaves just like `JSON.stringify()`, except it returns a stream and will\nexpand any nested streams it encounters. For example, this object stringifies\nsome properties and contains some inline content from `/etc/issue`:\n\n``` js\nvar gutter = require('gutter');\nvar fs = require('fs');\n\nvar out = gutter({\n    platform : process.platform,\n    arch: process.arch,\n    issue: fs.createReadStream('/etc/issue')\n});\nout.pipe(process.stdout);\n```\n\n# nested leveldb queries\n\nFor a more complicated example, suppose we want to generate a json dump with\nnested properties, but to nest these properties, we need to run another\nstreaming query for each document. With `gutter`, you can write a stream query\nthat embeds nested streams into the output objects:\n\n```\nvar gutter = require('gutter');\nvar through2 = require('through2');\nvar fs = require('fs');\n\nvar level = require('level');\nvar db = level('/tmp/gutter-example-db', { encoding: 'json' });\ndb.batch(require('./data.json'));\n\nvar out = gutter({\n    name : 'hackerspaces',\n    manifesto: fs.createReadStream(__dirname + '/manifesto.txt'),\n    spaces: hackerspaces()\n});\nout.pipe(process.stdout);\n\nfunction hackerspaces () {\n    var opts = { start: 'hackerspace!', end: 'hackerspace!~' };\n    return db.createReadStream(opts)\n        .pipe(through2({ objectMode: true }, write))\n    ;\n    \n    function write (row, enc, next) {\n        var name = row.key.split('!')[1];\n        this.push({\n            name: name,\n            founded: row.value.founded,\n            hackers: hackers(name)\n        });\n        next();\n    }\n}\n\nfunction hackers (hackerspace) {\n    var start = 'hackerspace-hacker!' + hackerspace + '!';\n    var opts = { start: start, end: start + '~' };\n    return db.createReadStream(opts)\n        .pipe(through2({ objectMode: true }, write))\n    ;\n    \n    function write (row, enc, next) {\n        var self = this;\n        var name = row.key.split('!')[2];\n        db.get('hacker!' + name, function (err, r) {\n            if (err) return next(err);\n            self.push({\n                name: name,\n                hackerspace: r.hackerspace\n            });\n            next();\n        });\n    }\n}\n```\n\nAs the document is traversed, each stream encountered is expanded in-place to\ngenerate the complete output without buffering the whole thing into memory:\n\n```\n{\"name\":\"hackerspaces\",\"manifesto\":[\"Yes, I am a criminal.  My crime is that of curiosity.  My crime is that of\\njudging people by what they say and think, not what they look like. My crime is\\nthat of outsmarting you, something that you will never forgive me for.\\n\\nI am a hacker, and this is my manifesto.  You may stop this individual, but you\\ncan't stop us all... after all, we're all alike.\\n\"],\"spaces\":[{\"name\":\"noisebridge\",\"founded\":2007,\"hackers\":[{\"name\":\"ioerror\",\"hackerspace\":\"noisebridge\"},{\"name\":\"mitch\",\"hackerspace\":\"noisebridge\"}]},{\"name\":\"sudoroom\",\"founded\":2011,\"hackers\":[{\"name\":\"maxogden\",\"hackerspace\":\"sudoroom\"},{\"name\":\"mk30\",\"hackerspace\":\"sudoroom\"},{\"name\":\"substack\",\"hackerspace\":\"sudoroom\"},{\"name\":\"wrought\",\"hackerspace\":\"sudoroom\"},{\"name\":\"yardena\",\"hackerspace\":\"sudoroom\"}]}]}\n```\n\n# methods\n\n``` js\nvar gutter = require('gutter');\n```\n\n## var stream = gutter(object)\n\nReturn a new readable `stream` of json text from a recursive stringification of\n`object`, expanding streams in-place into arrays.\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install gutter\n```\n\n# license\n\nMIT\n","homepage":"https://github.com/substack/node-gutter","keywords":["stream","stringify","json"],"bugs":{"url":"https://github.com/substack/node-gutter/issues"},"license":"MIT","readmeFilename":"readme.markdown"}