fs: port SonicBoom module to fs module as Utf8Stream · nodejs/node@aeb4de5
@@ -7701,6 +7701,186 @@ added:
7701770177027702Type of file system.
770377037704+### Class: `fs.Utf8Stream`
7705+7706+<!-- YAML
7707+added: REPLACEME
7708+-->
7709+7710+> Stability: 1 - Experimental
7711+7712+An optimized UTF-8 stream writer that allows for flushing all the internal
7713+buffering on demand. It handles `EAGAIN` errors correctly, allowing for
7714+customization, for example, by dropping content if the disk is busy.
7715+7716+#### Event: `'close'`
7717+7718+The `'close'` event is emitted when the stream is fully closed.
7719+7720+#### Event: `'drain'`
7721+7722+The `'drain'` event is emitted when the internal buffer has drained sufficiently
7723+to allow continued writing.
7724+7725+#### Event: `'drop'`
7726+7727+The `'drop'` event is emitted when to maximal length is reached and that data
7728+will not be written. The data that was dropped is passed as the first argument
7729+to the event handle.
7730+7731+#### Event: `'error'`
7732+7733+The `'error'` event is emitted when an error occurs.
7734+7735+#### Event: `'finish'`
7736+7737+The `'finish'` event is emitted when the stream has been ended and all data has
7738+been flushed to the underlying file.
7739+7740+#### Event: `'ready'`
7741+7742+The `'ready'` event is emitted when the stream is ready to accept writes.
7743+7744+#### Event: `'write'`
7745+7746+The `'write'` event is emitted when a write operation has completed. The number
7747+of bytes written is passed as the first argument to the event handler.
7748+7749+#### `new fs.Utf8Stream([options])`
7750+7751+* `options` {Object}
7752+ * `append`: {boolean} Appends writes to dest file instead of truncating it.
7753+ **Default**: `true`.
7754+ * `contentMode`: {string} Which type of data you can send to the write
7755+ function, supported values are `'utf8'` or `'buffer'`. **Default**:
7756+ `'utf8'`.
7757+ * `dest`: {string} A path to a file to be written to (mode controlled by the
7758+ append option).
7759+ * `fd`: {number} A file descriptor, something that is returned by `fs.open()`
7760+ or `fs.openSync()`.
7761+ * `fs`: {Object} An object that has the same API as the `fs` module, useful
7762+ for mocking, testing, or customizing the behavior of the stream.
7763+ * `fsync`: {boolean} Perform a `fs.fsyncSync()` every time a write is
7764+ completed.
7765+ * `maxLength`: {number} The maximum length of the internal buffer. If a write
7766+ operation would cause the buffer to exceed `maxLength`, the data written is
7767+ dropped and a drop event is emitted with the dropped data
7768+ * `maxWrite`: {number} The maximum number of bytes that can be written;
7769+ **Default**: `16384`
7770+ * `minLength`: {number} The minimum length of the internal buffer that is
7771+ required to be full before flushing.
7772+ * `mkdir`: {boolean} Ensure directory for `dest` file exists when true.
7773+ **Default**: `false`.
7774+ * `mode`: {number|string} Specify the creating file mode (see `fs.open()`).
7775+ * `periodicFlush`: {number} Calls flush every `periodicFlush` milliseconds.
7776+ * `retryEAGAIN` {Function} A function that will be called when `write()`,
7777+ `writeSync()`, or `flushSync()` encounters an `EAGAIN` or `EBUSY` error.
7778+ If the return value is `true` the operation will be retried, otherwise it
7779+ will bubble the error. The `err` is the error that caused this function to
7780+ be called, `writeBufferLen` is the length of the buffer that was written,
7781+ and `remainingBufferLen` is the length of the remaining buffer that the
7782+ stream did not try to write.
7783+ * `err` {any} An error or `null`.
7784+ * `writeBufferLen` {number}
7785+ * `remainingBufferLen`: {number}
7786+ * `sync`: {boolean} Perform writes synchronously.
7787+7788+#### `utf8Stream.append`
7789+7790+* {boolean} Whether the stream is appending to the file or truncating it.
7791+7792+#### `utf8Stream.contentMode`
7793+7794+* {string} The type of data that can be written to the stream. Supported
7795+ values are `'utf8'` or `'buffer'`. **Default**: `'utf8'`.
7796+7797+#### `utf8Stream.destroy()`
7798+7799+Close the stream immediately, without flushing the internal buffer.
7800+7801+#### `utf8Stream.end()`
7802+7803+Close the stream gracefully, flushing the internal buffer before closing.
7804+7805+#### `utf8Stream.fd`
7806+7807+* {number} The file descriptor that is being written to.
7808+7809+#### `utf8Stream.file`
7810+7811+* {string} The file that is being written to.
7812+7813+#### `utf8Stream.flush(callback)`
7814+7815+* `callback` {Function}
7816+ * `err` {Error|null} An error if the flush failed, otherwise `null`.
7817+7818+Writes the current buffer to the file if a write was not in progress. Do
7819+nothing if `minLength` is zero or if it is already writing.
7820+7821+#### `utf8Stream.flushSync()`
7822+7823+Flushes the buffered data synchronously. This is a costly operation.
7824+7825+#### `utf8Stream.fsync`
7826+7827+* {boolean} Whether the stream is performing a `fs.fsyncSync()` after every
7828+ write operation.
7829+7830+#### `utf8Stream.maxLength`
7831+7832+* {number} The maximum length of the internal buffer. If a write
7833+ operation would cause the buffer to exceed `maxLength`, the data written is
7834+ dropped and a drop event is emitted with the dropped data.
7835+7836+#### `utf8Stream.minLength`
7837+7838+* {number} The minimum length of the internal buffer that is required to be
7839+ full before flushing.
7840+7841+#### `utf8Stream.mkdir`
7842+7843+* {boolean} Whether the stream should ensure that the directory for the
7844+ `dest` file exists. If `true`, it will create the directory if it does not
7845+ exist. **Default**: `false`.
7846+7847+#### `utf8Stream.mode`
7848+7849+* {number|string} The mode of the file that is being written to.
7850+7851+#### `utf8Stream.periodicFlush`
7852+7853+* {number} The number of milliseconds between flushes. If set to `0`, no
7854+ periodic flushes will be performed.
7855+7856+#### `utf8Stream.reopen(file)`
7857+7858+* `file`: {string|Buffer|URL} A path to a file to be written to (mode
7859+ controlled by the append option).
7860+7861+Reopen the file in place, useful for log rotation.
7862+7863+#### `utf8Stream.sync`
7864+7865+* {boolean} Whether the stream is writing synchronously or asynchronously.
7866+7867+#### `utf8Stream.write(data)`
7868+7869+* `data` {string|Buffer} The data to write.
7870+* Returns {boolean}
7871+7872+When the `options.contentMode` is set to `'utf8'` when the stream is created,
7873+the `data` argument must be a string. If the `contentMode` is set to `'buffer'`,
7874+the `data` argument must be a {Buffer}.
7875+7876+#### `utf8Stream.writing`
7877+7878+* {boolean} Whether the stream is currently writing data to the file.
7879+7880+#### `utf8Stream[Symbol.dispose]()`
7881+7882+Calls `utf8Stream.destroy()`.
7883+77047884### Class: `fs.WriteStream`
7705788577067886<!-- YAML