Spaces:
Paused
Paused
| ; | |
| const iconvLite = require("iconv-lite"); | |
| const supportedNames = require("./supported-names.json"); | |
| const labelsToNames = require("./labels-to-names.json"); | |
| const supportedNamesSet = new Set(supportedNames); | |
| // https://encoding.spec.whatwg.org/#concept-encoding-get | |
| exports.labelToName = label => { | |
| label = String(label).trim().toLowerCase(); | |
| return labelsToNames[label] || null; | |
| }; | |
| // https://encoding.spec.whatwg.org/#decode | |
| exports.decode = (uint8Array, fallbackEncodingName) => { | |
| let encoding = fallbackEncodingName; | |
| if (!exports.isSupported(encoding)) { | |
| throw new RangeError(`"${encoding}" is not a supported encoding name`); | |
| } | |
| const bomEncoding = exports.getBOMEncoding(uint8Array); | |
| if (bomEncoding !== null) { | |
| encoding = bomEncoding; | |
| } | |
| // iconv-lite will strip BOMs for us, so no need to do the stuff the spec does | |
| return iconvLite.decode(uint8Array, encoding); | |
| }; | |
| // https://github.com/whatwg/html/issues/1910#issuecomment-254017369 | |
| exports.getBOMEncoding = uint8Array => { | |
| if (uint8Array[0] === 0xFE && uint8Array[1] === 0xFF) { | |
| return "UTF-16BE"; | |
| } else if (uint8Array[0] === 0xFF && uint8Array[1] === 0xFE) { | |
| return "UTF-16LE"; | |
| } else if (uint8Array[0] === 0xEF && uint8Array[1] === 0xBB && uint8Array[2] === 0xBF) { | |
| return "UTF-8"; | |
| } | |
| return null; | |
| }; | |
| exports.isSupported = name => { | |
| return supportedNamesSet.has(String(name)); | |
| }; | |