| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 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)
- }
- };
|