emailjs-mime-codec-bigarray
Version:
This is a fork of the original emailjs-mime-codec v2.0.8 with a modification to decode large buffer arrays
106 lines (87 loc) • 8.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.convert = exports.arr2str = exports.encode = undefined;
exports.decode = decode;
var _textEncoding = require('text-encoding');
/**
* Encodes an unicode string into an Uint8Array object as UTF-8
*
* @param {String} str String to be encoded
* @return {Uint8Array} UTF-8 encoded typed array
*/
var encode = exports.encode = function encode(str) {
return new _textEncoding.TextEncoder('UTF-8').encode(str);
};
var arr2str = exports.arr2str = function arr2str(arr) {
var CHUNK_SZ = 0x8000;
var strs = [];
for (var i = 0; i < arr.length; i += CHUNK_SZ) {
strs.push(String.fromCharCode.apply(null, arr.subarray(i, i + CHUNK_SZ)));
}
return strs.join('');
};
/**
* Decodes a string from Uint8Array to an unicode string using specified encoding
*
* @param {Uint8Array} buf Binary data to be decoded
* @param {String} Binary data is decoded into string using this charset
* @return {String} Decoded string
*/
function decode(buf) {
var fromCharset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'utf-8';
var charsets = [{ charset: normalizeCharset(fromCharset), fatal: false }, { charset: 'utf-8', fatal: true }, { charset: 'iso-8859-15', fatal: false }];
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = charsets[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _step$value = _step.value,
charset = _step$value.charset,
fatal = _step$value.fatal;
try {
return new _textEncoding.TextDecoder(charset, { fatal: fatal }).decode(buf);
} catch (e) {}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return arr2str(buf); // all else fails, treat it as binary
}
/**
* Convert a string from specific encoding to UTF-8 Uint8Array
*
* @param {String|Uint8Array} data Data to be encoded
* @param {String} Source encoding for the string (optional for data of type String)
* @return {Uint8Array} UTF-8 encoded typed array
*/
var convert = exports.convert = function convert(data, fromCharset) {
return typeof data === 'string' ? encode(data) : encode(decode(data, fromCharset));
};
function normalizeCharset() {
var charset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'utf-8';
var match = void 0;
if (match = charset.match(/^utf[-_]?(\d+)$/i)) {
return 'UTF-' + match[1];
}
if (match = charset.match(/^win[-_]?(\d+)$/i)) {
return 'WINDOWS-' + match[1];
}
if (match = charset.match(/^latin[-_]?(\d+)$/i)) {
return 'ISO-8859-' + match[1];
}
return charset;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jaGFyc2V0LmpzIl0sIm5hbWVzIjpbImRlY29kZSIsImVuY29kZSIsIlRleHRFbmNvZGVyIiwic3RyIiwiYXJyMnN0ciIsIkNIVU5LX1NaIiwic3RycyIsImkiLCJhcnIiLCJsZW5ndGgiLCJwdXNoIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiYXBwbHkiLCJzdWJhcnJheSIsImpvaW4iLCJidWYiLCJmcm9tQ2hhcnNldCIsImNoYXJzZXRzIiwiY2hhcnNldCIsIm5vcm1hbGl6ZUNoYXJzZXQiLCJmYXRhbCIsIlRleHREZWNvZGVyIiwiZSIsImNvbnZlcnQiLCJkYXRhIiwibWF0Y2giXSwibWFwcGluZ3MiOiI7Ozs7OztRQTRCZ0JBLE0sR0FBQUEsTTs7QUE1QmhCOztBQUVBOzs7Ozs7QUFNTyxJQUFNQywwQkFBUyxTQUFUQSxNQUFTO0FBQUEsU0FBTyxJQUFJQyx5QkFBSixDQUFnQixPQUFoQixFQUF5QkQsTUFBekIsQ0FBZ0NFLEdBQWhDLENBQVA7QUFBQSxDQUFmOztBQUVBLElBQU1DLDRCQUFVLFNBQVZBLE9BQVUsTUFBTztBQUM1QixNQUFNQyxXQUFXLE1BQWpCO0FBQ0EsTUFBTUMsT0FBTyxFQUFiOztBQUVBLE9BQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJQyxJQUFJQyxNQUF4QixFQUFnQ0YsS0FBS0YsUUFBckMsRUFBK0M7QUFDN0NDLFNBQUtJLElBQUwsQ0FBVUMsT0FBT0MsWUFBUCxDQUFvQkMsS0FBcEIsQ0FBMEIsSUFBMUIsRUFBZ0NMLElBQUlNLFFBQUosQ0FBYVAsQ0FBYixFQUFnQkEsSUFBSUYsUUFBcEIsQ0FBaEMsQ0FBVjtBQUNEOztBQUVELFNBQU9DLEtBQUtTLElBQUwsQ0FBVSxFQUFWLENBQVA7QUFDRCxDQVRNOztBQVdQOzs7Ozs7O0FBT08sU0FBU2YsTUFBVCxDQUFpQmdCLEdBQWpCLEVBQTZDO0FBQUEsTUFBdkJDLFdBQXVCLHVFQUFULE9BQVM7O0FBQ2xELE1BQU1DLFdBQVcsQ0FDZixFQUFFQyxTQUFTQyxpQkFBaUJILFdBQWpCLENBQVgsRUFBMENJLE9BQU8sS0FBakQsRUFEZSxFQUVmLEVBQUVGLFNBQVMsT0FBWCxFQUFvQkUsT0FBTyxJQUEzQixFQUZlLEVBR2YsRUFBRUYsU0FBUyxhQUFYLEVBQTBCRSxPQUFPLEtBQWpDLEVBSGUsQ0FBakI7O0FBRGtEO0FBQUE7QUFBQTs7QUFBQTtBQU9sRCx5QkFBaUNILFFBQWpDLDhIQUEyQztBQUFBO0FBQUEsVUFBOUJDLE9BQThCLGVBQTlCQSxPQUE4QjtBQUFBLFVBQXJCRSxLQUFxQixlQUFyQkEsS0FBcUI7O0FBQ3pDLFVBQUk7QUFBRSxlQUFPLElBQUlDLHlCQUFKLENBQWdCSCxPQUFoQixFQUF5QixFQUFFRSxZQUFGLEVBQXpCLEVBQW9DckIsTUFBcEMsQ0FBMkNnQixHQUEzQyxDQUFQO0FBQXdELE9BQTlELENBQStELE9BQU9PLENBQVAsRUFBVSxDQUFHO0FBQzdFO0FBVGlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBV2xELFNBQU9uQixRQUFRWSxHQUFSLENBQVAsQ0FYa0QsQ0FXOUI7QUFDckI7O0FBRUQ7Ozs7Ozs7QUFPTyxJQUFNUSw0QkFBVSxTQUFWQSxPQUFVLENBQUNDLElBQUQsRUFBT1IsV0FBUDtBQUFBLFNBQXVCLE9BQU9RLElBQVAsS0FBZ0IsUUFBaEIsR0FBMkJ4QixPQUFPd0IsSUFBUCxDQUEzQixHQUEwQ3hCLE9BQU9ELE9BQU95QixJQUFQLEVBQWFSLFdBQWIsQ0FBUCxDQUFqRTtBQUFBLENBQWhCOztBQUVQLFNBQVNHLGdCQUFULEdBQThDO0FBQUEsTUFBbkJELE9BQW1CLHVFQUFULE9BQVM7O0FBQzVDLE1BQUlPLGNBQUo7O0FBRUEsTUFBS0EsUUFBUVAsUUFBUU8sS0FBUixDQUFjLGtCQUFkLENBQWIsRUFBaUQ7QUFDL0MsV0FBTyxTQUFTQSxNQUFNLENBQU4sQ0FBaEI7QUFDRDs7QUFFRCxNQUFLQSxRQUFRUCxRQUFRTyxLQUFSLENBQWMsa0JBQWQsQ0FBYixFQUFpRDtBQUMvQyxXQUFPLGFBQWFBLE1BQU0sQ0FBTixDQUFwQjtBQUNEOztBQUVELE1BQUtBLFFBQVFQLFFBQVFPLEtBQVIsQ0FBYyxvQkFBZCxDQUFiLEVBQW1EO0FBQ2pELFdBQU8sY0FBY0EsTUFBTSxDQUFOLENBQXJCO0FBQ0Q7O0FBRUQsU0FBT1AsT0FBUDtBQUNEIiwiZmlsZSI6ImNoYXJzZXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXh0RGVjb2RlciwgVGV4dEVuY29kZXIgfSBmcm9tICd0ZXh0LWVuY29kaW5nJ1xyXG5cclxuLyoqXHJcbiAqIEVuY29kZXMgYW4gdW5pY29kZSBzdHJpbmcgaW50byBhbiBVaW50OEFycmF5IG9iamVjdCBhcyBVVEYtOFxyXG4gKlxyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFN0cmluZyB0byBiZSBlbmNvZGVkXHJcbiAqIEByZXR1cm4ge1VpbnQ4QXJyYXl9IFVURi04IGVuY29kZWQgdHlwZWQgYXJyYXlcclxuICovXHJcbmV4cG9ydCBjb25zdCBlbmNvZGUgPSBzdHIgPT4gbmV3IFRleHRFbmNvZGVyKCdVVEYtOCcpLmVuY29kZShzdHIpXHJcblxyXG5leHBvcnQgY29uc3QgYXJyMnN0ciA9IGFyciA9PiB7XHJcbiAgY29uc3QgQ0hVTktfU1ogPSAweDgwMDBcclxuICBjb25zdCBzdHJzID0gW11cclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IENIVU5LX1NaKSB7XHJcbiAgICBzdHJzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBhcnIuc3ViYXJyYXkoaSwgaSArIENIVU5LX1NaKSkpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gc3Rycy5qb2luKCcnKVxyXG59XHJcblxyXG4vKipcclxuICogRGVjb2RlcyBhIHN0cmluZyBmcm9tIFVpbnQ4QXJyYXkgdG8gYW4gdW5pY29kZSBzdHJpbmcgdXNpbmcgc3BlY2lmaWVkIGVuY29kaW5nXHJcbiAqXHJcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnVmIEJpbmFyeSBkYXRhIHRvIGJlIGRlY29kZWRcclxuICogQHBhcmFtIHtTdHJpbmd9IEJpbmFyeSBkYXRhIGlzIGRlY29kZWQgaW50byBzdHJpbmcgdXNpbmcgdGhpcyBjaGFyc2V0XHJcbiAqIEByZXR1cm4ge1N0cmluZ30gRGVjb2RlZCBzdHJpbmdcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGUgKGJ1ZiwgZnJvbUNoYXJzZXQgPSAndXRmLTgnKSB7XHJcbiAgY29uc3QgY2hhcnNldHMgPSBbXHJcbiAgICB7IGNoYXJzZXQ6IG5vcm1hbGl6ZUNoYXJzZXQoZnJvbUNoYXJzZXQpLCBmYXRhbDogZmFsc2UgfSxcclxuICAgIHsgY2hhcnNldDogJ3V0Zi04JywgZmF0YWw6IHRydWUgfSxcclxuICAgIHsgY2hhcnNldDogJ2lzby04ODU5LTE1JywgZmF0YWw6IGZhbHNlIH1cclxuICBdXHJcblxyXG4gIGZvciAoY29uc3QgeyBjaGFyc2V0LCBmYXRhbCB9IG9mIGNoYXJzZXRzKSB7XHJcbiAgICB0cnkgeyByZXR1cm4gbmV3IFRleHREZWNvZGVyKGNoYXJzZXQsIHsgZmF0YWwgfSkuZGVjb2RlKGJ1ZikgfSBjYXRjaCAoZSkgeyB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gYXJyMnN0cihidWYpIC8vIGFsbCBlbHNlIGZhaWxzLCB0cmVhdCBpdCBhcyBiaW5hcnlcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBzcGVjaWZpYyBlbmNvZGluZyB0byBVVEYtOCBVaW50OEFycmF5XHJcbiAqXHJcbiAqIEBwYXJhbSB7U3RyaW5nfFVpbnQ4QXJyYXl9IGRhdGEgRGF0YSB0byBiZSBlbmNvZGVkXHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBTb3VyY2UgZW5jb2RpbmcgZm9yIHRoZSBzdHJpbmcgKG9wdGlvbmFsIGZvciBkYXRhIG9mIHR5cGUgU3RyaW5nKVxyXG4gKiBAcmV0dXJuIHtVaW50OEFycmF5fSBVVEYtOCBlbmNvZGVkIHR5cGVkIGFycmF5XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY29udmVydCA9IChkYXRhLCBmcm9tQ2hhcnNldCkgPT4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gZW5jb2RlKGRhdGEpIDogZW5jb2RlKGRlY29kZShkYXRhLCBmcm9tQ2hhcnNldCkpXHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVDaGFyc2V0IChjaGFyc2V0ID0gJ3V0Zi04Jykge1xyXG4gIGxldCBtYXRjaFxyXG5cclxuICBpZiAoKG1hdGNoID0gY2hhcnNldC5tYXRjaCgvXnV0ZlstX10/KFxcZCspJC9pKSkpIHtcclxuICAgIHJldHVybiAnVVRGLScgKyBtYXRjaFsxXVxyXG4gIH1cclxuXHJcbiAgaWYgKChtYXRjaCA9IGNoYXJzZXQubWF0Y2goL153aW5bLV9dPyhcXGQrKSQvaSkpKSB7XHJcbiAgICByZXR1cm4gJ1dJTkRPV1MtJyArIG1hdGNoWzFdXHJcbiAgfVxyXG5cclxuICBpZiAoKG1hdGNoID0gY2hhcnNldC5tYXRjaCgvXmxhdGluWy1fXT8oXFxkKykkL2kpKSkge1xyXG4gICAgcmV0dXJuICdJU08tODg1OS0nICsgbWF0Y2hbMV1cclxuICB9XHJcblxyXG4gIHJldHVybiBjaGFyc2V0XHJcbn1cclxuIl19