const PassThroughDecoder = require('./lib/pass-through-decoder') const UTF8Decoder = require('./lib/utf8-decoder') module.exports = class TextDecoder { constructor (encoding = 'utf8') { this.encoding = normalizeEncoding(encoding) switch (this.encoding) { case 'utf8': this.decoder = new UTF8Decoder() break case 'utf16le': case 'base64': throw new Error('Unsupported encoding: ' + this.encoding) default: this.decoder = new PassThroughDecoder(this.encoding) } } get remaining () { return this.decoder.remaining } push (data) { if (typeof data === 'string') return data return this.decoder.decode(data) } // For Node.js compatibility write (data) { return this.push(data) } end (data) { let result = '' if (data) result = this.push(data) result += this.decoder.flush() return result } } function normalizeEncoding (encoding) { encoding = encoding.toLowerCase() switch (encoding) { case 'utf8': case 'utf-8': return 'utf8' case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return 'utf16le' case 'latin1': case 'binary': return 'latin1' case 'base64': case 'ascii': case 'hex': return encoding default: throw new Error('Unknown encoding: ' + encoding) } };