@dpuse/dpuse-tool-adaltas-csv-parser 0.0.157 → 0.0.160

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"dpuse-tool-adaltas-csv-parser.es.js","names":[],"sources":["../node_modules/csv-parse/dist/esm/index.js","../node_modules/@dpuse/dpuse-shared/dist/dpuse-shared-errors.es.js","../src/index.ts"],"sourcesContent":["var global$1 = (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n }\n\n revLookup['-'.charCodeAt(0)] = 62;\n revLookup['_'.charCodeAt(0)] = 63;\n}\n\nfunction toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr;\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0;\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders);\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len;\n\n var L = 0;\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];\n arr[L++] = (tmp >> 16) & 0xFF;\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);\n arr[L++] = tmp & 0xFF;\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp;\n var output = [];\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);\n output.push(tripletToBase64(tmp));\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n var output = '';\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n output += lookup[tmp >> 2];\n output += lookup[(tmp << 4) & 0x3F];\n output += '==';\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);\n output += lookup[tmp >> 10];\n output += lookup[(tmp >> 4) & 0x3F];\n output += lookup[(tmp << 2) & 0x3F];\n output += '=';\n }\n\n parts.push(output);\n\n return parts.join('')\n}\n\nfunction read (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? (nBytes - 1) : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n\n i += d;\n\n e = s & ((1 << (-nBits)) - 1);\n s >>= (-nBits);\n nBits += eLen;\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1);\n e >>= (-nBits);\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nfunction write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n var i = isLE ? 0 : (nBytes - 1);\n var d = isLE ? 1 : -1;\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m;\n eLen += mLen;\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n}\n\nvar toString = {}.toString;\n\nvar isArray$1 = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\nvar INSPECT_MAX_BYTES = 50;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined\n ? global$1.TYPED_ARRAY_SUPPORT\n : true;\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nkMaxLength();\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length);\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length);\n }\n that.length = length;\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype;\n return arr\n};\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype;\n Buffer.__proto__ = Uint8Array;\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) ;\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size);\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n};\n\nfunction allocUnsafe (that, size) {\n assertSize(size);\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0;\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n};\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8';\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0;\n that = createBuffer(that, length);\n\n var actual = that.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual);\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n that = createBuffer(that, length);\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255;\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array);\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset);\n } else {\n array = new Uint8Array(array, byteOffset, length);\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array;\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array);\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0;\n that = createBuffer(that, len);\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len);\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray$1(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n};\n\nBuffer.concat = function concat (list, length) {\n if (!isArray$1(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i;\n if (length === undefined) {\n length = 0;\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = Buffer.allocUnsafe(length);\n var pos = 0;\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n return buffer\n};\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n}\nBuffer.byteLength = byteLength;\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false;\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0;\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8';\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase();\n loweredCase = true;\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true;\n\nfunction swap (b, n, m) {\n var i = b[n];\n b[n] = b[m];\n b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length;\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n return this\n};\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length;\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n return this\n};\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length;\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n return this\n};\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0;\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n};\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n};\n\nBuffer.prototype.inspect = function inspect () {\n var str = '';\n var max = INSPECT_MAX_BYTES;\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n if (this.length > max) str += ' ... ';\n }\n return '<Buffer ' + str + '>'\n};\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0;\n }\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n if (thisStart === undefined) {\n thisStart = 0;\n }\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart;\n var y = end - start;\n var len = Math.min(x, y);\n\n var thisCopy = this.slice(thisStart, thisEnd);\n var targetCopy = target.slice(start, end);\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff;\n } else if (byteOffset < -2147483648) {\n byteOffset = -2147483648;\n }\n byteOffset = +byteOffset; // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1);\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding);\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF; // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1;\n var arrLength = arr.length;\n var valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i;\n if (dir) {\n var foundIndex = -1;\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n for (i = byteOffset; i >= 0; i--) {\n var found = true;\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n};\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n};\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0;\n var remaining = buf.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n if (length > remaining) {\n length = remaining;\n }\n }\n\n // must be an even number of digits\n var strLen = string.length;\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16);\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed;\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8';\n length = this.length;\n offset = 0;\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset;\n length = this.length;\n offset = 0;\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n if (isFinite(length)) {\n length = length | 0;\n if (encoding === undefined) encoding = 'utf8';\n } else {\n encoding = length;\n length = undefined;\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8';\n\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n};\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n};\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return fromByteArray(buf)\n } else {\n return fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end);\n var res = [];\n\n var i = start;\n while (i < end) {\n var firstByte = buf[i];\n var codePoint = null;\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1;\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte;\n }\n break\n case 2:\n secondByte = buf[i + 1];\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD;\n bytesPerSequence = 1;\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000;\n res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n codePoint = 0xDC00 | codePoint & 0x3FF;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = '';\n var i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n );\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F);\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length;\n\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n\n var out = '';\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i]);\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end);\n var res = '';\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n\n var newBuf;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end);\n newBuf.__proto__ = Buffer.prototype;\n } else {\n var sliceLen = end - start;\n newBuf = new Buffer(sliceLen, undefined);\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n var val = this[offset + --byteLength];\n var mul = 1;\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset]\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | (this[offset + 1] << 8)\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return (this[offset] << 8) | this[offset + 1]\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n};\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var i = byteLength;\n var mul = 1;\n var val = this[offset + --i];\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset] | (this[offset + 1] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset + 1] | (this[offset] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read(this, offset, true, 23, 4)\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read(this, offset, false, 23, 4)\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read(this, offset, true, 52, 8)\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read(this, offset, false, 52, 8)\n};\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var mul = 1;\n var i = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8;\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff;\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24);\n this[offset + 2] = (value >>> 16);\n this[offset + 1] = (value >>> 8);\n this[offset] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = 0;\n var mul = 1;\n var sub = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n var sub = 0;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n if (value < 0) value = 0xff + value + 1;\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n this[offset + 2] = (value >>> 16);\n this[offset + 3] = (value >>> 24);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648);\n if (value < 0) value = 0xffffffff + value + 1;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4);\n }\n write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n};\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8);\n }\n write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start;\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length;\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n var i;\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start];\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n );\n }\n\n return len\n};\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n encoding = end;\n end = this.length;\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n if (code < 256) {\n val = code;\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n\n if (!val) val = 0;\n\n var i;\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString());\n var len = bytes.length;\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this\n};\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '');\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '=';\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint;\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null;\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF);\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo;\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i];\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nfunction isBuffer(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.usingDomains = false;\n\nEventEmitter.prototype.domain = undefined;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\nEventEmitter.init = function() {\n this.domain = null;\n if (EventEmitter.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active && !(this instanceof domain.Domain)) {\n this.domain = domain.active;\n }\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction _onceWrap(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount$1.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount$1;\nfunction listenerCount$1(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\n// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global$1.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global$1.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nfunction nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nvar env = {};\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global$1.performance || {};\nperformance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() };\n\nvar process = {\n env: env};\n\nvar inherits;\nif (typeof Object.create === 'function'){\n inherits = function inherits(ctor, superCtor) {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n inherits = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n };\n}\nvar inherits$1 = inherits;\n\nvar formatRegExp = /%[sdj%]/g;\nfunction format(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n}\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nfunction deprecate(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global$1.process)) {\n return function() {\n return deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\nvar debugs = {};\nvar debugEnviron;\nfunction debuglog(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = 0;\n debugs[set] = function() {\n var msg = format.apply(null, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n}\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n _extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var length = output.reduce(function(prev, cur) {\n if (cur.indexOf('\\n') >= 0) ;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\n\nfunction isNull(arg) {\n return arg === null;\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\nfunction _extend(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n}\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nfunction BufferList() {\n this.head = null;\n this.tail = null;\n this.length = 0;\n}\n\nBufferList.prototype.push = function (v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n};\n\nBufferList.prototype.unshift = function (v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n};\n\nBufferList.prototype.shift = function () {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n};\n\nBufferList.prototype.clear = function () {\n this.head = this.tail = null;\n this.length = 0;\n};\n\nBufferList.prototype.join = function (s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n};\n\nBufferList.prototype.concat = function (n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n p.data.copy(ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n};\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar isBufferEncoding = Buffer.isEncoding\n || function(encoding) {\n switch (encoding && encoding.toLowerCase()) {\n case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;\n default: return false;\n }\n };\n\n\nfunction assertEncoding(encoding) {\n if (encoding && !isBufferEncoding(encoding)) {\n throw new Error('Unknown encoding: ' + encoding);\n }\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters. CESU-8 is handled as part of the UTF-8 encoding.\n//\n// @TODO Handling all encodings inside a single object makes it very difficult\n// to reason about this code, so it should be split up in the future.\n// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n// points as used by CESU-8.\nfunction StringDecoder(encoding) {\n this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');\n assertEncoding(encoding);\n switch (this.encoding) {\n case 'utf8':\n // CESU-8 represents each of Surrogate Pair by 3-bytes\n this.surrogateSize = 3;\n break;\n case 'ucs2':\n case 'utf16le':\n // UTF-16 represents each of Surrogate Pair by 2-bytes\n this.surrogateSize = 2;\n this.detectIncompleteChar = utf16DetectIncompleteChar;\n break;\n case 'base64':\n // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n this.surrogateSize = 3;\n this.detectIncompleteChar = base64DetectIncompleteChar;\n break;\n default:\n this.write = passThroughWrite;\n return;\n }\n\n // Enough space to store all bytes of a single character. UTF-8 needs 4\n // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n this.charBuffer = new Buffer(6);\n // Number of bytes received for the current incomplete multi-byte character.\n this.charReceived = 0;\n // Number of bytes expected for the current incomplete multi-byte character.\n this.charLength = 0;\n}\n\n// write decodes the given buffer and returns it as JS string that is\n// guaranteed to not contain any partial multi-byte characters. Any partial\n// character found at the end of the buffer is buffered up, and will be\n// returned when calling write again with the remaining bytes.\n//\n// Note: Converting a Buffer containing an orphan surrogate to a String\n// currently works, but converting a String to a Buffer (via `new Buffer`, or\n// Buffer#write) will replace incomplete surrogates with the unicode\n// replacement character. See https://codereview.chromium.org/121173009/ .\nStringDecoder.prototype.write = function(buffer) {\n var charStr = '';\n // if our last write ended with an incomplete multibyte character\n while (this.charLength) {\n // determine how many remaining bytes this buffer has to offer for this char\n var available = (buffer.length >= this.charLength - this.charReceived) ?\n this.charLength - this.charReceived :\n buffer.length;\n\n // add the new bytes to the char buffer\n buffer.copy(this.charBuffer, this.charReceived, 0, available);\n this.charReceived += available;\n\n if (this.charReceived < this.charLength) {\n // still not enough chars in this buffer? wait for more ...\n return '';\n }\n\n // remove bytes belonging to the current character from the buffer\n buffer = buffer.slice(available, buffer.length);\n\n // get the character that was split\n charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);\n\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n var charCode = charStr.charCodeAt(charStr.length - 1);\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n this.charLength += this.surrogateSize;\n charStr = '';\n continue;\n }\n this.charReceived = this.charLength = 0;\n\n // if there are no more bytes in this buffer, just emit our char\n if (buffer.length === 0) {\n return charStr;\n }\n break;\n }\n\n // determine and set charLength / charReceived\n this.detectIncompleteChar(buffer);\n\n var end = buffer.length;\n if (this.charLength) {\n // buffer the incomplete character bytes we got\n buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);\n end -= this.charReceived;\n }\n\n charStr += buffer.toString(this.encoding, 0, end);\n\n var end = charStr.length - 1;\n var charCode = charStr.charCodeAt(end);\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n var size = this.surrogateSize;\n this.charLength += size;\n this.charReceived += size;\n this.charBuffer.copy(this.charBuffer, size, 0, size);\n buffer.copy(this.charBuffer, 0, 0, size);\n return charStr.substring(0, end);\n }\n\n // or just emit the charStr\n return charStr;\n};\n\n// detectIncompleteChar determines if there is an incomplete UTF-8 character at\n// the end of the given buffer. If so, it sets this.charLength to the byte\n// length that character, and sets this.charReceived to the number of bytes\n// that are available for this character.\nStringDecoder.prototype.detectIncompleteChar = function(buffer) {\n // determine how many bytes we have to check at the end of this buffer\n var i = (buffer.length >= 3) ? 3 : buffer.length;\n\n // Figure out if one of the last i bytes of our buffer announces an\n // incomplete char.\n for (; i > 0; i--) {\n var c = buffer[buffer.length - i];\n\n // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n // 110XXXXX\n if (i == 1 && c >> 5 == 0x06) {\n this.charLength = 2;\n break;\n }\n\n // 1110XXXX\n if (i <= 2 && c >> 4 == 0x0E) {\n this.charLength = 3;\n break;\n }\n\n // 11110XXX\n if (i <= 3 && c >> 3 == 0x1E) {\n this.charLength = 4;\n break;\n }\n }\n this.charReceived = i;\n};\n\nStringDecoder.prototype.end = function(buffer) {\n var res = '';\n if (buffer && buffer.length)\n res = this.write(buffer);\n\n if (this.charReceived) {\n var cr = this.charReceived;\n var buf = this.charBuffer;\n var enc = this.encoding;\n res += buf.slice(0, cr).toString(enc);\n }\n\n return res;\n};\n\nfunction passThroughWrite(buffer) {\n return buffer.toString(this.encoding);\n}\n\nfunction utf16DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 2;\n this.charLength = this.charReceived ? 2 : 0;\n}\n\nfunction base64DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 3;\n this.charLength = this.charReceived ? 3 : 0;\n}\n\nReadable.ReadableState = ReadableState;\n\nvar debug = debuglog('stream');\ninherits$1(Readable, EventEmitter);\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') {\n return emitter.prependListener(event, fn);\n } else {\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event])\n emitter.on(event, fn);\n else if (Array.isArray(emitter._events[event]))\n emitter._events[event].unshift(fn);\n else\n emitter._events[event] = [fn, emitter._events[event]];\n }\n}\nfunction listenerCount (emitter, type) {\n return emitter.listeners(type).length;\n}\nfunction ReadableState(options, stream) {\n\n options = options || {};\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // when piping, we only care about 'readable' events that happen\n // after read()ing all the bytes and not getting any pushback.\n this.ranOut = false;\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options && typeof options.read === 'function') this._read = options.read;\n\n EventEmitter.call(this);\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n\n if (!state.objectMode && typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n }\n\n return readableAddChunk(this, state, chunk, encoding, false);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n var state = this._readableState;\n return readableAddChunk(this, state, chunk, '', true);\n};\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\nfunction readableAddChunk(stream, state, chunk, encoding, addToFront) {\n var er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (state.ended && !addToFront) {\n var e = new Error('stream.push() after EOF');\n stream.emit('error', e);\n } else if (state.endEmitted && addToFront) {\n var _e = new Error('stream.unshift() after end event');\n stream.emit('error', _e);\n } else {\n var skipAdd;\n if (state.decoder && !addToFront && !encoding) {\n chunk = state.decoder.write(chunk);\n skipAdd = !state.objectMode && chunk.length === 0;\n }\n\n if (!addToFront) state.reading = false;\n\n // Don't add to the buffer if we've decoded to an empty string chunk and\n // we're not in object mode\n if (!skipAdd) {\n // if we want the data now, just emit it.\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n }\n\n maybeReadMore(stream, state);\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n\n return needMoreData(state);\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction chunkInvalid(state, chunk) {\n var er = null;\n if (!isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false);\n\n var endFn = doEnd ? onend : cleanup;\n if (state.endEmitted) nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable) {\n debug('onunpipe');\n if (readable === src) {\n cleanup();\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', cleanup);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (listenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && src.listeners('data').length) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var _i = 0; _i < len; _i++) {\n dests[_i].emit('unpipe', this);\n }return this;\n }\n\n // try to find the right one.\n var i = indexOf(state.pipes, dest);\n if (i === -1) return this;\n\n state.pipes.splice(i, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = EventEmitter.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var state = this._readableState;\n var paused = false;\n\n var self = this;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) self.push(chunk);\n }\n\n self.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = self.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n var events = ['error', 'close', 'destroy', 'pause', 'resume'];\n forEach(events, function (ev) {\n stream.on(ev, self.emit.bind(self, ev));\n });\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n self._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return self;\n};\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction forEach(xs, f) {\n for (var i = 0, l = xs.length; i < l; i++) {\n f(xs[i], i);\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\nWritable.WritableState = WritableState;\ninherits$1(Writable, EventEmitter);\n\nfunction nop() {}\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\nfunction WritableState(options, stream) {\n Object.defineProperty(this, 'buffer', {\n get: deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')\n });\n options = options || {};\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function writableStateGetBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\nfunction Writable(options) {\n\n // Writable ctor is applied to Duplexes, though they're not\n // instanceof Writable, they're instanceof Readable.\n if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options);\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n }\n\n EventEmitter.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n nextTick(cb, er);\n}\n\n// If we get something that is not a buffer, string, null, or undefined,\n// and we're not in objectMode, then that's an error.\n// Otherwise stream chunks are all considered to be of length=1, and the\n// watermarks determine how many objects to keep in the buffer, rather than\n// how many bytes or characters.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n // Always throw error if a null is written\n // if we are not in object mode then throw\n // if it is not a buffer, string, or undefined.\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, cb) {\n chunk = decodeChunk(state, chunk, encoding);\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) nextTick(cb, er);else cb(er);\n\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n nextTick(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n while (entry) {\n buffer[count] = entry;\n entry = entry.next;\n count += 1;\n }\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequestCount = 0;\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished) {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n if (state.pendingcb === 0) {\n prefinish(stream, state);\n state.finished = true;\n stream.emit('finish');\n } else {\n prefinish(stream, state);\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function (err) {\n var entry = _this.entry;\n _this.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = _this;\n } else {\n state.corkedRequestsFree = _this;\n }\n };\n}\n\ninherits$1(Duplex, Readable);\n\nvar keys = Object.keys(Writable.prototype);\nfor (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\ninherits$1(Transform, Duplex);\n\nfunction TransformState(stream) {\n this.afterTransform = function (er, data) {\n return afterTransform(stream, er, data);\n };\n\n this.needTransform = false;\n this.transforming = false;\n this.writecb = null;\n this.writechunk = null;\n this.writeencoding = null;\n}\n\nfunction afterTransform(stream, er, data) {\n var ts = stream._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data !== null && data !== undefined) stream.push(data);\n\n cb(er);\n\n var rs = stream._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n stream._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = new TransformState(this);\n\n // when the writable side finishes, then flush out anything remaining.\n var stream = this;\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n this.once('prefinish', function () {\n if (typeof this._flush === 'function') this._flush(function (er) {\n done(stream, er);\n });else done(stream);\n });\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('Not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nfunction done(stream, er) {\n if (er) return stream.emit('error', er);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n var ws = stream._writableState;\n var ts = stream._transformState;\n\n if (ws.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (ts.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}\n\ninherits$1(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};\n\ninherits$1(Stream, EventEmitter);\nStream.Readable = Readable;\nStream.Writable = Writable;\nStream.Duplex = Duplex;\nStream.Transform = Transform;\nStream.PassThrough = PassThrough;\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EventEmitter.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EventEmitter.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n\nconst is_object = function (obj) {\n return typeof obj === \"object\" && obj !== null && !Array.isArray(obj);\n};\n\nclass CsvError extends Error {\n constructor(code, message, options, ...contexts) {\n if (Array.isArray(message)) message = message.join(\" \").trim();\n super(message);\n if (Error.captureStackTrace !== undefined) {\n Error.captureStackTrace(this, CsvError);\n }\n this.code = code;\n for (const context of contexts) {\n for (const key in context) {\n const value = context[key];\n this[key] = isBuffer(value)\n ? value.toString(options.encoding)\n : value == null\n ? value\n : JSON.parse(JSON.stringify(value));\n }\n }\n }\n}\n\nconst normalize_columns_array = function (columns) {\n const normalizedColumns = [];\n for (let i = 0, l = columns.length; i < l; i++) {\n const column = columns[i];\n if (column === undefined || column === null || column === false) {\n normalizedColumns[i] = { disabled: true };\n } else if (typeof column === \"string\" || typeof column === \"number\") {\n normalizedColumns[i] = { name: `${column}` };\n } else if (is_object(column)) {\n if (typeof column.name !== \"string\") {\n throw new CsvError(\"CSV_OPTION_COLUMNS_MISSING_NAME\", [\n \"Option columns missing name:\",\n `property \"name\" is required at position ${i}`,\n \"when column is an object literal\",\n ]);\n }\n normalizedColumns[i] = column;\n } else {\n throw new CsvError(\"CSV_INVALID_COLUMN_DEFINITION\", [\n \"Invalid column definition:\",\n \"expect a string or a literal object,\",\n `got ${JSON.stringify(column)} at position ${i}`,\n ]);\n }\n }\n return normalizedColumns;\n};\n\nclass ResizeableBuffer {\n constructor(size = 100) {\n this.size = size;\n this.length = 0;\n this.buf = Buffer.allocUnsafe(size);\n }\n prepend(val) {\n if (isBuffer(val)) {\n const length = this.length + val.length;\n if (length >= this.size) {\n this.resize();\n if (length >= this.size) {\n throw Error(\"INVALID_BUFFER_STATE\");\n }\n }\n const buf = this.buf;\n this.buf = Buffer.allocUnsafe(this.size);\n val.copy(this.buf, 0);\n buf.copy(this.buf, val.length);\n this.length += val.length;\n } else {\n const length = this.length++;\n if (length === this.size) {\n this.resize();\n }\n const buf = this.clone();\n this.buf[0] = val;\n buf.copy(this.buf, 1, 0, length);\n }\n }\n append(val) {\n const length = this.length++;\n if (length === this.size) {\n this.resize();\n }\n this.buf[length] = val;\n }\n clone() {\n return Buffer.from(this.buf.slice(0, this.length));\n }\n resize() {\n const length = this.length;\n this.size = this.size * 2;\n const buf = Buffer.allocUnsafe(this.size);\n this.buf.copy(buf, 0, 0, length);\n this.buf = buf;\n }\n toString(encoding) {\n if (encoding) {\n return this.buf.toString(encoding, 0, this.length);\n } else {\n return Uint8Array.prototype.slice.call(this.buf.slice(0, this.length));\n }\n }\n toJSON() {\n return this.toString(\"utf8\");\n }\n reset() {\n this.length = 0;\n }\n}\n\nconst init_state = function (options) {\n // ECMAScript WhiteSpace + LineTerminator codepoints, encoded under\n // `options.encoding`. Aligns trimming with `String.prototype.trim()`.\n // https://tc39.es/ecma262/#sec-white-space\n // https://tc39.es/ecma262/#sec-line-terminators\n //\n // Codepoints unrepresentable in the target encoding are dropped: Node's\n // Buffer substitutes them with `?` (0x3F), and including those would cause\n // literal `?` bytes in the input to be trimmed under `latin1`/`ascii`.\n const timchars = [\n // Basic Latin\n 0x0020, // [Space](https://www.fileformat.info/info/unicode/char/0020/index.htm)\n 0x0009, // [CHARACTER TABULATION (HT)](https://www.fileformat.info/info/unicode/char/0009/index.htm)\n 0x000a, // [LINE FEED (LF)](https://www.fileformat.info/info/unicode/char/000a/index.htm)\n 0x000d, // [CARRIAGE RETURN (CR)](https://www.fileformat.info/info/unicode/char/000d/index.htm)\n 0x000c, // [FORM FEED (FF)](https://www.fileformat.info/info/unicode/char/000c/index.htm)\n 0x000b, // [LINE TABULATION (VT)](https://www.fileformat.info/info/unicode/char/000b/index.htm)\n // Latin-1 Supplement\n 0x00a0, // [NO-BREAK SPACE (NBSP)](https://www.fileformat.info/info/unicode/char/00a0/index.htm)\n // Ogham\n 0x1680, // [OGHAM SPACE MARK](https://www.fileformat.info/info/unicode/char/1680/index.htm)\n // General Punctuation\n 0x2000, // [EN QUAD](https://www.fileformat.info/info/unicode/char/2000/index.htm)\n 0x2001, // [EM QUAD](https://www.fileformat.info/info/unicode/char/2001/index.htm)\n 0x2002, // [EN SPACE](https://www.fileformat.info/info/unicode/char/2002/index.htm)\n 0x2003, // [EM SPACE](https://www.fileformat.info/info/unicode/char/2003/index.htm)\n 0x2004, // [THREE-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2004/index.htm)\n 0x2005, // [FOUR-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2005/index.htm)\n 0x2006, // [SIX-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2006/index.htm)\n 0x2007, // [FIGURE SPACE](https://www.fileformat.info/info/unicode/char/2007/index.htm)\n 0x2008, // [PUNCTUATION SPACE](https://www.fileformat.info/info/unicode/char/2008/index.htm)\n 0x2009, // [THIN SPACE](https://www.fileformat.info/info/unicode/char/2009/index.htm)\n 0x200a, // [HAIR SPACE](https://www.fileformat.info/info/unicode/char/200a/index.htm)\n 0x2028, // [LINE SEPARATOR](https://www.fileformat.info/info/unicode/char/2028/index.htm)\n 0x2029, // [PARAGRAPH SEPARATOR](https://www.fileformat.info/info/unicode/char/2029/index.htm)\n 0x202f, // [NARROW NO-BREAK SPACE (NNBSP)](https://www.fileformat.info/info/unicode/char/202f/index.htm)\n 0x205f, // [MEDIUM MATHEMATICAL SPACE (MMSP)](https://www.fileformat.info/info/unicode/char/205f/index.htm)\n 0x3000, // [IDEOGRAPHIC SPACE](https://www.fileformat.info/info/unicode/char/3000/index.htm)\n 0xfeff, // [ZERO WIDTH NO-BREAK SPACE (BOM)](https://www.fileformat.info/info/unicode/char/feff/index.htm)\n ].reduce((acc, codepoint) => {\n const encoded = Buffer.from(\n String.fromCharCode(codepoint),\n options.encoding,\n );\n if (codepoint !== 0x3f && encoded.length === 1 && encoded[0] === 0x3f) {\n return acc;\n }\n acc.push(encoded);\n return acc;\n }, []);\n // First-byte lookup table for `__isCharTrimable`. Non-whitespace bytes\n // (the common case) bail out in O(1) without scanning every timchar.\n const timcharFirstBytes = new Uint8Array(256);\n for (const t of timchars) timcharFirstBytes[t[0]] = 1;\n return {\n bomSkipped: false,\n bufBytesStart: 0,\n castField: options.cast_function,\n commenting: false,\n delimiterBufPrevious: undefined,\n delimiterDiscovered: false,\n // Current error encountered by a record\n error: undefined,\n enabled: options.from_line === 1,\n escaping: false,\n escapeIsQuote:\n isBuffer(options.escape) &&\n isBuffer(options.quote) &&\n Buffer.compare(options.escape, options.quote) === 0,\n // columns can be `false`, `true`, `Array`\n expectedRecordLength: Array.isArray(options.columns)\n ? options.columns.length\n : undefined,\n field: new ResizeableBuffer(20),\n firstLineToHeaders: options.cast_first_line_to_header,\n needMoreDataSize: Math.max(\n // Skip if the remaining buffer smaller than comment\n options.comment !== null ? options.comment.length : 0,\n // Skip if the remaining buffer can be delimiter\n ...(options.delimiter\n ? options.delimiter.map((delimiter) => delimiter.length)\n : []),\n // Auto discovery of delimiter is limited to 1 character\n options.delimiter_auto ? 1 : 0,\n // Skip if the remaining buffer can be escape sequence\n options.quote !== null ? options.quote.length : 0,\n // Skip if the remaining buffer can be a multi-byte trim character\n ...timchars.map((t) => t.length),\n ),\n previousBuf: undefined,\n quoting: false,\n stop: false,\n rawBuffer: new ResizeableBuffer(100),\n record: [],\n recordHasError: false,\n record_length: 0,\n recordDelimiterMaxLength:\n options.record_delimiter.length === 0\n ? 0\n : Math.max(...options.record_delimiter.map((v) => v.length)),\n trimChars: [\n Buffer.from(\" \", options.encoding)[0],\n Buffer.from(\"\\t\", options.encoding)[0],\n ],\n wasQuoting: false,\n wasRowDelimiter: false,\n timchars: timchars,\n timcharFirstBytes: timcharFirstBytes,\n };\n};\n\nconst underscore = function (str) {\n return str.replace(/([A-Z])/g, function (_, match) {\n return \"_\" + match.toLowerCase();\n });\n};\n\nconst normalize_options = function (opts) {\n const options = {};\n // Merge with user options\n for (const opt in opts) {\n options[underscore(opt)] = opts[opt];\n }\n // Normalize option `encoding`\n // Note: defined first because other options depends on it\n // to convert chars/strings into buffers.\n if (options.encoding === undefined || options.encoding === true) {\n options.encoding = \"utf8\";\n } else if (options.encoding === null || options.encoding === false) {\n options.encoding = null;\n } else if (\n typeof options.encoding !== \"string\" &&\n options.encoding !== null\n ) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_ENCODING\",\n [\n \"Invalid option encoding:\",\n \"encoding must be a string or null to return a buffer,\",\n `got ${JSON.stringify(options.encoding)}`,\n ],\n options,\n );\n }\n // Normalize option `bom`\n if (\n options.bom === undefined ||\n options.bom === null ||\n options.bom === false\n ) {\n options.bom = false;\n } else if (options.bom !== true) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_BOM\",\n [\n \"Invalid option bom:\",\n \"bom must be true,\",\n `got ${JSON.stringify(options.bom)}`,\n ],\n options,\n );\n }\n // Normalize option `cast`\n options.cast_function = null;\n if (\n options.cast === undefined ||\n options.cast === null ||\n options.cast === false ||\n options.cast === \"\"\n ) {\n options.cast = undefined;\n } else if (typeof options.cast === \"function\") {\n options.cast_function = options.cast;\n options.cast = true;\n } else if (options.cast !== true) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_CAST\",\n [\n \"Invalid option cast:\",\n \"cast must be true or a function,\",\n `got ${JSON.stringify(options.cast)}`,\n ],\n options,\n );\n }\n // Normalize option `cast_date`\n if (\n options.cast_date === undefined ||\n options.cast_date === null ||\n options.cast_date === false ||\n options.cast_date === \"\"\n ) {\n options.cast_date = false;\n } else if (options.cast_date === true) {\n options.cast_date = function (value) {\n const date = Date.parse(value);\n return !isNaN(date) ? new Date(date) : value;\n };\n } else if (typeof options.cast_date !== \"function\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_CAST_DATE\",\n [\n \"Invalid option cast_date:\",\n \"cast_date must be true or a function,\",\n `got ${JSON.stringify(options.cast_date)}`,\n ],\n options,\n );\n }\n // Normalize option `columns`\n options.cast_first_line_to_header = undefined;\n if (options.columns === true) {\n // Fields in the first line are converted as-is to columns\n options.cast_first_line_to_header = undefined;\n } else if (typeof options.columns === \"function\") {\n options.cast_first_line_to_header = options.columns;\n options.columns = true;\n } else if (Array.isArray(options.columns)) {\n options.columns = normalize_columns_array(options.columns);\n } else if (\n options.columns === undefined ||\n options.columns === null ||\n options.columns === false\n ) {\n options.columns = false;\n } else {\n throw new CsvError(\n \"CSV_INVALID_OPTION_COLUMNS\",\n [\n \"Invalid option columns:\",\n \"expect an array, a function or true,\",\n `got ${JSON.stringify(options.columns)}`,\n ],\n options,\n );\n }\n // Normalize option `group_columns_by_name`\n if (\n options.group_columns_by_name === undefined ||\n options.group_columns_by_name === null ||\n options.group_columns_by_name === false\n ) {\n options.group_columns_by_name = false;\n } else if (options.group_columns_by_name !== true) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME\",\n [\n \"Invalid option group_columns_by_name:\",\n \"expect an boolean,\",\n `got ${JSON.stringify(options.group_columns_by_name)}`,\n ],\n options,\n );\n } else if (options.columns === false) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME\",\n [\n \"Invalid option group_columns_by_name:\",\n \"the `columns` mode must be activated.\",\n ],\n options,\n );\n }\n // Normalize option `comment`\n if (\n options.comment === undefined ||\n options.comment === null ||\n options.comment === false ||\n options.comment === \"\"\n ) {\n options.comment = null;\n } else {\n if (typeof options.comment === \"string\") {\n options.comment = Buffer.from(options.comment, options.encoding);\n }\n if (!isBuffer(options.comment)) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_COMMENT\",\n [\n \"Invalid option comment:\",\n \"comment must be a buffer or a string,\",\n `got ${JSON.stringify(options.comment)}`,\n ],\n options,\n );\n }\n }\n // Normalize option `comment_no_infix`\n if (\n options.comment_no_infix === undefined ||\n options.comment_no_infix === null ||\n options.comment_no_infix === false\n ) {\n options.comment_no_infix = false;\n } else if (options.comment_no_infix !== true) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_COMMENT\",\n [\n \"Invalid option comment_no_infix:\",\n \"value must be a boolean,\",\n `got ${JSON.stringify(options.comment_no_infix)}`,\n ],\n options,\n );\n }\n // Normalize option `delimiter_auto`\n if (\n options.delimiter_auto === undefined ||\n options.delimiter_auto === null ||\n options.delimiter_auto === false\n ) {\n options.delimiter_auto = false;\n } else if (options.delimiter_auto === true) {\n options.delimiter_auto = {};\n } else if (!is_object(options.delimiter_auto)) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"delimiter_auto must be a boolean or a configuration object,\",\n `got ${JSON.stringify(options.delimiter_auto)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto) {\n if (options.delimiter_auto.preferred === undefined)\n options.delimiter_auto.preferred = {\n [\",\".charCodeAt(0)]: 1.8,\n [\"\\t\".charCodeAt(0)]: 1.8,\n [\";\".charCodeAt(0)]: 1.6,\n [\" \".charCodeAt(0)]: 1.6,\n [\":\".charCodeAt(0)]: 1.5,\n [\".\".charCodeAt(0)]: 1.4,\n [\"/\".charCodeAt(0)]: 1.4,\n };\n else if (!is_object(options.delimiter_auto.preferred)) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"preferred must be an object,\",\n `got ${JSON.stringify(options.delimiter_auto.preferred)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto.score === undefined)\n options.delimiter_auto.score = (info, options) => {\n return (\n (info.total - info.std) * (options.preferred[info.char_code] || 1)\n );\n };\n else if (typeof options.delimiter_auto.score !== \"function\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"score must be a function,\",\n `got ${JSON.stringify(options.delimiter_auto.score)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto.size === undefined)\n options.delimiter_auto.size = 2048;\n else if (typeof options.delimiter_auto.size !== \"number\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"size must be a number,\",\n `got ${JSON.stringify(options.delimiter_auto.size)}`,\n ],\n options,\n );\n }\n }\n // Normalize option `delimiter`\n const delimiter_json = JSON.stringify(options.delimiter);\n if (options.delimiter_auto !== false) {\n options.delimiter = [];\n }\n if (!Array.isArray(options.delimiter)) {\n if (\n options.delimiter === undefined ||\n options.delimiter === null ||\n options.delimiter === false\n ) {\n options.delimiter = Buffer.from(\",\", options.encoding);\n }\n options.delimiter = [options.delimiter];\n }\n options.delimiter = options.delimiter.map(function (delimiter) {\n if (typeof delimiter === \"string\") {\n delimiter = Buffer.from(delimiter, options.encoding);\n }\n if (!isBuffer(delimiter) || delimiter.length === 0) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_DELIMITER\",\n [\n \"Invalid option delimiter:\",\n \"delimiter must be a non empty string or buffer or array of string|buffer,\",\n `got ${delimiter_json}`,\n ],\n options,\n );\n }\n return delimiter;\n });\n // Normalize option `escape`\n if (options.escape === undefined || options.escape === true) {\n options.escape = Buffer.from('\"', options.encoding);\n } else if (typeof options.escape === \"string\") {\n options.escape = Buffer.from(options.escape, options.encoding);\n } else if (options.escape === null || options.escape === false) {\n options.escape = null;\n }\n if (options.escape !== null) {\n if (!isBuffer(options.escape)) {\n throw new Error(\n `Invalid Option: escape must be a buffer, a string or a boolean, got ${JSON.stringify(options.escape)}`,\n );\n }\n }\n // Normalize option `from`\n if (options.from === undefined || options.from === null) {\n options.from = 1;\n } else {\n if (typeof options.from === \"string\" && /\\d+/.test(options.from)) {\n options.from = parseInt(options.from);\n }\n if (Number.isInteger(options.from)) {\n if (options.from < 0) {\n throw new Error(\n `Invalid Option: from must be a positive integer, got ${JSON.stringify(opts.from)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: from must be an integer, got ${JSON.stringify(options.from)}`,\n );\n }\n }\n // Normalize option `from_line`\n if (options.from_line === undefined || options.from_line === null) {\n options.from_line = 1;\n } else {\n if (\n typeof options.from_line === \"string\" &&\n /\\d+/.test(options.from_line)\n ) {\n options.from_line = parseInt(options.from_line);\n }\n if (Number.isInteger(options.from_line)) {\n if (options.from_line <= 0) {\n throw new Error(\n `Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(opts.from_line)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: from_line must be an integer, got ${JSON.stringify(opts.from_line)}`,\n );\n }\n }\n // Normalize options `ignore_last_delimiters`\n if (\n options.ignore_last_delimiters === undefined ||\n options.ignore_last_delimiters === null\n ) {\n options.ignore_last_delimiters = false;\n } else if (typeof options.ignore_last_delimiters === \"number\") {\n options.ignore_last_delimiters = Math.floor(options.ignore_last_delimiters);\n if (options.ignore_last_delimiters === 0) {\n options.ignore_last_delimiters = false;\n }\n } else if (typeof options.ignore_last_delimiters !== \"boolean\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_IGNORE_LAST_DELIMITERS\",\n [\n \"Invalid option `ignore_last_delimiters`:\",\n \"the value must be a boolean value or an integer,\",\n `got ${JSON.stringify(options.ignore_last_delimiters)}`,\n ],\n options,\n );\n }\n if (options.ignore_last_delimiters === true && options.columns === false) {\n throw new CsvError(\n \"CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS\",\n [\n \"The option `ignore_last_delimiters`\",\n \"requires the activation of the `columns` option\",\n ],\n options,\n );\n }\n // Normalize option `info`\n if (\n options.info === undefined ||\n options.info === null ||\n options.info === false\n ) {\n options.info = false;\n } else if (options.info !== true) {\n throw new Error(\n `Invalid Option: info must be true, got ${JSON.stringify(options.info)}`,\n );\n }\n // Normalize option `max_record_size`\n if (\n options.max_record_size === undefined ||\n options.max_record_size === null ||\n options.max_record_size === false\n ) {\n options.max_record_size = 0;\n } else if (\n Number.isInteger(options.max_record_size) &&\n options.max_record_size >= 0\n ) ; else if (\n typeof options.max_record_size === \"string\" &&\n /\\d+/.test(options.max_record_size)\n ) {\n options.max_record_size = parseInt(options.max_record_size);\n } else {\n throw new Error(\n `Invalid Option: max_record_size must be a positive integer, got ${JSON.stringify(options.max_record_size)}`,\n );\n }\n // Normalize option `objname`\n if (\n options.objname === undefined ||\n options.objname === null ||\n options.objname === false\n ) {\n options.objname = undefined;\n } else if (isBuffer(options.objname)) {\n if (options.objname.length === 0) {\n throw new Error(`Invalid Option: objname must be a non empty buffer`);\n }\n if (options.encoding === null) ; else {\n options.objname = options.objname.toString(options.encoding);\n }\n } else if (typeof options.objname === \"string\") {\n if (options.objname.length === 0) {\n throw new Error(`Invalid Option: objname must be a non empty string`);\n }\n // Great, nothing to do\n } else if (typeof options.objname === \"number\") ; else {\n throw new Error(\n `Invalid Option: objname must be a string or a buffer, got ${options.objname}`,\n );\n }\n if (options.objname !== undefined) {\n if (typeof options.objname === \"number\") {\n if (options.columns !== false) {\n throw Error(\n \"Invalid Option: objname index cannot be combined with columns or be defined as a field\",\n );\n }\n } else {\n // A string or a buffer\n if (options.columns === false) {\n throw Error(\n \"Invalid Option: objname field must be combined with columns or be defined as an index\",\n );\n }\n }\n }\n // Normalize option `on_record`\n if (options.on_record === undefined || options.on_record === null) {\n options.on_record = undefined;\n } else if (typeof options.on_record !== \"function\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_ON_RECORD\",\n [\n \"Invalid option `on_record`:\",\n \"expect a function,\",\n `got ${JSON.stringify(options.on_record)}`,\n ],\n options,\n );\n }\n // Normalize option `on_skip`\n // options.on_skip ??= (err, chunk) => {\n // this.emit('skip', err, chunk);\n // };\n if (\n options.on_skip !== undefined &&\n options.on_skip !== null &&\n typeof options.on_skip !== \"function\"\n ) {\n throw new Error(\n `Invalid Option: on_skip must be a function, got ${JSON.stringify(options.on_skip)}`,\n );\n }\n // Normalize option `quote`\n if (\n options.quote === null ||\n options.quote === false ||\n options.quote === \"\"\n ) {\n options.quote = null;\n } else {\n if (options.quote === undefined || options.quote === true) {\n options.quote = Buffer.from('\"', options.encoding);\n } else if (typeof options.quote === \"string\") {\n options.quote = Buffer.from(options.quote, options.encoding);\n }\n if (!isBuffer(options.quote)) {\n throw new Error(\n `Invalid Option: quote must be a buffer or a string, got ${JSON.stringify(options.quote)}`,\n );\n }\n }\n // Normalize option `raw`\n if (\n options.raw === undefined ||\n options.raw === null ||\n options.raw === false\n ) {\n options.raw = false;\n } else if (options.raw !== true) {\n throw new Error(\n `Invalid Option: raw must be true, got ${JSON.stringify(options.raw)}`,\n );\n }\n // Normalize option `record_delimiter`\n if (options.record_delimiter === undefined) {\n options.record_delimiter = [];\n } else if (\n typeof options.record_delimiter === \"string\" ||\n isBuffer(options.record_delimiter)\n ) {\n if (options.record_delimiter.length === 0) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a non empty string or buffer,\",\n `got ${JSON.stringify(options.record_delimiter)}`,\n ],\n options,\n );\n }\n options.record_delimiter = [options.record_delimiter];\n } else if (!Array.isArray(options.record_delimiter)) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a string, a buffer or array of string|buffer,\",\n `got ${JSON.stringify(options.record_delimiter)}`,\n ],\n options,\n );\n }\n options.record_delimiter = options.record_delimiter.map(function (rd, i) {\n if (typeof rd !== \"string\" && !isBuffer(rd)) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a string, a buffer or array of string|buffer\",\n `at index ${i},`,\n `got ${JSON.stringify(rd)}`,\n ],\n options,\n );\n } else if (rd.length === 0) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a non empty string or buffer\",\n `at index ${i},`,\n `got ${JSON.stringify(rd)}`,\n ],\n options,\n );\n }\n if (typeof rd === \"string\") {\n rd = Buffer.from(rd, options.encoding);\n }\n return rd;\n });\n // Normalize option `relax_column_count`\n if (typeof options.relax_column_count === \"boolean\") ; else if (\n options.relax_column_count === undefined ||\n options.relax_column_count === null\n ) {\n options.relax_column_count = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count must be a boolean, got ${JSON.stringify(options.relax_column_count)}`,\n );\n }\n if (typeof options.relax_column_count_less === \"boolean\") ; else if (\n options.relax_column_count_less === undefined ||\n options.relax_column_count_less === null\n ) {\n options.relax_column_count_less = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count_less must be a boolean, got ${JSON.stringify(options.relax_column_count_less)}`,\n );\n }\n if (typeof options.relax_column_count_more === \"boolean\") ; else if (\n options.relax_column_count_more === undefined ||\n options.relax_column_count_more === null\n ) {\n options.relax_column_count_more = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count_more must be a boolean, got ${JSON.stringify(options.relax_column_count_more)}`,\n );\n }\n // Normalize option `relax_quotes`\n if (typeof options.relax_quotes === \"boolean\") ; else if (\n options.relax_quotes === undefined ||\n options.relax_quotes === null\n ) {\n options.relax_quotes = false;\n } else {\n throw new Error(\n `Invalid Option: relax_quotes must be a boolean, got ${JSON.stringify(options.relax_quotes)}`,\n );\n }\n // Normalize option `skip_empty_lines`\n if (typeof options.skip_empty_lines === \"boolean\") ; else if (\n options.skip_empty_lines === undefined ||\n options.skip_empty_lines === null\n ) {\n options.skip_empty_lines = false;\n } else {\n throw new Error(\n `Invalid Option: skip_empty_lines must be a boolean, got ${JSON.stringify(options.skip_empty_lines)}`,\n );\n }\n // Normalize option `skip_records_with_empty_values`\n if (typeof options.skip_records_with_empty_values === \"boolean\") ; else if (\n options.skip_records_with_empty_values === undefined ||\n options.skip_records_with_empty_values === null\n ) {\n options.skip_records_with_empty_values = false;\n } else {\n throw new Error(\n `Invalid Option: skip_records_with_empty_values must be a boolean, got ${JSON.stringify(options.skip_records_with_empty_values)}`,\n );\n }\n // Normalize option `skip_records_with_error`\n if (typeof options.skip_records_with_error === \"boolean\") ; else if (\n options.skip_records_with_error === undefined ||\n options.skip_records_with_error === null\n ) {\n options.skip_records_with_error = false;\n } else {\n throw new Error(\n `Invalid Option: skip_records_with_error must be a boolean, got ${JSON.stringify(options.skip_records_with_error)}`,\n );\n }\n // Normalize option `rtrim`\n if (\n options.rtrim === undefined ||\n options.rtrim === null ||\n options.rtrim === false\n ) {\n options.rtrim = false;\n } else if (options.rtrim !== true) {\n throw new Error(\n `Invalid Option: rtrim must be a boolean, got ${JSON.stringify(options.rtrim)}`,\n );\n }\n // Normalize option `ltrim`\n if (\n options.ltrim === undefined ||\n options.ltrim === null ||\n options.ltrim === false\n ) {\n options.ltrim = false;\n } else if (options.ltrim !== true) {\n throw new Error(\n `Invalid Option: ltrim must be a boolean, got ${JSON.stringify(options.ltrim)}`,\n );\n }\n // Normalize option `trim`\n if (\n options.trim === undefined ||\n options.trim === null ||\n options.trim === false\n ) {\n options.trim = false;\n } else if (options.trim !== true) {\n throw new Error(\n `Invalid Option: trim must be a boolean, got ${JSON.stringify(options.trim)}`,\n );\n }\n // Normalize options `trim`, `ltrim` and `rtrim`\n if (options.trim === true && opts.ltrim !== false) {\n options.ltrim = true;\n } else if (options.ltrim !== true) {\n options.ltrim = false;\n }\n if (options.trim === true && opts.rtrim !== false) {\n options.rtrim = true;\n } else if (options.rtrim !== true) {\n options.rtrim = false;\n }\n // Normalize option `to`\n if (options.to === undefined || options.to === null) {\n options.to = -1;\n } else if (options.to !== -1) {\n if (typeof options.to === \"string\" && /\\d+/.test(options.to)) {\n options.to = parseInt(options.to);\n }\n if (Number.isInteger(options.to)) {\n if (options.to <= 0) {\n throw new Error(\n `Invalid Option: to must be a positive integer greater than 0, got ${JSON.stringify(opts.to)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: to must be an integer, got ${JSON.stringify(opts.to)}`,\n );\n }\n }\n // Normalize option `to_line`\n if (options.to_line === undefined || options.to_line === null) {\n options.to_line = -1;\n } else if (options.to_line !== -1) {\n if (typeof options.to_line === \"string\" && /\\d+/.test(options.to_line)) {\n options.to_line = parseInt(options.to_line);\n }\n if (Number.isInteger(options.to_line)) {\n if (options.to_line <= 0) {\n throw new Error(\n `Invalid Option: to_line must be a positive integer greater than 0, got ${JSON.stringify(opts.to_line)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: to_line must be an integer, got ${JSON.stringify(opts.to_line)}`,\n );\n }\n }\n return options;\n};\n\n// Discussed in [issue #400](https://github.com/adaltas/node-csv/issues/400)\n// See https://github.com/python/cpython/blob/ea1b1c579f600cc85d145c60862b2e6b98701b24/Lib/csv.py#L349\nconst delimiter_discover = function (records, options) {\n // Normalize the configuration\n if (!options) {\n ({ delimiter_auto: options } = normalize_options({ delimiter_auto: true }));\n }\n // Convert String to Buffer\n if (typeof records === \"string\") {\n records = Buffer.from(records);\n }\n // Convert Buffer to an array of records\n if (isBuffer(records)) {\n records = ((data) => {\n const records = [];\n const parser = transform({ delimiter: [] });\n const push = (record) => records.push(record);\n const close = () => {};\n const error = parser.parse(data, true, push, close);\n if (error !== undefined) throw error;\n return records;\n })(records);\n }\n // Info array initialization, 127 entries, one per char code\n const info = Array(127)\n .fill()\n .map(() => ({ lines: [] }));\n // Traverse each records, count occurences per char code\n records.map(([record], line) => {\n for (let i = 0, l = record.length; i < l; i++) {\n // Count the character frequency\n const code = record.charCodeAt(i);\n if (info[code].lines[line] === undefined) info[code].lines[line] = 0;\n info[code].lines[line]++;\n }\n });\n // Traverse each char code, compute the score\n info.map((info, i) => {\n info.char_code = i;\n info.std = std(info.lines);\n info.total = info.lines.reduce((acc, val) => acc + val, 0);\n info.preferred = !!options.preferred[i];\n info.score = options.score(info, options);\n });\n // Extract the dominant character\n const result = info.reduce(\n (acc, info) => (acc.score > info.score ? acc : info),\n {},\n );\n return String.fromCharCode(result.char_code);\n};\n\nconst std = function (array) {\n const n = array.length;\n if (n === 0) return 0;\n const mean = array.reduce((a, b) => a + b) / n;\n return Math.sqrt(\n array.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n,\n );\n};\n\nconst isRecordEmpty = function (record) {\n return record.every(\n (field) =>\n field == null || (field.toString && field.toString().trim() === \"\"),\n );\n};\n\nconst cr = 13; // `\\r`, carriage return, 0x0D in hexadécimal, 13 in decimal\nconst nl = 10; // `\\n`, newline, 0x0A in hexadecimal, 10 in decimal\n\nconst boms = {\n // Note, the following are equals:\n // Buffer.from(\"\\ufeff\")\n // Buffer.from([239, 187, 191])\n // Buffer.from('EFBBBF', 'hex')\n utf8: Buffer.from([239, 187, 191]),\n // Note, the following are equals:\n // Buffer.from \"\\ufeff\", 'utf16le\n // Buffer.from([255, 254])\n utf16le: Buffer.from([255, 254]),\n};\n\nconst transform = function (original_options = {}) {\n const info = {\n bytes: 0,\n bytes_records: 0,\n comment_lines: 0,\n empty_lines: 0,\n invalid_field_length: 0,\n lines: 1,\n records: 0,\n };\n const options = normalize_options(original_options);\n return {\n info: info,\n original_options: original_options,\n options: options,\n state: init_state(options),\n __needMoreData: function (i, bufLen, end) {\n if (end) return false;\n const { encoding, escape, quote } = this.options;\n const { quoting, needMoreDataSize, recordDelimiterMaxLength } =\n this.state;\n const numOfCharLeft = bufLen - i - 1;\n const requiredLength = Math.max(\n needMoreDataSize,\n // Skip if the remaining buffer smaller than record delimiter\n // If \"record_delimiter\" is yet to be discovered:\n // 1. It is equals to `[]` and \"recordDelimiterMaxLength\" equals `0`\n // 2. We set the length to windows line ending in the current encoding\n // Note, that encoding is known from user or bom discovery at that point\n // recordDelimiterMaxLength,\n recordDelimiterMaxLength === 0\n ? Buffer.from(\"\\r\\n\", encoding).length\n : recordDelimiterMaxLength,\n // Skip if remaining buffer can be an escaped quote\n quoting ? (escape === null ? 0 : escape.length) + quote.length : 0,\n // Skip if remaining buffer can be record delimiter following the closing quote\n quoting ? quote.length + recordDelimiterMaxLength : 0,\n );\n return numOfCharLeft < requiredLength;\n },\n // Central parser implementation\n parse: function (nextBuf, end, push, close) {\n const {\n bom,\n comment_no_infix,\n delimiter_auto,\n encoding,\n from_line,\n ltrim,\n max_record_size,\n raw,\n relax_quotes,\n rtrim,\n skip_empty_lines,\n to,\n to_line,\n } = this.options;\n let { comment, escape, quote, record_delimiter } = this.options;\n const {\n bomSkipped,\n delimiterDiscovered,\n delimiterBufPrevious,\n rawBuffer,\n escapeIsQuote,\n } = this.state;\n // Automatic delimiter discovery\n if (!delimiterDiscovered && delimiter_auto) {\n let delimiterBuf;\n if (delimiterBufPrevious === undefined) {\n delimiterBuf = nextBuf;\n } else if (\n delimiterBufPrevious !== undefined &&\n nextBuf === undefined\n ) {\n delimiterBuf = delimiterBufPrevious;\n } else {\n delimiterBuf = Buffer.concat([delimiterBufPrevious, nextBuf]);\n }\n // Ensure that nextBuf is not concatenated a second time during buffer reconciliation\n nextBuf = undefined;\n // this.delimiterBufPrevious = delimiterBuf;\n if (end || delimiterBuf.length > delimiter_auto.size) {\n this.options.delimiter = [\n Buffer.from(\n delimiter_discover(delimiterBuf, this.options.delimiter_auto),\n ),\n ];\n this.state.previousBuf = delimiterBuf;\n this.state.delimiterBufPrevious = undefined;\n this.state.delimiterDiscovered = true;\n } else {\n this.state.delimiterBufPrevious = delimiterBuf;\n return;\n }\n }\n // Previous buffers reconciliation\n const { previousBuf } = this.state;\n let buf;\n if (previousBuf === undefined) {\n if (nextBuf === undefined) {\n // Handle empty string\n close();\n return;\n } else {\n buf = nextBuf;\n }\n } else if (previousBuf !== undefined && nextBuf === undefined) {\n buf = previousBuf;\n } else {\n buf = Buffer.concat([previousBuf, nextBuf]);\n }\n // Handle UTF BOM\n if (bomSkipped === false) {\n if (bom === false) {\n this.state.bomSkipped = true;\n } else if (buf.length < 3) {\n // No enough data\n if (end === false) {\n // Wait for more data\n this.state.previousBuf = buf;\n return;\n }\n } else {\n for (const encoding in boms) {\n if (boms[encoding].compare(buf, 0, boms[encoding].length) === 0) {\n // Skip BOM\n const bomLength = boms[encoding].length;\n this.state.bufBytesStart += bomLength;\n buf = buf.slice(bomLength);\n // Renormalize original options with the new encoding\n const options = normalize_options({\n ...this.original_options,\n encoding: encoding,\n });\n // Properties are merged with the existing options instance\n for (const key in options) {\n this.options[key] = options[key];\n }\n // Options will re-evaluate the Buffer with the new encoding\n ({ comment, escape, quote } = this.options);\n break;\n }\n }\n this.state.bomSkipped = true;\n }\n }\n const bufLen = buf.length;\n let pos;\n for (pos = 0; pos < bufLen; pos++) {\n // Ensure we get enough space to look ahead\n // There should be a way to move this out of the loop\n if (this.__needMoreData(pos, bufLen, end)) {\n break;\n }\n if (this.state.wasRowDelimiter === true) {\n this.info.lines++;\n this.state.wasRowDelimiter = false;\n }\n if (to_line !== -1 && this.info.lines > to_line) {\n this.state.stop = true;\n close();\n return;\n }\n // Auto discovery of record_delimiter, unix, mac and windows supported\n if (this.state.quoting === false && record_delimiter.length === 0) {\n const record_delimiterCount = this.__autoDiscoverRecordDelimiter(\n buf,\n pos,\n );\n if (record_delimiterCount) {\n record_delimiter = this.options.record_delimiter;\n }\n }\n const chr = buf[pos];\n if (raw === true) {\n rawBuffer.append(chr);\n }\n if (\n (chr === cr || chr === nl) &&\n this.state.wasRowDelimiter === false\n ) {\n this.state.wasRowDelimiter = true;\n }\n // Previous char was a valid escape char\n // treat the current char as a regular char\n if (this.state.escaping === true) {\n this.state.escaping = false;\n } else {\n // Escape is only active inside quoted fields\n // We are quoting, the char is an escape chr and there is a chr to escape\n // if(escape !== null && this.state.quoting === true && chr === escape && pos + 1 < bufLen){\n if (\n escape !== null &&\n this.state.quoting === true &&\n this.__isEscape(buf, pos, chr) &&\n pos + escape.length < bufLen\n ) {\n if (escapeIsQuote) {\n if (this.__isQuote(buf, pos + escape.length)) {\n this.state.escaping = true;\n pos += escape.length - 1;\n continue;\n }\n } else {\n this.state.escaping = true;\n pos += escape.length - 1;\n continue;\n }\n }\n // Not currently escaping and chr is a quote\n // TODO: need to compare bytes instead of single char\n if (this.state.commenting === false && this.__isQuote(buf, pos)) {\n if (this.state.quoting === true) {\n const nextChr = buf[pos + quote.length];\n const isNextChrTrimable =\n rtrim && this.__isCharTrimable(buf, pos + quote.length);\n const isNextChrComment =\n comment !== null &&\n this.__compareBytes(comment, buf, pos + quote.length, nextChr);\n const isNextChrDelimiter = this.__isDelimiter(\n buf,\n pos + quote.length,\n nextChr,\n );\n const isNextChrRecordDelimiter =\n record_delimiter.length === 0\n ? this.__autoDiscoverRecordDelimiter(buf, pos + quote.length)\n : this.__isRecordDelimiter(nextChr, buf, pos + quote.length);\n // Escape a quote\n // Treat next char as a regular character\n if (\n escape !== null &&\n this.__isEscape(buf, pos, chr) &&\n this.__isQuote(buf, pos + escape.length)\n ) {\n pos += escape.length - 1;\n } else if (\n !nextChr ||\n isNextChrDelimiter ||\n isNextChrRecordDelimiter ||\n isNextChrComment ||\n isNextChrTrimable\n ) {\n this.state.quoting = false;\n this.state.wasQuoting = true;\n pos += quote.length - 1;\n continue;\n } else if (relax_quotes === false) {\n const err = this.__error(\n new CsvError(\n \"CSV_INVALID_CLOSING_QUOTE\",\n [\n \"Invalid Closing Quote:\",\n `got \"${String.fromCharCode(nextChr)}\"`,\n `at line ${this.info.lines}`,\n \"instead of delimiter, record delimiter, trimable character\",\n \"(if activated) or comment\",\n ],\n this.options,\n this.__infoField(),\n ),\n );\n if (err !== undefined) return err;\n } else {\n this.state.quoting = false;\n this.state.wasQuoting = true;\n this.state.field.prepend(quote);\n pos += quote.length - 1;\n }\n } else {\n if (this.state.field.length !== 0) {\n // In relax_quotes mode, treat opening quote preceded by chrs as regular\n if (relax_quotes === false) {\n const info = this.__infoField();\n const bom = Object.keys(boms)\n .map((b) =>\n boms[b].equals(this.state.field.toString()) ? b : false,\n )\n .filter(Boolean)[0];\n const err = this.__error(\n new CsvError(\n \"INVALID_OPENING_QUOTE\",\n [\n \"Invalid Opening Quote:\",\n `a quote is found on field ${JSON.stringify(info.column)} at line ${info.lines}, value is ${JSON.stringify(this.state.field.toString(encoding))}`,\n bom ? `(${bom} bom)` : undefined,\n ],\n this.options,\n info,\n {\n field: this.state.field,\n },\n ),\n );\n if (err !== undefined) return err;\n }\n } else {\n this.state.quoting = true;\n pos += quote.length - 1;\n continue;\n }\n }\n }\n if (this.state.quoting === false) {\n const recordDelimiterLength = this.__isRecordDelimiter(\n chr,\n buf,\n pos,\n );\n if (recordDelimiterLength !== 0) {\n // Do not emit comments which take a full line\n const skipCommentLine =\n this.state.commenting &&\n this.state.wasQuoting === false &&\n this.state.record.length === 0 &&\n this.state.field.length === 0;\n if (skipCommentLine) {\n this.info.comment_lines++;\n // Skip full comment line\n } else {\n // Activate records emission if above from_line\n if (\n this.state.enabled === false &&\n this.info.lines +\n (this.state.wasRowDelimiter === true ? 1 : 0) >=\n from_line\n ) {\n this.state.enabled = true;\n this.__resetField();\n this.__resetRecord();\n pos += recordDelimiterLength - 1;\n continue;\n }\n // Skip if line is empty and skip_empty_lines activated\n if (\n skip_empty_lines === true &&\n this.state.wasQuoting === false &&\n this.state.record.length === 0 &&\n this.state.field.length === 0\n ) {\n this.info.empty_lines++;\n pos += recordDelimiterLength - 1;\n continue;\n }\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n this.info.bytes =\n this.state.bufBytesStart + pos + recordDelimiterLength;\n const errRecord = this.__onRecord(push);\n if (errRecord !== undefined) return errRecord;\n if (to !== -1 && this.info.records >= to) {\n this.state.stop = true;\n close();\n return;\n }\n }\n this.state.commenting = false;\n pos += recordDelimiterLength - 1;\n continue;\n }\n if (this.state.commenting) {\n continue;\n }\n if (\n comment !== null &&\n (comment_no_infix === false ||\n (this.state.record.length === 0 &&\n this.state.field.length === 0))\n ) {\n const commentCount = this.__compareBytes(comment, buf, pos, chr);\n if (commentCount !== 0) {\n this.state.commenting = true;\n continue;\n }\n }\n const delimiterLength = this.__isDelimiter(buf, pos, chr);\n if (delimiterLength !== 0) {\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n pos += delimiterLength - 1;\n continue;\n }\n }\n }\n if (this.state.commenting === false) {\n if (\n max_record_size !== 0 &&\n this.state.record_length + this.state.field.length > max_record_size\n ) {\n return this.__error(\n new CsvError(\n \"CSV_MAX_RECORD_SIZE\",\n [\n \"Max Record Size:\",\n \"record exceed the maximum number of tolerated bytes\",\n `of ${max_record_size}`,\n `at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n }\n }\n const lappend =\n ltrim === false ||\n this.state.quoting === true ||\n this.state.field.length !== 0 ||\n !this.__isCharTrimable(buf, pos);\n // rtrim in non quoting is handle in __onField\n const rappend = rtrim === false || this.state.wasQuoting === false;\n if (lappend === true && rappend === true) {\n this.state.field.append(chr);\n } else if (rtrim === true && !this.__isCharTrimable(buf, pos)) {\n return this.__error(\n new CsvError(\n \"CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE\",\n [\n \"Invalid Closing Quote:\",\n \"found non trimable byte after quote\",\n `at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n } else {\n if (lappend === false) {\n pos += this.__isCharTrimable(buf, pos) - 1;\n }\n continue;\n }\n }\n if (end === true) {\n // Ensure we are not ending in a quoting state\n if (this.state.quoting === true) {\n const err = this.__error(\n new CsvError(\n \"CSV_QUOTE_NOT_CLOSED\",\n [\n \"Quote Not Closed:\",\n `the parsing is finished with an opening quote at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n if (err !== undefined) return err;\n } else {\n // Skip last line if it has no characters\n if (\n this.state.wasQuoting === true ||\n this.state.record.length !== 0 ||\n this.state.field.length !== 0\n ) {\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n const errRecord = this.__onRecord(push);\n if (errRecord !== undefined) return errRecord;\n } else if (this.state.wasRowDelimiter === true) {\n this.info.empty_lines++;\n } else if (this.state.commenting === true) {\n this.info.comment_lines++;\n }\n }\n } else {\n this.state.bufBytesStart += pos;\n this.state.previousBuf = buf.slice(pos);\n }\n if (this.state.wasRowDelimiter === true) {\n this.info.lines++;\n this.state.wasRowDelimiter = false;\n }\n },\n __onRecord: function (push) {\n const {\n columns,\n group_columns_by_name,\n encoding,\n info,\n from,\n relax_column_count,\n relax_column_count_less,\n relax_column_count_more,\n raw,\n skip_records_with_empty_values,\n } = this.options;\n const { enabled, record } = this.state;\n if (enabled === false) {\n return this.__resetRecord();\n }\n // Convert the first line into column names\n const recordLength = record.length;\n if (columns === true) {\n if (skip_records_with_empty_values === true && isRecordEmpty(record)) {\n this.__resetRecord();\n return;\n }\n return this.__firstLineToColumns(record);\n }\n if (columns === false && this.info.records === 0) {\n this.state.expectedRecordLength = recordLength;\n }\n if (recordLength !== this.state.expectedRecordLength) {\n const err =\n columns === false\n ? new CsvError(\n \"CSV_RECORD_INCONSISTENT_FIELDS_LENGTH\",\n [\n \"Invalid Record Length:\",\n `expect ${this.state.expectedRecordLength},`,\n `got ${recordLength} on line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n {\n record: record,\n },\n )\n : new CsvError(\n \"CSV_RECORD_INCONSISTENT_COLUMNS\",\n [\n \"Invalid Record Length:\",\n `columns length is ${columns.length},`, // rename columns\n `got ${recordLength} on line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n {\n record: record,\n },\n );\n if (\n relax_column_count === true ||\n (relax_column_count_less === true &&\n recordLength < this.state.expectedRecordLength) ||\n (relax_column_count_more === true &&\n recordLength > this.state.expectedRecordLength)\n ) {\n this.info.invalid_field_length++;\n this.state.error = err;\n // Error is undefined with skip_records_with_error\n } else {\n const finalErr = this.__error(err);\n if (finalErr) return finalErr;\n }\n }\n if (skip_records_with_empty_values === true && isRecordEmpty(record)) {\n this.__resetRecord();\n return;\n }\n if (this.state.recordHasError === true) {\n this.__resetRecord();\n this.state.recordHasError = false;\n return;\n }\n this.info.records++;\n if (from === 1 || this.info.records >= from) {\n const { objname } = this.options;\n // With columns, records are object\n if (columns !== false) {\n const obj = {};\n // Transform record array to an object\n for (let i = 0, l = record.length; i < l; i++) {\n if (columns[i] === undefined || columns[i].disabled) continue;\n // Turn duplicate columns into an array\n if (\n group_columns_by_name === true &&\n Object.hasOwn(obj, columns[i].name)\n ) {\n if (Array.isArray(obj[columns[i].name])) {\n obj[columns[i].name] = obj[columns[i].name].concat(record[i]);\n } else {\n obj[columns[i].name] = [obj[columns[i].name], record[i]];\n }\n } else {\n Object.defineProperty(obj, columns[i].name, {\n value: record[i],\n enumerable: true,\n writable: true,\n configurable: true,\n });\n }\n }\n // Without objname (default)\n if (raw === true || info === true) {\n const extRecord = Object.assign(\n { record: obj },\n raw === true\n ? { raw: this.state.rawBuffer.toString(encoding) }\n : {},\n info === true ? { info: this.__infoRecord() } : {},\n );\n const err = this.__push(\n objname === undefined ? extRecord : [obj[objname], extRecord],\n push,\n );\n if (err) {\n return err;\n }\n } else {\n const err = this.__push(\n objname === undefined ? obj : [obj[objname], obj],\n push,\n );\n if (err) {\n return err;\n }\n }\n // Without columns, records are array\n } else {\n if (raw === true || info === true) {\n const extRecord = Object.assign(\n { record: record },\n raw === true\n ? { raw: this.state.rawBuffer.toString(encoding) }\n : {},\n info === true ? { info: this.__infoRecord() } : {},\n );\n const err = this.__push(\n objname === undefined ? extRecord : [record[objname], extRecord],\n push,\n );\n if (err) {\n return err;\n }\n } else {\n const err = this.__push(\n objname === undefined ? record : [record[objname], record],\n push,\n );\n if (err) {\n return err;\n }\n }\n }\n }\n this.__resetRecord();\n },\n __firstLineToColumns: function (record) {\n const { firstLineToHeaders } = this.state;\n try {\n const headers =\n firstLineToHeaders === undefined\n ? record\n : firstLineToHeaders.call(null, record);\n if (!Array.isArray(headers)) {\n return this.__error(\n new CsvError(\n \"CSV_INVALID_COLUMN_MAPPING\",\n [\n \"Invalid Column Mapping:\",\n \"expect an array from column function,\",\n `got ${JSON.stringify(headers)}`,\n ],\n this.options,\n this.__infoField(),\n {\n headers: headers,\n },\n ),\n );\n }\n const normalizedHeaders = normalize_columns_array(headers);\n this.state.expectedRecordLength = normalizedHeaders.length;\n this.options.columns = normalizedHeaders;\n this.__resetRecord();\n return;\n } catch (err) {\n return err;\n }\n },\n __resetRecord: function () {\n if (this.options.raw === true) {\n this.state.rawBuffer.reset();\n }\n this.state.error = undefined;\n this.state.record = [];\n this.state.record_length = 0;\n },\n __onField: function () {\n const { cast, encoding, rtrim, max_record_size } = this.options;\n const { enabled, wasQuoting } = this.state;\n // Short circuit for the from_line options\n if (enabled === false) {\n return this.__resetField();\n }\n let field = this.state.field.toString(encoding);\n if (rtrim === true && wasQuoting === false) {\n field = field.trimRight();\n }\n if (cast === true) {\n const [err, f] = this.__cast(field);\n if (err !== undefined) return err;\n field = f;\n }\n this.state.record.push(field);\n // Increment record length if record size must not exceed a limit\n if (max_record_size !== 0 && typeof field === \"string\") {\n this.state.record_length += field.length;\n }\n this.__resetField();\n },\n __resetField: function () {\n this.state.field.reset();\n this.state.wasQuoting = false;\n },\n __push: function (record, push) {\n const { on_record } = this.options;\n if (on_record !== undefined) {\n const info = this.__infoRecord();\n try {\n record = on_record.call(null, record, info);\n } catch (err) {\n return err;\n }\n if (record === undefined || record === null) {\n return;\n }\n }\n this.info.bytes_records += this.info.bytes;\n push(record);\n },\n // Return a tuple with the error and the casted value\n __cast: function (field) {\n const { columns, relax_column_count } = this.options;\n const isColumns = Array.isArray(columns);\n // Dont loose time calling cast\n // because the final record is an object\n // and this field can't be associated to a key present in columns\n if (\n isColumns === true &&\n relax_column_count &&\n this.options.columns.length <= this.state.record.length\n ) {\n return [undefined, undefined];\n }\n if (this.state.castField !== null) {\n try {\n const info = this.__infoField();\n return [undefined, this.state.castField.call(null, field, info)];\n } catch (err) {\n return [err];\n }\n }\n if (this.__isFloat(field)) {\n return [undefined, parseFloat(field)];\n } else if (this.options.cast_date !== false) {\n const info = this.__infoField();\n return [undefined, this.options.cast_date.call(null, field, info)];\n }\n return [undefined, field];\n },\n __compareBytes: function (sourceBuf, targetBuf, targetPos, firstByte) {\n if (sourceBuf[0] !== firstByte) return 0;\n const sourceLength = sourceBuf.length;\n for (let i = 1; i < sourceLength; i++) {\n if (sourceBuf[i] !== targetBuf[targetPos + i]) return 0;\n }\n return sourceLength;\n },\n // Helper to test if a character is trimable\n __isCharTrimable: function (buf, pos) {\n const { timchars, timcharFirstBytes } = this.state;\n // Fast bail-out: non-whitespace bytes (the common case) are rejected\n // without scanning the full timchar list.\n const first = buf[pos];\n if (first === undefined || timcharFirstBytes[first] === 0) return 0;\n loop1: for (let i = 0; i < timchars.length; i++) {\n const timchar = timchars[i];\n for (let j = 0; j < timchar.length; j++) {\n if (timchar[j] !== buf[pos + j]) continue loop1;\n }\n return timchar.length;\n }\n return 0;\n },\n __isDelimiter: function (buf, pos, chr) {\n const { delimiter, ignore_last_delimiters } = this.options;\n if (\n ignore_last_delimiters === true &&\n this.state.record.length === this.options.columns.length - 1\n ) {\n return 0;\n } else if (\n ignore_last_delimiters !== false &&\n typeof ignore_last_delimiters === \"number\" &&\n this.state.record.length === ignore_last_delimiters - 1\n ) {\n return 0;\n }\n loop1: for (let i = 0; i < delimiter.length; i++) {\n const del = delimiter[i];\n if (del[0] === chr) {\n for (let j = 1; j < del.length; j++) {\n if (del[j] !== buf[pos + j]) continue loop1;\n }\n return del.length;\n }\n }\n return 0;\n },\n __isEscape: function (buf, pos, chr) {\n const { escape } = this.options;\n if (escape === null) return false;\n const l = escape.length;\n if (escape[0] === chr) {\n for (let i = 0; i < l; i++) {\n if (escape[i] !== buf[pos + i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n },\n __isFloat: function (value) {\n return value - parseFloat(value) + 1 >= 0; // Borrowed from jquery\n },\n // Keep it in case we implement the `cast_int` option\n // __isInt(value){\n // // return Number.isInteger(parseInt(value))\n // // return !isNaN( parseInt( obj ) );\n // return /^(\\-|\\+)?[1-9][0-9]*$/.test(value)\n // }\n __isQuote: function (buf, pos) {\n const { quote } = this.options;\n if (quote === null) return false;\n const l = quote.length;\n for (let i = 0; i < l; i++) {\n if (quote[i] !== buf[pos + i]) {\n return false;\n }\n }\n return true;\n },\n __isRecordDelimiter: function (chr, buf, pos) {\n const { record_delimiter } = this.options;\n const recordDelimiterLength = record_delimiter.length;\n loop1: for (let i = 0; i < recordDelimiterLength; i++) {\n const rd = record_delimiter[i];\n const rdLength = rd.length;\n if (rd[0] !== chr) {\n continue;\n }\n for (let j = 1; j < rdLength; j++) {\n if (rd[j] !== buf[pos + j]) {\n continue loop1;\n }\n }\n return rd.length;\n }\n return 0;\n },\n __autoDiscoverRecordDelimiter: function (buf, pos) {\n const { encoding } = this.options;\n // Note, we don't need to cache this information in state,\n // It is only called on the first line until we find out a suitable\n // record delimiter.\n const rds = [\n // Important, the windows line ending must be before mac os 9\n Buffer.from(\"\\r\\n\", encoding),\n Buffer.from(\"\\n\", encoding),\n Buffer.from(\"\\r\", encoding),\n ];\n loop: for (let i = 0; i < rds.length; i++) {\n const l = rds[i].length;\n for (let j = 0; j < l; j++) {\n if (rds[i][j] !== buf[pos + j]) {\n continue loop;\n }\n }\n this.options.record_delimiter.push(rds[i]);\n this.state.recordDelimiterMaxLength = rds[i].length;\n return rds[i].length;\n }\n return 0;\n },\n __error: function (msg) {\n const { encoding, raw, skip_records_with_error } = this.options;\n const err = typeof msg === \"string\" ? new Error(msg) : msg;\n if (skip_records_with_error) {\n this.state.recordHasError = true;\n if (this.options.on_skip !== undefined) {\n try {\n this.options.on_skip(\n err,\n raw ? this.state.rawBuffer.toString(encoding) : undefined,\n );\n } catch (err) {\n return err;\n }\n }\n // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined);\n return undefined;\n } else {\n return err;\n }\n },\n __infoDataSet: function () {\n return {\n ...this.info,\n columns: this.options.columns,\n };\n },\n __infoRecord: function () {\n const { columns, raw, encoding } = this.options;\n return {\n ...this.__infoDataSet(),\n bytes_records: this.info.bytes,\n error: this.state.error,\n header: columns === true,\n index: this.state.record.length,\n raw: raw ? this.state.rawBuffer.toString(encoding) : undefined,\n };\n },\n __infoField: function () {\n const { columns } = this.options;\n const isColumns = Array.isArray(columns);\n // Bytes records are only incremented when all records'fields are parsed\n const bytes_records = this.info.bytes_records;\n return {\n ...this.__infoRecord(),\n bytes_records: bytes_records,\n column:\n isColumns === true\n ? columns.length > this.state.record.length\n ? columns[this.state.record.length].name\n : null\n : this.state.record.length,\n quoting: this.state.wasQuoting,\n };\n },\n };\n};\n\nclass Parser extends Transform {\n constructor(opts = {}) {\n super({ ...{ readableObjectMode: true }, ...opts, encoding: null });\n this.api = transform({\n on_skip: (err, chunk) => {\n this.emit(\"skip\", err, chunk);\n },\n ...opts,\n });\n // Backward compatibility\n this.state = this.api.state;\n this.options = this.api.options;\n this.info = this.api.info;\n }\n // Implementation of `Transform._transform`\n _transform(buf, _, callback) {\n if (this.state.stop === true) {\n return;\n }\n const err = this.api.parse(\n buf,\n false,\n (record) => {\n this.push(record);\n },\n () => {\n this.push(null);\n this.end();\n // Fix #333 and break #410\n // ko: api.stream.iterator.coffee\n // ko with v21.4.0, ok with node v20.5.1: api.stream.finished # aborted (with generate())\n // ko: api.stream.finished # aborted (with Readable)\n // this.destroy()\n // Fix #410 and partially break #333\n // ok: api.stream.iterator.coffee\n // ok: api.stream.finished # aborted (with generate())\n // broken: api.stream.finished # aborted (with Readable)\n this.on(\"end\", this.destroy);\n },\n );\n if (err !== undefined) {\n this.state.stop = true;\n }\n callback(err);\n }\n // Implementation of `Transform._flush`\n _flush(callback) {\n if (this.state.stop === true) {\n return;\n }\n const err = this.api.parse(\n undefined,\n true,\n (record) => {\n this.push(record);\n },\n () => {\n this.push(null);\n this.on(\"end\", this.destroy);\n },\n );\n callback(err);\n }\n}\n\nconst parse = function () {\n let data, options, callback;\n for (const i in arguments) {\n const argument = arguments[i];\n const type = typeof argument;\n if (\n data === undefined &&\n (typeof argument === \"string\" || isBuffer(argument))\n ) {\n data = argument;\n } else if (options === undefined && is_object(argument)) {\n options = argument;\n } else if (callback === undefined && type === \"function\") {\n callback = argument;\n } else {\n throw new CsvError(\n \"CSV_INVALID_ARGUMENT\",\n [\"Invalid argument:\", `got ${JSON.stringify(argument)} at index ${i}`],\n options || {},\n );\n }\n }\n const parser = new Parser(options);\n if (callback) {\n const records =\n options === undefined || options.objname === undefined\n ? []\n : Object.create(null);\n parser.on(\"readable\", function () {\n let record;\n while ((record = this.read()) !== null) {\n if (options === undefined || options.objname === undefined) {\n records.push(record);\n } else {\n Object.assign(records, {\n [record[0]]: record[1],\n // writable: true,\n // enumerable: true,\n // configurable: true\n });\n }\n }\n });\n parser.on(\"error\", function (err) {\n callback(err, undefined, parser.api.__infoDataSet());\n });\n parser.on(\"end\", function () {\n callback(undefined, records, parser.api.__infoDataSet());\n });\n }\n if (data !== undefined) {\n const writer = function () {\n parser.write(data);\n parser.end();\n };\n // Support Deno, Rollup doesn't provide a shim for setImmediate\n if (typeof setImmediate === \"function\") {\n setImmediate(writer);\n } else {\n setTimeout(writer, 0);\n }\n }\n return parser;\n};\n\nexport { CsvError, Parser, normalize_options, parse };\n","//#region src/errors/index.ts\nvar e = 2048, t = class extends Error {\n\tdata;\n\tlocator;\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, r), this.name = \"DPUseError\", this.data = n, this.locator = t;\n\t}\n}, n = class extends t {\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, t, n, r), this.name = \"AppError\";\n\t}\n}, r = class extends t {\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, t, n, r), this.name = \"APIError\";\n\t}\n}, i = class extends t {\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, t, n, r), this.name = \"EngineError\";\n\t}\n}, a = class extends t {\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, t, n, r), this.name = \"ConnectorError\";\n\t}\n}, o = class extends t {\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, t, n, r), this.name = \"FetchError\";\n\t}\n};\nasync function s(e, t, n) {\n\tlet r = ` - ${e.statusText}`, i = `${t} Response status '${String(e.status)}${e.statusText ? r : \"\"}' received.`, a;\n\ttry {\n\t\ta = await e.text();\n\t} catch (e) {\n\t\ta = `<body unavailable: ${u(e).message}>`;\n\t}\n\treturn new o(i, n, { body: h(a) });\n}\nfunction c(e) {\n\treturn e.map((e) => e.message).join(\" \");\n}\nfunction l(e) {\n\ttry {\n\t\te();\n\t} catch {}\n}\nfunction u(e) {\n\tif (e instanceof Error) return e;\n\tif (typeof e == \"string\") return Error(e);\n\tif (typeof e == \"number\" || typeof e == \"boolean\" || typeof e == \"bigint\") return Error(String(e));\n\tif (typeof e == \"symbol\") return Error(e.description ?? \"Unknown error\");\n\tif (typeof e == \"object\") try {\n\t\treturn Error(JSON.stringify(e));\n\t} catch {\n\t\treturn /* @__PURE__ */ Error(\"Unknown error\");\n\t}\n\treturn /* @__PURE__ */ Error(\"Unknown error\");\n}\nfunction d(e) {\n\tlet t = /* @__PURE__ */ new Set(), n = [], r = u(e);\n\tfor (; r != null && !t.has(r);) {\n\t\tt.add(r);\n\t\tlet [e, i] = g(r);\n\t\t/(?:\\.{3}|[.!?])$/.test(e.message) || (e.message += \".\"), n.push(e), r = i;\n\t}\n\treturn n;\n}\nfunction f(e) {\n\tlet t;\n\tfor (let n of e.toReversed()) {\n\t\tlet e = m(n, t);\n\t\tn.stack !== void 0 && (e.stack = n.stack), t = e;\n\t}\n\treturn t ?? /* @__PURE__ */ Error(\"No error to unserialise.\");\n}\nfunction p(e) {\n\tlet t;\n\ttry {\n\t\tt = JSON.stringify(e);\n\t} catch {\n\t\tt = typeof e == \"symbol\" ? e.description ?? \"Unknown error\" : typeof e == \"bigint\" ? e.toString() : \"Unknown error\";\n\t}\n\treturn t === \"\" && (t = \"Unknown error\"), t;\n}\nfunction m(e, t) {\n\tswitch (e.name) {\n\t\tcase \"APIError\": return new r(e.message, e.locator, e.data, { cause: t });\n\t\tcase \"AppError\": return new n(e.message, e.locator, e.data, { cause: t });\n\t\tcase \"ConnectorError\": return new a(e.message, e.locator, e.data, { cause: t });\n\t\tcase \"EngineError\": return new i(e.message, e.locator, e.data, { cause: t });\n\t\tcase \"FetchError\": return new o(e.message, e.locator, e.data, { cause: t });\n\t\tdefault: {\n\t\t\tlet n = e.name;\n\t\t\treturn new class extends Error {\n\t\t\t\tname = n;\n\t\t\t}(e.message, { cause: t });\n\t\t}\n\t}\n}\nfunction h(t) {\n\tif (t != null && t !== \"\") return t.length > e ? `${t.slice(0, e)}... [truncated]` : t;\n}\nfunction g(e) {\n\tlet n = e.cause == null ? null : u(e.cause);\n\tif (e instanceof t) return [{\n\t\tdata: e.data,\n\t\tlocator: e.locator,\n\t\tmessage: e.message,\n\t\tname: e.name,\n\t\tstack: e.stack\n\t}, n];\n\tlet r = Object.fromEntries(Object.entries(e).filter(([e]) => e !== \"cause\"));\n\treturn e.name ? [{\n\t\tdata: r,\n\t\tlocator: \"\",\n\t\tmessage: e.message,\n\t\tname: e.name,\n\t\tstack: e.stack\n\t}, n] : [{\n\t\tdata: r,\n\t\tlocator: \"\",\n\t\tmessage: p(e),\n\t\tname: \"Error\",\n\t\tstack: void 0\n\t}, null];\n}\n//#endregion\nexport { r as APIError, n as AppError, a as ConnectorError, t as DPUseError, i as EngineError, o as FetchError, s as buildFetchError, c as concatenateSerialisedErrorMessages, l as ignoreErrors, u as normalizeToError, d as serialiseError, f as unserialiseError };\n","// ── External Dependencies & Registrations\nimport { type Options, parse, type Parser } from 'csv-parse/browser/esm';\nexport type { Options, Parser } from 'csv-parse/browser/esm';\n\n// ── DPUse Framework\nimport { buildFetchError, ignoreErrors } from '@dpuse/dpuse-shared/errors';\nimport type { ParsingRecord, RecordDelimiterId, ValueDelimiterId } from '@dpuse/dpuse-shared/component/dataView';\nimport type { RecordRetrievalTypeId, RetrieveRecordsOptions, RetrieveRecordsSummary } from '@dpuse/dpuse-shared/component/module/connector';\n\n// ── Types ────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport interface ParseTextResult {\n parsedRecords: ParsingRecord[];\n recordDelimiterId: RecordDelimiterId;\n valueDelimiterId: ValueDelimiterId;\n}\n\ninterface StreamRecordBuffer {\n push: (record: ParsingRecord) => void;\n flush: () => void;\n}\n\n// ── Constants ────────────────────────────────────────────────────────────────────────────────────────────────────────\n\n/**\n * Baseline parser configuration pinned to explicit values to prevent behavioural drift across parser upgrades.\n * Intentionally exhaustive, even where values mirror current defaults. See: https://csv.js.org/parse/options/ for more information.\n *\n * `cast`, `objname`, `on_record`, `on_skip`, and `to` are intentionally omitted rather than set to `undefined`:\n * their csv-parse types don't include `undefined` in the property's own type (only via the optional `?`), which\n * `exactOptionalPropertyTypes` rejects as an explicit assignment. Omitting the key is equivalent at runtime — csv-parse\n * treats \"absent\" and \"explicitly undefined\" identically — so this preserves the \"pin every default explicitly\"\n * intent without a type error. (`to`'s documented default of 1 also can't be used regardless: it triggers\n * `TypeError: \"listener\" argument must be a function`.)\n */\nconst DEFAULT_OPTIONS: Options = {\n bom: false,\n cast_date: false,\n columns: false,\n comment: '',\n comment_no_infix: false,\n delimiter: ',',\n encoding: 'utf8',\n escape: '\"',\n from: 1,\n from_line: 1,\n group_columns_by_name: false,\n ignore_last_delimiters: false,\n info: false,\n ltrim: false,\n max_record_size: 0,\n quote: '\"',\n raw: false,\n record_delimiter: [],\n relax_column_count: false,\n relax_column_count_less: false,\n relax_column_count_more: false,\n relax_quotes: false,\n rtrim: false,\n skip_empty_lines: false,\n skip_records_with_empty_values: false,\n skip_records_with_error: false,\n to_line: -1,\n trim: false\n};\n\nconst DEFAULT_RECORD_BUFFER_POOL_SIZE = 4;\n\nconst DEFAULT_RECORD_BUFFER_SIZE = 10_000;\n\n// ── Tools ────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport class Tool {\n /**\n * Parse stream.\n */\n async parseStream(\n retrieveRecordsOptions: RetrieveRecordsOptions,\n parseOptions: Options,\n url: string,\n abortController: AbortController,\n chunk: (typeId: RecordRetrievalTypeId, records: ParsingRecord[]) => void\n ): Promise<RetrieveRecordsSummary> {\n return new Promise<RetrieveRecordsSummary>((resolve, reject) => {\n let parser: Parser | undefined;\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined;\n let recordBuffer: StreamRecordBuffer | undefined;\n let hasErrored = false;\n let hasStoppedProcessing = false;\n\n const stopProcessing = (): void => {\n if (hasStoppedProcessing) return;\n hasStoppedProcessing = true;\n\n const activeParser = parser;\n parser = undefined;\n recordBuffer = undefined;\n if (activeParser != null) {\n ignoreErrors(() => activeParser.removeAllListeners());\n ignoreErrors(() => activeParser.end());\n }\n ignoreErrors(() => void reader?.cancel());\n reader = undefined;\n };\n\n abortController.signal.addEventListener('abort', stopProcessing, { once: true });\n\n const handleError = (error: unknown): void => {\n if (hasErrored) return;\n\n hasErrored = true;\n stopProcessing();\n if (!abortController.signal.aborted) abortController.abort(error);\n reject(error instanceof Error ? error : new Error(String(error)));\n };\n\n const run = async (): Promise<void> => {\n parser = parse({\n ...DEFAULT_OPTIONS,\n ...parseOptions,\n cast: (value, context): { value: string; wasValueQuoted: boolean } => ({ value, wasValueQuoted: context.quoting })\n });\n recordBuffer = constructRecordBuffer({ chunk, chunkSize: retrieveRecordsOptions.chunkSize ?? DEFAULT_RECORD_BUFFER_SIZE });\n parser.on('readable', () => {\n try {\n if (parser == null || recordBuffer == null) return;\n let record: ParsingRecord | null;\n while ((record = parser.read() as ParsingRecord | null) != null) {\n if (hasErrored) return;\n abortController.signal.throwIfAborted();\n recordBuffer.push(record);\n }\n } catch (error) {\n handleError(error);\n }\n });\n parser.on('error', (error) => {\n handleError(error);\n });\n parser.on('end', () => {\n if (hasErrored) return;\n recordBuffer?.flush();\n resolve(constructSummary(parser));\n });\n\n const response = await fetch(encodeURI(url), { signal: abortController.signal });\n if (!response.ok || response.body == null) {\n throw await buildFetchError(response, `Failed to fetch '${url}' file.`, 'dpuse-connector-file-store-emulator|Connector|retrieve');\n }\n\n reader = response.body.getReader();\n const decoder = new TextDecoder(retrieveRecordsOptions.encodingId);\n let result = await reader.read();\n while (!result.done) {\n if (hasErrored) return;\n abortController.signal.throwIfAborted();\n const decodedChunk = decoder.decode(result.value, { stream: true });\n if (decodedChunk.length > 0) parser.write(decodedChunk);\n result = await reader.read();\n }\n\n if (hasErrored) return;\n\n const finalChunk = decoder.decode();\n if (finalChunk.length > 0) parser.write(finalChunk);\n parser.end();\n };\n\n void run().catch((error: unknown) => {\n handleError(error);\n });\n });\n }\n\n /**\n * Parse text.\n */\n async parseText(text: string, delimiters: ValueDelimiterId[]): Promise<ParseTextResult> {\n const recordDelimiterId = determineRecordDelimiter(text);\n const { parsedRecords, valueDelimiterId } = await determineValueDelimiter(text, delimiters);\n return { parsedRecords, recordDelimiterId, valueDelimiterId };\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────────────────────────────────────────────\n\n//#region: Parse stream helpers.\n\n/**\n * Construct record buffer.\n */\nfunction constructRecordBuffer(bufferOptions: { chunk: (typeId: RecordRetrievalTypeId, records: ParsingRecord[]) => void; chunkSize: number }): StreamRecordBuffer {\n const recordsPerChunk = Math.max(1, Math.floor(bufferOptions.chunkSize));\n const pool: ParsingRecord[][] = [];\n let records = allocateBuffer();\n let recordCount = 0;\n\n const flush = (): void => {\n if (recordCount === 0) return;\n const recordsToEmit = records;\n recordsToEmit.length = recordCount; // Trim before handing off so consumers only see populated entries.\n records = allocateBuffer();\n recordCount = 0;\n bufferOptions.chunk('parsingRecordArray', recordsToEmit);\n if (pool.length < DEFAULT_RECORD_BUFFER_POOL_SIZE) pool.push(recordsToEmit);\n };\n\n const push = (record: ParsingRecord): void => {\n records[recordCount++] = record;\n if (recordCount >= recordsPerChunk) flush();\n };\n\n return { flush, push };\n\n function allocateBuffer(): ParsingRecord[] {\n const pooled = pool.pop();\n if (pooled != null) {\n pooled.length = 0;\n return pooled;\n }\n\n const allocated = Array.from<ParsingRecord>({ length: recordsPerChunk });\n allocated.length = 0;\n return allocated;\n }\n}\n\n/** Construct summary. */\nfunction constructSummary(parser: Parser | undefined): RetrieveRecordsSummary {\n return {\n byteCount: parser?.info.bytes ?? -1,\n commentLineCount: parser?.info.comment_lines ?? -1,\n emptyLineCount: parser?.info.empty_lines ?? -1,\n nonUniformRecordCount: parser?.info.invalid_field_length ?? -1,\n lineCount: parser?.info.lines ?? -1,\n recordCount: parser?.info.records ?? -1\n };\n}\n\n//#region: Parse text helpers.\n\n/**\n * Determine record delimiter.\n */\nfunction determineRecordDelimiter(text: string): RecordDelimiterId {\n const countCRLF = (text.match(/\\r\\n/g) ?? []).length; // Count all '\\r\\n'character sequences.\n const countLF = (text.match(/(?<!\\r)\\n/g) ?? []).length; // Count all '\\n' characters not preceded by '\\r' character.\n const countCR = (text.match(/\\r(?!\\n)/g) ?? []).length; // Count all '\\r' characters not followed by '\\n' character.\n if (countCRLF >= countLF && countCRLF >= countCR) return '\\r\\n';\n if (countLF >= countCRLF && countLF >= countCR) return '\\n';\n if (countCR >= countCRLF && countCR >= countLF) return '\\r';\n return '\\n'; // Default to '\\n' character if all counts are equal or zero.\n}\n\n/**\n * Determine value delimiter.\n */\nasync function determineValueDelimiter(text: string, delimiters: ValueDelimiterId[]): Promise<{ parsedRecords: ParsingRecord[]; valueDelimiterId: ValueDelimiterId }> {\n let valueDelimiterId: ValueDelimiterId | undefined;\n let priorAverageCount: number;\n let priorSumCountDiffs: number;\n let parsedRecords: ParsingRecord[] = [];\n\n /* TODO: Could improve performance by limiting the number of delimiters\n processed by exiting if column count is the same for each line and\n by ordering delimiters in most common usage. Could also consider\n parallel parsing. Maybe group by most common delimiters and then by\n less common? */\n\n for (const delimiter of delimiters) {\n try {\n let totalValueCount = 0;\n let priorValueCount: number | undefined;\n let recordCount = 0;\n let sumOfValueCountDiffs = 0;\n\n const parser = parse({\n ...DEFAULT_OPTIONS,\n cast: (value, context): { value: string; wasValueQuoted: boolean } => ({ value, wasValueQuoted: context.quoting }),\n delimiter,\n relax_column_count: true\n });\n await new Promise<void>((resolve): void => {\n try {\n const pendingRecords: ParsingRecord[] = [];\n parser.on('readable', (): void => {\n let record;\n while ((record = parser.read() as ParsingRecord | null) != null) {\n recordCount++;\n const valueCount = record.length;\n if (priorValueCount != null) sumOfValueCountDiffs += Math.abs(valueCount - priorValueCount);\n priorValueCount = valueCount;\n totalValueCount += valueCount;\n pendingRecords.push(record);\n }\n });\n parser.on('error', (): void => {\n resolve(); // Ignore errors. Assume invalid delimiter caused parsing error.\n });\n parser.on('end', (): void => {\n const averageValueCount = totalValueCount / recordCount;\n if ((!priorSumCountDiffs || sumOfValueCountDiffs <= priorSumCountDiffs) && (!priorAverageCount || averageValueCount > priorAverageCount)) {\n valueDelimiterId = delimiter;\n priorAverageCount = averageValueCount;\n priorSumCountDiffs = sumOfValueCountDiffs;\n parsedRecords = [...pendingRecords];\n }\n resolve();\n });\n parser.write(text);\n parser.end();\n } catch {\n resolve(); // Ignore errors. Assume invalid delimiter caused parsing error.\n }\n });\n } catch {\n // Ignore errors. Assume invalid delimiter caused parsing error.\n }\n }\n\n return { parsedRecords, valueDelimiterId: valueDelimiterId ?? ',' };\n}\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
1
+ {"version":3,"file":"dpuse-tool-adaltas-csv-parser.es.js","names":["v"],"sources":["../node_modules/csv-parse/dist/esm/index.js","../node_modules/@dpuse/dpuse-shared/dist/dpuse-shared.es.js","../src/index.ts"],"sourcesContent":["var global$1 = (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n }\n\n revLookup['-'.charCodeAt(0)] = 62;\n revLookup['_'.charCodeAt(0)] = 63;\n}\n\nfunction toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr;\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0;\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders);\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len;\n\n var L = 0;\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];\n arr[L++] = (tmp >> 16) & 0xFF;\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);\n arr[L++] = tmp & 0xFF;\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp;\n var output = [];\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);\n output.push(tripletToBase64(tmp));\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n var output = '';\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n output += lookup[tmp >> 2];\n output += lookup[(tmp << 4) & 0x3F];\n output += '==';\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);\n output += lookup[tmp >> 10];\n output += lookup[(tmp >> 4) & 0x3F];\n output += lookup[(tmp << 2) & 0x3F];\n output += '=';\n }\n\n parts.push(output);\n\n return parts.join('')\n}\n\nfunction read (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? (nBytes - 1) : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n\n i += d;\n\n e = s & ((1 << (-nBits)) - 1);\n s >>= (-nBits);\n nBits += eLen;\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1);\n e >>= (-nBits);\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nfunction write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n var i = isLE ? 0 : (nBytes - 1);\n var d = isLE ? 1 : -1;\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m;\n eLen += mLen;\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n}\n\nvar toString = {}.toString;\n\nvar isArray$1 = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\nvar INSPECT_MAX_BYTES = 50;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined\n ? global$1.TYPED_ARRAY_SUPPORT\n : true;\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nkMaxLength();\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length);\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length);\n }\n that.length = length;\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype;\n return arr\n};\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype;\n Buffer.__proto__ = Uint8Array;\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) ;\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size);\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n};\n\nfunction allocUnsafe (that, size) {\n assertSize(size);\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0;\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n};\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8';\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0;\n that = createBuffer(that, length);\n\n var actual = that.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual);\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n that = createBuffer(that, length);\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255;\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array);\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset);\n } else {\n array = new Uint8Array(array, byteOffset, length);\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array;\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array);\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0;\n that = createBuffer(that, len);\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len);\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray$1(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n};\n\nBuffer.concat = function concat (list, length) {\n if (!isArray$1(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i;\n if (length === undefined) {\n length = 0;\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = Buffer.allocUnsafe(length);\n var pos = 0;\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n return buffer\n};\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n}\nBuffer.byteLength = byteLength;\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false;\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0;\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8';\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase();\n loweredCase = true;\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true;\n\nfunction swap (b, n, m) {\n var i = b[n];\n b[n] = b[m];\n b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length;\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n return this\n};\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length;\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n return this\n};\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length;\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n return this\n};\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0;\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n};\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n};\n\nBuffer.prototype.inspect = function inspect () {\n var str = '';\n var max = INSPECT_MAX_BYTES;\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n if (this.length > max) str += ' ... ';\n }\n return '<Buffer ' + str + '>'\n};\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0;\n }\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n if (thisStart === undefined) {\n thisStart = 0;\n }\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart;\n var y = end - start;\n var len = Math.min(x, y);\n\n var thisCopy = this.slice(thisStart, thisEnd);\n var targetCopy = target.slice(start, end);\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff;\n } else if (byteOffset < -2147483648) {\n byteOffset = -2147483648;\n }\n byteOffset = +byteOffset; // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1);\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding);\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF; // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1;\n var arrLength = arr.length;\n var valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i;\n if (dir) {\n var foundIndex = -1;\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n for (i = byteOffset; i >= 0; i--) {\n var found = true;\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n};\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n};\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0;\n var remaining = buf.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n if (length > remaining) {\n length = remaining;\n }\n }\n\n // must be an even number of digits\n var strLen = string.length;\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16);\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed;\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8';\n length = this.length;\n offset = 0;\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset;\n length = this.length;\n offset = 0;\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n if (isFinite(length)) {\n length = length | 0;\n if (encoding === undefined) encoding = 'utf8';\n } else {\n encoding = length;\n length = undefined;\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8';\n\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n};\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n};\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return fromByteArray(buf)\n } else {\n return fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end);\n var res = [];\n\n var i = start;\n while (i < end) {\n var firstByte = buf[i];\n var codePoint = null;\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1;\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte;\n }\n break\n case 2:\n secondByte = buf[i + 1];\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD;\n bytesPerSequence = 1;\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000;\n res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n codePoint = 0xDC00 | codePoint & 0x3FF;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = '';\n var i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n );\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F);\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length;\n\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n\n var out = '';\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i]);\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end);\n var res = '';\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n\n var newBuf;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end);\n newBuf.__proto__ = Buffer.prototype;\n } else {\n var sliceLen = end - start;\n newBuf = new Buffer(sliceLen, undefined);\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n var val = this[offset + --byteLength];\n var mul = 1;\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset]\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | (this[offset + 1] << 8)\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return (this[offset] << 8) | this[offset + 1]\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n};\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var i = byteLength;\n var mul = 1;\n var val = this[offset + --i];\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset] | (this[offset + 1] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset + 1] | (this[offset] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read(this, offset, true, 23, 4)\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read(this, offset, false, 23, 4)\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read(this, offset, true, 52, 8)\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read(this, offset, false, 52, 8)\n};\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var mul = 1;\n var i = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8;\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff;\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24);\n this[offset + 2] = (value >>> 16);\n this[offset + 1] = (value >>> 8);\n this[offset] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = 0;\n var mul = 1;\n var sub = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n var sub = 0;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -128);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n if (value < 0) value = 0xff + value + 1;\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -32768);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n this[offset + 2] = (value >>> 16);\n this[offset + 3] = (value >>> 24);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -2147483648);\n if (value < 0) value = 0xffffffff + value + 1;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4);\n }\n write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n};\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8);\n }\n write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start;\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length;\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n var i;\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start];\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n );\n }\n\n return len\n};\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n encoding = end;\n end = this.length;\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n if (code < 256) {\n val = code;\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n\n if (!val) val = 0;\n\n var i;\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString());\n var len = bytes.length;\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this\n};\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '');\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '=';\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint;\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null;\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF);\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo;\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i];\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nfunction isBuffer(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.usingDomains = false;\n\nEventEmitter.prototype.domain = undefined;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\nEventEmitter.init = function() {\n this.domain = null;\n if (EventEmitter.usingDomains) {\n // if there is an active domain, then attach to it.\n if (domain.active && !(this instanceof domain.Domain)) {\n this.domain = domain.active;\n }\n }\n\n if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || isNaN(n))\n throw new TypeError('\"n\" argument must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n if (isFn)\n handler.call(self);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self);\n }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n if (isFn)\n handler.call(self, arg1);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1);\n }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n if (isFn)\n handler.call(self, arg1, arg2);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2);\n }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n if (isFn)\n handler.call(self, arg1, arg2, arg3);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].call(self, arg1, arg2, arg3);\n }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n if (isFn)\n handler.apply(self, args);\n else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n listeners[i].apply(self, args);\n }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n var er, handler, len, args, i, events, domain;\n var doError = (type === 'error');\n\n events = this._events;\n if (events)\n doError = (doError && events.error == null);\n else if (!doError)\n return false;\n\n domain = this.domain;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n er = arguments[1];\n if (domain) {\n if (!er)\n er = new Error('Uncaught, unspecified \"error\" event');\n er.domainEmitter = this;\n er.domain = domain;\n er.domainThrown = false;\n domain.emit('error', er);\n } else if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n return false;\n }\n\n handler = events[type];\n\n if (!handler)\n return false;\n\n var isFn = typeof handler === 'function';\n len = arguments.length;\n switch (len) {\n // fast cases\n case 1:\n emitNone(handler, isFn, this);\n break;\n case 2:\n emitOne(handler, isFn, this, arguments[1]);\n break;\n case 3:\n emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n break;\n case 4:\n emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n break;\n // slower\n default:\n args = new Array(len - 1);\n for (i = 1; i < len; i++)\n args[i - 1] = arguments[i];\n emitMany(handler, isFn, this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = target._events;\n if (!events) {\n events = target._events = new EventHandlers();\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (!existing) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] :\n [existing, listener];\n } else {\n // If we've already got an array, just append.\n if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n }\n\n // Check for listener leak\n if (!existing.warned) {\n m = $getMaxListeners(target);\n if (m && m > 0 && existing.length > m) {\n existing.warned = true;\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + type + ' listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n emitWarning(w);\n }\n }\n }\n\n return target;\n}\nfunction emitWarning(e) {\n typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction _onceWrap(target, type, listener) {\n var fired = false;\n function g() {\n target.removeListener(type, g);\n if (!fired) {\n fired = true;\n listener.apply(target, arguments);\n }\n }\n g.listener = listener;\n return g;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function')\n throw new TypeError('\"listener\" argument must be a function');\n\n events = this._events;\n if (!events)\n return this;\n\n list = events[type];\n if (!list)\n return this;\n\n if (list === listener || (list.listener && list.listener === listener)) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list[0] = undefined;\n if (--this._eventsCount === 0) {\n this._events = new EventHandlers();\n return this;\n } else {\n delete events[type];\n }\n } else {\n spliceOne(list, position);\n }\n\n if (events.removeListener)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events;\n\n events = this._events;\n if (!events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!events.removeListener) {\n if (arguments.length === 0) {\n this._events = new EventHandlers();\n this._eventsCount = 0;\n } else if (events[type]) {\n if (--this._eventsCount === 0)\n this._events = new EventHandlers();\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n for (var i = 0, key; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = new EventHandlers();\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n do {\n this.removeListener(type, listeners[listeners.length - 1]);\n } while (listeners[0]);\n }\n\n return this;\n };\n\nEventEmitter.prototype.listeners = function listeners(type) {\n var evlistener;\n var ret;\n var events = this._events;\n\n if (!events)\n ret = [];\n else {\n evlistener = events[type];\n if (!evlistener)\n ret = [];\n else if (typeof evlistener === 'function')\n ret = [evlistener.listener || evlistener];\n else\n ret = unwrapListeners(evlistener);\n }\n\n return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount$1.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount$1;\nfunction listenerCount$1(type) {\n var events = this._events;\n\n if (events) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n list[i] = list[k];\n list.pop();\n}\n\nfunction arrayClone(arr, i) {\n var copy = new Array(i);\n while (i--)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\n// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global$1.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global$1.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nfunction nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nvar env = {};\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global$1.performance || {};\nperformance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() };\n\nvar process = {\n env: env};\n\nvar inherits;\nif (typeof Object.create === 'function'){\n inherits = function inherits(ctor, superCtor) {\n // implementation from standard node.js 'util' module\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n inherits = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n };\n}\nvar inherits$1 = inherits;\n\nvar formatRegExp = /%[sdj%]/g;\nfunction format(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n}\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nfunction deprecate(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global$1.process)) {\n return function() {\n return deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\nvar debugs = {};\nvar debugEnviron;\nfunction debuglog(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = 0;\n debugs[set] = function() {\n var msg = format.apply(null, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n}\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n _extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var length = output.reduce(function(prev, cur) {\n if (cur.indexOf('\\n') >= 0) ;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\n\nfunction isNull(arg) {\n return arg === null;\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\nfunction _extend(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n}\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nfunction BufferList() {\n this.head = null;\n this.tail = null;\n this.length = 0;\n}\n\nBufferList.prototype.push = function (v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n};\n\nBufferList.prototype.unshift = function (v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n};\n\nBufferList.prototype.shift = function () {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n};\n\nBufferList.prototype.clear = function () {\n this.head = this.tail = null;\n this.length = 0;\n};\n\nBufferList.prototype.join = function (s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n};\n\nBufferList.prototype.concat = function (n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n p.data.copy(ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n};\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar isBufferEncoding = Buffer.isEncoding\n || function(encoding) {\n switch (encoding && encoding.toLowerCase()) {\n case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;\n default: return false;\n }\n };\n\n\nfunction assertEncoding(encoding) {\n if (encoding && !isBufferEncoding(encoding)) {\n throw new Error('Unknown encoding: ' + encoding);\n }\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters. CESU-8 is handled as part of the UTF-8 encoding.\n//\n// @TODO Handling all encodings inside a single object makes it very difficult\n// to reason about this code, so it should be split up in the future.\n// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n// points as used by CESU-8.\nfunction StringDecoder(encoding) {\n this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');\n assertEncoding(encoding);\n switch (this.encoding) {\n case 'utf8':\n // CESU-8 represents each of Surrogate Pair by 3-bytes\n this.surrogateSize = 3;\n break;\n case 'ucs2':\n case 'utf16le':\n // UTF-16 represents each of Surrogate Pair by 2-bytes\n this.surrogateSize = 2;\n this.detectIncompleteChar = utf16DetectIncompleteChar;\n break;\n case 'base64':\n // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n this.surrogateSize = 3;\n this.detectIncompleteChar = base64DetectIncompleteChar;\n break;\n default:\n this.write = passThroughWrite;\n return;\n }\n\n // Enough space to store all bytes of a single character. UTF-8 needs 4\n // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n this.charBuffer = new Buffer(6);\n // Number of bytes received for the current incomplete multi-byte character.\n this.charReceived = 0;\n // Number of bytes expected for the current incomplete multi-byte character.\n this.charLength = 0;\n}\n\n// write decodes the given buffer and returns it as JS string that is\n// guaranteed to not contain any partial multi-byte characters. Any partial\n// character found at the end of the buffer is buffered up, and will be\n// returned when calling write again with the remaining bytes.\n//\n// Note: Converting a Buffer containing an orphan surrogate to a String\n// currently works, but converting a String to a Buffer (via `new Buffer`, or\n// Buffer#write) will replace incomplete surrogates with the unicode\n// replacement character. See https://codereview.chromium.org/121173009/ .\nStringDecoder.prototype.write = function(buffer) {\n var charStr = '';\n // if our last write ended with an incomplete multibyte character\n while (this.charLength) {\n // determine how many remaining bytes this buffer has to offer for this char\n var available = (buffer.length >= this.charLength - this.charReceived) ?\n this.charLength - this.charReceived :\n buffer.length;\n\n // add the new bytes to the char buffer\n buffer.copy(this.charBuffer, this.charReceived, 0, available);\n this.charReceived += available;\n\n if (this.charReceived < this.charLength) {\n // still not enough chars in this buffer? wait for more ...\n return '';\n }\n\n // remove bytes belonging to the current character from the buffer\n buffer = buffer.slice(available, buffer.length);\n\n // get the character that was split\n charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);\n\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n var charCode = charStr.charCodeAt(charStr.length - 1);\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n this.charLength += this.surrogateSize;\n charStr = '';\n continue;\n }\n this.charReceived = this.charLength = 0;\n\n // if there are no more bytes in this buffer, just emit our char\n if (buffer.length === 0) {\n return charStr;\n }\n break;\n }\n\n // determine and set charLength / charReceived\n this.detectIncompleteChar(buffer);\n\n var end = buffer.length;\n if (this.charLength) {\n // buffer the incomplete character bytes we got\n buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);\n end -= this.charReceived;\n }\n\n charStr += buffer.toString(this.encoding, 0, end);\n\n var end = charStr.length - 1;\n var charCode = charStr.charCodeAt(end);\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n var size = this.surrogateSize;\n this.charLength += size;\n this.charReceived += size;\n this.charBuffer.copy(this.charBuffer, size, 0, size);\n buffer.copy(this.charBuffer, 0, 0, size);\n return charStr.substring(0, end);\n }\n\n // or just emit the charStr\n return charStr;\n};\n\n// detectIncompleteChar determines if there is an incomplete UTF-8 character at\n// the end of the given buffer. If so, it sets this.charLength to the byte\n// length that character, and sets this.charReceived to the number of bytes\n// that are available for this character.\nStringDecoder.prototype.detectIncompleteChar = function(buffer) {\n // determine how many bytes we have to check at the end of this buffer\n var i = (buffer.length >= 3) ? 3 : buffer.length;\n\n // Figure out if one of the last i bytes of our buffer announces an\n // incomplete char.\n for (; i > 0; i--) {\n var c = buffer[buffer.length - i];\n\n // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n // 110XXXXX\n if (i == 1 && c >> 5 == 0x06) {\n this.charLength = 2;\n break;\n }\n\n // 1110XXXX\n if (i <= 2 && c >> 4 == 0x0E) {\n this.charLength = 3;\n break;\n }\n\n // 11110XXX\n if (i <= 3 && c >> 3 == 0x1E) {\n this.charLength = 4;\n break;\n }\n }\n this.charReceived = i;\n};\n\nStringDecoder.prototype.end = function(buffer) {\n var res = '';\n if (buffer && buffer.length)\n res = this.write(buffer);\n\n if (this.charReceived) {\n var cr = this.charReceived;\n var buf = this.charBuffer;\n var enc = this.encoding;\n res += buf.slice(0, cr).toString(enc);\n }\n\n return res;\n};\n\nfunction passThroughWrite(buffer) {\n return buffer.toString(this.encoding);\n}\n\nfunction utf16DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 2;\n this.charLength = this.charReceived ? 2 : 0;\n}\n\nfunction base64DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 3;\n this.charLength = this.charReceived ? 3 : 0;\n}\n\nReadable.ReadableState = ReadableState;\n\nvar debug = debuglog('stream');\ninherits$1(Readable, EventEmitter);\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') {\n return emitter.prependListener(event, fn);\n } else {\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event])\n emitter.on(event, fn);\n else if (Array.isArray(emitter._events[event]))\n emitter._events[event].unshift(fn);\n else\n emitter._events[event] = [fn, emitter._events[event]];\n }\n}\nfunction listenerCount (emitter, type) {\n return emitter.listeners(type).length;\n}\nfunction ReadableState(options, stream) {\n\n options = options || {};\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // when piping, we only care about 'readable' events that happen\n // after read()ing all the bytes and not getting any pushback.\n this.ranOut = false;\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options && typeof options.read === 'function') this._read = options.read;\n\n EventEmitter.call(this);\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n\n if (!state.objectMode && typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n }\n\n return readableAddChunk(this, state, chunk, encoding, false);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n var state = this._readableState;\n return readableAddChunk(this, state, chunk, '', true);\n};\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\nfunction readableAddChunk(stream, state, chunk, encoding, addToFront) {\n var er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (state.ended && !addToFront) {\n var e = new Error('stream.push() after EOF');\n stream.emit('error', e);\n } else if (state.endEmitted && addToFront) {\n var _e = new Error('stream.unshift() after end event');\n stream.emit('error', _e);\n } else {\n var skipAdd;\n if (state.decoder && !addToFront && !encoding) {\n chunk = state.decoder.write(chunk);\n skipAdd = !state.objectMode && chunk.length === 0;\n }\n\n if (!addToFront) state.reading = false;\n\n // Don't add to the buffer if we've decoded to an empty string chunk and\n // we're not in object mode\n if (!skipAdd) {\n // if we want the data now, just emit it.\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n }\n\n maybeReadMore(stream, state);\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n\n return needMoreData(state);\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction chunkInvalid(state, chunk) {\n var er = null;\n if (!isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false);\n\n var endFn = doEnd ? onend : cleanup;\n if (state.endEmitted) nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable) {\n debug('onunpipe');\n if (readable === src) {\n cleanup();\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', cleanup);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (listenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && src.listeners('data').length) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var _i = 0; _i < len; _i++) {\n dests[_i].emit('unpipe', this);\n }return this;\n }\n\n // try to find the right one.\n var i = indexOf(state.pipes, dest);\n if (i === -1) return this;\n\n state.pipes.splice(i, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = EventEmitter.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var state = this._readableState;\n var paused = false;\n\n var self = this;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) self.push(chunk);\n }\n\n self.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = self.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n var events = ['error', 'close', 'destroy', 'pause', 'resume'];\n forEach(events, function (ev) {\n stream.on(ev, self.emit.bind(self, ev));\n });\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n self._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return self;\n};\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction forEach(xs, f) {\n for (var i = 0, l = xs.length; i < l; i++) {\n f(xs[i], i);\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\nWritable.WritableState = WritableState;\ninherits$1(Writable, EventEmitter);\n\nfunction nop() {}\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\nfunction WritableState(options, stream) {\n Object.defineProperty(this, 'buffer', {\n get: deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')\n });\n options = options || {};\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;\n\n // cast to ints.\n this.highWaterMark = ~ ~this.highWaterMark;\n\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function writableStateGetBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\nfunction Writable(options) {\n\n // Writable ctor is applied to Duplexes, though they're not\n // instanceof Writable, they're instanceof Readable.\n if (!(this instanceof Writable) && !(this instanceof Duplex)) return new Writable(options);\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n }\n\n EventEmitter.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n nextTick(cb, er);\n}\n\n// If we get something that is not a buffer, string, null, or undefined,\n// and we're not in objectMode, then that's an error.\n// Otherwise stream chunks are all considered to be of length=1, and the\n// watermarks determine how many objects to keep in the buffer, rather than\n// how many bytes or characters.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n // Always throw error if a null is written\n // if we are not in object mode then throw\n // if it is not a buffer, string, or undefined.\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, cb) {\n chunk = decodeChunk(state, chunk, encoding);\n\n if (Buffer.isBuffer(chunk)) encoding = 'buffer';\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) nextTick(cb, er);else cb(er);\n\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n nextTick(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n while (entry) {\n buffer[count] = entry;\n entry = entry.next;\n count += 1;\n }\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequestCount = 0;\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished) {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n if (state.pendingcb === 0) {\n prefinish(stream, state);\n state.finished = true;\n stream.emit('finish');\n } else {\n prefinish(stream, state);\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function (err) {\n var entry = _this.entry;\n _this.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = _this;\n } else {\n state.corkedRequestsFree = _this;\n }\n };\n}\n\ninherits$1(Duplex, Readable);\n\nvar keys = Object.keys(Writable.prototype);\nfor (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\ninherits$1(Transform, Duplex);\n\nfunction TransformState(stream) {\n this.afterTransform = function (er, data) {\n return afterTransform(stream, er, data);\n };\n\n this.needTransform = false;\n this.transforming = false;\n this.writecb = null;\n this.writechunk = null;\n this.writeencoding = null;\n}\n\nfunction afterTransform(stream, er, data) {\n var ts = stream._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data !== null && data !== undefined) stream.push(data);\n\n cb(er);\n\n var rs = stream._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n stream._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = new TransformState(this);\n\n // when the writable side finishes, then flush out anything remaining.\n var stream = this;\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n this.once('prefinish', function () {\n if (typeof this._flush === 'function') this._flush(function (er) {\n done(stream, er);\n });else done(stream);\n });\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('Not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nfunction done(stream, er) {\n if (er) return stream.emit('error', er);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n var ws = stream._writableState;\n var ts = stream._transformState;\n\n if (ws.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (ts.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}\n\ninherits$1(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};\n\ninherits$1(Stream, EventEmitter);\nStream.Readable = Readable;\nStream.Writable = Writable;\nStream.Duplex = Duplex;\nStream.Transform = Transform;\nStream.PassThrough = PassThrough;\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EventEmitter.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EventEmitter.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n\nconst is_object = function (obj) {\n return typeof obj === \"object\" && obj !== null && !Array.isArray(obj);\n};\n\nclass CsvError extends Error {\n constructor(code, message, options, ...contexts) {\n if (Array.isArray(message)) message = message.join(\" \").trim();\n super(message);\n if (Error.captureStackTrace !== undefined) {\n Error.captureStackTrace(this, CsvError);\n }\n this.code = code;\n for (const context of contexts) {\n for (const key in context) {\n const value = context[key];\n this[key] = isBuffer(value)\n ? value.toString(options.encoding)\n : value == null\n ? value\n : JSON.parse(JSON.stringify(value));\n }\n }\n }\n}\n\nconst normalize_columns_array = function (columns) {\n const normalizedColumns = [];\n for (let i = 0, l = columns.length; i < l; i++) {\n const column = columns[i];\n if (column === undefined || column === null || column === false) {\n normalizedColumns[i] = { disabled: true };\n } else if (typeof column === \"string\" || typeof column === \"number\") {\n normalizedColumns[i] = { name: `${column}` };\n } else if (is_object(column)) {\n if (typeof column.name !== \"string\") {\n throw new CsvError(\"CSV_OPTION_COLUMNS_MISSING_NAME\", [\n \"Option columns missing name:\",\n `property \"name\" is required at position ${i}`,\n \"when column is an object literal\",\n ]);\n }\n normalizedColumns[i] = column;\n } else {\n throw new CsvError(\"CSV_INVALID_COLUMN_DEFINITION\", [\n \"Invalid column definition:\",\n \"expect a string or a literal object,\",\n `got ${JSON.stringify(column)} at position ${i}`,\n ]);\n }\n }\n return normalizedColumns;\n};\n\nclass ResizeableBuffer {\n constructor(size = 100) {\n this.size = size;\n this.length = 0;\n this.buf = Buffer.allocUnsafe(size);\n }\n prepend(val) {\n if (isBuffer(val)) {\n const length = this.length + val.length;\n if (length >= this.size) {\n this.resize();\n if (length >= this.size) {\n throw Error(\"INVALID_BUFFER_STATE\");\n }\n }\n const buf = this.buf;\n this.buf = Buffer.allocUnsafe(this.size);\n val.copy(this.buf, 0);\n buf.copy(this.buf, val.length);\n this.length += val.length;\n } else {\n const length = this.length++;\n if (length === this.size) {\n this.resize();\n }\n const buf = this.clone();\n this.buf[0] = val;\n buf.copy(this.buf, 1, 0, length);\n }\n }\n append(val) {\n const length = this.length++;\n if (length === this.size) {\n this.resize();\n }\n this.buf[length] = val;\n }\n clone() {\n return Buffer.from(this.buf.slice(0, this.length));\n }\n resize() {\n const length = this.length;\n this.size = this.size * 2;\n const buf = Buffer.allocUnsafe(this.size);\n this.buf.copy(buf, 0, 0, length);\n this.buf = buf;\n }\n toString(encoding) {\n if (encoding) {\n return this.buf.toString(encoding, 0, this.length);\n } else {\n return Uint8Array.prototype.slice.call(this.buf.slice(0, this.length));\n }\n }\n toJSON() {\n return this.toString(\"utf8\");\n }\n reset() {\n this.length = 0;\n }\n}\n\nconst init_state = function (options) {\n // ECMAScript WhiteSpace + LineTerminator codepoints, encoded under\n // `options.encoding`. Aligns trimming with `String.prototype.trim()`.\n // https://tc39.es/ecma262/#sec-white-space\n // https://tc39.es/ecma262/#sec-line-terminators\n //\n // Codepoints unrepresentable in the target encoding are dropped: Node's\n // Buffer substitutes them with `?` (0x3F), and including those would cause\n // literal `?` bytes in the input to be trimmed under `latin1`/`ascii`.\n const timchars = [\n // Basic Latin\n 0x0020, // [Space](https://www.fileformat.info/info/unicode/char/0020/index.htm)\n 0x0009, // [CHARACTER TABULATION (HT)](https://www.fileformat.info/info/unicode/char/0009/index.htm)\n 0x000a, // [LINE FEED (LF)](https://www.fileformat.info/info/unicode/char/000a/index.htm)\n 0x000d, // [CARRIAGE RETURN (CR)](https://www.fileformat.info/info/unicode/char/000d/index.htm)\n 0x000c, // [FORM FEED (FF)](https://www.fileformat.info/info/unicode/char/000c/index.htm)\n 0x000b, // [LINE TABULATION (VT)](https://www.fileformat.info/info/unicode/char/000b/index.htm)\n // Latin-1 Supplement\n 0x00a0, // [NO-BREAK SPACE (NBSP)](https://www.fileformat.info/info/unicode/char/00a0/index.htm)\n // Ogham\n 0x1680, // [OGHAM SPACE MARK](https://www.fileformat.info/info/unicode/char/1680/index.htm)\n // General Punctuation\n 0x2000, // [EN QUAD](https://www.fileformat.info/info/unicode/char/2000/index.htm)\n 0x2001, // [EM QUAD](https://www.fileformat.info/info/unicode/char/2001/index.htm)\n 0x2002, // [EN SPACE](https://www.fileformat.info/info/unicode/char/2002/index.htm)\n 0x2003, // [EM SPACE](https://www.fileformat.info/info/unicode/char/2003/index.htm)\n 0x2004, // [THREE-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2004/index.htm)\n 0x2005, // [FOUR-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2005/index.htm)\n 0x2006, // [SIX-PER-EM SPACE](https://www.fileformat.info/info/unicode/char/2006/index.htm)\n 0x2007, // [FIGURE SPACE](https://www.fileformat.info/info/unicode/char/2007/index.htm)\n 0x2008, // [PUNCTUATION SPACE](https://www.fileformat.info/info/unicode/char/2008/index.htm)\n 0x2009, // [THIN SPACE](https://www.fileformat.info/info/unicode/char/2009/index.htm)\n 0x200a, // [HAIR SPACE](https://www.fileformat.info/info/unicode/char/200a/index.htm)\n 0x2028, // [LINE SEPARATOR](https://www.fileformat.info/info/unicode/char/2028/index.htm)\n 0x2029, // [PARAGRAPH SEPARATOR](https://www.fileformat.info/info/unicode/char/2029/index.htm)\n 0x202f, // [NARROW NO-BREAK SPACE (NNBSP)](https://www.fileformat.info/info/unicode/char/202f/index.htm)\n 0x205f, // [MEDIUM MATHEMATICAL SPACE (MMSP)](https://www.fileformat.info/info/unicode/char/205f/index.htm)\n 0x3000, // [IDEOGRAPHIC SPACE](https://www.fileformat.info/info/unicode/char/3000/index.htm)\n 0xfeff, // [ZERO WIDTH NO-BREAK SPACE (BOM)](https://www.fileformat.info/info/unicode/char/feff/index.htm)\n ].reduce((acc, codepoint) => {\n const encoded = Buffer.from(\n String.fromCharCode(codepoint),\n options.encoding,\n );\n if (codepoint !== 0x3f && encoded.length === 1 && encoded[0] === 0x3f) {\n return acc;\n }\n acc.push(encoded);\n return acc;\n }, []);\n // First-byte lookup table for `__isCharTrimable`. Non-whitespace bytes\n // (the common case) bail out in O(1) without scanning every timchar.\n const timcharFirstBytes = new Uint8Array(256);\n for (const t of timchars) timcharFirstBytes[t[0]] = 1;\n return {\n bomSkipped: false,\n bufBytesStart: 0,\n castField: options.cast_function,\n commenting: false,\n delimiterBufPrevious: undefined,\n delimiterDiscovered: false,\n // Current error encountered by a record\n error: undefined,\n enabled: options.from_line === 1,\n escaping: false,\n escapeIsQuote:\n isBuffer(options.escape) &&\n isBuffer(options.quote) &&\n Buffer.compare(options.escape, options.quote) === 0,\n // columns can be `false`, `true`, `Array`\n expectedRecordLength: Array.isArray(options.columns)\n ? options.columns.length\n : undefined,\n field: new ResizeableBuffer(20),\n firstLineToHeaders: options.cast_first_line_to_header,\n needMoreDataSize: Math.max(\n // Skip if the remaining buffer smaller than comment\n options.comment !== null ? options.comment.length : 0,\n // Skip if the remaining buffer can be delimiter\n ...(options.delimiter\n ? options.delimiter.map((delimiter) => delimiter.length)\n : []),\n // Auto discovery of delimiter is limited to 1 character\n options.delimiter_auto ? 1 : 0,\n // Skip if the remaining buffer can be escape sequence\n options.quote !== null ? options.quote.length : 0,\n // Skip if the remaining buffer can be a multi-byte trim character\n ...timchars.map((t) => t.length),\n ),\n previousBuf: undefined,\n quoting: false,\n stop: false,\n rawBuffer: new ResizeableBuffer(100),\n record: [],\n recordHasError: false,\n record_length: 0,\n recordDelimiterMaxLength:\n options.record_delimiter.length === 0\n ? 0\n : Math.max(...options.record_delimiter.map((v) => v.length)),\n trimChars: [\n Buffer.from(\" \", options.encoding)[0],\n Buffer.from(\"\\t\", options.encoding)[0],\n ],\n wasQuoting: false,\n wasRowDelimiter: false,\n timchars: timchars,\n timcharFirstBytes: timcharFirstBytes,\n };\n};\n\nconst underscore = function (str) {\n return str.replace(/([A-Z])/g, function (_, match) {\n return \"_\" + match.toLowerCase();\n });\n};\n\nconst normalize_options = function (opts) {\n const options = {};\n // Merge with user options\n for (const opt in opts) {\n options[underscore(opt)] = opts[opt];\n }\n // Normalize option `encoding`\n // Note: defined first because other options depends on it\n // to convert chars/strings into buffers.\n if (options.encoding === undefined || options.encoding === true) {\n options.encoding = \"utf8\";\n } else if (options.encoding === null || options.encoding === false) {\n options.encoding = null;\n } else if (\n typeof options.encoding !== \"string\" &&\n options.encoding !== null\n ) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_ENCODING\",\n [\n \"Invalid option encoding:\",\n \"encoding must be a string or null to return a buffer,\",\n `got ${JSON.stringify(options.encoding)}`,\n ],\n options,\n );\n }\n // Normalize option `bom`\n if (\n options.bom === undefined ||\n options.bom === null ||\n options.bom === false\n ) {\n options.bom = false;\n } else if (options.bom !== true) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_BOM\",\n [\n \"Invalid option bom:\",\n \"bom must be true,\",\n `got ${JSON.stringify(options.bom)}`,\n ],\n options,\n );\n }\n // Normalize option `cast`\n options.cast_function = null;\n if (\n options.cast === undefined ||\n options.cast === null ||\n options.cast === false ||\n options.cast === \"\"\n ) {\n options.cast = undefined;\n } else if (typeof options.cast === \"function\") {\n options.cast_function = options.cast;\n options.cast = true;\n } else if (options.cast !== true) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_CAST\",\n [\n \"Invalid option cast:\",\n \"cast must be true or a function,\",\n `got ${JSON.stringify(options.cast)}`,\n ],\n options,\n );\n }\n // Normalize option `cast_date`\n if (\n options.cast_date === undefined ||\n options.cast_date === null ||\n options.cast_date === false ||\n options.cast_date === \"\"\n ) {\n options.cast_date = false;\n } else if (options.cast_date === true) {\n options.cast_date = function (value) {\n const date = Date.parse(value);\n return !isNaN(date) ? new Date(date) : value;\n };\n } else if (typeof options.cast_date !== \"function\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_CAST_DATE\",\n [\n \"Invalid option cast_date:\",\n \"cast_date must be true or a function,\",\n `got ${JSON.stringify(options.cast_date)}`,\n ],\n options,\n );\n }\n // Normalize option `columns`\n options.cast_first_line_to_header = undefined;\n if (options.columns === true) {\n // Fields in the first line are converted as-is to columns\n options.cast_first_line_to_header = undefined;\n } else if (typeof options.columns === \"function\") {\n options.cast_first_line_to_header = options.columns;\n options.columns = true;\n } else if (Array.isArray(options.columns)) {\n options.columns = normalize_columns_array(options.columns);\n } else if (\n options.columns === undefined ||\n options.columns === null ||\n options.columns === false\n ) {\n options.columns = false;\n } else {\n throw new CsvError(\n \"CSV_INVALID_OPTION_COLUMNS\",\n [\n \"Invalid option columns:\",\n \"expect an array, a function or true,\",\n `got ${JSON.stringify(options.columns)}`,\n ],\n options,\n );\n }\n // Normalize option `group_columns_by_name`\n if (\n options.group_columns_by_name === undefined ||\n options.group_columns_by_name === null ||\n options.group_columns_by_name === false\n ) {\n options.group_columns_by_name = false;\n } else if (options.group_columns_by_name !== true) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME\",\n [\n \"Invalid option group_columns_by_name:\",\n \"expect an boolean,\",\n `got ${JSON.stringify(options.group_columns_by_name)}`,\n ],\n options,\n );\n } else if (options.columns === false) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_GROUP_COLUMNS_BY_NAME\",\n [\n \"Invalid option group_columns_by_name:\",\n \"the `columns` mode must be activated.\",\n ],\n options,\n );\n }\n // Normalize option `comment`\n if (\n options.comment === undefined ||\n options.comment === null ||\n options.comment === false ||\n options.comment === \"\"\n ) {\n options.comment = null;\n } else {\n if (typeof options.comment === \"string\") {\n options.comment = Buffer.from(options.comment, options.encoding);\n }\n if (!isBuffer(options.comment)) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_COMMENT\",\n [\n \"Invalid option comment:\",\n \"comment must be a buffer or a string,\",\n `got ${JSON.stringify(options.comment)}`,\n ],\n options,\n );\n }\n }\n // Normalize option `comment_no_infix`\n if (\n options.comment_no_infix === undefined ||\n options.comment_no_infix === null ||\n options.comment_no_infix === false\n ) {\n options.comment_no_infix = false;\n } else if (options.comment_no_infix !== true) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_COMMENT\",\n [\n \"Invalid option comment_no_infix:\",\n \"value must be a boolean,\",\n `got ${JSON.stringify(options.comment_no_infix)}`,\n ],\n options,\n );\n }\n // Normalize option `delimiter_auto`\n if (\n options.delimiter_auto === undefined ||\n options.delimiter_auto === null ||\n options.delimiter_auto === false\n ) {\n options.delimiter_auto = false;\n } else if (options.delimiter_auto === true) {\n options.delimiter_auto = {};\n } else if (!is_object(options.delimiter_auto)) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"delimiter_auto must be a boolean or a configuration object,\",\n `got ${JSON.stringify(options.delimiter_auto)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto) {\n if (options.delimiter_auto.preferred === undefined)\n options.delimiter_auto.preferred = {\n [\",\".charCodeAt(0)]: 1.8,\n [\"\\t\".charCodeAt(0)]: 1.8,\n [\";\".charCodeAt(0)]: 1.6,\n [\" \".charCodeAt(0)]: 1.6,\n [\":\".charCodeAt(0)]: 1.5,\n [\".\".charCodeAt(0)]: 1.4,\n [\"/\".charCodeAt(0)]: 1.4,\n };\n else if (!is_object(options.delimiter_auto.preferred)) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"preferred must be an object,\",\n `got ${JSON.stringify(options.delimiter_auto.preferred)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto.score === undefined)\n options.delimiter_auto.score = (info, options) => {\n return (\n (info.total - info.std) * (options.preferred[info.char_code] || 1)\n );\n };\n else if (typeof options.delimiter_auto.score !== \"function\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"score must be a function,\",\n `got ${JSON.stringify(options.delimiter_auto.score)}`,\n ],\n options,\n );\n }\n if (options.delimiter_auto.size === undefined)\n options.delimiter_auto.size = 2048;\n else if (typeof options.delimiter_auto.size !== \"number\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_DELIMITER_AUTO\",\n [\n \"Invalid option delimiter_auto:\",\n \"size must be a number,\",\n `got ${JSON.stringify(options.delimiter_auto.size)}`,\n ],\n options,\n );\n }\n }\n // Normalize option `delimiter`\n const delimiter_json = JSON.stringify(options.delimiter);\n if (options.delimiter_auto !== false) {\n options.delimiter = [];\n }\n if (!Array.isArray(options.delimiter)) {\n if (\n options.delimiter === undefined ||\n options.delimiter === null ||\n options.delimiter === false\n ) {\n options.delimiter = Buffer.from(\",\", options.encoding);\n }\n options.delimiter = [options.delimiter];\n }\n options.delimiter = options.delimiter.map(function (delimiter) {\n if (typeof delimiter === \"string\") {\n delimiter = Buffer.from(delimiter, options.encoding);\n }\n if (!isBuffer(delimiter) || delimiter.length === 0) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_DELIMITER\",\n [\n \"Invalid option delimiter:\",\n \"delimiter must be a non empty string or buffer or array of string|buffer,\",\n `got ${delimiter_json}`,\n ],\n options,\n );\n }\n return delimiter;\n });\n // Normalize option `escape`\n if (options.escape === undefined || options.escape === true) {\n options.escape = Buffer.from('\"', options.encoding);\n } else if (typeof options.escape === \"string\") {\n options.escape = Buffer.from(options.escape, options.encoding);\n } else if (options.escape === null || options.escape === false) {\n options.escape = null;\n }\n if (options.escape !== null) {\n if (!isBuffer(options.escape)) {\n throw new Error(\n `Invalid Option: escape must be a buffer, a string or a boolean, got ${JSON.stringify(options.escape)}`,\n );\n }\n }\n // Normalize option `from`\n if (options.from === undefined || options.from === null) {\n options.from = 1;\n } else {\n if (typeof options.from === \"string\" && /\\d+/.test(options.from)) {\n options.from = parseInt(options.from);\n }\n if (Number.isInteger(options.from)) {\n if (options.from < 0) {\n throw new Error(\n `Invalid Option: from must be a positive integer, got ${JSON.stringify(opts.from)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: from must be an integer, got ${JSON.stringify(options.from)}`,\n );\n }\n }\n // Normalize option `from_line`\n if (options.from_line === undefined || options.from_line === null) {\n options.from_line = 1;\n } else {\n if (\n typeof options.from_line === \"string\" &&\n /\\d+/.test(options.from_line)\n ) {\n options.from_line = parseInt(options.from_line);\n }\n if (Number.isInteger(options.from_line)) {\n if (options.from_line <= 0) {\n throw new Error(\n `Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(opts.from_line)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: from_line must be an integer, got ${JSON.stringify(opts.from_line)}`,\n );\n }\n }\n // Normalize options `ignore_last_delimiters`\n if (\n options.ignore_last_delimiters === undefined ||\n options.ignore_last_delimiters === null\n ) {\n options.ignore_last_delimiters = false;\n } else if (typeof options.ignore_last_delimiters === \"number\") {\n options.ignore_last_delimiters = Math.floor(options.ignore_last_delimiters);\n if (options.ignore_last_delimiters === 0) {\n options.ignore_last_delimiters = false;\n }\n } else if (typeof options.ignore_last_delimiters !== \"boolean\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_IGNORE_LAST_DELIMITERS\",\n [\n \"Invalid option `ignore_last_delimiters`:\",\n \"the value must be a boolean value or an integer,\",\n `got ${JSON.stringify(options.ignore_last_delimiters)}`,\n ],\n options,\n );\n }\n if (options.ignore_last_delimiters === true && options.columns === false) {\n throw new CsvError(\n \"CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS\",\n [\n \"The option `ignore_last_delimiters`\",\n \"requires the activation of the `columns` option\",\n ],\n options,\n );\n }\n // Normalize option `info`\n if (\n options.info === undefined ||\n options.info === null ||\n options.info === false\n ) {\n options.info = false;\n } else if (options.info !== true) {\n throw new Error(\n `Invalid Option: info must be true, got ${JSON.stringify(options.info)}`,\n );\n }\n // Normalize option `max_record_size`\n if (\n options.max_record_size === undefined ||\n options.max_record_size === null ||\n options.max_record_size === false\n ) {\n options.max_record_size = 0;\n } else if (\n Number.isInteger(options.max_record_size) &&\n options.max_record_size >= 0\n ) ; else if (\n typeof options.max_record_size === \"string\" &&\n /\\d+/.test(options.max_record_size)\n ) {\n options.max_record_size = parseInt(options.max_record_size);\n } else {\n throw new Error(\n `Invalid Option: max_record_size must be a positive integer, got ${JSON.stringify(options.max_record_size)}`,\n );\n }\n // Normalize option `objname`\n if (\n options.objname === undefined ||\n options.objname === null ||\n options.objname === false\n ) {\n options.objname = undefined;\n } else if (isBuffer(options.objname)) {\n if (options.objname.length === 0) {\n throw new Error(`Invalid Option: objname must be a non empty buffer`);\n }\n if (options.encoding === null) ; else {\n options.objname = options.objname.toString(options.encoding);\n }\n } else if (typeof options.objname === \"string\") {\n if (options.objname.length === 0) {\n throw new Error(`Invalid Option: objname must be a non empty string`);\n }\n // Great, nothing to do\n } else if (typeof options.objname === \"number\") ; else {\n throw new Error(\n `Invalid Option: objname must be a string or a buffer, got ${options.objname}`,\n );\n }\n if (options.objname !== undefined) {\n if (typeof options.objname === \"number\") {\n if (options.columns !== false) {\n throw Error(\n \"Invalid Option: objname index cannot be combined with columns or be defined as a field\",\n );\n }\n } else {\n // A string or a buffer\n if (options.columns === false) {\n throw Error(\n \"Invalid Option: objname field must be combined with columns or be defined as an index\",\n );\n }\n }\n }\n // Normalize option `on_record`\n if (options.on_record === undefined || options.on_record === null) {\n options.on_record = undefined;\n } else if (typeof options.on_record !== \"function\") {\n throw new CsvError(\n \"CSV_INVALID_OPTION_ON_RECORD\",\n [\n \"Invalid option `on_record`:\",\n \"expect a function,\",\n `got ${JSON.stringify(options.on_record)}`,\n ],\n options,\n );\n }\n // Normalize option `on_skip`\n // options.on_skip ??= (err, chunk) => {\n // this.emit('skip', err, chunk);\n // };\n if (\n options.on_skip !== undefined &&\n options.on_skip !== null &&\n typeof options.on_skip !== \"function\"\n ) {\n throw new Error(\n `Invalid Option: on_skip must be a function, got ${JSON.stringify(options.on_skip)}`,\n );\n }\n // Normalize option `quote`\n if (\n options.quote === null ||\n options.quote === false ||\n options.quote === \"\"\n ) {\n options.quote = null;\n } else {\n if (options.quote === undefined || options.quote === true) {\n options.quote = Buffer.from('\"', options.encoding);\n } else if (typeof options.quote === \"string\") {\n options.quote = Buffer.from(options.quote, options.encoding);\n }\n if (!isBuffer(options.quote)) {\n throw new Error(\n `Invalid Option: quote must be a buffer or a string, got ${JSON.stringify(options.quote)}`,\n );\n }\n }\n // Normalize option `raw`\n if (\n options.raw === undefined ||\n options.raw === null ||\n options.raw === false\n ) {\n options.raw = false;\n } else if (options.raw !== true) {\n throw new Error(\n `Invalid Option: raw must be true, got ${JSON.stringify(options.raw)}`,\n );\n }\n // Normalize option `record_delimiter`\n if (options.record_delimiter === undefined) {\n options.record_delimiter = [];\n } else if (\n typeof options.record_delimiter === \"string\" ||\n isBuffer(options.record_delimiter)\n ) {\n if (options.record_delimiter.length === 0) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a non empty string or buffer,\",\n `got ${JSON.stringify(options.record_delimiter)}`,\n ],\n options,\n );\n }\n options.record_delimiter = [options.record_delimiter];\n } else if (!Array.isArray(options.record_delimiter)) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a string, a buffer or array of string|buffer,\",\n `got ${JSON.stringify(options.record_delimiter)}`,\n ],\n options,\n );\n }\n options.record_delimiter = options.record_delimiter.map(function (rd, i) {\n if (typeof rd !== \"string\" && !isBuffer(rd)) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a string, a buffer or array of string|buffer\",\n `at index ${i},`,\n `got ${JSON.stringify(rd)}`,\n ],\n options,\n );\n } else if (rd.length === 0) {\n throw new CsvError(\n \"CSV_INVALID_OPTION_RECORD_DELIMITER\",\n [\n \"Invalid option `record_delimiter`:\",\n \"value must be a non empty string or buffer\",\n `at index ${i},`,\n `got ${JSON.stringify(rd)}`,\n ],\n options,\n );\n }\n if (typeof rd === \"string\") {\n rd = Buffer.from(rd, options.encoding);\n }\n return rd;\n });\n // Normalize option `relax_column_count`\n if (typeof options.relax_column_count === \"boolean\") ; else if (\n options.relax_column_count === undefined ||\n options.relax_column_count === null\n ) {\n options.relax_column_count = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count must be a boolean, got ${JSON.stringify(options.relax_column_count)}`,\n );\n }\n if (typeof options.relax_column_count_less === \"boolean\") ; else if (\n options.relax_column_count_less === undefined ||\n options.relax_column_count_less === null\n ) {\n options.relax_column_count_less = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count_less must be a boolean, got ${JSON.stringify(options.relax_column_count_less)}`,\n );\n }\n if (typeof options.relax_column_count_more === \"boolean\") ; else if (\n options.relax_column_count_more === undefined ||\n options.relax_column_count_more === null\n ) {\n options.relax_column_count_more = false;\n } else {\n throw new Error(\n `Invalid Option: relax_column_count_more must be a boolean, got ${JSON.stringify(options.relax_column_count_more)}`,\n );\n }\n // Normalize option `relax_quotes`\n if (typeof options.relax_quotes === \"boolean\") ; else if (\n options.relax_quotes === undefined ||\n options.relax_quotes === null\n ) {\n options.relax_quotes = false;\n } else {\n throw new Error(\n `Invalid Option: relax_quotes must be a boolean, got ${JSON.stringify(options.relax_quotes)}`,\n );\n }\n // Normalize option `skip_empty_lines`\n if (typeof options.skip_empty_lines === \"boolean\") ; else if (\n options.skip_empty_lines === undefined ||\n options.skip_empty_lines === null\n ) {\n options.skip_empty_lines = false;\n } else {\n throw new Error(\n `Invalid Option: skip_empty_lines must be a boolean, got ${JSON.stringify(options.skip_empty_lines)}`,\n );\n }\n // Normalize option `skip_records_with_empty_values`\n if (typeof options.skip_records_with_empty_values === \"boolean\") ; else if (\n options.skip_records_with_empty_values === undefined ||\n options.skip_records_with_empty_values === null\n ) {\n options.skip_records_with_empty_values = false;\n } else {\n throw new Error(\n `Invalid Option: skip_records_with_empty_values must be a boolean, got ${JSON.stringify(options.skip_records_with_empty_values)}`,\n );\n }\n // Normalize option `skip_records_with_error`\n if (typeof options.skip_records_with_error === \"boolean\") ; else if (\n options.skip_records_with_error === undefined ||\n options.skip_records_with_error === null\n ) {\n options.skip_records_with_error = false;\n } else {\n throw new Error(\n `Invalid Option: skip_records_with_error must be a boolean, got ${JSON.stringify(options.skip_records_with_error)}`,\n );\n }\n // Normalize option `rtrim`\n if (\n options.rtrim === undefined ||\n options.rtrim === null ||\n options.rtrim === false\n ) {\n options.rtrim = false;\n } else if (options.rtrim !== true) {\n throw new Error(\n `Invalid Option: rtrim must be a boolean, got ${JSON.stringify(options.rtrim)}`,\n );\n }\n // Normalize option `ltrim`\n if (\n options.ltrim === undefined ||\n options.ltrim === null ||\n options.ltrim === false\n ) {\n options.ltrim = false;\n } else if (options.ltrim !== true) {\n throw new Error(\n `Invalid Option: ltrim must be a boolean, got ${JSON.stringify(options.ltrim)}`,\n );\n }\n // Normalize option `trim`\n if (\n options.trim === undefined ||\n options.trim === null ||\n options.trim === false\n ) {\n options.trim = false;\n } else if (options.trim !== true) {\n throw new Error(\n `Invalid Option: trim must be a boolean, got ${JSON.stringify(options.trim)}`,\n );\n }\n // Normalize options `trim`, `ltrim` and `rtrim`\n if (options.trim === true && opts.ltrim !== false) {\n options.ltrim = true;\n } else if (options.ltrim !== true) {\n options.ltrim = false;\n }\n if (options.trim === true && opts.rtrim !== false) {\n options.rtrim = true;\n } else if (options.rtrim !== true) {\n options.rtrim = false;\n }\n // Normalize option `to`\n if (options.to === undefined || options.to === null) {\n options.to = -1;\n } else if (options.to !== -1) {\n if (typeof options.to === \"string\" && /\\d+/.test(options.to)) {\n options.to = parseInt(options.to);\n }\n if (Number.isInteger(options.to)) {\n if (options.to <= 0) {\n throw new Error(\n `Invalid Option: to must be a positive integer greater than 0, got ${JSON.stringify(opts.to)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: to must be an integer, got ${JSON.stringify(opts.to)}`,\n );\n }\n }\n // Normalize option `to_line`\n if (options.to_line === undefined || options.to_line === null) {\n options.to_line = -1;\n } else if (options.to_line !== -1) {\n if (typeof options.to_line === \"string\" && /\\d+/.test(options.to_line)) {\n options.to_line = parseInt(options.to_line);\n }\n if (Number.isInteger(options.to_line)) {\n if (options.to_line <= 0) {\n throw new Error(\n `Invalid Option: to_line must be a positive integer greater than 0, got ${JSON.stringify(opts.to_line)}`,\n );\n }\n } else {\n throw new Error(\n `Invalid Option: to_line must be an integer, got ${JSON.stringify(opts.to_line)}`,\n );\n }\n }\n return options;\n};\n\n// Discussed in [issue #400](https://github.com/adaltas/node-csv/issues/400)\n// See https://github.com/python/cpython/blob/ea1b1c579f600cc85d145c60862b2e6b98701b24/Lib/csv.py#L349\nconst delimiter_discover = function (records, options) {\n // Normalize the configuration\n if (!options) {\n ({ delimiter_auto: options } = normalize_options({ delimiter_auto: true }));\n }\n // Convert String to Buffer\n if (typeof records === \"string\") {\n records = Buffer.from(records);\n }\n // Convert Buffer to an array of records\n if (isBuffer(records)) {\n records = ((data) => {\n const records = [];\n const parser = transform({ delimiter: [] });\n const push = (record) => records.push(record);\n const close = () => {};\n const error = parser.parse(data, true, push, close);\n if (error !== undefined) throw error;\n return records;\n })(records);\n }\n // Info array initialization, 127 entries, one per char code\n const info = Array(127)\n .fill()\n .map(() => ({ lines: [] }));\n // Traverse each records, count occurences per char code\n records.map(([record], line) => {\n for (let i = 0, l = record.length; i < l; i++) {\n // Count the character frequency\n const code = record.charCodeAt(i);\n if (info[code].lines[line] === undefined) info[code].lines[line] = 0;\n info[code].lines[line]++;\n }\n });\n // Traverse each char code, compute the score\n info.map((info, i) => {\n info.char_code = i;\n info.std = std(info.lines);\n info.total = info.lines.reduce((acc, val) => acc + val, 0);\n info.preferred = !!options.preferred[i];\n info.score = options.score(info, options);\n });\n // Extract the dominant character\n const result = info.reduce(\n (acc, info) => (acc.score > info.score ? acc : info),\n {},\n );\n return String.fromCharCode(result.char_code);\n};\n\nconst std = function (array) {\n const n = array.length;\n if (n === 0) return 0;\n const mean = array.reduce((a, b) => a + b) / n;\n return Math.sqrt(\n array.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n,\n );\n};\n\nconst isRecordEmpty = function (record) {\n return record.every(\n (field) =>\n field == null || (field.toString && field.toString().trim() === \"\"),\n );\n};\n\nconst cr = 13; // `\\r`, carriage return, 0x0D in hexadécimal, 13 in decimal\nconst nl = 10; // `\\n`, newline, 0x0A in hexadecimal, 10 in decimal\n\nconst boms = {\n // Note, the following are equals:\n // Buffer.from(\"\\ufeff\")\n // Buffer.from([239, 187, 191])\n // Buffer.from('EFBBBF', 'hex')\n utf8: Buffer.from([239, 187, 191]),\n // Note, the following are equals:\n // Buffer.from \"\\ufeff\", 'utf16le\n // Buffer.from([255, 254])\n utf16le: Buffer.from([255, 254]),\n};\n\nconst transform = function (original_options = {}) {\n const info = {\n bytes: 0,\n bytes_records: 0,\n comment_lines: 0,\n empty_lines: 0,\n invalid_field_length: 0,\n lines: 1,\n records: 0,\n };\n const options = normalize_options(original_options);\n return {\n info: info,\n original_options: original_options,\n options: options,\n state: init_state(options),\n __needMoreData: function (i, bufLen, end) {\n if (end) return false;\n const { encoding, escape, quote } = this.options;\n const { quoting, needMoreDataSize, recordDelimiterMaxLength } =\n this.state;\n const numOfCharLeft = bufLen - i - 1;\n const requiredLength = Math.max(\n needMoreDataSize,\n // Skip if the remaining buffer smaller than record delimiter\n // If \"record_delimiter\" is yet to be discovered:\n // 1. It is equals to `[]` and \"recordDelimiterMaxLength\" equals `0`\n // 2. We set the length to windows line ending in the current encoding\n // Note, that encoding is known from user or bom discovery at that point\n // recordDelimiterMaxLength,\n recordDelimiterMaxLength === 0\n ? Buffer.from(\"\\r\\n\", encoding).length\n : recordDelimiterMaxLength,\n // Skip if remaining buffer can be an escaped quote\n quoting ? (escape === null ? 0 : escape.length) + quote.length : 0,\n // Skip if remaining buffer can be record delimiter following the closing quote\n quoting ? quote.length + recordDelimiterMaxLength : 0,\n );\n return numOfCharLeft < requiredLength;\n },\n // Central parser implementation\n parse: function (nextBuf, end, push, close) {\n const {\n bom,\n comment_no_infix,\n delimiter_auto,\n encoding,\n from_line,\n ltrim,\n max_record_size,\n raw,\n relax_quotes,\n rtrim,\n skip_empty_lines,\n to,\n to_line,\n } = this.options;\n let { comment, escape, quote, record_delimiter } = this.options;\n const {\n bomSkipped,\n delimiterDiscovered,\n delimiterBufPrevious,\n rawBuffer,\n escapeIsQuote,\n } = this.state;\n // Automatic delimiter discovery\n if (!delimiterDiscovered && delimiter_auto) {\n let delimiterBuf;\n if (delimiterBufPrevious === undefined) {\n delimiterBuf = nextBuf;\n } else if (\n delimiterBufPrevious !== undefined &&\n nextBuf === undefined\n ) {\n delimiterBuf = delimiterBufPrevious;\n } else {\n delimiterBuf = Buffer.concat([delimiterBufPrevious, nextBuf]);\n }\n // Ensure that nextBuf is not concatenated a second time during buffer reconciliation\n nextBuf = undefined;\n // this.delimiterBufPrevious = delimiterBuf;\n if (end || delimiterBuf.length > delimiter_auto.size) {\n this.options.delimiter = [\n Buffer.from(\n delimiter_discover(delimiterBuf, this.options.delimiter_auto),\n ),\n ];\n this.state.previousBuf = delimiterBuf;\n this.state.delimiterBufPrevious = undefined;\n this.state.delimiterDiscovered = true;\n } else {\n this.state.delimiterBufPrevious = delimiterBuf;\n return;\n }\n }\n // Previous buffers reconciliation\n const { previousBuf } = this.state;\n let buf;\n if (previousBuf === undefined) {\n if (nextBuf === undefined) {\n // Handle empty string\n close();\n return;\n } else {\n buf = nextBuf;\n }\n } else if (previousBuf !== undefined && nextBuf === undefined) {\n buf = previousBuf;\n } else {\n buf = Buffer.concat([previousBuf, nextBuf]);\n }\n // Handle UTF BOM\n if (bomSkipped === false) {\n if (bom === false) {\n this.state.bomSkipped = true;\n } else if (buf.length < 3) {\n // No enough data\n if (end === false) {\n // Wait for more data\n this.state.previousBuf = buf;\n return;\n }\n } else {\n for (const encoding in boms) {\n if (boms[encoding].compare(buf, 0, boms[encoding].length) === 0) {\n // Skip BOM\n const bomLength = boms[encoding].length;\n this.state.bufBytesStart += bomLength;\n buf = buf.slice(bomLength);\n // Renormalize original options with the new encoding\n const options = normalize_options({\n ...this.original_options,\n encoding: encoding,\n });\n // Properties are merged with the existing options instance\n for (const key in options) {\n this.options[key] = options[key];\n }\n // Options will re-evaluate the Buffer with the new encoding\n ({ comment, escape, quote } = this.options);\n break;\n }\n }\n this.state.bomSkipped = true;\n }\n }\n const bufLen = buf.length;\n let pos;\n for (pos = 0; pos < bufLen; pos++) {\n // Ensure we get enough space to look ahead\n // There should be a way to move this out of the loop\n if (this.__needMoreData(pos, bufLen, end)) {\n break;\n }\n if (this.state.wasRowDelimiter === true) {\n this.info.lines++;\n this.state.wasRowDelimiter = false;\n }\n if (to_line !== -1 && this.info.lines > to_line) {\n this.state.stop = true;\n close();\n return;\n }\n // Auto discovery of record_delimiter, unix, mac and windows supported\n if (this.state.quoting === false && record_delimiter.length === 0) {\n const record_delimiterCount = this.__autoDiscoverRecordDelimiter(\n buf,\n pos,\n );\n if (record_delimiterCount) {\n record_delimiter = this.options.record_delimiter;\n }\n }\n const chr = buf[pos];\n if (raw === true) {\n rawBuffer.append(chr);\n }\n if (\n (chr === cr || chr === nl) &&\n this.state.wasRowDelimiter === false\n ) {\n this.state.wasRowDelimiter = true;\n }\n // Previous char was a valid escape char\n // treat the current char as a regular char\n if (this.state.escaping === true) {\n this.state.escaping = false;\n } else {\n // Escape is only active inside quoted fields\n // We are quoting, the char is an escape chr and there is a chr to escape\n // if(escape !== null && this.state.quoting === true && chr === escape && pos + 1 < bufLen){\n if (\n escape !== null &&\n this.state.quoting === true &&\n this.__isEscape(buf, pos, chr) &&\n pos + escape.length < bufLen\n ) {\n if (escapeIsQuote) {\n if (this.__isQuote(buf, pos + escape.length)) {\n this.state.escaping = true;\n pos += escape.length - 1;\n continue;\n }\n } else {\n this.state.escaping = true;\n pos += escape.length - 1;\n continue;\n }\n }\n // Not currently escaping and chr is a quote\n // TODO: need to compare bytes instead of single char\n if (this.state.commenting === false && this.__isQuote(buf, pos)) {\n if (this.state.quoting === true) {\n const nextChr = buf[pos + quote.length];\n const isNextChrTrimable =\n rtrim && this.__isCharTrimable(buf, pos + quote.length);\n const isNextChrComment =\n comment !== null &&\n this.__compareBytes(comment, buf, pos + quote.length, nextChr);\n const isNextChrDelimiter = this.__isDelimiter(\n buf,\n pos + quote.length,\n nextChr,\n );\n const isNextChrRecordDelimiter =\n record_delimiter.length === 0\n ? this.__autoDiscoverRecordDelimiter(buf, pos + quote.length)\n : this.__isRecordDelimiter(nextChr, buf, pos + quote.length);\n // Escape a quote\n // Treat next char as a regular character\n if (\n escape !== null &&\n this.__isEscape(buf, pos, chr) &&\n this.__isQuote(buf, pos + escape.length)\n ) {\n pos += escape.length - 1;\n } else if (\n !nextChr ||\n isNextChrDelimiter ||\n isNextChrRecordDelimiter ||\n isNextChrComment ||\n isNextChrTrimable\n ) {\n this.state.quoting = false;\n this.state.wasQuoting = true;\n pos += quote.length - 1;\n continue;\n } else if (relax_quotes === false) {\n const err = this.__error(\n new CsvError(\n \"CSV_INVALID_CLOSING_QUOTE\",\n [\n \"Invalid Closing Quote:\",\n `got \"${String.fromCharCode(nextChr)}\"`,\n `at line ${this.info.lines}`,\n \"instead of delimiter, record delimiter, trimable character\",\n \"(if activated) or comment\",\n ],\n this.options,\n this.__infoField(),\n ),\n );\n if (err !== undefined) return err;\n } else {\n this.state.quoting = false;\n this.state.wasQuoting = true;\n this.state.field.prepend(quote);\n pos += quote.length - 1;\n }\n } else {\n if (this.state.field.length !== 0) {\n // In relax_quotes mode, treat opening quote preceded by chrs as regular\n if (relax_quotes === false) {\n const info = this.__infoField();\n const bom = Object.keys(boms)\n .map((b) =>\n boms[b].equals(this.state.field.toString()) ? b : false,\n )\n .filter(Boolean)[0];\n const err = this.__error(\n new CsvError(\n \"INVALID_OPENING_QUOTE\",\n [\n \"Invalid Opening Quote:\",\n `a quote is found on field ${JSON.stringify(info.column)} at line ${info.lines}, value is ${JSON.stringify(this.state.field.toString(encoding))}`,\n bom ? `(${bom} bom)` : undefined,\n ],\n this.options,\n info,\n {\n field: this.state.field,\n },\n ),\n );\n if (err !== undefined) return err;\n }\n } else {\n this.state.quoting = true;\n pos += quote.length - 1;\n continue;\n }\n }\n }\n if (this.state.quoting === false) {\n const recordDelimiterLength = this.__isRecordDelimiter(\n chr,\n buf,\n pos,\n );\n if (recordDelimiterLength !== 0) {\n // Do not emit comments which take a full line\n const skipCommentLine =\n this.state.commenting &&\n this.state.wasQuoting === false &&\n this.state.record.length === 0 &&\n this.state.field.length === 0;\n if (skipCommentLine) {\n this.info.comment_lines++;\n // Skip full comment line\n } else {\n // Activate records emission if above from_line\n if (\n this.state.enabled === false &&\n this.info.lines +\n (this.state.wasRowDelimiter === true ? 1 : 0) >=\n from_line\n ) {\n this.state.enabled = true;\n this.__resetField();\n this.__resetRecord();\n pos += recordDelimiterLength - 1;\n continue;\n }\n // Skip if line is empty and skip_empty_lines activated\n if (\n skip_empty_lines === true &&\n this.state.wasQuoting === false &&\n this.state.record.length === 0 &&\n this.state.field.length === 0\n ) {\n this.info.empty_lines++;\n pos += recordDelimiterLength - 1;\n continue;\n }\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n this.info.bytes =\n this.state.bufBytesStart + pos + recordDelimiterLength;\n const errRecord = this.__onRecord(push);\n if (errRecord !== undefined) return errRecord;\n if (to !== -1 && this.info.records >= to) {\n this.state.stop = true;\n close();\n return;\n }\n }\n this.state.commenting = false;\n pos += recordDelimiterLength - 1;\n continue;\n }\n if (this.state.commenting) {\n continue;\n }\n if (\n comment !== null &&\n (comment_no_infix === false ||\n (this.state.record.length === 0 &&\n this.state.field.length === 0))\n ) {\n const commentCount = this.__compareBytes(comment, buf, pos, chr);\n if (commentCount !== 0) {\n this.state.commenting = true;\n continue;\n }\n }\n const delimiterLength = this.__isDelimiter(buf, pos, chr);\n if (delimiterLength !== 0) {\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n pos += delimiterLength - 1;\n continue;\n }\n }\n }\n if (this.state.commenting === false) {\n if (\n max_record_size !== 0 &&\n this.state.record_length + this.state.field.length > max_record_size\n ) {\n return this.__error(\n new CsvError(\n \"CSV_MAX_RECORD_SIZE\",\n [\n \"Max Record Size:\",\n \"record exceed the maximum number of tolerated bytes\",\n `of ${max_record_size}`,\n `at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n }\n }\n const lappend =\n ltrim === false ||\n this.state.quoting === true ||\n this.state.field.length !== 0 ||\n !this.__isCharTrimable(buf, pos);\n // rtrim in non quoting is handle in __onField\n const rappend = rtrim === false || this.state.wasQuoting === false;\n if (lappend === true && rappend === true) {\n this.state.field.append(chr);\n } else if (rtrim === true && !this.__isCharTrimable(buf, pos)) {\n return this.__error(\n new CsvError(\n \"CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE\",\n [\n \"Invalid Closing Quote:\",\n \"found non trimable byte after quote\",\n `at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n } else {\n if (lappend === false) {\n pos += this.__isCharTrimable(buf, pos) - 1;\n }\n continue;\n }\n }\n if (end === true) {\n // Ensure we are not ending in a quoting state\n if (this.state.quoting === true) {\n const err = this.__error(\n new CsvError(\n \"CSV_QUOTE_NOT_CLOSED\",\n [\n \"Quote Not Closed:\",\n `the parsing is finished with an opening quote at line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n ),\n );\n if (err !== undefined) return err;\n } else {\n // Skip last line if it has no characters\n if (\n this.state.wasQuoting === true ||\n this.state.record.length !== 0 ||\n this.state.field.length !== 0\n ) {\n this.info.bytes = this.state.bufBytesStart + pos;\n const errField = this.__onField();\n if (errField !== undefined) return errField;\n const errRecord = this.__onRecord(push);\n if (errRecord !== undefined) return errRecord;\n } else if (this.state.wasRowDelimiter === true) {\n this.info.empty_lines++;\n } else if (this.state.commenting === true) {\n this.info.comment_lines++;\n }\n }\n } else {\n this.state.bufBytesStart += pos;\n this.state.previousBuf = buf.slice(pos);\n }\n if (this.state.wasRowDelimiter === true) {\n this.info.lines++;\n this.state.wasRowDelimiter = false;\n }\n },\n __onRecord: function (push) {\n const {\n columns,\n group_columns_by_name,\n encoding,\n info,\n from,\n relax_column_count,\n relax_column_count_less,\n relax_column_count_more,\n raw,\n skip_records_with_empty_values,\n } = this.options;\n const { enabled, record } = this.state;\n if (enabled === false) {\n return this.__resetRecord();\n }\n // Convert the first line into column names\n const recordLength = record.length;\n if (columns === true) {\n if (skip_records_with_empty_values === true && isRecordEmpty(record)) {\n this.__resetRecord();\n return;\n }\n return this.__firstLineToColumns(record);\n }\n if (columns === false && this.info.records === 0) {\n this.state.expectedRecordLength = recordLength;\n }\n if (recordLength !== this.state.expectedRecordLength) {\n const err =\n columns === false\n ? new CsvError(\n \"CSV_RECORD_INCONSISTENT_FIELDS_LENGTH\",\n [\n \"Invalid Record Length:\",\n `expect ${this.state.expectedRecordLength},`,\n `got ${recordLength} on line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n {\n record: record,\n },\n )\n : new CsvError(\n \"CSV_RECORD_INCONSISTENT_COLUMNS\",\n [\n \"Invalid Record Length:\",\n `columns length is ${columns.length},`, // rename columns\n `got ${recordLength} on line ${this.info.lines}`,\n ],\n this.options,\n this.__infoField(),\n {\n record: record,\n },\n );\n if (\n relax_column_count === true ||\n (relax_column_count_less === true &&\n recordLength < this.state.expectedRecordLength) ||\n (relax_column_count_more === true &&\n recordLength > this.state.expectedRecordLength)\n ) {\n this.info.invalid_field_length++;\n this.state.error = err;\n // Error is undefined with skip_records_with_error\n } else {\n const finalErr = this.__error(err);\n if (finalErr) return finalErr;\n }\n }\n if (skip_records_with_empty_values === true && isRecordEmpty(record)) {\n this.__resetRecord();\n return;\n }\n if (this.state.recordHasError === true) {\n this.__resetRecord();\n this.state.recordHasError = false;\n return;\n }\n this.info.records++;\n if (from === 1 || this.info.records >= from) {\n const { objname } = this.options;\n // With columns, records are object\n if (columns !== false) {\n const obj = {};\n // Transform record array to an object\n for (let i = 0, l = record.length; i < l; i++) {\n if (columns[i] === undefined || columns[i].disabled) continue;\n // Turn duplicate columns into an array\n if (\n group_columns_by_name === true &&\n Object.hasOwn(obj, columns[i].name)\n ) {\n if (Array.isArray(obj[columns[i].name])) {\n obj[columns[i].name] = obj[columns[i].name].concat(record[i]);\n } else {\n obj[columns[i].name] = [obj[columns[i].name], record[i]];\n }\n } else {\n Object.defineProperty(obj, columns[i].name, {\n value: record[i],\n enumerable: true,\n writable: true,\n configurable: true,\n });\n }\n }\n // Without objname (default)\n if (raw === true || info === true) {\n const extRecord = Object.assign(\n { record: obj },\n raw === true\n ? { raw: this.state.rawBuffer.toString(encoding) }\n : {},\n info === true ? { info: this.__infoRecord() } : {},\n );\n const err = this.__push(\n objname === undefined ? extRecord : [obj[objname], extRecord],\n push,\n );\n if (err) {\n return err;\n }\n } else {\n const err = this.__push(\n objname === undefined ? obj : [obj[objname], obj],\n push,\n );\n if (err) {\n return err;\n }\n }\n // Without columns, records are array\n } else {\n if (raw === true || info === true) {\n const extRecord = Object.assign(\n { record: record },\n raw === true\n ? { raw: this.state.rawBuffer.toString(encoding) }\n : {},\n info === true ? { info: this.__infoRecord() } : {},\n );\n const err = this.__push(\n objname === undefined ? extRecord : [record[objname], extRecord],\n push,\n );\n if (err) {\n return err;\n }\n } else {\n const err = this.__push(\n objname === undefined ? record : [record[objname], record],\n push,\n );\n if (err) {\n return err;\n }\n }\n }\n }\n this.__resetRecord();\n },\n __firstLineToColumns: function (record) {\n const { firstLineToHeaders } = this.state;\n try {\n const headers =\n firstLineToHeaders === undefined\n ? record\n : firstLineToHeaders.call(null, record);\n if (!Array.isArray(headers)) {\n return this.__error(\n new CsvError(\n \"CSV_INVALID_COLUMN_MAPPING\",\n [\n \"Invalid Column Mapping:\",\n \"expect an array from column function,\",\n `got ${JSON.stringify(headers)}`,\n ],\n this.options,\n this.__infoField(),\n {\n headers: headers,\n },\n ),\n );\n }\n const normalizedHeaders = normalize_columns_array(headers);\n this.state.expectedRecordLength = normalizedHeaders.length;\n this.options.columns = normalizedHeaders;\n this.__resetRecord();\n return;\n } catch (err) {\n return err;\n }\n },\n __resetRecord: function () {\n if (this.options.raw === true) {\n this.state.rawBuffer.reset();\n }\n this.state.error = undefined;\n this.state.record = [];\n this.state.record_length = 0;\n },\n __onField: function () {\n const { cast, encoding, rtrim, max_record_size } = this.options;\n const { enabled, wasQuoting } = this.state;\n // Short circuit for the from_line options\n if (enabled === false) {\n return this.__resetField();\n }\n let field = this.state.field.toString(encoding);\n if (rtrim === true && wasQuoting === false) {\n field = field.trimRight();\n }\n if (cast === true) {\n const [err, f] = this.__cast(field);\n if (err !== undefined) return err;\n field = f;\n }\n this.state.record.push(field);\n // Increment record length if record size must not exceed a limit\n if (max_record_size !== 0 && typeof field === \"string\") {\n this.state.record_length += field.length;\n }\n this.__resetField();\n },\n __resetField: function () {\n this.state.field.reset();\n this.state.wasQuoting = false;\n },\n __push: function (record, push) {\n const { on_record } = this.options;\n if (on_record !== undefined) {\n const info = this.__infoRecord();\n try {\n record = on_record.call(null, record, info);\n } catch (err) {\n return err;\n }\n if (record === undefined || record === null) {\n return;\n }\n }\n this.info.bytes_records += this.info.bytes;\n push(record);\n },\n // Return a tuple with the error and the casted value\n __cast: function (field) {\n const { columns, relax_column_count } = this.options;\n const isColumns = Array.isArray(columns);\n // Dont loose time calling cast\n // because the final record is an object\n // and this field can't be associated to a key present in columns\n if (\n isColumns === true &&\n relax_column_count &&\n this.options.columns.length <= this.state.record.length\n ) {\n return [undefined, undefined];\n }\n if (this.state.castField !== null) {\n try {\n const info = this.__infoField();\n return [undefined, this.state.castField.call(null, field, info)];\n } catch (err) {\n return [err];\n }\n }\n if (this.__isFloat(field)) {\n return [undefined, parseFloat(field)];\n } else if (this.options.cast_date !== false) {\n const info = this.__infoField();\n return [undefined, this.options.cast_date.call(null, field, info)];\n }\n return [undefined, field];\n },\n __compareBytes: function (sourceBuf, targetBuf, targetPos, firstByte) {\n if (sourceBuf[0] !== firstByte) return 0;\n const sourceLength = sourceBuf.length;\n for (let i = 1; i < sourceLength; i++) {\n if (sourceBuf[i] !== targetBuf[targetPos + i]) return 0;\n }\n return sourceLength;\n },\n // Helper to test if a character is trimable\n __isCharTrimable: function (buf, pos) {\n const { timchars, timcharFirstBytes } = this.state;\n // Fast bail-out: non-whitespace bytes (the common case) are rejected\n // without scanning the full timchar list.\n const first = buf[pos];\n if (first === undefined || timcharFirstBytes[first] === 0) return 0;\n loop1: for (let i = 0; i < timchars.length; i++) {\n const timchar = timchars[i];\n for (let j = 0; j < timchar.length; j++) {\n if (timchar[j] !== buf[pos + j]) continue loop1;\n }\n return timchar.length;\n }\n return 0;\n },\n __isDelimiter: function (buf, pos, chr) {\n const { delimiter, ignore_last_delimiters } = this.options;\n if (\n ignore_last_delimiters === true &&\n this.state.record.length === this.options.columns.length - 1\n ) {\n return 0;\n } else if (\n ignore_last_delimiters !== false &&\n typeof ignore_last_delimiters === \"number\" &&\n this.state.record.length === ignore_last_delimiters - 1\n ) {\n return 0;\n }\n loop1: for (let i = 0; i < delimiter.length; i++) {\n const del = delimiter[i];\n if (del[0] === chr) {\n for (let j = 1; j < del.length; j++) {\n if (del[j] !== buf[pos + j]) continue loop1;\n }\n return del.length;\n }\n }\n return 0;\n },\n __isEscape: function (buf, pos, chr) {\n const { escape } = this.options;\n if (escape === null) return false;\n const l = escape.length;\n if (escape[0] === chr) {\n for (let i = 0; i < l; i++) {\n if (escape[i] !== buf[pos + i]) {\n return false;\n }\n }\n return true;\n }\n return false;\n },\n __isFloat: function (value) {\n return value - parseFloat(value) + 1 >= 0; // Borrowed from jquery\n },\n // Keep it in case we implement the `cast_int` option\n // __isInt(value){\n // // return Number.isInteger(parseInt(value))\n // // return !isNaN( parseInt( obj ) );\n // return /^(\\-|\\+)?[1-9][0-9]*$/.test(value)\n // }\n __isQuote: function (buf, pos) {\n const { quote } = this.options;\n if (quote === null) return false;\n const l = quote.length;\n for (let i = 0; i < l; i++) {\n if (quote[i] !== buf[pos + i]) {\n return false;\n }\n }\n return true;\n },\n __isRecordDelimiter: function (chr, buf, pos) {\n const { record_delimiter } = this.options;\n const recordDelimiterLength = record_delimiter.length;\n loop1: for (let i = 0; i < recordDelimiterLength; i++) {\n const rd = record_delimiter[i];\n const rdLength = rd.length;\n if (rd[0] !== chr) {\n continue;\n }\n for (let j = 1; j < rdLength; j++) {\n if (rd[j] !== buf[pos + j]) {\n continue loop1;\n }\n }\n return rd.length;\n }\n return 0;\n },\n __autoDiscoverRecordDelimiter: function (buf, pos) {\n const { encoding } = this.options;\n // Note, we don't need to cache this information in state,\n // It is only called on the first line until we find out a suitable\n // record delimiter.\n const rds = [\n // Important, the windows line ending must be before mac os 9\n Buffer.from(\"\\r\\n\", encoding),\n Buffer.from(\"\\n\", encoding),\n Buffer.from(\"\\r\", encoding),\n ];\n loop: for (let i = 0; i < rds.length; i++) {\n const l = rds[i].length;\n for (let j = 0; j < l; j++) {\n if (rds[i][j] !== buf[pos + j]) {\n continue loop;\n }\n }\n this.options.record_delimiter.push(rds[i]);\n this.state.recordDelimiterMaxLength = rds[i].length;\n return rds[i].length;\n }\n return 0;\n },\n __error: function (msg) {\n const { encoding, raw, skip_records_with_error } = this.options;\n const err = typeof msg === \"string\" ? new Error(msg) : msg;\n if (skip_records_with_error) {\n this.state.recordHasError = true;\n if (this.options.on_skip !== undefined) {\n try {\n this.options.on_skip(\n err,\n raw ? this.state.rawBuffer.toString(encoding) : undefined,\n );\n } catch (err) {\n return err;\n }\n }\n // this.emit('skip', err, raw ? this.state.rawBuffer.toString(encoding) : undefined);\n return undefined;\n } else {\n return err;\n }\n },\n __infoDataSet: function () {\n return {\n ...this.info,\n columns: this.options.columns,\n };\n },\n __infoRecord: function () {\n const { columns, raw, encoding } = this.options;\n return {\n ...this.__infoDataSet(),\n bytes_records: this.info.bytes,\n error: this.state.error,\n header: columns === true,\n index: this.state.record.length,\n raw: raw ? this.state.rawBuffer.toString(encoding) : undefined,\n };\n },\n __infoField: function () {\n const { columns } = this.options;\n const isColumns = Array.isArray(columns);\n // Bytes records are only incremented when all records'fields are parsed\n const bytes_records = this.info.bytes_records;\n return {\n ...this.__infoRecord(),\n bytes_records: bytes_records,\n column:\n isColumns === true\n ? columns.length > this.state.record.length\n ? columns[this.state.record.length].name\n : null\n : this.state.record.length,\n quoting: this.state.wasQuoting,\n };\n },\n };\n};\n\nclass Parser extends Transform {\n constructor(opts = {}) {\n super({ ...{ readableObjectMode: true }, ...opts, encoding: null });\n this.api = transform({\n on_skip: (err, chunk) => {\n this.emit(\"skip\", err, chunk);\n },\n ...opts,\n });\n // Backward compatibility\n this.state = this.api.state;\n this.options = this.api.options;\n this.info = this.api.info;\n }\n // Implementation of `Transform._transform`\n _transform(buf, _, callback) {\n if (this.state.stop === true) {\n return;\n }\n const err = this.api.parse(\n buf,\n false,\n (record) => {\n this.push(record);\n },\n () => {\n this.push(null);\n this.end();\n // Fix #333 and break #410\n // ko: api.stream.iterator.coffee\n // ko with v21.4.0, ok with node v20.5.1: api.stream.finished # aborted (with generate())\n // ko: api.stream.finished # aborted (with Readable)\n // this.destroy()\n // Fix #410 and partially break #333\n // ok: api.stream.iterator.coffee\n // ok: api.stream.finished # aborted (with generate())\n // broken: api.stream.finished # aborted (with Readable)\n this.on(\"end\", this.destroy);\n },\n );\n if (err !== undefined) {\n this.state.stop = true;\n }\n callback(err);\n }\n // Implementation of `Transform._flush`\n _flush(callback) {\n if (this.state.stop === true) {\n return;\n }\n const err = this.api.parse(\n undefined,\n true,\n (record) => {\n this.push(record);\n },\n () => {\n this.push(null);\n this.on(\"end\", this.destroy);\n },\n );\n callback(err);\n }\n}\n\nconst parse = function () {\n let data, options, callback;\n for (const i in arguments) {\n const argument = arguments[i];\n const type = typeof argument;\n if (\n data === undefined &&\n (typeof argument === \"string\" || isBuffer(argument))\n ) {\n data = argument;\n } else if (options === undefined && is_object(argument)) {\n options = argument;\n } else if (callback === undefined && type === \"function\") {\n callback = argument;\n } else {\n throw new CsvError(\n \"CSV_INVALID_ARGUMENT\",\n [\"Invalid argument:\", `got ${JSON.stringify(argument)} at index ${i}`],\n options || {},\n );\n }\n }\n const parser = new Parser(options);\n if (callback) {\n const records =\n options === undefined || options.objname === undefined\n ? []\n : Object.create(null);\n parser.on(\"readable\", function () {\n let record;\n while ((record = this.read()) !== null) {\n if (options === undefined || options.objname === undefined) {\n records.push(record);\n } else {\n Object.assign(records, {\n [record[0]]: record[1],\n // writable: true,\n // enumerable: true,\n // configurable: true\n });\n }\n }\n });\n parser.on(\"error\", function (err) {\n callback(err, undefined, parser.api.__infoDataSet());\n });\n parser.on(\"end\", function () {\n callback(undefined, records, parser.api.__infoDataSet());\n });\n }\n if (data !== undefined) {\n const writer = function () {\n parser.write(data);\n parser.end();\n };\n // Support Deno, Rollup doesn't provide a shim for setImmediate\n if (typeof setImmediate === \"function\") {\n setImmediate(writer);\n } else {\n setTimeout(writer, 0);\n }\n }\n return parser;\n};\n\nexport { CsvError, Parser, normalize_options, parse };\n","//#region src/locale/label.ts\nvar e = \"en\", t = [{\n\tid: \"en\",\n\tflag: \"gb\",\n\tlabel: \"English\"\n}, {\n\tid: \"es\",\n\tflag: \"es\",\n\tlabel: \"Español\"\n}];\nfunction n(e) {\n\treturn new Map(Object.entries(e));\n}\nfunction r(e, t, n = \"en\") {\n\tlet r = e.get(t);\n\treturn r === void 0 ? n === t ? void 0 : e.get(n) : r;\n}\n//#endregion\n//#region node_modules/valibot/dist/index.mjs\nvar i = {\n\tlang: void 0,\n\tmessage: void 0,\n\tabortEarly: void 0,\n\tabortPipeEarly: void 0\n};\n/* @__NO_SIDE_EFFECTS__ */\nfunction a(e) {\n\treturn e ? {\n\t\tlang: e?.lang ?? void 0,\n\t\tmessage: e?.message,\n\t\tabortEarly: e?.abortEarly ?? void 0,\n\t\tabortPipeEarly: e?.abortPipeEarly ?? void 0\n\t} : i;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction o(e) {\n\tlet t = typeof e;\n\treturn t === \"string\" ? `\"${e}\"` : t === \"number\" || t === \"bigint\" || t === \"boolean\" ? `${e}` : t === \"object\" || t === \"function\" ? (e && Object.getPrototypeOf(e)?.constructor?.name) ?? \"null\" : t;\n}\nfunction s(e, t, n, r, i) {\n\tlet a = i && \"input\" in i ? i.input : n.value, s = i?.expected ?? e.expects ?? null, c = i?.received ?? /* @__PURE__ */ o(a), l = {\n\t\tkind: e.kind,\n\t\ttype: e.type,\n\t\tinput: a,\n\t\texpected: s,\n\t\treceived: c,\n\t\tmessage: `Invalid ${t}: ${s ? `Expected ${s} but r` : \"R\"}eceived ${c}`,\n\t\trequirement: e.requirement,\n\t\tpath: i?.path,\n\t\tissues: i?.issues,\n\t\tlang: r.lang,\n\t\tabortEarly: r.abortEarly,\n\t\tabortPipeEarly: r.abortPipeEarly\n\t}, u = e.kind === \"schema\", d = i?.message ?? e.message ?? (e.reference, l.lang, void 0) ?? (u ? (l.lang, void 0) : null) ?? r.message ?? (l.lang, void 0);\n\td !== void 0 && (l.message = typeof d == \"function\" ? d(l) : d), u && (n.typed = !1), n.issues ? n.issues.push(l) : n.issues = [l];\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction c(e, t) {\n\treturn e === t || Number.isNaN(e) && Number.isNaN(t);\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction l(e, t) {\n\treturn Object.prototype.hasOwnProperty.call(e, t) && t !== \"__proto__\" && t !== \"prototype\" && t !== \"constructor\";\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction u(e, t) {\n\tlet n = [...new Set(e)];\n\treturn n.length > 1 ? `(${n.join(` ${t} `)})` : n[0] ?? \"never\";\n}\nfunction d(e) {\n\treturn e[\"~standard\"] = {\n\t\tversion: 1,\n\t\tvendor: \"valibot\",\n\t\tvalidate: (t) => e[\"~run\"]({ value: t }, /* @__PURE__ */ a())\n\t}, e;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction ee(e, t, n) {\n\treturn typeof e.fallback == \"function\" ? e.fallback(t, n) : e.fallback;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction f(e, t, n) {\n\treturn typeof e.default == \"function\" ? e.default(t, n) : e.default;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction p(e, t) {\n\treturn d({\n\t\tkind: \"schema\",\n\t\ttype: \"array\",\n\t\treference: p,\n\t\texpects: \"Array\",\n\t\tasync: !1,\n\t\titem: e,\n\t\tmessage: t,\n\t\t\"~run\"(e, t) {\n\t\t\tlet n = e.value;\n\t\t\tif (Array.isArray(n)) {\n\t\t\t\te.typed = !0, e.value = [];\n\t\t\t\tfor (let r = 0; r < n.length; r++) {\n\t\t\t\t\tlet i = n[r], a = this.item[\"~run\"]({ value: i }, t);\n\t\t\t\t\tif (a.issues) {\n\t\t\t\t\t\tlet o = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: n,\n\t\t\t\t\t\t\tkey: r,\n\t\t\t\t\t\t\tvalue: i\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (let t of a.issues) t.path ? t.path.unshift(o) : t.path = [o], e.issues?.push(t);\n\t\t\t\t\t\tif (e.issues ||= a.issues, t.abortEarly) {\n\t\t\t\t\t\t\te.typed = !1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ta.typed || (e.typed = !1), e.value.push(a.value);\n\t\t\t\t}\n\t\t\t} else s(this, \"type\", e, t);\n\t\t\treturn e;\n\t\t}\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction m(e) {\n\treturn d({\n\t\tkind: \"schema\",\n\t\ttype: \"boolean\",\n\t\treference: m,\n\t\texpects: \"boolean\",\n\t\tasync: !1,\n\t\tmessage: e,\n\t\t\"~run\"(e, t) {\n\t\t\treturn typeof e.value == \"boolean\" ? e.typed = !0 : s(this, \"type\", e, t), e;\n\t\t}\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction h(e, t) {\n\treturn d({\n\t\tkind: \"schema\",\n\t\ttype: \"literal\",\n\t\treference: h,\n\t\texpects: /* @__PURE__ */ o(e),\n\t\tasync: !1,\n\t\tliteral: e,\n\t\tmessage: t,\n\t\t\"~run\"(e, t) {\n\t\t\treturn /* @__PURE__ */ c(e.value, this.literal) ? e.typed = !0 : s(this, \"type\", e, t), e;\n\t\t}\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction g(e, t) {\n\treturn d({\n\t\tkind: \"schema\",\n\t\ttype: \"nullable\",\n\t\treference: g,\n\t\texpects: `(${e.expects} | null)`,\n\t\tasync: !1,\n\t\twrapped: e,\n\t\tdefault: t,\n\t\t\"~run\"(e, t) {\n\t\t\treturn e.value === null && (this.default !== void 0 && (e.value = /* @__PURE__ */ f(this, e, t)), e.value === null) ? (e.typed = !0, e) : this.wrapped[\"~run\"](e, t);\n\t\t}\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction _(e) {\n\treturn d({\n\t\tkind: \"schema\",\n\t\ttype: \"number\",\n\t\treference: _,\n\t\texpects: \"number\",\n\t\tasync: !1,\n\t\tmessage: e,\n\t\t\"~run\"(e, t) {\n\t\t\treturn typeof e.value == \"number\" && !isNaN(e.value) ? e.typed = !0 : s(this, \"type\", e, t), e;\n\t\t}\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction v(e, t) {\n\treturn d({\n\t\tkind: \"schema\",\n\t\ttype: \"optional\",\n\t\treference: v,\n\t\texpects: `(${e.expects} | undefined)`,\n\t\tasync: !1,\n\t\twrapped: e,\n\t\tdefault: t,\n\t\t\"~run\"(e, t) {\n\t\t\treturn e.value === void 0 && (this.default !== void 0 && (e.value = /* @__PURE__ */ f(this, e, t)), e.value === void 0) ? (e.typed = !0, e) : this.wrapped[\"~run\"](e, t);\n\t\t}\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction y(e, t, n) {\n\treturn d({\n\t\tkind: \"schema\",\n\t\ttype: \"record\",\n\t\treference: y,\n\t\texpects: \"Object\",\n\t\tasync: !1,\n\t\tkey: e,\n\t\tvalue: t,\n\t\tmessage: n,\n\t\t\"~run\"(e, t) {\n\t\t\tlet n = e.value;\n\t\t\tif (n && typeof n == \"object\") {\n\t\t\t\te.typed = !0, e.value = {};\n\t\t\t\tfor (let r in n) if (/* @__PURE__ */ l(n, r)) {\n\t\t\t\t\tlet i = n[r], a = this.key[\"~run\"]({ value: r }, t);\n\t\t\t\t\tif (a.issues) {\n\t\t\t\t\t\tlet o = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput: n,\n\t\t\t\t\t\t\tkey: r,\n\t\t\t\t\t\t\tvalue: i\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (let t of a.issues) t.path = [o], e.issues?.push(t);\n\t\t\t\t\t\tif (e.issues ||= a.issues, t.abortEarly) {\n\t\t\t\t\t\t\te.typed = !1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlet o = this.value[\"~run\"]({ value: i }, t);\n\t\t\t\t\tif (o.issues) {\n\t\t\t\t\t\tlet a = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: n,\n\t\t\t\t\t\t\tkey: r,\n\t\t\t\t\t\t\tvalue: i\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (let t of o.issues) t.path ? t.path.unshift(a) : t.path = [a], e.issues?.push(t);\n\t\t\t\t\t\tif (e.issues ||= o.issues, t.abortEarly) {\n\t\t\t\t\t\t\te.typed = !1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t(!a.typed || !o.typed) && (e.typed = !1), a.typed && (e.value[a.value] = o.value);\n\t\t\t\t}\n\t\t\t} else s(this, \"type\", e, t);\n\t\t\treturn e;\n\t\t}\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction b(e, t) {\n\treturn d({\n\t\tkind: \"schema\",\n\t\ttype: \"strict_object\",\n\t\treference: b,\n\t\texpects: \"Object\",\n\t\tasync: !1,\n\t\tentries: e,\n\t\tmessage: t,\n\t\t\"~run\"(e, t) {\n\t\t\tlet n = e.value;\n\t\t\tif (n && typeof n == \"object\") {\n\t\t\t\te.typed = !0, e.value = {};\n\t\t\t\tfor (let r in this.entries) {\n\t\t\t\t\tlet i = this.entries[r];\n\t\t\t\t\tif (r in n || (i.type === \"exact_optional\" || i.type === \"optional\" || i.type === \"nullish\") && i.default !== void 0) {\n\t\t\t\t\t\tlet a = r in n ? n[r] : /* @__PURE__ */ f(i), o = i[\"~run\"]({ value: a }, t);\n\t\t\t\t\t\tif (o.issues) {\n\t\t\t\t\t\t\tlet i = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput: n,\n\t\t\t\t\t\t\t\tkey: r,\n\t\t\t\t\t\t\t\tvalue: a\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (let t of o.issues) t.path ? t.path.unshift(i) : t.path = [i], e.issues?.push(t);\n\t\t\t\t\t\t\tif (e.issues ||= o.issues, t.abortEarly) {\n\t\t\t\t\t\t\t\te.typed = !1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\to.typed || (e.typed = !1), e.value[r] = o.value;\n\t\t\t\t\t} else if (i.fallback !== void 0) e.value[r] = /* @__PURE__ */ ee(i);\n\t\t\t\t\telse if (i.type !== \"exact_optional\" && i.type !== \"optional\" && i.type !== \"nullish\" && (s(this, \"key\", e, t, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${r}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput: n,\n\t\t\t\t\t\t\tkey: r,\n\t\t\t\t\t\t\tvalue: n[r]\n\t\t\t\t\t\t}]\n\t\t\t\t\t}), t.abortEarly)) break;\n\t\t\t\t}\n\t\t\t\tif (!e.issues || !t.abortEarly) {\n\t\t\t\t\tfor (let r in n) if (!Object.prototype.hasOwnProperty.call(this.entries, r)) {\n\t\t\t\t\t\ts(this, \"key\", e, t, {\n\t\t\t\t\t\t\tinput: r,\n\t\t\t\t\t\t\texpected: \"never\",\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput: n,\n\t\t\t\t\t\t\t\tkey: r,\n\t\t\t\t\t\t\t\tvalue: n[r]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else s(this, \"type\", e, t);\n\t\t\treturn e;\n\t\t}\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction x(e) {\n\treturn d({\n\t\tkind: \"schema\",\n\t\ttype: \"string\",\n\t\treference: x,\n\t\texpects: \"string\",\n\t\tasync: !1,\n\t\tmessage: e,\n\t\t\"~run\"(e, t) {\n\t\t\treturn typeof e.value == \"string\" ? e.typed = !0 : s(this, \"type\", e, t), e;\n\t\t}\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction S(e) {\n\tlet t;\n\tif (e) for (let n of e) if (t) for (let e of n.issues) t.push(e);\n\telse t = n.issues;\n\treturn t;\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction C(e, t) {\n\treturn d({\n\t\tkind: \"schema\",\n\t\ttype: \"union\",\n\t\treference: C,\n\t\texpects: /* @__PURE__ */ u(e.map((e) => e.expects), \"|\"),\n\t\tasync: !1,\n\t\toptions: e,\n\t\tmessage: t,\n\t\t\"~run\"(e, t) {\n\t\t\tlet n, r, i;\n\t\t\tfor (let a of this.options) {\n\t\t\t\tlet o = a[\"~run\"]({ value: e.value }, t);\n\t\t\t\tif (o.typed) {\n\t\t\t\t\tif (o.issues) r ? r.push(o) : r = [o];\n\t\t\t\t\telse {\n\t\t\t\t\t\tn = o;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else i ? i.push(o) : i = [o];\n\t\t\t}\n\t\t\tif (n) return n;\n\t\t\tif (r) {\n\t\t\t\tif (r.length === 1) return r[0];\n\t\t\t\ts(this, \"type\", e, t, { issues: /* @__PURE__ */ S(r) }), e.typed = !0;\n\t\t\t} else if (i?.length === 1) return i[0];\n\t\t\telse s(this, \"type\", e, t, { issues: /* @__PURE__ */ S(i) });\n\t\t\treturn e;\n\t\t}\n\t});\n}\n//#endregion\n//#region src/locale/locale.schema.ts\nvar w = /* @__PURE__ */ b({\n\ten: /* @__PURE__ */ x(),\n\tes: /* @__PURE__ */ x()\n}), te = {\n\tid: /* @__PURE__ */ x(),\n\tlabel: /* @__PURE__ */ b({\n\t\ten: /* @__PURE__ */ v(/* @__PURE__ */ x()),\n\t\tes: /* @__PURE__ */ v(/* @__PURE__ */ x())\n\t}),\n\tdescription: /* @__PURE__ */ b({\n\t\ten: /* @__PURE__ */ v(/* @__PURE__ */ x()),\n\t\tes: /* @__PURE__ */ v(/* @__PURE__ */ x())\n\t}),\n\ticon: /* @__PURE__ */ g(/* @__PURE__ */ x()),\n\ticonDark: /* @__PURE__ */ g(/* @__PURE__ */ x())\n}, T = (e) => /* @__PURE__ */ C(e.map((e) => /* @__PURE__ */ h(e))), ne = T([\n\t\"app\",\n\t\"connector\",\n\t\"connectorConnection\",\n\t\"context\",\n\t\"contextArea\",\n\t\"contextModel\",\n\t\"contextModelDimension\",\n\t\"contextModelDimensionHierarchy\",\n\t\"contextModelEntity\",\n\t\"contextModelEntityDataItem\",\n\t\"contextModelEntityEvent\",\n\t\"contextModelEntityPrimaryMeasure\",\n\t\"contextModelSecondaryMeasure\",\n\t\"cookbook\",\n\t\"cookbookRecipe\",\n\t\"dataView\",\n\t\"engine\",\n\t\"eventQuery\",\n\t\"presenter\",\n\t\"presenterPresentation\",\n\t\"tool\"\n]), re = T([\n\t\"danger\",\n\t\"success\",\n\t\"warning\"\n]), ie = T([\n\t\"alpha\",\n\t\"beta\",\n\t\"releaseCandidate\",\n\t\"generalAvailability\"\n]), ae = /* @__PURE__ */ b({\n\tcolor: re,\n\tlabel: /* @__PURE__ */ x()\n}), E = {\n\t...te,\n\ttypeId: ne\n}, D = /* @__PURE__ */ b({\n\t...E,\n\torder: /* @__PURE__ */ _(),\n\tpath: /* @__PURE__ */ x()\n}), O = {\n\t...E,\n\tfirstCreatedAt: /* @__PURE__ */ g(/* @__PURE__ */ _()),\n\tlastUpdatedAt: /* @__PURE__ */ g(/* @__PURE__ */ _()),\n\tstatus: /* @__PURE__ */ g(ae),\n\tstatusId: /* @__PURE__ */ g(ie)\n}, oe = /* @__PURE__ */ b({ ...O }), se = [\n\t{\n\t\tid: \"alpha\",\n\t\tcolor: \"danger\",\n\t\tlabels: {\n\t\t\ten: \"alpha\",\n\t\t\tes: \"alfa\"\n\t\t}\n\t},\n\t{\n\t\tid: \"beta\",\n\t\tcolor: \"warning\",\n\t\tlabels: {\n\t\t\ten: \"beta\",\n\t\t\tes: \"beta\"\n\t\t}\n\t},\n\t{\n\t\tid: \"releaseCandidate\",\n\t\tcolor: \"success\",\n\t\tlabels: {\n\t\t\ten: \"release-candidate\",\n\t\t\tes: \"candidato-de-lanzamiento\"\n\t\t}\n\t},\n\t{\n\t\tid: \"generalAvailability\",\n\t\tcolor: \"success\",\n\t\tlabels: {\n\t\t\ten: \"\",\n\t\t\tes: \"\"\n\t\t}\n\t}\n];\nfunction ce(e, t = \"en\") {\n\tlet n = se.find((t) => t.id === e);\n\tif (n) {\n\t\tlet e = n.labels[t] ?? n.labels.en ?? n.id;\n\t\treturn {\n\t\t\tcolor: n.color,\n\t\t\tlabel: e\n\t\t};\n\t}\n\treturn {\n\t\tcolor: \"danger\",\n\t\tlabel: e\n\t};\n}\n//#endregion\n//#region src/component/dataView/index.ts\nn({ en: \"Data Positioning Events\" }), n({ en: \"Delimited Text\" }), n({ en: \"JSON\" }), n({ en: \"SPSS\" }), n({ en: \"XLSX\" }), n({ en: \"XML\" });\nvar le = [\n\t\",\",\n\t\";\",\n\t\"\t\",\n\t\"|\",\n\t\" \",\n\t\":\",\n\t\"_\",\n\t\"!\",\n\t\"0x1F\",\n\t\"0x1E\"\n];\nn({ en: \"Newline\" }), n({ en: \"Carriage Return\" }), n({ en: \"Carriage Return/Newline\" }), n({ en: \"Colon\" }), n({ en: \"Comma\" }), n({ en: \"Exclamation Mark\" }), n({ en: \"Record Separator\" }), n({ en: \"Semicolon\" }), n({ en: \"Space\" }), n({ en: \"Tab\" }), n({ en: \"Underscore\" }), n({ en: \"Unit Separator\" }), n({ en: \"Vertical Bar\" }), T([\n\t\"app\",\n\t\"engine\",\n\t\"connector\",\n\t\"cookbook\",\n\t\"presenter\",\n\t\"tool\"\n]);\n//#endregion\n//#region src/component/module/moduleConfig.schema.ts\nvar k = {\n\t...O,\n\tvendorAccountURL: /* @__PURE__ */ g(/* @__PURE__ */ x()),\n\tvendorDocumentationURL: /* @__PURE__ */ g(/* @__PURE__ */ x()),\n\tvendorHomeURL: /* @__PURE__ */ g(/* @__PURE__ */ x()),\n\tversion: /* @__PURE__ */ x()\n};\n({ ...k });\n//#endregion\n//#region src/component/module/connector/connectorConfig.schema.ts\nvar ue = T([\n\t\"abortOperation\",\n\t\"auditObjectContent\",\n\t\"createObject\",\n\t\"describeConnection\",\n\t\"dropObject\",\n\t\"findObject\",\n\t\"getInfo\",\n\t\"getReadableStream\",\n\t\"getRecord\",\n\t\"listNodes\",\n\t\"previewObject\",\n\t\"removeRecords\",\n\t\"retrieveChunks\",\n\t\"retrieveRecords\",\n\t\"upsertRecords\"\n]), de = T([\n\t\"application\",\n\t\"curatedDataset\",\n\t\"database\",\n\t\"fileStore\"\n]), fe = /* @__PURE__ */ b({ label: w }), pe = T([\n\t\"bidirectional\",\n\t\"destination\",\n\t\"source\",\n\t\"unknown\"\n]), me = /* @__PURE__ */ b({ label: w }), he = /* @__PURE__ */ b({\n\tauthMethodId: T([\n\t\t\"apiKey\",\n\t\t\"disabled\",\n\t\t\"oAuth2\",\n\t\t\"none\"\n\t]),\n\tactiveConnectionCount: /* @__PURE__ */ v(/* @__PURE__ */ _()),\n\tcanDescribe: /* @__PURE__ */ v(/* @__PURE__ */ m()),\n\tid: /* @__PURE__ */ v(/* @__PURE__ */ x()),\n\tlabel: /* @__PURE__ */ v(w),\n\tmaxConnectionCount: /* @__PURE__ */ g(/* @__PURE__ */ _()),\n\tparams: /* @__PURE__ */ v(/* @__PURE__ */ p(/* @__PURE__ */ y(/* @__PURE__ */ x(), /* @__PURE__ */ x())))\n}), ge = /* @__PURE__ */ b({\n\t...k,\n\ttypeId: /* @__PURE__ */ h(\"connector\"),\n\tactionNames: /* @__PURE__ */ p(ue),\n\tcategory: /* @__PURE__ */ g(fe),\n\tcategoryId: de,\n\timplementations: /* @__PURE__ */ y(/* @__PURE__ */ x(), he),\n\tusage: /* @__PURE__ */ g(me),\n\tusageId: /* @__PURE__ */ g(pe)\n}), _e = [\n\t{\n\t\tid: \"application\",\n\t\tlabel: {\n\t\t\ten: \"Application\",\n\t\t\tes: \"Aplicación\"\n\t\t}\n\t},\n\t{\n\t\tid: \"curatedDataset\",\n\t\tlabel: {\n\t\t\ten: \"Curated Dataset\",\n\t\t\tes: \"Conjunto de Datos Curado\"\n\t\t}\n\t},\n\t{\n\t\tid: \"database\",\n\t\tlabel: {\n\t\t\ten: \"Database\",\n\t\t\tes: \"Base de Datos\"\n\t\t}\n\t},\n\t{\n\t\tid: \"fileStore\",\n\t\tlabel: {\n\t\t\ten: \"File Store\",\n\t\t\tes: \"Almacén de Archivos\"\n\t\t}\n\t}\n], A = {\n\tabortOperation: \"Abort Operation\",\n\tauditObjectContent: \"Audit Object Content\",\n\tcreateObject: \"Create Object\",\n\tdescribeConnection: \"Describe Connection\",\n\tdropObject: \"Drop Object\",\n\tfindObject: \"Find Object\",\n\tgetInfo: \"Get Info\",\n\tgetReadableStream: \"Get Readable Stream\",\n\tgetRecord: \"Get Record\",\n\tlistNodes: \"List Nodes\",\n\tpreviewObject: \"Preview Object\",\n\tremoveRecords: \"Remove Records\",\n\tretrieveChunks: \"Retrieve Chunks\",\n\tretrieveRecords: \"Retrieve Records\",\n\tupsertRecords: \"Upsert Records\"\n}, ve = [\n\t{\n\t\tid: \"bidirectional\",\n\t\tlabel: {\n\t\t\ten: \"Bidirectional\",\n\t\t\tes: \"Bidireccional\"\n\t\t}\n\t},\n\t{\n\t\tid: \"destination\",\n\t\tlabel: {\n\t\t\ten: \"Destination\",\n\t\t\tes: \"Destino\"\n\t\t}\n\t},\n\t{\n\t\tid: \"source\",\n\t\tlabel: {\n\t\t\ten: \"Source\",\n\t\t\tes: \"Origen\"\n\t\t}\n\t},\n\t{\n\t\tid: \"unknown\",\n\t\tlabel: {\n\t\t\ten: \"Unknown\",\n\t\t\tes: \"Desconocido\"\n\t\t}\n\t}\n], ye = /* @__PURE__ */ new Set([\n\t\"createObject\",\n\t\"dropObject\",\n\t\"removeRecords\",\n\t\"upsertRecords\"\n]), be = /* @__PURE__ */ new Set([\n\t\"auditObjectContent\",\n\t\"findObject\",\n\t\"getInfo\",\n\t\"getReadableStream\",\n\t\"getRecord\",\n\t\"listNodes\",\n\t\"previewObject\",\n\t\"retrieveChunks\",\n\t\"retrieveRecords\"\n]);\nfunction j(e) {\n\tlet t = !1, n = !1;\n\tfor (let r of e) be.has(r) && (t = !0), ye.has(r) && (n = !0);\n\treturn t && n ? \"bidirectional\" : t ? \"source\" : n ? \"destination\" : \"unknown\";\n}\nvar M = (e, t = \"en\") => {\n\tlet i = _e.find((t) => t.id === e);\n\treturn i ? {\n\t\tlabel: r(n(i.label), t) ?? i.id,\n\t\tdescription: \"\"\n\t} : {\n\t\tlabel: e,\n\t\tdescription: \"\"\n\t};\n}, N = (e, t = \"en\") => {\n\tlet i = ve.find((t) => t.id === e);\n\treturn i ? {\n\t\tlabel: r(n(i.label), t) ?? i.id,\n\t\tdescription: \"\"\n\t} : {\n\t\tlabel: e,\n\t\tdescription: \"\"\n\t};\n};\nfunction xe(e) {\n\tlet t = new Set(e), n = \"|Action|Supported|\\n\";\n\tn += \"|:----|:-------:|\\n\";\n\tfor (let e of Object.keys(A)) n += `| ${A[e]} | ${t.has(e) ? \"✓\" : \"\"} |\\n`;\n\treturn n;\n}\n//#endregion\n//#region src/component/module/cookbook/cookbookConfig.schema.ts\nvar Se = T([\"list\"]), Ce = /* @__PURE__ */ b({\n\t...k,\n\ttypeId: /* @__PURE__ */ h(\"cookbook\"),\n\tactionNames: /* @__PURE__ */ p(Se),\n\trecipes: /* @__PURE__ */ p(D)\n}), we = T([\n\t\"list\",\n\t\"render\",\n\t\"setColorMode\"\n]), Te = /* @__PURE__ */ b({\n\t...k,\n\ttypeId: /* @__PURE__ */ h(\"presenter\"),\n\tactionNames: /* @__PURE__ */ p(we),\n\tpresentations: /* @__PURE__ */ p(D)\n}), P = 2048, F = \"[REDACTED]\", Ee = 10, I = /api[-_]?key|authori[sz]ation|cookie|credential|passw(?:or)?d|private[-_]?key|secret|token/i, De = [\n\t[/\\b(Bearer|Basic) +[\\w.~+/=-]+/gi, (e, t) => `${t} ${F}`],\n\t[/(?<![\\w-])([\\w-]+)([\"']?[ \\t]*[:=][ \\t]*[\"']?)([^\\s\"'&,;}?#]+)/g, (e, t, n, r) => I.test(t) && !/^(?:Basic|Bearer)$/i.test(r) ? `${t}${n}${F}` : e],\n\t[/\\beyJ[\\w-]+\\.[\\w-]+\\.[\\w-]*/g, () => F],\n\t[/\\b(?:sk-|xaat-|xapt-|sl\\.)[\\w-]{16,}/g, () => F],\n\t[/(?<![\\w.+-])[\\w.+-]+@[\\w-]+\\.[\\w.-]+/g, () => F]\n], L = class extends Error {\n\tdata;\n\tlocator;\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, r), this.name = \"DPUseError\", this.data = n, this.locator = t;\n\t}\n}, R = class extends L {\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, t, n, r), this.name = \"AppError\";\n\t}\n}, z = class extends L {\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, t, n, r), this.name = \"APIError\";\n\t}\n}, B = class extends L {\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, t, n, r), this.name = \"EngineError\";\n\t}\n}, V = class extends L {\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, t, n, r), this.name = \"ConnectorError\";\n\t}\n}, H = class extends L {\n\tconstructor(e, t, n, r) {\n\t\tsuper(e, t, n, r), this.name = \"FetchError\";\n\t}\n};\nasync function Oe(e, t, n) {\n\tlet r = ` - ${e.statusText}`, i = `${t} Response status '${String(e.status)}${e.statusText ? r : \"\"}' received.`, a;\n\ttry {\n\t\ta = await e.text();\n\t} catch (e) {\n\t\ta = `<body unavailable: ${U(e).message}>`;\n\t}\n\treturn new H(i, n, { body: Ie(a) });\n}\nfunction ke(e) {\n\treturn e.map((e) => e.message).join(\" \");\n}\nfunction Ae(e) {\n\ttry {\n\t\te();\n\t} catch {}\n}\nfunction U(e) {\n\tif (e instanceof Error) return e;\n\tif (typeof e == \"string\") return Error(e);\n\tif (typeof e == \"number\" || typeof e == \"boolean\" || typeof e == \"bigint\") return Error(String(e));\n\tif (typeof e == \"symbol\") return Error(e.description ?? \"Unknown error\");\n\tif (typeof e == \"object\") try {\n\t\treturn Error(JSON.stringify(e));\n\t} catch {\n\t\treturn /* @__PURE__ */ Error(\"Unknown error\");\n\t}\n\treturn /* @__PURE__ */ Error(\"Unknown error\");\n}\nfunction je(e) {\n\tlet t = /* @__PURE__ */ new Set(), n = [], r = U(e);\n\tfor (; r != null && !t.has(r);) {\n\t\tt.add(r);\n\t\tlet [e, i] = Le(r);\n\t\t/(?:\\.{3}|[.!?])$/.test(e.message) || (e.message += \".\"), n.push(Fe(e)), r = i;\n\t}\n\treturn n;\n}\nfunction Me(e) {\n\tlet t;\n\tfor (let n of e.toReversed()) {\n\t\tlet e = Pe(n, t);\n\t\tn.stack !== void 0 && (e.stack = n.stack), t = e;\n\t}\n\treturn t ?? /* @__PURE__ */ Error(\"No error to unserialise.\");\n}\nfunction Ne(e) {\n\tlet t;\n\ttry {\n\t\tt = JSON.stringify(e);\n\t} catch {\n\t\tt = typeof e == \"symbol\" ? e.description ?? \"Unknown error\" : typeof e == \"bigint\" ? e.toString() : \"Unknown error\";\n\t}\n\treturn t === \"\" && (t = \"Unknown error\"), t;\n}\nfunction Pe(e, t) {\n\tswitch (e.name) {\n\t\tcase \"APIError\": return new z(e.message, e.locator, e.data, { cause: t });\n\t\tcase \"AppError\": return new R(e.message, e.locator, e.data, { cause: t });\n\t\tcase \"ConnectorError\": return new V(e.message, e.locator, e.data, { cause: t });\n\t\tcase \"EngineError\": return new B(e.message, e.locator, e.data, { cause: t });\n\t\tcase \"FetchError\": return new H(e.message, e.locator, e.data, { cause: t });\n\t\tdefault: {\n\t\t\tlet n = e.name;\n\t\t\treturn new class extends Error {\n\t\t\t\tname = n;\n\t\t\t}(e.message, { cause: t });\n\t\t}\n\t}\n}\nfunction Fe(e) {\n\tlet { data: t, message: n, stack: r } = e;\n\treturn {\n\t\t...e,\n\t\tdata: t === void 0 ? void 0 : G(t, /* @__PURE__ */ new WeakSet(), 0),\n\t\tmessage: W(n),\n\t\tstack: r === void 0 ? void 0 : W(r)\n\t};\n}\nfunction W(e) {\n\tlet t = e;\n\tfor (let [e, n] of De) t = t.replaceAll(e, (e, ...t) => n(e, ...t));\n\treturn t;\n}\nfunction G(e, t, n) {\n\treturn typeof e == \"string\" ? W(e) : typeof e != \"object\" || !e ? e : n >= Ee ? F : t.has(e) ? \"[Circular]\" : (t.add(e), Array.isArray(e) ? e.map((e) => G(e, t, n + 1)) : Object.fromEntries(Object.entries(e).map(([e, r]) => [e, r != null && I.test(e) ? F : G(r, t, n + 1)])));\n}\nfunction Ie(e) {\n\tif (e != null && e !== \"\") return e.length > P ? `${e.slice(0, P)}... [truncated]` : e;\n}\nfunction Le(e) {\n\tlet t = e.cause == null ? null : U(e.cause);\n\tif (e instanceof L) return [{\n\t\tdata: e.data,\n\t\tlocator: e.locator,\n\t\tmessage: e.message,\n\t\tname: e.name,\n\t\tstack: e.stack\n\t}, t];\n\tlet n = Object.fromEntries(Object.entries(e).filter(([e]) => e !== \"cause\"));\n\treturn e.name ? [{\n\t\tdata: n,\n\t\tlocator: \"\",\n\t\tmessage: e.message,\n\t\tname: e.name,\n\t\tstack: e.stack\n\t}, t] : [{\n\t\tdata: n,\n\t\tlocator: \"\",\n\t\tmessage: Ne(e),\n\t\tname: \"Error\",\n\t\tstack: void 0\n\t}, null];\n}\n//#endregion\n//#region src/component/module/tool/index.ts\nvar Re = \"https://engine-eu.dpuse.app/tools\";\nasync function ze(e, t) {\n\tlet n = `dpuse-tool-${t}`, r = e.find((e) => e.id === n);\n\tif (!r) {\n\t\tlet r = {\n\t\t\tavailableToolIds: e.map((e) => e.id),\n\t\t\ttoolName: n\n\t\t};\n\t\tthrow new R(`Tool '${t}' not found.`, \"dpuse-shared.component.module.tool.loadTool\", r);\n\t}\n\tlet i = `${Re}/${t}_v${r.version}/${n}.es.js`;\n\ttry {\n\t\treturn new (await (import(\n\t\t\t/* @vite-ignore */\n\t\t\ti\n))).Tool();\n\t} catch (e) {\n\t\tlet t = {\n\t\t\ttoolName: n,\n\t\t\turl: i,\n\t\t\tversion: r.version\n\t\t};\n\t\tthrow new R(`Failed to load tool '${n}' v${r.version}.`, \"dpuse-shared.component.module.tool.loadTool\", t, { cause: e });\n\t}\n}\n//#endregion\n//#region src/encoding/index.ts\nvar Be = {\n\tarabic: {\n\t\tid: \"arabic\",\n\t\tlabel: {\n\t\t\ten: \"Arabic\",\n\t\t\tes: \"Árabe\"\n\t\t}\n\t},\n\tbaltic: {\n\t\tid: \"baltic\",\n\t\tlabel: {\n\t\t\ten: \"Baltic\",\n\t\t\tes: \"Báltico\"\n\t\t}\n\t},\n\tceltic: {\n\t\tid: \"celtic\",\n\t\tlabel: {\n\t\t\ten: \"Celtic\",\n\t\t\tes: \"Celta\"\n\t\t}\n\t},\n\tcentralEuropean: {\n\t\tid: \"centralEuropean\",\n\t\tlabel: {\n\t\t\ten: \"Central European\",\n\t\t\tes: \"Centroeuropeo\"\n\t\t}\n\t},\n\tchineseSimplified: {\n\t\tid: \"chineseSimplified\",\n\t\tlabel: {\n\t\t\ten: \"Chinese Simplified\",\n\t\t\tes: \"Chino simplificado\"\n\t\t}\n\t},\n\tchineseTraditional: {\n\t\tid: \"chineseTraditional\",\n\t\tlabel: {\n\t\t\ten: \"Chinese Traditional\",\n\t\t\tes: \"Chino tradicional\"\n\t\t}\n\t},\n\tcyrillic: {\n\t\tid: \"cyrillic\",\n\t\tlabel: {\n\t\t\ten: \"Cyrillic\",\n\t\t\tes: \"Cirílico\"\n\t\t}\n\t},\n\tgreek: {\n\t\tid: \"greek\",\n\t\tlabel: {\n\t\t\ten: \"Greek\",\n\t\t\tes: \"Griego\"\n\t\t}\n\t},\n\thebrew: {\n\t\tid: \"hebrew\",\n\t\tlabel: {\n\t\t\ten: \"Hebrew\",\n\t\t\tes: \"Hebreo\"\n\t\t}\n\t},\n\tjapanese: {\n\t\tid: \"japanese\",\n\t\tlabel: {\n\t\t\ten: \"Japanese\",\n\t\t\tes: \"Japonés\"\n\t\t}\n\t},\n\tkorean: {\n\t\tid: \"korean\",\n\t\tlabel: {\n\t\t\ten: \"Korean\",\n\t\t\tes: \"Coreano\"\n\t\t}\n\t},\n\tnordic: {\n\t\tid: \"nordic\",\n\t\tlabel: {\n\t\t\ten: \"Nordic\",\n\t\t\tes: \"Nórdico\"\n\t\t}\n\t},\n\tother: {\n\t\tid: \"other\",\n\t\tlabel: {\n\t\t\ten: \"Other\",\n\t\t\tes: \"Otro\"\n\t\t}\n\t},\n\tromanian: {\n\t\tid: \"romanian\",\n\t\tlabel: {\n\t\t\ten: \"Romanian\",\n\t\t\tes: \"Rumano\"\n\t\t}\n\t},\n\tsouthernEuropean: {\n\t\tid: \"southernEuropean\",\n\t\tlabel: {\n\t\t\ten: \"Southern European\",\n\t\t\tes: \"Europeo meridional\"\n\t\t}\n\t},\n\tthai: {\n\t\tid: \"thai\",\n\t\tlabel: {\n\t\t\ten: \"Thai\",\n\t\t\tes: \"Tailandés\"\n\t\t}\n\t},\n\tturkish: {\n\t\tid: \"turkish\",\n\t\tlabel: {\n\t\t\ten: \"Turkish\",\n\t\t\tes: \"Turco\"\n\t\t}\n\t},\n\tunicode16: {\n\t\tid: \"unicode16\",\n\t\tlabel: {\n\t\t\ten: \"Unicode 16\",\n\t\t\tes: \"Unicode 16\"\n\t\t}\n\t},\n\tunicode32: {\n\t\tid: \"unicode32\",\n\t\tlabel: {\n\t\t\ten: \"Unicode 32\",\n\t\t\tes: \"Unicode 32\"\n\t\t}\n\t},\n\tvietnamese: {\n\t\tid: \"vietnamese\",\n\t\tlabel: {\n\t\t\ten: \"Vietnamese\",\n\t\t\tes: \"Vietnamita\"\n\t\t}\n\t},\n\twestern: {\n\t\tid: \"western\",\n\t\tlabel: {\n\t\t\ten: \"Western\",\n\t\t\tes: \"Occidental\"\n\t\t}\n\t}\n}, Ve = {\n\tascii: {\n\t\tid: \"ascii\",\n\t\tgroupId: null,\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\tbig5: {\n\t\tid: \"big5\",\n\t\tgroupId: \"chineseTraditional\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"euc-jp\": {\n\t\tid: \"euc-jp\",\n\t\tgroupId: \"japanese\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"euc-kr\": {\n\t\tid: \"euc-kr\",\n\t\tgroupId: \"korean\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\tgb18030: {\n\t\tid: \"gb18030\",\n\t\tgroupId: \"chineseSimplified\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\tgbk: {\n\t\tid: \"gbk\",\n\t\tgroupId: \"chineseSimplified\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\tibm866: {\n\t\tid: \"ibm866\",\n\t\tgroupId: \"cyrillic\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"iso-2022-cn\": {\n\t\tid: \"iso-2022-cn\",\n\t\tgroupId: \"chineseSimplified\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !1\n\t},\n\t\"iso-2022-jp\": {\n\t\tid: \"iso-2022-jp\",\n\t\tgroupId: \"japanese\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"iso-2022-kr\": {\n\t\tid: \"iso-2022-kr\",\n\t\tgroupId: \"korean\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !1\n\t},\n\t\"iso-8859-1\": {\n\t\tid: \"iso-8859-1\",\n\t\tgroupId: \"western\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-2\": {\n\t\tid: \"iso-8859-2\",\n\t\tgroupId: \"centralEuropean\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-3\": {\n\t\tid: \"iso-8859-3\",\n\t\tgroupId: \"southernEuropean\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-4\": {\n\t\tid: \"iso-8859-4\",\n\t\tgroupId: \"baltic\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-5\": {\n\t\tid: \"iso-8859-5\",\n\t\tgroupId: \"cyrillic\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-6\": {\n\t\tid: \"iso-8859-6\",\n\t\tgroupId: \"arabic\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-7\": {\n\t\tid: \"iso-8859-7\",\n\t\tgroupId: \"greek\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-8\": {\n\t\tid: \"iso-8859-8\",\n\t\tgroupId: \"hebrew\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-9\": {\n\t\tid: \"iso-8859-9\",\n\t\tgroupId: \"turkish\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-10\": {\n\t\tid: \"iso-8859-10\",\n\t\tgroupId: \"nordic\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-11\": {\n\t\tid: \"iso-8859-11\",\n\t\tgroupId: \"thai\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-13\": {\n\t\tid: \"iso-8859-13\",\n\t\tgroupId: \"baltic\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-14\": {\n\t\tid: \"iso-8859-14\",\n\t\tgroupId: \"celtic\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-15\": {\n\t\tid: \"iso-8859-15\",\n\t\tgroupId: \"western\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"iso-8859-16\": {\n\t\tid: \"iso-8859-16\",\n\t\tgroupId: \"romanian\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"koi8-r\": {\n\t\tid: \"koi8-r\",\n\t\tgroupId: \"cyrillic\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"koi8-u\": {\n\t\tid: \"koi8-u\",\n\t\tgroupId: \"cyrillic\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\tlatin1: {\n\t\tid: \"latin1\",\n\t\tgroupId: \"western\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\tmacintosh: {\n\t\tid: \"macintosh\",\n\t\tgroupId: \"western\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\tshift_jis: {\n\t\tid: \"shift_jis\",\n\t\tgroupId: \"japanese\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"tis-620\": {\n\t\tid: \"tis-620\",\n\t\tgroupId: \"thai\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"utf-16\": {\n\t\tid: \"utf-16\",\n\t\tgroupId: \"unicode16\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"utf-16be\": {\n\t\tid: \"utf-16be\",\n\t\tgroupId: \"unicode16\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"utf-16le\": {\n\t\tid: \"utf-16le\",\n\t\tgroupId: \"unicode16\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"utf-32be\": {\n\t\tid: \"utf-32be\",\n\t\tgroupId: \"unicode32\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !1\n\t},\n\t\"utf-32le\": {\n\t\tid: \"utf-32le\",\n\t\tgroupId: \"unicode32\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !1\n\t},\n\t\"utf-8\": {\n\t\tid: \"utf-8\",\n\t\tgroupId: null,\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"windows-1250\": {\n\t\tid: \"windows-1250\",\n\t\tgroupId: \"centralEuropean\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"windows-1251\": {\n\t\tid: \"windows-1251\",\n\t\tgroupId: \"cyrillic\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"windows-1252\": {\n\t\tid: \"windows-1252\",\n\t\tgroupId: \"western\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"windows-1253\": {\n\t\tid: \"windows-1253\",\n\t\tgroupId: \"greek\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"windows-1254\": {\n\t\tid: \"windows-1254\",\n\t\tgroupId: \"turkish\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"windows-1255\": {\n\t\tid: \"windows-1255\",\n\t\tgroupId: \"hebrew\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"windows-1256\": {\n\t\tid: \"windows-1256\",\n\t\tgroupId: \"arabic\",\n\t\tisDetectable: !0,\n\t\tisDecodable: !0\n\t},\n\t\"windows-1257\": {\n\t\tid: \"windows-1257\",\n\t\tgroupId: \"baltic\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"windows-1258\": {\n\t\tid: \"windows-1258\",\n\t\tgroupId: \"vietnamese\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"windows-874\": {\n\t\tid: \"windows-874\",\n\t\tgroupId: \"thai\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"x-mac-cyrillic\": {\n\t\tid: \"x-mac-cyrillic\",\n\t\tgroupId: \"cyrillic\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t},\n\t\"x-user-defined\": {\n\t\tid: \"x-user-defined\",\n\t\tgroupId: \"other\",\n\t\tisDetectable: !1,\n\t\tisDecodable: !0\n\t}\n}, K = Be, q = Ve;\nfunction He(e) {\n\treturn Object.hasOwn(q, e);\n}\nfunction Ue(e = \"en\") {\n\treturn Array.from(Object.values(q), ({ groupId: t, id: n, isDecodable: r, isDetectable: i }) => {\n\t\tlet a = t == null ? \"\" : We(t, e);\n\t\treturn {\n\t\t\tid: n,\n\t\t\tgroupLabel: a,\n\t\t\tlabel: a ? `${a} (${n})` : n,\n\t\t\tisDetectable: i,\n\t\t\tisDecodable: r\n\t\t};\n\t}).toSorted((t, n) => t.groupLabel.localeCompare(n.groupLabel, e) || t.label.localeCompare(n.label, e));\n}\nfunction We(e, t) {\n\tlet n = K[e].label;\n\treturn n[t] ?? n.en ?? e;\n}\n//#endregion\n//#region src/locale/index.ts\nfunction Ge(e, t) {\n\treturn {\n\t\t...e,\n\t\tlabel: e.label[t] ?? e.id,\n\t\tdescription: e.description[t] ?? e.description.en ?? \"\",\n\t\tverb: e.verb?.[t] ?? void 0\n\t};\n}\nfunction Ke(e, t, n = !1) {\n\tlet r = e.map((e) => ({\n\t\t...e,\n\t\tlabel: e.label[t] ?? e.id,\n\t\tdescription: e.description[t] ?? e.description.en ?? \"\",\n\t\tverb: e.verb?.[t] ?? void 0\n\t}));\n\treturn n ? r.toSorted((e, t) => e.label.localeCompare(t.label) || e.id.localeCompare(t.id)) : r;\n}\nfunction J(e, t) {\n\treturn {\n\t\t...e,\n\t\tlabel: e.label[t] ?? e.id,\n\t\tdescription: e.description[t] ?? e.description.en ?? \"\"\n\t};\n}\n//#endregion\n//#region src/utilities/index.ts\nvar Y = [\n\t[\n\t\t\"days\",\n\t\t864e5,\n\t\t(e) => e === 1 ? \"1 day\" : `${$(e)} days`\n\t],\n\t[\n\t\t\"hrs\",\n\t\t36e5,\n\t\t(e) => e === 1 ? \"1 hr\" : `${$(e)} hrs`\n\t],\n\t[\n\t\t\"mins\",\n\t\t6e4,\n\t\t(e) => e === 1 ? \"1 min\" : `${$(e)} mins`\n\t],\n\t[\n\t\t\"secs\",\n\t\t1e3,\n\t\t(e) => e === 1 ? \"1 sec\" : `${$(e)} secs`\n\t],\n\t[\n\t\t\"ms\",\n\t\t0,\n\t\t(e) => `${$(e)} ms`\n\t]\n], X = \"en\", Z = /* @__PURE__ */ new Map();\nfunction qe(e) {\n\tswitch (e) {\n\t\tcase \"Edm.Binary\": return \"unknown\";\n\t\tcase \"Edm.Boolean\": return \"boolean\";\n\t\tcase \"Edm.Byte\": return \"wholeNumber\";\n\t\tcase \"Edm.DateTime\": return \"moment\";\n\t\tcase \"Edm.DateTimeOffset\": return \"moment\";\n\t\tcase \"Edm.Decimal\": return \"decimalNumber\";\n\t\tcase \"Edm.Double\": return \"decimalNumber\";\n\t\tcase \"Edm.Guid\": return \"string\";\n\t\tcase \"Edm.Int16\": return \"wholeNumber\";\n\t\tcase \"Edm.Int32\": return \"wholeNumber\";\n\t\tcase \"Edm.Int64\": return \"wholeNumber\";\n\t\tcase \"Edm.SByte\": return \"wholeNumber\";\n\t\tcase \"Edm.Single\": return \"decimalNumber\";\n\t\tcase \"Edm.String\": return \"string\";\n\t\tcase \"Edm.Time\": return \"momentTime\";\n\t\tdefault: return \"unknown\";\n\t}\n}\nfunction Je(e) {\n\tif (e) {\n\t\tlet t = e.lastIndexOf(\"/\") + 1, n = e.lastIndexOf(\".\");\n\t\treturn n <= t || n === -1 ? e : e.slice(0, Math.max(0, n));\n\t}\n}\nfunction Ye(e) {\n\tif (e) {\n\t\tlet t = e.lastIndexOf(\"/\") + 1, n = e.lastIndexOf(\".\");\n\t\tif (n <= t) return;\n\t\tif (n !== -1) return e.slice(Math.max(0, n + 1));\n\t}\n}\nfunction Q(e, t = 2, n = t, r = X) {\n\tif (e == null) return \"\";\n\tlet i = `${r}decimal${String(t)}.${String(n)}`, a = Z.get(i);\n\treturn a || (a = new Intl.NumberFormat(r, {\n\t\tlocaleMatcher: \"best fit\",\n\t\tmaximumFractionDigits: t,\n\t\tminimumFractionDigits: n,\n\t\tminimumIntegerDigits: 1,\n\t\tstyle: \"decimal\",\n\t\tuseGrouping: !0\n\t}), Z.set(i, a)), a.format(e);\n}\nfunction Xe(e, t = 1) {\n\treturn e == null ? \"\" : e < 1e3 ? $(e) : e < 1e6 ? `${Q(e / 1e3, t, 0)}K` : e < 1e9 ? `${Q(e / 1e6, t, 0)}M` : e < 0xe8d4a51000 ? `${Q(e / 1e9, t, 0)}B` : `${Q(e / 0xe8d4a51000, t, 0)}T`;\n}\nfunction Ze(e, t = 1) {\n\treturn e == null ? \"\" : e === 1 ? \"1 byte\" : e < 1024 ? `${$(e)} bytes` : e < 1048576 ? `${Q(e / 1024, t, 0)} KB` : e < 1073741824 ? `${Q(e / 1048576, t, 0)} MB` : e < 1099511627776 ? `${Q(e / 1073741824, t, 0)} GB` : `${Q(e / 1099511627776, t, 0)} TB`;\n}\nfunction Qe(e, t = \"ms\") {\n\tif (e == null) return \"\";\n\tlet n = Y.findIndex(([, t]) => e >= t), r = n === -1 ? Y.length - 1 : n, i = Y.findIndex(([e]) => e === t), a = Y.slice(r, Math.max(i, r) + 1), o = [], s = e;\n\tfor (let [, e, t] of a) s < e || s === 0 && o.length > 0 || (o.push(t(e > 0 ? Math.floor(s / e) : s)), s %= e > 0 ? e : 1);\n\treturn o.join(\" \");\n}\nfunction $(e, t = X) {\n\tif (e == null) return \"\";\n\tlet n = `${t}decimal0.0`, r = Z.get(n);\n\treturn r || (r = new Intl.NumberFormat(t, {\n\t\tlocaleMatcher: \"best fit\",\n\t\tmaximumFractionDigits: 0,\n\t\tminimumFractionDigits: 0,\n\t\tminimumIntegerDigits: 1,\n\t\tstyle: \"decimal\",\n\t\tuseGrouping: !0\n\t}), Z.set(n, r)), r.format(e);\n}\nfunction $e(e) {\n\tswitch (e?.toLowerCase()) {\n\t\tcase \"csv\": return \"text/csv\";\n\t\tcase \"tab\":\n\t\tcase \"tsv\": return \"text/tab-separated-values\";\n\t\tcase \"xls\": return \"application/vnd.ms-excel\";\n\t\tcase \"xlsx\": return \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n\t\tdefault: return \"application/octet-stream\";\n\t}\n}\n//#endregion\nexport { z as APIError, R as AppError, V as ConnectorError, e as DEFAULT_LOCALE_ID, K as ENCODING_GROUP_CONFIG_MAP, q as ENCODING_TYPE_CONFIG_MAP, B as EngineError, H as FetchError, le as ORDERED_VALUE_DELIMITER_IDS, t as SUPPORTED_LANGUAGES, Oe as buildFetchError, oe as componentInstanceConfigSchema, ke as concatenateSerialisedErrorMessages, ge as connectorConfigSchema, M as constructConnectorCategoryConfig, N as constructConnectorUsageConfig, qe as convertODataTypeIdToUsageTypeId, Ce as cookbookConfigSchema, n as createLabelMap, j as determineConnectorUsageId, Ye as extractExtensionFromPath, Je as extractNameFromPath, Q as formatNumberAsDecimalNumber, Qe as formatNumberAsDuration, Xe as formatNumberAsSize, Ze as formatNumberAsStorageSize, $ as formatNumberAsWholeNumber, ce as getComponentStatus, xe as getConnectorActionsTable, Ue as getEncodingTypeConfigs, Ae as ignoreErrors, He as isEncodingTypeId, ze as loadTool, Ge as localiseConfig, Ke as localiseConfigs, J as localiseReference, $e as lookupMimeTypeForExtension, U as normalizeToError, Te as presenterConfigSchema, r as resolveLabel, je as serialiseError, Me as unserialiseError };\n","// ── External Dependencies & Registrations\nimport { type Options, parse, type Parser } from 'csv-parse/browser/esm';\nexport type { Options, Parser } from 'csv-parse/browser/esm';\n\n// ── DPUse Framework\nimport { buildFetchError, ignoreErrors } from '@dpuse/dpuse-shared';\nimport type { ParsingRecord, RecordDelimiterId, RecordRetrievalTypeId, RetrieveRecordsOptions, RetrieveRecordsSummary, ValueDelimiterId } from '@dpuse/dpuse-shared';\n\n// ── Types ────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport interface ParseTextResult {\n parsedRecords: ParsingRecord[];\n recordDelimiterId: RecordDelimiterId;\n valueDelimiterId: ValueDelimiterId;\n}\n\ninterface StreamRecordBuffer {\n push: (record: ParsingRecord) => void;\n flush: () => void;\n}\n\n// ── Constants ────────────────────────────────────────────────────────────────────────────────────────────────────────\n\n/**\n * Baseline parser configuration pinned to explicit values to prevent behavioural drift across parser upgrades.\n * Intentionally exhaustive, even where values mirror current defaults. See: https://csv.js.org/parse/options/ for more information.\n *\n * `cast`, `objname`, `on_record`, `on_skip`, and `to` are intentionally omitted rather than set to `undefined`:\n * their csv-parse types don't include `undefined` in the property's own type (only via the optional `?`), which\n * `exactOptionalPropertyTypes` rejects as an explicit assignment. Omitting the key is equivalent at runtime — csv-parse\n * treats \"absent\" and \"explicitly undefined\" identically — so this preserves the \"pin every default explicitly\"\n * intent without a type error. (`to`'s documented default of 1 also can't be used regardless: it triggers\n * `TypeError: \"listener\" argument must be a function`.)\n */\nconst DEFAULT_OPTIONS: Options = {\n bom: false,\n cast_date: false,\n columns: false,\n comment: '',\n comment_no_infix: false,\n delimiter: ',',\n encoding: 'utf-8',\n escape: '\"',\n from: 1,\n from_line: 1,\n group_columns_by_name: false,\n ignore_last_delimiters: false,\n info: false,\n ltrim: false,\n max_record_size: 0,\n quote: '\"',\n raw: false,\n record_delimiter: [],\n relax_column_count: false,\n relax_column_count_less: false,\n relax_column_count_more: false,\n relax_quotes: false,\n rtrim: false,\n skip_empty_lines: false,\n skip_records_with_empty_values: false,\n skip_records_with_error: false,\n to_line: -1,\n trim: false\n};\n\nconst DEFAULT_RECORD_BUFFER_POOL_SIZE = 4;\n\nconst DEFAULT_RECORD_BUFFER_SIZE = 10_000;\n\n// ── Tools ────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport class Tool {\n /**\n * Parse stream.\n */\n async parseStream(\n retrieveRecordsOptions: RetrieveRecordsOptions,\n parseOptions: Options,\n url: string,\n abortController: AbortController,\n chunk: (typeId: RecordRetrievalTypeId, records: ParsingRecord[]) => void\n ): Promise<RetrieveRecordsSummary> {\n return new Promise<RetrieveRecordsSummary>((resolve, reject) => {\n let parser: Parser | undefined;\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined;\n let recordBuffer: StreamRecordBuffer | undefined;\n let hasErrored = false;\n let hasStoppedProcessing = false;\n\n const stopProcessing = (): void => {\n if (hasStoppedProcessing) return;\n hasStoppedProcessing = true;\n\n const activeParser = parser;\n parser = undefined;\n recordBuffer = undefined;\n if (activeParser != null) {\n ignoreErrors(() => activeParser.removeAllListeners());\n ignoreErrors(() => activeParser.end());\n }\n ignoreErrors(() => void reader?.cancel());\n reader = undefined;\n };\n\n abortController.signal.addEventListener('abort', stopProcessing, { once: true });\n\n const handleError = (error: unknown): void => {\n if (hasErrored) return;\n\n hasErrored = true;\n stopProcessing();\n if (!abortController.signal.aborted) abortController.abort(error);\n reject(error instanceof Error ? error : new Error(String(error)));\n };\n\n const run = async (): Promise<void> => {\n parser = parse({\n ...DEFAULT_OPTIONS,\n ...parseOptions,\n cast: (value, context): { value: string; wasValueQuoted: boolean } => ({ value, wasValueQuoted: context.quoting })\n });\n recordBuffer = constructRecordBuffer({ chunk, chunkSize: retrieveRecordsOptions.chunkSize ?? DEFAULT_RECORD_BUFFER_SIZE });\n parser.on('readable', () => {\n try {\n if (parser == null || recordBuffer == null) return;\n let record: ParsingRecord | null;\n while ((record = parser.read() as ParsingRecord | null) != null) {\n if (hasErrored) return;\n abortController.signal.throwIfAborted();\n recordBuffer.push(record);\n }\n } catch (error) {\n handleError(error);\n }\n });\n parser.on('error', (error) => {\n handleError(error);\n });\n parser.on('end', () => {\n if (hasErrored) return;\n recordBuffer?.flush();\n resolve(constructSummary(parser));\n });\n\n const response = await fetch(encodeURI(url), { signal: abortController.signal });\n if (!response.ok || response.body == null) {\n throw await buildFetchError(response, `Failed to fetch '${url}' file.`, 'dpuse-connector-file-store-emulator|Connector|retrieve');\n }\n\n reader = response.body.getReader();\n const decoder = new TextDecoder(retrieveRecordsOptions.encodingId);\n let result = await reader.read();\n while (!result.done) {\n if (hasErrored) return;\n abortController.signal.throwIfAborted();\n const decodedChunk = decoder.decode(result.value, { stream: true });\n if (decodedChunk.length > 0) parser.write(decodedChunk);\n result = await reader.read();\n }\n\n if (hasErrored) return;\n\n const finalChunk = decoder.decode();\n if (finalChunk.length > 0) parser.write(finalChunk);\n parser.end();\n };\n\n void run().catch((error: unknown) => {\n handleError(error);\n });\n });\n }\n\n /**\n * Parse text.\n */\n async parseText(text: string, delimiters: ValueDelimiterId[]): Promise<ParseTextResult> {\n const recordDelimiterId = determineRecordDelimiter(text);\n const { parsedRecords, valueDelimiterId } = await determineValueDelimiter(text, delimiters);\n return { parsedRecords, recordDelimiterId, valueDelimiterId };\n }\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────────────────────────────────────────────\n\n//#region: Parse stream helpers.\n\n/**\n * Construct record buffer.\n */\nfunction constructRecordBuffer(bufferOptions: { chunk: (typeId: RecordRetrievalTypeId, records: ParsingRecord[]) => void; chunkSize: number }): StreamRecordBuffer {\n const recordsPerChunk = Math.max(1, Math.floor(bufferOptions.chunkSize));\n const pool: ParsingRecord[][] = [];\n let records = allocateBuffer();\n let recordCount = 0;\n\n const flush = (): void => {\n if (recordCount === 0) return;\n const recordsToEmit = records;\n recordsToEmit.length = recordCount; // Trim before handing off so consumers only see populated entries.\n records = allocateBuffer();\n recordCount = 0;\n bufferOptions.chunk('parsingRecordArray', recordsToEmit);\n if (pool.length < DEFAULT_RECORD_BUFFER_POOL_SIZE) pool.push(recordsToEmit);\n };\n\n const push = (record: ParsingRecord): void => {\n records[recordCount++] = record;\n if (recordCount >= recordsPerChunk) flush();\n };\n\n return { flush, push };\n\n function allocateBuffer(): ParsingRecord[] {\n const pooled = pool.pop();\n if (pooled != null) {\n pooled.length = 0;\n return pooled;\n }\n\n const allocated = Array.from<ParsingRecord>({ length: recordsPerChunk });\n allocated.length = 0;\n return allocated;\n }\n}\n\n/** Construct summary. */\nfunction constructSummary(parser: Parser | undefined): RetrieveRecordsSummary {\n return {\n byteCount: parser?.info.bytes ?? -1,\n commentLineCount: parser?.info.comment_lines ?? -1,\n emptyLineCount: parser?.info.empty_lines ?? -1,\n nonUniformRecordCount: parser?.info.invalid_field_length ?? -1,\n lineCount: parser?.info.lines ?? -1,\n recordCount: parser?.info.records ?? -1\n };\n}\n\n//#region: Parse text helpers.\n\n/**\n * Determine record delimiter.\n */\nfunction determineRecordDelimiter(text: string): RecordDelimiterId {\n const countCRLF = (text.match(/\\r\\n/g) ?? []).length; // Count all '\\r\\n'character sequences.\n const countLF = (text.match(/(?<!\\r)\\n/g) ?? []).length; // Count all '\\n' characters not preceded by '\\r' character.\n const countCR = (text.match(/\\r(?!\\n)/g) ?? []).length; // Count all '\\r' characters not followed by '\\n' character.\n if (countCRLF >= countLF && countCRLF >= countCR) return '\\r\\n';\n if (countLF >= countCRLF && countLF >= countCR) return '\\n';\n if (countCR >= countCRLF && countCR >= countLF) return '\\r';\n return '\\n'; // Default to '\\n' character if all counts are equal or zero.\n}\n\n/**\n * Determine value delimiter.\n */\nasync function determineValueDelimiter(text: string, delimiters: ValueDelimiterId[]): Promise<{ parsedRecords: ParsingRecord[]; valueDelimiterId: ValueDelimiterId }> {\n let valueDelimiterId: ValueDelimiterId | undefined;\n let priorAverageCount: number;\n let priorSumCountDiffs: number;\n let parsedRecords: ParsingRecord[] = [];\n\n /* TODO: Could improve performance by limiting the number of delimiters\n processed by exiting if column count is the same for each line and\n by ordering delimiters in most common usage. Could also consider\n parallel parsing. Maybe group by most common delimiters and then by\n less common? */\n\n for (const delimiter of delimiters) {\n try {\n let totalValueCount = 0;\n let priorValueCount: number | undefined;\n let recordCount = 0;\n let sumOfValueCountDiffs = 0;\n\n const parser = parse({\n ...DEFAULT_OPTIONS,\n cast: (value, context): { value: string; wasValueQuoted: boolean } => ({ value, wasValueQuoted: context.quoting }),\n delimiter,\n relax_column_count: true\n });\n await new Promise<void>((resolve): void => {\n try {\n const pendingRecords: ParsingRecord[] = [];\n parser.on('readable', (): void => {\n let record;\n while ((record = parser.read() as ParsingRecord | null) != null) {\n recordCount++;\n const valueCount = record.length;\n if (priorValueCount != null) sumOfValueCountDiffs += Math.abs(valueCount - priorValueCount);\n priorValueCount = valueCount;\n totalValueCount += valueCount;\n pendingRecords.push(record);\n }\n });\n parser.on('error', (): void => {\n resolve(); // Ignore errors. Assume invalid delimiter caused parsing error.\n });\n parser.on('end', (): void => {\n const averageValueCount = totalValueCount / recordCount;\n if ((!priorSumCountDiffs || sumOfValueCountDiffs <= priorSumCountDiffs) && (!priorAverageCount || averageValueCount > priorAverageCount)) {\n valueDelimiterId = delimiter;\n priorAverageCount = averageValueCount;\n priorSumCountDiffs = sumOfValueCountDiffs;\n parsedRecords = [...pendingRecords];\n }\n resolve();\n });\n parser.write(text);\n parser.end();\n } catch {\n resolve(); // Ignore errors. Assume invalid delimiter caused parsing error.\n }\n });\n } catch {\n // Ignore errors. Assume invalid delimiter caused parsing error.\n }\n }\n\n return { parsedRecords, valueDelimiterId: valueDelimiterId ?? ',' };\n}\n"],"x_google_ignoreList":[0,1],"mappings":"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"}