Bakhtina Sofya b84cb877be 1st comm | 2 weeks ago | |
---|---|---|
.. | ||
lib | 2 weeks ago | |
src | 2 weeks ago | |
.eslintignore | 2 weeks ago | |
.eslintrc.json | 2 weeks ago | |
.huskyrc.json | 2 weeks ago | |
.lintstagedrc.json | 2 weeks ago | |
.npmignore | 2 weeks ago | |
.npmrc | 2 weeks ago | |
.prettierignore | 2 weeks ago | |
.prettierrc.json | 2 weeks ago | |
.travis.yml | 2 weeks ago | |
babel.config.js | 2 weeks ago | |
changelog.md | 2 weeks ago | |
package.json | 2 weeks ago | |
readme.md | 2 weeks ago | |
yarn-error.log | 2 weeks ago | |
yarn.lock | 2 weeks ago |
FS Capacitor is a filesystem buffer for finite node streams. It supports simultaneous read/write, and can be used to create multiple independent readable streams, each starting at the beginning of the buffer.
This is useful for file uploads and other situations where you want to avoid delays to the source stream, but have slow downstream transformations to apply:
import fs from "fs";
import http from "http";
import WriteStream from "fs-capacitor";
http.createServer((req, res) => {
const capacitor = new WriteStream();
const destination = fs.createReadStream("destination.txt");
// pipe data to the capacitor
req.pipe(capacitor);
// read data from the capacitor
capacitor
.createReadStream()
.pipe(/* some slow Transform streams here */)
.pipe(destination);
// read data from the very beginning
setTimeout(() => {
capacitor.createReadStream().pipe(/* elsewhere */);
// you can destroy a capacitor as soon as no more read streams are needed
// without worrying if existing streams are fully consumed
capacitor.destroy();
}, 100);
});
It is especially important to use cases like graphql-upload
where server code may need to stash earler parts of a stream until later parts have been processed, and needs to attach multiple consumers at different times.
FS Capacitor creates its temporary files in the directory ideneified by os.tmpdir()
and attempts to remove them:
readStream.destroy()
has been called and all read streams are fully consumed or destroyedPlease do note that FS Capacitor does NOT release disk space as data is consumed, and therefore is not suitable for use with infinite streams or those larger than the filesystem.
WriteStream
inherets all the methods of fs.WriteStream
new WriteStream()
Create a new WriteStream
instance.
.createReadStream(): ReadStream
Create a new ReadStream
instance attached to the WriteStream
instance.
Once a WriteStream
is fully destroyed, calling .createReadStream()
will throw a ReadAfterDestroyedError
error.
As soon as a ReadStream
ends or is closed (such as by calling readStream.destroy()
), it is detached from its WriteStream
.
.destroy(error?: ?Error): void
error
is present, WriteStream
s still attached are destroyed with the same error.error
is null or undefined, destruction of underlying resources is delayed until no ReadStream
s are attached the WriteStream
instance.ReadStream
inherets all the methods of fs.ReadStream
.