{"_id":"@rauschma/stringio","_rev":"3014117","name":"@rauschma/stringio","description":"``` npm install @rauschma/stringio ``` <!-- ########################################################## -->","dist-tags":{"latest":"1.4.0"},"maintainers":[{"name":"rauschma","email":"axel@rauschma.de"}],"time":{"modified":"2023-09-20T06:32:16.000Z","created":"2018-04-06T20:52:43.444Z","1.4.0":"2018-05-05T02:11:17.964Z","1.3.0":"2018-05-04T21:42:12.466Z","1.2.1":"2018-05-01T01:58:20.387Z","1.2.0":"2018-04-23T16:36:13.867Z","1.1.1":"2018-04-07T17:53:17.180Z","1.1.0":"2018-04-07T16:08:35.386Z","1.0.0":"2018-04-06T20:52:43.444Z"},"users":{},"author":{"name":"Axel Rauschmayer"},"repository":{"type":"git","url":"git+https://github.com/rauschma/stringio.git"},"versions":{"1.4.0":{"name":"@rauschma/stringio","version":"1.4.0","author":{"name":"Axel Rauschmayer"},"repository":{"type":"git","url":"git+https://github.com/rauschma/stringio.git"},"main":"./dist/src/index.js","types":"./dist/src/index.d.ts","scripts":{"clean":"rm -rf dist/*","build":"tsc","watch":"tsc --watch","test":"mocha --ui qunit","testall":"mocha --ui qunit dist/test","prepublishOnly":"tsc"},"//":"@types/node being a normal dependency is not ideal, but it ensures it’s installed automatically","dependencies":{"@types/node":"^10.0.3"},"devDependencies":{"@types/mocha":"^2.2.48","mocha":"^5.0.4"},"gitHead":"b55d60f41c6ba7cc692930dbc1039e67da52968b","description":"``` npm install @rauschma/stringio ``` <!-- ########################################################## -->","bugs":{"url":"https://github.com/rauschma/stringio/issues"},"homepage":"https://github.com/rauschma/stringio#readme","_id":"@rauschma/stringio@1.4.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"rauschma","email":"axel@rauschma.de"},"dist":{"shasum":"0b667bea726652a10a48dfc1dadc89e0ec51e269","size":6943,"noattachment":false,"key":"/@rauschma/stringio/-/@rauschma/stringio-1.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@rauschma/stringio/download/@rauschma/stringio-1.4.0.tgz"},"maintainers":[{"name":"rauschma","email":"axel@rauschma.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stringio_1.4.0_1525486277868_0.3131167001044044"},"_cnpmcore_publish_time":"2021-12-20T12:45:49.772Z","publish_time":1525486277964,"_cnpm_publish_time":1525486277964},"1.3.0":{"name":"@rauschma/stringio","version":"1.3.0","author":{"name":"Axel Rauschmayer"},"repository":{"type":"git","url":"git+https://github.com/rauschma/stringio.git"},"main":"./dist/src/index.js","types":"./dist/src/index.d.ts","scripts":{"build":"tsc","watch":"tsc --watch","test":"mocha --ui qunit","testall":"mocha --ui qunit dist/test","prepublishOnly":"tsc"},"//":"@types/node being a normal dependency is not ideal, but it ensures it’s installed automatically","dependencies":{"@types/node":"^10.0.3"},"devDependencies":{"@types/mocha":"^2.2.48","mocha":"^5.0.4"},"gitHead":"3136377ddbaee6a9b8dbbb176cecb59be21ab25a","description":"``` npm install @rauschma/stringio ``` <!-- ########################################################## -->","bugs":{"url":"https://github.com/rauschma/stringio/issues"},"homepage":"https://github.com/rauschma/stringio#readme","_id":"@rauschma/stringio@1.3.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"rauschma","email":"axel@rauschma.de"},"dist":{"shasum":"633a48c3b0bab77bd005d8196f31ec2173e7edf9","size":6509,"noattachment":false,"key":"/@rauschma/stringio/-/@rauschma/stringio-1.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@rauschma/stringio/download/@rauschma/stringio-1.3.0.tgz"},"maintainers":[{"name":"rauschma","email":"axel@rauschma.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stringio_1.3.0_1525470132342_0.46181599591213507"},"_cnpmcore_publish_time":"2021-12-20T12:45:48.891Z","publish_time":1525470132466,"_cnpm_publish_time":1525470132466},"1.2.1":{"name":"@rauschma/stringio","version":"1.2.1","author":{"name":"Axel Rauschmayer"},"repository":{"type":"git","url":"git+https://github.com/rauschma/stringio.git"},"main":"./dist/src/index.js","types":"./dist/src/index.d.ts","scripts":{"build":"tsc","watch":"tsc --watch","test":"mocha --ui qunit","testall":"mocha --ui qunit dist/test","prepublishOnly":"tsc"},"//":"@types/node being a normal dependency is not ideal, but it ensures it’s installed automatically","dependencies":{"@types/node":"^9.4.7"},"devDependencies":{"@types/mocha":"^2.2.48","mocha":"^5.0.4"},"gitHead":"e63c9a01390fa819f0eb9ed3f55ee3fba9e434d1","description":"``` npm install @rauschma/stringio ```","bugs":{"url":"https://github.com/rauschma/stringio/issues"},"homepage":"https://github.com/rauschma/stringio#readme","_id":"@rauschma/stringio@1.2.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"rauschma","email":"axel@rauschma.de"},"dist":{"shasum":"ebc6bde064032a463cd45aa83c2ceeb3c1fc5158","size":5858,"noattachment":false,"key":"/@rauschma/stringio/-/@rauschma/stringio-1.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@rauschma/stringio/download/@rauschma/stringio-1.2.1.tgz"},"maintainers":[{"name":"rauschma","email":"axel@rauschma.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stringio_1.2.1_1525139900298_0.7407547801114158"},"_cnpmcore_publish_time":"2021-12-20T12:45:47.208Z","publish_time":1525139900387,"_cnpm_publish_time":1525139900387},"1.2.0":{"name":"@rauschma/stringio","version":"1.2.0","author":{"name":"Axel Rauschmayer"},"repository":{"type":"git","url":"git+https://github.com/rauschma/stringio.git"},"main":"./dist/src/index.js","types":"./dist/src/index.d.ts","scripts":{"build":"tsc","watch":"tsc --watch","test":"mocha --ui qunit","testall":"mocha --ui qunit dist/test","prepublishOnly":"tsc"},"//":"@types/node being a normal dependency is not ideal, but it ensures it’s installed automatically","dependencies":{"@types/node":"^9.4.7"},"devDependencies":{"@types/mocha":"^2.2.48","mocha":"^5.0.4"},"gitHead":"e7031479b48006a2d00e6267b06ce700a6b6df97","description":"``` npm install @rauschma/stringio ```","bugs":{"url":"https://github.com/rauschma/stringio/issues"},"homepage":"https://github.com/rauschma/stringio#readme","_id":"@rauschma/stringio@1.2.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0-nightly201804231c66a10a0c","_npmUser":{"name":"rauschma","email":"axel@rauschma.de"},"dist":{"shasum":"670212a913d047d88cb2a17e0f4630912aa3d2bb","size":5836,"noattachment":false,"key":"/@rauschma/stringio/-/@rauschma/stringio-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@rauschma/stringio/download/@rauschma/stringio-1.2.0.tgz"},"maintainers":[{"name":"rauschma","email":"axel@rauschma.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stringio_1.2.0_1524501373781_0.3380953214614797"},"_cnpmcore_publish_time":"2021-12-20T12:45:45.559Z","publish_time":1524501373867,"_cnpm_publish_time":1524501373867},"1.1.1":{"name":"@rauschma/stringio","version":"1.1.1","author":{"name":"Axel Rauschmayer"},"repository":{"type":"git","url":"git+https://github.com/rauschma/stringio.git"},"main":"./dist/src/index.js","types":"./dist/src/index.d.ts","scripts":{"build":"tsc","watch":"tsc --watch","test":"mocha --ui qunit","testall":"mocha --ui qunit dist/test","prepublishOnly":"tsc"},"//":"@types/node being a normal dependency is not ideal, but it ensures it’s installed automatically","dependencies":{"@types/node":"^9.4.7"},"devDependencies":{"@types/mocha":"^2.2.48","mocha":"^5.0.4"},"gitHead":"a80f79737f7fce9d50fa546d6a501bbc2c4b37ef","description":"``` npm install @rauschma/stringio ```","bugs":{"url":"https://github.com/rauschma/stringio/issues"},"homepage":"https://github.com/rauschma/stringio#readme","_id":"@rauschma/stringio@1.1.1","_npmVersion":"5.6.0","_nodeVersion":"10.0.0-nightly20180405b29c36b807","_npmUser":{"name":"rauschma","email":"axel@rauschma.de"},"dist":{"shasum":"e52441b53e0023abdc70157fa35e53e3092cb2a5","size":5395,"noattachment":false,"key":"/@rauschma/stringio/-/@rauschma/stringio-1.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@rauschma/stringio/download/@rauschma/stringio-1.1.1.tgz"},"maintainers":[{"name":"rauschma","email":"axel@rauschma.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stringio_1.1.1_1523123597129_0.5330753761080096"},"_cnpmcore_publish_time":"2021-12-20T12:45:43.895Z","publish_time":1523123597180,"_cnpm_publish_time":1523123597180},"1.1.0":{"name":"@rauschma/stringio","version":"1.1.0","author":{"name":"Axel Rauschmayer"},"repository":{"type":"git","url":"git+https://github.com/rauschma/stringio.git"},"main":"./dist/src/index.js","types":"./dist/src/index.d.ts","scripts":{"build":"tsc","watch":"tsc --watch","test":"mocha --ui qunit","testall":"mocha --ui qunit dist/test","prepublishOnly":"tsc"},"//":"@types/node being a normal dependency is not ideal, but it ensures it’s installed automatically","dependencies":{"@types/node":"^9.4.7"},"devDependencies":{"@types/mocha":"^2.2.48","mocha":"^5.0.4"},"gitHead":"55e49d02fd43f9a1ea686426820a04da7149bf6a","description":"``` npm install @rauschma/stringio ```","bugs":{"url":"https://github.com/rauschma/stringio/issues"},"homepage":"https://github.com/rauschma/stringio#readme","_id":"@rauschma/stringio@1.1.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0-nightly20180405b29c36b807","_npmUser":{"name":"rauschma","email":"axel@rauschma.de"},"dist":{"shasum":"cba2608177ab9a55d5a7ec48dc2274320dbb425b","size":5323,"noattachment":false,"key":"/@rauschma/stringio/-/@rauschma/stringio-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@rauschma/stringio/download/@rauschma/stringio-1.1.0.tgz"},"maintainers":[{"name":"rauschma","email":"axel@rauschma.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stringio_1.1.0_1523117315311_0.7606476056889342"},"_cnpmcore_publish_time":"2021-12-20T12:45:42.152Z","publish_time":1523117315386,"_cnpm_publish_time":1523117315386},"1.0.0":{"name":"@rauschma/stringio","version":"1.0.0","author":{"name":"Axel Rauschmayer"},"main":"./dist/src/index.js","types":"./dist/src/index.d.ts","scripts":{"build":"tsc","watch":"tsc --watch","test":"mocha --ui qunit","testall":"mocha --ui qunit dist/test","prepublishOnly":"tsc"},"//":"@types/node being a normal dependency is not ideal, but it ensures it’s installed automatically","dependencies":{"@types/node":"^9.4.7"},"devDependencies":{"@types/mocha":"^2.2.48","mocha":"^5.0.4"},"gitHead":"05208ce1363fef20beb99efbed90acab9974ad7f","description":"``` npm install @rauschma/stringio ```","_id":"@rauschma/stringio@1.0.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0-nightly20180405b29c36b807","_npmUser":{"name":"rauschma","email":"axel@rauschma.de"},"dist":{"shasum":"08b1e0ea0341e90b10881a62147aa0c9197fe51b","size":3520,"noattachment":false,"key":"/@rauschma/stringio/-/@rauschma/stringio-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@rauschma/stringio/download/@rauschma/stringio-1.0.0.tgz"},"maintainers":[{"name":"rauschma","email":"axel@rauschma.de"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/stringio_1.0.0_1523047963373_0.9258556252846943"},"_cnpmcore_publish_time":"2021-12-20T12:45:40.517Z","publish_time":1523047963444,"_cnpm_publish_time":1523047963444}},"readme":"# stringio: convert strings to Node.js streams and vice versa\n\n```\nnpm install @rauschma/stringio\n```\n<!-- ########################################################## -->\n\n## Strings ↔︎ streams\n\nSee line A and line B:\n\n```js\nimport * as assert from 'assert';\nimport { StringStream, readableToString } from '@rauschma/stringio';\n\ntest('From string to stream to string', async () => {\n  const str = 'Hello!\\nHow are you?\\n';\n  const stringStream = new StringStream(str); // (A)\n  const result = await readableToString(stringStream); // (B)\n  assert.strictEqual(result, str);\n});\n```\n\n### `StringStream`: from string to stream\n\n```typescript\ndeclare class StringStream extends Readable {\n  constructor(str: string);\n}\n```\n\nUsed in line A.\n\n### `readableToString`: from stream to string\n\n```typescript\ndeclare function readableToString(readable: Readable, encoding?: string): Promise<string>;\n```\n\nDefault encoding is `'utf-8'`.\n\nUsed in line B.\n\n#### Reading stdin into a string\n\n```typescript\nasync function readStdin() {\n  const str = await readableToString(process.stdin);\n  console.log('STR: '+str);\n}\n```\n\n### Related npm packages\n\n* [`string-to-stream`](https://github.com/feross/string-to-stream): Convert a string into a stream.\n* [`get-stream`](https://github.com/sindresorhus/get-stream): Get a stream as a string, buffer, or array.\n\n<!-- ########################################################## -->\n\n## Asynchronous iterables\n\n### `chunksToLinesAsync`: async iterable over chunks to async iterable over lines\n\n```typescript\ndeclare function chunksToLinesAsync(chunks: AsyncIterable<string>): AsyncIterable<string>;\n```\n\nEach line includes the line break at the end (if any – the last line may not have one).\n\nExample (starting with Node.js v.10, readable streams are asynchronous iterables):\n\n```js\nconst fs = require('fs');\nconst {chunksToLinesAsync} = require('@rauschma/stringio');\n\nasync function main() {\n  const stream = fs.createReadStream(process.argv[2]);\n    // Works, too: const stream = process.stdin;\n  for await (const line of chunksToLinesAsync(stream)) {\n    console.log(chomp(line));\n  }\n}\nmain();\n```\n\n<!-- ########################################################## -->\n\n## Promisified writing to streams\n\n```typescript\ndeclare function streamWrite(\n  stream: Writable,\n  chunk: string | Buffer | Uint8Array,\n  encoding = 'utf8')\n  : Promise<void>;\n\ndeclare function streamEnd(\n  stream: Writable)\n  : Promise<void>;\n```\n\nUsage:\n\n```js\nawait streamWrite(someStream, 'abc');\nawait streamWrite(someStream, 'def');\nawait streamEnd(someStream);\n```\n\n<!-- ########################################################## -->\n\n## `onExit(childProcess)`: wait until a child process is finished\n\n```ts\nexport declare function onExit(childProcess: ChildProcess): Promise<void>;\n```\n\nUsage:\n\n```js\nconst childProcess = child_process.spawn(···);\nawait onExit(childProcess);\n```\n\nErrors emitted by `childProcess` or a non-zero exit code reject the Promise returned by `onExit()`.\n\n<!-- ########################################################## -->\n\n## String helper function\n\n### `chomp`: remove a line break at the end of a line\n\n```typescript\ndeclare function chomp(line: string): string;\n```\n\n## Further reading\n\nThe following 2ality blog posts use `stringio`:\n\n* [Reading streams via async iteration in Node.js](http://2ality.com/2018/04/async-iter-nodejs.html)\n* [Working with stdout and stdin of a child process in Node.js](http://2ality.com/2018/05/child-process-streams.html)\n\n## Acknowledgements\n\n* `StringStream` is inspired by: https://github.com/feross/string-to-stream/blob/master/index.js","_attachments":{},"homepage":"https://github.com/rauschma/stringio#readme","bugs":{"url":"https://github.com/rauschma/stringio/issues"}}