@zenfs/dom 0.0.1 → 0.0.3
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.
- package/dist/backends/FileSystemAccess.js +1 -1
- package/dist/backends/HTTPRequest.js +8 -8
- package/dist/backends/IndexedDB.js +1 -13
- package/dist/backends/Storage.d.ts +2 -2
- package/dist/browser.min.js +3 -3
- package/dist/browser.min.js.map +4 -4
- package/package.json +9 -2
- package/readme.md +5 -16
- package/dist/file_index.d.ts +0 -154
- package/dist/file_index.js +0 -342
package/dist/browser.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/index.ts", "../node_modules/@jspm/core/nodelibs/browser/buffer.js", "../node_modules/@
|
|
4
|
-
"sourcesContent": ["export * from './backends/FileSystemAccess.js';\nexport * from './backends/HTTPRequest.js';\nexport * from './backends/IndexedDB.js';\nexport * from './backends/Storage.js';\nexport * from './backends/Worker.js';\n", "var exports$3 = {},\n _dewExec$2 = false;\nfunction dew$2() {\n if (_dewExec$2) return exports$3;\n _dewExec$2 = true;\n exports$3.byteLength = byteLength;\n exports$3.toByteArray = toByteArray;\n exports$3.fromByteArray = fromByteArray;\n var lookup = [];\n var revLookup = [];\n var Arr = typeof Uint8Array !== \"undefined\" ? Uint8Array : Array;\n var code = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n } // Support decoding URL-safe base64 strings, as Node.js does.\n // See: https://en.wikipedia.org/wiki/Base64#URL_applications\n\n\n revLookup[\"-\".charCodeAt(0)] = 62;\n revLookup[\"_\".charCodeAt(0)] = 63;\n\n function getLens(b64) {\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 } // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n\n\n var validLen = b64.indexOf(\"=\");\n if (validLen === -1) validLen = len;\n var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n return [validLen, placeHoldersLen];\n } // base64 is 4/3 + up to two characters of the original data\n\n\n function byteLength(b64) {\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n }\n\n function _byteLength(b64, validLen, placeHoldersLen) {\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n }\n\n function toByteArray(b64) {\n var tmp;\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars\n\n var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n var i;\n\n for (i = 0; i < len; i += 4) {\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[curByte++] = tmp >> 16 & 255;\n arr[curByte++] = tmp >> 8 & 255;\n arr[curByte++] = tmp & 255;\n }\n\n if (placeHoldersLen === 2) {\n tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n arr[curByte++] = tmp & 255;\n }\n\n if (placeHoldersLen === 1) {\n tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n arr[curByte++] = tmp >> 8 & 255;\n arr[curByte++] = tmp & 255;\n }\n\n return arr;\n }\n\n function tripletToBase64(num) {\n return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];\n }\n\n function encodeChunk(uint8, start, end) {\n var tmp;\n var output = [];\n\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16 & 16711680) + (uint8[i + 1] << 8 & 65280) + (uint8[i + 2] & 255);\n output.push(tripletToBase64(tmp));\n }\n\n return output.join(\"\");\n }\n\n function fromByteArray(uint8) {\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n // go through the array every three bytes, we'll deal with trailing stuff later\n\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 } // pad the end with zeros, but make sure to not forget the extra bytes\n\n\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 63] + \"==\");\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + \"=\");\n }\n\n return parts.join(\"\");\n }\n\n return exports$3;\n}\n\nvar exports$2 = {},\n _dewExec$1 = false;\nfunction dew$1() {\n if (_dewExec$1) return exports$2;\n _dewExec$1 = true;\n\n /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\n exports$2.read = function (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 i += d;\n e = s & (1 << -nBits) - 1;\n s >>= -nBits;\n nBits += eLen;\n\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\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\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n };\n\n exports$2.write = function (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 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\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\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 & 255, i += d, m /= 256, mLen -= 8) {}\n\n e = e << mLen | m;\n eLen += mLen;\n\n for (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n };\n\n return exports$2;\n}\n\nvar exports$1 = {},\n _dewExec = false;\nfunction dew() {\n if (_dewExec) return exports$1;\n _dewExec = true;\n\n const base64 = dew$2();\n\n const ieee754 = dew$1();\n\n const customInspectSymbol = typeof Symbol === \"function\" && typeof Symbol[\"for\"] === \"function\" ? Symbol[\"for\"](\"nodejs.util.inspect.custom\") // eslint-disable-line dot-notation\n : null;\n exports$1.Buffer = Buffer;\n exports$1.SlowBuffer = SlowBuffer;\n exports$1.INSPECT_MAX_BYTES = 50;\n const K_MAX_LENGTH = 2147483647;\n exports$1.kMaxLength = K_MAX_LENGTH;\n /**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * 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 * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\n\n Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\n\n if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"This browser lacks typed array (Uint8Array) support which is required by \" + \"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");\n }\n\n function typedArraySupport() {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1);\n const proto = {\n foo: function () {\n return 42;\n }\n };\n Object.setPrototypeOf(proto, Uint8Array.prototype);\n Object.setPrototypeOf(arr, proto);\n return arr.foo() === 42;\n } catch (e) {\n return false;\n }\n }\n\n Object.defineProperty(Buffer.prototype, \"parent\", {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined;\n return this.buffer;\n }\n });\n Object.defineProperty(Buffer.prototype, \"offset\", {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined;\n return this.byteOffset;\n }\n });\n\n function createBuffer(length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError(\"The value \\\"\" + length + \"\\\" is invalid for option \\\"size\\\"\");\n } // Return an augmented `Uint8Array` instance\n\n\n const buf = new Uint8Array(length);\n Object.setPrototypeOf(buf, Buffer.prototype);\n return buf;\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\n\n function Buffer(arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === \"number\") {\n if (typeof encodingOrOffset === \"string\") {\n throw new TypeError(\"The \\\"string\\\" argument must be of type string. Received type number\");\n }\n\n return allocUnsafe(arg);\n }\n\n return from(arg, encodingOrOffset, length);\n }\n\n Buffer.poolSize = 8192; // not used by this implementation\n\n function from(value, encodingOrOffset, length) {\n if (typeof value === \"string\") {\n return fromString(value, encodingOrOffset);\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value);\n }\n\n if (value == null) {\n throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \" + \"or Array-like Object. Received type \" + typeof value);\n }\n\n if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n\n if (typeof SharedArrayBuffer !== \"undefined\" && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n\n if (typeof value === \"number\") {\n throw new TypeError(\"The \\\"value\\\" argument must not be of type number. Received type number\");\n }\n\n const valueOf = value.valueOf && value.valueOf();\n\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length);\n }\n\n const b = fromObject(value);\n if (b) return b;\n\n if (typeof Symbol !== \"undefined\" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === \"function\") {\n return Buffer.from(value[Symbol.toPrimitive](\"string\"), encodingOrOffset, length);\n }\n\n throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \" + \"or Array-like Object. Received type \" + typeof value);\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 **/\n\n\n Buffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length);\n }; // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n // https://github.com/feross/buffer/pull/148\n\n\n Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype);\n Object.setPrototypeOf(Buffer, Uint8Array);\n\n function assertSize(size) {\n if (typeof size !== \"number\") {\n throw new TypeError(\"\\\"size\\\" argument must be of type number\");\n } else if (size < 0) {\n throw new RangeError(\"The value \\\"\" + size + \"\\\" is invalid for option \\\"size\\\"\");\n }\n }\n\n function alloc(size, fill, encoding) {\n assertSize(size);\n\n if (size <= 0) {\n return createBuffer(size);\n }\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 interpreted as a start offset.\n return typeof encoding === \"string\" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);\n }\n\n return createBuffer(size);\n }\n /**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\n\n Buffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding);\n };\n\n function allocUnsafe(size) {\n assertSize(size);\n return createBuffer(size < 0 ? 0 : checked(size) | 0);\n }\n /**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\n\n Buffer.allocUnsafe = function (size) {\n return allocUnsafe(size);\n };\n /**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\n\n\n Buffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size);\n };\n\n function fromString(string, encoding) {\n if (typeof encoding !== \"string\" || encoding === \"\") {\n encoding = \"utf8\";\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError(\"Unknown encoding: \" + encoding);\n }\n\n const length = byteLength(string, encoding) | 0;\n let buf = createBuffer(length);\n const actual = buf.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 buf = buf.slice(0, actual);\n }\n\n return buf;\n }\n\n function fromArrayLike(array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0;\n const buf = createBuffer(length);\n\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255;\n }\n\n return buf;\n }\n\n function fromArrayView(arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView);\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);\n }\n\n return fromArrayLike(arrayView);\n }\n\n function fromArrayBuffer(array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError(\"\\\"offset\\\" is outside of buffer bounds\");\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError(\"\\\"length\\\" is outside of buffer bounds\");\n }\n\n let buf;\n\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array);\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset);\n } else {\n buf = new Uint8Array(array, byteOffset, length);\n } // Return an augmented `Uint8Array` instance\n\n\n Object.setPrototypeOf(buf, Buffer.prototype);\n return buf;\n }\n\n function fromObject(obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0;\n const buf = createBuffer(len);\n\n if (buf.length === 0) {\n return buf;\n }\n\n obj.copy(buf, 0, 0, len);\n return buf;\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== \"number\" || numberIsNaN(obj.length)) {\n return createBuffer(0);\n }\n\n return fromArrayLike(obj);\n }\n\n if (obj.type === \"Buffer\" && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data);\n }\n }\n\n function checked(length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError(\"Attempt to allocate Buffer larger than maximum \" + \"size: 0x\" + K_MAX_LENGTH.toString(16) + \" bytes\");\n }\n\n return length | 0;\n }\n\n function SlowBuffer(length) {\n if (+length != length) {\n // eslint-disable-line eqeqeq\n length = 0;\n }\n\n return Buffer.alloc(+length);\n }\n\n Buffer.isBuffer = function isBuffer(b) {\n return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false\n };\n\n Buffer.compare = function compare(a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);\n\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\"The \\\"buf1\\\", \\\"buf2\\\" arguments must be one of type Buffer or Uint8Array\");\n }\n\n if (a === b) return 0;\n let x = a.length;\n let y = b.length;\n\n for (let 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\n Buffer.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\n default:\n return false;\n }\n };\n\n Buffer.concat = function concat(list, length) {\n if (!Array.isArray(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 let i;\n\n if (length === undefined) {\n length = 0;\n\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n const buffer = Buffer.allocUnsafe(length);\n let pos = 0;\n\n for (i = 0; i < list.length; ++i) {\n let buf = list[i];\n\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n buf.copy(buffer, pos);\n } else {\n Uint8Array.prototype.set.call(buffer, buf, pos);\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError(\"\\\"list\\\" argument must be an Array of Buffers\");\n } else {\n buf.copy(buffer, pos);\n }\n\n pos += buf.length;\n }\n\n return buffer;\n };\n\n function byteLength(string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length;\n }\n\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength;\n }\n\n if (typeof string !== \"string\") {\n throw new TypeError(\"The \\\"string\\\" argument must be one of type string, Buffer, or ArrayBuffer. \" + \"Received type \" + typeof string);\n }\n\n const len = string.length;\n const mustMatch = arguments.length > 2 && arguments[2] === true;\n if (!mustMatch && len === 0) return 0; // Use a for loop to avoid recursion\n\n let loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n return len;\n\n case \"utf8\":\n case \"utf-8\":\n return utf8ToBytes(string).length;\n\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return len * 2;\n\n case \"hex\":\n return len >>> 1;\n\n case \"base64\":\n return base64ToBytes(string).length;\n\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8\n }\n\n encoding = (\"\" + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n }\n\n Buffer.byteLength = byteLength;\n\n function slowToString(encoding, start, end) {\n let loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\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\n if (start === undefined || start < 0) {\n start = 0;\n } // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n\n\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 } // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n\n\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 } // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n // to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n // reliably in a browserify context because there could be multiple different\n // copies of the 'buffer' package in use. This method works even for Buffer\n // instances that were created from another copy of the `buffer` package.\n // See: https://github.com/feross/buffer/issues/154\n\n\n Buffer.prototype._isBuffer = true;\n\n function swap(b, n, m) {\n const i = b[n];\n b[n] = b[m];\n b[m] = i;\n }\n\n Buffer.prototype.swap16 = function swap16() {\n const len = this.length;\n\n if (len % 2 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 16-bits\");\n }\n\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n\n return this;\n };\n\n Buffer.prototype.swap32 = function swap32() {\n const len = this.length;\n\n if (len % 4 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 32-bits\");\n }\n\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n\n return this;\n };\n\n Buffer.prototype.swap64 = function swap64() {\n const len = this.length;\n\n if (len % 8 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 64-bits\");\n }\n\n for (let 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\n return this;\n };\n\n Buffer.prototype.toString = function toString() {\n const length = this.length;\n if (length === 0) return \"\";\n if (arguments.length === 0) return utf8Slice(this, 0, length);\n return slowToString.apply(this, arguments);\n };\n\n Buffer.prototype.toLocaleString = Buffer.prototype.toString;\n\n Buffer.prototype.equals = function equals(b) {\n if (!Buffer.isBuffer(b)) throw new TypeError(\"Argument must be a Buffer\");\n if (this === b) return true;\n return Buffer.compare(this, b) === 0;\n };\n\n Buffer.prototype.inspect = function inspect() {\n let str = \"\";\n const max = exports$1.INSPECT_MAX_BYTES;\n str = this.toString(\"hex\", 0, max).replace(/(.{2})/g, \"$1 \").trim();\n if (this.length > max) str += \" ... \";\n return \"<Buffer \" + str + \">\";\n };\n\n if (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;\n }\n\n Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength);\n }\n\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\"The \\\"target\\\" argument must be one of type Buffer or Uint8Array. \" + \"Received type \" + typeof target);\n }\n\n if (start === undefined) {\n start = 0;\n }\n\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n\n if (thisStart === undefined) {\n thisStart = 0;\n }\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\n if (thisStart >= thisEnd) {\n return -1;\n }\n\n if (start >= end) {\n return 1;\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n if (this === target) return 0;\n let x = thisEnd - thisStart;\n let y = end - start;\n const len = Math.min(x, y);\n const thisCopy = this.slice(thisStart, thisEnd);\n const targetCopy = target.slice(start, end);\n\n for (let 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 }; // 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\n\n\n function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1; // Normalize byteOffset\n\n if (typeof byteOffset === \"string\") {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 2147483647) {\n byteOffset = 2147483647;\n } else if (byteOffset < -2147483648) {\n byteOffset = -2147483648;\n }\n\n byteOffset = +byteOffset; // Coerce to Number.\n\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : buffer.length - 1;\n } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n if (byteOffset >= buffer.length) {\n if (dir) return -1;else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;else return -1;\n } // Normalize val\n\n\n if (typeof val === \"string\") {\n val = Buffer.from(val, encoding);\n } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1;\n }\n\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n } else if (typeof val === \"number\") {\n val = val & 255; // Search for a byte value [0-255]\n\n if (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\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n }\n\n throw new TypeError(\"val must be string, number or Buffer\");\n }\n\n function arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n let indexSize = 1;\n let arrLength = arr.length;\n let valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n\n if (encoding === \"ucs2\" || encoding === \"ucs-2\" || encoding === \"utf16le\" || encoding === \"utf-16le\") {\n if (arr.length < 2 || val.length < 2) {\n return -1;\n }\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 let i;\n\n if (dir) {\n let foundIndex = -1;\n\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\n for (i = byteOffset; i >= 0; i--) {\n let found = true;\n\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break;\n }\n }\n\n if (found) return i;\n }\n }\n\n return -1;\n }\n\n Buffer.prototype.includes = function includes(val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1;\n };\n\n Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n };\n\n Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n };\n\n function hexWrite(buf, string, offset, length) {\n offset = Number(offset) || 0;\n const remaining = buf.length - offset;\n\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n\n if (length > remaining) {\n length = remaining;\n }\n }\n\n const strLen = string.length;\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n\n let i;\n\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16);\n if (numberIsNaN(parsed)) return i;\n buf[offset + i] = parsed;\n }\n\n return i;\n }\n\n function utf8Write(buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n }\n\n function asciiWrite(buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length);\n }\n\n function base64Write(buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length);\n }\n\n function ucs2Write(buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n }\n\n Buffer.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; // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === \"string\") {\n encoding = offset;\n length = this.length;\n offset = 0; // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0;\n\n if (isFinite(length)) {\n length = length >>> 0;\n if (encoding === undefined) encoding = \"utf8\";\n } else {\n encoding = length;\n length = undefined;\n }\n } else {\n throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");\n }\n\n const 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 let loweredCase = false;\n\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 case \"latin1\":\n case \"binary\":\n return asciiWrite(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\n Buffer.prototype.toJSON = function toJSON() {\n return {\n type: \"Buffer\",\n data: Array.prototype.slice.call(this._arr || this, 0)\n };\n };\n\n function base64Slice(buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf);\n } else {\n return base64.fromByteArray(buf.slice(start, end));\n }\n }\n\n function utf8Slice(buf, start, end) {\n end = Math.min(buf.length, end);\n const res = [];\n let i = start;\n\n while (i < end) {\n const firstByte = buf[i];\n let codePoint = null;\n let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 128) {\n codePoint = firstByte;\n }\n\n break;\n\n case 2:\n secondByte = buf[i + 1];\n\n if ((secondByte & 192) === 128) {\n tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n\n if (tempCodePoint > 127) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n\n if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n\n if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n codePoint = tempCodePoint;\n }\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 = 65533;\n bytesPerSequence = 1;\n } else if (codePoint > 65535) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 65536;\n res.push(codePoint >>> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res);\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\n\n\n const MAX_ARGUMENTS_LENGTH = 4096;\n\n function decodeCodePointsArray(codePoints) {\n const len = codePoints.length;\n\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n let res = \"\";\n let i = 0;\n\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n\n return res;\n }\n\n function asciiSlice(buf, start, end) {\n let ret = \"\";\n end = Math.min(buf.length, end);\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 127);\n }\n\n return ret;\n }\n\n function latin1Slice(buf, start, end) {\n let ret = \"\";\n end = Math.min(buf.length, end);\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n\n return ret;\n }\n\n function hexSlice(buf, start, end) {\n const len = buf.length;\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n let out = \"\";\n\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]];\n }\n\n return out;\n }\n\n function utf16leSlice(buf, start, end) {\n const bytes = buf.slice(start, end);\n let res = \"\"; // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n\n return res;\n }\n\n Buffer.prototype.slice = function slice(start, end) {\n const 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 const newBuf = this.subarray(start, end); // Return an augmented `Uint8Array` instance\n\n Object.setPrototypeOf(newBuf, Buffer.prototype);\n return newBuf;\n };\n /*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\n\n function 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\n Buffer.prototype.readUintLE = Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let val = this[offset];\n let mul = 1;\n let i = 0;\n\n while (++i < byteLength && (mul *= 256)) {\n val += this[offset + i] * mul;\n }\n\n return val;\n };\n\n Buffer.prototype.readUintBE = Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n let val = this[offset + --byteLength];\n let mul = 1;\n\n while (byteLength > 0 && (mul *= 256)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val;\n };\n\n Buffer.prototype.readUint8 = Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset];\n };\n\n Buffer.prototype.readUint16LE = Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | this[offset + 1] << 8;\n };\n\n Buffer.prototype.readUint16BE = Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] << 8 | this[offset + 1];\n };\n\n Buffer.prototype.readUint32LE = Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216;\n };\n\n Buffer.prototype.readUint32BE = Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n };\n\n Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const lo = first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24;\n const hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last * 2 ** 24;\n return BigInt(lo) + (BigInt(hi) << BigInt(32));\n });\n Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const hi = first * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n const lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last;\n return (BigInt(hi) << BigInt(32)) + BigInt(lo);\n });\n\n Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let val = this[offset];\n let mul = 1;\n let i = 0;\n\n while (++i < byteLength && (mul *= 256)) {\n val += this[offset + i] * mul;\n }\n\n mul *= 128;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n };\n\n Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let i = byteLength;\n let mul = 1;\n let val = this[offset + --i];\n\n while (i > 0 && (mul *= 256)) {\n val += this[offset + --i] * mul;\n }\n\n mul *= 128;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n };\n\n Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 128)) return this[offset];\n return (255 - this[offset] + 1) * -1;\n };\n\n Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n const val = this[offset] | this[offset + 1] << 8;\n return val & 32768 ? val | 4294901760 : val;\n };\n\n Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n const val = this[offset + 1] | this[offset] << 8;\n return val & 32768 ? val | 4294901760 : val;\n };\n\n Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n };\n\n Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n };\n\n Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last << 24); // Overflow\n\n return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24);\n });\n Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last);\n });\n\n Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, true, 23, 4);\n };\n\n Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, false, 23, 4);\n };\n\n Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, true, 52, 8);\n };\n\n Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, false, 52, 8);\n };\n\n function checkInt(buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(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\n Buffer.prototype.writeUintLE = Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n let mul = 1;\n let i = 0;\n this[offset] = value & 255;\n\n while (++i < byteLength && (mul *= 256)) {\n this[offset + i] = value / mul & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeUintBE = Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n let i = byteLength - 1;\n let mul = 1;\n this[offset + i] = value & 255;\n\n while (--i >= 0 && (mul *= 256)) {\n this[offset + i] = value / mul & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeUint8 = Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 255, 0);\n this[offset] = value & 255;\n return offset + 1;\n };\n\n Buffer.prototype.writeUint16LE = Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n };\n\n Buffer.prototype.writeUint16BE = Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 255;\n return offset + 2;\n };\n\n Buffer.prototype.writeUint32LE = Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n this[offset + 3] = value >>> 24;\n this[offset + 2] = value >>> 16;\n this[offset + 1] = value >>> 8;\n this[offset] = value & 255;\n return offset + 4;\n };\n\n Buffer.prototype.writeUint32BE = Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 255;\n return offset + 4;\n };\n\n function wrtBigUInt64LE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n let lo = Number(value & BigInt(4294967295));\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n let hi = Number(value >> BigInt(32) & BigInt(4294967295));\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n return offset;\n }\n\n function wrtBigUInt64BE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n let lo = Number(value & BigInt(4294967295));\n buf[offset + 7] = lo;\n lo = lo >> 8;\n buf[offset + 6] = lo;\n lo = lo >> 8;\n buf[offset + 5] = lo;\n lo = lo >> 8;\n buf[offset + 4] = lo;\n let hi = Number(value >> BigInt(32) & BigInt(4294967295));\n buf[offset + 3] = hi;\n hi = hi >> 8;\n buf[offset + 2] = hi;\n hi = hi >> 8;\n buf[offset + 1] = hi;\n hi = hi >> 8;\n buf[offset] = hi;\n return offset + 8;\n }\n\n Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n });\n Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n });\n\n Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n const limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n let i = 0;\n let mul = 1;\n let sub = 0;\n this[offset] = value & 255;\n\n while (++i < byteLength && (mul *= 256)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n const limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n let i = byteLength - 1;\n let mul = 1;\n let sub = 0;\n this[offset + i] = value & 255;\n\n while (--i >= 0 && (mul *= 256)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 127, -128);\n if (value < 0) value = 255 + value + 1;\n this[offset] = value & 255;\n return offset + 1;\n };\n\n Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n };\n\n Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 255;\n return offset + 2;\n };\n\n Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n this[offset + 2] = value >>> 16;\n this[offset + 3] = value >>> 24;\n return offset + 4;\n };\n\n Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n if (value < 0) value = 4294967295 + value + 1;\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 255;\n return offset + 4;\n };\n\n Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n });\n Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n });\n\n function 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\n function writeFloat(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4;\n }\n\n Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert);\n };\n\n Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert);\n };\n\n function writeDouble(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8;\n }\n\n Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert);\n };\n\n Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert);\n }; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\n Buffer.prototype.copy = function copy(target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError(\"argument should be a Buffer\");\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; // Copy 0 bytes; we're done\n\n if (end === start) return 0;\n if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n if (targetStart < 0) {\n throw new RangeError(\"targetStart out of bounds\");\n }\n\n if (start < 0 || start >= this.length) throw new RangeError(\"Index out of range\");\n if (end < 0) throw new RangeError(\"sourceEnd out of bounds\"); // Are we oob?\n\n if (end > this.length) end = this.length;\n\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n const len = end - start;\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === \"function\") {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end);\n } else {\n Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);\n }\n\n return len;\n }; // Usage:\n // buffer.fill(number[, offset[, end]])\n // buffer.fill(buffer[, offset[, end]])\n // buffer.fill(string[, offset[, end]][, encoding])\n\n\n Buffer.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\n if (encoding !== undefined && typeof encoding !== \"string\") {\n throw new TypeError(\"encoding must be a string\");\n }\n\n if (typeof encoding === \"string\" && !Buffer.isEncoding(encoding)) {\n throw new TypeError(\"Unknown encoding: \" + encoding);\n }\n\n if (val.length === 1) {\n const code = val.charCodeAt(0);\n\n if (encoding === \"utf8\" && code < 128 || encoding === \"latin1\") {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code;\n }\n }\n } else if (typeof val === \"number\") {\n val = val & 255;\n } else if (typeof val === \"boolean\") {\n val = Number(val);\n } // Invalid ranges are not set to a default, so can range check early.\n\n\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 if (!val) val = 0;\n let i;\n\n if (typeof val === \"number\") {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n const bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);\n const len = bytes.length;\n\n if (len === 0) {\n throw new TypeError(\"The value \\\"\" + val + \"\\\" is invalid for argument \\\"value\\\"\");\n }\n\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this;\n }; // CUSTOM ERRORS\n // =============\n // Simplified versions from Node, changed for Buffer-only usage\n\n\n const errors = {};\n\n function E(sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor() {\n super();\n Object.defineProperty(this, \"message\", {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n }); // Add the error code to the name to include it in the stack trace.\n\n this.name = `${this.name} [${sym}]`; // Access the stack to generate the error message including the error code\n // from the name.\n\n this.stack; // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n\n delete this.name;\n }\n\n get code() {\n return sym;\n }\n\n set code(value) {\n Object.defineProperty(this, \"code\", {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n }\n\n toString() {\n return `${this.name} [${sym}]: ${this.message}`;\n }\n\n };\n }\n\n E(\"ERR_BUFFER_OUT_OF_BOUNDS\", function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`;\n }\n\n return \"Attempt to access memory outside buffer bounds\";\n }, RangeError);\n E(\"ERR_INVALID_ARG_TYPE\", function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`;\n }, TypeError);\n E(\"ERR_OUT_OF_RANGE\", function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`;\n let received = input;\n\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input));\n } else if (typeof input === \"bigint\") {\n received = String(input);\n\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received);\n }\n\n received += \"n\";\n }\n\n msg += ` It must be ${range}. Received ${received}`;\n return msg;\n }, RangeError);\n\n function addNumericalSeparator(val) {\n let res = \"\";\n let i = val.length;\n const start = val[0] === \"-\" ? 1 : 0;\n\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`;\n }\n\n return `${val.slice(0, i)}${res}`;\n } // CHECK FUNCTIONS\n // ===============\n\n\n function checkBounds(buf, offset, byteLength) {\n validateNumber(offset, \"offset\");\n\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1));\n }\n }\n\n function checkIntBI(value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === \"bigint\" ? \"n\" : \"\";\n let range;\n\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`;\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` + `${(byteLength + 1) * 8 - 1}${n}`;\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`;\n }\n\n throw new errors.ERR_OUT_OF_RANGE(\"value\", range, value);\n }\n\n checkBounds(buf, offset, byteLength);\n }\n\n function validateNumber(value, name) {\n if (typeof value !== \"number\") {\n throw new errors.ERR_INVALID_ARG_TYPE(name, \"number\", value);\n }\n }\n\n function boundsError(value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type);\n throw new errors.ERR_OUT_OF_RANGE(type || \"offset\", \"an integer\", value);\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || \"offset\", `>= ${type ? 1 : 0} and <= ${length}`, value);\n } // HELPER FUNCTIONS\n // ================\n\n\n const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;\n\n function base64clean(str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split(\"=\")[0]; // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n\n str = str.trim().replace(INVALID_BASE64_RE, \"\"); // Node converts strings with length < 2 to ''\n\n if (str.length < 2) return \"\"; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n while (str.length % 4 !== 0) {\n str = str + \"=\";\n }\n\n return str;\n }\n\n function utf8ToBytes(string, units) {\n units = units || Infinity;\n let codePoint;\n const length = string.length;\n let leadSurrogate = null;\n const bytes = [];\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i); // is surrogate component\n\n if (codePoint > 55295 && codePoint < 57344) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 56319) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n continue;\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n continue;\n } // valid lead\n\n\n leadSurrogate = codePoint;\n continue;\n } // 2 leads in a row\n\n\n if (codePoint < 56320) {\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n leadSurrogate = codePoint;\n continue;\n } // valid surrogate pair\n\n\n codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n }\n\n leadSurrogate = null; // encode utf8\n\n if (codePoint < 128) {\n if ((units -= 1) < 0) break;\n bytes.push(codePoint);\n } else if (codePoint < 2048) {\n if ((units -= 2) < 0) break;\n bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n } else if (codePoint < 65536) {\n if ((units -= 3) < 0) break;\n bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else if (codePoint < 1114112) {\n if ((units -= 4) < 0) break;\n bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else {\n throw new Error(\"Invalid code point\");\n }\n }\n\n return bytes;\n }\n\n function asciiToBytes(str) {\n const byteArray = [];\n\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 255);\n }\n\n return byteArray;\n }\n\n function utf16leToBytes(str, units) {\n let c, hi, lo;\n const byteArray = [];\n\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break;\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 function base64ToBytes(str) {\n return base64.toByteArray(base64clean(str));\n }\n\n function blitBuffer(src, dst, offset, length) {\n let i;\n\n for (i = 0; i < length; ++i) {\n if (i + offset >= dst.length || i >= src.length) break;\n dst[i + offset] = src[i];\n }\n\n return i;\n } // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n // the `instanceof` check but they should be treated as of that type.\n // See: https://github.com/feross/buffer/issues/166\n\n\n function isInstance(obj, type) {\n return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;\n }\n\n function numberIsNaN(obj) {\n // For IE11 support\n return obj !== obj; // eslint-disable-line no-self-compare\n } // Create lookup table for `toString('hex')`\n // See: https://github.com/feross/buffer/issues/219\n\n\n const hexSliceLookupTable = function () {\n const alphabet = \"0123456789abcdef\";\n const table = new Array(256);\n\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16;\n\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j];\n }\n }\n\n return table;\n }(); // Return not function with Error if BigInt not supported\n\n\n function defineBigIntMethod(fn) {\n return typeof BigInt === \"undefined\" ? BufferBigIntNotDefined : fn;\n }\n\n function BufferBigIntNotDefined() {\n throw new Error(\"BigInt not supported\");\n }\n\n return exports$1;\n}\n\nconst exports = dew();\nexports['Buffer']; exports['SlowBuffer']; exports['INSPECT_MAX_BYTES']; exports['kMaxLength'];\n\nvar Buffer = exports.Buffer;\r\nvar INSPECT_MAX_BYTES = exports.INSPECT_MAX_BYTES;\r\nvar kMaxLength = exports.kMaxLength;\n\nexport { Buffer, INSPECT_MAX_BYTES, exports as default, kMaxLength };\n", "var exports = {},\n _dewExec = false;\n\nvar _global = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : global;\n\nfunction dew() {\n if (_dewExec) return exports;\n _dewExec = true;\n // shim for using process in browser\n var process = exports = {}; // cached from whatever global is present so that test runners that stub it\n // don't break things. But we need to wrap it in a try catch in case it is\n // wrapped in strict mode code which doesn't define any globals. It's inside a\n // function because try/catches deoptimize in certain engines.\n\n var cachedSetTimeout;\n var cachedClearTimeout;\n\n function defaultSetTimout() {\n throw new Error(\"setTimeout has not been defined\");\n }\n\n function defaultClearTimeout() {\n throw new Error(\"clearTimeout has not been defined\");\n }\n\n (function () {\n try {\n if (typeof setTimeout === \"function\") {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === \"function\") {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n })();\n\n function runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\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 || _global, fun, 0);\n }\n }\n }\n\n function runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\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 || _global, marker);\n }\n }\n }\n\n var queue = [];\n var draining = false;\n var currentQueue;\n var queueIndex = -1;\n\n function cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n }\n\n function drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n }\n\n process.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n }; // v8 likes predictible objects\n\n\n function Item(fun, array) {\n (this || _global).fun = fun;\n (this || _global).array = array;\n }\n\n Item.prototype.run = function () {\n (this || _global).fun.apply(null, (this || _global).array);\n };\n\n process.title = \"browser\";\n process.browser = true;\n process.env = {};\n process.argv = [];\n process.version = \"\"; // empty string to avoid regexp issues\n\n process.versions = {};\n\n function noop() {}\n\n process.on = noop;\n process.addListener = noop;\n process.once = noop;\n process.off = noop;\n process.removeListener = noop;\n process.removeAllListeners = noop;\n process.emit = noop;\n process.prependListener = noop;\n process.prependOnceListener = noop;\n\n process.listeners = function (name) {\n return [];\n };\n\n process.binding = function (name) {\n throw new Error(\"process.binding is not supported\");\n };\n\n process.cwd = function () {\n return \"/\";\n };\n\n process.chdir = function (dir) {\n throw new Error(\"process.chdir is not supported\");\n };\n\n process.umask = function () {\n return 0;\n };\n\n return exports;\n}\n\nvar process = dew();\n\nprocess.platform = 'browser';\nprocess.addListener;\nprocess.argv;\nprocess.binding;\nprocess.browser;\nprocess.chdir;\nprocess.cwd;\nprocess.emit;\nprocess.env;\nprocess.listeners;\nprocess.nextTick;\nprocess.off;\nprocess.on;\nprocess.once;\nprocess.prependListener;\nprocess.prependOnceListener;\nprocess.removeAllListeners;\nprocess.removeListener;\nprocess.title;\nprocess.umask;\nprocess.version;\nprocess.versions;\n\nexport { process as p };\n", "import { p as process } from './chunk-2eac56ff.js';\n\nvar exports$1 = {},\n _dewExec = false;\nfunction dew() {\n if (_dewExec) return exports$1;\n _dewExec = true;\n var process$1 = process;\n\n function assertPath(path) {\n if (typeof path !== \"string\") {\n throw new TypeError(\"Path must be a string. Received \" + JSON.stringify(path));\n }\n } // Resolves . and .. elements in a path with directory names\n\n\n function normalizeStringPosix(path, allowAboveRoot) {\n var res = \"\";\n var lastSegmentLength = 0;\n var lastSlash = -1;\n var dots = 0;\n var code;\n\n for (var i = 0; i <= path.length; ++i) {\n if (i < path.length) code = path.charCodeAt(i);else if (code === 47\n /*/*/\n ) break;else code = 47\n /*/*/\n ;\n\n if (code === 47\n /*/*/\n ) {\n if (lastSlash === i - 1 || dots === 1) ; else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46\n /*.*/\n || res.charCodeAt(res.length - 2) !== 46\n /*.*/\n ) {\n if (res.length > 2) {\n var lastSlashIndex = res.lastIndexOf(\"/\");\n\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = \"\";\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf(\"/\");\n }\n\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = \"\";\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n\n if (allowAboveRoot) {\n if (res.length > 0) res += \"/..\";else res = \"..\";\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0) res += \"/\" + path.slice(lastSlash + 1, i);else res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n\n lastSlash = i;\n dots = 0;\n } else if (code === 46\n /*.*/\n && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n\n return res;\n }\n\n function _format(sep, pathObject) {\n var dir = pathObject.dir || pathObject.root;\n var base = pathObject.base || (pathObject.name || \"\") + (pathObject.ext || \"\");\n\n if (!dir) {\n return base;\n }\n\n if (dir === pathObject.root) {\n return dir + base;\n }\n\n return dir + sep + base;\n }\n\n var posix = {\n // path.resolve([from ...], to)\n resolve: function resolve() {\n var resolvedPath = \"\";\n var resolvedAbsolute = false;\n var cwd;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path;\n if (i >= 0) path = arguments[i];else {\n if (cwd === undefined) cwd = process$1.cwd();\n path = cwd;\n }\n assertPath(path); // Skip empty entries\n\n if (path.length === 0) {\n continue;\n }\n\n resolvedPath = path + \"/\" + resolvedPath;\n resolvedAbsolute = path.charCodeAt(0) === 47\n /*/*/\n ;\n } // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n\n\n resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n if (resolvedAbsolute) {\n if (resolvedPath.length > 0) return \"/\" + resolvedPath;else return \"/\";\n } else if (resolvedPath.length > 0) {\n return resolvedPath;\n } else {\n return \".\";\n }\n },\n normalize: function normalize(path) {\n assertPath(path);\n if (path.length === 0) return \".\";\n var isAbsolute = path.charCodeAt(0) === 47\n /*/*/\n ;\n var trailingSeparator = path.charCodeAt(path.length - 1) === 47\n /*/*/\n ; // Normalize the path\n\n path = normalizeStringPosix(path, !isAbsolute);\n if (path.length === 0 && !isAbsolute) path = \".\";\n if (path.length > 0 && trailingSeparator) path += \"/\";\n if (isAbsolute) return \"/\" + path;\n return path;\n },\n isAbsolute: function isAbsolute(path) {\n assertPath(path);\n return path.length > 0 && path.charCodeAt(0) === 47\n /*/*/\n ;\n },\n join: function join() {\n if (arguments.length === 0) return \".\";\n var joined;\n\n for (var i = 0; i < arguments.length; ++i) {\n var arg = arguments[i];\n assertPath(arg);\n\n if (arg.length > 0) {\n if (joined === undefined) joined = arg;else joined += \"/\" + arg;\n }\n }\n\n if (joined === undefined) return \".\";\n return posix.normalize(joined);\n },\n relative: function relative(from, to) {\n assertPath(from);\n assertPath(to);\n if (from === to) return \"\";\n from = posix.resolve(from);\n to = posix.resolve(to);\n if (from === to) return \"\"; // Trim any leading backslashes\n\n var fromStart = 1;\n\n for (; fromStart < from.length; ++fromStart) {\n if (from.charCodeAt(fromStart) !== 47\n /*/*/\n ) break;\n }\n\n var fromEnd = from.length;\n var fromLen = fromEnd - fromStart; // Trim any leading backslashes\n\n var toStart = 1;\n\n for (; toStart < to.length; ++toStart) {\n if (to.charCodeAt(toStart) !== 47\n /*/*/\n ) break;\n }\n\n var toEnd = to.length;\n var toLen = toEnd - toStart; // Compare paths to find the longest common path from root\n\n var length = fromLen < toLen ? fromLen : toLen;\n var lastCommonSep = -1;\n var i = 0;\n\n for (; i <= length; ++i) {\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === 47\n /*/*/\n ) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n } else if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n } else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === 47\n /*/*/\n ) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n } else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo'; to='/'\n lastCommonSep = 0;\n }\n }\n\n break;\n }\n\n var fromCode = from.charCodeAt(fromStart + i);\n var toCode = to.charCodeAt(toStart + i);\n if (fromCode !== toCode) break;else if (fromCode === 47\n /*/*/\n ) lastCommonSep = i;\n }\n\n var out = \"\"; // Generate the relative path based on the path difference between `to`\n // and `from`\n\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === 47\n /*/*/\n ) {\n if (out.length === 0) out += \"..\";else out += \"/..\";\n }\n } // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n\n\n if (out.length > 0) return out + to.slice(toStart + lastCommonSep);else {\n toStart += lastCommonSep;\n if (to.charCodeAt(toStart) === 47\n /*/*/\n ) ++toStart;\n return to.slice(toStart);\n }\n },\n _makeLong: function _makeLong(path) {\n return path;\n },\n dirname: function dirname(path) {\n assertPath(path);\n if (path.length === 0) return \".\";\n var code = path.charCodeAt(0);\n var hasRoot = code === 47\n /*/*/\n ;\n var end = -1;\n var matchedSlash = true;\n\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? \"/\" : \".\";\n if (hasRoot && end === 1) return \"//\";\n return path.slice(0, end);\n },\n basename: function basename(path, ext) {\n if (ext !== undefined && typeof ext !== \"string\") throw new TypeError(\"\\\"ext\\\" argument must be a string\");\n assertPath(path);\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext.length === path.length && ext === path) return \"\";\n var extIdx = ext.length - 1;\n var firstNonSlashEnd = -1;\n\n for (i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n return path.slice(start, end);\n } else {\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return \"\";\n return path.slice(start, end);\n }\n },\n extname: function extname(path) {\n assertPath(path);\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n\n var preDotState = 0;\n\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n\n continue;\n }\n\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46\n /*.*/\n ) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot\n preDotState === 0 || // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return \"\";\n }\n\n return path.slice(startDot, end);\n },\n format: function format(pathObject) {\n if (pathObject === null || typeof pathObject !== \"object\") {\n throw new TypeError(\"The \\\"pathObject\\\" argument must be of type Object. Received type \" + typeof pathObject);\n }\n\n return _format(\"/\", pathObject);\n },\n parse: function parse(path) {\n assertPath(path);\n var ret = {\n root: \"\",\n dir: \"\",\n base: \"\",\n ext: \"\",\n name: \"\"\n };\n if (path.length === 0) return ret;\n var code = path.charCodeAt(0);\n var isAbsolute = code === 47\n /*/*/\n ;\n var start;\n\n if (isAbsolute) {\n ret.root = \"/\";\n start = 1;\n } else {\n start = 0;\n }\n\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true;\n var i = path.length - 1; // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n\n var preDotState = 0; // Get non-dir info\n\n for (; i >= start; --i) {\n code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n\n continue;\n }\n\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46\n /*.*/\n ) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot\n preDotState === 0 || // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n } else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n\n ret.ext = path.slice(startDot, end);\n }\n\n if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = \"/\";\n return ret;\n },\n sep: \"/\",\n delimiter: \":\",\n win32: null,\n posix: null\n };\n posix.posix = posix;\n exports$1 = posix;\n return exports$1;\n}\n\nconst exports = dew();\n\nexport { exports as e };\n", "import { e as exports } from './chunk-23dbec7b.js';\nexport { e as default } from './chunk-23dbec7b.js';\nimport './chunk-2eac56ff.js';\n\nvar _makeLong = exports._makeLong;\r\nvar basename = exports.basename;\r\nvar delimiter = exports.delimiter;\r\nvar dirname = exports.dirname;\r\nvar extname = exports.extname;\r\nvar format = exports.format;\r\nvar isAbsolute = exports.isAbsolute;\r\nvar join = exports.join;\r\nvar normalize = exports.normalize;\r\nvar parse = exports.parse;\r\nvar posix = exports.posix;\r\nvar relative = exports.relative;\r\nvar resolve = exports.resolve;\r\nvar sep = exports.sep;\r\nvar win32 = exports.win32;\n\nexport { _makeLong, basename, delimiter, dirname, extname, format, isAbsolute, join, normalize, parse, posix, relative, resolve, sep, win32 };\n", "import { Buffer } from 'buffer';\n/**\n * Standard libc error codes. More will be added to this enum and ErrorStrings as they are\n * needed.\n * @url http://www.gnu.org/software/libc/manual/html_node/Error-Codes.html\n */\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[ErrorCode[\"EPERM\"] = 1] = \"EPERM\";\n ErrorCode[ErrorCode[\"ENOENT\"] = 2] = \"ENOENT\";\n ErrorCode[ErrorCode[\"EIO\"] = 5] = \"EIO\";\n ErrorCode[ErrorCode[\"EBADF\"] = 9] = \"EBADF\";\n ErrorCode[ErrorCode[\"EACCES\"] = 13] = \"EACCES\";\n ErrorCode[ErrorCode[\"EBUSY\"] = 16] = \"EBUSY\";\n ErrorCode[ErrorCode[\"EEXIST\"] = 17] = \"EEXIST\";\n ErrorCode[ErrorCode[\"ENOTDIR\"] = 20] = \"ENOTDIR\";\n ErrorCode[ErrorCode[\"EISDIR\"] = 21] = \"EISDIR\";\n ErrorCode[ErrorCode[\"EINVAL\"] = 22] = \"EINVAL\";\n ErrorCode[ErrorCode[\"EFBIG\"] = 27] = \"EFBIG\";\n ErrorCode[ErrorCode[\"ENOSPC\"] = 28] = \"ENOSPC\";\n ErrorCode[ErrorCode[\"EROFS\"] = 30] = \"EROFS\";\n ErrorCode[ErrorCode[\"ENOTEMPTY\"] = 39] = \"ENOTEMPTY\";\n ErrorCode[ErrorCode[\"ENOTSUP\"] = 95] = \"ENOTSUP\";\n})(ErrorCode = ErrorCode || (ErrorCode = {}));\n/**\n * Strings associated with each error code.\n * @internal\n */\nexport const ErrorStrings = {};\nErrorStrings[ErrorCode.EPERM] = 'Operation not permitted.';\nErrorStrings[ErrorCode.ENOENT] = 'No such file or directory.';\nErrorStrings[ErrorCode.EIO] = 'Input/output error.';\nErrorStrings[ErrorCode.EBADF] = 'Bad file descriptor.';\nErrorStrings[ErrorCode.EACCES] = 'Permission denied.';\nErrorStrings[ErrorCode.EBUSY] = 'Resource busy or locked.';\nErrorStrings[ErrorCode.EEXIST] = 'File exists.';\nErrorStrings[ErrorCode.ENOTDIR] = 'File is not a directory.';\nErrorStrings[ErrorCode.EISDIR] = 'File is a directory.';\nErrorStrings[ErrorCode.EINVAL] = 'Invalid argument.';\nErrorStrings[ErrorCode.EFBIG] = 'File is too big.';\nErrorStrings[ErrorCode.ENOSPC] = 'No space left on disk.';\nErrorStrings[ErrorCode.EROFS] = 'Cannot modify a read-only file system.';\nErrorStrings[ErrorCode.ENOTEMPTY] = 'Directory is not empty.';\nErrorStrings[ErrorCode.ENOTSUP] = 'Operation is not supported.';\n/**\n * Represents a BrowserFS error. Passed back to applications after a failed\n * call to the BrowserFS API.\n */\nexport class ApiError extends Error {\n static fromJSON(json) {\n const err = new ApiError(json.errno, json.message, json.path);\n err.code = json.code;\n err.stack = json.stack;\n return err;\n }\n /**\n * Creates an ApiError object from a buffer.\n */\n static fromBuffer(buffer, i = 0) {\n return ApiError.fromJSON(JSON.parse(buffer.toString('utf8', i + 4, i + 4 + buffer.readUInt32LE(i))));\n }\n static FileError(code, p) {\n return new ApiError(code, ErrorStrings[code], p);\n }\n static EACCES(path) {\n return this.FileError(ErrorCode.EACCES, path);\n }\n static ENOENT(path) {\n return this.FileError(ErrorCode.ENOENT, path);\n }\n static EEXIST(path) {\n return this.FileError(ErrorCode.EEXIST, path);\n }\n static EISDIR(path) {\n return this.FileError(ErrorCode.EISDIR, path);\n }\n static ENOTDIR(path) {\n return this.FileError(ErrorCode.ENOTDIR, path);\n }\n static EPERM(path) {\n return this.FileError(ErrorCode.EPERM, path);\n }\n static ENOTEMPTY(path) {\n return this.FileError(ErrorCode.ENOTEMPTY, path);\n }\n /**\n * Represents a BrowserFS error. Passed back to applications after a failed\n * call to the BrowserFS API.\n *\n * Error codes mirror those returned by regular Unix file operations, which is\n * what Node returns.\n * @constructor ApiError\n * @param type The type of the error.\n * @param [message] A descriptive error message.\n */\n constructor(type, message = ErrorStrings[type], path) {\n super(message);\n // Unsupported.\n this.syscall = '';\n this.errno = type;\n this.code = ErrorCode[type];\n this.path = path;\n this.message = `Error: ${this.code}: ${message}${this.path ? `, '${this.path}'` : ''}`;\n }\n /**\n * @return A friendly error message.\n */\n toString() {\n return this.message;\n }\n toJSON() {\n return {\n errno: this.errno,\n code: this.code,\n path: this.path,\n stack: this.stack,\n message: this.message,\n };\n }\n /**\n * Writes the API error into a buffer.\n */\n writeToBuffer(buffer = Buffer.alloc(this.bufferSize()), i = 0) {\n const bytesWritten = buffer.write(JSON.stringify(this.toJSON()), i + 4);\n buffer.writeUInt32LE(bytesWritten, i);\n return buffer;\n }\n /**\n * The size of the API error in buffer-form in bytes.\n */\n bufferSize() {\n // 4 bytes for string length.\n return 4 + Buffer.byteLength(JSON.stringify(this.toJSON()));\n }\n}\n", "/**\n * Credentials used for FS ops.\n * Similar to Linux's cred struct. See https://github.com/torvalds/linux/blob/master/include/linux/cred.h\n */\nexport class Cred {\n constructor(uid, gid, suid, sgid, euid, egid) {\n this.uid = uid;\n this.gid = gid;\n this.suid = suid;\n this.sgid = sgid;\n this.euid = euid;\n this.egid = egid;\n }\n}\nCred.Root = new Cred(0, 0, 0, 0, 0, 0);\n", "import { Cred } from './cred.js';\nimport { Buffer } from 'buffer';\nimport { S_IFDIR, S_IFLNK, S_IFMT, S_IFREG } from './emulation/constants.js';\n/**\n * Indicates the type of the given file. Applied to 'mode'.\n */\nexport var FileType;\n(function (FileType) {\n FileType[FileType[\"FILE\"] = S_IFREG] = \"FILE\";\n FileType[FileType[\"DIRECTORY\"] = S_IFDIR] = \"DIRECTORY\";\n FileType[FileType[\"SYMLINK\"] = S_IFLNK] = \"SYMLINK\";\n})(FileType = FileType || (FileType = {}));\n/**\n * Implementation of Node's `Stats`.\n *\n * Attribute descriptions are from `man 2 stat'\n * @see http://nodejs.org/api/fs.html#fs_class_fs_stats\n * @see http://man7.org/linux/man-pages/man2/stat.2.html\n */\nexport class Stats {\n static fromBuffer(buffer) {\n const size = buffer.readUInt32LE(0), mode = buffer.readUInt32LE(4), atime = buffer.readDoubleLE(8), mtime = buffer.readDoubleLE(16), ctime = buffer.readDoubleLE(24), uid = buffer.readUInt32LE(32), gid = buffer.readUInt32LE(36);\n return new Stats(mode & S_IFMT, size, mode & ~S_IFMT, atime, mtime, ctime, uid, gid);\n }\n /**\n * Clones the stats object.\n */\n static clone(s) {\n return new Stats(s.mode & S_IFMT, s.size, s.mode & ~S_IFMT, s.atimeMs, s.mtimeMs, s.ctimeMs, s.uid, s.gid, s.birthtimeMs);\n }\n get atime() {\n return new Date(this.atimeMs);\n }\n get mtime() {\n return new Date(this.mtimeMs);\n }\n get ctime() {\n return new Date(this.ctimeMs);\n }\n get birthtime() {\n return new Date(this.birthtimeMs);\n }\n /**\n * Provides information about a particular entry in the file system.\n * @param itemType Type of the item (FILE, DIRECTORY, SYMLINK, or SOCKET)\n * @param size Size of the item in bytes. For directories/symlinks,\n * this is normally the size of the struct that represents the item.\n * @param mode Unix-style file mode (e.g. 0o644)\n * @param atimeMs time of last access, in milliseconds since epoch\n * @param mtimeMs time of last modification, in milliseconds since epoch\n * @param ctimeMs time of last time file status was changed, in milliseconds since epoch\n * @param uid the id of the user that owns the file\n * @param gid the id of the group that owns the file\n * @param birthtimeMs time of file creation, in milliseconds since epoch\n */\n constructor(itemType, size, mode, atimeMs, mtimeMs, ctimeMs, uid, gid, birthtimeMs) {\n // ID of device containing file\n this.dev = 0;\n // inode number\n this.ino = 0;\n // device ID (if special file)\n this.rdev = 0;\n // number of hard links\n this.nlink = 1;\n // blocksize for file system I/O\n this.blksize = 4096;\n // user ID of owner\n this.uid = 0;\n // group ID of owner\n this.gid = 0;\n // Some file systems stash data on stats objects.\n this.fileData = null;\n this.size = size;\n let currentTime = 0;\n if (typeof atimeMs !== 'number') {\n currentTime = Date.now();\n atimeMs = currentTime;\n }\n if (typeof mtimeMs !== 'number') {\n if (!currentTime) {\n currentTime = Date.now();\n }\n mtimeMs = currentTime;\n }\n if (typeof ctimeMs !== 'number') {\n if (!currentTime) {\n currentTime = Date.now();\n }\n ctimeMs = currentTime;\n }\n if (typeof birthtimeMs !== 'number') {\n if (!currentTime) {\n currentTime = Date.now();\n }\n birthtimeMs = currentTime;\n }\n if (typeof uid !== 'number') {\n uid = 0;\n }\n if (typeof gid !== 'number') {\n gid = 0;\n }\n this.atimeMs = atimeMs;\n this.ctimeMs = ctimeMs;\n this.mtimeMs = mtimeMs;\n this.birthtimeMs = birthtimeMs;\n if (!mode) {\n switch (itemType) {\n case FileType.FILE:\n this.mode = 0o644;\n break;\n case FileType.DIRECTORY:\n default:\n this.mode = 0o777;\n }\n }\n else {\n this.mode = mode;\n }\n // number of 512B blocks allocated\n this.blocks = Math.ceil(size / 512);\n // Check if mode also includes top-most bits, which indicate the file's\n // type.\n if ((this.mode & S_IFMT) == 0) {\n this.mode |= itemType;\n }\n }\n toBuffer() {\n const buffer = Buffer.alloc(32);\n buffer.writeUInt32LE(this.size, 0);\n buffer.writeUInt32LE(this.mode, 4);\n buffer.writeDoubleLE(this.atime.getTime(), 8);\n buffer.writeDoubleLE(this.mtime.getTime(), 16);\n buffer.writeDoubleLE(this.ctime.getTime(), 24);\n buffer.writeUInt32LE(this.uid, 32);\n buffer.writeUInt32LE(this.gid, 36);\n return buffer;\n }\n /**\n * @return [Boolean] True if this item is a file.\n */\n isFile() {\n return (this.mode & S_IFMT) === S_IFREG;\n }\n /**\n * @return [Boolean] True if this item is a directory.\n */\n isDirectory() {\n return (this.mode & S_IFMT) === S_IFDIR;\n }\n /**\n * @return [Boolean] True if this item is a symbolic link (only valid through lstat)\n */\n isSymbolicLink() {\n return (this.mode & S_IFMT) === S_IFLNK;\n }\n /**\n * Checks if a given user/group has access to this item\n * @param mode The request access as 4 bits (unused, read, write, execute)\n * @param uid The requesting UID\n * @param gid The requesting GID\n * @returns [Boolean] True if the request has access, false if the request does not\n */\n hasAccess(mode, cred) {\n if (cred.euid === 0 || cred.egid === 0) {\n //Running as root\n return true;\n }\n const perms = this.mode & ~S_IFMT;\n let uMode = 0xf, gMode = 0xf, wMode = 0xf;\n if (cred.euid == this.uid) {\n const uPerms = (0xf00 & perms) >> 8;\n uMode = (mode ^ uPerms) & mode;\n }\n if (cred.egid == this.gid) {\n const gPerms = (0xf0 & perms) >> 4;\n gMode = (mode ^ gPerms) & mode;\n }\n const wPerms = 0xf & perms;\n wMode = (mode ^ wPerms) & mode;\n /*\n Result = 0b0xxx (read, write, execute)\n If any bits are set that means the request does not have that permission.\n */\n const result = uMode & gMode & wMode;\n return !result;\n }\n /**\n * Convert the current stats object into a cred object\n */\n getCred(uid = this.uid, gid = this.gid) {\n return new Cred(uid, gid, this.uid, this.gid, uid, gid);\n }\n /**\n * Change the mode of the file. We use this helper function to prevent messing\n * up the type of the file, which is encoded in mode.\n */\n chmod(mode) {\n this.mode = (this.mode & S_IFMT) | mode;\n }\n /**\n * Change the owner user/group of the file.\n * This function makes sure it is a valid UID/GID (that is, a 32 unsigned int)\n */\n chown(uid, gid) {\n if (!isNaN(+uid) && 0 <= +uid && +uid < Math.pow(2, 32)) {\n this.uid = uid;\n }\n if (!isNaN(+gid) && 0 <= +gid && +gid < Math.pow(2, 32)) {\n this.gid = gid;\n }\n }\n // We don't support the following types of files.\n isSocket() {\n return false;\n }\n isBlockDevice() {\n return false;\n }\n isCharacterDevice() {\n return false;\n }\n isFIFO() {\n return false;\n }\n}\n", "/* eslint-disable @typescript-eslint/no-unused-vars */\n// disable no-unused-vars since BaseFileSystem uses them a lot\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar _a;\nimport { ApiError, ErrorCode } from './ApiError.js';\nimport { FileFlag, ActionType } from './file.js';\nimport * as path from 'path';\nimport { Buffer } from 'buffer';\n/**\n * Structure for a filesystem. **All** BrowserFS FileSystems must implement\n * this.\n *\n * ### Argument Assumptions\n *\n * You can assume the following about arguments passed to each API method:\n *\n * - Every path is an absolute path. `.`, `..`, and other items\n * are resolved into an absolute form.\n * - All arguments are present. Any optional arguments at the Node API level\n * have been passed in with their default values.\n */\nexport class FileSystem {\n constructor(options) {\n // unused\n }\n}\n/**\n * Basic filesystem class. Most filesystems should extend this class, as it\n * provides default implementations for a handful of methods.\n */\nexport class BaseFileSystem extends FileSystem {\n constructor(options) {\n super();\n this._ready = Promise.resolve(this);\n }\n get metadata() {\n return {\n name: this.constructor.name,\n readonly: false,\n synchronous: false,\n supportsProperties: false,\n supportsLinks: false,\n totalSpace: 0,\n freeSpace: 0,\n };\n }\n whenReady() {\n return this._ready;\n }\n /**\n * Opens the file at path p with the given flag. The file must exist.\n * @param p The path to open.\n * @param flag The flag to use when opening the file.\n */\n openFile(p, flag, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n /**\n * Create the file at path p with the given mode. Then, open it with the given\n * flag.\n */\n createFile(p, flag, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n open(p, flag, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const stats = yield this.stat(p, cred);\n switch (flag.pathExistsAction()) {\n case ActionType.THROW_EXCEPTION:\n throw ApiError.EEXIST(p);\n case ActionType.TRUNCATE_FILE:\n // NOTE: In a previous implementation, we deleted the file and\n // re-created it. However, this created a race condition if another\n // asynchronous request was trying to read the file, as the file\n // would not exist for a small period of time.\n const fd = yield this.openFile(p, flag, cred);\n if (!fd)\n throw new Error('BFS has reached an impossible code path; please file a bug.');\n yield fd.truncate(0);\n yield fd.sync();\n return fd;\n case ActionType.NOP:\n return this.openFile(p, flag, cred);\n default:\n throw new ApiError(ErrorCode.EINVAL, 'Invalid FileFlag object.');\n }\n // File exists.\n }\n catch (e) {\n // File does not exist.\n switch (flag.pathNotExistsAction()) {\n case ActionType.CREATE_FILE:\n // Ensure parent exists.\n const parentStats = yield this.stat(path.dirname(p), cred);\n if (parentStats && !parentStats.isDirectory()) {\n throw ApiError.ENOTDIR(path.dirname(p));\n }\n return this.createFile(p, flag, mode, cred);\n case ActionType.THROW_EXCEPTION:\n throw ApiError.ENOENT(p);\n default:\n throw new ApiError(ErrorCode.EINVAL, 'Invalid FileFlag object.');\n }\n }\n });\n }\n access(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n accessSync(p, mode, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n rename(oldPath, newPath, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n renameSync(oldPath, newPath, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n stat(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n statSync(p, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n /**\n * Opens the file at path p with the given flag. The file must exist.\n * @param p The path to open.\n * @param flag The flag to use when opening the file.\n * @return A File object corresponding to the opened file.\n */\n openFileSync(p, flag, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n /**\n * Create the file at path p with the given mode. Then, open it with the given\n * flag.\n */\n createFileSync(p, flag, mode, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n openSync(p, flag, mode, cred) {\n // Check if the path exists, and is a file.\n let stats;\n try {\n stats = this.statSync(p, cred);\n }\n catch (e) {\n // File does not exist.\n switch (flag.pathNotExistsAction()) {\n case ActionType.CREATE_FILE:\n // Ensure parent exists.\n const parentStats = this.statSync(path.dirname(p), cred);\n if (!parentStats.isDirectory()) {\n throw ApiError.ENOTDIR(path.dirname(p));\n }\n return this.createFileSync(p, flag, mode, cred);\n case ActionType.THROW_EXCEPTION:\n throw ApiError.ENOENT(p);\n default:\n throw new ApiError(ErrorCode.EINVAL, 'Invalid FileFlag object.');\n }\n }\n if (!stats.hasAccess(mode, cred)) {\n throw ApiError.EACCES(p);\n }\n // File exists.\n switch (flag.pathExistsAction()) {\n case ActionType.THROW_EXCEPTION:\n throw ApiError.EEXIST(p);\n case ActionType.TRUNCATE_FILE:\n // Delete file.\n this.unlinkSync(p, cred);\n // Create file. Use the same mode as the old file.\n // Node itself modifies the ctime when this occurs, so this action\n // will preserve that behavior if the underlying file system\n // supports those properties.\n return this.createFileSync(p, flag, stats.mode, cred);\n case ActionType.NOP:\n return this.openFileSync(p, flag, cred);\n default:\n throw new ApiError(ErrorCode.EINVAL, 'Invalid FileFlag object.');\n }\n }\n unlink(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n unlinkSync(p, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n rmdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n rmdirSync(p, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n mkdir(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n mkdirSync(p, mode, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n readdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n readdirSync(p, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n exists(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield this.stat(p, cred);\n return true;\n }\n catch (e) {\n return false;\n }\n });\n }\n existsSync(p, cred) {\n try {\n this.statSync(p, cred);\n return true;\n }\n catch (e) {\n return false;\n }\n }\n realpath(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.metadata.supportsLinks) {\n // The path could contain symlinks. Split up the path,\n // resolve any symlinks, return the resolved string.\n const splitPath = p.split(path.sep);\n // TODO: Simpler to just pass through file, find sep and such.\n for (let i = 0; i < splitPath.length; i++) {\n const addPaths = splitPath.slice(0, i + 1);\n splitPath[i] = path.join(...addPaths);\n }\n return splitPath.join(path.sep);\n }\n else {\n // No symlinks. We just need to verify that it exists.\n if (!(yield this.exists(p, cred))) {\n throw ApiError.ENOENT(p);\n }\n return p;\n }\n });\n }\n realpathSync(p, cred) {\n if (this.metadata.supportsLinks) {\n // The path could contain symlinks. Split up the path,\n // resolve any symlinks, return the resolved string.\n const splitPath = p.split(path.sep);\n // TODO: Simpler to just pass through file, find sep and such.\n for (let i = 0; i < splitPath.length; i++) {\n const addPaths = splitPath.slice(0, i + 1);\n splitPath[i] = path.join(...addPaths);\n }\n return splitPath.join(path.sep);\n }\n else {\n // No symlinks. We just need to verify that it exists.\n if (this.existsSync(p, cred)) {\n return p;\n }\n else {\n throw ApiError.ENOENT(p);\n }\n }\n }\n truncate(p, len, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const fd = yield this.open(p, FileFlag.getFileFlag('r+'), 0o644, cred);\n try {\n yield fd.truncate(len);\n }\n finally {\n yield fd.close();\n }\n });\n }\n truncateSync(p, len, cred) {\n const fd = this.openSync(p, FileFlag.getFileFlag('r+'), 0o644, cred);\n // Need to safely close FD, regardless of whether or not truncate succeeds.\n try {\n fd.truncateSync(len);\n }\n finally {\n fd.closeSync();\n }\n }\n readFile(fname, encoding, flag, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n // Get file.\n const fd = yield this.open(fname, flag, 0o644, cred);\n try {\n const stat = yield fd.stat();\n // Allocate buffer.\n const buf = Buffer.alloc(stat.size);\n yield fd.read(buf, 0, stat.size, 0);\n yield fd.close();\n if (encoding === null) {\n return buf;\n }\n return buf.toString(encoding);\n }\n finally {\n yield fd.close();\n }\n });\n }\n readFileSync(fname, encoding, flag, cred) {\n // Get file.\n const fd = this.openSync(fname, flag, 0o644, cred);\n try {\n const stat = fd.statSync();\n // Allocate buffer.\n const buf = Buffer.alloc(stat.size);\n fd.readSync(buf, 0, stat.size, 0);\n fd.closeSync();\n if (encoding === null) {\n return buf;\n }\n return buf.toString(encoding);\n }\n finally {\n fd.closeSync();\n }\n }\n writeFile(fname, data, encoding, flag, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n // Get file.\n const fd = yield this.open(fname, flag, mode, cred);\n try {\n if (typeof data === 'string') {\n data = Buffer.from(data, encoding);\n }\n // Write into file.\n yield fd.write(data, 0, data.length, 0);\n }\n finally {\n yield fd.close();\n }\n });\n }\n writeFileSync(fname, data, encoding, flag, mode, cred) {\n // Get file.\n const fd = this.openSync(fname, flag, mode, cred);\n try {\n if (typeof data === 'string') {\n data = Buffer.from(data, encoding);\n }\n // Write into file.\n fd.writeSync(data, 0, data.length, 0);\n }\n finally {\n fd.closeSync();\n }\n }\n appendFile(fname, data, encoding, flag, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const fd = yield this.open(fname, flag, mode, cred);\n try {\n if (typeof data === 'string') {\n data = Buffer.from(data, encoding);\n }\n yield fd.write(data, 0, data.length, null);\n }\n finally {\n yield fd.close();\n }\n });\n }\n appendFileSync(fname, data, encoding, flag, mode, cred) {\n const fd = this.openSync(fname, flag, mode, cred);\n try {\n if (typeof data === 'string') {\n data = Buffer.from(data, encoding);\n }\n fd.writeSync(data, 0, data.length, null);\n }\n finally {\n fd.closeSync();\n }\n }\n chmod(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n chmodSync(p, mode, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n chown(p, new_uid, new_gid, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n chownSync(p, new_uid, new_gid, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n utimes(p, atime, mtime, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n utimesSync(p, atime, mtime, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n link(srcpath, dstpath, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n linkSync(srcpath, dstpath, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n symlink(srcpath, dstpath, type, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n symlinkSync(srcpath, dstpath, type, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n readlink(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n readlinkSync(p, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n}\n_a = BaseFileSystem;\nBaseFileSystem.Name = _a.name;\n/**\n * Implements the asynchronous API in terms of the synchronous API.\n */\nexport class SynchronousFileSystem extends BaseFileSystem {\n get metadata() {\n return Object.assign(Object.assign({}, super.metadata), { synchronous: true });\n }\n access(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.accessSync(p, mode, cred);\n });\n }\n rename(oldPath, newPath, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.renameSync(oldPath, newPath, cred);\n });\n }\n stat(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.statSync(p, cred);\n });\n }\n open(p, flags, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.openSync(p, flags, mode, cred);\n });\n }\n unlink(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.unlinkSync(p, cred);\n });\n }\n rmdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.rmdirSync(p, cred);\n });\n }\n mkdir(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.mkdirSync(p, mode, cred);\n });\n }\n readdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.readdirSync(p, cred);\n });\n }\n chmod(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.chmodSync(p, mode, cred);\n });\n }\n chown(p, new_uid, new_gid, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.chownSync(p, new_uid, new_gid, cred);\n });\n }\n utimes(p, atime, mtime, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.utimesSync(p, atime, mtime, cred);\n });\n }\n link(srcpath, dstpath, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.linkSync(srcpath, dstpath, cred);\n });\n }\n symlink(srcpath, dstpath, type, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.symlinkSync(srcpath, dstpath, type, cred);\n });\n }\n readlink(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.readlinkSync(p, cred);\n });\n }\n}\n", "import { Stats, FileType } from './stats.js';\nimport { Buffer } from 'buffer';\n/**\n * Generic inode definition that can easily be serialized.\n */\nexport default class Inode {\n /**\n * Converts the buffer into an Inode.\n */\n static fromBuffer(buffer) {\n if (buffer === undefined) {\n throw new Error('NO');\n }\n return new Inode(buffer.toString('ascii', 38), buffer.readUInt32LE(0), buffer.readUInt16LE(4), buffer.readDoubleLE(6), buffer.readDoubleLE(14), buffer.readDoubleLE(22), buffer.readUInt32LE(30), buffer.readUInt32LE(34));\n }\n constructor(id, size, mode, atime, mtime, ctime, uid, gid) {\n this.id = id;\n this.size = size;\n this.mode = mode;\n this.atime = atime;\n this.mtime = mtime;\n this.ctime = ctime;\n this.uid = uid;\n this.gid = gid;\n }\n /**\n * Handy function that converts the Inode to a Node Stats object.\n */\n toStats() {\n return new Stats((this.mode & 0xf000) === FileType.DIRECTORY ? FileType.DIRECTORY : FileType.FILE, this.size, this.mode, this.atime, this.mtime, this.ctime, this.uid, this.gid);\n }\n /**\n * Get the size of this Inode, in bytes.\n */\n getSize() {\n // ASSUMPTION: ID is ASCII (1 byte per char).\n return 38 + this.id.length;\n }\n /**\n * Writes the inode into the start of the buffer.\n */\n toBuffer(buff = Buffer.alloc(this.getSize())) {\n buff.writeUInt32LE(this.size, 0);\n buff.writeUInt16LE(this.mode, 4);\n buff.writeDoubleLE(this.atime, 6);\n buff.writeDoubleLE(this.mtime, 14);\n buff.writeDoubleLE(this.ctime, 22);\n buff.writeUInt32LE(this.uid, 30);\n buff.writeUInt32LE(this.gid, 34);\n buff.write(this.id, 38, this.id.length, 'ascii');\n return buff;\n }\n /**\n * Updates the Inode using information from the stats object. Used by file\n * systems at sync time, e.g.:\n * - Program opens file and gets a File object.\n * - Program mutates file. File object is responsible for maintaining\n * metadata changes locally -- typically in a Stats object.\n * - Program closes file. File object's metadata changes are synced with the\n * file system.\n * @return True if any changes have occurred.\n */\n update(stats) {\n let hasChanged = false;\n if (this.size !== stats.size) {\n this.size = stats.size;\n hasChanged = true;\n }\n if (this.mode !== stats.mode) {\n this.mode = stats.mode;\n hasChanged = true;\n }\n const atimeMs = stats.atime.getTime();\n if (this.atime !== atimeMs) {\n this.atime = atimeMs;\n hasChanged = true;\n }\n const mtimeMs = stats.mtime.getTime();\n if (this.mtime !== mtimeMs) {\n this.mtime = mtimeMs;\n hasChanged = true;\n }\n const ctimeMs = stats.ctime.getTime();\n if (this.ctime !== ctimeMs) {\n this.ctime = ctimeMs;\n hasChanged = true;\n }\n if (this.uid !== stats.uid) {\n this.uid = stats.uid;\n hasChanged = true;\n }\n if (this.uid !== stats.uid) {\n this.uid = stats.uid;\n hasChanged = true;\n }\n return hasChanged;\n }\n // XXX: Copied from Stats. Should reconcile these two into something more\n // compact.\n /**\n * @return [Boolean] True if this item is a file.\n */\n isFile() {\n return (this.mode & 0xf000) === FileType.FILE;\n }\n /**\n * @return [Boolean] True if this item is a directory.\n */\n isDirectory() {\n return (this.mode & 0xf000) === FileType.DIRECTORY;\n }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ErrorCode, ApiError } from './ApiError.js';\nimport * as path from 'path';\nimport { Buffer } from 'buffer';\n/**\n * Synchronous recursive makedir.\n * @internal\n */\nexport function mkdirpSync(p, mode, cred, fs) {\n if (!fs.existsSync(p, cred)) {\n mkdirpSync(path.dirname(p), mode, cred, fs);\n fs.mkdirSync(p, mode, cred);\n }\n}\n/**\n * Copies a slice of the given buffer\n * @internal\n */\nexport function copyingSlice(buff, start = 0, end = buff.length) {\n if (start < 0 || end < 0 || end > buff.length || start > end) {\n throw new TypeError(`Invalid slice bounds on buffer of length ${buff.length}: [${start}, ${end}]`);\n }\n if (buff.length === 0) {\n // Avoid s0 corner case in ArrayBuffer case.\n return Buffer.alloc(0);\n }\n else {\n return buff.subarray(start, end);\n }\n}\n/**\n * Option validator for a Buffer file system option.\n * @internal\n */\nexport function bufferValidator(v) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!Buffer.isBuffer(v)) {\n throw new ApiError(ErrorCode.EINVAL, 'option must be a Buffer.');\n }\n });\n}\n/*\n * Levenshtein distance, from the `js-levenshtein` NPM module.\n * Copied here to avoid complexity of adding another CommonJS module dependency.\n */\nfunction _min(d0, d1, d2, bx, ay) {\n return Math.min(d0 + 1, d1 + 1, d2 + 1, bx === ay ? d1 : d1 + 1);\n}\n/**\n * Calculates levenshtein distance.\n * @param a\n * @param b\n */\nfunction levenshtein(a, b) {\n if (a === b) {\n return 0;\n }\n if (a.length > b.length) {\n [a, b] = [b, a]; // Swap a and b\n }\n let la = a.length;\n let lb = b.length;\n // Trim common suffix\n while (la > 0 && a.charCodeAt(la - 1) === b.charCodeAt(lb - 1)) {\n la--;\n lb--;\n }\n let offset = 0;\n // Trim common prefix\n while (offset < la && a.charCodeAt(offset) === b.charCodeAt(offset)) {\n offset++;\n }\n la -= offset;\n lb -= offset;\n if (la === 0 || lb === 1) {\n return lb;\n }\n const vector = new Array(la << 1);\n for (let y = 0; y < la;) {\n vector[la + y] = a.charCodeAt(offset + y);\n vector[y] = ++y;\n }\n let x;\n let d0;\n let d1;\n let d2;\n let d3;\n for (x = 0; x + 3 < lb;) {\n const bx0 = b.charCodeAt(offset + (d0 = x));\n const bx1 = b.charCodeAt(offset + (d1 = x + 1));\n const bx2 = b.charCodeAt(offset + (d2 = x + 2));\n const bx3 = b.charCodeAt(offset + (d3 = x + 3));\n let dd = (x += 4);\n for (let y = 0; y < la;) {\n const ay = vector[la + y];\n const dy = vector[y];\n d0 = _min(dy, d0, d1, bx0, ay);\n d1 = _min(d0, d1, d2, bx1, ay);\n d2 = _min(d1, d2, d3, bx2, ay);\n dd = _min(d2, d3, dd, bx3, ay);\n vector[y++] = dd;\n d3 = d2;\n d2 = d1;\n d1 = d0;\n d0 = dy;\n }\n }\n let dd = 0;\n for (; x < lb;) {\n const bx0 = b.charCodeAt(offset + (d0 = x));\n dd = ++x;\n for (let y = 0; y < la; y++) {\n const dy = vector[y];\n vector[y] = dd = dy < d0 || dd < d0 ? (dy > dd ? dd + 1 : dy + 1) : bx0 === vector[la + y] ? d0 : d0 + 1;\n d0 = dy;\n }\n }\n return dd;\n}\n/**\n * Checks that the given options object is valid for the file system options.\n * @internal\n */\nexport function checkOptions(backend, opts) {\n return __awaiter(this, void 0, void 0, function* () {\n const optsInfo = backend.Options;\n const fsName = backend.Name;\n let pendingValidators = 0;\n let callbackCalled = false;\n let loopEnded = false;\n // Check for required options.\n for (const optName in optsInfo) {\n if (Object.prototype.hasOwnProperty.call(optsInfo, optName)) {\n const opt = optsInfo[optName];\n const providedValue = opts && opts[optName];\n if (providedValue === undefined || providedValue === null) {\n if (!opt.optional) {\n // Required option, not provided.\n // Any incorrect options provided? Which ones are close to the provided one?\n // (edit distance 5 === close)\n const incorrectOptions = Object.keys(opts)\n .filter(o => !(o in optsInfo))\n .map((a) => {\n return { str: a, distance: levenshtein(optName, a) };\n })\n .filter(o => o.distance < 5)\n .sort((a, b) => a.distance - b.distance);\n // Validators may be synchronous.\n if (callbackCalled) {\n return;\n }\n callbackCalled = true;\n throw new ApiError(ErrorCode.EINVAL, `[${fsName}] Required option '${optName}' not provided.${incorrectOptions.length > 0 ? ` You provided unrecognized option '${incorrectOptions[0].str}'; perhaps you meant to type '${optName}'.` : ''}\\nOption description: ${opt.description}`);\n }\n // Else: Optional option, not provided. That is OK.\n }\n else {\n // Option provided! Check type.\n let typeMatches = false;\n if (Array.isArray(opt.type)) {\n typeMatches = opt.type.indexOf(typeof providedValue) !== -1;\n }\n else {\n typeMatches = typeof providedValue === opt.type;\n }\n if (!typeMatches) {\n // Validators may be synchronous.\n if (callbackCalled) {\n return;\n }\n callbackCalled = true;\n throw new ApiError(ErrorCode.EINVAL, `[${fsName}] Value provided for option ${optName} is not the proper type. Expected ${Array.isArray(opt.type) ? `one of {${opt.type.join(', ')}}` : opt.type}, but received ${typeof providedValue}\\nOption description: ${opt.description}`);\n }\n else if (opt.validator) {\n pendingValidators++;\n try {\n yield opt.validator(providedValue);\n }\n catch (e) {\n if (!callbackCalled) {\n if (e) {\n callbackCalled = true;\n throw e;\n }\n pendingValidators--;\n if (pendingValidators === 0 && loopEnded) {\n return;\n }\n }\n }\n }\n // Otherwise: All good!\n }\n }\n }\n loopEnded = true;\n if (pendingValidators === 0 && !callbackCalled) {\n return;\n }\n });\n}\n/** Waits n ms. */\nexport function wait(ms) {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\n/**\n * Converts a callback into a promise. Assumes last parameter is the callback\n * @todo Look at changing resolve value from cbArgs[0] to include other callback arguments?\n */\nexport function toPromise(fn) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n args.push((e, ...cbArgs) => {\n if (e) {\n reject(e);\n }\n else {\n resolve(cbArgs[0]);\n }\n });\n fn(...args);\n });\n };\n}\n/**\n * @internal\n */\nexport const setImmediate = typeof globalThis.setImmediate == 'function' ? globalThis.setImmediate : cb => setTimeout(cb, 0);\n/**\n * @internal\n */\nexport const ROOT_NODE_ID = '/';\n/**\n * Returns an empty directory node.\n * @internal\n */\nexport function getEmptyDirNode() {\n return Buffer.from('{}');\n}\n/**\n * Generates a random ID.\n * @internal\n */\nexport function randomUUID() {\n // From http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n", "import * as path from 'path';\nimport { ApiError, ErrorCode } from '../ApiError.js';\nimport { W_OK, R_OK } from '../emulation/constants.js';\nimport { FileFlag, PreloadFile } from '../file.js';\nimport { SynchronousFileSystem } from '../filesystem.js';\nimport Inode from '../inode.js';\nimport { FileType } from '../stats.js';\nimport { randomUUID, getEmptyDirNode, ROOT_NODE_ID } from '../utils.js';\n/**\n * A simple RW transaction for simple synchronous key-value stores.\n */\nexport class SimpleSyncRWTransaction {\n constructor(store) {\n this.store = store;\n /**\n * Stores data in the keys we modify prior to modifying them.\n * Allows us to roll back commits.\n */\n this.originalData = {};\n /**\n * List of keys modified in this transaction, if any.\n */\n this.modifiedKeys = [];\n }\n get(key) {\n const val = this.store.get(key);\n this.stashOldValue(key, val);\n return val;\n }\n put(key, data, overwrite) {\n this.markModified(key);\n return this.store.put(key, data, overwrite);\n }\n del(key) {\n this.markModified(key);\n this.store.del(key);\n }\n commit() {\n /* NOP */\n }\n abort() {\n // Rollback old values.\n for (const key of this.modifiedKeys) {\n const value = this.originalData[key];\n if (!value) {\n // Key didn't exist.\n this.store.del(key);\n }\n else {\n // Key existed. Store old value.\n this.store.put(key, value, true);\n }\n }\n }\n _has(key) {\n return Object.prototype.hasOwnProperty.call(this.originalData, key);\n }\n /**\n * Stashes given key value pair into `originalData` if it doesn't already\n * exist. Allows us to stash values the program is requesting anyway to\n * prevent needless `get` requests if the program modifies the data later\n * on during the transaction.\n */\n stashOldValue(key, value) {\n // Keep only the earliest value in the transaction.\n if (!this._has(key)) {\n this.originalData[key] = value;\n }\n }\n /**\n * Marks the given key as modified, and stashes its value if it has not been\n * stashed already.\n */\n markModified(key) {\n if (this.modifiedKeys.indexOf(key) === -1) {\n this.modifiedKeys.push(key);\n if (!this._has(key)) {\n this.originalData[key] = this.store.get(key);\n }\n }\n }\n}\nexport class SyncKeyValueFile extends PreloadFile {\n constructor(_fs, _path, _flag, _stat, contents) {\n super(_fs, _path, _flag, _stat, contents);\n }\n syncSync() {\n if (this.isDirty()) {\n this._fs._syncSync(this.getPath(), this.getBuffer(), this.getStats());\n this.resetDirty();\n }\n }\n closeSync() {\n this.syncSync();\n }\n}\n/**\n * A \"Synchronous key-value file system\". Stores data to/retrieves data from an\n * underlying key-value store.\n *\n * We use a unique ID for each node in the file system. The root node has a\n * fixed ID.\n * @todo Introduce Node ID caching.\n * @todo Check modes.\n */\nexport class SyncKeyValueFileSystem extends SynchronousFileSystem {\n static isAvailable() {\n return true;\n }\n constructor(options) {\n super();\n this.store = options.store;\n // INVARIANT: Ensure that the root exists.\n this.makeRootDirectory();\n }\n getName() {\n return this.store.name();\n }\n isReadOnly() {\n return false;\n }\n supportsSymlinks() {\n return false;\n }\n supportsProps() {\n return true;\n }\n supportsSynch() {\n return true;\n }\n /**\n * Delete all contents stored in the file system.\n */\n empty() {\n this.store.clear();\n // INVARIANT: Root always exists.\n this.makeRootDirectory();\n }\n accessSync(p, mode, cred) {\n const tx = this.store.beginTransaction('readonly'), node = this.findINode(tx, p);\n if (!node.toStats().hasAccess(mode, cred)) {\n throw ApiError.EACCES(p);\n }\n }\n renameSync(oldPath, newPath, cred) {\n const tx = this.store.beginTransaction('readwrite'), oldParent = path.dirname(oldPath), oldName = path.basename(oldPath), newParent = path.dirname(newPath), newName = path.basename(newPath), \n // Remove oldPath from parent's directory listing.\n oldDirNode = this.findINode(tx, oldParent), oldDirList = this.getDirListing(tx, oldParent, oldDirNode);\n if (!oldDirNode.toStats().hasAccess(W_OK, cred)) {\n throw ApiError.EACCES(oldPath);\n }\n if (!oldDirList[oldName]) {\n throw ApiError.ENOENT(oldPath);\n }\n const nodeId = oldDirList[oldName];\n delete oldDirList[oldName];\n // Invariant: Can't move a folder inside itself.\n // This funny little hack ensures that the check passes only if oldPath\n // is a subpath of newParent. We append '/' to avoid matching folders that\n // are a substring of the bottom-most folder in the path.\n if ((newParent + '/').indexOf(oldPath + '/') === 0) {\n throw new ApiError(ErrorCode.EBUSY, oldParent);\n }\n // Add newPath to parent's directory listing.\n let newDirNode, newDirList;\n if (newParent === oldParent) {\n // Prevent us from re-grabbing the same directory listing, which still\n // contains oldName.\n newDirNode = oldDirNode;\n newDirList = oldDirList;\n }\n else {\n newDirNode = this.findINode(tx, newParent);\n newDirList = this.getDirListing(tx, newParent, newDirNode);\n }\n if (newDirList[newName]) {\n // If it's a file, delete it.\n const newNameNode = this.getINode(tx, newPath, newDirList[newName]);\n if (newNameNode.isFile()) {\n try {\n tx.del(newNameNode.id);\n tx.del(newDirList[newName]);\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n }\n else {\n // If it's a directory, throw a permissions error.\n throw ApiError.EPERM(newPath);\n }\n }\n newDirList[newName] = nodeId;\n // Commit the two changed directory listings.\n try {\n tx.put(oldDirNode.id, Buffer.from(JSON.stringify(oldDirList)), true);\n tx.put(newDirNode.id, Buffer.from(JSON.stringify(newDirList)), true);\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n tx.commit();\n }\n statSync(p, cred) {\n // Get the inode to the item, convert it into a Stats object.\n const stats = this.findINode(this.store.beginTransaction('readonly'), p).toStats();\n if (!stats.hasAccess(R_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n return stats;\n }\n createFileSync(p, flag, mode, cred) {\n const tx = this.store.beginTransaction('readwrite'), data = Buffer.alloc(0), newFile = this.commitNewFile(tx, p, FileType.FILE, mode, cred, data);\n // Open the file.\n return new SyncKeyValueFile(this, p, flag, newFile.toStats(), data);\n }\n openFileSync(p, flag, cred) {\n const tx = this.store.beginTransaction('readonly'), node = this.findINode(tx, p), data = tx.get(node.id);\n if (!node.toStats().hasAccess(flag.getMode(), cred)) {\n throw ApiError.EACCES(p);\n }\n if (data === undefined) {\n throw ApiError.ENOENT(p);\n }\n return new SyncKeyValueFile(this, p, flag, node.toStats(), data);\n }\n unlinkSync(p, cred) {\n this.removeEntry(p, false, cred);\n }\n rmdirSync(p, cred) {\n // Check first if directory is empty.\n if (this.readdirSync(p, cred).length > 0) {\n throw ApiError.ENOTEMPTY(p);\n }\n else {\n this.removeEntry(p, true, cred);\n }\n }\n mkdirSync(p, mode, cred) {\n const tx = this.store.beginTransaction('readwrite'), data = Buffer.from('{}');\n this.commitNewFile(tx, p, FileType.DIRECTORY, mode, cred, data);\n }\n readdirSync(p, cred) {\n const tx = this.store.beginTransaction('readonly');\n const node = this.findINode(tx, p);\n if (!node.toStats().hasAccess(R_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n return Object.keys(this.getDirListing(tx, p, node));\n }\n chmodSync(p, mode, cred) {\n const fd = this.openFileSync(p, FileFlag.getFileFlag('r+'), cred);\n fd.chmodSync(mode);\n }\n chownSync(p, new_uid, new_gid, cred) {\n const fd = this.openFileSync(p, FileFlag.getFileFlag('r+'), cred);\n fd.chownSync(new_uid, new_gid);\n }\n _syncSync(p, data, stats) {\n // @todo Ensure mtime updates properly, and use that to determine if a data\n // update is required.\n const tx = this.store.beginTransaction('readwrite'), \n // We use the _findInode helper because we actually need the INode id.\n fileInodeId = this._findINode(tx, path.dirname(p), path.basename(p)), fileInode = this.getINode(tx, p, fileInodeId), inodeChanged = fileInode.update(stats);\n try {\n // Sync data.\n tx.put(fileInode.id, data, true);\n // Sync metadata.\n if (inodeChanged) {\n tx.put(fileInodeId, fileInode.toBuffer(), true);\n }\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n tx.commit();\n }\n /**\n * Checks if the root directory exists. Creates it if it doesn't.\n */\n makeRootDirectory() {\n const tx = this.store.beginTransaction('readwrite');\n if (tx.get(ROOT_NODE_ID) === undefined) {\n // Create new inode.\n const currTime = new Date().getTime(), \n // Mode 0666, owned by root:root\n dirInode = new Inode(randomUUID(), 4096, 511 | FileType.DIRECTORY, currTime, currTime, currTime, 0, 0);\n // If the root doesn't exist, the first random ID shouldn't exist,\n // either.\n tx.put(dirInode.id, getEmptyDirNode(), false);\n tx.put(ROOT_NODE_ID, dirInode.toBuffer(), false);\n tx.commit();\n }\n }\n /**\n * Helper function for findINode.\n * @param parent The parent directory of the file we are attempting to find.\n * @param filename The filename of the inode we are attempting to find, minus\n * the parent.\n * @return string The ID of the file's inode in the file system.\n */\n _findINode(tx, parent, filename, visited = new Set()) {\n const currentPath = path.posix.join(parent, filename);\n if (visited.has(currentPath)) {\n throw new ApiError(ErrorCode.EIO, 'Infinite loop detected while finding inode', currentPath);\n }\n visited.add(currentPath);\n const readDirectory = (inode) => {\n // Get the root's directory listing.\n const dirList = this.getDirListing(tx, parent, inode);\n // Get the file's ID.\n if (dirList[filename]) {\n return dirList[filename];\n }\n else {\n throw ApiError.ENOENT(path.resolve(parent, filename));\n }\n };\n if (parent === '/') {\n if (filename === '') {\n // Return the root's ID.\n return ROOT_NODE_ID;\n }\n else {\n // Find the item in the root node.\n return readDirectory(this.getINode(tx, parent, ROOT_NODE_ID));\n }\n }\n else {\n return readDirectory(this.getINode(tx, parent + path.sep + filename, this._findINode(tx, path.dirname(parent), path.basename(parent), visited)));\n }\n }\n /**\n * Finds the Inode of the given path.\n * @param p The path to look up.\n * @return The Inode of the path p.\n * @todo memoize/cache\n */\n findINode(tx, p) {\n return this.getINode(tx, p, this._findINode(tx, path.dirname(p), path.basename(p)));\n }\n /**\n * Given the ID of a node, retrieves the corresponding Inode.\n * @param tx The transaction to use.\n * @param p The corresponding path to the file (used for error messages).\n * @param id The ID to look up.\n */\n getINode(tx, p, id) {\n const inode = tx.get(id);\n if (inode === undefined) {\n throw ApiError.ENOENT(p);\n }\n return Inode.fromBuffer(inode);\n }\n /**\n * Given the Inode of a directory, retrieves the corresponding directory\n * listing.\n */\n getDirListing(tx, p, inode) {\n if (!inode.isDirectory()) {\n throw ApiError.ENOTDIR(p);\n }\n const data = tx.get(inode.id);\n if (data === undefined) {\n throw ApiError.ENOENT(p);\n }\n return JSON.parse(data.toString());\n }\n /**\n * Creates a new node under a random ID. Retries 5 times before giving up in\n * the exceedingly unlikely chance that we try to reuse a random GUID.\n * @return The GUID that the data was stored under.\n */\n addNewNode(tx, data) {\n const retries = 0;\n let currId;\n while (retries < 5) {\n try {\n currId = randomUUID();\n tx.put(currId, data, false);\n return currId;\n }\n catch (e) {\n // Ignore and reroll.\n }\n }\n throw new ApiError(ErrorCode.EIO, 'Unable to commit data to key-value store.');\n }\n /**\n * Commits a new file (well, a FILE or a DIRECTORY) to the file system with\n * the given mode.\n * Note: This will commit the transaction.\n * @param p The path to the new file.\n * @param type The type of the new file.\n * @param mode The mode to create the new file with.\n * @param data The data to store at the file's data node.\n * @return The Inode for the new file.\n */\n commitNewFile(tx, p, type, mode, cred, data) {\n const parentDir = path.dirname(p), fname = path.basename(p), parentNode = this.findINode(tx, parentDir), dirListing = this.getDirListing(tx, parentDir, parentNode), currTime = new Date().getTime();\n //Check that the creater has correct access\n if (!parentNode.toStats().hasAccess(0b0100 /* Write */, cred)) {\n throw ApiError.EACCES(p);\n }\n // Invariant: The root always exists.\n // If we don't check this prior to taking steps below, we will create a\n // file with name '' in root should p == '/'.\n if (p === '/') {\n throw ApiError.EEXIST(p);\n }\n // Check if file already exists.\n if (dirListing[fname]) {\n throw ApiError.EEXIST(p);\n }\n let fileNode;\n try {\n // Commit data.\n const dataId = this.addNewNode(tx, data);\n fileNode = new Inode(dataId, data.length, mode | type, currTime, currTime, currTime, cred.uid, cred.gid);\n // Commit file node.\n const fileNodeId = this.addNewNode(tx, fileNode.toBuffer());\n // Update and commit parent directory listing.\n dirListing[fname] = fileNodeId;\n tx.put(parentNode.id, Buffer.from(JSON.stringify(dirListing)), true);\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n tx.commit();\n return fileNode;\n }\n /**\n * Remove all traces of the given path from the file system.\n * @param p The path to remove from the file system.\n * @param isDir Does the path belong to a directory, or a file?\n * @todo Update mtime.\n */\n removeEntry(p, isDir, cred) {\n const tx = this.store.beginTransaction('readwrite'), parent = path.dirname(p), parentNode = this.findINode(tx, parent), parentListing = this.getDirListing(tx, parent, parentNode), fileName = path.basename(p);\n if (!parentListing[fileName]) {\n throw ApiError.ENOENT(p);\n }\n const fileNodeId = parentListing[fileName];\n // Get file inode.\n const fileNode = this.getINode(tx, p, fileNodeId);\n if (!fileNode.toStats().hasAccess(W_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n // Remove from directory listing of parent.\n delete parentListing[fileName];\n if (!isDir && fileNode.isDirectory()) {\n throw ApiError.EISDIR(p);\n }\n else if (isDir && !fileNode.isDirectory()) {\n throw ApiError.ENOTDIR(p);\n }\n try {\n // Delete data.\n tx.del(fileNode.id);\n // Delete node.\n tx.del(fileNodeId);\n // Update directory listing.\n tx.put(parentNode.id, Buffer.from(JSON.stringify(parentListing)), true);\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n // Success.\n tx.commit();\n }\n}\n", "import { checkOptions } from '../utils.js';\nexport function CreateBackend(options, cb) {\n cb = typeof options === 'function' ? options : cb;\n checkOptions(this, options);\n const fs = new this(typeof options === 'function' ? {} : options);\n // Promise\n if (typeof cb != 'function') {\n return fs.whenReady();\n }\n // Callback\n fs.whenReady()\n .then(fs => cb(null, fs))\n .catch(err => cb(err));\n}\n", "var _a;\nimport { SimpleSyncRWTransaction, SyncKeyValueFileSystem } from './SyncStore.js';\nimport { CreateBackend } from './backend.js';\n/**\n * A simple in-memory key-value store backed by a JavaScript object.\n */\nexport class InMemoryStore {\n constructor() {\n this.store = new Map();\n }\n name() {\n return InMemoryFileSystem.Name;\n }\n clear() {\n this.store.clear();\n }\n beginTransaction(type) {\n return new SimpleSyncRWTransaction(this);\n }\n get(key) {\n return this.store.get(key);\n }\n put(key, data, overwrite) {\n if (!overwrite && this.store.has(key)) {\n return false;\n }\n this.store.set(key, data);\n return true;\n }\n del(key) {\n this.store.delete(key);\n }\n}\n/**\n * A simple in-memory file system backed by an InMemoryStore.\n * Files are not persisted across page loads.\n */\nexport class InMemoryFileSystem extends SyncKeyValueFileSystem {\n constructor() {\n super({ store: new InMemoryStore() });\n }\n}\n_a = InMemoryFileSystem;\nInMemoryFileSystem.Name = 'InMemory';\nInMemoryFileSystem.Create = CreateBackend.bind(_a);\nInMemoryFileSystem.Options = {};\n", "// Utilities and shared data\nimport { posix as path } from 'path';\nimport { ApiError, ErrorCode } from '../ApiError.js';\nimport { Cred } from '../cred.js';\n//import { BackendConstructor } from '../backends.js';\nimport { InMemoryFileSystem } from '../backends/InMemory.js';\n/**\n * converts Date or number to a fractional UNIX timestamp\n * Grabbed from NodeJS sources (lib/fs.js)\n */\nexport function _toUnixTimestamp(time) {\n if (typeof time === 'number') {\n return time;\n }\n else if (time instanceof Date) {\n return time.getTime() / 1000;\n }\n throw new Error('Cannot parse time: ' + time);\n}\nexport function normalizeMode(mode, def) {\n switch (typeof mode) {\n case 'number':\n // (path, flag, mode, cb?)\n return mode;\n case 'string':\n // (path, flag, modeString, cb?)\n const trueMode = parseInt(mode, 8);\n if (!isNaN(trueMode)) {\n return trueMode;\n }\n // Invalid string.\n return def;\n default:\n return def;\n }\n}\nexport function normalizeTime(time) {\n if (time instanceof Date) {\n return time;\n }\n if (typeof time === 'number') {\n return new Date(time * 1000);\n }\n throw new ApiError(ErrorCode.EINVAL, `Invalid time.`);\n}\nexport function normalizePath(p) {\n // Node doesn't allow null characters in paths.\n if (p.indexOf('\\u0000') >= 0) {\n throw new ApiError(ErrorCode.EINVAL, 'Path must be a string without null bytes.');\n }\n if (p === '') {\n throw new ApiError(ErrorCode.EINVAL, 'Path must not be empty.');\n }\n p = p.replaceAll(/\\/+/g, '/');\n return path.resolve(p);\n}\nexport function normalizeOptions(options, defEnc, defFlag, defMode) {\n // typeof null === 'object' so special-case handing is needed.\n switch (options === null ? 'null' : typeof options) {\n case 'object':\n return {\n encoding: typeof options['encoding'] !== 'undefined' ? options['encoding'] : defEnc,\n flag: typeof options['flag'] !== 'undefined' ? options['flag'] : defFlag,\n mode: normalizeMode(options['mode'], defMode),\n };\n case 'string':\n return {\n encoding: options,\n flag: defFlag,\n mode: defMode,\n };\n case 'null':\n case 'undefined':\n case 'function':\n return {\n encoding: defEnc,\n flag: defFlag,\n mode: defMode,\n };\n default:\n throw new TypeError(`\"options\" must be a string or an object, got ${typeof options} instead.`);\n }\n}\nexport function nop() {\n // do nothing\n}\n// credentials\nexport let cred = Cred.Root;\nexport function setCred(val) {\n cred = val;\n}\n// descriptors\nexport const fdMap = new Map();\nlet nextFd = 100;\nexport function getFdForFile(file) {\n const fd = nextFd++;\n fdMap.set(fd, file);\n return fd;\n}\nexport function fd2file(fd) {\n if (!fdMap.has(fd)) {\n throw new ApiError(ErrorCode.EBADF, 'Invalid file descriptor.');\n }\n return fdMap.get(fd);\n}\nexport const mounts = new Map();\n/*\nSet a default root.\nThere is a very small but not 0 change that initialize() will try to unmount the default before it is mounted.\nThis can be fixed by using a top-level await, which is not done to maintain ES6 compatibility.\n*/\nInMemoryFileSystem.Create().then(fs => mount('/', fs));\n/**\n * Gets the file system mounted at `mountPoint`\n */\nexport function getMount(mountPoint) {\n return mounts.get(mountPoint);\n}\n/**\n * Gets an object of mount points (keys) and filesystems (values)\n */\nexport function getMounts() {\n return Object.fromEntries(mounts.entries());\n}\n/**\n * Mounts the file system at the given mount point.\n */\nexport function mount(mountPoint, fs) {\n if (mountPoint[0] !== '/') {\n mountPoint = '/' + mountPoint;\n }\n mountPoint = path.resolve(mountPoint);\n if (mounts.has(mountPoint)) {\n throw new ApiError(ErrorCode.EINVAL, 'Mount point ' + mountPoint + ' is already in use.');\n }\n mounts.set(mountPoint, fs);\n}\n/**\n * Unmounts the file system at the given mount point.\n */\nexport function umount(mountPoint) {\n if (mountPoint[0] !== '/') {\n mountPoint = `/${mountPoint}`;\n }\n mountPoint = path.resolve(mountPoint);\n if (!mounts.has(mountPoint)) {\n throw new ApiError(ErrorCode.EINVAL, 'Mount point ' + mountPoint + ' is already unmounted.');\n }\n mounts.delete(mountPoint);\n}\n/**\n * Gets the internal FileSystem for the path, then returns it along with the path relative to the FS' root\n */\nexport function resolveFS(path) {\n const sortedMounts = [...mounts].sort((a, b) => (a[0].length > b[0].length ? -1 : 1)); // decending order of the string length\n for (const [mountPoint, fs] of sortedMounts) {\n // We know path is normalized, so it would be a substring of the mount point.\n if (mountPoint.length <= path.length && path.startsWith(mountPoint)) {\n path = path.slice(mountPoint.length > 1 ? mountPoint.length : 0); // Resolve the path relative to the mount point\n if (path === '') {\n path = '/';\n }\n return { fs, path, mountPoint };\n }\n }\n throw new ApiError(ErrorCode.EIO, 'BrowserFS not initialized with a file system');\n}\n/**\n * Reverse maps the paths in text from the mounted FileSystem to the global path\n */\nexport function fixPaths(text, paths) {\n for (const [from, to] of Object.entries(paths)) {\n text = text.replaceAll(from, to);\n }\n return text;\n}\nexport function fixError(e, paths) {\n e.stack = fixPaths(e.stack, paths);\n e.message = fixPaths(e.message, paths);\n return e;\n}\nexport function initialize(mountMapping) {\n if (mountMapping['/']) {\n umount('/');\n }\n for (const [point, fs] of Object.entries(mountMapping)) {\n const FS = fs.constructor;\n if (!FS.isAvailable()) {\n throw new ApiError(ErrorCode.EINVAL, `Can not mount \"${point}\" since the filesystem is unavailable.`);\n }\n mount(point, fs);\n }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ApiError, ErrorCode } from './ApiError.js';\nimport { Stats } from './stats.js';\nimport { getMount } from './emulation/shared.js';\nimport { Buffer } from 'buffer';\nexport var ActionType;\n(function (ActionType) {\n // Indicates that the code should not do anything.\n ActionType[ActionType[\"NOP\"] = 0] = \"NOP\";\n // Indicates that the code should throw an exception.\n ActionType[ActionType[\"THROW_EXCEPTION\"] = 1] = \"THROW_EXCEPTION\";\n // Indicates that the code should truncate the file, but only if it is a file.\n ActionType[ActionType[\"TRUNCATE_FILE\"] = 2] = \"TRUNCATE_FILE\";\n // Indicates that the code should create the file.\n ActionType[ActionType[\"CREATE_FILE\"] = 3] = \"CREATE_FILE\";\n})(ActionType = ActionType || (ActionType = {}));\n/**\n * Represents one of the following file flags. A convenience object.\n *\n * * `'r'` - Open file for reading. An exception occurs if the file does not exist.\n * * `'r+'` - Open file for reading and writing. An exception occurs if the file does not exist.\n * * `'rs'` - Open file for reading in synchronous mode. Instructs the filesystem to not cache writes.\n * * `'rs+'` - Open file for reading and writing, and opens the file in synchronous mode.\n * * `'w'` - Open file for writing. The file is created (if it does not exist) or truncated (if it exists).\n * * `'wx'` - Like 'w' but opens the file in exclusive mode.\n * * `'w+'` - Open file for reading and writing. The file is created (if it does not exist) or truncated (if it exists).\n * * `'wx+'` - Like 'w+' but opens the file in exclusive mode.\n * * `'a'` - Open file for appending. The file is created if it does not exist.\n * * `'ax'` - Like 'a' but opens the file in exclusive mode.\n * * `'a+'` - Open file for reading and appending. The file is created if it does not exist.\n * * `'ax+'` - Like 'a+' but opens the file in exclusive mode.\n *\n * Exclusive mode ensures that the file path is newly created.\n */\nexport class FileFlag {\n /**\n * Get an object representing the given file flag.\n * @param modeStr The string representing the flag\n * @return The FileFlag object representing the flag\n * @throw when the flag string is invalid\n */\n static getFileFlag(flagStr) {\n // Check cache first.\n if (!FileFlag.flagCache.has(flagStr)) {\n FileFlag.flagCache.set(flagStr, new FileFlag(flagStr));\n }\n return FileFlag.flagCache.get(flagStr);\n }\n /**\n * This should never be called directly.\n * @param modeStr The string representing the mode\n * @throw when the mode string is invalid\n */\n constructor(flagStr) {\n this.flagStr = flagStr;\n if (FileFlag.validFlagStrs.indexOf(flagStr) < 0) {\n throw new ApiError(ErrorCode.EINVAL, 'Invalid flag: ' + flagStr);\n }\n }\n /**\n * Get the underlying flag string for this flag.\n */\n getFlagString() {\n return this.flagStr;\n }\n /**\n * Get the equivalent mode (0b0xxx: read, write, execute)\n * Note: Execute will always be 0\n */\n getMode() {\n let mode = 0;\n mode <<= 1;\n mode += +this.isReadable();\n mode <<= 1;\n mode += +this.isWriteable();\n mode <<= 1;\n return mode;\n }\n /**\n * Returns true if the file is readable.\n */\n isReadable() {\n return this.flagStr.indexOf('r') !== -1 || this.flagStr.indexOf('+') !== -1;\n }\n /**\n * Returns true if the file is writeable.\n */\n isWriteable() {\n return this.flagStr.indexOf('w') !== -1 || this.flagStr.indexOf('a') !== -1 || this.flagStr.indexOf('+') !== -1;\n }\n /**\n * Returns true if the file mode should truncate.\n */\n isTruncating() {\n return this.flagStr.indexOf('w') !== -1;\n }\n /**\n * Returns true if the file is appendable.\n */\n isAppendable() {\n return this.flagStr.indexOf('a') !== -1;\n }\n /**\n * Returns true if the file is open in synchronous mode.\n */\n isSynchronous() {\n return this.flagStr.indexOf('s') !== -1;\n }\n /**\n * Returns true if the file is open in exclusive mode.\n */\n isExclusive() {\n return this.flagStr.indexOf('x') !== -1;\n }\n /**\n * Returns one of the static fields on this object that indicates the\n * appropriate response to the path existing.\n */\n pathExistsAction() {\n if (this.isExclusive()) {\n return ActionType.THROW_EXCEPTION;\n }\n else if (this.isTruncating()) {\n return ActionType.TRUNCATE_FILE;\n }\n else {\n return ActionType.NOP;\n }\n }\n /**\n * Returns one of the static fields on this object that indicates the\n * appropriate response to the path not existing.\n */\n pathNotExistsAction() {\n if ((this.isWriteable() || this.isAppendable()) && this.flagStr !== 'r+') {\n return ActionType.CREATE_FILE;\n }\n else {\n return ActionType.THROW_EXCEPTION;\n }\n }\n}\n// Contains cached FileMode instances.\nFileFlag.flagCache = new Map();\n// Array of valid mode strings.\nFileFlag.validFlagStrs = ['r', 'r+', 'rs', 'rs+', 'w', 'wx', 'w+', 'wx+', 'a', 'ax', 'a+', 'ax+'];\n/**\n * Base class that contains shared implementations of functions for the file\n * object.\n */\nexport class BaseFile {\n sync() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n syncSync() {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n datasync() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.sync();\n });\n }\n datasyncSync() {\n return this.syncSync();\n }\n chown(uid, gid) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n chownSync(uid, gid) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n chmod(mode) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n chmodSync(mode) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n utimes(atime, mtime) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n utimesSync(atime, mtime) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n}\n/**\n * An implementation of the File interface that operates on a file that is\n * completely in-memory. PreloadFiles are backed by a Buffer.\n *\n * This is also an abstract class, as it lacks an implementation of 'sync' and\n * 'close'. Each filesystem that wishes to use this file representation must\n * extend this class and implement those two methods.\n * @todo 'close' lever that disables functionality once closed.\n */\nexport class PreloadFile extends BaseFile {\n /**\n * Creates a file with the given path and, optionally, the given contents. Note\n * that, if contents is specified, it will be mutated by the file!\n * @param _fs The file system that created the file.\n * @param _path\n * @param _mode The mode that the file was opened using.\n * Dictates permissions and where the file pointer starts.\n * @param _stat The stats object for the given file.\n * PreloadFile will mutate this object. Note that this object must contain\n * the appropriate mode that the file was opened as.\n * @param contents A buffer containing the entire\n * contents of the file. PreloadFile will mutate this buffer. If not\n * specified, we assume it is a new file.\n */\n constructor(_fs, _path, _flag, _stat, contents) {\n super();\n this._pos = 0;\n this._dirty = false;\n this._fs = _fs;\n this._path = _path;\n this._flag = _flag;\n this._stat = _stat;\n this._buffer = contents ? contents : Buffer.alloc(0);\n // Note: This invariant is *not* maintained once the file starts getting\n // modified.\n // Note: Only actually matters if file is readable, as writeable modes may\n // truncate/append to file.\n if (this._stat.size !== this._buffer.length && this._flag.isReadable()) {\n throw new Error(`Invalid buffer: Buffer is ${this._buffer.length} long, yet Stats object specifies that file is ${this._stat.size} long.`);\n }\n }\n /**\n * NONSTANDARD: Get the underlying buffer for this file. !!DO NOT MUTATE!! Will mess up dirty tracking.\n */\n getBuffer() {\n return this._buffer;\n }\n /**\n * NONSTANDARD: Get underlying stats for this file. !!DO NOT MUTATE!!\n */\n getStats() {\n return this._stat;\n }\n getFlag() {\n return this._flag;\n }\n /**\n * Get the path to this file.\n * @return [String] The path to the file.\n */\n getPath() {\n return this._path;\n }\n /**\n * Get the current file position.\n *\n * We emulate the following bug mentioned in the Node documentation:\n * > On Linux, positional writes don't work when the file is opened in append\n * mode. The kernel ignores the position argument and always appends the data\n * to the end of the file.\n * @return [Number] The current file position.\n */\n getPos() {\n if (this._flag.isAppendable()) {\n return this._stat.size;\n }\n return this._pos;\n }\n /**\n * Advance the current file position by the indicated number of positions.\n * @param [Number] delta\n */\n advancePos(delta) {\n return (this._pos += delta);\n }\n /**\n * Set the file position.\n * @param [Number] newPos\n */\n setPos(newPos) {\n return (this._pos = newPos);\n }\n /**\n * **Core**: Asynchronous sync. Must be implemented by subclasses of this\n * class.\n * @param [Function(BrowserFS.ApiError)] cb\n */\n sync() {\n return __awaiter(this, void 0, void 0, function* () {\n this.syncSync();\n });\n }\n /**\n * **Core**: Synchronous sync.\n */\n syncSync() {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n /**\n * **Core**: Asynchronous close. Must be implemented by subclasses of this\n * class.\n * @param [Function(BrowserFS.ApiError)] cb\n */\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n this.closeSync();\n });\n }\n /**\n * **Core**: Synchronous close.\n */\n closeSync() {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n /**\n * Asynchronous `stat`.\n * @param [Function(BrowserFS.ApiError, BrowserFS.node.fs.Stats)] cb\n */\n stat() {\n return __awaiter(this, void 0, void 0, function* () {\n return Stats.clone(this._stat);\n });\n }\n /**\n * Synchronous `stat`.\n */\n statSync() {\n return Stats.clone(this._stat);\n }\n /**\n * Asynchronous truncate.\n * @param [Number] len\n * @param [Function(BrowserFS.ApiError)] cb\n */\n truncate(len) {\n this.truncateSync(len);\n if (this._flag.isSynchronous() && !getMount('/').metadata.synchronous) {\n return this.sync();\n }\n }\n /**\n * Synchronous truncate.\n * @param [Number] len\n */\n truncateSync(len) {\n this._dirty = true;\n if (!this._flag.isWriteable()) {\n throw new ApiError(ErrorCode.EPERM, 'File not opened with a writeable mode.');\n }\n this._stat.mtimeMs = Date.now();\n if (len > this._buffer.length) {\n const buf = Buffer.alloc(len - this._buffer.length, 0);\n // Write will set @_stat.size for us.\n this.writeSync(buf, 0, buf.length, this._buffer.length);\n if (this._flag.isSynchronous() && getMount('/').metadata.synchronous) {\n this.syncSync();\n }\n return;\n }\n this._stat.size = len;\n // Truncate buffer to 'len'.\n const newBuff = Buffer.alloc(len);\n this._buffer.copy(newBuff, 0, 0, len);\n this._buffer = newBuff;\n if (this._flag.isSynchronous() && getMount('/').metadata.synchronous) {\n this.syncSync();\n }\n }\n /**\n * Write buffer to the file.\n * Note that it is unsafe to use fs.write multiple times on the same file\n * without waiting for the callback.\n * @param [BrowserFS.node.Buffer] buffer Buffer containing the data to write to\n * the file.\n * @param [Number] offset Offset in the buffer to start reading data from.\n * @param [Number] length The amount of bytes to write to the file.\n * @param [Number] position Offset from the beginning of the file where this\n * data should be written. If position is null, the data will be written at\n * the current position.\n * @param [Function(BrowserFS.ApiError, Number, BrowserFS.node.Buffer)]\n * cb The number specifies the number of bytes written into the file.\n */\n write(buffer, offset, length, position) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.writeSync(buffer, offset, length, position);\n });\n }\n /**\n * Write buffer to the file.\n * Note that it is unsafe to use fs.writeSync multiple times on the same file\n * without waiting for the callback.\n * @param [BrowserFS.node.Buffer] buffer Buffer containing the data to write to\n * the file.\n * @param [Number] offset Offset in the buffer to start reading data from.\n * @param [Number] length The amount of bytes to write to the file.\n * @param [Number] position Offset from the beginning of the file where this\n * data should be written. If position is null, the data will be written at\n * the current position.\n * @return [Number]\n */\n writeSync(buffer, offset, length, position) {\n this._dirty = true;\n if (position === undefined || position === null) {\n position = this.getPos();\n }\n if (!this._flag.isWriteable()) {\n throw new ApiError(ErrorCode.EPERM, 'File not opened with a writeable mode.');\n }\n const endFp = position + length;\n if (endFp > this._stat.size) {\n this._stat.size = endFp;\n if (endFp > this._buffer.length) {\n // Extend the buffer!\n const newBuff = Buffer.alloc(endFp);\n this._buffer.copy(newBuff);\n this._buffer = newBuff;\n }\n }\n const len = buffer.copy(this._buffer, position, offset, offset + length);\n this._stat.mtimeMs = Date.now();\n if (this._flag.isSynchronous()) {\n this.syncSync();\n return len;\n }\n this.setPos(position + len);\n return len;\n }\n /**\n * Read data from the file.\n * @param [BrowserFS.node.Buffer] buffer The buffer that the data will be\n * written to.\n * @param [Number] offset The offset within the buffer where writing will\n * start.\n * @param [Number] length An integer specifying the number of bytes to read.\n * @param [Number] position An integer specifying where to begin reading from\n * in the file. If position is null, data will be read from the current file\n * position.\n * @param [Function(BrowserFS.ApiError, Number, BrowserFS.node.Buffer)] cb The\n * number is the number of bytes read\n */\n read(buffer, offset, length, position) {\n return __awaiter(this, void 0, void 0, function* () {\n return { bytesRead: this.readSync(buffer, offset, length, position), buffer };\n });\n }\n /**\n * Read data from the file.\n * @param [BrowserFS.node.Buffer] buffer The buffer that the data will be\n * written to.\n * @param [Number] offset The offset within the buffer where writing will\n * start.\n * @param [Number] length An integer specifying the number of bytes to read.\n * @param [Number] position An integer specifying where to begin reading from\n * in the file. If position is null, data will be read from the current file\n * position.\n * @return [Number]\n */\n readSync(buffer, offset, length, position) {\n if (!this._flag.isReadable()) {\n throw new ApiError(ErrorCode.EPERM, 'File not opened with a readable mode.');\n }\n if (position === undefined || position === null) {\n position = this.getPos();\n }\n const endRead = position + length;\n if (endRead > this._stat.size) {\n length = this._stat.size - position;\n }\n const rv = this._buffer.copy(buffer, offset, position, position + length);\n this._stat.atimeMs = Date.now();\n this._pos = position + length;\n return rv;\n }\n /**\n * Asynchronous `fchmod`.\n * @param [Number|String] mode\n */\n chmod(mode) {\n return __awaiter(this, void 0, void 0, function* () {\n this.chmodSync(mode);\n });\n }\n /**\n * Synchronous `fchmod`.\n * @param [Number] mode\n */\n chmodSync(mode) {\n if (!this._fs.metadata.supportsProperties) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n this._dirty = true;\n this._stat.chmod(mode);\n this.syncSync();\n }\n /**\n * Asynchronous `fchown`.\n * @param [Number] uid\n * @param [Number] gid\n */\n chown(uid, gid) {\n return __awaiter(this, void 0, void 0, function* () {\n this.chownSync(uid, gid);\n });\n }\n /**\n * Synchronous `fchown`.\n * @param [Number] uid\n * @param [Number] gid\n */\n chownSync(uid, gid) {\n if (!this._fs.metadata.supportsProperties) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n this._dirty = true;\n this._stat.chown(uid, gid);\n this.syncSync();\n }\n isDirty() {\n return this._dirty;\n }\n /**\n * Resets the dirty bit. Should only be called after a sync has completed successfully.\n */\n resetDirty() {\n this._dirty = false;\n }\n}\n/**\n * File class for the InMemory and XHR file systems.\n * Doesn't sync to anything, so it works nicely for memory-only files.\n */\nexport class NoSyncFile extends PreloadFile {\n constructor(_fs, _path, _flag, _stat, contents) {\n super(_fs, _path, _flag, _stat, contents);\n }\n /**\n * Asynchronous sync. Doesn't do anything, simply calls the cb.\n * @param [Function(BrowserFS.ApiError)] cb\n */\n sync() {\n return __awaiter(this, void 0, void 0, function* () {\n return;\n });\n }\n /**\n * Synchronous sync. Doesn't do anything.\n */\n syncSync() {\n // NOP.\n }\n /**\n * Asynchronous close. Doesn't do anything, simply calls the cb.\n * @param [Function(BrowserFS.ApiError)] cb\n */\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n return;\n });\n }\n /**\n * Synchronous close. Doesn't do anything.\n */\n closeSync() {\n // NOP.\n }\n}\n", "import { basename, dirname, join } from 'path';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\nimport { Cred } from '@zenfs/core/cred.js';\nimport { File, FileFlag, PreloadFile } from '@zenfs/core/file.js';\nimport { BaseFileSystem, FileSystemMetadata } from '@zenfs/core/filesystem.js';\nimport { Stats, FileType } from '@zenfs/core/stats.js';\nimport { CreateBackend, type BackendOptions } from '@zenfs/core/backends/backend.js';\nimport { Buffer } from 'buffer';\n\ndeclare global {\n\tinterface FileSystemDirectoryHandle {\n\t\t[Symbol.iterator](): IterableIterator<[string, FileSystemHandle]>;\n\t\tentries(): IterableIterator<[string, FileSystemHandle]>;\n\t\tkeys(): IterableIterator<string>;\n\t\tvalues(): IterableIterator<FileSystemHandle>;\n\t}\n}\n\ninterface FileSystemAccessFileSystemOptions {\n\thandle: FileSystemDirectoryHandle;\n}\n\nconst handleError = (path = '', error: Error) => {\n\tif (error.name === 'NotFoundError') {\n\t\tthrow ApiError.ENOENT(path);\n\t}\n\n\tthrow error as ApiError;\n};\n\nexport class FileSystemAccessFile extends PreloadFile<FileSystemAccessFileSystem> implements File {\n\tconstructor(_fs: FileSystemAccessFileSystem, _path: string, _flag: FileFlag, _stat: Stats, contents?: Buffer) {\n\t\tsuper(_fs, _path, _flag, _stat, contents);\n\t}\n\n\tpublic async sync(): Promise<void> {\n\t\tif (this.isDirty()) {\n\t\t\tawait this._fs._sync(this.getPath(), this.getBuffer(), this.getStats(), Cred.Root);\n\t\t\tthis.resetDirty();\n\t\t}\n\t}\n\n\tpublic async close(): Promise<void> {\n\t\tawait this.sync();\n\t}\n}\n\nexport class FileSystemAccessFileSystem extends BaseFileSystem {\n\tpublic static readonly Name = 'FileSystemAccess';\n\n\tpublic static Create = CreateBackend.bind(this);\n\n\tpublic static readonly Options: BackendOptions = {};\n\n\tpublic static isAvailable(): boolean {\n\t\treturn typeof FileSystemHandle === 'function';\n\t}\n\n\tprivate _handles: Map<string, FileSystemHandle> = new Map();\n\n\tpublic constructor({ handle }: FileSystemAccessFileSystemOptions) {\n\t\tsuper();\n\t\tthis._handles.set('/', handle);\n\t}\n\n\tpublic get metadata(): FileSystemMetadata {\n\t\treturn {\n\t\t\t...super.metadata,\n\t\t\tname: FileSystemAccessFileSystem.Name,\n\t\t};\n\t}\n\n\tpublic async _sync(p: string, data: Buffer, stats: Stats, cred: Cred): Promise<void> {\n\t\tconst currentStats = await this.stat(p, cred);\n\t\tif (stats.mtime !== currentStats!.mtime) {\n\t\t\tawait this.writeFile(p, data, null, FileFlag.getFileFlag('w'), currentStats!.mode, cred);\n\t\t}\n\t}\n\n\tpublic async rename(oldPath: string, newPath: string, cred: Cred): Promise<void> {\n\t\ttry {\n\t\t\tconst handle = await this.getHandle(oldPath);\n\t\t\tif (handle instanceof FileSystemDirectoryHandle) {\n\t\t\t\tconst files = await this.readdir(oldPath, cred);\n\n\t\t\t\tawait this.mkdir(newPath, 'wx', cred);\n\t\t\t\tif (files.length === 0) {\n\t\t\t\t\tawait this.unlink(oldPath, cred);\n\t\t\t\t} else {\n\t\t\t\t\tfor (const file of files) {\n\t\t\t\t\t\tawait this.rename(join(oldPath, file), join(newPath, file), cred);\n\t\t\t\t\t\tawait this.unlink(oldPath, cred);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (handle instanceof FileSystemFileHandle) {\n\t\t\t\tconst oldFile = await handle.getFile(),\n\t\t\t\t\tdestFolder = await this.getHandle(dirname(newPath));\n\t\t\t\tif (destFolder instanceof FileSystemDirectoryHandle) {\n\t\t\t\t\tconst newFile = await destFolder.getFileHandle(basename(newPath), { create: true });\n\t\t\t\t\tconst writable = await newFile.createWritable();\n\t\t\t\t\tconst buffer = await oldFile.arrayBuffer();\n\t\t\t\t\tawait writable.write(buffer);\n\n\t\t\t\t\twritable.close();\n\t\t\t\t\tawait this.unlink(oldPath, cred);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\thandleError(oldPath, err);\n\t\t}\n\t}\n\n\tpublic async writeFile(fname: string, data: any, encoding: string | null, flag: FileFlag, mode: number, cred: Cred, createFile?: boolean): Promise<void> {\n\t\tconst handle = await this.getHandle(dirname(fname));\n\t\tif (handle instanceof FileSystemDirectoryHandle) {\n\t\t\tconst file = await handle.getFileHandle(basename(fname), { create: true });\n\t\t\tconst writable = await file.createWritable();\n\t\t\tawait writable.write(data);\n\t\t\tawait writable.close();\n\t\t\t//return createFile ? this.newFile(fname, flag, data) : undefined;\n\t\t}\n\t}\n\n\tpublic async createFile(p: string, flag: FileFlag, mode: number, cred: Cred): Promise<File> {\n\t\tawait this.writeFile(p, Buffer.alloc(0), null, flag, mode, cred, true);\n\t\treturn this.openFile(p, flag, cred);\n\t}\n\n\tpublic async stat(path: string, cred: Cred): Promise<Stats> {\n\t\tconst handle = await this.getHandle(path);\n\t\tif (!handle) {\n\t\t\tthrow ApiError.FileError(ErrorCode.EINVAL, path);\n\t\t}\n\t\tif (handle instanceof FileSystemDirectoryHandle) {\n\t\t\treturn new Stats(FileType.DIRECTORY, 4096);\n\t\t}\n\t\tif (handle instanceof FileSystemFileHandle) {\n\t\t\tconst { lastModified, size } = await handle.getFile();\n\t\t\treturn new Stats(FileType.FILE, size, undefined, undefined, lastModified);\n\t\t}\n\t}\n\n\tpublic async exists(p: string, cred: Cred): Promise<boolean> {\n\t\ttry {\n\t\t\tawait this.getHandle(p);\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic async openFile(path: string, flags: FileFlag, cred: Cred): Promise<File> {\n\t\tconst handle = await this.getHandle(path);\n\t\tif (handle instanceof FileSystemFileHandle) {\n\t\t\tconst file = await handle.getFile();\n\t\t\tconst buffer = await file.arrayBuffer();\n\t\t\treturn this.newFile(path, flags, buffer, file.size, file.lastModified);\n\t\t}\n\t}\n\n\tpublic async unlink(path: string, cred: Cred): Promise<void> {\n\t\tconst handle = await this.getHandle(dirname(path));\n\t\tif (handle instanceof FileSystemDirectoryHandle) {\n\t\t\ttry {\n\t\t\t\tawait handle.removeEntry(basename(path), { recursive: true });\n\t\t\t} catch (e) {\n\t\t\t\thandleError(path, e);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async rmdir(path: string, cred: Cred): Promise<void> {\n\t\treturn this.unlink(path, cred);\n\t}\n\n\tpublic async mkdir(p: string, mode: any, cred: Cred): Promise<void> {\n\t\tconst overwrite = mode && mode.flag && mode.flag.includes('w') && !mode.flag.includes('x');\n\n\t\tconst existingHandle = await this.getHandle(p);\n\t\tif (existingHandle && !overwrite) {\n\t\t\tthrow ApiError.EEXIST(p);\n\t\t}\n\n\t\tconst handle = await this.getHandle(dirname(p));\n\t\tif (handle instanceof FileSystemDirectoryHandle) {\n\t\t\tawait handle.getDirectoryHandle(basename(p), { create: true });\n\t\t}\n\t}\n\n\tpublic async readdir(path: string, cred: Cred): Promise<string[]> {\n\t\tconst handle = await this.getHandle(path);\n\t\tif (!(handle instanceof FileSystemDirectoryHandle)) {\n\t\t\tthrow ApiError.ENOTDIR(path);\n\t\t}\n\t\tconst _keys: string[] = [];\n\t\tfor await (const key of handle.keys()) {\n\t\t\t_keys.push(join(path, key));\n\t\t}\n\t\treturn _keys;\n\t}\n\n\tprivate newFile(path: string, flag: FileFlag, data: ArrayBuffer, size?: number, lastModified?: number): File {\n\t\treturn new FileSystemAccessFile(this, path, flag, new Stats(FileType.FILE, size || 0, undefined, undefined, lastModified || new Date().getTime()), Buffer.from(data));\n\t}\n\n\tprivate async getHandle(path: string): Promise<FileSystemHandle> {\n\t\tif (this._handles.has(path)) {\n\t\t\treturn this._handles.get(path);\n\t\t}\n\n\t\tlet walkedPath = '/';\n\t\tconst [, ...pathParts] = path.split('/');\n\t\tconst getHandleParts = async ([pathPart, ...remainingPathParts]: string[]) => {\n\t\t\tconst walkingPath = join(walkedPath, pathPart);\n\t\t\tconst continueWalk = (handle: FileSystemHandle) => {\n\t\t\t\twalkedPath = walkingPath;\n\t\t\t\tthis._handles.set(walkedPath, handle);\n\n\t\t\t\tif (remainingPathParts.length === 0) {\n\t\t\t\t\treturn this._handles.get(path);\n\t\t\t\t}\n\n\t\t\t\tgetHandleParts(remainingPathParts);\n\t\t\t};\n\t\t\tconst handle = this._handles.get(walkedPath) as FileSystemDirectoryHandle;\n\n\t\t\ttry {\n\t\t\t\treturn await continueWalk(await handle.getDirectoryHandle(pathPart));\n\t\t\t} catch (error) {\n\t\t\t\tif (error.name === 'TypeMismatchError') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await continueWalk(await handle.getFileHandle(pathPart));\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\thandleError(walkingPath, err);\n\t\t\t\t\t}\n\t\t\t\t} else if (error.message === 'Name is not allowed.') {\n\t\t\t\t\tthrow new ApiError(ErrorCode.ENOENT, error.message, walkingPath);\n\t\t\t\t} else {\n\t\t\t\t\thandleError(walkingPath, error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tawait getHandleParts(pathParts);\n\t}\n}\n", "/**\n * Contains utility methods for network I/O (using fetch)\n */\nimport { Buffer } from 'buffer';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\n\nexport const fetchIsAvailable = typeof fetch !== 'undefined' && fetch !== null;\n\n/**\n * @hidden\n */\nfunction convertError(e): never {\n\tthrow new ApiError(ErrorCode.EIO, e.message);\n}\n\n/**\n * Asynchronously download a file as a buffer or a JSON object.\n * Note that the third function signature with a non-specialized type is\n * invalid, but TypeScript requires it when you specialize string arguments to\n * constants.\n * @hidden\n */\nexport async function fetchFile(p: string, type: 'buffer'): Promise<Buffer>;\nexport async function fetchFile(p: string, type: 'json'): Promise<any>;\nexport async function fetchFile(p: string, type: string): Promise<any>;\nexport async function fetchFile(p: string, type: string): Promise<any> {\n\tconst response = await fetch(p).catch(convertError);\n\tif (!response.ok) {\n\t\tthrow new ApiError(ErrorCode.EIO, `fetch error: response returned code ${response.status}`);\n\t}\n\tswitch (type) {\n\t\tcase 'buffer':\n\t\t\tconst buf = await response.arrayBuffer().catch(convertError);\n\t\t\treturn Buffer.from(buf);\n\t\tcase 'json':\n\t\t\tconst json = await response.json().catch(convertError);\n\t\t\treturn json;\n\t\tdefault:\n\t\t\tthrow new ApiError(ErrorCode.EINVAL, 'Invalid download type: ' + type);\n\t}\n}\n\n/**\n * Asynchronously retrieves the size of the given file in bytes.\n * @hidden\n */\nexport async function fetchFileSize(p: string): Promise<number> {\n\tconst response = await fetch(p, { method: 'HEAD' }).catch(convertError);\n\tif (!response.ok) {\n\t\tthrow new ApiError(ErrorCode.EIO, `fetch HEAD error: response returned code ${response.status}`);\n\t}\n\treturn parseInt(response.headers.get('Content-Length') || '-1', 10);\n}\n", "import { Stats, FileType } from '@zenfs/core/stats.js';\nimport * as path from 'path';\n\n/**\n * A simple class for storing a filesystem index. Assumes that all paths passed\n * to it are *absolute* paths.\n *\n * Can be used as a partial or a full index, although care must be taken if used\n * for the former purpose, especially when directories are concerned.\n */\nexport class FileIndex<T> {\n\t/**\n\t * Static method for constructing indices from a JSON listing.\n\t * @param listing Directory listing generated by tools/XHRIndexer.coffee\n\t * @return A new FileIndex object.\n\t */\n\tpublic static fromListing<T>(listing: any): FileIndex<T> {\n\t\tconst idx = new FileIndex<T>();\n\t\t// Add a root DirNode.\n\t\tconst rootInode = new DirInode<T>();\n\t\tidx._index['/'] = rootInode;\n\t\tconst queue = [['', listing, rootInode]];\n\t\twhile (queue.length > 0) {\n\t\t\tlet inode: Inode;\n\t\t\tconst next = queue.pop();\n\t\t\tconst pwd = next![0];\n\t\t\tconst tree = next![1];\n\t\t\tconst parent = next![2];\n\t\t\tfor (const node in tree) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(tree, node)) {\n\t\t\t\t\tconst children = tree[node];\n\t\t\t\t\tconst name = `${pwd}/${node}`;\n\t\t\t\t\tif (children) {\n\t\t\t\t\t\tidx._index[name] = inode = new DirInode<T>();\n\t\t\t\t\t\tqueue.push([name, children, inode]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This inode doesn't have correct size information, noted with -1.\n\t\t\t\t\t\tinode = new FileInode<Stats>(new Stats(FileType.FILE, -1, 0x16d));\n\t\t\t\t\t}\n\t\t\t\t\tif (parent) {\n\t\t\t\t\t\tparent._ls[node] = inode;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn idx;\n\t}\n\n\t// Maps directory paths to directory inodes, which contain files.\n\tprivate _index: { [path: string]: DirInode<T> };\n\n\t/**\n\t * Constructs a new FileIndex.\n\t */\n\tconstructor() {\n\t\t// _index is a single-level key,value store that maps *directory* paths to\n\t\t// DirInodes. File information is only contained in DirInodes themselves.\n\t\tthis._index = {};\n\t\t// Create the root directory.\n\t\tthis.addPath('/', new DirInode());\n\t}\n\n\t/**\n\t * Runs the given function over all files in the index.\n\t */\n\tpublic fileIterator<T>(cb: (file: T | null) => void): void {\n\t\tfor (const path in this._index) {\n\t\t\tif (Object.prototype.hasOwnProperty.call(this._index, path)) {\n\t\t\t\tconst dir = this._index[path];\n\t\t\t\tconst files = dir.getListing();\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\tconst item = dir.getItem(file);\n\t\t\t\t\tif (isFileInode<T>(item)) {\n\t\t\t\t\t\tcb(item.getData());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Adds the given absolute path to the index if it is not already in the index.\n\t * Creates any needed parent directories.\n\t * @param path The path to add to the index.\n\t * @param inode The inode for the\n\t * path to add.\n\t * @return 'True' if it was added or already exists, 'false' if there\n\t * was an issue adding it (e.g. item in path is a file, item exists but is\n\t * different).\n\t * @todo If adding fails and implicitly creates directories, we do not clean up\n\t * the new empty directories.\n\t */\n\tpublic addPath(path: string, inode: Inode): boolean {\n\t\tif (!inode) {\n\t\t\tthrow new Error('Inode must be specified');\n\t\t}\n\t\tif (path[0] !== '/') {\n\t\t\tthrow new Error('Path must be absolute, got: ' + path);\n\t\t}\n\n\t\t// Check if it already exists.\n\t\tif (Object.prototype.hasOwnProperty.call(this._index, path)) {\n\t\t\treturn this._index[path] === inode;\n\t\t}\n\n\t\tconst splitPath = this._split_path(path);\n\t\tconst dirpath = splitPath[0];\n\t\tconst itemname = splitPath[1];\n\t\t// Try to add to its parent directory first.\n\t\tlet parent = this._index[dirpath];\n\t\tif (parent === undefined && path !== '/') {\n\t\t\t// Create parent.\n\t\t\tparent = new DirInode<T>();\n\t\t\tif (!this.addPath(dirpath, parent)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t// Add myself to my parent.\n\t\tif (path !== '/') {\n\t\t\tif (!parent.addItem(itemname, inode)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t// If I'm a directory, add myself to the index.\n\t\tif (isDirInode<T>(inode)) {\n\t\t\tthis._index[path] = inode;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Adds the given absolute path to the index if it is not already in the index.\n\t * The path is added without special treatment (no joining of adjacent separators, etc).\n\t * Creates any needed parent directories.\n\t * @param path The path to add to the index.\n\t * @param inode The inode for the\n\t * path to add.\n\t * @return 'True' if it was added or already exists, 'false' if there\n\t * was an issue adding it (e.g. item in path is a file, item exists but is\n\t * different).\n\t * @todo If adding fails and implicitly creates directories, we do not clean up\n\t * the new empty directories.\n\t */\n\tpublic addPathFast(path: string, inode: Inode): boolean {\n\t\tconst itemNameMark = path.lastIndexOf('/');\n\t\tconst parentPath = itemNameMark === 0 ? '/' : path.substring(0, itemNameMark);\n\t\tconst itemName = path.substring(itemNameMark + 1);\n\n\t\t// Try to add to its parent directory first.\n\t\tlet parent = this._index[parentPath];\n\t\tif (parent === undefined) {\n\t\t\t// Create parent.\n\t\t\tparent = new DirInode<T>();\n\t\t\tthis.addPathFast(parentPath, parent);\n\t\t}\n\n\t\tif (!parent.addItem(itemName, inode)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If adding a directory, add to the index as well.\n\t\tif (inode.isDir()) {\n\t\t\tthis._index[path] = <DirInode<T>>inode;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Removes the given path. Can be a file or a directory.\n\t * @return The removed item,\n\t * or null if it did not exist.\n\t */\n\tpublic removePath(path: string): Inode | null {\n\t\tconst splitPath = this._split_path(path);\n\t\tconst dirpath = splitPath[0];\n\t\tconst itemname = splitPath[1];\n\n\t\t// Try to remove it from its parent directory first.\n\t\tconst parent = this._index[dirpath];\n\t\tif (parent === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\t// Remove myself from my parent.\n\t\tconst inode = parent.remItem(itemname);\n\t\tif (inode === null) {\n\t\t\treturn null;\n\t\t}\n\t\t// If I'm a directory, remove myself from the index, and remove my children.\n\t\tif (isDirInode(inode)) {\n\t\t\tconst children = inode.getListing();\n\t\t\tfor (const child of children) {\n\t\t\t\tthis.removePath(path + '/' + child);\n\t\t\t}\n\n\t\t\t// Remove the directory from the index, unless it's the root.\n\t\t\tif (path !== '/') {\n\t\t\t\tdelete this._index[path];\n\t\t\t}\n\t\t}\n\t\treturn inode;\n\t}\n\n\t/**\n\t * Retrieves the directory listing of the given path.\n\t * @return An array of files in the given path, or 'null' if it does not exist.\n\t */\n\tpublic ls(path: string): string[] | null {\n\t\tconst item = this._index[path];\n\t\tif (item === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn item.getListing();\n\t}\n\n\t/**\n\t * Returns the inode of the given item.\n\t * @return Returns null if the item does not exist.\n\t */\n\tpublic getInode(path: string): Inode | null {\n\t\tconst splitPath = this._split_path(path);\n\t\tconst dirpath = splitPath[0];\n\t\tconst itemname = splitPath[1];\n\t\t// Retrieve from its parent directory.\n\t\tconst parent = this._index[dirpath];\n\t\tif (parent === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\t// Root case\n\t\tif (dirpath === path) {\n\t\t\treturn parent;\n\t\t}\n\t\treturn parent.getItem(itemname);\n\t}\n\n\t/**\n\t * Split into a (directory path, item name) pair\n\t */\n\tprivate _split_path(p: string): string[] {\n\t\tconst dirpath = path.dirname(p);\n\t\tconst itemname = p.substr(dirpath.length + (dirpath === '/' ? 0 : 1));\n\t\treturn [dirpath, itemname];\n\t}\n}\n\n/**\n * Generic interface for file/directory inodes.\n * Note that Stats objects are what we use for file inodes.\n */\nexport interface Inode {\n\t// Is this an inode for a file?\n\tisFile(): boolean;\n\t// Is this an inode for a directory?\n\tisDir(): boolean;\n\t//compatibility with other Inode types\n\ttoStats(): Stats;\n}\n\n/**\n * Inode for a file. Stores an arbitrary (filesystem-specific) data payload.\n */\nexport class FileInode<T> implements Inode {\n\tconstructor(private data: T) {}\n\tpublic isFile(): boolean {\n\t\treturn true;\n\t}\n\tpublic isDir(): boolean {\n\t\treturn false;\n\t}\n\tpublic getData(): T {\n\t\treturn this.data;\n\t}\n\tpublic setData(data: T): void {\n\t\tthis.data = data;\n\t}\n\tpublic toStats(): Stats {\n\t\treturn new Stats(FileType.FILE, 4096, 0o666);\n\t}\n}\n\n/**\n * Inode for a directory. Currently only contains the directory listing.\n */\nexport class DirInode<T> implements Inode {\n\tprivate _ls: { [path: string]: Inode } = {};\n\t/**\n\t * Constructs an inode for a directory.\n\t */\n\tconstructor(private data: T | null = null) {}\n\tpublic isFile(): boolean {\n\t\treturn false;\n\t}\n\tpublic isDir(): boolean {\n\t\treturn true;\n\t}\n\tpublic getData(): T | null {\n\t\treturn this.data;\n\t}\n\n\t/**\n\t * Return a Stats object for this inode.\n\t * @todo Should probably remove this at some point. This isn't the\n\t * responsibility of the FileIndex.\n\t */\n\tpublic getStats(): Stats {\n\t\treturn new Stats(FileType.DIRECTORY, 4096, 0o555);\n\t}\n\t/**\n\t * Alias of getStats()\n\t * @todo Remove this at some point. This isn't the\n\t * responsibility of the FileIndex.\n\t */\n\tpublic toStats(): Stats {\n\t\treturn this.getStats();\n\t}\n\t/**\n\t * Returns the directory listing for this directory. Paths in the directory are\n\t * relative to the directory's path.\n\t * @return The directory listing for this directory.\n\t */\n\tpublic getListing(): string[] {\n\t\treturn Object.keys(this._ls);\n\t}\n\t/**\n\t * Returns the inode for the indicated item, or null if it does not exist.\n\t * @param p Name of item in this directory.\n\t */\n\tpublic getItem(p: string): Inode | null {\n\t\tconst item = this._ls[p];\n\t\treturn item ? item : null;\n\t}\n\t/**\n\t * Add the given item to the directory listing. Note that the given inode is\n\t * not copied, and will be mutated by the DirInode if it is a DirInode.\n\t * @param p Item name to add to the directory listing.\n\t * @param inode The inode for the\n\t * item to add to the directory inode.\n\t * @return True if it was added, false if it already existed.\n\t */\n\tpublic addItem(p: string, inode: Inode): boolean {\n\t\tif (p in this._ls) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._ls[p] = inode;\n\t\treturn true;\n\t}\n\t/**\n\t * Removes the given item from the directory listing.\n\t * @param p Name of item to remove from the directory listing.\n\t * @return Returns the item\n\t * removed, or null if the item did not exist.\n\t */\n\tpublic remItem(p: string): Inode | null {\n\t\tconst item = this._ls[p];\n\t\tif (item === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\tdelete this._ls[p];\n\t\treturn item;\n\t}\n}\n\n/**\n * @hidden\n */\nexport function isFileInode<T>(inode: Inode | null): inode is FileInode<T> {\n\treturn !!inode && inode.isFile();\n}\n\n/**\n * @hidden\n */\nexport function isDirInode<T>(inode: Inode | null): inode is DirInode<T> {\n\treturn !!inode && inode.isDir();\n}\n", "import { BaseFileSystem, FileContents, FileSystemMetadata } from '@zenfs/core/filesystem.js';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\nimport { copyingSlice } from '@zenfs/core/utils.js';\nimport { File, FileFlag, ActionType, NoSyncFile } from '@zenfs/core/file.js';\nimport { Stats } from '@zenfs/core/stats.js';\nimport { fetchIsAvailable, fetchFile, fetchFileSize } from '../fetch.js';\nimport { FileIndex, isFileInode, isDirInode } from '../file_index.js';\nimport { Cred } from '@zenfs/core/cred.js';\nimport { CreateBackend, type BackendOptions } from '@zenfs/core/backends/backend.js';\nimport { R_OK } from '@zenfs/core/emulation/constants.js';\n\nexport interface HTTPRequestIndex {\n\t[key: string]: string;\n}\n\nexport namespace HTTPRequest {\n\t/**\n\t * Configuration options for a HTTPRequest file system.\n\t */\n\texport interface Options {\n\t\t/**\n\t\t * URL to a file index as a JSON file or the file index object itself, generated with the make_http_index script.\n\t\t * Defaults to `index.json`.\n\t\t */\n\t\tindex?: string | HTTPRequestIndex;\n\n\t\t/** Used as the URL prefix for fetched files.\n\t\t * Default: Fetch files relative to the index.\n\t\t */\n\t\tbaseUrl?: string;\n\t}\n}\n\n/**\n * A simple filesystem backed by HTTP downloads. You must create a directory listing using the\n * `make_http_index` tool provided by ZenFS.\n *\n * If you install ZenFS globally with `npm i -g zenfs`, you can generate a listing by\n * running `make_http_index` in your terminal in the directory you would like to index:\n *\n * ```\n * make_http_index > index.json\n * ```\n *\n * Listings objects look like the following:\n *\n * ```json\n * {\n * \"home\": {\n * \"jvilk\": {\n * \"someFile.txt\": null,\n * \"someDir\": {\n * // Empty directory\n * }\n * }\n * }\n * }\n * ```\n *\n * *This example has the folder `/home/jvilk` with subfile `someFile.txt` and subfolder `someDir`.*\n */\nexport class HTTPRequest extends BaseFileSystem {\n\tpublic static readonly Name = 'HTTPRequest';\n\n\tpublic static Create = CreateBackend.bind(this);\n\n\tpublic static readonly Options: BackendOptions = {\n\t\tindex: {\n\t\t\ttype: ['string', 'object'],\n\t\t\toptional: true,\n\t\t\tdescription: 'URL to a file index as a JSON file or the file index object itself, generated with the make_http_index script. Defaults to `index.json`.',\n\t\t},\n\t\tbaseUrl: {\n\t\t\ttype: 'string',\n\t\t\toptional: true,\n\t\t\tdescription: 'Used as the URL prefix for fetched files. Default: Fetch files relative to the index.',\n\t\t},\n\t};\n\n\tpublic static isAvailable(): boolean {\n\t\treturn fetchIsAvailable;\n\t}\n\n\tpublic readonly prefixUrl: string;\n\tprivate _index: FileIndex<{}>;\n\tprivate _requestFileInternal: typeof fetchFile;\n\tprivate _requestFileSizeInternal: typeof fetchFileSize;\n\n\tconstructor({ index, baseUrl = '' }: HTTPRequest.Options) {\n\t\tsuper();\n\t\tif (!index) {\n\t\t\tindex = 'index.json';\n\t\t}\n\n\t\tconst indexRequest = typeof index == 'string' ? fetchFile(index, 'json') : Promise.resolve(index);\n\t\tthis._ready = indexRequest.then(data => {\n\t\t\tthis._index = FileIndex.fromListing(data);\n\t\t\treturn this;\n\t\t});\n\n\t\t// prefix_url must end in a directory separator.\n\t\tif (baseUrl.length > 0 && baseUrl.charAt(baseUrl.length - 1) !== '/') {\n\t\t\tbaseUrl = baseUrl + '/';\n\t\t}\n\t\tthis.prefixUrl = baseUrl;\n\n\t\tthis._requestFileInternal = fetchFile;\n\t\tthis._requestFileSizeInternal = fetchFileSize;\n\t}\n\n\tpublic get metadata(): FileSystemMetadata {\n\t\treturn {\n\t\t\t...super.metadata,\n\t\t\tname: HTTPRequest.Name,\n\t\t\treadonly: true,\n\t\t};\n\t}\n\n\tpublic empty(): void {\n\t\tthis._index.fileIterator(function (file: Stats) {\n\t\t\tfile.fileData = null;\n\t\t});\n\t}\n\n\t/**\n\t * Special HTTPFS function: Preload the given file into the index.\n\t * @param [String] path\n\t * @param [ZenFS.Buffer] buffer\n\t */\n\tpublic preloadFile(path: string, buffer: Buffer): void {\n\t\tconst inode = this._index.getInode(path);\n\t\tif (isFileInode<Stats>(inode)) {\n\t\t\tif (inode === null) {\n\t\t\t\tthrow ApiError.ENOENT(path);\n\t\t\t}\n\t\t\tconst stats = inode.getData();\n\t\t\tstats.size = buffer.length;\n\t\t\tstats.fileData = buffer;\n\t\t} else {\n\t\t\tthrow ApiError.EISDIR(path);\n\t\t}\n\t}\n\n\tpublic async stat(path: string, cred: Cred): Promise<Stats> {\n\t\tconst inode = this._index.getInode(path);\n\t\tif (inode === null) {\n\t\t\tthrow ApiError.ENOENT(path);\n\t\t}\n\t\tif (!inode.toStats().hasAccess(R_OK, cred)) {\n\t\t\tthrow ApiError.EACCES(path);\n\t\t}\n\t\tlet stats: Stats;\n\t\tif (isFileInode<Stats>(inode)) {\n\t\t\tstats = inode.getData();\n\t\t\t// At this point, a non-opened file will still have default stats from the listing.\n\t\t\tif (stats.size < 0) {\n\t\t\t\tstats.size = await this._requestFileSize(path);\n\t\t\t}\n\t\t} else if (isDirInode(inode)) {\n\t\t\tstats = inode.getStats();\n\t\t} else {\n\t\t\tthrow ApiError.FileError(ErrorCode.EINVAL, path);\n\t\t}\n\t\treturn stats;\n\t}\n\n\tpublic async open(path: string, flags: FileFlag, mode: number, cred: Cred): Promise<File> {\n\t\t// INVARIANT: You can't write to files on this file system.\n\t\tif (flags.isWriteable()) {\n\t\t\tthrow new ApiError(ErrorCode.EPERM, path);\n\t\t}\n\t\t// Check if the path exists, and is a file.\n\t\tconst inode = this._index.getInode(path);\n\t\tif (inode === null) {\n\t\t\tthrow ApiError.ENOENT(path);\n\t\t}\n\t\tif (!inode.toStats().hasAccess(flags.getMode(), cred)) {\n\t\t\tthrow ApiError.EACCES(path);\n\t\t}\n\t\tif (isFileInode<Stats>(inode) || isDirInode<Stats>(inode)) {\n\t\t\tswitch (flags.pathExistsAction()) {\n\t\t\t\tcase ActionType.THROW_EXCEPTION:\n\t\t\t\tcase ActionType.TRUNCATE_FILE:\n\t\t\t\t\tthrow ApiError.EEXIST(path);\n\t\t\t\tcase ActionType.NOP:\n\t\t\t\t\tif (isDirInode<Stats>(inode)) {\n\t\t\t\t\t\tconst stats = inode.getStats();\n\t\t\t\t\t\treturn new NoSyncFile(this, path, flags, stats, stats.fileData || undefined);\n\t\t\t\t\t}\n\t\t\t\t\tconst stats = inode.getData();\n\t\t\t\t\t// Use existing file contents.\n\t\t\t\t\t// XXX: Uh, this maintains the previously-used flag.\n\t\t\t\t\tif (stats.fileData) {\n\t\t\t\t\t\treturn new NoSyncFile(this, path, flags, Stats.clone(stats), stats.fileData);\n\t\t\t\t\t}\n\t\t\t\t\t// @todo be lazier about actually requesting the file\n\t\t\t\t\tconst buffer = await this._requestFile(path, 'buffer');\n\t\t\t\t\t// we don't initially have file sizes\n\t\t\t\t\tstats.size = buffer.length;\n\t\t\t\t\tstats.fileData = buffer;\n\t\t\t\t\treturn new NoSyncFile(this, path, flags, Stats.clone(stats), buffer);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new ApiError(ErrorCode.EINVAL, 'Invalid FileMode object.');\n\t\t\t}\n\t\t} else {\n\t\t\tthrow ApiError.EPERM(path);\n\t\t}\n\t}\n\n\tpublic async readdir(path: string, cred: Cred): Promise<string[]> {\n\t\treturn this.readdirSync(path, cred);\n\t}\n\n\t/**\n\t * We have the entire file as a buffer; optimize readFile.\n\t */\n\tpublic async readFile(fname: string, encoding: BufferEncoding, flag: FileFlag, cred: Cred): Promise<FileContents> {\n\t\t// Get file.\n\t\tconst fd = await this.open(fname, flag, 0o644, cred);\n\t\ttry {\n\t\t\tconst fdCast = <NoSyncFile<HTTPRequest>>fd;\n\t\t\tconst fdBuff = <Buffer>fdCast.getBuffer();\n\t\t\tif (encoding === null) {\n\t\t\t\treturn copyingSlice(fdBuff);\n\t\t\t}\n\t\t\treturn fdBuff.toString(encoding);\n\t\t} finally {\n\t\t\tawait fd.close();\n\t\t}\n\t}\n\n\tprivate _getHTTPPath(filePath: string): string {\n\t\tif (filePath.charAt(0) === '/') {\n\t\t\tfilePath = filePath.slice(1);\n\t\t}\n\t\treturn this.prefixUrl + filePath;\n\t}\n\n\t/**\n\t * Asynchronously download the given file.\n\t */\n\tprivate _requestFile(p: string, type: 'buffer'): Promise<Buffer>;\n\tprivate _requestFile(p: string, type: 'json'): Promise<any>;\n\tprivate _requestFile(p: string, type: string): Promise<string>;\n\tprivate _requestFile(p: string, type: string): Promise<any> {\n\t\treturn this._requestFileInternal(this._getHTTPPath(p), type);\n\t}\n\n\t/**\n\t * Only requests the HEAD content, for the file size.\n\t */\n\tprivate _requestFileSize(path: string): Promise<number> {\n\t\treturn this._requestFileSizeInternal(this._getHTTPPath(path));\n\t}\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as path from 'path';\nimport { ApiError, ErrorCode } from '../ApiError.js';\nimport { W_OK, R_OK } from '../emulation/constants.js';\nimport { PreloadFile, FileFlag } from '../file.js';\nimport { BaseFileSystem } from '../filesystem.js';\nimport Inode from '../inode.js';\nimport { FileType } from '../stats.js';\nimport { ROOT_NODE_ID, randomUUID, getEmptyDirNode } from '../utils.js';\nclass LRUNode {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n this.prev = null;\n this.next = null;\n }\n}\n// Adapted from https://chrisrng.svbtle.com/lru-cache-in-javascript\nclass LRUCache {\n constructor(limit) {\n this.limit = limit;\n this.size = 0;\n this.map = {};\n this.head = null;\n this.tail = null;\n }\n /**\n * Change or add a new value in the cache\n * We overwrite the entry if it already exists\n */\n set(key, value) {\n const node = new LRUNode(key, value);\n if (this.map[key]) {\n this.map[key].value = node.value;\n this.remove(node.key);\n }\n else {\n if (this.size >= this.limit) {\n delete this.map[this.tail.key];\n this.size--;\n this.tail = this.tail.prev;\n this.tail.next = null;\n }\n }\n this.setHead(node);\n }\n /* Retrieve a single entry from the cache */\n get(key) {\n if (this.map[key]) {\n const value = this.map[key].value;\n const node = new LRUNode(key, value);\n this.remove(key);\n this.setHead(node);\n return value;\n }\n else {\n return null;\n }\n }\n /* Remove a single entry from the cache */\n remove(key) {\n const node = this.map[key];\n if (!node) {\n return;\n }\n if (node.prev !== null) {\n node.prev.next = node.next;\n }\n else {\n this.head = node.next;\n }\n if (node.next !== null) {\n node.next.prev = node.prev;\n }\n else {\n this.tail = node.prev;\n }\n delete this.map[key];\n this.size--;\n }\n /* Resets the entire cache - Argument limit is optional to be reset */\n removeAll() {\n this.size = 0;\n this.map = {};\n this.head = null;\n this.tail = null;\n }\n setHead(node) {\n node.next = this.head;\n node.prev = null;\n if (this.head !== null) {\n this.head.prev = node;\n }\n this.head = node;\n if (this.tail === null) {\n this.tail = node;\n }\n this.size++;\n this.map[node.key] = node;\n }\n}\nexport class AsyncKeyValueFile extends PreloadFile {\n constructor(_fs, _path, _flag, _stat, contents) {\n super(_fs, _path, _flag, _stat, contents);\n }\n sync() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.isDirty()) {\n return;\n }\n yield this._fs._sync(this.getPath(), this.getBuffer(), this.getStats());\n this.resetDirty();\n });\n }\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n this.sync();\n });\n }\n}\n/**\n * An \"Asynchronous key-value file system\". Stores data to/retrieves data from\n * an underlying asynchronous key-value store.\n */\nexport class AsyncKeyValueFileSystem extends BaseFileSystem {\n static isAvailable() {\n return true;\n }\n constructor(cacheSize) {\n super();\n this._cache = null;\n if (cacheSize > 0) {\n this._cache = new LRUCache(cacheSize);\n }\n }\n /**\n * Initializes the file system. Typically called by subclasses' async\n * constructors.\n */\n init(store) {\n return __awaiter(this, void 0, void 0, function* () {\n this.store = store;\n // INVARIANT: Ensure that the root exists.\n yield this.makeRootDirectory();\n });\n }\n getName() {\n return this.store.name();\n }\n isReadOnly() {\n return false;\n }\n supportsSymlinks() {\n return false;\n }\n supportsProps() {\n return true;\n }\n supportsSynch() {\n return false;\n }\n /**\n * Delete all contents stored in the file system.\n */\n empty() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._cache) {\n this._cache.removeAll();\n }\n yield this.store.clear();\n // INVARIANT: Root always exists.\n yield this.makeRootDirectory();\n });\n }\n access(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readonly');\n const inode = yield this.findINode(tx, p);\n if (!inode) {\n throw ApiError.ENOENT(p);\n }\n if (!inode.toStats().hasAccess(mode, cred)) {\n throw ApiError.EACCES(p);\n }\n });\n }\n /**\n * @todo Make rename compatible with the cache.\n */\n rename(oldPath, newPath, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const c = this._cache;\n if (this._cache) {\n // Clear and disable cache during renaming process.\n this._cache = null;\n c.removeAll();\n }\n try {\n const tx = this.store.beginTransaction('readwrite'), oldParent = path.dirname(oldPath), oldName = path.basename(oldPath), newParent = path.dirname(newPath), newName = path.basename(newPath), \n // Remove oldPath from parent's directory listing.\n oldDirNode = yield this.findINode(tx, oldParent), oldDirList = yield this.getDirListing(tx, oldParent, oldDirNode);\n if (!oldDirNode.toStats().hasAccess(W_OK, cred)) {\n throw ApiError.EACCES(oldPath);\n }\n if (!oldDirList[oldName]) {\n throw ApiError.ENOENT(oldPath);\n }\n const nodeId = oldDirList[oldName];\n delete oldDirList[oldName];\n // Invariant: Can't move a folder inside itself.\n // This funny little hack ensures that the check passes only if oldPath\n // is a subpath of newParent. We append '/' to avoid matching folders that\n // are a substring of the bottom-most folder in the path.\n if ((newParent + '/').indexOf(oldPath + '/') === 0) {\n throw new ApiError(ErrorCode.EBUSY, oldParent);\n }\n // Add newPath to parent's directory listing.\n let newDirNode, newDirList;\n if (newParent === oldParent) {\n // Prevent us from re-grabbing the same directory listing, which still\n // contains oldName.\n newDirNode = oldDirNode;\n newDirList = oldDirList;\n }\n else {\n newDirNode = yield this.findINode(tx, newParent);\n newDirList = yield this.getDirListing(tx, newParent, newDirNode);\n }\n if (newDirList[newName]) {\n // If it's a file, delete it.\n const newNameNode = yield this.getINode(tx, newPath, newDirList[newName]);\n if (newNameNode.isFile()) {\n try {\n yield tx.del(newNameNode.id);\n yield tx.del(newDirList[newName]);\n }\n catch (e) {\n yield tx.abort();\n throw e;\n }\n }\n else {\n // If it's a directory, throw a permissions error.\n throw ApiError.EPERM(newPath);\n }\n }\n newDirList[newName] = nodeId;\n // Commit the two changed directory listings.\n try {\n yield tx.put(oldDirNode.id, Buffer.from(JSON.stringify(oldDirList)), true);\n yield tx.put(newDirNode.id, Buffer.from(JSON.stringify(newDirList)), true);\n }\n catch (e) {\n yield tx.abort();\n throw e;\n }\n yield tx.commit();\n }\n finally {\n if (c) {\n this._cache = c;\n }\n }\n });\n }\n stat(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readonly');\n const inode = yield this.findINode(tx, p);\n const stats = inode.toStats();\n if (!stats.hasAccess(R_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n return stats;\n });\n }\n createFile(p, flag, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readwrite'), data = Buffer.alloc(0), newFile = yield this.commitNewFile(tx, p, FileType.FILE, mode, cred, data);\n // Open the file.\n return new AsyncKeyValueFile(this, p, flag, newFile.toStats(), data);\n });\n }\n openFile(p, flag, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readonly'), node = yield this.findINode(tx, p), data = yield tx.get(node.id);\n if (!node.toStats().hasAccess(flag.getMode(), cred)) {\n throw ApiError.EACCES(p);\n }\n if (data === undefined) {\n throw ApiError.ENOENT(p);\n }\n return new AsyncKeyValueFile(this, p, flag, node.toStats(), data);\n });\n }\n unlink(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.removeEntry(p, false, cred);\n });\n }\n rmdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n // Check first if directory is empty.\n const list = yield this.readdir(p, cred);\n if (list.length > 0) {\n throw ApiError.ENOTEMPTY(p);\n }\n yield this.removeEntry(p, true, cred);\n });\n }\n mkdir(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readwrite'), data = Buffer.from('{}');\n yield this.commitNewFile(tx, p, FileType.DIRECTORY, mode, cred, data);\n });\n }\n readdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readonly');\n const node = yield this.findINode(tx, p);\n if (!node.toStats().hasAccess(R_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n return Object.keys(yield this.getDirListing(tx, p, node));\n });\n }\n chmod(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const fd = yield this.openFile(p, FileFlag.getFileFlag('r+'), cred);\n yield fd.chmod(mode);\n });\n }\n chown(p, new_uid, new_gid, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const fd = yield this.openFile(p, FileFlag.getFileFlag('r+'), cred);\n yield fd.chown(new_uid, new_gid);\n });\n }\n _sync(p, data, stats) {\n return __awaiter(this, void 0, void 0, function* () {\n // @todo Ensure mtime updates properly, and use that to determine if a data\n // update is required.\n const tx = this.store.beginTransaction('readwrite'), \n // We use the _findInode helper because we actually need the INode id.\n fileInodeId = yield this._findINode(tx, path.dirname(p), path.basename(p)), fileInode = yield this.getINode(tx, p, fileInodeId), inodeChanged = fileInode.update(stats);\n try {\n // Sync data.\n yield tx.put(fileInode.id, data, true);\n // Sync metadata.\n if (inodeChanged) {\n yield tx.put(fileInodeId, fileInode.toBuffer(), true);\n }\n }\n catch (e) {\n yield tx.abort();\n throw e;\n }\n yield tx.commit();\n });\n }\n /**\n * Checks if the root directory exists. Creates it if it doesn't.\n */\n makeRootDirectory() {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readwrite');\n if ((yield tx.get(ROOT_NODE_ID)) === undefined) {\n // Create new inode.\n const currTime = new Date().getTime(), \n // Mode 0666, owned by root:root\n dirInode = new Inode(randomUUID(), 4096, 511 | FileType.DIRECTORY, currTime, currTime, currTime, 0, 0);\n // If the root doesn't exist, the first random ID shouldn't exist,\n // either.\n yield tx.put(dirInode.id, getEmptyDirNode(), false);\n yield tx.put(ROOT_NODE_ID, dirInode.toBuffer(), false);\n yield tx.commit();\n }\n });\n }\n /**\n * Helper function for findINode.\n * @param parent The parent directory of the file we are attempting to find.\n * @param filename The filename of the inode we are attempting to find, minus\n * the parent.\n */\n _findINode(tx, parent, filename, visited = new Set()) {\n return __awaiter(this, void 0, void 0, function* () {\n const currentPath = path.posix.join(parent, filename);\n if (visited.has(currentPath)) {\n throw new ApiError(ErrorCode.EIO, 'Infinite loop detected while finding inode', currentPath);\n }\n visited.add(currentPath);\n if (this._cache) {\n const id = this._cache.get(currentPath);\n if (id) {\n return id;\n }\n }\n if (parent === '/') {\n if (filename === '') {\n // BASE CASE #1: Return the root's ID.\n if (this._cache) {\n this._cache.set(currentPath, ROOT_NODE_ID);\n }\n return ROOT_NODE_ID;\n }\n else {\n // BASE CASE #2: Find the item in the root node.\n const inode = yield this.getINode(tx, parent, ROOT_NODE_ID);\n const dirList = yield this.getDirListing(tx, parent, inode);\n if (dirList[filename]) {\n const id = dirList[filename];\n if (this._cache) {\n this._cache.set(currentPath, id);\n }\n return id;\n }\n else {\n throw ApiError.ENOENT(path.resolve(parent, filename));\n }\n }\n }\n else {\n // Get the parent directory's INode, and find the file in its directory\n // listing.\n const inode = yield this.findINode(tx, parent, visited);\n const dirList = yield this.getDirListing(tx, parent, inode);\n if (dirList[filename]) {\n const id = dirList[filename];\n if (this._cache) {\n this._cache.set(currentPath, id);\n }\n return id;\n }\n else {\n throw ApiError.ENOENT(path.resolve(parent, filename));\n }\n }\n });\n }\n /**\n * Finds the Inode of the given path.\n * @param p The path to look up.\n * @todo memoize/cache\n */\n findINode(tx, p, visited = new Set()) {\n return __awaiter(this, void 0, void 0, function* () {\n const id = yield this._findINode(tx, path.dirname(p), path.basename(p), visited);\n return this.getINode(tx, p, id);\n });\n }\n /**\n * Given the ID of a node, retrieves the corresponding Inode.\n * @param tx The transaction to use.\n * @param p The corresponding path to the file (used for error messages).\n * @param id The ID to look up.\n */\n getINode(tx, p, id) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = yield tx.get(id);\n if (!data) {\n throw ApiError.ENOENT(p);\n }\n return Inode.fromBuffer(data);\n });\n }\n /**\n * Given the Inode of a directory, retrieves the corresponding directory\n * listing.\n */\n getDirListing(tx, p, inode) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!inode.isDirectory()) {\n throw ApiError.ENOTDIR(p);\n }\n const data = yield tx.get(inode.id);\n try {\n return JSON.parse(data.toString());\n }\n catch (e) {\n // Occurs when data is undefined, or corresponds to something other\n // than a directory listing. The latter should never occur unless\n // the file system is corrupted.\n throw ApiError.ENOENT(p);\n }\n });\n }\n /**\n * Adds a new node under a random ID. Retries 5 times before giving up in\n * the exceedingly unlikely chance that we try to reuse a random GUID.\n */\n addNewNode(tx, data) {\n return __awaiter(this, void 0, void 0, function* () {\n let retries = 0;\n const reroll = () => __awaiter(this, void 0, void 0, function* () {\n if (++retries === 5) {\n // Max retries hit. Return with an error.\n throw new ApiError(ErrorCode.EIO, 'Unable to commit data to key-value store.');\n }\n else {\n // Try again.\n const currId = randomUUID();\n const committed = yield tx.put(currId, data, false);\n if (!committed) {\n return reroll();\n }\n else {\n return currId;\n }\n }\n });\n return reroll();\n });\n }\n /**\n * Commits a new file (well, a FILE or a DIRECTORY) to the file system with\n * the given mode.\n * Note: This will commit the transaction.\n * @param p The path to the new file.\n * @param type The type of the new file.\n * @param mode The mode to create the new file with.\n * @param cred The UID/GID to create the file with\n * @param data The data to store at the file's data node.\n */\n commitNewFile(tx, p, type, mode, cred, data) {\n return __awaiter(this, void 0, void 0, function* () {\n const parentDir = path.dirname(p), fname = path.basename(p), parentNode = yield this.findINode(tx, parentDir), dirListing = yield this.getDirListing(tx, parentDir, parentNode), currTime = new Date().getTime();\n //Check that the creater has correct access\n if (!parentNode.toStats().hasAccess(W_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n // Invariant: The root always exists.\n // If we don't check this prior to taking steps below, we will create a\n // file with name '' in root should p == '/'.\n if (p === '/') {\n throw ApiError.EEXIST(p);\n }\n // Check if file already exists.\n if (dirListing[fname]) {\n yield tx.abort();\n throw ApiError.EEXIST(p);\n }\n try {\n // Commit data.\n const dataId = yield this.addNewNode(tx, data);\n const fileNode = new Inode(dataId, data.length, mode | type, currTime, currTime, currTime, cred.uid, cred.gid);\n // Commit file node.\n const fileNodeId = yield this.addNewNode(tx, fileNode.toBuffer());\n // Update and commit parent directory listing.\n dirListing[fname] = fileNodeId;\n yield tx.put(parentNode.id, Buffer.from(JSON.stringify(dirListing)), true);\n yield tx.commit();\n return fileNode;\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n });\n }\n /**\n * Remove all traces of the given path from the file system.\n * @param p The path to remove from the file system.\n * @param isDir Does the path belong to a directory, or a file?\n * @todo Update mtime.\n */\n /**\n * Remove all traces of the given path from the file system.\n * @param p The path to remove from the file system.\n * @param isDir Does the path belong to a directory, or a file?\n * @todo Update mtime.\n */\n removeEntry(p, isDir, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._cache) {\n this._cache.remove(p);\n }\n const tx = this.store.beginTransaction('readwrite'), parent = path.dirname(p), parentNode = yield this.findINode(tx, parent), parentListing = yield this.getDirListing(tx, parent, parentNode), fileName = path.basename(p);\n if (!parentListing[fileName]) {\n throw ApiError.ENOENT(p);\n }\n const fileNodeId = parentListing[fileName];\n // Get file inode.\n const fileNode = yield this.getINode(tx, p, fileNodeId);\n if (!fileNode.toStats().hasAccess(W_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n // Remove from directory listing of parent.\n delete parentListing[fileName];\n if (!isDir && fileNode.isDirectory()) {\n throw ApiError.EISDIR(p);\n }\n else if (isDir && !fileNode.isDirectory()) {\n throw ApiError.ENOTDIR(p);\n }\n try {\n // Delete data.\n yield tx.del(fileNode.id);\n // Delete node.\n yield tx.del(fileNodeId);\n // Update directory listing.\n yield tx.put(parentNode.id, Buffer.from(JSON.stringify(parentListing)), true);\n }\n catch (e) {\n yield tx.abort();\n throw e;\n }\n // Success.\n yield tx.commit();\n });\n }\n}\n", "import { AsyncKeyValueROTransaction, AsyncKeyValueRWTransaction, AsyncKeyValueStore, AsyncKeyValueFileSystem } from '@zenfs/core/backends/AsyncStore.js';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\nimport { Buffer } from 'buffer';\nimport { CreateBackend, type BackendOptions } from '@zenfs/core/backends/backend.js';\n\n/**\n * Get the indexedDB constructor for the current browser.\n * @hidden\n */\nconst indexedDB: IDBFactory = (() => {\n\ttry {\n\t\treturn globalThis.indexedDB || (<any>globalThis).mozIndexedDB || (<any>globalThis).webkitIndexedDB || globalThis.msIndexedDB;\n\t} catch {\n\t\treturn null;\n\t}\n})();\n\n/**\n * Converts a DOMException or a DOMError from an IndexedDB event into a\n * standardized ZenFS API error.\n * @hidden\n */\nfunction convertError(e: { name: string }, message: string = e.toString()): ApiError {\n\tswitch (e.name) {\n\t\tcase 'NotFoundError':\n\t\t\treturn new ApiError(ErrorCode.ENOENT, message);\n\t\tcase 'QuotaExceededError':\n\t\t\treturn new ApiError(ErrorCode.ENOSPC, message);\n\t\tdefault:\n\t\t\t// The rest do not seem to map cleanly to standard error codes.\n\t\t\treturn new ApiError(ErrorCode.EIO, message);\n\t}\n}\n\n/**\n * Produces a new onerror handler for IDB. Our errors are always fatal, so we\n * handle them generically: Call the user-supplied callback with a translated\n * version of the error, and let the error bubble up.\n * @hidden\n */\nfunction onErrorHandler(cb: (e: ApiError) => void, code: ErrorCode = ErrorCode.EIO, message: string | null = null): (e?: any) => void {\n\treturn function (e?: any): void {\n\t\t// Prevent the error from canceling the transaction.\n\t\te.preventDefault();\n\t\tcb(new ApiError(code, message !== null ? message : undefined));\n\t};\n}\n\n/**\n * @hidden\n */\nexport class IndexedDBROTransaction implements AsyncKeyValueROTransaction {\n\tconstructor(public tx: IDBTransaction, public store: IDBObjectStore) {}\n\n\tpublic get(key: string): Promise<Buffer> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst r: IDBRequest = this.store.get(key);\n\t\t\t\tr.onerror = onErrorHandler(reject);\n\t\t\t\tr.onsuccess = event => {\n\t\t\t\t\t// IDB returns the value 'undefined' when you try to get keys that\n\t\t\t\t\t// don't exist. The caller expects this behavior.\n\t\t\t\t\tconst result = (<any>event.target).result;\n\t\t\t\t\tif (result === undefined) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// IDB data is stored as an ArrayBuffer\n\t\t\t\t\t\tresolve(Buffer.from(result));\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\treject(convertError(e));\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @hidden\n */\nexport class IndexedDBRWTransaction extends IndexedDBROTransaction implements AsyncKeyValueRWTransaction, AsyncKeyValueROTransaction {\n\tconstructor(tx: IDBTransaction, store: IDBObjectStore) {\n\t\tsuper(tx, store);\n\t}\n\n\t/**\n\t * @todo return false when add has a key conflict (no error)\n\t */\n\tpublic put(key: string, data: Buffer, overwrite: boolean): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst r: IDBRequest = overwrite ? this.store.put(data, key) : this.store.add(data, key);\n\t\t\t\tr.onerror = onErrorHandler(reject);\n\t\t\t\tr.onsuccess = () => {\n\t\t\t\t\tresolve(true);\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\treject(convertError(e));\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic del(key: string): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst r: IDBRequest = this.store.delete(key);\n\t\t\t\tr.onerror = onErrorHandler(reject);\n\t\t\t\tr.onsuccess = () => {\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\treject(convertError(e));\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic commit(): Promise<void> {\n\t\treturn new Promise(resolve => {\n\t\t\t// Return to the event loop to commit the transaction.\n\t\t\tsetTimeout(resolve, 0);\n\t\t});\n\t}\n\n\tpublic abort(): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tthis.tx.abort();\n\t\t\t\tresolve();\n\t\t\t} catch (e) {\n\t\t\t\treject(convertError(e));\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport class IndexedDBStore implements AsyncKeyValueStore {\n\tpublic static Create(storeName: string, indexedDB: IDBFactory): Promise<IndexedDBStore> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst openReq: IDBOpenDBRequest = indexedDB.open(storeName, 1);\n\n\t\t\topenReq.onupgradeneeded = event => {\n\t\t\t\tconst db: IDBDatabase = (<IDBOpenDBRequest>event.target).result;\n\t\t\t\t// Huh. This should never happen; we're at version 1. Why does another\n\t\t\t\t// database exist?\n\t\t\t\tif (db.objectStoreNames.contains(storeName)) {\n\t\t\t\t\tdb.deleteObjectStore(storeName);\n\t\t\t\t}\n\t\t\t\tdb.createObjectStore(storeName);\n\t\t\t};\n\n\t\t\topenReq.onsuccess = event => {\n\t\t\t\tresolve(new IndexedDBStore((<IDBOpenDBRequest>event.target).result, storeName));\n\t\t\t};\n\n\t\t\topenReq.onerror = onErrorHandler(reject, ErrorCode.EACCES);\n\t\t});\n\t}\n\n\tconstructor(private db: IDBDatabase, private storeName: string) {}\n\n\tpublic name(): string {\n\t\treturn IndexedDBFileSystem.Name + ' - ' + this.storeName;\n\t}\n\n\tpublic clear(): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst tx = this.db.transaction(this.storeName, 'readwrite'),\n\t\t\t\t\tobjectStore = tx.objectStore(this.storeName),\n\t\t\t\t\tr: IDBRequest = objectStore.clear();\n\t\t\t\tr.onsuccess = () => {\n\t\t\t\t\t// Use setTimeout to commit transaction.\n\t\t\t\t\tsetTimeout(resolve, 0);\n\t\t\t\t};\n\t\t\t\tr.onerror = onErrorHandler(reject);\n\t\t\t} catch (e) {\n\t\t\t\treject(convertError(e));\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic beginTransaction(type: 'readonly'): AsyncKeyValueROTransaction;\n\tpublic beginTransaction(type: 'readwrite'): AsyncKeyValueRWTransaction;\n\tpublic beginTransaction(type: 'readonly' | 'readwrite' = 'readonly'): AsyncKeyValueROTransaction {\n\t\tconst tx = this.db.transaction(this.storeName, type),\n\t\t\tobjectStore = tx.objectStore(this.storeName);\n\t\tif (type === 'readwrite') {\n\t\t\treturn new IndexedDBRWTransaction(tx, objectStore);\n\t\t} else if (type === 'readonly') {\n\t\t\treturn new IndexedDBROTransaction(tx, objectStore);\n\t\t} else {\n\t\t\tthrow new ApiError(ErrorCode.EINVAL, 'Invalid transaction type.');\n\t\t}\n\t}\n}\n\nexport namespace IndexedDBFileSystem {\n\t/**\n\t * Configuration options for the IndexedDB file system.\n\t */\n\texport interface Options {\n\t\t/**\n\t\t * The name of this file system. You can have multiple IndexedDB file systems operating at once, but each must have a different name.\n\t\t */\n\t\tstoreName?: string;\n\n\t\t/**\n\t\t * The size of the inode cache. Defaults to 100. A size of 0 or below disables caching.\n\t\t */\n\t\tcacheSize?: number;\n\n\t\t/**\n\t\t * The IDBFactory to use. Defaults to `globalThis.indexedDB`.\n\t\t */\n\t\tidbFactory?: IDBFactory;\n\t}\n}\n\n/**\n * A file system that uses the IndexedDB key value file system.\n */\nexport class IndexedDBFileSystem extends AsyncKeyValueFileSystem {\n\tpublic static readonly Name = 'IndexedDB';\n\n\tpublic static Create = CreateBackend.bind(this);\n\n\tpublic static readonly Options: BackendOptions = {\n\t\tstoreName: {\n\t\t\ttype: 'string',\n\t\t\toptional: true,\n\t\t\tdescription: 'The name of this file system. You can have multiple IndexedDB file systems operating at once, but each must have a different name.',\n\t\t},\n\t\tcacheSize: {\n\t\t\ttype: 'number',\n\t\t\toptional: true,\n\t\t\tdescription: 'The size of the inode cache. Defaults to 100. A size of 0 or below disables caching.',\n\t\t},\n\t\tidbFactory: {\n\t\t\ttype: 'object',\n\t\t\toptional: true,\n\t\t\tdescription: 'The IDBFactory to use. Defaults to globalThis.indexedDB.',\n\t\t},\n\t};\n\n\tpublic static isAvailable(idbFactory: IDBFactory = globalThis.indexedDB): boolean {\n\t\ttry {\n\t\t\tif (!(idbFactory instanceof IDBFactory)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst req = indexedDB.open('__zenfs_test__');\n\t\t\tif (!req) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tconstructor({ cacheSize = 100, storeName = 'zenfs', idbFactory = globalThis.indexedDB }: IndexedDBFileSystem.Options) {\n\t\tsuper(cacheSize);\n\t\tthis._ready = IndexedDBStore.Create(storeName, idbFactory).then(store => {\n\t\t\tthis.init(store);\n\t\t\treturn this;\n\t\t});\n\t}\n}\n", "import { SyncKeyValueStore, SimpleSyncStore, SyncKeyValueFileSystem, SimpleSyncRWTransaction, SyncKeyValueRWTransaction } from '@zenfs/core/backends/SyncStore.js';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\nimport { CreateBackend, type BackendOptions } from '@zenfs/core/backends/backend.js';\nimport { Buffer } from 'buffer';\n\n/**\n * A synchronous key-value store backed by Storage.\n */\nexport class StorageStore implements SyncKeyValueStore, SimpleSyncStore {\n\tpublic name(): string {\n\t\treturn StorageFileSystem.Name;\n\t}\n\n\tconstructor(protected _storage) {}\n\n\tpublic clear(): void {\n\t\tthis._storage.clear();\n\t}\n\n\tpublic beginTransaction(type: string): SyncKeyValueRWTransaction {\n\t\t// No need to differentiate.\n\t\treturn new SimpleSyncRWTransaction(this);\n\t}\n\n\tpublic get(key: string): Buffer | undefined {\n\t\tconst data = this._storage.getItem(key);\n\t\tif (typeof data != 'string') {\n\t\t\treturn;\n\t\t}\n\n\t\treturn Buffer.from(data);\n\t}\n\n\tpublic put(key: string, data: Buffer, overwrite: boolean): boolean {\n\t\ttry {\n\t\t\tif (!overwrite && this._storage.getItem(key) !== null) {\n\t\t\t\t// Don't want to overwrite the key!\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._storage.setItem(key, data.toString());\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\tthrow new ApiError(ErrorCode.ENOSPC, 'Storage is full.');\n\t\t}\n\t}\n\n\tpublic del(key: string): void {\n\t\ttry {\n\t\t\tthis._storage.removeItem(key);\n\t\t} catch (e) {\n\t\t\tthrow new ApiError(ErrorCode.EIO, 'Unable to delete key ' + key + ': ' + e);\n\t\t}\n\t}\n}\n\nexport namespace StorageFileSystem {\n\t/**\n\t * Options to pass to the StorageFileSystem\n\t */\n\texport interface Options {\n\t\t/**\n\t\t * The Storage to use. Defaults to globalThis.localStorage.\n\t\t */\n\t\tstorage: Storage;\n\t}\n}\n\n/**\n * A synchronous file system backed by a `Storage` (e.g. localStorage).\n */\nexport class StorageFileSystem extends SyncKeyValueFileSystem {\n\tpublic static readonly Name = 'Storage';\n\n\tpublic static Create = CreateBackend.bind(this);\n\n\tpublic static readonly Options: BackendOptions = {\n\t\tstorage: {\n\t\t\ttype: 'object',\n\t\t\toptional: true,\n\t\t\tdescription: 'The Storage to use. Defaults to globalThis.localStorage.',\n\t\t},\n\t};\n\n\tpublic static isAvailable(storage: Storage = globalThis.localStorage): boolean {\n\t\treturn storage instanceof Storage;\n\t}\n\t/**\n\t * Creates a new Storage file system using the contents of `Storage`.\n\t */\n\tconstructor({ storage = globalThis.localStorage }: StorageFileSystem.Options) {\n\t\tsuper({ store: new StorageStore(storage) });\n\t}\n}\n", "import { type FileSystem, BaseFileSystem, FileContents, FileSystemMetadata } from '@zenfs/core/filesystem.js';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\nimport { File, FileFlag } from '@zenfs/core/file.js';\nimport { Stats } from '@zenfs/core/stats.js';\nimport { Cred } from '@zenfs/core/cred.js';\nimport { CreateBackend, type BackendOptions } from '@zenfs/core/backends/backend.js';\n\n/**\n * @hidden\n */\ndeclare const importScripts: (...path: string[]) => unknown;\n\n/**\n * An RPC message\n */\ninterface RPCMessage {\n\tisBFS: true;\n\tid: number;\n}\n\ntype _FSAsyncMethods = {\n\t[Method in keyof FileSystem]: Extract<FileSystem[Method], (...args: unknown[]) => Promise<unknown>>;\n};\n\ntype _RPCFSRequests = {\n\t[Method in keyof _FSAsyncMethods]: { method: Method; args: Parameters<_FSAsyncMethods[Method]> };\n};\n\ntype _RPCFSResponses = {\n\t[Method in keyof _FSAsyncMethods]: { method: Method; value: Awaited<ReturnType<_FSAsyncMethods[Method]>> };\n};\n\n/**\n * @see https://stackoverflow.com/a/60920767/17637456\n */\ntype RPCRequest = RPCMessage & (_RPCFSRequests[keyof _FSAsyncMethods] | { method: 'metadata'; args: [] } | { method: 'syncClose'; args: [string, File] });\n\ntype RPCResponse = RPCMessage & (_RPCFSResponses[keyof _FSAsyncMethods] | { method: 'metadata'; value: FileSystemMetadata } | { method: 'syncClose'; value: null });\n\nfunction isRPCMessage(arg: unknown): arg is RPCMessage {\n\treturn typeof arg == 'object' && 'isBFS' in arg && !!arg.isBFS;\n}\n\ntype _executor = Parameters<ConstructorParameters<typeof Promise>[0]>;\ninterface WorkerRequest {\n\tresolve: _executor[0];\n\treject: _executor[1];\n}\n\nexport namespace WorkerFS {\n\texport interface Options {\n\t\t/**\n\t\t * The target worker that you want to connect to, or the current worker if in a worker context.\n\t\t */\n\t\tworker: Worker;\n\t}\n}\n\ntype _RPCExtractReturnValue<T extends RPCResponse['method']> = Promise<Extract<RPCResponse, { method: T }>['value']>;\n\n/**\n * WorkerFS lets you access a ZenFS instance that is running in a different\n * JavaScript context (e.g. access ZenFS in one of your WebWorkers, or\n * access ZenFS running on the main page from a WebWorker).\n *\n * For example, to have a WebWorker access files in the main browser thread,\n * do the following:\n *\n * MAIN BROWSER THREAD:\n *\n * ```javascript\n * // Listen for remote file system requests.\n * ZenFS.Backend.WorkerFS.attachRemoteListener(webWorkerObject);\n * ```\n *\n * WEBWORKER THREAD:\n *\n * ```javascript\n * // Set the remote file system as the root file system.\n * ZenFS.configure({ fs: \"WorkerFS\", options: { worker: self }}, function(e) {\n * // Ready!\n * });\n * ```\n *\n * Note that synchronous operations are not permitted on the WorkerFS, regardless\n * of the configuration option of the remote FS.\n */\nexport class WorkerFS extends BaseFileSystem {\n\tpublic static readonly Name = 'WorkerFS';\n\n\tpublic static Create = CreateBackend.bind(this);\n\n\tpublic static readonly Options: BackendOptions = {\n\t\tworker: {\n\t\t\ttype: 'object',\n\t\t\tdescription: 'The target worker that you want to connect to, or the current worker if in a worker context.',\n\t\t\tvalidator: async (v: Worker): Promise<void> => {\n\t\t\t\t// Check for a `postMessage` function.\n\t\t\t\tif (typeof v?.postMessage != 'function') {\n\t\t\t\t\tthrow new ApiError(ErrorCode.EINVAL, `option must be a Web Worker instance.`);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n\n\tpublic static isAvailable(): boolean {\n\t\treturn typeof importScripts !== 'undefined' || typeof Worker !== 'undefined';\n\t}\n\n\tprivate _worker: Worker;\n\tprivate _currentID: number = 0;\n\tprivate _requests: Map<number, WorkerRequest> = new Map();\n\n\tprivate _isInitialized: boolean = false;\n\tprivate _metadata: FileSystemMetadata;\n\n\t/**\n\t * Constructs a new WorkerFS instance that connects with ZenFS running on\n\t * the specified worker.\n\t */\n\tpublic constructor({ worker }: WorkerFS.Options) {\n\t\tsuper();\n\t\tthis._worker = worker;\n\t\tthis._worker.onmessage = (event: MessageEvent) => {\n\t\t\tif (!isRPCMessage(event.data)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { id, method, value } = event.data as RPCResponse;\n\n\t\t\tif (method === 'metadata') {\n\t\t\t\tthis._metadata = value;\n\t\t\t\tthis._isInitialized = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { resolve, reject } = this._requests.get(id);\n\t\t\tthis._requests.delete(id);\n\t\t\tif (value instanceof Error || value instanceof ApiError) {\n\t\t\t\treject(value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(value);\n\t\t};\n\t}\n\n\tpublic get metadata(): FileSystemMetadata {\n\t\treturn {\n\t\t\t...super.metadata,\n\t\t\t...this._metadata,\n\t\t\tname: WorkerFS.Name,\n\t\t\tsynchronous: false,\n\t\t};\n\t}\n\n\tprivate async _rpc<T extends RPCRequest['method']>(method: T, ...args: Extract<RPCRequest, { method: T }>['args']): _RPCExtractReturnValue<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst id = this._currentID++;\n\t\t\tthis._requests.set(id, { resolve, reject });\n\t\t\tthis._worker.postMessage({\n\t\t\t\tisBFS: true,\n\t\t\t\tid,\n\t\t\t\tmethod,\n\t\t\t\targs,\n\t\t\t} as RPCRequest);\n\t\t});\n\t}\n\n\tpublic rename(oldPath: string, newPath: string, cred: Cred): Promise<void> {\n\t\treturn this._rpc('rename', oldPath, newPath, cred);\n\t}\n\tpublic stat(p: string, cred: Cred): Promise<Stats> {\n\t\treturn this._rpc('stat', p, cred);\n\t}\n\tpublic open(p: string, flag: FileFlag, mode: number, cred: Cred): Promise<File> {\n\t\treturn this._rpc('open', p, flag, mode, cred);\n\t}\n\tpublic unlink(p: string, cred: Cred): Promise<void> {\n\t\treturn this._rpc('unlink', p, cred);\n\t}\n\tpublic rmdir(p: string, cred: Cred): Promise<void> {\n\t\treturn this._rpc('rmdir', p, cred);\n\t}\n\tpublic mkdir(p: string, mode: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('mkdir', p, mode, cred);\n\t}\n\tpublic readdir(p: string, cred: Cred): Promise<string[]> {\n\t\treturn this._rpc('readdir', p, cred);\n\t}\n\tpublic exists(p: string, cred: Cred): Promise<boolean> {\n\t\treturn this._rpc('exists', p, cred);\n\t}\n\tpublic realpath(p: string, cred: Cred): Promise<string> {\n\t\treturn this._rpc('realpath', p, cred);\n\t}\n\tpublic truncate(p: string, len: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('truncate', p, len, cred);\n\t}\n\tpublic readFile(fname: string, encoding: BufferEncoding, flag: FileFlag, cred: Cred): Promise<FileContents> {\n\t\treturn this._rpc('readFile', fname, encoding, flag, cred);\n\t}\n\tpublic writeFile(fname: string, data: FileContents, encoding: BufferEncoding, flag: FileFlag, mode: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('writeFile', fname, data, encoding, flag, mode, cred);\n\t}\n\tpublic appendFile(fname: string, data: FileContents, encoding: BufferEncoding, flag: FileFlag, mode: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('appendFile', fname, data, encoding, flag, mode, cred);\n\t}\n\tpublic chmod(p: string, mode: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('chmod', p, mode, cred);\n\t}\n\tpublic chown(p: string, new_uid: number, new_gid: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('chown', p, new_uid, new_gid, cred);\n\t}\n\tpublic utimes(p: string, atime: Date, mtime: Date, cred: Cred): Promise<void> {\n\t\treturn this._rpc('utimes', p, atime, mtime, cred);\n\t}\n\tpublic link(srcpath: string, dstpath: string, cred: Cred): Promise<void> {\n\t\treturn this._rpc('link', srcpath, dstpath, cred);\n\t}\n\tpublic symlink(srcpath: string, dstpath: string, type: string, cred: Cred): Promise<void> {\n\t\treturn this._rpc('symlink', srcpath, dstpath, type, cred);\n\t}\n\tpublic readlink(p: string, cred: Cred): Promise<string> {\n\t\treturn this._rpc('readlink', p, cred);\n\t}\n\n\tpublic syncClose(method: string, fd: File): Promise<void> {\n\t\treturn this._rpc('syncClose', method, fd);\n\t}\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["src_exports", "__export", "FileSystemAccessFile", "FileSystemAccessFileSystem", "HTTPRequest", "IndexedDBFileSystem", "IndexedDBROTransaction", "IndexedDBRWTransaction", "IndexedDBStore", "StorageFileSystem", "StorageStore", "WorkerFS", "exports$3", "_dewExec$2", "dew$2", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "__name", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "exports$2", "_dewExec$1", "dew$1", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "d", "s", "value", "c", "rt", "exports$1", "_dewExec", "dew", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "actual", "fromArrayLike", "array", "arrayView", "copy", "byteOffset", "obj", "numberIsNaN", "a", "x", "y", "list", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "defineBigIntMethod", "validateNumber", "first", "last", "boundsError", "lo", "__pow", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "exports", "INSPECT_MAX_BYTES", "kMaxLength", "exports", "_dewExec", "_global", "dew", "process", "cachedSetTimeout", "cachedClearTimeout", "defaultSetTimout", "__name", "defaultClearTimeout", "e", "runTimeout", "fun", "runClearTimeout", "marker", "queue", "draining", "currentQueue", "queueIndex", "cleanUpNextTick", "drainQueue", "timeout", "len", "args", "i", "Item", "array", "noop", "name", "dir", "exports$1", "_dewExec", "dew", "process$1", "process", "assertPath", "path", "__name", "normalizeStringPosix", "allowAboveRoot", "res", "lastSegmentLength", "lastSlash", "dots", "code", "i", "lastSlashIndex", "_format", "sep", "pathObject", "dir", "base", "posix", "resolvedPath", "resolvedAbsolute", "cwd", "isAbsolute", "trailingSeparator", "joined", "arg", "from", "to", "fromStart", "fromEnd", "fromLen", "toStart", "toEnd", "toLen", "length", "lastCommonSep", "fromCode", "toCode", "out", "hasRoot", "end", "matchedSlash", "ext", "start", "extIdx", "firstNonSlashEnd", "startDot", "startPart", "preDotState", "ret", "exports", "_makeLong", "exports", "basename", "delimiter", "dirname", "extname", "format", "isAbsolute", "join", "normalize", "parse", "posix", "relative", "resolve", "sep", "win32", "ErrorCode", "ErrorStrings", "ApiError", "json", "err", "buffer", "i", "code", "p", "path", "type", "message", "Buffer", "bytesWritten", "__name", "Cred", "uid", "gid", "suid", "sgid", "euid", "egid", "__name", "FileType", "Stats", "buffer", "size", "mode", "atime", "mtime", "ctime", "uid", "gid", "s", "itemType", "atimeMs", "mtimeMs", "ctimeMs", "birthtimeMs", "currentTime", "Buffer", "cred", "perms", "uMode", "gMode", "wMode", "uPerms", "gPerms", "wPerms", "Cred", "__name", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "__name", "reject", "fulfilled", "step", "e", "rejected", "result", "_a", "FileSystem", "options", "BaseFileSystem", "p", "flag", "cred", "ApiError", "ErrorCode", "mode", "stats", "ActionType", "fd", "parentStats", "dirname", "oldPath", "newPath", "splitPath", "sep", "i", "addPaths", "join", "len", "FileFlag", "fname", "encoding", "stat", "buf", "Buffer", "data", "new_uid", "new_gid", "atime", "mtime", "srcpath", "dstpath", "type", "SynchronousFileSystem", "flags", "Inode", "buffer", "id", "size", "mode", "atime", "mtime", "ctime", "uid", "gid", "Stats", "FileType", "buff", "Buffer", "stats", "hasChanged", "atimeMs", "mtimeMs", "ctimeMs", "__name", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "__name", "reject", "fulfilled", "step", "e", "rejected", "result", "copyingSlice", "buff", "start", "end", "Buffer", "__name", "_min", "d0", "d1", "d2", "bx", "ay", "__name", "levenshtein", "a", "b", "la", "lb", "offset", "vector", "y", "x", "d3", "bx0", "bx1", "bx2", "bx3", "dd", "dy", "checkOptions", "backend", "opts", "__awaiter", "optsInfo", "fsName", "pendingValidators", "callbackCalled", "loopEnded", "optName", "opt", "providedValue", "incorrectOptions", "o", "ApiError", "ErrorCode", "typeMatches", "e", "setImmediate", "cb", "ROOT_NODE_ID", "getEmptyDirNode", "Buffer", "__name", "randomUUID", "c", "r", "SimpleSyncRWTransaction", "store", "key", "val", "data", "overwrite", "value", "__name", "SyncKeyValueFile", "PreloadFile", "_fs", "_path", "_flag", "_stat", "contents", "SyncKeyValueFileSystem", "SynchronousFileSystem", "options", "p", "mode", "cred", "tx", "ApiError", "oldPath", "newPath", "oldParent", "dirname", "oldName", "basename", "newParent", "newName", "oldDirNode", "oldDirList", "nodeId", "ErrorCode", "newDirNode", "newDirList", "newNameNode", "e", "Buffer", "stats", "flag", "newFile", "FileType", "node", "FileFlag", "new_uid", "new_gid", "fileInodeId", "fileInode", "inodeChanged", "ROOT_NODE_ID", "currTime", "dirInode", "Inode", "randomUUID", "getEmptyDirNode", "parent", "filename", "visited", "currentPath", "posix", "readDirectory", "inode", "dirList", "resolve", "sep", "id", "currId", "type", "parentDir", "fname", "parentNode", "dirListing", "fileNode", "dataId", "fileNodeId", "isDir", "parentListing", "fileName", "CreateBackend", "options", "cb", "checkOptions", "fs", "err", "__name", "_a", "InMemoryStore", "InMemoryFileSystem", "type", "SimpleSyncRWTransaction", "key", "data", "overwrite", "__name", "SyncKeyValueFileSystem", "CreateBackend", "cred", "Cred", "mounts", "InMemoryFileSystem", "fs", "mount", "getMount", "mountPoint", "__name", "mount", "mountPoint", "fs", "posix", "mounts", "ApiError", "ErrorCode", "__name", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "__name", "reject", "fulfilled", "step", "e", "rejected", "result", "ActionType", "FileFlag", "flagStr", "ApiError", "ErrorCode", "mode", "BaseFile", "uid", "gid", "atime", "mtime", "PreloadFile", "_fs", "_path", "_flag", "_stat", "contents", "Buffer", "delta", "newPos", "Stats", "len", "getMount", "buf", "newBuff", "buffer", "offset", "length", "position", "endFp", "rv", "NoSyncFile", "handleError", "__name", "path", "error", "ApiError", "FileSystemAccessFile", "PreloadFile", "_fs", "_path", "_flag", "_stat", "contents", "__async", "Cred", "_FileSystemAccessFileSystem", "BaseFileSystem", "handle", "__spreadProps", "__spreadValues", "p", "data", "stats", "cred", "currentStats", "FileFlag", "oldPath", "newPath", "files", "file", "join", "oldFile", "destFolder", "dirname", "writable", "basename", "buffer", "err", "fname", "encoding", "flag", "mode", "createFile", "Buffer", "ErrorCode", "Stats", "FileType", "lastModified", "size", "e", "flags", "overwrite", "_keys", "iter", "__forAwait", "more", "temp", "key", "walkedPath", "pathParts", "getHandleParts", "_0", "pathPart", "remainingPathParts", "walkingPath", "continueWalk", "FileSystemAccessFileSystem", "CreateBackend", "fetchIsAvailable", "convertError", "e", "ApiError", "ErrorCode", "__name", "fetchFile", "p", "type", "__async", "response", "buf", "Buffer", "fetchFileSize", "FileIndex", "listing", "idx", "rootInode", "DirInode", "queue", "inode", "next", "pwd", "tree", "parent", "node", "children", "name", "FileInode", "Stats", "FileType", "cb", "path", "dir", "files", "file", "item", "isFileInode", "splitPath", "dirpath", "itemname", "isDirInode", "itemNameMark", "parentPath", "itemName", "child", "p", "dirname", "__name", "data", "_HTTPRequest", "BaseFileSystem", "index", "baseUrl", "indexRequest", "fetchFile", "data", "FileIndex", "fetchFileSize", "fetchIsAvailable", "__spreadProps", "__spreadValues", "file", "path", "buffer", "inode", "isFileInode", "ApiError", "stats", "cred", "__async", "isDirInode", "ErrorCode", "flags", "mode", "ActionType", "NoSyncFile", "Stats", "fname", "encoding", "flag", "fd", "fdBuff", "copyingSlice", "filePath", "p", "type", "HTTPRequest", "__name", "CreateBackend", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "__name", "reject", "fulfilled", "step", "e", "rejected", "result", "LRUNode", "key", "LRUCache", "limit", "node", "AsyncKeyValueFile", "PreloadFile", "_fs", "_path", "_flag", "_stat", "contents", "AsyncKeyValueFileSystem", "BaseFileSystem", "cacheSize", "store", "p", "mode", "cred", "tx", "inode", "ApiError", "oldPath", "newPath", "c", "oldParent", "dirname", "oldName", "basename", "newParent", "newName", "oldDirNode", "oldDirList", "nodeId", "ErrorCode", "newDirNode", "newDirList", "newNameNode", "Buffer", "stats", "flag", "data", "newFile", "FileType", "FileFlag", "new_uid", "new_gid", "fileInodeId", "fileInode", "inodeChanged", "ROOT_NODE_ID", "currTime", "dirInode", "Inode", "randomUUID", "getEmptyDirNode", "parent", "filename", "visited", "currentPath", "posix", "id", "dirList", "retries", "reroll", "currId", "type", "parentDir", "fname", "parentNode", "dirListing", "dataId", "fileNode", "fileNodeId", "isDir", "parentListing", "fileName", "indexedDB", "e", "convertError", "message", "ApiError", "ErrorCode", "__name", "onErrorHandler", "cb", "code", "IndexedDBROTransaction", "tx", "store", "key", "resolve", "reject", "r", "event", "result", "Buffer", "IndexedDBRWTransaction", "data", "overwrite", "IndexedDBStore", "db", "storeName", "openReq", "IndexedDBFileSystem", "objectStore", "type", "_IndexedDBFileSystem", "AsyncKeyValueFileSystem", "idbFactory", "cacheSize", "CreateBackend", "StorageStore", "_storage", "StorageFileSystem", "type", "SimpleSyncRWTransaction", "key", "data", "Buffer", "overwrite", "e", "ApiError", "ErrorCode", "__name", "_StorageFileSystem", "SyncKeyValueFileSystem", "storage", "CreateBackend", "isRPCMessage", "arg", "__name", "_WorkerFS", "BaseFileSystem", "worker", "event", "id", "method", "value", "resolve", "reject", "ApiError", "__spreadProps", "__spreadValues", "args", "__async", "oldPath", "newPath", "cred", "p", "flag", "mode", "len", "fname", "encoding", "data", "new_uid", "new_gid", "atime", "mtime", "srcpath", "dstpath", "type", "fd", "WorkerFS", "CreateBackend", "v", "ErrorCode"]
|
|
3
|
+
"sources": ["../src/index.ts", "../node_modules/@jspm/core/nodelibs/browser/buffer.js", "../node_modules/@zenfs/core/dist/emulation/path.js", "../node_modules/@zenfs/core/dist/ApiError.js", "../node_modules/@zenfs/core/dist/cred.js", "../node_modules/@zenfs/core/dist/stats.js", "../node_modules/@zenfs/core/dist/filesystem.js", "../node_modules/@zenfs/core/dist/inode.js", "../node_modules/@zenfs/core/dist/utils.js", "../node_modules/@zenfs/core/dist/backends/SyncStore.js", "../node_modules/@zenfs/core/dist/backends/backend.js", "../node_modules/@zenfs/core/dist/backends/InMemory.js", "../node_modules/@zenfs/core/dist/emulation/shared.js", "../node_modules/@zenfs/core/dist/file.js", "../src/backends/FileSystemAccess.ts", "../src/fetch.ts", "../node_modules/@zenfs/core/dist/FileIndex.js", "../src/backends/HTTPRequest.ts", "../node_modules/@zenfs/core/dist/backends/AsyncStore.js", "../src/backends/IndexedDB.ts", "../src/backends/Storage.ts", "../src/backends/Worker.ts"],
|
|
4
|
+
"sourcesContent": ["export * from './backends/FileSystemAccess.js';\nexport * from './backends/HTTPRequest.js';\nexport * from './backends/IndexedDB.js';\nexport * from './backends/Storage.js';\nexport * from './backends/Worker.js';\n", "var exports$3 = {},\n _dewExec$2 = false;\nfunction dew$2() {\n if (_dewExec$2) return exports$3;\n _dewExec$2 = true;\n exports$3.byteLength = byteLength;\n exports$3.toByteArray = toByteArray;\n exports$3.fromByteArray = fromByteArray;\n var lookup = [];\n var revLookup = [];\n var Arr = typeof Uint8Array !== \"undefined\" ? Uint8Array : Array;\n var code = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n } // Support decoding URL-safe base64 strings, as Node.js does.\n // See: https://en.wikipedia.org/wiki/Base64#URL_applications\n\n\n revLookup[\"-\".charCodeAt(0)] = 62;\n revLookup[\"_\".charCodeAt(0)] = 63;\n\n function getLens(b64) {\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 } // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n\n\n var validLen = b64.indexOf(\"=\");\n if (validLen === -1) validLen = len;\n var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n return [validLen, placeHoldersLen];\n } // base64 is 4/3 + up to two characters of the original data\n\n\n function byteLength(b64) {\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n }\n\n function _byteLength(b64, validLen, placeHoldersLen) {\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n }\n\n function toByteArray(b64) {\n var tmp;\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars\n\n var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n var i;\n\n for (i = 0; i < len; i += 4) {\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[curByte++] = tmp >> 16 & 255;\n arr[curByte++] = tmp >> 8 & 255;\n arr[curByte++] = tmp & 255;\n }\n\n if (placeHoldersLen === 2) {\n tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n arr[curByte++] = tmp & 255;\n }\n\n if (placeHoldersLen === 1) {\n tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n arr[curByte++] = tmp >> 8 & 255;\n arr[curByte++] = tmp & 255;\n }\n\n return arr;\n }\n\n function tripletToBase64(num) {\n return lookup[num >> 18 & 63] + lookup[num >> 12 & 63] + lookup[num >> 6 & 63] + lookup[num & 63];\n }\n\n function encodeChunk(uint8, start, end) {\n var tmp;\n var output = [];\n\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16 & 16711680) + (uint8[i + 1] << 8 & 65280) + (uint8[i + 2] & 255);\n output.push(tripletToBase64(tmp));\n }\n\n return output.join(\"\");\n }\n\n function fromByteArray(uint8) {\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n // go through the array every three bytes, we'll deal with trailing stuff later\n\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 } // pad the end with zeros, but make sure to not forget the extra bytes\n\n\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 63] + \"==\");\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 63] + lookup[tmp << 2 & 63] + \"=\");\n }\n\n return parts.join(\"\");\n }\n\n return exports$3;\n}\n\nvar exports$2 = {},\n _dewExec$1 = false;\nfunction dew$1() {\n if (_dewExec$1) return exports$2;\n _dewExec$1 = true;\n\n /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\n exports$2.read = function (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 i += d;\n e = s & (1 << -nBits) - 1;\n s >>= -nBits;\n nBits += eLen;\n\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\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\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n };\n\n exports$2.write = function (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 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\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\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 & 255, i += d, m /= 256, mLen -= 8) {}\n\n e = e << mLen | m;\n eLen += mLen;\n\n for (; eLen > 0; buffer[offset + i] = e & 255, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n };\n\n return exports$2;\n}\n\nvar exports$1 = {},\n _dewExec = false;\nfunction dew() {\n if (_dewExec) return exports$1;\n _dewExec = true;\n\n const base64 = dew$2();\n\n const ieee754 = dew$1();\n\n const customInspectSymbol = typeof Symbol === \"function\" && typeof Symbol[\"for\"] === \"function\" ? Symbol[\"for\"](\"nodejs.util.inspect.custom\") // eslint-disable-line dot-notation\n : null;\n exports$1.Buffer = Buffer;\n exports$1.SlowBuffer = SlowBuffer;\n exports$1.INSPECT_MAX_BYTES = 50;\n const K_MAX_LENGTH = 2147483647;\n exports$1.kMaxLength = K_MAX_LENGTH;\n /**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * 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 * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\n\n Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport();\n\n if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== \"undefined\" && typeof console.error === \"function\") {\n console.error(\"This browser lacks typed array (Uint8Array) support which is required by \" + \"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.\");\n }\n\n function typedArraySupport() {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1);\n const proto = {\n foo: function () {\n return 42;\n }\n };\n Object.setPrototypeOf(proto, Uint8Array.prototype);\n Object.setPrototypeOf(arr, proto);\n return arr.foo() === 42;\n } catch (e) {\n return false;\n }\n }\n\n Object.defineProperty(Buffer.prototype, \"parent\", {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined;\n return this.buffer;\n }\n });\n Object.defineProperty(Buffer.prototype, \"offset\", {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined;\n return this.byteOffset;\n }\n });\n\n function createBuffer(length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError(\"The value \\\"\" + length + \"\\\" is invalid for option \\\"size\\\"\");\n } // Return an augmented `Uint8Array` instance\n\n\n const buf = new Uint8Array(length);\n Object.setPrototypeOf(buf, Buffer.prototype);\n return buf;\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\n\n function Buffer(arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === \"number\") {\n if (typeof encodingOrOffset === \"string\") {\n throw new TypeError(\"The \\\"string\\\" argument must be of type string. Received type number\");\n }\n\n return allocUnsafe(arg);\n }\n\n return from(arg, encodingOrOffset, length);\n }\n\n Buffer.poolSize = 8192; // not used by this implementation\n\n function from(value, encodingOrOffset, length) {\n if (typeof value === \"string\") {\n return fromString(value, encodingOrOffset);\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value);\n }\n\n if (value == null) {\n throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \" + \"or Array-like Object. Received type \" + typeof value);\n }\n\n if (isInstance(value, ArrayBuffer) || value && isInstance(value.buffer, ArrayBuffer)) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n\n if (typeof SharedArrayBuffer !== \"undefined\" && (isInstance(value, SharedArrayBuffer) || value && isInstance(value.buffer, SharedArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length);\n }\n\n if (typeof value === \"number\") {\n throw new TypeError(\"The \\\"value\\\" argument must not be of type number. Received type number\");\n }\n\n const valueOf = value.valueOf && value.valueOf();\n\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length);\n }\n\n const b = fromObject(value);\n if (b) return b;\n\n if (typeof Symbol !== \"undefined\" && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === \"function\") {\n return Buffer.from(value[Symbol.toPrimitive](\"string\"), encodingOrOffset, length);\n }\n\n throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \" + \"or Array-like Object. Received type \" + typeof value);\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 **/\n\n\n Buffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length);\n }; // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n // https://github.com/feross/buffer/pull/148\n\n\n Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype);\n Object.setPrototypeOf(Buffer, Uint8Array);\n\n function assertSize(size) {\n if (typeof size !== \"number\") {\n throw new TypeError(\"\\\"size\\\" argument must be of type number\");\n } else if (size < 0) {\n throw new RangeError(\"The value \\\"\" + size + \"\\\" is invalid for option \\\"size\\\"\");\n }\n }\n\n function alloc(size, fill, encoding) {\n assertSize(size);\n\n if (size <= 0) {\n return createBuffer(size);\n }\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 interpreted as a start offset.\n return typeof encoding === \"string\" ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill);\n }\n\n return createBuffer(size);\n }\n /**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\n\n Buffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding);\n };\n\n function allocUnsafe(size) {\n assertSize(size);\n return createBuffer(size < 0 ? 0 : checked(size) | 0);\n }\n /**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\n\n Buffer.allocUnsafe = function (size) {\n return allocUnsafe(size);\n };\n /**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\n\n\n Buffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size);\n };\n\n function fromString(string, encoding) {\n if (typeof encoding !== \"string\" || encoding === \"\") {\n encoding = \"utf8\";\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError(\"Unknown encoding: \" + encoding);\n }\n\n const length = byteLength(string, encoding) | 0;\n let buf = createBuffer(length);\n const actual = buf.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 buf = buf.slice(0, actual);\n }\n\n return buf;\n }\n\n function fromArrayLike(array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0;\n const buf = createBuffer(length);\n\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255;\n }\n\n return buf;\n }\n\n function fromArrayView(arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView);\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength);\n }\n\n return fromArrayLike(arrayView);\n }\n\n function fromArrayBuffer(array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError(\"\\\"offset\\\" is outside of buffer bounds\");\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError(\"\\\"length\\\" is outside of buffer bounds\");\n }\n\n let buf;\n\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array);\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset);\n } else {\n buf = new Uint8Array(array, byteOffset, length);\n } // Return an augmented `Uint8Array` instance\n\n\n Object.setPrototypeOf(buf, Buffer.prototype);\n return buf;\n }\n\n function fromObject(obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0;\n const buf = createBuffer(len);\n\n if (buf.length === 0) {\n return buf;\n }\n\n obj.copy(buf, 0, 0, len);\n return buf;\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== \"number\" || numberIsNaN(obj.length)) {\n return createBuffer(0);\n }\n\n return fromArrayLike(obj);\n }\n\n if (obj.type === \"Buffer\" && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data);\n }\n }\n\n function checked(length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError(\"Attempt to allocate Buffer larger than maximum \" + \"size: 0x\" + K_MAX_LENGTH.toString(16) + \" bytes\");\n }\n\n return length | 0;\n }\n\n function SlowBuffer(length) {\n if (+length != length) {\n // eslint-disable-line eqeqeq\n length = 0;\n }\n\n return Buffer.alloc(+length);\n }\n\n Buffer.isBuffer = function isBuffer(b) {\n return b != null && b._isBuffer === true && b !== Buffer.prototype; // so Buffer.isBuffer(Buffer.prototype) will be false\n };\n\n Buffer.compare = function compare(a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength);\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength);\n\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\"The \\\"buf1\\\", \\\"buf2\\\" arguments must be one of type Buffer or Uint8Array\");\n }\n\n if (a === b) return 0;\n let x = a.length;\n let y = b.length;\n\n for (let 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\n Buffer.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\n default:\n return false;\n }\n };\n\n Buffer.concat = function concat(list, length) {\n if (!Array.isArray(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 let i;\n\n if (length === undefined) {\n length = 0;\n\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n const buffer = Buffer.allocUnsafe(length);\n let pos = 0;\n\n for (i = 0; i < list.length; ++i) {\n let buf = list[i];\n\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n buf.copy(buffer, pos);\n } else {\n Uint8Array.prototype.set.call(buffer, buf, pos);\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError(\"\\\"list\\\" argument must be an Array of Buffers\");\n } else {\n buf.copy(buffer, pos);\n }\n\n pos += buf.length;\n }\n\n return buffer;\n };\n\n function byteLength(string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length;\n }\n\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength;\n }\n\n if (typeof string !== \"string\") {\n throw new TypeError(\"The \\\"string\\\" argument must be one of type string, Buffer, or ArrayBuffer. \" + \"Received type \" + typeof string);\n }\n\n const len = string.length;\n const mustMatch = arguments.length > 2 && arguments[2] === true;\n if (!mustMatch && len === 0) return 0; // Use a for loop to avoid recursion\n\n let loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case \"ascii\":\n case \"latin1\":\n case \"binary\":\n return len;\n\n case \"utf8\":\n case \"utf-8\":\n return utf8ToBytes(string).length;\n\n case \"ucs2\":\n case \"ucs-2\":\n case \"utf16le\":\n case \"utf-16le\":\n return len * 2;\n\n case \"hex\":\n return len >>> 1;\n\n case \"base64\":\n return base64ToBytes(string).length;\n\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length; // assume utf8\n }\n\n encoding = (\"\" + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n }\n\n Buffer.byteLength = byteLength;\n\n function slowToString(encoding, start, end) {\n let loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\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\n if (start === undefined || start < 0) {\n start = 0;\n } // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n\n\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 } // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n\n\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 } // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n // to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n // reliably in a browserify context because there could be multiple different\n // copies of the 'buffer' package in use. This method works even for Buffer\n // instances that were created from another copy of the `buffer` package.\n // See: https://github.com/feross/buffer/issues/154\n\n\n Buffer.prototype._isBuffer = true;\n\n function swap(b, n, m) {\n const i = b[n];\n b[n] = b[m];\n b[m] = i;\n }\n\n Buffer.prototype.swap16 = function swap16() {\n const len = this.length;\n\n if (len % 2 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 16-bits\");\n }\n\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n\n return this;\n };\n\n Buffer.prototype.swap32 = function swap32() {\n const len = this.length;\n\n if (len % 4 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 32-bits\");\n }\n\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n\n return this;\n };\n\n Buffer.prototype.swap64 = function swap64() {\n const len = this.length;\n\n if (len % 8 !== 0) {\n throw new RangeError(\"Buffer size must be a multiple of 64-bits\");\n }\n\n for (let 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\n return this;\n };\n\n Buffer.prototype.toString = function toString() {\n const length = this.length;\n if (length === 0) return \"\";\n if (arguments.length === 0) return utf8Slice(this, 0, length);\n return slowToString.apply(this, arguments);\n };\n\n Buffer.prototype.toLocaleString = Buffer.prototype.toString;\n\n Buffer.prototype.equals = function equals(b) {\n if (!Buffer.isBuffer(b)) throw new TypeError(\"Argument must be a Buffer\");\n if (this === b) return true;\n return Buffer.compare(this, b) === 0;\n };\n\n Buffer.prototype.inspect = function inspect() {\n let str = \"\";\n const max = exports$1.INSPECT_MAX_BYTES;\n str = this.toString(\"hex\", 0, max).replace(/(.{2})/g, \"$1 \").trim();\n if (this.length > max) str += \" ... \";\n return \"<Buffer \" + str + \">\";\n };\n\n if (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect;\n }\n\n Buffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength);\n }\n\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\"The \\\"target\\\" argument must be one of type Buffer or Uint8Array. \" + \"Received type \" + typeof target);\n }\n\n if (start === undefined) {\n start = 0;\n }\n\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n\n if (thisStart === undefined) {\n thisStart = 0;\n }\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\n if (thisStart >= thisEnd) {\n return -1;\n }\n\n if (start >= end) {\n return 1;\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n if (this === target) return 0;\n let x = thisEnd - thisStart;\n let y = end - start;\n const len = Math.min(x, y);\n const thisCopy = this.slice(thisStart, thisEnd);\n const targetCopy = target.slice(start, end);\n\n for (let 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 }; // 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\n\n\n function bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1; // Normalize byteOffset\n\n if (typeof byteOffset === \"string\") {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 2147483647) {\n byteOffset = 2147483647;\n } else if (byteOffset < -2147483648) {\n byteOffset = -2147483648;\n }\n\n byteOffset = +byteOffset; // Coerce to Number.\n\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : buffer.length - 1;\n } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n if (byteOffset >= buffer.length) {\n if (dir) return -1;else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;else return -1;\n } // Normalize val\n\n\n if (typeof val === \"string\") {\n val = Buffer.from(val, encoding);\n } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1;\n }\n\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n } else if (typeof val === \"number\") {\n val = val & 255; // Search for a byte value [0-255]\n\n if (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\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n }\n\n throw new TypeError(\"val must be string, number or Buffer\");\n }\n\n function arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n let indexSize = 1;\n let arrLength = arr.length;\n let valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n\n if (encoding === \"ucs2\" || encoding === \"ucs-2\" || encoding === \"utf16le\" || encoding === \"utf-16le\") {\n if (arr.length < 2 || val.length < 2) {\n return -1;\n }\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 let i;\n\n if (dir) {\n let foundIndex = -1;\n\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\n for (i = byteOffset; i >= 0; i--) {\n let found = true;\n\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break;\n }\n }\n\n if (found) return i;\n }\n }\n\n return -1;\n }\n\n Buffer.prototype.includes = function includes(val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1;\n };\n\n Buffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n };\n\n Buffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n };\n\n function hexWrite(buf, string, offset, length) {\n offset = Number(offset) || 0;\n const remaining = buf.length - offset;\n\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n\n if (length > remaining) {\n length = remaining;\n }\n }\n\n const strLen = string.length;\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n\n let i;\n\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16);\n if (numberIsNaN(parsed)) return i;\n buf[offset + i] = parsed;\n }\n\n return i;\n }\n\n function utf8Write(buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n }\n\n function asciiWrite(buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length);\n }\n\n function base64Write(buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length);\n }\n\n function ucs2Write(buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n }\n\n Buffer.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; // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === \"string\") {\n encoding = offset;\n length = this.length;\n offset = 0; // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0;\n\n if (isFinite(length)) {\n length = length >>> 0;\n if (encoding === undefined) encoding = \"utf8\";\n } else {\n encoding = length;\n length = undefined;\n }\n } else {\n throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");\n }\n\n const 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 let loweredCase = false;\n\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 case \"latin1\":\n case \"binary\":\n return asciiWrite(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\n Buffer.prototype.toJSON = function toJSON() {\n return {\n type: \"Buffer\",\n data: Array.prototype.slice.call(this._arr || this, 0)\n };\n };\n\n function base64Slice(buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf);\n } else {\n return base64.fromByteArray(buf.slice(start, end));\n }\n }\n\n function utf8Slice(buf, start, end) {\n end = Math.min(buf.length, end);\n const res = [];\n let i = start;\n\n while (i < end) {\n const firstByte = buf[i];\n let codePoint = null;\n let bytesPerSequence = firstByte > 239 ? 4 : firstByte > 223 ? 3 : firstByte > 191 ? 2 : 1;\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 128) {\n codePoint = firstByte;\n }\n\n break;\n\n case 2:\n secondByte = buf[i + 1];\n\n if ((secondByte & 192) === 128) {\n tempCodePoint = (firstByte & 31) << 6 | secondByte & 63;\n\n if (tempCodePoint > 127) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 12 | (secondByte & 63) << 6 | thirdByte & 63;\n\n if (tempCodePoint > 2047 && (tempCodePoint < 55296 || tempCodePoint > 57343)) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n\n if ((secondByte & 192) === 128 && (thirdByte & 192) === 128 && (fourthByte & 192) === 128) {\n tempCodePoint = (firstByte & 15) << 18 | (secondByte & 63) << 12 | (thirdByte & 63) << 6 | fourthByte & 63;\n\n if (tempCodePoint > 65535 && tempCodePoint < 1114112) {\n codePoint = tempCodePoint;\n }\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 = 65533;\n bytesPerSequence = 1;\n } else if (codePoint > 65535) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 65536;\n res.push(codePoint >>> 10 & 1023 | 55296);\n codePoint = 56320 | codePoint & 1023;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res);\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\n\n\n const MAX_ARGUMENTS_LENGTH = 4096;\n\n function decodeCodePointsArray(codePoints) {\n const len = codePoints.length;\n\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n let res = \"\";\n let i = 0;\n\n while (i < len) {\n res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n }\n\n return res;\n }\n\n function asciiSlice(buf, start, end) {\n let ret = \"\";\n end = Math.min(buf.length, end);\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 127);\n }\n\n return ret;\n }\n\n function latin1Slice(buf, start, end) {\n let ret = \"\";\n end = Math.min(buf.length, end);\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n\n return ret;\n }\n\n function hexSlice(buf, start, end) {\n const len = buf.length;\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n let out = \"\";\n\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]];\n }\n\n return out;\n }\n\n function utf16leSlice(buf, start, end) {\n const bytes = buf.slice(start, end);\n let res = \"\"; // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n\n return res;\n }\n\n Buffer.prototype.slice = function slice(start, end) {\n const 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 const newBuf = this.subarray(start, end); // Return an augmented `Uint8Array` instance\n\n Object.setPrototypeOf(newBuf, Buffer.prototype);\n return newBuf;\n };\n /*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\n\n function 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\n Buffer.prototype.readUintLE = Buffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let val = this[offset];\n let mul = 1;\n let i = 0;\n\n while (++i < byteLength && (mul *= 256)) {\n val += this[offset + i] * mul;\n }\n\n return val;\n };\n\n Buffer.prototype.readUintBE = Buffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n let val = this[offset + --byteLength];\n let mul = 1;\n\n while (byteLength > 0 && (mul *= 256)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val;\n };\n\n Buffer.prototype.readUint8 = Buffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset];\n };\n\n Buffer.prototype.readUint16LE = Buffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | this[offset + 1] << 8;\n };\n\n Buffer.prototype.readUint16BE = Buffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] << 8 | this[offset + 1];\n };\n\n Buffer.prototype.readUint32LE = Buffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 16777216;\n };\n\n Buffer.prototype.readUint32BE = Buffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] * 16777216 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n };\n\n Buffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const lo = first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24;\n const hi = this[++offset] + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + last * 2 ** 24;\n return BigInt(lo) + (BigInt(hi) << BigInt(32));\n });\n Buffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const hi = first * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n const lo = this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last;\n return (BigInt(hi) << BigInt(32)) + BigInt(lo);\n });\n\n Buffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let val = this[offset];\n let mul = 1;\n let i = 0;\n\n while (++i < byteLength && (mul *= 256)) {\n val += this[offset + i] * mul;\n }\n\n mul *= 128;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n };\n\n Buffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n let i = byteLength;\n let mul = 1;\n let val = this[offset + --i];\n\n while (i > 0 && (mul *= 256)) {\n val += this[offset + --i] * mul;\n }\n\n mul *= 128;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n return val;\n };\n\n Buffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 128)) return this[offset];\n return (255 - this[offset] + 1) * -1;\n };\n\n Buffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n const val = this[offset] | this[offset + 1] << 8;\n return val & 32768 ? val | 4294901760 : val;\n };\n\n Buffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 2, this.length);\n const val = this[offset + 1] | this[offset] << 8;\n return val & 32768 ? val | 4294901760 : val;\n };\n\n Buffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n };\n\n Buffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n };\n\n Buffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const val = this[offset + 4] + this[offset + 5] * 2 ** 8 + this[offset + 6] * 2 ** 16 + (last << 24); // Overflow\n\n return (BigInt(val) << BigInt(32)) + BigInt(first + this[++offset] * 2 ** 8 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 24);\n });\n Buffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE(offset) {\n offset = offset >>> 0;\n validateNumber(offset, \"offset\");\n const first = this[offset];\n const last = this[offset + 7];\n\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8);\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + this[++offset];\n return (BigInt(val) << BigInt(32)) + BigInt(this[++offset] * 2 ** 24 + this[++offset] * 2 ** 16 + this[++offset] * 2 ** 8 + last);\n });\n\n Buffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, true, 23, 4);\n };\n\n Buffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 4, this.length);\n return ieee754.read(this, offset, false, 23, 4);\n };\n\n Buffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, true, 52, 8);\n };\n\n Buffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n offset = offset >>> 0;\n if (!noAssert) checkOffset(offset, 8, this.length);\n return ieee754.read(this, offset, false, 52, 8);\n };\n\n function checkInt(buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(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\n Buffer.prototype.writeUintLE = Buffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n let mul = 1;\n let i = 0;\n this[offset] = value & 255;\n\n while (++i < byteLength && (mul *= 256)) {\n this[offset + i] = value / mul & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeUintBE = Buffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n byteLength = byteLength >>> 0;\n\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n let i = byteLength - 1;\n let mul = 1;\n this[offset + i] = value & 255;\n\n while (--i >= 0 && (mul *= 256)) {\n this[offset + i] = value / mul & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeUint8 = Buffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 255, 0);\n this[offset] = value & 255;\n return offset + 1;\n };\n\n Buffer.prototype.writeUint16LE = Buffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n };\n\n Buffer.prototype.writeUint16BE = Buffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 65535, 0);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 255;\n return offset + 2;\n };\n\n Buffer.prototype.writeUint32LE = Buffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n this[offset + 3] = value >>> 24;\n this[offset + 2] = value >>> 16;\n this[offset + 1] = value >>> 8;\n this[offset] = value & 255;\n return offset + 4;\n };\n\n Buffer.prototype.writeUint32BE = Buffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 4294967295, 0);\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 255;\n return offset + 4;\n };\n\n function wrtBigUInt64LE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n let lo = Number(value & BigInt(4294967295));\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n lo = lo >> 8;\n buf[offset++] = lo;\n let hi = Number(value >> BigInt(32) & BigInt(4294967295));\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n hi = hi >> 8;\n buf[offset++] = hi;\n return offset;\n }\n\n function wrtBigUInt64BE(buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7);\n let lo = Number(value & BigInt(4294967295));\n buf[offset + 7] = lo;\n lo = lo >> 8;\n buf[offset + 6] = lo;\n lo = lo >> 8;\n buf[offset + 5] = lo;\n lo = lo >> 8;\n buf[offset + 4] = lo;\n let hi = Number(value >> BigInt(32) & BigInt(4294967295));\n buf[offset + 3] = hi;\n hi = hi >> 8;\n buf[offset + 2] = hi;\n hi = hi >> 8;\n buf[offset + 1] = hi;\n hi = hi >> 8;\n buf[offset] = hi;\n return offset + 8;\n }\n\n Buffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE(value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n });\n Buffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE(value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt(\"0xffffffffffffffff\"));\n });\n\n Buffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n const limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n let i = 0;\n let mul = 1;\n let sub = 0;\n this[offset] = value & 255;\n\n while (++i < byteLength && (mul *= 256)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n const limit = Math.pow(2, 8 * byteLength - 1);\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n let i = byteLength - 1;\n let mul = 1;\n let sub = 0;\n this[offset + i] = value & 255;\n\n while (--i >= 0 && (mul *= 256)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n\n this[offset + i] = (value / mul >> 0) - sub & 255;\n }\n\n return offset + byteLength;\n };\n\n Buffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 1, 127, -128);\n if (value < 0) value = 255 + value + 1;\n this[offset] = value & 255;\n return offset + 1;\n };\n\n Buffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n return offset + 2;\n };\n\n Buffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 2, 32767, -32768);\n this[offset] = value >>> 8;\n this[offset + 1] = value & 255;\n return offset + 2;\n };\n\n Buffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n this[offset] = value & 255;\n this[offset + 1] = value >>> 8;\n this[offset + 2] = value >>> 16;\n this[offset + 3] = value >>> 24;\n return offset + 4;\n };\n\n Buffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n value = +value;\n offset = offset >>> 0;\n if (!noAssert) checkInt(this, value, offset, 4, 2147483647, -2147483648);\n if (value < 0) value = 4294967295 + value + 1;\n this[offset] = value >>> 24;\n this[offset + 1] = value >>> 16;\n this[offset + 2] = value >>> 8;\n this[offset + 3] = value & 255;\n return offset + 4;\n };\n\n Buffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE(value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n });\n Buffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE(value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt(\"0x8000000000000000\"), BigInt(\"0x7fffffffffffffff\"));\n });\n\n function 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\n function writeFloat(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4;\n }\n\n Buffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert);\n };\n\n Buffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert);\n };\n\n function writeDouble(buf, value, offset, littleEndian, noAssert) {\n value = +value;\n offset = offset >>> 0;\n\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8);\n }\n\n ieee754.write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8;\n }\n\n Buffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert);\n };\n\n Buffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert);\n }; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\n Buffer.prototype.copy = function copy(target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError(\"argument should be a Buffer\");\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; // Copy 0 bytes; we're done\n\n if (end === start) return 0;\n if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n if (targetStart < 0) {\n throw new RangeError(\"targetStart out of bounds\");\n }\n\n if (start < 0 || start >= this.length) throw new RangeError(\"Index out of range\");\n if (end < 0) throw new RangeError(\"sourceEnd out of bounds\"); // Are we oob?\n\n if (end > this.length) end = this.length;\n\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n const len = end - start;\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === \"function\") {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end);\n } else {\n Uint8Array.prototype.set.call(target, this.subarray(start, end), targetStart);\n }\n\n return len;\n }; // Usage:\n // buffer.fill(number[, offset[, end]])\n // buffer.fill(buffer[, offset[, end]])\n // buffer.fill(string[, offset[, end]][, encoding])\n\n\n Buffer.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\n if (encoding !== undefined && typeof encoding !== \"string\") {\n throw new TypeError(\"encoding must be a string\");\n }\n\n if (typeof encoding === \"string\" && !Buffer.isEncoding(encoding)) {\n throw new TypeError(\"Unknown encoding: \" + encoding);\n }\n\n if (val.length === 1) {\n const code = val.charCodeAt(0);\n\n if (encoding === \"utf8\" && code < 128 || encoding === \"latin1\") {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code;\n }\n }\n } else if (typeof val === \"number\") {\n val = val & 255;\n } else if (typeof val === \"boolean\") {\n val = Number(val);\n } // Invalid ranges are not set to a default, so can range check early.\n\n\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 if (!val) val = 0;\n let i;\n\n if (typeof val === \"number\") {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n const bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding);\n const len = bytes.length;\n\n if (len === 0) {\n throw new TypeError(\"The value \\\"\" + val + \"\\\" is invalid for argument \\\"value\\\"\");\n }\n\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this;\n }; // CUSTOM ERRORS\n // =============\n // Simplified versions from Node, changed for Buffer-only usage\n\n\n const errors = {};\n\n function E(sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor() {\n super();\n Object.defineProperty(this, \"message\", {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n }); // Add the error code to the name to include it in the stack trace.\n\n this.name = `${this.name} [${sym}]`; // Access the stack to generate the error message including the error code\n // from the name.\n\n this.stack; // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n\n delete this.name;\n }\n\n get code() {\n return sym;\n }\n\n set code(value) {\n Object.defineProperty(this, \"code\", {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n }\n\n toString() {\n return `${this.name} [${sym}]: ${this.message}`;\n }\n\n };\n }\n\n E(\"ERR_BUFFER_OUT_OF_BOUNDS\", function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`;\n }\n\n return \"Attempt to access memory outside buffer bounds\";\n }, RangeError);\n E(\"ERR_INVALID_ARG_TYPE\", function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`;\n }, TypeError);\n E(\"ERR_OUT_OF_RANGE\", function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`;\n let received = input;\n\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input));\n } else if (typeof input === \"bigint\") {\n received = String(input);\n\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received);\n }\n\n received += \"n\";\n }\n\n msg += ` It must be ${range}. Received ${received}`;\n return msg;\n }, RangeError);\n\n function addNumericalSeparator(val) {\n let res = \"\";\n let i = val.length;\n const start = val[0] === \"-\" ? 1 : 0;\n\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`;\n }\n\n return `${val.slice(0, i)}${res}`;\n } // CHECK FUNCTIONS\n // ===============\n\n\n function checkBounds(buf, offset, byteLength) {\n validateNumber(offset, \"offset\");\n\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1));\n }\n }\n\n function checkIntBI(value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === \"bigint\" ? \"n\" : \"\";\n let range;\n\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`;\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` + `${(byteLength + 1) * 8 - 1}${n}`;\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`;\n }\n\n throw new errors.ERR_OUT_OF_RANGE(\"value\", range, value);\n }\n\n checkBounds(buf, offset, byteLength);\n }\n\n function validateNumber(value, name) {\n if (typeof value !== \"number\") {\n throw new errors.ERR_INVALID_ARG_TYPE(name, \"number\", value);\n }\n }\n\n function boundsError(value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type);\n throw new errors.ERR_OUT_OF_RANGE(type || \"offset\", \"an integer\", value);\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS();\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || \"offset\", `>= ${type ? 1 : 0} and <= ${length}`, value);\n } // HELPER FUNCTIONS\n // ================\n\n\n const INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g;\n\n function base64clean(str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split(\"=\")[0]; // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n\n str = str.trim().replace(INVALID_BASE64_RE, \"\"); // Node converts strings with length < 2 to ''\n\n if (str.length < 2) return \"\"; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n while (str.length % 4 !== 0) {\n str = str + \"=\";\n }\n\n return str;\n }\n\n function utf8ToBytes(string, units) {\n units = units || Infinity;\n let codePoint;\n const length = string.length;\n let leadSurrogate = null;\n const bytes = [];\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i); // is surrogate component\n\n if (codePoint > 55295 && codePoint < 57344) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 56319) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n continue;\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n continue;\n } // valid lead\n\n\n leadSurrogate = codePoint;\n continue;\n } // 2 leads in a row\n\n\n if (codePoint < 56320) {\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n leadSurrogate = codePoint;\n continue;\n } // valid surrogate pair\n\n\n codePoint = (leadSurrogate - 55296 << 10 | codePoint - 56320) + 65536;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(239, 191, 189);\n }\n\n leadSurrogate = null; // encode utf8\n\n if (codePoint < 128) {\n if ((units -= 1) < 0) break;\n bytes.push(codePoint);\n } else if (codePoint < 2048) {\n if ((units -= 2) < 0) break;\n bytes.push(codePoint >> 6 | 192, codePoint & 63 | 128);\n } else if (codePoint < 65536) {\n if ((units -= 3) < 0) break;\n bytes.push(codePoint >> 12 | 224, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else if (codePoint < 1114112) {\n if ((units -= 4) < 0) break;\n bytes.push(codePoint >> 18 | 240, codePoint >> 12 & 63 | 128, codePoint >> 6 & 63 | 128, codePoint & 63 | 128);\n } else {\n throw new Error(\"Invalid code point\");\n }\n }\n\n return bytes;\n }\n\n function asciiToBytes(str) {\n const byteArray = [];\n\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 255);\n }\n\n return byteArray;\n }\n\n function utf16leToBytes(str, units) {\n let c, hi, lo;\n const byteArray = [];\n\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break;\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 function base64ToBytes(str) {\n return base64.toByteArray(base64clean(str));\n }\n\n function blitBuffer(src, dst, offset, length) {\n let i;\n\n for (i = 0; i < length; ++i) {\n if (i + offset >= dst.length || i >= src.length) break;\n dst[i + offset] = src[i];\n }\n\n return i;\n } // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n // the `instanceof` check but they should be treated as of that type.\n // See: https://github.com/feross/buffer/issues/166\n\n\n function isInstance(obj, type) {\n return obj instanceof type || obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name;\n }\n\n function numberIsNaN(obj) {\n // For IE11 support\n return obj !== obj; // eslint-disable-line no-self-compare\n } // Create lookup table for `toString('hex')`\n // See: https://github.com/feross/buffer/issues/219\n\n\n const hexSliceLookupTable = function () {\n const alphabet = \"0123456789abcdef\";\n const table = new Array(256);\n\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16;\n\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j];\n }\n }\n\n return table;\n }(); // Return not function with Error if BigInt not supported\n\n\n function defineBigIntMethod(fn) {\n return typeof BigInt === \"undefined\" ? BufferBigIntNotDefined : fn;\n }\n\n function BufferBigIntNotDefined() {\n throw new Error(\"BigInt not supported\");\n }\n\n return exports$1;\n}\n\nconst exports = dew();\nexports['Buffer']; exports['SlowBuffer']; exports['INSPECT_MAX_BYTES']; exports['kMaxLength'];\n\nvar Buffer = exports.Buffer;\r\nvar INSPECT_MAX_BYTES = exports.INSPECT_MAX_BYTES;\r\nvar kMaxLength = exports.kMaxLength;\n\nexport { Buffer, INSPECT_MAX_BYTES, exports as default, kMaxLength };\n", "/*\nCopyright Joyent, Inc. and other Node contributors.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\nexport const cwd = '/';\nexport const sep = '/';\nfunction validateString(str, name) {\n if (typeof str != 'string') {\n throw new TypeError(`\"${name}\" is not a string`);\n }\n}\nfunction validateObject(str, name) {\n if (typeof str != 'object') {\n throw new TypeError(`\"${name}\" is not an object`);\n }\n}\n// Resolves . and .. elements in a path with directory names\nexport function normalizeString(path, allowAboveRoot) {\n let res = '';\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let char = '\\x00';\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length) {\n char = path[i];\n }\n else if (char == '/') {\n break;\n }\n else {\n char = '/';\n }\n if (char == '/') {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n }\n else if (dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.at(-1) !== '.' || res.at(-2) !== '.') {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf('/');\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n }\n else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n else if (res.length !== 0) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n res += res.length > 0 ? '/..' : '..';\n lastSegmentLength = 2;\n }\n }\n else {\n if (res.length > 0)\n res += '/' + path.slice(lastSlash + 1, i);\n else\n res = path.slice(lastSlash + 1, i);\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n }\n else if (char === '.' && dots !== -1) {\n ++dots;\n }\n else {\n dots = -1;\n }\n }\n return res;\n}\nexport function formatExt(ext) {\n return ext ? `${ext[0] === '.' ? '' : '.'}${ext}` : '';\n}\nexport function resolve(...args) {\n let resolvedPath = '';\n let resolvedAbsolute = false;\n for (let i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n const path = i >= 0 ? args[i] : cwd;\n validateString(path, `paths[${i}]`);\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = path[0] === '/';\n }\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);\n if (resolvedAbsolute) {\n return `/${resolvedPath}`;\n }\n return resolvedPath.length > 0 ? resolvedPath : '.';\n}\nexport function normalize(path) {\n validateString(path, 'path');\n if (path.length === 0)\n return '.';\n const isAbsolute = path[0] === '/';\n const trailingSeparator = path.at(-1) === '/';\n // Normalize the path\n path = normalizeString(path, !isAbsolute);\n if (path.length === 0) {\n if (isAbsolute)\n return '/';\n return trailingSeparator ? './' : '.';\n }\n if (trailingSeparator)\n path += '/';\n return isAbsolute ? `/${path}` : path;\n}\nexport function isAbsolute(path) {\n validateString(path, 'path');\n return path.length > 0 && path[0] === '/';\n}\nexport function join(...args) {\n if (args.length === 0)\n return '.';\n let joined;\n for (let i = 0; i < args.length; ++i) {\n const arg = args[i];\n validateString(arg, 'path');\n if (arg.length > 0) {\n if (joined === undefined)\n joined = arg;\n else\n joined += `/${arg}`;\n }\n }\n if (joined === undefined)\n return '.';\n return normalize(joined);\n}\nexport function relative(from, to) {\n validateString(from, 'from');\n validateString(to, 'to');\n if (from === to)\n return '';\n // Trim leading forward slashes.\n from = resolve(from);\n to = resolve(to);\n if (from === to)\n return '';\n const fromStart = 1;\n const fromEnd = from.length;\n const fromLen = fromEnd - fromStart;\n const toStart = 1;\n const toLen = to.length - toStart;\n // Compare paths to find the longest common path from root\n const length = fromLen < toLen ? fromLen : toLen;\n let lastCommonSep = -1;\n let i = 0;\n for (; i < length; i++) {\n const fromCode = from[fromStart + i];\n if (fromCode !== to[toStart + i])\n break;\n else if (fromCode === '/')\n lastCommonSep = i;\n }\n if (i === length) {\n if (toLen > length) {\n if (to[toStart + i] === '/') {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n }\n if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n }\n else if (fromLen > length) {\n if (from[fromStart + i] === '/') {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n }\n else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo/bar'; to='/'\n lastCommonSep = 0;\n }\n }\n }\n let out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`.\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from[i] === '/') {\n out += out.length === 0 ? '..' : '/..';\n }\n }\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts.\n return `${out}${to.slice(toStart + lastCommonSep)}`;\n}\nexport function dirname(path) {\n validateString(path, 'path');\n if (path.length === 0)\n return '.';\n const hasRoot = path[0] === '/';\n let end = -1;\n let matchedSlash = true;\n for (let i = path.length - 1; i >= 1; --i) {\n if (path[i] === '/') {\n if (!matchedSlash) {\n end = i;\n break;\n }\n }\n else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n if (end === -1)\n return hasRoot ? '/' : '.';\n if (hasRoot && end === 1)\n return '//';\n return path.slice(0, end);\n}\nexport function basename(path, suffix) {\n if (suffix !== undefined)\n validateString(suffix, 'ext');\n validateString(path, 'path');\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n if (suffix !== undefined && suffix.length > 0 && suffix.length <= path.length) {\n if (suffix === path)\n return '';\n let extIdx = suffix.length - 1;\n let firstNonSlashEnd = -1;\n for (let i = path.length - 1; i >= 0; --i) {\n if (path[i] === '/') {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (path[i] === suffix[extIdx]) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n }\n else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n if (start === end)\n end = firstNonSlashEnd;\n else if (end === -1)\n end = path.length;\n return path.slice(start, end);\n }\n for (let i = path.length - 1; i >= 0; --i) {\n if (path[i] === '/') {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n if (end === -1)\n return '';\n return path.slice(start, end);\n}\nexport function extname(path) {\n validateString(path, 'path');\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n for (let i = path.length - 1; i >= 0; --i) {\n if (path[i] === '/') {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (path[i] === '.') {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (startDot === -1 ||\n end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)) {\n return '';\n }\n return path.slice(startDot, end);\n}\nexport function format(pathObject) {\n validateObject(pathObject, 'pathObject');\n const dir = pathObject.dir || pathObject.root;\n const base = pathObject.base || `${pathObject.name || ''}${formatExt(pathObject.ext)}`;\n if (!dir) {\n return base;\n }\n return dir === pathObject.root ? `${dir}${base}` : `${dir}/${base}`;\n}\nexport function parse(path) {\n validateString(path, 'path');\n const isAbsolute = path[0] === '/';\n const ret = { root: isAbsolute ? '/' : '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0)\n return ret;\n const start = isAbsolute ? 1 : 0;\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let i = path.length - 1;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n // Get non-dir info\n for (; i >= start; --i) {\n if (path[i] === '/') {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (path[i] === '.') {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1)\n startDot = i;\n else if (preDotState !== 1)\n preDotState = 1;\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (end !== -1) {\n const start = startPart === 0 && isAbsolute ? 1 : startPart;\n if (startDot === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)) {\n ret.base = ret.name = path.slice(start, end);\n }\n else {\n ret.name = path.slice(start, startDot);\n ret.base = path.slice(start, end);\n ret.ext = path.slice(startDot, end);\n }\n }\n if (startPart > 0)\n ret.dir = path.slice(0, startPart - 1);\n else if (isAbsolute)\n ret.dir = '/';\n return ret;\n}\n", "import { Buffer } from 'buffer';\n/**\n * Standard libc error codes. More will be added to this enum and ErrorStrings as they are\n * needed.\n * @url http://www.gnu.org/software/libc/manual/html_node/Error-Codes.html\n */\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[ErrorCode[\"EPERM\"] = 1] = \"EPERM\";\n ErrorCode[ErrorCode[\"ENOENT\"] = 2] = \"ENOENT\";\n ErrorCode[ErrorCode[\"EIO\"] = 5] = \"EIO\";\n ErrorCode[ErrorCode[\"EBADF\"] = 9] = \"EBADF\";\n ErrorCode[ErrorCode[\"EACCES\"] = 13] = \"EACCES\";\n ErrorCode[ErrorCode[\"EBUSY\"] = 16] = \"EBUSY\";\n ErrorCode[ErrorCode[\"EEXIST\"] = 17] = \"EEXIST\";\n ErrorCode[ErrorCode[\"ENOTDIR\"] = 20] = \"ENOTDIR\";\n ErrorCode[ErrorCode[\"EISDIR\"] = 21] = \"EISDIR\";\n ErrorCode[ErrorCode[\"EINVAL\"] = 22] = \"EINVAL\";\n ErrorCode[ErrorCode[\"EFBIG\"] = 27] = \"EFBIG\";\n ErrorCode[ErrorCode[\"ENOSPC\"] = 28] = \"ENOSPC\";\n ErrorCode[ErrorCode[\"EROFS\"] = 30] = \"EROFS\";\n ErrorCode[ErrorCode[\"ENOTEMPTY\"] = 39] = \"ENOTEMPTY\";\n ErrorCode[ErrorCode[\"ENOTSUP\"] = 95] = \"ENOTSUP\";\n})(ErrorCode = ErrorCode || (ErrorCode = {}));\n/**\n * Strings associated with each error code.\n * @internal\n */\nexport const ErrorStrings = {};\nErrorStrings[ErrorCode.EPERM] = 'Operation not permitted.';\nErrorStrings[ErrorCode.ENOENT] = 'No such file or directory.';\nErrorStrings[ErrorCode.EIO] = 'Input/output error.';\nErrorStrings[ErrorCode.EBADF] = 'Bad file descriptor.';\nErrorStrings[ErrorCode.EACCES] = 'Permission denied.';\nErrorStrings[ErrorCode.EBUSY] = 'Resource busy or locked.';\nErrorStrings[ErrorCode.EEXIST] = 'File exists.';\nErrorStrings[ErrorCode.ENOTDIR] = 'File is not a directory.';\nErrorStrings[ErrorCode.EISDIR] = 'File is a directory.';\nErrorStrings[ErrorCode.EINVAL] = 'Invalid argument.';\nErrorStrings[ErrorCode.EFBIG] = 'File is too big.';\nErrorStrings[ErrorCode.ENOSPC] = 'No space left on disk.';\nErrorStrings[ErrorCode.EROFS] = 'Cannot modify a read-only file system.';\nErrorStrings[ErrorCode.ENOTEMPTY] = 'Directory is not empty.';\nErrorStrings[ErrorCode.ENOTSUP] = 'Operation is not supported.';\n/**\n * Represents a BrowserFS error. Passed back to applications after a failed\n * call to the BrowserFS API.\n */\nexport class ApiError extends Error {\n static fromJSON(json) {\n const err = new ApiError(json.errno, json.message, json.path);\n err.code = json.code;\n err.stack = json.stack;\n return err;\n }\n /**\n * Creates an ApiError object from a buffer.\n */\n static fromBuffer(buffer, i = 0) {\n return ApiError.fromJSON(JSON.parse(buffer.toString('utf8', i + 4, i + 4 + buffer.readUInt32LE(i))));\n }\n static FileError(code, p) {\n return new ApiError(code, ErrorStrings[code], p);\n }\n static EACCES(path) {\n return this.FileError(ErrorCode.EACCES, path);\n }\n static ENOENT(path) {\n return this.FileError(ErrorCode.ENOENT, path);\n }\n static EEXIST(path) {\n return this.FileError(ErrorCode.EEXIST, path);\n }\n static EISDIR(path) {\n return this.FileError(ErrorCode.EISDIR, path);\n }\n static ENOTDIR(path) {\n return this.FileError(ErrorCode.ENOTDIR, path);\n }\n static EPERM(path) {\n return this.FileError(ErrorCode.EPERM, path);\n }\n static ENOTEMPTY(path) {\n return this.FileError(ErrorCode.ENOTEMPTY, path);\n }\n /**\n * Represents a BrowserFS error. Passed back to applications after a failed\n * call to the BrowserFS API.\n *\n * Error codes mirror those returned by regular Unix file operations, which is\n * what Node returns.\n * @constructor ApiError\n * @param type The type of the error.\n * @param [message] A descriptive error message.\n */\n constructor(type, message = ErrorStrings[type], path) {\n super(message);\n // Unsupported.\n this.syscall = '';\n this.errno = type;\n this.code = ErrorCode[type];\n this.path = path;\n this.message = `Error: ${this.code}: ${message}${this.path ? `, '${this.path}'` : ''}`;\n }\n /**\n * @return A friendly error message.\n */\n toString() {\n return this.message;\n }\n toJSON() {\n return {\n errno: this.errno,\n code: this.code,\n path: this.path,\n stack: this.stack,\n message: this.message,\n };\n }\n /**\n * Writes the API error into a buffer.\n */\n writeToBuffer(buffer = Buffer.alloc(this.bufferSize()), i = 0) {\n const bytesWritten = buffer.write(JSON.stringify(this.toJSON()), i + 4);\n buffer.writeUInt32LE(bytesWritten, i);\n return buffer;\n }\n /**\n * The size of the API error in buffer-form in bytes.\n */\n bufferSize() {\n // 4 bytes for string length.\n return 4 + Buffer.byteLength(JSON.stringify(this.toJSON()));\n }\n}\n", "/**\n * Credentials used for FS ops.\n * Similar to Linux's cred struct. See https://github.com/torvalds/linux/blob/master/include/linux/cred.h\n */\nexport class Cred {\n constructor(uid, gid, suid, sgid, euid, egid) {\n this.uid = uid;\n this.gid = gid;\n this.suid = suid;\n this.sgid = sgid;\n this.euid = euid;\n this.egid = egid;\n }\n}\nCred.Root = new Cred(0, 0, 0, 0, 0, 0);\n", "import { Cred } from './cred.js';\nimport { Buffer } from 'buffer';\nimport { S_IFDIR, S_IFLNK, S_IFMT, S_IFREG } from './emulation/constants.js';\n/**\n * Indicates the type of the given file. Applied to 'mode'.\n */\nexport var FileType;\n(function (FileType) {\n FileType[FileType[\"FILE\"] = S_IFREG] = \"FILE\";\n FileType[FileType[\"DIRECTORY\"] = S_IFDIR] = \"DIRECTORY\";\n FileType[FileType[\"SYMLINK\"] = S_IFLNK] = \"SYMLINK\";\n})(FileType = FileType || (FileType = {}));\n/**\n * Implementation of Node's `Stats`.\n *\n * Attribute descriptions are from `man 2 stat'\n * @see http://nodejs.org/api/fs.html#fs_class_fs_stats\n * @see http://man7.org/linux/man-pages/man2/stat.2.html\n */\nexport class Stats {\n static fromBuffer(buffer) {\n const size = buffer.readUInt32LE(0), mode = buffer.readUInt32LE(4), atime = buffer.readDoubleLE(8), mtime = buffer.readDoubleLE(16), ctime = buffer.readDoubleLE(24), uid = buffer.readUInt32LE(32), gid = buffer.readUInt32LE(36);\n return new Stats(mode & S_IFMT, size, mode & ~S_IFMT, atime, mtime, ctime, uid, gid);\n }\n /**\n * Clones the stats object.\n */\n static clone(s) {\n return new Stats(s.mode & S_IFMT, s.size, s.mode & ~S_IFMT, s.atimeMs, s.mtimeMs, s.ctimeMs, s.uid, s.gid, s.birthtimeMs);\n }\n get atime() {\n return new Date(this.atimeMs);\n }\n get mtime() {\n return new Date(this.mtimeMs);\n }\n get ctime() {\n return new Date(this.ctimeMs);\n }\n get birthtime() {\n return new Date(this.birthtimeMs);\n }\n /**\n * Provides information about a particular entry in the file system.\n * @param itemType Type of the item (FILE, DIRECTORY, SYMLINK, or SOCKET)\n * @param size Size of the item in bytes. For directories/symlinks,\n * this is normally the size of the struct that represents the item.\n * @param mode Unix-style file mode (e.g. 0o644)\n * @param atimeMs time of last access, in milliseconds since epoch\n * @param mtimeMs time of last modification, in milliseconds since epoch\n * @param ctimeMs time of last time file status was changed, in milliseconds since epoch\n * @param uid the id of the user that owns the file\n * @param gid the id of the group that owns the file\n * @param birthtimeMs time of file creation, in milliseconds since epoch\n */\n constructor(itemType, size, mode, atimeMs, mtimeMs, ctimeMs, uid, gid, birthtimeMs) {\n // ID of device containing file\n this.dev = 0;\n // inode number\n this.ino = 0;\n // device ID (if special file)\n this.rdev = 0;\n // number of hard links\n this.nlink = 1;\n // blocksize for file system I/O\n this.blksize = 4096;\n // user ID of owner\n this.uid = 0;\n // group ID of owner\n this.gid = 0;\n // Some file systems stash data on stats objects.\n this.fileData = null;\n this.size = size;\n let currentTime = 0;\n if (typeof atimeMs !== 'number') {\n currentTime = Date.now();\n atimeMs = currentTime;\n }\n if (typeof mtimeMs !== 'number') {\n if (!currentTime) {\n currentTime = Date.now();\n }\n mtimeMs = currentTime;\n }\n if (typeof ctimeMs !== 'number') {\n if (!currentTime) {\n currentTime = Date.now();\n }\n ctimeMs = currentTime;\n }\n if (typeof birthtimeMs !== 'number') {\n if (!currentTime) {\n currentTime = Date.now();\n }\n birthtimeMs = currentTime;\n }\n if (typeof uid !== 'number') {\n uid = 0;\n }\n if (typeof gid !== 'number') {\n gid = 0;\n }\n this.atimeMs = atimeMs;\n this.ctimeMs = ctimeMs;\n this.mtimeMs = mtimeMs;\n this.birthtimeMs = birthtimeMs;\n if (!mode) {\n switch (itemType) {\n case FileType.FILE:\n this.mode = 0o644;\n break;\n case FileType.DIRECTORY:\n default:\n this.mode = 0o777;\n }\n }\n else {\n this.mode = mode;\n }\n // number of 512B blocks allocated\n this.blocks = Math.ceil(size / 512);\n // Check if mode also includes top-most bits, which indicate the file's\n // type.\n if ((this.mode & S_IFMT) == 0) {\n this.mode |= itemType;\n }\n }\n toBuffer() {\n const buffer = Buffer.alloc(32);\n buffer.writeUInt32LE(this.size, 0);\n buffer.writeUInt32LE(this.mode, 4);\n buffer.writeDoubleLE(this.atime.getTime(), 8);\n buffer.writeDoubleLE(this.mtime.getTime(), 16);\n buffer.writeDoubleLE(this.ctime.getTime(), 24);\n buffer.writeUInt32LE(this.uid, 32);\n buffer.writeUInt32LE(this.gid, 36);\n return buffer;\n }\n /**\n * @return [Boolean] True if this item is a file.\n */\n isFile() {\n return (this.mode & S_IFMT) === S_IFREG;\n }\n /**\n * @return [Boolean] True if this item is a directory.\n */\n isDirectory() {\n return (this.mode & S_IFMT) === S_IFDIR;\n }\n /**\n * @return [Boolean] True if this item is a symbolic link (only valid through lstat)\n */\n isSymbolicLink() {\n return (this.mode & S_IFMT) === S_IFLNK;\n }\n /**\n * Checks if a given user/group has access to this item\n * @param mode The request access as 4 bits (unused, read, write, execute)\n * @param uid The requesting UID\n * @param gid The requesting GID\n * @returns [Boolean] True if the request has access, false if the request does not\n */\n hasAccess(mode, cred) {\n if (cred.euid === 0 || cred.egid === 0) {\n //Running as root\n return true;\n }\n const perms = this.mode & ~S_IFMT;\n let uMode = 0xf, gMode = 0xf, wMode = 0xf;\n if (cred.euid == this.uid) {\n const uPerms = (0xf00 & perms) >> 8;\n uMode = (mode ^ uPerms) & mode;\n }\n if (cred.egid == this.gid) {\n const gPerms = (0xf0 & perms) >> 4;\n gMode = (mode ^ gPerms) & mode;\n }\n const wPerms = 0xf & perms;\n wMode = (mode ^ wPerms) & mode;\n /*\n Result = 0b0xxx (read, write, execute)\n If any bits are set that means the request does not have that permission.\n */\n const result = uMode & gMode & wMode;\n return !result;\n }\n /**\n * Convert the current stats object into a cred object\n */\n getCred(uid = this.uid, gid = this.gid) {\n return new Cred(uid, gid, this.uid, this.gid, uid, gid);\n }\n /**\n * Change the mode of the file. We use this helper function to prevent messing\n * up the type of the file, which is encoded in mode.\n */\n chmod(mode) {\n this.mode = (this.mode & S_IFMT) | mode;\n }\n /**\n * Change the owner user/group of the file.\n * This function makes sure it is a valid UID/GID (that is, a 32 unsigned int)\n */\n chown(uid, gid) {\n if (!isNaN(+uid) && 0 <= +uid && +uid < Math.pow(2, 32)) {\n this.uid = uid;\n }\n if (!isNaN(+gid) && 0 <= +gid && +gid < Math.pow(2, 32)) {\n this.gid = gid;\n }\n }\n // We don't support the following types of files.\n isSocket() {\n return false;\n }\n isBlockDevice() {\n return false;\n }\n isCharacterDevice() {\n return false;\n }\n isFIFO() {\n return false;\n }\n}\n", "/* eslint-disable @typescript-eslint/no-unused-vars */\n// disable no-unused-vars since BaseFileSystem uses them a lot\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar _a;\nimport { ApiError, ErrorCode } from './ApiError.js';\nimport { FileFlag, ActionType } from './file.js';\nimport * as path from './emulation/path.js';\nimport { Buffer } from 'buffer';\n/**\n * Structure for a filesystem. **All** BrowserFS FileSystems must implement\n * this.\n *\n * ### Argument Assumptions\n *\n * You can assume the following about arguments passed to each API method:\n *\n * - Every path is an absolute path. `.`, `..`, and other items\n * are resolved into an absolute form.\n * - All arguments are present. Any optional arguments at the Node API level\n * have been passed in with their default values.\n */\nexport class FileSystem {\n constructor(options) {\n // unused\n }\n}\n/**\n * Basic filesystem class. Most filesystems should extend this class, as it\n * provides default implementations for a handful of methods.\n */\nexport class BaseFileSystem extends FileSystem {\n constructor(options) {\n super();\n this._ready = Promise.resolve(this);\n }\n get metadata() {\n return {\n name: this.constructor.name,\n readonly: false,\n synchronous: false,\n supportsProperties: false,\n supportsLinks: false,\n totalSpace: 0,\n freeSpace: 0,\n };\n }\n whenReady() {\n return this._ready;\n }\n /**\n * Opens the file at path p with the given flag. The file must exist.\n * @param p The path to open.\n * @param flag The flag to use when opening the file.\n */\n openFile(p, flag, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n /**\n * Create the file at path p with the given mode. Then, open it with the given\n * flag.\n */\n createFile(p, flag, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n open(p, flag, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const stats = yield this.stat(p, cred);\n switch (flag.pathExistsAction()) {\n case ActionType.THROW_EXCEPTION:\n throw ApiError.EEXIST(p);\n case ActionType.TRUNCATE_FILE:\n // NOTE: In a previous implementation, we deleted the file and\n // re-created it. However, this created a race condition if another\n // asynchronous request was trying to read the file, as the file\n // would not exist for a small period of time.\n const fd = yield this.openFile(p, flag, cred);\n if (!fd)\n throw new Error('BFS has reached an impossible code path; please file a bug.');\n yield fd.truncate(0);\n yield fd.sync();\n return fd;\n case ActionType.NOP:\n return this.openFile(p, flag, cred);\n default:\n throw new ApiError(ErrorCode.EINVAL, 'Invalid FileFlag object.');\n }\n // File exists.\n }\n catch (e) {\n // File does not exist.\n switch (flag.pathNotExistsAction()) {\n case ActionType.CREATE_FILE:\n // Ensure parent exists.\n const parentStats = yield this.stat(path.dirname(p), cred);\n if (parentStats && !parentStats.isDirectory()) {\n throw ApiError.ENOTDIR(path.dirname(p));\n }\n return this.createFile(p, flag, mode, cred);\n case ActionType.THROW_EXCEPTION:\n throw ApiError.ENOENT(p);\n default:\n throw new ApiError(ErrorCode.EINVAL, 'Invalid FileFlag object.');\n }\n }\n });\n }\n access(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n accessSync(p, mode, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n rename(oldPath, newPath, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n renameSync(oldPath, newPath, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n stat(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n statSync(p, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n /**\n * Opens the file at path p with the given flag. The file must exist.\n * @param p The path to open.\n * @param flag The flag to use when opening the file.\n * @return A File object corresponding to the opened file.\n */\n openFileSync(p, flag, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n /**\n * Create the file at path p with the given mode. Then, open it with the given\n * flag.\n */\n createFileSync(p, flag, mode, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n openSync(p, flag, mode, cred) {\n // Check if the path exists, and is a file.\n let stats;\n try {\n stats = this.statSync(p, cred);\n }\n catch (e) {\n // File does not exist.\n switch (flag.pathNotExistsAction()) {\n case ActionType.CREATE_FILE:\n // Ensure parent exists.\n const parentStats = this.statSync(path.dirname(p), cred);\n if (!parentStats.isDirectory()) {\n throw ApiError.ENOTDIR(path.dirname(p));\n }\n return this.createFileSync(p, flag, mode, cred);\n case ActionType.THROW_EXCEPTION:\n throw ApiError.ENOENT(p);\n default:\n throw new ApiError(ErrorCode.EINVAL, 'Invalid FileFlag object.');\n }\n }\n if (!stats.hasAccess(mode, cred)) {\n throw ApiError.EACCES(p);\n }\n // File exists.\n switch (flag.pathExistsAction()) {\n case ActionType.THROW_EXCEPTION:\n throw ApiError.EEXIST(p);\n case ActionType.TRUNCATE_FILE:\n // Delete file.\n this.unlinkSync(p, cred);\n // Create file. Use the same mode as the old file.\n // Node itself modifies the ctime when this occurs, so this action\n // will preserve that behavior if the underlying file system\n // supports those properties.\n return this.createFileSync(p, flag, stats.mode, cred);\n case ActionType.NOP:\n return this.openFileSync(p, flag, cred);\n default:\n throw new ApiError(ErrorCode.EINVAL, 'Invalid FileFlag object.');\n }\n }\n unlink(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n unlinkSync(p, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n rmdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n rmdirSync(p, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n mkdir(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n mkdirSync(p, mode, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n readdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n readdirSync(p, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n exists(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield this.stat(p, cred);\n return true;\n }\n catch (e) {\n return false;\n }\n });\n }\n existsSync(p, cred) {\n try {\n this.statSync(p, cred);\n return true;\n }\n catch (e) {\n return false;\n }\n }\n realpath(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.metadata.supportsLinks) {\n // The path could contain symlinks. Split up the path,\n // resolve any symlinks, return the resolved string.\n const splitPath = p.split(path.sep);\n // TODO: Simpler to just pass through file, find sep and such.\n for (let i = 0; i < splitPath.length; i++) {\n const addPaths = splitPath.slice(0, i + 1);\n splitPath[i] = path.join(...addPaths);\n }\n return splitPath.join(path.sep);\n }\n else {\n // No symlinks. We just need to verify that it exists.\n if (!(yield this.exists(p, cred))) {\n throw ApiError.ENOENT(p);\n }\n return p;\n }\n });\n }\n realpathSync(p, cred) {\n if (this.metadata.supportsLinks) {\n // The path could contain symlinks. Split up the path,\n // resolve any symlinks, return the resolved string.\n const splitPath = p.split(path.sep);\n // TODO: Simpler to just pass through file, find sep and such.\n for (let i = 0; i < splitPath.length; i++) {\n const addPaths = splitPath.slice(0, i + 1);\n splitPath[i] = path.join(...addPaths);\n }\n return splitPath.join(path.sep);\n }\n else {\n // No symlinks. We just need to verify that it exists.\n if (this.existsSync(p, cred)) {\n return p;\n }\n else {\n throw ApiError.ENOENT(p);\n }\n }\n }\n truncate(p, len, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const fd = yield this.open(p, FileFlag.getFileFlag('r+'), 0o644, cred);\n try {\n yield fd.truncate(len);\n }\n finally {\n yield fd.close();\n }\n });\n }\n truncateSync(p, len, cred) {\n const fd = this.openSync(p, FileFlag.getFileFlag('r+'), 0o644, cred);\n // Need to safely close FD, regardless of whether or not truncate succeeds.\n try {\n fd.truncateSync(len);\n }\n finally {\n fd.closeSync();\n }\n }\n readFile(fname, encoding, flag, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n // Get file.\n const fd = yield this.open(fname, flag, 0o644, cred);\n try {\n const stat = yield fd.stat();\n // Allocate buffer.\n const buf = Buffer.alloc(stat.size);\n yield fd.read(buf, 0, stat.size, 0);\n yield fd.close();\n if (encoding === null) {\n return buf;\n }\n return buf.toString(encoding);\n }\n finally {\n yield fd.close();\n }\n });\n }\n readFileSync(fname, encoding, flag, cred) {\n // Get file.\n const fd = this.openSync(fname, flag, 0o644, cred);\n try {\n const stat = fd.statSync();\n // Allocate buffer.\n const buf = Buffer.alloc(stat.size);\n fd.readSync(buf, 0, stat.size, 0);\n fd.closeSync();\n if (encoding === null) {\n return buf;\n }\n return buf.toString(encoding);\n }\n finally {\n fd.closeSync();\n }\n }\n writeFile(fname, data, encoding, flag, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n // Get file.\n const fd = yield this.open(fname, flag, mode, cred);\n try {\n if (typeof data === 'string') {\n data = Buffer.from(data, encoding);\n }\n // Write into file.\n yield fd.write(data, 0, data.length, 0);\n }\n finally {\n yield fd.close();\n }\n });\n }\n writeFileSync(fname, data, encoding, flag, mode, cred) {\n // Get file.\n const fd = this.openSync(fname, flag, mode, cred);\n try {\n if (typeof data === 'string') {\n data = Buffer.from(data, encoding);\n }\n // Write into file.\n fd.writeSync(data, 0, data.length, 0);\n }\n finally {\n fd.closeSync();\n }\n }\n appendFile(fname, data, encoding, flag, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const fd = yield this.open(fname, flag, mode, cred);\n try {\n if (typeof data === 'string') {\n data = Buffer.from(data, encoding);\n }\n yield fd.write(data, 0, data.length, null);\n }\n finally {\n yield fd.close();\n }\n });\n }\n appendFileSync(fname, data, encoding, flag, mode, cred) {\n const fd = this.openSync(fname, flag, mode, cred);\n try {\n if (typeof data === 'string') {\n data = Buffer.from(data, encoding);\n }\n fd.writeSync(data, 0, data.length, null);\n }\n finally {\n fd.closeSync();\n }\n }\n chmod(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n chmodSync(p, mode, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n chown(p, new_uid, new_gid, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n chownSync(p, new_uid, new_gid, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n utimes(p, atime, mtime, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n utimesSync(p, atime, mtime, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n link(srcpath, dstpath, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n linkSync(srcpath, dstpath, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n symlink(srcpath, dstpath, type, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n symlinkSync(srcpath, dstpath, type, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n readlink(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n readlinkSync(p, cred) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n}\n_a = BaseFileSystem;\nBaseFileSystem.Name = _a.name;\n/**\n * Implements the asynchronous API in terms of the synchronous API.\n */\nexport class SynchronousFileSystem extends BaseFileSystem {\n get metadata() {\n return Object.assign(Object.assign({}, super.metadata), { synchronous: true });\n }\n access(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.accessSync(p, mode, cred);\n });\n }\n rename(oldPath, newPath, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.renameSync(oldPath, newPath, cred);\n });\n }\n stat(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.statSync(p, cred);\n });\n }\n open(p, flags, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.openSync(p, flags, mode, cred);\n });\n }\n unlink(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.unlinkSync(p, cred);\n });\n }\n rmdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.rmdirSync(p, cred);\n });\n }\n mkdir(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.mkdirSync(p, mode, cred);\n });\n }\n readdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.readdirSync(p, cred);\n });\n }\n chmod(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.chmodSync(p, mode, cred);\n });\n }\n chown(p, new_uid, new_gid, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.chownSync(p, new_uid, new_gid, cred);\n });\n }\n utimes(p, atime, mtime, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.utimesSync(p, atime, mtime, cred);\n });\n }\n link(srcpath, dstpath, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.linkSync(srcpath, dstpath, cred);\n });\n }\n symlink(srcpath, dstpath, type, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.symlinkSync(srcpath, dstpath, type, cred);\n });\n }\n readlink(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.readlinkSync(p, cred);\n });\n }\n}\n", "import { Stats, FileType } from './stats.js';\nimport { Buffer } from 'buffer';\n/**\n * Generic inode definition that can easily be serialized.\n */\nexport default class Inode {\n /**\n * Converts the buffer into an Inode.\n */\n static fromBuffer(buffer) {\n if (buffer === undefined) {\n throw new Error('NO');\n }\n return new Inode(buffer.toString('ascii', 38), buffer.readUInt32LE(0), buffer.readUInt16LE(4), buffer.readDoubleLE(6), buffer.readDoubleLE(14), buffer.readDoubleLE(22), buffer.readUInt32LE(30), buffer.readUInt32LE(34));\n }\n constructor(id, size, mode, atime, mtime, ctime, uid, gid) {\n this.id = id;\n this.size = size;\n this.mode = mode;\n this.atime = atime;\n this.mtime = mtime;\n this.ctime = ctime;\n this.uid = uid;\n this.gid = gid;\n }\n /**\n * Handy function that converts the Inode to a Node Stats object.\n */\n toStats() {\n return new Stats((this.mode & 0xf000) === FileType.DIRECTORY ? FileType.DIRECTORY : FileType.FILE, this.size, this.mode, this.atime, this.mtime, this.ctime, this.uid, this.gid);\n }\n /**\n * Get the size of this Inode, in bytes.\n */\n getSize() {\n // ASSUMPTION: ID is ASCII (1 byte per char).\n return 38 + this.id.length;\n }\n /**\n * Writes the inode into the start of the buffer.\n */\n toBuffer(buff = Buffer.alloc(this.getSize())) {\n buff.writeUInt32LE(this.size, 0);\n buff.writeUInt16LE(this.mode, 4);\n buff.writeDoubleLE(this.atime, 6);\n buff.writeDoubleLE(this.mtime, 14);\n buff.writeDoubleLE(this.ctime, 22);\n buff.writeUInt32LE(this.uid, 30);\n buff.writeUInt32LE(this.gid, 34);\n buff.write(this.id, 38, this.id.length, 'ascii');\n return buff;\n }\n /**\n * Updates the Inode using information from the stats object. Used by file\n * systems at sync time, e.g.:\n * - Program opens file and gets a File object.\n * - Program mutates file. File object is responsible for maintaining\n * metadata changes locally -- typically in a Stats object.\n * - Program closes file. File object's metadata changes are synced with the\n * file system.\n * @return True if any changes have occurred.\n */\n update(stats) {\n let hasChanged = false;\n if (this.size !== stats.size) {\n this.size = stats.size;\n hasChanged = true;\n }\n if (this.mode !== stats.mode) {\n this.mode = stats.mode;\n hasChanged = true;\n }\n const atimeMs = stats.atime.getTime();\n if (this.atime !== atimeMs) {\n this.atime = atimeMs;\n hasChanged = true;\n }\n const mtimeMs = stats.mtime.getTime();\n if (this.mtime !== mtimeMs) {\n this.mtime = mtimeMs;\n hasChanged = true;\n }\n const ctimeMs = stats.ctime.getTime();\n if (this.ctime !== ctimeMs) {\n this.ctime = ctimeMs;\n hasChanged = true;\n }\n if (this.uid !== stats.uid) {\n this.uid = stats.uid;\n hasChanged = true;\n }\n if (this.uid !== stats.uid) {\n this.uid = stats.uid;\n hasChanged = true;\n }\n return hasChanged;\n }\n // XXX: Copied from Stats. Should reconcile these two into something more\n // compact.\n /**\n * @return [Boolean] True if this item is a file.\n */\n isFile() {\n return (this.mode & 0xf000) === FileType.FILE;\n }\n /**\n * @return [Boolean] True if this item is a directory.\n */\n isDirectory() {\n return (this.mode & 0xf000) === FileType.DIRECTORY;\n }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ErrorCode, ApiError } from './ApiError.js';\nimport * as path from './emulation/path.js';\nimport { Buffer } from 'buffer';\n/**\n * Synchronous recursive makedir.\n * @internal\n */\nexport function mkdirpSync(p, mode, cred, fs) {\n if (!fs.existsSync(p, cred)) {\n mkdirpSync(path.dirname(p), mode, cred, fs);\n fs.mkdirSync(p, mode, cred);\n }\n}\n/*\n * Levenshtein distance, from the `js-levenshtein` NPM module.\n * Copied here to avoid complexity of adding another CommonJS module dependency.\n */\nfunction _min(d0, d1, d2, bx, ay) {\n return Math.min(d0 + 1, d1 + 1, d2 + 1, bx === ay ? d1 : d1 + 1);\n}\n/**\n * Calculates levenshtein distance.\n * @param a\n * @param b\n */\nfunction levenshtein(a, b) {\n if (a === b) {\n return 0;\n }\n if (a.length > b.length) {\n [a, b] = [b, a]; // Swap a and b\n }\n let la = a.length;\n let lb = b.length;\n // Trim common suffix\n while (la > 0 && a.charCodeAt(la - 1) === b.charCodeAt(lb - 1)) {\n la--;\n lb--;\n }\n let offset = 0;\n // Trim common prefix\n while (offset < la && a.charCodeAt(offset) === b.charCodeAt(offset)) {\n offset++;\n }\n la -= offset;\n lb -= offset;\n if (la === 0 || lb === 1) {\n return lb;\n }\n const vector = new Array(la << 1);\n for (let y = 0; y < la;) {\n vector[la + y] = a.charCodeAt(offset + y);\n vector[y] = ++y;\n }\n let x;\n let d0;\n let d1;\n let d2;\n let d3;\n for (x = 0; x + 3 < lb;) {\n const bx0 = b.charCodeAt(offset + (d0 = x));\n const bx1 = b.charCodeAt(offset + (d1 = x + 1));\n const bx2 = b.charCodeAt(offset + (d2 = x + 2));\n const bx3 = b.charCodeAt(offset + (d3 = x + 3));\n let dd = (x += 4);\n for (let y = 0; y < la;) {\n const ay = vector[la + y];\n const dy = vector[y];\n d0 = _min(dy, d0, d1, bx0, ay);\n d1 = _min(d0, d1, d2, bx1, ay);\n d2 = _min(d1, d2, d3, bx2, ay);\n dd = _min(d2, d3, dd, bx3, ay);\n vector[y++] = dd;\n d3 = d2;\n d2 = d1;\n d1 = d0;\n d0 = dy;\n }\n }\n let dd = 0;\n for (; x < lb;) {\n const bx0 = b.charCodeAt(offset + (d0 = x));\n dd = ++x;\n for (let y = 0; y < la; y++) {\n const dy = vector[y];\n vector[y] = dd = dy < d0 || dd < d0 ? (dy > dd ? dd + 1 : dy + 1) : bx0 === vector[la + y] ? d0 : d0 + 1;\n d0 = dy;\n }\n }\n return dd;\n}\n/**\n * Checks that the given options object is valid for the file system options.\n * @internal\n */\nexport function checkOptions(backend, opts) {\n return __awaiter(this, void 0, void 0, function* () {\n const optsInfo = backend.Options;\n const fsName = backend.Name;\n let pendingValidators = 0;\n let callbackCalled = false;\n let loopEnded = false;\n // Check for required options.\n for (const optName in optsInfo) {\n if (Object.prototype.hasOwnProperty.call(optsInfo, optName)) {\n const opt = optsInfo[optName];\n const providedValue = opts && opts[optName];\n if (providedValue === undefined || providedValue === null) {\n if (!opt.optional) {\n // Required option, not provided.\n // Any incorrect options provided? Which ones are close to the provided one?\n // (edit distance 5 === close)\n const incorrectOptions = Object.keys(opts)\n .filter(o => !(o in optsInfo))\n .map((a) => {\n return { str: a, distance: levenshtein(optName, a) };\n })\n .filter(o => o.distance < 5)\n .sort((a, b) => a.distance - b.distance);\n // Validators may be synchronous.\n if (callbackCalled) {\n return;\n }\n callbackCalled = true;\n throw new ApiError(ErrorCode.EINVAL, `[${fsName}] Required option '${optName}' not provided.${incorrectOptions.length > 0 ? ` You provided unrecognized option '${incorrectOptions[0].str}'; perhaps you meant to type '${optName}'.` : ''}\\nOption description: ${opt.description}`);\n }\n // Else: Optional option, not provided. That is OK.\n }\n else {\n // Option provided! Check type.\n let typeMatches = false;\n if (Array.isArray(opt.type)) {\n typeMatches = opt.type.indexOf(typeof providedValue) !== -1;\n }\n else {\n typeMatches = typeof providedValue === opt.type;\n }\n if (!typeMatches) {\n // Validators may be synchronous.\n if (callbackCalled) {\n return;\n }\n callbackCalled = true;\n throw new ApiError(ErrorCode.EINVAL, `[${fsName}] Value provided for option ${optName} is not the proper type. Expected ${Array.isArray(opt.type) ? `one of {${opt.type.join(', ')}}` : opt.type}, but received ${typeof providedValue}\\nOption description: ${opt.description}`);\n }\n else if (opt.validator) {\n pendingValidators++;\n try {\n yield opt.validator(providedValue);\n }\n catch (e) {\n if (!callbackCalled) {\n if (e) {\n callbackCalled = true;\n throw e;\n }\n pendingValidators--;\n if (pendingValidators === 0 && loopEnded) {\n return;\n }\n }\n }\n }\n // Otherwise: All good!\n }\n }\n }\n loopEnded = true;\n if (pendingValidators === 0 && !callbackCalled) {\n return;\n }\n });\n}\n/** Waits n ms. */\nexport function wait(ms) {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\n/**\n * Converts a callback into a promise. Assumes last parameter is the callback\n * @todo Look at changing resolve value from cbArgs[0] to include other callback arguments?\n */\nexport function toPromise(fn) {\n return function (...args) {\n return new Promise((resolve, reject) => {\n args.push((e, ...cbArgs) => {\n if (e) {\n reject(e);\n }\n else {\n resolve(cbArgs[0]);\n }\n });\n fn(...args);\n });\n };\n}\n/**\n * @internal\n */\nexport const setImmediate = typeof globalThis.setImmediate == 'function' ? globalThis.setImmediate : cb => setTimeout(cb, 0);\n/**\n * @internal\n */\nexport const ROOT_NODE_ID = '/';\n/**\n * Returns an empty directory node.\n * @internal\n */\nexport function getEmptyDirNode() {\n return Buffer.from('{}');\n}\n/**\n * Generates a random ID.\n * @internal\n */\nexport function randomUUID() {\n // From http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n", "import { dirname, basename, join, resolve, sep } from '../emulation/path.js';\nimport { ApiError, ErrorCode } from '../ApiError.js';\nimport { W_OK, R_OK } from '../emulation/constants.js';\nimport { FileFlag, PreloadFile } from '../file.js';\nimport { SynchronousFileSystem } from '../filesystem.js';\nimport Inode from '../inode.js';\nimport { FileType } from '../stats.js';\nimport { randomUUID, getEmptyDirNode, ROOT_NODE_ID } from '../utils.js';\n/**\n * A simple RW transaction for simple synchronous key-value stores.\n */\nexport class SimpleSyncRWTransaction {\n constructor(store) {\n this.store = store;\n /**\n * Stores data in the keys we modify prior to modifying them.\n * Allows us to roll back commits.\n */\n this.originalData = {};\n /**\n * List of keys modified in this transaction, if any.\n */\n this.modifiedKeys = [];\n }\n get(key) {\n const val = this.store.get(key);\n this.stashOldValue(key, val);\n return val;\n }\n put(key, data, overwrite) {\n this.markModified(key);\n return this.store.put(key, data, overwrite);\n }\n del(key) {\n this.markModified(key);\n this.store.del(key);\n }\n commit() {\n /* NOP */\n }\n abort() {\n // Rollback old values.\n for (const key of this.modifiedKeys) {\n const value = this.originalData[key];\n if (!value) {\n // Key didn't exist.\n this.store.del(key);\n }\n else {\n // Key existed. Store old value.\n this.store.put(key, value, true);\n }\n }\n }\n _has(key) {\n return Object.prototype.hasOwnProperty.call(this.originalData, key);\n }\n /**\n * Stashes given key value pair into `originalData` if it doesn't already\n * exist. Allows us to stash values the program is requesting anyway to\n * prevent needless `get` requests if the program modifies the data later\n * on during the transaction.\n */\n stashOldValue(key, value) {\n // Keep only the earliest value in the transaction.\n if (!this._has(key)) {\n this.originalData[key] = value;\n }\n }\n /**\n * Marks the given key as modified, and stashes its value if it has not been\n * stashed already.\n */\n markModified(key) {\n if (this.modifiedKeys.indexOf(key) === -1) {\n this.modifiedKeys.push(key);\n if (!this._has(key)) {\n this.originalData[key] = this.store.get(key);\n }\n }\n }\n}\nexport class SyncKeyValueFile extends PreloadFile {\n constructor(_fs, _path, _flag, _stat, contents) {\n super(_fs, _path, _flag, _stat, contents);\n }\n syncSync() {\n if (this.isDirty()) {\n this._fs._syncSync(this.getPath(), this.getBuffer(), this.getStats());\n this.resetDirty();\n }\n }\n closeSync() {\n this.syncSync();\n }\n}\n/**\n * A \"Synchronous key-value file system\". Stores data to/retrieves data from an\n * underlying key-value store.\n *\n * We use a unique ID for each node in the file system. The root node has a\n * fixed ID.\n * @todo Introduce Node ID caching.\n * @todo Check modes.\n */\nexport class SyncKeyValueFileSystem extends SynchronousFileSystem {\n static isAvailable() {\n return true;\n }\n constructor(options) {\n super();\n this.store = options.store;\n // INVARIANT: Ensure that the root exists.\n this.makeRootDirectory();\n }\n getName() {\n return this.store.name();\n }\n isReadOnly() {\n return false;\n }\n supportsSymlinks() {\n return false;\n }\n supportsProps() {\n return true;\n }\n supportsSynch() {\n return true;\n }\n /**\n * Delete all contents stored in the file system.\n */\n empty() {\n this.store.clear();\n // INVARIANT: Root always exists.\n this.makeRootDirectory();\n }\n accessSync(p, mode, cred) {\n const tx = this.store.beginTransaction('readonly'), node = this.findINode(tx, p);\n if (!node.toStats().hasAccess(mode, cred)) {\n throw ApiError.EACCES(p);\n }\n }\n renameSync(oldPath, newPath, cred) {\n const tx = this.store.beginTransaction('readwrite'), oldParent = dirname(oldPath), oldName = basename(oldPath), newParent = dirname(newPath), newName = basename(newPath), \n // Remove oldPath from parent's directory listing.\n oldDirNode = this.findINode(tx, oldParent), oldDirList = this.getDirListing(tx, oldParent, oldDirNode);\n if (!oldDirNode.toStats().hasAccess(W_OK, cred)) {\n throw ApiError.EACCES(oldPath);\n }\n if (!oldDirList[oldName]) {\n throw ApiError.ENOENT(oldPath);\n }\n const nodeId = oldDirList[oldName];\n delete oldDirList[oldName];\n // Invariant: Can't move a folder inside itself.\n // This funny little hack ensures that the check passes only if oldPath\n // is a subpath of newParent. We append '/' to avoid matching folders that\n // are a substring of the bottom-most folder in the path.\n if ((newParent + '/').indexOf(oldPath + '/') === 0) {\n throw new ApiError(ErrorCode.EBUSY, oldParent);\n }\n // Add newPath to parent's directory listing.\n let newDirNode, newDirList;\n if (newParent === oldParent) {\n // Prevent us from re-grabbing the same directory listing, which still\n // contains oldName.\n newDirNode = oldDirNode;\n newDirList = oldDirList;\n }\n else {\n newDirNode = this.findINode(tx, newParent);\n newDirList = this.getDirListing(tx, newParent, newDirNode);\n }\n if (newDirList[newName]) {\n // If it's a file, delete it.\n const newNameNode = this.getINode(tx, newPath, newDirList[newName]);\n if (newNameNode.isFile()) {\n try {\n tx.del(newNameNode.id);\n tx.del(newDirList[newName]);\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n }\n else {\n // If it's a directory, throw a permissions error.\n throw ApiError.EPERM(newPath);\n }\n }\n newDirList[newName] = nodeId;\n // Commit the two changed directory listings.\n try {\n tx.put(oldDirNode.id, Buffer.from(JSON.stringify(oldDirList)), true);\n tx.put(newDirNode.id, Buffer.from(JSON.stringify(newDirList)), true);\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n tx.commit();\n }\n statSync(p, cred) {\n // Get the inode to the item, convert it into a Stats object.\n const stats = this.findINode(this.store.beginTransaction('readonly'), p).toStats();\n if (!stats.hasAccess(R_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n return stats;\n }\n createFileSync(p, flag, mode, cred) {\n const tx = this.store.beginTransaction('readwrite'), data = Buffer.alloc(0), newFile = this.commitNewFile(tx, p, FileType.FILE, mode, cred, data);\n // Open the file.\n return new SyncKeyValueFile(this, p, flag, newFile.toStats(), data);\n }\n openFileSync(p, flag, cred) {\n const tx = this.store.beginTransaction('readonly'), node = this.findINode(tx, p), data = tx.get(node.id);\n if (!node.toStats().hasAccess(flag.getMode(), cred)) {\n throw ApiError.EACCES(p);\n }\n if (data === undefined) {\n throw ApiError.ENOENT(p);\n }\n return new SyncKeyValueFile(this, p, flag, node.toStats(), data);\n }\n unlinkSync(p, cred) {\n this.removeEntry(p, false, cred);\n }\n rmdirSync(p, cred) {\n // Check first if directory is empty.\n if (this.readdirSync(p, cred).length > 0) {\n throw ApiError.ENOTEMPTY(p);\n }\n else {\n this.removeEntry(p, true, cred);\n }\n }\n mkdirSync(p, mode, cred) {\n const tx = this.store.beginTransaction('readwrite'), data = Buffer.from('{}');\n this.commitNewFile(tx, p, FileType.DIRECTORY, mode, cred, data);\n }\n readdirSync(p, cred) {\n const tx = this.store.beginTransaction('readonly');\n const node = this.findINode(tx, p);\n if (!node.toStats().hasAccess(R_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n return Object.keys(this.getDirListing(tx, p, node));\n }\n chmodSync(p, mode, cred) {\n const fd = this.openFileSync(p, FileFlag.getFileFlag('r+'), cred);\n fd.chmodSync(mode);\n }\n chownSync(p, new_uid, new_gid, cred) {\n const fd = this.openFileSync(p, FileFlag.getFileFlag('r+'), cred);\n fd.chownSync(new_uid, new_gid);\n }\n _syncSync(p, data, stats) {\n // @todo Ensure mtime updates properly, and use that to determine if a data\n // update is required.\n const tx = this.store.beginTransaction('readwrite'), \n // We use the _findInode helper because we actually need the INode id.\n fileInodeId = this._findINode(tx, dirname(p), basename(p)), fileInode = this.getINode(tx, p, fileInodeId), inodeChanged = fileInode.update(stats);\n try {\n // Sync data.\n tx.put(fileInode.id, data, true);\n // Sync metadata.\n if (inodeChanged) {\n tx.put(fileInodeId, fileInode.toBuffer(), true);\n }\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n tx.commit();\n }\n /**\n * Checks if the root directory exists. Creates it if it doesn't.\n */\n makeRootDirectory() {\n const tx = this.store.beginTransaction('readwrite');\n if (tx.get(ROOT_NODE_ID) === undefined) {\n // Create new inode.\n const currTime = new Date().getTime(), \n // Mode 0666, owned by root:root\n dirInode = new Inode(randomUUID(), 4096, 511 | FileType.DIRECTORY, currTime, currTime, currTime, 0, 0);\n // If the root doesn't exist, the first random ID shouldn't exist,\n // either.\n tx.put(dirInode.id, getEmptyDirNode(), false);\n tx.put(ROOT_NODE_ID, dirInode.toBuffer(), false);\n tx.commit();\n }\n }\n /**\n * Helper function for findINode.\n * @param parent The parent directory of the file we are attempting to find.\n * @param filename The filename of the inode we are attempting to find, minus\n * the parent.\n * @return string The ID of the file's inode in the file system.\n */\n _findINode(tx, parent, filename, visited = new Set()) {\n const currentPath = join(parent, filename);\n if (visited.has(currentPath)) {\n throw new ApiError(ErrorCode.EIO, 'Infinite loop detected while finding inode', currentPath);\n }\n visited.add(currentPath);\n const readDirectory = (inode) => {\n // Get the root's directory listing.\n const dirList = this.getDirListing(tx, parent, inode);\n // Get the file's ID.\n if (dirList[filename]) {\n return dirList[filename];\n }\n else {\n throw ApiError.ENOENT(resolve(parent, filename));\n }\n };\n if (parent === '/') {\n if (filename === '') {\n // Return the root's ID.\n return ROOT_NODE_ID;\n }\n else {\n // Find the item in the root node.\n return readDirectory(this.getINode(tx, parent, ROOT_NODE_ID));\n }\n }\n else {\n return readDirectory(this.getINode(tx, parent + sep + filename, this._findINode(tx, dirname(parent), basename(parent), visited)));\n }\n }\n /**\n * Finds the Inode of the given path.\n * @param p The path to look up.\n * @return The Inode of the path p.\n * @todo memoize/cache\n */\n findINode(tx, p) {\n return this.getINode(tx, p, this._findINode(tx, dirname(p), basename(p)));\n }\n /**\n * Given the ID of a node, retrieves the corresponding Inode.\n * @param tx The transaction to use.\n * @param p The corresponding path to the file (used for error messages).\n * @param id The ID to look up.\n */\n getINode(tx, p, id) {\n const inode = tx.get(id);\n if (inode === undefined) {\n throw ApiError.ENOENT(p);\n }\n return Inode.fromBuffer(inode);\n }\n /**\n * Given the Inode of a directory, retrieves the corresponding directory\n * listing.\n */\n getDirListing(tx, p, inode) {\n if (!inode.isDirectory()) {\n throw ApiError.ENOTDIR(p);\n }\n const data = tx.get(inode.id);\n if (data === undefined) {\n throw ApiError.ENOENT(p);\n }\n return JSON.parse(data.toString());\n }\n /**\n * Creates a new node under a random ID. Retries 5 times before giving up in\n * the exceedingly unlikely chance that we try to reuse a random GUID.\n * @return The GUID that the data was stored under.\n */\n addNewNode(tx, data) {\n const retries = 0;\n let currId;\n while (retries < 5) {\n try {\n currId = randomUUID();\n tx.put(currId, data, false);\n return currId;\n }\n catch (e) {\n // Ignore and reroll.\n }\n }\n throw new ApiError(ErrorCode.EIO, 'Unable to commit data to key-value store.');\n }\n /**\n * Commits a new file (well, a FILE or a DIRECTORY) to the file system with\n * the given mode.\n * Note: This will commit the transaction.\n * @param p The path to the new file.\n * @param type The type of the new file.\n * @param mode The mode to create the new file with.\n * @param data The data to store at the file's data node.\n * @return The Inode for the new file.\n */\n commitNewFile(tx, p, type, mode, cred, data) {\n const parentDir = dirname(p), fname = basename(p), parentNode = this.findINode(tx, parentDir), dirListing = this.getDirListing(tx, parentDir, parentNode), currTime = new Date().getTime();\n //Check that the creater has correct access\n if (!parentNode.toStats().hasAccess(0b0100 /* Write */, cred)) {\n throw ApiError.EACCES(p);\n }\n // Invariant: The root always exists.\n // If we don't check this prior to taking steps below, we will create a\n // file with name '' in root should p == '/'.\n if (p === '/') {\n throw ApiError.EEXIST(p);\n }\n // Check if file already exists.\n if (dirListing[fname]) {\n throw ApiError.EEXIST(p);\n }\n let fileNode;\n try {\n // Commit data.\n const dataId = this.addNewNode(tx, data);\n fileNode = new Inode(dataId, data.length, mode | type, currTime, currTime, currTime, cred.uid, cred.gid);\n // Commit file node.\n const fileNodeId = this.addNewNode(tx, fileNode.toBuffer());\n // Update and commit parent directory listing.\n dirListing[fname] = fileNodeId;\n tx.put(parentNode.id, Buffer.from(JSON.stringify(dirListing)), true);\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n tx.commit();\n return fileNode;\n }\n /**\n * Remove all traces of the given path from the file system.\n * @param p The path to remove from the file system.\n * @param isDir Does the path belong to a directory, or a file?\n * @todo Update mtime.\n */\n removeEntry(p, isDir, cred) {\n const tx = this.store.beginTransaction('readwrite'), parent = dirname(p), parentNode = this.findINode(tx, parent), parentListing = this.getDirListing(tx, parent, parentNode), fileName = basename(p);\n if (!parentListing[fileName]) {\n throw ApiError.ENOENT(p);\n }\n const fileNodeId = parentListing[fileName];\n // Get file inode.\n const fileNode = this.getINode(tx, p, fileNodeId);\n if (!fileNode.toStats().hasAccess(W_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n // Remove from directory listing of parent.\n delete parentListing[fileName];\n if (!isDir && fileNode.isDirectory()) {\n throw ApiError.EISDIR(p);\n }\n else if (isDir && !fileNode.isDirectory()) {\n throw ApiError.ENOTDIR(p);\n }\n try {\n // Delete data.\n tx.del(fileNode.id);\n // Delete node.\n tx.del(fileNodeId);\n // Update directory listing.\n tx.put(parentNode.id, Buffer.from(JSON.stringify(parentListing)), true);\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n // Success.\n tx.commit();\n }\n}\n", "import { checkOptions } from '../utils.js';\nexport function CreateBackend(options, cb) {\n cb = typeof options === 'function' ? options : cb;\n checkOptions(this, options);\n const fs = new this(typeof options === 'function' ? {} : options);\n // Promise\n if (typeof cb != 'function') {\n return fs.whenReady();\n }\n // Callback\n fs.whenReady()\n .then(fs => cb(null, fs))\n .catch(err => cb(err));\n}\n", "var _a;\nimport { SimpleSyncRWTransaction, SyncKeyValueFileSystem } from './SyncStore.js';\nimport { CreateBackend } from './backend.js';\n/**\n * A simple in-memory key-value store backed by a JavaScript object.\n */\nexport class InMemoryStore {\n constructor() {\n this.store = new Map();\n }\n name() {\n return InMemoryFileSystem.Name;\n }\n clear() {\n this.store.clear();\n }\n beginTransaction(type) {\n return new SimpleSyncRWTransaction(this);\n }\n get(key) {\n return this.store.get(key);\n }\n put(key, data, overwrite) {\n if (!overwrite && this.store.has(key)) {\n return false;\n }\n this.store.set(key, data);\n return true;\n }\n del(key) {\n this.store.delete(key);\n }\n}\n/**\n * A simple in-memory file system backed by an InMemoryStore.\n * Files are not persisted across page loads.\n */\nexport class InMemoryFileSystem extends SyncKeyValueFileSystem {\n constructor() {\n super({ store: new InMemoryStore() });\n }\n}\n_a = InMemoryFileSystem;\nInMemoryFileSystem.Name = 'InMemory';\nInMemoryFileSystem.Create = CreateBackend.bind(_a);\nInMemoryFileSystem.Options = {};\n", "// Utilities and shared data\nimport { resolve } from './path.js';\nimport { ApiError, ErrorCode } from '../ApiError.js';\nimport { Cred } from '../cred.js';\n//import { BackendConstructor } from '../backends.js';\nimport { InMemoryFileSystem } from '../backends/InMemory.js';\n/**\n * converts Date or number to a fractional UNIX timestamp\n * Grabbed from NodeJS sources (lib/fs.js)\n */\nexport function _toUnixTimestamp(time) {\n if (typeof time === 'number') {\n return time;\n }\n else if (time instanceof Date) {\n return time.getTime() / 1000;\n }\n throw new Error('Cannot parse time: ' + time);\n}\nexport function normalizeMode(mode, def) {\n switch (typeof mode) {\n case 'number':\n // (path, flag, mode, cb?)\n return mode;\n case 'string':\n // (path, flag, modeString, cb?)\n const trueMode = parseInt(mode, 8);\n if (!isNaN(trueMode)) {\n return trueMode;\n }\n // Invalid string.\n return def;\n default:\n return def;\n }\n}\nexport function normalizeTime(time) {\n if (time instanceof Date) {\n return time;\n }\n if (typeof time === 'number') {\n return new Date(time * 1000);\n }\n throw new ApiError(ErrorCode.EINVAL, `Invalid time.`);\n}\nexport function normalizePath(p) {\n // Node doesn't allow null characters in paths.\n if (p.indexOf('\\u0000') >= 0) {\n throw new ApiError(ErrorCode.EINVAL, 'Path must be a string without null bytes.');\n }\n if (p === '') {\n throw new ApiError(ErrorCode.EINVAL, 'Path must not be empty.');\n }\n p = p.replaceAll(/\\/+/g, '/');\n return resolve(p);\n}\nexport function normalizeOptions(options, defEnc, defFlag, defMode) {\n // typeof null === 'object' so special-case handing is needed.\n switch (options === null ? 'null' : typeof options) {\n case 'object':\n return {\n encoding: typeof options['encoding'] !== 'undefined' ? options['encoding'] : defEnc,\n flag: typeof options['flag'] !== 'undefined' ? options['flag'] : defFlag,\n mode: normalizeMode(options['mode'], defMode),\n };\n case 'string':\n return {\n encoding: options,\n flag: defFlag,\n mode: defMode,\n };\n case 'null':\n case 'undefined':\n case 'function':\n return {\n encoding: defEnc,\n flag: defFlag,\n mode: defMode,\n };\n default:\n throw new TypeError(`\"options\" must be a string or an object, got ${typeof options} instead.`);\n }\n}\nexport function nop() {\n // do nothing\n}\n// credentials\nexport let cred = Cred.Root;\nexport function setCred(val) {\n cred = val;\n}\n// descriptors\nexport const fdMap = new Map();\nlet nextFd = 100;\nexport function getFdForFile(file) {\n const fd = nextFd++;\n fdMap.set(fd, file);\n return fd;\n}\nexport function fd2file(fd) {\n if (!fdMap.has(fd)) {\n throw new ApiError(ErrorCode.EBADF, 'Invalid file descriptor.');\n }\n return fdMap.get(fd);\n}\nexport const mounts = new Map();\n/*\nSet a default root.\nThere is a very small but not 0 change that initialize() will try to unmount the default before it is mounted.\nThis can be fixed by using a top-level await, which is not done to maintain ES6 compatibility.\n*/\nInMemoryFileSystem.Create().then(fs => mount('/', fs));\n/**\n * Gets the file system mounted at `mountPoint`\n */\nexport function getMount(mountPoint) {\n return mounts.get(mountPoint);\n}\n/**\n * Gets an object of mount points (keys) and filesystems (values)\n */\nexport function getMounts() {\n return Object.fromEntries(mounts.entries());\n}\n/**\n * Mounts the file system at the given mount point.\n */\nexport function mount(mountPoint, fs) {\n if (mountPoint[0] !== '/') {\n mountPoint = '/' + mountPoint;\n }\n mountPoint = resolve(mountPoint);\n if (mounts.has(mountPoint)) {\n throw new ApiError(ErrorCode.EINVAL, 'Mount point ' + mountPoint + ' is already in use.');\n }\n mounts.set(mountPoint, fs);\n}\n/**\n * Unmounts the file system at the given mount point.\n */\nexport function umount(mountPoint) {\n if (mountPoint[0] !== '/') {\n mountPoint = `/${mountPoint}`;\n }\n mountPoint = resolve(mountPoint);\n if (!mounts.has(mountPoint)) {\n throw new ApiError(ErrorCode.EINVAL, 'Mount point ' + mountPoint + ' is already unmounted.');\n }\n mounts.delete(mountPoint);\n}\n/**\n * Gets the internal FileSystem for the path, then returns it along with the path relative to the FS' root\n */\nexport function resolveFS(path) {\n const sortedMounts = [...mounts].sort((a, b) => (a[0].length > b[0].length ? -1 : 1)); // decending order of the string length\n for (const [mountPoint, fs] of sortedMounts) {\n // We know path is normalized, so it would be a substring of the mount point.\n if (mountPoint.length <= path.length && path.startsWith(mountPoint)) {\n path = path.slice(mountPoint.length > 1 ? mountPoint.length : 0); // Resolve the path relative to the mount point\n if (path === '') {\n path = '/';\n }\n return { fs, path, mountPoint };\n }\n }\n throw new ApiError(ErrorCode.EIO, 'BrowserFS not initialized with a file system');\n}\n/**\n * Reverse maps the paths in text from the mounted FileSystem to the global path\n */\nexport function fixPaths(text, paths) {\n for (const [from, to] of Object.entries(paths)) {\n text = text.replaceAll(from, to);\n }\n return text;\n}\nexport function fixError(e, paths) {\n e.stack = fixPaths(e.stack, paths);\n e.message = fixPaths(e.message, paths);\n return e;\n}\nexport function initialize(mountMapping) {\n if (mountMapping['/']) {\n umount('/');\n }\n for (const [point, fs] of Object.entries(mountMapping)) {\n const FS = fs.constructor;\n if (!FS.isAvailable()) {\n throw new ApiError(ErrorCode.EINVAL, `Can not mount \"${point}\" since the filesystem is unavailable.`);\n }\n mount(point, fs);\n }\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ApiError, ErrorCode } from './ApiError.js';\nimport { Stats } from './stats.js';\nimport { getMount } from './emulation/shared.js';\nimport { Buffer } from 'buffer';\nexport var ActionType;\n(function (ActionType) {\n // Indicates that the code should not do anything.\n ActionType[ActionType[\"NOP\"] = 0] = \"NOP\";\n // Indicates that the code should throw an exception.\n ActionType[ActionType[\"THROW_EXCEPTION\"] = 1] = \"THROW_EXCEPTION\";\n // Indicates that the code should truncate the file, but only if it is a file.\n ActionType[ActionType[\"TRUNCATE_FILE\"] = 2] = \"TRUNCATE_FILE\";\n // Indicates that the code should create the file.\n ActionType[ActionType[\"CREATE_FILE\"] = 3] = \"CREATE_FILE\";\n})(ActionType = ActionType || (ActionType = {}));\n/**\n * Represents one of the following file flags. A convenience object.\n *\n * * `'r'` - Open file for reading. An exception occurs if the file does not exist.\n * * `'r+'` - Open file for reading and writing. An exception occurs if the file does not exist.\n * * `'rs'` - Open file for reading in synchronous mode. Instructs the filesystem to not cache writes.\n * * `'rs+'` - Open file for reading and writing, and opens the file in synchronous mode.\n * * `'w'` - Open file for writing. The file is created (if it does not exist) or truncated (if it exists).\n * * `'wx'` - Like 'w' but opens the file in exclusive mode.\n * * `'w+'` - Open file for reading and writing. The file is created (if it does not exist) or truncated (if it exists).\n * * `'wx+'` - Like 'w+' but opens the file in exclusive mode.\n * * `'a'` - Open file for appending. The file is created if it does not exist.\n * * `'ax'` - Like 'a' but opens the file in exclusive mode.\n * * `'a+'` - Open file for reading and appending. The file is created if it does not exist.\n * * `'ax+'` - Like 'a+' but opens the file in exclusive mode.\n *\n * Exclusive mode ensures that the file path is newly created.\n */\nexport class FileFlag {\n /**\n * Get an object representing the given file flag.\n * @param modeStr The string representing the flag\n * @return The FileFlag object representing the flag\n * @throw when the flag string is invalid\n */\n static getFileFlag(flagStr) {\n // Check cache first.\n if (!FileFlag.flagCache.has(flagStr)) {\n FileFlag.flagCache.set(flagStr, new FileFlag(flagStr));\n }\n return FileFlag.flagCache.get(flagStr);\n }\n /**\n * This should never be called directly.\n * @param modeStr The string representing the mode\n * @throw when the mode string is invalid\n */\n constructor(flagStr) {\n this.flagStr = flagStr;\n if (FileFlag.validFlagStrs.indexOf(flagStr) < 0) {\n throw new ApiError(ErrorCode.EINVAL, 'Invalid flag: ' + flagStr);\n }\n }\n /**\n * Get the underlying flag string for this flag.\n */\n getFlagString() {\n return this.flagStr;\n }\n /**\n * Get the equivalent mode (0b0xxx: read, write, execute)\n * Note: Execute will always be 0\n */\n getMode() {\n let mode = 0;\n mode <<= 1;\n mode += +this.isReadable();\n mode <<= 1;\n mode += +this.isWriteable();\n mode <<= 1;\n return mode;\n }\n /**\n * Returns true if the file is readable.\n */\n isReadable() {\n return this.flagStr.indexOf('r') !== -1 || this.flagStr.indexOf('+') !== -1;\n }\n /**\n * Returns true if the file is writeable.\n */\n isWriteable() {\n return this.flagStr.indexOf('w') !== -1 || this.flagStr.indexOf('a') !== -1 || this.flagStr.indexOf('+') !== -1;\n }\n /**\n * Returns true if the file mode should truncate.\n */\n isTruncating() {\n return this.flagStr.indexOf('w') !== -1;\n }\n /**\n * Returns true if the file is appendable.\n */\n isAppendable() {\n return this.flagStr.indexOf('a') !== -1;\n }\n /**\n * Returns true if the file is open in synchronous mode.\n */\n isSynchronous() {\n return this.flagStr.indexOf('s') !== -1;\n }\n /**\n * Returns true if the file is open in exclusive mode.\n */\n isExclusive() {\n return this.flagStr.indexOf('x') !== -1;\n }\n /**\n * Returns one of the static fields on this object that indicates the\n * appropriate response to the path existing.\n */\n pathExistsAction() {\n if (this.isExclusive()) {\n return ActionType.THROW_EXCEPTION;\n }\n else if (this.isTruncating()) {\n return ActionType.TRUNCATE_FILE;\n }\n else {\n return ActionType.NOP;\n }\n }\n /**\n * Returns one of the static fields on this object that indicates the\n * appropriate response to the path not existing.\n */\n pathNotExistsAction() {\n if ((this.isWriteable() || this.isAppendable()) && this.flagStr !== 'r+') {\n return ActionType.CREATE_FILE;\n }\n else {\n return ActionType.THROW_EXCEPTION;\n }\n }\n}\n// Contains cached FileMode instances.\nFileFlag.flagCache = new Map();\n// Array of valid mode strings.\nFileFlag.validFlagStrs = ['r', 'r+', 'rs', 'rs+', 'w', 'wx', 'w+', 'wx+', 'a', 'ax', 'a+', 'ax+'];\n/**\n * Base class that contains shared implementations of functions for the file\n * object.\n */\nexport class BaseFile {\n sync() {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n syncSync() {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n datasync() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.sync();\n });\n }\n datasyncSync() {\n return this.syncSync();\n }\n chown(uid, gid) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n chownSync(uid, gid) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n chmod(mode) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n chmodSync(mode) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n utimes(atime, mtime) {\n return __awaiter(this, void 0, void 0, function* () {\n throw new ApiError(ErrorCode.ENOTSUP);\n });\n }\n utimesSync(atime, mtime) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n}\n/**\n * An implementation of the File interface that operates on a file that is\n * completely in-memory. PreloadFiles are backed by a Buffer.\n *\n * This is also an abstract class, as it lacks an implementation of 'sync' and\n * 'close'. Each filesystem that wishes to use this file representation must\n * extend this class and implement those two methods.\n * @todo 'close' lever that disables functionality once closed.\n */\nexport class PreloadFile extends BaseFile {\n /**\n * Creates a file with the given path and, optionally, the given contents. Note\n * that, if contents is specified, it will be mutated by the file!\n * @param _fs The file system that created the file.\n * @param _path\n * @param _mode The mode that the file was opened using.\n * Dictates permissions and where the file pointer starts.\n * @param _stat The stats object for the given file.\n * PreloadFile will mutate this object. Note that this object must contain\n * the appropriate mode that the file was opened as.\n * @param contents A buffer containing the entire\n * contents of the file. PreloadFile will mutate this buffer. If not\n * specified, we assume it is a new file.\n */\n constructor(_fs, _path, _flag, _stat, contents) {\n super();\n this._pos = 0;\n this._dirty = false;\n this._fs = _fs;\n this._path = _path;\n this._flag = _flag;\n this._stat = _stat;\n this._buffer = contents ? contents : Buffer.alloc(0);\n // Note: This invariant is *not* maintained once the file starts getting\n // modified.\n // Note: Only actually matters if file is readable, as writeable modes may\n // truncate/append to file.\n if (this._stat.size !== this._buffer.length && this._flag.isReadable()) {\n throw new Error(`Invalid buffer: Buffer is ${this._buffer.length} long, yet Stats object specifies that file is ${this._stat.size} long.`);\n }\n }\n /**\n * NONSTANDARD: Get the underlying buffer for this file. !!DO NOT MUTATE!! Will mess up dirty tracking.\n */\n getBuffer() {\n return this._buffer;\n }\n /**\n * NONSTANDARD: Get underlying stats for this file. !!DO NOT MUTATE!!\n */\n getStats() {\n return this._stat;\n }\n getFlag() {\n return this._flag;\n }\n /**\n * Get the path to this file.\n * @return [String] The path to the file.\n */\n getPath() {\n return this._path;\n }\n /**\n * Get the current file position.\n *\n * We emulate the following bug mentioned in the Node documentation:\n * > On Linux, positional writes don't work when the file is opened in append\n * mode. The kernel ignores the position argument and always appends the data\n * to the end of the file.\n * @return [Number] The current file position.\n */\n getPos() {\n if (this._flag.isAppendable()) {\n return this._stat.size;\n }\n return this._pos;\n }\n /**\n * Advance the current file position by the indicated number of positions.\n * @param [Number] delta\n */\n advancePos(delta) {\n return (this._pos += delta);\n }\n /**\n * Set the file position.\n * @param [Number] newPos\n */\n setPos(newPos) {\n return (this._pos = newPos);\n }\n /**\n * **Core**: Asynchronous sync. Must be implemented by subclasses of this\n * class.\n * @param [Function(BrowserFS.ApiError)] cb\n */\n sync() {\n return __awaiter(this, void 0, void 0, function* () {\n this.syncSync();\n });\n }\n /**\n * **Core**: Synchronous sync.\n */\n syncSync() {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n /**\n * **Core**: Asynchronous close. Must be implemented by subclasses of this\n * class.\n * @param [Function(BrowserFS.ApiError)] cb\n */\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n this.closeSync();\n });\n }\n /**\n * **Core**: Synchronous close.\n */\n closeSync() {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n /**\n * Asynchronous `stat`.\n * @param [Function(BrowserFS.ApiError, BrowserFS.node.fs.Stats)] cb\n */\n stat() {\n return __awaiter(this, void 0, void 0, function* () {\n return Stats.clone(this._stat);\n });\n }\n /**\n * Synchronous `stat`.\n */\n statSync() {\n return Stats.clone(this._stat);\n }\n /**\n * Asynchronous truncate.\n * @param [Number] len\n * @param [Function(BrowserFS.ApiError)] cb\n */\n truncate(len) {\n this.truncateSync(len);\n if (this._flag.isSynchronous() && !getMount('/').metadata.synchronous) {\n return this.sync();\n }\n }\n /**\n * Synchronous truncate.\n * @param [Number] len\n */\n truncateSync(len) {\n this._dirty = true;\n if (!this._flag.isWriteable()) {\n throw new ApiError(ErrorCode.EPERM, 'File not opened with a writeable mode.');\n }\n this._stat.mtimeMs = Date.now();\n if (len > this._buffer.length) {\n const buf = Buffer.alloc(len - this._buffer.length, 0);\n // Write will set @_stat.size for us.\n this.writeSync(buf, 0, buf.length, this._buffer.length);\n if (this._flag.isSynchronous() && getMount('/').metadata.synchronous) {\n this.syncSync();\n }\n return;\n }\n this._stat.size = len;\n // Truncate buffer to 'len'.\n const newBuff = Buffer.alloc(len);\n this._buffer.copy(newBuff, 0, 0, len);\n this._buffer = newBuff;\n if (this._flag.isSynchronous() && getMount('/').metadata.synchronous) {\n this.syncSync();\n }\n }\n /**\n * Write buffer to the file.\n * Note that it is unsafe to use fs.write multiple times on the same file\n * without waiting for the callback.\n * @param [BrowserFS.node.Buffer] buffer Buffer containing the data to write to\n * the file.\n * @param [Number] offset Offset in the buffer to start reading data from.\n * @param [Number] length The amount of bytes to write to the file.\n * @param [Number] position Offset from the beginning of the file where this\n * data should be written. If position is null, the data will be written at\n * the current position.\n * @param [Function(BrowserFS.ApiError, Number, BrowserFS.node.Buffer)]\n * cb The number specifies the number of bytes written into the file.\n */\n write(buffer, offset, length, position) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.writeSync(buffer, offset, length, position);\n });\n }\n /**\n * Write buffer to the file.\n * Note that it is unsafe to use fs.writeSync multiple times on the same file\n * without waiting for the callback.\n * @param [BrowserFS.node.Buffer] buffer Buffer containing the data to write to\n * the file.\n * @param [Number] offset Offset in the buffer to start reading data from.\n * @param [Number] length The amount of bytes to write to the file.\n * @param [Number] position Offset from the beginning of the file where this\n * data should be written. If position is null, the data will be written at\n * the current position.\n * @return [Number]\n */\n writeSync(buffer, offset, length, position) {\n this._dirty = true;\n if (position === undefined || position === null) {\n position = this.getPos();\n }\n if (!this._flag.isWriteable()) {\n throw new ApiError(ErrorCode.EPERM, 'File not opened with a writeable mode.');\n }\n const endFp = position + length;\n if (endFp > this._stat.size) {\n this._stat.size = endFp;\n if (endFp > this._buffer.length) {\n // Extend the buffer!\n const newBuff = Buffer.alloc(endFp);\n this._buffer.copy(newBuff);\n this._buffer = newBuff;\n }\n }\n const len = buffer.copy(this._buffer, position, offset, offset + length);\n this._stat.mtimeMs = Date.now();\n if (this._flag.isSynchronous()) {\n this.syncSync();\n return len;\n }\n this.setPos(position + len);\n return len;\n }\n /**\n * Read data from the file.\n * @param [BrowserFS.node.Buffer] buffer The buffer that the data will be\n * written to.\n * @param [Number] offset The offset within the buffer where writing will\n * start.\n * @param [Number] length An integer specifying the number of bytes to read.\n * @param [Number] position An integer specifying where to begin reading from\n * in the file. If position is null, data will be read from the current file\n * position.\n * @param [Function(BrowserFS.ApiError, Number, BrowserFS.node.Buffer)] cb The\n * number is the number of bytes read\n */\n read(buffer, offset, length, position) {\n return __awaiter(this, void 0, void 0, function* () {\n return { bytesRead: this.readSync(buffer, offset, length, position), buffer };\n });\n }\n /**\n * Read data from the file.\n * @param [BrowserFS.node.Buffer] buffer The buffer that the data will be\n * written to.\n * @param [Number] offset The offset within the buffer where writing will\n * start.\n * @param [Number] length An integer specifying the number of bytes to read.\n * @param [Number] position An integer specifying where to begin reading from\n * in the file. If position is null, data will be read from the current file\n * position.\n * @return [Number]\n */\n readSync(buffer, offset, length, position) {\n if (!this._flag.isReadable()) {\n throw new ApiError(ErrorCode.EPERM, 'File not opened with a readable mode.');\n }\n if (position === undefined || position === null) {\n position = this.getPos();\n }\n const endRead = position + length;\n if (endRead > this._stat.size) {\n length = this._stat.size - position;\n }\n const rv = this._buffer.copy(buffer, offset, position, position + length);\n this._stat.atimeMs = Date.now();\n this._pos = position + length;\n return rv;\n }\n /**\n * Asynchronous `fchmod`.\n * @param [Number|String] mode\n */\n chmod(mode) {\n return __awaiter(this, void 0, void 0, function* () {\n this.chmodSync(mode);\n });\n }\n /**\n * Synchronous `fchmod`.\n * @param [Number] mode\n */\n chmodSync(mode) {\n if (!this._fs.metadata.supportsProperties) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n this._dirty = true;\n this._stat.chmod(mode);\n this.syncSync();\n }\n /**\n * Asynchronous `fchown`.\n * @param [Number] uid\n * @param [Number] gid\n */\n chown(uid, gid) {\n return __awaiter(this, void 0, void 0, function* () {\n this.chownSync(uid, gid);\n });\n }\n /**\n * Synchronous `fchown`.\n * @param [Number] uid\n * @param [Number] gid\n */\n chownSync(uid, gid) {\n if (!this._fs.metadata.supportsProperties) {\n throw new ApiError(ErrorCode.ENOTSUP);\n }\n this._dirty = true;\n this._stat.chown(uid, gid);\n this.syncSync();\n }\n isDirty() {\n return this._dirty;\n }\n /**\n * Resets the dirty bit. Should only be called after a sync has completed successfully.\n */\n resetDirty() {\n this._dirty = false;\n }\n}\n/**\n * File class for the InMemory and XHR file systems.\n * Doesn't sync to anything, so it works nicely for memory-only files.\n */\nexport class NoSyncFile extends PreloadFile {\n constructor(_fs, _path, _flag, _stat, contents) {\n super(_fs, _path, _flag, _stat, contents);\n }\n /**\n * Asynchronous sync. Doesn't do anything, simply calls the cb.\n * @param [Function(BrowserFS.ApiError)] cb\n */\n sync() {\n return __awaiter(this, void 0, void 0, function* () {\n return;\n });\n }\n /**\n * Synchronous sync. Doesn't do anything.\n */\n syncSync() {\n // NOP.\n }\n /**\n * Asynchronous close. Doesn't do anything, simply calls the cb.\n * @param [Function(BrowserFS.ApiError)] cb\n */\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n return;\n });\n }\n /**\n * Synchronous close. Doesn't do anything.\n */\n closeSync() {\n // NOP.\n }\n}\n", "import { basename, dirname, join } from '@zenfs/core/emulation/path.js';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\nimport { Cred } from '@zenfs/core/cred.js';\nimport { File, FileFlag, PreloadFile } from '@zenfs/core/file.js';\nimport { BaseFileSystem, FileSystemMetadata } from '@zenfs/core/filesystem.js';\nimport { Stats, FileType } from '@zenfs/core/stats.js';\nimport { CreateBackend, type BackendOptions } from '@zenfs/core/backends/backend.js';\nimport { Buffer } from 'buffer';\n\ndeclare global {\n\tinterface FileSystemDirectoryHandle {\n\t\t[Symbol.iterator](): IterableIterator<[string, FileSystemHandle]>;\n\t\tentries(): IterableIterator<[string, FileSystemHandle]>;\n\t\tkeys(): IterableIterator<string>;\n\t\tvalues(): IterableIterator<FileSystemHandle>;\n\t}\n}\n\ninterface FileSystemAccessFileSystemOptions {\n\thandle: FileSystemDirectoryHandle;\n}\n\nconst handleError = (path = '', error: Error) => {\n\tif (error.name === 'NotFoundError') {\n\t\tthrow ApiError.ENOENT(path);\n\t}\n\n\tthrow error as ApiError;\n};\n\nexport class FileSystemAccessFile extends PreloadFile<FileSystemAccessFileSystem> implements File {\n\tconstructor(_fs: FileSystemAccessFileSystem, _path: string, _flag: FileFlag, _stat: Stats, contents?: Buffer) {\n\t\tsuper(_fs, _path, _flag, _stat, contents);\n\t}\n\n\tpublic async sync(): Promise<void> {\n\t\tif (this.isDirty()) {\n\t\t\tawait this._fs._sync(this.getPath(), this.getBuffer(), this.getStats(), Cred.Root);\n\t\t\tthis.resetDirty();\n\t\t}\n\t}\n\n\tpublic async close(): Promise<void> {\n\t\tawait this.sync();\n\t}\n}\n\nexport class FileSystemAccessFileSystem extends BaseFileSystem {\n\tpublic static readonly Name = 'FileSystemAccess';\n\n\tpublic static Create = CreateBackend.bind(this);\n\n\tpublic static readonly Options: BackendOptions = {};\n\n\tpublic static isAvailable(): boolean {\n\t\treturn typeof FileSystemHandle === 'function';\n\t}\n\n\tprivate _handles: Map<string, FileSystemHandle> = new Map();\n\n\tpublic constructor({ handle }: FileSystemAccessFileSystemOptions) {\n\t\tsuper();\n\t\tthis._handles.set('/', handle);\n\t}\n\n\tpublic get metadata(): FileSystemMetadata {\n\t\treturn {\n\t\t\t...super.metadata,\n\t\t\tname: FileSystemAccessFileSystem.Name,\n\t\t};\n\t}\n\n\tpublic async _sync(p: string, data: Buffer, stats: Stats, cred: Cred): Promise<void> {\n\t\tconst currentStats = await this.stat(p, cred);\n\t\tif (stats.mtime !== currentStats!.mtime) {\n\t\t\tawait this.writeFile(p, data, null, FileFlag.getFileFlag('w'), currentStats!.mode, cred);\n\t\t}\n\t}\n\n\tpublic async rename(oldPath: string, newPath: string, cred: Cred): Promise<void> {\n\t\ttry {\n\t\t\tconst handle = await this.getHandle(oldPath);\n\t\t\tif (handle instanceof FileSystemDirectoryHandle) {\n\t\t\t\tconst files = await this.readdir(oldPath, cred);\n\n\t\t\t\tawait this.mkdir(newPath, 'wx', cred);\n\t\t\t\tif (files.length === 0) {\n\t\t\t\t\tawait this.unlink(oldPath, cred);\n\t\t\t\t} else {\n\t\t\t\t\tfor (const file of files) {\n\t\t\t\t\t\tawait this.rename(join(oldPath, file), join(newPath, file), cred);\n\t\t\t\t\t\tawait this.unlink(oldPath, cred);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (handle instanceof FileSystemFileHandle) {\n\t\t\t\tconst oldFile = await handle.getFile(),\n\t\t\t\t\tdestFolder = await this.getHandle(dirname(newPath));\n\t\t\t\tif (destFolder instanceof FileSystemDirectoryHandle) {\n\t\t\t\t\tconst newFile = await destFolder.getFileHandle(basename(newPath), { create: true });\n\t\t\t\t\tconst writable = await newFile.createWritable();\n\t\t\t\t\tconst buffer = await oldFile.arrayBuffer();\n\t\t\t\t\tawait writable.write(buffer);\n\n\t\t\t\t\twritable.close();\n\t\t\t\t\tawait this.unlink(oldPath, cred);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\thandleError(oldPath, err);\n\t\t}\n\t}\n\n\tpublic async writeFile(fname: string, data: any, encoding: string | null, flag: FileFlag, mode: number, cred: Cred, createFile?: boolean): Promise<void> {\n\t\tconst handle = await this.getHandle(dirname(fname));\n\t\tif (handle instanceof FileSystemDirectoryHandle) {\n\t\t\tconst file = await handle.getFileHandle(basename(fname), { create: true });\n\t\t\tconst writable = await file.createWritable();\n\t\t\tawait writable.write(data);\n\t\t\tawait writable.close();\n\t\t\t//return createFile ? this.newFile(fname, flag, data) : undefined;\n\t\t}\n\t}\n\n\tpublic async createFile(p: string, flag: FileFlag, mode: number, cred: Cred): Promise<File> {\n\t\tawait this.writeFile(p, Buffer.alloc(0), null, flag, mode, cred, true);\n\t\treturn this.openFile(p, flag, cred);\n\t}\n\n\tpublic async stat(path: string, cred: Cred): Promise<Stats> {\n\t\tconst handle = await this.getHandle(path);\n\t\tif (!handle) {\n\t\t\tthrow ApiError.FileError(ErrorCode.EINVAL, path);\n\t\t}\n\t\tif (handle instanceof FileSystemDirectoryHandle) {\n\t\t\treturn new Stats(FileType.DIRECTORY, 4096);\n\t\t}\n\t\tif (handle instanceof FileSystemFileHandle) {\n\t\t\tconst { lastModified, size } = await handle.getFile();\n\t\t\treturn new Stats(FileType.FILE, size, undefined, undefined, lastModified);\n\t\t}\n\t}\n\n\tpublic async exists(p: string, cred: Cred): Promise<boolean> {\n\t\ttry {\n\t\t\tawait this.getHandle(p);\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic async openFile(path: string, flags: FileFlag, cred: Cred): Promise<File> {\n\t\tconst handle = await this.getHandle(path);\n\t\tif (handle instanceof FileSystemFileHandle) {\n\t\t\tconst file = await handle.getFile();\n\t\t\tconst buffer = await file.arrayBuffer();\n\t\t\treturn this.newFile(path, flags, buffer, file.size, file.lastModified);\n\t\t}\n\t}\n\n\tpublic async unlink(path: string, cred: Cred): Promise<void> {\n\t\tconst handle = await this.getHandle(dirname(path));\n\t\tif (handle instanceof FileSystemDirectoryHandle) {\n\t\t\ttry {\n\t\t\t\tawait handle.removeEntry(basename(path), { recursive: true });\n\t\t\t} catch (e) {\n\t\t\t\thandleError(path, e);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic async rmdir(path: string, cred: Cred): Promise<void> {\n\t\treturn this.unlink(path, cred);\n\t}\n\n\tpublic async mkdir(p: string, mode: any, cred: Cred): Promise<void> {\n\t\tconst overwrite = mode && mode.flag && mode.flag.includes('w') && !mode.flag.includes('x');\n\n\t\tconst existingHandle = await this.getHandle(p);\n\t\tif (existingHandle && !overwrite) {\n\t\t\tthrow ApiError.EEXIST(p);\n\t\t}\n\n\t\tconst handle = await this.getHandle(dirname(p));\n\t\tif (handle instanceof FileSystemDirectoryHandle) {\n\t\t\tawait handle.getDirectoryHandle(basename(p), { create: true });\n\t\t}\n\t}\n\n\tpublic async readdir(path: string, cred: Cred): Promise<string[]> {\n\t\tconst handle = await this.getHandle(path);\n\t\tif (!(handle instanceof FileSystemDirectoryHandle)) {\n\t\t\tthrow ApiError.ENOTDIR(path);\n\t\t}\n\t\tconst _keys: string[] = [];\n\t\tfor await (const key of handle.keys()) {\n\t\t\t_keys.push(join(path, key));\n\t\t}\n\t\treturn _keys;\n\t}\n\n\tprivate newFile(path: string, flag: FileFlag, data: ArrayBuffer, size?: number, lastModified?: number): File {\n\t\treturn new FileSystemAccessFile(this, path, flag, new Stats(FileType.FILE, size || 0, undefined, undefined, lastModified || new Date().getTime()), Buffer.from(data));\n\t}\n\n\tprivate async getHandle(path: string): Promise<FileSystemHandle> {\n\t\tif (this._handles.has(path)) {\n\t\t\treturn this._handles.get(path);\n\t\t}\n\n\t\tlet walkedPath = '/';\n\t\tconst [, ...pathParts] = path.split('/');\n\t\tconst getHandleParts = async ([pathPart, ...remainingPathParts]: string[]) => {\n\t\t\tconst walkingPath = join(walkedPath, pathPart);\n\t\t\tconst continueWalk = (handle: FileSystemHandle) => {\n\t\t\t\twalkedPath = walkingPath;\n\t\t\t\tthis._handles.set(walkedPath, handle);\n\n\t\t\t\tif (remainingPathParts.length === 0) {\n\t\t\t\t\treturn this._handles.get(path);\n\t\t\t\t}\n\n\t\t\t\tgetHandleParts(remainingPathParts);\n\t\t\t};\n\t\t\tconst handle = this._handles.get(walkedPath) as FileSystemDirectoryHandle;\n\n\t\t\ttry {\n\t\t\t\treturn await continueWalk(await handle.getDirectoryHandle(pathPart));\n\t\t\t} catch (error) {\n\t\t\t\tif (error.name === 'TypeMismatchError') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn await continueWalk(await handle.getFileHandle(pathPart));\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\thandleError(walkingPath, err);\n\t\t\t\t\t}\n\t\t\t\t} else if (error.message === 'Name is not allowed.') {\n\t\t\t\t\tthrow new ApiError(ErrorCode.ENOENT, error.message, walkingPath);\n\t\t\t\t} else {\n\t\t\t\t\thandleError(walkingPath, error);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tawait getHandleParts(pathParts);\n\t}\n}\n", "/**\n * Contains utility methods for network I/O (using fetch)\n */\nimport { Buffer } from 'buffer';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\n\nexport const fetchIsAvailable = typeof fetch !== 'undefined' && fetch !== null;\n\n/**\n * @hidden\n */\nfunction convertError(e): never {\n\tthrow new ApiError(ErrorCode.EIO, e.message);\n}\n\n/**\n * Asynchronously download a file as a buffer or a JSON object.\n * Note that the third function signature with a non-specialized type is\n * invalid, but TypeScript requires it when you specialize string arguments to\n * constants.\n * @hidden\n */\nexport async function fetchFile(p: string, type: 'buffer'): Promise<Buffer>;\nexport async function fetchFile(p: string, type: 'json'): Promise<any>;\nexport async function fetchFile(p: string, type: string): Promise<any>;\nexport async function fetchFile(p: string, type: string): Promise<any> {\n\tconst response = await fetch(p).catch(convertError);\n\tif (!response.ok) {\n\t\tthrow new ApiError(ErrorCode.EIO, `fetch error: response returned code ${response.status}`);\n\t}\n\tswitch (type) {\n\t\tcase 'buffer':\n\t\t\tconst buf = await response.arrayBuffer().catch(convertError);\n\t\t\treturn Buffer.from(buf);\n\t\tcase 'json':\n\t\t\tconst json = await response.json().catch(convertError);\n\t\t\treturn json;\n\t\tdefault:\n\t\t\tthrow new ApiError(ErrorCode.EINVAL, 'Invalid download type: ' + type);\n\t}\n}\n\n/**\n * Asynchronously retrieves the size of the given file in bytes.\n * @hidden\n */\nexport async function fetchFileSize(p: string): Promise<number> {\n\tconst response = await fetch(p, { method: 'HEAD' }).catch(convertError);\n\tif (!response.ok) {\n\t\tthrow new ApiError(ErrorCode.EIO, `fetch HEAD error: response returned code ${response.status}`);\n\t}\n\treturn parseInt(response.headers.get('Content-Length') || '-1', 10);\n}\n", "import { Stats, FileType } from './stats.js';\nimport * as path from './emulation/path.js';\n/**\n * A simple class for storing a filesystem index. Assumes that all paths passed\n * to it are *absolute* paths.\n *\n * Can be used as a partial or a full index, although care must be taken if used\n * for the former purpose, especially when directories are concerned.\n */\nexport class FileIndex {\n /**\n * Static method for constructing indices from a JSON listing.\n * @param listing Directory listing generated by tools/XHRIndexer.coffee\n * @return A new FileIndex object.\n */\n static fromListing(listing) {\n const idx = new FileIndex();\n // Add a root DirNode.\n const rootInode = new IndexDirInode();\n idx._index['/'] = rootInode;\n const queue = [['', listing, rootInode]];\n while (queue.length > 0) {\n let inode;\n const next = queue.pop();\n const pwd = next[0];\n const tree = next[1];\n const parent = next[2];\n for (const node in tree) {\n if (Object.prototype.hasOwnProperty.call(tree, node)) {\n const children = tree[node];\n const name = `${pwd}/${node}`;\n if (children) {\n idx._index[name] = inode = new IndexDirInode();\n queue.push([name, children, inode]);\n }\n else {\n // This inode doesn't have correct size information, noted with -1.\n inode = new IndexFileInode(new Stats(FileType.FILE, -1, 0x16d));\n }\n if (parent) {\n parent._ls[node] = inode;\n }\n }\n }\n }\n return idx;\n }\n /**\n * Constructs a new FileIndex.\n */\n constructor() {\n // _index is a single-level key,value store that maps *directory* paths to\n // DirInodes. File information is only contained in DirInodes themselves.\n this._index = {};\n // Create the root directory.\n this.addPath('/', new IndexDirInode());\n }\n /**\n * Runs the given function over all files in the index.\n */\n fileIterator(cb) {\n for (const path in this._index) {\n if (Object.prototype.hasOwnProperty.call(this._index, path)) {\n const dir = this._index[path];\n const files = dir.getListing();\n for (const file of files) {\n const item = dir.getItem(file);\n if (isIndexFileInode(item)) {\n cb(item.getData());\n }\n }\n }\n }\n }\n /**\n * Adds the given absolute path to the index if it is not already in the index.\n * Creates any needed parent directories.\n * @param path The path to add to the index.\n * @param inode The inode for the\n * path to add.\n * @return 'True' if it was added or already exists, 'false' if there\n * was an issue adding it (e.g. item in path is a file, item exists but is\n * different).\n * @todo If adding fails and implicitly creates directories, we do not clean up\n * the new empty directories.\n */\n addPath(path, inode) {\n if (!inode) {\n throw new Error('Inode must be specified');\n }\n if (path[0] !== '/') {\n throw new Error('Path must be absolute, got: ' + path);\n }\n // Check if it already exists.\n if (Object.prototype.hasOwnProperty.call(this._index, path)) {\n return this._index[path] === inode;\n }\n const splitPath = this._split_path(path);\n const dirpath = splitPath[0];\n const itemname = splitPath[1];\n // Try to add to its parent directory first.\n let parent = this._index[dirpath];\n if (parent === undefined && path !== '/') {\n // Create parent.\n parent = new IndexDirInode();\n if (!this.addPath(dirpath, parent)) {\n return false;\n }\n }\n // Add myself to my parent.\n if (path !== '/') {\n if (!parent.addItem(itemname, inode)) {\n return false;\n }\n }\n // If I'm a directory, add myself to the index.\n if (isIndexDirInode(inode)) {\n this._index[path] = inode;\n }\n return true;\n }\n /**\n * Adds the given absolute path to the index if it is not already in the index.\n * The path is added without special treatment (no joining of adjacent separators, etc).\n * Creates any needed parent directories.\n * @param path The path to add to the index.\n * @param inode The inode for the\n * path to add.\n * @return 'True' if it was added or already exists, 'false' if there\n * was an issue adding it (e.g. item in path is a file, item exists but is\n * different).\n * @todo If adding fails and implicitly creates directories, we do not clean up\n * the new empty directories.\n */\n addPathFast(path, inode) {\n const itemNameMark = path.lastIndexOf('/');\n const parentPath = itemNameMark === 0 ? '/' : path.substring(0, itemNameMark);\n const itemName = path.substring(itemNameMark + 1);\n // Try to add to its parent directory first.\n let parent = this._index[parentPath];\n if (parent === undefined) {\n // Create parent.\n parent = new IndexDirInode();\n this.addPathFast(parentPath, parent);\n }\n if (!parent.addItem(itemName, inode)) {\n return false;\n }\n // If adding a directory, add to the index as well.\n if (inode.isDir()) {\n this._index[path] = inode;\n }\n return true;\n }\n /**\n * Removes the given path. Can be a file or a directory.\n * @return The removed item,\n * or null if it did not exist.\n */\n removePath(path) {\n const splitPath = this._split_path(path);\n const dirpath = splitPath[0];\n const itemname = splitPath[1];\n // Try to remove it from its parent directory first.\n const parent = this._index[dirpath];\n if (parent === undefined) {\n return null;\n }\n // Remove myself from my parent.\n const inode = parent.remItem(itemname);\n if (inode === null) {\n return null;\n }\n // If I'm a directory, remove myself from the index, and remove my children.\n if (isIndexDirInode(inode)) {\n const children = inode.getListing();\n for (const child of children) {\n this.removePath(path + '/' + child);\n }\n // Remove the directory from the index, unless it's the root.\n if (path !== '/') {\n delete this._index[path];\n }\n }\n return inode;\n }\n /**\n * Retrieves the directory listing of the given path.\n * @return An array of files in the given path, or 'null' if it does not exist.\n */\n ls(path) {\n const item = this._index[path];\n if (item === undefined) {\n return null;\n }\n return item.getListing();\n }\n /**\n * Returns the inode of the given item.\n * @return Returns null if the item does not exist.\n */\n getInode(path) {\n const splitPath = this._split_path(path);\n const dirpath = splitPath[0];\n const itemname = splitPath[1];\n // Retrieve from its parent directory.\n const parent = this._index[dirpath];\n if (parent === undefined) {\n return null;\n }\n // Root case\n if (dirpath === path) {\n return parent;\n }\n return parent.getItem(itemname);\n }\n /**\n * Split into a (directory path, item name) pair\n */\n _split_path(p) {\n const dirpath = path.dirname(p);\n const itemname = p.slice(dirpath.length + (dirpath === '/' ? 0 : 1));\n return [dirpath, itemname];\n }\n}\n/**\n * Inode for a file. Stores an arbitrary (filesystem-specific) data payload.\n */\nexport class IndexFileInode {\n constructor(data) {\n this.data = data;\n }\n isFile() {\n return true;\n }\n isDir() {\n return false;\n }\n getData() {\n return this.data;\n }\n setData(data) {\n this.data = data;\n }\n toStats() {\n return new Stats(FileType.FILE, 4096, 0o666);\n }\n}\n/**\n * Inode for a directory. Currently only contains the directory listing.\n */\nexport class IndexDirInode {\n /**\n * Constructs an inode for a directory.\n */\n constructor(data = null) {\n this.data = data;\n this._ls = {};\n }\n isFile() {\n return false;\n }\n isDir() {\n return true;\n }\n getData() {\n return this.data;\n }\n /**\n * Return a Stats object for this inode.\n * @todo Should probably remove this at some point. This isn't the\n * responsibility of the FileIndex.\n */\n getStats() {\n return new Stats(FileType.DIRECTORY, 4096, 0o555);\n }\n /**\n * Alias of getStats()\n * @todo Remove this at some point. This isn't the\n * responsibility of the FileIndex.\n */\n toStats() {\n return this.getStats();\n }\n /**\n * Returns the directory listing for this directory. Paths in the directory are\n * relative to the directory's path.\n * @return The directory listing for this directory.\n */\n getListing() {\n return Object.keys(this._ls);\n }\n /**\n * Returns the inode for the indicated item, or null if it does not exist.\n * @param p Name of item in this directory.\n */\n getItem(p) {\n const item = this._ls[p];\n return item ? item : null;\n }\n /**\n * Add the given item to the directory listing. Note that the given inode is\n * not copied, and will be mutated by the DirInode if it is a DirInode.\n * @param p Item name to add to the directory listing.\n * @param inode The inode for the\n * item to add to the directory inode.\n * @return True if it was added, false if it already existed.\n */\n addItem(p, inode) {\n if (p in this._ls) {\n return false;\n }\n this._ls[p] = inode;\n return true;\n }\n /**\n * Removes the given item from the directory listing.\n * @param p Name of item to remove from the directory listing.\n * @return Returns the item\n * removed, or null if the item did not exist.\n */\n remItem(p) {\n const item = this._ls[p];\n if (item === undefined) {\n return null;\n }\n delete this._ls[p];\n return item;\n }\n}\n/**\n * @hidden\n */\nexport function isIndexFileInode(inode) {\n return !!inode && inode.isFile();\n}\n/**\n * @hidden\n */\nexport function isIndexDirInode(inode) {\n return !!inode && inode.isDir();\n}\n", "import { BaseFileSystem, FileContents, FileSystemMetadata } from '@zenfs/core/filesystem.js';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\nimport { File, FileFlag, ActionType, NoSyncFile } from '@zenfs/core/file.js';\nimport { Stats } from '@zenfs/core/stats.js';\nimport { fetchIsAvailable, fetchFile, fetchFileSize } from '../fetch.js';\nimport { FileIndex, isIndexFileInode, isIndexDirInode } from '@zenfs/core/FileIndex.js';\nimport { Cred } from '@zenfs/core/cred.js';\nimport { CreateBackend, type BackendOptions } from '@zenfs/core/backends/backend.js';\nimport { R_OK } from '@zenfs/core/emulation/constants.js';\nimport { Buffer } from 'buffer';\n\nexport interface HTTPRequestIndex {\n\t[key: string]: string;\n}\n\nexport namespace HTTPRequest {\n\t/**\n\t * Configuration options for a HTTPRequest file system.\n\t */\n\texport interface Options {\n\t\t/**\n\t\t * URL to a file index as a JSON file or the file index object itself, generated with the make_http_index script.\n\t\t * Defaults to `index.json`.\n\t\t */\n\t\tindex?: string | HTTPRequestIndex;\n\n\t\t/** Used as the URL prefix for fetched files.\n\t\t * Default: Fetch files relative to the index.\n\t\t */\n\t\tbaseUrl?: string;\n\t}\n}\n\n/**\n * A simple filesystem backed by HTTP downloads. You must create a directory listing using the\n * `make_http_index` tool provided by ZenFS.\n *\n * If you install ZenFS globally with `npm i -g zenfs`, you can generate a listing by\n * running `make_http_index` in your terminal in the directory you would like to index:\n *\n * ```\n * make_http_index > index.json\n * ```\n *\n * Listings objects look like the following:\n *\n * ```json\n * {\n * \"home\": {\n * \"jvilk\": {\n * \"someFile.txt\": null,\n * \"someDir\": {\n * // Empty directory\n * }\n * }\n * }\n * }\n * ```\n *\n * *This example has the folder `/home/jvilk` with subfile `someFile.txt` and subfolder `someDir`.*\n */\nexport class HTTPRequest extends BaseFileSystem {\n\tpublic static readonly Name = 'HTTPRequest';\n\n\tpublic static Create = CreateBackend.bind(this);\n\n\tpublic static readonly Options: BackendOptions = {\n\t\tindex: {\n\t\t\ttype: ['string', 'object'],\n\t\t\toptional: true,\n\t\t\tdescription: 'URL to a file index as a JSON file or the file index object itself, generated with the make_http_index script. Defaults to `index.json`.',\n\t\t},\n\t\tbaseUrl: {\n\t\t\ttype: 'string',\n\t\t\toptional: true,\n\t\t\tdescription: 'Used as the URL prefix for fetched files. Default: Fetch files relative to the index.',\n\t\t},\n\t};\n\n\tpublic static isAvailable(): boolean {\n\t\treturn fetchIsAvailable;\n\t}\n\n\tpublic readonly prefixUrl: string;\n\tprivate _index: FileIndex<{}>;\n\tprivate _requestFileInternal: typeof fetchFile;\n\tprivate _requestFileSizeInternal: typeof fetchFileSize;\n\n\tconstructor({ index, baseUrl = '' }: HTTPRequest.Options) {\n\t\tsuper();\n\t\tif (!index) {\n\t\t\tindex = 'index.json';\n\t\t}\n\n\t\tconst indexRequest = typeof index == 'string' ? fetchFile(index, 'json') : Promise.resolve(index);\n\t\tthis._ready = indexRequest.then(data => {\n\t\t\tthis._index = FileIndex.fromListing(data);\n\t\t\treturn this;\n\t\t});\n\n\t\t// prefix_url must end in a directory separator.\n\t\tif (baseUrl.length > 0 && baseUrl.charAt(baseUrl.length - 1) !== '/') {\n\t\t\tbaseUrl = baseUrl + '/';\n\t\t}\n\t\tthis.prefixUrl = baseUrl;\n\n\t\tthis._requestFileInternal = fetchFile;\n\t\tthis._requestFileSizeInternal = fetchFileSize;\n\t}\n\n\tpublic get metadata(): FileSystemMetadata {\n\t\treturn {\n\t\t\t...super.metadata,\n\t\t\tname: HTTPRequest.Name,\n\t\t\treadonly: true,\n\t\t};\n\t}\n\n\tpublic empty(): void {\n\t\tthis._index.fileIterator(function (file: Stats) {\n\t\t\tfile.fileData = null;\n\t\t});\n\t}\n\n\t/**\n\t * Special HTTPFS function: Preload the given file into the index.\n\t * @param [String] path\n\t * @param [ZenFS.Buffer] buffer\n\t */\n\tpublic preloadFile(path: string, buffer: Buffer): void {\n\t\tconst inode = this._index.getInode(path);\n\t\tif (isIndexFileInode<Stats>(inode)) {\n\t\t\tif (inode === null) {\n\t\t\t\tthrow ApiError.ENOENT(path);\n\t\t\t}\n\t\t\tconst stats = inode.getData();\n\t\t\tstats.size = buffer.length;\n\t\t\tstats.fileData = buffer;\n\t\t} else {\n\t\t\tthrow ApiError.EISDIR(path);\n\t\t}\n\t}\n\n\tpublic async stat(path: string, cred: Cred): Promise<Stats> {\n\t\tconst inode = this._index.getInode(path);\n\t\tif (inode === null) {\n\t\t\tthrow ApiError.ENOENT(path);\n\t\t}\n\t\tif (!inode.toStats().hasAccess(R_OK, cred)) {\n\t\t\tthrow ApiError.EACCES(path);\n\t\t}\n\t\tlet stats: Stats;\n\t\tif (isIndexFileInode<Stats>(inode)) {\n\t\t\tstats = inode.getData();\n\t\t\t// At this point, a non-opened file will still have default stats from the listing.\n\t\t\tif (stats.size < 0) {\n\t\t\t\tstats.size = await this._requestFileSize(path);\n\t\t\t}\n\t\t} else if (isIndexDirInode(inode)) {\n\t\t\tstats = inode.getStats();\n\t\t} else {\n\t\t\tthrow ApiError.FileError(ErrorCode.EINVAL, path);\n\t\t}\n\t\treturn stats;\n\t}\n\n\tpublic async open(path: string, flags: FileFlag, mode: number, cred: Cred): Promise<File> {\n\t\t// INVARIANT: You can't write to files on this file system.\n\t\tif (flags.isWriteable()) {\n\t\t\tthrow new ApiError(ErrorCode.EPERM, path);\n\t\t}\n\t\t// Check if the path exists, and is a file.\n\t\tconst inode = this._index.getInode(path);\n\t\tif (inode === null) {\n\t\t\tthrow ApiError.ENOENT(path);\n\t\t}\n\t\tif (!inode.toStats().hasAccess(flags.getMode(), cred)) {\n\t\t\tthrow ApiError.EACCES(path);\n\t\t}\n\t\tif (isIndexFileInode<Stats>(inode) || isIndexDirInode<Stats>(inode)) {\n\t\t\tswitch (flags.pathExistsAction()) {\n\t\t\t\tcase ActionType.THROW_EXCEPTION:\n\t\t\t\tcase ActionType.TRUNCATE_FILE:\n\t\t\t\t\tthrow ApiError.EEXIST(path);\n\t\t\t\tcase ActionType.NOP:\n\t\t\t\t\tif (isIndexDirInode<Stats>(inode)) {\n\t\t\t\t\t\tconst stats = inode.getStats();\n\t\t\t\t\t\treturn new NoSyncFile(this, path, flags, stats, stats.fileData || undefined);\n\t\t\t\t\t}\n\t\t\t\t\tconst stats = inode.getData();\n\t\t\t\t\t// Use existing file contents.\n\t\t\t\t\t// XXX: Uh, this maintains the previously-used flag.\n\t\t\t\t\tif (stats.fileData) {\n\t\t\t\t\t\treturn new NoSyncFile(this, path, flags, Stats.clone(stats), stats.fileData);\n\t\t\t\t\t}\n\t\t\t\t\t// @todo be lazier about actually requesting the file\n\t\t\t\t\tconst buffer = await this._requestFile(path, 'buffer');\n\t\t\t\t\t// we don't initially have file sizes\n\t\t\t\t\tstats.size = buffer.length;\n\t\t\t\t\tstats.fileData = buffer;\n\t\t\t\t\treturn new NoSyncFile(this, path, flags, Stats.clone(stats), buffer);\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new ApiError(ErrorCode.EINVAL, 'Invalid FileMode object.');\n\t\t\t}\n\t\t} else {\n\t\t\tthrow ApiError.EPERM(path);\n\t\t}\n\t}\n\n\tpublic async readdir(path: string, cred: Cred): Promise<string[]> {\n\t\treturn this.readdirSync(path, cred);\n\t}\n\n\t/**\n\t * We have the entire file as a buffer; optimize readFile.\n\t */\n\tpublic async readFile(fname: string, encoding: BufferEncoding, flag: FileFlag, cred: Cred): Promise<FileContents> {\n\t\t// Get file.\n\t\tconst fd = await this.open(fname, flag, 0o644, cred);\n\t\ttry {\n\t\t\tconst fdCast = <NoSyncFile<HTTPRequest>>fd;\n\t\t\tconst fdBuff = <Buffer>fdCast.getBuffer();\n\t\t\tif (encoding === null) {\n\t\t\t\treturn Buffer.from(fdBuff);\n\t\t\t}\n\t\t\treturn fdBuff.toString(encoding);\n\t\t} finally {\n\t\t\tawait fd.close();\n\t\t}\n\t}\n\n\tprivate _getHTTPPath(filePath: string): string {\n\t\tif (filePath.charAt(0) === '/') {\n\t\t\tfilePath = filePath.slice(1);\n\t\t}\n\t\treturn this.prefixUrl + filePath;\n\t}\n\n\t/**\n\t * Asynchronously download the given file.\n\t */\n\tprivate _requestFile(p: string, type: 'buffer'): Promise<Buffer>;\n\tprivate _requestFile(p: string, type: 'json'): Promise<any>;\n\tprivate _requestFile(p: string, type: string): Promise<string>;\n\tprivate _requestFile(p: string, type: string): Promise<any> {\n\t\treturn this._requestFileInternal(this._getHTTPPath(p), type);\n\t}\n\n\t/**\n\t * Only requests the HEAD content, for the file size.\n\t */\n\tprivate _requestFileSize(path: string): Promise<number> {\n\t\treturn this._requestFileSizeInternal(this._getHTTPPath(path));\n\t}\n}\n", "var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { dirname, basename, join, resolve } from '../emulation/path.js';\nimport { ApiError, ErrorCode } from '../ApiError.js';\nimport { W_OK, R_OK } from '../emulation/constants.js';\nimport { PreloadFile, FileFlag } from '../file.js';\nimport { BaseFileSystem } from '../filesystem.js';\nimport Inode from '../inode.js';\nimport { FileType } from '../stats.js';\nimport { ROOT_NODE_ID, randomUUID, getEmptyDirNode } from '../utils.js';\nclass LRUNode {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n this.prev = null;\n this.next = null;\n }\n}\n// Adapted from https://chrisrng.svbtle.com/lru-cache-in-javascript\nclass LRUCache {\n constructor(limit) {\n this.limit = limit;\n this.size = 0;\n this.map = {};\n this.head = null;\n this.tail = null;\n }\n /**\n * Change or add a new value in the cache\n * We overwrite the entry if it already exists\n */\n set(key, value) {\n const node = new LRUNode(key, value);\n if (this.map[key]) {\n this.map[key].value = node.value;\n this.remove(node.key);\n }\n else {\n if (this.size >= this.limit) {\n delete this.map[this.tail.key];\n this.size--;\n this.tail = this.tail.prev;\n this.tail.next = null;\n }\n }\n this.setHead(node);\n }\n /* Retrieve a single entry from the cache */\n get(key) {\n if (this.map[key]) {\n const value = this.map[key].value;\n const node = new LRUNode(key, value);\n this.remove(key);\n this.setHead(node);\n return value;\n }\n else {\n return null;\n }\n }\n /* Remove a single entry from the cache */\n remove(key) {\n const node = this.map[key];\n if (!node) {\n return;\n }\n if (node.prev !== null) {\n node.prev.next = node.next;\n }\n else {\n this.head = node.next;\n }\n if (node.next !== null) {\n node.next.prev = node.prev;\n }\n else {\n this.tail = node.prev;\n }\n delete this.map[key];\n this.size--;\n }\n /* Resets the entire cache - Argument limit is optional to be reset */\n removeAll() {\n this.size = 0;\n this.map = {};\n this.head = null;\n this.tail = null;\n }\n setHead(node) {\n node.next = this.head;\n node.prev = null;\n if (this.head !== null) {\n this.head.prev = node;\n }\n this.head = node;\n if (this.tail === null) {\n this.tail = node;\n }\n this.size++;\n this.map[node.key] = node;\n }\n}\nexport class AsyncKeyValueFile extends PreloadFile {\n constructor(_fs, _path, _flag, _stat, contents) {\n super(_fs, _path, _flag, _stat, contents);\n }\n sync() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.isDirty()) {\n return;\n }\n yield this._fs._sync(this.getPath(), this.getBuffer(), this.getStats());\n this.resetDirty();\n });\n }\n close() {\n return __awaiter(this, void 0, void 0, function* () {\n this.sync();\n });\n }\n}\n/**\n * An \"Asynchronous key-value file system\". Stores data to/retrieves data from\n * an underlying asynchronous key-value store.\n */\nexport class AsyncKeyValueFileSystem extends BaseFileSystem {\n static isAvailable() {\n return true;\n }\n constructor(cacheSize) {\n super();\n this._cache = null;\n if (cacheSize > 0) {\n this._cache = new LRUCache(cacheSize);\n }\n }\n /**\n * Initializes the file system. Typically called by subclasses' async\n * constructors.\n */\n init(store) {\n return __awaiter(this, void 0, void 0, function* () {\n this.store = store;\n // INVARIANT: Ensure that the root exists.\n yield this.makeRootDirectory();\n });\n }\n getName() {\n return this.store.name();\n }\n isReadOnly() {\n return false;\n }\n supportsSymlinks() {\n return false;\n }\n supportsProps() {\n return true;\n }\n supportsSynch() {\n return false;\n }\n /**\n * Delete all contents stored in the file system.\n */\n empty() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._cache) {\n this._cache.removeAll();\n }\n yield this.store.clear();\n // INVARIANT: Root always exists.\n yield this.makeRootDirectory();\n });\n }\n access(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readonly');\n const inode = yield this.findINode(tx, p);\n if (!inode) {\n throw ApiError.ENOENT(p);\n }\n if (!inode.toStats().hasAccess(mode, cred)) {\n throw ApiError.EACCES(p);\n }\n });\n }\n /**\n * @todo Make rename compatible with the cache.\n */\n rename(oldPath, newPath, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const c = this._cache;\n if (this._cache) {\n // Clear and disable cache during renaming process.\n this._cache = null;\n c.removeAll();\n }\n try {\n const tx = this.store.beginTransaction('readwrite'), oldParent = dirname(oldPath), oldName = basename(oldPath), newParent = dirname(newPath), newName = basename(newPath), \n // Remove oldPath from parent's directory listing.\n oldDirNode = yield this.findINode(tx, oldParent), oldDirList = yield this.getDirListing(tx, oldParent, oldDirNode);\n if (!oldDirNode.toStats().hasAccess(W_OK, cred)) {\n throw ApiError.EACCES(oldPath);\n }\n if (!oldDirList[oldName]) {\n throw ApiError.ENOENT(oldPath);\n }\n const nodeId = oldDirList[oldName];\n delete oldDirList[oldName];\n // Invariant: Can't move a folder inside itself.\n // This funny little hack ensures that the check passes only if oldPath\n // is a subpath of newParent. We append '/' to avoid matching folders that\n // are a substring of the bottom-most folder in the path.\n if ((newParent + '/').indexOf(oldPath + '/') === 0) {\n throw new ApiError(ErrorCode.EBUSY, oldParent);\n }\n // Add newPath to parent's directory listing.\n let newDirNode, newDirList;\n if (newParent === oldParent) {\n // Prevent us from re-grabbing the same directory listing, which still\n // contains oldName.\n newDirNode = oldDirNode;\n newDirList = oldDirList;\n }\n else {\n newDirNode = yield this.findINode(tx, newParent);\n newDirList = yield this.getDirListing(tx, newParent, newDirNode);\n }\n if (newDirList[newName]) {\n // If it's a file, delete it.\n const newNameNode = yield this.getINode(tx, newPath, newDirList[newName]);\n if (newNameNode.isFile()) {\n try {\n yield tx.del(newNameNode.id);\n yield tx.del(newDirList[newName]);\n }\n catch (e) {\n yield tx.abort();\n throw e;\n }\n }\n else {\n // If it's a directory, throw a permissions error.\n throw ApiError.EPERM(newPath);\n }\n }\n newDirList[newName] = nodeId;\n // Commit the two changed directory listings.\n try {\n yield tx.put(oldDirNode.id, Buffer.from(JSON.stringify(oldDirList)), true);\n yield tx.put(newDirNode.id, Buffer.from(JSON.stringify(newDirList)), true);\n }\n catch (e) {\n yield tx.abort();\n throw e;\n }\n yield tx.commit();\n }\n finally {\n if (c) {\n this._cache = c;\n }\n }\n });\n }\n stat(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readonly');\n const inode = yield this.findINode(tx, p);\n const stats = inode.toStats();\n if (!stats.hasAccess(R_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n return stats;\n });\n }\n createFile(p, flag, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readwrite'), data = Buffer.alloc(0), newFile = yield this.commitNewFile(tx, p, FileType.FILE, mode, cred, data);\n // Open the file.\n return new AsyncKeyValueFile(this, p, flag, newFile.toStats(), data);\n });\n }\n openFile(p, flag, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readonly'), node = yield this.findINode(tx, p), data = yield tx.get(node.id);\n if (!node.toStats().hasAccess(flag.getMode(), cred)) {\n throw ApiError.EACCES(p);\n }\n if (data === undefined) {\n throw ApiError.ENOENT(p);\n }\n return new AsyncKeyValueFile(this, p, flag, node.toStats(), data);\n });\n }\n unlink(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.removeEntry(p, false, cred);\n });\n }\n rmdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n // Check first if directory is empty.\n const list = yield this.readdir(p, cred);\n if (list.length > 0) {\n throw ApiError.ENOTEMPTY(p);\n }\n yield this.removeEntry(p, true, cred);\n });\n }\n mkdir(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readwrite'), data = Buffer.from('{}');\n yield this.commitNewFile(tx, p, FileType.DIRECTORY, mode, cred, data);\n });\n }\n readdir(p, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readonly');\n const node = yield this.findINode(tx, p);\n if (!node.toStats().hasAccess(R_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n return Object.keys(yield this.getDirListing(tx, p, node));\n });\n }\n chmod(p, mode, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const fd = yield this.openFile(p, FileFlag.getFileFlag('r+'), cred);\n yield fd.chmod(mode);\n });\n }\n chown(p, new_uid, new_gid, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n const fd = yield this.openFile(p, FileFlag.getFileFlag('r+'), cred);\n yield fd.chown(new_uid, new_gid);\n });\n }\n _sync(p, data, stats) {\n return __awaiter(this, void 0, void 0, function* () {\n // @todo Ensure mtime updates properly, and use that to determine if a data\n // update is required.\n const tx = this.store.beginTransaction('readwrite'), \n // We use the _findInode helper because we actually need the INode id.\n fileInodeId = yield this._findINode(tx, dirname(p), basename(p)), fileInode = yield this.getINode(tx, p, fileInodeId), inodeChanged = fileInode.update(stats);\n try {\n // Sync data.\n yield tx.put(fileInode.id, data, true);\n // Sync metadata.\n if (inodeChanged) {\n yield tx.put(fileInodeId, fileInode.toBuffer(), true);\n }\n }\n catch (e) {\n yield tx.abort();\n throw e;\n }\n yield tx.commit();\n });\n }\n /**\n * Checks if the root directory exists. Creates it if it doesn't.\n */\n makeRootDirectory() {\n return __awaiter(this, void 0, void 0, function* () {\n const tx = this.store.beginTransaction('readwrite');\n if ((yield tx.get(ROOT_NODE_ID)) === undefined) {\n // Create new inode.\n const currTime = new Date().getTime(), \n // Mode 0666, owned by root:root\n dirInode = new Inode(randomUUID(), 4096, 511 | FileType.DIRECTORY, currTime, currTime, currTime, 0, 0);\n // If the root doesn't exist, the first random ID shouldn't exist,\n // either.\n yield tx.put(dirInode.id, getEmptyDirNode(), false);\n yield tx.put(ROOT_NODE_ID, dirInode.toBuffer(), false);\n yield tx.commit();\n }\n });\n }\n /**\n * Helper function for findINode.\n * @param parent The parent directory of the file we are attempting to find.\n * @param filename The filename of the inode we are attempting to find, minus\n * the parent.\n */\n _findINode(tx, parent, filename, visited = new Set()) {\n return __awaiter(this, void 0, void 0, function* () {\n const currentPath = join(parent, filename);\n if (visited.has(currentPath)) {\n throw new ApiError(ErrorCode.EIO, 'Infinite loop detected while finding inode', currentPath);\n }\n visited.add(currentPath);\n if (this._cache) {\n const id = this._cache.get(currentPath);\n if (id) {\n return id;\n }\n }\n if (parent === '/') {\n if (filename === '') {\n // BASE CASE #1: Return the root's ID.\n if (this._cache) {\n this._cache.set(currentPath, ROOT_NODE_ID);\n }\n return ROOT_NODE_ID;\n }\n else {\n // BASE CASE #2: Find the item in the root node.\n const inode = yield this.getINode(tx, parent, ROOT_NODE_ID);\n const dirList = yield this.getDirListing(tx, parent, inode);\n if (dirList[filename]) {\n const id = dirList[filename];\n if (this._cache) {\n this._cache.set(currentPath, id);\n }\n return id;\n }\n else {\n throw ApiError.ENOENT(resolve(parent, filename));\n }\n }\n }\n else {\n // Get the parent directory's INode, and find the file in its directory\n // listing.\n const inode = yield this.findINode(tx, parent, visited);\n const dirList = yield this.getDirListing(tx, parent, inode);\n if (dirList[filename]) {\n const id = dirList[filename];\n if (this._cache) {\n this._cache.set(currentPath, id);\n }\n return id;\n }\n else {\n throw ApiError.ENOENT(resolve(parent, filename));\n }\n }\n });\n }\n /**\n * Finds the Inode of the given path.\n * @param p The path to look up.\n * @todo memoize/cache\n */\n findINode(tx, p, visited = new Set()) {\n return __awaiter(this, void 0, void 0, function* () {\n const id = yield this._findINode(tx, dirname(p), basename(p), visited);\n return this.getINode(tx, p, id);\n });\n }\n /**\n * Given the ID of a node, retrieves the corresponding Inode.\n * @param tx The transaction to use.\n * @param p The corresponding path to the file (used for error messages).\n * @param id The ID to look up.\n */\n getINode(tx, p, id) {\n return __awaiter(this, void 0, void 0, function* () {\n const data = yield tx.get(id);\n if (!data) {\n throw ApiError.ENOENT(p);\n }\n return Inode.fromBuffer(data);\n });\n }\n /**\n * Given the Inode of a directory, retrieves the corresponding directory\n * listing.\n */\n getDirListing(tx, p, inode) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!inode.isDirectory()) {\n throw ApiError.ENOTDIR(p);\n }\n const data = yield tx.get(inode.id);\n try {\n return JSON.parse(data.toString());\n }\n catch (e) {\n // Occurs when data is undefined, or corresponds to something other\n // than a directory listing. The latter should never occur unless\n // the file system is corrupted.\n throw ApiError.ENOENT(p);\n }\n });\n }\n /**\n * Adds a new node under a random ID. Retries 5 times before giving up in\n * the exceedingly unlikely chance that we try to reuse a random GUID.\n */\n addNewNode(tx, data) {\n return __awaiter(this, void 0, void 0, function* () {\n let retries = 0;\n const reroll = () => __awaiter(this, void 0, void 0, function* () {\n if (++retries === 5) {\n // Max retries hit. Return with an error.\n throw new ApiError(ErrorCode.EIO, 'Unable to commit data to key-value store.');\n }\n else {\n // Try again.\n const currId = randomUUID();\n const committed = yield tx.put(currId, data, false);\n if (!committed) {\n return reroll();\n }\n else {\n return currId;\n }\n }\n });\n return reroll();\n });\n }\n /**\n * Commits a new file (well, a FILE or a DIRECTORY) to the file system with\n * the given mode.\n * Note: This will commit the transaction.\n * @param p The path to the new file.\n * @param type The type of the new file.\n * @param mode The mode to create the new file with.\n * @param cred The UID/GID to create the file with\n * @param data The data to store at the file's data node.\n */\n commitNewFile(tx, p, type, mode, cred, data) {\n return __awaiter(this, void 0, void 0, function* () {\n const parentDir = dirname(p), fname = basename(p), parentNode = yield this.findINode(tx, parentDir), dirListing = yield this.getDirListing(tx, parentDir, parentNode), currTime = new Date().getTime();\n //Check that the creater has correct access\n if (!parentNode.toStats().hasAccess(W_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n // Invariant: The root always exists.\n // If we don't check this prior to taking steps below, we will create a\n // file with name '' in root should p == '/'.\n if (p === '/') {\n throw ApiError.EEXIST(p);\n }\n // Check if file already exists.\n if (dirListing[fname]) {\n yield tx.abort();\n throw ApiError.EEXIST(p);\n }\n try {\n // Commit data.\n const dataId = yield this.addNewNode(tx, data);\n const fileNode = new Inode(dataId, data.length, mode | type, currTime, currTime, currTime, cred.uid, cred.gid);\n // Commit file node.\n const fileNodeId = yield this.addNewNode(tx, fileNode.toBuffer());\n // Update and commit parent directory listing.\n dirListing[fname] = fileNodeId;\n yield tx.put(parentNode.id, Buffer.from(JSON.stringify(dirListing)), true);\n yield tx.commit();\n return fileNode;\n }\n catch (e) {\n tx.abort();\n throw e;\n }\n });\n }\n /**\n * Remove all traces of the given path from the file system.\n * @param p The path to remove from the file system.\n * @param isDir Does the path belong to a directory, or a file?\n * @todo Update mtime.\n */\n /**\n * Remove all traces of the given path from the file system.\n * @param p The path to remove from the file system.\n * @param isDir Does the path belong to a directory, or a file?\n * @todo Update mtime.\n */\n removeEntry(p, isDir, cred) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._cache) {\n this._cache.remove(p);\n }\n const tx = this.store.beginTransaction('readwrite'), parent = dirname(p), parentNode = yield this.findINode(tx, parent), parentListing = yield this.getDirListing(tx, parent, parentNode), fileName = basename(p);\n if (!parentListing[fileName]) {\n throw ApiError.ENOENT(p);\n }\n const fileNodeId = parentListing[fileName];\n // Get file inode.\n const fileNode = yield this.getINode(tx, p, fileNodeId);\n if (!fileNode.toStats().hasAccess(W_OK, cred)) {\n throw ApiError.EACCES(p);\n }\n // Remove from directory listing of parent.\n delete parentListing[fileName];\n if (!isDir && fileNode.isDirectory()) {\n throw ApiError.EISDIR(p);\n }\n else if (isDir && !fileNode.isDirectory()) {\n throw ApiError.ENOTDIR(p);\n }\n try {\n // Delete data.\n yield tx.del(fileNode.id);\n // Delete node.\n yield tx.del(fileNodeId);\n // Update directory listing.\n yield tx.put(parentNode.id, Buffer.from(JSON.stringify(parentListing)), true);\n }\n catch (e) {\n yield tx.abort();\n throw e;\n }\n // Success.\n yield tx.commit();\n });\n }\n}\n", "import { AsyncKeyValueROTransaction, AsyncKeyValueRWTransaction, AsyncKeyValueStore, AsyncKeyValueFileSystem } from '@zenfs/core/backends/AsyncStore.js';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\nimport { Buffer } from 'buffer';\nimport { CreateBackend, type BackendOptions } from '@zenfs/core/backends/backend.js';\n\n/**\n * Converts a DOMException or a DOMError from an IndexedDB event into a\n * standardized ZenFS API error.\n * @hidden\n */\nfunction convertError(e: { name: string }, message: string = e.toString()): ApiError {\n\tswitch (e.name) {\n\t\tcase 'NotFoundError':\n\t\t\treturn new ApiError(ErrorCode.ENOENT, message);\n\t\tcase 'QuotaExceededError':\n\t\t\treturn new ApiError(ErrorCode.ENOSPC, message);\n\t\tdefault:\n\t\t\t// The rest do not seem to map cleanly to standard error codes.\n\t\t\treturn new ApiError(ErrorCode.EIO, message);\n\t}\n}\n\n/**\n * Produces a new onerror handler for IDB. Our errors are always fatal, so we\n * handle them generically: Call the user-supplied callback with a translated\n * version of the error, and let the error bubble up.\n * @hidden\n */\nfunction onErrorHandler(cb: (e: ApiError) => void, code: ErrorCode = ErrorCode.EIO, message: string | null = null): (e?: any) => void {\n\treturn function (e?: any): void {\n\t\t// Prevent the error from canceling the transaction.\n\t\te.preventDefault();\n\t\tcb(new ApiError(code, message !== null ? message : undefined));\n\t};\n}\n\n/**\n * @hidden\n */\nexport class IndexedDBROTransaction implements AsyncKeyValueROTransaction {\n\tconstructor(public tx: IDBTransaction, public store: IDBObjectStore) {}\n\n\tpublic get(key: string): Promise<Buffer> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst r: IDBRequest = this.store.get(key);\n\t\t\t\tr.onerror = onErrorHandler(reject);\n\t\t\t\tr.onsuccess = event => {\n\t\t\t\t\t// IDB returns the value 'undefined' when you try to get keys that\n\t\t\t\t\t// don't exist. The caller expects this behavior.\n\t\t\t\t\tconst result = (<any>event.target).result;\n\t\t\t\t\tif (result === undefined) {\n\t\t\t\t\t\tresolve(result);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// IDB data is stored as an ArrayBuffer\n\t\t\t\t\t\tresolve(Buffer.from(result));\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\treject(convertError(e));\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * @hidden\n */\nexport class IndexedDBRWTransaction extends IndexedDBROTransaction implements AsyncKeyValueRWTransaction, AsyncKeyValueROTransaction {\n\tconstructor(tx: IDBTransaction, store: IDBObjectStore) {\n\t\tsuper(tx, store);\n\t}\n\n\t/**\n\t * @todo return false when add has a key conflict (no error)\n\t */\n\tpublic put(key: string, data: Buffer, overwrite: boolean): Promise<boolean> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst r: IDBRequest = overwrite ? this.store.put(data, key) : this.store.add(data, key);\n\t\t\t\tr.onerror = onErrorHandler(reject);\n\t\t\t\tr.onsuccess = () => {\n\t\t\t\t\tresolve(true);\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\treject(convertError(e));\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic del(key: string): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst r: IDBRequest = this.store.delete(key);\n\t\t\t\tr.onerror = onErrorHandler(reject);\n\t\t\t\tr.onsuccess = () => {\n\t\t\t\t\tresolve();\n\t\t\t\t};\n\t\t\t} catch (e) {\n\t\t\t\treject(convertError(e));\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic commit(): Promise<void> {\n\t\treturn new Promise(resolve => {\n\t\t\t// Return to the event loop to commit the transaction.\n\t\t\tsetTimeout(resolve, 0);\n\t\t});\n\t}\n\n\tpublic abort(): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tthis.tx.abort();\n\t\t\t\tresolve();\n\t\t\t} catch (e) {\n\t\t\t\treject(convertError(e));\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport class IndexedDBStore implements AsyncKeyValueStore {\n\tpublic static Create(storeName: string, indexedDB: IDBFactory): Promise<IndexedDBStore> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst openReq: IDBOpenDBRequest = indexedDB.open(storeName, 1);\n\n\t\t\topenReq.onupgradeneeded = event => {\n\t\t\t\tconst db: IDBDatabase = (<IDBOpenDBRequest>event.target).result;\n\t\t\t\t// Huh. This should never happen; we're at version 1. Why does another\n\t\t\t\t// database exist?\n\t\t\t\tif (db.objectStoreNames.contains(storeName)) {\n\t\t\t\t\tdb.deleteObjectStore(storeName);\n\t\t\t\t}\n\t\t\t\tdb.createObjectStore(storeName);\n\t\t\t};\n\n\t\t\topenReq.onsuccess = event => {\n\t\t\t\tresolve(new IndexedDBStore((<IDBOpenDBRequest>event.target).result, storeName));\n\t\t\t};\n\n\t\t\topenReq.onerror = onErrorHandler(reject, ErrorCode.EACCES);\n\t\t});\n\t}\n\n\tconstructor(private db: IDBDatabase, private storeName: string) {}\n\n\tpublic name(): string {\n\t\treturn IndexedDBFileSystem.Name + ' - ' + this.storeName;\n\t}\n\n\tpublic clear(): Promise<void> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst tx = this.db.transaction(this.storeName, 'readwrite'),\n\t\t\t\t\tobjectStore = tx.objectStore(this.storeName),\n\t\t\t\t\tr: IDBRequest = objectStore.clear();\n\t\t\t\tr.onsuccess = () => {\n\t\t\t\t\t// Use setTimeout to commit transaction.\n\t\t\t\t\tsetTimeout(resolve, 0);\n\t\t\t\t};\n\t\t\t\tr.onerror = onErrorHandler(reject);\n\t\t\t} catch (e) {\n\t\t\t\treject(convertError(e));\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic beginTransaction(type: 'readonly'): AsyncKeyValueROTransaction;\n\tpublic beginTransaction(type: 'readwrite'): AsyncKeyValueRWTransaction;\n\tpublic beginTransaction(type: 'readonly' | 'readwrite' = 'readonly'): AsyncKeyValueROTransaction {\n\t\tconst tx = this.db.transaction(this.storeName, type),\n\t\t\tobjectStore = tx.objectStore(this.storeName);\n\t\tif (type === 'readwrite') {\n\t\t\treturn new IndexedDBRWTransaction(tx, objectStore);\n\t\t} else if (type === 'readonly') {\n\t\t\treturn new IndexedDBROTransaction(tx, objectStore);\n\t\t} else {\n\t\t\tthrow new ApiError(ErrorCode.EINVAL, 'Invalid transaction type.');\n\t\t}\n\t}\n}\n\nexport namespace IndexedDBFileSystem {\n\t/**\n\t * Configuration options for the IndexedDB file system.\n\t */\n\texport interface Options {\n\t\t/**\n\t\t * The name of this file system. You can have multiple IndexedDB file systems operating at once, but each must have a different name.\n\t\t */\n\t\tstoreName?: string;\n\n\t\t/**\n\t\t * The size of the inode cache. Defaults to 100. A size of 0 or below disables caching.\n\t\t */\n\t\tcacheSize?: number;\n\n\t\t/**\n\t\t * The IDBFactory to use. Defaults to `globalThis.indexedDB`.\n\t\t */\n\t\tidbFactory?: IDBFactory;\n\t}\n}\n\n/**\n * A file system that uses the IndexedDB key value file system.\n */\nexport class IndexedDBFileSystem extends AsyncKeyValueFileSystem {\n\tpublic static readonly Name = 'IndexedDB';\n\n\tpublic static Create = CreateBackend.bind(this);\n\n\tpublic static readonly Options: BackendOptions = {\n\t\tstoreName: {\n\t\t\ttype: 'string',\n\t\t\toptional: true,\n\t\t\tdescription: 'The name of this file system. You can have multiple IndexedDB file systems operating at once, but each must have a different name.',\n\t\t},\n\t\tcacheSize: {\n\t\t\ttype: 'number',\n\t\t\toptional: true,\n\t\t\tdescription: 'The size of the inode cache. Defaults to 100. A size of 0 or below disables caching.',\n\t\t},\n\t\tidbFactory: {\n\t\t\ttype: 'object',\n\t\t\toptional: true,\n\t\t\tdescription: 'The IDBFactory to use. Defaults to globalThis.indexedDB.',\n\t\t},\n\t};\n\n\tpublic static isAvailable(idbFactory: IDBFactory = globalThis.indexedDB): boolean {\n\t\ttry {\n\t\t\tif (!(idbFactory instanceof IDBFactory)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst req = idbFactory.open('__zenfs_test__');\n\t\t\tif (!req) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tconstructor({ cacheSize = 100, storeName = 'zenfs', idbFactory = globalThis.indexedDB }: IndexedDBFileSystem.Options) {\n\t\tsuper(cacheSize);\n\t\tthis._ready = IndexedDBStore.Create(storeName, idbFactory).then(store => {\n\t\t\tthis.init(store);\n\t\t\treturn this;\n\t\t});\n\t}\n}\n", "import { SyncKeyValueStore, SimpleSyncStore, SyncKeyValueFileSystem, SimpleSyncRWTransaction, SyncKeyValueRWTransaction } from '@zenfs/core/backends/SyncStore.js';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\nimport { CreateBackend, type BackendOptions } from '@zenfs/core/backends/backend.js';\nimport { Buffer } from 'buffer';\n\n/**\n * A synchronous key-value store backed by Storage.\n */\nexport class StorageStore implements SyncKeyValueStore, SimpleSyncStore {\n\tpublic name(): string {\n\t\treturn StorageFileSystem.Name;\n\t}\n\n\tconstructor(protected _storage: Storage) {}\n\n\tpublic clear(): void {\n\t\tthis._storage.clear();\n\t}\n\n\tpublic beginTransaction(type: string): SyncKeyValueRWTransaction {\n\t\t// No need to differentiate.\n\t\treturn new SimpleSyncRWTransaction(this);\n\t}\n\n\tpublic get(key: string): Buffer | undefined {\n\t\tconst data = this._storage.getItem(key);\n\t\tif (typeof data != 'string') {\n\t\t\treturn;\n\t\t}\n\n\t\treturn Buffer.from(data);\n\t}\n\n\tpublic put(key: string, data: Buffer, overwrite: boolean): boolean {\n\t\ttry {\n\t\t\tif (!overwrite && this._storage.getItem(key) !== null) {\n\t\t\t\t// Don't want to overwrite the key!\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._storage.setItem(key, data.toString());\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\tthrow new ApiError(ErrorCode.ENOSPC, 'Storage is full.');\n\t\t}\n\t}\n\n\tpublic del(key: string): void {\n\t\ttry {\n\t\t\tthis._storage.removeItem(key);\n\t\t} catch (e) {\n\t\t\tthrow new ApiError(ErrorCode.EIO, 'Unable to delete key ' + key + ': ' + e);\n\t\t}\n\t}\n}\n\nexport namespace StorageFileSystem {\n\t/**\n\t * Options to pass to the StorageFileSystem\n\t */\n\texport interface Options {\n\t\t/**\n\t\t * The Storage to use. Defaults to globalThis.localStorage.\n\t\t */\n\t\tstorage: Storage;\n\t}\n}\n\n/**\n * A synchronous file system backed by a `Storage` (e.g. localStorage).\n */\nexport class StorageFileSystem extends SyncKeyValueFileSystem {\n\tpublic static readonly Name = 'Storage';\n\n\tpublic static Create = CreateBackend.bind(this);\n\n\tpublic static readonly Options: BackendOptions = {\n\t\tstorage: {\n\t\t\ttype: 'object',\n\t\t\toptional: true,\n\t\t\tdescription: 'The Storage to use. Defaults to globalThis.localStorage.',\n\t\t},\n\t};\n\n\tpublic static isAvailable(storage: Storage = globalThis.localStorage): boolean {\n\t\treturn storage instanceof Storage;\n\t}\n\t/**\n\t * Creates a new Storage file system using the contents of `Storage`.\n\t */\n\tconstructor({ storage = globalThis.localStorage }: StorageFileSystem.Options) {\n\t\tsuper({ store: new StorageStore(storage) });\n\t}\n}\n", "import { type FileSystem, BaseFileSystem, FileContents, FileSystemMetadata } from '@zenfs/core/filesystem.js';\nimport { ApiError, ErrorCode } from '@zenfs/core/ApiError.js';\nimport { File, FileFlag } from '@zenfs/core/file.js';\nimport { Stats } from '@zenfs/core/stats.js';\nimport { Cred } from '@zenfs/core/cred.js';\nimport { CreateBackend, type BackendOptions } from '@zenfs/core/backends/backend.js';\n\n/**\n * @hidden\n */\ndeclare const importScripts: (...path: string[]) => unknown;\n\n/**\n * An RPC message\n */\ninterface RPCMessage {\n\tisBFS: true;\n\tid: number;\n}\n\ntype _FSAsyncMethods = {\n\t[Method in keyof FileSystem]: Extract<FileSystem[Method], (...args: unknown[]) => Promise<unknown>>;\n};\n\ntype _RPCFSRequests = {\n\t[Method in keyof _FSAsyncMethods]: { method: Method; args: Parameters<_FSAsyncMethods[Method]> };\n};\n\ntype _RPCFSResponses = {\n\t[Method in keyof _FSAsyncMethods]: { method: Method; value: Awaited<ReturnType<_FSAsyncMethods[Method]>> };\n};\n\n/**\n * @see https://stackoverflow.com/a/60920767/17637456\n */\ntype RPCRequest = RPCMessage & (_RPCFSRequests[keyof _FSAsyncMethods] | { method: 'metadata'; args: [] } | { method: 'syncClose'; args: [string, File] });\n\ntype RPCResponse = RPCMessage & (_RPCFSResponses[keyof _FSAsyncMethods] | { method: 'metadata'; value: FileSystemMetadata } | { method: 'syncClose'; value: null });\n\nfunction isRPCMessage(arg: unknown): arg is RPCMessage {\n\treturn typeof arg == 'object' && 'isBFS' in arg && !!arg.isBFS;\n}\n\ntype _executor = Parameters<ConstructorParameters<typeof Promise>[0]>;\ninterface WorkerRequest {\n\tresolve: _executor[0];\n\treject: _executor[1];\n}\n\nexport namespace WorkerFS {\n\texport interface Options {\n\t\t/**\n\t\t * The target worker that you want to connect to, or the current worker if in a worker context.\n\t\t */\n\t\tworker: Worker;\n\t}\n}\n\ntype _RPCExtractReturnValue<T extends RPCResponse['method']> = Promise<Extract<RPCResponse, { method: T }>['value']>;\n\n/**\n * WorkerFS lets you access a ZenFS instance that is running in a different\n * JavaScript context (e.g. access ZenFS in one of your WebWorkers, or\n * access ZenFS running on the main page from a WebWorker).\n *\n * For example, to have a WebWorker access files in the main browser thread,\n * do the following:\n *\n * MAIN BROWSER THREAD:\n *\n * ```javascript\n * // Listen for remote file system requests.\n * ZenFS.Backend.WorkerFS.attachRemoteListener(webWorkerObject);\n * ```\n *\n * WEBWORKER THREAD:\n *\n * ```javascript\n * // Set the remote file system as the root file system.\n * ZenFS.configure({ fs: \"WorkerFS\", options: { worker: self }}, function(e) {\n * // Ready!\n * });\n * ```\n *\n * Note that synchronous operations are not permitted on the WorkerFS, regardless\n * of the configuration option of the remote FS.\n */\nexport class WorkerFS extends BaseFileSystem {\n\tpublic static readonly Name = 'WorkerFS';\n\n\tpublic static Create = CreateBackend.bind(this);\n\n\tpublic static readonly Options: BackendOptions = {\n\t\tworker: {\n\t\t\ttype: 'object',\n\t\t\tdescription: 'The target worker that you want to connect to, or the current worker if in a worker context.',\n\t\t\tvalidator: async (v: Worker): Promise<void> => {\n\t\t\t\t// Check for a `postMessage` function.\n\t\t\t\tif (typeof v?.postMessage != 'function') {\n\t\t\t\t\tthrow new ApiError(ErrorCode.EINVAL, `option must be a Web Worker instance.`);\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t};\n\n\tpublic static isAvailable(): boolean {\n\t\treturn typeof importScripts !== 'undefined' || typeof Worker !== 'undefined';\n\t}\n\n\tprivate _worker: Worker;\n\tprivate _currentID: number = 0;\n\tprivate _requests: Map<number, WorkerRequest> = new Map();\n\n\tprivate _isInitialized: boolean = false;\n\tprivate _metadata: FileSystemMetadata;\n\n\t/**\n\t * Constructs a new WorkerFS instance that connects with ZenFS running on\n\t * the specified worker.\n\t */\n\tpublic constructor({ worker }: WorkerFS.Options) {\n\t\tsuper();\n\t\tthis._worker = worker;\n\t\tthis._worker.onmessage = (event: MessageEvent) => {\n\t\t\tif (!isRPCMessage(event.data)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { id, method, value } = event.data as RPCResponse;\n\n\t\t\tif (method === 'metadata') {\n\t\t\t\tthis._metadata = value;\n\t\t\t\tthis._isInitialized = true;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { resolve, reject } = this._requests.get(id);\n\t\t\tthis._requests.delete(id);\n\t\t\tif (value instanceof Error || value instanceof ApiError) {\n\t\t\t\treject(value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(value);\n\t\t};\n\t}\n\n\tpublic get metadata(): FileSystemMetadata {\n\t\treturn {\n\t\t\t...super.metadata,\n\t\t\t...this._metadata,\n\t\t\tname: WorkerFS.Name,\n\t\t\tsynchronous: false,\n\t\t};\n\t}\n\n\tprivate async _rpc<T extends RPCRequest['method']>(method: T, ...args: Extract<RPCRequest, { method: T }>['args']): _RPCExtractReturnValue<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst id = this._currentID++;\n\t\t\tthis._requests.set(id, { resolve, reject });\n\t\t\tthis._worker.postMessage({\n\t\t\t\tisBFS: true,\n\t\t\t\tid,\n\t\t\t\tmethod,\n\t\t\t\targs,\n\t\t\t} as RPCRequest);\n\t\t});\n\t}\n\n\tpublic rename(oldPath: string, newPath: string, cred: Cred): Promise<void> {\n\t\treturn this._rpc('rename', oldPath, newPath, cred);\n\t}\n\tpublic stat(p: string, cred: Cred): Promise<Stats> {\n\t\treturn this._rpc('stat', p, cred);\n\t}\n\tpublic open(p: string, flag: FileFlag, mode: number, cred: Cred): Promise<File> {\n\t\treturn this._rpc('open', p, flag, mode, cred);\n\t}\n\tpublic unlink(p: string, cred: Cred): Promise<void> {\n\t\treturn this._rpc('unlink', p, cred);\n\t}\n\tpublic rmdir(p: string, cred: Cred): Promise<void> {\n\t\treturn this._rpc('rmdir', p, cred);\n\t}\n\tpublic mkdir(p: string, mode: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('mkdir', p, mode, cred);\n\t}\n\tpublic readdir(p: string, cred: Cred): Promise<string[]> {\n\t\treturn this._rpc('readdir', p, cred);\n\t}\n\tpublic exists(p: string, cred: Cred): Promise<boolean> {\n\t\treturn this._rpc('exists', p, cred);\n\t}\n\tpublic realpath(p: string, cred: Cred): Promise<string> {\n\t\treturn this._rpc('realpath', p, cred);\n\t}\n\tpublic truncate(p: string, len: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('truncate', p, len, cred);\n\t}\n\tpublic readFile(fname: string, encoding: BufferEncoding, flag: FileFlag, cred: Cred): Promise<FileContents> {\n\t\treturn this._rpc('readFile', fname, encoding, flag, cred);\n\t}\n\tpublic writeFile(fname: string, data: FileContents, encoding: BufferEncoding, flag: FileFlag, mode: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('writeFile', fname, data, encoding, flag, mode, cred);\n\t}\n\tpublic appendFile(fname: string, data: FileContents, encoding: BufferEncoding, flag: FileFlag, mode: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('appendFile', fname, data, encoding, flag, mode, cred);\n\t}\n\tpublic chmod(p: string, mode: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('chmod', p, mode, cred);\n\t}\n\tpublic chown(p: string, new_uid: number, new_gid: number, cred: Cred): Promise<void> {\n\t\treturn this._rpc('chown', p, new_uid, new_gid, cred);\n\t}\n\tpublic utimes(p: string, atime: Date, mtime: Date, cred: Cred): Promise<void> {\n\t\treturn this._rpc('utimes', p, atime, mtime, cred);\n\t}\n\tpublic link(srcpath: string, dstpath: string, cred: Cred): Promise<void> {\n\t\treturn this._rpc('link', srcpath, dstpath, cred);\n\t}\n\tpublic symlink(srcpath: string, dstpath: string, type: string, cred: Cred): Promise<void> {\n\t\treturn this._rpc('symlink', srcpath, dstpath, type, cred);\n\t}\n\tpublic readlink(p: string, cred: Cred): Promise<string> {\n\t\treturn this._rpc('readlink', p, cred);\n\t}\n\n\tpublic syncClose(method: string, fd: File): Promise<void> {\n\t\treturn this._rpc('syncClose', method, fd);\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["src_exports", "__export", "FileSystemAccessFile", "FileSystemAccessFileSystem", "HTTPRequest", "IndexedDBFileSystem", "IndexedDBROTransaction", "IndexedDBRWTransaction", "IndexedDBStore", "StorageFileSystem", "StorageStore", "WorkerFS", "exports$3", "_dewExec$2", "dew$2", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "__name", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "exports$2", "_dewExec$1", "dew$1", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "d", "s", "value", "c", "rt", "exports$1", "_dewExec", "dew", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "actual", "fromArrayLike", "array", "arrayView", "copy", "byteOffset", "obj", "numberIsNaN", "a", "x", "y", "list", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "remaining", "strLen", "parsed", "utf8Write", "blitBuffer", "asciiWrite", "asciiToBytes", "base64Write", "ucs2Write", "utf16leToBytes", "res", "firstByte", "codePoint", "bytesPerSequence", "secondByte", "thirdByte", "fourthByte", "tempCodePoint", "decodeCodePointsArray", "MAX_ARGUMENTS_LENGTH", "codePoints", "ret", "out", "hexSliceLookupTable", "bytes", "newBuf", "checkOffset", "ext", "noAssert", "mul", "defineBigIntMethod", "validateNumber", "first", "last", "boundsError", "lo", "__pow", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "exports", "INSPECT_MAX_BYTES", "kMaxLength", "cwd", "sep", "validateString", "str", "name", "__name", "normalizeString", "path", "allowAboveRoot", "res", "lastSegmentLength", "lastSlash", "dots", "char", "i", "lastSlashIndex", "__name", "resolve", "args", "resolvedPath", "resolvedAbsolute", "i", "path", "cwd", "validateString", "normalizeString", "__name", "normalize", "isAbsolute", "trailingSeparator", "join", "args", "joined", "i", "arg", "validateString", "normalize", "__name", "dirname", "path", "validateString", "hasRoot", "end", "matchedSlash", "i", "__name", "basename", "suffix", "start", "extIdx", "firstNonSlashEnd", "ErrorCode", "ErrorStrings", "ApiError", "json", "err", "buffer", "i", "code", "p", "path", "type", "message", "Buffer", "bytesWritten", "__name", "Cred", "uid", "gid", "suid", "sgid", "euid", "egid", "__name", "FileType", "Stats", "buffer", "size", "mode", "atime", "mtime", "ctime", "uid", "gid", "s", "itemType", "atimeMs", "mtimeMs", "ctimeMs", "birthtimeMs", "currentTime", "Buffer", "cred", "perms", "uMode", "gMode", "wMode", "uPerms", "gPerms", "wPerms", "Cred", "__name", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "__name", "reject", "fulfilled", "step", "e", "rejected", "result", "_a", "FileSystem", "options", "BaseFileSystem", "p", "flag", "cred", "ApiError", "ErrorCode", "mode", "stats", "ActionType", "fd", "parentStats", "dirname", "oldPath", "newPath", "splitPath", "sep", "i", "addPaths", "join", "len", "FileFlag", "fname", "encoding", "stat", "buf", "Buffer", "data", "new_uid", "new_gid", "atime", "mtime", "srcpath", "dstpath", "type", "SynchronousFileSystem", "flags", "Inode", "buffer", "id", "size", "mode", "atime", "mtime", "ctime", "uid", "gid", "Stats", "FileType", "buff", "Buffer", "stats", "hasChanged", "atimeMs", "mtimeMs", "ctimeMs", "__name", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "__name", "reject", "fulfilled", "step", "e", "rejected", "result", "_min", "d0", "d1", "d2", "bx", "ay", "__name", "levenshtein", "a", "b", "la", "lb", "offset", "vector", "y", "x", "d3", "bx0", "bx1", "bx2", "bx3", "dd", "dy", "checkOptions", "backend", "opts", "__awaiter", "optsInfo", "fsName", "pendingValidators", "callbackCalled", "loopEnded", "optName", "opt", "providedValue", "incorrectOptions", "o", "ApiError", "ErrorCode", "typeMatches", "e", "setImmediate", "cb", "ROOT_NODE_ID", "getEmptyDirNode", "Buffer", "__name", "randomUUID", "c", "r", "SimpleSyncRWTransaction", "store", "key", "val", "data", "overwrite", "value", "__name", "SyncKeyValueFile", "PreloadFile", "_fs", "_path", "_flag", "_stat", "contents", "SyncKeyValueFileSystem", "SynchronousFileSystem", "options", "p", "mode", "cred", "tx", "ApiError", "oldPath", "newPath", "oldParent", "dirname", "oldName", "basename", "newParent", "newName", "oldDirNode", "oldDirList", "nodeId", "ErrorCode", "newDirNode", "newDirList", "newNameNode", "e", "Buffer", "stats", "flag", "newFile", "FileType", "node", "FileFlag", "new_uid", "new_gid", "fileInodeId", "fileInode", "inodeChanged", "ROOT_NODE_ID", "currTime", "dirInode", "Inode", "randomUUID", "getEmptyDirNode", "parent", "filename", "visited", "currentPath", "join", "readDirectory", "inode", "dirList", "resolve", "sep", "id", "currId", "type", "parentDir", "fname", "parentNode", "dirListing", "fileNode", "dataId", "fileNodeId", "isDir", "parentListing", "fileName", "CreateBackend", "options", "cb", "checkOptions", "fs", "err", "__name", "_a", "InMemoryStore", "InMemoryFileSystem", "type", "SimpleSyncRWTransaction", "key", "data", "overwrite", "__name", "SyncKeyValueFileSystem", "CreateBackend", "cred", "Cred", "mounts", "InMemoryFileSystem", "fs", "mount", "getMount", "mountPoint", "__name", "mount", "mountPoint", "fs", "resolve", "mounts", "ApiError", "ErrorCode", "__name", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "__name", "reject", "fulfilled", "step", "e", "rejected", "result", "ActionType", "FileFlag", "flagStr", "ApiError", "ErrorCode", "mode", "BaseFile", "uid", "gid", "atime", "mtime", "PreloadFile", "_fs", "_path", "_flag", "_stat", "contents", "Buffer", "delta", "newPos", "Stats", "len", "getMount", "buf", "newBuff", "buffer", "offset", "length", "position", "endFp", "rv", "NoSyncFile", "handleError", "__name", "path", "error", "ApiError", "FileSystemAccessFile", "PreloadFile", "_fs", "_path", "_flag", "_stat", "contents", "__async", "Cred", "_FileSystemAccessFileSystem", "BaseFileSystem", "handle", "__spreadProps", "__spreadValues", "p", "data", "stats", "cred", "currentStats", "FileFlag", "oldPath", "newPath", "files", "file", "join", "oldFile", "destFolder", "dirname", "writable", "basename", "buffer", "err", "fname", "encoding", "flag", "mode", "createFile", "Buffer", "ErrorCode", "Stats", "FileType", "lastModified", "size", "e", "flags", "overwrite", "_keys", "iter", "__forAwait", "more", "temp", "key", "walkedPath", "pathParts", "getHandleParts", "_0", "pathPart", "remainingPathParts", "walkingPath", "continueWalk", "FileSystemAccessFileSystem", "CreateBackend", "fetchIsAvailable", "convertError", "e", "ApiError", "ErrorCode", "__name", "fetchFile", "p", "type", "__async", "response", "buf", "Buffer", "fetchFileSize", "FileIndex", "listing", "idx", "rootInode", "IndexDirInode", "queue", "inode", "next", "pwd", "tree", "parent", "node", "children", "name", "IndexFileInode", "Stats", "FileType", "cb", "path", "dir", "files", "file", "item", "isIndexFileInode", "splitPath", "dirpath", "itemname", "isIndexDirInode", "itemNameMark", "parentPath", "itemName", "child", "p", "dirname", "__name", "data", "_HTTPRequest", "BaseFileSystem", "index", "baseUrl", "indexRequest", "fetchFile", "data", "FileIndex", "fetchFileSize", "fetchIsAvailable", "__spreadProps", "__spreadValues", "file", "path", "buffer", "inode", "isIndexFileInode", "ApiError", "stats", "cred", "__async", "isIndexDirInode", "ErrorCode", "flags", "mode", "ActionType", "NoSyncFile", "Stats", "fname", "encoding", "flag", "fd", "fdBuff", "Buffer", "filePath", "p", "type", "HTTPRequest", "__name", "CreateBackend", "__awaiter", "thisArg", "_arguments", "P", "generator", "adopt", "value", "resolve", "__name", "reject", "fulfilled", "step", "e", "rejected", "result", "LRUNode", "key", "LRUCache", "limit", "node", "AsyncKeyValueFile", "PreloadFile", "_fs", "_path", "_flag", "_stat", "contents", "AsyncKeyValueFileSystem", "BaseFileSystem", "cacheSize", "store", "p", "mode", "cred", "tx", "inode", "ApiError", "oldPath", "newPath", "c", "oldParent", "dirname", "oldName", "basename", "newParent", "newName", "oldDirNode", "oldDirList", "nodeId", "ErrorCode", "newDirNode", "newDirList", "newNameNode", "Buffer", "stats", "flag", "data", "newFile", "FileType", "FileFlag", "new_uid", "new_gid", "fileInodeId", "fileInode", "inodeChanged", "ROOT_NODE_ID", "currTime", "dirInode", "Inode", "randomUUID", "getEmptyDirNode", "parent", "filename", "visited", "currentPath", "join", "id", "dirList", "retries", "reroll", "currId", "type", "parentDir", "fname", "parentNode", "dirListing", "dataId", "fileNode", "fileNodeId", "isDir", "parentListing", "fileName", "convertError", "e", "message", "ApiError", "ErrorCode", "__name", "onErrorHandler", "cb", "code", "IndexedDBROTransaction", "tx", "store", "key", "resolve", "reject", "r", "event", "result", "Buffer", "IndexedDBRWTransaction", "data", "overwrite", "IndexedDBStore", "db", "storeName", "indexedDB", "openReq", "IndexedDBFileSystem", "objectStore", "type", "_IndexedDBFileSystem", "AsyncKeyValueFileSystem", "idbFactory", "cacheSize", "CreateBackend", "StorageStore", "_storage", "StorageFileSystem", "type", "SimpleSyncRWTransaction", "key", "data", "Buffer", "overwrite", "e", "ApiError", "ErrorCode", "__name", "_StorageFileSystem", "SyncKeyValueFileSystem", "storage", "CreateBackend", "isRPCMessage", "arg", "__name", "_WorkerFS", "BaseFileSystem", "worker", "event", "id", "method", "value", "resolve", "reject", "ApiError", "__spreadProps", "__spreadValues", "args", "__async", "oldPath", "newPath", "cred", "p", "flag", "mode", "len", "fname", "encoding", "data", "new_uid", "new_gid", "atime", "mtime", "srcpath", "dstpath", "type", "fd", "WorkerFS", "CreateBackend", "v", "ErrorCode"]
|
|
7
7
|
}
|