{"_id":"o-stream","_rev":"4080124","name":"o-stream","description":"Intuitive node streams in typescript.","dist-tags":{"latest":"0.3.0"},"maintainers":[{"name":"itayronen","email":""}],"time":{"modified":"2025-10-16T23:05:13.000Z","created":"2017-03-13T17:22:52.088Z","0.3.0":"2021-07-26T20:38:44.499Z","0.2.2":"2017-11-10T11:10:24.156Z","0.2.1":"2017-09-16T13:42:24.926Z","0.2.0":"2017-09-16T13:32:46.063Z","0.1.12":"2017-07-15T13:15:37.187Z","0.1.11":"2017-07-15T13:11:41.293Z","0.1.10":"2017-03-17T07:49:54.967Z","0.1.9":"2017-03-16T18:12:20.589Z","0.1.8":"2017-03-13T18:53:08.718Z","0.1.7":"2017-03-13T17:27:37.618Z","0.1.6":"2017-03-13T17:24:26.371Z","0.1.5":"2017-03-13T17:22:52.088Z"},"users":{},"author":{"name":"Itay Ronen","url":"https://gitlab.com/itayronen"},"versions":{"0.3.0":{"name":"o-stream","version":"0.3.0","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","author":{"name":"Itay Ronen","url":"https://gitlab.com/itayronen"},"homepage":"https://gitlab.com/itayronen/o-stream","license":"MIT","keywords":["stream","transform","combined stream","CombinedStream","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"gulp build && just-test"},"dependencies":{},"devDependencies":{"@types/chai":"^4.2.21","@types/node":"^16.4.3","chai":"^4.3.4","del":"^6.0.0","gulp":"^4.0.2","gulp-ignore":"^3.0.0","gulp-tap":"^2.0.0","gulp-typescript":"^5.0.1","just-test-api":"^1.1.0","just-test-node":"^1.5.0","merge2":"^1.4.1","typescript":"^4.3.5"},"gitHead":"87bc309d77d7c0c7f75883b3d2c3f0a5ae0a450f","_id":"o-stream@0.3.0","_nodeVersion":"10.16.3","_npmVersion":"7.20.1","dist":{"shasum":"204d27bc3fb395164507d79b381e91752e8daedc","size":6590,"noattachment":false,"key":"/o-stream/-/o-stream-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.3.0.tgz"},"_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"directories":{},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/o-stream_0.3.0_1627331924354_0.9080664724064749"},"_hasShrinkwrap":false,"publish_time":1627331924499,"_cnpm_publish_time":1627331924499,"_cnpmcore_publish_time":"2021-12-16T19:17:52.441Z"},"0.2.2":{"name":"o-stream","version":"0.2.2","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"homepage":"https://gitlab.com/itayronen/o-stream","license":"MIT","keywords":["stream","transform","combined stream","CombinedStream","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"gulp build && just-test"},"dependencies":{},"devDependencies":{"@types/chai":"^4.0.4","@types/node":"^8.0.28","chai":"^4.1.2","del":"^3.0.0","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^1.0.1","gulp-typescript":"^3.1.5","just-test-node":"^1.2.5","typescript":"^2.2.1"},"gitHead":"5cc626237cf8426c834416889cb1d6b53e2dbced","_id":"o-stream@0.2.2","_npmVersion":"5.0.3","_nodeVersion":"7.9.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"7fe03af870b8f9537af33b312b381b3034ab410f","size":5795,"noattachment":false,"key":"/o-stream/-/o-stream-0.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.2.2.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/o-stream-0.2.2.tgz_1510312223257_0.7547909952700138"},"directories":{},"publish_time":1510312224156,"_hasShrinkwrap":false,"_cnpm_publish_time":1510312224156,"_cnpmcore_publish_time":"2021-12-16T19:17:52.651Z"},"0.2.1":{"name":"o-stream","version":"0.2.1","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"homepage":"https://gitlab.com/itayronen/o-stream","license":"MIT","keywords":["stream","transform","combined stream","CombinedStream","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"gulp build && just-test"},"dependencies":{},"devDependencies":{"@types/chai":"^4.0.4","@types/node":"^8.0.28","chai":"^4.1.2","del":"^3.0.0","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^1.0.1","gulp-typescript":"^3.1.5","just-test-node":"^1.2.5","typescript":"^2.2.1"},"gitHead":"fb602c23679a441a88dbdac10f21a54d078a5e5a","_id":"o-stream@0.2.1","_npmVersion":"5.0.3","_nodeVersion":"7.9.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"5646cf4bb40621e2d1c30cc62514859e683ecd5f","size":5241,"noattachment":false,"key":"/o-stream/-/o-stream-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.2.1.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/o-stream-0.2.1.tgz_1505569344000_0.6453513465821743"},"directories":{},"publish_time":1505569344926,"_hasShrinkwrap":false,"_cnpm_publish_time":1505569344926,"_cnpmcore_publish_time":"2021-12-16T19:17:52.872Z"},"0.2.0":{"name":"o-stream","version":"0.2.0","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"homepage":"https://gitlab.com/itayronen/o-stream","license":"MIT","keywords":["stream","transform","combined stream","CombinedStream","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"gulp build && just-test"},"dependencies":{},"devDependencies":{"@types/chai":"^4.0.4","@types/node":"^8.0.28","chai":"^4.1.2","del":"^3.0.0","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^1.0.1","gulp-typescript":"^3.1.5","just-test-node":"^1.2.5","typescript":"^2.2.1"},"gitHead":"59b3fa37d85b4feace97665ed698da5d8f1a49c1","_id":"o-stream@0.2.0","_npmVersion":"5.0.3","_nodeVersion":"7.9.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"b1df5b70e5bc33a285de22bdd88654f662a726e0","size":5110,"noattachment":false,"key":"/o-stream/-/o-stream-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.2.0.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/o-stream-0.2.0.tgz_1505568764959_0.6296235700137913"},"directories":{},"publish_time":1505568766063,"_hasShrinkwrap":false,"_cnpm_publish_time":1505568766063,"_cnpmcore_publish_time":"2021-12-16T19:17:53.075Z"},"0.1.12":{"name":"o-stream","version":"0.1.12","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"homepage":"https://gitlab.com/itayronen/o-stream","license":"MIT","keywords":["stream","transform","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"jasmine"},"dependencies":{},"devDependencies":{"@types/jasmine":"^2.5.45","@types/node":"^7.0.8","del":"^2.2.2","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^0.1.3","gulp-typescript":"^3.1.5","jasmine":"^2.5.3","typescript":"^2.2.1"},"gitHead":"009ad80a224d16ab54113313108c570259114577","_id":"o-stream@0.1.12","_npmVersion":"5.0.3","_nodeVersion":"7.9.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"bc9520f122101e4aee0067fb3b55e1a1856a8a80","size":3947,"noattachment":false,"key":"/o-stream/-/o-stream-0.1.12.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.1.12.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/o-stream-0.1.12.tgz_1500124536243_0.8543296244461089"},"directories":{},"publish_time":1500124537187,"_hasShrinkwrap":false,"_cnpm_publish_time":1500124537187,"_cnpmcore_publish_time":"2021-12-16T19:17:53.284Z"},"0.1.11":{"name":"o-stream","version":"0.1.11","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"homepage":"https://gitlab.com/itayronen/o-stream","license":"MIT","keywords":["stream","transform","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"jasmine"},"dependencies":{},"devDependencies":{"@types/jasmine":"^2.5.45","@types/node":"^7.0.8","del":"^2.2.2","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^0.1.3","gulp-typescript":"^3.1.5","jasmine":"^2.5.3","typescript":"^2.2.1"},"gitHead":"8692b6710346c458632ec7da22993e1b83c286bb","_id":"o-stream@0.1.11","_npmVersion":"5.0.3","_nodeVersion":"7.9.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"af93d353b795bed81195ae4aa2247aee556b0652","size":3952,"noattachment":false,"key":"/o-stream/-/o-stream-0.1.11.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.1.11.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/o-stream-0.1.11.tgz_1500124300366_0.2751060340087861"},"directories":{},"publish_time":1500124301293,"_hasShrinkwrap":false,"_cnpm_publish_time":1500124301293,"_cnpmcore_publish_time":"2021-12-16T19:17:53.460Z"},"0.1.10":{"name":"o-stream","version":"0.1.10","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"license":"MIT","keywords":["stream","transform","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"jasmine"},"dependencies":{},"devDependencies":{"@types/jasmine":"^2.5.45","@types/node":"^7.0.8","del":"^2.2.2","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^0.1.3","gulp-typescript":"^3.1.5","jasmine":"^2.5.3","typescript":"^2.2.1"},"_id":"o-stream@0.1.10","_shasum":"330005f86a67e154c64b0ff1dea9bebabf949771","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.5.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"330005f86a67e154c64b0ff1dea9bebabf949771","size":3924,"noattachment":false,"key":"/o-stream/-/o-stream-0.1.10.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.1.10.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/o-stream-0.1.10.tgz_1489736993381_0.6200628674123436"},"directories":{},"publish_time":1489736994967,"_hasShrinkwrap":false,"_cnpm_publish_time":1489736994967,"_cnpmcore_publish_time":"2021-12-16T19:17:53.648Z"},"0.1.9":{"name":"o-stream","version":"0.1.9","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"license":"MIT","keywords":["stream","transform","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"jasmine"},"dependencies":{},"devDependencies":{"@types/jasmine":"^2.5.45","@types/node":"^7.0.8","del":"^2.2.2","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^0.1.3","gulp-typescript":"^3.1.5","jasmine":"^2.5.3","typescript":"^2.2.1"},"_id":"o-stream@0.1.9","_shasum":"295f72f17a9912bccd71fa43d684914cb7425d13","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.5.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"295f72f17a9912bccd71fa43d684914cb7425d13","size":3917,"noattachment":false,"key":"/o-stream/-/o-stream-0.1.9.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.1.9.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/o-stream-0.1.9.tgz_1489687938676_0.9573239549063146"},"directories":{},"publish_time":1489687940589,"_hasShrinkwrap":false,"_cnpm_publish_time":1489687940589,"_cnpmcore_publish_time":"2021-12-16T19:17:53.851Z"},"0.1.8":{"name":"o-stream","version":"0.1.8","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"license":"MIT","keywords":["stream","transform","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"jasmine"},"dependencies":{},"devDependencies":{"@types/jasmine":"^2.5.45","@types/node":"^7.0.8","del":"^2.2.2","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^0.1.3","gulp-typescript":"^3.1.5","jasmine":"^2.5.3","typescript":"^2.2.1"},"_id":"o-stream@0.1.8","_shasum":"ffe122694492a2282e830e2a949d07c8ecd07c8a","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.5.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"ffe122694492a2282e830e2a949d07c8ecd07c8a","size":3888,"noattachment":false,"key":"/o-stream/-/o-stream-0.1.8.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.1.8.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/o-stream-0.1.8.tgz_1489431186694_0.9410226005129516"},"directories":{},"publish_time":1489431188718,"_hasShrinkwrap":false,"_cnpm_publish_time":1489431188718,"_cnpmcore_publish_time":"2021-12-16T19:17:54.119Z"},"0.1.7":{"name":"o-stream","version":"0.1.7","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"license":"MIT","keywords":["stream","transform","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"jasmine"},"dependencies":{},"devDependencies":{"@types/jasmine":"^2.5.45","@types/node":"^7.0.8","del":"^2.2.2","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^0.1.3","gulp-typescript":"^3.1.5","jasmine":"^2.5.3","typescript":"^2.2.1"},"_id":"o-stream@0.1.7","_shasum":"b2c60ee7e44e69fb85a67692b6f1beba404b16e0","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.5.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"b2c60ee7e44e69fb85a67692b6f1beba404b16e0","size":3589,"noattachment":false,"key":"/o-stream/-/o-stream-0.1.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.1.7.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/o-stream-0.1.7.tgz_1489426056985_0.6608363438863307"},"directories":{},"publish_time":1489426057618,"_hasShrinkwrap":false,"_cnpm_publish_time":1489426057618,"_cnpmcore_publish_time":"2021-12-16T19:17:54.327Z"},"0.1.6":{"name":"o-stream","version":"0.1.6","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"license":"MIT","keywords":["stream","transform","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"jasmine"},"dependencies":{},"devDependencies":{"@types/jasmine":"^2.5.45","@types/node":"^7.0.8","del":"^2.2.2","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^0.1.3","gulp-typescript":"^3.1.5","jasmine":"^2.5.3","typescript":"^2.2.1"},"_id":"o-stream@0.1.6","_shasum":"b596d8b63704e552555377b679b16e8c42ea2561","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.5.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"b596d8b63704e552555377b679b16e8c42ea2561","size":3603,"noattachment":false,"key":"/o-stream/-/o-stream-0.1.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.1.6.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/o-stream-0.1.6.tgz_1489425864502_0.5521157020702958"},"directories":{},"publish_time":1489425866371,"_hasShrinkwrap":false,"_cnpm_publish_time":1489425866371,"_cnpmcore_publish_time":"2021-12-16T19:17:54.509Z"},"0.1.5":{"name":"o-stream","version":"0.1.5","description":"Intuitive node streams in typescript.","main":"./lib/main.js","typings":"./lib/main.d.ts","config":{"outputDir":"lib"},"files":["lib/"],"author":{"name":"Itay Ronen"},"license":"MIT","keywords":["stream","transform","ts","typescript","gulp"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"scripts":{"test":"jasmine"},"dependencies":{},"devDependencies":{"@types/jasmine":"^2.5.45","@types/node":"^7.0.8","del":"^2.2.2","gulp":"^3.9.1","gulp-ignore":"^2.0.2","gulp-tap":"^0.1.3","gulp-typescript":"^3.1.5","jasmine":"^2.5.3","typescript":"^2.2.1"},"_id":"o-stream@0.1.5","_shasum":"cf3158abafec40f701eab15af492a27e87747af3","_from":".","_npmVersion":"3.3.12","_nodeVersion":"5.5.0","_npmUser":{"name":"itayronen","email":"itaironen@gmail.com"},"dist":{"shasum":"cf3158abafec40f701eab15af492a27e87747af3","size":3603,"noattachment":false,"key":"/o-stream/-/o-stream-0.1.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/o-stream/download/o-stream-0.1.5.tgz"},"maintainers":[{"name":"itayronen","email":""}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/o-stream-0.1.5.tgz_1489425769959_0.2646089857444167"},"directories":{},"publish_time":1489425772088,"_hasShrinkwrap":false,"_cnpm_publish_time":1489425772088,"_cnpmcore_publish_time":"2021-12-16T19:17:54.735Z"}},"readme":"# O-Stream\r\nProvides an intuitive interface for node streams, in typescript.\r\n\r\nUseful for creating streams and gulp plugins (there is an example).\r\n\r\n## Install\r\n`npm install --save o-stream`  \r\n\r\nOr dev:  \r\n`npm install --save-dev o-stream`\r\n\r\n## Basic Usage\r\nSimple transform stream:\r\n```ts\r\nimport ObjectStream, { EnteredArgs } from \"o-stream\"\r\n\r\nlet incrementStream = ObjectStream.transform<number, number>({\r\n    onEntered: (args: EnteredArgs<number, number>) => {\r\n        args.output.push(args.object + 1);\r\n    }\r\n});\r\n\r\nstream.write(4);\r\n\r\nlet actual = stream.read(); // 5\r\n```\r\n\r\nOutput on stream end:\r\n```ts\r\nimport ObjectStream, { EnteredArgs, EndedArgs } from \"o-stream\"\r\n\r\nlet sum = 0;\r\nlet sumStream = ObjectStream.transform<number, number>({\r\n    onEntered: (args: EnteredArgs<number, number>) => {\r\n        sum += args.object;\r\n    },\r\n    onEnded: (args: EndedArgs<number>) => {\r\n        args.output.push(sum);\r\n    }\r\n});\r\n\r\nsumStream.write(100);\r\nsumStream.write(5);\r\nsumStream.write(-10);\r\nsumStream.end();\r\n\r\nlet actualSum = sumStream.read(); // 95\r\n```\r\n\r\nAsync:\r\n```ts\r\nimport ObjectStream, { EnteredAsyncArgs, EndedAsyncArgs } from \"o-stream\"\r\n\r\nlet sum = 0;\r\nlet sumStream = ObjectStream.transform<number, number>({\r\n    onEnteredAsync: (args: EnteredAsyncArgs<number, number>) => {\r\n        sum += args.object;\r\n        args.done();\r\n    },\r\n    onEndedAsync: (args: EndedAsyncArgs<number>) => {\r\n        args.output.push(sum);\r\n        args.done();\r\n    }\r\n});\r\n\r\nlet num1 = 4;\r\nlet num2 = 6;\r\nlet num3 = -1;\r\nlet expected = num1 + num2 + num3;\r\n\r\nsumStream.write(num1);\r\nsumStream.write(num2);\r\nsumStream.write(num3);\r\nsumStream.end();\r\n\r\nlet actual = sumStream.read();\r\n\r\nexpect(actual).toBe(expected);\r\n```\r\n\r\nCreate a stream from an array:\r\n```ts\r\nimport ObjectStream from \"o-stream\"\r\n\r\nlet stream = ObjectStream.fromArray([1, 2, 3, 5, 8, 13]);\r\n```\r\n\r\n## Gulp plugin example\r\nThis example creates a single file listing the input files names:\r\n\r\n```ts\r\nimport ObjectStream, { EnteredArgs, EndedArgs, Transform } from \"o-stream\";\r\nimport * as gutil from \"gulp-util\"; // install --save-dev @types/gulp-utils\r\n\r\nexport default function plugin(outFilePath: string): Transform {\r\n\r\n    let myPaths: string[] = [];\r\n\r\n    return ObjectStream.transform({\r\n        onEntered: (args: EnteredArgs<gutil.File, gutil.File>) => {\r\n            myPaths.push(args.object.relative);\r\n        },\r\n        onEnded: (args: EndedArgs<gutil.File>) => {\r\n            let file = new gutil.File({\r\n                cwd: \"\",\r\n                base: \"\",\r\n                path: outFilePath,\r\n                contents: new Buffer(myPaths.join(\"\\n\"))\r\n            })\r\n\r\n            args.output.push(file);\r\n        }\r\n    });\r\n}\r\n```\r\n\r\nCombine streams:\r\nCreates a stream that passes data through multiple underling streams.\r\n```ts\r\nimport ObjectStream, { EnteredArgs, EndedArgs } from \"o-stream\"\r\n\r\n// Just appends some string to the input string.\r\nfunction createAppendStream(append: string): NodeJS.ReadWriteStream {\r\n\treturn ObjectStream.transform<string, string>({\r\n\t\tonEntered: args => { args.output.push(args.object + append); }\r\n\t});\r\n}\r\n\r\nlet combined = new CombinedStream([\r\n\tcreateAppendStream(\"b\"),\r\n\tcreateAppendStream(\"c\"),\r\n\tcreateAppendStream(\"d\"),\r\n\tcreateAppendStream(\"e\")\r\n]);\r\n\r\ncombined.write(\"a\");\r\n\r\nlet actual = combined.read();\r\n\r\nexpect(actual).to.equal(\"abcde\");\r\n```\r\n\r\n## Error handling\r\nNode streams do not propagate errors.  \r\nObjectStreams(created with this library), by default, propagate errors.  \r\nIt means that errors emitted from a source stream will be re-emitted from the current stream.  \r\nYou can override the default error handling:\r\n```ts\r\nimport ObjectStream, { EnteredArgs } from \"o-stream\"\r\n\r\nlet myStream = ObjectStream.transform<number, number>({\r\n\t\tonSourceStreamError: args => args.emitError(args.error + \"b\")\r\n\t});\r\n```\r\n\r\n## Require Usage\r\n```js\r\nlet ostream = require('o-stream').default;\r\n```","_attachments":{},"homepage":"https://gitlab.com/itayronen/o-stream","license":"MIT"}