{"_id":"@iaigz/stream-io","_rev":"59-fbc38f128bb47caf49cf8db73b997387","name":"@iaigz/stream-io","description":"Pipeable spawned processes","dist-tags":{"next":"1.7.12","latest":"1.7.11"},"versions":{"1.1.1":{"name":"@iaigz/stream-io","version":"1.1.1","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"CC-BY-SA-4.0","_id":"@iaigz/stream-io@1.1.1","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"1b4de52b91d5a26c0419b0222bd4378d6210d107","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.1.1.tgz","fileCount":3,"integrity":"sha512-1UGnvjL5RHQR1Otz04f0f5Qgr6D9KtEbUSmY38wTMvieLJqTcstOAeLzV6vd02f1BXFzuHqmxMYWaEj3wQOriw==","signatures":[{"sig":"MEYCIQDLWVslcrecRk4t6JYCgbgKxE0ycRU7/jupqvxphlfWNAIhALuMbGJkSyj4e5beJuO527uXLESx8cEssr+77SHPSfoI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":11417},"main":"IOStream.js","engines":{"npm":">= 9","node":">= 18"},"gitHead":"fc9c4e8ef1d6c3150e2361357e782ac44562bd8c","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@commitlint/config-conventional":"^17.7.0"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.1.1_1694476042694_0.26859459769557015","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@iaigz/stream-io","version":"1.2.0","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.2.0","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"c247d0674a9548c5d91ae9b0717fff76fc90ccc2","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.2.0.tgz","fileCount":4,"integrity":"sha512-YjMvZ3/khOiNQ/ysIH1Ej2aOIV2JRKJ/QUPw9aE82knmmv70vmNmTSBGRP54QiITmff5q2uM1kGtTsXgY+15sw==","signatures":[{"sig":"MEYCIQC8tLBL/PUVK53sGMxo/ZsHvdxQY7AATIWlL4Uo2NnuqgIhAKCMzo3nqlBHERfh6GHt5eKkWyJyUBJA5N/UKMZmzvsL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12901},"main":"IOStream.js","engines":{"npm":">= 9","node":">= 18"},"gitHead":"59e05c88e64397f8fa4623e37547706d85b5712c","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@commitlint/config-conventional":"^17.7.0"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.2.0_1694504314749_0.8901743792418932","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"@iaigz/stream-io","version":"1.2.1","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.2.1","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"750d8a5d1ec5fa11c27142efc48a0c3e751db88b","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.2.1.tgz","fileCount":4,"integrity":"sha512-8XhfPWpf4Xcxhdkzh4Mk+g0jl+E1+pMXT84Qcqyh5hr0x2Jk9LS9uB5ztEHf901wlh+zYQ52tjaP7afwjKJGAA==","signatures":[{"sig":"MEQCIAhS1GvnUicJHzSq2VuFqmL2xgry2csKEjapNuMFZPJoAiBdHbwAlAujg8VNG0yNb6ll/AjbQ/WamdSARpLbpesszQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12901},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io`)\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 9","node":">= 18"},"gitHead":"14d42a725b14e228c9d9d1d5f2b41e7073753b9a","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@commitlint/config-conventional":"^17.7.0"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.2.1_1694512458605_0.6620912624303825","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@iaigz/stream-io","version":"1.3.0","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.3.0","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"eaa2b0180100b40342541fbca0a69dd46a297db9","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.3.0.tgz","fileCount":4,"integrity":"sha512-6T5br0mLLMx5Sy0IJFRDtY/zSOzCCBPWH/P+Izj2RMwrmuvgwLe+TR7hgsNuYUMlLrusyL9Jlb8kEKJ7fB2M6Q==","signatures":[{"sig":"MEQCIHtOTpYSto06pE6YcYO+PJ+3tIVLG1yI2Lt1hLBg1+EgAiAyf9T1eX/zRo6D6sfTdk1UL702ZPR5lzm5oTkBTOzejA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12986},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io`)\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 9","node":">= 18"},"gitHead":"37c3bdc7eb33cffb79bd341d86473c55c089ea0a","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^17.7.0"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.3.0_1694513761282_0.2029494110664496","host":"s3://npm-registry-packages"}},"1.4.0":{"name":"@iaigz/stream-io","version":"1.4.0","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.4.0","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"f7ea3ed46f8e570643a34a66140de130cf4fefbc","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.4.0.tgz","fileCount":4,"integrity":"sha512-qP9DDSx5k63es0hYDz7ySrI6xvt2a9KOFc0ntl1Ed1KT1mkVUMZyMyR68EjfQohIDVVBLwPe+DubFpjCAcfzag==","signatures":[{"sig":"MEUCIQCt65XDpmT1zKxY2TBz2antIaoVRB28Sx1IgjhckiN6xgIgdYMZfpWG6MIEvEH2MIp0vrDmCVJWsS6Z9NVqMGkQ4FU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12986},"main":"IOStream.js","engines":{"npm":">= 9","node":">= 18"},"gitHead":"b62acedb257fe2028ed100265cf77ac2626c40eb","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^17.7.0"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.4.0_1694514756291_0.41384773145510945","host":"s3://npm-registry-packages"}},"1.5.0":{"name":"@iaigz/stream-io","version":"1.5.0","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.5.0","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"3a744a1530b8b113b6de13f0d7abc35f1e81244f","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.5.0.tgz","fileCount":4,"integrity":"sha512-qMRyyZBTSPXc6B/tPL3ikNk5vchIjlOVAgimOeXkuFLI6/jzbtfEKt3kZ2rwcGZD6bgbZuFtw8I577CLAE7Mxw==","signatures":[{"sig":"MEUCIQDJ1tRDct/Aavj85bbN2Nib2pYQzPYd+k0xzkYOxgBjfQIgIpgI7yNcuG1J5HndxhEdK/YekrXxNvnVNmY6pe4PrXI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13054},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io`)\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 9","node":">= 18"},"gitHead":"42201218fa07903467049ea5730be2b15e6a61cd","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^17.7.0","conventional-changelog-conventionalcommits":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.5.0_1694521714648_0.6281645405457945","host":"s3://npm-registry-packages"}},"1.6.0":{"name":"@iaigz/stream-io","version":"1.6.0","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.0","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"794b8d48e1cc66a4d5edc6a30bad46f17795f207","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.0.tgz","fileCount":4,"integrity":"sha512-vORMoYQvM7wazPtk/d409mKGR/9kloWotBp7V0Dy8BJImBOZGN8wr95KkxxAoSnJdvlINye4jquJpZT/eJiFkQ==","signatures":[{"sig":"MEYCIQDIlCEGRYnQlukkX4Tn/q67Y4UNvni7rnYUvH47WxbaswIhAOUcwS/6l2r+i4T1de7droKPlFe7ble3wu0VdA1RJjci","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13054},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io`)\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 9","node":">= 18"},"gitHead":"26e8c64af14e748f242829057a072952dc10521a","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^17.7.0","conventional-changelog-conventionalcommits":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.0_1694522703495_0.17549114790536757","host":"s3://npm-registry-packages"}},"1.6.1":{"name":"@iaigz/stream-io","version":"1.6.1","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.1","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"439e2fe39b9dedde13c1eecf3faf348c8022abe0","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.1.tgz","fileCount":4,"integrity":"sha512-ZoOhtpicDXeJ+2p821pdMhFVTEFXG1c5r+QLgVivQT4UF7wIFV/s2PLMgoBrLa9wM3H8/cewfdY8hJzwv5tmVg==","signatures":[{"sig":"MEYCIQCbScO3/g8K6nuNoVCO54H9PczKu77diwFYjiBXH8rTagIhAN02bShVpcttPuglPYlwUfsilFmIKAiqvMBTJ9upozue","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13054},"main":"IOStream.js","engines":{"npm":">= 9","node":">= 18"},"gitHead":"e9fbf3b72cb5d1691b620a527288783ddcf89457","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^17.7.0","conventional-changelog-conventionalcommits":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.1_1694524312947_0.40051263197642495","host":"s3://npm-registry-packages"}},"1.6.2":{"name":"@iaigz/stream-io","version":"1.6.2","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.2","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"d309b3edc79b03a22e17fa8753818d2201e2b41e","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.2.tgz","fileCount":4,"integrity":"sha512-XRdE6YJAYjseS9UUsLpyKJg40cC7Lpr5i0LON9MoGWQiSDmfYpB01IKHAnmbKSMnlakc75n7bjYBrystKYqOuQ==","signatures":[{"sig":"MEUCIQDh+pbX9ZGaye103GJ6uLIz/Peth+JXvJLDtokDFRceFQIgY11nMS4gq0Eo1iWfY7ldnw5rZAJY8syErp4Y1LSde+g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13054},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io`)\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 9","node":">= 18"},"gitHead":"ce6e0d0a691e5bc6c084e502c4f517b06d21f3e4","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^17.7.0","conventional-changelog-conventionalcommits":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.2_1694529487568_0.8515880876845827","host":"s3://npm-registry-packages"}},"1.6.3":{"name":"@iaigz/stream-io","version":"1.6.3","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.3","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"83d5a9a44d47492b70483f6cbcce5d5e23c7014e","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.3.tgz","fileCount":4,"integrity":"sha512-v8cEbvVAD740pS4jG+nbgqaJAlSEELQd3wxhFeMS5VuN3loHEBIT/G+Gq1hTVfYFwfvkg3lcXaWG1vKrtLQ3Ug==","signatures":[{"sig":"MEUCIFjPbEKG5EZcaivreyfqA0nw5cmqq7U1GnwhhJBOhr23AiEAs1wjCaVNt2DxbODzmyTmfoeHX9FA3OXLdfo3mYBOV0I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13054},"main":"IOStream.js","engines":{"npm":">= 9","node":">= 18"},"gitHead":"173e89fd41c6fbb27e334928bce969dd5489d760","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^17.7.0","conventional-changelog-conventionalcommits":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.3_1694530303020_0.6497130641341595","host":"s3://npm-registry-packages"}},"1.6.4":{"name":"@iaigz/stream-io","version":"1.6.4","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.4","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"369f6311bbe88a2861051dfc667c686f93a36195","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.4.tgz","fileCount":4,"integrity":"sha512-al/GS0xQv8x91vtaPYukurcwAKWh4rGFztdwtI1GFkjeYsZCI7e/daJGCQkete5UcDhI+QdLq8LiZBaaNa+Hnw==","signatures":[{"sig":"MEYCIQCSOW433P1CoVhoV8+SKA5W2+1M8ZOxnFDhGTJSKcV9WwIhAPnxgnjJj7gda/kO90h7oO6w5A5tOZEnMUk+BsQ4bWQ/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13054},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io`)\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 9","node":">= 18"},"gitHead":"0a61bcb51b1ff924b032f17c706f547207d9a08f","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.6.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^17.7.0","conventional-changelog-conventionalcommits":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.4_1694530669542_0.01152913132648048","host":"s3://npm-registry-packages"}},"1.6.5":{"name":"@iaigz/stream-io","version":"1.6.5","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.5","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"f53bf6abad8ed744c46af2153422f3c32c91794f","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.5.tgz","fileCount":4,"integrity":"sha512-xkFOrNuVX/bBJTEDxOUUsj/2un6PuRocATqI0d89MFNQcv/VvqTYeaht3uAVYEULSOt7Co2vZGPLpfCZc4c9SQ==","signatures":[{"sig":"MEUCIFniMEsSMRnzs/VjFT48fYsd5jzOnxxCc5U3yvt1iIlIAiEA1BLFXMj/xCXu72KGAnhZg+NpG+FUyOckZnmPgrICt5k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13054},"main":"IOStream.js","engines":{"npm":">= 9","node":">= 18"},"gitHead":"9bcc3c3a7b5c18d92fc34dfe51db5c2bd6045a24","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.8.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^17.7.0","conventional-changelog-conventionalcommits":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.5_1696537962560_0.9992334172107531","host":"s3://npm-registry-packages"}},"1.6.6":{"name":"@iaigz/stream-io","version":"1.6.6","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.6","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"7588879832649331333c60f4765d69e4ee79bbdf","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.6.tgz","fileCount":4,"integrity":"sha512-QhYU4iclnVj84ilqwbf93Jr5+/9fHOSa40lg27v42a2hXdytb0tug8MBm64KK/zdBQpyVkQ/lqald+sfzYCUDg==","signatures":[{"sig":"MEYCIQC/XfcYXGOIKFnfgL6pTB6X+m5YcYuUXSTM1jMaFJoZhQIhAJLF7E3dnGUH4D/UUXb0nszvjZL57FnImwt3MUVLdWn0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13054},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 9","node":">= 18"},"gitHead":"959dd8961bb24a02ee7ef8836e59fbc020e9238d","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.9.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"^8.0.3","standard":"^17.1.0","@commitlint/cli":"^17.7.1","semantic-release":"^21.1.1","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^10.0.5","@semantic-release/gitlab":"^12.0.5","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^17.7.0","conventional-changelog-conventionalcommits":"^7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.6_1699711990559_0.4667939282400937","host":"s3://npm-registry-packages"}},"1.6.7":{"name":"@iaigz/stream-io","version":"1.6.7","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.7","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"c94c07d02f3443a71626331f6451bf320d640eca","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.7.tgz","fileCount":4,"integrity":"sha512-5TqbFft8o0t0w0aP92pe75Wrh6Y5qRkxa8uGc4hsN6Cn+rim6OO6oLDvvL8nrAsUfz+IHv1LWmBxRlZ2bI4J8w==","signatures":[{"sig":"MEQCIDI19D7VQnG1o84DEO622zu6wNJcIGQfAZnkvrASS6+oAiB0HTvScHQ9F+Yr0kr6ED0tv1AQIVL5tj+jaeXXOF9AbA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13053},"main":"IOStream.js","engines":{"npm":">= 9.9.2","node":">= 18.18.2"},"gitHead":"e29ae4e5f743f57ef3495d9ae75fc90ddf54e34b","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.9.2","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.10.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"17.8.1","semantic-release":"21.1.2","@semantic-release/git":"10.0.1","@semantic-release/npm":"10.0.6","@semantic-release/gitlab":"12.1.1","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"17.8.1","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.7_1701526827753_0.5648772875823933","host":"s3://npm-registry-packages"}},"1.6.8":{"name":"@iaigz/stream-io","version":"1.6.8","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.8","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"3f597393d014f1374e8ce2cd85d7927e02b17c84","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.8.tgz","fileCount":4,"integrity":"sha512-8FDvXnpgO0EE2acvAXIji4n5oMw5dHbhL2a2YYK+Dq3ZlNFAe/qd+nwfkcjXI5NtwLuNql6LI9uF9i2Qcfph9g==","signatures":[{"sig":"MEUCIQD1X6+gcOssUw7NZAFtShVDolydPGJp2HSOopdiBFqadQIgBjL/K1SIa2dOenHRI6/mPXoJE3XGBMzToZo5yKGEoLU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13053},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 9.9.2","node":">= 18.19.0"},"gitHead":"cd85c138d52da54767a860ff33f08466ce748dff","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"9.9.2","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.10.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.3","semantic-release":"21.1.2","@semantic-release/git":"10.0.1","@semantic-release/npm":"10.0.6","@semantic-release/gitlab":"12.1.1","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.3","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.8_1701537097433_0.5596643410942974","host":"s3://npm-registry-packages"}},"1.6.9":{"name":"@iaigz/stream-io","version":"1.6.9","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.9","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"8fb11fb09c54b072cb81a4af74c7ea642ed38834","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.9.tgz","fileCount":4,"integrity":"sha512-zGRzERnrGgmc4cG53KQqcoSE5Sh4Qx+9J5QQAxFTLwiXeEDdooKykCBmGY9z+BhUyk59fA0a6L/xBAaWtW4vJw==","signatures":[{"sig":"MEYCIQCwS3HDCStt7KLU3Uv7qlh0gcIVw+oz6tRiM9gWf65dHwIhAJ5FXfsBLDYrQVGislFvwca8ML21aaMr5itAidCYrboE","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13053},"main":"IOStream.js","engines":{"npm":">= 9.9.2","node":">= 18.19.0"},"gitHead":"e44b0aaa873884e381b293f47ed805616eb2bc5b","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.4","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.10.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.3","semantic-release":"22.0.8","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.1","@semantic-release/gitlab":"12.1.1","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.3","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.9_1701653733440_0.5630185654836375","host":"s3://npm-registry-packages"}},"1.6.10":{"name":"@iaigz/stream-io","version":"1.6.10","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.10","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"5384ad524f8198e897525fc82d15306c6e06e1be","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.10.tgz","fileCount":4,"integrity":"sha512-fJ7+Tcxa0tqgPiD33APZUP2XZursUfLPckExMisNiQn5b49hzdNAS+5RlIe6DonNUSmILUmOJ19R48fgxTrl6g==","signatures":[{"sig":"MEQCIEp3bRakofQDoVcyb/+mmnawZe0ewhbxeuWK6N9hjQtIAiAVTD2/TnCMf10q0IOxImYsyBdCIKW/6H70YebUI71bgQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13055},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 10.2.4","node":">= 18.19.0"},"gitHead":"2d0d329d810a9d7964fcafd8babc490a5b07c6d0","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.4","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.10.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.3","semantic-release":"22.0.8","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.1","@semantic-release/gitlab":"12.1.1","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.3","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.10_1701740551442_0.6358787090132689","host":"s3://npm-registry-packages"}},"1.6.11":{"name":"@iaigz/stream-io","version":"1.6.11","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.11","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"310c34515603a28c665b7cd08d22ef7125b86a26","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.11.tgz","fileCount":4,"integrity":"sha512-PbNhfFbSm5t1HBWVRHEGOQELrSiOPKBlrylKNjrZBiedPJvm/m+zutVzmn2qP/I+9xANb+8j1AKT/1HdF/9XMw==","signatures":[{"sig":"MEQCIDrrsVTAeAjrHA5kV4HhYW8Uhjjvw5hp7R3HI3eHKLf4AiBzVxPzXGJhOobYSx14fnvOPUpS4tyh40WF5AJVnmR7lQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13056},"main":"IOStream.js","engines":{"npm":">= 10.2.5","node":">= 18.19.0"},"gitHead":"5306e65dc7bfa9eb73e745ddb96ef501e356d18c","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.10.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.3","semantic-release":"22.0.10","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"12.1.1","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.3","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.11_1702439214447_0.6312590961888689","host":"s3://npm-registry-packages"}},"1.6.12":{"name":"@iaigz/stream-io","version":"1.6.12","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.12","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"fceb787fa4e1ae8352cebe06cc9ea0f966254264","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.12.tgz","fileCount":4,"integrity":"sha512-acQ5gHjdPyXkvO2etG5macVOFq8NaZ05fMRJKVXhSt+QQmnxXAeUdZXxJgvcsXC3X0uGPwJs6oAf1w7RWZ4v/g==","signatures":[{"sig":"MEUCIQDQudGIJBTrQJyphRCxEtxfh7tZBPb5vy2nzvUMwn81wwIgINbGDXFeBWtsE6FSkZ4aCdFLwkdA0IoJl/6KvM3h0Hc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13056},"main":"IOStream.js","engines":{"npm":">= 10.2.5","node":">= 18.19.0"},"gitHead":"4e3f4094d58ba87593c70d63bebd39b3400c9bb0","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.10.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.3","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"12.1.1","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.3","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.12_1702617010069_0.21075909777883828","host":"s3://npm-registry-packages"}},"1.6.13":{"name":"@iaigz/stream-io","version":"1.6.13","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.13","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"c5f7ff928d8fbffde68a028a34bd651f3f4bf940","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.13.tgz","fileCount":4,"integrity":"sha512-yPK/YBD8/T3FPnKhjpxqbDkbIDnZoNa1OLwJlafoF/lB6WVzKklzOPb2xzWuRsKIWEo3C24QkQnRa9mdf4x9EQ==","signatures":[{"sig":"MEYCIQC+L95jLcIiWDngGwmyeyMSsWndS7vk8TttTq9uJDNPXQIhAJ+NzrSAL1FMUm8tvQZf2IdpmvpLkm2Lcg/WEnUcIQlI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13056},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 10.2.5","node":">= 20.10.0"},"gitHead":"48414aa344cc7693682b177ddf296511818bc58b","scripts":{"lint":"./script/lint","test":"./script/test && npm run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.10.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.3","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"12.1.1","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.3","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.13_1703336748681_0.08372030731753188","host":"s3://npm-registry-packages"}},"1.6.14":{"name":"@iaigz/stream-io","version":"1.6.14","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.14","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"e168f9bc83960440b3f6a2220fa6390db51ce3b7","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.14.tgz","fileCount":4,"integrity":"sha512-LM/8Nkhvy6ftpAKIloy8/rkBYIpbiltSy6ydWUMNec8HeHTEsq7nqUwXgQD5BouicvQExqj8WNVeCmo+qenknA==","signatures":[{"sig":"MEUCID6l8V6wcgcp8iwHQLX3G/sePzmQcUKDyqGAIXUdwwgCAiEA08XQ33Epl0jVXnSw4Fq7kVoV30Da59NCs6GQyMTv88M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13009},"main":"IOStream.js","engines":{"npm":">= 10.2.5","node":">= 20.10.0"},"gitHead":"64479934f6a81ab85d17e514da0d9598d687e520","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.10.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.3","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"12.1.1","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.3","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.14_1703685570767_0.18699533370758914","host":"s3://npm-registry-packages"}},"1.6.15":{"name":"@iaigz/stream-io","version":"1.6.15","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.15","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"602d12aef32d5debf85e59752d92e6c8bfaaaaee","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.15.tgz","fileCount":4,"integrity":"sha512-SQrWRZgx7HOrZJeFwSfbJV4VF9QVTSfDTHfWUsao9STRrKHtAuHfI0iCoFCpeMQVNSBCzmP70kgmsRQUP3Kcpg==","signatures":[{"sig":"MEUCIQDo5sG7DEiSfBZDhtXaREqcdtrvszCWgWqgl/CQ/B08bgIgVvzFqnvMK1XF1EIMS69KiWpWF3eZl/TiMgGfgoid24k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13009},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 10.2.5","node":">= 20.10.0"},"gitHead":"c6e78f2dce033dacf11e0350a3308f886cfe71b1","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.10.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.4","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"12.1.1","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.4","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.15_1704647388179_0.813038317301503","host":"s3://npm-registry-packages"}},"1.6.16":{"name":"@iaigz/stream-io","version":"1.6.16","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.16","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"59ba946d4750fbd5d1aa4bb1e55fe38bd51243f2","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.16.tgz","fileCount":4,"integrity":"sha512-wSfpLJ8UeVo4YKeIdRKQHZ7hsC8HXCX2yTKYDogPzW+fczrSdqL70y+OCxqOlitOejq0rrpYdnYGvHam9ahv9A==","signatures":[{"sig":"MEQCIA745lotgeVlhLfahTsVuYJmjqnA8yrI7u60zwsev4rzAiAGfTJgdOHblaom8fmgFvDnT9WLOBvHlRqdbq+lsQBWtg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13009},"main":"IOStream.js","engines":{"npm":">= 10.2.5","node":">= 20.10.0"},"gitHead":"c6451e135c2ba84edfc2fbfed4aef144a5cb44de","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.4","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"12.1.1","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.4","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.16_1705030130542_0.6509808972362994","host":"s3://npm-registry-packages"}},"1.6.17":{"name":"@iaigz/stream-io","version":"1.6.17","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.17","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"1bdfafaa9f71fc8924ef5266616c410cf828ac7c","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.17.tgz","fileCount":4,"integrity":"sha512-ZYuZiIdV5Uq4ojt4HitXKIyjkEM91zqyyYONGBdAlw5VdWQyveyptWwK2AD2uQ5r5Y95f0YjuuXS5Bw9W1XmIw==","signatures":[{"sig":"MEYCIQCNBQdYyn+JdoJ+oph3faw6eiif4bF7D2WDD+LmkABaKQIhANn6JID2ZW3y46noqV7lYT+3uT58SmskNlA2Y0AaU6Yi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13009},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 10.2.5","node":">= 20.10.0"},"gitHead":"4284c7eee296727c980537760ae0c3fe4959167e","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.4","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"13.0.2","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.4","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.17_1705032002494_0.6440520653082167","host":"s3://npm-registry-packages"}},"1.6.18":{"name":"@iaigz/stream-io","version":"1.6.18","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.18","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"eb3f9d2bae93fae06178451487ef67fdb1f7c41c","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.18.tgz","fileCount":4,"integrity":"sha512-Bj0U+IRylS1w76eD9ld07Me7OiHX+ZRv5aXXNROMfOUILqOcl70fMwHH/TFhmMYN2dzkgw4cwoh12VJPJOTbKA==","signatures":[{"sig":"MEUCIQDRThdGj4k4d6XUyJj7LxeKP1osDv0Zd0/Ka4/8LYM20AIgKrmnbbq7G3tEwxW/I0mGH2y1JlAQDCucbYaXoQ5f/u0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13009},"main":"IOStream.js","engines":{"npm":">= 10.2.5","node":">= 20.10.0"},"gitHead":"a73ff60541abcb1c50ba7059a825ec1adbc9d0ee","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.4","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"13.0.2","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.4","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.18_1705037224414_0.5111269464229526","host":"s3://npm-registry-packages"}},"1.6.19":{"name":"@iaigz/stream-io","version":"1.6.19","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.19","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"8b70496769b8e11df8289ca07630c17d49f9b0a3","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.19.tgz","fileCount":4,"integrity":"sha512-rmp9Vach9A6PFEyC3/wBWbFreShATDa5U0mXrl+QbDYmlC2fDkrKc5VZGoPbcvSBUxlluZaHLJ3iK5K+OABGyg==","signatures":[{"sig":"MEQCIChQHWycfyOr3xNaxECksPRmp7PErIcdMnzlEdj40z29AiA+Mn7Otba3JuKOeZEiitA/n+soHOr0q62LPnq9b3jdEw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13013},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 10.2.5","node":">= 20.10.0"},"gitHead":"5a07734816ce1b8d796b59a7d75aef0a69b7e77f","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.4","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"13.0.2","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.4","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.19_1705037660267_0.3053761588197579","host":"s3://npm-registry-packages"}},"1.6.20":{"name":"@iaigz/stream-io","version":"1.6.20","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.6.20","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"3f4980f8d33a8594eebccfa2b4d2a2195285e455","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.6.20.tgz","fileCount":4,"integrity":"sha512-61Uxbx/gLyg8/0FQYgJz4jzaJ+hqx8cTq5gfF1wDrUwH9nWb1wiQnOnb01xORLjSKgDwXu5RV2DVmAQ5YyxQ/Q==","signatures":[{"sig":"MEUCIBeajvVELQ3BiefKhUCDhiHATcGcA/Gi/QAUnT+Vu7ceAiEA6SUrA2aEozXkAoxSXoJxIMMYGhqTh0sBOVK3Td7Nqbs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13013},"main":"IOStream.js","engines":{"npm":">= 10.2.5","node":">= 20.10.0"},"gitHead":"b2f215d1ff4327b1619e1f7726e6a1586f55a601","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.4","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"13.0.2","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.4","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.6.20_1705038555617_0.47430396206408254","host":"s3://npm-registry-packages"}},"1.7.0":{"name":"@iaigz/stream-io","version":"1.7.0","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.0","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"b8b15ec5007865ac52ca9217e4ab1caeb70ff863","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.0.tgz","fileCount":4,"integrity":"sha512-NN7atslWQEaydu5JxoN+7V1J4Pc7JalzuFJj1WazEGSLIaieKqHeTopB1MYMGhCaGuC3fmjR3jKppDkw6oU/kw==","signatures":[{"sig":"MEUCIQCv7Ab2SPxOPjCGoLSn4+thptF6pbtIqV4pJBt4K8hW9QIgYsCqa+o+HNdJvz8mYL8+Gw5FhvXR4r4jUXJNz4/laeg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13190},"main":"IOStream.js","engines":{"npm":">= 10.2.5","node":">= 20.10.0"},"gitHead":"1494974b256f5f22a2ce15ac283b93cc38ca471d","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.2.5","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.4","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"13.0.2","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.4","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.0_1705039222800_0.8822022302629839","host":"s3://npm-registry-packages"}},"1.7.1":{"name":"@iaigz/stream-io","version":"1.7.1","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.1","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"37204515d6b163b80fc98a0f55dcf76035c23ea4","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.1.tgz","fileCount":4,"integrity":"sha512-8TH/+c4EoOKXGdrPZcdKBxXdCzTcvq4YFdSb/y15C/0RvuAckJNcEtvY1z5DMNII+6sON7D10fDundgEQBq20g==","signatures":[{"sig":"MEYCIQC4dTvIdcNwV/KDdack3flOPFZaEpGq7qvKA4kyR1c0KgIhAOqhv7/4LM4f9Ac7A4LMeXJuMI0eaqz9WaVnDnRlflyI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13190},"main":"IOStream.js","engines":{"npm":">= 10.3.0","node":">= 20.10.0"},"gitHead":"dcc940e11bc00fb640838df20d20dbce2bb8dd28","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.3.0","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.4","semantic-release":"22.0.12","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"13.0.2","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.4","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.1_1705183861199_0.24744410314128418","host":"s3://npm-registry-packages"}},"1.7.2":{"name":"@iaigz/stream-io","version":"1.7.2","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.2","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"5cfed8ba3b624741319e32d483d1d9758ecc3d85","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.2.tgz","fileCount":4,"integrity":"sha512-6RtoreIGR7M1T5VgAFEfis7kxuKqS9qRCAPQH82bWTWvaxvpTQCE8/YdMhOiUcjBUCnKskj1ftUU9Jsgu/lGAQ==","signatures":[{"sig":"MEYCIQDaIe+pNUHM+a8N0XaDnICZ0IGjQXL+UddL7Jmc0VKjNAIhAI0AHtd3HWV1gywJN7FgeYumOS0RE+UZaUWQiJ6LeDDa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13189},"main":"IOStream.js","engines":{"npm":">= 10.3.0","node":">= 20.10.0"},"gitHead":"aee76628f76c8b2606abcb972eee9ba1592cb5f3","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.3.0","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.4.4","semantic-release":"23.0.0","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"13.0.2","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.4.4","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.2_1705750821742_0.2718170415159433","host":"s3://npm-registry-packages"}},"1.7.3":{"name":"@iaigz/stream-io","version":"1.7.3","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.3","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"55565d151f1b67ed94a863066bc1c7c48a80fbb0","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.3.tgz","fileCount":4,"integrity":"sha512-tVj3FQ3e8kjTlkllmRzw+WKWpJMFkthe5nbGgpYEnS6YBxh55ou0pbla98brjAce0OcNVrtEaTQDTJdMd7OqPw==","signatures":[{"sig":"MEYCIQDWtw30GELUDROLE9iV6ULinBb16R1fN0qP8STHBZpHjwIhAKMlBuYeEc1hSl0/CrNeKjtvqB/cC4Bc6Vs+C415Z9dI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13189},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n\n// WARN: favour usage of stream.pipeline() over Readable.pipe()\n// see https://nodejs.org/docs/latest-v20.x/api/stream.html#streampipelinesource-transforms-destination-callback\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 10.3.0","node":">= 20.10.0"},"gitHead":"9465594d3c8d3708c0ef33f901f3e2d5f4655d24","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.3.0","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.5.0","semantic-release":"23.0.0","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"13.0.2","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.5.0","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.3_1706219914613_0.1428147574595231","host":"s3://npm-registry-packages"}},"1.7.4":{"name":"@iaigz/stream-io","version":"1.7.4","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.4","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"8903bca51bb94dca118bcafc25cd0eca0e8a2c5f","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.4.tgz","fileCount":4,"integrity":"sha512-IFhGOKImYwv724n3pIQD17i0mxQsHZ6eJnvC6fL/JtGhFnB5uHGuvWU3FUyKQKGT9uwd8+0RrHKk6cuMb4QWrA==","signatures":[{"sig":"MEUCIDrpRw6JLmQlpsFOzWB370W1JkaA61Z7SBdQ16JKeClOAiEAzjkWMVrhdOOWq+Z4ga0VG7CsbwC5esjmngxg3v4JZyI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13189},"main":"IOStream.js","engines":{"npm":">= 10.4.0","node":">= 20.10.0"},"gitHead":"2aad1a09830a2ce4065e99f0e07f2f9cb90bf320","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.4.0","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.6.0","semantic-release":"23.0.0","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"13.0.2","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.6.0","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.4_1706506540551_0.20071393043604857","host":"s3://npm-registry-packages"}},"1.7.5":{"name":"@iaigz/stream-io","version":"1.7.5","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.5","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"90e675809d6163678e7f1167e2e3552697673c7a","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.5.tgz","fileCount":4,"integrity":"sha512-bGctnIqwMxOCkhNSCZzoHoLPR4fNDtaIC/kvb2cr5ImgzDcJkQ7kV6xAQMJEHa7rX2gzxgmLqbiLnZ0T3yUoxA==","signatures":[{"sig":"MEQCIEXsyR210XIBGX753v0yXx05U1JvLvWcBlD9JkadLUhzAiBbONTiD6x7ZSVRozi8nMe9u4/+CobWoOHGJLvl3shJWg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13189},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n\n// WARN: favour usage of stream.pipeline() over Readable.pipe()\n// see https://nodejs.org/docs/latest-v20.x/api/stream.html#streampipelinesource-transforms-destination-callback\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 10.4.0","node":">= 20.10.0"},"gitHead":"4481c3342d3be2f30aaa35a5f8eb582aaef80cf1","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.4.0","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.6.0","semantic-release":"23.0.2","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.2","@semantic-release/gitlab":"13.0.2","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.6.0","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.5_1707577753430_0.40031802393110283","host":"s3://npm-registry-packages"}},"1.7.6":{"name":"@iaigz/stream-io","version":"1.7.6","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.6","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"438b28c5d38a1f30de608e681b4127ea8d9cdf70","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.6.tgz","fileCount":4,"integrity":"sha512-ihi6reHG6JQEAcDwEtJtpcoVoGatK2YydraqAx66oceq52G6wcXowUkjEu7eu8nKIKUgcLLPk8TrbLWS2xQyqg==","signatures":[{"sig":"MEYCIQDkWTyL8TvtwQOpTFAbLk4LRXgq7XYfdEQYRC+Ry8krSQIhAOxwmS1SeROtmZu0ohFh2yBf3wRTaKPePUapHyhQDn07","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13189},"main":"IOStream.js","engines":{"npm":">= 10.5.0","node":">= 20.11.1"},"gitHead":"6b46463c4db0d5509921123bbf21e62f96fd350e","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.5.0","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.6.1","semantic-release":"23.0.2","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.3","@semantic-release/gitlab":"13.0.3","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.6.3","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.6_1710519102748_0.9222636900555854","host":"s3://npm-registry-packages"}},"1.7.7":{"name":"@iaigz/stream-io","version":"1.7.7","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.7","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"a57768d5da20a65cfa152462de4eab1eb26ee59e","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.7.tgz","fileCount":4,"integrity":"sha512-Y3mD3Iy2cfwAzjmYq290PPTP/3bWJ4v1A3Jtj68mQhOjB1sEv6CCKWeRJ4WnjiJsON2UW7oAZkODlvPWykimqw==","signatures":[{"sig":"MEUCIGYYCI8Cm5IN9om1fttbpEqrBrsBNn1UFqRoEDa5LYO8AiEA1ooT2seZezh9LljHFKGszAunrqkOSans1JkvG2wUOks=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13189},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n\n// WARN: favour usage of stream.pipeline() over Readable.pipe()\n// see https://nodejs.org/docs/latest-v20.x/api/stream.html#streampipelinesource-transforms-destination-callback\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 10.5.0","node":">= 20.11.1"},"gitHead":"65ff16639f434415f3ff76ba88a7bc5d1eb0eff9","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.5.0","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"8.0.3","standard":"17.1.0","@commitlint/cli":"18.6.1","semantic-release":"23.0.2","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.3","@semantic-release/gitlab":"13.0.3","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"18.6.3","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.7_1710565700454_0.8323138104519585","host":"s3://npm-registry-packages"}},"1.7.8":{"name":"@iaigz/stream-io","version":"1.7.8","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.8","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"223772ebe533879982173a7ecac99a96c0d1e4f2","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.8.tgz","fileCount":4,"integrity":"sha512-1RT8ostXZQAj9QPJ+xFGP3JvyN6tEvfkuBsasi4wwoTyd8UX0amhlo6DYr4Nv239O88A0XBaEselu+M3RsYBqQ==","signatures":[{"sig":"MEYCIQDXMjt5+6RdxNpcx/J3fLR1hWxYapkOh7oZfVCzfMSD1wIhAIQffnriT/p2+e0RvlVzcEgnYXJzg4uKMqU+hCsDts1k","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13233},"main":"IOStream.js","engines":{"npm":">= 10.5.0","node":">= 20.11.1"},"gitHead":"d9c8b0d957a37b2828b82633716600360135e50a","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","prepare":"test -n \"$CI\" || husky","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.5.0","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"9.0.11","standard":"17.1.0","@commitlint/cli":"19.2.1","semantic-release":"23.0.5","@semantic-release/git":"10.0.1","@semantic-release/npm":"11.0.3","@semantic-release/gitlab":"13.0.3","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"19.1.0","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.8_1711193936772_0.45182932714775204","host":"s3://npm-registry-packages"}},"1.7.9":{"name":"@iaigz/stream-io","version":"1.7.9","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.9","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"d20e06c1aa94b89da04d6f71a044bd7f592cf10e","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.9.tgz","fileCount":4,"integrity":"sha512-6VfzHWiGpofOJlaxczjIJi2t+/BgYHhgPmRdtVt0GIMq/MEBfWZw4xFryv/80btbe2JcOul3CF/vCd3bdAOulA==","signatures":[{"sig":"MEUCIQDc4Pdu0QgfY7CqfXggmOgCjwLzAI+HXwpqub1K+qHgQgIgOv00fV/X8731/KA3KkaNGllbcg5BRBIi32wpQY9F64E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13233},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n\n// WARN: favour usage of stream.pipeline() over Readable.pipe()\n// see https://nodejs.org/docs/latest-v20.x/api/stream.html#streampipelinesource-transforms-destination-callback\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 10.5.0","node":">= 20.11.1"},"gitHead":"d1b16e8dbbcbdce284ecc7bd788046d54911667b","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","prepare":"test -n \"$CI\" || husky","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.5.0","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"9.0.11","standard":"17.1.0","@commitlint/cli":"19.2.1","semantic-release":"23.0.5","@semantic-release/git":"10.0.1","@semantic-release/npm":"12.0.0","@semantic-release/gitlab":"13.0.3","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"19.1.0","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.9_1711353422050_0.9927219099775708","host":"s3://npm-registry-packages"}},"1.7.10":{"name":"@iaigz/stream-io","version":"1.7.10","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.10","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"e92db9933bd5911d9c06f88035f01641ef4ea388","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.10.tgz","fileCount":4,"integrity":"sha512-Tafvp2rWcVM5xsAWg/dIWYriCTMmhl223rk/vEFvWe3XhlqPSm2ULySdQ8O8S8tMWJlQ8IPT0UFEDruShQe0rQ==","signatures":[{"sig":"MEQCICyO2ZXY5Q6tzkiGWpFLS/5HT9K+zrm+HCOCDKlM1jBwAiBFmK721Jvz8TAWZOOugjESestUiAvwNAYKyml3is+G1g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13234},"main":"IOStream.js","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n\n// WARN: favour usage of stream.pipeline() over Readable.pipe()\n// see https://nodejs.org/docs/latest-v20.x/api/stream.html#streampipelinesource-transforms-destination-callback\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","engines":{"npm":">= 10.5.0","node":">= 20.11.1"},"gitHead":"3cafd682b1c92bdc6782316390ae77b21c98ef2e","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","prepare":"test -n \"$CI\" || husky","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.5.0","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.11.1","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"husky":"9.0.11","standard":"17.1.0","@commitlint/cli":"19.2.1","semantic-release":"23.0.6","@semantic-release/git":"10.0.1","@semantic-release/npm":"12.0.0","@semantic-release/gitlab":"13.0.3","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"19.1.0","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.10_1711577417918_0.28002255083136074","host":"s3://npm-registry-packages"}},"1.7.11":{"name":"@iaigz/stream-io","version":"1.7.11","keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","_id":"@iaigz/stream-io@1.7.11","maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"dist":{"shasum":"7d492c928462e8035fc62692b7746b8d95131b63","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.11.tgz","fileCount":4,"integrity":"sha512-a9e6mrDXF07dt3Roq0vo9i+MTbA3pMmmj7rhi7lOkGagT4MG5UyM+l9k8wjaJzA1tOcZTFwVIWk7nSHuu16IkQ==","signatures":[{"sig":"MEYCIQCV2UgMxONBpzTzJnhK6DhgWYFKoK0M4GuX4tLHmYFNhgIhAMXmFtUFQox+dY/LG7q/XGClYdR6q7T6i7UYX+cXu+L1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":13234},"main":"IOStream.js","engines":{"npm":">= 10.8.1","node":">= 20.14.0"},"gitHead":"2085b1ba235fdf72e3b26f26bb0b2b95cd61c533","scripts":{"lint":"./script/lint","test":"./script/test && npm --silent run lint","prepare":"test -n \"$CI\" || husky","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug"},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"_npmVersion":"10.8.1","description":"Pipeable spawned processes","directories":{},"_nodeVersion":"20.14.0","publishConfig":{"access":"public","provenance":"true"},"_hasShrinkwrap":false,"devDependencies":{"husky":"9.0.11","standard":"17.1.0","@commitlint/cli":"19.3.0","semantic-release":"23.1.1","@semantic-release/git":"10.0.1","@semantic-release/npm":"12.0.1","@semantic-release/gitlab":"13.1.0","@semantic-release/changelog":"6.0.3","@commitlint/config-conventional":"19.2.2","conventional-changelog-conventionalcommits":"7.0.2"},"_npmOperationalInternal":{"tmp":"tmp/stream-io_1.7.11_1718811343696_0.32804491357703247","host":"s3://npm-registry-packages"}},"1.7.12":{"name":"@iaigz/stream-io","version":"1.7.12","description":"Pipeable spawned processes","main":"IOStream.js","engines":{"node":">= 20.14.0","npm":">= 10.8.1"},"scripts":{"test":"./script/test && npm --silent run lint","lint":"./script/lint","commitlint":"commitlint --edit","test-release":"semantic-release --dry-run --no-ci --debug","prepare":"test -n \"$CI\" || husky"},"repository":{"type":"git","url":"git+https://gitlab.com/iaigz/stream-io.git"},"keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"author":{"name":"Lorenzo García Rivera"},"license":"BSD-3-Clause","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"homepage":"https://gitlab.com/iaigz/stream-io","devDependencies":{"@commitlint/cli":"19.3.0","@commitlint/config-conventional":"19.2.2","@semantic-release/changelog":"6.0.3","@semantic-release/git":"10.0.1","@semantic-release/gitlab":"13.1.0","@semantic-release/npm":"12.0.1","conventional-changelog-conventionalcommits":"7.0.2","husky":"9.0.11","semantic-release":"23.1.1","standard":"17.1.0"},"publishConfig":{"access":"public","provenance":"true"},"_id":"@iaigz/stream-io@1.7.12","readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n\n// WARN: favour usage of stream.pipeline() over Readable.pipe()\n// see https://nodejs.org/docs/latest-v20.x/api/stream.html#streampipelinesource-transforms-destination-callback\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","readmeFilename":"README.md","gitHead":"5f780fb6f9aafd9dd63f0edfde274398c6e0e8a3","_nodeVersion":"20.14.0","_npmVersion":"10.8.1","dist":{"integrity":"sha512-CjygDWEh1QLeKDHXpnkqgimCZ1GX6SwihL0RWTFTwAdxc3EUVvU32Wz+2/aveTtacUY+Mbgog6KT9bFgYVyGHw==","shasum":"938480c023208ac395a2ec729364303980c4af1a","tarball":"https://registry.npmjs.org/@iaigz/stream-io/-/stream-io-1.7.12.tgz","fileCount":4,"unpackedSize":13234,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH9QmYb6peYyRmK1O+Qm9qmbSQwccJHQ5ErjMaqhEFARAiEAyp0wNU9/g51gYsFrvGiddFOGIayl8uytGeZ01FvtCbA="}]},"_npmUser":{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"},"directories":{},"maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stream-io_1.7.12_1718828259943_0.9177554764718854"},"_hasShrinkwrap":false}},"time":{"created":"2023-09-11T23:47:22.573Z","modified":"2024-06-19T20:17:40.314Z","1.1.1":"2023-09-11T23:47:22.858Z","1.2.0":"2023-09-12T07:38:34.952Z","1.2.1":"2023-09-12T09:54:18.867Z","1.3.0":"2023-09-12T10:16:01.461Z","1.4.0":"2023-09-12T10:32:36.450Z","1.5.0":"2023-09-12T12:28:34.780Z","1.6.0":"2023-09-12T12:45:03.683Z","1.6.1":"2023-09-12T13:11:53.133Z","1.6.2":"2023-09-12T14:38:07.695Z","1.6.3":"2023-09-12T14:51:43.155Z","1.6.4":"2023-09-12T14:57:49.703Z","1.6.5":"2023-10-05T20:32:42.734Z","1.6.6":"2023-11-11T14:13:10.723Z","1.6.7":"2023-12-02T14:20:27.920Z","1.6.8":"2023-12-02T17:11:37.672Z","1.6.9":"2023-12-04T01:35:33.584Z","1.6.10":"2023-12-05T01:42:31.611Z","1.6.11":"2023-12-13T03:46:54.638Z","1.6.12":"2023-12-15T05:10:10.243Z","1.6.13":"2023-12-23T13:05:48.852Z","1.6.14":"2023-12-27T13:59:30.928Z","1.6.15":"2024-01-07T17:09:48.367Z","1.6.16":"2024-01-12T03:28:50.691Z","1.6.17":"2024-01-12T04:00:02.749Z","1.6.18":"2024-01-12T05:27:04.574Z","1.6.19":"2024-01-12T05:34:20.427Z","1.6.20":"2024-01-12T05:49:15.758Z","1.7.0":"2024-01-12T06:00:22.989Z","1.7.1":"2024-01-13T22:11:01.330Z","1.7.2":"2024-01-20T11:40:21.884Z","1.7.3":"2024-01-25T21:58:34.776Z","1.7.4":"2024-01-29T05:35:40.722Z","1.7.5":"2024-02-10T15:09:13.600Z","1.7.6":"2024-03-15T16:11:42.891Z","1.7.7":"2024-03-16T05:08:20.615Z","1.7.8":"2024-03-23T11:38:56.946Z","1.7.9":"2024-03-25T07:57:02.196Z","1.7.10":"2024-03-27T22:10:18.059Z","1.7.11":"2024-06-19T15:35:43.853Z","1.7.12":"2024-06-19T20:17:40.125Z"},"maintainers":[{"name":"lorenzogrv","email":"lorenzogrv@gmail.com"}],"author":{"name":"Lorenzo García Rivera"},"repository":{"url":"git+https://gitlab.com/iaigz/stream-io.git","type":"git"},"keywords":["iai","core","stream","io","child_process","spawn","duplex","stream"],"license":"BSD-3-Clause","homepage":"https://gitlab.com/iaigz/stream-io","bugs":{"url":"https://gitlab.com/iaigz/stream-io/-/issues"},"readme":"# @iaigz/stream-io\n\n> Pipeable subprocesses\n\nThis is an utility to pipe to/from spawned child processes likewise a command\nline pipeline.\n\n> **IOStream** is responsible of ONE, and only one, Input-Output operation.\n\nInternally, it wraps a Subprocess whoose standard input can be reached\nthrough the _Writable_ stream interface; and whoose standard output can be\nconsumed from the _Readable_ stream counterpart.\n\n[[_TOC_]]\n\n## Install\n\nYou may install this package either:\n\n```bash\n# using npm's gitlab support\nnpm install gitlab:iaigz/stream-io\n# using npm.org public registry\nnpm install @iaigz/stream-io\n# using gitlab.com @iaigz's npm package registry\nnpm config set @iaigz:registry=https://gitlab.com/api/v4/packages/npm/\nnpm install @iaigz/stream-io\n```\n\n## Code example\n\n```javascript\nconst IOStream = require('@iaigz/stream-io')\n\n// Ofc, we may pipe from any Readable source\nprocess.stdin\n  // Just pass data through\n  .pipe(new IOStream('cat'))\n  // Ofc, we may pipe to any Writable destination\n  .pipe(process.stdout)\n\n// WARN: favour usage of stream.pipeline() over Readable.pipe()\n// see https://nodejs.org/docs/latest-v20.x/api/stream.html#streampipelinesource-transforms-destination-callback\n```\n\nFor a more complete - but also useless - example, see `example/jq.js`\n\n## Test & Lint\n\nA script is provided to run the suite. Once cloned, install deps and run it.\n\n```bash\nnpm ci\n\nnpm test\n# or\nbash script/test\nbash script/lint\n```\n\nLinting is done with `standard`, so code style meets `standard` style.\n\n- - -\n\n## Knowledge Gems\n\nThe following tips are things I've found useful to understand streams better\n\n### Difference between Transform and Duplex\n\nTime have elapsed since I messed-up with the Duplex aproach. Time ago I\nI thought IO may perform operations with data which aren't a transform - in the\nsense of _transformation_ - but some day I found the following\n[wonderful piece of knowledge at SO](https://stackoverflow.com/a/18339203/1894803)\n\n> #### Duplex Stream\n>\n> A Duplex stream can be thought of a readable stream with a writable stream.\n> Both are independent and each have separate internal buffer.\n> The reads and writes events happen independently.\n>\n> ```plain\n>               ------------------|\n>         Read  <-----               External Source\n> You           ------------------|\n>         Write ----->               External Sink\n>               ------------------|\n> You don't get what you write. It is sent to another source.\n> ```\n>\n> #### Transform Stream\n>\n> A Transform stream is a duplex where the read and write takes place in a\n> causal way. The end points of the duplex stream are linked via some\n> transform. Read requires write to have occurred.\n>\n> ```plain\n>                --------------|--------------\n> You     Write  ---->                   ---->  Read  You\n>                --------------|--------------\n> You write something, it is transformed, then you read something.\n> ```\n>\n> #### Conclusion\n>\n> The EUREKA there is the linear flow _input => output_ which a Transform\n> stream eases significantly, whereas Duplex feels a kind of bi-directional\n> beast.\n\nThat post has credits on why `stream-io` implements a `Transform` instead of a\n`Duplex`. It simplifies the whole thing, while technicaly an IO may not be\nwritable at all (commands expecting no input) but produce readable output.\n\n### Backpressuring\n\nThere is a good [guide about backpressuring at nodejs.org](https://nodejs.org/es/docs/guides/backpressuring-in-streams/)\n","readmeFilename":"README.md"}