Skip to content

Commit

Permalink
typings: add JSDoc for string_decoder
Browse files Browse the repository at this point in the history
PR-URL: #38229
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
  • Loading branch information
Ayase-252 authored Dec 30, 2021
1 parent 4e6fc8d commit a100a93
Showing 1 changed file with 37 additions and 3 deletions.
40 changes: 37 additions & 3 deletions lib/string_decoder.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,14 @@ const kNativeDecoder = Symbol('kNativeDecoder');

// Do not cache `Buffer.isEncoding` when checking encoding names as some
// modules monkey-patch it to support additional encodings
/**
* Normalize encoding notation
*
* @param {string} enc
* @returns {"utf8" | "utf16le" | "hex" | "ascii"
* | "base64" | "latin1" | "base64url"}
* @throws {TypeError} Throws an error when encoding is invalid
*/
function normalizeEncoding(enc) {
const nenc = internalUtil.normalizeEncoding(enc);
if (nenc === undefined) {
Expand All @@ -65,15 +73,27 @@ const encodingsMap = {};
for (let i = 0; i < encodings.length; ++i)
encodingsMap[encodings[i]] = i;

// StringDecoder provides an interface for efficiently splitting a series of
// buffers into a series of JS strings without breaking apart multi-byte
// characters.
/**
* StringDecoder provides an interface for efficiently splitting a series of
* buffers into a series of JS strings without breaking apart multi-byte
* characters.
*
* @param {string} [encoding=utf-8]
*/
function StringDecoder(encoding) {
this.encoding = normalizeEncoding(encoding);
this[kNativeDecoder] = Buffer.alloc(kSize);
this[kNativeDecoder][kEncodingField] = encodingsMap[this.encoding];
}

/**
* Returns a decoded string, omitting any incomplete multi-bytes
* characters at the end of the Buffer, or TypedArray, or DataView
*
* @param {string | Buffer | TypedArray | DataView} buf
* @returns {string}
* @throws {TypeError} Throws when buf is not in one of supported types
*/
StringDecoder.prototype.write = function write(buf) {
if (typeof buf === 'string')
return buf;
Expand All @@ -84,6 +104,14 @@ StringDecoder.prototype.write = function write(buf) {
return decode(this[kNativeDecoder], buf);
};

/**
* Returns any remaining input stored in the internal buffer as a string.
* After end() is called, the stringDecoder object can be reused for new
* input.
*
* @param {string | Buffer | TypedArray | DataView} [buf]
* @returns {string}
*/
StringDecoder.prototype.end = function end(buf) {
let ret = '';
if (buf !== undefined)
Expand All @@ -94,6 +122,12 @@ StringDecoder.prototype.end = function end(buf) {
};

/* Everything below this line is undocumented legacy stuff. */
/**
*
* @param {string | Buffer | TypedArray | DataView} buf
* @param {number} offset
* @returns {string}
*/
StringDecoder.prototype.text = function text(buf, offset) {
this[kNativeDecoder][kMissingBytes] = 0;
this[kNativeDecoder][kBufferedBytes] = 0;
Expand Down

0 comments on commit a100a93

Please sign in to comment.