@muze-nl/jsfs-solid 0.2.1 → 0.2.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/browser.js +402 -155
- package/dist/browser.js.map +4 -4
- package/dist/browser.min.js +10 -10
- package/dist/browser.min.js.map +4 -4
- package/package.json +6 -6
- package/package.json~ +37 -0
- package/src/SolidAdapter.js +2 -2
- package/src/SolidClient.js +3 -3
package/dist/browser.min.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../node_modules/base64-js/index.js", "../node_modules/ieee754/index.js", "../node_modules/buffer/index.js", "../node_modules/readable-stream/lib/ours/primordials.js", "../node_modules/readable-stream/lib/ours/util/inspect.js", "../node_modules/readable-stream/lib/ours/errors.js", "../node_modules/abort-controller/browser.js", "../node_modules/events/events.js", "../node_modules/readable-stream/lib/ours/util.js", "../node_modules/readable-stream/lib/internal/validators.js", "../node_modules/process/browser.js", "../node_modules/readable-stream/lib/internal/streams/utils.js", "../node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../node_modules/readable-stream/lib/internal/streams/destroy.js", "../node_modules/readable-stream/lib/internal/streams/legacy.js", "../node_modules/readable-stream/lib/internal/streams/add-abort-signal.js", "../node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../node_modules/readable-stream/lib/internal/streams/state.js", "../node_modules/safe-buffer/index.js", "../node_modules/string_decoder/lib/string_decoder.js", "../node_modules/readable-stream/lib/internal/streams/from.js", "../node_modules/readable-stream/lib/internal/streams/readable.js", "../node_modules/readable-stream/lib/internal/streams/writable.js", "../node_modules/readable-stream/lib/internal/streams/duplexify.js", "../node_modules/readable-stream/lib/internal/streams/duplex.js", "../node_modules/readable-stream/lib/internal/streams/transform.js", "../node_modules/readable-stream/lib/internal/streams/passthrough.js", "../node_modules/readable-stream/lib/internal/streams/pipeline.js", "../node_modules/readable-stream/lib/internal/streams/compose.js", "../node_modules/readable-stream/lib/internal/streams/operators.js", "../node_modules/readable-stream/lib/stream/promises.js", "../node_modules/readable-stream/lib/stream.js", "../node_modules/readable-stream/lib/ours/browser.js", "../node_modules/@muze-nl/jsfs/src/Path.mjs", "../node_modules/@muze-nl/jsfs/src/FileSystem.mjs", "../node_modules/@muze-nl/metro/src/metro.mjs", "../node_modules/@muze-nl/jsfs/src/Adapters/Http.mjs", "../node_modules/@muze-nl/jsfs/src/index.mjs", "../node_modules/@muze-nl/metro/src/mw/json.mjs", "../node_modules/@muze-nl/metro/src/mw/thrower.mjs", "../node_modules/@muze-nl/metro/src/mw/getdata.mjs", "../node_modules/@muze-nl/metro/src/api.mjs", "../node_modules/@muze-nl/metro/src/everything.mjs", "../node_modules/@muze-nl/assert/src/assert.mjs", "../node_modules/@muze-nl/metro-oauth2/src/tokenstore.mjs", "../node_modules/@muze-nl/metro-oauth2/src/oauth2.mjs", "../node_modules/@muze-nl/metro-oauth2/src/keysstore.mjs", "../node_modules/dpop/
|
|
4
|
-
"sourcesContent": ["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction 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 }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction 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\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction 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 var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n", "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.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\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.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\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\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 */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\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\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction 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(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\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 &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction 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\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction 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\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\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction 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 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 }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction 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 return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction 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 ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.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 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\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\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!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 if (length === undefined) {\n length = 0\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 for (i = 0; i < list.length; ++i) {\n let buf = list[i]\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(\n buffer,\n buf,\n pos\n )\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 pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// 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\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\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 return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\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 return this\n}\n\nBuffer.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\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.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\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.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}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.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 if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\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}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\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 }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\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 if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\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 return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\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\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n 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\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction 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 return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n 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\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.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\nBuffer.prototype.readUint16BE =\nBuffer.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\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.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 if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.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 if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.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 & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.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 if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.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 if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.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\nBuffer.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\nBuffer.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\nBuffer.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\nfunction 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\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\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 & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\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 & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\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(0xffffffff))\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\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\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(0xffffffff))\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\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\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 & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\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 & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!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\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n 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(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n 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 }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\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)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\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\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n 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)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\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 if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\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 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction 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',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction 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)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\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) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\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 return i\n}\n\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\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n", "'use strict'\n\n/*\n This file is a reduced and adapted version of the main lib/internal/per_context/primordials.js file defined at\n\n https://github.com/nodejs/node/blob/main/lib/internal/per_context/primordials.js\n\n Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\n\n// This is a simplified version of AggregateError\nclass AggregateError extends Error {\n constructor(errors) {\n if (!Array.isArray(errors)) {\n throw new TypeError(`Expected input to be an Array, got ${typeof errors}`)\n }\n let message = ''\n for (let i = 0; i < errors.length; i++) {\n message += ` ${errors[i].stack}\\n`\n }\n super(message)\n this.name = 'AggregateError'\n this.errors = errors\n }\n}\nmodule.exports = {\n AggregateError,\n ArrayIsArray(self) {\n return Array.isArray(self)\n },\n ArrayPrototypeIncludes(self, el) {\n return self.includes(el)\n },\n ArrayPrototypeIndexOf(self, el) {\n return self.indexOf(el)\n },\n ArrayPrototypeJoin(self, sep) {\n return self.join(sep)\n },\n ArrayPrototypeMap(self, fn) {\n return self.map(fn)\n },\n ArrayPrototypePop(self, el) {\n return self.pop(el)\n },\n ArrayPrototypePush(self, el) {\n return self.push(el)\n },\n ArrayPrototypeSlice(self, start, end) {\n return self.slice(start, end)\n },\n Error,\n FunctionPrototypeCall(fn, thisArgs, ...args) {\n return fn.call(thisArgs, ...args)\n },\n FunctionPrototypeSymbolHasInstance(self, instance) {\n return Function.prototype[Symbol.hasInstance].call(self, instance)\n },\n MathFloor: Math.floor,\n Number,\n NumberIsInteger: Number.isInteger,\n NumberIsNaN: Number.isNaN,\n NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n NumberParseInt: Number.parseInt,\n ObjectDefineProperties(self, props) {\n return Object.defineProperties(self, props)\n },\n ObjectDefineProperty(self, name, prop) {\n return Object.defineProperty(self, name, prop)\n },\n ObjectGetOwnPropertyDescriptor(self, name) {\n return Object.getOwnPropertyDescriptor(self, name)\n },\n ObjectKeys(obj) {\n return Object.keys(obj)\n },\n ObjectSetPrototypeOf(target, proto) {\n return Object.setPrototypeOf(target, proto)\n },\n Promise,\n PromisePrototypeCatch(self, fn) {\n return self.catch(fn)\n },\n PromisePrototypeThen(self, thenFn, catchFn) {\n return self.then(thenFn, catchFn)\n },\n PromiseReject(err) {\n return Promise.reject(err)\n },\n PromiseResolve(val) {\n return Promise.resolve(val)\n },\n ReflectApply: Reflect.apply,\n RegExpPrototypeTest(self, value) {\n return self.test(value)\n },\n SafeSet: Set,\n String,\n StringPrototypeSlice(self, start, end) {\n return self.slice(start, end)\n },\n StringPrototypeToLowerCase(self) {\n return self.toLowerCase()\n },\n StringPrototypeToUpperCase(self) {\n return self.toUpperCase()\n },\n StringPrototypeTrim(self) {\n return self.trim()\n },\n Symbol,\n SymbolFor: Symbol.for,\n SymbolAsyncIterator: Symbol.asyncIterator,\n SymbolHasInstance: Symbol.hasInstance,\n SymbolIterator: Symbol.iterator,\n SymbolDispose: Symbol.dispose || Symbol('Symbol.dispose'),\n SymbolAsyncDispose: Symbol.asyncDispose || Symbol('Symbol.asyncDispose'),\n TypedArrayPrototypeSet(self, buf, len) {\n return self.set(buf, len)\n },\n Boolean,\n Uint8Array\n}\n", "'use strict'\n\n/*\n This file is a reduced and adapted version of the main lib/internal/util/inspect.js file defined at\n\n https://github.com/nodejs/node/blob/main/lib/internal/util/inspect.js\n\n Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\nmodule.exports = {\n format(format, ...args) {\n // Simplified version of https://nodejs.org/api/util.html#utilformatformat-args\n return format.replace(/%([sdifj])/g, function (...[_unused, type]) {\n const replacement = args.shift()\n if (type === 'f') {\n return replacement.toFixed(6)\n } else if (type === 'j') {\n return JSON.stringify(replacement)\n } else if (type === 's' && typeof replacement === 'object') {\n const ctor = replacement.constructor !== Object ? replacement.constructor.name : ''\n return `${ctor} {}`.trim()\n } else {\n return replacement.toString()\n }\n })\n },\n inspect(value) {\n // Vastly simplified version of https://nodejs.org/api/util.html#utilinspectobject-options\n switch (typeof value) {\n case 'string':\n if (value.includes(\"'\")) {\n if (!value.includes('\"')) {\n return `\"${value}\"`\n } else if (!value.includes('`') && !value.includes('${')) {\n return `\\`${value}\\``\n }\n }\n return `'${value}'`\n case 'number':\n if (isNaN(value)) {\n return 'NaN'\n } else if (Object.is(value, -0)) {\n return String(value)\n }\n return value\n case 'bigint':\n return `${String(value)}n`\n case 'boolean':\n case 'undefined':\n return String(value)\n case 'object':\n return '{}'\n }\n }\n}\n", "'use strict'\n\nconst { format, inspect } = require('./util/inspect')\nconst { AggregateError: CustomAggregateError } = require('./primordials')\n\n/*\n This file is a reduced and adapted version of the main lib/internal/errors.js file defined at\n\n https://github.com/nodejs/node/blob/main/lib/internal/errors.js\n\n Don't try to replace with the original file and keep it up to date (starting from E(...) definitions)\n with the upstream file.\n*/\n\nconst AggregateError = globalThis.AggregateError || CustomAggregateError\nconst kIsNodeError = Symbol('kIsNodeError')\nconst kTypes = [\n 'string',\n 'function',\n 'number',\n 'object',\n // Accept 'Function' and 'Object' as alternative to the lower cased version.\n 'Function',\n 'Object',\n 'boolean',\n 'bigint',\n 'symbol'\n]\nconst classRegExp = /^([A-Z][a-z0-9]*)+$/\nconst nodeInternalPrefix = '__node_internal_'\nconst codes = {}\nfunction assert(value, message) {\n if (!value) {\n throw new codes.ERR_INTERNAL_ASSERTION(message)\n }\n}\n\n// Only use this for integers! Decimal numbers do not work with this function.\nfunction addNumericalSeparator(val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\nfunction getMessage(key, msg, args) {\n if (typeof msg === 'function') {\n assert(\n msg.length <= args.length,\n // Default options do not count.\n `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).`\n )\n return msg(...args)\n }\n const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length\n assert(\n expectedLength === args.length,\n `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).`\n )\n if (args.length === 0) {\n return msg\n }\n return format(msg, ...args)\n}\nfunction E(code, message, Base) {\n if (!Base) {\n Base = Error\n }\n class NodeError extends Base {\n constructor(...args) {\n super(getMessage(code, message, args))\n }\n toString() {\n return `${this.name} [${code}]: ${this.message}`\n }\n }\n Object.defineProperties(NodeError.prototype, {\n name: {\n value: Base.name,\n writable: true,\n enumerable: false,\n configurable: true\n },\n toString: {\n value() {\n return `${this.name} [${code}]: ${this.message}`\n },\n writable: true,\n enumerable: false,\n configurable: true\n }\n })\n NodeError.prototype.code = code\n NodeError.prototype[kIsNodeError] = true\n codes[code] = NodeError\n}\nfunction hideStackFrames(fn) {\n // We rename the functions that will be hidden to cut off the stacktrace\n // at the outermost one\n const hidden = nodeInternalPrefix + fn.name\n Object.defineProperty(fn, 'name', {\n value: hidden\n })\n return fn\n}\nfunction aggregateTwoErrors(innerError, outerError) {\n if (innerError && outerError && innerError !== outerError) {\n if (Array.isArray(outerError.errors)) {\n // If `outerError` is already an `AggregateError`.\n outerError.errors.push(innerError)\n return outerError\n }\n const err = new AggregateError([outerError, innerError], outerError.message)\n err.code = outerError.code\n return err\n }\n return innerError || outerError\n}\nclass AbortError extends Error {\n constructor(message = 'The operation was aborted', options = undefined) {\n if (options !== undefined && typeof options !== 'object') {\n throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options)\n }\n super(message, options)\n this.code = 'ABORT_ERR'\n this.name = 'AbortError'\n }\n}\nE('ERR_ASSERTION', '%s', Error)\nE(\n 'ERR_INVALID_ARG_TYPE',\n (name, expected, actual) => {\n assert(typeof name === 'string', \"'name' must be a string\")\n if (!Array.isArray(expected)) {\n expected = [expected]\n }\n let msg = 'The '\n if (name.endsWith(' argument')) {\n // For cases like 'first argument'\n msg += `${name} `\n } else {\n msg += `\"${name}\" ${name.includes('.') ? 'property' : 'argument'} `\n }\n msg += 'must be '\n const types = []\n const instances = []\n const other = []\n for (const value of expected) {\n assert(typeof value === 'string', 'All expected entries have to be of type string')\n if (kTypes.includes(value)) {\n types.push(value.toLowerCase())\n } else if (classRegExp.test(value)) {\n instances.push(value)\n } else {\n assert(value !== 'object', 'The value \"object\" should be written as \"Object\"')\n other.push(value)\n }\n }\n\n // Special handle `object` in case other instances are allowed to outline\n // the differences between each other.\n if (instances.length > 0) {\n const pos = types.indexOf('object')\n if (pos !== -1) {\n types.splice(types, pos, 1)\n instances.push('Object')\n }\n }\n if (types.length > 0) {\n switch (types.length) {\n case 1:\n msg += `of type ${types[0]}`\n break\n case 2:\n msg += `one of type ${types[0]} or ${types[1]}`\n break\n default: {\n const last = types.pop()\n msg += `one of type ${types.join(', ')}, or ${last}`\n }\n }\n if (instances.length > 0 || other.length > 0) {\n msg += ' or '\n }\n }\n if (instances.length > 0) {\n switch (instances.length) {\n case 1:\n msg += `an instance of ${instances[0]}`\n break\n case 2:\n msg += `an instance of ${instances[0]} or ${instances[1]}`\n break\n default: {\n const last = instances.pop()\n msg += `an instance of ${instances.join(', ')}, or ${last}`\n }\n }\n if (other.length > 0) {\n msg += ' or '\n }\n }\n switch (other.length) {\n case 0:\n break\n case 1:\n if (other[0].toLowerCase() !== other[0]) {\n msg += 'an '\n }\n msg += `${other[0]}`\n break\n case 2:\n msg += `one of ${other[0]} or ${other[1]}`\n break\n default: {\n const last = other.pop()\n msg += `one of ${other.join(', ')}, or ${last}`\n }\n }\n if (actual == null) {\n msg += `. Received ${actual}`\n } else if (typeof actual === 'function' && actual.name) {\n msg += `. Received function ${actual.name}`\n } else if (typeof actual === 'object') {\n var _actual$constructor\n if (\n (_actual$constructor = actual.constructor) !== null &&\n _actual$constructor !== undefined &&\n _actual$constructor.name\n ) {\n msg += `. Received an instance of ${actual.constructor.name}`\n } else {\n const inspected = inspect(actual, {\n depth: -1\n })\n msg += `. Received ${inspected}`\n }\n } else {\n let inspected = inspect(actual, {\n colors: false\n })\n if (inspected.length > 25) {\n inspected = `${inspected.slice(0, 25)}...`\n }\n msg += `. Received type ${typeof actual} (${inspected})`\n }\n return msg\n },\n TypeError\n)\nE(\n 'ERR_INVALID_ARG_VALUE',\n (name, value, reason = 'is invalid') => {\n let inspected = inspect(value)\n if (inspected.length > 128) {\n inspected = inspected.slice(0, 128) + '...'\n }\n const type = name.includes('.') ? 'property' : 'argument'\n return `The ${type} '${name}' ${reason}. Received ${inspected}`\n },\n TypeError\n)\nE(\n 'ERR_INVALID_RETURN_VALUE',\n (input, name, value) => {\n var _value$constructor\n const type =\n value !== null &&\n value !== undefined &&\n (_value$constructor = value.constructor) !== null &&\n _value$constructor !== undefined &&\n _value$constructor.name\n ? `instance of ${value.constructor.name}`\n : `type ${typeof value}`\n return `Expected ${input} to be returned from the \"${name}\"` + ` function but got ${type}.`\n },\n TypeError\n)\nE(\n 'ERR_MISSING_ARGS',\n (...args) => {\n assert(args.length > 0, 'At least one arg needs to be specified')\n let msg\n const len = args.length\n args = (Array.isArray(args) ? args : [args]).map((a) => `\"${a}\"`).join(' or ')\n switch (len) {\n case 1:\n msg += `The ${args[0]} argument`\n break\n case 2:\n msg += `The ${args[0]} and ${args[1]} arguments`\n break\n default:\n {\n const last = args.pop()\n msg += `The ${args.join(', ')}, and ${last} arguments`\n }\n break\n }\n return `${msg} must be specified`\n },\n TypeError\n)\nE(\n 'ERR_OUT_OF_RANGE',\n (str, range, input) => {\n assert(range, 'Missing \"range\" argument')\n let received\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 const limit = BigInt(2) ** BigInt(32)\n if (input > limit || input < -limit) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n } else {\n received = inspect(input)\n }\n return `The value of \"${str}\" is out of range. It must be ${range}. Received ${received}`\n },\n RangeError\n)\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error)\nE('ERR_METHOD_NOT_IMPLEMENTED', 'The %s method is not implemented', Error)\nE('ERR_STREAM_ALREADY_FINISHED', 'Cannot call %s after a stream was finished', Error)\nE('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable', Error)\nE('ERR_STREAM_DESTROYED', 'Cannot call %s after a stream was destroyed', Error)\nE('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError)\nE('ERR_STREAM_PREMATURE_CLOSE', 'Premature close', Error)\nE('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF', Error)\nE('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event', Error)\nE('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error)\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError)\nmodule.exports = {\n AbortError,\n aggregateTwoErrors: hideStackFrames(aggregateTwoErrors),\n hideStackFrames,\n codes\n}\n", "/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n", "'use strict'\n\nconst bufferModule = require('buffer')\nconst { format, inspect } = require('./util/inspect')\nconst {\n codes: { ERR_INVALID_ARG_TYPE }\n} = require('./errors')\nconst { kResistStopPropagation, AggregateError, SymbolDispose } = require('./primordials')\nconst AbortSignal = globalThis.AbortSignal || require('abort-controller').AbortSignal\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\nconst Blob = globalThis.Blob || bufferModule.Blob\n/* eslint-disable indent */\nconst isBlob =\n typeof Blob !== 'undefined'\n ? function isBlob(b) {\n // eslint-disable-next-line indent\n return b instanceof Blob\n }\n : function isBlob(b) {\n return false\n }\n/* eslint-enable indent */\n\nconst validateAbortSignal = (signal, name) => {\n if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n}\nconst validateFunction = (value, name) => {\n if (typeof value !== 'function') {\n throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n }\n}\nmodule.exports = {\n AggregateError,\n kEmptyObject: Object.freeze({}),\n once(callback) {\n let called = false\n return function (...args) {\n if (called) {\n return\n }\n called = true\n callback.apply(this, args)\n }\n },\n createDeferredPromise: function () {\n let resolve\n let reject\n\n // eslint-disable-next-line promise/param-names\n const promise = new Promise((res, rej) => {\n resolve = res\n reject = rej\n })\n return {\n promise,\n resolve,\n reject\n }\n },\n promisify(fn) {\n return new Promise((resolve, reject) => {\n fn((err, ...args) => {\n if (err) {\n return reject(err)\n }\n return resolve(...args)\n })\n })\n },\n debuglog() {\n return function () {}\n },\n format,\n inspect,\n types: {\n isAsyncFunction(fn) {\n return fn instanceof AsyncFunction\n },\n isArrayBufferView(arr) {\n return ArrayBuffer.isView(arr)\n }\n },\n isBlob,\n deprecate(fn, message) {\n return fn\n },\n addAbortListener:\n require('events').addAbortListener ||\n function addAbortListener(signal, listener) {\n if (signal === undefined) {\n throw new ERR_INVALID_ARG_TYPE('signal', 'AbortSignal', signal)\n }\n validateAbortSignal(signal, 'signal')\n validateFunction(listener, 'listener')\n let removeEventListener\n if (signal.aborted) {\n queueMicrotask(() => listener())\n } else {\n signal.addEventListener('abort', listener, {\n __proto__: null,\n once: true,\n [kResistStopPropagation]: true\n })\n removeEventListener = () => {\n signal.removeEventListener('abort', listener)\n }\n }\n return {\n __proto__: null,\n [SymbolDispose]() {\n var _removeEventListener\n ;(_removeEventListener = removeEventListener) === null || _removeEventListener === undefined\n ? undefined\n : _removeEventListener()\n }\n }\n },\n AbortSignalAny:\n AbortSignal.any ||\n function AbortSignalAny(signals) {\n // Fast path if there is only one signal.\n if (signals.length === 1) {\n return signals[0]\n }\n const ac = new AbortController()\n const abort = () => ac.abort()\n signals.forEach((signal) => {\n validateAbortSignal(signal, 'signals')\n signal.addEventListener('abort', abort, {\n once: true\n })\n })\n ac.signal.addEventListener(\n 'abort',\n () => {\n signals.forEach((signal) => signal.removeEventListener('abort', abort))\n },\n {\n once: true\n }\n )\n return ac.signal\n }\n}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\n", "/* eslint jsdoc/require-jsdoc: \"error\" */\n\n'use strict'\n\nconst {\n ArrayIsArray,\n ArrayPrototypeIncludes,\n ArrayPrototypeJoin,\n ArrayPrototypeMap,\n NumberIsInteger,\n NumberIsNaN,\n NumberMAX_SAFE_INTEGER,\n NumberMIN_SAFE_INTEGER,\n NumberParseInt,\n ObjectPrototypeHasOwnProperty,\n RegExpPrototypeExec,\n String,\n StringPrototypeToUpperCase,\n StringPrototypeTrim\n} = require('../ours/primordials')\nconst {\n hideStackFrames,\n codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL }\n} = require('../ours/errors')\nconst { normalizeEncoding } = require('../ours/util')\nconst { isAsyncFunction, isArrayBufferView } = require('../ours/util').types\nconst signals = {}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isInt32(value) {\n return value === (value | 0)\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isUint32(value) {\n return value === value >>> 0\n}\nconst octalReg = /^[0-7]+$/\nconst modeDesc = 'must be a 32-bit unsigned integer or an octal string'\n\n/**\n * Parse and validate values that will be converted into mode_t (the S_*\n * constants). Only valid numbers and octal strings are allowed. They could be\n * converted to 32-bit unsigned integers or non-negative signed integers in the\n * C++ land, but any value higher than 0o777 will result in platform-specific\n * behaviors.\n * @param {*} value Values to be validated\n * @param {string} name Name of the argument\n * @param {number} [def] If specified, will be returned for invalid values\n * @returns {number}\n */\nfunction parseFileMode(value, name, def) {\n if (typeof value === 'undefined') {\n value = def\n }\n if (typeof value === 'string') {\n if (RegExpPrototypeExec(octalReg, value) === null) {\n throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc)\n }\n value = NumberParseInt(value, 8)\n }\n validateUint32(value, name)\n return value\n}\n\n/**\n * @callback validateInteger\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInteger} */\nconst validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => {\n if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n if (!NumberIsInteger(value)) throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n if (value < min || value > max) throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n})\n\n/**\n * @callback validateInt32\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInt32} */\nconst validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => {\n // The defaults for min and max correspond to the limits of 32-bit integers.\n if (typeof value !== 'number') {\n throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n if (!NumberIsInteger(value)) {\n throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n }\n if (value < min || value > max) {\n throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n }\n})\n\n/**\n * @callback validateUint32\n * @param {*} value\n * @param {string} name\n * @param {number|boolean} [positive=false]\n * @returns {asserts value is number}\n */\n\n/** @type {validateUint32} */\nconst validateUint32 = hideStackFrames((value, name, positive = false) => {\n if (typeof value !== 'number') {\n throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n if (!NumberIsInteger(value)) {\n throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n }\n const min = positive ? 1 : 0\n // 2 ** 32 === 4294967296\n const max = 4294967295\n if (value < min || value > max) {\n throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n }\n})\n\n/**\n * @callback validateString\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string}\n */\n\n/** @type {validateString} */\nfunction validateString(value, name) {\n if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value)\n}\n\n/**\n * @callback validateNumber\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateNumber} */\nfunction validateNumber(value, name, min = undefined, max) {\n if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n if (\n (min != null && value < min) ||\n (max != null && value > max) ||\n ((min != null || max != null) && NumberIsNaN(value))\n ) {\n throw new ERR_OUT_OF_RANGE(\n name,\n `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`,\n value\n )\n }\n}\n\n/**\n * @callback validateOneOf\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} oneOf\n */\n\n/** @type {validateOneOf} */\nconst validateOneOf = hideStackFrames((value, name, oneOf) => {\n if (!ArrayPrototypeIncludes(oneOf, value)) {\n const allowed = ArrayPrototypeJoin(\n ArrayPrototypeMap(oneOf, (v) => (typeof v === 'string' ? `'${v}'` : String(v))),\n ', '\n )\n const reason = 'must be one of: ' + allowed\n throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n }\n})\n\n/**\n * @callback validateBoolean\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean}\n */\n\n/** @type {validateBoolean} */\nfunction validateBoolean(value, name) {\n if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value)\n}\n\n/**\n * @param {any} options\n * @param {string} key\n * @param {boolean} defaultValue\n * @returns {boolean}\n */\nfunction getOwnPropertyValueOrDefault(options, key, defaultValue) {\n return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]\n}\n\n/**\n * @callback validateObject\n * @param {*} value\n * @param {string} name\n * @param {{\n * allowArray?: boolean,\n * allowFunction?: boolean,\n * nullable?: boolean\n * }} [options]\n */\n\n/** @type {validateObject} */\nconst validateObject = hideStackFrames((value, name, options = null) => {\n const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false)\n const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false)\n const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false)\n if (\n (!nullable && value === null) ||\n (!allowArray && ArrayIsArray(value)) ||\n (typeof value !== 'object' && (!allowFunction || typeof value !== 'function'))\n ) {\n throw new ERR_INVALID_ARG_TYPE(name, 'Object', value)\n }\n})\n\n/**\n * @callback validateDictionary - We are using the Web IDL Standard definition\n * of \"dictionary\" here, which means any value\n * whose Type is either Undefined, Null, or\n * Object (which includes functions).\n * @param {*} value\n * @param {string} name\n * @see https://webidl.spec.whatwg.org/#es-dictionary\n * @see https://tc39.es/ecma262/#table-typeof-operator-results\n */\n\n/** @type {validateDictionary} */\nconst validateDictionary = hideStackFrames((value, name) => {\n if (value != null && typeof value !== 'object' && typeof value !== 'function') {\n throw new ERR_INVALID_ARG_TYPE(name, 'a dictionary', value)\n }\n})\n\n/**\n * @callback validateArray\n * @param {*} value\n * @param {string} name\n * @param {number} [minLength]\n * @returns {asserts value is any[]}\n */\n\n/** @type {validateArray} */\nconst validateArray = hideStackFrames((value, name, minLength = 0) => {\n if (!ArrayIsArray(value)) {\n throw new ERR_INVALID_ARG_TYPE(name, 'Array', value)\n }\n if (value.length < minLength) {\n const reason = `must be longer than ${minLength}`\n throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n }\n})\n\n/**\n * @callback validateStringArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string[]}\n */\n\n/** @type {validateStringArray} */\nfunction validateStringArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n validateString(value[i], `${name}[${i}]`)\n }\n}\n\n/**\n * @callback validateBooleanArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean[]}\n */\n\n/** @type {validateBooleanArray} */\nfunction validateBooleanArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n validateBoolean(value[i], `${name}[${i}]`)\n }\n}\n\n/**\n * @callback validateAbortSignalArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is AbortSignal[]}\n */\n\n/** @type {validateAbortSignalArray} */\nfunction validateAbortSignalArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n const signal = value[i]\n const indexedName = `${name}[${i}]`\n if (signal == null) {\n throw new ERR_INVALID_ARG_TYPE(indexedName, 'AbortSignal', signal)\n }\n validateAbortSignal(signal, indexedName)\n }\n}\n\n/**\n * @param {*} signal\n * @param {string} [name='signal']\n * @returns {asserts signal is keyof signals}\n */\nfunction validateSignalName(signal, name = 'signal') {\n validateString(signal, name)\n if (signals[signal] === undefined) {\n if (signals[StringPrototypeToUpperCase(signal)] !== undefined) {\n throw new ERR_UNKNOWN_SIGNAL(signal + ' (signals must use all capital letters)')\n }\n throw new ERR_UNKNOWN_SIGNAL(signal)\n }\n}\n\n/**\n * @callback validateBuffer\n * @param {*} buffer\n * @param {string} [name='buffer']\n * @returns {asserts buffer is ArrayBufferView}\n */\n\n/** @type {validateBuffer} */\nconst validateBuffer = hideStackFrames((buffer, name = 'buffer') => {\n if (!isArrayBufferView(buffer)) {\n throw new ERR_INVALID_ARG_TYPE(name, ['Buffer', 'TypedArray', 'DataView'], buffer)\n }\n})\n\n/**\n * @param {string} data\n * @param {string} encoding\n */\nfunction validateEncoding(data, encoding) {\n const normalizedEncoding = normalizeEncoding(encoding)\n const length = data.length\n if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n throw new ERR_INVALID_ARG_VALUE('encoding', encoding, `is invalid for data of length ${length}`)\n }\n}\n\n/**\n * Check that the port number is not NaN when coerced to a number,\n * is an integer and that it falls within the legal range of port numbers.\n * @param {*} port\n * @param {string} [name='Port']\n * @param {boolean} [allowZero=true]\n * @returns {number}\n */\nfunction validatePort(port, name = 'Port', allowZero = true) {\n if (\n (typeof port !== 'number' && typeof port !== 'string') ||\n (typeof port === 'string' && StringPrototypeTrim(port).length === 0) ||\n +port !== +port >>> 0 ||\n port > 0xffff ||\n (port === 0 && !allowZero)\n ) {\n throw new ERR_SOCKET_BAD_PORT(name, port, allowZero)\n }\n return port | 0\n}\n\n/**\n * @callback validateAbortSignal\n * @param {*} signal\n * @param {string} name\n */\n\n/** @type {validateAbortSignal} */\nconst validateAbortSignal = hideStackFrames((signal, name) => {\n if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n})\n\n/**\n * @callback validateFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validateFunction} */\nconst validateFunction = hideStackFrames((value, name) => {\n if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validatePlainFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validatePlainFunction} */\nconst validatePlainFunction = hideStackFrames((value, name) => {\n if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validateUndefined\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is undefined}\n */\n\n/** @type {validateUndefined} */\nconst validateUndefined = hideStackFrames((value, name) => {\n if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value)\n})\n\n/**\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} union\n */\nfunction validateUnion(value, name, union) {\n if (!ArrayPrototypeIncludes(union, value)) {\n throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value)\n }\n}\n\n/*\n The rules for the Link header field are described here:\n https://www.rfc-editor.org/rfc/rfc8288.html#section-3\n\n This regex validates any string surrounded by angle brackets\n (not necessarily a valid URI reference) followed by zero or more\n link-params separated by semicolons.\n*/\nconst linkValueRegExp = /^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/\n\n/**\n * @param {any} value\n * @param {string} name\n */\nfunction validateLinkHeaderFormat(value, name) {\n if (typeof value === 'undefined' || !RegExpPrototypeExec(linkValueRegExp, value)) {\n throw new ERR_INVALID_ARG_VALUE(\n name,\n value,\n 'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n )\n }\n}\n\n/**\n * @param {any} hints\n * @return {string}\n */\nfunction validateLinkHeaderValue(hints) {\n if (typeof hints === 'string') {\n validateLinkHeaderFormat(hints, 'hints')\n return hints\n } else if (ArrayIsArray(hints)) {\n const hintsLength = hints.length\n let result = ''\n if (hintsLength === 0) {\n return result\n }\n for (let i = 0; i < hintsLength; i++) {\n const link = hints[i]\n validateLinkHeaderFormat(link, 'hints')\n result += link\n if (i !== hintsLength - 1) {\n result += ', '\n }\n }\n return result\n }\n throw new ERR_INVALID_ARG_VALUE(\n 'hints',\n hints,\n 'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n )\n}\nmodule.exports = {\n isInt32,\n isUint32,\n parseFileMode,\n validateArray,\n validateStringArray,\n validateBooleanArray,\n validateAbortSignalArray,\n validateBoolean,\n validateBuffer,\n validateDictionary,\n validateEncoding,\n validateFunction,\n validateInt32,\n validateInteger,\n validateNumber,\n validateObject,\n validateOneOf,\n validatePlainFunction,\n validatePort,\n validateSignalName,\n validateString,\n validateUint32,\n validateUndefined,\n validateUnion,\n validateAbortSignal,\n validateLinkHeaderValue\n}\n", "// shim for using process in browser\nvar process = module.exports = {};\n\n// 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\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\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 try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n", "'use strict'\n\nconst { SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\n\n// We need to use SymbolFor to make these globally available\n// for interopt with readable-stream, i.e. readable-stream\n// and node core needs to be able to read/write private state\n// from each other for proper interoperability.\nconst kIsDestroyed = SymbolFor('nodejs.stream.destroyed')\nconst kIsErrored = SymbolFor('nodejs.stream.errored')\nconst kIsReadable = SymbolFor('nodejs.stream.readable')\nconst kIsWritable = SymbolFor('nodejs.stream.writable')\nconst kIsDisturbed = SymbolFor('nodejs.stream.disturbed')\nconst kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')\nconst kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')\nfunction isReadableNodeStream(obj, strict = false) {\n var _obj$_readableState\n return !!(\n (\n obj &&\n typeof obj.pipe === 'function' &&\n typeof obj.on === 'function' &&\n (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&\n (!obj._writableState ||\n ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined\n ? undefined\n : _obj$_readableState.readable) !== false) &&\n // Duplex\n (!obj._writableState || obj._readableState)\n ) // Writable has .pipe.\n )\n}\nfunction isWritableNodeStream(obj) {\n var _obj$_writableState\n return !!(\n (\n obj &&\n typeof obj.write === 'function' &&\n typeof obj.on === 'function' &&\n (!obj._readableState ||\n ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined\n ? undefined\n : _obj$_writableState.writable) !== false)\n ) // Duplex\n )\n}\nfunction isDuplexNodeStream(obj) {\n return !!(\n obj &&\n typeof obj.pipe === 'function' &&\n obj._readableState &&\n typeof obj.on === 'function' &&\n typeof obj.write === 'function'\n )\n}\nfunction isNodeStream(obj) {\n return (\n obj &&\n (obj._readableState ||\n obj._writableState ||\n (typeof obj.write === 'function' && typeof obj.on === 'function') ||\n (typeof obj.pipe === 'function' && typeof obj.on === 'function'))\n )\n}\nfunction isReadableStream(obj) {\n return !!(\n obj &&\n !isNodeStream(obj) &&\n typeof obj.pipeThrough === 'function' &&\n typeof obj.getReader === 'function' &&\n typeof obj.cancel === 'function'\n )\n}\nfunction isWritableStream(obj) {\n return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')\n}\nfunction isTransformStream(obj) {\n return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')\n}\nfunction isWebStream(obj) {\n return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj)\n}\nfunction isIterable(obj, isAsync) {\n if (obj == null) return false\n if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function'\n if (isAsync === false) return typeof obj[SymbolIterator] === 'function'\n return typeof obj[SymbolAsyncIterator] === 'function' || typeof obj[SymbolIterator] === 'function'\n}\nfunction isDestroyed(stream) {\n if (!isNodeStream(stream)) return null\n const wState = stream._writableState\n const rState = stream._readableState\n const state = wState || rState\n return !!(stream.destroyed || stream[kIsDestroyed] || (state !== null && state !== undefined && state.destroyed))\n}\n\n// Have been end():d.\nfunction isWritableEnded(stream) {\n if (!isWritableNodeStream(stream)) return null\n if (stream.writableEnded === true) return true\n const wState = stream._writableState\n if (wState !== null && wState !== undefined && wState.errored) return false\n if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null\n return wState.ended\n}\n\n// Have emitted 'finish'.\nfunction isWritableFinished(stream, strict) {\n if (!isWritableNodeStream(stream)) return null\n if (stream.writableFinished === true) return true\n const wState = stream._writableState\n if (wState !== null && wState !== undefined && wState.errored) return false\n if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null\n return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))\n}\n\n// Have been push(null):d.\nfunction isReadableEnded(stream) {\n if (!isReadableNodeStream(stream)) return null\n if (stream.readableEnded === true) return true\n const rState = stream._readableState\n if (!rState || rState.errored) return false\n if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null\n return rState.ended\n}\n\n// Have emitted 'end'.\nfunction isReadableFinished(stream, strict) {\n if (!isReadableNodeStream(stream)) return null\n const rState = stream._readableState\n if (rState !== null && rState !== undefined && rState.errored) return false\n if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null\n return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))\n}\nfunction isReadable(stream) {\n if (stream && stream[kIsReadable] != null) return stream[kIsReadable]\n if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null\n if (isDestroyed(stream)) return false\n return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)\n}\nfunction isWritable(stream) {\n if (stream && stream[kIsWritable] != null) return stream[kIsWritable]\n if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null\n if (isDestroyed(stream)) return false\n return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)\n}\nfunction isFinished(stream, opts) {\n if (!isNodeStream(stream)) {\n return null\n }\n if (isDestroyed(stream)) {\n return true\n }\n if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {\n return false\n }\n if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {\n return false\n }\n return true\n}\nfunction isWritableErrored(stream) {\n var _stream$_writableStat, _stream$_writableStat2\n if (!isNodeStream(stream)) {\n return null\n }\n if (stream.writableErrored) {\n return stream.writableErrored\n }\n return (_stream$_writableStat =\n (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined\n ? undefined\n : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined\n ? _stream$_writableStat\n : null\n}\nfunction isReadableErrored(stream) {\n var _stream$_readableStat, _stream$_readableStat2\n if (!isNodeStream(stream)) {\n return null\n }\n if (stream.readableErrored) {\n return stream.readableErrored\n }\n return (_stream$_readableStat =\n (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined\n ? undefined\n : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined\n ? _stream$_readableStat\n : null\n}\nfunction isClosed(stream) {\n if (!isNodeStream(stream)) {\n return null\n }\n if (typeof stream.closed === 'boolean') {\n return stream.closed\n }\n const wState = stream._writableState\n const rState = stream._readableState\n if (\n typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||\n typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'\n ) {\n return (\n (wState === null || wState === undefined ? undefined : wState.closed) ||\n (rState === null || rState === undefined ? undefined : rState.closed)\n )\n }\n if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {\n return stream._closed\n }\n return null\n}\nfunction isOutgoingMessage(stream) {\n return (\n typeof stream._closed === 'boolean' &&\n typeof stream._defaultKeepAlive === 'boolean' &&\n typeof stream._removedConnection === 'boolean' &&\n typeof stream._removedContLen === 'boolean'\n )\n}\nfunction isServerResponse(stream) {\n return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)\n}\nfunction isServerRequest(stream) {\n var _stream$req\n return (\n typeof stream._consuming === 'boolean' &&\n typeof stream._dumped === 'boolean' &&\n ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===\n undefined\n )\n}\nfunction willEmitClose(stream) {\n if (!isNodeStream(stream)) return null\n const wState = stream._writableState\n const rState = stream._readableState\n const state = wState || rState\n return (\n (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)\n )\n}\nfunction isDisturbed(stream) {\n var _stream$kIsDisturbed\n return !!(\n stream &&\n ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined\n ? _stream$kIsDisturbed\n : stream.readableDidRead || stream.readableAborted)\n )\n}\nfunction isErrored(stream) {\n var _ref,\n _ref2,\n _ref3,\n _ref4,\n _ref5,\n _stream$kIsErrored,\n _stream$_readableStat3,\n _stream$_writableStat3,\n _stream$_readableStat4,\n _stream$_writableStat4\n return !!(\n stream &&\n ((_ref =\n (_ref2 =\n (_ref3 =\n (_ref4 =\n (_ref5 =\n (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined\n ? _stream$kIsErrored\n : stream.readableErrored) !== null && _ref5 !== undefined\n ? _ref5\n : stream.writableErrored) !== null && _ref4 !== undefined\n ? _ref4\n : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined\n ? undefined\n : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined\n ? _ref3\n : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined\n ? undefined\n : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined\n ? _ref2\n : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined\n ? undefined\n : _stream$_readableStat4.errored) !== null && _ref !== undefined\n ? _ref\n : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined\n ? undefined\n : _stream$_writableStat4.errored)\n )\n}\nmodule.exports = {\n isDestroyed,\n kIsDestroyed,\n isDisturbed,\n kIsDisturbed,\n isErrored,\n kIsErrored,\n isReadable,\n kIsReadable,\n kIsClosedPromise,\n kControllerErrorFunction,\n kIsWritable,\n isClosed,\n isDuplexNodeStream,\n isFinished,\n isIterable,\n isReadableNodeStream,\n isReadableStream,\n isReadableEnded,\n isReadableFinished,\n isReadableErrored,\n isNodeStream,\n isWebStream,\n isWritable,\n isWritableNodeStream,\n isWritableStream,\n isWritableEnded,\n isWritableFinished,\n isWritableErrored,\n isServerRequest,\n isServerResponse,\n willEmitClose,\n isTransformStream\n}\n", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { AbortError, codes } = require('../../ours/errors')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_PREMATURE_CLOSE } = codes\nconst { kEmptyObject, once } = require('../../ours/util')\nconst { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require('../validators')\nconst { Promise, PromisePrototypeThen, SymbolDispose } = require('../../ours/primordials')\nconst {\n isClosed,\n isReadable,\n isReadableNodeStream,\n isReadableStream,\n isReadableFinished,\n isReadableErrored,\n isWritable,\n isWritableNodeStream,\n isWritableStream,\n isWritableFinished,\n isWritableErrored,\n isNodeStream,\n willEmitClose: _willEmitClose,\n kIsClosedPromise\n} = require('./utils')\nlet addAbortListener\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function'\n}\nconst nop = () => {}\nfunction eos(stream, options, callback) {\n var _options$readable, _options$writable\n if (arguments.length === 2) {\n callback = options\n options = kEmptyObject\n } else if (options == null) {\n options = kEmptyObject\n } else {\n validateObject(options, 'options')\n }\n validateFunction(callback, 'callback')\n validateAbortSignal(options.signal, 'options.signal')\n callback = once(callback)\n if (isReadableStream(stream) || isWritableStream(stream)) {\n return eosWeb(stream, options, callback)\n }\n if (!isNodeStream(stream)) {\n throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n }\n const readable =\n (_options$readable = options.readable) !== null && _options$readable !== undefined\n ? _options$readable\n : isReadableNodeStream(stream)\n const writable =\n (_options$writable = options.writable) !== null && _options$writable !== undefined\n ? _options$writable\n : isWritableNodeStream(stream)\n const wState = stream._writableState\n const rState = stream._readableState\n const onlegacyfinish = () => {\n if (!stream.writable) {\n onfinish()\n }\n }\n\n // TODO (ronag): Improve soft detection to include core modules and\n // common ecosystem modules that do properly emit 'close' but fail\n // this generic check.\n let willEmitClose =\n _willEmitClose(stream) && isReadableNodeStream(stream) === readable && isWritableNodeStream(stream) === writable\n let writableFinished = isWritableFinished(stream, false)\n const onfinish = () => {\n writableFinished = true\n // Stream should not be destroyed here. If it is that\n // means that user space is doing something differently and\n // we cannot trust willEmitClose.\n if (stream.destroyed) {\n willEmitClose = false\n }\n if (willEmitClose && (!stream.readable || readable)) {\n return\n }\n if (!readable || readableFinished) {\n callback.call(stream)\n }\n }\n let readableFinished = isReadableFinished(stream, false)\n const onend = () => {\n readableFinished = true\n // Stream should not be destroyed here. If it is that\n // means that user space is doing something differently and\n // we cannot trust willEmitClose.\n if (stream.destroyed) {\n willEmitClose = false\n }\n if (willEmitClose && (!stream.writable || writable)) {\n return\n }\n if (!writable || writableFinished) {\n callback.call(stream)\n }\n }\n const onerror = (err) => {\n callback.call(stream, err)\n }\n let closed = isClosed(stream)\n const onclose = () => {\n closed = true\n const errored = isWritableErrored(stream) || isReadableErrored(stream)\n if (errored && typeof errored !== 'boolean') {\n return callback.call(stream, errored)\n }\n if (readable && !readableFinished && isReadableNodeStream(stream, true)) {\n if (!isReadableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n }\n if (writable && !writableFinished) {\n if (!isWritableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n }\n callback.call(stream)\n }\n const onclosed = () => {\n closed = true\n const errored = isWritableErrored(stream) || isReadableErrored(stream)\n if (errored && typeof errored !== 'boolean') {\n return callback.call(stream, errored)\n }\n callback.call(stream)\n }\n const onrequest = () => {\n stream.req.on('finish', onfinish)\n }\n if (isRequest(stream)) {\n stream.on('complete', onfinish)\n if (!willEmitClose) {\n stream.on('abort', onclose)\n }\n if (stream.req) {\n onrequest()\n } else {\n stream.on('request', onrequest)\n }\n } else if (writable && !wState) {\n // legacy streams\n stream.on('end', onlegacyfinish)\n stream.on('close', onlegacyfinish)\n }\n\n // Not all streams will emit 'close' after 'aborted'.\n if (!willEmitClose && typeof stream.aborted === 'boolean') {\n stream.on('aborted', onclose)\n }\n stream.on('end', onend)\n stream.on('finish', onfinish)\n if (options.error !== false) {\n stream.on('error', onerror)\n }\n stream.on('close', onclose)\n if (closed) {\n process.nextTick(onclose)\n } else if (\n (wState !== null && wState !== undefined && wState.errorEmitted) ||\n (rState !== null && rState !== undefined && rState.errorEmitted)\n ) {\n if (!willEmitClose) {\n process.nextTick(onclosed)\n }\n } else if (\n !readable &&\n (!willEmitClose || isReadable(stream)) &&\n (writableFinished || isWritable(stream) === false)\n ) {\n process.nextTick(onclosed)\n } else if (\n !writable &&\n (!willEmitClose || isWritable(stream)) &&\n (readableFinished || isReadable(stream) === false)\n ) {\n process.nextTick(onclosed)\n } else if (rState && stream.req && stream.aborted) {\n process.nextTick(onclosed)\n }\n const cleanup = () => {\n callback = nop\n stream.removeListener('aborted', onclose)\n stream.removeListener('complete', onfinish)\n stream.removeListener('abort', onclose)\n stream.removeListener('request', onrequest)\n if (stream.req) stream.req.removeListener('finish', onfinish)\n stream.removeListener('end', onlegacyfinish)\n stream.removeListener('close', onlegacyfinish)\n stream.removeListener('finish', onfinish)\n stream.removeListener('end', onend)\n stream.removeListener('error', onerror)\n stream.removeListener('close', onclose)\n }\n if (options.signal && !closed) {\n const abort = () => {\n // Keep it because cleanup removes it.\n const endCallback = callback\n cleanup()\n endCallback.call(\n stream,\n new AbortError(undefined, {\n cause: options.signal.reason\n })\n )\n }\n if (options.signal.aborted) {\n process.nextTick(abort)\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(options.signal, abort)\n const originalCallback = callback\n callback = once((...args) => {\n disposable[SymbolDispose]()\n originalCallback.apply(stream, args)\n })\n }\n }\n return cleanup\n}\nfunction eosWeb(stream, options, callback) {\n let isAborted = false\n let abort = nop\n if (options.signal) {\n abort = () => {\n isAborted = true\n callback.call(\n stream,\n new AbortError(undefined, {\n cause: options.signal.reason\n })\n )\n }\n if (options.signal.aborted) {\n process.nextTick(abort)\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(options.signal, abort)\n const originalCallback = callback\n callback = once((...args) => {\n disposable[SymbolDispose]()\n originalCallback.apply(stream, args)\n })\n }\n }\n const resolverFn = (...args) => {\n if (!isAborted) {\n process.nextTick(() => callback.apply(stream, args))\n }\n }\n PromisePrototypeThen(stream[kIsClosedPromise].promise, resolverFn, resolverFn)\n return nop\n}\nfunction finished(stream, opts) {\n var _opts\n let autoCleanup = false\n if (opts === null) {\n opts = kEmptyObject\n }\n if ((_opts = opts) !== null && _opts !== undefined && _opts.cleanup) {\n validateBoolean(opts.cleanup, 'cleanup')\n autoCleanup = opts.cleanup\n }\n return new Promise((resolve, reject) => {\n const cleanup = eos(stream, opts, (err) => {\n if (autoCleanup) {\n cleanup()\n }\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n}\nmodule.exports = eos\nmodule.exports.finished = finished\n", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n aggregateTwoErrors,\n codes: { ERR_MULTIPLE_CALLBACK },\n AbortError\n} = require('../../ours/errors')\nconst { Symbol } = require('../../ours/primordials')\nconst { kIsDestroyed, isDestroyed, isFinished, isServerRequest } = require('./utils')\nconst kDestroy = Symbol('kDestroy')\nconst kConstruct = Symbol('kConstruct')\nfunction checkError(err, w, r) {\n if (err) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n err.stack // eslint-disable-line no-unused-expressions\n\n if (w && !w.errored) {\n w.errored = err\n }\n if (r && !r.errored) {\n r.errored = err\n }\n }\n}\n\n// Backwards compat. cb() is undocumented and unused in core but\n// unfortunately might be used by modules.\nfunction destroy(err, cb) {\n const r = this._readableState\n const w = this._writableState\n // With duplex streams we use the writable side for state.\n const s = w || r\n if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n if (typeof cb === 'function') {\n cb()\n }\n return this\n }\n\n // We set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n checkError(err, w, r)\n if (w) {\n w.destroyed = true\n }\n if (r) {\n r.destroyed = true\n }\n\n // If still constructing then defer calling _destroy.\n if (!s.constructed) {\n this.once(kDestroy, function (er) {\n _destroy(this, aggregateTwoErrors(er, err), cb)\n })\n } else {\n _destroy(this, err, cb)\n }\n return this\n}\nfunction _destroy(self, err, cb) {\n let called = false\n function onDestroy(err) {\n if (called) {\n return\n }\n called = true\n const r = self._readableState\n const w = self._writableState\n checkError(err, w, r)\n if (w) {\n w.closed = true\n }\n if (r) {\n r.closed = true\n }\n if (typeof cb === 'function') {\n cb(err)\n }\n if (err) {\n process.nextTick(emitErrorCloseNT, self, err)\n } else {\n process.nextTick(emitCloseNT, self)\n }\n }\n try {\n self._destroy(err || null, onDestroy)\n } catch (err) {\n onDestroy(err)\n }\n}\nfunction emitErrorCloseNT(self, err) {\n emitErrorNT(self, err)\n emitCloseNT(self)\n}\nfunction emitCloseNT(self) {\n const r = self._readableState\n const w = self._writableState\n if (w) {\n w.closeEmitted = true\n }\n if (r) {\n r.closeEmitted = true\n }\n if ((w !== null && w !== undefined && w.emitClose) || (r !== null && r !== undefined && r.emitClose)) {\n self.emit('close')\n }\n}\nfunction emitErrorNT(self, err) {\n const r = self._readableState\n const w = self._writableState\n if ((w !== null && w !== undefined && w.errorEmitted) || (r !== null && r !== undefined && r.errorEmitted)) {\n return\n }\n if (w) {\n w.errorEmitted = true\n }\n if (r) {\n r.errorEmitted = true\n }\n self.emit('error', err)\n}\nfunction undestroy() {\n const r = this._readableState\n const w = this._writableState\n if (r) {\n r.constructed = true\n r.closed = false\n r.closeEmitted = false\n r.destroyed = false\n r.errored = null\n r.errorEmitted = false\n r.reading = false\n r.ended = r.readable === false\n r.endEmitted = r.readable === false\n }\n if (w) {\n w.constructed = true\n w.destroyed = false\n w.closed = false\n w.closeEmitted = false\n w.errored = null\n w.errorEmitted = false\n w.finalCalled = false\n w.prefinished = false\n w.ended = w.writable === false\n w.ending = w.writable === false\n w.finished = w.writable === false\n }\n}\nfunction errorOrDestroy(stream, err, sync) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n const r = stream._readableState\n const w = stream._writableState\n if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n return this\n }\n if ((r !== null && r !== undefined && r.autoDestroy) || (w !== null && w !== undefined && w.autoDestroy))\n stream.destroy(err)\n else if (err) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n err.stack // eslint-disable-line no-unused-expressions\n\n if (w && !w.errored) {\n w.errored = err\n }\n if (r && !r.errored) {\n r.errored = err\n }\n if (sync) {\n process.nextTick(emitErrorNT, stream, err)\n } else {\n emitErrorNT(stream, err)\n }\n }\n}\nfunction construct(stream, cb) {\n if (typeof stream._construct !== 'function') {\n return\n }\n const r = stream._readableState\n const w = stream._writableState\n if (r) {\n r.constructed = false\n }\n if (w) {\n w.constructed = false\n }\n stream.once(kConstruct, cb)\n if (stream.listenerCount(kConstruct) > 1) {\n // Duplex\n return\n }\n process.nextTick(constructNT, stream)\n}\nfunction constructNT(stream) {\n let called = false\n function onConstruct(err) {\n if (called) {\n errorOrDestroy(stream, err !== null && err !== undefined ? err : new ERR_MULTIPLE_CALLBACK())\n return\n }\n called = true\n const r = stream._readableState\n const w = stream._writableState\n const s = w || r\n if (r) {\n r.constructed = true\n }\n if (w) {\n w.constructed = true\n }\n if (s.destroyed) {\n stream.emit(kDestroy, err)\n } else if (err) {\n errorOrDestroy(stream, err, true)\n } else {\n process.nextTick(emitConstructNT, stream)\n }\n }\n try {\n stream._construct((err) => {\n process.nextTick(onConstruct, err)\n })\n } catch (err) {\n process.nextTick(onConstruct, err)\n }\n}\nfunction emitConstructNT(stream) {\n stream.emit(kConstruct)\n}\nfunction isRequest(stream) {\n return (stream === null || stream === undefined ? undefined : stream.setHeader) && typeof stream.abort === 'function'\n}\nfunction emitCloseLegacy(stream) {\n stream.emit('close')\n}\nfunction emitErrorCloseLegacy(stream, err) {\n stream.emit('error', err)\n process.nextTick(emitCloseLegacy, stream)\n}\n\n// Normalize destroy for legacy.\nfunction destroyer(stream, err) {\n if (!stream || isDestroyed(stream)) {\n return\n }\n if (!err && !isFinished(stream)) {\n err = new AbortError()\n }\n\n // TODO: Remove isRequest branches.\n if (isServerRequest(stream)) {\n stream.socket = null\n stream.destroy(err)\n } else if (isRequest(stream)) {\n stream.abort()\n } else if (isRequest(stream.req)) {\n stream.req.abort()\n } else if (typeof stream.destroy === 'function') {\n stream.destroy(err)\n } else if (typeof stream.close === 'function') {\n // TODO: Don't lose err?\n stream.close()\n } else if (err) {\n process.nextTick(emitErrorCloseLegacy, stream, err)\n } else {\n process.nextTick(emitCloseLegacy, stream)\n }\n if (!stream.destroyed) {\n stream[kIsDestroyed] = true\n }\n}\nmodule.exports = {\n construct,\n destroyer,\n destroy,\n undestroy,\n errorOrDestroy\n}\n", "'use strict'\n\nconst { ArrayIsArray, ObjectSetPrototypeOf } = require('../../ours/primordials')\nconst { EventEmitter: EE } = require('events')\nfunction Stream(opts) {\n EE.call(this, opts)\n}\nObjectSetPrototypeOf(Stream.prototype, EE.prototype)\nObjectSetPrototypeOf(Stream, EE)\nStream.prototype.pipe = function (dest, options) {\n const source = this\n function ondata(chunk) {\n if (dest.writable && dest.write(chunk) === false && source.pause) {\n source.pause()\n }\n }\n source.on('data', ondata)\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume()\n }\n }\n dest.on('drain', ondrain)\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend)\n source.on('close', onclose)\n }\n let didOnEnd = false\n function onend() {\n if (didOnEnd) return\n didOnEnd = true\n dest.end()\n }\n function onclose() {\n if (didOnEnd) return\n didOnEnd = true\n if (typeof dest.destroy === 'function') dest.destroy()\n }\n\n // Don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup()\n if (EE.listenerCount(this, 'error') === 0) {\n this.emit('error', er)\n }\n }\n prependListener(source, 'error', onerror)\n prependListener(dest, 'error', onerror)\n\n // Remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata)\n dest.removeListener('drain', ondrain)\n source.removeListener('end', onend)\n source.removeListener('close', onclose)\n source.removeListener('error', onerror)\n dest.removeListener('error', onerror)\n source.removeListener('end', cleanup)\n source.removeListener('close', cleanup)\n dest.removeListener('close', cleanup)\n }\n source.on('end', cleanup)\n source.on('close', cleanup)\n dest.on('close', cleanup)\n dest.emit('pipe', source)\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest\n}\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn)\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn)\n else if (ArrayIsArray(emitter._events[event])) emitter._events[event].unshift(fn)\n else emitter._events[event] = [fn, emitter._events[event]]\n}\nmodule.exports = {\n Stream,\n prependListener\n}\n", "'use strict'\n\nconst { SymbolDispose } = require('../../ours/primordials')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\nlet addAbortListener\n\n// This method is inlined here for readable-stream\n// It also does not allow for signal to not exist on the stream\n// https://github.com/nodejs/node/pull/36061#discussion_r533718029\nconst validateAbortSignal = (signal, name) => {\n if (typeof signal !== 'object' || !('aborted' in signal)) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n}\nmodule.exports.addAbortSignal = function addAbortSignal(signal, stream) {\n validateAbortSignal(signal, 'signal')\n if (!isNodeStream(stream) && !isWebStream(stream)) {\n throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n }\n return module.exports.addAbortSignalNoValidate(signal, stream)\n}\nmodule.exports.addAbortSignalNoValidate = function (signal, stream) {\n if (typeof signal !== 'object' || !('aborted' in signal)) {\n return stream\n }\n const onAbort = isNodeStream(stream)\n ? () => {\n stream.destroy(\n new AbortError(undefined, {\n cause: signal.reason\n })\n )\n }\n : () => {\n stream[kControllerErrorFunction](\n new AbortError(undefined, {\n cause: signal.reason\n })\n )\n }\n if (signal.aborted) {\n onAbort()\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(signal, onAbort)\n eos(stream, disposable[SymbolDispose])\n }\n return stream\n}\n", "'use strict'\n\nconst { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { inspect } = require('../../ours/util')\nmodule.exports = class BufferList {\n constructor() {\n this.head = null\n this.tail = null\n this.length = 0\n }\n push(v) {\n const entry = {\n data: v,\n next: null\n }\n if (this.length > 0) this.tail.next = entry\n else this.head = entry\n this.tail = entry\n ++this.length\n }\n unshift(v) {\n const entry = {\n data: v,\n next: this.head\n }\n if (this.length === 0) this.tail = entry\n this.head = entry\n ++this.length\n }\n shift() {\n if (this.length === 0) return\n const ret = this.head.data\n if (this.length === 1) this.head = this.tail = null\n else this.head = this.head.next\n --this.length\n return ret\n }\n clear() {\n this.head = this.tail = null\n this.length = 0\n }\n join(s) {\n if (this.length === 0) return ''\n let p = this.head\n let ret = '' + p.data\n while ((p = p.next) !== null) ret += s + p.data\n return ret\n }\n concat(n) {\n if (this.length === 0) return Buffer.alloc(0)\n const ret = Buffer.allocUnsafe(n >>> 0)\n let p = this.head\n let i = 0\n while (p) {\n TypedArrayPrototypeSet(ret, p.data, i)\n i += p.data.length\n p = p.next\n }\n return ret\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n consume(n, hasStrings) {\n const data = this.head.data\n if (n < data.length) {\n // `slice` is the same for buffers and strings.\n const slice = data.slice(0, n)\n this.head.data = data.slice(n)\n return slice\n }\n if (n === data.length) {\n // First chunk is a perfect match.\n return this.shift()\n }\n // Result spans more than one buffer.\n return hasStrings ? this._getString(n) : this._getBuffer(n)\n }\n first() {\n return this.head.data\n }\n *[SymbolIterator]() {\n for (let p = this.head; p; p = p.next) {\n yield p.data\n }\n }\n\n // Consumes a specified amount of characters from the buffered data.\n _getString(n) {\n let ret = ''\n let p = this.head\n let c = 0\n do {\n const str = p.data\n if (n > str.length) {\n ret += str\n n -= str.length\n } else {\n if (n === str.length) {\n ret += str\n ++c\n if (p.next) this.head = p.next\n else this.head = this.tail = null\n } else {\n ret += StringPrototypeSlice(str, 0, n)\n this.head = p\n p.data = StringPrototypeSlice(str, n)\n }\n break\n }\n ++c\n } while ((p = p.next) !== null)\n this.length -= c\n return ret\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n _getBuffer(n) {\n const ret = Buffer.allocUnsafe(n)\n const retLen = n\n let p = this.head\n let c = 0\n do {\n const buf = p.data\n if (n > buf.length) {\n TypedArrayPrototypeSet(ret, buf, retLen - n)\n n -= buf.length\n } else {\n if (n === buf.length) {\n TypedArrayPrototypeSet(ret, buf, retLen - n)\n ++c\n if (p.next) this.head = p.next\n else this.head = this.tail = null\n } else {\n TypedArrayPrototypeSet(ret, new Uint8Array(buf.buffer, buf.byteOffset, n), retLen - n)\n this.head = p\n p.data = buf.slice(n)\n }\n break\n }\n ++c\n } while ((p = p.next) !== null)\n this.length -= c\n return ret\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n [Symbol.for('nodejs.util.inspect.custom')](_, options) {\n return inspect(this, {\n ...options,\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n })\n }\n}\n", "'use strict'\n\nconst { MathFloor, NumberIsInteger } = require('../../ours/primordials')\nconst { validateInteger } = require('../validators')\nconst { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nlet defaultHighWaterMarkBytes = 16 * 1024\nlet defaultHighWaterMarkObjectMode = 16\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes\n}\nfunction setDefaultHighWaterMark(objectMode, value) {\n validateInteger(value, 'value', 0)\n if (objectMode) {\n defaultHighWaterMarkObjectMode = value\n } else {\n defaultHighWaterMarkBytes = value\n }\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)\n if (hwm != null) {\n if (!NumberIsInteger(hwm) || hwm < 0) {\n const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'\n throw new ERR_INVALID_ARG_VALUE(name, hwm)\n }\n return MathFloor(hwm)\n }\n\n // Default value\n return getDefaultHighWaterMark(state.objectMode)\n}\nmodule.exports = {\n getHighWaterMark,\n getDefaultHighWaterMark,\n setDefaultHighWaterMark\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_NULL_VALUES } = require('../../ours/errors').codes\nfunction from(Readable, iterable, opts) {\n let iterator\n if (typeof iterable === 'string' || iterable instanceof Buffer) {\n return new Readable({\n objectMode: true,\n ...opts,\n read() {\n this.push(iterable)\n this.push(null)\n }\n })\n }\n let isAsync\n if (iterable && iterable[SymbolAsyncIterator]) {\n isAsync = true\n iterator = iterable[SymbolAsyncIterator]()\n } else if (iterable && iterable[SymbolIterator]) {\n isAsync = false\n iterator = iterable[SymbolIterator]()\n } else {\n throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable)\n }\n const readable = new Readable({\n objectMode: true,\n highWaterMark: 1,\n // TODO(ronag): What options should be allowed?\n ...opts\n })\n\n // Flag to protect against _read\n // being called before last iteration completion.\n let reading = false\n readable._read = function () {\n if (!reading) {\n reading = true\n next()\n }\n }\n readable._destroy = function (error, cb) {\n PromisePrototypeThen(\n close(error),\n () => process.nextTick(cb, error),\n // nextTick is here in case cb throws\n (e) => process.nextTick(cb, e || error)\n )\n }\n async function close(error) {\n const hadError = error !== undefined && error !== null\n const hasThrow = typeof iterator.throw === 'function'\n if (hadError && hasThrow) {\n const { value, done } = await iterator.throw(error)\n await value\n if (done) {\n return\n }\n }\n if (typeof iterator.return === 'function') {\n const { value } = await iterator.return()\n await value\n }\n }\n async function next() {\n for (;;) {\n try {\n const { value, done } = isAsync ? await iterator.next() : iterator.next()\n if (done) {\n readable.push(null)\n } else {\n const res = value && typeof value.then === 'function' ? await value : value\n if (res === null) {\n reading = false\n throw new ERR_STREAM_NULL_VALUES()\n } else if (readable.push(res)) {\n continue\n } else {\n reading = false\n }\n }\n } catch (err) {\n readable.destroy(err)\n }\n break\n }\n }\n return readable\n}\nmodule.exports = from\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n ArrayPrototypeIndexOf,\n NumberIsInteger,\n NumberIsNaN,\n NumberParseInt,\n ObjectDefineProperties,\n ObjectKeys,\n ObjectSetPrototypeOf,\n Promise,\n SafeSet,\n SymbolAsyncDispose,\n SymbolAsyncIterator,\n Symbol\n} = require('../../ours/primordials')\nmodule.exports = Readable\nReadable.ReadableState = ReadableState\nconst { EventEmitter: EE } = require('events')\nconst { Stream, prependListener } = require('./legacy')\nconst { Buffer } = require('buffer')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst eos = require('./end-of-stream')\nlet debug = require('../../ours/util').debuglog('stream', (fn) => {\n debug = fn\n})\nconst BufferList = require('./buffer_list')\nconst destroyImpl = require('./destroy')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n aggregateTwoErrors,\n codes: {\n ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED,\n ERR_OUT_OF_RANGE,\n ERR_STREAM_PUSH_AFTER_EOF,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT\n },\n AbortError\n} = require('../../ours/errors')\nconst { validateObject } = require('../validators')\nconst kPaused = Symbol('kPaused')\nconst { StringDecoder } = require('string_decoder/')\nconst from = require('./from')\nObjectSetPrototypeOf(Readable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Readable, Stream)\nconst nop = () => {}\nconst { errorOrDestroy } = destroyImpl\nconst kObjectMode = 1 << 0\nconst kEnded = 1 << 1\nconst kEndEmitted = 1 << 2\nconst kReading = 1 << 3\nconst kConstructed = 1 << 4\nconst kSync = 1 << 5\nconst kNeedReadable = 1 << 6\nconst kEmittedReadable = 1 << 7\nconst kReadableListening = 1 << 8\nconst kResumeScheduled = 1 << 9\nconst kErrorEmitted = 1 << 10\nconst kEmitClose = 1 << 11\nconst kAutoDestroy = 1 << 12\nconst kDestroyed = 1 << 13\nconst kClosed = 1 << 14\nconst kCloseEmitted = 1 << 15\nconst kMultiAwaitDrain = 1 << 16\nconst kReadingMore = 1 << 17\nconst kDataEmitted = 1 << 18\n\n// TODO(benjamingr) it is likely slower to do it this way than with free functions\nfunction makeBitMapDescriptor(bit) {\n return {\n enumerable: false,\n get() {\n return (this.state & bit) !== 0\n },\n set(value) {\n if (value) this.state |= bit\n else this.state &= ~bit\n }\n }\n}\nObjectDefineProperties(ReadableState.prototype, {\n objectMode: makeBitMapDescriptor(kObjectMode),\n ended: makeBitMapDescriptor(kEnded),\n endEmitted: makeBitMapDescriptor(kEndEmitted),\n reading: makeBitMapDescriptor(kReading),\n // Stream is still being constructed and cannot be\n // destroyed until construction finished or failed.\n // Async construction is opt in, therefore we start as\n // constructed.\n constructed: makeBitMapDescriptor(kConstructed),\n // A flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n sync: makeBitMapDescriptor(kSync),\n // Whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n needReadable: makeBitMapDescriptor(kNeedReadable),\n emittedReadable: makeBitMapDescriptor(kEmittedReadable),\n readableListening: makeBitMapDescriptor(kReadableListening),\n resumeScheduled: makeBitMapDescriptor(kResumeScheduled),\n // True if the error was already emitted and should not be thrown again.\n errorEmitted: makeBitMapDescriptor(kErrorEmitted),\n emitClose: makeBitMapDescriptor(kEmitClose),\n autoDestroy: makeBitMapDescriptor(kAutoDestroy),\n // Has it been destroyed.\n destroyed: makeBitMapDescriptor(kDestroyed),\n // Indicates whether the stream has finished destroying.\n closed: makeBitMapDescriptor(kClosed),\n // True if close has been emitted or would have been emitted\n // depending on emitClose.\n closeEmitted: makeBitMapDescriptor(kCloseEmitted),\n multiAwaitDrain: makeBitMapDescriptor(kMultiAwaitDrain),\n // If true, a maybeReadMore has been scheduled.\n readingMore: makeBitMapDescriptor(kReadingMore),\n dataEmitted: makeBitMapDescriptor(kDataEmitted)\n})\nfunction ReadableState(options, stream, isDuplex) {\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n // Bit map field to store ReadableState more effciently with 1 bit per field\n // instead of a V8 slot per field.\n this.state = kEmitClose | kAutoDestroy | kConstructed | kSync\n // Object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away.\n if (options && options.objectMode) this.state |= kObjectMode\n if (isDuplex && options && options.readableObjectMode) this.state |= kObjectMode\n\n // The point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = options\n ? getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex)\n : getDefaultHighWaterMark(false)\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift().\n this.buffer = new BufferList()\n this.length = 0\n this.pipes = []\n this.flowing = null\n this[kPaused] = null\n\n // Should close be emitted on destroy. Defaults to true.\n if (options && options.emitClose === false) this.state &= ~kEmitClose\n\n // Should .destroy() be called after 'end' (and potentially 'finish').\n if (options && options.autoDestroy === false) this.state &= ~kAutoDestroy\n\n // Indicates whether the stream has errored. When true no further\n // _read calls, 'data' or 'readable' events should occur. This is needed\n // since when autoDestroy is disabled we need a way to tell whether the\n // stream has failed.\n this.errored = null\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n // Ref the piped dest which we need a drain event on it\n // type: null | Writable | Set<Writable>.\n this.awaitDrainWriters = null\n this.decoder = null\n this.encoding = null\n if (options && options.encoding) {\n this.decoder = new StringDecoder(options.encoding)\n this.encoding = options.encoding\n }\n}\nfunction Readable(options) {\n if (!(this instanceof Readable)) return new Readable(options)\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5.\n const isDuplex = this instanceof require('./duplex')\n this._readableState = new ReadableState(options, this, isDuplex)\n if (options) {\n if (typeof options.read === 'function') this._read = options.read\n if (typeof options.destroy === 'function') this._destroy = options.destroy\n if (typeof options.construct === 'function') this._construct = options.construct\n if (options.signal && !isDuplex) addAbortSignal(options.signal, this)\n }\n Stream.call(this, options)\n destroyImpl.construct(this, () => {\n if (this._readableState.needReadable) {\n maybeReadMore(this, this._readableState)\n }\n })\n}\nReadable.prototype.destroy = destroyImpl.destroy\nReadable.prototype._undestroy = destroyImpl.undestroy\nReadable.prototype._destroy = function (err, cb) {\n cb(err)\n}\nReadable.prototype[EE.captureRejectionSymbol] = function (err) {\n this.destroy(err)\n}\nReadable.prototype[SymbolAsyncDispose] = function () {\n let error\n if (!this.destroyed) {\n error = this.readableEnded ? null : new AbortError()\n this.destroy(error)\n }\n return new Promise((resolve, reject) => eos(this, (err) => (err && err !== error ? reject(err) : resolve(null))))\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n return readableAddChunk(this, chunk, encoding, false)\n}\n\n// Unshift should *always* be something directly out of read().\nReadable.prototype.unshift = function (chunk, encoding) {\n return readableAddChunk(this, chunk, encoding, true)\n}\nfunction readableAddChunk(stream, chunk, encoding, addToFront) {\n debug('readableAddChunk', chunk)\n const state = stream._readableState\n let err\n if ((state.state & kObjectMode) === 0) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding\n if (state.encoding !== encoding) {\n if (addToFront && state.encoding) {\n // When unshifting, if state.encoding is set, we have to save\n // the string in the BufferList with the state encoding.\n chunk = Buffer.from(chunk, encoding).toString(state.encoding)\n } else {\n chunk = Buffer.from(chunk, encoding)\n encoding = ''\n }\n }\n } else if (chunk instanceof Buffer) {\n encoding = ''\n } else if (Stream._isUint8Array(chunk)) {\n chunk = Stream._uint8ArrayToBuffer(chunk)\n encoding = ''\n } else if (chunk != null) {\n err = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n }\n }\n if (err) {\n errorOrDestroy(stream, err)\n } else if (chunk === null) {\n state.state &= ~kReading\n onEofChunk(stream, state)\n } else if ((state.state & kObjectMode) !== 0 || (chunk && chunk.length > 0)) {\n if (addToFront) {\n if ((state.state & kEndEmitted) !== 0) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT())\n else if (state.destroyed || state.errored) return false\n else addChunk(stream, state, chunk, true)\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF())\n } else if (state.destroyed || state.errored) {\n return false\n } else {\n state.state &= ~kReading\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk)\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false)\n else maybeReadMore(stream, state)\n } else {\n addChunk(stream, state, chunk, false)\n }\n }\n } else if (!addToFront) {\n state.state &= ~kReading\n maybeReadMore(stream, state)\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0)\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync && stream.listenerCount('data') > 0) {\n // Use the guard to avoid creating `Set()` repeatedly\n // when we have multiple pipes.\n if ((state.state & kMultiAwaitDrain) !== 0) {\n state.awaitDrainWriters.clear()\n } else {\n state.awaitDrainWriters = null\n }\n state.dataEmitted = true\n stream.emit('data', chunk)\n } else {\n // Update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length\n if (addToFront) state.buffer.unshift(chunk)\n else state.buffer.push(chunk)\n if ((state.state & kNeedReadable) !== 0) emitReadable(stream)\n }\n maybeReadMore(stream, state)\n}\nReadable.prototype.isPaused = function () {\n const state = this._readableState\n return state[kPaused] === true || state.flowing === false\n}\n\n// Backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n const decoder = new StringDecoder(enc)\n this._readableState.decoder = decoder\n // If setEncoding(null), decoder.encoding equals utf8.\n this._readableState.encoding = this._readableState.decoder.encoding\n const buffer = this._readableState.buffer\n // Iterate over current buffer to convert already stored Buffers:\n let content = ''\n for (const data of buffer) {\n content += decoder.write(data)\n }\n buffer.clear()\n if (content !== '') buffer.push(content)\n this._readableState.length = content.length\n return this\n}\n\n// Don't raise the hwm > 1GB.\nconst MAX_HWM = 0x40000000\nfunction computeNewHighWaterMark(n) {\n if (n > MAX_HWM) {\n throw new ERR_OUT_OF_RANGE('size', '<= 1GiB', n)\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts.\n n--\n n |= n >>> 1\n n |= n >>> 2\n n |= n >>> 4\n n |= n >>> 8\n n |= n >>> 16\n n++\n }\n return n\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || (state.length === 0 && state.ended)) return 0\n if ((state.state & kObjectMode) !== 0) return 1\n if (NumberIsNaN(n)) {\n // Only flow one buffer at a time.\n if (state.flowing && state.length) return state.buffer.first().length\n return state.length\n }\n if (n <= state.length) return n\n return state.ended ? state.length : 0\n}\n\n// You can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n)\n // Same as parseInt(undefined, 10), however V8 7.3 performance regressed\n // in this scenario, so we are doing it manually.\n if (n === undefined) {\n n = NaN\n } else if (!NumberIsInteger(n)) {\n n = NumberParseInt(n, 10)\n }\n const state = this._readableState\n const nOrig = n\n\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n)\n if (n !== 0) state.state &= ~kEmittedReadable\n\n // If we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (\n n === 0 &&\n state.needReadable &&\n ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)\n ) {\n debug('read: emitReadable', state.length, state.ended)\n if (state.length === 0 && state.ended) endReadable(this)\n else emitReadable(this)\n return null\n }\n n = howMuchToRead(n, state)\n\n // If we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this)\n return null\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n let doRead = (state.state & kNeedReadable) !== 0\n debug('need readable', doRead)\n\n // If we currently have less than the highWaterMark, then also read some.\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true\n debug('length less than watermark', doRead)\n }\n\n // However, if we've ended, then there's no point, if we're already\n // reading, then it's unnecessary, if we're constructing we have to wait,\n // and if we're destroyed or errored, then it's not allowed,\n if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) {\n doRead = false\n debug('reading, ended or constructing', doRead)\n } else if (doRead) {\n debug('do read')\n state.state |= kReading | kSync\n // If the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.state |= kNeedReadable\n\n // Call internal read method\n try {\n this._read(state.highWaterMark)\n } catch (err) {\n errorOrDestroy(this, err)\n }\n state.state &= ~kSync\n\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state)\n }\n let ret\n if (n > 0) ret = fromList(n, state)\n else ret = null\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark\n n = 0\n } else {\n state.length -= n\n if (state.multiAwaitDrain) {\n state.awaitDrainWriters.clear()\n } else {\n state.awaitDrainWriters = null\n }\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this)\n }\n if (ret !== null && !state.errorEmitted && !state.closeEmitted) {\n state.dataEmitted = true\n this.emit('data', ret)\n }\n return ret\n}\nfunction onEofChunk(stream, state) {\n debug('onEofChunk')\n if (state.ended) return\n if (state.decoder) {\n const chunk = state.decoder.end()\n if (chunk && chunk.length) {\n state.buffer.push(chunk)\n state.length += state.objectMode ? 1 : chunk.length\n }\n }\n state.ended = true\n if (state.sync) {\n // If we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call.\n emitReadable(stream)\n } else {\n // Emit 'readable' now to make sure it gets picked up.\n state.needReadable = false\n state.emittedReadable = true\n // We have to emit readable now that we are EOF. Modules\n // in the ecosystem (e.g. dicer) rely on this event being sync.\n emitReadable_(stream)\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n const state = stream._readableState\n debug('emitReadable', state.needReadable, state.emittedReadable)\n state.needReadable = false\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing)\n state.emittedReadable = true\n process.nextTick(emitReadable_, stream)\n }\n}\nfunction emitReadable_(stream) {\n const state = stream._readableState\n debug('emitReadable_', state.destroyed, state.length, state.ended)\n if (!state.destroyed && !state.errored && (state.length || state.ended)) {\n stream.emit('readable')\n state.emittedReadable = false\n }\n\n // The stream needs another readable event if:\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark\n flow(stream)\n}\n\n// At this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore && state.constructed) {\n state.readingMore = true\n process.nextTick(maybeReadMore_, stream, state)\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (\n !state.reading &&\n !state.ended &&\n (state.length < state.highWaterMark || (state.flowing && state.length === 0))\n ) {\n const len = state.length\n debug('maybeReadMore read 0')\n stream.read(0)\n if (len === state.length)\n // Didn't get any data, stop spinning.\n break\n }\n state.readingMore = false\n}\n\n// Abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_read()')\n}\nReadable.prototype.pipe = function (dest, pipeOpts) {\n const src = this\n const state = this._readableState\n if (state.pipes.length === 1) {\n if (!state.multiAwaitDrain) {\n state.multiAwaitDrain = true\n state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : [])\n }\n }\n state.pipes.push(dest)\n debug('pipe count=%d opts=%j', state.pipes.length, pipeOpts)\n const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr\n const endFn = doEnd ? onend : unpipe\n if (state.endEmitted) process.nextTick(endFn)\n else src.once('end', endFn)\n dest.on('unpipe', onunpipe)\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe')\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true\n cleanup()\n }\n }\n }\n function onend() {\n debug('onend')\n dest.end()\n }\n let ondrain\n let cleanedUp = false\n function cleanup() {\n debug('cleanup')\n // Cleanup event handlers once the pipe is broken.\n dest.removeListener('close', onclose)\n dest.removeListener('finish', onfinish)\n if (ondrain) {\n dest.removeListener('drain', ondrain)\n }\n dest.removeListener('error', onerror)\n dest.removeListener('unpipe', onunpipe)\n src.removeListener('end', onend)\n src.removeListener('end', unpipe)\n src.removeListener('data', ondata)\n cleanedUp = true\n\n // If the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) ondrain()\n }\n function pause() {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if (!cleanedUp) {\n if (state.pipes.length === 1 && state.pipes[0] === dest) {\n debug('false write response, pause', 0)\n state.awaitDrainWriters = dest\n state.multiAwaitDrain = false\n } else if (state.pipes.length > 1 && state.pipes.includes(dest)) {\n debug('false write response, pause', state.awaitDrainWriters.size)\n state.awaitDrainWriters.add(dest)\n }\n src.pause()\n }\n if (!ondrain) {\n // When the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n ondrain = pipeOnDrain(src, dest)\n dest.on('drain', ondrain)\n }\n }\n src.on('data', ondata)\n function ondata(chunk) {\n debug('ondata')\n const ret = dest.write(chunk)\n debug('dest.write', ret)\n if (ret === false) {\n pause()\n }\n }\n\n // If the dest has an error, then stop piping into it.\n // However, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er)\n unpipe()\n dest.removeListener('error', onerror)\n if (dest.listenerCount('error') === 0) {\n const s = dest._writableState || dest._readableState\n if (s && !s.errorEmitted) {\n // User incorrectly emitted 'error' directly on the stream.\n errorOrDestroy(dest, er)\n } else {\n dest.emit('error', er)\n }\n }\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror)\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish)\n unpipe()\n }\n dest.once('close', onclose)\n function onfinish() {\n debug('onfinish')\n dest.removeListener('close', onclose)\n unpipe()\n }\n dest.once('finish', onfinish)\n function unpipe() {\n debug('unpipe')\n src.unpipe(dest)\n }\n\n // Tell the dest that it's being piped to.\n dest.emit('pipe', src)\n\n // Start the flow if it hasn't been started already.\n\n if (dest.writableNeedDrain === true) {\n pause()\n } else if (!state.flowing) {\n debug('pipe resume')\n src.resume()\n }\n return dest\n}\nfunction pipeOnDrain(src, dest) {\n return function pipeOnDrainFunctionResult() {\n const state = src._readableState\n\n // `ondrain` will call directly,\n // `this` maybe not a reference to dest,\n // so we use the real dest here.\n if (state.awaitDrainWriters === dest) {\n debug('pipeOnDrain', 1)\n state.awaitDrainWriters = null\n } else if (state.multiAwaitDrain) {\n debug('pipeOnDrain', state.awaitDrainWriters.size)\n state.awaitDrainWriters.delete(dest)\n }\n if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount('data')) {\n src.resume()\n }\n }\n}\nReadable.prototype.unpipe = function (dest) {\n const state = this._readableState\n const unpipeInfo = {\n hasUnpiped: false\n }\n\n // If we're not piping anywhere, then do nothing.\n if (state.pipes.length === 0) return this\n if (!dest) {\n // remove all.\n const dests = state.pipes\n state.pipes = []\n this.pause()\n for (let i = 0; i < dests.length; i++)\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n })\n return this\n }\n\n // Try to find the right one.\n const index = ArrayPrototypeIndexOf(state.pipes, dest)\n if (index === -1) return this\n state.pipes.splice(index, 1)\n if (state.pipes.length === 0) this.pause()\n dest.emit('unpipe', this, unpipeInfo)\n return this\n}\n\n// Set up data events if they are asked for\n// Ensure readable listeners eventually get something.\nReadable.prototype.on = function (ev, fn) {\n const res = Stream.prototype.on.call(this, ev, fn)\n const state = this._readableState\n if (ev === 'data') {\n // Update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0\n\n // Try start flowing on next tick if stream isn't explicitly paused.\n if (state.flowing !== false) this.resume()\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true\n state.flowing = false\n state.emittedReadable = false\n debug('on readable', state.length, state.reading)\n if (state.length) {\n emitReadable(this)\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this)\n }\n }\n }\n return res\n}\nReadable.prototype.addListener = Readable.prototype.on\nReadable.prototype.removeListener = function (ev, fn) {\n const res = Stream.prototype.removeListener.call(this, ev, fn)\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this)\n }\n return res\n}\nReadable.prototype.off = Readable.prototype.removeListener\nReadable.prototype.removeAllListeners = function (ev) {\n const res = Stream.prototype.removeAllListeners.apply(this, arguments)\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this)\n }\n return res\n}\nfunction updateReadableListening(self) {\n const state = self._readableState\n state.readableListening = self.listenerCount('readable') > 0\n if (state.resumeScheduled && state[kPaused] === false) {\n // Flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true\n\n // Crude way to check if we should resume.\n } else if (self.listenerCount('data') > 0) {\n self.resume()\n } else if (!state.readableListening) {\n state.flowing = null\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0')\n self.read(0)\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n const state = this._readableState\n if (!state.flowing) {\n debug('resume')\n // We flow only if there is no one listening\n // for readable, but we still have to call\n // resume().\n state.flowing = !state.readableListening\n resume(this, state)\n }\n state[kPaused] = false\n return this\n}\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true\n process.nextTick(resume_, stream, state)\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading)\n if (!state.reading) {\n stream.read(0)\n }\n state.resumeScheduled = false\n stream.emit('resume')\n flow(stream)\n if (state.flowing && !state.reading) stream.read(0)\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing)\n if (this._readableState.flowing !== false) {\n debug('pause')\n this._readableState.flowing = false\n this.emit('pause')\n }\n this._readableState[kPaused] = true\n return this\n}\nfunction flow(stream) {\n const state = stream._readableState\n debug('flow', state.flowing)\n while (state.flowing && stream.read() !== null);\n}\n\n// Wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n let paused = false\n\n // TODO (ronag): Should this.destroy(err) emit\n // 'error' on the wrapped stream? Would require\n // a static factory method, e.g. Readable.wrap(stream).\n\n stream.on('data', (chunk) => {\n if (!this.push(chunk) && stream.pause) {\n paused = true\n stream.pause()\n }\n })\n stream.on('end', () => {\n this.push(null)\n })\n stream.on('error', (err) => {\n errorOrDestroy(this, err)\n })\n stream.on('close', () => {\n this.destroy()\n })\n stream.on('destroy', () => {\n this.destroy()\n })\n this._read = () => {\n if (paused && stream.resume) {\n paused = false\n stream.resume()\n }\n }\n\n // Proxy all the other methods. Important when wrapping filters and duplexes.\n const streamKeys = ObjectKeys(stream)\n for (let j = 1; j < streamKeys.length; j++) {\n const i = streamKeys[j]\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = stream[i].bind(stream)\n }\n }\n return this\n}\nReadable.prototype[SymbolAsyncIterator] = function () {\n return streamToAsyncIterator(this)\n}\nReadable.prototype.iterator = function (options) {\n if (options !== undefined) {\n validateObject(options, 'options')\n }\n return streamToAsyncIterator(this, options)\n}\nfunction streamToAsyncIterator(stream, options) {\n if (typeof stream.read !== 'function') {\n stream = Readable.wrap(stream, {\n objectMode: true\n })\n }\n const iter = createAsyncIterator(stream, options)\n iter.stream = stream\n return iter\n}\nasync function* createAsyncIterator(stream, options) {\n let callback = nop\n function next(resolve) {\n if (this === stream) {\n callback()\n callback = nop\n } else {\n callback = resolve\n }\n }\n stream.on('readable', next)\n let error\n const cleanup = eos(\n stream,\n {\n writable: false\n },\n (err) => {\n error = err ? aggregateTwoErrors(error, err) : null\n callback()\n callback = nop\n }\n )\n try {\n while (true) {\n const chunk = stream.destroyed ? null : stream.read()\n if (chunk !== null) {\n yield chunk\n } else if (error) {\n throw error\n } else if (error === null) {\n return\n } else {\n await new Promise(next)\n }\n }\n } catch (err) {\n error = aggregateTwoErrors(error, err)\n throw error\n } finally {\n if (\n (error || (options === null || options === undefined ? undefined : options.destroyOnReturn) !== false) &&\n (error === undefined || stream._readableState.autoDestroy)\n ) {\n destroyImpl.destroyer(stream, null)\n } else {\n stream.off('readable', next)\n cleanup()\n }\n }\n}\n\n// Making it explicit these properties are not enumerable\n// because otherwise some prototype manipulation in\n// userland will fail.\nObjectDefineProperties(Readable.prototype, {\n readable: {\n __proto__: null,\n get() {\n const r = this._readableState\n // r.readable === false means that this is part of a Duplex stream\n // where the readable side was disabled upon construction.\n // Compat. The user might manually disable readable side through\n // deprecated setter.\n return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted\n },\n set(val) {\n // Backwards compat.\n if (this._readableState) {\n this._readableState.readable = !!val\n }\n }\n },\n readableDidRead: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.dataEmitted\n }\n },\n readableAborted: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return !!(\n this._readableState.readable !== false &&\n (this._readableState.destroyed || this._readableState.errored) &&\n !this._readableState.endEmitted\n )\n }\n },\n readableHighWaterMark: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark\n }\n },\n readableBuffer: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState && this._readableState.buffer\n }\n },\n readableFlowing: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.flowing\n },\n set: function (state) {\n if (this._readableState) {\n this._readableState.flowing = state\n }\n }\n },\n readableLength: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState.length\n }\n },\n readableObjectMode: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.objectMode : false\n }\n },\n readableEncoding: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.encoding : null\n }\n },\n errored: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.errored : null\n }\n },\n closed: {\n __proto__: null,\n get() {\n return this._readableState ? this._readableState.closed : false\n }\n },\n destroyed: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.destroyed : false\n },\n set(value) {\n // We ignore the value if the stream\n // has not been initialized yet.\n if (!this._readableState) {\n return\n }\n\n // Backward compatibility, the user is explicitly\n // managing destroyed.\n this._readableState.destroyed = value\n }\n },\n readableEnded: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.endEmitted : false\n }\n }\n})\nObjectDefineProperties(ReadableState.prototype, {\n // Legacy getter for `pipesCount`.\n pipesCount: {\n __proto__: null,\n get() {\n return this.pipes.length\n }\n },\n // Legacy property for `paused`.\n paused: {\n __proto__: null,\n get() {\n return this[kPaused] !== false\n },\n set(value) {\n this[kPaused] = !!value\n }\n }\n})\n\n// Exposed for testing purposes only.\nReadable._fromList = fromList\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered.\n if (state.length === 0) return null\n let ret\n if (state.objectMode) ret = state.buffer.shift()\n else if (!n || n >= state.length) {\n // Read it all, truncate the list.\n if (state.decoder) ret = state.buffer.join('')\n else if (state.buffer.length === 1) ret = state.buffer.first()\n else ret = state.buffer.concat(state.length)\n state.buffer.clear()\n } else {\n // read part of list.\n ret = state.buffer.consume(n, state.decoder)\n }\n return ret\n}\nfunction endReadable(stream) {\n const state = stream._readableState\n debug('endReadable', state.endEmitted)\n if (!state.endEmitted) {\n state.ended = true\n process.nextTick(endReadableNT, state, stream)\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length)\n\n // Check that we didn't get one last unshift.\n if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) {\n state.endEmitted = true\n stream.emit('end')\n if (stream.writable && stream.allowHalfOpen === false) {\n process.nextTick(endWritableNT, stream)\n } else if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well.\n const wState = stream._writableState\n const autoDestroy =\n !wState ||\n (wState.autoDestroy &&\n // We don't expect the writable to ever 'finish'\n // if writable is explicitly set to false.\n (wState.finished || wState.writable === false))\n if (autoDestroy) {\n stream.destroy()\n }\n }\n }\n}\nfunction endWritableNT(stream) {\n const writable = stream.writable && !stream.writableEnded && !stream.destroyed\n if (writable) {\n stream.end()\n }\n}\nReadable.from = function (iterable, opts) {\n return from(Readable, iterable, opts)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nReadable.fromWeb = function (readableStream, options) {\n return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options)\n}\nReadable.toWeb = function (streamReadable, options) {\n return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options)\n}\nReadable.wrap = function (src, options) {\n var _ref, _src$readableObjectMo\n return new Readable({\n objectMode:\n (_ref =\n (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== undefined\n ? _src$readableObjectMo\n : src.objectMode) !== null && _ref !== undefined\n ? _ref\n : true,\n ...options,\n destroy(err, callback) {\n destroyImpl.destroyer(src, err)\n callback(err)\n }\n }).wrap(src)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n ArrayPrototypeSlice,\n Error,\n FunctionPrototypeSymbolHasInstance,\n ObjectDefineProperty,\n ObjectDefineProperties,\n ObjectSetPrototypeOf,\n StringPrototypeToLowerCase,\n Symbol,\n SymbolHasInstance\n} = require('../../ours/primordials')\nmodule.exports = Writable\nWritable.WritableState = WritableState\nconst { EventEmitter: EE } = require('events')\nconst Stream = require('./legacy').Stream\nconst { Buffer } = require('buffer')\nconst destroyImpl = require('./destroy')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED,\n ERR_STREAM_ALREADY_FINISHED,\n ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING\n} = require('../../ours/errors').codes\nconst { errorOrDestroy } = destroyImpl\nObjectSetPrototypeOf(Writable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Writable, Stream)\nfunction nop() {}\nconst kOnFinished = Symbol('kOnFinished')\nfunction WritableState(options, stream, isDuplex) {\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n // Object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!(options && options.objectMode)\n if (isDuplex) this.objectMode = this.objectMode || !!(options && options.writableObjectMode)\n\n // The point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write().\n this.highWaterMark = options\n ? getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex)\n : getDefaultHighWaterMark(false)\n\n // if _final has been called.\n this.finalCalled = false\n\n // drain event flag.\n this.needDrain = false\n // At the start of calling end()\n this.ending = false\n // When end() has been called, and returned.\n this.ended = false\n // When 'finish' is emitted.\n this.finished = false\n\n // Has it been destroyed\n this.destroyed = false\n\n // Should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n const noDecode = !!(options && options.decodeStrings === false)\n this.decodeStrings = !noDecode\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n // Not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0\n\n // A flag to see when we're in the middle of a write.\n this.writing = false\n\n // When true all writes will be buffered until .uncork() call.\n this.corked = 0\n\n // A flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true\n\n // A flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false\n\n // The callback that's passed to _write(chunk, cb).\n this.onwrite = onwrite.bind(undefined, stream)\n\n // The callback that the user supplies to write(chunk, encoding, cb).\n this.writecb = null\n\n // The amount that is being written when _write is called.\n this.writelen = 0\n\n // Storage for data passed to the afterWrite() callback in case of\n // synchronous _write() completion.\n this.afterWriteTickInfo = null\n resetBuffer(this)\n\n // Number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted.\n this.pendingcb = 0\n\n // Stream is still being constructed and cannot be\n // destroyed until construction finished or failed.\n // Async construction is opt in, therefore we start as\n // constructed.\n this.constructed = true\n\n // Emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams.\n this.prefinished = false\n\n // True if the error was already emitted and should not be thrown again.\n this.errorEmitted = false\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = !options || options.emitClose !== false\n\n // Should .destroy() be called after 'finish' (and potentially 'end').\n this.autoDestroy = !options || options.autoDestroy !== false\n\n // Indicates whether the stream has errored. When true all write() calls\n // should return false. This is needed since when autoDestroy\n // is disabled we need a way to tell whether the stream has failed.\n this.errored = null\n\n // Indicates whether the stream has finished destroying.\n this.closed = false\n\n // True if close has been emitted or would have been emitted\n // depending on emitClose.\n this.closeEmitted = false\n this[kOnFinished] = []\n}\nfunction resetBuffer(state) {\n state.buffered = []\n state.bufferedIndex = 0\n state.allBuffers = true\n state.allNoop = true\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n return ArrayPrototypeSlice(this.buffered, this.bufferedIndex)\n}\nObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', {\n __proto__: null,\n get() {\n return this.buffered.length - this.bufferedIndex\n }\n})\nfunction Writable(options) {\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5.\n const isDuplex = this instanceof require('./duplex')\n if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable, this)) return new Writable(options)\n this._writableState = new WritableState(options, this, isDuplex)\n if (options) {\n if (typeof options.write === 'function') this._write = options.write\n if (typeof options.writev === 'function') this._writev = options.writev\n if (typeof options.destroy === 'function') this._destroy = options.destroy\n if (typeof options.final === 'function') this._final = options.final\n if (typeof options.construct === 'function') this._construct = options.construct\n if (options.signal) addAbortSignal(options.signal, this)\n }\n Stream.call(this, options)\n destroyImpl.construct(this, () => {\n const state = this._writableState\n if (!state.writing) {\n clearBuffer(this, state)\n }\n finishMaybe(this, state)\n })\n}\nObjectDefineProperty(Writable, SymbolHasInstance, {\n __proto__: null,\n value: function (object) {\n if (FunctionPrototypeSymbolHasInstance(this, object)) return true\n if (this !== Writable) return false\n return object && object._writableState instanceof WritableState\n }\n})\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE())\n}\nfunction _write(stream, chunk, encoding, cb) {\n const state = stream._writableState\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = state.defaultEncoding\n } else {\n if (!encoding) encoding = state.defaultEncoding\n else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n if (typeof cb !== 'function') cb = nop\n }\n if (chunk === null) {\n throw new ERR_STREAM_NULL_VALUES()\n } else if (!state.objectMode) {\n if (typeof chunk === 'string') {\n if (state.decodeStrings !== false) {\n chunk = Buffer.from(chunk, encoding)\n encoding = 'buffer'\n }\n } else if (chunk instanceof Buffer) {\n encoding = 'buffer'\n } else if (Stream._isUint8Array(chunk)) {\n chunk = Stream._uint8ArrayToBuffer(chunk)\n encoding = 'buffer'\n } else {\n throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n }\n }\n let err\n if (state.ending) {\n err = new ERR_STREAM_WRITE_AFTER_END()\n } else if (state.destroyed) {\n err = new ERR_STREAM_DESTROYED('write')\n }\n if (err) {\n process.nextTick(cb, err)\n errorOrDestroy(stream, err, true)\n return err\n }\n state.pendingcb++\n return writeOrBuffer(stream, state, chunk, encoding, cb)\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n return _write(this, chunk, encoding, cb) === true\n}\nWritable.prototype.cork = function () {\n this._writableState.corked++\n}\nWritable.prototype.uncork = function () {\n const state = this._writableState\n if (state.corked) {\n state.corked--\n if (!state.writing) clearBuffer(this, state)\n }\n}\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = StringPrototypeToLowerCase(encoding)\n if (!Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n this._writableState.defaultEncoding = encoding\n return this\n}\n\n// If we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, callback) {\n const len = state.objectMode ? 1 : chunk.length\n state.length += len\n\n // stream._write resets state.length\n const ret = state.length < state.highWaterMark\n // We must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true\n if (state.writing || state.corked || state.errored || !state.constructed) {\n state.buffered.push({\n chunk,\n encoding,\n callback\n })\n if (state.allBuffers && encoding !== 'buffer') {\n state.allBuffers = false\n }\n if (state.allNoop && callback !== nop) {\n state.allNoop = false\n }\n } else {\n state.writelen = len\n state.writecb = callback\n state.writing = true\n state.sync = true\n stream._write(chunk, encoding, state.onwrite)\n state.sync = false\n }\n\n // Return false if errored or destroyed in order to break\n // any synchronous while(stream.write(data)) loops.\n return ret && !state.errored && !state.destroyed\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len\n state.writecb = cb\n state.writing = true\n state.sync = true\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'))\n else if (writev) stream._writev(chunk, state.onwrite)\n else stream._write(chunk, encoding, state.onwrite)\n state.sync = false\n}\nfunction onwriteError(stream, state, er, cb) {\n --state.pendingcb\n cb(er)\n // Ensure callbacks are invoked even when autoDestroy is\n // not enabled. Passing `er` here doesn't make sense since\n // it's related to one specific write, not to the buffered\n // writes.\n errorBuffer(state)\n // This can emit error, but error must always follow cb.\n errorOrDestroy(stream, er)\n}\nfunction onwrite(stream, er) {\n const state = stream._writableState\n const sync = state.sync\n const cb = state.writecb\n if (typeof cb !== 'function') {\n errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK())\n return\n }\n state.writing = false\n state.writecb = null\n state.length -= state.writelen\n state.writelen = 0\n if (er) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n er.stack // eslint-disable-line no-unused-expressions\n\n if (!state.errored) {\n state.errored = er\n }\n\n // In case of duplex streams we need to notify the readable side of the\n // error.\n if (stream._readableState && !stream._readableState.errored) {\n stream._readableState.errored = er\n }\n if (sync) {\n process.nextTick(onwriteError, stream, state, er, cb)\n } else {\n onwriteError(stream, state, er, cb)\n }\n } else {\n if (state.buffered.length > state.bufferedIndex) {\n clearBuffer(stream, state)\n }\n if (sync) {\n // It is a common case that the callback passed to .write() is always\n // the same. In that case, we do not schedule a new nextTick(), but\n // rather just increase a counter, to improve performance and avoid\n // memory allocations.\n if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) {\n state.afterWriteTickInfo.count++\n } else {\n state.afterWriteTickInfo = {\n count: 1,\n cb,\n stream,\n state\n }\n process.nextTick(afterWriteTick, state.afterWriteTickInfo)\n }\n } else {\n afterWrite(stream, state, 1, cb)\n }\n }\n}\nfunction afterWriteTick({ stream, state, count, cb }) {\n state.afterWriteTickInfo = null\n return afterWrite(stream, state, count, cb)\n}\nfunction afterWrite(stream, state, count, cb) {\n const needDrain = !state.ending && !stream.destroyed && state.length === 0 && state.needDrain\n if (needDrain) {\n state.needDrain = false\n stream.emit('drain')\n }\n while (count-- > 0) {\n state.pendingcb--\n cb()\n }\n if (state.destroyed) {\n errorBuffer(state)\n }\n finishMaybe(stream, state)\n}\n\n// If there's something in the buffer waiting, then invoke callbacks.\nfunction errorBuffer(state) {\n if (state.writing) {\n return\n }\n for (let n = state.bufferedIndex; n < state.buffered.length; ++n) {\n var _state$errored\n const { chunk, callback } = state.buffered[n]\n const len = state.objectMode ? 1 : chunk.length\n state.length -= len\n callback(\n (_state$errored = state.errored) !== null && _state$errored !== undefined\n ? _state$errored\n : new ERR_STREAM_DESTROYED('write')\n )\n }\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n var _state$errored2\n onfinishCallbacks[i](\n (_state$errored2 = state.errored) !== null && _state$errored2 !== undefined\n ? _state$errored2\n : new ERR_STREAM_DESTROYED('end')\n )\n }\n resetBuffer(state)\n}\n\n// If there's something in the buffer waiting, then process it.\nfunction clearBuffer(stream, state) {\n if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) {\n return\n }\n const { buffered, bufferedIndex, objectMode } = state\n const bufferedLength = buffered.length - bufferedIndex\n if (!bufferedLength) {\n return\n }\n let i = bufferedIndex\n state.bufferProcessing = true\n if (bufferedLength > 1 && stream._writev) {\n state.pendingcb -= bufferedLength - 1\n const callback = state.allNoop\n ? nop\n : (err) => {\n for (let n = i; n < buffered.length; ++n) {\n buffered[n].callback(err)\n }\n }\n // Make a copy of `buffered` if it's going to be used by `callback` above,\n // since `doWrite` will mutate the array.\n const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i)\n chunks.allBuffers = state.allBuffers\n doWrite(stream, state, true, state.length, chunks, '', callback)\n resetBuffer(state)\n } else {\n do {\n const { chunk, encoding, callback } = buffered[i]\n buffered[i++] = null\n const len = objectMode ? 1 : chunk.length\n doWrite(stream, state, false, len, chunk, encoding, callback)\n } while (i < buffered.length && !state.writing)\n if (i === buffered.length) {\n resetBuffer(state)\n } else if (i > 256) {\n buffered.splice(0, i)\n state.bufferedIndex = 0\n } else {\n state.bufferedIndex = i\n }\n }\n state.bufferProcessing = false\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n if (this._writev) {\n this._writev(\n [\n {\n chunk,\n encoding\n }\n ],\n cb\n )\n } else {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_write()')\n }\n}\nWritable.prototype._writev = null\nWritable.prototype.end = function (chunk, encoding, cb) {\n const state = this._writableState\n if (typeof chunk === 'function') {\n cb = chunk\n chunk = null\n encoding = null\n } else if (typeof encoding === 'function') {\n cb = encoding\n encoding = null\n }\n let err\n if (chunk !== null && chunk !== undefined) {\n const ret = _write(this, chunk, encoding)\n if (ret instanceof Error) {\n err = ret\n }\n }\n\n // .end() fully uncorks.\n if (state.corked) {\n state.corked = 1\n this.uncork()\n }\n if (err) {\n // Do nothing...\n } else if (!state.errored && !state.ending) {\n // This is forgiving in terms of unnecessary calls to end() and can hide\n // logic errors. However, usually such errors are harmless and causing a\n // hard error can be disproportionately destructive. It is not always\n // trivial for the user to determine whether end() needs to be called\n // or not.\n\n state.ending = true\n finishMaybe(this, state, true)\n state.ended = true\n } else if (state.finished) {\n err = new ERR_STREAM_ALREADY_FINISHED('end')\n } else if (state.destroyed) {\n err = new ERR_STREAM_DESTROYED('end')\n }\n if (typeof cb === 'function') {\n if (err || state.finished) {\n process.nextTick(cb, err)\n } else {\n state[kOnFinished].push(cb)\n }\n }\n return this\n}\nfunction needFinish(state) {\n return (\n state.ending &&\n !state.destroyed &&\n state.constructed &&\n state.length === 0 &&\n !state.errored &&\n state.buffered.length === 0 &&\n !state.finished &&\n !state.writing &&\n !state.errorEmitted &&\n !state.closeEmitted\n )\n}\nfunction callFinal(stream, state) {\n let called = false\n function onFinish(err) {\n if (called) {\n errorOrDestroy(stream, err !== null && err !== undefined ? err : ERR_MULTIPLE_CALLBACK())\n return\n }\n called = true\n state.pendingcb--\n if (err) {\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n onfinishCallbacks[i](err)\n }\n errorOrDestroy(stream, err, state.sync)\n } else if (needFinish(state)) {\n state.prefinished = true\n stream.emit('prefinish')\n // Backwards compat. Don't check state.sync here.\n // Some streams assume 'finish' will be emitted\n // asynchronously relative to _final callback.\n state.pendingcb++\n process.nextTick(finish, stream, state)\n }\n }\n state.sync = true\n state.pendingcb++\n try {\n stream._final(onFinish)\n } catch (err) {\n onFinish(err)\n }\n state.sync = false\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.finalCalled = true\n callFinal(stream, state)\n } else {\n state.prefinished = true\n stream.emit('prefinish')\n }\n }\n}\nfunction finishMaybe(stream, state, sync) {\n if (needFinish(state)) {\n prefinish(stream, state)\n if (state.pendingcb === 0) {\n if (sync) {\n state.pendingcb++\n process.nextTick(\n (stream, state) => {\n if (needFinish(state)) {\n finish(stream, state)\n } else {\n state.pendingcb--\n }\n },\n stream,\n state\n )\n } else if (needFinish(state)) {\n state.pendingcb++\n finish(stream, state)\n }\n }\n }\n}\nfunction finish(stream, state) {\n state.pendingcb--\n state.finished = true\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n onfinishCallbacks[i]()\n }\n stream.emit('finish')\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well.\n const rState = stream._readableState\n const autoDestroy =\n !rState ||\n (rState.autoDestroy &&\n // We don't expect the readable to ever 'end'\n // if readable is explicitly set to false.\n (rState.endEmitted || rState.readable === false))\n if (autoDestroy) {\n stream.destroy()\n }\n }\n}\nObjectDefineProperties(Writable.prototype, {\n closed: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.closed : false\n }\n },\n destroyed: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.destroyed : false\n },\n set(value) {\n // Backward compatibility, the user is explicitly managing destroyed.\n if (this._writableState) {\n this._writableState.destroyed = value\n }\n }\n },\n writable: {\n __proto__: null,\n get() {\n const w = this._writableState\n // w.writable === false means that this is part of a Duplex stream\n // where the writable side was disabled upon construction.\n // Compat. The user might manually disable writable side through\n // deprecated setter.\n return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended\n },\n set(val) {\n // Backwards compatible.\n if (this._writableState) {\n this._writableState.writable = !!val\n }\n }\n },\n writableFinished: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.finished : false\n }\n },\n writableObjectMode: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.objectMode : false\n }\n },\n writableBuffer: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.getBuffer()\n }\n },\n writableEnded: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.ending : false\n }\n },\n writableNeedDrain: {\n __proto__: null,\n get() {\n const wState = this._writableState\n if (!wState) return false\n return !wState.destroyed && !wState.ending && wState.needDrain\n }\n },\n writableHighWaterMark: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.highWaterMark\n }\n },\n writableCorked: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.corked : 0\n }\n },\n writableLength: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.length\n }\n },\n errored: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._writableState ? this._writableState.errored : null\n }\n },\n writableAborted: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return !!(\n this._writableState.writable !== false &&\n (this._writableState.destroyed || this._writableState.errored) &&\n !this._writableState.finished\n )\n }\n }\n})\nconst destroy = destroyImpl.destroy\nWritable.prototype.destroy = function (err, cb) {\n const state = this._writableState\n\n // Invoke pending callbacks.\n if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) {\n process.nextTick(errorBuffer, state)\n }\n destroy.call(this, err, cb)\n return this\n}\nWritable.prototype._undestroy = destroyImpl.undestroy\nWritable.prototype._destroy = function (err, cb) {\n cb(err)\n}\nWritable.prototype[EE.captureRejectionSymbol] = function (err) {\n this.destroy(err)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nWritable.fromWeb = function (writableStream, options) {\n return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options)\n}\nWritable.toWeb = function (streamWritable) {\n return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\n;('use strict')\nconst bufferModule = require('buffer')\nconst {\n isReadable,\n isWritable,\n isIterable,\n isNodeStream,\n isReadableNodeStream,\n isWritableNodeStream,\n isDuplexNodeStream,\n isReadableStream,\n isWritableStream\n} = require('./utils')\nconst eos = require('./end-of-stream')\nconst {\n AbortError,\n codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_RETURN_VALUE }\n} = require('../../ours/errors')\nconst { destroyer } = require('./destroy')\nconst Duplex = require('./duplex')\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nconst { createDeferredPromise } = require('../../ours/util')\nconst from = require('./from')\nconst Blob = globalThis.Blob || bufferModule.Blob\nconst isBlob =\n typeof Blob !== 'undefined'\n ? function isBlob(b) {\n return b instanceof Blob\n }\n : function isBlob(b) {\n return false\n }\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst { FunctionPrototypeCall } = require('../../ours/primordials')\n\n// This is needed for pre node 17.\nclass Duplexify extends Duplex {\n constructor(options) {\n super(options)\n\n // https://github.com/nodejs/node/pull/34385\n\n if ((options === null || options === undefined ? undefined : options.readable) === false) {\n this._readableState.readable = false\n this._readableState.ended = true\n this._readableState.endEmitted = true\n }\n if ((options === null || options === undefined ? undefined : options.writable) === false) {\n this._writableState.writable = false\n this._writableState.ending = true\n this._writableState.ended = true\n this._writableState.finished = true\n }\n }\n}\nmodule.exports = function duplexify(body, name) {\n if (isDuplexNodeStream(body)) {\n return body\n }\n if (isReadableNodeStream(body)) {\n return _duplexify({\n readable: body\n })\n }\n if (isWritableNodeStream(body)) {\n return _duplexify({\n writable: body\n })\n }\n if (isNodeStream(body)) {\n return _duplexify({\n writable: false,\n readable: false\n })\n }\n if (isReadableStream(body)) {\n return _duplexify({\n readable: Readable.fromWeb(body)\n })\n }\n if (isWritableStream(body)) {\n return _duplexify({\n writable: Writable.fromWeb(body)\n })\n }\n if (typeof body === 'function') {\n const { value, write, final, destroy } = fromAsyncGen(body)\n if (isIterable(value)) {\n return from(Duplexify, value, {\n // TODO (ronag): highWaterMark?\n objectMode: true,\n write,\n final,\n destroy\n })\n }\n const then = value === null || value === undefined ? undefined : value.then\n if (typeof then === 'function') {\n let d\n const promise = FunctionPrototypeCall(\n then,\n value,\n (val) => {\n if (val != null) {\n throw new ERR_INVALID_RETURN_VALUE('nully', 'body', val)\n }\n },\n (err) => {\n destroyer(d, err)\n }\n )\n return (d = new Duplexify({\n // TODO (ronag): highWaterMark?\n objectMode: true,\n readable: false,\n write,\n final(cb) {\n final(async () => {\n try {\n await promise\n process.nextTick(cb, null)\n } catch (err) {\n process.nextTick(cb, err)\n }\n })\n },\n destroy\n }))\n }\n throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or AsyncFunction', name, value)\n }\n if (isBlob(body)) {\n return duplexify(body.arrayBuffer())\n }\n if (isIterable(body)) {\n return from(Duplexify, body, {\n // TODO (ronag): highWaterMark?\n objectMode: true,\n writable: false\n })\n }\n if (\n isReadableStream(body === null || body === undefined ? undefined : body.readable) &&\n isWritableStream(body === null || body === undefined ? undefined : body.writable)\n ) {\n return Duplexify.fromWeb(body)\n }\n if (\n typeof (body === null || body === undefined ? undefined : body.writable) === 'object' ||\n typeof (body === null || body === undefined ? undefined : body.readable) === 'object'\n ) {\n const readable =\n body !== null && body !== undefined && body.readable\n ? isReadableNodeStream(body === null || body === undefined ? undefined : body.readable)\n ? body === null || body === undefined\n ? undefined\n : body.readable\n : duplexify(body.readable)\n : undefined\n const writable =\n body !== null && body !== undefined && body.writable\n ? isWritableNodeStream(body === null || body === undefined ? undefined : body.writable)\n ? body === null || body === undefined\n ? undefined\n : body.writable\n : duplexify(body.writable)\n : undefined\n return _duplexify({\n readable,\n writable\n })\n }\n const then = body === null || body === undefined ? undefined : body.then\n if (typeof then === 'function') {\n let d\n FunctionPrototypeCall(\n then,\n body,\n (val) => {\n if (val != null) {\n d.push(val)\n }\n d.push(null)\n },\n (err) => {\n destroyer(d, err)\n }\n )\n return (d = new Duplexify({\n objectMode: true,\n writable: false,\n read() {}\n }))\n }\n throw new ERR_INVALID_ARG_TYPE(\n name,\n [\n 'Blob',\n 'ReadableStream',\n 'WritableStream',\n 'Stream',\n 'Iterable',\n 'AsyncIterable',\n 'Function',\n '{ readable, writable } pair',\n 'Promise'\n ],\n body\n )\n}\nfunction fromAsyncGen(fn) {\n let { promise, resolve } = createDeferredPromise()\n const ac = new AbortController()\n const signal = ac.signal\n const value = fn(\n (async function* () {\n while (true) {\n const _promise = promise\n promise = null\n const { chunk, done, cb } = await _promise\n process.nextTick(cb)\n if (done) return\n if (signal.aborted)\n throw new AbortError(undefined, {\n cause: signal.reason\n })\n ;({ promise, resolve } = createDeferredPromise())\n yield chunk\n }\n })(),\n {\n signal\n }\n )\n return {\n value,\n write(chunk, encoding, cb) {\n const _resolve = resolve\n resolve = null\n _resolve({\n chunk,\n done: false,\n cb\n })\n },\n final(cb) {\n const _resolve = resolve\n resolve = null\n _resolve({\n done: true,\n cb\n })\n },\n destroy(err, cb) {\n ac.abort()\n cb(err)\n }\n }\n}\nfunction _duplexify(pair) {\n const r = pair.readable && typeof pair.readable.read !== 'function' ? Readable.wrap(pair.readable) : pair.readable\n const w = pair.writable\n let readable = !!isReadable(r)\n let writable = !!isWritable(w)\n let ondrain\n let onfinish\n let onreadable\n let onclose\n let d\n function onfinished(err) {\n const cb = onclose\n onclose = null\n if (cb) {\n cb(err)\n } else if (err) {\n d.destroy(err)\n }\n }\n\n // TODO(ronag): Avoid double buffering.\n // Implement Writable/Readable/Duplex traits.\n // See, https://github.com/nodejs/node/pull/33515.\n d = new Duplexify({\n // TODO (ronag): highWaterMark?\n readableObjectMode: !!(r !== null && r !== undefined && r.readableObjectMode),\n writableObjectMode: !!(w !== null && w !== undefined && w.writableObjectMode),\n readable,\n writable\n })\n if (writable) {\n eos(w, (err) => {\n writable = false\n if (err) {\n destroyer(r, err)\n }\n onfinished(err)\n })\n d._write = function (chunk, encoding, callback) {\n if (w.write(chunk, encoding)) {\n callback()\n } else {\n ondrain = callback\n }\n }\n d._final = function (callback) {\n w.end()\n onfinish = callback\n }\n w.on('drain', function () {\n if (ondrain) {\n const cb = ondrain\n ondrain = null\n cb()\n }\n })\n w.on('finish', function () {\n if (onfinish) {\n const cb = onfinish\n onfinish = null\n cb()\n }\n })\n }\n if (readable) {\n eos(r, (err) => {\n readable = false\n if (err) {\n destroyer(r, err)\n }\n onfinished(err)\n })\n r.on('readable', function () {\n if (onreadable) {\n const cb = onreadable\n onreadable = null\n cb()\n }\n })\n r.on('end', function () {\n d.push(null)\n })\n d._read = function () {\n while (true) {\n const buf = r.read()\n if (buf === null) {\n onreadable = d._read\n return\n }\n if (!d.push(buf)) {\n return\n }\n }\n }\n }\n d._destroy = function (err, callback) {\n if (!err && onclose !== null) {\n err = new AbortError()\n }\n onreadable = null\n ondrain = null\n onfinish = null\n if (onclose === null) {\n callback(err)\n } else {\n onclose = callback\n destroyer(w, err)\n destroyer(r, err)\n }\n }\n return d\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototype inheritance, this class\n// prototypically inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict'\n\nconst {\n ObjectDefineProperties,\n ObjectGetOwnPropertyDescriptor,\n ObjectKeys,\n ObjectSetPrototypeOf\n} = require('../../ours/primordials')\nmodule.exports = Duplex\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nObjectSetPrototypeOf(Duplex.prototype, Readable.prototype)\nObjectSetPrototypeOf(Duplex, Readable)\n{\n const keys = ObjectKeys(Writable.prototype)\n // Allow the keys array to be GC'ed.\n for (let i = 0; i < keys.length; i++) {\n const method = keys[i]\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options)\n Readable.call(this, options)\n Writable.call(this, options)\n if (options) {\n this.allowHalfOpen = options.allowHalfOpen !== false\n if (options.readable === false) {\n this._readableState.readable = false\n this._readableState.ended = true\n this._readableState.endEmitted = true\n }\n if (options.writable === false) {\n this._writableState.writable = false\n this._writableState.ending = true\n this._writableState.ended = true\n this._writableState.finished = true\n }\n } else {\n this.allowHalfOpen = true\n }\n}\nObjectDefineProperties(Duplex.prototype, {\n writable: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable')\n },\n writableHighWaterMark: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark')\n },\n writableObjectMode: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode')\n },\n writableBuffer: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer')\n },\n writableLength: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength')\n },\n writableFinished: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished')\n },\n writableCorked: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked')\n },\n writableEnded: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded')\n },\n writableNeedDrain: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain')\n },\n destroyed: {\n __proto__: null,\n get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false\n }\n return this._readableState.destroyed && this._writableState.destroyed\n },\n set(value) {\n // Backward compatibility, the user is explicitly\n // managing destroyed.\n if (this._readableState && this._writableState) {\n this._readableState.destroyed = value\n this._writableState.destroyed = value\n }\n }\n }\n})\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nDuplex.fromWeb = function (pair, options) {\n return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options)\n}\nDuplex.toWeb = function (duplex) {\n return lazyWebStreams().newReadableWritablePairFromDuplex(duplex)\n}\nlet duplexify\nDuplex.from = function (body) {\n if (!duplexify) {\n duplexify = require('./duplexify')\n }\n return duplexify(body, 'body')\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf, Symbol } = require('../../ours/primordials')\nmodule.exports = Transform\nconst { ERR_METHOD_NOT_IMPLEMENTED } = require('../../ours/errors').codes\nconst Duplex = require('./duplex')\nconst { getHighWaterMark } = require('./state')\nObjectSetPrototypeOf(Transform.prototype, Duplex.prototype)\nObjectSetPrototypeOf(Transform, Duplex)\nconst kCallback = Symbol('kCallback')\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options)\n\n // TODO (ronag): This should preferably always be\n // applied but would be semver-major. Or even better;\n // make Transform a Readable with the Writable interface.\n const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null\n if (readableHighWaterMark === 0) {\n // A Duplex will buffer both on the writable and readable side while\n // a Transform just wants to buffer hwm number of elements. To avoid\n // buffering twice we disable buffering on the writable side.\n options = {\n ...options,\n highWaterMark: null,\n readableHighWaterMark,\n // TODO (ronag): 0 is not optimal since we have\n // a \"bug\" where we check needDrain before calling _write and not after.\n // Refs: https://github.com/nodejs/node/pull/32887\n // Refs: https://github.com/nodejs/node/pull/35941\n writableHighWaterMark: options.writableHighWaterMark || 0\n }\n }\n Duplex.call(this, options)\n\n // We have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false\n this[kCallback] = null\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform\n if (typeof options.flush === 'function') this._flush = options.flush\n }\n\n // When the writable side finishes, then flush out anything remaining.\n // Backwards compat. Some Transform streams incorrectly implement _final\n // instead of or in addition to _flush. By using 'prefinish' instead of\n // implementing _final we continue supporting this unfortunate use case.\n this.on('prefinish', prefinish)\n}\nfunction final(cb) {\n if (typeof this._flush === 'function' && !this.destroyed) {\n this._flush((er, data) => {\n if (er) {\n if (cb) {\n cb(er)\n } else {\n this.destroy(er)\n }\n return\n }\n if (data != null) {\n this.push(data)\n }\n this.push(null)\n if (cb) {\n cb()\n }\n })\n } else {\n this.push(null)\n if (cb) {\n cb()\n }\n }\n}\nfunction prefinish() {\n if (this._final !== final) {\n final.call(this)\n }\n}\nTransform.prototype._final = final\nTransform.prototype._transform = function (chunk, encoding, callback) {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_transform()')\n}\nTransform.prototype._write = function (chunk, encoding, callback) {\n const rState = this._readableState\n const wState = this._writableState\n const length = rState.length\n this._transform(chunk, encoding, (err, val) => {\n if (err) {\n callback(err)\n return\n }\n if (val != null) {\n this.push(val)\n }\n if (\n wState.ended ||\n // Backwards compat.\n length === rState.length ||\n // Backwards compat.\n rState.length < rState.highWaterMark\n ) {\n callback()\n } else {\n this[kCallback] = callback\n }\n })\n}\nTransform.prototype._read = function () {\n if (this[kCallback]) {\n const callback = this[kCallback]\n this[kCallback] = null\n callback()\n }\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf } = require('../../ours/primordials')\nmodule.exports = PassThrough\nconst Transform = require('./transform')\nObjectSetPrototypeOf(PassThrough.prototype, Transform.prototype)\nObjectSetPrototypeOf(PassThrough, Transform)\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options)\n Transform.call(this, options)\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { ArrayIsArray, Promise, SymbolAsyncIterator, SymbolDispose } = require('../../ours/primordials')\nconst eos = require('./end-of-stream')\nconst { once } = require('../../ours/util')\nconst destroyImpl = require('./destroy')\nconst Duplex = require('./duplex')\nconst {\n aggregateTwoErrors,\n codes: {\n ERR_INVALID_ARG_TYPE,\n ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED,\n ERR_STREAM_PREMATURE_CLOSE\n },\n AbortError\n} = require('../../ours/errors')\nconst { validateFunction, validateAbortSignal } = require('../validators')\nconst {\n isIterable,\n isReadable,\n isReadableNodeStream,\n isNodeStream,\n isTransformStream,\n isWebStream,\n isReadableStream,\n isReadableFinished\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\nlet addAbortListener\nfunction destroyer(stream, reading, writing) {\n let finished = false\n stream.on('close', () => {\n finished = true\n })\n const cleanup = eos(\n stream,\n {\n readable: reading,\n writable: writing\n },\n (err) => {\n finished = !err\n }\n )\n return {\n destroy: (err) => {\n if (finished) return\n finished = true\n destroyImpl.destroyer(stream, err || new ERR_STREAM_DESTROYED('pipe'))\n },\n cleanup\n }\n}\nfunction popCallback(streams) {\n // Streams should never be an empty array. It should always contain at least\n // a single stream. Therefore optimize for the average case instead of\n // checking for length === 0 as well.\n validateFunction(streams[streams.length - 1], 'streams[stream.length - 1]')\n return streams.pop()\n}\nfunction makeAsyncIterable(val) {\n if (isIterable(val)) {\n return val\n } else if (isReadableNodeStream(val)) {\n // Legacy streams are not Iterable.\n return fromReadable(val)\n }\n throw new ERR_INVALID_ARG_TYPE('val', ['Readable', 'Iterable', 'AsyncIterable'], val)\n}\nasync function* fromReadable(val) {\n if (!Readable) {\n Readable = require('./readable')\n }\n yield* Readable.prototype[SymbolAsyncIterator].call(val)\n}\nasync function pumpToNode(iterable, writable, finish, { end }) {\n let error\n let onresolve = null\n const resume = (err) => {\n if (err) {\n error = err\n }\n if (onresolve) {\n const callback = onresolve\n onresolve = null\n callback()\n }\n }\n const wait = () =>\n new Promise((resolve, reject) => {\n if (error) {\n reject(error)\n } else {\n onresolve = () => {\n if (error) {\n reject(error)\n } else {\n resolve()\n }\n }\n }\n })\n writable.on('drain', resume)\n const cleanup = eos(\n writable,\n {\n readable: false\n },\n resume\n )\n try {\n if (writable.writableNeedDrain) {\n await wait()\n }\n for await (const chunk of iterable) {\n if (!writable.write(chunk)) {\n await wait()\n }\n }\n if (end) {\n writable.end()\n await wait()\n }\n finish()\n } catch (err) {\n finish(error !== err ? aggregateTwoErrors(error, err) : err)\n } finally {\n cleanup()\n writable.off('drain', resume)\n }\n}\nasync function pumpToWeb(readable, writable, finish, { end }) {\n if (isTransformStream(writable)) {\n writable = writable.writable\n }\n // https://streams.spec.whatwg.org/#example-manual-write-with-backpressure\n const writer = writable.getWriter()\n try {\n for await (const chunk of readable) {\n await writer.ready\n writer.write(chunk).catch(() => {})\n }\n await writer.ready\n if (end) {\n await writer.close()\n }\n finish()\n } catch (err) {\n try {\n await writer.abort(err)\n finish(err)\n } catch (err) {\n finish(err)\n }\n }\n}\nfunction pipeline(...streams) {\n return pipelineImpl(streams, once(popCallback(streams)))\n}\nfunction pipelineImpl(streams, callback, opts) {\n if (streams.length === 1 && ArrayIsArray(streams[0])) {\n streams = streams[0]\n }\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams')\n }\n const ac = new AbortController()\n const signal = ac.signal\n const outerSignal = opts === null || opts === undefined ? undefined : opts.signal\n\n // Need to cleanup event listeners if last stream is readable\n // https://github.com/nodejs/node/issues/35452\n const lastStreamCleanup = []\n validateAbortSignal(outerSignal, 'options.signal')\n function abort() {\n finishImpl(new AbortError())\n }\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n let disposable\n if (outerSignal) {\n disposable = addAbortListener(outerSignal, abort)\n }\n let error\n let value\n const destroys = []\n let finishCount = 0\n function finish(err) {\n finishImpl(err, --finishCount === 0)\n }\n function finishImpl(err, final) {\n var _disposable\n if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {\n error = err\n }\n if (!error && !final) {\n return\n }\n while (destroys.length) {\n destroys.shift()(error)\n }\n ;(_disposable = disposable) === null || _disposable === undefined ? undefined : _disposable[SymbolDispose]()\n ac.abort()\n if (final) {\n if (!error) {\n lastStreamCleanup.forEach((fn) => fn())\n }\n process.nextTick(callback, error, value)\n }\n }\n let ret\n for (let i = 0; i < streams.length; i++) {\n const stream = streams[i]\n const reading = i < streams.length - 1\n const writing = i > 0\n const end = reading || (opts === null || opts === undefined ? undefined : opts.end) !== false\n const isLastStream = i === streams.length - 1\n if (isNodeStream(stream)) {\n if (end) {\n const { destroy, cleanup } = destroyer(stream, reading, writing)\n destroys.push(destroy)\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n }\n\n // Catch stream errors that occur after pipe/pump has completed.\n function onError(err) {\n if (err && err.name !== 'AbortError' && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n finish(err)\n }\n }\n stream.on('error', onError)\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(() => {\n stream.removeListener('error', onError)\n })\n }\n }\n if (i === 0) {\n if (typeof stream === 'function') {\n ret = stream({\n signal\n })\n if (!isIterable(ret)) {\n throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or Stream', 'source', ret)\n }\n } else if (isIterable(stream) || isReadableNodeStream(stream) || isTransformStream(stream)) {\n ret = stream\n } else {\n ret = Duplex.from(stream)\n }\n } else if (typeof stream === 'function') {\n if (isTransformStream(ret)) {\n var _ret\n ret = makeAsyncIterable((_ret = ret) === null || _ret === undefined ? undefined : _ret.readable)\n } else {\n ret = makeAsyncIterable(ret)\n }\n ret = stream(ret, {\n signal\n })\n if (reading) {\n if (!isIterable(ret, true)) {\n throw new ERR_INVALID_RETURN_VALUE('AsyncIterable', `transform[${i - 1}]`, ret)\n }\n } else {\n var _ret2\n if (!PassThrough) {\n PassThrough = require('./passthrough')\n }\n\n // If the last argument to pipeline is not a stream\n // we must create a proxy stream so that pipeline(...)\n // always returns a stream which can be further\n // composed through `.pipe(stream)`.\n\n const pt = new PassThrough({\n objectMode: true\n })\n\n // Handle Promises/A+ spec, `then` could be a getter that throws on\n // second use.\n const then = (_ret2 = ret) === null || _ret2 === undefined ? undefined : _ret2.then\n if (typeof then === 'function') {\n finishCount++\n then.call(\n ret,\n (val) => {\n value = val\n if (val != null) {\n pt.write(val)\n }\n if (end) {\n pt.end()\n }\n process.nextTick(finish)\n },\n (err) => {\n pt.destroy(err)\n process.nextTick(finish, err)\n }\n )\n } else if (isIterable(ret, true)) {\n finishCount++\n pumpToNode(ret, pt, finish, {\n end\n })\n } else if (isReadableStream(ret) || isTransformStream(ret)) {\n const toRead = ret.readable || ret\n finishCount++\n pumpToNode(toRead, pt, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_RETURN_VALUE('AsyncIterable or Promise', 'destination', ret)\n }\n ret = pt\n const { destroy, cleanup } = destroyer(ret, false, true)\n destroys.push(destroy)\n if (isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n }\n } else if (isNodeStream(stream)) {\n if (isReadableNodeStream(ret)) {\n finishCount += 2\n const cleanup = pipe(ret, stream, finish, {\n end\n })\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n } else if (isTransformStream(ret) || isReadableStream(ret)) {\n const toRead = ret.readable || ret\n finishCount++\n pumpToNode(toRead, stream, finish, {\n end\n })\n } else if (isIterable(ret)) {\n finishCount++\n pumpToNode(ret, stream, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_ARG_TYPE(\n 'val',\n ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n ret\n )\n }\n ret = stream\n } else if (isWebStream(stream)) {\n if (isReadableNodeStream(ret)) {\n finishCount++\n pumpToWeb(makeAsyncIterable(ret), stream, finish, {\n end\n })\n } else if (isReadableStream(ret) || isIterable(ret)) {\n finishCount++\n pumpToWeb(ret, stream, finish, {\n end\n })\n } else if (isTransformStream(ret)) {\n finishCount++\n pumpToWeb(ret.readable, stream, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_ARG_TYPE(\n 'val',\n ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n ret\n )\n }\n ret = stream\n } else {\n ret = Duplex.from(stream)\n }\n }\n if (\n (signal !== null && signal !== undefined && signal.aborted) ||\n (outerSignal !== null && outerSignal !== undefined && outerSignal.aborted)\n ) {\n process.nextTick(abort)\n }\n return ret\n}\nfunction pipe(src, dst, finish, { end }) {\n let ended = false\n dst.on('close', () => {\n if (!ended) {\n // Finish if the destination closes before the source has completed.\n finish(new ERR_STREAM_PREMATURE_CLOSE())\n }\n })\n src.pipe(dst, {\n end: false\n }) // If end is true we already will have a listener to end dst.\n\n if (end) {\n // Compat. Before node v10.12.0 stdio used to throw an error so\n // pipe() did/does not end() stdio destinations.\n // Now they allow it but \"secretly\" don't close the underlying fd.\n\n function endFn() {\n ended = true\n dst.end()\n }\n if (isReadableFinished(src)) {\n // End the destination if the source has already ended.\n process.nextTick(endFn)\n } else {\n src.once('end', endFn)\n }\n } else {\n finish()\n }\n eos(\n src,\n {\n readable: true,\n writable: false\n },\n (err) => {\n const rState = src._readableState\n if (\n err &&\n err.code === 'ERR_STREAM_PREMATURE_CLOSE' &&\n rState &&\n rState.ended &&\n !rState.errored &&\n !rState.errorEmitted\n ) {\n // Some readable streams will emit 'close' before 'end'. However, since\n // this is on the readable side 'end' should still be emitted if the\n // stream has been ended and no error emitted. This should be allowed in\n // favor of backwards compatibility. Since the stream is piped to a\n // destination this should not result in any observable difference.\n // We don't need to check if this is a writable premature close since\n // eos will only fail with premature close on the reading side for\n // duplex streams.\n src.once('end', finish).once('error', finish)\n } else {\n finish(err)\n }\n }\n )\n return eos(\n dst,\n {\n readable: false,\n writable: true\n },\n finish\n )\n}\nmodule.exports = {\n pipelineImpl,\n pipeline\n}\n", "'use strict'\n\nconst { pipeline } = require('./pipeline')\nconst Duplex = require('./duplex')\nconst { destroyer } = require('./destroy')\nconst {\n isNodeStream,\n isReadable,\n isWritable,\n isWebStream,\n isTransformStream,\n isWritableStream,\n isReadableStream\n} = require('./utils')\nconst {\n AbortError,\n codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS }\n} = require('../../ours/errors')\nconst eos = require('./end-of-stream')\nmodule.exports = function compose(...streams) {\n if (streams.length === 0) {\n throw new ERR_MISSING_ARGS('streams')\n }\n if (streams.length === 1) {\n return Duplex.from(streams[0])\n }\n const orgStreams = [...streams]\n if (typeof streams[0] === 'function') {\n streams[0] = Duplex.from(streams[0])\n }\n if (typeof streams[streams.length - 1] === 'function') {\n const idx = streams.length - 1\n streams[idx] = Duplex.from(streams[idx])\n }\n for (let n = 0; n < streams.length; ++n) {\n if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) {\n // TODO(ronag): Add checks for non streams.\n continue\n }\n if (\n n < streams.length - 1 &&\n !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))\n ) {\n throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be readable')\n }\n if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) {\n throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be writable')\n }\n }\n let ondrain\n let onfinish\n let onreadable\n let onclose\n let d\n function onfinished(err) {\n const cb = onclose\n onclose = null\n if (cb) {\n cb(err)\n } else if (err) {\n d.destroy(err)\n } else if (!readable && !writable) {\n d.destroy()\n }\n }\n const head = streams[0]\n const tail = pipeline(streams, onfinished)\n const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head))\n const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail))\n\n // TODO(ronag): Avoid double buffering.\n // Implement Writable/Readable/Duplex traits.\n // See, https://github.com/nodejs/node/pull/33515.\n d = new Duplex({\n // TODO (ronag): highWaterMark?\n writableObjectMode: !!(head !== null && head !== undefined && head.writableObjectMode),\n readableObjectMode: !!(tail !== null && tail !== undefined && tail.readableObjectMode),\n writable,\n readable\n })\n if (writable) {\n if (isNodeStream(head)) {\n d._write = function (chunk, encoding, callback) {\n if (head.write(chunk, encoding)) {\n callback()\n } else {\n ondrain = callback\n }\n }\n d._final = function (callback) {\n head.end()\n onfinish = callback\n }\n head.on('drain', function () {\n if (ondrain) {\n const cb = ondrain\n ondrain = null\n cb()\n }\n })\n } else if (isWebStream(head)) {\n const writable = isTransformStream(head) ? head.writable : head\n const writer = writable.getWriter()\n d._write = async function (chunk, encoding, callback) {\n try {\n await writer.ready\n writer.write(chunk).catch(() => {})\n callback()\n } catch (err) {\n callback(err)\n }\n }\n d._final = async function (callback) {\n try {\n await writer.ready\n writer.close().catch(() => {})\n onfinish = callback\n } catch (err) {\n callback(err)\n }\n }\n }\n const toRead = isTransformStream(tail) ? tail.readable : tail\n eos(toRead, () => {\n if (onfinish) {\n const cb = onfinish\n onfinish = null\n cb()\n }\n })\n }\n if (readable) {\n if (isNodeStream(tail)) {\n tail.on('readable', function () {\n if (onreadable) {\n const cb = onreadable\n onreadable = null\n cb()\n }\n })\n tail.on('end', function () {\n d.push(null)\n })\n d._read = function () {\n while (true) {\n const buf = tail.read()\n if (buf === null) {\n onreadable = d._read\n return\n }\n if (!d.push(buf)) {\n return\n }\n }\n }\n } else if (isWebStream(tail)) {\n const readable = isTransformStream(tail) ? tail.readable : tail\n const reader = readable.getReader()\n d._read = async function () {\n while (true) {\n try {\n const { value, done } = await reader.read()\n if (!d.push(value)) {\n return\n }\n if (done) {\n d.push(null)\n return\n }\n } catch {\n return\n }\n }\n }\n }\n }\n d._destroy = function (err, callback) {\n if (!err && onclose !== null) {\n err = new AbortError()\n }\n onreadable = null\n ondrain = null\n onfinish = null\n if (onclose === null) {\n callback(err)\n } else {\n onclose = callback\n if (isNodeStream(tail)) {\n destroyer(tail, err)\n }\n }\n }\n return d\n}\n", "'use strict'\n\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst {\n codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE },\n AbortError\n} = require('../../ours/errors')\nconst { validateAbortSignal, validateInteger, validateObject } = require('../validators')\nconst kWeakHandler = require('../../ours/primordials').Symbol('kWeak')\nconst kResistStopPropagation = require('../../ours/primordials').Symbol('kResistStopPropagation')\nconst { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst { deprecate } = require('../../ours/util')\nconst {\n ArrayPrototypePush,\n Boolean,\n MathFloor,\n Number,\n NumberIsNaN,\n Promise,\n PromiseReject,\n PromiseResolve,\n PromisePrototypeThen,\n Symbol\n} = require('../../ours/primordials')\nconst kEmpty = Symbol('kEmpty')\nconst kEof = Symbol('kEof')\nfunction compose(stream, options) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n if (isNodeStream(stream) && !isWritable(stream)) {\n throw new ERR_INVALID_ARG_VALUE('stream', stream, 'must be writable')\n }\n const composedStream = staticCompose(this, stream)\n if (options !== null && options !== undefined && options.signal) {\n // Not validating as we already validated before\n addAbortSignalNoValidate(options.signal, composedStream)\n }\n return composedStream\n}\nfunction map(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n let concurrency = 1\n if ((options === null || options === undefined ? undefined : options.concurrency) != null) {\n concurrency = MathFloor(options.concurrency)\n }\n let highWaterMark = concurrency - 1\n if ((options === null || options === undefined ? undefined : options.highWaterMark) != null) {\n highWaterMark = MathFloor(options.highWaterMark)\n }\n validateInteger(concurrency, 'options.concurrency', 1)\n validateInteger(highWaterMark, 'options.highWaterMark', 0)\n highWaterMark += concurrency\n return async function* map() {\n const signal = require('../../ours/util').AbortSignalAny(\n [options === null || options === undefined ? undefined : options.signal].filter(Boolean)\n )\n const stream = this\n const queue = []\n const signalOpt = {\n signal\n }\n let next\n let resume\n let done = false\n let cnt = 0\n function onCatch() {\n done = true\n afterItemProcessed()\n }\n function afterItemProcessed() {\n cnt -= 1\n maybeResume()\n }\n function maybeResume() {\n if (resume && !done && cnt < concurrency && queue.length < highWaterMark) {\n resume()\n resume = null\n }\n }\n async function pump() {\n try {\n for await (let val of stream) {\n if (done) {\n return\n }\n if (signal.aborted) {\n throw new AbortError()\n }\n try {\n val = fn(val, signalOpt)\n if (val === kEmpty) {\n continue\n }\n val = PromiseResolve(val)\n } catch (err) {\n val = PromiseReject(err)\n }\n cnt += 1\n PromisePrototypeThen(val, afterItemProcessed, onCatch)\n queue.push(val)\n if (next) {\n next()\n next = null\n }\n if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {\n await new Promise((resolve) => {\n resume = resolve\n })\n }\n }\n queue.push(kEof)\n } catch (err) {\n const val = PromiseReject(err)\n PromisePrototypeThen(val, afterItemProcessed, onCatch)\n queue.push(val)\n } finally {\n done = true\n if (next) {\n next()\n next = null\n }\n }\n }\n pump()\n try {\n while (true) {\n while (queue.length > 0) {\n const val = await queue[0]\n if (val === kEof) {\n return\n }\n if (signal.aborted) {\n throw new AbortError()\n }\n if (val !== kEmpty) {\n yield val\n }\n queue.shift()\n maybeResume()\n }\n await new Promise((resolve) => {\n next = resolve\n })\n }\n } finally {\n done = true\n if (resume) {\n resume()\n resume = null\n }\n }\n }.call(this)\n}\nfunction asIndexedPairs(options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n return async function* asIndexedPairs() {\n let index = 0\n for await (const val of this) {\n var _options$signal\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal = options.signal) !== null &&\n _options$signal !== undefined &&\n _options$signal.aborted\n ) {\n throw new AbortError({\n cause: options.signal.reason\n })\n }\n yield [index++, val]\n }\n }.call(this)\n}\nasync function some(fn, options = undefined) {\n for await (const unused of filter.call(this, fn, options)) {\n return true\n }\n return false\n}\nasync function every(fn, options = undefined) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n // https://en.wikipedia.org/wiki/De_Morgan%27s_laws\n return !(await some.call(\n this,\n async (...args) => {\n return !(await fn(...args))\n },\n options\n ))\n}\nasync function find(fn, options) {\n for await (const result of filter.call(this, fn, options)) {\n return result\n }\n return undefined\n}\nasync function forEach(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n async function forEachFn(value, options) {\n await fn(value, options)\n return kEmpty\n }\n // eslint-disable-next-line no-unused-vars\n for await (const unused of map.call(this, forEachFn, options));\n}\nfunction filter(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n async function filterFn(value, options) {\n if (await fn(value, options)) {\n return value\n }\n return kEmpty\n }\n return map.call(this, filterFn, options)\n}\n\n// Specific to provide better error to reduce since the argument is only\n// missing if the stream has no items in it - but the code is still appropriate\nclass ReduceAwareErrMissingArgs extends ERR_MISSING_ARGS {\n constructor() {\n super('reduce')\n this.message = 'Reduce of an empty stream requires an initial value'\n }\n}\nasync function reduce(reducer, initialValue, options) {\n var _options$signal2\n if (typeof reducer !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('reducer', ['Function', 'AsyncFunction'], reducer)\n }\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n let hasInitialValue = arguments.length > 1\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal2 = options.signal) !== null &&\n _options$signal2 !== undefined &&\n _options$signal2.aborted\n ) {\n const err = new AbortError(undefined, {\n cause: options.signal.reason\n })\n this.once('error', () => {}) // The error is already propagated\n await finished(this.destroy(err))\n throw err\n }\n const ac = new AbortController()\n const signal = ac.signal\n if (options !== null && options !== undefined && options.signal) {\n const opts = {\n once: true,\n [kWeakHandler]: this,\n [kResistStopPropagation]: true\n }\n options.signal.addEventListener('abort', () => ac.abort(), opts)\n }\n let gotAnyItemFromStream = false\n try {\n for await (const value of this) {\n var _options$signal3\n gotAnyItemFromStream = true\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal3 = options.signal) !== null &&\n _options$signal3 !== undefined &&\n _options$signal3.aborted\n ) {\n throw new AbortError()\n }\n if (!hasInitialValue) {\n initialValue = value\n hasInitialValue = true\n } else {\n initialValue = await reducer(initialValue, value, {\n signal\n })\n }\n }\n if (!gotAnyItemFromStream && !hasInitialValue) {\n throw new ReduceAwareErrMissingArgs()\n }\n } finally {\n ac.abort()\n }\n return initialValue\n}\nasync function toArray(options) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n const result = []\n for await (const val of this) {\n var _options$signal4\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal4 = options.signal) !== null &&\n _options$signal4 !== undefined &&\n _options$signal4.aborted\n ) {\n throw new AbortError(undefined, {\n cause: options.signal.reason\n })\n }\n ArrayPrototypePush(result, val)\n }\n return result\n}\nfunction flatMap(fn, options) {\n const values = map.call(this, fn, options)\n return async function* flatMap() {\n for await (const val of values) {\n yield* val\n }\n }.call(this)\n}\nfunction toIntegerOrInfinity(number) {\n // We coerce here to align with the spec\n // https://github.com/tc39/proposal-iterator-helpers/issues/169\n number = Number(number)\n if (NumberIsNaN(number)) {\n return 0\n }\n if (number < 0) {\n throw new ERR_OUT_OF_RANGE('number', '>= 0', number)\n }\n return number\n}\nfunction drop(number, options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n number = toIntegerOrInfinity(number)\n return async function* drop() {\n var _options$signal5\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal5 = options.signal) !== null &&\n _options$signal5 !== undefined &&\n _options$signal5.aborted\n ) {\n throw new AbortError()\n }\n for await (const val of this) {\n var _options$signal6\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal6 = options.signal) !== null &&\n _options$signal6 !== undefined &&\n _options$signal6.aborted\n ) {\n throw new AbortError()\n }\n if (number-- <= 0) {\n yield val\n }\n }\n }.call(this)\n}\nfunction take(number, options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n number = toIntegerOrInfinity(number)\n return async function* take() {\n var _options$signal7\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal7 = options.signal) !== null &&\n _options$signal7 !== undefined &&\n _options$signal7.aborted\n ) {\n throw new AbortError()\n }\n for await (const val of this) {\n var _options$signal8\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal8 = options.signal) !== null &&\n _options$signal8 !== undefined &&\n _options$signal8.aborted\n ) {\n throw new AbortError()\n }\n if (number-- > 0) {\n yield val\n }\n\n // Don't get another item from iterator in case we reached the end\n if (number <= 0) {\n return\n }\n }\n }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n asIndexedPairs: deprecate(asIndexedPairs, 'readable.asIndexedPairs will be removed in a future version.'),\n drop,\n filter,\n flatMap,\n map,\n take,\n compose\n}\nmodule.exports.promiseReturningOperators = {\n every,\n forEach,\n reduce,\n toArray,\n some,\n find\n}\n", "'use strict'\n\nconst { ArrayPrototypePop, Promise } = require('../ours/primordials')\nconst { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')\nconst { pipelineImpl: pl } = require('../internal/streams/pipeline')\nconst { finished } = require('../internal/streams/end-of-stream')\nrequire('../../lib/stream.js')\nfunction pipeline(...streams) {\n return new Promise((resolve, reject) => {\n let signal\n let end\n const lastArg = streams[streams.length - 1]\n if (\n lastArg &&\n typeof lastArg === 'object' &&\n !isNodeStream(lastArg) &&\n !isIterable(lastArg) &&\n !isWebStream(lastArg)\n ) {\n const options = ArrayPrototypePop(streams)\n signal = options.signal\n end = options.end\n }\n pl(\n streams,\n (err, value) => {\n if (err) {\n reject(err)\n } else {\n resolve(value)\n }\n },\n {\n signal,\n end\n }\n )\n })\n}\nmodule.exports = {\n finished,\n pipeline\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict'\n\n/* replacement start */\n\nconst { Buffer } = require('buffer')\n\n/* replacement end */\n\nconst { ObjectDefineProperty, ObjectKeys, ReflectApply } = require('./ours/primordials')\nconst {\n promisify: { custom: customPromisify }\n} = require('./ours/util')\nconst { streamReturningOperators, promiseReturningOperators } = require('./internal/streams/operators')\nconst {\n codes: { ERR_ILLEGAL_CONSTRUCTOR }\n} = require('./ours/errors')\nconst compose = require('./internal/streams/compose')\nconst { setDefaultHighWaterMark, getDefaultHighWaterMark } = require('./internal/streams/state')\nconst { pipeline } = require('./internal/streams/pipeline')\nconst { destroyer } = require('./internal/streams/destroy')\nconst eos = require('./internal/streams/end-of-stream')\nconst internalBuffer = {}\nconst promises = require('./stream/promises')\nconst utils = require('./internal/streams/utils')\nconst Stream = (module.exports = require('./internal/streams/legacy').Stream)\nStream.isDestroyed = utils.isDestroyed\nStream.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\nStream.isWritable = utils.isWritable\nStream.Readable = require('./internal/streams/readable')\nfor (const key of ObjectKeys(streamReturningOperators)) {\n const op = streamReturningOperators[key]\n function fn(...args) {\n if (new.target) {\n throw ERR_ILLEGAL_CONSTRUCTOR()\n }\n return Stream.Readable.from(ReflectApply(op, this, args))\n }\n ObjectDefineProperty(fn, 'name', {\n __proto__: null,\n value: op.name\n })\n ObjectDefineProperty(fn, 'length', {\n __proto__: null,\n value: op.length\n })\n ObjectDefineProperty(Stream.Readable.prototype, key, {\n __proto__: null,\n value: fn,\n enumerable: false,\n configurable: true,\n writable: true\n })\n}\nfor (const key of ObjectKeys(promiseReturningOperators)) {\n const op = promiseReturningOperators[key]\n function fn(...args) {\n if (new.target) {\n throw ERR_ILLEGAL_CONSTRUCTOR()\n }\n return ReflectApply(op, this, args)\n }\n ObjectDefineProperty(fn, 'name', {\n __proto__: null,\n value: op.name\n })\n ObjectDefineProperty(fn, 'length', {\n __proto__: null,\n value: op.length\n })\n ObjectDefineProperty(Stream.Readable.prototype, key, {\n __proto__: null,\n value: fn,\n enumerable: false,\n configurable: true,\n writable: true\n })\n}\nStream.Writable = require('./internal/streams/writable')\nStream.Duplex = require('./internal/streams/duplex')\nStream.Transform = require('./internal/streams/transform')\nStream.PassThrough = require('./internal/streams/passthrough')\nStream.pipeline = pipeline\nconst { addAbortSignal } = require('./internal/streams/add-abort-signal')\nStream.addAbortSignal = addAbortSignal\nStream.finished = eos\nStream.destroy = destroyer\nStream.compose = compose\nStream.setDefaultHighWaterMark = setDefaultHighWaterMark\nStream.getDefaultHighWaterMark = getDefaultHighWaterMark\nObjectDefineProperty(Stream, 'promises', {\n __proto__: null,\n configurable: true,\n enumerable: true,\n get() {\n return promises\n }\n})\nObjectDefineProperty(pipeline, customPromisify, {\n __proto__: null,\n enumerable: true,\n get() {\n return promises.pipeline\n }\n})\nObjectDefineProperty(eos, customPromisify, {\n __proto__: null,\n enumerable: true,\n get() {\n return promises.finished\n }\n})\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream\nStream._isUint8Array = function isUint8Array(value) {\n return value instanceof Uint8Array\n}\nStream._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n}\n", "'use strict'\n\nconst CustomStream = require('../stream')\nconst promises = require('../stream/promises')\nconst originalDestroy = CustomStream.Readable.destroy\nmodule.exports = CustomStream.Readable\n\n// Explicit export naming is needed for ESM\nmodule.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer\nmodule.exports._isUint8Array = CustomStream._isUint8Array\nmodule.exports.isDisturbed = CustomStream.isDisturbed\nmodule.exports.isErrored = CustomStream.isErrored\nmodule.exports.isReadable = CustomStream.isReadable\nmodule.exports.Readable = CustomStream.Readable\nmodule.exports.Writable = CustomStream.Writable\nmodule.exports.Duplex = CustomStream.Duplex\nmodule.exports.Transform = CustomStream.Transform\nmodule.exports.PassThrough = CustomStream.PassThrough\nmodule.exports.addAbortSignal = CustomStream.addAbortSignal\nmodule.exports.finished = CustomStream.finished\nmodule.exports.destroy = CustomStream.destroy\nmodule.exports.destroy = originalDestroy\nmodule.exports.pipeline = CustomStream.pipeline\nmodule.exports.compose = CustomStream.compose\nObject.defineProperty(CustomStream, 'promises', {\n configurable: true,\n enumerable: true,\n get() {\n return promises\n }\n})\nmodule.exports.Stream = CustomStream.Stream\n\n// Allow default importing\nmodule.exports.default = module.exports\n", "export default class Path {\n #value;\n\n constructor(path) {\n this.#value = Path.collapse(path);\n }\n\n get value() {\n return this.#value;\n }\n\n toString() {\n return this.#value;\n }\n\n get length() {\n return this.#value.length;\n }\n\n static collapse(path, cwd='') {\n if (path instanceof Path) {\n return path.value;\n }\n if (typeof path !== 'string' ) {\n throw new TypeError('path argument must be a string or an instance of Path');\n }\n if (cwd && !(cwd instanceof Path)) {\n cwd = new Path(cwd);\n }\n path = path.trim();\n if (path.length===0) {\n return cwd.value;\n }\n if (Path.isRelative(path)) {\n path = cwd+path;\n }\n let pathnames = Path.reduce(path, (result, entry) => {\n if (entry == '..' ) {\n result.pop();\n } else if (entry !== '.') {\n result.push(entry);\n }\n return result;\n }, []);\n let result = '/';\n if (pathnames.length) {\n result += pathnames.join('/');\n if (Path.isFolder(path)) {\n result += '/';\n }\n }\n return ''+result;\n }\n\n static isAbsolute(path) {\n if (path instanceof Path) {\n return true;\n }\n return path.length && path[0]==='/';\n }\n\n static isRelative(path) {\n return !Path.isAbsolute(path); \n }\n\n static isFolder(path) {\n if (path instanceof Path) {\n path = path.value;\n }\n return path.length && path[path.length-1] == '/';\n }\n\n static isPath(path) {\n if (path instanceof Path) {\n return true;\n }\n if (typeof path !== 'string') {\n return false;\n }\n path = path.trim();\n let u = new URL(path, document.location);\n return u.pathname == path;\n }\n\n static reduce(path, reducer, initial) {\n if (path instanceof Path) {\n path = path.value;\n }\n return path.split('/').filter(Boolean).reduce(reducer, initial);\n }\n\n static map(path, callback) {\n if (path instanceof Path) {\n path = path.value;\n }\n return path.split('/').filter(Boolean).map(callback);\n }\n\n static parent(path) {\n if (path instanceof Path) {\n path = path.value;\n }\n path = path.split('/').filter(Boolean);\n path.pop();\n let result = '/';\n if (path.length) {\n result += path.join('/')+'/';\n }\n return result;\n }\n\n static filename(path) {\n if (path instanceof Path) {\n path = path.value;\n }\n return path.split('/').filter(Boolean).pop();\n }\n \n static head(path) {\n if (path instanceof Path) {\n path = path.value;\n }\n return path.split('/').filter(Boolean).shift();\n }\n \n static tail(path) {\n if (path instanceof Path) {\n path = path.value;\n }\n path = path.split('/').filter(Boolean)\n path.shift();\n let result = '/';\n if (path.length) {\n result += path.join('/')+'/';\n }\n return result;\n }\n\n}", "import Path from './Path.mjs';\n\nexport default class FileSystem {\n\t\n\t#adapter;\n\t#path = '/';\n\n\tconstructor(adapter) {\n\t\tthis.#adapter = adapter\n\t\tthis.#path = this.#adapter.path;\n\t}\n\n\tget path() {\n\t\treturn this.#path;\n\t}\n\n\tcd(path) {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\treturn new FileSystem(this.#adapter.cd(path));\n\t}\n\n\tasync read(path, reader = null) {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\tif (typeof reader === 'function') {\n\t\t\tif (!this.#adapter.supportsStreamingRead()) {\n\t\t\t\tthrow new Error('Adapter '+this.#adapter.name+' does not support streaming reading.');\n\t\t\t}\n\t\t\treturn this.#adapter.readStream(path, reader);\n\t\t} else {\n\t\t\treturn this.#adapter.read(path);\n\t\t}\n\t}\n\n\tasync write(path, contents, metadata = null) {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\tif (!this.#adapter.supportsWrite()) {\n\t\t\tthrow new Error('Adapter '+this.#adapter.name+' is read only.');\n\t\t}\n\t\tif (typeof contents === 'function') {\n\t\t\tif (!this.#adapter.supportsStreamingWrite()) {\n\t\t\t\tthrow new Error('Adapter '+this.#adapter.name+' does not support streaming writing.');\n\t\t\t}\n\t\t\treturn this.#adapter.writeStream(path, contents, metadata);\n\t\t} else if (typeof contents === 'string') {\n\t\t\treturn this.#adapter.write(path, contents, metadata);\n\t\t} else {\n\t\t\tthrow new TypeError('Cannot write contents of type '+(typeof contents));\n\t\t}\n\t}\n\n\tasync delete(path) {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\treturn this.#adapter.delete(path);\n\t}\n\n\tasync exists(path) {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\treturn this.#adapter.exists(path);\n\t}\n\n\tasync list(path='') {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\treturn this.#adapter.list(path);\n\t}\n}\n\n", "/**\n * base URL used to link to more information about an error message\n */\nconst metroURL = 'https://metro.muze.nl/details/'\n\n/**\n * Symbols:\n * - isProxy: used to test if an object is a metro Proxy to another object\n * - source: used to return the actual source (target) of a metro Proxy\n */\nif (!Symbol.metroProxy) {\n\tSymbol.metroProxy = Symbol('isProxy')\n}\nif (!Symbol.metroSource) {\n\tSymbol.metroSource = Symbol('source')\n}\n\n/**\n * Metro HTTP Client with middleware support\n * @method get\n * @method post\n * @method put\n * @method delete\n * @method patch\n * @method head\n * @method options\n * @method query\n * @method fetch\n */\nexport class Client\n{\n\tclientOptions = {\n\t\turl: typeof window != 'undefined' ? url(window.location) : url('https://localhost'),\n\t\tverbs: ['get','post','put','delete','patch','head','options','query']\n\t}\n\n\tstatic tracers = {}\n\n\t/**\n\t * @typedef {Object} ClientOptions\n\t * @property {Array} middlewares - list of middleware functions\n\t * @property {string|URL} url - default url of the client\n\t * @property {[string]} verbs - a list of verb methods to expose, e.g. ['get','post']\n\t * \n\t * Constructs a new metro client. Can have any number of params.\n\t * @params {ClientOptions|URL|Function|Client}\n\t * @returns {Client} - A metro client object with given or default verb methods\n\t */\n\tconstructor(...options)\n\t{\n\t\tfor (let option of options) {\n\t\t\tif (typeof option == 'string' || option instanceof String) {\n\t\t\t\tthis.clientOptions.url = url(this.clientOptions.url.href, option)\n\t\t\t} else if (option instanceof Client) {\n\t\t\t\tObject.assign(this.clientOptions, option.clientOptions)\n\t\t\t} else if (option instanceof Function) {\n\t\t\t\tthis.#addMiddlewares([option])\n\t\t\t} else if (option && typeof option == 'object') {\n\t\t\t\tfor (let param in option) {\n\t\t\t\t\tif (param == 'middlewares') {\n\t\t\t\t\t\tthis.#addMiddlewares(option[param])\n\t\t\t\t\t} else if (param == 'url') {\n\t\t\t\t\t\tthis.clientOptions.url = url(this.clientOptions.url.href, option[param])\n\t\t\t\t\t} else if (typeof option[param] == 'function') {\n\t\t\t\t\t\tthis.clientOptions[param] = option[param](this.clientOptions[param], this.clientOptions)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.clientOptions[param] = option[param]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const verb of this.clientOptions.verbs) {\n\t\t\tthis[verb] = async function(...options) {\n\t\t\t\treturn this.fetch(request(\n\t\t\t\t\tthis.clientOptions,\n\t\t\t\t\t...options,\n\t\t\t\t\t{method: verb.toUpperCase()}\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\t\t//NOTE: intentionally not Object.freeze()-ing this, so that metro.api can extend this class\n\t}\n\n\t#addMiddlewares(middlewares)\n\t{\n\t\tif (typeof middlewares == 'function') {\n\t\t\tmiddlewares = [ middlewares ]\n\t\t}\n\t\tlet index = middlewares.findIndex(m => typeof m != 'function')\n\t\tif (index>=0) {\n\t\t\tthrow metroError('metro.client: middlewares must be a function or an array of functions '\n\t\t\t\t+metroURL+'client/invalid-middlewares/', middlewares[index])\n\t\t}\n\t\tif (!Array.isArray(this.clientOptions.middlewares)) {\n\t\t\tthis.clientOptions.middlewares = []\n\t\t}\n\t\tthis.clientOptions.middlewares = this.clientOptions.middlewares.concat(middlewares)\n\t}\n\n\t/**\n\t * Mimics the standard browser fetch method, but uses any middleware installed through\n\t * the constructor.\n\t * @param {Request|string|Object} - Required. The URL or Request object, accepts all types that are accepted by metro.request\n\t * @param {Object} - Optional. Any object that is accepted by metro.request\n\t * @return {Promise<Response|*>} - The metro.response to this request, or any other result as changed by any included middleware.\n\t */\n\tfetch(req, options)\n\t{\n\t\treq = request(req, options)\n\t\tif (!req.url) {\n\t\t\tthrow metroError('metro.client.'+req.method.toLowerCase()+': Missing url parameter '+metroURL+'client/fetch-missing-url/', req)\n\t\t}\n\t\tif (!options) {\n\t\t\toptions = {}\n\t\t}\n\t\tif (!(typeof options === 'object') \n\t\t\t|| options instanceof String) \n\t\t{\n\t\t\tthrow metroError('metro.client.fetch: Invalid options parameter '+metroURL+'client/fetch-invalid-options/', options)\n\t\t}\n\n\t\tconst metrofetch = async function browserFetch(req)\n\t\t{\n\t\t\tif (req[Symbol.metroProxy]) {\n\t\t\t\treq = req[Symbol.metroSource]\n\t\t\t}\n\t\t\tconst res = await fetch(req)\n\t\t\treturn response(res)\n\t\t}\n\t\t\n\t\tlet middlewares = [metrofetch].concat(this.clientOptions?.middlewares?.slice() || [])\n\t\toptions = Object.assign({}, this.clientOptions, options)\n\t\t//@TODO: do this once in constructor?\n\t\tlet next\n\t\tfor (let middleware of middlewares) {\n\t\t\tnext = (function(next, middleware) {\n\t\t\t\treturn async function(req) {\n\t\t\t\t\tlet res\n\t\t\t\t\tlet tracers = Object.values(Client.tracers)\n\t\t\t\t\tfor(let tracer of tracers) {\n\t\t\t\t\t\tif (tracer.request) {\n\t\t\t\t\t\t\ttracer.request.call(tracer, req, middleware)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tres = await middleware(req, next)\n\t\t\t\t\tfor(let tracer of tracers) {\n\t\t\t\t\t\tif (tracer.response) {\n\t\t\t\t\t\t\ttracer.response.call(tracer, res, middleware)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn res\n\t\t\t\t}\t\t\t\t\t\t\t\t\n\t\t\t})(next, middleware)\n\t\t}\n\t\treturn next(req)\n\t}\n\n\twith(...options) {\n\t\treturn new Client(deepClone(this.clientOptions), ...options)\n\t}\n\n\tget location() {\n\t\treturn this.clientOptions.url\n\t}\n\n}\n\n/**\n * Returns a new metro Client object.\n * @param {...ClientOptions|string|URL}\n * @return Client\n */\nexport function client(...options)\n{\n\treturn new Client(...deepClone(options))\n}\n\n/*\n//FIXME: is this needed?\nfunction appendHeaders(r, headers)\n{\n\tif (!Array.isArray(headers)) {\n\t\theaders = [headers]\n\t}\n\theaders.forEach((header) => {\n\t\tif (typeof header == 'function') {\n\t\t\tlet result = header(r.headers, r)\n\t\t\tif (result) {\n\t\t\t\tif (!Array.isArray(result)) {\n\t\t\t\t\tresult = [result]\n\t\t\t\t}\n\t\t\t\theaders = headers.concat(result)\n\t\t\t}\n\t\t}\n\t})\n\theaders.forEach((header) => {\n\t\tObject.entries(header).forEach(([name,value]) => {\t\t\t\n\t\t\tr.headers.append(name, value)\n\t\t})\n\t})\n}\n*/\n\nfunction getRequestParams(req, current)\n{\n\tlet params = current || {}\n\tif (!params.url && current.url) {\n\t\tparams.url = current.url\n\t}\n\t// function to fetch all relevant properties of a Request\n\tfor(let prop of ['method','headers','body','mode','credentials','cache','redirect',\n\t\t'referrer','referrerPolicy','integrity','keepalive','signal',\n\t\t'priority','url']) {\n\t\tlet value = req[prop]\n\t\tif (typeof value=='undefined' || value == null) {\n\t\t\tcontinue\n\t\t}\n\t\tif (value?.[Symbol.metroProxy]) {\n\t\t\tvalue = value[Symbol.metroSource]\n\t\t}\n\t\tif (typeof value == 'function') {\n\t\t\tparams[prop] = value(params[prop], params)\n\t\t} else {\n\t\t\tif (prop == 'url') {\n\t\t\t\tparams.url = url(params.url, value)\n\t\t\t} else if (prop == 'headers') {\n\t\t\t\t//FIXME: test and see if appendHeaders is needed\n\t\t\t\tparams.headers = new Headers(current.headers)\n\t\t\t\tif (!(value instanceof Headers)) {\n\t\t\t\t\tvalue = new Headers(req.headers)\n\t\t\t\t}\n\t\t\t\tfor (let [key, val] of value.entries()) {\n\t\t\t\t\tparams.headers.set(key, val)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tparams[prop] = value\n\t\t\t}\n\t\t}\n\t}\n\tif (req instanceof Request && req.data) {\n\t\t// Request.body is always transformed into ReadableStreem\n\t\t// metro.request.data is the original body passed to Request()\n\t\tparams.body = req.data\n\t}\n\treturn params\n}\n\n/**\n * @typedef {Request} MetroRequest\n * @property {Symbol(source)} - returns the target Request of this Proxy\n * @property {Symbol(isProxy)} - returns true\n * @method with - returns a new MetroRequest, with the given options added\n * @param {<RequestOptions|Request|string|URL|URLSearchParams|FormData|ReadableStream|\n * Blob|ArrayBuffer|DataView|TypedArray>} ...options - request options, handled in order\n * \n * Returns a new metro Request object\n * @param {<RequestOptions|Request|string|URL|URLSearchParams|FormData|ReadableStream|\n * Blob|ArrayBuffer|DataView|TypedArray>} ...options - request options, handled in order\n * @return {MetroRequest} - a new metro Request object\n */\nexport function request(...options)\n{\n\t// the standard Request constructor is a minefield\n\t// so first gather all the options together into a single\n\t// javascript object, then set it in one go\n\tlet requestParams = {\n\t\turl: typeof window != 'undefined' ? url(window.location) : url('https://localhost/'),\n\t\tduplex: 'half' // required when setting body to ReadableStream, just set it here by default already\n\t}\n\tfor (let option of options) {\n\t\tif (typeof option == 'string'\n\t\t\t|| option instanceof URL\n\t\t\t|| option instanceof URLSearchParams\n\t\t) {\n\t\t\trequestParams.url = url(requestParams.url, option)\n\t\t} else if (option && (\n\t\t\toption instanceof FormData\n\t\t\t|| option instanceof ReadableStream\n\t\t\t|| option instanceof Blob\n\t\t\t|| option instanceof ArrayBuffer\n\t\t\t|| option instanceof DataView\n\t\t)) {\n\t\t\trequestParams.body = option\n\t\t} else if (option && typeof option == 'object') {\n\t\t\tObject.assign(requestParams, getRequestParams(option, requestParams))\n\t\t}\n\t}\n\tlet r = new Request(requestParams.url, requestParams)\n\tlet data = requestParams.body\n\tif (data) {\n\t\tif (typeof data == 'object'\n\t\t\t&& !(data instanceof String)\n\t\t\t&& !(data instanceof ReadableStream)\n\t\t\t&& !(data instanceof Blob)\n\t\t\t&& !(data instanceof ArrayBuffer)\n\t\t\t&& !(data instanceof DataView)\n\t\t\t&& !(data instanceof FormData)\n\t\t\t&& !(data instanceof URLSearchParams)\n\t\t\t&& (typeof globalThis.TypedArray=='undefined' || !(data instanceof globalThis.TypedArray))\n\t\t) {\n\t\t\t// if we are here, body is set with an object of a type\n\t\t\t// not natively understood by Request, coerce it to a string\n\t\t\t// using toString({headers}) instead of just toString()\n\t\t\tif (typeof data.toString == 'function') {\n\t\t\t\trequestParams.body = data.toString({headers:r.headers})\n\t\t\t\tr = new Request(requestParams.url, requestParams)\n\t\t\t}\n\t\t}\n\t}\n\tObject.freeze(r)\n\treturn new Proxy(r, {\n\t\tget(target, prop) {\n\t\t\tlet result\n\t\t\tswitch(prop) {\n\t\t\t\tcase Symbol.metroSource:\n\t\t\t\t\tresult = target\n\t\t\t\tbreak\n\t\t\t\tcase Symbol.metroProxy:\n\t\t\t\t\tresult = true\n\t\t\t\tbreak\n\t\t\t\tcase 'with':\n\t\t\t\t\tresult = function(...options) {\n\t\t\t\t\t\tif (data) { // data is kept in a seperate value, if it set earlier\n\t\t\t\t\t\t\toptions.unshift({ body: data }) // unshifted so it can be overridden by options\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn request(target, ...options)\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t\tcase 'data':\n\t\t\t\t\tresult = data\n\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tif (target[prop] instanceof Function) {\n\t\t\t\t\t\tif (prop === 'clone') {\n\t\t\t\t\t\t\t// TODO: set req.data as the body of the clone\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = target[prop].bind(target)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = target[prop]\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t})\n}\n\nfunction getResponseParams(res, current)\n{\n\t// function to fetch all relevant properties of a Response\n\tlet params = current || {}\n\tif (!params.url && current.url) {\n\t\tparams.url = current.url\n\t}\n\tfor(let prop of ['status','statusText','headers','body','url','type','redirected']) {\n\t\tlet value = res[prop]\n\t\tif (typeof value == 'undefined' || value == null) {\n\t\t\tcontinue\n\t\t}\n\t\tif (value?.[Symbol.metroProxy]) {\n\t\t\tvalue = value[Symbol.metroSource]\n\t\t}\n\t\tif (typeof value == 'function') {\n\t\t\tparams[prop] = value(params[prop], params)\n\t\t} else {\n\t\t\tif (prop == 'url') {\n\t\t\t\t//TODO: check if this should use metro.url\n\t\t\t\tparams.url = new URL(value, params.url || 'https://localhost/')\n\t\t\t} else {\n\t\t\t\tparams[prop] = value\n\t\t\t}\n\t\t}\n\t}\n\tif (res instanceof Response && res.data) {\n\t\t// Response.body is always transformed into ReadableStreem FIXME: check this\n\t\t// metro.response.data is the original body passed to Response()\n\t\tparams.body = res.data\n\t}\n\treturn params\n}\n\n/**\n * @typedef {Response} MetroResponse\n * @property {Symbol(source)} - returns the target Response of this Proxy\n * @property {Symbol(isProxy)} - returns true\n * @method with - returns a new MetroResponse, with the given options added\n * @param {<ResponseOptions|Response|string|URLSearchParams|FormData|ReadableStream|\n * Blob|ArrayBuffer|DataView|TypedArray>} ...options - respomse options, handled in order\n * \n * Returns a new metro Response object\n * @param {<ResponseOptions|Response|string|URLSearchParams|FormData|ReadableStream|\n * Blob|ArrayBuffer|DataView|TypedArray>} ...options - request options, handled in order\n * @return {MetroResponse} - a new metro Response object\n */\nexport function response(...options)\n{\n\tlet responseParams = {}\n\tfor (let option of options) {\n\t\tif (typeof option == 'string') {\n\t\t\tresponseParams.body = option\n\t\t} else if (option instanceof Response) {\n\t\t\tObject.assign(responseParams, getResponseParams(option, responseParams))\n\t\t} else if (option && typeof option == 'object') {\n\t\t\tif (option instanceof FormData\n\t\t\t\t|| option instanceof Blob\n\t\t\t\t|| option instanceof ArrayBuffer\n\t\t\t\t|| option instanceof DataView\n\t\t\t\t|| option instanceof ReadableStream\n\t\t\t\t|| option instanceof URLSearchParams\n\t\t\t\t|| option instanceof String\n\t\t\t\t|| (typeof globalThis.TypedArray != 'undefined' && option instanceof globalThis.TypedArray)\n\t\t\t) {\n\t\t\t\tresponseParams.body = option\n\t\t\t} else {\n\t\t\t\tObject.assign(responseParams, getResponseParams(option, responseParams))\n\t\t\t}\n\t\t}\n\t}\n\tlet data = undefined\n\tif (responseParams.body) {\n\t\tdata = responseParams.body\n\t}\n\t// if response status is 'null body status', don't set a body\n\t// that is response.status in [101, 204, 205, 304 ] \n\t// see: https://fetch.spec.whatwg.org/#statuses\n\tif ([101, 204, 205, 304 ].includes(responseParams.status)) {\n\t\tresponseParams.body = null\n\t}\n\tlet r = new Response(responseParams.body, responseParams)\t\n\tObject.freeze(r)\n\treturn new Proxy(r, {\n\t\tget(target, prop) {\n\t\t\tlet result\n\t\t\tswitch(prop) {\n\t\t\t\tcase Symbol.metroProxy:\n\t\t\t\t\tresult = true\n\t\t\t\tbreak\n\t\t\t\tcase Symbol.metroSource:\n\t\t\t\t\tresult = target\n\t\t\t\tbreak\n\t\t\t\tcase 'with':\n\t\t\t\t\tresult = function(...options) {\n\t\t\t\t\t\treturn response(target, ...options)\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t\tcase 'data':\n\t\t\t\t\t// body is turned into ReadableStream\n\t\t\t\t\t// data is the original body param\n\t\t\t\t\tresult = data\n\t\t\t\tbreak\n\t\t\t\tcase 'ok':\n\t\t\t\t\tresult = (target.status>=200) && (target.status<400)\n\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tif (typeof target[prop] == 'function') {\n\t\t\t\t\t\tresult = target[prop].bind(target)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = target[prop]\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t})\n}\n\nfunction appendSearchParams(url, params)\n{\n\tif (typeof params == 'function') {\n\t\tparams(url.searchParams, url)\n\t} else {\n\t\tparams = new URLSearchParams(params)\n\t\tparams.forEach((value,key) => {\n\t\t\turl.searchParams.append(key, value)\n\t\t})\n\t}\n}\n\n/**\n * @typedef {URL} MetroURL\n * @property {Symbol(source)} - returns the target Request of this Proxy\n * @property {Symbol(isProxy)} - returns true\n * @method with - returns a new MetroRequest, with the given options added\n * @param {<URL|URLSearchParams|string|Object|Function>} ...options - url options, handled in order\n * \n * Returns a new metro URL object\n * @param {<URL|URLSearchParams|string|Object|Function>} ...options - url options, handled in order\n * @return {MetroURL} - a new metro URL object\n */\nexport function url(...options)\n{\n\tlet validParams = ['hash','host','hostname','href',\n\t\t'password','pathname','port','protocol','username','search','searchParams']\n\tlet u = new URL('https://localhost/')\n\tfor (let option of options) {\n\t\tif (typeof option == 'string' || option instanceof String) {\n\t\t\t// option is a relative or absolute url\n\t\t\tu = new URL(option, u)\n\t\t} else if (option instanceof URL \n\t\t\t|| (typeof Location != 'undefined' \n\t\t\t\t&& option instanceof Location)\n\t\t) {\n\t\t\tu = new URL(option)\n\t\t} else if (option instanceof URLSearchParams) {\n\t\t\tappendSearchParams(u, option)\n\t\t} else if (option && typeof option == 'object') {\n\t\t\tfor (let param in option) {\n\t\t\t\tswitch(param) {\n\t\t\t\t\tcase 'search':\n\t\t\t\t\t\tif (typeof option.search == 'function') {\n\t\t\t\t\t\t\toption.search(u.search, u)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tu.search = new URLSearchParams(option.search)\n\t\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t\tcase 'searchParams':\n\t\t\t\t\t\tappendSearchParams(u, option.searchParams)\n\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (!validParams.includes(param)) {\n\t\t\t\t\t\t\tthrow metroError('metro.url: unknown url parameter '+metroURL+'url/unknown-param-name/', param)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof option[param] == 'function') {\n\t\t\t\t\t\t\toption[param](u[param], u)\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof option[param] == 'string' || option[param] instanceof String \n\t\t\t\t\t\t\t|| typeof option[param] == 'number' || option[param] instanceof Number\n\t\t\t\t\t\t\t|| typeof option[param] == 'boolean' || option[param] instanceof Boolean\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tu[param] = ''+option[param]\n\t\t\t\t\t\t} else if (typeof option[param] == 'object' && option[param].toString) {\n\t\t\t\t\t\t\tu[param] = option[param].toString()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow metroError('metro.url: unsupported value for '+param+' '+metroURL+'url/unsupported-param-value/', options[param])\n\t\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow metroError('metro.url: unsupported option value '+metroURL+'url/unsupported-option-value/', option)\n\t\t}\n\t}\n\tObject.freeze(u)\n\treturn new Proxy(u, {\n\t\tget(target, prop) {\n\t\t\tlet result\n\t\t\tswitch(prop) {\n\t\t\t\tcase Symbol.metroProxy:\n\t\t\t\t\tresult = true\n\t\t\t\tbreak\n\t\t\t\tcase Symbol.metroSource:\n\t\t\t\t\tresult = target\n\t\t\t\tbreak\n\t\t\t\tcase 'with':\n\t\t\t\t\tresult = function(...options) {\n\t\t\t\t\t\treturn url(target, ...options)\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t\tcase 'filename':\n\t\t\t\t\tresult = target.pathname.split('/').pop()\n\t\t\t\tbreak\n\t\t\t\tcase 'folderpath':\n\t\t\t\t\tresult = target.pathname.substring(0,target.pathname.lastIndexOf('\\\\')+1)\n\t\t\t\tbreak\n\t\t\t\tcase 'authority':\n\t\t\t\t\tresult = target.username ?? ''\n\t\t\t\t\tresult += target.password ? ':'+target.password : ''\n\t\t\t\t\tresult += result ? '@' : ''\n\t\t\t\t\tresult += target.hostname\n\t\t\t\t\tresult += target.port ? ':'+target.port : ''\n\t\t\t\t\tresult += '/'\n\t\t\t\t\tresult = target.protocol + '//' + result\n\t\t\t\tbreak\n\t\t\t\tcase 'origin':\n\t\t\t\t\tresult = target.protocol + '//' + target.hostname\n\t\t\t\t\tresult += target.port ? ':' + target.port : ''\n\t\t\t\t\tresult += '/'\n\t\t\t\tbreak\n\t\t\t\tcase 'fragment':\n\t\t\t\t\tresult = target.hash.substring(1)\n\t\t\t\tbreak\n\t\t\t\tcase 'scheme':\n\t\t\t\t\tif (target.protocol) {\n\t\t\t\t\t\tresult = target.protocol.substring(0, target.protocol.length-1)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = ''\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tif (target[prop] instanceof Function) {\n\t\t\t\t\t\tresult = target[prop].bind(target)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = target[prop]\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t})\n}\n\n/**\n * @typedef {FormData} MetroFormData\n * @property {Symbol(source)} - returns the target Request of this Proxy\n * @property {Symbol(isProxy)} - returns true\n * @method with - returns a new MetroRequest, with the given options added\n * @param {<FormData|Object>} ...options - url options, handled in order\n * \n * Returns a new metro FormData object\n * @param {<FormData|Object>} ...options - formdata options, handled in order\n * @return {MetroURL} - a new metro FormData object\n */\nexport function formdata(...options)\n{\n\tvar params = new FormData()\n\tfor (let option of options) {\n\t\tif (option instanceof HTMLFormElement) {\n\t\t\toption = new FormData(option)\n\t\t}\n\t\tif (option instanceof FormData) {\n\t\t\tfor (let entry of option.entries()) {\n\t\t\t\tparams.append(entry[0],entry[1])\n\t\t\t}\n\t\t} else if (option && typeof option == 'object') {\n\t\t\tfor (let entry of Object.entries(option)) {\n\t\t\t\tif (Array.isArray(entry[1])) {\n\t\t\t\t\tfor (let value of entry[1]) {\n\t\t\t\t\t\tparams.append(entry[0], value)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tparams.append(entry[0],entry[1])\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new metroError('metro.formdata: unknown option type '+metroURL+'formdata/unknown-option-value/', option)\n\t\t}\n\t}\n\tObject.freeze(params)\n\treturn new Proxy(params, {\n\t\tget(target, prop) {\n\t\t\tlet result\n\t\t\tswitch(prop) {\n\t\t\t\tcase Symbol.metroProxy:\n\t\t\t\t\tresult = true\n\t\t\t\tbreak\n\t\t\t\tcase Symbol.metroSource:\n\t\t\t\t\tresult = target\n\t\t\t\tbreak\n\t\t\t\t//TODO: add toString() that can check\n\t\t\t\t//headers param: toString({headers:request.headers})\n\t\t\t\t//for the content-type\n\t\t\t\tcase 'with':\n\t\t\t\t\tresult = function(...options) {\n\t\t\t\t\t\treturn formdata(target, ...options)\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tif (target[prop] instanceof Function) {\n\t\t\t\t\t\tresult = target[prop].bind(target)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = target[prop]\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t})\n}\n\nconst metroConsole = {\n\terror: (message, ...details) => {\n\t\tconsole.error('\u24C2\uFE0F ',message, ...details)\n\t},\n\tinfo: (message, ...details) => {\n\t\tconsole.info('\u24C2\uFE0F ',message, ...details)\n\t},\n\tgroup: (name) => {\n\t\tconsole.group('\u24C2\uFE0F '+name)\n\t},\n\tgroupEnd: (name) => {\n\t\tconsole.groupEnd('\u24C2\uFE0F '+name)\n\t}\n}\n\n\n/**\n * Custom Metro Error function that outputs to the console then throws an error\n */\nexport function metroError(message, ...details) {\n\tmetroConsole.error(message, ...details)\n\treturn new Error(message, ...details)\n}\n\n/**\n * Set of debugging tools to trace the request - response flow\n * Tracer are run on all metro fetch calls\n */\nexport const trace = {\n\t/**\n\t * Adds a named tracer function\n\t * @param {string} name - the name of the tracer\n\t * @param {Function} tracer - the tracer function to call\n\t */\n\tadd(name, tracer) {\n\t\tClient.tracers[name] = tracer\n\t},\n\t/**\n\t * Removes a named tracer function\n\t * @param {string} name\n\t */\n\tdelete(name) {\n\t\tdelete Client.tracers[name]\n\t},\n\t/**\n\t * Removes all tracer functions\n\t */\n\tclear() {\n\t\tClient.tracers = {}\n\t},\n\t/**\n\t * Returns a set of request and response tracer functions that use the\n\t * console.group feature to shows nested request/response pairs, with\n\t * most commonly needed information for debugging\n\t */\n\tgroup() {\n\t\tlet group = 0;\n\t\treturn {\n\t\t\trequest: (req, middleware) => {\n\t\t\t\tgroup++\n\t\t\t\tmetroConsole.group(group)\n\t\t\t\tmetroConsole.info(req?.url, req, middleware)\n\t\t\t},\n\t\t\tresponse: (res, middleware) => {\n\t\t\t\tmetroConsole.info(res?.body ? res.body[Symbol.metroSource]: null, res, middleware)\n\t\t\t\tmetroConsole.groupEnd(group)\n\t\t\t\tgroup--\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function deepClone(object) {\n\tif (Array.isArray(object)) {\n\t\treturn object.slice().map(deepClone)\n\t}\n\tif (object && typeof object==='object') {\n\t\tif (object.__proto__.constructor==Object || !object.__proto__) { // plain objects\n\t\t\tlet result = Object.assign({}, object)\n\t\t\tObject.keys(result).forEach(key => {\n\t\t\t\tresult[key] = deepClone(object[key])\n\t\t\t})\n\t\t\treturn result\n\t\t} else {\n\t\t\treturn object // don't clone custom classes or functions\n\t\t}\n\t}\n\treturn object\n}", "import Path from '../Path.mjs';\nimport { client, url } from '@muze-nl/metro/src/metro.mjs'\n\nexport default class HttpAdapter {\n \n #client;\n #path;\n\n constructor(metroClient, path='/') {\n this.#client = client(metroClient)\n this.#path = new Path(path);\n }\n\n get name() {\n return 'HttpAdapter';\n }\n\n get path() {\n return this.#path;\n }\n\n supportsWrite() {\n return true;\n }\n\n supportsStreamingWrite() {\n return supportsRequestStreams;\n }\n\n supportsStreamingRead() {\n return true;\n }\n\n cd(path) {\n if (!Path.isPath(path)) {\n throw new TypeError(path+' is not a valid path');\n }\n if (Path.isRelative(path)) {\n path = Path.collapse(path, this.#path)\n }\n return new this.constructor(this.#client, path);\n }\n\n //FIXME: return a jsfs result object instead of http response\n async write(path, contents, metadata=null) {\n return this.#client.put({body: contents})\n }\n\n writeStream(path, writer, metadata=null) {\n throw new Error('Not yet implemented')\n }\n\n async read(path) {\n let response = await this.#client.get(path);\n //TODO: create a special jsfsFile class\n //with a toString that returns the contents\n //or better: mimic the File class of the browser\n let result = {\n type: this.getMimetype(response),\n name: Path.filename(path),\n http: {\n headers: response.headers,\n status: response.status,\n url: response.url\n }\n }\n //TODO: add middleware in metro client for this\n if (result.type.match(/text\\/.*/)) {\n result.contents = await response.text()\n } else if (result.type.match(/application\\/json.*/)) {\n result.contents = await response.json()\n } else {\n result.contents = await response.blob()\n }\n return result\n }\n\n readStream(path, reader) {\n throw new Error('Not yet implemented')\n }\n\n async exists(path) {\n return this.#client.head(path);\n }\n\n async delete(path) {\n return this.#client.delete(path);\n }\n\n async list(path) {\n let supportedContentTypes = [\n 'text/html','text/xhtml','text/xhtml+xml','text/xml'\n ];\n let result = await this.read(path)\n if (supportedContentTypes.includes(result.type.split(';')[0])) {\n var html = result.contents\n } else {\n let url = this.getUrl(path);\n throw new TypeError('URL '+url+' is not of a supported content type', {\n cause: result\n }); \n }\n\n let basePath = url(this.#client.clientOptions.url).pathname;\n let parentUrl = this.getUrl(path);\n // TODO: use DOMParser() directly here\n let dom = document.createElement('template');\n dom.innerHTML = html;\n let links = dom.content.querySelectorAll('a[href]');\n\n return Array.from(links)\n .map(link => {\n // use getAttribute to get the unchanged href value\n // otherwise relative hrefs will be turned into absolute values relative to the current window.location\n // instead of the path used in list()\n let url = new URL(link.getAttribute('href'), parentUrl.href); \n link.href = url.href;\n return {\n filename: Path.filename(link.pathname),\n path: link.pathname,\n name: link.innerText,\n href: link.href\n }\n })\n .filter(link => {\n // show only links that have the current URL as direct parent\n let testURL = new URL(link.href)\n testURL.pathname = Path.parent(testURL.pathname);\n return testURL.href===parentUrl.href;\n })\n .map(link => {\n return {\n filename: link.filename,\n path: link.path.substring(basePath.length-1), //TODO: Path.collapse() now always adds a trailing '/', so this works, but the added trailing / is probably not correct\n name: link.name\n }\n })\n }\n\n getUrl(path) {\n let basePath = url(this.#client.clientOptions.url).pathname;\n path = Path.collapse(basePath + Path.collapse(path));\n return new URL(path, this.#client.clientOptions.url);\n }\n\n getMimetype(response) {\n if (response.headers.has('Content-Type')) {\n return response.headers.get('Content-Type')\n } else {\n return null\n }\n }\n}\n\nconst supportsRequestStreams = (async () => {\n const supportsStreamsInRequestObjects = !new Request(\n '', \n {\n body: new ReadableStream(),\n method: 'POST',\n duplex: 'half' // required in chrome\n }\n )\n .headers.has('Content-Type');\n\n if (!supportsStreamsInRequestObjects) {\n return false;\n }\n\n return fetch(\n 'data:a/a;charset=utf-8,', \n {\n method: 'POST',\n body: new ReadableStream(),\n duplex: 'half'\n }\n )\n .then(() => true, () => false);\n})();", "import JSFS from './FileSystem.mjs'\nimport HttpAdapter from './Adapters/Http.mjs'\nimport Path from './Path.mjs'\n\nconst jsfs = {\n\tfs: JSFS,\n\tadapters: {\n\t\thttps: HttpAdapter\n\t},\n\tpath: Path\n}\nglobalThis.jsfs = jsfs\n\nexport default jsfs", "export default function jsonmw(options)\n{\n options = Object.assign({\n contentType: 'application/json',\n reviver: null,\n replacer: null,\n space: ''\n }, options)\n\n return async function json(req, next) {\n if (!req.headers.get('Accept')) {\n req = req.with({\n headers: {\n 'Accept': options.accept ?? options.contentType\n }\n })\n }\n if (req.method!=='GET' && req.method!=='HEAD') {\n //https://developer.mozilla.org/en-US/docs/Web/API/Request/body\n if (req.data && typeof req.data=='object' && !(req.data instanceof ReadableStream)) {\n const contentType = req.headers.get('Content-Type')\n if (!contentType || isPlainText(contentType)) {\n req = req.with({\n headers: {\n 'Content-Type':options.contentType,\n }\n })\n }\n if (isJSON(req.headers.get('Content-Type'))) {\n req = req.with({\n body: JSON.stringify(req.data, options.replacer, options.space)\n })\n }\n }\n }\n let res = await next(req)\n if (res && isJSON(res.headers?.get('Content-Type'))) {\n let tempRes = res.clone()\n let body = await tempRes.text()\n try {\n let json = JSON.parse(body, options.reviver)\n return res.with({\n body: json\n })\n } catch(e) {\n // ignore parse errors\n }\n }\n return res\n }\n}\n\n/*\n this matches:\n - application/json\n - application/ld+json\n - application/json; charset=utf-8\n - application/ld+json; charset=utf-8\n*/\nconst jsonRE = /^application\\/([a-zA-Z0-9\\-_]+\\+)?json\\b/\nfunction isJSON(contentType)\n{\n return jsonRE.exec(contentType)\n}\n\nfunction isPlainText(contentType)\n{\n return /^text\\/plain\\b/.exec(contentType)\n}", "export default function throwermw(options) {\n\n\treturn async function thrower(req, next) {\n\t\tlet res = await next(req)\n\t\tif (!res.ok) {\n\t\t\tif (options && typeof options[res.status] == 'function') {\n\t\t\t\tres = options[res.status].apply(res, req)\n\t\t\t} else {\n\t\t\t\tthrow new Error(res.status+': '+res.statusText, {\n\t\t\t\t\tcause: res\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn res\n\t}\n\n}", "export default function getdatamw()\n{\n\n\treturn async function getdata(req, next) {\n\t\tlet res = await next(req)\n\t\tif (res.ok && res.data) {\n\t\t\treturn res.data\n\t\t}\n\t\treturn res\n\t}\n\n}", "import * as metro from './metro.mjs'\nimport jsonmw from './mw/json.mjs'\nimport throwermw from './mw/thrower.mjs'\nimport getdatamw from './mw/getdata.mjs'\n\n/**\n * Metro API Client, extends Client\n * @param base ClientOptions|URL|String\n * @param methods {name:function,...} list of API methods to expose\n * This class extends the metro client to allow you to add your own\n * api client methods. Methods are bound to this API object.\n * All default client methods (get/post/put/etc.) still work, unless\n * overridden. If a response object has a data part, that will be \n * returned by the api client methods, instead of the normal response\n * The base API class will throw errors for network responses that\n * are not ok (e.g. status >= 400)\n * It will also return response.data, if that is set, instead of response\n */\nexport class API extends metro.Client\n{\n\tconstructor(base, methods, bind=null)\n\t{\n\t\tif (base instanceof metro.Client) {\n\t\t\tsuper(base.clientOptions, throwermw(), getdatamw())\n\t\t} else {\n\t\t\tsuper(base, throwermw(), getdatamw())\n\t\t}\n\t\tif (!bind) {\n\t\t\tbind = this\n\t\t}\n\t\tfor (const methodName in methods) {\n\t\t\tif (typeof methods[methodName] == 'function') {\n\t\t\t\t// all methods have a this pointing to the (root) API class\n\t\t\t\t// so that you can do this.get()/this.post() or this.section.method()\n\t\t\t\t// inside an API method\n\t\t\t\tthis[methodName] = methods[methodName].bind(bind)\n\t\t\t} else if (methods[methodName] && typeof methods[methodName] == 'object') {\n\t\t\t\t// allows for api.section.method()\n\t\t\t\tthis[methodName] = new this.constructor(base, methods[methodName], bind)\n\t\t\t} else { \n\t\t\t\t// allows you to set string/number values in the client api\n\t\t\t\tthis[methodName] = methods[methodName]\n\t\t\t}\n\t\t}\t\t\n\t}\n}\n\n/**\n * This extends the API class to automatically add\n * the jsonmw middleware. So any request.body that is\n * a normal object is automatically translated to JSON\n * Any response that returns JSON is automatically parsed\n * into response.data.\n * If no Accept header is set, it is added.\n */\nexport class JsonAPI extends API\n{\n\tconstructor(base, methods, bind=null) \n\t{\n\t\tif (base instanceof metro.Client) {\n\t\t\tsuper(base.with(jsonmw()), methods, bind)\n\t\t} else {\n\t\t\tsuper(metro.client(base, jsonmw()), methods, bind)\n\t\t}\n\t}\n}\n\n/**\n * Returns a new Metro API object\n * @param {...ClientOptions|string|URL}\n * @return API\n */\nexport function api(...options)\n{\n\treturn new API(...metro.deepClone(options))\n}\n\nexport function jsonApi(...options)\n{\n\treturn new JsonAPI(...metro.deepClone(options))\n}", "import * as m from './metro.mjs'\nimport { api, jsonApi } from './api.mjs'\nimport json from './mw/json.mjs'\nimport thrower from './mw/thrower.mjs'\nimport getdata from './mw/getdata.mjs'\n\nconst metro = Object.assign({}, m, {\n\tmw: {\n\t\tjson,\n\t\tthrower,\n\t\tgetdata\n\t},\n\tapi,\n\tjsonApi\n})\n\nif (!globalThis.metro) {\n\tglobalThis.metro = metro\n}\n\nexport default metro", "/*\nTODO: add assertExplain global flag, so that if assert() fails, you can call explain() with\n the same pattern and it will return text explanation of why it failed, each assertion function must \n then check assertExplain, and return a text explanation of what fails or succeeds\n top level can then filter to show only the failures\n (so that not(x) can show the succeeds message of x)\n*/\n\n/**\n * assertEnabled (Boolean) used to toggle whether the assert()\n * method should test assertions or not.\n */\nglobalThis.assertEnabled = false\n\n/**\n * Enables assertion testing with assert()\n */\nexport function enable() {\n\tglobalThis.assertEnabled = true\n}\n\n/**\n * Disables assertion testing with assert()\n */\nexport function disable() {\n\tglobalThis.assertEnabled = false\n}\n\n/**\n * This function will check the source for the assertions in test, if\n * assertion checking is enabled globally.\n * If it is, and any assertion fails, it will throw an assertError\n * with a list of problems and other details.\n */\nexport function assert(source, test) {\n\tif (globalThis.assertEnabled) {\n\t\tlet problems = fails(source,test)\n\t\tif (problems) {\n\t\t\tconsole.error('\uD83C\uDD70\uFE0F Assertions failed because of:', problems, 'in this source:', source)\n\t\t\tthrow new Error('Assertions failed', {\n\t\t\t\tcause: { problems, source } \n\t\t\t})\n\t\t}\n\t}\n}\n\n/**\n * Tests a given value against a pattern, only if the value is not null or undefined\n */\nexport function Optional(pattern) {\n\treturn function _Optional(data, root, path) {\n\t\tif (typeof data != 'undefined' && data!=null && typeof pattern != 'undefined' ) {\n\t\t\treturn fails(data, pattern, root, path)\n\t\t}\n\t}\n}\n\n/**\n * Tests a given value against a pattern, always.\n */\nexport function Required(pattern) {\n\treturn function _Required(data, root, path) {\n\t\tif (data==null || typeof data == 'undefined') {\n\t\t\treturn error('data is required', data, pattern || 'any value', path)\n\t\t} else if (typeof pattern != 'undefined') {\n\t\t\treturn fails(data, pattern, root, path)\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n}\n\n/**\n * Tests a given value against a pattern, only if the value is not null or undefined\n * If null or undefined, it does print a warning to the console.\n */\nexport function Recommended(pattern) {\n\treturn function _Recommended(data, root, path) {\n\t\tif (data==null || typeof data == 'undefined') {\n\t\t\twarn('data does not contain recommended value', data, pattern, path)\n\t\t\treturn false\n\t\t} else {\n\t\t\treturn fails(data, pattern, root, path)\n\t\t}\n\t}\n}\n\n/**\n * Tests a given value against a set of patterns, untill one succeeds\n * Returns an error if none succeed\n */\nexport function oneOf(...patterns) { \n\treturn function _oneOf(data, root, path) {\n\t\tfor(let pattern of patterns) {\n\t\t\tif (!fails(data, pattern, root, path)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn error('data does not match oneOf patterns', data, patterns, path)\n\t}\n}\n\n/**\n * Tests a given array of values against a set of patterns\n * If any value does not match one of the patterns, it will return an error\n * If not given an array to test, it will return an error\n */\nexport function anyOf(...patterns) {\n\treturn function _anyOf(data, root, path) {\n\t\tif (!Array.isArray(data)) {\n\t\t\treturn error('data is not an array',data,'anyOf',path)\n\t\t}\n\t\tfor (let value of data) {\n\t\t\tif (oneOf(...patterns)(value)) {\n\t\t\t\treturn error('data does not match anyOf patterns',value,patterns,path)\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n}\n\nexport function allOf(...patterns) {\n\treturn function _allOf(data, root, path) {\n\t\tlet problems = []\n\t\tfor (let pattern of patterns) {\n\t\t\tproblems = problems.concat(fails(data, pattern, root, path))\n\t\t}\n\t\tproblems = problems.filter(Boolean)\n\t\tif (problems.length) {\n\t\t\treturn error('data does not match all given patterns', data, patterns, path, problems)\n\t\t}\n\t}\n}\n\n/**\n * Tests a given value to see if it is a valid (and absolute) URL, by\n * parsing it with the URL() constructor, and then testing the href\n * value to be equal to the initial value.\n */\nexport function validURL(data, root, path) {\n\ttry {\n\t\tif (data instanceof URL) {\n\t\t\tdata = data.href\n\t\t}\n\t\tlet url = new URL(data)\n\t\tif (url.href!=data) {\n\t\t\tif (!(url.href+'/'==data || url.href==data+'/')) {\n\t\t\t\t// new URL() always adds a / as path\n\t\t\t\treturn error('data is not a valid url',data,'validURL',path)\n\t\t\t}\n\t\t}\n\t} catch(e) {\n\t\treturn error('data is not a valid url',data,'validURL',path)\n\t}\n}\n\n/**\n * Tests a given value to see if it looks like a valid email address, by\n * testing it against a regular expression. So there are no guarantees that\n * it is an actual working email address, just that it looks like one.\n */\nexport function validEmail(data, root, path) {\n\tif (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(data)) {\n\t\treturn error('data is not a valid email',data,'validEmail',path)\n\t}\n}\n\n/**\n * Tests a given value to see if it is an object which is an instance of the given\n * constructor\n */\nexport function instanceOf(constructor) {\n\treturn function _instanceOf(data, root, path) {\n\t\tif (!(data instanceof constructor)) {\n\t\t\treturn error('data is not an instanceof pattern',data,constructor,path)\n\t\t}\n\t}\n}\n\n/**\n * Runs the given test pattern on a value, if the test succeeds, it fails\n * the not() test.\n */\nexport function not(pattern) {\n\treturn function _not(data, root, path) {\n\t\tif (!fails(data, pattern, root, path)) {\n\t\t\treturn error('data matches pattern, when required not to', data, pattern, path)\n\t\t}\n\t}\n}\n\n/**\n * returns an array of problems if the data fails to satisfy \n * the assertions in the given pattern, false otherwise\n * @param {any} data The data to match\n * @param {any} pattern The pattern to match\n * @param {any} root Root object for assertions, set to data by default\n * @return {Array|false} Array with problems if the pattern fails, false otherwise\n */\nexport function fails(data, pattern, root, path='') {\n\tif (!root) {\n\t\troot = data\n\t}\n\tlet problems = []\n\tif (pattern === Boolean) {\n\t\tif (typeof data != 'boolean' && !(data instanceof Boolean)) {\n\t\t\tproblems.push(error('data is not a boolean', data, pattern, path))\n\t\t}\t\t\n\t} else if (pattern === Number) {\n\t\tif (typeof data != 'number' && !(data instanceof Number)) {\n\t\t\tproblems.push(error('data is not a number', data, pattern, path))\n\t\t}\n\t} else if (pattern === String) {\n\t\tif (typeof data != 'string' && !(data instanceof String)) {\n\t\t\tproblems.push(error('data is not a string', data, pattern, path))\n\t\t}\n\t\tif (data == \"\") {\n\t\t\tproblems.push(error('data is an empty string, which is not allowed', data, pattern, path))\n\t\t}\n\t} else if (pattern instanceof RegExp) {\n \tif (Array.isArray(data)) {\n\t\t\tlet index = data.findIndex((element,index) => fails(element,pattern,root,path+'['+index+']'))\n if (index>-1) {\n \tproblems.push(error('data['+index+'] does not match pattern', data[index], pattern, path+'['+index+']'))\n }\n } else if (typeof data == 'undefined') {\n \tproblems.push(error('data is undefined, should match pattern', data, pattern, path))\n \t} else if (!pattern.test(data)) {\n \tproblems.push(error('data does not match pattern', data, pattern, path))\n }\n } else if (pattern instanceof Function) {\n let problem = pattern(data, root, path)\n if (problem) {\n \tif (Array.isArray(problem)) {\n \t\tproblems = problems.concat(problem)\n \t} else {\n\t \tproblems.push(problem)\n\t }\n }\n } else if (Array.isArray(pattern)) {\n\t\tif (!Array.isArray(data)) {\n\t\t\tproblems.push(error('data is not an array',data,[],path))\n\t\t}\n\t\tfor (let p of pattern) {\n\t\t\tfor (let index of data.keys()) {\n\t\t\t\tlet problem = fails(data[index], p, root, path+'['+index+']')\n\t\t\t\tif (Array.isArray(problem)) {\n\t\t\t\t\tproblems = problems.concat(problem)\n\t\t\t\t} else if (problem) {\n\t\t\t\t\tproblems.push(problem)\n\t\t\t\t}\n\t\t\t}\n \t}\n } else if (pattern && typeof pattern == 'object') {\n if (Array.isArray(data)) {\n let index = data.findIndex((element,index) => fails(element,pattern,root,path+'['+index+']'))\n if (index>-1) {\n \tproblems.push(error('data['+index+'] does not match pattern', data[index], pattern, path+'['+index+']'))\n }\n } else if (!data || typeof data != 'object') {\n \tproblems.push(error('data is not an object, pattern is', data, pattern, path))\n } else {\n \tif (data instanceof URLSearchParams) {\n \t\tdata = Object.fromEntries(data)\n \t}\n \tif (pattern instanceof Function) {\n \t\tlet result = fails(data, pattern, root, path)\n\t if (result) {\n\t \tproblems = problems.concat(result)\n\t }\n \t} else {\n\t\t for (const [patternKey, subpattern] of Object.entries(pattern)) {\n\t\t let result = fails(data[patternKey], subpattern, root, path+'.'+patternKey)\n\t\t if (result) {\n\t\t \tproblems = problems.concat(result)\n\t\t }\n\t\t }\n\t\t }\n\t }\n } else {\n \tif (pattern!=data) {\n \t\tproblems.push(error('data and pattern are not equal', data, pattern, path))\n \t}\n }\n if (problems.length) {\n \treturn problems\n }\n return false\n}\n\n/**\n * Returns an object with message, found and expected properties\n */ \nexport function error(message, found, expected, path, problems) {\n\tlet result = {\n\t\tpath,\n\t\tmessage,\n\t\tfound,\n\t\texpected\n\t}\n\tif (problems) {\n\t\tresult.problems = problems\n\t}\n\treturn result\n}\n\nexport function warn(message, data, pattern, path) {\n\tconsole.warn('\uD83C\uDD70\uFE0F Assert: '+path, message, pattern, data)\n}", "export function tokenStore(site) {\n\tlet localState, localTokens\n\tif (typeof localStorage !== 'undefined') {\n\t\tlocalState = {\n\t\t\tget: () => localStorage.getItem('metro/state:'+site),\n\t\t\tset: (value) => localStorage.setItem('metro/state:'+site, value),\n\t\t\thas: () => localStorage.getItem('metro/state:'+site)!==null,\n\t\t\tdelete: () => localStorage.remoteItem('metro/state:'+site)\n\t\t}\n\t\tlocalTokens = {\n\t\t\tget: (name) => JSON.parse(localStorage.getItem(site+':'+name)),\n\t\t\tset: (name, value) => localStorage.setItem(site+':'+name, JSON.stringify(value)),\n\t\t\thas: (name) => localStorage.getItem(site+':'+name)!==null,\n\t\t\tdelete: (name) => localStorage.removeItem(site+':'+name)\n\t\t}\n\t} else {\n\t\tlet stateMap = new Map()\n\t\tlocalState = {\n\t\t\tget: () => stateMap.get('metro/state:'+site),\n\t\t\tset: (value) => stateMap.set('metro/state:'+site, value),\n\t\t\thas: () => stateMap.has('metro/state:'+site),\n\t\t\tdelete: () => stateMap.delete('metro/state:'+site)\n\t\t}\n\t\tlocalTokens = new Map()\n\t}\n\treturn {\n\t\tstate: localState,\n\t\ttokens: localTokens\n\t}\n}", "import * as metro from '@muze-nl/metro/src/metro.mjs'\nimport { assert, Required, validURL } from '@muze-nl/assert'\nimport {tokenStore} from './tokenstore.mjs'\n\n/**\n * oauth2mw returns a middleware for @muze-nl/metro that\n * implements oauth2 authentication in the metro client.\n * it supports the authorization_code, refresh_token and\n * client_credentials grant_type.\n * Since implicit flow is deemed insecure, it is not supported\n * This library follows the OAuth2.1 RFC - https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-11)\n * Referenced as Oauth2.1 RFC from here on\n * by default it will use PKCE and generate a random code_verifier,\n * to skip this, set options.oauth2_configuration.code_verifier to false\n */\nexport default function oauth2mw(options)\n{\n\tconst defaultOptions = {\n\t\tclient: metro.client(),\n\t\tforce_authorization: false,\n\t\tsite: 'default',\n\t\toauth2_configuration: {\n\t\t\tauthorization_endpoint: '/authorize',\n\t\t\ttoken_endpoint: '/token',\n\t\t\tredirect_uri: globalThis.document?.location.href,\n\t\t\tgrant_type: 'authorization_code',\n\t\t\tcode_verifier: generateCodeVerifier(64)\n\t\t},\n\t\tauthorize_callback: async url => {\n\t\t\tif (window.location.href != url.href) {\n\t\t\t\twindow.location.replace(url.href)\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t}\n\n\tassert(options, {})\t\n\n\tconst oauth2 = Object.assign({}, defaultOptions.oauth2_configuration, options?.oauth2_configuration)\n\toptions = Object.assign({}, defaultOptions, options)\n\toptions.oauth2_configuration = oauth2\n\n\tconst store = tokenStore(options.site)\n\tif (!options.tokens) {\n\t\toptions.tokens = store.tokens\n\t}\n\tif (!options.state) {\n\t\toptions.state = store.state\n\t}\n\n\tassert(options, {\n\t\toauth2_configuration: {\n\t\t\tclient_id: Required(/.+/),\n\t\t\tgrant_type: 'authorization_code',\n\t\t\tauthorization_endpoint: Required(validURL),\n\t\t\ttoken_endpoint: Required(validURL),\n\t\t\tredirect_uri: Required(validURL)\n\t\t}\n\t})\n\n\t// FIXME: for oidc, we need to send the id_token instead of access token...\n\tfor (let option in oauth2) {\n\t\tswitch(option) {\n\t\t\tcase 'access_token':\n\t\t\tcase 'authorization_code':\n\t\t\tcase 'refresh_token':\n\t\t\t\toptions.tokens.set(option, oauth2[option])\n\t\t\tbreak\n\t\t}\n\t}\n\n\t/**\n\t * This is the middleware function. It will intercept a request, and if needed\n\t * go through the OAuth2 authorization flow first.\n\t */\n\treturn async function(req, next) {\n\t\tif (options.force_authorization) {\n\t\t\treturn oauth2authorized(req, next)\n\t\t}\n\t\tlet res\n\t\ttry {\n\t\t\tres = await next(req)\n\t\t\tif (res.ok) {\n\t\t\t\treturn res\n\t\t\t}\n\t\t} catch(err) {\n\t\t\tswitch(res?.status) { \n\t\t\t\tcase 400: // Oauth2.1 RFC 3.2.4\n\t\t\t\tcase 401: // in case of incorrect authentication method\n\t\t\t\t\t//FIXME: check payload of response as well? yes - may be able to recover\n\t\t\t\t\treturn oauth2authorized(req, next)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tthrow err\n\t\t}\n\t\tif (!res.ok) {\n\t\t\tswitch(res.status) { \n\t\t\t\tcase 400: // Oauth2.1 RFC 3.2.4\n\t\t\t\tcase 401: // in case of incorrect authentication method\n\t\t\t\t\t//FIXME: check payload of response as well? yes - may be able to recover\n\t\t\t\t\treturn oauth2authorized(req, next)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn res\n\t}\n\n\t/**\n\t * Implements the OAuth2 authorization flow for a request\n\t */\n\tasync function oauth2authorized(req, next)\n\t{\n\t\tgetTokensFromLocation()\n\t\tconst accessToken = options.tokens.get('access_token')\n\t\tconst refreshToken = options.tokens.get('refresh_token')\n\t\tconst tokenIsExpired = isExpired(accessToken)\n\t\tif (!accessToken || (tokenIsExpired && !refreshToken)) {\n\t\t\ttry {\n\t\t\t\tlet token = await fetchAccessToken()\n\t\t\t\tif (!token) {\n\t\t\t\t\treturn metro.response('false')\n\t\t\t\t}\n\t\t\t} catch(e){\n\t\t\t\t//FIXME: handle some errors here\n\t\t\t\tthrow(e)\n\t\t\t}\n\t\t\treturn oauth2authorized(req, next)\n\t\t} else if (tokenIsExpired && refreshToken) {\n\t\t\ttry {\n\t\t\t\tlet token = await refreshAccessToken()\n\t\t\t\tif (!token) {\n\t\t\t\t\treturn metro.response('false')\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t\t//FIXME: handle some errors here\n\t\t\t\tthrow(e)\n\t\t\t}\n\t\t\treturn oauth2authorized(req, next)\n\t\t} else {\n\t\t\treq = metro.request(req, {\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: accessToken.type+' '+accessToken.value\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn next(req)\n\t\t}\n\t}\n\n\t/**\n\t * Fetches and stores the authorization_code from a redirected URI\n\t * Then removes the authorization_code from the browser URL\n\t * OAuth2 RFC 4.1.2\n\t */\n\tfunction getTokensFromLocation()\n\t{\n\t\tif (typeof window !== 'undefined' && window?.location) {\n\t\t\tlet url = metro.url(window.location)\n\t\t\tlet code, state, params\n\t\t\tif (url.searchParams.has('code')) {\n\t\t\t\tparams = url.searchParams\n\t\t\t\turl = url.with({ search:'' })\n\t\t\t\thistory.pushState({},'',url.href)\n\t\t\t} else if (url.hash) {\n\t\t\t\tlet query = url.hash.substr(1)\n\t\t\t\tparams = new URLSearchParams('?'+query)\n\t\t\t\turl = url.with({ hash:'' })\n\t\t\t\thistory.pushState({},'',url.href)\n\t\t\t}\n\t\t\tif (params) {\n\t\t\t\tcode = params.get('code')\n\t\t\t\tstate = params.get('state')\n\t\t\t\tlet storedState = options.state.get('metro/state')\n\t\t\t\tif (!state || state!==storedState) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (code) {\n\t\t\t\t\toptions.tokens.set('authorization_code', code)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fetches the access_token. If the authorization_code hasn't been retrieved yet,\n\t * it will first try to get that, using the options.callbacks.authorize function.\n\t * If a refresh_token is also returned, it will store that in the options.tokens storage.\n\t */\n\tasync function fetchAccessToken()\n\t{\n\t\tif (oauth2.grant_type === 'authorization_code' && !options.tokens.has('authorization_code')) {\n\t\t\tlet authReqURL = await getAuthorizationCodeURL()\n\t\t\tif (!options.authorize_callback || typeof options.authorize_callback !== 'function') {\n\t\t\t\tthrow metro.metroError('oauth2mw: oauth2 with grant_type:authorization_code requires a callback function in client options.authorize_callback')\n\t\t\t}\n\t\t\tlet token = await options.authorize_callback(authReqURL)\n\t\t\tif (token) {\n\t\t\t\toptions.tokens.set('authorization_code', token)\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tlet tokenReq = getAccessTokenRequest()\n\t\tlet response = await options.client.post(tokenReq) //OAuth2.1 RFC 3.2\n\t\tif (!response.ok) {\n\t\t\tlet msg = await response.text()\n\t\t\tthrow metro.metroError('OAuth2mw: fetch access_token: '+response.status+': '+response.statusText, {cause: tokenReq} )\n\t\t}\n\t\tlet data = await response.json()\n\t\t// OAuth2.1 RFC 3.2.3\n\t\toptions.tokens.set('access_token', {\n\t\t\tvalue: data.access_token,\n\t\t\texpires: getExpires(data.expires_in),\n\t\t\ttype: data.token_type,\n\t\t\tscope: data.scope\n\t\t})\n\t\tif (data.refresh_token) {\n\t\t\tlet token = {\n\t\t\t\tvalue: data.refresh_token\n\t\t\t}\n\t\t\toptions.tokens.set('refresh_token', token)\n\t\t}\n\t\toptions.tokens.delete('authorization_code') // no longer valid\n\t\treturn data\n\t}\n\n\t/**\n\t * Fetches a new access_token using a stored refresh_token\n\t * If a new refresh_token is also returned, it will update the stored refresh_token\n\t * OAuth2.1 RFC 4.3\n\t */\n\tasync function refreshAccessToken()\n\t{\n\t\tlet refreshTokenReq = getAccessTokenRequest('refresh_token')\n\t\tlet response = await options.client.post(refreshTokenReq)\n\t\tif (!response.ok) {\n\t\t\tthrow metro.metroError('OAuth2mw: refresh access_token: '+response.status+': '+response.statusText, {cause: refreshTokenReq} )\n\t\t}\n\t\tlet data = await response.json()\n\t\toptions.tokens.set('access_token', {\n\t\t\tvalue: data.access_token,\n\t\t\texpires: getExpires(data.expires_in),\n\t\t\ttype: data.token_type,\n\t\t\tscope: data.scope\n\t\t})\n\t\tif (data.refresh_token) {\n\t\t\tlet token = {\n\t\t\t\tvalue: data.refresh_token\n\t\t\t}\n\t\t\toptions.tokens.set('refresh_token', token)\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t\treturn data\n\t}\n\n\t/**\n\t * Returns the URL to use to get a authorization_code\n\t */\n\tasync function getAuthorizationCodeURL()\n\t{\n\t\tif (!oauth2.authorization_endpoint) {\n\t\t\tthrow metro.metroError('oauth2mw: Missing options.oauth2_configuration.authorization_endpoint')\n\t\t}\n\t\tlet url = metro.url(oauth2.authorization_endpoint, {hash: ''}) // OAuth2.1 RFC 3.1\n\t\tassert(oauth2, {\n\t\t\tclient_id: /.+/,\n\t\t\tredirect_uri: /.+/,\n\t\t\tscope: /.*/\n\t\t})\n\t\tlet search = {\n\t\t\tresponse_type: 'code', // implicit flow uses 'token' here, but is not considered safe, so not supported\n\t\t\tclient_id: oauth2.client_id,\n\t\t\tredirect_uri: oauth2.redirect_uri,\n\t\t\tstate: oauth2.state || createState(40) // OAuth2.1 RFC says optional, but its a good idea to always add/check it\n\t\t}\n\t\tif (oauth2.response_type) {\n\t\t\tsearch.response_type = oauth2.response_type\n\t\t}\n\t\tif (oauth2.response_mode) {\n\t\t\tsearch.response_mode = oauth2.response_mode\n\t\t}\n\t\toptions.state.set(search.state)\n\t\tif (oauth2.client_secret) {\n\t\t\tsearch.client_secret = oauth2.client_secret\n\t\t}\n\t\tif (oauth2.code_verifier) { //PKCE\n\t\t\toptions.tokens.set('code_verifier', oauth2.code_verifier)\n\t\t\tsearch.code_challenge = await generateCodeChallenge(oauth2.code_verifier)\n\t\t\tsearch.code_challenge_method = 'S256'\n\t\t}\n\t\tif (oauth2.scope) {\n\t\t\tsearch.scope = oauth2.scope\n\t\t}\n\t\tif (oauth2.prompt) {\n\t\t\tsearch.prompt = oauth2.prompt\n\t\t}\n\t\treturn metro.url(url, { search })\n\t}\n\n\n\t/**\n\t * Returns a token endpoint request with all the correct parameters, given the\n\t * grant_type. This can then be used in a metro.post.\n\t */\n\tfunction getAccessTokenRequest(grant_type=null)\n\t{\n\t\tassert(oauth2, {\n\t\t\tclient_id: /.+/,\n\t\t\tredirect_uri: /.+/\n\t\t})\n\t\tif (!oauth2.token_endpoint) {\n\t\t\tthrow metro.metroError('oauth2mw: Missing options.endpoints.token url')\n\t\t}\n\t\tlet url = metro.url(oauth2.token_endpoint, {hash: ''}) // OAuth2.1 RFC 3.2\n\t\tlet params = {\n\t\t\tgrant_type: grant_type || oauth2.grant_type,\n\t\t\tclient_id: oauth2.client_id\n\t\t}\n\t\tif (oauth2.client_secret) {\n\t\t\tparams.client_secret = oauth2.client_secret\n\t\t}\n\t\tif (oauth2.scope) {\n\t\t\tparams.scope = oauth2.scope\n\t\t}\n\t\tswitch(params.grant_type) {\n\t\t\tcase 'authorization_code':\n\t\t\t\tparams.redirect_uri = oauth2.redirect_uri\n\t\t\t\tparams.code = options.tokens.get('authorization_code')\n\t\t\t\tconst code_verifier = options.tokens.get('code_verifier') //PKCE\n\t\t\t\t// use previously stored code_verifier, not the current random generated one\n\t\t\t\t// previously stored code_verifier is linked to the code_challenge already sent\n\t\t\t\tif (code_verifier) {\n\t\t\t\t\tparams.code_verifier = code_verifier\n\t\t\t\t}\n\t\t\tbreak\n\t\t\tcase 'client_credentials':\n\t\t\t\t// nothing to add\n\t\t\tbreak\n\t\t\tcase 'refresh_token':\n\t\t\t\tconst refreshToken = options.tokens.get('refresh_token')\n\t\t\t\tparams.refresh_token = refreshToken.value\n\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Unknown grant_type: '.oauth2.grant_type)\n\t\t\tbreak\n\t\t}\n\t\treturn metro.request(url, {method: 'POST', body: new URLSearchParams(params) })\n\t}\n\n}\n\n/**\n * Returns true if the access token is expired. False otherwise.\n */\nexport function isExpired(token)\n{\n\tif (!token) {\n\t\treturn true\n\t}\n\tlet expires = new Date(token.expires)\n\tlet now = new Date();\n\treturn now.getTime() > expires.getTime();\n}\n\n/**\n * Returns a new Date based on a duration, which can either be a date\n * or a number of seconds from now.\n */\nexport function getExpires(duration)\n{\n\tif (duration instanceof Date) {\n\t\treturn new Date(duration.getTime()); // return a copy\n\t}\n\tif (typeof duration === 'number') {\n\t\tlet date = new Date();\n\t\tdate.setSeconds(date.getSeconds() + duration);\n\t\treturn date;\n\t}\n\tthrow new TypeError('Unknown expires type '+duration);\n}\n\n\n/**\n * returns a PKCE code_verifier, as a uint8array\n * pass it to base64url_encode() to get a string\n */\nexport function\tgenerateCodeVerifier(size=64)\n{\n\tconst code_verifier = new Uint8Array(size)\n\tglobalThis.crypto.getRandomValues(code_verifier)\n\treturn base64url_encode(code_verifier)\n}\n\n/**\n * Returns a PKCE code_challenge derived from a code_verifier\n * Note that this is an async function, so you can't just call\n * it in the defaultOptions part of oauth2mw, or it will become async as well\n * and that is not supported using metro.client().with() (yet)\n */\nexport async function generateCodeChallenge(code_verifier)\n{\n\tconst encoder = new TextEncoder()\n\tconst data = encoder.encode(code_verifier)\n\tconst challenge = await globalThis.crypto.subtle.digest('SHA-256', data)\n\treturn base64url_encode(challenge)\n}\n\n/**\n * Base64url encoding, which handles UTF-8 input strings correctly.\n */\nexport function base64url_encode(buffer)\n{\n\tconst byteString = Array.from(new Uint8Array(buffer), b => String.fromCharCode(b)).join('')\n return btoa(byteString)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\n/**\n * Creates a random state to use in the authorization code URL\n */\nexport function createState(length)\n{\n\tconst validChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n\tlet randomState = ''\n\tlet counter = 0\n while (counter < length) {\n randomState += validChars.charAt(Math.floor(Math.random() * validChars.length))\n counter++\n }\n\treturn randomState\n}\n\n/**\n * Returns true if a parameter 'code' is in the document.location searchParams or\n * in the hash, if parsed as searchParams\n */\nexport function isRedirected() {\n\tlet url = new URL(document.location.href)\n\tif (!url.searchParams.has('code')) {\n\t\tif (url.hash) {\n\t\t\tlet query = url.hash.substr(1)\n\t\t\tparams = new URLSearchParams('?'+query)\n\t\t\tif (params.has('code')) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\treturn true\n}\n\n/**\n * Returns true if there is a valid accessToken or refreshToken in the\n * tokens store.\n * @param (tokensStore.tokens|issuer) tokens - if tokens is a string, it \n * \tis assumed to be the oidc issuer, and tokens are fetched using the default\n * tokenStore. If you use a different tokenStore, pass the tokens section of it here\n */\nexport function isAuthorized(tokens) {\n\tif (typeof tokens == 'string') {//issuer\n\t\ttokens = tokenStore(tokens).tokens\n\t}\n\tlet accessToken = tokens.get('access_token')\n\tif (accessToken && !isExpired(accessToken)) {\n\t\treturn true\n\t}\n\tlet refreshToken = tokens.get('refresh_token')\n\tif (refreshToken) { // assumes refresh token is still valid\n\t\treturn true\n\t}\n\treturn false\n}", "export default function keysStore() {\n\treturn new Promise((resolve, reject) => {\n\t\tconst request = globalThis.indexedDB.open('metro', 1)\n\n\t\trequest.onupgradeneeded = () => request.result.createObjectStore('keyPairs', { keyPath: 'domain'})\n\n\t\trequest.onerror = (event) => {\n\t\t\treject(event)\n\t\t}\n\n\t\trequest.onsuccess = (event) => {\n\t\t\tconst db = event.target.result\n\t\t\tresolve({\n\t\t\t\tset: function(value, key) {\n\t\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\t\tconst tx = db.transaction('keyPairs', 'readwrite', {durability: 'strict'})\n\t\t\t\t\t\tconst objectStore = tx.objectStore('keyPairs')\n\t\t\t\t\t\ttx.oncomplete = () => {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttx.onerror = reject\n\t\t\t\t\t\tobjectStore.put(value, key)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tget: function(key) {\n\t\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\t\tconst tx = db.transaction('keyPairs', 'readonly')\n\t\t\t\t\t\tconst objectStore = tx.objectStore('keyPairs')\n\t\t\t\t\t\tconst request = objectStore.get(key)\n\t\t\t\t\t\trequest.onsuccess = () => {\n\t\t\t\t\t\t\tresolve(request.result)\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequest.onerror = reject\n\t\t\t\t\t\ttx.onerror = reject\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tclear: function() {\n\t\t\t\t\treturn new Promise((resolve,reject) => {\n\t\t\t\t\t\tconst tx = db.transaction('keyPairs', 'readwrite')\n\t\t\t\t\t\tconst objectStore = tx.objectStore('keyPairs')\n\t\t\t\t\t\tconst request = objectStore.clear()\n\t\t\t\t\t\trequest.onsuccess = () => {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequest.onerror = reject\n\t\t\t\t\t\ttx.onerror = reject\t\t\t\t\t\t\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t})\n}", "const encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nfunction buf(input) {\n if (typeof input === 'string') {\n return encoder.encode(input);\n }\n return decoder.decode(input);\n}\nfunction checkRsaKeyAlgorithm(algorithm) {\n if (typeof algorithm.modulusLength !== 'number' || algorithm.modulusLength < 2048) {\n throw new OperationProcessingError(`${algorithm.name} modulusLength must be at least 2048 bits`);\n }\n}\nfunction subtleAlgorithm(key) {\n switch (key.algorithm.name) {\n case 'ECDSA':\n return { name: key.algorithm.name, hash: 'SHA-256' };\n case 'RSA-PSS':\n checkRsaKeyAlgorithm(key.algorithm);\n return {\n name: key.algorithm.name,\n saltLength: 256 >> 3,\n };\n case 'RSASSA-PKCS1-v1_5':\n checkRsaKeyAlgorithm(key.algorithm);\n return { name: key.algorithm.name };\n case 'Ed25519':\n return { name: key.algorithm.name };\n }\n throw new UnsupportedOperationError();\n}\nasync function jwt(header, claimsSet, key) {\n if (key.usages.includes('sign') === false) {\n throw new TypeError('private CryptoKey instances used for signing assertions must include \"sign\" in their \"usages\"');\n }\n const input = `${b64u(buf(JSON.stringify(header)))}.${b64u(buf(JSON.stringify(claimsSet)))}`;\n const signature = b64u(await crypto.subtle.sign(subtleAlgorithm(key), key, buf(input)));\n return `${input}.${signature}`;\n}\nconst CHUNK_SIZE = 0x8000;\nfunction encodeBase64Url(input) {\n if (input instanceof ArrayBuffer) {\n input = new Uint8Array(input);\n }\n const arr = [];\n for (let i = 0; i < input.byteLength; i += CHUNK_SIZE) {\n arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE)));\n }\n return btoa(arr.join('')).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\nfunction b64u(input) {\n return encodeBase64Url(input);\n}\nfunction randomBytes() {\n return b64u(crypto.getRandomValues(new Uint8Array(32)));\n}\nclass UnsupportedOperationError extends Error {\n constructor(message) {\n super(message ?? 'operation not supported');\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nclass OperationProcessingError extends Error {\n constructor(message) {\n super(message);\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nfunction psAlg(key) {\n switch (key.algorithm.hash.name) {\n case 'SHA-256':\n return 'PS256';\n default:\n throw new UnsupportedOperationError('unsupported RsaHashedKeyAlgorithm hash name');\n }\n}\nfunction rsAlg(key) {\n switch (key.algorithm.hash.name) {\n case 'SHA-256':\n return 'RS256';\n default:\n throw new UnsupportedOperationError('unsupported RsaHashedKeyAlgorithm hash name');\n }\n}\nfunction esAlg(key) {\n switch (key.algorithm.namedCurve) {\n case 'P-256':\n return 'ES256';\n default:\n throw new UnsupportedOperationError('unsupported EcKeyAlgorithm namedCurve');\n }\n}\nfunction determineJWSAlgorithm(key) {\n switch (key.algorithm.name) {\n case 'RSA-PSS':\n return psAlg(key);\n case 'RSASSA-PKCS1-v1_5':\n return rsAlg(key);\n case 'ECDSA':\n return esAlg(key);\n case 'Ed25519':\n return 'EdDSA';\n default:\n throw new UnsupportedOperationError('unsupported CryptoKey algorithm name');\n }\n}\nfunction isCryptoKey(key) {\n return key instanceof CryptoKey;\n}\nfunction isPrivateKey(key) {\n return isCryptoKey(key) && key.type === 'private';\n}\nfunction isPublicKey(key) {\n return isCryptoKey(key) && key.type === 'public';\n}\nfunction epochTime() {\n return Math.floor(Date.now() / 1000);\n}\nexport default async function DPoP(keypair, htu, htm, nonce, accessToken, additional) {\n const privateKey = keypair?.privateKey;\n const publicKey = keypair?.publicKey;\n if (!isPrivateKey(privateKey)) {\n throw new TypeError('\"keypair.privateKey\" must be a private CryptoKey');\n }\n if (!isPublicKey(publicKey)) {\n throw new TypeError('\"keypair.publicKey\" must be a public CryptoKey');\n }\n if (publicKey.extractable !== true) {\n throw new TypeError('\"keypair.publicKey.extractable\" must be true');\n }\n if (typeof htu !== 'string') {\n throw new TypeError('\"htu\" must be a string');\n }\n if (typeof htm !== 'string') {\n throw new TypeError('\"htm\" must be a string');\n }\n if (nonce !== undefined && typeof nonce !== 'string') {\n throw new TypeError('\"nonce\" must be a string or undefined');\n }\n if (accessToken !== undefined && typeof accessToken !== 'string') {\n throw new TypeError('\"accessToken\" must be a string or undefined');\n }\n if (additional !== undefined &&\n (typeof additional !== 'object' || additional === null || Array.isArray(additional))) {\n throw new TypeError('\"additional\" must be an object');\n }\n return jwt({\n alg: determineJWSAlgorithm(privateKey),\n typ: 'dpop+jwt',\n jwk: await publicJwk(publicKey),\n }, {\n ...additional,\n iat: epochTime(),\n jti: randomBytes(),\n htm,\n nonce,\n htu,\n ath: accessToken ? b64u(await crypto.subtle.digest('SHA-256', buf(accessToken))) : undefined,\n }, privateKey);\n}\nasync function publicJwk(key) {\n const { kty, e, n, x, y, crv } = await crypto.subtle.exportKey('jwk', key);\n return { kty, crv, e, n, x, y };\n}\nexport async function generateKeyPair(alg, options) {\n let algorithm;\n if (typeof alg !== 'string' || alg.length === 0) {\n throw new TypeError('\"alg\" must be a non-empty string');\n }\n switch (alg) {\n case 'PS256':\n algorithm = {\n name: 'RSA-PSS',\n hash: 'SHA-256',\n modulusLength: options?.modulusLength ?? 2048,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n };\n break;\n case 'RS256':\n algorithm = {\n name: 'RSASSA-PKCS1-v1_5',\n hash: 'SHA-256',\n modulusLength: options?.modulusLength ?? 2048,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n };\n break;\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n break;\n case 'EdDSA':\n algorithm = { name: 'Ed25519' };\n break;\n default:\n throw new UnsupportedOperationError();\n }\n return (crypto.subtle.generateKey(algorithm, options?.extractable ?? false, ['sign', 'verify']));\n}\n", "import metro from '@muze-nl/metro'\nimport DPoP, {generateKeyPair} from 'dpop'\nimport { assert, Required, Optional, validURL } from '@muze-nl/assert'\nimport keysStore from './keysstore.mjs'\n\nexport default function dpopmw(options) {\n\n\tassert(options, {\n\t\tsite: Required(validURL),\n\t\tauthorization_endpoint: Required(validURL),\n\t\ttoken_endpoint: Required(validURL),\n\t\tdpop_signing_alg_values_supported: Optional([]) // this property is unfortunately rarely supported\n\t})\n\n\treturn async (req, next) => {\n\t\tconst keys = await keysStore()\n\t\tlet keyInfo = await keys.get(options.site)\n\t\tif (!keyInfo) {\n \t\t\t// FIXME fetch from dpop_signing_alg_values_supported\n \t\t\t// which is unfortunately not available usually\n \t\t\tlet keyPair = await generateKeyPair('ES256') // note: don't make them extractable! That potentially allows hackers to steal the privateKey\n\t\t\tkeyInfo = { domain: options.site, keyPair }\n\t\t\tawait keys.set(keyInfo)\n\t\t}\n\t\tconst url = metro.url(req.url)\n\n\t\tif (req.url.startsWith(options.authorization_endpoint)) {\n\t\t\tlet params = req.body\n\t\t\tif (params instanceof URLSearchParams || params instanceof FormData) {\n\t\t\t\tparams.set('dpop_jkt', keyInfo.keyPair.publicKey)\n\t\t\t} else {\n\t\t\t\tparams.dpop_jkt = keyInfo.keyPair.publicKey\n\t\t\t}\n\n\t\t} else if (req.url.startsWith(options.token_endpoint)) {\n\t\t\tconst dpopHeader = await DPoP(keyInfo.keyPair, req.url, req.method)\n\t\t\treq = req.with({\n\t\t\t\theaders: {\n\t\t\t\t\t'DPoP': dpopHeader\n\t\t\t\t}\n\t\t\t})\n\n\t\t} else if (req.headers.has('Authorization')) { //FIXME: not all requests use the dpop bound access token, so check which key to use, or if to add dpop at all\n\t\t\t// note: don't use options.site here, nonce can differ\n\t\t\tconst nonce = localStorage.getItem(url.host+':nonce') || undefined // null is not acceptible for DpOp()\n\t\t\tconst accessToken = req.headers.get('Authorization').split(' ')[1]\n\t\t\tconst dpopHeader = await DPoP(keyInfo.keyPair, req.url, req.method, nonce, accessToken)\n\t\t\treq = req.with({\n\t\t\t\theaders: {\n\t\t\t\t\t'Authorization': 'DPoP '+accessToken,\n\t\t\t\t\t'DPoP': dpopHeader\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tlet response = await next(req)\n\t\tif (response.headers.get('DPoP-Nonce')) {\n\t\t\t// note: don't use options.site here, nonce can differ\n\t\t\tlocalStorage.setItem(url.host+':nonce', response.headers.get('DPoP-Nonce'))\n\t\t}\n\t\treturn response\n\t}\n\t\n}", "import { error } from '@muze-nl/assert'\n\nexport const MustHave = (...options) => \n\t(value, root) => {\n\t\tif (options.filter(o => root.hasOwnKey(o)).length > 0) {\n\t\t\treturn false\n\t\t}\n\t\treturn error('root data must have all of', root, options)\n\t}\n\nexport const MustInclude = (...options) =>\n\t(value) => {\n\t\tif (Array.isArray(value) && options.filter(o => !value.includes(o)).length == 0) {\n\t\t\treturn false\n\t\t} else {\n\t\t\treturn error('data must be an array which includes',value,options)\n\t\t}\n\t}\n\n//TODO: add link to spec\nexport const validJWK = [\n\t'HS256','HS384','HS512','RS256','RS384','RS512','ES256','ES384','ES512'\n]\n\n//TODO: add link to spec\n// FIXME: enter correct values\nexport const validJWA = [\n\t'HS256','HS384','HS512','RS256','RS384','RS512','ES256','ES384','ES512'\n]\n\n//TODO: add link to spec\nexport const validAuthMethods = [\n\t'client_secret_post', 'client_secret_basic','client_secret_jwt','private_key_jwt'\n]\n", "/**\n * This module adheres to OpenID Connect Discovery 1.0 incorporating errata set 2 - december 15, 2023\n * https://openid.net/specs/openid-connect-discovery-1_0.html\n */\nimport metro from '@muze-nl/metro'\nimport jsonmw from '@muze-nl/metro/src/mw/json.mjs'\nimport throwermw from '@muze-nl/metro/src/mw/thrower.mjs'\nimport { validJWA, MustInclude, validAuthMethods } from './oidc.util.mjs'\nimport { assert, fails, Required, Recommended, Optional, oneOf, anyOf, allOf, validURL, instanceOf, not, error } from '@muze-nl/assert'\n\n/**\n * Given options.issuer will get the .well-known/openid-configuration information\n * parse it, assert if follows the specification and return it as a javascript object\n * @param options.issuer Required: URL with the root of the oidc issuer\n * @param options.client Optional: metro client to use in the request\n * @returns object with openid-configuration\n * @throws Error when a network error occurs while fetching openid-configuration\n * @throws assertError when either the options or the openid-configuration fail assertions (and assertion testing is enabled)\n */\nexport default async function oidcDiscovery(options={}) {\n\tassert(options, {\n\t\tclient: Optional(instanceOf(metro.client().constructor)),\n\t\tissuer: Required(validURL)\n\t})\n\n\tconst defaultOptions = {\n\t\tclient: metro.client().with(throwermw()).with(jsonmw()),\n\t\trequireDynamicRegistration: false\n\t}\n\n\toptions = Object.assign({},defaultOptions,options)\n\n\tconst TestSucceeded = false\n\tfunction MustUseHTTPS(url) {\n\t\treturn TestSucceeded // FIXME todo\n\t}\n\n\t// https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata\n\t// @TODO: this is a first approximation of the specced requirements, needs to implement\n\t// all MUST/MUST NOT etc. notes in the specification.\n\tconst openid_provider_metadata = {\n\t\tissuer: Required(allOf(options.issuer, MustUseHTTPS)),\n\t\tauthorization_endpoint: Required(validURL),\n\t\ttoken_endpoint: Required(validURL),\n\t\tuserinfo_endpoint: Recommended(validURL), // todo: test for https protocol\n\t\tjwks_uri: Required(validURL),\n\t\tregistration_endpoint: options.requireDynamicRegistration \n\t\t\t? Required(validURL) \n\t\t\t: Recommended(validURL),\n\t\tscopes_supported: Recommended(MustInclude('openid')),\n\t\tresponse_types_supported: options.requireDynamicRegistration\n\t\t\t? Required(MustInclude('code','id_token','id_token token')) \n\t\t\t: Required([]),\n\t\tresponse_modes_supported: Optional([]),\n\t\tgrant_types_supported: options.requireDynamicRegistration\n\t\t\t? Optional(MustInclude('authorization_code')) // implicit is required according to the spec, but not used in web apps\n\t\t\t: Optional([]),\n\t\tacr_values_supported: Optional([]),\n\t\tsubject_types_supported: Required([]),\n\t\tid_token_signing_alg_values_supported: Required(MustInclude('RS256')),\n\t\tid_token_encryption_alg_values_supported: Optional([]),\n\t\tid_token_encryption_enc_values_supported: Optional([]),\n\t\tuserinfo_signing_alg_values_supported: Optional([]),\n\t\tuserinfo_encryption_alg_values_supported: Optional([]),\n\t\tuserinfo_encryption_enc_values_supported: Optional([]),\n\t\trequest_object_signing_alg_values_supported: Optional(MustInclude('RS256')), // not testing for 'none'\n\t\trequest_object_encryption_alg_values_supported: Optional([]),\n\t\trequest_object_encryption_enc_values_supported: Optional([]),\n\t\ttoken_endpoint_auth_methods_supported: Optional(anyOf(...validAuthMethods)),\n\t\ttoken_endpoint_auth_signing_alg_values_supported: Optional(MustInclude('RS256'), not(MustInclude('none'))),\n\t\tdisplay_values_supported: Optional(anyOf('page','popup','touch','wap')),\n\t\tclaim_types_supported: Optional(anyOf('normal','aggregated','distributed')),\n\t\tclaims_supported: Recommended([]),\n\t\tservice_documentation: Optional(validURL),\n\t\tclaims_locales_supported: Optional([]),\n\t\tui_locales_supported: Optional([]),\n\t\tclaims_parameter_supported: Optional(Boolean),\n\t\trequest_parameter_supported: Optional(Boolean),\n\t\trequest_uri_parameter_supported: Optional(Boolean),\n\t\top_policy_uri: Optional(validURL),\n\t\top_tos_uri: Optional(validURL)\t\n\t}\n\n\t// fetch openid configuration from wellknown and return the json\n\tconst configURL = metro.url(options.issuer, '.well-known/openid-configuration')\n\n\tconst response = await options.client.get(\n\t\t// https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationRequest\n\t\t// note: this allows path components in the options.issuer url\n\t\tconfigURL\n\t)\n\tconst openid_config = response.data\n\tassert(openid_config, openid_provider_metadata)\n\n\t// https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationValidation\n\tassert(openid_config.issuer, options.issuer)\n\treturn openid_config\n}", "/**\n * This module adheres to OpenID Connect Dynamic Client Registration 1.0 \n * incorporating errata set 2 - december 15, 2023\n * https://openid.net/specs/openid-connect-registration-1_0.html\n */\nimport metro from '@muze-nl/metro'\nimport jsonmw from '@muze-nl/metro/src/mw/json.mjs'\nimport throwermw from '@muze-nl/metro/src/mw/thrower.mjs'\nimport { validJWA, validAuthMethods, MustHave } from './oidc.util.mjs'\nimport { assert, Required, Optional, oneOf, anyOf, validURL, validEmail, not, instanceOf } from '@muze-nl/assert'\n\nexport default async function register(options)\n{\n\n // https://openid.net/specs/openid-connect-registration-1_0.html#ClientMetadata\n\tconst openid_client_metadata = {\n\t\tredirect_uris: Required([validURL]),\n\t\tresponse_types: Optional([]),\n\t\tgrant_types: Optional(anyOf('authorization_code','refresh_token')), //TODO: match response_types with grant_types\n\t\tapplication_type: Optional(oneOf('native','web')),\n\t\tcontacts: Optional([validEmail]),\n\t\tclient_name: Optional(String),\n\t\tlogo_uri: Optional(validURL),\n\t\tclient_uri: Optional(validURL),\n\t\tpolicy_uri: Optional(validURL),\n\t\ttos_uri: Optional(validURL),\n\t\tjwks_uri: Optional(validURL, not(MustHave('jwks'))),\n\t\tjwks: Optional(validURL, not(MustHave('jwks_uri'))),\n\t\tsector_identifier_uri: Optional(validURL),\n\t\tsubject_type: Optional(String),\n\t\tid_token_signed_response_alg: Optional(oneOf(...validJWA)),\n\t\tid_token_encrypted_response_alg: Optional(oneOf(...validJWA)),\n\t\tid_token_encrypted_response_enc: Optional(oneOf(...validJWA), MustHave('id_token_encrypted_response_alg')),\n\t\tuserinfo_signed_response_alg: Optional(oneOf(...validJWA)),\n\t\tuserinfo_encrypted_response_alg: Optional(oneOf(...validJWA)),\n\t\tuserinfo_encrypted_response_enc: Optional(oneOf(...validJWA), MustHave('userinfo_encrypted_response_alg')),\n\t\trequest_object_signing_alg: Optional(oneOf(...validJWA)),\n\t\trequest_object_encryption_alg: Optional(oneOf(...validJWA)),\n\t\trequest_object_encryption_enc: Optional(oneOf(...validJWA)),\n\t\ttoken_endpoint_auth_method: Optional(oneOf(...validAuthMethods)),\n\t\ttoken_endpoint_auth_signing_alg: Optional(oneOf(...validJWA)),\n\t\tdefault_max_age: Optional(Number),\n\t\trequire_auth_time: Optional(Boolean),\n\t\tdefault_acr_values: Optional([String]),\n\t\tinitiate_login_uri: Optional([validURL]),\n\t\trequest_uris: Optional([validURL])\n\t}\n\n\tassert(options, {\n\t\tclient: Optional(instanceOf(metro.client().constructor)),\n\t\tregistration_endpoint: validURL, \n\t\tclient_info: openid_client_metadata\n\t})\n\n\tconst defaultOptions = {\n\t\tclient: metro.client().with(throwermw()).with(jsonmw()),\n\t\tclient_info: {\n\t\t\tredirect_uris: [ globalThis.document?.location.href ]\n\t\t}\n\t}\n\n\toptions = Object.assign({}, defaultOptions, options)\n\tif (!options.client_info) {\n\t\toptions.client_info = {}\n\t} \n\tif (!options.client_info.redirect_uris) {\n\t\toptions.client_info.redirect_uris = [ globalThis.document?.location.href ]\n\t}\n\tlet response = await options.client\n\t\t.post(options.registration_endpoint, {\n\t\t\tbody: options.client_info\n\t\t})\n\tlet info = response.data\n\tif (!info.client_id || !info.client_secret) {\n\t\tthrow metro.metroError('metro.oidc: Error: dynamic registration of client failed, no client_id or client_secret returned', response)\n\t}\n\toptions.client_info = Object.assign(options.client_info, info)\n\treturn options.client_info\n}", "export default function oidcStore(site) {\n\tlet store\n\tif (typeof localStorage !== 'undefined') {\n\t\tstore = {\n\t\t\tget: (name) => JSON.parse(localStorage.getItem('metro/oidc:'+site+':'+name)),\n\t\t\tset: (name, value) => localStorage.setItem('metro/oidc:'+site+':'+name, JSON.stringify(value)),\n\t\t\thas: (name) => localStorage.getItem('metro/oidc:'+site+':'+name)!==null\n\t\t}\n\t} else {\n\t\tlet storeMap = new Map()\n\t\tstore = {\n\t\t\tget: (name) => JSON.parse(storeMap.get('metro/oidc:'+site+':'+name)||null),\n\t\t\tset: (name, value) => storeMap.set('metro/oidc:'+site+':'+name, JSON.stringify(value)),\n\t\t\thas: (name) => storeMap.has('metro/oidc:'+site+':'+name)\n\t\t}\n\t}\n\treturn store\n}", "import * as metro from '@muze-nl/metro/src/metro.mjs'\nimport oauth2mw, * as oauth2 from '@muze-nl/metro-oauth2/src/oauth2.mjs'\nimport dpopmw from '@muze-nl/metro-oauth2/src/oauth2.dpop.mjs'\nimport { assert, Required, Optional, validURL, instanceOf } from '@muze-nl/assert'\nimport discover from './oidc.discovery.mjs'\nimport register from './oidc.register.mjs'\nimport oidcStore from './oidc.store.mjs'\n\nexport default function oidcmw(options={}) {\n\n\tconst defaultOptions = {\n\t\tclient: metro.client(),\n\t\tforce_authorization: false,\n\t\tuse_dpop: true,\n\t\tauthorize_callback: async url => {\n\t\t\tif (window.location.href != url.href) {\n\t\t\t\twindow.location.replace(url.href)\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t}\n\n\toptions = Object.assign({}, defaultOptions, options)\n\n\tassert(options, {\n\t\tclient: Required(instanceOf(metro.client().constructor)), // required because it is set in defaultOptions\n\t\tclient_info: Required(),\n\t\tissuer: Required(validURL),\n\t\toauth2: Optional({}),\n\t\topenid_configuration: Optional()\n\t})\n\n\tif (!options.store) {\n\t\toptions.store = oidcStore(options.issuer)\n\t}\n\tif (!options.openid_configuration && options.store.has('openid_configuration')) {\n\t\toptions.openid_configuration = options.store.get('openid_configuration')\n\t}\n\tif (!options.client_info?.client_id && options.store.has('client_info')) {\n\t\toptions.client_info = options.store.get('client_info')\n\t}\n\n\treturn async (req, next) => {\n\t\tlet res\n\t\tif (!options.force_authorization) {\n\t\t\ttry {\n\t\t\t\tres = await next(req)\n\t\t\t} catch(err) {\n\t\t\t\tif (res.status!=401 && res.status!=403) {\n\t\t\t\t\tthrow err\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (res.ok || (res.status!=401 && res.status!=403)) {\n\t\t\t\treturn res\n\t\t\t}\n\t\t}\n\t\tif (!options.openid_configuration) {\n\t\t\toptions.openid_configuration = await discover({\n\t\t\t\tissuer: options.issuer\n\t\t\t})\n\t\t\toptions.store.set('openid_configuration', options.openid_configuration)\n\t\t}\n\n\t\tif (!options.client_info?.client_id) {\n\t\t\tif (!options.openid_configuration.registration_endpoint) {\n\t\t\t\tthrow metro.metroError('metro.oidcmw: Error: issuer '+options.issuer+' does not support dynamic client registration, but you haven\\'t specified a client_id')\n\t\t\t}\n\t\t\toptions.client_info = await register({\n\t\t\t\tregistration_endpoint: options.openid_configuration.registration_endpoint,\n\t\t\t\tclient_info: options.client_info\n\t\t\t})\n\t\t\toptions.store.set('client_info', options.client_info)\n\t\t}\n\n\t\t// now initialize an oauth2 client stack, using options.client as default\n\t\t// with forceAuthentication: true\n\t\tconst scope = options.scope || 'openid'\n\n\t\tconst oauth2Options = Object.assign(\n\t\t\t{\n\t\t\t\tsite: options.issuer,\n\t\t\t\tclient: options.client,\n\t\t\t\tforce_authorization: true,\n\t\t\t\tauthorize_callback: options.authorize_callback,\n\t\t\t\toauth2_configuration: {\n\t\t\t\t\tclient_id: options.client_info?.client_id,\n\t\t\t\t\tclient_secret: options.client_info?.client_secret,\n\t\t\t\t\tgrant_type: 'authorization_code',\n\t\t\t\t\tresponse_type: 'code',\n\t\t\t\t\tresponse_mode: 'query',\n\t\t\t\t\tauthorization_endpoint: options.openid_configuration.authorization_endpoint,\n\t\t\t\t\ttoken_endpoint: options.openid_configuration.token_endpoint,\n\t\t\t\t\tscope, //FIXME: should only use scopes supported by server\n\t\t\t\t\tredirect_uri: options.client_info.redirect_uris[0]\n\t\t\t\t}\n\t\t\t}\n\t\t\t//...\n\t\t)\n\t\t\n\t\tconst storeIdToken = async (req, next) => {\n\t\t\tconst res = await next(req)\n\t\t\tconst contentType = res.headers.get('content-type')\n\t\t\tif (contentType?.startsWith('application/json')) {\n\t\t\t\t//FIXME: check that this is actually the token endpoint\n\t\t\t\tlet id_token = res.data?.id_token\n\t\t\t\tif (!id_token) {\n\t\t\t\t\tconst res2 = res.clone() // otherwise res.body can't be read again\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet data = await res2.json()\n\t\t\t\t\t\tif (data && data.id_token) {\n\t\t\t\t\t\t\tid_token = data.id_token\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t// ignore errors\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (id_token) {\n\t\t\t\t\toptions.store.set('id_token', id_token)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn res\n\t\t}\n\n\t\tlet oauth2client = options.client.with(options.issuer).with(storeIdToken)\n\n\t\tif (options.use_dpop) {\n\t\t\tconst dpopOptions = {\n\t\t\t\tsite: options.issuer,\n\t\t\t\tauthorization_endpoint: options.openid_configuration.authorization_endpoint,\n\t\t\t\ttoken_endpoint: options.openid_configuration.token_endpoint,\n\t\t\t\tdpop_signing_alg_values_supported: options.openid_configuration.dpop_signing_alg_values_supported\n\t\t\t}\n\t\t\toauth2client = oauth2client.with(dpopmw(dpopOptions)) // add DPoP headers in requests with Authorization headers\n\t\t\toauth2Options.client = oauth2client // make sure oath2 token request use dpop\n\t\t}\n\n\t\toauth2client = oauth2client.with(oauth2mw(oauth2Options))\n\n\t\tres = await oauth2client.fetch(req)\n\n\t\treturn res\n\t}\n\n}\n\nexport function isRedirected() {\n\treturn oauth2.isRedirected()\n}\n\nexport function idToken(options) {\n\tif (!options.store) {\n\t\tif (!options.issuer) {\n\t\t\tthrow metro.metroError('Must supply options.issuer or options.store to get the id_token')\n\t\t}\n\t\toptions.store = oidcStore(options.issuer)\n\t}\n\treturn options.store.get('id_token')\n}\n", "import metro from '@muze-nl/metro'\nimport oauth2 from '@muze-nl/metro-oauth2'\nimport oidcDiscover from './oidc.discovery.mjs'\nimport oidcRegister from './oidc.register.mjs'\nimport oidcmw, {isRedirected, idToken} from './oidcmw.mjs'\n\nconst oidc = {\n\toidcmw,\n\tdiscover: oidcDiscover,\n\tregister: oidcRegister,\n\tisRedirected,\n\tidToken\n}\n\nif (!globalThis.metro.oidc) {\n\tglobalThis.metro.oidc = oidc\n}\n\nexport default oidc", "export default function oldm(options) {\n\treturn new Context(options)\n}\n\nexport const rdfType = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'\n\nexport const prefixes = {\n\trdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n\tsolid: 'http://www.w3.org/ns/solid/terms#',\n\tschema: 'http://schema.org/',\n vcard: 'http://www.w3.org/2006/vcard/ns#'\n}\n\nexport class Context {\n\tconstructor(options) {\n\t\tthis.prefixes = {...prefixes, ...options?.prefixes}\n\t\tif (!this.prefixes['xsd']) {\n\t\t\tthis.prefixes['xsd'] = 'http://www.w3.org/2001/XMLSchema#'\n\t\t}\n\t\tthis.parser = options?.parser\n\t\tthis.writer = options?.writer\n\t\tthis.sources = Object.create(null)\n//\t\tthis.subjects = Object.create(null) // or use a proxy here? should contain all subjects from all sources, merged, readonly\n\t\tthis.separator = options?.separator ?? '$'\n\t}\n\n\tparse(input, url, type) {\n\t\tconst {quads, prefixes} = this.parser(input, url, type)\n\t\tif (prefixes) {\n\t\t\tfor (let prefix in prefixes) {\n\t\t\t\tlet prefixURL = prefixes[prefix]\n\t\t\t\tif (prefixURL.match(/^http(s?):\\/\\/$/i)) {\n\t\t\t\t\tprefixURL += url.substring(prefixURL.length)\n\t\t\t\t} else try {\n\t\t\t\t\tprefixURL = new URL(prefixes[prefix], url).href\n\t\t\t\t} catch(err) {\n\t\t\t\t\tconsole.error('Could not parse prefix', prefixes[prefix], err.message)\n\t\t\t\t}\n\n\t\t\t\tif (!this.prefixes[prefix]) {\n\t\t\t\t\tthis.prefixes[prefix] = prefixURL\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.sources[url] = new Graph(quads, url, type, prefixes, this)\n\t\treturn this.sources[url]\n\t}\n\n\tsetType(literal, shortType) {\n\t\tif (!shortType) {\n\t\t\treturn literal\n\t\t}\n\t\tif (typeof literal == 'string') {\n\t\t\tliteral = new String(literal)\n\t\t} else if (typeof result == 'number') {\n\t\t\tliteral = new Number(literal)\n\t\t}\n\t\tif (typeof literal !== 'object') {\n\t\t\tthrow new Error('cannot set type on ',literal,shortType)\n\t\t}\n\t\tliteral.type = shortType\n\t\treturn literal\n\t}\n\n\tgetType(literal) {\n\t\tif (literal && typeof literal == 'object') {\n\t\t\treturn literal.type\n\t\t}\n\t\treturn null\n\t}\n}\n\nexport class Graph {\n\t#blankNodes = Object.create(null)\n\n\tconstructor(quads, url, mimetype, prefixes, context) {\n\t\tthis.mimetype = mimetype\n\t\tthis.url = url\n\t\tthis.prefixes = prefixes\n\t\tthis.context = context\n\t\tthis.subjects = Object.create(null)\n\t\tfor (let quad of quads) {\n\t\t\tlet subject\n\t\t\tif (quad.subject.termType=='BlankNode') {\n\t\t\t\tlet shortPred = this.shortURI(quad.predicate.id,':')\n\t\t\t\tlet shortObj\n\t\t\t\tswitch(shortPred) {\n\t\t\t\t\tcase 'rdf:first':\n\t\t\t\t\t\tsubject = this.addCollection(quad.subject.id)\n\t\t\t\t\t\tshortObj = this.shortURI(quad.object.id, ':')\n\t\t\t\t\t\tif (shortObj!='rdf:nil') {\n\t\t\t\t\t\t\tconst value = this.getValue(quad.object)\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tsubject.push(value)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t\tcase 'rdf:rest':\n\t\t\t\t\t\tthis.#blankNodes[quad.object.id] = this.#blankNodes[quad.subject.id]\n\t\t\t\t\tcontinue\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsubject = this.addBlankNode(quad.subject.id)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsubject = this.addNamedNode(quad.subject.id)\n\t\t\t}\n\t\t\tsubject.addPredicate(quad.predicate.id, quad.object)\n\t\t}\n\t\tif (this.subjects[url]) {\n\t\t\tthis.primary = this.subjects[url]\n\t\t} else {\n\t\t\tthis.primary = null\n\t\t}\n\t\tObject.defineProperty(this, 'data', {\n\t\t\tget() {\n\t\t\t\treturn Object.values(this.subjects)\n\t\t\t}\n\t\t})\n\t}\n\n\taddNamedNode(uri) {\n\t\t// make sure any relative uri subject ids are fully qualified\n\t\tlet absURI = new URL(uri, this.url).href\n\t\tif (!this.subjects[absURI]) {\n\t\t\tthis.subjects[absURI] = new NamedNode(absURI, this)\n\t\t}\n\t\treturn this.subjects[absURI]\n\t}\n\n\taddBlankNode(id) {\n\t\tif (!this.#blankNodes[id]) {\n\t\t\tthis.#blankNodes[id] = new BlankNode(this)\n\t\t}\n\t\treturn this.#blankNodes[id]\n\t}\n\n\taddCollection(id) {\n\t\tif (!this.#blankNodes[id]) {\n\t\t\tthis.#blankNodes[id] = new Collection(this)\n\t\t}\n\t\treturn this.#blankNodes[id]\n\t}\n\n\twrite() {\n\t\treturn this.context.writer(this)\n\t}\n\n\tget(shortID) {\n\t\treturn this.subjects[this.fullURI(shortID)]\n\t}\n\n\tfullURI(shortURI, separator=null) {\n\t\tif (!separator) {\n\t\t\tseparator = this.context.separator\n\t\t}\n\t\tconst [prefix, path] = shortURI.split(separator)\n\t\tif (path) {\n\t\t\treturn this.prefixes[prefix]+path \n\t\t}\n\t\treturn shortURI\n\t}\n\n\tshortURI(fullURI, separator=null) {\n\t\tif (!separator) {\n\t\t\tseparator = this.context.separator\n\t\t}\n\t\tfor (let prefix in this.context.prefixes) {\n\t\t\tif (fullURI.startsWith(this.context.prefixes[prefix])) {\n\t\t\t\treturn prefix + separator + fullURI.substring(this.context.prefixes[prefix].length)\n\t\t\t}\n\t\t}\n\t\tif (this.url && fullURI.startsWith(this.url)) {\n\t\t\treturn fullURI.substring(this.url.length)\n\t\t}\n\t\treturn fullURI\n\t}\n\n\t/**\n\t * This sets the type of a literal, usually one of the xsd types\n\t */\n\tsetType(literal, type) {\n\t\tconst shortType = this.shortURI(type)\n\t\treturn this.context.setType(literal, shortType)\n\t}\n\n\t/**\n\t * This returns the type of a literal, or null\n\t */\n\tgetType(literal) {\n\t\treturn this.context.getType(literal)\n\t}\n\n\tsetLanguage(literal, language) {\n\t\tif (typeof literal == 'string') {\n\t\t\tliteral = new String(literal)\n\t\t} else if (typeof result == 'number') {\n\t\t\tliteral = new Number(literal)\n\t\t}\n\t\tif (typeof literal !== 'object') {\n\t\t\tthrow new Error('cannot set language on ',literal)\n\t\t}\n\t\tliteral.language = language\n\t\treturn literal\n\t}\n\n\tgetValue(object) {\n\t\tlet result\n\t\tif (object.termType=='Literal') {\n\t\t\tresult = object.value\n\t\t\tlet datatype = object.datatype?.id\n\t\t\tif (datatype) {\n\t\t\t\tresult = this.setType(result, datatype)\n\t\t\t}\n\t\t\tlet language = object.language\n\t\t\tif (language) {\n\t\t\t\tresult = this.setLanguage(result, language)\n\t\t\t}\n\t\t} else if (object.termType=='BlankNode') {\n\t\t\tresult = this.addBlankNode(object.id)\n\t\t} else {\n\t\t\tresult = this.addNamedNode(object.id)\n\t\t}\n\t\treturn result\n\t}\n\n\n}\n\nexport class BlankNode {\n\n\tconstructor(graph) {\n\t\tObject.defineProperty(this, 'graph', {\n\t\t\tvalue: graph,\n\t\t\twritable: false,\n\t\t\tenumerable: false\n\t\t})\n\t}\n\n\taddPredicate(predicate, object) {\n\t\tif (predicate.id) {\n\t\t\tpredicate = predicate.id\n\t\t}\n\t\tif (predicate==rdfType) {\n\t\t\tlet type = this.graph.shortURI(object.id)\n\t\t\tthis.addType(type)\n\t\t} else {\n\t\t\tconst value = this.graph.getValue(object)\n\t\t\tpredicate = this.graph.shortURI(predicate)\n\t\t\tif (!this[predicate]) {\n\t\t\t\tthis[predicate] = value\n\t\t\t} else if (Array.isArray(this[predicate])) {\n\t\t\t\tthis[predicate].push(value)\n\t\t\t} else {\n\t\t\t\tthis[predicate] = [ this[predicate], value]\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Adds a rdfType value, stored in this.a\n\t * Subjects can have more than one type (or class), unlike literals\n\t * The type value can be any URI, xsdTypes are unexpected here\n\t */\n\taddType(type) {\n\t\tif (!this.a) {\n\t\t\tthis.a = type\n\t\t} else {\n\t\t\tif (!Array.isArray(this.a)) {\n\t\t\t\tthis.a = [ this.a ]\n\t\t\t}\n\t\t\tthis.a.push(type)\n\t\t}\n\t}\n}\n\nexport class NamedNode extends BlankNode {\n\tconstructor(id, graph) {\n\t\tsuper(graph)\n\t\tObject.defineProperty(this, 'id', {\n\t\t\tvalue: id,\n\t\t\twritable: false,\n\t\t\tenumerable: true\n\t\t})\n\t}\n}\n\nexport class Collection extends Array {\n\n\tconstructor(id, graph) {\n\t\tsuper()\n\t\tObject.defineProperty(this, 'graph', {\n\t\t\tvalue: graph,\n\t\t\twritable: false,\n\t\t\tenumerable: false\n\t\t})\n\t}\n\n}", "import {rdfType, NamedNode, BlankNode, Collection} from './oldm.mjs'\nimport n3 from 'n3'\n\nexport const n3Parser = (input, uri, type) => {\n\tconst parser = new n3.Parser({\n blankNodePrefix: '',\n format: type\n })\n let prefixes = Object.create(null) // clean object without prototype\n const quads = parser.parse(input, null, (prefix,url) => {\n prefixes[prefix] = url.id\n })\n return { quads, prefixes }\n}\n\n/**\n * Loops over all subjects in a source\n * and writes quads using n3.Writer\n * NamedNode objects are also in the subjects list, so\n * only need their object.id in a quad\n * BlankNodes use writer.blank, lists (collection) writer.list\n * blank expects an array of [predicate, object] pairs\n * so only write object blanks, lists and literals, use object.id for the rest\n */\nexport const n3Writer = (source) => {\n\treturn new Promise((resolve, reject) => {\n\t\tconst writer = new n3.Writer({\n\t\t\tformat: source.type,\n\t\t\tprefixes: {...source.prefixes}\n\t\t})\n\t\tconst xsd = source.prefixes.xsd\n\t\tconst {quad, namedNode, literal, blankNode} = n3.DataFactory\n\n\t\tconst writeClassNames = (id, subject) => {\n\t\t\tlet classNames = subject.a\n\t\t\tif (!Array.isArray(classNames)) {\n\t\t\t\tclassNames = [ classNames ]\n\t\t\t}\n\t\t\tif (classNames?.length) {\n\t\t\t\tfor(let name of classNames) {\n\t\t\t\t\tname = source.fullURI(name)\n\t\t\t\t\twriter.addQuad(quad(\n\t\t\t\t\t\tnamedNode(id),\n\t\t\t\t\t\tnamedNode(rdfType),\n\t\t\t\t\t\tnamedNode(name)\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\n\t\tconst writeProperties = (id, subject) => {\n\t\t\tif (!subject) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tlet preds = getPredicates(subject)\n\t\t\tfor (let pred of preds) {\n\t\t\t\tif (!Array.isArray(pred.object)) {\n\t\t\t\t\tpred.object = [ pred.object ]\n\t\t\t\t}\n\t\t\t\tfor (let o of pred.object ) {\n\t\t\t\t\twriter.addQuad(quad(\n\t\t\t\t\t\tnamedNode(id),\n\t\t\t\t\t\tpred.predicate,\n\t\t\t\t\t\to\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst getPredicates = (object) => {\n\t\t\tlet preds = []\n\t\t\tObject.entries(object).forEach(entry => {\n\t\t\t\tconst predicate = entry[0]\n\t\t\t\tlet object = entry[1]\n\t\t\t\tconst fullPred = source.fullURI(predicate)\n\t\t\t\tlet pred = {\n\t\t\t\t\tpredicate: namedNode(fullPred)\n\t\t\t\t}\n\t\t\t\tif (object instanceof Collection) {\n\t\t\t\t\tpred.object = getCollection(object)\n\t\t\t\t} else if (Array.isArray(object)) {\n\t\t\t\t\tpred.object = getArray(object)\n\t\t\t\t} else if (object instanceof NamedNode) {\n\t\t\t\t\tpred.object = namedNode(object.id)\n\t\t\t\t} else if (object instanceof BlankNode) {\n\t\t\t\t\tpred.object = getBlankNode(object)\n\t\t\t\t} else if (isLiteral(object)) {\n\t\t\t\t\tpred.object = getLiteral(object)\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('weird object',object, predicate)\n\t\t\t\t}\n\t\t\t\tpreds.push(pred)\n\t\t\t})\n\t\t\treturn preds\n\t\t}\n\n\t\tconst getLiteral = (object) => {\n\t\t\tlet type = source.getType(object) || null\n\t\t\tif (type) {\n\t\t\t\tif (type == xsd+source.context.separator+'string' \n\t\t\t\t\t|| type == xsd+source.context.separator+'number') {\n\t\t\t\t\ttype = null\n\t\t\t\t} else {\n\t\t\t\t\ttype = source.fullURI(type)\n\t\t\t\t}\n\t\t\t\ttype = namedNode(type)\n\t\t\t} else {\n\t\t\t\tlet language = object?.language\n\t\t\t\tif (language) {\n\t\t\t\t\ttype = language // is automatically detected as language by literal()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (object instanceof String) {\n\t\t\t\tobject = ''+object\n\t\t\t} else if (object instanceof Number) {\n\t\t\t\tobject = +object\n\t\t\t}\n\t\t\treturn literal(object, type)\n\t\t}\n\n\t\tconst isLiteral = (value) => {\n\t\t\treturn (\n\t\t\t\tvalue instanceof String \n\t\t\t\t|| value instanceof Number\n\t\t\t\t|| typeof value == 'boolean' \n\t\t\t\t|| typeof value == 'string' \n\t\t\t\t|| typeof value == 'number'\n\t\t\t)\n\t\t}\n\n\t\tconst getCollection = (object) => {\n\t\t\tlet list = []\n\t\t\tfor (let value of object) {\n\t\t\t\tif (isLiteral(value)) {\n\t\t\t\t\tlist.push(getLiteral(value))\n\t\t\t\t} else if (value.id) {\n\t\t\t\t\tlist.push(namedNode(value.id))\n\t\t\t\t} else {\n\t\t\t\t\tlist.push(getBlankNode(value))\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn writer.list(list)\n\t\t}\n\n\n\t\tconst getBlankNode = (object) => {\n\t\t\treturn writer.blank(getPredicates(object))\n\t\t}\n\n\t\tconst getArray = (id, object) => {\n\t\t\t// array is a list of objects\n\t\t\t// either object.id (named node)\n\t\t\t// literal\n\t\t\t// blank\n\t\t\t// or list\n\t\t\tlet list = []\n\t\t\tfor (const o of object) {\n\t\t\t\tif (isLiteral(o)) {\n\t\t\t\t\tlist.push(getLiteral(o))\n\t\t\t\t} else if (o instanceof NamedNode) {\n\t\t\t\t\tlist.push(namedNode(o.id))\n\t\t\t\t} else if (o instanceof BlankNode) {\n\t\t\t\t\tlist.push(getBlankNode(o))\n\t\t\t\t} else if (o instanceof Collection) {\n\t\t\t\t\tlist.push(getCollection(o))\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn list\n\t\t}\n\n\t\tObject.entries(source.subjects).forEach(([id,subject]) => {\n\t\t\tid = source.shortURI(id, ':')\n\t\t\t\n\t\t\twriteClassNames(id, subject)\n\n\t\t\twriteProperties(id, subject)\t\t\t\n\t\t})\n\n\t\twriter.end((error, result) => {\n\t\t\tif (result) {\n\t\t\t\tresolve(result)\n\t\t\t} else {\n\t\t\t\treject(error)\n\t\t\t}\n\t\t})\n\t})\n}\n", "// **N3Lexer** tokenizes N3 documents.\nimport { Buffer } from 'buffer';\nimport namespaces from './IRIs';\n\nconst { xsd } = namespaces;\n\n// Regular expression and replacement string to escape N3 strings\nconst escapeSequence = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{8})|\\\\([^])/g;\nconst escapeReplacements = {\n '\\\\': '\\\\', \"'\": \"'\", '\"': '\"',\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'f': '\\f', 'b': '\\b',\n '_': '_', '~': '~', '.': '.', '-': '-', '!': '!', '$': '$', '&': '&',\n '(': '(', ')': ')', '*': '*', '+': '+', ',': ',', ';': ';', '=': '=',\n '/': '/', '?': '?', '#': '#', '@': '@', '%': '%',\n};\nconst illegalIriChars = /[\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]/;\n\nconst lineModeRegExps = {\n _iri: true,\n _unescapedIri: true,\n _simpleQuotedString: true,\n _langcode: true,\n _blank: true,\n _newline: true,\n _comment: true,\n _whitespace: true,\n _endOfFile: true,\n};\nconst invalidRegExp = /$0^/;\n\n// ## Constructor\nexport default class N3Lexer {\n constructor(options) {\n // ## Regular expressions\n // It's slightly faster to have these as properties than as in-scope variables\n this._iri = /^<((?:[^ <>{}\\\\]|\\\\[uU])+)>[ \\t]*/; // IRI with escape sequences; needs sanity check after unescaping\n this._unescapedIri = /^<([^\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]*)>[ \\t]*/; // IRI without escape sequences; no unescaping\n this._simpleQuotedString = /^\"([^\"\\\\\\r\\n]*)\"(?=[^\"])/; // string without escape sequences\n this._simpleApostropheString = /^'([^'\\\\\\r\\n]*)'(?=[^'])/;\n this._langcode = /^@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9\\-])/i;\n this._prefix = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:(?=[#\\s<])/;\n this._prefixed = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:((?:(?:[0-:A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])(?:(?:[\\.\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])*(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~]))?)?)(?:[ \\t]+|(?=\\.?[,;!\\^\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._variable = /^\\?(?:(?:[A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?=[.,;!\\^\\s#()\\[\\]\\{\\}\"'<>])/;\n this._blank = /^_:((?:[0-9A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?:[ \\t]+|(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._number = /^[\\-+]?(?:(\\d+\\.\\d*|\\.?\\d+)[eE][\\-+]?|\\d*(\\.)?)\\d+(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>])/;\n this._boolean = /^(?:true|false)(?=[.,;\\s#()\\[\\]\\{\\}\"'<>])/;\n this._keyword = /^@[a-z]+(?=[\\s#<:])/i;\n this._sparqlKeyword = /^(?:PREFIX|BASE|GRAPH)(?=[\\s#<])/i;\n this._shortPredicates = /^a(?=[\\s#()\\[\\]\\{\\}\"'<>])/;\n this._newline = /^[ \\t]*(?:#[^\\n\\r]*)?(?:\\r\\n|\\n|\\r)[ \\t]*/;\n this._comment = /#([^\\n\\r]*)/;\n this._whitespace = /^[ \\t]+/;\n this._endOfFile = /^(?:#[^\\n\\r]*)?$/;\n options = options || {};\n\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n\n // In line mode (N-Triples or N-Quads), only simple features may be parsed\n if (this._lineMode = !!options.lineMode) {\n this._n3Mode = false;\n // Don't tokenize special literals\n for (const key in this) {\n if (!(key in lineModeRegExps) && this[key] instanceof RegExp)\n this[key] = invalidRegExp;\n }\n }\n // When not in line mode, enable N3 functionality by default\n else {\n this._n3Mode = options.n3 !== false;\n }\n // Don't output comment tokens by default\n this.comments = !!options.comments;\n // Cache the last tested closing position of long literals\n this._literalClosingPos = 0;\n }\n\n // ## Private methods\n\n // ### `_tokenizeToEnd` tokenizes as for as possible, emitting tokens through the callback\n _tokenizeToEnd(callback, inputFinished) {\n // Continue parsing as far as possible; the loop will return eventually\n let input = this._input;\n let currentLineLength = input.length;\n while (true) {\n // Count and skip whitespace lines\n let whiteSpaceMatch, comment;\n while (whiteSpaceMatch = this._newline.exec(input)) {\n // Try to find a comment\n if (this.comments && (comment = this._comment.exec(whiteSpaceMatch[0])))\n emitToken('comment', comment[1], '', this._line, whiteSpaceMatch[0].length);\n // Advance the input\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n currentLineLength = input.length;\n this._line++;\n }\n // Skip whitespace on current line\n if (!whiteSpaceMatch && (whiteSpaceMatch = this._whitespace.exec(input)))\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n\n // Stop for now if we're at the end\n if (this._endOfFile.test(input)) {\n // If the input is finished, emit EOF\n if (inputFinished) {\n // Try to find a final comment\n if (this.comments && (comment = this._comment.exec(input)))\n emitToken('comment', comment[1], '', this._line, input.length);\n input = null;\n emitToken('eof', '', '', this._line, 0);\n }\n return this._input = input;\n }\n\n // Look for specific token types based on the first character\n const line = this._line, firstChar = input[0];\n let type = '', value = '', prefix = '',\n match = null, matchLength = 0, inconclusive = false;\n switch (firstChar) {\n case '^':\n // We need at least 3 tokens lookahead to distinguish ^^<IRI> and ^^pre:fixed\n if (input.length < 3)\n break;\n // Try to match a type\n else if (input[1] === '^') {\n this._previousMarker = '^^';\n // Move to type IRI or prefixed name\n input = input.substr(2);\n if (input[0] !== '<') {\n inconclusive = true;\n break;\n }\n }\n // If no type, it must be a path expression\n else {\n if (this._n3Mode) {\n matchLength = 1;\n type = '^';\n }\n break;\n }\n // Fall through in case the type is an IRI\n case '<':\n // Try to find a full IRI without escape sequences\n if (match = this._unescapedIri.exec(input))\n type = 'IRI', value = match[1];\n // Try to find a full IRI with escape sequences\n else if (match = this._iri.exec(input)) {\n value = this._unescape(match[1]);\n if (value === null || illegalIriChars.test(value))\n return reportSyntaxError(this);\n type = 'IRI';\n }\n // Try to find a nested triple\n else if (input.length > 1 && input[1] === '<')\n type = '<<', matchLength = 2;\n // Try to find a backwards implication arrow\n else if (this._n3Mode && input.length > 1 && input[1] === '=') {\n matchLength = 2;\n if (this._isImpliedBy) type = 'abbreviation', value = '<';\n else type = 'inverse', value = '>';\n }\n break;\n\n case '>':\n if (input.length > 1 && input[1] === '>')\n type = '>>', matchLength = 2;\n break;\n\n case '_':\n // Try to find a blank node. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a blank node.\n // Therefore, try inserting a space if we're at the end of the input.\n if ((match = this._blank.exec(input)) ||\n inputFinished && (match = this._blank.exec(`${input} `)))\n type = 'blank', prefix = '_', value = match[1];\n break;\n\n case '\"':\n // Try to find a literal without escape sequences\n if (match = this._simpleQuotedString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n break;\n\n case \"'\":\n if (!this._lineMode) {\n // Try to find a literal without escape sequences\n if (match = this._simpleApostropheString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n }\n break;\n\n case '?':\n // Try to find a variable\n if (this._n3Mode && (match = this._variable.exec(input)))\n type = 'var', value = match[0];\n break;\n\n case '@':\n // Try to find a language code\n if (this._previousMarker === 'literal' && (match = this._langcode.exec(input)))\n type = 'langcode', value = match[1];\n // Try to find a keyword\n else if (match = this._keyword.exec(input))\n type = match[0];\n break;\n\n case '.':\n // Try to find a dot as punctuation\n if (input.length === 1 ? inputFinished : (input[1] < '0' || input[1] > '9')) {\n type = '.';\n matchLength = 1;\n break;\n }\n // Fall through to numerical case (could be a decimal dot)\n\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '+':\n case '-':\n // Try to find a number. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a number.\n // Therefore, try inserting a space if we're at the end of the input.\n if (match = this._number.exec(input) ||\n inputFinished && (match = this._number.exec(`${input} `))) {\n type = 'literal', value = match[0];\n prefix = (typeof match[1] === 'string' ? xsd.double :\n (typeof match[2] === 'string' ? xsd.decimal : xsd.integer));\n }\n break;\n\n case 'B':\n case 'b':\n case 'p':\n case 'P':\n case 'G':\n case 'g':\n // Try to find a SPARQL-style keyword\n if (match = this._sparqlKeyword.exec(input))\n type = match[0].toUpperCase();\n else\n inconclusive = true;\n break;\n\n case 'f':\n case 't':\n // Try to match a boolean\n if (match = this._boolean.exec(input))\n type = 'literal', value = match[0], prefix = xsd.boolean;\n else\n inconclusive = true;\n break;\n\n case 'a':\n // Try to find an abbreviated predicate\n if (match = this._shortPredicates.exec(input))\n type = 'abbreviation', value = 'a';\n else\n inconclusive = true;\n break;\n\n case '=':\n // Try to find an implication arrow or equals sign\n if (this._n3Mode && input.length > 1) {\n type = 'abbreviation';\n if (input[1] !== '>')\n matchLength = 1, value = '=';\n else\n matchLength = 2, value = '>';\n }\n break;\n\n case '!':\n if (!this._n3Mode)\n break;\n case ',':\n case ';':\n case '[':\n case ']':\n case '(':\n case ')':\n case '}':\n if (!this._lineMode) {\n matchLength = 1;\n type = firstChar;\n }\n break;\n case '{':\n // We need at least 2 tokens lookahead to distinguish \"{|\" and \"{ \"\n if (!this._lineMode && input.length >= 2) {\n // Try to find a quoted triple annotation start\n if (input[1] === '|')\n type = '{|', matchLength = 2;\n else\n type = firstChar, matchLength = 1;\n }\n break;\n case '|':\n // We need 2 tokens lookahead to parse \"|}\"\n // Try to find a quoted triple annotation end\n if (input.length >= 2 && input[1] === '}')\n type = '|}', matchLength = 2;\n break;\n\n default:\n inconclusive = true;\n }\n\n // Some first characters do not allow an immediate decision, so inspect more\n if (inconclusive) {\n // Try to find a prefix\n if ((this._previousMarker === '@prefix' || this._previousMarker === 'PREFIX') &&\n (match = this._prefix.exec(input)))\n type = 'prefix', value = match[1] || '';\n // Try to find a prefixed name. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a prefixed name.\n // Therefore, try inserting a space if we're at the end of the input.\n else if ((match = this._prefixed.exec(input)) ||\n inputFinished && (match = this._prefixed.exec(`${input} `)))\n type = 'prefixed', prefix = match[1] || '', value = this._unescape(match[2]);\n }\n\n // A type token is special: it can only be emitted after an IRI or prefixed name is read\n if (this._previousMarker === '^^') {\n switch (type) {\n case 'prefixed': type = 'type'; break;\n case 'IRI': type = 'typeIRI'; break;\n default: type = '';\n }\n }\n\n // What if nothing of the above was found?\n if (!type) {\n // We could be in streaming mode, and then we just wait for more input to arrive.\n // Otherwise, a syntax error has occurred in the input.\n // One exception: error on an unaccounted linebreak (= not inside a triple-quoted literal).\n if (inputFinished || (!/^'''|^\"\"\"/.test(input) && /\\n|\\r/.test(input)))\n return reportSyntaxError(this);\n else\n return this._input = input;\n }\n\n // Emit the parsed token\n const length = matchLength || match[0].length;\n const token = emitToken(type, value, prefix, line, length);\n this.previousToken = token;\n this._previousMarker = type;\n\n // Advance to next part to tokenize\n input = input.substr(length, input.length);\n }\n\n // Emits the token through the callback\n function emitToken(type, value, prefix, line, length) {\n const start = input ? currentLineLength - input.length : currentLineLength;\n const end = start + length;\n const token = { type, value, prefix, line, start, end };\n callback(null, token);\n return token;\n }\n // Signals the syntax error through the callback\n function reportSyntaxError(self) { callback(self._syntaxError(/^\\S*/.exec(input)[0])); }\n }\n\n // ### `_unescape` replaces N3 escape codes by their corresponding characters\n _unescape(item) {\n let invalid = false;\n const replaced = item.replace(escapeSequence, (sequence, unicode4, unicode8, escapedChar) => {\n // 4-digit unicode character\n if (typeof unicode4 === 'string')\n return String.fromCharCode(Number.parseInt(unicode4, 16));\n // 8-digit unicode character\n if (typeof unicode8 === 'string') {\n let charCode = Number.parseInt(unicode8, 16);\n return charCode <= 0xFFFF ? String.fromCharCode(Number.parseInt(unicode8, 16)) :\n String.fromCharCode(0xD800 + ((charCode -= 0x10000) >> 10), 0xDC00 + (charCode & 0x3FF));\n }\n // fixed escape sequence\n if (escapedChar in escapeReplacements)\n return escapeReplacements[escapedChar];\n // invalid escape sequence\n invalid = true;\n return '';\n });\n return invalid ? null : replaced;\n }\n\n // ### `_parseLiteral` parses a literal into an unescaped value\n _parseLiteral(input) {\n // Ensure we have enough lookahead to identify triple-quoted strings\n if (input.length >= 3) {\n // Identify the opening quote(s)\n const opening = input.match(/^(?:\"\"\"|\"|'''|'|)/)[0];\n const openingLength = opening.length;\n\n // Find the next candidate closing quotes\n let closingPos = Math.max(this._literalClosingPos, openingLength);\n while ((closingPos = input.indexOf(opening, closingPos)) > 0) {\n // Count backslashes right before the closing quotes\n let backslashCount = 0;\n while (input[closingPos - backslashCount - 1] === '\\\\')\n backslashCount++;\n\n // An even number of backslashes (in particular 0)\n // means these are actual, non-escaped closing quotes\n if (backslashCount % 2 === 0) {\n // Extract and unescape the value\n const raw = input.substring(openingLength, closingPos);\n const lines = raw.split(/\\r\\n|\\r|\\n/).length - 1;\n const matchLength = closingPos + openingLength;\n // Only triple-quoted strings can be multi-line\n if (openingLength === 1 && lines !== 0 ||\n openingLength === 3 && this._lineMode)\n break;\n this._line += lines;\n return { value: this._unescape(raw), matchLength };\n }\n closingPos++;\n }\n this._literalClosingPos = input.length - openingLength + 1;\n }\n return { value: '', matchLength: 0 };\n }\n\n // ### `_syntaxError` creates a syntax error for the given issue\n _syntaxError(issue) {\n this._input = null;\n const err = new Error(`Unexpected \"${issue}\" on line ${this._line}.`);\n err.context = {\n token: undefined,\n line: this._line,\n previousToken: this.previousToken,\n };\n return err;\n }\n\n // ### Strips off any starting UTF BOM mark.\n _readStartingBom(input) {\n return input.startsWith('\\ufeff') ? input.substr(1) : input;\n }\n\n // ## Public methods\n\n // ### `tokenize` starts the transformation of an N3 document into an array of tokens.\n // The input can be a string or a stream.\n tokenize(input, callback) {\n this._line = 1;\n\n // If the input is a string, continuously emit tokens through the callback until the end\n if (typeof input === 'string') {\n this._input = this._readStartingBom(input);\n // If a callback was passed, asynchronously call it\n if (typeof callback === 'function')\n queueMicrotask(() => this._tokenizeToEnd(callback, true));\n // If no callback was passed, tokenize synchronously and return\n else {\n const tokens = [];\n let error;\n this._tokenizeToEnd((e, t) => e ? (error = e) : tokens.push(t), true);\n if (error) throw error;\n return tokens;\n }\n }\n // Otherwise, the input must be a stream\n else {\n this._pendingBuffer = null;\n if (typeof input.setEncoding === 'function')\n input.setEncoding('utf8');\n // Adds the data chunk to the buffer and parses as far as possible\n input.on('data', data => {\n if (this._input !== null && data.length !== 0) {\n // Prepend any previous pending writes\n if (this._pendingBuffer) {\n data = Buffer.concat([this._pendingBuffer, data]);\n this._pendingBuffer = null;\n }\n // Hold if the buffer ends in an incomplete unicode sequence\n if (data[data.length - 1] & 0x80) {\n this._pendingBuffer = data;\n }\n // Otherwise, tokenize as far as possible\n else {\n // Only read a BOM at the start\n if (typeof this._input === 'undefined')\n this._input = this._readStartingBom(typeof data === 'string' ? data : data.toString());\n else\n this._input += data;\n this._tokenizeToEnd(callback, false);\n }\n }\n });\n // Parses until the end\n input.on('end', () => {\n if (typeof this._input === 'string')\n this._tokenizeToEnd(callback, true);\n });\n input.on('error', callback);\n }\n }\n}\n", "const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n XSD = 'http://www.w3.org/2001/XMLSchema#',\n SWAP = 'http://www.w3.org/2000/10/swap/';\n\nexport default {\n xsd: {\n decimal: `${XSD}decimal`,\n boolean: `${XSD}boolean`,\n double: `${XSD}double`,\n integer: `${XSD}integer`,\n string: `${XSD}string`,\n },\n rdf: {\n type: `${RDF}type`,\n nil: `${RDF}nil`,\n first: `${RDF}first`,\n rest: `${RDF}rest`,\n langString: `${RDF}langString`,\n },\n owl: {\n sameAs: 'http://www.w3.org/2002/07/owl#sameAs',\n },\n r: {\n forSome: `${SWAP}reify#forSome`,\n forAll: `${SWAP}reify#forAll`,\n },\n log: {\n implies: `${SWAP}log#implies`,\n isImpliedBy: `${SWAP}log#isImpliedBy`,\n },\n};\n", "// N3.js implementations of the RDF/JS core data types\n// See http://rdf.js.org/data-model-spec/\n\nimport namespaces from './IRIs';\n\nconst { rdf, xsd } = namespaces;\n\n// eslint-disable-next-line prefer-const\nlet DEFAULTGRAPH;\nlet _blankNodeCounter = 0;\n\nconst escapedLiteral = /^\"(.*\".*)(?=\"[^\"]*$)/;\n\n// ## DataFactory singleton\nconst DataFactory = {\n namedNode,\n blankNode,\n variable,\n literal,\n defaultGraph,\n quad,\n triple: quad,\n fromTerm,\n fromQuad,\n};\nexport default DataFactory;\n\n// ## Term constructor\nexport class Term {\n constructor(id) {\n this.id = id;\n }\n\n // ### The value of this term\n get value() {\n return this.id;\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through ids\n if (other instanceof Term)\n return this.id === other.id;\n // Otherwise, compare term type and value\n return !!other && this.termType === other.termType &&\n this.value === other.value;\n }\n\n // ### Implement hashCode for Immutable.js, since we implement `equals`\n // https://immutable-js.com/docs/v4.0.0/ValueObject/#hashCode()\n hashCode() {\n return 0;\n }\n\n // ### Returns a plain object representation of this term\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n };\n }\n}\n\n\n// ## NamedNode constructor\nexport class NamedNode extends Term {\n // ### The term type of this term\n get termType() {\n return 'NamedNode';\n }\n}\n\n// ## Literal constructor\nexport class Literal extends Term {\n // ### The term type of this term\n get termType() {\n return 'Literal';\n }\n\n // ### The text value of this literal\n get value() {\n return this.id.substring(1, this.id.lastIndexOf('\"'));\n }\n\n // ### The language of this literal\n get language() {\n // Find the last quotation mark (e.g., '\"abc\"@en-us')\n const id = this.id;\n let atPos = id.lastIndexOf('\"') + 1;\n // If \"@\" it follows, return the remaining substring; empty otherwise\n return atPos < id.length && id[atPos++] === '@' ? id.substr(atPos).toLowerCase() : '';\n }\n\n // ### The datatype IRI of this literal\n get datatype() {\n return new NamedNode(this.datatypeString);\n }\n\n // ### The datatype string of this literal\n get datatypeString() {\n // Find the last quotation mark (e.g., '\"abc\"^^http://ex.org/types#t')\n const id = this.id, dtPos = id.lastIndexOf('\"') + 1;\n const char = dtPos < id.length ? id[dtPos] : '';\n // If \"^\" it follows, return the remaining substring\n return char === '^' ? id.substr(dtPos + 2) :\n // If \"@\" follows, return rdf:langString; xsd:string otherwise\n (char !== '@' ? xsd.string : rdf.langString);\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both literals were created by this library,\n // equality can be computed through ids\n if (other instanceof Literal)\n return this.id === other.id;\n // Otherwise, compare term type, value, language, and datatype\n return !!other && !!other.datatype &&\n this.termType === other.termType &&\n this.value === other.value &&\n this.language === other.language &&\n this.datatype.value === other.datatype.value;\n }\n\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n language: this.language,\n datatype: { termType: 'NamedNode', value: this.datatypeString },\n };\n }\n}\n\n// ## BlankNode constructor\nexport class BlankNode extends Term {\n constructor(name) {\n super(`_:${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'BlankNode';\n }\n\n // ### The name of this blank node\n get value() {\n return this.id.substr(2);\n }\n}\n\nexport class Variable extends Term {\n constructor(name) {\n super(`?${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'Variable';\n }\n\n // ### The name of this variable\n get value() {\n return this.id.substr(1);\n }\n}\n\n// ## DefaultGraph constructor\nexport class DefaultGraph extends Term {\n constructor() {\n super('');\n return DEFAULTGRAPH || this;\n }\n\n // ### The term type of this term\n get termType() {\n return 'DefaultGraph';\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through strict equality;\n // otherwise, compare term types.\n return (this === other) || (!!other && (this.termType === other.termType));\n }\n}\n\n// ## DefaultGraph singleton\nDEFAULTGRAPH = new DefaultGraph();\n\n// ### Constructs a term from the given internal string ID\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termFromId(id, factory, nested) {\n factory = factory || DataFactory;\n\n // Falsy value or empty string indicate the default graph\n if (!id)\n return factory.defaultGraph();\n\n // Identify the term type based on the first character\n switch (id[0]) {\n case '?':\n return factory.variable(id.substr(1));\n case '_':\n return factory.blankNode(id.substr(2));\n case '\"':\n // Shortcut for internal literals\n if (factory === DataFactory)\n return new Literal(id);\n // Literal without datatype or language\n if (id[id.length - 1] === '\"')\n return factory.literal(id.substr(1, id.length - 2));\n // Literal with datatype or language\n const endPos = id.lastIndexOf('\"', id.length - 1);\n return factory.literal(id.substr(1, endPos - 1),\n id[endPos + 1] === '@' ? id.substr(endPos + 2)\n : factory.namedNode(id.substr(endPos + 3)));\n case '[':\n id = JSON.parse(id);\n break;\n default:\n if (!nested || !Array.isArray(id)) {\n return factory.namedNode(id);\n }\n }\n return factory.quad(\n termFromId(id[0], factory, true),\n termFromId(id[1], factory, true),\n termFromId(id[2], factory, true),\n id[3] && termFromId(id[3], factory, true),\n );\n}\n\n// ### Constructs an internal string ID from the given term or ID string\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termToId(term, nested) {\n if (typeof term === 'string')\n return term;\n if (term instanceof Term && term.termType !== 'Quad')\n return term.id;\n if (!term)\n return DEFAULTGRAPH.id;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return term.value;\n case 'BlankNode': return `_:${term.value}`;\n case 'Variable': return `?${term.value}`;\n case 'DefaultGraph': return '';\n case 'Literal': return `\"${term.value}\"${\n term.language ? `@${term.language}` :\n (term.datatype && term.datatype.value !== xsd.string ? `^^${term.datatype.value}` : '')}`;\n case 'Quad':\n const res = [\n termToId(term.subject, true),\n termToId(term.predicate, true),\n termToId(term.object, true),\n ];\n if (term.graph && term.graph.termType !== 'DefaultGraph') {\n res.push(termToId(term.graph, true));\n }\n return nested ? res : JSON.stringify(res);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\n\n// ## Quad constructor\nexport class Quad extends Term {\n constructor(subject, predicate, object, graph) {\n super('');\n this._subject = subject;\n this._predicate = predicate;\n this._object = object;\n this._graph = graph || DEFAULTGRAPH;\n }\n\n // ### The term type of this term\n get termType() {\n return 'Quad';\n }\n\n get subject() {\n return this._subject;\n }\n\n get predicate() {\n return this._predicate;\n }\n\n get object() {\n return this._object;\n }\n\n get graph() {\n return this._graph;\n }\n\n // ### Returns a plain object representation of this quad\n toJSON() {\n return {\n termType: this.termType,\n subject: this._subject.toJSON(),\n predicate: this._predicate.toJSON(),\n object: this._object.toJSON(),\n graph: this._graph.toJSON(),\n };\n }\n\n // ### Returns whether this object represents the same quad as the other\n equals(other) {\n return !!other && this._subject.equals(other.subject) &&\n this._predicate.equals(other.predicate) &&\n this._object.equals(other.object) &&\n this._graph.equals(other.graph);\n }\n}\nexport { Quad as Triple };\n\n// ### Escapes the quotes within the given literal\nexport function escapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"/g, '\"\"')}`);\n}\n\n// ### Unescapes the quotes within the given literal\nexport function unescapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"\"/g, '\"')}`);\n}\n\n// ### Creates an IRI\nfunction namedNode(iri) {\n return new NamedNode(iri);\n}\n\n// ### Creates a blank node\nfunction blankNode(name) {\n return new BlankNode(name || `n3-${_blankNodeCounter++}`);\n}\n\n// ### Creates a literal\nfunction literal(value, languageOrDataType) {\n // Create a language-tagged string\n if (typeof languageOrDataType === 'string')\n return new Literal(`\"${value}\"@${languageOrDataType.toLowerCase()}`);\n\n // Automatically determine datatype for booleans and numbers\n let datatype = languageOrDataType ? languageOrDataType.value : '';\n if (datatype === '') {\n // Convert a boolean\n if (typeof value === 'boolean')\n datatype = xsd.boolean;\n // Convert an integer or double\n else if (typeof value === 'number') {\n if (Number.isFinite(value))\n datatype = Number.isInteger(value) ? xsd.integer : xsd.double;\n else {\n datatype = xsd.double;\n if (!Number.isNaN(value))\n value = value > 0 ? 'INF' : '-INF';\n }\n }\n }\n\n // Create a datatyped literal\n return (datatype === '' || datatype === xsd.string) ?\n new Literal(`\"${value}\"`) :\n new Literal(`\"${value}\"^^${datatype}`);\n}\n\n// ### Creates a variable\nfunction variable(name) {\n return new Variable(name);\n}\n\n// ### Returns the default graph\nfunction defaultGraph() {\n return DEFAULTGRAPH;\n}\n\n// ### Creates a quad\nfunction quad(subject, predicate, object, graph) {\n return new Quad(subject, predicate, object, graph);\n}\n\nexport function fromTerm(term) {\n if (term instanceof Term)\n return term;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return namedNode(term.value);\n case 'BlankNode': return blankNode(term.value);\n case 'Variable': return variable(term.value);\n case 'DefaultGraph': return DEFAULTGRAPH;\n case 'Literal': return literal(term.value, term.language || term.datatype);\n case 'Quad': return fromQuad(term);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\nexport function fromQuad(inQuad) {\n if (inQuad instanceof Quad)\n return inQuad;\n\n if (inQuad.termType !== 'Quad')\n throw new Error(`Unexpected termType: ${inQuad.termType}`);\n\n return quad(fromTerm(inQuad.subject), fromTerm(inQuad.predicate), fromTerm(inQuad.object), fromTerm(inQuad.graph));\n}\n", "// **N3Parser** parses N3 documents.\nimport N3Lexer from './N3Lexer';\nimport N3DataFactory from './N3DataFactory';\nimport namespaces from './IRIs';\n\nlet blankNodePrefix = 0;\n\n// ## Constructor\nexport default class N3Parser {\n constructor(options) {\n this._contextStack = [];\n this._graph = null;\n\n // Set the document IRI\n options = options || {};\n this._setBase(options.baseIRI);\n options.factory && initDataFactory(this, options.factory);\n\n // Set supported features depending on the format\n const format = (typeof options.format === 'string') ?\n options.format.match(/\\w*$/)[0].toLowerCase() : '',\n isTurtle = /turtle/.test(format), isTriG = /trig/.test(format),\n isNTriples = /triple/.test(format), isNQuads = /quad/.test(format),\n isN3 = this._n3Mode = /n3/.test(format),\n isLineMode = isNTriples || isNQuads;\n if (!(this._supportsNamedGraphs = !(isTurtle || isN3)))\n this._readPredicateOrNamedGraph = this._readPredicate;\n // Support triples in other graphs\n this._supportsQuads = !(isTurtle || isTriG || isNTriples || isN3);\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n // Support nesting of triples\n this._supportsRDFStar = format === '' || /star|\\*$/.test(format);\n // Disable relative IRIs in N-Triples or N-Quads mode\n if (isLineMode)\n this._resolveRelativeIRI = iri => { return null; };\n this._blankNodePrefix = typeof options.blankNodePrefix !== 'string' ? '' :\n options.blankNodePrefix.replace(/^(?!_:)/, '_:');\n this._lexer = options.lexer || new N3Lexer({ lineMode: isLineMode, n3: isN3, isImpliedBy: this._isImpliedBy });\n // Disable explicit quantifiers by default\n this._explicitQuantifiers = !!options.explicitQuantifiers;\n }\n\n // ## Static class methods\n\n // ### `_resetBlankNodePrefix` restarts blank node prefix identification\n static _resetBlankNodePrefix() {\n blankNodePrefix = 0;\n }\n\n // ## Private methods\n\n // ### `_setBase` sets the base IRI to resolve relative IRIs\n _setBase(baseIRI) {\n if (!baseIRI) {\n this._base = '';\n this._basePath = '';\n }\n else {\n // Remove fragment if present\n const fragmentPos = baseIRI.indexOf('#');\n if (fragmentPos >= 0)\n baseIRI = baseIRI.substr(0, fragmentPos);\n // Set base IRI and its components\n this._base = baseIRI;\n this._basePath = baseIRI.indexOf('/') < 0 ? baseIRI :\n baseIRI.replace(/[^\\/?]*(?:\\?.*)?$/, '');\n baseIRI = baseIRI.match(/^(?:([a-z][a-z0-9+.-]*:))?(?:\\/\\/[^\\/]*)?/i);\n this._baseRoot = baseIRI[0];\n this._baseScheme = baseIRI[1];\n }\n }\n\n // ### `_saveContext` stores the current parsing context\n // when entering a new scope (list, blank node, formula)\n _saveContext(type, graph, subject, predicate, object) {\n const n3Mode = this._n3Mode;\n this._contextStack.push({\n type,\n subject, predicate, object, graph,\n inverse: n3Mode ? this._inversePredicate : false,\n blankPrefix: n3Mode ? this._prefixes._ : '',\n quantified: n3Mode ? this._quantified : null,\n });\n // The settings below only apply to N3 streams\n if (n3Mode) {\n // Every new scope resets the predicate direction\n this._inversePredicate = false;\n // In N3, blank nodes are scoped to a formula\n // (using a dot as separator, as a blank node label cannot start with it)\n this._prefixes._ = (this._graph ? `${this._graph.value}.` : '.');\n // Quantifiers are scoped to a formula\n this._quantified = Object.create(this._quantified);\n }\n }\n\n // ### `_restoreContext` restores the parent context\n // when leaving a scope (list, blank node, formula)\n _restoreContext(type, token) {\n // Obtain the previous context\n const context = this._contextStack.pop();\n if (!context || context.type !== type)\n return this._error(`Unexpected ${token.type}`, token);\n\n // Restore the quad of the previous context\n this._subject = context.subject;\n this._predicate = context.predicate;\n this._object = context.object;\n this._graph = context.graph;\n\n // Restore N3 context settings\n if (this._n3Mode) {\n this._inversePredicate = context.inverse;\n this._prefixes._ = context.blankPrefix;\n this._quantified = context.quantified;\n }\n }\n\n // ### `_readInTopContext` reads a token when in the top context\n _readInTopContext(token) {\n switch (token.type) {\n // If an EOF token arrives in the top context, signal that we're done\n case 'eof':\n if (this._graph !== null)\n return this._error('Unclosed graph', token);\n delete this._prefixes._;\n return this._callback(null, null, this._prefixes);\n // It could be a prefix declaration\n case 'PREFIX':\n this._sparqlStyle = true;\n case '@prefix':\n return this._readPrefix;\n // It could be a base declaration\n case 'BASE':\n this._sparqlStyle = true;\n case '@base':\n return this._readBaseIRI;\n // It could be a graph\n case '{':\n if (this._supportsNamedGraphs) {\n this._graph = '';\n this._subject = null;\n return this._readSubject;\n }\n case 'GRAPH':\n if (this._supportsNamedGraphs)\n return this._readNamedGraphLabel;\n // Otherwise, the next token must be a subject\n default:\n return this._readSubject(token);\n }\n }\n\n // ### `_readEntity` reads an IRI, prefixed name, blank node, or variable\n _readEntity(token, quantifier) {\n let value;\n switch (token.type) {\n // Read a relative or absolute IRI\n case 'IRI':\n case 'typeIRI':\n const iri = this._resolveIRI(token.value);\n if (iri === null)\n return this._error('Invalid IRI', token);\n value = this._factory.namedNode(iri);\n break;\n // Read a prefixed name\n case 'type':\n case 'prefixed':\n const prefix = this._prefixes[token.prefix];\n if (prefix === undefined)\n return this._error(`Undefined prefix \"${token.prefix}:\"`, token);\n value = this._factory.namedNode(prefix + token.value);\n break;\n // Read a blank node\n case 'blank':\n value = this._factory.blankNode(this._prefixes[token.prefix] + token.value);\n break;\n // Read a variable\n case 'var':\n value = this._factory.variable(token.value.substr(1));\n break;\n // Everything else is not an entity\n default:\n return this._error(`Expected entity but got ${token.type}`, token);\n }\n // In N3 mode, replace the entity if it is quantified\n if (!quantifier && this._n3Mode && (value.id in this._quantified))\n value = this._quantified[value.id];\n return value;\n }\n\n // ### `_readSubject` reads a quad's subject\n _readSubject(token) {\n this._predicate = null;\n switch (token.type) {\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph,\n this._subject = this._factory.blankNode(), null, null);\n return this._readBlankNodeHead;\n case '(':\n // Start a new list\n this._saveContext('list', this._graph, this.RDF_NIL, null, null);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph,\n this._graph = this._factory.blankNode(), null, null);\n return this._readSubject;\n case '}':\n // No subject; the graph in which we are reading is closed instead\n return this._readPunctuation(token);\n case '@forSome':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forSome\"', token);\n this._subject = null;\n this._predicate = this.N3_FORSOME;\n this._quantifier = 'blankNode';\n return this._readQuantifierList;\n case '@forAll':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forAll\"', token);\n this._subject = null;\n this._predicate = this.N3_FORALL;\n this._quantifier = 'variable';\n return this._readQuantifierList;\n case 'literal':\n if (!this._n3Mode)\n return this._error('Unexpected literal', token);\n\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._completeSubjectLiteral;\n }\n else\n this._subject = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n\n break;\n case '<<':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n this._saveContext('<<', this._graph, null, null, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the subject entity\n if ((this._subject = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the subject might be a path\n if (this._n3Mode)\n return this._getPathReader(this._readPredicateOrNamedGraph);\n }\n\n // The next token must be a predicate,\n // or, if the subject was actually a graph IRI, a named graph\n return this._readPredicateOrNamedGraph;\n }\n\n // ### `_readPredicate` reads a quad's predicate\n _readPredicate(token) {\n const type = token.type;\n switch (type) {\n case 'inverse':\n this._inversePredicate = true;\n case 'abbreviation':\n this._predicate = this.ABBREVIATIONS[token.value];\n break;\n case '.':\n case ']':\n case '}':\n // Expected predicate didn't come, must have been trailing semicolon\n if (this._predicate === null)\n return this._error(`Unexpected ${type}`, token);\n this._subject = null;\n return type === ']' ? this._readBlankNodeTail(token) : this._readPunctuation(token);\n case ';':\n // Additional semicolons can be safely ignored\n return this._predicate !== null ? this._readPredicate :\n this._error('Expected predicate but got ;', token);\n case '[':\n if (this._n3Mode) {\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject,\n this._subject = this._factory.blankNode(), null);\n return this._readBlankNodeHead;\n }\n case 'blank':\n if (!this._n3Mode)\n return this._error('Disallowed blank node as predicate', token);\n default:\n if ((this._predicate = this._readEntity(token)) === undefined)\n return;\n }\n // The next token must be an object\n return this._readObject;\n }\n\n // ### `_readObject` reads a quad's object\n _readObject(token) {\n switch (token.type) {\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._readDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else\n this._object = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n break;\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject, this._predicate,\n this._subject = this._factory.blankNode());\n return this._readBlankNodeHead;\n case '(':\n // Start a new list\n this._saveContext('list', this._graph, this._subject, this._predicate, this.RDF_NIL);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n case '<<':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n this._saveContext('<<', this._graph, this._subject, this._predicate, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the object entity\n if ((this._object = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the object might be a path\n if (this._n3Mode)\n return this._getPathReader(this._getContextEndReader());\n }\n return this._getContextEndReader();\n }\n\n // ### `_readPredicateOrNamedGraph` reads a quad's predicate, or a named graph\n _readPredicateOrNamedGraph(token) {\n return token.type === '{' ? this._readGraph(token) : this._readPredicate(token);\n }\n\n // ### `_readGraph` reads a graph\n _readGraph(token) {\n if (token.type !== '{')\n return this._error(`Expected graph but got ${token.type}`, token);\n // The \"subject\" we read is actually the GRAPH's label\n this._graph = this._subject, this._subject = null;\n return this._readSubject;\n }\n\n // ### `_readBlankNodeHead` reads the head of a blank node\n _readBlankNodeHead(token) {\n if (token.type === ']') {\n this._subject = null;\n return this._readBlankNodeTail(token);\n }\n else {\n this._predicate = null;\n return this._readPredicate(token);\n }\n }\n\n // ### `_readBlankNodeTail` reads the end of a blank node\n _readBlankNodeTail(token) {\n if (token.type !== ']')\n return this._readBlankNodePunctuation(token);\n\n // Store blank node quad\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this blank node\n const empty = this._predicate === null;\n this._restoreContext('blank', token);\n // If the blank node was the object, restore previous context and read punctuation\n if (this._object !== null)\n return this._getContextEndReader();\n // If the blank node was the predicate, continue reading the object\n else if (this._predicate !== null)\n return this._readObject;\n // If the blank node was the subject, continue reading the predicate\n else\n // If the blank node was empty, it could be a named graph label\n return empty ? this._readPredicateOrNamedGraph : this._readPredicateAfterBlank;\n }\n\n // ### `_readPredicateAfterBlank` reads a predicate after an anonymous blank node\n _readPredicateAfterBlank(token) {\n switch (token.type) {\n case '.':\n case '}':\n // No predicate is coming if the triple is terminated here\n this._subject = null;\n return this._readPunctuation(token);\n default:\n return this._readPredicate(token);\n }\n }\n\n // ### `_readListItem` reads items from a list\n _readListItem(token) {\n let item = null, // The item of the list\n list = null, // The list itself\n next = this._readListItem; // The next function to execute\n const previousList = this._subject, // The previous list that contains this list\n stack = this._contextStack, // The stack of parent contexts\n parent = stack[stack.length - 1]; // The parent containing the current list\n\n switch (token.type) {\n case '[':\n // Stack the current list quad and start a new quad with a blank node as subject\n this._saveContext('blank', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST,\n this._subject = item = this._factory.blankNode());\n next = this._readBlankNodeHead;\n break;\n case '(':\n // Stack the current list quad and start a new list\n this._saveContext('list', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST, this.RDF_NIL);\n this._subject = null;\n break;\n case ')':\n // Closing the list; restore the parent context\n this._restoreContext('list', token);\n // If this list is contained within a parent list, return the membership quad here.\n // This will be `<parent list element> rdf:first <this list>.`.\n if (stack.length !== 0 && stack[stack.length - 1].type === 'list')\n this._emit(this._subject, this._predicate, this._object, this._graph);\n // Was this list the parent's subject?\n if (this._predicate === null) {\n // The next token is the predicate\n next = this._readPredicate;\n // No list tail if this was an empty list\n if (this._subject === this.RDF_NIL)\n return next;\n }\n // The list was in the parent context's object\n else {\n next = this._getContextEndReader();\n // No list tail if this was an empty list\n if (this._object === this.RDF_NIL)\n return next;\n }\n // Close the list by making the head nil\n list = this.RDF_NIL;\n break;\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n next = this._readListItemDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else {\n item = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n next = this._getContextEndReader();\n }\n break;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n default:\n if ((item = this._readEntity(token)) === undefined)\n return;\n }\n\n // Create a new blank node if no item head was assigned yet\n if (list === null)\n this._subject = list = this._factory.blankNode();\n\n // Is this the first element of the list?\n if (previousList === null) {\n // This list is either the subject or the object of its parent\n if (parent.predicate === null)\n parent.subject = list;\n else\n parent.object = list;\n }\n else {\n // Continue the previous list with the current list\n this._emit(previousList, this.RDF_REST, list, this._graph);\n }\n // If an item was read, add it to the list\n if (item !== null) {\n // In N3 mode, the item might be a path\n if (this._n3Mode && (token.type === 'IRI' || token.type === 'prefixed')) {\n // Create a new context to add the item's path\n this._saveContext('item', this._graph, list, this.RDF_FIRST, item);\n this._subject = item, this._predicate = null;\n // _readPath will restore the context and output the item\n return this._getPathReader(this._readListItem);\n }\n // Output the item\n this._emit(list, this.RDF_FIRST, item, this._graph);\n }\n return next;\n }\n\n // ### `_readDataTypeOrLang` reads an _optional_ datatype or language\n _readDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, false);\n }\n\n\n // ### `_readListItemDataTypeOrLang` reads an _optional_ datatype or language in a list\n _readListItemDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, true);\n }\n\n // ### `_completeLiteral` completes a literal with an optional datatype or language\n _completeLiteral(token) {\n // Create a simple string literal by default\n let literal = this._factory.literal(this._literalValue);\n\n switch (token.type) {\n // Create a datatyped literal\n case 'type':\n case 'typeIRI':\n const datatype = this._readEntity(token);\n if (datatype === undefined) return; // No datatype means an error occurred\n literal = this._factory.literal(this._literalValue, datatype);\n token = null;\n break;\n // Create a language-tagged string\n case 'langcode':\n literal = this._factory.literal(this._literalValue, token.value);\n token = null;\n break;\n }\n\n return { token, literal };\n }\n\n // Completes a literal in subject position\n _completeSubjectLiteral(token) {\n this._subject = this._completeLiteral(token).literal;\n return this._readPredicateOrNamedGraph;\n }\n\n // Completes a literal in object position\n _completeObjectLiteral(token, listItem) {\n const completed = this._completeLiteral(token);\n if (!completed)\n return;\n this._object = completed.literal;\n\n // If this literal was part of a list, write the item\n // (we could also check the context stack, but passing in a flag is faster)\n if (listItem)\n this._emit(this._subject, this.RDF_FIRST, this._object, this._graph);\n // If the token was consumed, continue with the rest of the input\n if (completed.token === null)\n return this._getContextEndReader();\n // Otherwise, consume the token now\n else {\n this._readCallback = this._getContextEndReader();\n return this._readCallback(completed.token);\n }\n }\n\n // ### `_readFormulaTail` reads the end of a formula\n _readFormulaTail(token) {\n if (token.type !== '}')\n return this._readPunctuation(token);\n\n // Store the last quad of the formula\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this formula\n this._restoreContext('formula', token);\n // If the formula was the subject, continue reading the predicate.\n // If the formula was the object, read punctuation.\n return this._object === null ? this._readPredicate : this._getContextEndReader();\n }\n\n // ### `_readPunctuation` reads punctuation between quads or quad parts\n _readPunctuation(token) {\n let next, graph = this._graph;\n const subject = this._subject, inversePredicate = this._inversePredicate;\n switch (token.type) {\n // A closing brace ends a graph\n case '}':\n if (this._graph === null)\n return this._error('Unexpected graph closing', token);\n if (this._n3Mode)\n return this._readFormulaTail(token);\n this._graph = null;\n // A dot just ends the statement, without sharing anything with the next\n case '.':\n this._subject = null;\n next = this._contextStack.length ? this._readSubject : this._readInTopContext;\n if (inversePredicate) this._inversePredicate = false;\n break;\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n // {| means that the current triple is annotated with predicate-object pairs.\n case '{|':\n if (!this._supportsRDFStar)\n return this._error('Unexpected RDF-star syntax', token);\n // Continue using the last triple as quoted triple subject for the predicate-object pairs.\n const predicate = this._predicate, object = this._object;\n this._subject = this._factory.quad(subject, predicate, object, this.DEFAULTGRAPH);\n next = this._readPredicate;\n break;\n // |} means that the current quoted triple in annotation syntax is finalized.\n case '|}':\n if (this._subject.termType !== 'Quad')\n return this._error('Unexpected asserted triple closing', token);\n this._subject = null;\n next = this._readPunctuation;\n break;\n default:\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (graph = this._readEntity(token)) !== undefined) {\n next = this._readQuadPunctuation;\n break;\n }\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n if (subject !== null) {\n const predicate = this._predicate, object = this._object;\n if (!inversePredicate)\n this._emit(subject, predicate, object, graph);\n else\n this._emit(object, predicate, subject, graph);\n }\n return next;\n }\n\n // ### `_readBlankNodePunctuation` reads punctuation in a blank node\n _readBlankNodePunctuation(token) {\n let next;\n switch (token.type) {\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n default:\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n this._emit(this._subject, this._predicate, this._object, this._graph);\n return next;\n }\n\n // ### `_readQuadPunctuation` reads punctuation after a quad\n _readQuadPunctuation(token) {\n if (token.type !== '.')\n return this._error('Expected dot to follow quad', token);\n return this._readInTopContext;\n }\n\n // ### `_readPrefix` reads the prefix of a prefix declaration\n _readPrefix(token) {\n if (token.type !== 'prefix')\n return this._error('Expected prefix to follow @prefix', token);\n this._prefix = token.value;\n return this._readPrefixIRI;\n }\n\n // ### `_readPrefixIRI` reads the IRI of a prefix declaration\n _readPrefixIRI(token) {\n if (token.type !== 'IRI')\n return this._error(`Expected IRI to follow prefix \"${this._prefix}:\"`, token);\n const prefixNode = this._readEntity(token);\n this._prefixes[this._prefix] = prefixNode.value;\n this._prefixCallback(this._prefix, prefixNode);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readBaseIRI` reads the IRI of a base declaration\n _readBaseIRI(token) {\n const iri = token.type === 'IRI' && this._resolveIRI(token.value);\n if (!iri)\n return this._error('Expected valid IRI to follow base declaration', token);\n this._setBase(iri);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readNamedGraphLabel` reads the label of a named graph\n _readNamedGraphLabel(token) {\n switch (token.type) {\n case 'IRI':\n case 'blank':\n case 'prefixed':\n return this._readSubject(token), this._readGraph;\n case '[':\n return this._readNamedGraphBlankLabel;\n default:\n return this._error('Invalid graph label', token);\n }\n }\n\n // ### `_readNamedGraphLabel` reads a blank node label of a named graph\n _readNamedGraphBlankLabel(token) {\n if (token.type !== ']')\n return this._error('Invalid graph label', token);\n this._subject = this._factory.blankNode();\n return this._readGraph;\n }\n\n // ### `_readDeclarationPunctuation` reads the punctuation of a declaration\n _readDeclarationPunctuation(token) {\n // SPARQL-style declarations don't have punctuation\n if (this._sparqlStyle) {\n this._sparqlStyle = false;\n return this._readInTopContext(token);\n }\n\n if (token.type !== '.')\n return this._error('Expected declaration to end with a dot', token);\n return this._readInTopContext;\n }\n\n // Reads a list of quantified symbols from a @forSome or @forAll statement\n _readQuantifierList(token) {\n let entity;\n switch (token.type) {\n case 'IRI':\n case 'prefixed':\n if ((entity = this._readEntity(token, true)) !== undefined)\n break;\n default:\n return this._error(`Unexpected ${token.type}`, token);\n }\n // Without explicit quantifiers, map entities to a quantified entity\n if (!this._explicitQuantifiers)\n this._quantified[entity.id] = this._factory[this._quantifier](this._factory.blankNode().value);\n // With explicit quantifiers, output the reified quantifier\n else {\n // If this is the first item, start a new quantifier list\n if (this._subject === null)\n this._emit(this._graph || this.DEFAULTGRAPH, this._predicate,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Otherwise, continue the previous list\n else\n this._emit(this._subject, this.RDF_REST,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, entity, this.QUANTIFIERS_GRAPH);\n }\n return this._readQuantifierPunctuation;\n }\n\n // Reads punctuation from a @forSome or @forAll statement\n _readQuantifierPunctuation(token) {\n // Read more quantifiers\n if (token.type === ',')\n return this._readQuantifierList;\n // End of the quantifier list\n else {\n // With explicit quantifiers, close the quantifier list\n if (this._explicitQuantifiers) {\n this._emit(this._subject, this.RDF_REST, this.RDF_NIL, this.QUANTIFIERS_GRAPH);\n this._subject = null;\n }\n // Read a dot\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_getPathReader` reads a potential path and then resumes with the given function\n _getPathReader(afterPath) {\n this._afterPath = afterPath;\n return this._readPath;\n }\n\n // ### `_readPath` reads a potential path\n _readPath(token) {\n switch (token.type) {\n // Forward path\n case '!': return this._readForwardPath;\n // Backward path\n case '^': return this._readBackwardPath;\n // Not a path; resume reading where we left off\n default:\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n // If we were reading a list item, we still need to output it\n if (parent && parent.type === 'item') {\n // The list item is the remaining subejct after reading the path\n const item = this._subject;\n // Switch back to the context of the list\n this._restoreContext('item', token);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, item, this._graph);\n }\n return this._afterPath(token);\n }\n }\n\n // ### `_readForwardPath` reads a '!' path\n _readForwardPath(token) {\n let subject, predicate;\n const object = this._factory.blankNode();\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's object\n if (this._predicate === null)\n subject = this._subject, this._subject = object;\n // If we were reading an object, replace the subject by the path's object\n else\n subject = this._object, this._object = object;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readBackwardPath` reads a '^' path\n _readBackwardPath(token) {\n const subject = this._factory.blankNode();\n let predicate, object;\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's subject\n if (this._predicate === null)\n object = this._subject, this._subject = subject;\n // If we were reading an object, replace the subject by the path's subject\n else\n object = this._object, this._object = subject;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readRDFStarTailOrGraph` reads the graph of a nested RDF-star quad or the end of a nested RDF-star triple\n _readRDFStarTailOrGraph(token) {\n if (token.type !== '>>') {\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (this._graph = this._readEntity(token)) !== undefined)\n return this._readRDFStarTail;\n return this._error(`Expected >> to follow \"${this._object.id}\"`, token);\n }\n return this._readRDFStarTail(token);\n }\n\n // ### `_readRDFStarTail` reads the end of a nested RDF-star triple\n _readRDFStarTail(token) {\n if (token.type !== '>>')\n return this._error(`Expected >> but got ${token.type}`, token);\n // Read the quad and restore the previous context\n const quad = this._factory.quad(this._subject, this._predicate, this._object,\n this._graph || this.DEFAULTGRAPH);\n this._restoreContext('<<', token);\n // If the triple was the subject, continue by reading the predicate.\n if (this._subject === null) {\n this._subject = quad;\n return this._readPredicate;\n }\n // If the triple was the object, read context end.\n else {\n this._object = quad;\n return this._getContextEndReader();\n }\n }\n\n // ### `_getContextEndReader` gets the next reader function at the end of a context\n _getContextEndReader() {\n const contextStack = this._contextStack;\n if (!contextStack.length)\n return this._readPunctuation;\n\n switch (contextStack[contextStack.length - 1].type) {\n case 'blank':\n return this._readBlankNodeTail;\n case 'list':\n return this._readListItem;\n case 'formula':\n return this._readFormulaTail;\n case '<<':\n return this._readRDFStarTailOrGraph;\n }\n }\n\n // ### `_emit` sends a quad through the callback\n _emit(subject, predicate, object, graph) {\n this._callback(null, this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH));\n }\n\n // ### `_error` emits an error message through the callback\n _error(message, token) {\n const err = new Error(`${message} on line ${token.line}.`);\n err.context = {\n token: token,\n line: token.line,\n previousToken: this._lexer.previousToken,\n };\n this._callback(err);\n this._callback = noop;\n }\n\n // ### `_resolveIRI` resolves an IRI against the base path\n _resolveIRI(iri) {\n return /^[a-z][a-z0-9+.-]*:/i.test(iri) ? iri : this._resolveRelativeIRI(iri);\n }\n\n // ### `_resolveRelativeIRI` resolves an IRI against the base path,\n // assuming that a base path has been set and that the IRI is indeed relative\n _resolveRelativeIRI(iri) {\n // An empty relative IRI indicates the base IRI\n if (!iri.length)\n return this._base;\n // Decide resolving strategy based in the first character\n switch (iri[0]) {\n // Resolve relative fragment IRIs against the base IRI\n case '#': return this._base + iri;\n // Resolve relative query string IRIs by replacing the query string\n case '?': return this._base.replace(/(?:\\?.*)?$/, iri);\n // Resolve root-relative IRIs at the root of the base IRI\n case '/':\n // Resolve scheme-relative IRIs to the scheme\n return (iri[1] === '/' ? this._baseScheme : this._baseRoot) + this._removeDotSegments(iri);\n // Resolve all other IRIs at the base IRI's path\n default:\n // Relative IRIs cannot contain a colon in the first path segment\n return (/^[^/:]*:/.test(iri)) ? null : this._removeDotSegments(this._basePath + iri);\n }\n }\n\n // ### `_removeDotSegments` resolves './' and '../' path segments in an IRI as per RFC3986\n _removeDotSegments(iri) {\n // Don't modify the IRI if it does not contain any dot segments\n if (!/(^|\\/)\\.\\.?($|[/#?])/.test(iri))\n return iri;\n\n // Start with an imaginary slash before the IRI in order to resolve trailing './' and '../'\n const length = iri.length;\n let result = '', i = -1, pathStart = -1, segmentStart = 0, next = '/';\n\n while (i < length) {\n switch (next) {\n // The path starts with the first slash after the authority\n case ':':\n if (pathStart < 0) {\n // Skip two slashes before the authority\n if (iri[++i] === '/' && iri[++i] === '/')\n // Skip to slash after the authority\n while ((pathStart = i + 1) < length && iri[pathStart] !== '/')\n i = pathStart;\n }\n break;\n // Don't modify a query string or fragment\n case '?':\n case '#':\n i = length;\n break;\n // Handle '/.' or '/..' path segments\n case '/':\n if (iri[i + 1] === '.') {\n next = iri[++i + 1];\n switch (next) {\n // Remove a '/.' segment\n case '/':\n result += iri.substring(segmentStart, i - 1);\n segmentStart = i + 1;\n break;\n // Remove a trailing '/.' segment\n case undefined:\n case '?':\n case '#':\n return result + iri.substring(segmentStart, i) + iri.substr(i + 1);\n // Remove a '/..' segment\n case '.':\n next = iri[++i + 1];\n if (next === undefined || next === '/' || next === '?' || next === '#') {\n result += iri.substring(segmentStart, i - 2);\n // Try to remove the parent path from result\n if ((segmentStart = result.lastIndexOf('/')) >= pathStart)\n result = result.substr(0, segmentStart);\n // Remove a trailing '/..' segment\n if (next !== '/')\n return `${result}/${iri.substr(i + 1)}`;\n segmentStart = i + 1;\n }\n }\n }\n }\n next = iri[++i];\n }\n return result + iri.substring(segmentStart);\n }\n\n // ## Public methods\n\n // ### `parse` parses the N3 input and emits each parsed quad through the onQuad callback.\n parse(input, quadCallback, prefixCallback) {\n // The second parameter accepts an object { onQuad: ..., onPrefix: ..., onComment: ...}\n // As a second and third parameter it still accepts a separate quadCallback and prefixCallback for backward compatibility as well\n let onQuad, onPrefix, onComment;\n if (quadCallback && (quadCallback.onQuad || quadCallback.onPrefix || quadCallback.onComment)) {\n onQuad = quadCallback.onQuad;\n onPrefix = quadCallback.onPrefix;\n onComment = quadCallback.onComment;\n }\n else {\n onQuad = quadCallback;\n onPrefix = prefixCallback;\n }\n // The read callback is the next function to be executed when a token arrives.\n // We start reading in the top context.\n this._readCallback = this._readInTopContext;\n this._sparqlStyle = false;\n this._prefixes = Object.create(null);\n this._prefixes._ = this._blankNodePrefix ? this._blankNodePrefix.substr(2)\n : `b${blankNodePrefix++}_`;\n this._prefixCallback = onPrefix || noop;\n this._inversePredicate = false;\n this._quantified = Object.create(null);\n\n // Parse synchronously if no quad callback is given\n if (!onQuad) {\n const quads = [];\n let error;\n this._callback = (e, t) => { e ? (error = e) : t && quads.push(t); };\n this._lexer.tokenize(input).every(token => {\n return this._readCallback = this._readCallback(token);\n });\n if (error) throw error;\n return quads;\n }\n\n let processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback)\n this._readCallback = this._readCallback(token);\n };\n\n // Enable checking for comments on every token when a commentCallback has been set\n if (onComment) {\n // Enable the lexer to return comments as tokens first (disabled by default)\n this._lexer.comments = true;\n // Patch the processNextToken function\n processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback) {\n if (token.type === 'comment')\n onComment(token.value);\n else\n this._readCallback = this._readCallback(token);\n }\n };\n }\n\n // Parse asynchronously otherwise, executing the read callback when a token arrives\n this._callback = onQuad;\n this._lexer.tokenize(input, processNextToken);\n }\n}\n\n// The empty function\nfunction noop() {}\n\n// Initializes the parser with the given data factory\nfunction initDataFactory(parser, factory) {\n parser._factory = factory;\n\n parser.DEFAULTGRAPH = factory.defaultGraph();\n\n // Set common named nodes\n parser.RDF_FIRST = factory.namedNode(namespaces.rdf.first);\n parser.RDF_REST = factory.namedNode(namespaces.rdf.rest);\n parser.RDF_NIL = factory.namedNode(namespaces.rdf.nil);\n parser.N3_FORALL = factory.namedNode(namespaces.r.forAll);\n parser.N3_FORSOME = factory.namedNode(namespaces.r.forSome);\n parser.ABBREVIATIONS = {\n 'a': factory.namedNode(namespaces.rdf.type),\n '=': factory.namedNode(namespaces.owl.sameAs),\n '>': factory.namedNode(namespaces.log.implies),\n '<': factory.namedNode(namespaces.log.isImpliedBy),\n };\n parser.QUANTIFIERS_GRAPH = factory.namedNode('urn:n3:quantifiers');\n}\ninitDataFactory(N3Parser.prototype, N3DataFactory);\n", "// **N3Util** provides N3 utility functions.\n\nimport N3DataFactory from './N3DataFactory';\n\n// Tests whether the given term represents an IRI\nexport function isNamedNode(term) {\n return !!term && term.termType === 'NamedNode';\n}\n\n// Tests whether the given term represents a blank node\nexport function isBlankNode(term) {\n return !!term && term.termType === 'BlankNode';\n}\n\n// Tests whether the given term represents a literal\nexport function isLiteral(term) {\n return !!term && term.termType === 'Literal';\n}\n\n// Tests whether the given term represents a variable\nexport function isVariable(term) {\n return !!term && term.termType === 'Variable';\n}\n\n// Tests whether the given term represents a quad\nexport function isQuad(term) {\n return !!term && term.termType === 'Quad';\n}\n\n// Tests whether the given term represents the default graph\nexport function isDefaultGraph(term) {\n return !!term && term.termType === 'DefaultGraph';\n}\n\n// Tests whether the given quad is in the default graph\nexport function inDefaultGraph(quad) {\n return isDefaultGraph(quad.graph);\n}\n\n// Creates a function that prepends the given IRI to a local name\nexport function prefix(iri, factory) {\n return prefixes({ '': iri.value || iri }, factory)('');\n}\n\n// Creates a function that allows registering and expanding prefixes\nexport function prefixes(defaultPrefixes, factory) {\n // Add all of the default prefixes\n const prefixes = Object.create(null);\n for (const prefix in defaultPrefixes)\n processPrefix(prefix, defaultPrefixes[prefix]);\n // Set the default factory if none was specified\n factory = factory || N3DataFactory;\n\n // Registers a new prefix (if an IRI was specified)\n // or retrieves a function that expands an existing prefix (if no IRI was specified)\n function processPrefix(prefix, iri) {\n // Create a new prefix if an IRI is specified or the prefix doesn't exist\n if (typeof iri === 'string') {\n // Create a function that expands the prefix\n const cache = Object.create(null);\n prefixes[prefix] = local => {\n return cache[local] || (cache[local] = factory.namedNode(iri + local));\n };\n }\n else if (!(prefix in prefixes)) {\n throw new Error(`Unknown prefix: ${prefix}`);\n }\n return prefixes[prefix];\n }\n return processPrefix;\n}\n", "export function escapeRegex(regex) {\n return regex.replace(/[\\]\\/\\(\\)\\*\\+\\?\\.\\\\\\$]/g, '\\\\$&');\n}\n", "import { escapeRegex } from './Util';\n\n// Do not handle base IRIs without scheme, and currently unsupported cases:\n// - file: IRIs (which could also use backslashes)\n// - IRIs containing /. or /.. or //\nconst BASE_UNSUPPORTED = /^:?[^:?#]*(?:[?#]|$)|^file:|^[^:]*:\\/*[^?#]+?\\/(?:\\.\\.?(?:\\/|$)|\\/)/i;\nconst SUFFIX_SUPPORTED = /^(?:(?:[^/?#]{3,}|\\.?[^/?#.]\\.?)(?:\\/[^/?#]{3,}|\\.?[^/?#.]\\.?)*\\/?)?(?:[?#]|$)/;\nconst CURRENT = './';\nconst PARENT = '../';\nconst QUERY = '?';\nconst FRAGMENT = '#';\n\nexport default class BaseIRI {\n constructor(base) {\n this.base = base;\n this._baseLength = 0;\n this._baseMatcher = null;\n this._pathReplacements = new Array(base.length + 1);\n }\n\n static supports(base) {\n return !BASE_UNSUPPORTED.test(base);\n }\n\n _getBaseMatcher() {\n if (this._baseMatcher)\n return this._baseMatcher;\n if (!BaseIRI.supports(this.base))\n return this._baseMatcher = /.^/;\n\n // Extract the scheme\n const scheme = /^[^:]*:\\/*/.exec(this.base)[0];\n const regexHead = ['^', escapeRegex(scheme)];\n const regexTail = [];\n\n // Generate a regex for every path segment\n const segments = [], segmenter = /[^/?#]*([/?#])/y;\n let segment, query = 0, fragment = 0, last = segmenter.lastIndex = scheme.length;\n while (!query && !fragment && (segment = segmenter.exec(this.base))) {\n // Truncate base resolution path at fragment start\n if (segment[1] === FRAGMENT)\n fragment = segmenter.lastIndex - 1;\n else {\n // Create regex that matches the segment\n regexHead.push(escapeRegex(segment[0]), '(?:');\n regexTail.push(')?');\n\n // Create dedicated query string replacement\n if (segment[1] !== QUERY)\n segments.push(last = segmenter.lastIndex);\n else {\n query = last = segmenter.lastIndex;\n fragment = this.base.indexOf(FRAGMENT, query);\n this._pathReplacements[query] = QUERY;\n }\n }\n }\n\n // Precalculate parent path substitutions\n for (let i = 0; i < segments.length; i++)\n this._pathReplacements[segments[i]] = PARENT.repeat(segments.length - i - 1);\n this._pathReplacements[segments[segments.length - 1]] = CURRENT;\n\n // Add the remainder of the base IRI (without fragment) to the regex\n this._baseLength = fragment > 0 ? fragment : this.base.length;\n regexHead.push(\n escapeRegex(this.base.substring(last, this._baseLength)),\n query ? '(?:#|$)' : '(?:[?#]|$)',\n );\n return this._baseMatcher = new RegExp([...regexHead, ...regexTail].join(''));\n }\n\n toRelative(iri) {\n // Unsupported or non-matching base IRI\n const match = this._getBaseMatcher().exec(iri);\n if (!match)\n return iri;\n\n // Exact base IRI match\n const length = match[0].length;\n if (length === this._baseLength && length === iri.length)\n return '';\n\n // Parent path match\n const parentPath = this._pathReplacements[length];\n if (parentPath) {\n const suffix = iri.substring(length);\n // Don't abbreviate unsupported path\n if (parentPath !== QUERY && !SUFFIX_SUPPORTED.test(suffix))\n return iri;\n // Omit ./ with fragment or query string\n if (parentPath === CURRENT && /^[^?#]/.test(suffix))\n return suffix;\n // Append suffix to relative parent path\n return parentPath + suffix;\n }\n\n // Fragment or query string, so include delimiter\n return iri.substring(length - 1);\n }\n}\n", "// **N3Writer** writes N3 documents.\nimport namespaces from './IRIs';\nimport { default as N3DataFactory, Term } from './N3DataFactory';\nimport { isDefaultGraph } from './N3Util';\nimport BaseIRI from './BaseIRI';\nimport { escapeRegex } from './Util';\n\nconst DEFAULTGRAPH = N3DataFactory.defaultGraph();\n\nconst { rdf, xsd } = namespaces;\n\n// Characters in literals that require escaping\nconst escape = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019\\ud800-\\udbff]/,\n escapeAll = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019]|[\\ud800-\\udbff][\\udc00-\\udfff]/g,\n escapedCharacters = {\n '\\\\': '\\\\\\\\', '\"': '\\\\\"', '\\t': '\\\\t',\n '\\n': '\\\\n', '\\r': '\\\\r', '\\b': '\\\\b', '\\f': '\\\\f',\n };\n\n// ## Placeholder class to represent already pretty-printed terms\nclass SerializedTerm extends Term {\n // Pretty-printed nodes are not equal to any other node\n // (e.g., [] does not equal [])\n equals(other) {\n return other === this;\n }\n}\n\n// ## Constructor\nexport default class N3Writer {\n constructor(outputStream, options) {\n // ### `_prefixRegex` matches a prefixed name or IRI that begins with one of the added prefixes\n this._prefixRegex = /$0^/;\n\n // Shift arguments if the first argument is not a stream\n if (outputStream && typeof outputStream.write !== 'function')\n options = outputStream, outputStream = null;\n options = options || {};\n this._lists = options.lists;\n\n // If no output stream given, send the output as string through the end callback\n if (!outputStream) {\n let output = '';\n this._outputStream = {\n write(chunk, encoding, done) { output += chunk; done && done(); },\n end: done => { done && done(null, output); },\n };\n this._endStream = true;\n }\n else {\n this._outputStream = outputStream;\n this._endStream = options.end === undefined ? true : !!options.end;\n }\n\n // Initialize writer, depending on the format\n this._subject = null;\n if (!(/triple|quad/i).test(options.format)) {\n this._lineMode = false;\n this._graph = DEFAULTGRAPH;\n this._prefixIRIs = Object.create(null);\n options.prefixes && this.addPrefixes(options.prefixes);\n if (options.baseIRI) {\n this._baseIri = new BaseIRI(options.baseIRI);\n }\n }\n else {\n this._lineMode = true;\n this._writeQuad = this._writeQuadLine;\n }\n }\n\n // ## Private methods\n\n // ### Whether the current graph is the default graph\n get _inDefaultGraph() {\n return DEFAULTGRAPH.equals(this._graph);\n }\n\n // ### `_write` writes the argument to the output stream\n _write(string, callback) {\n this._outputStream.write(string, 'utf8', callback);\n }\n\n // ### `_writeQuad` writes the quad to the output stream\n _writeQuad(subject, predicate, object, graph, done) {\n try {\n // Write the graph's label if it has changed\n if (!graph.equals(this._graph)) {\n // Close the previous graph and start the new one\n this._write((this._subject === null ? '' : (this._inDefaultGraph ? '.\\n' : '\\n}\\n')) +\n (DEFAULTGRAPH.equals(graph) ? '' : `${this._encodeIriOrBlank(graph)} {\\n`));\n this._graph = graph;\n this._subject = null;\n }\n // Don't repeat the subject if it's the same\n if (subject.equals(this._subject)) {\n // Don't repeat the predicate if it's the same\n if (predicate.equals(this._predicate))\n this._write(`, ${this._encodeObject(object)}`, done);\n // Same subject, different predicate\n else\n this._write(`;\\n ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n // Different subject; write the whole quad\n else\n this._write(`${(this._subject === null ? '' : '.\\n') +\n this._encodeSubject(this._subject = subject)} ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n catch (error) { done && done(error); }\n }\n\n // ### `_writeQuadLine` writes the quad to the output stream as a single line\n _writeQuadLine(subject, predicate, object, graph, done) {\n // Write the quad without prefixes\n delete this._prefixMatch;\n this._write(this.quadToString(subject, predicate, object, graph), done);\n }\n\n // ### `quadToString` serializes a quad as a string\n quadToString(subject, predicate, object, graph) {\n return `${this._encodeSubject(subject)} ${\n this._encodeIriOrBlank(predicate)} ${\n this._encodeObject(object)\n }${graph && graph.value ? ` ${this._encodeIriOrBlank(graph)} .\\n` : ' .\\n'}`;\n }\n\n // ### `quadsToString` serializes an array of quads as a string\n quadsToString(quads) {\n let quadsString = '';\n for (const quad of quads)\n quadsString += this.quadToString(quad.subject, quad.predicate, quad.object, quad.graph);\n return quadsString;\n }\n\n // ### `_encodeSubject` represents a subject\n _encodeSubject(entity) {\n return entity.termType === 'Quad' ?\n this._encodeQuad(entity) : this._encodeIriOrBlank(entity);\n }\n\n // ### `_encodeIriOrBlank` represents an IRI or blank node\n _encodeIriOrBlank(entity) {\n // A blank node or list is represented as-is\n if (entity.termType !== 'NamedNode') {\n // If it is a list head, pretty-print it\n if (this._lists && (entity.value in this._lists))\n entity = this.list(this._lists[entity.value]);\n return 'id' in entity ? entity.id : `_:${entity.value}`;\n }\n let iri = entity.value;\n // Use relative IRIs if requested and possible\n if (this._baseIri) {\n iri = this._baseIri.toRelative(iri);\n }\n // Escape special characters\n if (escape.test(iri))\n iri = iri.replace(escapeAll, characterReplacer);\n // Try to represent the IRI as prefixed name\n const prefixMatch = this._prefixRegex.exec(iri);\n return !prefixMatch ? `<${iri}>` :\n (!prefixMatch[1] ? iri : this._prefixIRIs[prefixMatch[1]] + prefixMatch[2]);\n }\n\n // ### `_encodeLiteral` represents a literal\n _encodeLiteral(literal) {\n // Escape special characters\n let value = literal.value;\n if (escape.test(value))\n value = value.replace(escapeAll, characterReplacer);\n\n // Write a language-tagged literal\n if (literal.language)\n return `\"${value}\"@${literal.language}`;\n\n // Write dedicated literals per data type\n if (this._lineMode) {\n // Only abbreviate strings in N-Triples or N-Quads\n if (literal.datatype.value === xsd.string)\n return `\"${value}\"`;\n }\n else {\n // Use common datatype abbreviations in Turtle or TriG\n switch (literal.datatype.value) {\n case xsd.string:\n return `\"${value}\"`;\n case xsd.boolean:\n if (value === 'true' || value === 'false')\n return value;\n break;\n case xsd.integer:\n if (/^[+-]?\\d+$/.test(value))\n return value;\n break;\n case xsd.decimal:\n if (/^[+-]?\\d*\\.\\d+$/.test(value))\n return value;\n break;\n case xsd.double:\n if (/^[+-]?(?:\\d+\\.\\d*|\\.?\\d+)[eE][+-]?\\d+$/.test(value))\n return value;\n break;\n }\n }\n\n // Write a regular datatyped literal\n return `\"${value}\"^^${this._encodeIriOrBlank(literal.datatype)}`;\n }\n\n // ### `_encodePredicate` represents a predicate\n _encodePredicate(predicate) {\n return predicate.value === rdf.type ? 'a' : this._encodeIriOrBlank(predicate);\n }\n\n // ### `_encodeObject` represents an object\n _encodeObject(object) {\n switch (object.termType) {\n case 'Quad':\n return this._encodeQuad(object);\n case 'Literal':\n return this._encodeLiteral(object);\n default:\n return this._encodeIriOrBlank(object);\n }\n }\n\n // ### `_encodeQuad` encodes an RDF-star quad\n _encodeQuad({ subject, predicate, object, graph }) {\n return `<<${\n this._encodeSubject(subject)} ${\n this._encodePredicate(predicate)} ${\n this._encodeObject(object)}${\n isDefaultGraph(graph) ? '' : ` ${this._encodeIriOrBlank(graph)}`}>>`;\n }\n\n // ### `_blockedWrite` replaces `_write` after the writer has been closed\n _blockedWrite() {\n throw new Error('Cannot write because the writer has been closed.');\n }\n\n // ### `addQuad` adds the quad to the output stream\n addQuad(subject, predicate, object, graph, done) {\n // The quad was given as an object, so shift parameters\n if (object === undefined)\n this._writeQuad(subject.subject, subject.predicate, subject.object, subject.graph, predicate);\n // The optional `graph` parameter was not provided\n else if (typeof graph === 'function')\n this._writeQuad(subject, predicate, object, DEFAULTGRAPH, graph);\n // The `graph` parameter was provided\n else\n this._writeQuad(subject, predicate, object, graph || DEFAULTGRAPH, done);\n }\n\n // ### `addQuads` adds the quads to the output stream\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `addPrefix` adds the prefix to the output stream\n addPrefix(prefix, iri, done) {\n const prefixes = {};\n prefixes[prefix] = iri;\n this.addPrefixes(prefixes, done);\n }\n\n // ### `addPrefixes` adds the prefixes to the output stream\n addPrefixes(prefixes, done) {\n // Ignore prefixes if not supported by the serialization\n if (!this._prefixIRIs)\n return done && done();\n\n // Write all new prefixes\n let hasPrefixes = false;\n for (let prefix in prefixes) {\n let iri = prefixes[prefix];\n if (typeof iri !== 'string')\n iri = iri.value;\n hasPrefixes = true;\n // Finish a possible pending quad\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null, this._graph = '';\n }\n // Store and write the prefix\n this._prefixIRIs[iri] = (prefix += ':');\n this._write(`@prefix ${prefix} <${iri}>.\\n`);\n }\n // Recreate the prefix matcher\n if (hasPrefixes) {\n let IRIlist = '', prefixList = '';\n for (const prefixIRI in this._prefixIRIs) {\n IRIlist += IRIlist ? `|${prefixIRI}` : prefixIRI;\n prefixList += (prefixList ? '|' : '') + this._prefixIRIs[prefixIRI];\n }\n IRIlist = escapeRegex(IRIlist, /[\\]\\/\\(\\)\\*\\+\\?\\.\\\\\\$]/g, '\\\\$&');\n this._prefixRegex = new RegExp(`^(?:${prefixList})[^\\/]*$|` +\n `^(${IRIlist})([_a-zA-Z0-9][\\\\-_a-zA-Z0-9]*)$`);\n }\n // End a prefix block with a newline\n this._write(hasPrefixes ? '\\n' : '', done);\n }\n\n // ### `blank` creates a blank node with the given content\n blank(predicate, object) {\n let children = predicate, child, length;\n // Empty blank node\n if (predicate === undefined)\n children = [];\n // Blank node passed as blank(Term(\"predicate\"), Term(\"object\"))\n else if (predicate.termType)\n children = [{ predicate: predicate, object: object }];\n // Blank node passed as blank({ predicate: predicate, object: object })\n else if (!('length' in predicate))\n children = [predicate];\n\n switch (length = children.length) {\n // Generate an empty blank node\n case 0:\n return new SerializedTerm('[]');\n // Generate a non-nested one-triple blank node\n case 1:\n child = children[0];\n if (!(child.object instanceof SerializedTerm))\n return new SerializedTerm(`[ ${this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)} ]`);\n // Generate a multi-triple or nested blank node\n default:\n let contents = '[';\n // Write all triples in order\n for (let i = 0; i < length; i++) {\n child = children[i];\n // Write only the object is the predicate is the same as the previous\n if (child.predicate.equals(predicate))\n contents += `, ${this._encodeObject(child.object)}`;\n // Otherwise, write the predicate and the object\n else {\n contents += `${(i ? ';\\n ' : '\\n ') +\n this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)}`;\n predicate = child.predicate;\n }\n }\n return new SerializedTerm(`${contents}\\n]`);\n }\n }\n\n // ### `list` creates a list node with the given content\n list(elements) {\n const length = elements && elements.length || 0, contents = new Array(length);\n for (let i = 0; i < length; i++)\n contents[i] = this._encodeObject(elements[i]);\n return new SerializedTerm(`(${contents.join(' ')})`);\n }\n\n // ### `end` signals the end of the output stream\n end(done) {\n // Finish a possible pending quad\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null;\n }\n // Disallow further writing\n this._write = this._blockedWrite;\n\n // Try to end the underlying stream, ensuring done is called exactly one time\n let singleDone = done && ((error, result) => { singleDone = null, done(error, result); });\n if (this._endStream) {\n try { return this._outputStream.end(singleDone); }\n catch (error) { /* error closing stream */ }\n }\n singleDone && singleDone();\n }\n}\n\n// Replaces a character by its escaped version\nfunction characterReplacer(character) {\n // Replace a single character by its escaped version\n let result = escapedCharacters[character];\n if (result === undefined) {\n // Replace a single character with its 4-bit unicode escape sequence\n if (character.length === 1) {\n result = character.charCodeAt(0).toString(16);\n result = '\\\\u0000'.substr(0, 6 - result.length) + result;\n }\n // Replace a surrogate pair with its 8-bit unicode escape sequence\n else {\n result = ((character.charCodeAt(0) - 0xD800) * 0x400 +\n character.charCodeAt(1) + 0x2400).toString(16);\n result = '\\\\U00000000'.substr(0, 10 - result.length) + result;\n }\n }\n return result;\n}\n", "// **N3Store** objects store N3 quads by graph in memory.\nimport { Readable } from 'readable-stream';\nimport { default as N3DataFactory, termToId, termFromId } from './N3DataFactory';\nimport namespaces from './IRIs';\nimport { isDefaultGraph } from './N3Util';\nimport N3Writer from './N3Writer';\n\nconst ITERATOR = Symbol('iter');\n\nfunction merge(target, source, depth = 4) {\n if (depth === 0)\n return Object.assign(target, source);\n\n for (const key in source)\n target[key] = merge(target[key] || Object.create(null), source[key], depth - 1);\n\n return target;\n}\n\n/**\n * Determines the intersection of the `_graphs` index s1 and s2.\n * s1 and s2 *must* belong to Stores that share an `_entityIndex`.\n *\n * False is returned when there is no intersection; this should\n * *not* be set as the value for an index.\n */\nfunction intersect(s1, s2, depth = 4) {\n let target = false;\n\n for (const key in s1) {\n if (key in s2) {\n const intersection = depth === 0 ? null : intersect(s1[key], s2[key], depth - 1);\n if (intersection !== false) {\n target = target || Object.create(null);\n target[key] = intersection;\n }\n // Depth 3 is the 'subjects', 'predicates' and 'objects' keys.\n // If the 'subjects' index is empty, so will the 'predicates' and 'objects' index.\n else if (depth === 3) {\n return false;\n }\n }\n }\n\n return target;\n}\n\n/**\n * Determines the difference of the `_graphs` index s1 and s2.\n * s1 and s2 *must* belong to Stores that share an `_entityIndex`.\n *\n * False is returned when there is no difference; this should\n * *not* be set as the value for an index.\n */\nfunction difference(s1, s2, depth = 4) {\n let target = false;\n\n for (const key in s1) {\n // When the key is not in the index, then none of the triples defined by s1[key] are\n // in s2 and so we want to copy them over to the resultant store.\n if (!(key in s2)) {\n target = target || Object.create(null);\n target[key] = depth === 0 ? null : merge({}, s1[key], depth - 1);\n }\n else if (depth !== 0) {\n const diff = difference(s1[key], s2[key], depth - 1);\n if (diff !== false) {\n target = target || Object.create(null);\n target[key] = diff;\n }\n // Depth 3 is the 'subjects', 'predicates' and 'objects' keys.\n // If the 'subjects' index is empty, so will the 'predicates' and 'objects' index.\n else if (depth === 3) {\n return false;\n }\n }\n }\n\n return target;\n}\n\n// ## Constructor\nexport class N3EntityIndex {\n constructor(options = {}) {\n this._id = 1;\n // `_ids` maps entities such as `http://xmlns.com/foaf/0.1/name` to numbers,\n // saving memory by using only numbers as keys in `_graphs`\n this._ids = Object.create(null);\n this._ids[''] = 1;\n // inverse of `_ids`\n this._entities = Object.create(null);\n this._entities[1] = '';\n // `_blankNodeIndex` is the index of the last automatically named blank node\n this._blankNodeIndex = 0;\n this._factory = options.factory || N3DataFactory;\n }\n\n _termFromId(id) {\n if (id[0] === '.') {\n const entities = this._entities;\n const terms = id.split('.');\n const q = this._factory.quad(\n this._termFromId(entities[terms[1]]),\n this._termFromId(entities[terms[2]]),\n this._termFromId(entities[terms[3]]),\n terms[4] && this._termFromId(entities[terms[4]]),\n );\n return q;\n }\n return termFromId(id, this._factory);\n }\n\n _termToNumericId(term) {\n if (term.termType === 'Quad') {\n const s = this._termToNumericId(term.subject),\n p = this._termToNumericId(term.predicate),\n o = this._termToNumericId(term.object);\n let g;\n\n return s && p && o && (isDefaultGraph(term.graph) || (g = this._termToNumericId(term.graph))) &&\n this._ids[g ? `.${s}.${p}.${o}.${g}` : `.${s}.${p}.${o}`];\n }\n return this._ids[termToId(term)];\n }\n\n _termToNewNumericId(term) {\n // This assumes that no graph term is present - we may wish to error if there is one\n const str = term && term.termType === 'Quad' ?\n `.${this._termToNewNumericId(term.subject)}.${this._termToNewNumericId(term.predicate)}.${this._termToNewNumericId(term.object)}${\n isDefaultGraph(term.graph) ? '' : `.${this._termToNewNumericId(term.graph)}`\n }`\n : termToId(term);\n\n return this._ids[str] || (this._ids[this._entities[++this._id] = str] = this._id);\n }\n\n createBlankNode(suggestedName) {\n let name, index;\n // Generate a name based on the suggested name\n if (suggestedName) {\n name = suggestedName = `_:${suggestedName}`, index = 1;\n while (this._ids[name])\n name = suggestedName + index++;\n }\n // Generate a generic blank node name\n else {\n do { name = `_:b${this._blankNodeIndex++}`; }\n while (this._ids[name]);\n }\n // Add the blank node to the entities, avoiding the generation of duplicates\n this._ids[name] = ++this._id;\n this._entities[this._id] = name;\n return this._factory.blankNode(name.substr(2));\n }\n}\n\n// ## Constructor\nexport default class N3Store {\n constructor(quads, options) {\n // The number of quads is initially zero\n this._size = 0;\n // `_graphs` contains subject, predicate, and object indexes per graph\n this._graphs = Object.create(null);\n\n // Shift parameters if `quads` is not given\n if (!options && quads && !quads[0] && !(typeof quads.match === 'function'))\n options = quads, quads = null;\n options = options || {};\n this._factory = options.factory || N3DataFactory;\n this._entityIndex = options.entityIndex || new N3EntityIndex({ factory: this._factory });\n this._entities = this._entityIndex._entities;\n this._termFromId = this._entityIndex._termFromId.bind(this._entityIndex);\n this._termToNumericId = this._entityIndex._termToNumericId.bind(this._entityIndex);\n this._termToNewNumericId = this._entityIndex._termToNewNumericId.bind(this._entityIndex);\n\n // Add quads if passed\n if (quads)\n this.addAll(quads);\n }\n\n // ## Public properties\n\n // ### `size` returns the number of quads in the store\n get size() {\n // Return the quad count if if was cached\n let size = this._size;\n if (size !== null)\n return size;\n\n // Calculate the number of quads by counting to the deepest level\n size = 0;\n const graphs = this._graphs;\n let subjects, subject;\n for (const graphKey in graphs)\n for (const subjectKey in (subjects = graphs[graphKey].subjects))\n for (const predicateKey in (subject = subjects[subjectKey]))\n size += Object.keys(subject[predicateKey]).length;\n return this._size = size;\n }\n\n // ## Private methods\n\n // ### `_addToIndex` adds a quad to a three-layered index.\n // Returns if the index has changed, if the entry did not already exist.\n _addToIndex(index0, key0, key1, key2) {\n // Create layers as necessary\n const index1 = index0[key0] || (index0[key0] = {});\n const index2 = index1[key1] || (index1[key1] = {});\n // Setting the key to _any_ value signals the presence of the quad\n const existed = key2 in index2;\n if (!existed)\n index2[key2] = null;\n return !existed;\n }\n\n // ### `_removeFromIndex` removes a quad from a three-layered index\n _removeFromIndex(index0, key0, key1, key2) {\n // Remove the quad from the index\n const index1 = index0[key0], index2 = index1[key1];\n delete index2[key2];\n\n // Remove intermediary index layers if they are empty\n for (const key in index2) return;\n delete index1[key1];\n for (const key in index1) return;\n delete index0[key0];\n }\n\n // ### `_findInIndex` finds a set of quads in a three-layered index.\n // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`.\n // Any of these keys can be undefined, which is interpreted as a wildcard.\n // `name0`, `name1`, and `name2` are the names of the keys at each level,\n // used when reconstructing the resulting quad\n // (for instance: _subject_, _predicate_, and _object_).\n // Finally, `graphId` will be the graph of the created quads.\n *_findInIndex(index0, key0, key1, key2, name0, name1, name2, graphId) {\n let tmp, index1, index2;\n const entityKeys = this._entities;\n const graph = this._termFromId(entityKeys[graphId]);\n const parts = { subject: null, predicate: null, object: null };\n\n // If a key is specified, use only that part of index 0.\n if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0];\n for (const value0 in index0) {\n if (index1 = index0[value0]) {\n parts[name0] = this._termFromId(entityKeys[value0]);\n // If a key is specified, use only that part of index 1.\n if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1];\n for (const value1 in index1) {\n if (index2 = index1[value1]) {\n parts[name1] = this._termFromId(entityKeys[value1]);\n // If a key is specified, use only that part of index 2, if it exists.\n const values = key2 ? (key2 in index2 ? [key2] : []) : Object.keys(index2);\n // Create quads for all items found in index 2.\n for (let l = 0; l < values.length; l++) {\n parts[name2] = this._termFromId(entityKeys[values[l]]);\n yield this._factory.quad(parts.subject, parts.predicate, parts.object, graph);\n }\n }\n }\n }\n }\n }\n\n // ### `_loop` executes the callback on all keys of index 0\n _loop(index0, callback) {\n for (const key0 in index0)\n callback(key0);\n }\n\n // ### `_loopByKey0` executes the callback on all keys of a certain entry in index 0\n _loopByKey0(index0, key0, callback) {\n let index1, key1;\n if (index1 = index0[key0]) {\n for (key1 in index1)\n callback(key1);\n }\n }\n\n // ### `_loopByKey1` executes the callback on given keys of all entries in index 0\n _loopByKey1(index0, key1, callback) {\n let key0, index1;\n for (key0 in index0) {\n index1 = index0[key0];\n if (index1[key1])\n callback(key0);\n }\n }\n\n // ### `_loopBy2Keys` executes the callback on given keys of certain entries in index 2\n _loopBy2Keys(index0, key0, key1, callback) {\n let index1, index2, key2;\n if ((index1 = index0[key0]) && (index2 = index1[key1])) {\n for (key2 in index2)\n callback(key2);\n }\n }\n\n // ### `_countInIndex` counts matching quads in a three-layered index.\n // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`.\n // Any of these keys can be undefined, which is interpreted as a wildcard.\n _countInIndex(index0, key0, key1, key2) {\n let count = 0, tmp, index1, index2;\n\n // If a key is specified, count only that part of index 0\n if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0];\n for (const value0 in index0) {\n if (index1 = index0[value0]) {\n // If a key is specified, count only that part of index 1\n if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1];\n for (const value1 in index1) {\n if (index2 = index1[value1]) {\n // If a key is specified, count the quad if it exists\n if (key2) (key2 in index2) && count++;\n // Otherwise, count all quads\n else count += Object.keys(index2).length;\n }\n }\n }\n }\n return count;\n }\n\n // ### `_getGraphs` returns an array with the given graph,\n // or all graphs if the argument is null or undefined.\n _getGraphs(graph) {\n graph = graph === '' ? 1 : (graph && (this._termToNumericId(graph) || -1));\n return typeof graph !== 'number' ? this._graphs : { [graph]: this._graphs[graph] };\n }\n\n // ### `_uniqueEntities` returns a function that accepts an entity ID\n // and passes the corresponding entity to callback if it hasn't occurred before.\n _uniqueEntities(callback) {\n const uniqueIds = Object.create(null);\n return id => {\n if (!(id in uniqueIds)) {\n uniqueIds[id] = true;\n callback(this._termFromId(this._entities[id], this._factory));\n }\n };\n }\n\n // ## Public methods\n\n // ### `add` adds the specified quad to the dataset.\n // Returns the dataset instance it was called on.\n // Existing quads, as defined in Quad.equals, will be ignored.\n add(quad) {\n this.addQuad(quad);\n return this;\n }\n\n // ### `addQuad` adds a new quad to the store.\n // Returns if the quad index has changed, if the quad did not already exist.\n addQuad(subject, predicate, object, graph) {\n // Shift arguments if a quad object is given instead of components\n if (!predicate)\n graph = subject.graph, object = subject.object,\n predicate = subject.predicate, subject = subject.subject;\n\n // Convert terms to internal string representation\n graph = graph ? this._termToNewNumericId(graph) : 1;\n\n // Find the graph that will contain the triple\n let graphItem = this._graphs[graph];\n // Create the graph if it doesn't exist yet\n if (!graphItem) {\n graphItem = this._graphs[graph] = { subjects: {}, predicates: {}, objects: {} };\n // Freezing a graph helps subsequent `add` performance,\n // and properties will never be modified anyway\n Object.freeze(graphItem);\n }\n\n // Since entities can often be long IRIs, we avoid storing them in every index.\n // Instead, we have a separate index that maps entities to numbers,\n // which are then used as keys in the other indexes.\n subject = this._termToNewNumericId(subject);\n predicate = this._termToNewNumericId(predicate);\n object = this._termToNewNumericId(object);\n\n if (!this._addToIndex(graphItem.subjects, subject, predicate, object))\n return false;\n this._addToIndex(graphItem.predicates, predicate, object, subject);\n this._addToIndex(graphItem.objects, object, subject, predicate);\n\n // The cached quad count is now invalid\n this._size = null;\n return true;\n }\n\n // ### `addQuads` adds multiple quads to the store\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `delete` removes the specified quad from the dataset.\n // Returns the dataset instance it was called on.\n delete(quad) {\n this.removeQuad(quad);\n return this;\n }\n\n // ### `has` determines whether a dataset includes a certain quad or quad pattern.\n has(subjectOrQuad, predicate, object, graph) {\n if (subjectOrQuad && subjectOrQuad.subject)\n ({ subject: subjectOrQuad, predicate, object, graph } = subjectOrQuad);\n return !this.readQuads(subjectOrQuad, predicate, object, graph).next().done;\n }\n\n // ### `import` adds a stream of quads to the store\n import(stream) {\n stream.on('data', quad => { this.addQuad(quad); });\n return stream;\n }\n\n // ### `removeQuad` removes a quad from the store if it exists\n removeQuad(subject, predicate, object, graph) {\n // Shift arguments if a quad object is given instead of components\n if (!predicate)\n ({ subject, predicate, object, graph } = subject);\n // Convert terms to internal string representation\n graph = graph ? this._termToNumericId(graph) : 1;\n\n // Find internal identifiers for all components\n // and verify the quad exists.\n const graphs = this._graphs;\n let graphItem, subjects, predicates;\n if (!(subject = subject && this._termToNumericId(subject)) || !(predicate = predicate && this._termToNumericId(predicate)) ||\n !(object = object && this._termToNumericId(object)) || !(graphItem = graphs[graph]) ||\n !(subjects = graphItem.subjects[subject]) ||\n !(predicates = subjects[predicate]) ||\n !(object in predicates))\n return false;\n\n // Remove it from all indexes\n this._removeFromIndex(graphItem.subjects, subject, predicate, object);\n this._removeFromIndex(graphItem.predicates, predicate, object, subject);\n this._removeFromIndex(graphItem.objects, object, subject, predicate);\n if (this._size !== null) this._size--;\n\n // Remove the graph if it is empty\n for (subject in graphItem.subjects) return true;\n delete graphs[graph];\n return true;\n }\n\n // ### `removeQuads` removes multiple quads from the store\n removeQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.removeQuad(quads[i]);\n }\n\n // ### `remove` removes a stream of quads from the store\n remove(stream) {\n stream.on('data', quad => { this.removeQuad(quad); });\n return stream;\n }\n\n // ### `removeMatches` removes all matching quads from the store\n // Setting any field to `undefined` or `null` indicates a wildcard.\n removeMatches(subject, predicate, object, graph) {\n const stream = new Readable({ objectMode: true });\n\n const iterable = this.readQuads(subject, predicate, object, graph);\n stream._read = size => {\n while (--size >= 0) {\n const { done, value } = iterable.next();\n if (done) {\n stream.push(null);\n return;\n }\n stream.push(value);\n }\n };\n\n return this.remove(stream);\n }\n\n // ### `deleteGraph` removes all triples with the given graph from the store\n deleteGraph(graph) {\n return this.removeMatches(null, null, null, graph);\n }\n\n // ### `getQuads` returns an array of quads matching a pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getQuads(subject, predicate, object, graph) {\n return [...this.readQuads(subject, predicate, object, graph)];\n }\n\n /**\n * `readQuads` returns a generator of quads matching a pattern.\n * Setting any field to `undefined` or `null` indicates a wildcard.\n * @deprecated Use `match` instead.\n */\n *readQuads(subject, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (const graphId in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graphId]) {\n // Choose the optimal index, based on what fields are present\n if (subjectId) {\n if (objectId)\n // If subject and object are given, the object index will be the fastest\n yield* this._findInIndex(content.objects, objectId, subjectId, predicateId,\n 'object', 'subject', 'predicate', graphId);\n else\n // If only subject and possibly predicate are given, the subject index will be the fastest\n yield* this._findInIndex(content.subjects, subjectId, predicateId, null,\n 'subject', 'predicate', 'object', graphId);\n }\n else if (predicateId)\n // If only predicate and possibly object are given, the predicate index will be the fastest\n yield* this._findInIndex(content.predicates, predicateId, objectId, null,\n 'predicate', 'object', 'subject', graphId);\n else if (objectId)\n // If only object is given, the object index will be the fastest\n yield* this._findInIndex(content.objects, objectId, null, null,\n 'object', 'subject', 'predicate', graphId);\n else\n // If nothing is given, iterate subjects and predicates first\n yield* this._findInIndex(content.subjects, null, null, null,\n 'subject', 'predicate', 'object', graphId);\n }\n }\n }\n\n // ### `match` returns a new dataset that is comprised of all quads in the current instance matching the given arguments.\n // The logic described in Quad Matching is applied for each quad in this dataset to check if it should be included in the output dataset.\n // Note: This method always returns a new DatasetCore, even if that dataset contains no quads.\n // Note: Since a DatasetCore is an unordered set, the order of the quads within the returned sequence is arbitrary.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n // For backwards compatibility, the object return also implements the Readable stream interface.\n match(subject, predicate, object, graph) {\n return new DatasetCoreAndReadableStream(this, subject, predicate, object, graph, { entityIndex: this._entityIndex });\n }\n\n // ### `countQuads` returns the number of quads matching a pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n countQuads(subject, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let count = 0, content, subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return 0;\n\n for (const graphId in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graphId]) {\n // Choose the optimal index, based on what fields are present\n if (subject) {\n if (object)\n // If subject and object are given, the object index will be the fastest\n count += this._countInIndex(content.objects, objectId, subjectId, predicateId);\n else\n // If only subject and possibly predicate are given, the subject index will be the fastest\n count += this._countInIndex(content.subjects, subjectId, predicateId, objectId);\n }\n else if (predicate) {\n // If only predicate and possibly object are given, the predicate index will be the fastest\n count += this._countInIndex(content.predicates, predicateId, objectId, subjectId);\n }\n else {\n // If only object is possibly given, the object index will be the fastest\n count += this._countInIndex(content.objects, objectId, subjectId, predicateId);\n }\n }\n }\n return count;\n }\n\n // ### `forEach` executes the callback on all quads.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forEach(callback, subject, predicate, object, graph) {\n this.some(quad => {\n callback(quad, this);\n return false;\n }, subject, predicate, object, graph);\n }\n\n // ### `every` executes the callback on all quads,\n // and returns `true` if it returns truthy for all them.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n every(callback, subject, predicate, object, graph) {\n return !this.some(quad => !callback(quad, this), subject, predicate, object, graph);\n }\n\n // ### `some` executes the callback on all quads,\n // and returns `true` if it returns truthy for any of them.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n some(callback, subject, predicate, object, graph) {\n for (const quad of this.readQuads(subject, predicate, object, graph))\n if (callback(quad, this))\n return true;\n return false;\n }\n\n // ### `getSubjects` returns all subjects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getSubjects(predicate, object, graph) {\n const results = [];\n this.forSubjects(s => { results.push(s); }, predicate, object, graph);\n return results;\n }\n\n // ### `forSubjects` executes the callback on all subjects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forSubjects(callback, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, predicateId, objectId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (predicateId) {\n if (objectId)\n // If predicate and object are given, the POS index is best.\n this._loopBy2Keys(content.predicates, predicateId, objectId, callback);\n else\n // If only predicate is given, the SPO index is best.\n this._loopByKey1(content.subjects, predicateId, callback);\n }\n else if (objectId)\n // If only object is given, the OSP index is best.\n this._loopByKey0(content.objects, objectId, callback);\n else\n // If no params given, iterate all the subjects\n this._loop(content.subjects, callback);\n }\n }\n }\n\n // ### `getPredicates` returns all predicates that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getPredicates(subject, object, graph) {\n const results = [];\n this.forPredicates(p => { results.push(p); }, subject, object, graph);\n return results;\n }\n\n // ### `forPredicates` executes the callback on all predicates that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forPredicates(callback, subject, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, objectId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (subjectId) {\n if (objectId)\n // If subject and object are given, the OSP index is best.\n this._loopBy2Keys(content.objects, objectId, subjectId, callback);\n else\n // If only subject is given, the SPO index is best.\n this._loopByKey0(content.subjects, subjectId, callback);\n }\n else if (objectId)\n // If only object is given, the POS index is best.\n this._loopByKey1(content.predicates, objectId, callback);\n else\n // If no params given, iterate all the predicates.\n this._loop(content.predicates, callback);\n }\n }\n }\n\n // ### `getObjects` returns all objects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getObjects(subject, predicate, graph) {\n const results = [];\n this.forObjects(o => { results.push(o); }, subject, predicate, graph);\n return results;\n }\n\n // ### `forObjects` executes the callback on all objects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forObjects(callback, subject, predicate, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, predicateId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (subjectId) {\n if (predicateId)\n // If subject and predicate are given, the SPO index is best.\n this._loopBy2Keys(content.subjects, subjectId, predicateId, callback);\n else\n // If only subject is given, the OSP index is best.\n this._loopByKey1(content.objects, subjectId, callback);\n }\n else if (predicateId)\n // If only predicate is given, the POS index is best.\n this._loopByKey0(content.predicates, predicateId, callback);\n else\n // If no params given, iterate all the objects.\n this._loop(content.objects, callback);\n }\n }\n }\n\n // ### `getGraphs` returns all graphs that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getGraphs(subject, predicate, object) {\n const results = [];\n this.forGraphs(g => { results.push(g); }, subject, predicate, object);\n return results;\n }\n\n // ### `forGraphs` executes the callback on all graphs that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forGraphs(callback, subject, predicate, object) {\n for (const graph in this._graphs) {\n this.some(quad => {\n callback(quad.graph);\n return true; // Halt iteration of some()\n }, subject, predicate, object, this._termFromId(this._entities[graph]));\n }\n }\n\n // ### `createBlankNode` creates a new blank node, returning its name\n createBlankNode(suggestedName) {\n return this._entityIndex.createBlankNode(suggestedName);\n }\n\n // ### `extractLists` finds and removes all list triples\n // and returns the items per list.\n extractLists({ remove = false, ignoreErrors = false } = {}) {\n const lists = {}; // has scalar keys so could be a simple Object\n const onError = ignoreErrors ? (() => true) :\n ((node, message) => { throw new Error(`${node.value} ${message}`); });\n\n // Traverse each list from its tail\n const tails = this.getQuads(null, namespaces.rdf.rest, namespaces.rdf.nil, null);\n const toRemove = remove ? [...tails] : [];\n tails.forEach(tailQuad => {\n const items = []; // the members found as objects of rdf:first quads\n let malformed = false; // signals whether the current list is malformed\n let head; // the head of the list (_:b1 in above example)\n let headPos; // set to subject or object when head is set\n const graph = tailQuad.graph; // make sure list is in exactly one graph\n\n // Traverse the list from tail to end\n let current = tailQuad.subject;\n while (current && !malformed) {\n const objectQuads = this.getQuads(null, null, current, null);\n const subjectQuads = this.getQuads(current, null, null, null);\n let quad, first = null, rest = null, parent = null;\n\n // Find the first and rest of this list node\n for (let i = 0; i < subjectQuads.length && !malformed; i++) {\n quad = subjectQuads[i];\n if (!quad.graph.equals(graph))\n malformed = onError(current, 'not confined to single graph');\n else if (head)\n malformed = onError(current, 'has non-list arcs out');\n\n // one rdf:first\n else if (quad.predicate.value === namespaces.rdf.first) {\n if (first)\n malformed = onError(current, 'has multiple rdf:first arcs');\n else\n toRemove.push(first = quad);\n }\n\n // one rdf:rest\n else if (quad.predicate.value === namespaces.rdf.rest) {\n if (rest)\n malformed = onError(current, 'has multiple rdf:rest arcs');\n else\n toRemove.push(rest = quad);\n }\n\n // alien triple\n else if (objectQuads.length)\n malformed = onError(current, 'can\\'t be subject and object');\n else {\n head = quad; // e.g. { (1 2 3) :p :o }\n headPos = 'subject';\n }\n }\n\n // { :s :p (1 2) } arrives here with no head\n // { (1 2) :p :o } arrives here with head set to the list.\n for (let i = 0; i < objectQuads.length && !malformed; ++i) {\n quad = objectQuads[i];\n if (head)\n malformed = onError(current, 'can\\'t have coreferences');\n // one rdf:rest\n else if (quad.predicate.value === namespaces.rdf.rest) {\n if (parent)\n malformed = onError(current, 'has incoming rdf:rest arcs');\n else\n parent = quad;\n }\n else {\n head = quad; // e.g. { :s :p (1 2) }\n headPos = 'object';\n }\n }\n\n // Store the list item and continue with parent\n if (!first)\n malformed = onError(current, 'has no list head');\n else\n items.unshift(first.object);\n current = parent && parent.subject;\n }\n\n // Don't remove any quads if the list is malformed\n if (malformed)\n remove = false;\n // Store the list under the value of its head\n else if (head)\n lists[head[headPos].value] = items;\n });\n\n // Remove list quads if requested\n if (remove)\n this.removeQuads(toRemove);\n return lists;\n }\n\n /**\n * Returns `true` if the current dataset is a superset of the given dataset; in other words, returns `true` if\n * the given dataset is a subset of, i.e., is contained within, the current dataset.\n *\n * Blank Nodes will be normalized.\n */\n addAll(quads) {\n if (quads instanceof DatasetCoreAndReadableStream)\n quads = quads.filtered;\n\n if (Array.isArray(quads))\n this.addQuads(quads);\n else if (quads instanceof N3Store && quads._entityIndex === this._entityIndex) {\n if (quads._size !== 0) {\n this._graphs = merge(this._graphs, quads._graphs);\n this._size = null; // Invalidate the cached size\n }\n }\n else {\n for (const quad of quads)\n this.add(quad);\n }\n return this;\n }\n\n /**\n * Returns `true` if the current dataset is a superset of the given dataset; in other words, returns `true` if\n * the given dataset is a subset of, i.e., is contained within, the current dataset.\n *\n * Blank Nodes will be normalized.\n */\n contains(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this)\n return true;\n\n if (!(other instanceof N3Store) || this._entityIndex !== other._entityIndex)\n return other.every(quad => this.has(quad));\n\n const g1 = this._graphs, g2 = other._graphs;\n let s1, s2, p1, p2, o1;\n for (const graph in g2) {\n if (!(s1 = g1[graph])) return false;\n s1 = s1.subjects;\n for (const subject in (s2 = g2[graph].subjects)) {\n if (!(p1 = s1[subject])) return false;\n for (const predicate in (p2 = s2[subject])) {\n if (!(o1 = p1[predicate])) return false;\n for (const object in p2[predicate])\n if (!(object in o1)) return false;\n }\n }\n }\n return true;\n }\n\n /**\n * This method removes the quads in the current dataset that match the given arguments.\n *\n * The logic described in {@link https://rdf.js.org/dataset-spec/#quad-matching|Quad Matching} is applied for each\n * quad in this dataset, to select the quads which will be deleted.\n *\n * @param subject The optional exact subject to match.\n * @param predicate The optional exact predicate to match.\n * @param object The optional exact object to match.\n * @param graph The optional exact graph to match.\n */\n deleteMatches(subject, predicate, object, graph) {\n for (const quad of this.match(subject, predicate, object, graph))\n this.removeQuad(quad);\n return this;\n }\n\n /**\n * Returns a new dataset that contains all quads from the current dataset that are not included in the given dataset.\n */\n difference(other) {\n if (other && other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this)\n return new N3Store({ entityIndex: this._entityIndex });\n\n if ((other instanceof N3Store) && other._entityIndex === this._entityIndex) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n const graphs = difference(this._graphs, other._graphs);\n if (graphs) {\n store._graphs = graphs;\n store._size = null;\n }\n return store;\n }\n\n return this.filter(quad => !other.has(quad));\n }\n\n /**\n * Returns true if the current dataset contains the same graph structure as the given dataset.\n *\n * Blank Nodes will be normalized.\n */\n equals(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n return other === this || (this.size === other.size && this.contains(other));\n }\n\n /**\n * Creates a new dataset with all the quads that pass the test implemented by the provided `iteratee`.\n *\n * This method is aligned with Array.prototype.filter() in ECMAScript-262.\n */\n filter(iteratee) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n for (const quad of this)\n if (iteratee(quad, this))\n store.add(quad);\n return store;\n }\n\n /**\n * Returns a new dataset containing all quads from the current dataset that are also included in the given dataset.\n */\n intersection(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n store._graphs = merge(Object.create(null), this._graphs);\n store._size = this._size;\n return store;\n }\n else if ((other instanceof N3Store) && this._entityIndex === other._entityIndex) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n const graphs = intersect(other._graphs, this._graphs);\n if (graphs) {\n store._graphs = graphs;\n store._size = null;\n }\n return store;\n }\n\n return this.filter(quad => other.has(quad));\n }\n\n /**\n * Returns a new dataset containing all quads returned by applying `iteratee` to each quad in the current dataset.\n */\n map(iteratee) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n for (const quad of this)\n store.add(iteratee(quad, this));\n return store;\n }\n\n /**\n * This method calls the `iteratee` method on each `quad` of the `Dataset`. The first time the `iteratee` method\n * is called, the `accumulator` value is the `initialValue`, or, if not given, equals the first quad of the `Dataset`.\n * The return value of each call to the `iteratee` method is used as the `accumulator` value for the next call.\n *\n * This method returns the return value of the last `iteratee` call.\n *\n * This method is aligned with `Array.prototype.reduce()` in ECMAScript-262.\n */\n reduce(callback, initialValue) {\n const iter = this.readQuads();\n let accumulator = initialValue === undefined ? iter.next().value : initialValue;\n for (const quad of iter)\n accumulator = callback(accumulator, quad, this);\n return accumulator;\n }\n\n /**\n * Returns the set of quads within the dataset as a host-language-native sequence, for example an `Array` in\n * ECMAScript-262.\n *\n * Since a `Dataset` is an unordered set, the order of the quads within the returned sequence is arbitrary.\n */\n toArray() {\n return this.getQuads();\n }\n\n /**\n * Returns an N-Quads string representation of the dataset, preprocessed with the\n * {@link https://json-ld.github.io/normalization/spec/|RDF Dataset Normalization} algorithm.\n */\n toCanonical() {\n throw new Error('not implemented');\n }\n\n /**\n * Returns a stream that contains all quads of the dataset.\n */\n toStream() {\n return this.match();\n }\n\n /**\n * Returns an N-Quads string representation of the dataset.\n *\n * No prior normalization is required, therefore the results for the same quads may vary depending on the `Dataset`\n * implementation.\n */\n toString() {\n return (new N3Writer()).quadsToString(this);\n }\n\n /**\n * Returns a new `Dataset` that is a concatenation of this dataset and the quads given as an argument.\n */\n union(quads) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n store._graphs = merge(Object.create(null), this._graphs);\n store._size = this._size;\n\n store.addAll(quads);\n return store;\n }\n\n // ### Store is an iterable.\n // Can be used where iterables are expected: for...of loops, array spread operator,\n // `yield*`, and destructuring assignment (order is not guaranteed).\n *[Symbol.iterator]() {\n yield* this.readQuads();\n }\n}\n\n/**\n * Returns a subset of the `index` with that part of the index\n * matching the `ids` array. `ids` contains 3 elements that are\n * either numerical ids; or `null`.\n *\n * `false` is returned when there are no matching indices; this should\n * *not* be set as the value for an index.\n */\nfunction indexMatch(index, ids, depth = 0) {\n const ind = ids[depth];\n if (ind && !(ind in index))\n return false;\n\n let target = false;\n for (const key in (ind ? { [ind]: index[ind] } : index)) {\n const result = depth === 2 ? null : indexMatch(index[key], ids, depth + 1);\n\n if (result !== false) {\n target = target || Object.create(null);\n target[key] = result;\n }\n }\n return target;\n}\n\n/**\n * A class that implements both DatasetCore and Readable.\n */\nclass DatasetCoreAndReadableStream extends Readable {\n constructor(n3Store, subject, predicate, object, graph, options) {\n super({ objectMode: true });\n Object.assign(this, { n3Store, subject, predicate, object, graph, options });\n }\n\n get filtered() {\n if (!this._filtered) {\n const { n3Store, graph, object, predicate, subject } = this;\n const newStore = this._filtered = new N3Store({ factory: n3Store._factory, entityIndex: this.options.entityIndex });\n\n let subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = newStore._termToNumericId(subject)) ||\n predicate && !(predicateId = newStore._termToNumericId(predicate)) ||\n object && !(objectId = newStore._termToNumericId(object)))\n return newStore;\n\n const graphs = n3Store._getGraphs(graph);\n for (const graphKey in graphs) {\n let subjects, predicates, objects, content;\n if (content = graphs[graphKey]) {\n if (!subjectId && predicateId) {\n if (predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId])) {\n subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId]);\n objects = indexMatch(content.objects, [objectId, subjectId, predicateId]);\n }\n }\n else if (objectId) {\n if (objects = indexMatch(content.objects, [objectId, subjectId, predicateId])) {\n subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId]);\n predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId]);\n }\n }\n else if (subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId])) {\n predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId]);\n objects = indexMatch(content.objects, [objectId, subjectId, predicateId]);\n }\n\n if (subjects)\n newStore._graphs[graphKey] = { subjects, predicates, objects };\n }\n }\n newStore._size = null;\n }\n return this._filtered;\n }\n\n get size() {\n return this.filtered.size;\n }\n\n _read(size) {\n if (size > 0 && !this[ITERATOR])\n this[ITERATOR] = this[Symbol.iterator]();\n const iterable = this[ITERATOR];\n while (--size >= 0) {\n const { done, value } = iterable.next();\n if (done) {\n this.push(null);\n return;\n }\n this.push(value);\n }\n }\n\n addAll(quads) {\n return this.filtered.addAll(quads);\n }\n\n contains(other) {\n return this.filtered.contains(other);\n }\n\n deleteMatches(subject, predicate, object, graph) {\n return this.filtered.deleteMatches(subject, predicate, object, graph);\n }\n\n difference(other) {\n return this.filtered.difference(other);\n }\n\n equals(other) {\n return this.filtered.equals(other);\n }\n\n every(callback, subject, predicate, object, graph) {\n return this.filtered.every(callback, subject, predicate, object, graph);\n }\n\n filter(iteratee) {\n return this.filtered.filter(iteratee);\n }\n\n forEach(callback, subject, predicate, object, graph) {\n return this.filtered.forEach(callback, subject, predicate, object, graph);\n }\n\n import(stream) {\n return this.filtered.import(stream);\n }\n\n intersection(other) {\n return this.filtered.intersection(other);\n }\n\n map(iteratee) {\n return this.filtered.map(iteratee);\n }\n\n some(callback, subject, predicate, object, graph) {\n return this.filtered.some(callback, subject, predicate, object, graph);\n }\n\n toCanonical() {\n return this.filtered.toCanonical();\n }\n\n toStream() {\n return this._filtered ?\n this._filtered.toStream()\n : this.n3Store.match(this.subject, this.predicate, this.object, this.graph);\n }\n\n union(quads) {\n return this._filtered ?\n this._filtered.union(quads)\n : this.n3Store.match(this.subject, this.predicate, this.object, this.graph).addAll(quads);\n }\n\n toArray() {\n return this._filtered ? this._filtered.toArray() : this.n3Store.getQuads(this.subject, this.predicate, this.object, this.graph);\n }\n\n reduce(callback, initialValue) {\n return this.filtered.reduce(callback, initialValue);\n }\n\n toString() {\n return (new N3Writer()).quadsToString(this);\n }\n\n add(quad) {\n return this.filtered.add(quad);\n }\n\n delete(quad) {\n return this.filtered.delete(quad);\n }\n\n has(quad) {\n return this.filtered.has(quad);\n }\n\n match(subject, predicate, object, graph) {\n return new DatasetCoreAndReadableStream(this.filtered, subject, predicate, object, graph, this.options);\n }\n\n *[Symbol.iterator]() {\n yield* this._filtered || this.n3Store.readQuads(this.subject, this.predicate, this.object, this.graph);\n }\n}\n", "import N3Store from './N3Store';\n\nexport default class N3DatasetCoreFactory {\n dataset(quads) {\n return new N3Store(quads);\n }\n}\n", "import DF from './N3DataFactory';\n\n/**\n * Gets rules from a dataset. This will only collect horn rules declared using log:implies.\n */\nexport function getRulesFromDataset(dataset) {\n const rules = [];\n for (const { subject, object } of dataset.match(null, DF.namedNode('http://www.w3.org/2000/10/swap/log#implies'), null, DF.defaultGraph())) {\n const premise = [...dataset.match(null, null, null, subject)];\n const conclusion = [...dataset.match(null, null, null, object)];\n rules.push({ premise, conclusion });\n }\n return rules;\n}\n\nexport default class N3Reasoner {\n constructor(store) {\n this._store = store;\n }\n\n _add(subject, predicate, object, graphItem, cb) {\n // Only add to the remaining indexes if there is not already a value in the index\n if (!this._store._addToIndex(graphItem.subjects, subject, predicate, object)) return;\n this._store._addToIndex(graphItem.predicates, predicate, object, subject);\n this._store._addToIndex(graphItem.objects, object, subject, predicate);\n cb();\n }\n\n // eslint-disable-next-line no-warning-comments\n _evaluatePremise(rule, content, cb, i = 0) {\n let v1, v2, value, index1, index2;\n const [val0, val1, val2] = rule.premise[i].value, index = content[rule.premise[i].content];\n const v0 = !(value = val0.value);\n for (value in v0 ? index : { [value]: index[value] }) {\n if (index1 = index[value]) {\n if (v0) val0.value = Number(value);\n v1 = !(value = val1.value);\n for (value in v1 ? index1 : { [value]: index1[value] }) {\n if (index2 = index1[value]) {\n if (v1) val1.value = Number(value);\n v2 = !(value = val2.value);\n for (value in v2 ? index2 : { [value]: index2[value] }) {\n if (v2) val2.value = Number(value);\n\n if (i === rule.premise.length - 1)\n rule.conclusion.forEach(c => {\n // eslint-disable-next-line max-nested-callbacks\n this._add(c.subject.value, c.predicate.value, c.object.value, content, () => { cb(c); });\n });\n else\n this._evaluatePremise(rule, content, cb, i + 1);\n }\n if (v2) val2.value = null;\n }\n }\n if (v1) val1.value = null;\n }\n }\n if (v0) val0.value = null;\n }\n\n _evaluateRules(rules, content, cb) {\n for (let i = 0; i < rules.length; i++) {\n this._evaluatePremise(rules[i], content, cb);\n }\n }\n\n // A naive reasoning algorithm where rules are just applied by repeatedly applying rules\n // until no more evaluations are made\n _reasonGraphNaive(rules, content) {\n const newRules = [];\n\n function addRule(conclusion) {\n if (conclusion.next)\n conclusion.next.forEach(rule => {\n newRules.push([conclusion.subject.value, conclusion.predicate.value, conclusion.object.value, rule]);\n });\n }\n\n // eslint-disable-next-line func-style\n const addConclusions = conclusion => {\n conclusion.forEach(c => {\n // eslint-disable-next-line max-nested-callbacks\n this._add(c.subject.value, c.predicate.value, c.object.value, content, () => { addRule(c); });\n });\n };\n\n this._evaluateRules(rules, content, addRule);\n\n let r;\n while ((r = newRules.pop()) !== undefined) {\n const [subject, predicate, object, rule] = r;\n const v1 = rule.basePremise.subject.value;\n if (!v1) rule.basePremise.subject.value = subject;\n const v2 = rule.basePremise.predicate.value;\n if (!v2) rule.basePremise.predicate.value = predicate;\n const v3 = rule.basePremise.object.value;\n if (!v3) rule.basePremise.object.value = object;\n\n if (rule.premise.length === 0) {\n addConclusions(rule.conclusion);\n }\n else {\n this._evaluatePremise(rule, content, addRule);\n }\n\n if (!v1) rule.basePremise.subject.value = null;\n if (!v2) rule.basePremise.predicate.value = null;\n if (!v3) rule.basePremise.object.value = null;\n }\n }\n\n _createRule({ premise, conclusion }) {\n const varMapping = {};\n\n const toId = value => value.termType === 'Variable' ?\n // If the term is a variable, then create an empty object that values can be placed into\n (varMapping[value.value] = varMapping[value.value] || {}) :\n // If the term is not a variable, then set the ID value\n { value: this._store._termToNewNumericId(value) };\n\n // eslint-disable-next-line func-style\n const t = term => ({ subject: toId(term.subject), predicate: toId(term.predicate), object: toId(term.object) });\n\n return {\n premise: premise.map(p => t(p)),\n conclusion: conclusion.map(p => t(p)),\n variables: Object.values(varMapping),\n };\n }\n\n reason(rules) {\n if (!Array.isArray(rules)) {\n rules = getRulesFromDataset(rules);\n }\n rules = rules.map(rule => this._createRule(rule));\n\n for (const r1 of rules) {\n for (const r2 of rules) {\n for (let i = 0; i < r2.premise.length; i++) {\n const p = r2.premise[i];\n for (const c of r1.conclusion) {\n if (termEq(p.subject, c.subject) && termEq(p.predicate, c.predicate) && termEq(p.object, c.object)) {\n const set = new Set();\n\n const premise = [];\n\n // Since these *will* be substituted when we apply the rule,\n // we need to do this, so that we index correctly in the subsequent section\n p.subject.value = p.subject.value || 1;\n p.object.value = p.object.value || 1;\n p.predicate.value = p.predicate.value || 1;\n\n for (let j = 0; j < r2.premise.length; j++) {\n if (j !== i) {\n premise.push(getIndex(r2.premise[j], set));\n }\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: Create new rule, with new indexing\n // Future, 'collapse' the next statements when they share a premise/base-premise\n (c.next = c.next || []).push({\n premise,\n conclusion: r2.conclusion,\n // This is a single premise of the form { subject, predicate, object },\n // which we can use to instantiate the rule using the new data that was emitted\n basePremise: p,\n });\n }\n r2.variables.forEach(v => { v.value = null; });\n }\n }\n }\n }\n\n for (const rule of rules) {\n const set = new Set();\n rule.premise = rule.premise.map(p => getIndex(p, set));\n }\n\n const graphs = this._store._getGraphs();\n for (const graphId in graphs) {\n this._reasonGraphNaive(rules, graphs[graphId]);\n }\n\n this._store._size = null;\n }\n}\n\nfunction getIndex({ subject, predicate, object }, set) {\n const s = subject.value || set.has(subject) || (set.add(subject), false);\n const p = predicate.value || set.has(predicate) || (set.add(predicate), false);\n const o = object.value || set.has(object) || (set.add(object), false);\n\n return (!s && p) ? { content: 'predicates', value: [predicate, object, subject] } :\n o ? { content: 'objects', value: [object, subject, predicate] } :\n { content: 'subjects', value: [subject, predicate, object] };\n}\n\nfunction termEq(t1, t2) {\n if (t1.value === null) {\n t1.value = t2.value;\n }\n return t1.value === t2.value;\n}\n", "// **N3StreamParser** parses a text stream into a quad stream.\nimport { Transform } from 'readable-stream';\nimport N3Parser from './N3Parser';\n\n// ## Constructor\nexport default class N3StreamParser extends Transform {\n constructor(options) {\n super({ decodeStrings: true });\n this._readableState.objectMode = true;\n\n // Set up parser with dummy stream to obtain `data` and `end` callbacks\n const parser = new N3Parser(options);\n let onData, onEnd;\n\n const callbacks = {\n // Handle quads by pushing them down the pipeline\n onQuad: (error, quad) => { error && this.emit('error', error) || quad && this.push(quad); },\n // Emit prefixes through the `prefix` event\n onPrefix: (prefix, uri) => { this.emit('prefix', prefix, uri); },\n };\n\n if (options && options.comments)\n callbacks.onComment = comment => { this.emit('comment', comment); };\n\n parser.parse({\n on: (event, callback) => {\n switch (event) {\n case 'data': onData = callback; break;\n case 'end': onEnd = callback; break;\n }\n },\n }, callbacks);\n\n // Implement Transform methods through parser callbacks\n this._transform = (chunk, encoding, done) => { onData(chunk); done(); };\n this._flush = done => { onEnd(); done(); };\n }\n\n // ### Parses a stream of strings\n import(stream) {\n stream.on('data', chunk => { this.write(chunk); });\n stream.on('end', () => { this.end(); });\n stream.on('error', error => { this.emit('error', error); });\n return this;\n }\n}\n", "// **N3StreamWriter** serializes a quad stream into a text stream.\nimport { Transform } from 'readable-stream';\nimport N3Writer from './N3Writer';\n\n// ## Constructor\nexport default class N3StreamWriter extends Transform {\n constructor(options) {\n super({ encoding: 'utf8', writableObjectMode: true });\n\n // Set up writer with a dummy stream object\n const writer = this._writer = new N3Writer({\n write: (quad, encoding, callback) => { this.push(quad); callback && callback(); },\n end: callback => { this.push(null); callback && callback(); },\n }, options);\n\n // Implement Transform methods on top of writer\n this._transform = (quad, encoding, done) => { writer.addQuad(quad, done); };\n this._flush = done => { writer.end(done); };\n }\n\n// ### Serializes a stream of quads\n import(stream) {\n stream.on('data', quad => { this.write(quad); });\n stream.on('end', () => { this.end(); });\n stream.on('error', error => { this.emit('error', error); });\n stream.on('prefix', (prefix, iri) => { this._writer.addPrefix(prefix, iri); });\n return this;\n }\n}\n", "import Lexer from './N3Lexer';\nimport Parser from './N3Parser';\nimport Writer from './N3Writer';\nimport Store, { N3EntityIndex as EntityIndex } from './N3Store';\nimport StoreFactory from './N3StoreFactory';\nimport Reasoner, { getRulesFromDataset } from './N3Reasoner';\nimport StreamParser from './N3StreamParser';\nimport StreamWriter from './N3StreamWriter';\nimport * as Util from './N3Util';\nimport BaseIRI from './BaseIRI';\n\nimport {\n default as DataFactory,\n\n Term,\n NamedNode,\n Literal,\n BlankNode,\n Variable,\n DefaultGraph,\n Quad,\n Triple,\n\n termFromId,\n termToId,\n} from './N3DataFactory';\n\n// Named exports\nexport {\n Lexer,\n Parser,\n Writer,\n Store,\n StoreFactory,\n EntityIndex,\n StreamParser,\n StreamWriter,\n Util,\n Reasoner,\n BaseIRI,\n\n DataFactory,\n\n Term,\n NamedNode,\n Literal,\n BlankNode,\n Variable,\n DefaultGraph,\n Quad,\n Triple,\n\n termFromId,\n termToId,\n getRulesFromDataset,\n};\n\n// Export all named exports as a default object for backward compatibility\nexport default {\n Lexer,\n Parser,\n Writer,\n Store,\n StoreFactory,\n EntityIndex,\n StreamParser,\n StreamWriter,\n Util,\n Reasoner,\n BaseIRI,\n\n DataFactory,\n\n Term,\n NamedNode,\n Literal,\n BlankNode,\n Variable,\n DefaultGraph,\n Quad,\n Triple,\n\n termFromId,\n termToId,\n};\n", "import oldmCore from './oldm.mjs'\nimport * as oldmN3 from './oldm-n3.mjs'\n\nconst oldm = {\n\tcontext: oldmCore,\n\t...oldmN3\n}\n\nglobalThis.oldm = oldm\n\nexport default oldm", "/**\n * checks if data is a wrapper object for one of the primitive types\n *\n * @param {mixed} data The data to check\n * @return {Boolean} True if data is a primitive wrapper object\n */\nfunction isPrimitiveWrapper(data)\n{\n return [String, Boolean, Number, BigInt].includes(data?.constructor)\n}\n\n/**\n * Selects only one of the matching values. You can specify whether to return\n * the 'last' value, or the 'first'. Or you can pass a function as the whichOne\n * parameter and let it decide which value to return.\n * \n * @param function selectFn The selector, e.g. `_.name`\n * @param {mixed} whichOne Default value 'last'. Either 'first', 'last' or a function with (array) => value\n * @return {mixed} One of the matching values\n */\nexport function one(selectFn, whichOne='last')\n{\n return (data, key, context) => {\n if (typeof selectFn !== 'function') {\n let selectFnOriginal = selectFn\n selectFn = (o) => {\n return from(o[key]).select(selectFnOriginal);\n }\n }\n let result = selectFn(data, key, context)\n if (Array.isArray(result)) {\n if (whichOne=='last') {\n result = result.pop()\n } else if (whichOne=='first') {\n result = result.shift()\n } else if (typeof whichOne == 'function') {\n result = whichOne(result)\n }\n }\n return result\n }\n}\n\n/**\n * Turns the selected value into an array, if it wasn't already an array\n * \n * @param {function} selectFn the selector function, e.g. _.name\n * @return {array}\n */\nexport function many(selectFn)\n{\n return (data, key, context) => {\n if (typeof selectFn !== 'function') {\n let selectFnOriginal = selectFn\n selectFn = (o) => {\n return from(o[key]).select(selectFnOriginal);\n }\n }\n let result = selectFn(data, key, context)\n if (result == null) {\n result = []\n } else if (!Array.isArray(result)) {\n result = [result]\n }\n return result\n }\n}\n\n/**\n * Returns the first matching value that is not null or undefined or an empty string.\n * \n * @param {...mixed} args A list of selector functions or static values.\n * @return the first selected value that is not empty (null, undefined or \"\")\n */\nexport function first(...args)\n{\n return (data, key, context) => {\n let result = null\n for (let arg of args) {\n if (typeof arg == 'function') {\n result = arg(data, key, context)\n if (result!=null && result!==undefined && result!==\"\") {\n return result\n }\n } else if (arg!==null && arg!==undefined && arg!==\"\") {\n return arg\n }\n }\n return null\n }\n}\n\n\n\n/**\n * implements a minimal graphql-alike selection syntax, using plain javascript\n * use with from(...arr).select\n *\n * @param {object|function} filter Which keys with which values you want\n * @return Function a function that selects values from objects as defined by filter\n */\nfunction getSelectFn(filter)\n{\n let fns = []\n if (filter instanceof Function) {\n fns.push(filter)\n } else for (const [filterKey, filterValue] of Object.entries(filter)) {\n if (filterValue instanceof Function) {\n fns.push( (data) => {\n const result = {\n [filterKey]: filterValue(data, filterKey, 'select')\n }\n // if (typeof result[filterKey] === 'undefined' && typeof data?.[filterKey] === 'undefined') {\n // return undefined\n // }\n return result\n })\n } else if (!isPrimitiveWrapper(filterValue)) {\n fns.push( (data) => {\n const result = {\n [filterKey]: from(data[filterKey]).select(filterValue)\n }\n // if (typeof result[filterKey] === 'undefined' && typeof data?.[filterKey] === 'undefined') {\n // return undefined\n // }\n return result\n })\n } else {\n fns.push( () => {\n return {\n [filterKey]: filterValue\n }\n })\n }\n }\n if (fns.length==1) {\n return fns[0]\n }\n return (data) => {\n let result = {}\n for (let fn of fns) {\n Object.assign(result, fn(data))\n }\n return result\n }\n}\n\n/**\n * This function checks whether the given data matches the given pattern\n * Pattern can be a function, a regular expression, an object or a literal value\n * The pattern is matched recursively\n * Use with from(...arr).where\n *\n * @param {mixed} pattern The pattern to test\n * @return Function The filter function\n */\nexport function getMatchFn(pattern)\n{\n let fns = []\n if (Array.isArray(pattern)) {\n fns.push(anyOf(...pattern))\n } else if (pattern instanceof RegExp) {\n fns.push((data) => pattern.test(data))\n } else if (pattern instanceof Function) {\n fns.push((data) => pattern(data))\n } else if (!isPrimitiveWrapper(pattern)) {\n let patternMatches = {}\n for (const [wKey, wVal] of Object.entries(pattern)) {\n patternMatches[wKey] = getMatchFn(wVal)\n }\n let matchFn = (data) => {\n if (Array.isArray(data)) {\n return data.filter(element => matchFn(element)).length>0\n }\n if (isPrimitiveWrapper(data)) {\n return false\n }\n for (let wKey in patternMatches) {\n let patternMatchFn = patternMatches[wKey]\n if (!patternMatchFn(data?.[wKey])) {\n return false\n }\n }\n return true\n }\n fns.push(matchFn)\n } else {\n fns.push((data) => {\n if (Array.isArray(data)) {\n return data.filter(element => pattern==element).length>0\n } else {\n return pattern==data\n }\n })\n }\n if (fns.length==1) {\n return fns[0]\n }\n return (data) => {\n for (let fn of fns) {\n if (!fn(data)) {\n return false\n }\n }\n return true\n }\n}\n\n/**\n * If used in a pattern for orderBy(), denotes that the key\n * value should be sorted ascending\n */\nexport const asc = Symbol('asc')\n\n/**\n * If used in a pattern for orderBy(), denotes that the key\n * value should be sorted descending\n */\nexport const desc = Symbol('desc')\n\n/**\n * Returns a function to sort an array according to the pattern. A pattern is\n * an object with keys which are a sub pattern object or\n * one of the asc/desc symbols, or a custom sort(a,b) function\n * @param {mixed} pattern The comparison pattern\n * @return Function The function to use with toSorted()\n */\nexport function getSortFn(pattern)\n{\n let comparisons = Object.entries(pattern)\n let fns = []\n for (let [key,compare] of comparisons) {\n if (compare instanceof Function) {\n fns.push(compare)\n } else if (compare === asc) {\n fns.push((a,b) => (a[key]>b[key] ? 1 : a[key]<b[key] ? -1: 0))\n } else if (compare === desc) {\n fns.push((a,b) => (a[key]<b[key] ? 1 : a[key]>b[key] ? -1: 0))\n } else if (!isPrimitiveWrapper(compare)) {\n let subFn = getSortFn(compare)\n fns.push((a,b) => subFn(a[key],b[key]))\n } else {\n throw new Error('Unknown sort order',compare)\n }\n }\n if (fns.length==1) {\n return fns[0] // special case, if you only have one sort element, just return that, it is faster\n }\n return (a,b) => {\n for (let fn of fns) {\n let result = fn(a,b)\n if (result!==0) {\n return result\n }\n }\n return 0\n }\n}\n\n/**\n * Like getSelectFn this accepts an object, but function values must be\n * reducers.\n * @param {object|function} filter Which keys with which values you want\n * @return Function a function that reduces values\n */\nexport function getAggregateFn(filter)\n{\n let fns = []\n if (filter instanceof Function) {\n fns.push(filter)\n } else for (const [filterKey, filterValue] of Object.entries(filter)) {\n if (filterValue instanceof Function) {\n fns.push( (a, o, i, l) => {\n if (isPrimitiveWrapper(a)) {\n a = {}\n }\n if (o.reduce) {\n a[filterKey] = o.reduce(filterValue, a[filterKey] || [])\n } else {\n a[filterKey] = filterValue(a[filterKey] || [], o, i, l)\n }\n return a\n })\n } else if (!isPrimitiveWrapper(filterValue)) {\n fns.push( (a, o) => {\n if (isPrimitiveWrapper(a)) {\n a = {}\n }\n a[filterKey] = from(o[filterKey]).reduce(filterValue, [])\n return a\n })\n } else {\n fns.push( (a) => {\n if (isPrimitiveWrapper(a)) {\n a = {}\n }\n a[filterKey] = filterValue\n return a\n })\n }\n }\n if (fns.length==1) {\n return fns[0]\n }\n return (a, o, i, l) => {\n let result = {}\n for (let fn of fns) {\n Object.assign(result, fn(a, o, i, l))\n }\n return result\n }\n}\n\n/**\n * This is an alternative implementation of Object.groupBy\n * With support for objects being part of multiple groups\n * So if pointerFn() returns an array, each element of the\n * array is a group\n *\n */\nfunction getMatchingGroups(data, pointerFn)\n{\n let result = {}\n for (let entity of data) {\n let groups = pointerFn(entity)\n if (!Array.isArray(groups)) {\n groups = [groups]\n }\n for (let group of groups) {\n if (typeof group!='string' && !(group instanceof String)) {\n console.warn('JAQT: groupBy(selector) can only handle string values, got:',group)\n continue\n }\n if (!result[group]) {\n result[group] = []\n }\n result[group].push(entity)\n }\n }\n return result\n}\n\n/**\n * Returns a function that groups an array by one or more values defined in the pattern\n *\n * @param (object) data The data to parse and get the group from\n * @param (array) properties The properties to group by, in order, should be pointer functions\n */\nfunction groupBy(data, pointerFunctions)\n{\n let pointerFn = pointerFunctions.shift()\n if (typeof pointerFn=='string') {\n pointerFn = _[pointerFn]\n }\n if (typeof pointerFn != 'function') {\n throw new Error('groupBy parameters must be either a property name or a pointer function (e.g.: _.name)')\n }\n let groups = getMatchingGroups(data, pointerFn)\n if (pointerFunctions.length) {\n for (let group in groups) {\n groups[group] = groupBy(groups[group], pointerFunctions)\n }\n }\n return groups\n}\n\n/**\n * Creates a function to sum (add) all grouped values, assumes/enforces all values are floats\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.price\n * @return Function function (value, accumulator) => accumulator + value\n */\nexport function sum(fetchFn)\n{\n return (a,o) => {\n if (Array.isArray(a)) {\n a = 0\n }\n a += parseFloat(fetchFn(o)) || 0\n return a\n }\n}\n\n/**\n * Creates a function to average all grouped values, assumes/enforces all values are floats\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.price\n * @return Function function (value, accumulator) => average(accumulator + value)\n */\nexport function avg(fetchFn)\n{\n return (a,o,count) => {\n return +a + ((parseFloat(fetchFn(o)) || 0) - a) / (count+1)\n }\n}\n\n/**\n * Creates a function that removes duplicate values from the grouped data\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.name\n * @return Function\n */\nexport function distinct(fetchFn)\n{\n return (a, o, context) => {\n let v\n if (context=='select') {\n // a is the data param in select() context, o is the key\n v = fetchFn(a)\n if (Array.isArray(v)) { \n return v.filter((val,i,arr) => arr.indexOf(val)===i)\n }\n } else { \n // assume context is reduce, since context is the 3rd param, in reduce that contains the index\n // a is the accumulator, o is the current object/value\n let v = fetchFn(o)\n if (!a.includes[v]) {\n a.push(v)\n }\n }\n return a\n }\n}\n\n/**\n * Creates a function to count all grouped values\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.price\n * @return Function function (value, accumulator) => accumulator + 1\n */\nexport function count()\n{\n return (a) => {\n if (Array.isArray(a)) {\n a = 0\n }\n return a+1\n }\n}\n\n/**\n * Creates a function to find the maximum value in all grouped values, assumes/enforces all values are floats\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.price\n * @return Function function (value, accumulator) => Math.max(accumulator, value)\n */\nexport function max(fetchFn)\n{\n return (a,o) => {\n if (Array.isArray(a)) {\n a = Number.NEGATIVE_INFINITY\n }\n let value = parseFloat(fetchFn(o))\n if (!isNaN(value) && value>a) {\n a = value\n }\n return a\n }\n}\n\n/**\n * Creates a function to find the minimum value in all grouped values, assumes/enforces all values are floats\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.price\n * @return Function function (value, accumulator) => Math.min(accumulator, value)\n */\nexport function min(fetchFn)\n{\n return (a,o) => {\n if (Array.isArray(a)) {\n a = Number.POSITIVE_INFINITY\n }\n let value = parseFloat(fetchFn(o))\n if (!isNaN(value) && value<a) {\n a = value\n }\n return a\n }\n}\n\n\n/**\n * Not inverts the result from the matches function.\n * It returns a function expecting a data parameter and inverts the result\n * of matching that data with the pattern given to not()\n *\n * @param {mixed} pattern The pattern to match not\n * @return {function} A function that inverts the match, with a single data parameter\n */\nexport function not(...pattern)\n{\n let matchFn = getMatchFn(pattern)\n return data => !matchFn(data)\n}\n\n/**\n * AnyOf returns a function that returns true if any of the patterns match the data parameter\n *\n * @param {...mixed} patterns The patterns to test\n * @return {Boolean} True if at least one pattern matches\n */\nexport function anyOf(...patterns)\n{\n let matchFns = patterns.map(pattern => getMatchFn(pattern))\n return data => matchFns.some(fn => fn(data))\n}\n\n/**\n * AllOf returns a function that returns true if all of the patterns match the data parameter\n *\n * @param {...mixed} patterns The patterns to test\n * @return {Boolean} True if all of the patterns match\n */\nexport function allOf(...patterns)\n{\n let matchFns = patterns.map(pattern => getMatchFn(pattern))\n return data => matchFns\n .map(matchFn => matchFn(data))\n .filter(value => !value)\n .length===0\n}\n\n/**\n * Handler for proxying functions like filter, map, etc. So that\n * results of those functions will still be proxied when using from()\n * and you can chain .select() after it\n *\n * @type {Object}\n */\nconst FunctionProxyHandler = {\n apply(target, thisArg, argumentsList)\n {\n let result = target.apply(thisArg,argumentsList)\n if (typeof result === 'object') {\n return new Proxy(result, DataProxyHandler)\n }\n return result\n }\n}\n\n/**\n * Handler for proxying data returned with from()\n *\n * @type {Object}\n */\nconst DataProxyHandler = {\n get(target, property)\n {\n let result = null\n if (typeof property === 'symbol') { // handles iterators and other stuff we don't want to change\n result = target[property]\n }\n if (Array.isArray(target)) {\n switch(property) {\n case 'where':\n result = function(shape) {\n let matchFn = getMatchFn(shape)\n return new Proxy(target\n .filter(element => matchFn(element))\n , DataProxyHandler)\n }\n break\n case 'select':\n result = function(filter) {\n let selectFn = getSelectFn(filter)\n return new Proxy(target\n .map(selectFn)\n , DataProxyHandler)\n }\n break\n case 'reduce':\n result = function(pattern, initial=[]) {\n let aggregateFn = getAggregateFn(pattern)\n let temp = target.reduce(aggregateFn, initial)\n if (Array.isArray(temp)) {\n return new Proxy(temp, DataProxyHandler)\n } else if (!isPrimitiveWrapper(temp)) {\n return new Proxy(temp, GroupByProxyHandler)\n } else {\n return temp\n }\n }\n break\n case 'orderBy':\n result = function(pattern) {\n let sortFn = getSortFn(pattern)\n return new Proxy(target\n .toSorted(sortFn)\n , DataProxyHandler)\n }\n break\n case 'groupBy':\n result = function(...groups) {\n let temp = groupBy(target, groups)\n return new Proxy(temp\n , GroupByProxyHandler)\n }\n break\n }\n }\n if (!result && target && typeof target==='object') {\n if (property==='select') {\n result = function(filter) {\n let selector = getSelectFn(filter)\n return new Proxy(selector(target), DataProxyHandler)\n }\n }\n }\n if (!result && target && typeof target[property]==='function'\n ) {\n result = new Proxy(target[property], FunctionProxyHandler)\n }\n if (!result) {\n result = target[property]\n }\n return result\n }\n}\n\nconst GroupByProxyHandler = {\n get(target, property)\n {\n let result = null\n switch(property) {\n case 'select':\n result = function(filter) {\n let selectFn = getSelectFn(filter)\n let result = {}\n for (let group in target) {\n if (Array.isArray(target[group])) {\n result[group] = new Proxy(target[group].map(selectFn), DataProxyHandler)\n } else {\n result[group] = new Proxy(target[group], GroupByProxyHandler)\n }\n }\n return result\n }\n break\n case 'reduce':\n result = function(pattern, initial=[]) {\n let aggregateFn = getAggregateFn(pattern)\n let result = {}\n for (let group in target) {\n if (Array.isArray(target[group])) {\n let temp = target[group].reduce(aggregateFn, initial)\n if (Array.isArray(temp)) {\n result[group] = new Proxy(temp, DataProxyHandler)\n } else if (!isPrimitiveWrapper(temp)) {\n result[group] = new Proxy(temp, GroupByProxyHandler)\n } else {\n result[group] = temp\n }\n } else {\n result[group] = new Proxy(target[group], GroupByProxyHandler)\n }\n }\n return result\n }\n break\n default:\n if (Array.isArray(target[property])) {\n result = from(target[property])\n } else {\n result = target[property]\n }\n break\n }\n return result\n }\n}\n\n/**\n * Handler for proxying null of undefined values, so that\n * you can still chain the from.where.select functions\n *\n * @type {Object}\n */\nconst EmptyHandler = {\n get(target, property)\n {\n let result = null\n switch(property) {\n case 'where':\n result = function() {\n return new Proxy(new Null(), EmptyHandler)\n }\n break\n case 'reduce':\n case 'select':\n result = function() {\n return null\n }\n break\n case 'orderBy':\n result = function() {\n return new Proxy(new Null(), EmptyHandler)\n }\n break\n case 'groupBy':\n result = function() {\n return new Proxy(new Null(), EmptyHandler)\n }\n break\n }\n if (!result && typeof target?.[property] == 'function') {\n result = target[property];\n }\n return result\n }\n}\n\nclass Null \n{\n toJSON() {\n return null\n }\n}\n\n/**\n * This returns a proxy object for the given data, that adds\n * .where() and .select() functions\n *\n * @param {mixed} data The data to proxy\n * @return {Proxy} The proxy\n */\nexport function from(data)\n{\n if (!data || typeof data !== 'object') {\n return new Proxy(new Null(), EmptyHandler)\n }\n return new Proxy(data, DataProxyHandler)\n}\n\n/**\n * This is the function factory that builds the _ function\n * It will return a function that walks over the root object to\n * return the correct data\n *\n * @param {array} path The list of properties to access in order\n * @return {function} The accessor function that returns the data matching the path\n */\nfunction getPointerFn(path)\n{\n /**\n * The json pointer function\n * @param {mixed} data Any data\n * @param {string} key Optional key for data objects in select context or group in groupBy context\n * @return {mixed} data or data[key]\n */\n return (data, key) => {\n if (path?.length>0) {\n let localPath = path.slice()\n let prop = localPath.shift()\n while(prop) {\n if (Array.isArray(data) && parseInt(prop)!=prop) {\n localPath.unshift(prop) // put it back to call in .map\n return data.map(getPointerFn(localPath))\n } else if (typeof data?.[prop] != 'undefined') {\n data = data[prop]\n } else {\n data = null\n }\n prop = localPath.shift()\n }\n return data\n } else if (key) {\n if (typeof data?.[key] != 'undefined') {\n return data[key]\n } else {\n return null\n }\n } else {\n return data\n }\n }\n}\n\n/**\n * Handler for the getval proxy, used to implement _\n * The get trap handles things like _.key, it returns a function\n * so that select can apply it on result objects\n *\n * @type {Object}\n */\nconst pointerHandler = (path) => {\n if (!path) {\n path = []\n }\n return {\n get(target, property)\n {\n if (property=='constructor' || typeof property == 'symbol') {\n return target[property]\n }\n // creates a new path, which is passed to pointerFn en pointerHandler\n // so it is kept in a new stack frame\n let newpath = path.concat([property])\n return new Proxy(getPointerFn(newpath), pointerHandler(newpath))\n },\n apply(target, thisArg, argumentsList)\n {\n let result = target(...argumentsList)\n if (Array.isArray(result)) {\n result = result.flat(Infinity)\n }\n return result\n }\n }\n}\n\n/**\n * Placeholder in select queries that gets replaced with the\n * object or value being selected, or a specific key of that object\n *\n * @type {Proxy}\n */\nexport const _ = new Proxy(getPointerFn(), pointerHandler())\n", "import oldm from '@muze-nl/oldm'\n\nexport default function oldmmw(options)\n{\n\toptions = Object.assign({\n\t\tcontentType: 'text/turtle',\n\t\tprefixes: {\n\t\t 'ldp': 'http://www.w3.org/ns/ldp#',\n\t\t 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n\t\t 'dct': 'http://purl.org/dc/terms/',\n\t\t 'stat': 'http://www.w3.org/ns/posix/stat#',\n\t\t 'turtle': 'http://www.w3.org/ns/iana/media-types/text/turtle#',\n\t\t 'schem': 'https://schema.org/',\n\t\t 'solid': 'http://www.w3.org/ns/solid/terms#',\n\t\t 'acl': 'http://www.w3.org/ns/auth/acl#',\n\t\t 'pims': 'http://www.w3.org/ns/pim/space#',\n\t\t 'vcard': 'http://www.w3.org/2006/vcard/ns#',\n\t\t 'foaf': 'http://xmlns.com/foaf/0.1/'\n\t\t},\n\t\tparser: oldm.n3Parser,\n\t\twriter: oldm.n3Writer\n\t}, options)\n\n\tif (!options.prefixes['ldp']) {\n\t\toptions.prefixes['ldp'] = 'http://www.w3.org/ns/ldp#'\n\t}\n\n\tconst context = oldm.context(options)\n\n\treturn async function oldmmw(req, next) {\n\t\tif (!req.headers.get('Accept')) {\n req = req.with({\n headers: {\n 'Accept': options.accept ?? options.contentType\n }\n })\n }\n if (req.method!=='GET' && req.method!=='HEAD') {\n //https://developer.mozilla.org/en-US/docs/Web/API/Request/body\n if (req.data && typeof req.data=='object' && !(req.data instanceof ReadableStream)) {\n const contentType = req.headers.get('Content-Type')\n if (!contentType || isPlainText(contentType)) {\n req = req.with({\n headers: {\n 'Content-Type': options.contentType,\n }\n })\n }\n if (isLinkedData(req.headers.get('Content-Type'))) {\n req = req.with({\n body: await context.writer(req.data)\n })\n }\n }\n }\n let res = await next(req)\n if (res && isLinkedData(res.headers?.get('Content-Type'))) {\n \tlet tempRes = res.clone()\n \tlet body = await tempRes.text()\n \ttry {\n \t\tlet ld = context.parse(body, req.url, res.headers.get('Content-Type'))\n \t\treturn res.with({\n \t\t\tbody: ld\n \t\t})\n \t} catch(e) {\n \t\t// ignore parse errors\n \t}\n }\n return res\n\t}\n}\n\nconst mimetypes = [\n\t/^text\\/turtle\\b/,\n\t/^application\\/n-quads\\b/,\n\t/^text\\/x-nquads\\b/,\n\t/^appliction\\/n-triples\\b/,\n\t/^application\\/trig\\b/\n]\n\nfunction isLinkedData(contentType) {\n\tfor (const re of mimetypes) {\n\t\tif (re.exec(contentType)) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}", "import oldmmw from './oldmmw.mjs'\n\nglobalThis.oldmmw = oldmmw\n\nexport default oldmmw", "import Path from '@muze-nl/jsfs/src/Path.mjs';\nimport HttpAdapter from '@muze-nl/jsfs/src/Adapters/Http.mjs'\nimport {client, url} from '@muze-nl/metro/src/metro.mjs'\nimport getdatamw from '@muze-nl/metro/src/mw/getdata.mjs'\nimport oidc from '@muze-nl/metro-oidc'\nimport oldmmw from '@muze-nl/metro-oldm'\nimport oldm from '@muze-nl/oldm' \nimport { _, from } from '@muze-nl/jaqt/src/jaqt.mjs'\n\nexport default class SolidAdapter extends HttpAdapter\n{\n #client\n #path\n\n constructor(metroClient, path='/', solidConfiguration={})\n {\n metroClient = client(metroClient)\n .with( oidc.oidcmw(solidConfiguration))\n .with( oldmmw(solidConfiguration))\n path = new Path(path);\n super(metroClient, path)\n this.#client = metroClient\n this.#path = path\n }\n\n get name()\n {\n return 'SolidAdapter';\n }\n\n async read(path)\n {\n let response = await this.#client.get(path);\n let result = {\n type: this.getMimetype(response),\n name: Path.filename(path),\n http: {\n headers: response.headers,\n status: response.status,\n url: response.url\n }\n }\n if (response.data) {\n result.data = response.data\n }\n if (result.type.match(/text\\/.*/)) {\n result.contents = await response.text()\n } else if (result.type.match(/application\\/json.*/)) {\n result.contents = await response.json()\n } else {\n result.contents = await response.blob()\n }\n return result\n }\n\n async list(path)\n {\n let result = await this.read(path)\n if (result.data) {\n if (!result.data.primary?.ldp$contains) {\n throw new Error(path+' could not find ldp container', {cause: result})\n }\n return from(result.data.primary.ldp$contains)\n .where({\n a: 'ldp$Resource'\n })\n .select({\n filename: o => jsfs.path.filename(metro.url(o.id).pathname),\n path: o => metro.url(o.id).pathname,\n type: o => o.a.includes('ldp$Container') ? 'folder' : 'file'\n })\n } else {\n throw new Error(path+' could not be parsed', {cause: result}) \n }\n }\n\n}", "import '@muze-nl/jsfs'\nimport metro from '@muze-nl/metro'\nimport oidc from '@muze-nl/metro-oidc'\nimport '@muze-nl/oldm'\nimport '@muze-nl/jaqt'\nimport * as assert from '@muze-nl/assert'\nimport SolidAdapter from './SolidAdapter.js'\n\nexport function solidClient(...options) {\n\treturn new jsfs.fs(new SolidAdapter(...options))\n}\n\nexport default SolidAdapter\n\nglobalThis.solidClient = solidClient\nglobalThis.SolidAdapter = SolidAdapter"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["require_base64_js", "__commonJSMin", "exports", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "require_ieee754", "__commonJSMin", "exports", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "i", "s", "value", "c", "rt", "d", "require_buffer", "__commonJSMin", "exports", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "arr", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "value", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "byteLength", "actual", "fromArrayLike", "array", "i", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "list", "buffer", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "start", "end", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "m", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "offset", "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", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "require_primordials", "__commonJSMin", "exports", "module", "AggregateError", "errors", "message", "i", "self", "el", "sep", "fn", "start", "end", "thisArgs", "args", "instance", "props", "name", "prop", "obj", "target", "proto", "thenFn", "catchFn", "err", "val", "value", "buf", "len", "require_inspect", "__commonJSMin", "exports", "module", "format", "args", "_unused", "type", "replacement", "value", "require_errors", "__commonJSMin", "exports", "module", "format", "inspect", "CustomAggregateError", "AggregateError", "kIsNodeError", "kTypes", "classRegExp", "nodeInternalPrefix", "codes", "assert", "value", "message", "addNumericalSeparator", "val", "res", "i", "start", "getMessage", "key", "msg", "args", "expectedLength", "E", "code", "Base", "NodeError", "hideStackFrames", "fn", "hidden", "aggregateTwoErrors", "innerError", "outerError", "err", "AbortError", "options", "name", "expected", "actual", "types", "instances", "other", "pos", "last", "_actual$constructor", "inspected", "reason", "input", "_value$constructor", "type", "len", "a", "str", "range", "received", "limit", "require_browser", "__commonJSMin", "exports", "module", "AbortController", "AbortSignal", "require_events", "__commonJSMin", "exports", "module", "R", "ReflectApply", "target", "receiver", "args", "ReflectOwnKeys", "ProcessEmitWarning", "warning", "NumberIsNaN", "value", "EventEmitter", "once", "defaultMaxListeners", "checkListener", "listener", "arg", "n", "_getMaxListeners", "that", "type", "i", "doError", "events", "er", "err", "handler", "len", "listeners", "arrayClone", "_addListener", "prepend", "m", "existing", "w", "onceWrapper", "_onceWrap", "state", "wrapped", "list", "position", "originalListener", "spliceOne", "keys", "key", "_listeners", "unwrap", "evlistener", "unwrapListeners", "emitter", "listenerCount", "arr", "copy", "index", "ret", "name", "resolve", "reject", "errorListener", "resolver", "eventTargetAgnosticAddListener", "addErrorHandlerIfEventEmitter", "flags", "wrapListener", "require_util", "__commonJSMin", "exports", "module", "bufferModule", "format", "inspect", "ERR_INVALID_ARG_TYPE", "kResistStopPropagation", "AggregateError", "SymbolDispose", "AbortSignal", "AbortController", "AsyncFunction", "Blob", "isBlob", "b", "validateAbortSignal", "signal", "name", "validateFunction", "value", "callback", "called", "args", "resolve", "reject", "res", "rej", "fn", "err", "arr", "message", "listener", "removeEventListener", "_removeEventListener", "signals", "ac", "abort", "require_validators", "__commonJSMin", "exports", "module", "ArrayIsArray", "ArrayPrototypeIncludes", "ArrayPrototypeJoin", "ArrayPrototypeMap", "NumberIsInteger", "NumberIsNaN", "NumberMAX_SAFE_INTEGER", "NumberMIN_SAFE_INTEGER", "NumberParseInt", "ObjectPrototypeHasOwnProperty", "RegExpPrototypeExec", "String", "StringPrototypeToUpperCase", "StringPrototypeTrim", "hideStackFrames", "ERR_SOCKET_BAD_PORT", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_ARG_VALUE", "ERR_OUT_OF_RANGE", "ERR_UNKNOWN_SIGNAL", "normalizeEncoding", "isAsyncFunction", "isArrayBufferView", "signals", "isInt32", "value", "isUint32", "octalReg", "modeDesc", "parseFileMode", "name", "def", "validateUint32", "validateInteger", "min", "max", "validateInt32", "positive", "validateString", "validateNumber", "validateOneOf", "oneOf", "reason", "v", "validateBoolean", "getOwnPropertyValueOrDefault", "options", "key", "defaultValue", "validateObject", "allowArray", "allowFunction", "validateDictionary", "validateArray", "minLength", "validateStringArray", "i", "validateBooleanArray", "validateAbortSignalArray", "signal", "indexedName", "validateAbortSignal", "validateSignalName", "validateBuffer", "buffer", "validateEncoding", "data", "encoding", "normalizedEncoding", "length", "validatePort", "port", "allowZero", "validateFunction", "validatePlainFunction", "validateUndefined", "validateUnion", "union", "linkValueRegExp", "validateLinkHeaderFormat", "validateLinkHeaderValue", "hints", "hintsLength", "result", "link", "require_browser", "__commonJSMin", "exports", "module", "process", "cachedSetTimeout", "cachedClearTimeout", "defaultSetTimout", "defaultClearTimeout", "runTimeout", "fun", "runClearTimeout", "marker", "queue", "draining", "currentQueue", "queueIndex", "cleanUpNextTick", "drainQueue", "timeout", "len", "args", "i", "Item", "array", "noop", "name", "dir", "require_utils", "__commonJSMin", "exports", "module", "SymbolAsyncIterator", "SymbolIterator", "SymbolFor", "kIsDestroyed", "kIsErrored", "kIsReadable", "kIsWritable", "kIsDisturbed", "kIsClosedPromise", "kControllerErrorFunction", "isReadableNodeStream", "obj", "strict", "_obj$_readableState", "isWritableNodeStream", "_obj$_writableState", "isDuplexNodeStream", "isNodeStream", "isReadableStream", "isWritableStream", "isTransformStream", "isWebStream", "isIterable", "isAsync", "isDestroyed", "stream", "wState", "rState", "state", "isWritableEnded", "isWritableFinished", "isReadableEnded", "isReadableFinished", "isReadable", "isWritable", "isFinished", "opts", "isWritableErrored", "_stream$_writableStat", "_stream$_writableStat2", "isReadableErrored", "_stream$_readableStat", "_stream$_readableStat2", "isClosed", "isOutgoingMessage", "isServerResponse", "isServerRequest", "_stream$req", "willEmitClose", "isDisturbed", "_stream$kIsDisturbed", "isErrored", "_ref", "_ref2", "_ref3", "_ref4", "_ref5", "_stream$kIsErrored", "_stream$_readableStat3", "_stream$_writableStat3", "_stream$_readableStat4", "_stream$_writableStat4", "require_end_of_stream", "__commonJSMin", "exports", "module", "process", "AbortError", "codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PREMATURE_CLOSE", "kEmptyObject", "once", "validateAbortSignal", "validateFunction", "validateObject", "validateBoolean", "Promise", "PromisePrototypeThen", "SymbolDispose", "isClosed", "isReadable", "isReadableNodeStream", "isReadableStream", "isReadableFinished", "isReadableErrored", "isWritable", "isWritableNodeStream", "isWritableStream", "isWritableFinished", "isWritableErrored", "isNodeStream", "_willEmitClose", "kIsClosedPromise", "addAbortListener", "isRequest", "stream", "nop", "eos", "options", "callback", "_options$readable", "_options$writable", "eosWeb", "readable", "writable", "wState", "rState", "onlegacyfinish", "onfinish", "willEmitClose", "writableFinished", "readableFinished", "onend", "onerror", "err", "closed", "onclose", "errored", "onclosed", "onrequest", "cleanup", "abort", "endCallback", "disposable", "originalCallback", "args", "isAborted", "resolverFn", "finished", "opts", "_opts", "autoCleanup", "resolve", "reject", "require_destroy", "__commonJSMin", "exports", "module", "process", "aggregateTwoErrors", "ERR_MULTIPLE_CALLBACK", "AbortError", "Symbol", "kIsDestroyed", "isDestroyed", "isFinished", "isServerRequest", "kDestroy", "kConstruct", "checkError", "err", "w", "destroy", "cb", "s", "_destroy", "er", "self", "called", "onDestroy", "r", "emitErrorCloseNT", "emitCloseNT", "emitErrorNT", "undestroy", "errorOrDestroy", "stream", "sync", "construct", "constructNT", "onConstruct", "emitConstructNT", "isRequest", "emitCloseLegacy", "emitErrorCloseLegacy", "destroyer", "require_legacy", "__commonJSMin", "exports", "module", "ArrayIsArray", "ObjectSetPrototypeOf", "EE", "Stream", "opts", "dest", "options", "source", "ondata", "chunk", "ondrain", "onend", "onclose", "didOnEnd", "onerror", "er", "cleanup", "prependListener", "emitter", "event", "fn", "require_add_abort_signal", "__commonJSMin", "exports", "module", "SymbolDispose", "AbortError", "codes", "isNodeStream", "isWebStream", "kControllerErrorFunction", "eos", "ERR_INVALID_ARG_TYPE", "addAbortListener", "validateAbortSignal", "signal", "name", "stream", "onAbort", "disposable", "require_buffer_list", "__commonJSMin", "exports", "module", "StringPrototypeSlice", "SymbolIterator", "TypedArrayPrototypeSet", "Uint8Array", "Buffer", "inspect", "v", "entry", "ret", "s", "p", "n", "hasStrings", "data", "slice", "c", "str", "retLen", "buf", "_", "options", "require_state", "__commonJSMin", "exports", "module", "MathFloor", "NumberIsInteger", "validateInteger", "ERR_INVALID_ARG_VALUE", "defaultHighWaterMarkBytes", "defaultHighWaterMarkObjectMode", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getDefaultHighWaterMark", "objectMode", "setDefaultHighWaterMark", "value", "getHighWaterMark", "state", "hwm", "name", "require_safe_buffer", "__commonJSMin", "exports", "module", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_string_decoder", "__commonJSMin", "exports", "Buffer", "isEncoding", "encoding", "_normalizeEncoding", "enc", "retried", "normalizeEncoding", "nenc", "StringDecoder", "nb", "utf16Text", "utf16End", "utf8FillLast", "base64Text", "base64End", "simpleWrite", "simpleEnd", "buf", "r", "i", "utf8End", "utf8Text", "utf8CheckByte", "byte", "utf8CheckIncomplete", "self", "j", "utf8CheckExtraBytes", "p", "total", "end", "c", "n", "require_from", "__commonJSMin", "exports", "module", "process", "PromisePrototypeThen", "SymbolAsyncIterator", "SymbolIterator", "Buffer", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_NULL_VALUES", "from", "Readable", "iterable", "opts", "iterator", "isAsync", "readable", "reading", "next", "error", "cb", "close", "e", "hadError", "hasThrow", "value", "done", "res", "err", "require_readable", "__commonJSMin", "exports", "module", "process", "ArrayPrototypeIndexOf", "NumberIsInteger", "NumberIsNaN", "NumberParseInt", "ObjectDefineProperties", "ObjectKeys", "ObjectSetPrototypeOf", "Promise", "SafeSet", "SymbolAsyncDispose", "SymbolAsyncIterator", "Symbol", "Readable", "ReadableState", "EE", "Stream", "prependListener", "Buffer", "addAbortSignal", "eos", "debug", "fn", "BufferList", "destroyImpl", "getHighWaterMark", "getDefaultHighWaterMark", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_OUT_OF_RANGE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "AbortError", "validateObject", "kPaused", "StringDecoder", "from", "nop", "errorOrDestroy", "kObjectMode", "kEnded", "kEndEmitted", "kReading", "kConstructed", "kSync", "kNeedReadable", "kEmittedReadable", "kReadableListening", "kResumeScheduled", "kErrorEmitted", "kEmitClose", "kAutoDestroy", "kDestroyed", "kClosed", "kCloseEmitted", "kMultiAwaitDrain", "kReadingMore", "kDataEmitted", "makeBitMapDescriptor", "bit", "value", "options", "stream", "isDuplex", "maybeReadMore", "err", "cb", "error", "resolve", "reject", "chunk", "encoding", "readableAddChunk", "addToFront", "state", "onEofChunk", "addChunk", "emitReadable", "enc", "decoder", "buffer", "content", "data", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "pause", "pipeOnDrain", "er", "s", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "paused", "streamKeys", "j", "streamToAsyncIterator", "iter", "createAsyncIterator", "callback", "next", "r", "val", "endReadableNT", "endWritableNT", "wState", "iterable", "opts", "webStreamsAdapters", "lazyWebStreams", "readableStream", "streamReadable", "_ref", "_src$readableObjectMo", "require_writable", "__commonJSMin", "exports", "module", "process", "ArrayPrototypeSlice", "Error", "FunctionPrototypeSymbolHasInstance", "ObjectDefineProperty", "ObjectDefineProperties", "ObjectSetPrototypeOf", "StringPrototypeToLowerCase", "Symbol", "SymbolHasInstance", "Writable", "WritableState", "EE", "Stream", "Buffer", "destroyImpl", "addAbortSignal", "getHighWaterMark", "getDefaultHighWaterMark", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_ALREADY_FINISHED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "kOnFinished", "options", "stream", "isDuplex", "noDecode", "onwrite", "resetBuffer", "state", "clearBuffer", "finishMaybe", "object", "_write", "chunk", "encoding", "cb", "err", "writeOrBuffer", "callback", "len", "ret", "doWrite", "writev", "onwriteError", "er", "errorBuffer", "sync", "afterWriteTick", "afterWrite", "count", "n", "_state$errored", "onfinishCallbacks", "_state$errored2", "buffered", "bufferedIndex", "objectMode", "bufferedLength", "i", "chunks", "needFinish", "callFinal", "called", "onFinish", "finish", "prefinish", "rState", "value", "w", "val", "wState", "destroy", "webStreamsAdapters", "lazyWebStreams", "writableStream", "streamWritable", "require_duplexify", "__commonJSMin", "exports", "module", "process", "bufferModule", "isReadable", "isWritable", "isIterable", "isNodeStream", "isReadableNodeStream", "isWritableNodeStream", "isDuplexNodeStream", "isReadableStream", "isWritableStream", "eos", "AbortError", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "destroyer", "Duplex", "Readable", "Writable", "createDeferredPromise", "from", "Blob", "isBlob", "b", "AbortController", "FunctionPrototypeCall", "Duplexify", "options", "duplexify", "body", "name", "_duplexify", "value", "write", "final", "destroy", "fromAsyncGen", "then", "d", "promise", "val", "err", "cb", "readable", "writable", "fn", "resolve", "ac", "signal", "_promise", "chunk", "done", "encoding", "_resolve", "pair", "r", "w", "ondrain", "onfinish", "onreadable", "onclose", "onfinished", "callback", "buf", "require_duplex", "__commonJSMin", "exports", "module", "ObjectDefineProperties", "ObjectGetOwnPropertyDescriptor", "ObjectKeys", "ObjectSetPrototypeOf", "Duplex", "Readable", "Writable", "keys", "i", "method", "options", "value", "webStreamsAdapters", "lazyWebStreams", "pair", "duplex", "duplexify", "body", "require_transform", "__commonJSMin", "exports", "module", "ObjectSetPrototypeOf", "Symbol", "Transform", "ERR_METHOD_NOT_IMPLEMENTED", "Duplex", "getHighWaterMark", "kCallback", "options", "readableHighWaterMark", "prefinish", "final", "cb", "er", "data", "chunk", "encoding", "callback", "rState", "wState", "length", "err", "val", "require_passthrough", "__commonJSMin", "exports", "module", "ObjectSetPrototypeOf", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "process", "ArrayIsArray", "Promise", "SymbolAsyncIterator", "SymbolDispose", "eos", "once", "destroyImpl", "Duplex", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "ERR_STREAM_PREMATURE_CLOSE", "AbortError", "validateFunction", "validateAbortSignal", "isIterable", "isReadable", "isReadableNodeStream", "isNodeStream", "isTransformStream", "isWebStream", "isReadableStream", "isReadableFinished", "AbortController", "PassThrough", "Readable", "addAbortListener", "destroyer", "stream", "reading", "writing", "finished", "cleanup", "err", "popCallback", "streams", "makeAsyncIterable", "val", "fromReadable", "pumpToNode", "iterable", "writable", "finish", "end", "error", "onresolve", "resume", "callback", "wait", "resolve", "reject", "chunk", "pumpToWeb", "readable", "writer", "pipeline", "pipelineImpl", "opts", "ac", "signal", "outerSignal", "lastStreamCleanup", "abort", "finishImpl", "disposable", "value", "destroys", "finishCount", "final", "_disposable", "fn", "ret", "i", "isLastStream", "onError", "destroy", "_ret", "_ret2", "pt", "then", "toRead", "pipe", "src", "dst", "ended", "endFn", "rState", "require_compose", "__commonJSMin", "exports", "module", "pipeline", "Duplex", "destroyer", "isNodeStream", "isReadable", "isWritable", "isWebStream", "isTransformStream", "isWritableStream", "isReadableStream", "AbortError", "ERR_INVALID_ARG_VALUE", "ERR_MISSING_ARGS", "eos", "streams", "orgStreams", "idx", "n", "ondrain", "onfinish", "onreadable", "onclose", "d", "onfinished", "err", "cb", "readable", "writable", "head", "tail", "chunk", "encoding", "callback", "writer", "toRead", "buf", "reader", "value", "done", "require_operators", "__commonJSMin", "exports", "module", "AbortController", "ERR_INVALID_ARG_VALUE", "ERR_INVALID_ARG_TYPE", "ERR_MISSING_ARGS", "ERR_OUT_OF_RANGE", "AbortError", "validateAbortSignal", "validateInteger", "validateObject", "kWeakHandler", "kResistStopPropagation", "finished", "staticCompose", "addAbortSignalNoValidate", "isWritable", "isNodeStream", "deprecate", "ArrayPrototypePush", "Boolean", "MathFloor", "Number", "NumberIsNaN", "Promise", "PromiseReject", "PromiseResolve", "PromisePrototypeThen", "Symbol", "kEmpty", "kEof", "compose", "stream", "options", "composedStream", "map", "fn", "concurrency", "highWaterMark", "signal", "queue", "signalOpt", "next", "resume", "done", "cnt", "onCatch", "afterItemProcessed", "maybeResume", "pump", "val", "err", "resolve", "asIndexedPairs", "index", "_options$signal", "some", "unused", "filter", "every", "args", "find", "result", "forEach", "forEachFn", "value", "filterFn", "ReduceAwareErrMissingArgs", "reduce", "reducer", "initialValue", "_options$signal2", "hasInitialValue", "ac", "opts", "gotAnyItemFromStream", "_options$signal3", "toArray", "_options$signal4", "flatMap", "values", "toIntegerOrInfinity", "number", "drop", "_options$signal5", "_options$signal6", "take", "_options$signal7", "_options$signal8", "require_promises", "__commonJSMin", "exports", "module", "ArrayPrototypePop", "Promise", "isIterable", "isNodeStream", "isWebStream", "pl", "finished", "pipeline", "streams", "resolve", "reject", "signal", "end", "lastArg", "options", "err", "value", "require_stream", "__commonJSMin", "exports", "module", "Buffer", "ObjectDefineProperty", "ObjectKeys", "ReflectApply", "customPromisify", "streamReturningOperators", "promiseReturningOperators", "ERR_ILLEGAL_CONSTRUCTOR", "compose", "setDefaultHighWaterMark", "getDefaultHighWaterMark", "pipeline", "destroyer", "eos", "promises", "utils", "Stream", "key", "fn", "args", "op", "addAbortSignal", "value", "chunk", "require_browser", "__commonJSMin", "exports", "module", "CustomStream", "promises", "originalDestroy", "Path", "_Path", "#value", "path", "cwd", "pathnames", "result", "entry", "reducer", "initial", "callback", "FileSystem", "_FileSystem", "#adapter", "#path", "adapter", "path", "Path", "reader", "contents", "metadata", "metro_exports", "__export", "Client", "client", "deepClone", "formdata", "metroError", "request", "response", "trace", "url", "metroURL", "_Client", "options", "option", "#addMiddlewares", "param", "verb", "middlewares", "index", "m", "req", "res", "next", "middleware", "tracers", "tracer", "getRequestParams", "current", "params", "prop", "value", "key", "val", "requestParams", "data", "target", "result", "getResponseParams", "responseParams", "r", "appendSearchParams", "validParams", "u", "entry", "metroConsole", "message", "details", "name", "group", "object", "HttpAdapter", "#client", "#path", "metroClient", "path", "client", "Path", "supportsRequestStreams", "contents", "metadata", "writer", "response", "result", "reader", "supportedContentTypes", "html", "url", "basePath", "parentUrl", "dom", "links", "link", "testURL", "jsfs", "FileSystem", "HttpAdapter", "Path", "jsonmw", "options", "req", "next", "contentType", "isPlainText", "isJSON", "res", "body", "json", "jsonRE", "throwermw", "options", "req", "next", "res", "getdatamw", "req", "next", "res", "API", "Client", "base", "methods", "bind", "throwermw", "getdatamw", "methodName", "JsonAPI", "jsonmw", "client", "api", "options", "deepClone", "jsonApi", "metro", "metro_exports", "jsonmw", "throwermw", "getdatamw", "api", "jsonApi", "everything_default", "assert", "source", "test", "problems", "fails", "Optional", "pattern", "data", "root", "path", "Required", "error", "Recommended", "warn", "oneOf", "patterns", "anyOf", "value", "allOf", "validURL", "url", "validEmail", "instanceOf", "constructor", "not", "index", "element", "problem", "p", "result", "patternKey", "subpattern", "message", "found", "expected", "tokenStore", "site", "localState", "localTokens", "value", "name", "stateMap", "oauth2mw", "options", "defaultOptions", "client", "generateCodeVerifier", "url", "assert", "oauth2", "store", "tokenStore", "Required", "validURL", "option", "req", "next", "oauth2authorized", "res", "err", "getTokensFromLocation", "accessToken", "refreshToken", "tokenIsExpired", "isExpired", "fetchAccessToken", "response", "e", "refreshAccessToken", "request", "code", "state", "params", "query", "storedState", "authReqURL", "getAuthorizationCodeURL", "metroError", "token", "tokenReq", "getAccessTokenRequest", "msg", "data", "getExpires", "refreshTokenReq", "search", "createState", "generateCodeChallenge", "grant_type", "code_verifier", "expires", "duration", "date", "size", "base64url_encode", "challenge", "buffer", "byteString", "b", "length", "validChars", "randomState", "counter", "isRedirected", "keysStore", "resolve", "reject", "request", "event", "db", "value", "key", "tx", "objectStore", "encoder", "decoder", "buf", "input", "checkRsaKeyAlgorithm", "algorithm", "OperationProcessingError", "subtleAlgorithm", "key", "UnsupportedOperationError", "jwt", "header", "claimsSet", "b64u", "signature", "CHUNK_SIZE", "encodeBase64Url", "arr", "i", "randomBytes", "message", "psAlg", "rsAlg", "esAlg", "determineJWSAlgorithm", "isCryptoKey", "isPrivateKey", "isPublicKey", "epochTime", "DPoP", "keypair", "htu", "htm", "nonce", "accessToken", "additional", "privateKey", "publicKey", "publicJwk", "kty", "e", "x", "y", "crv", "generateKeyPair", "alg", "options", "dpopmw", "options", "assert", "Required", "validURL", "Optional", "req", "next", "keys", "keysStore", "keyInfo", "keyPair", "generateKeyPair", "url", "everything_default", "params", "dpopHeader", "DPoP", "nonce", "accessToken", "response", "MustHave", "options", "value", "root", "o", "error", "MustInclude", "validJWA", "validAuthMethods", "oidcDiscovery", "options", "assert", "Optional", "instanceOf", "everything_default", "Required", "validURL", "defaultOptions", "throwermw", "jsonmw", "TestSucceeded", "MustUseHTTPS", "url", "openid_provider_metadata", "allOf", "Recommended", "MustInclude", "anyOf", "validAuthMethods", "not", "configURL", "openid_config", "register", "options", "openid_client_metadata", "Required", "validURL", "Optional", "anyOf", "oneOf", "validEmail", "not", "MustHave", "validJWA", "validAuthMethods", "assert", "instanceOf", "everything_default", "defaultOptions", "throwermw", "jsonmw", "response", "info", "oidcStore", "site", "store", "name", "value", "storeMap", "oidcmw", "options", "defaultOptions", "client", "url", "assert", "Required", "instanceOf", "validURL", "Optional", "oidcStore", "req", "next", "res", "err", "oidcDiscovery", "metroError", "register", "scope", "oauth2Options", "storeIdToken", "id_token", "res2", "data", "oauth2client", "dpopOptions", "dpopmw", "oauth2mw", "isRedirected", "idToken", "oidc", "oidcmw", "oidcDiscovery", "register", "isRedirected", "idToken", "browser_default", "oldm", "options", "Context", "rdfType", "prefixes", "input", "url", "type", "quads", "prefix", "prefixURL", "err", "Graph", "literal", "shortType", "#blankNodes", "mimetype", "context", "quad", "subject", "shortPred", "shortObj", "value", "uri", "absURI", "NamedNode", "id", "BlankNode", "Collection", "shortID", "shortURI", "separator", "path", "fullURI", "language", "object", "result", "datatype", "graph", "predicate", "oldm_n3_exports", "__export", "n3Parser", "n3Writer", "import_buffer", "RDF", "XSD", "SWAP", "IRIs_default", "xsd", "IRIs_default", "escapeSequence", "escapeReplacements", "illegalIriChars", "lineModeRegExps", "invalidRegExp", "N3Lexer", "options", "key", "callback", "inputFinished", "input", "currentLineLength", "whiteSpaceMatch", "comment", "emitToken", "line", "firstChar", "type", "value", "prefix", "match", "matchLength", "inconclusive", "reportSyntaxError", "length", "token", "start", "end", "self", "item", "invalid", "replaced", "sequence", "unicode4", "unicode8", "escapedChar", "charCode", "opening", "openingLength", "closingPos", "backslashCount", "raw", "lines", "issue", "err", "tokens", "error", "e", "t", "data", "rdf", "xsd", "IRIs_default", "DEFAULTGRAPH", "_blankNodeCounter", "DataFactory", "namedNode", "blankNode", "variable", "literal", "defaultGraph", "quad", "fromTerm", "fromQuad", "N3DataFactory_default", "Term", "_Term", "id", "other", "NamedNode", "Literal", "_Literal", "atPos", "dtPos", "char", "xsd", "rdf", "BlankNode", "name", "Variable", "DefaultGraph", "DEFAULTGRAPH", "termFromId", "factory", "nested", "endPos", "termToId", "term", "res", "Quad", "subject", "predicate", "object", "graph", "namedNode", "iri", "NamedNode", "blankNode", "name", "BlankNode", "_blankNodeCounter", "literal", "value", "languageOrDataType", "Literal", "datatype", "xsd", "variable", "Variable", "defaultGraph", "DEFAULTGRAPH", "quad", "subject", "predicate", "object", "graph", "Quad", "fromTerm", "term", "Term", "fromQuad", "inQuad", "blankNodePrefix", "N3Parser", "options", "initDataFactory", "format", "isTurtle", "isTriG", "isNTriples", "isNQuads", "isN3", "isLineMode", "iri", "N3Lexer", "baseIRI", "fragmentPos", "type", "graph", "subject", "predicate", "object", "n3Mode", "token", "context", "quantifier", "value", "prefix", "empty", "item", "list", "next", "previousList", "stack", "parent", "literal", "datatype", "listItem", "completed", "inversePredicate", "prefixNode", "entity", "afterPath", "quad", "contextStack", "message", "err", "noop", "length", "result", "pathStart", "segmentStart", "input", "quadCallback", "prefixCallback", "onQuad", "onPrefix", "onComment", "quads", "error", "e", "t", "processNextToken", "parser", "factory", "IRIs_default", "N3DataFactory_default", "N3Util_exports", "__export", "inDefaultGraph", "isBlankNode", "isDefaultGraph", "isLiteral", "isNamedNode", "isQuad", "isVariable", "prefix", "prefixes", "isNamedNode", "term", "isBlankNode", "isLiteral", "isVariable", "isQuad", "isDefaultGraph", "inDefaultGraph", "quad", "prefix", "iri", "factory", "prefixes", "defaultPrefixes", "processPrefix", "N3DataFactory_default", "cache", "local", "escapeRegex", "regex", "BASE_UNSUPPORTED", "SUFFIX_SUPPORTED", "CURRENT", "PARENT", "QUERY", "FRAGMENT", "BaseIRI", "_BaseIRI", "base", "scheme", "regexHead", "escapeRegex", "regexTail", "segments", "segmenter", "segment", "query", "fragment", "last", "i", "iri", "match", "length", "parentPath", "suffix", "DEFAULTGRAPH", "N3DataFactory_default", "rdf", "xsd", "IRIs_default", "escape", "escapeAll", "escapedCharacters", "SerializedTerm", "Term", "other", "N3Writer", "outputStream", "options", "output", "chunk", "encoding", "done", "BaseIRI", "string", "callback", "subject", "predicate", "object", "graph", "error", "quads", "quadsString", "quad", "entity", "iri", "characterReplacer", "prefixMatch", "literal", "value", "isDefaultGraph", "i", "prefix", "prefixes", "hasPrefixes", "IRIlist", "prefixList", "prefixIRI", "escapeRegex", "children", "child", "length", "contents", "elements", "singleDone", "result", "character", "import_readable_stream", "ITERATOR", "merge", "target", "source", "depth", "key", "intersect", "s1", "s2", "intersection", "difference", "diff", "N3EntityIndex", "options", "N3DataFactory_default", "id", "entities", "terms", "termFromId", "term", "s", "p", "o", "g", "isDefaultGraph", "termToId", "str", "suggestedName", "name", "index", "N3Store", "_N3Store", "quads", "size", "graphs", "subjects", "subject", "graphKey", "subjectKey", "predicateKey", "index0", "key0", "key1", "key2", "index1", "index2", "existed", "name0", "name1", "name2", "graphId", "tmp", "entityKeys", "graph", "parts", "value0", "value1", "values", "l", "callback", "count", "uniqueIds", "quad", "predicate", "object", "graphItem", "i", "subjectOrQuad", "stream", "predicates", "iterable", "done", "value", "content", "subjectId", "predicateId", "objectId", "DatasetCoreAndReadableStream", "results", "remove", "ignoreErrors", "lists", "onError", "node", "message", "tails", "IRIs_default", "toRemove", "tailQuad", "items", "malformed", "head", "headPos", "current", "objectQuads", "subjectQuads", "first", "rest", "parent", "other", "g1", "g2", "p1", "p2", "o1", "store", "iteratee", "initialValue", "iter", "accumulator", "N3Writer", "indexMatch", "ids", "ind", "result", "_DatasetCoreAndReadableStream", "n3Store", "newStore", "objects", "N3DatasetCoreFactory", "quads", "N3Store", "getRulesFromDataset", "dataset", "rules", "subject", "object", "N3DataFactory_default", "premise", "conclusion", "N3Reasoner", "store", "predicate", "graphItem", "cb", "rule", "content", "v1", "v2", "value", "index1", "index2", "val0", "val1", "val2", "index", "v0", "c", "newRules", "addRule", "addConclusions", "r", "v3", "varMapping", "toId", "t", "term", "p", "r1", "r2", "i", "termEq", "set", "j", "getIndex", "v", "graphs", "graphId", "s", "t1", "t2", "import_readable_stream", "N3StreamParser", "options", "parser", "N3Parser", "onData", "onEnd", "callbacks", "error", "quad", "prefix", "uri", "comment", "event", "callback", "chunk", "encoding", "done", "stream", "import_readable_stream", "N3StreamWriter", "options", "writer", "N3Writer", "quad", "encoding", "callback", "done", "stream", "error", "prefix", "iri", "src_default", "N3Lexer", "N3Parser", "N3Writer", "N3Store", "N3DatasetCoreFactory", "N3EntityIndex", "N3StreamParser", "N3StreamWriter", "N3Util_exports", "N3Reasoner", "BaseIRI", "N3DataFactory_default", "Term", "NamedNode", "Literal", "BlankNode", "Variable", "DefaultGraph", "Quad", "termFromId", "termToId", "n3Parser", "input", "uri", "type", "parser", "src_default", "prefixes", "prefix", "url", "n3Writer", "source", "resolve", "reject", "writer", "xsd", "quad", "namedNode", "literal", "blankNode", "writeClassNames", "id", "subject", "classNames", "name", "rdfType", "writeProperties", "preds", "getPredicates", "pred", "o", "object", "entry", "predicate", "fullPred", "Collection", "getCollection", "getArray", "NamedNode", "BlankNode", "getBlankNode", "isLiteral", "getLiteral", "language", "value", "list", "error", "result", "oldm", "oldm_n3_exports", "src_default", "isPrimitiveWrapper", "data", "getSelectFn", "filter", "fns", "filterKey", "filterValue", "data", "isPrimitiveWrapper", "from", "result", "fn", "getMatchFn", "pattern", "anyOf", "element", "patternMatches", "wKey", "wVal", "matchFn", "patternMatchFn", "asc", "desc", "getSortFn", "comparisons", "key", "compare", "a", "b", "subFn", "getAggregateFn", "o", "i", "l", "getMatchingGroups", "pointerFn", "entity", "groups", "group", "groupBy", "pointerFunctions", "_", "anyOf", "patterns", "matchFns", "pattern", "getMatchFn", "data", "fn", "FunctionProxyHandler", "target", "thisArg", "argumentsList", "result", "DataProxyHandler", "property", "shape", "matchFn", "getMatchFn", "element", "filter", "selectFn", "getSelectFn", "pattern", "initial", "aggregateFn", "getAggregateFn", "temp", "isPrimitiveWrapper", "GroupByProxyHandler", "sortFn", "getSortFn", "groups", "groupBy", "selector", "group", "from", "EmptyHandler", "Null", "data", "getPointerFn", "path", "key", "localPath", "prop", "pointerHandler", "newpath", "_", "oldmmw", "options", "src_default", "context", "req", "next", "contentType", "isLinkedData", "res", "body", "ld", "mimetypes", "re", "oldmmw", "src_default", "SolidAdapter", "HttpAdapter", "#client", "#path", "metroClient", "path", "solidConfiguration", "client", "browser_default", "src_default", "Path", "response", "result", "from", "o", "solidClient", "options", "SolidAdapter", "SolidClient_default"]
|
|
3
|
+
"sources": ["../node_modules/base64-js/index.js", "../node_modules/ieee754/index.js", "../node_modules/buffer/index.js", "../node_modules/readable-stream/lib/ours/primordials.js", "../node_modules/readable-stream/lib/ours/util/inspect.js", "../node_modules/readable-stream/lib/ours/errors.js", "../node_modules/abort-controller/browser.js", "../node_modules/events/events.js", "../node_modules/readable-stream/lib/ours/util.js", "../node_modules/readable-stream/lib/internal/validators.js", "../node_modules/process/browser.js", "../node_modules/readable-stream/lib/internal/streams/utils.js", "../node_modules/readable-stream/lib/internal/streams/end-of-stream.js", "../node_modules/readable-stream/lib/internal/streams/destroy.js", "../node_modules/readable-stream/lib/internal/streams/legacy.js", "../node_modules/readable-stream/lib/internal/streams/add-abort-signal.js", "../node_modules/readable-stream/lib/internal/streams/buffer_list.js", "../node_modules/readable-stream/lib/internal/streams/state.js", "../node_modules/safe-buffer/index.js", "../node_modules/string_decoder/lib/string_decoder.js", "../node_modules/readable-stream/lib/internal/streams/from.js", "../node_modules/readable-stream/lib/internal/streams/readable.js", "../node_modules/readable-stream/lib/internal/streams/writable.js", "../node_modules/readable-stream/lib/internal/streams/duplexify.js", "../node_modules/readable-stream/lib/internal/streams/duplex.js", "../node_modules/readable-stream/lib/internal/streams/transform.js", "../node_modules/readable-stream/lib/internal/streams/passthrough.js", "../node_modules/readable-stream/lib/internal/streams/pipeline.js", "../node_modules/readable-stream/lib/internal/streams/compose.js", "../node_modules/readable-stream/lib/internal/streams/operators.js", "../node_modules/readable-stream/lib/stream/promises.js", "../node_modules/readable-stream/lib/stream.js", "../node_modules/readable-stream/lib/ours/browser.js", "../node_modules/@muze-nl/jsfs/src/Path.mjs", "../node_modules/@muze-nl/jsfs/src/FileSystem.mjs", "../node_modules/@muze-nl/metro/src/metro.mjs", "../node_modules/@muze-nl/jsfs/src/Adapters/Http.mjs", "../node_modules/@muze-nl/jsfs/src/index.mjs", "../node_modules/@muze-nl/metro/src/mw/json.mjs", "../node_modules/@muze-nl/metro/src/mw/thrower.mjs", "../node_modules/@muze-nl/metro/src/mw/getdata.mjs", "../node_modules/@muze-nl/metro/src/api.mjs", "../node_modules/@muze-nl/metro/src/everything.mjs", "../node_modules/@muze-nl/assert/src/assert.mjs", "../node_modules/@muze-nl/metro-oauth2/src/tokenstore.mjs", "../node_modules/@muze-nl/metro-oauth2/src/oauth2.mjs", "../node_modules/@muze-nl/metro-oauth2/src/keysstore.mjs", "../node_modules/dpop/src/index.ts", "../node_modules/@muze-nl/metro-oauth2/src/oauth2.dpop.mjs", "../node_modules/@muze-nl/metro-oidc/src/oidc.util.mjs", "../node_modules/@muze-nl/metro-oidc/src/oidc.discovery.mjs", "../node_modules/@muze-nl/metro-oidc/src/oidc.register.mjs", "../node_modules/@muze-nl/metro-oidc/src/oidc.store.mjs", "../node_modules/@muze-nl/metro-oidc/src/oidcmw.mjs", "../node_modules/@muze-nl/metro-oidc/src/browser.mjs", "../node_modules/@muze-nl/oldm/src/oldm.mjs", "../node_modules/@muze-nl/oldm/src/oldm-n3.mjs", "../node_modules/n3/src/N3Lexer.js", "../node_modules/n3/src/IRIs.js", "../node_modules/n3/src/N3DataFactory.js", "../node_modules/n3/src/N3Parser.js", "../node_modules/n3/src/N3Util.js", "../node_modules/n3/src/Util.js", "../node_modules/n3/src/BaseIRI.js", "../node_modules/n3/src/N3Writer.js", "../node_modules/n3/src/N3Store.js", "../node_modules/n3/src/N3StoreFactory.js", "../node_modules/n3/src/N3Reasoner.js", "../node_modules/n3/src/N3StreamParser.js", "../node_modules/n3/src/N3StreamWriter.js", "../node_modules/n3/src/index.js", "../node_modules/@muze-nl/oldm/src/index.mjs", "../node_modules/@muze-nl/jaqt/src/jaqt.mjs", "../node_modules/@muze-nl/metro-oldm/src/oldmmw.mjs", "../node_modules/@muze-nl/metro-oldm/src/index.mjs", "../src/SolidAdapter.js", "../src/SolidClient.js"],
|
|
4
|
+
"sourcesContent": ["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction 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 }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction 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\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction 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 var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n", "/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.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\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.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\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n", "/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\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 */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\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\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction 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(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\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 &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction 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\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction 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\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\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction 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 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 }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction 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 return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction 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 ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.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 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\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\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!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 if (length === undefined) {\n length = 0\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 for (i = 0; i < list.length; ++i) {\n let buf = list[i]\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(\n buffer,\n buf,\n pos\n )\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 pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// 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\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\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 return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\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 return this\n}\n\nBuffer.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\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.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\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.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}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.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 if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\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}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\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 }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\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 if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\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 return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\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\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n 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\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction 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 return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n 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\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.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\nBuffer.prototype.readUint16BE =\nBuffer.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\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.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 if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.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 if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.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 & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.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 if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.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 if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.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\nBuffer.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\nBuffer.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\nBuffer.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\nfunction 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\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\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 & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\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 & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\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(0xffffffff))\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\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\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(0xffffffff))\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\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\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 & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\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 & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!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\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n 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(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n 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 }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\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)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\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\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n 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)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\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 if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\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 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction 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',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction 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)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\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) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\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 return i\n}\n\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\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n", "'use strict'\n\n/*\n This file is a reduced and adapted version of the main lib/internal/per_context/primordials.js file defined at\n\n https://github.com/nodejs/node/blob/main/lib/internal/per_context/primordials.js\n\n Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\n\n// This is a simplified version of AggregateError\nclass AggregateError extends Error {\n constructor(errors) {\n if (!Array.isArray(errors)) {\n throw new TypeError(`Expected input to be an Array, got ${typeof errors}`)\n }\n let message = ''\n for (let i = 0; i < errors.length; i++) {\n message += ` ${errors[i].stack}\\n`\n }\n super(message)\n this.name = 'AggregateError'\n this.errors = errors\n }\n}\nmodule.exports = {\n AggregateError,\n ArrayIsArray(self) {\n return Array.isArray(self)\n },\n ArrayPrototypeIncludes(self, el) {\n return self.includes(el)\n },\n ArrayPrototypeIndexOf(self, el) {\n return self.indexOf(el)\n },\n ArrayPrototypeJoin(self, sep) {\n return self.join(sep)\n },\n ArrayPrototypeMap(self, fn) {\n return self.map(fn)\n },\n ArrayPrototypePop(self, el) {\n return self.pop(el)\n },\n ArrayPrototypePush(self, el) {\n return self.push(el)\n },\n ArrayPrototypeSlice(self, start, end) {\n return self.slice(start, end)\n },\n Error,\n FunctionPrototypeCall(fn, thisArgs, ...args) {\n return fn.call(thisArgs, ...args)\n },\n FunctionPrototypeSymbolHasInstance(self, instance) {\n return Function.prototype[Symbol.hasInstance].call(self, instance)\n },\n MathFloor: Math.floor,\n Number,\n NumberIsInteger: Number.isInteger,\n NumberIsNaN: Number.isNaN,\n NumberMAX_SAFE_INTEGER: Number.MAX_SAFE_INTEGER,\n NumberMIN_SAFE_INTEGER: Number.MIN_SAFE_INTEGER,\n NumberParseInt: Number.parseInt,\n ObjectDefineProperties(self, props) {\n return Object.defineProperties(self, props)\n },\n ObjectDefineProperty(self, name, prop) {\n return Object.defineProperty(self, name, prop)\n },\n ObjectGetOwnPropertyDescriptor(self, name) {\n return Object.getOwnPropertyDescriptor(self, name)\n },\n ObjectKeys(obj) {\n return Object.keys(obj)\n },\n ObjectSetPrototypeOf(target, proto) {\n return Object.setPrototypeOf(target, proto)\n },\n Promise,\n PromisePrototypeCatch(self, fn) {\n return self.catch(fn)\n },\n PromisePrototypeThen(self, thenFn, catchFn) {\n return self.then(thenFn, catchFn)\n },\n PromiseReject(err) {\n return Promise.reject(err)\n },\n PromiseResolve(val) {\n return Promise.resolve(val)\n },\n ReflectApply: Reflect.apply,\n RegExpPrototypeTest(self, value) {\n return self.test(value)\n },\n SafeSet: Set,\n String,\n StringPrototypeSlice(self, start, end) {\n return self.slice(start, end)\n },\n StringPrototypeToLowerCase(self) {\n return self.toLowerCase()\n },\n StringPrototypeToUpperCase(self) {\n return self.toUpperCase()\n },\n StringPrototypeTrim(self) {\n return self.trim()\n },\n Symbol,\n SymbolFor: Symbol.for,\n SymbolAsyncIterator: Symbol.asyncIterator,\n SymbolHasInstance: Symbol.hasInstance,\n SymbolIterator: Symbol.iterator,\n SymbolDispose: Symbol.dispose || Symbol('Symbol.dispose'),\n SymbolAsyncDispose: Symbol.asyncDispose || Symbol('Symbol.asyncDispose'),\n TypedArrayPrototypeSet(self, buf, len) {\n return self.set(buf, len)\n },\n Boolean,\n Uint8Array\n}\n", "'use strict'\n\n/*\n This file is a reduced and adapted version of the main lib/internal/util/inspect.js file defined at\n\n https://github.com/nodejs/node/blob/main/lib/internal/util/inspect.js\n\n Don't try to replace with the original file and keep it up to date with the upstream file.\n*/\nmodule.exports = {\n format(format, ...args) {\n // Simplified version of https://nodejs.org/api/util.html#utilformatformat-args\n return format.replace(/%([sdifj])/g, function (...[_unused, type]) {\n const replacement = args.shift()\n if (type === 'f') {\n return replacement.toFixed(6)\n } else if (type === 'j') {\n return JSON.stringify(replacement)\n } else if (type === 's' && typeof replacement === 'object') {\n const ctor = replacement.constructor !== Object ? replacement.constructor.name : ''\n return `${ctor} {}`.trim()\n } else {\n return replacement.toString()\n }\n })\n },\n inspect(value) {\n // Vastly simplified version of https://nodejs.org/api/util.html#utilinspectobject-options\n switch (typeof value) {\n case 'string':\n if (value.includes(\"'\")) {\n if (!value.includes('\"')) {\n return `\"${value}\"`\n } else if (!value.includes('`') && !value.includes('${')) {\n return `\\`${value}\\``\n }\n }\n return `'${value}'`\n case 'number':\n if (isNaN(value)) {\n return 'NaN'\n } else if (Object.is(value, -0)) {\n return String(value)\n }\n return value\n case 'bigint':\n return `${String(value)}n`\n case 'boolean':\n case 'undefined':\n return String(value)\n case 'object':\n return '{}'\n }\n }\n}\n", "'use strict'\n\nconst { format, inspect } = require('./util/inspect')\nconst { AggregateError: CustomAggregateError } = require('./primordials')\n\n/*\n This file is a reduced and adapted version of the main lib/internal/errors.js file defined at\n\n https://github.com/nodejs/node/blob/main/lib/internal/errors.js\n\n Don't try to replace with the original file and keep it up to date (starting from E(...) definitions)\n with the upstream file.\n*/\n\nconst AggregateError = globalThis.AggregateError || CustomAggregateError\nconst kIsNodeError = Symbol('kIsNodeError')\nconst kTypes = [\n 'string',\n 'function',\n 'number',\n 'object',\n // Accept 'Function' and 'Object' as alternative to the lower cased version.\n 'Function',\n 'Object',\n 'boolean',\n 'bigint',\n 'symbol'\n]\nconst classRegExp = /^([A-Z][a-z0-9]*)+$/\nconst nodeInternalPrefix = '__node_internal_'\nconst codes = {}\nfunction assert(value, message) {\n if (!value) {\n throw new codes.ERR_INTERNAL_ASSERTION(message)\n }\n}\n\n// Only use this for integers! Decimal numbers do not work with this function.\nfunction addNumericalSeparator(val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\nfunction getMessage(key, msg, args) {\n if (typeof msg === 'function') {\n assert(\n msg.length <= args.length,\n // Default options do not count.\n `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${msg.length}).`\n )\n return msg(...args)\n }\n const expectedLength = (msg.match(/%[dfijoOs]/g) || []).length\n assert(\n expectedLength === args.length,\n `Code: ${key}; The provided arguments length (${args.length}) does not match the required ones (${expectedLength}).`\n )\n if (args.length === 0) {\n return msg\n }\n return format(msg, ...args)\n}\nfunction E(code, message, Base) {\n if (!Base) {\n Base = Error\n }\n class NodeError extends Base {\n constructor(...args) {\n super(getMessage(code, message, args))\n }\n toString() {\n return `${this.name} [${code}]: ${this.message}`\n }\n }\n Object.defineProperties(NodeError.prototype, {\n name: {\n value: Base.name,\n writable: true,\n enumerable: false,\n configurable: true\n },\n toString: {\n value() {\n return `${this.name} [${code}]: ${this.message}`\n },\n writable: true,\n enumerable: false,\n configurable: true\n }\n })\n NodeError.prototype.code = code\n NodeError.prototype[kIsNodeError] = true\n codes[code] = NodeError\n}\nfunction hideStackFrames(fn) {\n // We rename the functions that will be hidden to cut off the stacktrace\n // at the outermost one\n const hidden = nodeInternalPrefix + fn.name\n Object.defineProperty(fn, 'name', {\n value: hidden\n })\n return fn\n}\nfunction aggregateTwoErrors(innerError, outerError) {\n if (innerError && outerError && innerError !== outerError) {\n if (Array.isArray(outerError.errors)) {\n // If `outerError` is already an `AggregateError`.\n outerError.errors.push(innerError)\n return outerError\n }\n const err = new AggregateError([outerError, innerError], outerError.message)\n err.code = outerError.code\n return err\n }\n return innerError || outerError\n}\nclass AbortError extends Error {\n constructor(message = 'The operation was aborted', options = undefined) {\n if (options !== undefined && typeof options !== 'object') {\n throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options)\n }\n super(message, options)\n this.code = 'ABORT_ERR'\n this.name = 'AbortError'\n }\n}\nE('ERR_ASSERTION', '%s', Error)\nE(\n 'ERR_INVALID_ARG_TYPE',\n (name, expected, actual) => {\n assert(typeof name === 'string', \"'name' must be a string\")\n if (!Array.isArray(expected)) {\n expected = [expected]\n }\n let msg = 'The '\n if (name.endsWith(' argument')) {\n // For cases like 'first argument'\n msg += `${name} `\n } else {\n msg += `\"${name}\" ${name.includes('.') ? 'property' : 'argument'} `\n }\n msg += 'must be '\n const types = []\n const instances = []\n const other = []\n for (const value of expected) {\n assert(typeof value === 'string', 'All expected entries have to be of type string')\n if (kTypes.includes(value)) {\n types.push(value.toLowerCase())\n } else if (classRegExp.test(value)) {\n instances.push(value)\n } else {\n assert(value !== 'object', 'The value \"object\" should be written as \"Object\"')\n other.push(value)\n }\n }\n\n // Special handle `object` in case other instances are allowed to outline\n // the differences between each other.\n if (instances.length > 0) {\n const pos = types.indexOf('object')\n if (pos !== -1) {\n types.splice(types, pos, 1)\n instances.push('Object')\n }\n }\n if (types.length > 0) {\n switch (types.length) {\n case 1:\n msg += `of type ${types[0]}`\n break\n case 2:\n msg += `one of type ${types[0]} or ${types[1]}`\n break\n default: {\n const last = types.pop()\n msg += `one of type ${types.join(', ')}, or ${last}`\n }\n }\n if (instances.length > 0 || other.length > 0) {\n msg += ' or '\n }\n }\n if (instances.length > 0) {\n switch (instances.length) {\n case 1:\n msg += `an instance of ${instances[0]}`\n break\n case 2:\n msg += `an instance of ${instances[0]} or ${instances[1]}`\n break\n default: {\n const last = instances.pop()\n msg += `an instance of ${instances.join(', ')}, or ${last}`\n }\n }\n if (other.length > 0) {\n msg += ' or '\n }\n }\n switch (other.length) {\n case 0:\n break\n case 1:\n if (other[0].toLowerCase() !== other[0]) {\n msg += 'an '\n }\n msg += `${other[0]}`\n break\n case 2:\n msg += `one of ${other[0]} or ${other[1]}`\n break\n default: {\n const last = other.pop()\n msg += `one of ${other.join(', ')}, or ${last}`\n }\n }\n if (actual == null) {\n msg += `. Received ${actual}`\n } else if (typeof actual === 'function' && actual.name) {\n msg += `. Received function ${actual.name}`\n } else if (typeof actual === 'object') {\n var _actual$constructor\n if (\n (_actual$constructor = actual.constructor) !== null &&\n _actual$constructor !== undefined &&\n _actual$constructor.name\n ) {\n msg += `. Received an instance of ${actual.constructor.name}`\n } else {\n const inspected = inspect(actual, {\n depth: -1\n })\n msg += `. Received ${inspected}`\n }\n } else {\n let inspected = inspect(actual, {\n colors: false\n })\n if (inspected.length > 25) {\n inspected = `${inspected.slice(0, 25)}...`\n }\n msg += `. Received type ${typeof actual} (${inspected})`\n }\n return msg\n },\n TypeError\n)\nE(\n 'ERR_INVALID_ARG_VALUE',\n (name, value, reason = 'is invalid') => {\n let inspected = inspect(value)\n if (inspected.length > 128) {\n inspected = inspected.slice(0, 128) + '...'\n }\n const type = name.includes('.') ? 'property' : 'argument'\n return `The ${type} '${name}' ${reason}. Received ${inspected}`\n },\n TypeError\n)\nE(\n 'ERR_INVALID_RETURN_VALUE',\n (input, name, value) => {\n var _value$constructor\n const type =\n value !== null &&\n value !== undefined &&\n (_value$constructor = value.constructor) !== null &&\n _value$constructor !== undefined &&\n _value$constructor.name\n ? `instance of ${value.constructor.name}`\n : `type ${typeof value}`\n return `Expected ${input} to be returned from the \"${name}\"` + ` function but got ${type}.`\n },\n TypeError\n)\nE(\n 'ERR_MISSING_ARGS',\n (...args) => {\n assert(args.length > 0, 'At least one arg needs to be specified')\n let msg\n const len = args.length\n args = (Array.isArray(args) ? args : [args]).map((a) => `\"${a}\"`).join(' or ')\n switch (len) {\n case 1:\n msg += `The ${args[0]} argument`\n break\n case 2:\n msg += `The ${args[0]} and ${args[1]} arguments`\n break\n default:\n {\n const last = args.pop()\n msg += `The ${args.join(', ')}, and ${last} arguments`\n }\n break\n }\n return `${msg} must be specified`\n },\n TypeError\n)\nE(\n 'ERR_OUT_OF_RANGE',\n (str, range, input) => {\n assert(range, 'Missing \"range\" argument')\n let received\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 const limit = BigInt(2) ** BigInt(32)\n if (input > limit || input < -limit) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n } else {\n received = inspect(input)\n }\n return `The value of \"${str}\" is out of range. It must be ${range}. Received ${received}`\n },\n RangeError\n)\nE('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error)\nE('ERR_METHOD_NOT_IMPLEMENTED', 'The %s method is not implemented', Error)\nE('ERR_STREAM_ALREADY_FINISHED', 'Cannot call %s after a stream was finished', Error)\nE('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable', Error)\nE('ERR_STREAM_DESTROYED', 'Cannot call %s after a stream was destroyed', Error)\nE('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError)\nE('ERR_STREAM_PREMATURE_CLOSE', 'Premature close', Error)\nE('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF', Error)\nE('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event', Error)\nE('ERR_STREAM_WRITE_AFTER_END', 'write after end', Error)\nE('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError)\nmodule.exports = {\n AbortError,\n aggregateTwoErrors: hideStackFrames(aggregateTwoErrors),\n hideStackFrames,\n codes\n}\n", "/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n", "'use strict'\n\nconst bufferModule = require('buffer')\nconst { format, inspect } = require('./util/inspect')\nconst {\n codes: { ERR_INVALID_ARG_TYPE }\n} = require('./errors')\nconst { kResistStopPropagation, AggregateError, SymbolDispose } = require('./primordials')\nconst AbortSignal = globalThis.AbortSignal || require('abort-controller').AbortSignal\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst AsyncFunction = Object.getPrototypeOf(async function () {}).constructor\nconst Blob = globalThis.Blob || bufferModule.Blob\n/* eslint-disable indent */\nconst isBlob =\n typeof Blob !== 'undefined'\n ? function isBlob(b) {\n // eslint-disable-next-line indent\n return b instanceof Blob\n }\n : function isBlob(b) {\n return false\n }\n/* eslint-enable indent */\n\nconst validateAbortSignal = (signal, name) => {\n if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n}\nconst validateFunction = (value, name) => {\n if (typeof value !== 'function') {\n throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n }\n}\nmodule.exports = {\n AggregateError,\n kEmptyObject: Object.freeze({}),\n once(callback) {\n let called = false\n return function (...args) {\n if (called) {\n return\n }\n called = true\n callback.apply(this, args)\n }\n },\n createDeferredPromise: function () {\n let resolve\n let reject\n\n // eslint-disable-next-line promise/param-names\n const promise = new Promise((res, rej) => {\n resolve = res\n reject = rej\n })\n return {\n promise,\n resolve,\n reject\n }\n },\n promisify(fn) {\n return new Promise((resolve, reject) => {\n fn((err, ...args) => {\n if (err) {\n return reject(err)\n }\n return resolve(...args)\n })\n })\n },\n debuglog() {\n return function () {}\n },\n format,\n inspect,\n types: {\n isAsyncFunction(fn) {\n return fn instanceof AsyncFunction\n },\n isArrayBufferView(arr) {\n return ArrayBuffer.isView(arr)\n }\n },\n isBlob,\n deprecate(fn, message) {\n return fn\n },\n addAbortListener:\n require('events').addAbortListener ||\n function addAbortListener(signal, listener) {\n if (signal === undefined) {\n throw new ERR_INVALID_ARG_TYPE('signal', 'AbortSignal', signal)\n }\n validateAbortSignal(signal, 'signal')\n validateFunction(listener, 'listener')\n let removeEventListener\n if (signal.aborted) {\n queueMicrotask(() => listener())\n } else {\n signal.addEventListener('abort', listener, {\n __proto__: null,\n once: true,\n [kResistStopPropagation]: true\n })\n removeEventListener = () => {\n signal.removeEventListener('abort', listener)\n }\n }\n return {\n __proto__: null,\n [SymbolDispose]() {\n var _removeEventListener\n ;(_removeEventListener = removeEventListener) === null || _removeEventListener === undefined\n ? undefined\n : _removeEventListener()\n }\n }\n },\n AbortSignalAny:\n AbortSignal.any ||\n function AbortSignalAny(signals) {\n // Fast path if there is only one signal.\n if (signals.length === 1) {\n return signals[0]\n }\n const ac = new AbortController()\n const abort = () => ac.abort()\n signals.forEach((signal) => {\n validateAbortSignal(signal, 'signals')\n signal.addEventListener('abort', abort, {\n once: true\n })\n })\n ac.signal.addEventListener(\n 'abort',\n () => {\n signals.forEach((signal) => signal.removeEventListener('abort', abort))\n },\n {\n once: true\n }\n )\n return ac.signal\n }\n}\nmodule.exports.promisify.custom = Symbol.for('nodejs.util.promisify.custom')\n", "/* eslint jsdoc/require-jsdoc: \"error\" */\n\n'use strict'\n\nconst {\n ArrayIsArray,\n ArrayPrototypeIncludes,\n ArrayPrototypeJoin,\n ArrayPrototypeMap,\n NumberIsInteger,\n NumberIsNaN,\n NumberMAX_SAFE_INTEGER,\n NumberMIN_SAFE_INTEGER,\n NumberParseInt,\n ObjectPrototypeHasOwnProperty,\n RegExpPrototypeExec,\n String,\n StringPrototypeToUpperCase,\n StringPrototypeTrim\n} = require('../ours/primordials')\nconst {\n hideStackFrames,\n codes: { ERR_SOCKET_BAD_PORT, ERR_INVALID_ARG_TYPE, ERR_INVALID_ARG_VALUE, ERR_OUT_OF_RANGE, ERR_UNKNOWN_SIGNAL }\n} = require('../ours/errors')\nconst { normalizeEncoding } = require('../ours/util')\nconst { isAsyncFunction, isArrayBufferView } = require('../ours/util').types\nconst signals = {}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isInt32(value) {\n return value === (value | 0)\n}\n\n/**\n * @param {*} value\n * @returns {boolean}\n */\nfunction isUint32(value) {\n return value === value >>> 0\n}\nconst octalReg = /^[0-7]+$/\nconst modeDesc = 'must be a 32-bit unsigned integer or an octal string'\n\n/**\n * Parse and validate values that will be converted into mode_t (the S_*\n * constants). Only valid numbers and octal strings are allowed. They could be\n * converted to 32-bit unsigned integers or non-negative signed integers in the\n * C++ land, but any value higher than 0o777 will result in platform-specific\n * behaviors.\n * @param {*} value Values to be validated\n * @param {string} name Name of the argument\n * @param {number} [def] If specified, will be returned for invalid values\n * @returns {number}\n */\nfunction parseFileMode(value, name, def) {\n if (typeof value === 'undefined') {\n value = def\n }\n if (typeof value === 'string') {\n if (RegExpPrototypeExec(octalReg, value) === null) {\n throw new ERR_INVALID_ARG_VALUE(name, value, modeDesc)\n }\n value = NumberParseInt(value, 8)\n }\n validateUint32(value, name)\n return value\n}\n\n/**\n * @callback validateInteger\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInteger} */\nconst validateInteger = hideStackFrames((value, name, min = NumberMIN_SAFE_INTEGER, max = NumberMAX_SAFE_INTEGER) => {\n if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n if (!NumberIsInteger(value)) throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n if (value < min || value > max) throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n})\n\n/**\n * @callback validateInt32\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateInt32} */\nconst validateInt32 = hideStackFrames((value, name, min = -2147483648, max = 2147483647) => {\n // The defaults for min and max correspond to the limits of 32-bit integers.\n if (typeof value !== 'number') {\n throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n if (!NumberIsInteger(value)) {\n throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n }\n if (value < min || value > max) {\n throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n }\n})\n\n/**\n * @callback validateUint32\n * @param {*} value\n * @param {string} name\n * @param {number|boolean} [positive=false]\n * @returns {asserts value is number}\n */\n\n/** @type {validateUint32} */\nconst validateUint32 = hideStackFrames((value, name, positive = false) => {\n if (typeof value !== 'number') {\n throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n if (!NumberIsInteger(value)) {\n throw new ERR_OUT_OF_RANGE(name, 'an integer', value)\n }\n const min = positive ? 1 : 0\n // 2 ** 32 === 4294967296\n const max = 4294967295\n if (value < min || value > max) {\n throw new ERR_OUT_OF_RANGE(name, `>= ${min} && <= ${max}`, value)\n }\n})\n\n/**\n * @callback validateString\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string}\n */\n\n/** @type {validateString} */\nfunction validateString(value, name) {\n if (typeof value !== 'string') throw new ERR_INVALID_ARG_TYPE(name, 'string', value)\n}\n\n/**\n * @callback validateNumber\n * @param {*} value\n * @param {string} name\n * @param {number} [min]\n * @param {number} [max]\n * @returns {asserts value is number}\n */\n\n/** @type {validateNumber} */\nfunction validateNumber(value, name, min = undefined, max) {\n if (typeof value !== 'number') throw new ERR_INVALID_ARG_TYPE(name, 'number', value)\n if (\n (min != null && value < min) ||\n (max != null && value > max) ||\n ((min != null || max != null) && NumberIsNaN(value))\n ) {\n throw new ERR_OUT_OF_RANGE(\n name,\n `${min != null ? `>= ${min}` : ''}${min != null && max != null ? ' && ' : ''}${max != null ? `<= ${max}` : ''}`,\n value\n )\n }\n}\n\n/**\n * @callback validateOneOf\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} oneOf\n */\n\n/** @type {validateOneOf} */\nconst validateOneOf = hideStackFrames((value, name, oneOf) => {\n if (!ArrayPrototypeIncludes(oneOf, value)) {\n const allowed = ArrayPrototypeJoin(\n ArrayPrototypeMap(oneOf, (v) => (typeof v === 'string' ? `'${v}'` : String(v))),\n ', '\n )\n const reason = 'must be one of: ' + allowed\n throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n }\n})\n\n/**\n * @callback validateBoolean\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean}\n */\n\n/** @type {validateBoolean} */\nfunction validateBoolean(value, name) {\n if (typeof value !== 'boolean') throw new ERR_INVALID_ARG_TYPE(name, 'boolean', value)\n}\n\n/**\n * @param {any} options\n * @param {string} key\n * @param {boolean} defaultValue\n * @returns {boolean}\n */\nfunction getOwnPropertyValueOrDefault(options, key, defaultValue) {\n return options == null || !ObjectPrototypeHasOwnProperty(options, key) ? defaultValue : options[key]\n}\n\n/**\n * @callback validateObject\n * @param {*} value\n * @param {string} name\n * @param {{\n * allowArray?: boolean,\n * allowFunction?: boolean,\n * nullable?: boolean\n * }} [options]\n */\n\n/** @type {validateObject} */\nconst validateObject = hideStackFrames((value, name, options = null) => {\n const allowArray = getOwnPropertyValueOrDefault(options, 'allowArray', false)\n const allowFunction = getOwnPropertyValueOrDefault(options, 'allowFunction', false)\n const nullable = getOwnPropertyValueOrDefault(options, 'nullable', false)\n if (\n (!nullable && value === null) ||\n (!allowArray && ArrayIsArray(value)) ||\n (typeof value !== 'object' && (!allowFunction || typeof value !== 'function'))\n ) {\n throw new ERR_INVALID_ARG_TYPE(name, 'Object', value)\n }\n})\n\n/**\n * @callback validateDictionary - We are using the Web IDL Standard definition\n * of \"dictionary\" here, which means any value\n * whose Type is either Undefined, Null, or\n * Object (which includes functions).\n * @param {*} value\n * @param {string} name\n * @see https://webidl.spec.whatwg.org/#es-dictionary\n * @see https://tc39.es/ecma262/#table-typeof-operator-results\n */\n\n/** @type {validateDictionary} */\nconst validateDictionary = hideStackFrames((value, name) => {\n if (value != null && typeof value !== 'object' && typeof value !== 'function') {\n throw new ERR_INVALID_ARG_TYPE(name, 'a dictionary', value)\n }\n})\n\n/**\n * @callback validateArray\n * @param {*} value\n * @param {string} name\n * @param {number} [minLength]\n * @returns {asserts value is any[]}\n */\n\n/** @type {validateArray} */\nconst validateArray = hideStackFrames((value, name, minLength = 0) => {\n if (!ArrayIsArray(value)) {\n throw new ERR_INVALID_ARG_TYPE(name, 'Array', value)\n }\n if (value.length < minLength) {\n const reason = `must be longer than ${minLength}`\n throw new ERR_INVALID_ARG_VALUE(name, value, reason)\n }\n})\n\n/**\n * @callback validateStringArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is string[]}\n */\n\n/** @type {validateStringArray} */\nfunction validateStringArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n validateString(value[i], `${name}[${i}]`)\n }\n}\n\n/**\n * @callback validateBooleanArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is boolean[]}\n */\n\n/** @type {validateBooleanArray} */\nfunction validateBooleanArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n validateBoolean(value[i], `${name}[${i}]`)\n }\n}\n\n/**\n * @callback validateAbortSignalArray\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is AbortSignal[]}\n */\n\n/** @type {validateAbortSignalArray} */\nfunction validateAbortSignalArray(value, name) {\n validateArray(value, name)\n for (let i = 0; i < value.length; i++) {\n const signal = value[i]\n const indexedName = `${name}[${i}]`\n if (signal == null) {\n throw new ERR_INVALID_ARG_TYPE(indexedName, 'AbortSignal', signal)\n }\n validateAbortSignal(signal, indexedName)\n }\n}\n\n/**\n * @param {*} signal\n * @param {string} [name='signal']\n * @returns {asserts signal is keyof signals}\n */\nfunction validateSignalName(signal, name = 'signal') {\n validateString(signal, name)\n if (signals[signal] === undefined) {\n if (signals[StringPrototypeToUpperCase(signal)] !== undefined) {\n throw new ERR_UNKNOWN_SIGNAL(signal + ' (signals must use all capital letters)')\n }\n throw new ERR_UNKNOWN_SIGNAL(signal)\n }\n}\n\n/**\n * @callback validateBuffer\n * @param {*} buffer\n * @param {string} [name='buffer']\n * @returns {asserts buffer is ArrayBufferView}\n */\n\n/** @type {validateBuffer} */\nconst validateBuffer = hideStackFrames((buffer, name = 'buffer') => {\n if (!isArrayBufferView(buffer)) {\n throw new ERR_INVALID_ARG_TYPE(name, ['Buffer', 'TypedArray', 'DataView'], buffer)\n }\n})\n\n/**\n * @param {string} data\n * @param {string} encoding\n */\nfunction validateEncoding(data, encoding) {\n const normalizedEncoding = normalizeEncoding(encoding)\n const length = data.length\n if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n throw new ERR_INVALID_ARG_VALUE('encoding', encoding, `is invalid for data of length ${length}`)\n }\n}\n\n/**\n * Check that the port number is not NaN when coerced to a number,\n * is an integer and that it falls within the legal range of port numbers.\n * @param {*} port\n * @param {string} [name='Port']\n * @param {boolean} [allowZero=true]\n * @returns {number}\n */\nfunction validatePort(port, name = 'Port', allowZero = true) {\n if (\n (typeof port !== 'number' && typeof port !== 'string') ||\n (typeof port === 'string' && StringPrototypeTrim(port).length === 0) ||\n +port !== +port >>> 0 ||\n port > 0xffff ||\n (port === 0 && !allowZero)\n ) {\n throw new ERR_SOCKET_BAD_PORT(name, port, allowZero)\n }\n return port | 0\n}\n\n/**\n * @callback validateAbortSignal\n * @param {*} signal\n * @param {string} name\n */\n\n/** @type {validateAbortSignal} */\nconst validateAbortSignal = hideStackFrames((signal, name) => {\n if (signal !== undefined && (signal === null || typeof signal !== 'object' || !('aborted' in signal))) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n})\n\n/**\n * @callback validateFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validateFunction} */\nconst validateFunction = hideStackFrames((value, name) => {\n if (typeof value !== 'function') throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validatePlainFunction\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is Function}\n */\n\n/** @type {validatePlainFunction} */\nconst validatePlainFunction = hideStackFrames((value, name) => {\n if (typeof value !== 'function' || isAsyncFunction(value)) throw new ERR_INVALID_ARG_TYPE(name, 'Function', value)\n})\n\n/**\n * @callback validateUndefined\n * @param {*} value\n * @param {string} name\n * @returns {asserts value is undefined}\n */\n\n/** @type {validateUndefined} */\nconst validateUndefined = hideStackFrames((value, name) => {\n if (value !== undefined) throw new ERR_INVALID_ARG_TYPE(name, 'undefined', value)\n})\n\n/**\n * @template T\n * @param {T} value\n * @param {string} name\n * @param {T[]} union\n */\nfunction validateUnion(value, name, union) {\n if (!ArrayPrototypeIncludes(union, value)) {\n throw new ERR_INVALID_ARG_TYPE(name, `('${ArrayPrototypeJoin(union, '|')}')`, value)\n }\n}\n\n/*\n The rules for the Link header field are described here:\n https://www.rfc-editor.org/rfc/rfc8288.html#section-3\n\n This regex validates any string surrounded by angle brackets\n (not necessarily a valid URI reference) followed by zero or more\n link-params separated by semicolons.\n*/\nconst linkValueRegExp = /^(?:<[^>]*>)(?:\\s*;\\s*[^;\"\\s]+(?:=(\")?[^;\"\\s]*\\1)?)*$/\n\n/**\n * @param {any} value\n * @param {string} name\n */\nfunction validateLinkHeaderFormat(value, name) {\n if (typeof value === 'undefined' || !RegExpPrototypeExec(linkValueRegExp, value)) {\n throw new ERR_INVALID_ARG_VALUE(\n name,\n value,\n 'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n )\n }\n}\n\n/**\n * @param {any} hints\n * @return {string}\n */\nfunction validateLinkHeaderValue(hints) {\n if (typeof hints === 'string') {\n validateLinkHeaderFormat(hints, 'hints')\n return hints\n } else if (ArrayIsArray(hints)) {\n const hintsLength = hints.length\n let result = ''\n if (hintsLength === 0) {\n return result\n }\n for (let i = 0; i < hintsLength; i++) {\n const link = hints[i]\n validateLinkHeaderFormat(link, 'hints')\n result += link\n if (i !== hintsLength - 1) {\n result += ', '\n }\n }\n return result\n }\n throw new ERR_INVALID_ARG_VALUE(\n 'hints',\n hints,\n 'must be an array or string of format \"</styles.css>; rel=preload; as=style\"'\n )\n}\nmodule.exports = {\n isInt32,\n isUint32,\n parseFileMode,\n validateArray,\n validateStringArray,\n validateBooleanArray,\n validateAbortSignalArray,\n validateBoolean,\n validateBuffer,\n validateDictionary,\n validateEncoding,\n validateFunction,\n validateInt32,\n validateInteger,\n validateNumber,\n validateObject,\n validateOneOf,\n validatePlainFunction,\n validatePort,\n validateSignalName,\n validateString,\n validateUint32,\n validateUndefined,\n validateUnion,\n validateAbortSignal,\n validateLinkHeaderValue\n}\n", "// shim for using process in browser\nvar process = module.exports = {};\n\n// 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\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\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 try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n", "'use strict'\n\nconst { SymbolAsyncIterator, SymbolIterator, SymbolFor } = require('../../ours/primordials')\n\n// We need to use SymbolFor to make these globally available\n// for interopt with readable-stream, i.e. readable-stream\n// and node core needs to be able to read/write private state\n// from each other for proper interoperability.\nconst kIsDestroyed = SymbolFor('nodejs.stream.destroyed')\nconst kIsErrored = SymbolFor('nodejs.stream.errored')\nconst kIsReadable = SymbolFor('nodejs.stream.readable')\nconst kIsWritable = SymbolFor('nodejs.stream.writable')\nconst kIsDisturbed = SymbolFor('nodejs.stream.disturbed')\nconst kIsClosedPromise = SymbolFor('nodejs.webstream.isClosedPromise')\nconst kControllerErrorFunction = SymbolFor('nodejs.webstream.controllerErrorFunction')\nfunction isReadableNodeStream(obj, strict = false) {\n var _obj$_readableState\n return !!(\n (\n obj &&\n typeof obj.pipe === 'function' &&\n typeof obj.on === 'function' &&\n (!strict || (typeof obj.pause === 'function' && typeof obj.resume === 'function')) &&\n (!obj._writableState ||\n ((_obj$_readableState = obj._readableState) === null || _obj$_readableState === undefined\n ? undefined\n : _obj$_readableState.readable) !== false) &&\n // Duplex\n (!obj._writableState || obj._readableState)\n ) // Writable has .pipe.\n )\n}\nfunction isWritableNodeStream(obj) {\n var _obj$_writableState\n return !!(\n (\n obj &&\n typeof obj.write === 'function' &&\n typeof obj.on === 'function' &&\n (!obj._readableState ||\n ((_obj$_writableState = obj._writableState) === null || _obj$_writableState === undefined\n ? undefined\n : _obj$_writableState.writable) !== false)\n ) // Duplex\n )\n}\nfunction isDuplexNodeStream(obj) {\n return !!(\n obj &&\n typeof obj.pipe === 'function' &&\n obj._readableState &&\n typeof obj.on === 'function' &&\n typeof obj.write === 'function'\n )\n}\nfunction isNodeStream(obj) {\n return (\n obj &&\n (obj._readableState ||\n obj._writableState ||\n (typeof obj.write === 'function' && typeof obj.on === 'function') ||\n (typeof obj.pipe === 'function' && typeof obj.on === 'function'))\n )\n}\nfunction isReadableStream(obj) {\n return !!(\n obj &&\n !isNodeStream(obj) &&\n typeof obj.pipeThrough === 'function' &&\n typeof obj.getReader === 'function' &&\n typeof obj.cancel === 'function'\n )\n}\nfunction isWritableStream(obj) {\n return !!(obj && !isNodeStream(obj) && typeof obj.getWriter === 'function' && typeof obj.abort === 'function')\n}\nfunction isTransformStream(obj) {\n return !!(obj && !isNodeStream(obj) && typeof obj.readable === 'object' && typeof obj.writable === 'object')\n}\nfunction isWebStream(obj) {\n return isReadableStream(obj) || isWritableStream(obj) || isTransformStream(obj)\n}\nfunction isIterable(obj, isAsync) {\n if (obj == null) return false\n if (isAsync === true) return typeof obj[SymbolAsyncIterator] === 'function'\n if (isAsync === false) return typeof obj[SymbolIterator] === 'function'\n return typeof obj[SymbolAsyncIterator] === 'function' || typeof obj[SymbolIterator] === 'function'\n}\nfunction isDestroyed(stream) {\n if (!isNodeStream(stream)) return null\n const wState = stream._writableState\n const rState = stream._readableState\n const state = wState || rState\n return !!(stream.destroyed || stream[kIsDestroyed] || (state !== null && state !== undefined && state.destroyed))\n}\n\n// Have been end():d.\nfunction isWritableEnded(stream) {\n if (!isWritableNodeStream(stream)) return null\n if (stream.writableEnded === true) return true\n const wState = stream._writableState\n if (wState !== null && wState !== undefined && wState.errored) return false\n if (typeof (wState === null || wState === undefined ? undefined : wState.ended) !== 'boolean') return null\n return wState.ended\n}\n\n// Have emitted 'finish'.\nfunction isWritableFinished(stream, strict) {\n if (!isWritableNodeStream(stream)) return null\n if (stream.writableFinished === true) return true\n const wState = stream._writableState\n if (wState !== null && wState !== undefined && wState.errored) return false\n if (typeof (wState === null || wState === undefined ? undefined : wState.finished) !== 'boolean') return null\n return !!(wState.finished || (strict === false && wState.ended === true && wState.length === 0))\n}\n\n// Have been push(null):d.\nfunction isReadableEnded(stream) {\n if (!isReadableNodeStream(stream)) return null\n if (stream.readableEnded === true) return true\n const rState = stream._readableState\n if (!rState || rState.errored) return false\n if (typeof (rState === null || rState === undefined ? undefined : rState.ended) !== 'boolean') return null\n return rState.ended\n}\n\n// Have emitted 'end'.\nfunction isReadableFinished(stream, strict) {\n if (!isReadableNodeStream(stream)) return null\n const rState = stream._readableState\n if (rState !== null && rState !== undefined && rState.errored) return false\n if (typeof (rState === null || rState === undefined ? undefined : rState.endEmitted) !== 'boolean') return null\n return !!(rState.endEmitted || (strict === false && rState.ended === true && rState.length === 0))\n}\nfunction isReadable(stream) {\n if (stream && stream[kIsReadable] != null) return stream[kIsReadable]\n if (typeof (stream === null || stream === undefined ? undefined : stream.readable) !== 'boolean') return null\n if (isDestroyed(stream)) return false\n return isReadableNodeStream(stream) && stream.readable && !isReadableFinished(stream)\n}\nfunction isWritable(stream) {\n if (stream && stream[kIsWritable] != null) return stream[kIsWritable]\n if (typeof (stream === null || stream === undefined ? undefined : stream.writable) !== 'boolean') return null\n if (isDestroyed(stream)) return false\n return isWritableNodeStream(stream) && stream.writable && !isWritableEnded(stream)\n}\nfunction isFinished(stream, opts) {\n if (!isNodeStream(stream)) {\n return null\n }\n if (isDestroyed(stream)) {\n return true\n }\n if ((opts === null || opts === undefined ? undefined : opts.readable) !== false && isReadable(stream)) {\n return false\n }\n if ((opts === null || opts === undefined ? undefined : opts.writable) !== false && isWritable(stream)) {\n return false\n }\n return true\n}\nfunction isWritableErrored(stream) {\n var _stream$_writableStat, _stream$_writableStat2\n if (!isNodeStream(stream)) {\n return null\n }\n if (stream.writableErrored) {\n return stream.writableErrored\n }\n return (_stream$_writableStat =\n (_stream$_writableStat2 = stream._writableState) === null || _stream$_writableStat2 === undefined\n ? undefined\n : _stream$_writableStat2.errored) !== null && _stream$_writableStat !== undefined\n ? _stream$_writableStat\n : null\n}\nfunction isReadableErrored(stream) {\n var _stream$_readableStat, _stream$_readableStat2\n if (!isNodeStream(stream)) {\n return null\n }\n if (stream.readableErrored) {\n return stream.readableErrored\n }\n return (_stream$_readableStat =\n (_stream$_readableStat2 = stream._readableState) === null || _stream$_readableStat2 === undefined\n ? undefined\n : _stream$_readableStat2.errored) !== null && _stream$_readableStat !== undefined\n ? _stream$_readableStat\n : null\n}\nfunction isClosed(stream) {\n if (!isNodeStream(stream)) {\n return null\n }\n if (typeof stream.closed === 'boolean') {\n return stream.closed\n }\n const wState = stream._writableState\n const rState = stream._readableState\n if (\n typeof (wState === null || wState === undefined ? undefined : wState.closed) === 'boolean' ||\n typeof (rState === null || rState === undefined ? undefined : rState.closed) === 'boolean'\n ) {\n return (\n (wState === null || wState === undefined ? undefined : wState.closed) ||\n (rState === null || rState === undefined ? undefined : rState.closed)\n )\n }\n if (typeof stream._closed === 'boolean' && isOutgoingMessage(stream)) {\n return stream._closed\n }\n return null\n}\nfunction isOutgoingMessage(stream) {\n return (\n typeof stream._closed === 'boolean' &&\n typeof stream._defaultKeepAlive === 'boolean' &&\n typeof stream._removedConnection === 'boolean' &&\n typeof stream._removedContLen === 'boolean'\n )\n}\nfunction isServerResponse(stream) {\n return typeof stream._sent100 === 'boolean' && isOutgoingMessage(stream)\n}\nfunction isServerRequest(stream) {\n var _stream$req\n return (\n typeof stream._consuming === 'boolean' &&\n typeof stream._dumped === 'boolean' &&\n ((_stream$req = stream.req) === null || _stream$req === undefined ? undefined : _stream$req.upgradeOrConnect) ===\n undefined\n )\n}\nfunction willEmitClose(stream) {\n if (!isNodeStream(stream)) return null\n const wState = stream._writableState\n const rState = stream._readableState\n const state = wState || rState\n return (\n (!state && isServerResponse(stream)) || !!(state && state.autoDestroy && state.emitClose && state.closed === false)\n )\n}\nfunction isDisturbed(stream) {\n var _stream$kIsDisturbed\n return !!(\n stream &&\n ((_stream$kIsDisturbed = stream[kIsDisturbed]) !== null && _stream$kIsDisturbed !== undefined\n ? _stream$kIsDisturbed\n : stream.readableDidRead || stream.readableAborted)\n )\n}\nfunction isErrored(stream) {\n var _ref,\n _ref2,\n _ref3,\n _ref4,\n _ref5,\n _stream$kIsErrored,\n _stream$_readableStat3,\n _stream$_writableStat3,\n _stream$_readableStat4,\n _stream$_writableStat4\n return !!(\n stream &&\n ((_ref =\n (_ref2 =\n (_ref3 =\n (_ref4 =\n (_ref5 =\n (_stream$kIsErrored = stream[kIsErrored]) !== null && _stream$kIsErrored !== undefined\n ? _stream$kIsErrored\n : stream.readableErrored) !== null && _ref5 !== undefined\n ? _ref5\n : stream.writableErrored) !== null && _ref4 !== undefined\n ? _ref4\n : (_stream$_readableStat3 = stream._readableState) === null || _stream$_readableStat3 === undefined\n ? undefined\n : _stream$_readableStat3.errorEmitted) !== null && _ref3 !== undefined\n ? _ref3\n : (_stream$_writableStat3 = stream._writableState) === null || _stream$_writableStat3 === undefined\n ? undefined\n : _stream$_writableStat3.errorEmitted) !== null && _ref2 !== undefined\n ? _ref2\n : (_stream$_readableStat4 = stream._readableState) === null || _stream$_readableStat4 === undefined\n ? undefined\n : _stream$_readableStat4.errored) !== null && _ref !== undefined\n ? _ref\n : (_stream$_writableStat4 = stream._writableState) === null || _stream$_writableStat4 === undefined\n ? undefined\n : _stream$_writableStat4.errored)\n )\n}\nmodule.exports = {\n isDestroyed,\n kIsDestroyed,\n isDisturbed,\n kIsDisturbed,\n isErrored,\n kIsErrored,\n isReadable,\n kIsReadable,\n kIsClosedPromise,\n kControllerErrorFunction,\n kIsWritable,\n isClosed,\n isDuplexNodeStream,\n isFinished,\n isIterable,\n isReadableNodeStream,\n isReadableStream,\n isReadableEnded,\n isReadableFinished,\n isReadableErrored,\n isNodeStream,\n isWebStream,\n isWritable,\n isWritableNodeStream,\n isWritableStream,\n isWritableEnded,\n isWritableFinished,\n isWritableErrored,\n isServerRequest,\n isServerResponse,\n willEmitClose,\n isTransformStream\n}\n", "// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { AbortError, codes } = require('../../ours/errors')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_PREMATURE_CLOSE } = codes\nconst { kEmptyObject, once } = require('../../ours/util')\nconst { validateAbortSignal, validateFunction, validateObject, validateBoolean } = require('../validators')\nconst { Promise, PromisePrototypeThen, SymbolDispose } = require('../../ours/primordials')\nconst {\n isClosed,\n isReadable,\n isReadableNodeStream,\n isReadableStream,\n isReadableFinished,\n isReadableErrored,\n isWritable,\n isWritableNodeStream,\n isWritableStream,\n isWritableFinished,\n isWritableErrored,\n isNodeStream,\n willEmitClose: _willEmitClose,\n kIsClosedPromise\n} = require('./utils')\nlet addAbortListener\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function'\n}\nconst nop = () => {}\nfunction eos(stream, options, callback) {\n var _options$readable, _options$writable\n if (arguments.length === 2) {\n callback = options\n options = kEmptyObject\n } else if (options == null) {\n options = kEmptyObject\n } else {\n validateObject(options, 'options')\n }\n validateFunction(callback, 'callback')\n validateAbortSignal(options.signal, 'options.signal')\n callback = once(callback)\n if (isReadableStream(stream) || isWritableStream(stream)) {\n return eosWeb(stream, options, callback)\n }\n if (!isNodeStream(stream)) {\n throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n }\n const readable =\n (_options$readable = options.readable) !== null && _options$readable !== undefined\n ? _options$readable\n : isReadableNodeStream(stream)\n const writable =\n (_options$writable = options.writable) !== null && _options$writable !== undefined\n ? _options$writable\n : isWritableNodeStream(stream)\n const wState = stream._writableState\n const rState = stream._readableState\n const onlegacyfinish = () => {\n if (!stream.writable) {\n onfinish()\n }\n }\n\n // TODO (ronag): Improve soft detection to include core modules and\n // common ecosystem modules that do properly emit 'close' but fail\n // this generic check.\n let willEmitClose =\n _willEmitClose(stream) && isReadableNodeStream(stream) === readable && isWritableNodeStream(stream) === writable\n let writableFinished = isWritableFinished(stream, false)\n const onfinish = () => {\n writableFinished = true\n // Stream should not be destroyed here. If it is that\n // means that user space is doing something differently and\n // we cannot trust willEmitClose.\n if (stream.destroyed) {\n willEmitClose = false\n }\n if (willEmitClose && (!stream.readable || readable)) {\n return\n }\n if (!readable || readableFinished) {\n callback.call(stream)\n }\n }\n let readableFinished = isReadableFinished(stream, false)\n const onend = () => {\n readableFinished = true\n // Stream should not be destroyed here. If it is that\n // means that user space is doing something differently and\n // we cannot trust willEmitClose.\n if (stream.destroyed) {\n willEmitClose = false\n }\n if (willEmitClose && (!stream.writable || writable)) {\n return\n }\n if (!writable || writableFinished) {\n callback.call(stream)\n }\n }\n const onerror = (err) => {\n callback.call(stream, err)\n }\n let closed = isClosed(stream)\n const onclose = () => {\n closed = true\n const errored = isWritableErrored(stream) || isReadableErrored(stream)\n if (errored && typeof errored !== 'boolean') {\n return callback.call(stream, errored)\n }\n if (readable && !readableFinished && isReadableNodeStream(stream, true)) {\n if (!isReadableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n }\n if (writable && !writableFinished) {\n if (!isWritableFinished(stream, false)) return callback.call(stream, new ERR_STREAM_PREMATURE_CLOSE())\n }\n callback.call(stream)\n }\n const onclosed = () => {\n closed = true\n const errored = isWritableErrored(stream) || isReadableErrored(stream)\n if (errored && typeof errored !== 'boolean') {\n return callback.call(stream, errored)\n }\n callback.call(stream)\n }\n const onrequest = () => {\n stream.req.on('finish', onfinish)\n }\n if (isRequest(stream)) {\n stream.on('complete', onfinish)\n if (!willEmitClose) {\n stream.on('abort', onclose)\n }\n if (stream.req) {\n onrequest()\n } else {\n stream.on('request', onrequest)\n }\n } else if (writable && !wState) {\n // legacy streams\n stream.on('end', onlegacyfinish)\n stream.on('close', onlegacyfinish)\n }\n\n // Not all streams will emit 'close' after 'aborted'.\n if (!willEmitClose && typeof stream.aborted === 'boolean') {\n stream.on('aborted', onclose)\n }\n stream.on('end', onend)\n stream.on('finish', onfinish)\n if (options.error !== false) {\n stream.on('error', onerror)\n }\n stream.on('close', onclose)\n if (closed) {\n process.nextTick(onclose)\n } else if (\n (wState !== null && wState !== undefined && wState.errorEmitted) ||\n (rState !== null && rState !== undefined && rState.errorEmitted)\n ) {\n if (!willEmitClose) {\n process.nextTick(onclosed)\n }\n } else if (\n !readable &&\n (!willEmitClose || isReadable(stream)) &&\n (writableFinished || isWritable(stream) === false)\n ) {\n process.nextTick(onclosed)\n } else if (\n !writable &&\n (!willEmitClose || isWritable(stream)) &&\n (readableFinished || isReadable(stream) === false)\n ) {\n process.nextTick(onclosed)\n } else if (rState && stream.req && stream.aborted) {\n process.nextTick(onclosed)\n }\n const cleanup = () => {\n callback = nop\n stream.removeListener('aborted', onclose)\n stream.removeListener('complete', onfinish)\n stream.removeListener('abort', onclose)\n stream.removeListener('request', onrequest)\n if (stream.req) stream.req.removeListener('finish', onfinish)\n stream.removeListener('end', onlegacyfinish)\n stream.removeListener('close', onlegacyfinish)\n stream.removeListener('finish', onfinish)\n stream.removeListener('end', onend)\n stream.removeListener('error', onerror)\n stream.removeListener('close', onclose)\n }\n if (options.signal && !closed) {\n const abort = () => {\n // Keep it because cleanup removes it.\n const endCallback = callback\n cleanup()\n endCallback.call(\n stream,\n new AbortError(undefined, {\n cause: options.signal.reason\n })\n )\n }\n if (options.signal.aborted) {\n process.nextTick(abort)\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(options.signal, abort)\n const originalCallback = callback\n callback = once((...args) => {\n disposable[SymbolDispose]()\n originalCallback.apply(stream, args)\n })\n }\n }\n return cleanup\n}\nfunction eosWeb(stream, options, callback) {\n let isAborted = false\n let abort = nop\n if (options.signal) {\n abort = () => {\n isAborted = true\n callback.call(\n stream,\n new AbortError(undefined, {\n cause: options.signal.reason\n })\n )\n }\n if (options.signal.aborted) {\n process.nextTick(abort)\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(options.signal, abort)\n const originalCallback = callback\n callback = once((...args) => {\n disposable[SymbolDispose]()\n originalCallback.apply(stream, args)\n })\n }\n }\n const resolverFn = (...args) => {\n if (!isAborted) {\n process.nextTick(() => callback.apply(stream, args))\n }\n }\n PromisePrototypeThen(stream[kIsClosedPromise].promise, resolverFn, resolverFn)\n return nop\n}\nfunction finished(stream, opts) {\n var _opts\n let autoCleanup = false\n if (opts === null) {\n opts = kEmptyObject\n }\n if ((_opts = opts) !== null && _opts !== undefined && _opts.cleanup) {\n validateBoolean(opts.cleanup, 'cleanup')\n autoCleanup = opts.cleanup\n }\n return new Promise((resolve, reject) => {\n const cleanup = eos(stream, opts, (err) => {\n if (autoCleanup) {\n cleanup()\n }\n if (err) {\n reject(err)\n } else {\n resolve()\n }\n })\n })\n}\nmodule.exports = eos\nmodule.exports.finished = finished\n", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n aggregateTwoErrors,\n codes: { ERR_MULTIPLE_CALLBACK },\n AbortError\n} = require('../../ours/errors')\nconst { Symbol } = require('../../ours/primordials')\nconst { kIsDestroyed, isDestroyed, isFinished, isServerRequest } = require('./utils')\nconst kDestroy = Symbol('kDestroy')\nconst kConstruct = Symbol('kConstruct')\nfunction checkError(err, w, r) {\n if (err) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n err.stack // eslint-disable-line no-unused-expressions\n\n if (w && !w.errored) {\n w.errored = err\n }\n if (r && !r.errored) {\n r.errored = err\n }\n }\n}\n\n// Backwards compat. cb() is undocumented and unused in core but\n// unfortunately might be used by modules.\nfunction destroy(err, cb) {\n const r = this._readableState\n const w = this._writableState\n // With duplex streams we use the writable side for state.\n const s = w || r\n if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n if (typeof cb === 'function') {\n cb()\n }\n return this\n }\n\n // We set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n checkError(err, w, r)\n if (w) {\n w.destroyed = true\n }\n if (r) {\n r.destroyed = true\n }\n\n // If still constructing then defer calling _destroy.\n if (!s.constructed) {\n this.once(kDestroy, function (er) {\n _destroy(this, aggregateTwoErrors(er, err), cb)\n })\n } else {\n _destroy(this, err, cb)\n }\n return this\n}\nfunction _destroy(self, err, cb) {\n let called = false\n function onDestroy(err) {\n if (called) {\n return\n }\n called = true\n const r = self._readableState\n const w = self._writableState\n checkError(err, w, r)\n if (w) {\n w.closed = true\n }\n if (r) {\n r.closed = true\n }\n if (typeof cb === 'function') {\n cb(err)\n }\n if (err) {\n process.nextTick(emitErrorCloseNT, self, err)\n } else {\n process.nextTick(emitCloseNT, self)\n }\n }\n try {\n self._destroy(err || null, onDestroy)\n } catch (err) {\n onDestroy(err)\n }\n}\nfunction emitErrorCloseNT(self, err) {\n emitErrorNT(self, err)\n emitCloseNT(self)\n}\nfunction emitCloseNT(self) {\n const r = self._readableState\n const w = self._writableState\n if (w) {\n w.closeEmitted = true\n }\n if (r) {\n r.closeEmitted = true\n }\n if ((w !== null && w !== undefined && w.emitClose) || (r !== null && r !== undefined && r.emitClose)) {\n self.emit('close')\n }\n}\nfunction emitErrorNT(self, err) {\n const r = self._readableState\n const w = self._writableState\n if ((w !== null && w !== undefined && w.errorEmitted) || (r !== null && r !== undefined && r.errorEmitted)) {\n return\n }\n if (w) {\n w.errorEmitted = true\n }\n if (r) {\n r.errorEmitted = true\n }\n self.emit('error', err)\n}\nfunction undestroy() {\n const r = this._readableState\n const w = this._writableState\n if (r) {\n r.constructed = true\n r.closed = false\n r.closeEmitted = false\n r.destroyed = false\n r.errored = null\n r.errorEmitted = false\n r.reading = false\n r.ended = r.readable === false\n r.endEmitted = r.readable === false\n }\n if (w) {\n w.constructed = true\n w.destroyed = false\n w.closed = false\n w.closeEmitted = false\n w.errored = null\n w.errorEmitted = false\n w.finalCalled = false\n w.prefinished = false\n w.ended = w.writable === false\n w.ending = w.writable === false\n w.finished = w.writable === false\n }\n}\nfunction errorOrDestroy(stream, err, sync) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n const r = stream._readableState\n const w = stream._writableState\n if ((w !== null && w !== undefined && w.destroyed) || (r !== null && r !== undefined && r.destroyed)) {\n return this\n }\n if ((r !== null && r !== undefined && r.autoDestroy) || (w !== null && w !== undefined && w.autoDestroy))\n stream.destroy(err)\n else if (err) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n err.stack // eslint-disable-line no-unused-expressions\n\n if (w && !w.errored) {\n w.errored = err\n }\n if (r && !r.errored) {\n r.errored = err\n }\n if (sync) {\n process.nextTick(emitErrorNT, stream, err)\n } else {\n emitErrorNT(stream, err)\n }\n }\n}\nfunction construct(stream, cb) {\n if (typeof stream._construct !== 'function') {\n return\n }\n const r = stream._readableState\n const w = stream._writableState\n if (r) {\n r.constructed = false\n }\n if (w) {\n w.constructed = false\n }\n stream.once(kConstruct, cb)\n if (stream.listenerCount(kConstruct) > 1) {\n // Duplex\n return\n }\n process.nextTick(constructNT, stream)\n}\nfunction constructNT(stream) {\n let called = false\n function onConstruct(err) {\n if (called) {\n errorOrDestroy(stream, err !== null && err !== undefined ? err : new ERR_MULTIPLE_CALLBACK())\n return\n }\n called = true\n const r = stream._readableState\n const w = stream._writableState\n const s = w || r\n if (r) {\n r.constructed = true\n }\n if (w) {\n w.constructed = true\n }\n if (s.destroyed) {\n stream.emit(kDestroy, err)\n } else if (err) {\n errorOrDestroy(stream, err, true)\n } else {\n process.nextTick(emitConstructNT, stream)\n }\n }\n try {\n stream._construct((err) => {\n process.nextTick(onConstruct, err)\n })\n } catch (err) {\n process.nextTick(onConstruct, err)\n }\n}\nfunction emitConstructNT(stream) {\n stream.emit(kConstruct)\n}\nfunction isRequest(stream) {\n return (stream === null || stream === undefined ? undefined : stream.setHeader) && typeof stream.abort === 'function'\n}\nfunction emitCloseLegacy(stream) {\n stream.emit('close')\n}\nfunction emitErrorCloseLegacy(stream, err) {\n stream.emit('error', err)\n process.nextTick(emitCloseLegacy, stream)\n}\n\n// Normalize destroy for legacy.\nfunction destroyer(stream, err) {\n if (!stream || isDestroyed(stream)) {\n return\n }\n if (!err && !isFinished(stream)) {\n err = new AbortError()\n }\n\n // TODO: Remove isRequest branches.\n if (isServerRequest(stream)) {\n stream.socket = null\n stream.destroy(err)\n } else if (isRequest(stream)) {\n stream.abort()\n } else if (isRequest(stream.req)) {\n stream.req.abort()\n } else if (typeof stream.destroy === 'function') {\n stream.destroy(err)\n } else if (typeof stream.close === 'function') {\n // TODO: Don't lose err?\n stream.close()\n } else if (err) {\n process.nextTick(emitErrorCloseLegacy, stream, err)\n } else {\n process.nextTick(emitCloseLegacy, stream)\n }\n if (!stream.destroyed) {\n stream[kIsDestroyed] = true\n }\n}\nmodule.exports = {\n construct,\n destroyer,\n destroy,\n undestroy,\n errorOrDestroy\n}\n", "'use strict'\n\nconst { ArrayIsArray, ObjectSetPrototypeOf } = require('../../ours/primordials')\nconst { EventEmitter: EE } = require('events')\nfunction Stream(opts) {\n EE.call(this, opts)\n}\nObjectSetPrototypeOf(Stream.prototype, EE.prototype)\nObjectSetPrototypeOf(Stream, EE)\nStream.prototype.pipe = function (dest, options) {\n const source = this\n function ondata(chunk) {\n if (dest.writable && dest.write(chunk) === false && source.pause) {\n source.pause()\n }\n }\n source.on('data', ondata)\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume()\n }\n }\n dest.on('drain', ondrain)\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend)\n source.on('close', onclose)\n }\n let didOnEnd = false\n function onend() {\n if (didOnEnd) return\n didOnEnd = true\n dest.end()\n }\n function onclose() {\n if (didOnEnd) return\n didOnEnd = true\n if (typeof dest.destroy === 'function') dest.destroy()\n }\n\n // Don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup()\n if (EE.listenerCount(this, 'error') === 0) {\n this.emit('error', er)\n }\n }\n prependListener(source, 'error', onerror)\n prependListener(dest, 'error', onerror)\n\n // Remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata)\n dest.removeListener('drain', ondrain)\n source.removeListener('end', onend)\n source.removeListener('close', onclose)\n source.removeListener('error', onerror)\n dest.removeListener('error', onerror)\n source.removeListener('end', cleanup)\n source.removeListener('close', cleanup)\n dest.removeListener('close', cleanup)\n }\n source.on('end', cleanup)\n source.on('close', cleanup)\n dest.on('close', cleanup)\n dest.emit('pipe', source)\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest\n}\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn)\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn)\n else if (ArrayIsArray(emitter._events[event])) emitter._events[event].unshift(fn)\n else emitter._events[event] = [fn, emitter._events[event]]\n}\nmodule.exports = {\n Stream,\n prependListener\n}\n", "'use strict'\n\nconst { SymbolDispose } = require('../../ours/primordials')\nconst { AbortError, codes } = require('../../ours/errors')\nconst { isNodeStream, isWebStream, kControllerErrorFunction } = require('./utils')\nconst eos = require('./end-of-stream')\nconst { ERR_INVALID_ARG_TYPE } = codes\nlet addAbortListener\n\n// This method is inlined here for readable-stream\n// It also does not allow for signal to not exist on the stream\n// https://github.com/nodejs/node/pull/36061#discussion_r533718029\nconst validateAbortSignal = (signal, name) => {\n if (typeof signal !== 'object' || !('aborted' in signal)) {\n throw new ERR_INVALID_ARG_TYPE(name, 'AbortSignal', signal)\n }\n}\nmodule.exports.addAbortSignal = function addAbortSignal(signal, stream) {\n validateAbortSignal(signal, 'signal')\n if (!isNodeStream(stream) && !isWebStream(stream)) {\n throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream)\n }\n return module.exports.addAbortSignalNoValidate(signal, stream)\n}\nmodule.exports.addAbortSignalNoValidate = function (signal, stream) {\n if (typeof signal !== 'object' || !('aborted' in signal)) {\n return stream\n }\n const onAbort = isNodeStream(stream)\n ? () => {\n stream.destroy(\n new AbortError(undefined, {\n cause: signal.reason\n })\n )\n }\n : () => {\n stream[kControllerErrorFunction](\n new AbortError(undefined, {\n cause: signal.reason\n })\n )\n }\n if (signal.aborted) {\n onAbort()\n } else {\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n const disposable = addAbortListener(signal, onAbort)\n eos(stream, disposable[SymbolDispose])\n }\n return stream\n}\n", "'use strict'\n\nconst { StringPrototypeSlice, SymbolIterator, TypedArrayPrototypeSet, Uint8Array } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { inspect } = require('../../ours/util')\nmodule.exports = class BufferList {\n constructor() {\n this.head = null\n this.tail = null\n this.length = 0\n }\n push(v) {\n const entry = {\n data: v,\n next: null\n }\n if (this.length > 0) this.tail.next = entry\n else this.head = entry\n this.tail = entry\n ++this.length\n }\n unshift(v) {\n const entry = {\n data: v,\n next: this.head\n }\n if (this.length === 0) this.tail = entry\n this.head = entry\n ++this.length\n }\n shift() {\n if (this.length === 0) return\n const ret = this.head.data\n if (this.length === 1) this.head = this.tail = null\n else this.head = this.head.next\n --this.length\n return ret\n }\n clear() {\n this.head = this.tail = null\n this.length = 0\n }\n join(s) {\n if (this.length === 0) return ''\n let p = this.head\n let ret = '' + p.data\n while ((p = p.next) !== null) ret += s + p.data\n return ret\n }\n concat(n) {\n if (this.length === 0) return Buffer.alloc(0)\n const ret = Buffer.allocUnsafe(n >>> 0)\n let p = this.head\n let i = 0\n while (p) {\n TypedArrayPrototypeSet(ret, p.data, i)\n i += p.data.length\n p = p.next\n }\n return ret\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n consume(n, hasStrings) {\n const data = this.head.data\n if (n < data.length) {\n // `slice` is the same for buffers and strings.\n const slice = data.slice(0, n)\n this.head.data = data.slice(n)\n return slice\n }\n if (n === data.length) {\n // First chunk is a perfect match.\n return this.shift()\n }\n // Result spans more than one buffer.\n return hasStrings ? this._getString(n) : this._getBuffer(n)\n }\n first() {\n return this.head.data\n }\n *[SymbolIterator]() {\n for (let p = this.head; p; p = p.next) {\n yield p.data\n }\n }\n\n // Consumes a specified amount of characters from the buffered data.\n _getString(n) {\n let ret = ''\n let p = this.head\n let c = 0\n do {\n const str = p.data\n if (n > str.length) {\n ret += str\n n -= str.length\n } else {\n if (n === str.length) {\n ret += str\n ++c\n if (p.next) this.head = p.next\n else this.head = this.tail = null\n } else {\n ret += StringPrototypeSlice(str, 0, n)\n this.head = p\n p.data = StringPrototypeSlice(str, n)\n }\n break\n }\n ++c\n } while ((p = p.next) !== null)\n this.length -= c\n return ret\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n _getBuffer(n) {\n const ret = Buffer.allocUnsafe(n)\n const retLen = n\n let p = this.head\n let c = 0\n do {\n const buf = p.data\n if (n > buf.length) {\n TypedArrayPrototypeSet(ret, buf, retLen - n)\n n -= buf.length\n } else {\n if (n === buf.length) {\n TypedArrayPrototypeSet(ret, buf, retLen - n)\n ++c\n if (p.next) this.head = p.next\n else this.head = this.tail = null\n } else {\n TypedArrayPrototypeSet(ret, new Uint8Array(buf.buffer, buf.byteOffset, n), retLen - n)\n this.head = p\n p.data = buf.slice(n)\n }\n break\n }\n ++c\n } while ((p = p.next) !== null)\n this.length -= c\n return ret\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n [Symbol.for('nodejs.util.inspect.custom')](_, options) {\n return inspect(this, {\n ...options,\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n })\n }\n}\n", "'use strict'\n\nconst { MathFloor, NumberIsInteger } = require('../../ours/primordials')\nconst { validateInteger } = require('../validators')\nconst { ERR_INVALID_ARG_VALUE } = require('../../ours/errors').codes\nlet defaultHighWaterMarkBytes = 16 * 1024\nlet defaultHighWaterMarkObjectMode = 16\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null\n}\nfunction getDefaultHighWaterMark(objectMode) {\n return objectMode ? defaultHighWaterMarkObjectMode : defaultHighWaterMarkBytes\n}\nfunction setDefaultHighWaterMark(objectMode, value) {\n validateInteger(value, 'value', 0)\n if (objectMode) {\n defaultHighWaterMarkObjectMode = value\n } else {\n defaultHighWaterMarkBytes = value\n }\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n const hwm = highWaterMarkFrom(options, isDuplex, duplexKey)\n if (hwm != null) {\n if (!NumberIsInteger(hwm) || hwm < 0) {\n const name = isDuplex ? `options.${duplexKey}` : 'options.highWaterMark'\n throw new ERR_INVALID_ARG_VALUE(name, hwm)\n }\n return MathFloor(hwm)\n }\n\n // Default value\n return getDefaultHighWaterMark(state.objectMode)\n}\nmodule.exports = {\n getHighWaterMark,\n getDefaultHighWaterMark,\n setDefaultHighWaterMark\n}\n", "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}", "'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst { PromisePrototypeThen, SymbolAsyncIterator, SymbolIterator } = require('../../ours/primordials')\nconst { Buffer } = require('buffer')\nconst { ERR_INVALID_ARG_TYPE, ERR_STREAM_NULL_VALUES } = require('../../ours/errors').codes\nfunction from(Readable, iterable, opts) {\n let iterator\n if (typeof iterable === 'string' || iterable instanceof Buffer) {\n return new Readable({\n objectMode: true,\n ...opts,\n read() {\n this.push(iterable)\n this.push(null)\n }\n })\n }\n let isAsync\n if (iterable && iterable[SymbolAsyncIterator]) {\n isAsync = true\n iterator = iterable[SymbolAsyncIterator]()\n } else if (iterable && iterable[SymbolIterator]) {\n isAsync = false\n iterator = iterable[SymbolIterator]()\n } else {\n throw new ERR_INVALID_ARG_TYPE('iterable', ['Iterable'], iterable)\n }\n const readable = new Readable({\n objectMode: true,\n highWaterMark: 1,\n // TODO(ronag): What options should be allowed?\n ...opts\n })\n\n // Flag to protect against _read\n // being called before last iteration completion.\n let reading = false\n readable._read = function () {\n if (!reading) {\n reading = true\n next()\n }\n }\n readable._destroy = function (error, cb) {\n PromisePrototypeThen(\n close(error),\n () => process.nextTick(cb, error),\n // nextTick is here in case cb throws\n (e) => process.nextTick(cb, e || error)\n )\n }\n async function close(error) {\n const hadError = error !== undefined && error !== null\n const hasThrow = typeof iterator.throw === 'function'\n if (hadError && hasThrow) {\n const { value, done } = await iterator.throw(error)\n await value\n if (done) {\n return\n }\n }\n if (typeof iterator.return === 'function') {\n const { value } = await iterator.return()\n await value\n }\n }\n async function next() {\n for (;;) {\n try {\n const { value, done } = isAsync ? await iterator.next() : iterator.next()\n if (done) {\n readable.push(null)\n } else {\n const res = value && typeof value.then === 'function' ? await value : value\n if (res === null) {\n reading = false\n throw new ERR_STREAM_NULL_VALUES()\n } else if (readable.push(res)) {\n continue\n } else {\n reading = false\n }\n }\n } catch (err) {\n readable.destroy(err)\n }\n break\n }\n }\n return readable\n}\nmodule.exports = from\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n ArrayPrototypeIndexOf,\n NumberIsInteger,\n NumberIsNaN,\n NumberParseInt,\n ObjectDefineProperties,\n ObjectKeys,\n ObjectSetPrototypeOf,\n Promise,\n SafeSet,\n SymbolAsyncDispose,\n SymbolAsyncIterator,\n Symbol\n} = require('../../ours/primordials')\nmodule.exports = Readable\nReadable.ReadableState = ReadableState\nconst { EventEmitter: EE } = require('events')\nconst { Stream, prependListener } = require('./legacy')\nconst { Buffer } = require('buffer')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst eos = require('./end-of-stream')\nlet debug = require('../../ours/util').debuglog('stream', (fn) => {\n debug = fn\n})\nconst BufferList = require('./buffer_list')\nconst destroyImpl = require('./destroy')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n aggregateTwoErrors,\n codes: {\n ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED,\n ERR_OUT_OF_RANGE,\n ERR_STREAM_PUSH_AFTER_EOF,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT\n },\n AbortError\n} = require('../../ours/errors')\nconst { validateObject } = require('../validators')\nconst kPaused = Symbol('kPaused')\nconst { StringDecoder } = require('string_decoder/')\nconst from = require('./from')\nObjectSetPrototypeOf(Readable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Readable, Stream)\nconst nop = () => {}\nconst { errorOrDestroy } = destroyImpl\nconst kObjectMode = 1 << 0\nconst kEnded = 1 << 1\nconst kEndEmitted = 1 << 2\nconst kReading = 1 << 3\nconst kConstructed = 1 << 4\nconst kSync = 1 << 5\nconst kNeedReadable = 1 << 6\nconst kEmittedReadable = 1 << 7\nconst kReadableListening = 1 << 8\nconst kResumeScheduled = 1 << 9\nconst kErrorEmitted = 1 << 10\nconst kEmitClose = 1 << 11\nconst kAutoDestroy = 1 << 12\nconst kDestroyed = 1 << 13\nconst kClosed = 1 << 14\nconst kCloseEmitted = 1 << 15\nconst kMultiAwaitDrain = 1 << 16\nconst kReadingMore = 1 << 17\nconst kDataEmitted = 1 << 18\n\n// TODO(benjamingr) it is likely slower to do it this way than with free functions\nfunction makeBitMapDescriptor(bit) {\n return {\n enumerable: false,\n get() {\n return (this.state & bit) !== 0\n },\n set(value) {\n if (value) this.state |= bit\n else this.state &= ~bit\n }\n }\n}\nObjectDefineProperties(ReadableState.prototype, {\n objectMode: makeBitMapDescriptor(kObjectMode),\n ended: makeBitMapDescriptor(kEnded),\n endEmitted: makeBitMapDescriptor(kEndEmitted),\n reading: makeBitMapDescriptor(kReading),\n // Stream is still being constructed and cannot be\n // destroyed until construction finished or failed.\n // Async construction is opt in, therefore we start as\n // constructed.\n constructed: makeBitMapDescriptor(kConstructed),\n // A flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n sync: makeBitMapDescriptor(kSync),\n // Whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n needReadable: makeBitMapDescriptor(kNeedReadable),\n emittedReadable: makeBitMapDescriptor(kEmittedReadable),\n readableListening: makeBitMapDescriptor(kReadableListening),\n resumeScheduled: makeBitMapDescriptor(kResumeScheduled),\n // True if the error was already emitted and should not be thrown again.\n errorEmitted: makeBitMapDescriptor(kErrorEmitted),\n emitClose: makeBitMapDescriptor(kEmitClose),\n autoDestroy: makeBitMapDescriptor(kAutoDestroy),\n // Has it been destroyed.\n destroyed: makeBitMapDescriptor(kDestroyed),\n // Indicates whether the stream has finished destroying.\n closed: makeBitMapDescriptor(kClosed),\n // True if close has been emitted or would have been emitted\n // depending on emitClose.\n closeEmitted: makeBitMapDescriptor(kCloseEmitted),\n multiAwaitDrain: makeBitMapDescriptor(kMultiAwaitDrain),\n // If true, a maybeReadMore has been scheduled.\n readingMore: makeBitMapDescriptor(kReadingMore),\n dataEmitted: makeBitMapDescriptor(kDataEmitted)\n})\nfunction ReadableState(options, stream, isDuplex) {\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n // Bit map field to store ReadableState more effciently with 1 bit per field\n // instead of a V8 slot per field.\n this.state = kEmitClose | kAutoDestroy | kConstructed | kSync\n // Object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away.\n if (options && options.objectMode) this.state |= kObjectMode\n if (isDuplex && options && options.readableObjectMode) this.state |= kObjectMode\n\n // The point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = options\n ? getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex)\n : getDefaultHighWaterMark(false)\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift().\n this.buffer = new BufferList()\n this.length = 0\n this.pipes = []\n this.flowing = null\n this[kPaused] = null\n\n // Should close be emitted on destroy. Defaults to true.\n if (options && options.emitClose === false) this.state &= ~kEmitClose\n\n // Should .destroy() be called after 'end' (and potentially 'finish').\n if (options && options.autoDestroy === false) this.state &= ~kAutoDestroy\n\n // Indicates whether the stream has errored. When true no further\n // _read calls, 'data' or 'readable' events should occur. This is needed\n // since when autoDestroy is disabled we need a way to tell whether the\n // stream has failed.\n this.errored = null\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n // Ref the piped dest which we need a drain event on it\n // type: null | Writable | Set<Writable>.\n this.awaitDrainWriters = null\n this.decoder = null\n this.encoding = null\n if (options && options.encoding) {\n this.decoder = new StringDecoder(options.encoding)\n this.encoding = options.encoding\n }\n}\nfunction Readable(options) {\n if (!(this instanceof Readable)) return new Readable(options)\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5.\n const isDuplex = this instanceof require('./duplex')\n this._readableState = new ReadableState(options, this, isDuplex)\n if (options) {\n if (typeof options.read === 'function') this._read = options.read\n if (typeof options.destroy === 'function') this._destroy = options.destroy\n if (typeof options.construct === 'function') this._construct = options.construct\n if (options.signal && !isDuplex) addAbortSignal(options.signal, this)\n }\n Stream.call(this, options)\n destroyImpl.construct(this, () => {\n if (this._readableState.needReadable) {\n maybeReadMore(this, this._readableState)\n }\n })\n}\nReadable.prototype.destroy = destroyImpl.destroy\nReadable.prototype._undestroy = destroyImpl.undestroy\nReadable.prototype._destroy = function (err, cb) {\n cb(err)\n}\nReadable.prototype[EE.captureRejectionSymbol] = function (err) {\n this.destroy(err)\n}\nReadable.prototype[SymbolAsyncDispose] = function () {\n let error\n if (!this.destroyed) {\n error = this.readableEnded ? null : new AbortError()\n this.destroy(error)\n }\n return new Promise((resolve, reject) => eos(this, (err) => (err && err !== error ? reject(err) : resolve(null))))\n}\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n return readableAddChunk(this, chunk, encoding, false)\n}\n\n// Unshift should *always* be something directly out of read().\nReadable.prototype.unshift = function (chunk, encoding) {\n return readableAddChunk(this, chunk, encoding, true)\n}\nfunction readableAddChunk(stream, chunk, encoding, addToFront) {\n debug('readableAddChunk', chunk)\n const state = stream._readableState\n let err\n if ((state.state & kObjectMode) === 0) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding\n if (state.encoding !== encoding) {\n if (addToFront && state.encoding) {\n // When unshifting, if state.encoding is set, we have to save\n // the string in the BufferList with the state encoding.\n chunk = Buffer.from(chunk, encoding).toString(state.encoding)\n } else {\n chunk = Buffer.from(chunk, encoding)\n encoding = ''\n }\n }\n } else if (chunk instanceof Buffer) {\n encoding = ''\n } else if (Stream._isUint8Array(chunk)) {\n chunk = Stream._uint8ArrayToBuffer(chunk)\n encoding = ''\n } else if (chunk != null) {\n err = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n }\n }\n if (err) {\n errorOrDestroy(stream, err)\n } else if (chunk === null) {\n state.state &= ~kReading\n onEofChunk(stream, state)\n } else if ((state.state & kObjectMode) !== 0 || (chunk && chunk.length > 0)) {\n if (addToFront) {\n if ((state.state & kEndEmitted) !== 0) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT())\n else if (state.destroyed || state.errored) return false\n else addChunk(stream, state, chunk, true)\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF())\n } else if (state.destroyed || state.errored) {\n return false\n } else {\n state.state &= ~kReading\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk)\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false)\n else maybeReadMore(stream, state)\n } else {\n addChunk(stream, state, chunk, false)\n }\n }\n } else if (!addToFront) {\n state.state &= ~kReading\n maybeReadMore(stream, state)\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0)\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync && stream.listenerCount('data') > 0) {\n // Use the guard to avoid creating `Set()` repeatedly\n // when we have multiple pipes.\n if ((state.state & kMultiAwaitDrain) !== 0) {\n state.awaitDrainWriters.clear()\n } else {\n state.awaitDrainWriters = null\n }\n state.dataEmitted = true\n stream.emit('data', chunk)\n } else {\n // Update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length\n if (addToFront) state.buffer.unshift(chunk)\n else state.buffer.push(chunk)\n if ((state.state & kNeedReadable) !== 0) emitReadable(stream)\n }\n maybeReadMore(stream, state)\n}\nReadable.prototype.isPaused = function () {\n const state = this._readableState\n return state[kPaused] === true || state.flowing === false\n}\n\n// Backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n const decoder = new StringDecoder(enc)\n this._readableState.decoder = decoder\n // If setEncoding(null), decoder.encoding equals utf8.\n this._readableState.encoding = this._readableState.decoder.encoding\n const buffer = this._readableState.buffer\n // Iterate over current buffer to convert already stored Buffers:\n let content = ''\n for (const data of buffer) {\n content += decoder.write(data)\n }\n buffer.clear()\n if (content !== '') buffer.push(content)\n this._readableState.length = content.length\n return this\n}\n\n// Don't raise the hwm > 1GB.\nconst MAX_HWM = 0x40000000\nfunction computeNewHighWaterMark(n) {\n if (n > MAX_HWM) {\n throw new ERR_OUT_OF_RANGE('size', '<= 1GiB', n)\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts.\n n--\n n |= n >>> 1\n n |= n >>> 2\n n |= n >>> 4\n n |= n >>> 8\n n |= n >>> 16\n n++\n }\n return n\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || (state.length === 0 && state.ended)) return 0\n if ((state.state & kObjectMode) !== 0) return 1\n if (NumberIsNaN(n)) {\n // Only flow one buffer at a time.\n if (state.flowing && state.length) return state.buffer.first().length\n return state.length\n }\n if (n <= state.length) return n\n return state.ended ? state.length : 0\n}\n\n// You can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n)\n // Same as parseInt(undefined, 10), however V8 7.3 performance regressed\n // in this scenario, so we are doing it manually.\n if (n === undefined) {\n n = NaN\n } else if (!NumberIsInteger(n)) {\n n = NumberParseInt(n, 10)\n }\n const state = this._readableState\n const nOrig = n\n\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n)\n if (n !== 0) state.state &= ~kEmittedReadable\n\n // If we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (\n n === 0 &&\n state.needReadable &&\n ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)\n ) {\n debug('read: emitReadable', state.length, state.ended)\n if (state.length === 0 && state.ended) endReadable(this)\n else emitReadable(this)\n return null\n }\n n = howMuchToRead(n, state)\n\n // If we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this)\n return null\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n let doRead = (state.state & kNeedReadable) !== 0\n debug('need readable', doRead)\n\n // If we currently have less than the highWaterMark, then also read some.\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true\n debug('length less than watermark', doRead)\n }\n\n // However, if we've ended, then there's no point, if we're already\n // reading, then it's unnecessary, if we're constructing we have to wait,\n // and if we're destroyed or errored, then it's not allowed,\n if (state.ended || state.reading || state.destroyed || state.errored || !state.constructed) {\n doRead = false\n debug('reading, ended or constructing', doRead)\n } else if (doRead) {\n debug('do read')\n state.state |= kReading | kSync\n // If the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.state |= kNeedReadable\n\n // Call internal read method\n try {\n this._read(state.highWaterMark)\n } catch (err) {\n errorOrDestroy(this, err)\n }\n state.state &= ~kSync\n\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state)\n }\n let ret\n if (n > 0) ret = fromList(n, state)\n else ret = null\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark\n n = 0\n } else {\n state.length -= n\n if (state.multiAwaitDrain) {\n state.awaitDrainWriters.clear()\n } else {\n state.awaitDrainWriters = null\n }\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this)\n }\n if (ret !== null && !state.errorEmitted && !state.closeEmitted) {\n state.dataEmitted = true\n this.emit('data', ret)\n }\n return ret\n}\nfunction onEofChunk(stream, state) {\n debug('onEofChunk')\n if (state.ended) return\n if (state.decoder) {\n const chunk = state.decoder.end()\n if (chunk && chunk.length) {\n state.buffer.push(chunk)\n state.length += state.objectMode ? 1 : chunk.length\n }\n }\n state.ended = true\n if (state.sync) {\n // If we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call.\n emitReadable(stream)\n } else {\n // Emit 'readable' now to make sure it gets picked up.\n state.needReadable = false\n state.emittedReadable = true\n // We have to emit readable now that we are EOF. Modules\n // in the ecosystem (e.g. dicer) rely on this event being sync.\n emitReadable_(stream)\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n const state = stream._readableState\n debug('emitReadable', state.needReadable, state.emittedReadable)\n state.needReadable = false\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing)\n state.emittedReadable = true\n process.nextTick(emitReadable_, stream)\n }\n}\nfunction emitReadable_(stream) {\n const state = stream._readableState\n debug('emitReadable_', state.destroyed, state.length, state.ended)\n if (!state.destroyed && !state.errored && (state.length || state.ended)) {\n stream.emit('readable')\n state.emittedReadable = false\n }\n\n // The stream needs another readable event if:\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark\n flow(stream)\n}\n\n// At this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore && state.constructed) {\n state.readingMore = true\n process.nextTick(maybeReadMore_, stream, state)\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (\n !state.reading &&\n !state.ended &&\n (state.length < state.highWaterMark || (state.flowing && state.length === 0))\n ) {\n const len = state.length\n debug('maybeReadMore read 0')\n stream.read(0)\n if (len === state.length)\n // Didn't get any data, stop spinning.\n break\n }\n state.readingMore = false\n}\n\n// Abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_read()')\n}\nReadable.prototype.pipe = function (dest, pipeOpts) {\n const src = this\n const state = this._readableState\n if (state.pipes.length === 1) {\n if (!state.multiAwaitDrain) {\n state.multiAwaitDrain = true\n state.awaitDrainWriters = new SafeSet(state.awaitDrainWriters ? [state.awaitDrainWriters] : [])\n }\n }\n state.pipes.push(dest)\n debug('pipe count=%d opts=%j', state.pipes.length, pipeOpts)\n const doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr\n const endFn = doEnd ? onend : unpipe\n if (state.endEmitted) process.nextTick(endFn)\n else src.once('end', endFn)\n dest.on('unpipe', onunpipe)\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe')\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true\n cleanup()\n }\n }\n }\n function onend() {\n debug('onend')\n dest.end()\n }\n let ondrain\n let cleanedUp = false\n function cleanup() {\n debug('cleanup')\n // Cleanup event handlers once the pipe is broken.\n dest.removeListener('close', onclose)\n dest.removeListener('finish', onfinish)\n if (ondrain) {\n dest.removeListener('drain', ondrain)\n }\n dest.removeListener('error', onerror)\n dest.removeListener('unpipe', onunpipe)\n src.removeListener('end', onend)\n src.removeListener('end', unpipe)\n src.removeListener('data', ondata)\n cleanedUp = true\n\n // If the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (ondrain && state.awaitDrainWriters && (!dest._writableState || dest._writableState.needDrain)) ondrain()\n }\n function pause() {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if (!cleanedUp) {\n if (state.pipes.length === 1 && state.pipes[0] === dest) {\n debug('false write response, pause', 0)\n state.awaitDrainWriters = dest\n state.multiAwaitDrain = false\n } else if (state.pipes.length > 1 && state.pipes.includes(dest)) {\n debug('false write response, pause', state.awaitDrainWriters.size)\n state.awaitDrainWriters.add(dest)\n }\n src.pause()\n }\n if (!ondrain) {\n // When the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n ondrain = pipeOnDrain(src, dest)\n dest.on('drain', ondrain)\n }\n }\n src.on('data', ondata)\n function ondata(chunk) {\n debug('ondata')\n const ret = dest.write(chunk)\n debug('dest.write', ret)\n if (ret === false) {\n pause()\n }\n }\n\n // If the dest has an error, then stop piping into it.\n // However, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er)\n unpipe()\n dest.removeListener('error', onerror)\n if (dest.listenerCount('error') === 0) {\n const s = dest._writableState || dest._readableState\n if (s && !s.errorEmitted) {\n // User incorrectly emitted 'error' directly on the stream.\n errorOrDestroy(dest, er)\n } else {\n dest.emit('error', er)\n }\n }\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror)\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish)\n unpipe()\n }\n dest.once('close', onclose)\n function onfinish() {\n debug('onfinish')\n dest.removeListener('close', onclose)\n unpipe()\n }\n dest.once('finish', onfinish)\n function unpipe() {\n debug('unpipe')\n src.unpipe(dest)\n }\n\n // Tell the dest that it's being piped to.\n dest.emit('pipe', src)\n\n // Start the flow if it hasn't been started already.\n\n if (dest.writableNeedDrain === true) {\n pause()\n } else if (!state.flowing) {\n debug('pipe resume')\n src.resume()\n }\n return dest\n}\nfunction pipeOnDrain(src, dest) {\n return function pipeOnDrainFunctionResult() {\n const state = src._readableState\n\n // `ondrain` will call directly,\n // `this` maybe not a reference to dest,\n // so we use the real dest here.\n if (state.awaitDrainWriters === dest) {\n debug('pipeOnDrain', 1)\n state.awaitDrainWriters = null\n } else if (state.multiAwaitDrain) {\n debug('pipeOnDrain', state.awaitDrainWriters.size)\n state.awaitDrainWriters.delete(dest)\n }\n if ((!state.awaitDrainWriters || state.awaitDrainWriters.size === 0) && src.listenerCount('data')) {\n src.resume()\n }\n }\n}\nReadable.prototype.unpipe = function (dest) {\n const state = this._readableState\n const unpipeInfo = {\n hasUnpiped: false\n }\n\n // If we're not piping anywhere, then do nothing.\n if (state.pipes.length === 0) return this\n if (!dest) {\n // remove all.\n const dests = state.pipes\n state.pipes = []\n this.pause()\n for (let i = 0; i < dests.length; i++)\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n })\n return this\n }\n\n // Try to find the right one.\n const index = ArrayPrototypeIndexOf(state.pipes, dest)\n if (index === -1) return this\n state.pipes.splice(index, 1)\n if (state.pipes.length === 0) this.pause()\n dest.emit('unpipe', this, unpipeInfo)\n return this\n}\n\n// Set up data events if they are asked for\n// Ensure readable listeners eventually get something.\nReadable.prototype.on = function (ev, fn) {\n const res = Stream.prototype.on.call(this, ev, fn)\n const state = this._readableState\n if (ev === 'data') {\n // Update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0\n\n // Try start flowing on next tick if stream isn't explicitly paused.\n if (state.flowing !== false) this.resume()\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true\n state.flowing = false\n state.emittedReadable = false\n debug('on readable', state.length, state.reading)\n if (state.length) {\n emitReadable(this)\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this)\n }\n }\n }\n return res\n}\nReadable.prototype.addListener = Readable.prototype.on\nReadable.prototype.removeListener = function (ev, fn) {\n const res = Stream.prototype.removeListener.call(this, ev, fn)\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this)\n }\n return res\n}\nReadable.prototype.off = Readable.prototype.removeListener\nReadable.prototype.removeAllListeners = function (ev) {\n const res = Stream.prototype.removeAllListeners.apply(this, arguments)\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this)\n }\n return res\n}\nfunction updateReadableListening(self) {\n const state = self._readableState\n state.readableListening = self.listenerCount('readable') > 0\n if (state.resumeScheduled && state[kPaused] === false) {\n // Flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true\n\n // Crude way to check if we should resume.\n } else if (self.listenerCount('data') > 0) {\n self.resume()\n } else if (!state.readableListening) {\n state.flowing = null\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0')\n self.read(0)\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n const state = this._readableState\n if (!state.flowing) {\n debug('resume')\n // We flow only if there is no one listening\n // for readable, but we still have to call\n // resume().\n state.flowing = !state.readableListening\n resume(this, state)\n }\n state[kPaused] = false\n return this\n}\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true\n process.nextTick(resume_, stream, state)\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading)\n if (!state.reading) {\n stream.read(0)\n }\n state.resumeScheduled = false\n stream.emit('resume')\n flow(stream)\n if (state.flowing && !state.reading) stream.read(0)\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing)\n if (this._readableState.flowing !== false) {\n debug('pause')\n this._readableState.flowing = false\n this.emit('pause')\n }\n this._readableState[kPaused] = true\n return this\n}\nfunction flow(stream) {\n const state = stream._readableState\n debug('flow', state.flowing)\n while (state.flowing && stream.read() !== null);\n}\n\n// Wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n let paused = false\n\n // TODO (ronag): Should this.destroy(err) emit\n // 'error' on the wrapped stream? Would require\n // a static factory method, e.g. Readable.wrap(stream).\n\n stream.on('data', (chunk) => {\n if (!this.push(chunk) && stream.pause) {\n paused = true\n stream.pause()\n }\n })\n stream.on('end', () => {\n this.push(null)\n })\n stream.on('error', (err) => {\n errorOrDestroy(this, err)\n })\n stream.on('close', () => {\n this.destroy()\n })\n stream.on('destroy', () => {\n this.destroy()\n })\n this._read = () => {\n if (paused && stream.resume) {\n paused = false\n stream.resume()\n }\n }\n\n // Proxy all the other methods. Important when wrapping filters and duplexes.\n const streamKeys = ObjectKeys(stream)\n for (let j = 1; j < streamKeys.length; j++) {\n const i = streamKeys[j]\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = stream[i].bind(stream)\n }\n }\n return this\n}\nReadable.prototype[SymbolAsyncIterator] = function () {\n return streamToAsyncIterator(this)\n}\nReadable.prototype.iterator = function (options) {\n if (options !== undefined) {\n validateObject(options, 'options')\n }\n return streamToAsyncIterator(this, options)\n}\nfunction streamToAsyncIterator(stream, options) {\n if (typeof stream.read !== 'function') {\n stream = Readable.wrap(stream, {\n objectMode: true\n })\n }\n const iter = createAsyncIterator(stream, options)\n iter.stream = stream\n return iter\n}\nasync function* createAsyncIterator(stream, options) {\n let callback = nop\n function next(resolve) {\n if (this === stream) {\n callback()\n callback = nop\n } else {\n callback = resolve\n }\n }\n stream.on('readable', next)\n let error\n const cleanup = eos(\n stream,\n {\n writable: false\n },\n (err) => {\n error = err ? aggregateTwoErrors(error, err) : null\n callback()\n callback = nop\n }\n )\n try {\n while (true) {\n const chunk = stream.destroyed ? null : stream.read()\n if (chunk !== null) {\n yield chunk\n } else if (error) {\n throw error\n } else if (error === null) {\n return\n } else {\n await new Promise(next)\n }\n }\n } catch (err) {\n error = aggregateTwoErrors(error, err)\n throw error\n } finally {\n if (\n (error || (options === null || options === undefined ? undefined : options.destroyOnReturn) !== false) &&\n (error === undefined || stream._readableState.autoDestroy)\n ) {\n destroyImpl.destroyer(stream, null)\n } else {\n stream.off('readable', next)\n cleanup()\n }\n }\n}\n\n// Making it explicit these properties are not enumerable\n// because otherwise some prototype manipulation in\n// userland will fail.\nObjectDefineProperties(Readable.prototype, {\n readable: {\n __proto__: null,\n get() {\n const r = this._readableState\n // r.readable === false means that this is part of a Duplex stream\n // where the readable side was disabled upon construction.\n // Compat. The user might manually disable readable side through\n // deprecated setter.\n return !!r && r.readable !== false && !r.destroyed && !r.errorEmitted && !r.endEmitted\n },\n set(val) {\n // Backwards compat.\n if (this._readableState) {\n this._readableState.readable = !!val\n }\n }\n },\n readableDidRead: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.dataEmitted\n }\n },\n readableAborted: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return !!(\n this._readableState.readable !== false &&\n (this._readableState.destroyed || this._readableState.errored) &&\n !this._readableState.endEmitted\n )\n }\n },\n readableHighWaterMark: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark\n }\n },\n readableBuffer: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState && this._readableState.buffer\n }\n },\n readableFlowing: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return this._readableState.flowing\n },\n set: function (state) {\n if (this._readableState) {\n this._readableState.flowing = state\n }\n }\n },\n readableLength: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState.length\n }\n },\n readableObjectMode: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.objectMode : false\n }\n },\n readableEncoding: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.encoding : null\n }\n },\n errored: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.errored : null\n }\n },\n closed: {\n __proto__: null,\n get() {\n return this._readableState ? this._readableState.closed : false\n }\n },\n destroyed: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.destroyed : false\n },\n set(value) {\n // We ignore the value if the stream\n // has not been initialized yet.\n if (!this._readableState) {\n return\n }\n\n // Backward compatibility, the user is explicitly\n // managing destroyed.\n this._readableState.destroyed = value\n }\n },\n readableEnded: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._readableState ? this._readableState.endEmitted : false\n }\n }\n})\nObjectDefineProperties(ReadableState.prototype, {\n // Legacy getter for `pipesCount`.\n pipesCount: {\n __proto__: null,\n get() {\n return this.pipes.length\n }\n },\n // Legacy property for `paused`.\n paused: {\n __proto__: null,\n get() {\n return this[kPaused] !== false\n },\n set(value) {\n this[kPaused] = !!value\n }\n }\n})\n\n// Exposed for testing purposes only.\nReadable._fromList = fromList\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered.\n if (state.length === 0) return null\n let ret\n if (state.objectMode) ret = state.buffer.shift()\n else if (!n || n >= state.length) {\n // Read it all, truncate the list.\n if (state.decoder) ret = state.buffer.join('')\n else if (state.buffer.length === 1) ret = state.buffer.first()\n else ret = state.buffer.concat(state.length)\n state.buffer.clear()\n } else {\n // read part of list.\n ret = state.buffer.consume(n, state.decoder)\n }\n return ret\n}\nfunction endReadable(stream) {\n const state = stream._readableState\n debug('endReadable', state.endEmitted)\n if (!state.endEmitted) {\n state.ended = true\n process.nextTick(endReadableNT, state, stream)\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length)\n\n // Check that we didn't get one last unshift.\n if (!state.errored && !state.closeEmitted && !state.endEmitted && state.length === 0) {\n state.endEmitted = true\n stream.emit('end')\n if (stream.writable && stream.allowHalfOpen === false) {\n process.nextTick(endWritableNT, stream)\n } else if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well.\n const wState = stream._writableState\n const autoDestroy =\n !wState ||\n (wState.autoDestroy &&\n // We don't expect the writable to ever 'finish'\n // if writable is explicitly set to false.\n (wState.finished || wState.writable === false))\n if (autoDestroy) {\n stream.destroy()\n }\n }\n }\n}\nfunction endWritableNT(stream) {\n const writable = stream.writable && !stream.writableEnded && !stream.destroyed\n if (writable) {\n stream.end()\n }\n}\nReadable.from = function (iterable, opts) {\n return from(Readable, iterable, opts)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nReadable.fromWeb = function (readableStream, options) {\n return lazyWebStreams().newStreamReadableFromReadableStream(readableStream, options)\n}\nReadable.toWeb = function (streamReadable, options) {\n return lazyWebStreams().newReadableStreamFromStreamReadable(streamReadable, options)\n}\nReadable.wrap = function (src, options) {\n var _ref, _src$readableObjectMo\n return new Readable({\n objectMode:\n (_ref =\n (_src$readableObjectMo = src.readableObjectMode) !== null && _src$readableObjectMo !== undefined\n ? _src$readableObjectMo\n : src.objectMode) !== null && _ref !== undefined\n ? _ref\n : true,\n ...options,\n destroy(err, callback) {\n destroyImpl.destroyer(src, err)\n callback(err)\n }\n }).wrap(src)\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict'\n\n/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\nconst {\n ArrayPrototypeSlice,\n Error,\n FunctionPrototypeSymbolHasInstance,\n ObjectDefineProperty,\n ObjectDefineProperties,\n ObjectSetPrototypeOf,\n StringPrototypeToLowerCase,\n Symbol,\n SymbolHasInstance\n} = require('../../ours/primordials')\nmodule.exports = Writable\nWritable.WritableState = WritableState\nconst { EventEmitter: EE } = require('events')\nconst Stream = require('./legacy').Stream\nconst { Buffer } = require('buffer')\nconst destroyImpl = require('./destroy')\nconst { addAbortSignal } = require('./add-abort-signal')\nconst { getHighWaterMark, getDefaultHighWaterMark } = require('./state')\nconst {\n ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED,\n ERR_STREAM_ALREADY_FINISHED,\n ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING\n} = require('../../ours/errors').codes\nconst { errorOrDestroy } = destroyImpl\nObjectSetPrototypeOf(Writable.prototype, Stream.prototype)\nObjectSetPrototypeOf(Writable, Stream)\nfunction nop() {}\nconst kOnFinished = Symbol('kOnFinished')\nfunction WritableState(options, stream, isDuplex) {\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof require('./duplex')\n\n // Object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!(options && options.objectMode)\n if (isDuplex) this.objectMode = this.objectMode || !!(options && options.writableObjectMode)\n\n // The point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write().\n this.highWaterMark = options\n ? getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex)\n : getDefaultHighWaterMark(false)\n\n // if _final has been called.\n this.finalCalled = false\n\n // drain event flag.\n this.needDrain = false\n // At the start of calling end()\n this.ending = false\n // When end() has been called, and returned.\n this.ended = false\n // When 'finish' is emitted.\n this.finished = false\n\n // Has it been destroyed\n this.destroyed = false\n\n // Should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n const noDecode = !!(options && options.decodeStrings === false)\n this.decodeStrings = !noDecode\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = (options && options.defaultEncoding) || 'utf8'\n\n // Not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0\n\n // A flag to see when we're in the middle of a write.\n this.writing = false\n\n // When true all writes will be buffered until .uncork() call.\n this.corked = 0\n\n // A flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true\n\n // A flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false\n\n // The callback that's passed to _write(chunk, cb).\n this.onwrite = onwrite.bind(undefined, stream)\n\n // The callback that the user supplies to write(chunk, encoding, cb).\n this.writecb = null\n\n // The amount that is being written when _write is called.\n this.writelen = 0\n\n // Storage for data passed to the afterWrite() callback in case of\n // synchronous _write() completion.\n this.afterWriteTickInfo = null\n resetBuffer(this)\n\n // Number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted.\n this.pendingcb = 0\n\n // Stream is still being constructed and cannot be\n // destroyed until construction finished or failed.\n // Async construction is opt in, therefore we start as\n // constructed.\n this.constructed = true\n\n // Emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams.\n this.prefinished = false\n\n // True if the error was already emitted and should not be thrown again.\n this.errorEmitted = false\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = !options || options.emitClose !== false\n\n // Should .destroy() be called after 'finish' (and potentially 'end').\n this.autoDestroy = !options || options.autoDestroy !== false\n\n // Indicates whether the stream has errored. When true all write() calls\n // should return false. This is needed since when autoDestroy\n // is disabled we need a way to tell whether the stream has failed.\n this.errored = null\n\n // Indicates whether the stream has finished destroying.\n this.closed = false\n\n // True if close has been emitted or would have been emitted\n // depending on emitClose.\n this.closeEmitted = false\n this[kOnFinished] = []\n}\nfunction resetBuffer(state) {\n state.buffered = []\n state.bufferedIndex = 0\n state.allBuffers = true\n state.allNoop = true\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n return ArrayPrototypeSlice(this.buffered, this.bufferedIndex)\n}\nObjectDefineProperty(WritableState.prototype, 'bufferedRequestCount', {\n __proto__: null,\n get() {\n return this.buffered.length - this.bufferedIndex\n }\n})\nfunction Writable(options) {\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5.\n const isDuplex = this instanceof require('./duplex')\n if (!isDuplex && !FunctionPrototypeSymbolHasInstance(Writable, this)) return new Writable(options)\n this._writableState = new WritableState(options, this, isDuplex)\n if (options) {\n if (typeof options.write === 'function') this._write = options.write\n if (typeof options.writev === 'function') this._writev = options.writev\n if (typeof options.destroy === 'function') this._destroy = options.destroy\n if (typeof options.final === 'function') this._final = options.final\n if (typeof options.construct === 'function') this._construct = options.construct\n if (options.signal) addAbortSignal(options.signal, this)\n }\n Stream.call(this, options)\n destroyImpl.construct(this, () => {\n const state = this._writableState\n if (!state.writing) {\n clearBuffer(this, state)\n }\n finishMaybe(this, state)\n })\n}\nObjectDefineProperty(Writable, SymbolHasInstance, {\n __proto__: null,\n value: function (object) {\n if (FunctionPrototypeSymbolHasInstance(this, object)) return true\n if (this !== Writable) return false\n return object && object._writableState instanceof WritableState\n }\n})\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE())\n}\nfunction _write(stream, chunk, encoding, cb) {\n const state = stream._writableState\n if (typeof encoding === 'function') {\n cb = encoding\n encoding = state.defaultEncoding\n } else {\n if (!encoding) encoding = state.defaultEncoding\n else if (encoding !== 'buffer' && !Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n if (typeof cb !== 'function') cb = nop\n }\n if (chunk === null) {\n throw new ERR_STREAM_NULL_VALUES()\n } else if (!state.objectMode) {\n if (typeof chunk === 'string') {\n if (state.decodeStrings !== false) {\n chunk = Buffer.from(chunk, encoding)\n encoding = 'buffer'\n }\n } else if (chunk instanceof Buffer) {\n encoding = 'buffer'\n } else if (Stream._isUint8Array(chunk)) {\n chunk = Stream._uint8ArrayToBuffer(chunk)\n encoding = 'buffer'\n } else {\n throw new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk)\n }\n }\n let err\n if (state.ending) {\n err = new ERR_STREAM_WRITE_AFTER_END()\n } else if (state.destroyed) {\n err = new ERR_STREAM_DESTROYED('write')\n }\n if (err) {\n process.nextTick(cb, err)\n errorOrDestroy(stream, err, true)\n return err\n }\n state.pendingcb++\n return writeOrBuffer(stream, state, chunk, encoding, cb)\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n return _write(this, chunk, encoding, cb) === true\n}\nWritable.prototype.cork = function () {\n this._writableState.corked++\n}\nWritable.prototype.uncork = function () {\n const state = this._writableState\n if (state.corked) {\n state.corked--\n if (!state.writing) clearBuffer(this, state)\n }\n}\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = StringPrototypeToLowerCase(encoding)\n if (!Buffer.isEncoding(encoding)) throw new ERR_UNKNOWN_ENCODING(encoding)\n this._writableState.defaultEncoding = encoding\n return this\n}\n\n// If we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, chunk, encoding, callback) {\n const len = state.objectMode ? 1 : chunk.length\n state.length += len\n\n // stream._write resets state.length\n const ret = state.length < state.highWaterMark\n // We must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true\n if (state.writing || state.corked || state.errored || !state.constructed) {\n state.buffered.push({\n chunk,\n encoding,\n callback\n })\n if (state.allBuffers && encoding !== 'buffer') {\n state.allBuffers = false\n }\n if (state.allNoop && callback !== nop) {\n state.allNoop = false\n }\n } else {\n state.writelen = len\n state.writecb = callback\n state.writing = true\n state.sync = true\n stream._write(chunk, encoding, state.onwrite)\n state.sync = false\n }\n\n // Return false if errored or destroyed in order to break\n // any synchronous while(stream.write(data)) loops.\n return ret && !state.errored && !state.destroyed\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len\n state.writecb = cb\n state.writing = true\n state.sync = true\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'))\n else if (writev) stream._writev(chunk, state.onwrite)\n else stream._write(chunk, encoding, state.onwrite)\n state.sync = false\n}\nfunction onwriteError(stream, state, er, cb) {\n --state.pendingcb\n cb(er)\n // Ensure callbacks are invoked even when autoDestroy is\n // not enabled. Passing `er` here doesn't make sense since\n // it's related to one specific write, not to the buffered\n // writes.\n errorBuffer(state)\n // This can emit error, but error must always follow cb.\n errorOrDestroy(stream, er)\n}\nfunction onwrite(stream, er) {\n const state = stream._writableState\n const sync = state.sync\n const cb = state.writecb\n if (typeof cb !== 'function') {\n errorOrDestroy(stream, new ERR_MULTIPLE_CALLBACK())\n return\n }\n state.writing = false\n state.writecb = null\n state.length -= state.writelen\n state.writelen = 0\n if (er) {\n // Avoid V8 leak, https://github.com/nodejs/node/pull/34103#issuecomment-652002364\n er.stack // eslint-disable-line no-unused-expressions\n\n if (!state.errored) {\n state.errored = er\n }\n\n // In case of duplex streams we need to notify the readable side of the\n // error.\n if (stream._readableState && !stream._readableState.errored) {\n stream._readableState.errored = er\n }\n if (sync) {\n process.nextTick(onwriteError, stream, state, er, cb)\n } else {\n onwriteError(stream, state, er, cb)\n }\n } else {\n if (state.buffered.length > state.bufferedIndex) {\n clearBuffer(stream, state)\n }\n if (sync) {\n // It is a common case that the callback passed to .write() is always\n // the same. In that case, we do not schedule a new nextTick(), but\n // rather just increase a counter, to improve performance and avoid\n // memory allocations.\n if (state.afterWriteTickInfo !== null && state.afterWriteTickInfo.cb === cb) {\n state.afterWriteTickInfo.count++\n } else {\n state.afterWriteTickInfo = {\n count: 1,\n cb,\n stream,\n state\n }\n process.nextTick(afterWriteTick, state.afterWriteTickInfo)\n }\n } else {\n afterWrite(stream, state, 1, cb)\n }\n }\n}\nfunction afterWriteTick({ stream, state, count, cb }) {\n state.afterWriteTickInfo = null\n return afterWrite(stream, state, count, cb)\n}\nfunction afterWrite(stream, state, count, cb) {\n const needDrain = !state.ending && !stream.destroyed && state.length === 0 && state.needDrain\n if (needDrain) {\n state.needDrain = false\n stream.emit('drain')\n }\n while (count-- > 0) {\n state.pendingcb--\n cb()\n }\n if (state.destroyed) {\n errorBuffer(state)\n }\n finishMaybe(stream, state)\n}\n\n// If there's something in the buffer waiting, then invoke callbacks.\nfunction errorBuffer(state) {\n if (state.writing) {\n return\n }\n for (let n = state.bufferedIndex; n < state.buffered.length; ++n) {\n var _state$errored\n const { chunk, callback } = state.buffered[n]\n const len = state.objectMode ? 1 : chunk.length\n state.length -= len\n callback(\n (_state$errored = state.errored) !== null && _state$errored !== undefined\n ? _state$errored\n : new ERR_STREAM_DESTROYED('write')\n )\n }\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n var _state$errored2\n onfinishCallbacks[i](\n (_state$errored2 = state.errored) !== null && _state$errored2 !== undefined\n ? _state$errored2\n : new ERR_STREAM_DESTROYED('end')\n )\n }\n resetBuffer(state)\n}\n\n// If there's something in the buffer waiting, then process it.\nfunction clearBuffer(stream, state) {\n if (state.corked || state.bufferProcessing || state.destroyed || !state.constructed) {\n return\n }\n const { buffered, bufferedIndex, objectMode } = state\n const bufferedLength = buffered.length - bufferedIndex\n if (!bufferedLength) {\n return\n }\n let i = bufferedIndex\n state.bufferProcessing = true\n if (bufferedLength > 1 && stream._writev) {\n state.pendingcb -= bufferedLength - 1\n const callback = state.allNoop\n ? nop\n : (err) => {\n for (let n = i; n < buffered.length; ++n) {\n buffered[n].callback(err)\n }\n }\n // Make a copy of `buffered` if it's going to be used by `callback` above,\n // since `doWrite` will mutate the array.\n const chunks = state.allNoop && i === 0 ? buffered : ArrayPrototypeSlice(buffered, i)\n chunks.allBuffers = state.allBuffers\n doWrite(stream, state, true, state.length, chunks, '', callback)\n resetBuffer(state)\n } else {\n do {\n const { chunk, encoding, callback } = buffered[i]\n buffered[i++] = null\n const len = objectMode ? 1 : chunk.length\n doWrite(stream, state, false, len, chunk, encoding, callback)\n } while (i < buffered.length && !state.writing)\n if (i === buffered.length) {\n resetBuffer(state)\n } else if (i > 256) {\n buffered.splice(0, i)\n state.bufferedIndex = 0\n } else {\n state.bufferedIndex = i\n }\n }\n state.bufferProcessing = false\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n if (this._writev) {\n this._writev(\n [\n {\n chunk,\n encoding\n }\n ],\n cb\n )\n } else {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_write()')\n }\n}\nWritable.prototype._writev = null\nWritable.prototype.end = function (chunk, encoding, cb) {\n const state = this._writableState\n if (typeof chunk === 'function') {\n cb = chunk\n chunk = null\n encoding = null\n } else if (typeof encoding === 'function') {\n cb = encoding\n encoding = null\n }\n let err\n if (chunk !== null && chunk !== undefined) {\n const ret = _write(this, chunk, encoding)\n if (ret instanceof Error) {\n err = ret\n }\n }\n\n // .end() fully uncorks.\n if (state.corked) {\n state.corked = 1\n this.uncork()\n }\n if (err) {\n // Do nothing...\n } else if (!state.errored && !state.ending) {\n // This is forgiving in terms of unnecessary calls to end() and can hide\n // logic errors. However, usually such errors are harmless and causing a\n // hard error can be disproportionately destructive. It is not always\n // trivial for the user to determine whether end() needs to be called\n // or not.\n\n state.ending = true\n finishMaybe(this, state, true)\n state.ended = true\n } else if (state.finished) {\n err = new ERR_STREAM_ALREADY_FINISHED('end')\n } else if (state.destroyed) {\n err = new ERR_STREAM_DESTROYED('end')\n }\n if (typeof cb === 'function') {\n if (err || state.finished) {\n process.nextTick(cb, err)\n } else {\n state[kOnFinished].push(cb)\n }\n }\n return this\n}\nfunction needFinish(state) {\n return (\n state.ending &&\n !state.destroyed &&\n state.constructed &&\n state.length === 0 &&\n !state.errored &&\n state.buffered.length === 0 &&\n !state.finished &&\n !state.writing &&\n !state.errorEmitted &&\n !state.closeEmitted\n )\n}\nfunction callFinal(stream, state) {\n let called = false\n function onFinish(err) {\n if (called) {\n errorOrDestroy(stream, err !== null && err !== undefined ? err : ERR_MULTIPLE_CALLBACK())\n return\n }\n called = true\n state.pendingcb--\n if (err) {\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n onfinishCallbacks[i](err)\n }\n errorOrDestroy(stream, err, state.sync)\n } else if (needFinish(state)) {\n state.prefinished = true\n stream.emit('prefinish')\n // Backwards compat. Don't check state.sync here.\n // Some streams assume 'finish' will be emitted\n // asynchronously relative to _final callback.\n state.pendingcb++\n process.nextTick(finish, stream, state)\n }\n }\n state.sync = true\n state.pendingcb++\n try {\n stream._final(onFinish)\n } catch (err) {\n onFinish(err)\n }\n state.sync = false\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.finalCalled = true\n callFinal(stream, state)\n } else {\n state.prefinished = true\n stream.emit('prefinish')\n }\n }\n}\nfunction finishMaybe(stream, state, sync) {\n if (needFinish(state)) {\n prefinish(stream, state)\n if (state.pendingcb === 0) {\n if (sync) {\n state.pendingcb++\n process.nextTick(\n (stream, state) => {\n if (needFinish(state)) {\n finish(stream, state)\n } else {\n state.pendingcb--\n }\n },\n stream,\n state\n )\n } else if (needFinish(state)) {\n state.pendingcb++\n finish(stream, state)\n }\n }\n }\n}\nfunction finish(stream, state) {\n state.pendingcb--\n state.finished = true\n const onfinishCallbacks = state[kOnFinished].splice(0)\n for (let i = 0; i < onfinishCallbacks.length; i++) {\n onfinishCallbacks[i]()\n }\n stream.emit('finish')\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well.\n const rState = stream._readableState\n const autoDestroy =\n !rState ||\n (rState.autoDestroy &&\n // We don't expect the readable to ever 'end'\n // if readable is explicitly set to false.\n (rState.endEmitted || rState.readable === false))\n if (autoDestroy) {\n stream.destroy()\n }\n }\n}\nObjectDefineProperties(Writable.prototype, {\n closed: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.closed : false\n }\n },\n destroyed: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.destroyed : false\n },\n set(value) {\n // Backward compatibility, the user is explicitly managing destroyed.\n if (this._writableState) {\n this._writableState.destroyed = value\n }\n }\n },\n writable: {\n __proto__: null,\n get() {\n const w = this._writableState\n // w.writable === false means that this is part of a Duplex stream\n // where the writable side was disabled upon construction.\n // Compat. The user might manually disable writable side through\n // deprecated setter.\n return !!w && w.writable !== false && !w.destroyed && !w.errored && !w.ending && !w.ended\n },\n set(val) {\n // Backwards compatible.\n if (this._writableState) {\n this._writableState.writable = !!val\n }\n }\n },\n writableFinished: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.finished : false\n }\n },\n writableObjectMode: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.objectMode : false\n }\n },\n writableBuffer: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.getBuffer()\n }\n },\n writableEnded: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.ending : false\n }\n },\n writableNeedDrain: {\n __proto__: null,\n get() {\n const wState = this._writableState\n if (!wState) return false\n return !wState.destroyed && !wState.ending && wState.needDrain\n }\n },\n writableHighWaterMark: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.highWaterMark\n }\n },\n writableCorked: {\n __proto__: null,\n get() {\n return this._writableState ? this._writableState.corked : 0\n }\n },\n writableLength: {\n __proto__: null,\n get() {\n return this._writableState && this._writableState.length\n }\n },\n errored: {\n __proto__: null,\n enumerable: false,\n get() {\n return this._writableState ? this._writableState.errored : null\n }\n },\n writableAborted: {\n __proto__: null,\n enumerable: false,\n get: function () {\n return !!(\n this._writableState.writable !== false &&\n (this._writableState.destroyed || this._writableState.errored) &&\n !this._writableState.finished\n )\n }\n }\n})\nconst destroy = destroyImpl.destroy\nWritable.prototype.destroy = function (err, cb) {\n const state = this._writableState\n\n // Invoke pending callbacks.\n if (!state.destroyed && (state.bufferedIndex < state.buffered.length || state[kOnFinished].length)) {\n process.nextTick(errorBuffer, state)\n }\n destroy.call(this, err, cb)\n return this\n}\nWritable.prototype._undestroy = destroyImpl.undestroy\nWritable.prototype._destroy = function (err, cb) {\n cb(err)\n}\nWritable.prototype[EE.captureRejectionSymbol] = function (err) {\n this.destroy(err)\n}\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nWritable.fromWeb = function (writableStream, options) {\n return lazyWebStreams().newStreamWritableFromWritableStream(writableStream, options)\n}\nWritable.toWeb = function (streamWritable) {\n return lazyWebStreams().newWritableStreamFromStreamWritable(streamWritable)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n\n;('use strict')\nconst bufferModule = require('buffer')\nconst {\n isReadable,\n isWritable,\n isIterable,\n isNodeStream,\n isReadableNodeStream,\n isWritableNodeStream,\n isDuplexNodeStream,\n isReadableStream,\n isWritableStream\n} = require('./utils')\nconst eos = require('./end-of-stream')\nconst {\n AbortError,\n codes: { ERR_INVALID_ARG_TYPE, ERR_INVALID_RETURN_VALUE }\n} = require('../../ours/errors')\nconst { destroyer } = require('./destroy')\nconst Duplex = require('./duplex')\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nconst { createDeferredPromise } = require('../../ours/util')\nconst from = require('./from')\nconst Blob = globalThis.Blob || bufferModule.Blob\nconst isBlob =\n typeof Blob !== 'undefined'\n ? function isBlob(b) {\n return b instanceof Blob\n }\n : function isBlob(b) {\n return false\n }\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst { FunctionPrototypeCall } = require('../../ours/primordials')\n\n// This is needed for pre node 17.\nclass Duplexify extends Duplex {\n constructor(options) {\n super(options)\n\n // https://github.com/nodejs/node/pull/34385\n\n if ((options === null || options === undefined ? undefined : options.readable) === false) {\n this._readableState.readable = false\n this._readableState.ended = true\n this._readableState.endEmitted = true\n }\n if ((options === null || options === undefined ? undefined : options.writable) === false) {\n this._writableState.writable = false\n this._writableState.ending = true\n this._writableState.ended = true\n this._writableState.finished = true\n }\n }\n}\nmodule.exports = function duplexify(body, name) {\n if (isDuplexNodeStream(body)) {\n return body\n }\n if (isReadableNodeStream(body)) {\n return _duplexify({\n readable: body\n })\n }\n if (isWritableNodeStream(body)) {\n return _duplexify({\n writable: body\n })\n }\n if (isNodeStream(body)) {\n return _duplexify({\n writable: false,\n readable: false\n })\n }\n if (isReadableStream(body)) {\n return _duplexify({\n readable: Readable.fromWeb(body)\n })\n }\n if (isWritableStream(body)) {\n return _duplexify({\n writable: Writable.fromWeb(body)\n })\n }\n if (typeof body === 'function') {\n const { value, write, final, destroy } = fromAsyncGen(body)\n if (isIterable(value)) {\n return from(Duplexify, value, {\n // TODO (ronag): highWaterMark?\n objectMode: true,\n write,\n final,\n destroy\n })\n }\n const then = value === null || value === undefined ? undefined : value.then\n if (typeof then === 'function') {\n let d\n const promise = FunctionPrototypeCall(\n then,\n value,\n (val) => {\n if (val != null) {\n throw new ERR_INVALID_RETURN_VALUE('nully', 'body', val)\n }\n },\n (err) => {\n destroyer(d, err)\n }\n )\n return (d = new Duplexify({\n // TODO (ronag): highWaterMark?\n objectMode: true,\n readable: false,\n write,\n final(cb) {\n final(async () => {\n try {\n await promise\n process.nextTick(cb, null)\n } catch (err) {\n process.nextTick(cb, err)\n }\n })\n },\n destroy\n }))\n }\n throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or AsyncFunction', name, value)\n }\n if (isBlob(body)) {\n return duplexify(body.arrayBuffer())\n }\n if (isIterable(body)) {\n return from(Duplexify, body, {\n // TODO (ronag): highWaterMark?\n objectMode: true,\n writable: false\n })\n }\n if (\n isReadableStream(body === null || body === undefined ? undefined : body.readable) &&\n isWritableStream(body === null || body === undefined ? undefined : body.writable)\n ) {\n return Duplexify.fromWeb(body)\n }\n if (\n typeof (body === null || body === undefined ? undefined : body.writable) === 'object' ||\n typeof (body === null || body === undefined ? undefined : body.readable) === 'object'\n ) {\n const readable =\n body !== null && body !== undefined && body.readable\n ? isReadableNodeStream(body === null || body === undefined ? undefined : body.readable)\n ? body === null || body === undefined\n ? undefined\n : body.readable\n : duplexify(body.readable)\n : undefined\n const writable =\n body !== null && body !== undefined && body.writable\n ? isWritableNodeStream(body === null || body === undefined ? undefined : body.writable)\n ? body === null || body === undefined\n ? undefined\n : body.writable\n : duplexify(body.writable)\n : undefined\n return _duplexify({\n readable,\n writable\n })\n }\n const then = body === null || body === undefined ? undefined : body.then\n if (typeof then === 'function') {\n let d\n FunctionPrototypeCall(\n then,\n body,\n (val) => {\n if (val != null) {\n d.push(val)\n }\n d.push(null)\n },\n (err) => {\n destroyer(d, err)\n }\n )\n return (d = new Duplexify({\n objectMode: true,\n writable: false,\n read() {}\n }))\n }\n throw new ERR_INVALID_ARG_TYPE(\n name,\n [\n 'Blob',\n 'ReadableStream',\n 'WritableStream',\n 'Stream',\n 'Iterable',\n 'AsyncIterable',\n 'Function',\n '{ readable, writable } pair',\n 'Promise'\n ],\n body\n )\n}\nfunction fromAsyncGen(fn) {\n let { promise, resolve } = createDeferredPromise()\n const ac = new AbortController()\n const signal = ac.signal\n const value = fn(\n (async function* () {\n while (true) {\n const _promise = promise\n promise = null\n const { chunk, done, cb } = await _promise\n process.nextTick(cb)\n if (done) return\n if (signal.aborted)\n throw new AbortError(undefined, {\n cause: signal.reason\n })\n ;({ promise, resolve } = createDeferredPromise())\n yield chunk\n }\n })(),\n {\n signal\n }\n )\n return {\n value,\n write(chunk, encoding, cb) {\n const _resolve = resolve\n resolve = null\n _resolve({\n chunk,\n done: false,\n cb\n })\n },\n final(cb) {\n const _resolve = resolve\n resolve = null\n _resolve({\n done: true,\n cb\n })\n },\n destroy(err, cb) {\n ac.abort()\n cb(err)\n }\n }\n}\nfunction _duplexify(pair) {\n const r = pair.readable && typeof pair.readable.read !== 'function' ? Readable.wrap(pair.readable) : pair.readable\n const w = pair.writable\n let readable = !!isReadable(r)\n let writable = !!isWritable(w)\n let ondrain\n let onfinish\n let onreadable\n let onclose\n let d\n function onfinished(err) {\n const cb = onclose\n onclose = null\n if (cb) {\n cb(err)\n } else if (err) {\n d.destroy(err)\n }\n }\n\n // TODO(ronag): Avoid double buffering.\n // Implement Writable/Readable/Duplex traits.\n // See, https://github.com/nodejs/node/pull/33515.\n d = new Duplexify({\n // TODO (ronag): highWaterMark?\n readableObjectMode: !!(r !== null && r !== undefined && r.readableObjectMode),\n writableObjectMode: !!(w !== null && w !== undefined && w.writableObjectMode),\n readable,\n writable\n })\n if (writable) {\n eos(w, (err) => {\n writable = false\n if (err) {\n destroyer(r, err)\n }\n onfinished(err)\n })\n d._write = function (chunk, encoding, callback) {\n if (w.write(chunk, encoding)) {\n callback()\n } else {\n ondrain = callback\n }\n }\n d._final = function (callback) {\n w.end()\n onfinish = callback\n }\n w.on('drain', function () {\n if (ondrain) {\n const cb = ondrain\n ondrain = null\n cb()\n }\n })\n w.on('finish', function () {\n if (onfinish) {\n const cb = onfinish\n onfinish = null\n cb()\n }\n })\n }\n if (readable) {\n eos(r, (err) => {\n readable = false\n if (err) {\n destroyer(r, err)\n }\n onfinished(err)\n })\n r.on('readable', function () {\n if (onreadable) {\n const cb = onreadable\n onreadable = null\n cb()\n }\n })\n r.on('end', function () {\n d.push(null)\n })\n d._read = function () {\n while (true) {\n const buf = r.read()\n if (buf === null) {\n onreadable = d._read\n return\n }\n if (!d.push(buf)) {\n return\n }\n }\n }\n }\n d._destroy = function (err, callback) {\n if (!err && onclose !== null) {\n err = new AbortError()\n }\n onreadable = null\n ondrain = null\n onfinish = null\n if (onclose === null) {\n callback(err)\n } else {\n onclose = callback\n destroyer(w, err)\n destroyer(r, err)\n }\n }\n return d\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototype inheritance, this class\n// prototypically inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict'\n\nconst {\n ObjectDefineProperties,\n ObjectGetOwnPropertyDescriptor,\n ObjectKeys,\n ObjectSetPrototypeOf\n} = require('../../ours/primordials')\nmodule.exports = Duplex\nconst Readable = require('./readable')\nconst Writable = require('./writable')\nObjectSetPrototypeOf(Duplex.prototype, Readable.prototype)\nObjectSetPrototypeOf(Duplex, Readable)\n{\n const keys = ObjectKeys(Writable.prototype)\n // Allow the keys array to be GC'ed.\n for (let i = 0; i < keys.length; i++) {\n const method = keys[i]\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options)\n Readable.call(this, options)\n Writable.call(this, options)\n if (options) {\n this.allowHalfOpen = options.allowHalfOpen !== false\n if (options.readable === false) {\n this._readableState.readable = false\n this._readableState.ended = true\n this._readableState.endEmitted = true\n }\n if (options.writable === false) {\n this._writableState.writable = false\n this._writableState.ending = true\n this._writableState.ended = true\n this._writableState.finished = true\n }\n } else {\n this.allowHalfOpen = true\n }\n}\nObjectDefineProperties(Duplex.prototype, {\n writable: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writable')\n },\n writableHighWaterMark: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableHighWaterMark')\n },\n writableObjectMode: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableObjectMode')\n },\n writableBuffer: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableBuffer')\n },\n writableLength: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableLength')\n },\n writableFinished: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableFinished')\n },\n writableCorked: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableCorked')\n },\n writableEnded: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableEnded')\n },\n writableNeedDrain: {\n __proto__: null,\n ...ObjectGetOwnPropertyDescriptor(Writable.prototype, 'writableNeedDrain')\n },\n destroyed: {\n __proto__: null,\n get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false\n }\n return this._readableState.destroyed && this._writableState.destroyed\n },\n set(value) {\n // Backward compatibility, the user is explicitly\n // managing destroyed.\n if (this._readableState && this._writableState) {\n this._readableState.destroyed = value\n this._writableState.destroyed = value\n }\n }\n }\n})\nlet webStreamsAdapters\n\n// Lazy to avoid circular references\nfunction lazyWebStreams() {\n if (webStreamsAdapters === undefined) webStreamsAdapters = {}\n return webStreamsAdapters\n}\nDuplex.fromWeb = function (pair, options) {\n return lazyWebStreams().newStreamDuplexFromReadableWritablePair(pair, options)\n}\nDuplex.toWeb = function (duplex) {\n return lazyWebStreams().newReadableWritablePairFromDuplex(duplex)\n}\nlet duplexify\nDuplex.from = function (body) {\n if (!duplexify) {\n duplexify = require('./duplexify')\n }\n return duplexify(body, 'body')\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf, Symbol } = require('../../ours/primordials')\nmodule.exports = Transform\nconst { ERR_METHOD_NOT_IMPLEMENTED } = require('../../ours/errors').codes\nconst Duplex = require('./duplex')\nconst { getHighWaterMark } = require('./state')\nObjectSetPrototypeOf(Transform.prototype, Duplex.prototype)\nObjectSetPrototypeOf(Transform, Duplex)\nconst kCallback = Symbol('kCallback')\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options)\n\n // TODO (ronag): This should preferably always be\n // applied but would be semver-major. Or even better;\n // make Transform a Readable with the Writable interface.\n const readableHighWaterMark = options ? getHighWaterMark(this, options, 'readableHighWaterMark', true) : null\n if (readableHighWaterMark === 0) {\n // A Duplex will buffer both on the writable and readable side while\n // a Transform just wants to buffer hwm number of elements. To avoid\n // buffering twice we disable buffering on the writable side.\n options = {\n ...options,\n highWaterMark: null,\n readableHighWaterMark,\n // TODO (ronag): 0 is not optimal since we have\n // a \"bug\" where we check needDrain before calling _write and not after.\n // Refs: https://github.com/nodejs/node/pull/32887\n // Refs: https://github.com/nodejs/node/pull/35941\n writableHighWaterMark: options.writableHighWaterMark || 0\n }\n }\n Duplex.call(this, options)\n\n // We have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false\n this[kCallback] = null\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform\n if (typeof options.flush === 'function') this._flush = options.flush\n }\n\n // When the writable side finishes, then flush out anything remaining.\n // Backwards compat. Some Transform streams incorrectly implement _final\n // instead of or in addition to _flush. By using 'prefinish' instead of\n // implementing _final we continue supporting this unfortunate use case.\n this.on('prefinish', prefinish)\n}\nfunction final(cb) {\n if (typeof this._flush === 'function' && !this.destroyed) {\n this._flush((er, data) => {\n if (er) {\n if (cb) {\n cb(er)\n } else {\n this.destroy(er)\n }\n return\n }\n if (data != null) {\n this.push(data)\n }\n this.push(null)\n if (cb) {\n cb()\n }\n })\n } else {\n this.push(null)\n if (cb) {\n cb()\n }\n }\n}\nfunction prefinish() {\n if (this._final !== final) {\n final.call(this)\n }\n}\nTransform.prototype._final = final\nTransform.prototype._transform = function (chunk, encoding, callback) {\n throw new ERR_METHOD_NOT_IMPLEMENTED('_transform()')\n}\nTransform.prototype._write = function (chunk, encoding, callback) {\n const rState = this._readableState\n const wState = this._writableState\n const length = rState.length\n this._transform(chunk, encoding, (err, val) => {\n if (err) {\n callback(err)\n return\n }\n if (val != null) {\n this.push(val)\n }\n if (\n wState.ended ||\n // Backwards compat.\n length === rState.length ||\n // Backwards compat.\n rState.length < rState.highWaterMark\n ) {\n callback()\n } else {\n this[kCallback] = callback\n }\n })\n}\nTransform.prototype._read = function () {\n if (this[kCallback]) {\n const callback = this[kCallback]\n this[kCallback] = null\n callback()\n }\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict'\n\nconst { ObjectSetPrototypeOf } = require('../../ours/primordials')\nmodule.exports = PassThrough\nconst Transform = require('./transform')\nObjectSetPrototypeOf(PassThrough.prototype, Transform.prototype)\nObjectSetPrototypeOf(PassThrough, Transform)\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options)\n Transform.call(this, options)\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk)\n}\n", "/* replacement start */\n\nconst process = require('process/')\n\n/* replacement end */\n// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n;('use strict')\nconst { ArrayIsArray, Promise, SymbolAsyncIterator, SymbolDispose } = require('../../ours/primordials')\nconst eos = require('./end-of-stream')\nconst { once } = require('../../ours/util')\nconst destroyImpl = require('./destroy')\nconst Duplex = require('./duplex')\nconst {\n aggregateTwoErrors,\n codes: {\n ERR_INVALID_ARG_TYPE,\n ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED,\n ERR_STREAM_PREMATURE_CLOSE\n },\n AbortError\n} = require('../../ours/errors')\nconst { validateFunction, validateAbortSignal } = require('../validators')\nconst {\n isIterable,\n isReadable,\n isReadableNodeStream,\n isNodeStream,\n isTransformStream,\n isWebStream,\n isReadableStream,\n isReadableFinished\n} = require('./utils')\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nlet PassThrough\nlet Readable\nlet addAbortListener\nfunction destroyer(stream, reading, writing) {\n let finished = false\n stream.on('close', () => {\n finished = true\n })\n const cleanup = eos(\n stream,\n {\n readable: reading,\n writable: writing\n },\n (err) => {\n finished = !err\n }\n )\n return {\n destroy: (err) => {\n if (finished) return\n finished = true\n destroyImpl.destroyer(stream, err || new ERR_STREAM_DESTROYED('pipe'))\n },\n cleanup\n }\n}\nfunction popCallback(streams) {\n // Streams should never be an empty array. It should always contain at least\n // a single stream. Therefore optimize for the average case instead of\n // checking for length === 0 as well.\n validateFunction(streams[streams.length - 1], 'streams[stream.length - 1]')\n return streams.pop()\n}\nfunction makeAsyncIterable(val) {\n if (isIterable(val)) {\n return val\n } else if (isReadableNodeStream(val)) {\n // Legacy streams are not Iterable.\n return fromReadable(val)\n }\n throw new ERR_INVALID_ARG_TYPE('val', ['Readable', 'Iterable', 'AsyncIterable'], val)\n}\nasync function* fromReadable(val) {\n if (!Readable) {\n Readable = require('./readable')\n }\n yield* Readable.prototype[SymbolAsyncIterator].call(val)\n}\nasync function pumpToNode(iterable, writable, finish, { end }) {\n let error\n let onresolve = null\n const resume = (err) => {\n if (err) {\n error = err\n }\n if (onresolve) {\n const callback = onresolve\n onresolve = null\n callback()\n }\n }\n const wait = () =>\n new Promise((resolve, reject) => {\n if (error) {\n reject(error)\n } else {\n onresolve = () => {\n if (error) {\n reject(error)\n } else {\n resolve()\n }\n }\n }\n })\n writable.on('drain', resume)\n const cleanup = eos(\n writable,\n {\n readable: false\n },\n resume\n )\n try {\n if (writable.writableNeedDrain) {\n await wait()\n }\n for await (const chunk of iterable) {\n if (!writable.write(chunk)) {\n await wait()\n }\n }\n if (end) {\n writable.end()\n await wait()\n }\n finish()\n } catch (err) {\n finish(error !== err ? aggregateTwoErrors(error, err) : err)\n } finally {\n cleanup()\n writable.off('drain', resume)\n }\n}\nasync function pumpToWeb(readable, writable, finish, { end }) {\n if (isTransformStream(writable)) {\n writable = writable.writable\n }\n // https://streams.spec.whatwg.org/#example-manual-write-with-backpressure\n const writer = writable.getWriter()\n try {\n for await (const chunk of readable) {\n await writer.ready\n writer.write(chunk).catch(() => {})\n }\n await writer.ready\n if (end) {\n await writer.close()\n }\n finish()\n } catch (err) {\n try {\n await writer.abort(err)\n finish(err)\n } catch (err) {\n finish(err)\n }\n }\n}\nfunction pipeline(...streams) {\n return pipelineImpl(streams, once(popCallback(streams)))\n}\nfunction pipelineImpl(streams, callback, opts) {\n if (streams.length === 1 && ArrayIsArray(streams[0])) {\n streams = streams[0]\n }\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams')\n }\n const ac = new AbortController()\n const signal = ac.signal\n const outerSignal = opts === null || opts === undefined ? undefined : opts.signal\n\n // Need to cleanup event listeners if last stream is readable\n // https://github.com/nodejs/node/issues/35452\n const lastStreamCleanup = []\n validateAbortSignal(outerSignal, 'options.signal')\n function abort() {\n finishImpl(new AbortError())\n }\n addAbortListener = addAbortListener || require('../../ours/util').addAbortListener\n let disposable\n if (outerSignal) {\n disposable = addAbortListener(outerSignal, abort)\n }\n let error\n let value\n const destroys = []\n let finishCount = 0\n function finish(err) {\n finishImpl(err, --finishCount === 0)\n }\n function finishImpl(err, final) {\n var _disposable\n if (err && (!error || error.code === 'ERR_STREAM_PREMATURE_CLOSE')) {\n error = err\n }\n if (!error && !final) {\n return\n }\n while (destroys.length) {\n destroys.shift()(error)\n }\n ;(_disposable = disposable) === null || _disposable === undefined ? undefined : _disposable[SymbolDispose]()\n ac.abort()\n if (final) {\n if (!error) {\n lastStreamCleanup.forEach((fn) => fn())\n }\n process.nextTick(callback, error, value)\n }\n }\n let ret\n for (let i = 0; i < streams.length; i++) {\n const stream = streams[i]\n const reading = i < streams.length - 1\n const writing = i > 0\n const end = reading || (opts === null || opts === undefined ? undefined : opts.end) !== false\n const isLastStream = i === streams.length - 1\n if (isNodeStream(stream)) {\n if (end) {\n const { destroy, cleanup } = destroyer(stream, reading, writing)\n destroys.push(destroy)\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n }\n\n // Catch stream errors that occur after pipe/pump has completed.\n function onError(err) {\n if (err && err.name !== 'AbortError' && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n finish(err)\n }\n }\n stream.on('error', onError)\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(() => {\n stream.removeListener('error', onError)\n })\n }\n }\n if (i === 0) {\n if (typeof stream === 'function') {\n ret = stream({\n signal\n })\n if (!isIterable(ret)) {\n throw new ERR_INVALID_RETURN_VALUE('Iterable, AsyncIterable or Stream', 'source', ret)\n }\n } else if (isIterable(stream) || isReadableNodeStream(stream) || isTransformStream(stream)) {\n ret = stream\n } else {\n ret = Duplex.from(stream)\n }\n } else if (typeof stream === 'function') {\n if (isTransformStream(ret)) {\n var _ret\n ret = makeAsyncIterable((_ret = ret) === null || _ret === undefined ? undefined : _ret.readable)\n } else {\n ret = makeAsyncIterable(ret)\n }\n ret = stream(ret, {\n signal\n })\n if (reading) {\n if (!isIterable(ret, true)) {\n throw new ERR_INVALID_RETURN_VALUE('AsyncIterable', `transform[${i - 1}]`, ret)\n }\n } else {\n var _ret2\n if (!PassThrough) {\n PassThrough = require('./passthrough')\n }\n\n // If the last argument to pipeline is not a stream\n // we must create a proxy stream so that pipeline(...)\n // always returns a stream which can be further\n // composed through `.pipe(stream)`.\n\n const pt = new PassThrough({\n objectMode: true\n })\n\n // Handle Promises/A+ spec, `then` could be a getter that throws on\n // second use.\n const then = (_ret2 = ret) === null || _ret2 === undefined ? undefined : _ret2.then\n if (typeof then === 'function') {\n finishCount++\n then.call(\n ret,\n (val) => {\n value = val\n if (val != null) {\n pt.write(val)\n }\n if (end) {\n pt.end()\n }\n process.nextTick(finish)\n },\n (err) => {\n pt.destroy(err)\n process.nextTick(finish, err)\n }\n )\n } else if (isIterable(ret, true)) {\n finishCount++\n pumpToNode(ret, pt, finish, {\n end\n })\n } else if (isReadableStream(ret) || isTransformStream(ret)) {\n const toRead = ret.readable || ret\n finishCount++\n pumpToNode(toRead, pt, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_RETURN_VALUE('AsyncIterable or Promise', 'destination', ret)\n }\n ret = pt\n const { destroy, cleanup } = destroyer(ret, false, true)\n destroys.push(destroy)\n if (isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n }\n } else if (isNodeStream(stream)) {\n if (isReadableNodeStream(ret)) {\n finishCount += 2\n const cleanup = pipe(ret, stream, finish, {\n end\n })\n if (isReadable(stream) && isLastStream) {\n lastStreamCleanup.push(cleanup)\n }\n } else if (isTransformStream(ret) || isReadableStream(ret)) {\n const toRead = ret.readable || ret\n finishCount++\n pumpToNode(toRead, stream, finish, {\n end\n })\n } else if (isIterable(ret)) {\n finishCount++\n pumpToNode(ret, stream, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_ARG_TYPE(\n 'val',\n ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n ret\n )\n }\n ret = stream\n } else if (isWebStream(stream)) {\n if (isReadableNodeStream(ret)) {\n finishCount++\n pumpToWeb(makeAsyncIterable(ret), stream, finish, {\n end\n })\n } else if (isReadableStream(ret) || isIterable(ret)) {\n finishCount++\n pumpToWeb(ret, stream, finish, {\n end\n })\n } else if (isTransformStream(ret)) {\n finishCount++\n pumpToWeb(ret.readable, stream, finish, {\n end\n })\n } else {\n throw new ERR_INVALID_ARG_TYPE(\n 'val',\n ['Readable', 'Iterable', 'AsyncIterable', 'ReadableStream', 'TransformStream'],\n ret\n )\n }\n ret = stream\n } else {\n ret = Duplex.from(stream)\n }\n }\n if (\n (signal !== null && signal !== undefined && signal.aborted) ||\n (outerSignal !== null && outerSignal !== undefined && outerSignal.aborted)\n ) {\n process.nextTick(abort)\n }\n return ret\n}\nfunction pipe(src, dst, finish, { end }) {\n let ended = false\n dst.on('close', () => {\n if (!ended) {\n // Finish if the destination closes before the source has completed.\n finish(new ERR_STREAM_PREMATURE_CLOSE())\n }\n })\n src.pipe(dst, {\n end: false\n }) // If end is true we already will have a listener to end dst.\n\n if (end) {\n // Compat. Before node v10.12.0 stdio used to throw an error so\n // pipe() did/does not end() stdio destinations.\n // Now they allow it but \"secretly\" don't close the underlying fd.\n\n function endFn() {\n ended = true\n dst.end()\n }\n if (isReadableFinished(src)) {\n // End the destination if the source has already ended.\n process.nextTick(endFn)\n } else {\n src.once('end', endFn)\n }\n } else {\n finish()\n }\n eos(\n src,\n {\n readable: true,\n writable: false\n },\n (err) => {\n const rState = src._readableState\n if (\n err &&\n err.code === 'ERR_STREAM_PREMATURE_CLOSE' &&\n rState &&\n rState.ended &&\n !rState.errored &&\n !rState.errorEmitted\n ) {\n // Some readable streams will emit 'close' before 'end'. However, since\n // this is on the readable side 'end' should still be emitted if the\n // stream has been ended and no error emitted. This should be allowed in\n // favor of backwards compatibility. Since the stream is piped to a\n // destination this should not result in any observable difference.\n // We don't need to check if this is a writable premature close since\n // eos will only fail with premature close on the reading side for\n // duplex streams.\n src.once('end', finish).once('error', finish)\n } else {\n finish(err)\n }\n }\n )\n return eos(\n dst,\n {\n readable: false,\n writable: true\n },\n finish\n )\n}\nmodule.exports = {\n pipelineImpl,\n pipeline\n}\n", "'use strict'\n\nconst { pipeline } = require('./pipeline')\nconst Duplex = require('./duplex')\nconst { destroyer } = require('./destroy')\nconst {\n isNodeStream,\n isReadable,\n isWritable,\n isWebStream,\n isTransformStream,\n isWritableStream,\n isReadableStream\n} = require('./utils')\nconst {\n AbortError,\n codes: { ERR_INVALID_ARG_VALUE, ERR_MISSING_ARGS }\n} = require('../../ours/errors')\nconst eos = require('./end-of-stream')\nmodule.exports = function compose(...streams) {\n if (streams.length === 0) {\n throw new ERR_MISSING_ARGS('streams')\n }\n if (streams.length === 1) {\n return Duplex.from(streams[0])\n }\n const orgStreams = [...streams]\n if (typeof streams[0] === 'function') {\n streams[0] = Duplex.from(streams[0])\n }\n if (typeof streams[streams.length - 1] === 'function') {\n const idx = streams.length - 1\n streams[idx] = Duplex.from(streams[idx])\n }\n for (let n = 0; n < streams.length; ++n) {\n if (!isNodeStream(streams[n]) && !isWebStream(streams[n])) {\n // TODO(ronag): Add checks for non streams.\n continue\n }\n if (\n n < streams.length - 1 &&\n !(isReadable(streams[n]) || isReadableStream(streams[n]) || isTransformStream(streams[n]))\n ) {\n throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be readable')\n }\n if (n > 0 && !(isWritable(streams[n]) || isWritableStream(streams[n]) || isTransformStream(streams[n]))) {\n throw new ERR_INVALID_ARG_VALUE(`streams[${n}]`, orgStreams[n], 'must be writable')\n }\n }\n let ondrain\n let onfinish\n let onreadable\n let onclose\n let d\n function onfinished(err) {\n const cb = onclose\n onclose = null\n if (cb) {\n cb(err)\n } else if (err) {\n d.destroy(err)\n } else if (!readable && !writable) {\n d.destroy()\n }\n }\n const head = streams[0]\n const tail = pipeline(streams, onfinished)\n const writable = !!(isWritable(head) || isWritableStream(head) || isTransformStream(head))\n const readable = !!(isReadable(tail) || isReadableStream(tail) || isTransformStream(tail))\n\n // TODO(ronag): Avoid double buffering.\n // Implement Writable/Readable/Duplex traits.\n // See, https://github.com/nodejs/node/pull/33515.\n d = new Duplex({\n // TODO (ronag): highWaterMark?\n writableObjectMode: !!(head !== null && head !== undefined && head.writableObjectMode),\n readableObjectMode: !!(tail !== null && tail !== undefined && tail.readableObjectMode),\n writable,\n readable\n })\n if (writable) {\n if (isNodeStream(head)) {\n d._write = function (chunk, encoding, callback) {\n if (head.write(chunk, encoding)) {\n callback()\n } else {\n ondrain = callback\n }\n }\n d._final = function (callback) {\n head.end()\n onfinish = callback\n }\n head.on('drain', function () {\n if (ondrain) {\n const cb = ondrain\n ondrain = null\n cb()\n }\n })\n } else if (isWebStream(head)) {\n const writable = isTransformStream(head) ? head.writable : head\n const writer = writable.getWriter()\n d._write = async function (chunk, encoding, callback) {\n try {\n await writer.ready\n writer.write(chunk).catch(() => {})\n callback()\n } catch (err) {\n callback(err)\n }\n }\n d._final = async function (callback) {\n try {\n await writer.ready\n writer.close().catch(() => {})\n onfinish = callback\n } catch (err) {\n callback(err)\n }\n }\n }\n const toRead = isTransformStream(tail) ? tail.readable : tail\n eos(toRead, () => {\n if (onfinish) {\n const cb = onfinish\n onfinish = null\n cb()\n }\n })\n }\n if (readable) {\n if (isNodeStream(tail)) {\n tail.on('readable', function () {\n if (onreadable) {\n const cb = onreadable\n onreadable = null\n cb()\n }\n })\n tail.on('end', function () {\n d.push(null)\n })\n d._read = function () {\n while (true) {\n const buf = tail.read()\n if (buf === null) {\n onreadable = d._read\n return\n }\n if (!d.push(buf)) {\n return\n }\n }\n }\n } else if (isWebStream(tail)) {\n const readable = isTransformStream(tail) ? tail.readable : tail\n const reader = readable.getReader()\n d._read = async function () {\n while (true) {\n try {\n const { value, done } = await reader.read()\n if (!d.push(value)) {\n return\n }\n if (done) {\n d.push(null)\n return\n }\n } catch {\n return\n }\n }\n }\n }\n }\n d._destroy = function (err, callback) {\n if (!err && onclose !== null) {\n err = new AbortError()\n }\n onreadable = null\n ondrain = null\n onfinish = null\n if (onclose === null) {\n callback(err)\n } else {\n onclose = callback\n if (isNodeStream(tail)) {\n destroyer(tail, err)\n }\n }\n }\n return d\n}\n", "'use strict'\n\nconst AbortController = globalThis.AbortController || require('abort-controller').AbortController\nconst {\n codes: { ERR_INVALID_ARG_VALUE, ERR_INVALID_ARG_TYPE, ERR_MISSING_ARGS, ERR_OUT_OF_RANGE },\n AbortError\n} = require('../../ours/errors')\nconst { validateAbortSignal, validateInteger, validateObject } = require('../validators')\nconst kWeakHandler = require('../../ours/primordials').Symbol('kWeak')\nconst kResistStopPropagation = require('../../ours/primordials').Symbol('kResistStopPropagation')\nconst { finished } = require('./end-of-stream')\nconst staticCompose = require('./compose')\nconst { addAbortSignalNoValidate } = require('./add-abort-signal')\nconst { isWritable, isNodeStream } = require('./utils')\nconst { deprecate } = require('../../ours/util')\nconst {\n ArrayPrototypePush,\n Boolean,\n MathFloor,\n Number,\n NumberIsNaN,\n Promise,\n PromiseReject,\n PromiseResolve,\n PromisePrototypeThen,\n Symbol\n} = require('../../ours/primordials')\nconst kEmpty = Symbol('kEmpty')\nconst kEof = Symbol('kEof')\nfunction compose(stream, options) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n if (isNodeStream(stream) && !isWritable(stream)) {\n throw new ERR_INVALID_ARG_VALUE('stream', stream, 'must be writable')\n }\n const composedStream = staticCompose(this, stream)\n if (options !== null && options !== undefined && options.signal) {\n // Not validating as we already validated before\n addAbortSignalNoValidate(options.signal, composedStream)\n }\n return composedStream\n}\nfunction map(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n let concurrency = 1\n if ((options === null || options === undefined ? undefined : options.concurrency) != null) {\n concurrency = MathFloor(options.concurrency)\n }\n let highWaterMark = concurrency - 1\n if ((options === null || options === undefined ? undefined : options.highWaterMark) != null) {\n highWaterMark = MathFloor(options.highWaterMark)\n }\n validateInteger(concurrency, 'options.concurrency', 1)\n validateInteger(highWaterMark, 'options.highWaterMark', 0)\n highWaterMark += concurrency\n return async function* map() {\n const signal = require('../../ours/util').AbortSignalAny(\n [options === null || options === undefined ? undefined : options.signal].filter(Boolean)\n )\n const stream = this\n const queue = []\n const signalOpt = {\n signal\n }\n let next\n let resume\n let done = false\n let cnt = 0\n function onCatch() {\n done = true\n afterItemProcessed()\n }\n function afterItemProcessed() {\n cnt -= 1\n maybeResume()\n }\n function maybeResume() {\n if (resume && !done && cnt < concurrency && queue.length < highWaterMark) {\n resume()\n resume = null\n }\n }\n async function pump() {\n try {\n for await (let val of stream) {\n if (done) {\n return\n }\n if (signal.aborted) {\n throw new AbortError()\n }\n try {\n val = fn(val, signalOpt)\n if (val === kEmpty) {\n continue\n }\n val = PromiseResolve(val)\n } catch (err) {\n val = PromiseReject(err)\n }\n cnt += 1\n PromisePrototypeThen(val, afterItemProcessed, onCatch)\n queue.push(val)\n if (next) {\n next()\n next = null\n }\n if (!done && (queue.length >= highWaterMark || cnt >= concurrency)) {\n await new Promise((resolve) => {\n resume = resolve\n })\n }\n }\n queue.push(kEof)\n } catch (err) {\n const val = PromiseReject(err)\n PromisePrototypeThen(val, afterItemProcessed, onCatch)\n queue.push(val)\n } finally {\n done = true\n if (next) {\n next()\n next = null\n }\n }\n }\n pump()\n try {\n while (true) {\n while (queue.length > 0) {\n const val = await queue[0]\n if (val === kEof) {\n return\n }\n if (signal.aborted) {\n throw new AbortError()\n }\n if (val !== kEmpty) {\n yield val\n }\n queue.shift()\n maybeResume()\n }\n await new Promise((resolve) => {\n next = resolve\n })\n }\n } finally {\n done = true\n if (resume) {\n resume()\n resume = null\n }\n }\n }.call(this)\n}\nfunction asIndexedPairs(options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n return async function* asIndexedPairs() {\n let index = 0\n for await (const val of this) {\n var _options$signal\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal = options.signal) !== null &&\n _options$signal !== undefined &&\n _options$signal.aborted\n ) {\n throw new AbortError({\n cause: options.signal.reason\n })\n }\n yield [index++, val]\n }\n }.call(this)\n}\nasync function some(fn, options = undefined) {\n for await (const unused of filter.call(this, fn, options)) {\n return true\n }\n return false\n}\nasync function every(fn, options = undefined) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n // https://en.wikipedia.org/wiki/De_Morgan%27s_laws\n return !(await some.call(\n this,\n async (...args) => {\n return !(await fn(...args))\n },\n options\n ))\n}\nasync function find(fn, options) {\n for await (const result of filter.call(this, fn, options)) {\n return result\n }\n return undefined\n}\nasync function forEach(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n async function forEachFn(value, options) {\n await fn(value, options)\n return kEmpty\n }\n // eslint-disable-next-line no-unused-vars\n for await (const unused of map.call(this, forEachFn, options));\n}\nfunction filter(fn, options) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', ['Function', 'AsyncFunction'], fn)\n }\n async function filterFn(value, options) {\n if (await fn(value, options)) {\n return value\n }\n return kEmpty\n }\n return map.call(this, filterFn, options)\n}\n\n// Specific to provide better error to reduce since the argument is only\n// missing if the stream has no items in it - but the code is still appropriate\nclass ReduceAwareErrMissingArgs extends ERR_MISSING_ARGS {\n constructor() {\n super('reduce')\n this.message = 'Reduce of an empty stream requires an initial value'\n }\n}\nasync function reduce(reducer, initialValue, options) {\n var _options$signal2\n if (typeof reducer !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('reducer', ['Function', 'AsyncFunction'], reducer)\n }\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n let hasInitialValue = arguments.length > 1\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal2 = options.signal) !== null &&\n _options$signal2 !== undefined &&\n _options$signal2.aborted\n ) {\n const err = new AbortError(undefined, {\n cause: options.signal.reason\n })\n this.once('error', () => {}) // The error is already propagated\n await finished(this.destroy(err))\n throw err\n }\n const ac = new AbortController()\n const signal = ac.signal\n if (options !== null && options !== undefined && options.signal) {\n const opts = {\n once: true,\n [kWeakHandler]: this,\n [kResistStopPropagation]: true\n }\n options.signal.addEventListener('abort', () => ac.abort(), opts)\n }\n let gotAnyItemFromStream = false\n try {\n for await (const value of this) {\n var _options$signal3\n gotAnyItemFromStream = true\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal3 = options.signal) !== null &&\n _options$signal3 !== undefined &&\n _options$signal3.aborted\n ) {\n throw new AbortError()\n }\n if (!hasInitialValue) {\n initialValue = value\n hasInitialValue = true\n } else {\n initialValue = await reducer(initialValue, value, {\n signal\n })\n }\n }\n if (!gotAnyItemFromStream && !hasInitialValue) {\n throw new ReduceAwareErrMissingArgs()\n }\n } finally {\n ac.abort()\n }\n return initialValue\n}\nasync function toArray(options) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n const result = []\n for await (const val of this) {\n var _options$signal4\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal4 = options.signal) !== null &&\n _options$signal4 !== undefined &&\n _options$signal4.aborted\n ) {\n throw new AbortError(undefined, {\n cause: options.signal.reason\n })\n }\n ArrayPrototypePush(result, val)\n }\n return result\n}\nfunction flatMap(fn, options) {\n const values = map.call(this, fn, options)\n return async function* flatMap() {\n for await (const val of values) {\n yield* val\n }\n }.call(this)\n}\nfunction toIntegerOrInfinity(number) {\n // We coerce here to align with the spec\n // https://github.com/tc39/proposal-iterator-helpers/issues/169\n number = Number(number)\n if (NumberIsNaN(number)) {\n return 0\n }\n if (number < 0) {\n throw new ERR_OUT_OF_RANGE('number', '>= 0', number)\n }\n return number\n}\nfunction drop(number, options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n number = toIntegerOrInfinity(number)\n return async function* drop() {\n var _options$signal5\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal5 = options.signal) !== null &&\n _options$signal5 !== undefined &&\n _options$signal5.aborted\n ) {\n throw new AbortError()\n }\n for await (const val of this) {\n var _options$signal6\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal6 = options.signal) !== null &&\n _options$signal6 !== undefined &&\n _options$signal6.aborted\n ) {\n throw new AbortError()\n }\n if (number-- <= 0) {\n yield val\n }\n }\n }.call(this)\n}\nfunction take(number, options = undefined) {\n if (options != null) {\n validateObject(options, 'options')\n }\n if ((options === null || options === undefined ? undefined : options.signal) != null) {\n validateAbortSignal(options.signal, 'options.signal')\n }\n number = toIntegerOrInfinity(number)\n return async function* take() {\n var _options$signal7\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal7 = options.signal) !== null &&\n _options$signal7 !== undefined &&\n _options$signal7.aborted\n ) {\n throw new AbortError()\n }\n for await (const val of this) {\n var _options$signal8\n if (\n options !== null &&\n options !== undefined &&\n (_options$signal8 = options.signal) !== null &&\n _options$signal8 !== undefined &&\n _options$signal8.aborted\n ) {\n throw new AbortError()\n }\n if (number-- > 0) {\n yield val\n }\n\n // Don't get another item from iterator in case we reached the end\n if (number <= 0) {\n return\n }\n }\n }.call(this)\n}\nmodule.exports.streamReturningOperators = {\n asIndexedPairs: deprecate(asIndexedPairs, 'readable.asIndexedPairs will be removed in a future version.'),\n drop,\n filter,\n flatMap,\n map,\n take,\n compose\n}\nmodule.exports.promiseReturningOperators = {\n every,\n forEach,\n reduce,\n toArray,\n some,\n find\n}\n", "'use strict'\n\nconst { ArrayPrototypePop, Promise } = require('../ours/primordials')\nconst { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')\nconst { pipelineImpl: pl } = require('../internal/streams/pipeline')\nconst { finished } = require('../internal/streams/end-of-stream')\nrequire('../../lib/stream.js')\nfunction pipeline(...streams) {\n return new Promise((resolve, reject) => {\n let signal\n let end\n const lastArg = streams[streams.length - 1]\n if (\n lastArg &&\n typeof lastArg === 'object' &&\n !isNodeStream(lastArg) &&\n !isIterable(lastArg) &&\n !isWebStream(lastArg)\n ) {\n const options = ArrayPrototypePop(streams)\n signal = options.signal\n end = options.end\n }\n pl(\n streams,\n (err, value) => {\n if (err) {\n reject(err)\n } else {\n resolve(value)\n }\n },\n {\n signal,\n end\n }\n )\n })\n}\nmodule.exports = {\n finished,\n pipeline\n}\n", "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict'\n\n/* replacement start */\n\nconst { Buffer } = require('buffer')\n\n/* replacement end */\n\nconst { ObjectDefineProperty, ObjectKeys, ReflectApply } = require('./ours/primordials')\nconst {\n promisify: { custom: customPromisify }\n} = require('./ours/util')\nconst { streamReturningOperators, promiseReturningOperators } = require('./internal/streams/operators')\nconst {\n codes: { ERR_ILLEGAL_CONSTRUCTOR }\n} = require('./ours/errors')\nconst compose = require('./internal/streams/compose')\nconst { setDefaultHighWaterMark, getDefaultHighWaterMark } = require('./internal/streams/state')\nconst { pipeline } = require('./internal/streams/pipeline')\nconst { destroyer } = require('./internal/streams/destroy')\nconst eos = require('./internal/streams/end-of-stream')\nconst internalBuffer = {}\nconst promises = require('./stream/promises')\nconst utils = require('./internal/streams/utils')\nconst Stream = (module.exports = require('./internal/streams/legacy').Stream)\nStream.isDestroyed = utils.isDestroyed\nStream.isDisturbed = utils.isDisturbed\nStream.isErrored = utils.isErrored\nStream.isReadable = utils.isReadable\nStream.isWritable = utils.isWritable\nStream.Readable = require('./internal/streams/readable')\nfor (const key of ObjectKeys(streamReturningOperators)) {\n const op = streamReturningOperators[key]\n function fn(...args) {\n if (new.target) {\n throw ERR_ILLEGAL_CONSTRUCTOR()\n }\n return Stream.Readable.from(ReflectApply(op, this, args))\n }\n ObjectDefineProperty(fn, 'name', {\n __proto__: null,\n value: op.name\n })\n ObjectDefineProperty(fn, 'length', {\n __proto__: null,\n value: op.length\n })\n ObjectDefineProperty(Stream.Readable.prototype, key, {\n __proto__: null,\n value: fn,\n enumerable: false,\n configurable: true,\n writable: true\n })\n}\nfor (const key of ObjectKeys(promiseReturningOperators)) {\n const op = promiseReturningOperators[key]\n function fn(...args) {\n if (new.target) {\n throw ERR_ILLEGAL_CONSTRUCTOR()\n }\n return ReflectApply(op, this, args)\n }\n ObjectDefineProperty(fn, 'name', {\n __proto__: null,\n value: op.name\n })\n ObjectDefineProperty(fn, 'length', {\n __proto__: null,\n value: op.length\n })\n ObjectDefineProperty(Stream.Readable.prototype, key, {\n __proto__: null,\n value: fn,\n enumerable: false,\n configurable: true,\n writable: true\n })\n}\nStream.Writable = require('./internal/streams/writable')\nStream.Duplex = require('./internal/streams/duplex')\nStream.Transform = require('./internal/streams/transform')\nStream.PassThrough = require('./internal/streams/passthrough')\nStream.pipeline = pipeline\nconst { addAbortSignal } = require('./internal/streams/add-abort-signal')\nStream.addAbortSignal = addAbortSignal\nStream.finished = eos\nStream.destroy = destroyer\nStream.compose = compose\nStream.setDefaultHighWaterMark = setDefaultHighWaterMark\nStream.getDefaultHighWaterMark = getDefaultHighWaterMark\nObjectDefineProperty(Stream, 'promises', {\n __proto__: null,\n configurable: true,\n enumerable: true,\n get() {\n return promises\n }\n})\nObjectDefineProperty(pipeline, customPromisify, {\n __proto__: null,\n enumerable: true,\n get() {\n return promises.pipeline\n }\n})\nObjectDefineProperty(eos, customPromisify, {\n __proto__: null,\n enumerable: true,\n get() {\n return promises.finished\n }\n})\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream\nStream._isUint8Array = function isUint8Array(value) {\n return value instanceof Uint8Array\n}\nStream._uint8ArrayToBuffer = function _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength)\n}\n", "'use strict'\n\nconst CustomStream = require('../stream')\nconst promises = require('../stream/promises')\nconst originalDestroy = CustomStream.Readable.destroy\nmodule.exports = CustomStream.Readable\n\n// Explicit export naming is needed for ESM\nmodule.exports._uint8ArrayToBuffer = CustomStream._uint8ArrayToBuffer\nmodule.exports._isUint8Array = CustomStream._isUint8Array\nmodule.exports.isDisturbed = CustomStream.isDisturbed\nmodule.exports.isErrored = CustomStream.isErrored\nmodule.exports.isReadable = CustomStream.isReadable\nmodule.exports.Readable = CustomStream.Readable\nmodule.exports.Writable = CustomStream.Writable\nmodule.exports.Duplex = CustomStream.Duplex\nmodule.exports.Transform = CustomStream.Transform\nmodule.exports.PassThrough = CustomStream.PassThrough\nmodule.exports.addAbortSignal = CustomStream.addAbortSignal\nmodule.exports.finished = CustomStream.finished\nmodule.exports.destroy = CustomStream.destroy\nmodule.exports.destroy = originalDestroy\nmodule.exports.pipeline = CustomStream.pipeline\nmodule.exports.compose = CustomStream.compose\nObject.defineProperty(CustomStream, 'promises', {\n configurable: true,\n enumerable: true,\n get() {\n return promises\n }\n})\nmodule.exports.Stream = CustomStream.Stream\n\n// Allow default importing\nmodule.exports.default = module.exports\n", "export default class Path {\n #value;\n\n constructor(path) {\n this.#value = Path.collapse(path);\n }\n\n get value() {\n return this.#value;\n }\n\n toString() {\n return this.#value;\n }\n\n get length() {\n return this.#value.length;\n }\n\n static collapse(path, cwd='') {\n if (path instanceof Path) {\n return path.value;\n }\n if (typeof path !== 'string' ) {\n throw new TypeError('path argument must be a string or an instance of Path');\n }\n if (cwd && !(cwd instanceof Path)) {\n cwd = new Path(cwd);\n }\n path = path.trim();\n if (path.length===0) {\n return cwd.value;\n }\n if (Path.isRelative(path)) {\n path = cwd+path;\n }\n let pathnames = Path.reduce(path, (result, entry) => {\n if (entry == '..' ) {\n result.pop();\n } else if (entry !== '.') {\n result.push(entry);\n }\n return result;\n }, []);\n let result = '/';\n if (pathnames.length) {\n result += pathnames.join('/');\n if (Path.isFolder(path)) {\n result += '/';\n }\n }\n return ''+result;\n }\n\n static isAbsolute(path) {\n if (path instanceof Path) {\n return true;\n }\n return path.length && path[0]==='/';\n }\n\n static isRelative(path) {\n return !Path.isAbsolute(path); \n }\n\n static isFolder(path) {\n if (path instanceof Path) {\n path = path.value;\n }\n return path.length && path[path.length-1] == '/';\n }\n\n static isPath(path) {\n if (path instanceof Path) {\n return true;\n }\n if (typeof path !== 'string') {\n return false;\n }\n path = path.trim();\n let u = new URL(path, document.location);\n return u.pathname == path;\n }\n\n static reduce(path, reducer, initial) {\n if (path instanceof Path) {\n path = path.value;\n }\n return path.split('/').filter(Boolean).reduce(reducer, initial);\n }\n\n static map(path, callback) {\n if (path instanceof Path) {\n path = path.value;\n }\n return path.split('/').filter(Boolean).map(callback);\n }\n\n static parent(path) {\n if (path instanceof Path) {\n path = path.value;\n }\n path = path.split('/').filter(Boolean);\n path.pop();\n let result = '/';\n if (path.length) {\n result += path.join('/')+'/';\n }\n return result;\n }\n\n static filename(path) {\n if (path instanceof Path) {\n path = path.value;\n }\n return path.split('/').filter(Boolean).pop();\n }\n \n static head(path) {\n if (path instanceof Path) {\n path = path.value;\n }\n return path.split('/').filter(Boolean).shift();\n }\n \n static tail(path) {\n if (path instanceof Path) {\n path = path.value;\n }\n path = path.split('/').filter(Boolean)\n path.shift();\n let result = '/';\n if (path.length) {\n result += path.join('/')+'/';\n }\n return result;\n }\n\n}", "import Path from './Path.mjs';\n\nexport default class FileSystem {\n\t\n\t#adapter;\n\t#path = '/';\n\n\tconstructor(adapter) {\n\t\tthis.#adapter = adapter\n\t\tthis.#path = this.#adapter.path;\n\t}\n\n\tget path() {\n\t\treturn this.#path;\n\t}\n\n\tcd(path) {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\treturn new FileSystem(this.#adapter.cd(path));\n\t}\n\n\tasync read(path, reader = null) {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\tif (typeof reader === 'function') {\n\t\t\tif (!this.#adapter.supportsStreamingRead()) {\n\t\t\t\tthrow new Error('Adapter '+this.#adapter.name+' does not support streaming reading.');\n\t\t\t}\n\t\t\treturn this.#adapter.readStream(path, reader);\n\t\t} else {\n\t\t\treturn this.#adapter.read(path);\n\t\t}\n\t}\n\n\tasync write(path, contents, metadata = null) {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\tif (!this.#adapter.supportsWrite()) {\n\t\t\tthrow new Error('Adapter '+this.#adapter.name+' is read only.');\n\t\t}\n\t\tif (typeof contents === 'function') {\n\t\t\tif (!this.#adapter.supportsStreamingWrite()) {\n\t\t\t\tthrow new Error('Adapter '+this.#adapter.name+' does not support streaming writing.');\n\t\t\t}\n\t\t\treturn this.#adapter.writeStream(path, contents, metadata);\n\t\t} else if (typeof contents === 'string') {\n\t\t\treturn this.#adapter.write(path, contents, metadata);\n\t\t} else {\n\t\t\tthrow new TypeError('Cannot write contents of type '+(typeof contents));\n\t\t}\n\t}\n\n\tasync delete(path) {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\treturn this.#adapter.delete(path);\n\t}\n\n\tasync exists(path) {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\treturn this.#adapter.exists(path);\n\t}\n\n\tasync list(path='') {\n\t\tif (!(path instanceof Path)) {\n\t\t\tpath = new Path(Path.collapse(path, this.#path));\n\t\t}\n\t\treturn this.#adapter.list(path);\n\t}\n}\n\n", "/**\n * base URL used to link to more information about an error message\n */\nconst metroURL = 'https://metro.muze.nl/details/'\n\n/**\n * Symbols:\n * - isProxy: used to test if an object is a metro Proxy to another object\n * - source: used to return the actual source (target) of a metro Proxy\n */\nif (!Symbol.metroProxy) {\n\tSymbol.metroProxy = Symbol('isProxy')\n}\nif (!Symbol.metroSource) {\n\tSymbol.metroSource = Symbol('source')\n}\n\n/**\n * Metro HTTP Client with middleware support\n * @method get\n * @method post\n * @method put\n * @method delete\n * @method patch\n * @method head\n * @method options\n * @method query\n * @method fetch\n */\nexport class Client\n{\n\tclientOptions = {\n\t\turl: typeof window != 'undefined' ? url(window.location) : url('https://localhost'),\n\t\tverbs: ['get','post','put','delete','patch','head','options','query']\n\t}\n\n\tstatic tracers = {}\n\n\t/**\n\t * @typedef {Object} ClientOptions\n\t * @property {Array} middlewares - list of middleware functions\n\t * @property {string|URL} url - default url of the client\n\t * @property {[string]} verbs - a list of verb methods to expose, e.g. ['get','post']\n\t * \n\t * Constructs a new metro client. Can have any number of params.\n\t * @params {ClientOptions|URL|Function|Client}\n\t * @returns {Client} - A metro client object with given or default verb methods\n\t */\n\tconstructor(...options)\n\t{\n\t\tfor (let option of options) {\n\t\t\tif (typeof option == 'string' || option instanceof String) {\n\t\t\t\tthis.clientOptions.url = url(this.clientOptions.url.href, option)\n\t\t\t} else if (option instanceof Client) {\n\t\t\t\tObject.assign(this.clientOptions, option.clientOptions)\n\t\t\t} else if (option instanceof Function) {\n\t\t\t\tthis.#addMiddlewares([option])\n\t\t\t} else if (option && typeof option == 'object') {\n\t\t\t\tfor (let param in option) {\n\t\t\t\t\tif (param == 'middlewares') {\n\t\t\t\t\t\tthis.#addMiddlewares(option[param])\n\t\t\t\t\t} else if (param == 'url') {\n\t\t\t\t\t\tthis.clientOptions.url = url(this.clientOptions.url.href, option[param])\n\t\t\t\t\t} else if (typeof option[param] == 'function') {\n\t\t\t\t\t\tthis.clientOptions[param] = option[param](this.clientOptions[param], this.clientOptions)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.clientOptions[param] = option[param]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const verb of this.clientOptions.verbs) {\n\t\t\tthis[verb] = async function(...options) {\n\t\t\t\treturn this.fetch(request(\n\t\t\t\t\tthis.clientOptions,\n\t\t\t\t\t...options,\n\t\t\t\t\t{method: verb.toUpperCase()}\n\t\t\t\t))\n\t\t\t}\n\t\t}\n\t\t//NOTE: intentionally not Object.freeze()-ing this, so that metro.api can extend this class\n\t}\n\n\t#addMiddlewares(middlewares)\n\t{\n\t\tif (typeof middlewares == 'function') {\n\t\t\tmiddlewares = [ middlewares ]\n\t\t}\n\t\tlet index = middlewares.findIndex(m => typeof m != 'function')\n\t\tif (index>=0) {\n\t\t\tthrow metroError('metro.client: middlewares must be a function or an array of functions '\n\t\t\t\t+metroURL+'client/invalid-middlewares/', middlewares[index])\n\t\t}\n\t\tif (!Array.isArray(this.clientOptions.middlewares)) {\n\t\t\tthis.clientOptions.middlewares = []\n\t\t}\n\t\tthis.clientOptions.middlewares = this.clientOptions.middlewares.concat(middlewares)\n\t}\n\n\t/**\n\t * Mimics the standard browser fetch method, but uses any middleware installed through\n\t * the constructor.\n\t * @param {Request|string|Object} - Required. The URL or Request object, accepts all types that are accepted by metro.request\n\t * @param {Object} - Optional. Any object that is accepted by metro.request\n\t * @return {Promise<Response|*>} - The metro.response to this request, or any other result as changed by any included middleware.\n\t */\n\tfetch(req, options)\n\t{\n\t\treq = request(req, options)\n\t\tif (!req.url) {\n\t\t\tthrow metroError('metro.client.'+req.method.toLowerCase()+': Missing url parameter '+metroURL+'client/fetch-missing-url/', req)\n\t\t}\n\t\tif (!options) {\n\t\t\toptions = {}\n\t\t}\n\t\tif (!(typeof options === 'object') \n\t\t\t|| options instanceof String) \n\t\t{\n\t\t\tthrow metroError('metro.client.fetch: Invalid options parameter '+metroURL+'client/fetch-invalid-options/', options)\n\t\t}\n\n\t\tconst metrofetch = async function browserFetch(req)\n\t\t{\n\t\t\tif (req[Symbol.metroProxy]) {\n\t\t\t\treq = req[Symbol.metroSource]\n\t\t\t}\n\t\t\tconst res = await fetch(req)\n\t\t\treturn response(res)\n\t\t}\n\t\t\n\t\tlet middlewares = [metrofetch].concat(this.clientOptions?.middlewares?.slice() || [])\n\t\toptions = Object.assign({}, this.clientOptions, options)\n\t\t//@TODO: do this once in constructor?\n\t\tlet next\n\t\tfor (let middleware of middlewares) {\n\t\t\tnext = (function(next, middleware) {\n\t\t\t\treturn async function(req) {\n\t\t\t\t\tlet res\n\t\t\t\t\tlet tracers = Object.values(Client.tracers)\n\t\t\t\t\tfor(let tracer of tracers) {\n\t\t\t\t\t\tif (tracer.request) {\n\t\t\t\t\t\t\ttracer.request.call(tracer, req, middleware)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tres = await middleware(req, next)\n\t\t\t\t\tfor(let tracer of tracers) {\n\t\t\t\t\t\tif (tracer.response) {\n\t\t\t\t\t\t\ttracer.response.call(tracer, res, middleware)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn res\n\t\t\t\t}\t\t\t\t\t\t\t\t\n\t\t\t})(next, middleware)\n\t\t}\n\t\treturn next(req)\n\t}\n\n\twith(...options) {\n\t\treturn new Client(deepClone(this.clientOptions), ...options)\n\t}\n\n\tget location() {\n\t\treturn this.clientOptions.url\n\t}\n\n}\n\n/**\n * Returns a new metro Client object.\n * @param {...ClientOptions|string|URL}\n * @return Client\n */\nexport function client(...options)\n{\n\treturn new Client(...deepClone(options))\n}\n\n/*\n//FIXME: is this needed?\nfunction appendHeaders(r, headers)\n{\n\tif (!Array.isArray(headers)) {\n\t\theaders = [headers]\n\t}\n\theaders.forEach((header) => {\n\t\tif (typeof header == 'function') {\n\t\t\tlet result = header(r.headers, r)\n\t\t\tif (result) {\n\t\t\t\tif (!Array.isArray(result)) {\n\t\t\t\t\tresult = [result]\n\t\t\t\t}\n\t\t\t\theaders = headers.concat(result)\n\t\t\t}\n\t\t}\n\t})\n\theaders.forEach((header) => {\n\t\tObject.entries(header).forEach(([name,value]) => {\t\t\t\n\t\t\tr.headers.append(name, value)\n\t\t})\n\t})\n}\n*/\n\nfunction getRequestParams(req, current)\n{\n\tlet params = current || {}\n\tif (!params.url && current.url) {\n\t\tparams.url = current.url\n\t}\n\t// function to fetch all relevant properties of a Request\n\tfor(let prop of ['method','headers','body','mode','credentials','cache','redirect',\n\t\t'referrer','referrerPolicy','integrity','keepalive','signal',\n\t\t'priority','url']) {\n\t\tlet value = req[prop]\n\t\tif (typeof value=='undefined' || value == null) {\n\t\t\tcontinue\n\t\t}\n\t\tif (value?.[Symbol.metroProxy]) {\n\t\t\tvalue = value[Symbol.metroSource]\n\t\t}\n\t\tif (typeof value == 'function') {\n\t\t\tparams[prop] = value(params[prop], params)\n\t\t} else {\n\t\t\tif (prop == 'url') {\n\t\t\t\tparams.url = url(params.url, value)\n\t\t\t} else if (prop == 'headers') {\n\t\t\t\t//FIXME: test and see if appendHeaders is needed\n\t\t\t\tparams.headers = new Headers(current.headers)\n\t\t\t\tif (!(value instanceof Headers)) {\n\t\t\t\t\tvalue = new Headers(req.headers)\n\t\t\t\t}\n\t\t\t\tfor (let [key, val] of value.entries()) {\n\t\t\t\t\tparams.headers.set(key, val)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tparams[prop] = value\n\t\t\t}\n\t\t}\n\t}\n\tif (req instanceof Request && req.data) {\n\t\t// Request.body is always transformed into ReadableStreem\n\t\t// metro.request.data is the original body passed to Request()\n\t\tparams.body = req.data\n\t}\n\treturn params\n}\n\n/**\n * @typedef {Request} MetroRequest\n * @property {Symbol(source)} - returns the target Request of this Proxy\n * @property {Symbol(isProxy)} - returns true\n * @method with - returns a new MetroRequest, with the given options added\n * @param {<RequestOptions|Request|string|URL|URLSearchParams|FormData|ReadableStream|\n * Blob|ArrayBuffer|DataView|TypedArray>} ...options - request options, handled in order\n * \n * Returns a new metro Request object\n * @param {<RequestOptions|Request|string|URL|URLSearchParams|FormData|ReadableStream|\n * Blob|ArrayBuffer|DataView|TypedArray>} ...options - request options, handled in order\n * @return {MetroRequest} - a new metro Request object\n */\nexport function request(...options)\n{\n\t// the standard Request constructor is a minefield\n\t// so first gather all the options together into a single\n\t// javascript object, then set it in one go\n\tlet requestParams = {\n\t\turl: typeof window != 'undefined' ? url(window.location) : url('https://localhost/'),\n\t\tduplex: 'half' // required when setting body to ReadableStream, just set it here by default already\n\t}\n\tfor (let option of options) {\n\t\tif (typeof option == 'string'\n\t\t\t|| option instanceof URL\n\t\t\t|| option instanceof URLSearchParams\n\t\t) {\n\t\t\trequestParams.url = url(requestParams.url, option)\n\t\t} else if (option && (\n\t\t\toption instanceof FormData\n\t\t\t|| option instanceof ReadableStream\n\t\t\t|| option instanceof Blob\n\t\t\t|| option instanceof ArrayBuffer\n\t\t\t|| option instanceof DataView\n\t\t)) {\n\t\t\trequestParams.body = option\n\t\t} else if (option && typeof option == 'object') {\n\t\t\tObject.assign(requestParams, getRequestParams(option, requestParams))\n\t\t}\n\t}\n\tlet r = new Request(requestParams.url, requestParams)\n\tlet data = requestParams.body\n\tif (data) {\n\t\tif (typeof data == 'object'\n\t\t\t&& !(data instanceof String)\n\t\t\t&& !(data instanceof ReadableStream)\n\t\t\t&& !(data instanceof Blob)\n\t\t\t&& !(data instanceof ArrayBuffer)\n\t\t\t&& !(data instanceof DataView)\n\t\t\t&& !(data instanceof FormData)\n\t\t\t&& !(data instanceof URLSearchParams)\n\t\t\t&& (typeof globalThis.TypedArray=='undefined' || !(data instanceof globalThis.TypedArray))\n\t\t) {\n\t\t\t// if we are here, body is set with an object of a type\n\t\t\t// not natively understood by Request, coerce it to a string\n\t\t\t// using toString({headers}) instead of just toString()\n\t\t\tif (typeof data.toString == 'function') {\n\t\t\t\trequestParams.body = data.toString({headers:r.headers})\n\t\t\t\tr = new Request(requestParams.url, requestParams)\n\t\t\t}\n\t\t}\n\t}\n\tObject.freeze(r)\n\treturn new Proxy(r, {\n\t\tget(target, prop) {\n\t\t\tlet result\n\t\t\tswitch(prop) {\n\t\t\t\tcase Symbol.metroSource:\n\t\t\t\t\tresult = target\n\t\t\t\tbreak\n\t\t\t\tcase Symbol.metroProxy:\n\t\t\t\t\tresult = true\n\t\t\t\tbreak\n\t\t\t\tcase 'with':\n\t\t\t\t\tresult = function(...options) {\n\t\t\t\t\t\tif (data) { // data is kept in a seperate value, if it set earlier\n\t\t\t\t\t\t\toptions.unshift({ body: data }) // unshifted so it can be overridden by options\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn request(target, ...options)\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t\tcase 'data':\n\t\t\t\t\tresult = data\n\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tif (target[prop] instanceof Function) {\n\t\t\t\t\t\tif (prop === 'clone') {\n\t\t\t\t\t\t\t// TODO: set req.data as the body of the clone\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresult = target[prop].bind(target)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = target[prop]\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t})\n}\n\nfunction getResponseParams(res, current)\n{\n\t// function to fetch all relevant properties of a Response\n\tlet params = current || {}\n\tif (!params.url && current.url) {\n\t\tparams.url = current.url\n\t}\n\tfor(let prop of ['status','statusText','headers','body','url','type','redirected']) {\n\t\tlet value = res[prop]\n\t\tif (typeof value == 'undefined' || value == null) {\n\t\t\tcontinue\n\t\t}\n\t\tif (value?.[Symbol.metroProxy]) {\n\t\t\tvalue = value[Symbol.metroSource]\n\t\t}\n\t\tif (typeof value == 'function') {\n\t\t\tparams[prop] = value(params[prop], params)\n\t\t} else {\n\t\t\tif (prop == 'url') {\n\t\t\t\t//TODO: check if this should use metro.url\n\t\t\t\tparams.url = new URL(value, params.url || 'https://localhost/')\n\t\t\t} else {\n\t\t\t\tparams[prop] = value\n\t\t\t}\n\t\t}\n\t}\n\tif (res instanceof Response && res.data) {\n\t\t// Response.body is always transformed into ReadableStreem FIXME: check this\n\t\t// metro.response.data is the original body passed to Response()\n\t\tparams.body = res.data\n\t}\n\treturn params\n}\n\n/**\n * @typedef {Response} MetroResponse\n * @property {Symbol(source)} - returns the target Response of this Proxy\n * @property {Symbol(isProxy)} - returns true\n * @method with - returns a new MetroResponse, with the given options added\n * @param {<ResponseOptions|Response|string|URLSearchParams|FormData|ReadableStream|\n * Blob|ArrayBuffer|DataView|TypedArray>} ...options - respomse options, handled in order\n * \n * Returns a new metro Response object\n * @param {<ResponseOptions|Response|string|URLSearchParams|FormData|ReadableStream|\n * Blob|ArrayBuffer|DataView|TypedArray>} ...options - request options, handled in order\n * @return {MetroResponse} - a new metro Response object\n */\nexport function response(...options)\n{\n\tlet responseParams = {}\n\tfor (let option of options) {\n\t\tif (typeof option == 'string') {\n\t\t\tresponseParams.body = option\n\t\t} else if (option instanceof Response) {\n\t\t\tObject.assign(responseParams, getResponseParams(option, responseParams))\n\t\t} else if (option && typeof option == 'object') {\n\t\t\tif (option instanceof FormData\n\t\t\t\t|| option instanceof Blob\n\t\t\t\t|| option instanceof ArrayBuffer\n\t\t\t\t|| option instanceof DataView\n\t\t\t\t|| option instanceof ReadableStream\n\t\t\t\t|| option instanceof URLSearchParams\n\t\t\t\t|| option instanceof String\n\t\t\t\t|| (typeof globalThis.TypedArray != 'undefined' && option instanceof globalThis.TypedArray)\n\t\t\t) {\n\t\t\t\tresponseParams.body = option\n\t\t\t} else {\n\t\t\t\tObject.assign(responseParams, getResponseParams(option, responseParams))\n\t\t\t}\n\t\t}\n\t}\n\tlet data = undefined\n\tif (responseParams.body) {\n\t\tdata = responseParams.body\n\t}\n\t// if response status is 'null body status', don't set a body\n\t// that is response.status in [101, 204, 205, 304 ] \n\t// see: https://fetch.spec.whatwg.org/#statuses\n\tif ([101, 204, 205, 304 ].includes(responseParams.status)) {\n\t\tresponseParams.body = null\n\t}\n\tlet r = new Response(responseParams.body, responseParams)\t\n\tObject.freeze(r)\n\treturn new Proxy(r, {\n\t\tget(target, prop) {\n\t\t\tlet result\n\t\t\tswitch(prop) {\n\t\t\t\tcase Symbol.metroProxy:\n\t\t\t\t\tresult = true\n\t\t\t\tbreak\n\t\t\t\tcase Symbol.metroSource:\n\t\t\t\t\tresult = target\n\t\t\t\tbreak\n\t\t\t\tcase 'with':\n\t\t\t\t\tresult = function(...options) {\n\t\t\t\t\t\treturn response(target, ...options)\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t\tcase 'data':\n\t\t\t\t\t// body is turned into ReadableStream\n\t\t\t\t\t// data is the original body param\n\t\t\t\t\tresult = data\n\t\t\t\tbreak\n\t\t\t\tcase 'ok':\n\t\t\t\t\tresult = (target.status>=200) && (target.status<400)\n\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tif (typeof target[prop] == 'function') {\n\t\t\t\t\t\tresult = target[prop].bind(target)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = target[prop]\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t})\n}\n\nfunction appendSearchParams(url, params)\n{\n\tif (typeof params == 'function') {\n\t\tparams(url.searchParams, url)\n\t} else {\n\t\tparams = new URLSearchParams(params)\n\t\tparams.forEach((value,key) => {\n\t\t\turl.searchParams.append(key, value)\n\t\t})\n\t}\n}\n\n/**\n * @typedef {URL} MetroURL\n * @property {Symbol(source)} - returns the target Request of this Proxy\n * @property {Symbol(isProxy)} - returns true\n * @method with - returns a new MetroRequest, with the given options added\n * @param {<URL|URLSearchParams|string|Object|Function>} ...options - url options, handled in order\n * \n * Returns a new metro URL object\n * @param {<URL|URLSearchParams|string|Object|Function>} ...options - url options, handled in order\n * @return {MetroURL} - a new metro URL object\n */\nexport function url(...options)\n{\n\tlet validParams = ['hash','host','hostname','href',\n\t\t'password','pathname','port','protocol','username','search','searchParams']\n\tlet u = new URL('https://localhost/')\n\tfor (let option of options) {\n\t\tif (typeof option == 'string' || option instanceof String) {\n\t\t\t// option is a relative or absolute url\n\t\t\tu = new URL(option, u)\n\t\t} else if (option instanceof URL \n\t\t\t|| (typeof Location != 'undefined' \n\t\t\t\t&& option instanceof Location)\n\t\t) {\n\t\t\tu = new URL(option)\n\t\t} else if (option instanceof URLSearchParams) {\n\t\t\tappendSearchParams(u, option)\n\t\t} else if (option && typeof option == 'object') {\n\t\t\tfor (let param in option) {\n\t\t\t\tswitch(param) {\n\t\t\t\t\tcase 'search':\n\t\t\t\t\t\tif (typeof option.search == 'function') {\n\t\t\t\t\t\t\toption.search(u.search, u)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tu.search = new URLSearchParams(option.search)\n\t\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t\tcase 'searchParams':\n\t\t\t\t\t\tappendSearchParams(u, option.searchParams)\n\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (!validParams.includes(param)) {\n\t\t\t\t\t\t\tthrow metroError('metro.url: unknown url parameter '+metroURL+'url/unknown-param-name/', param)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof option[param] == 'function') {\n\t\t\t\t\t\t\toption[param](u[param], u)\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\ttypeof option[param] == 'string' || option[param] instanceof String \n\t\t\t\t\t\t\t|| typeof option[param] == 'number' || option[param] instanceof Number\n\t\t\t\t\t\t\t|| typeof option[param] == 'boolean' || option[param] instanceof Boolean\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tu[param] = ''+option[param]\n\t\t\t\t\t\t} else if (typeof option[param] == 'object' && option[param].toString) {\n\t\t\t\t\t\t\tu[param] = option[param].toString()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow metroError('metro.url: unsupported value for '+param+' '+metroURL+'url/unsupported-param-value/', options[param])\n\t\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow metroError('metro.url: unsupported option value '+metroURL+'url/unsupported-option-value/', option)\n\t\t}\n\t}\n\tObject.freeze(u)\n\treturn new Proxy(u, {\n\t\tget(target, prop) {\n\t\t\tlet result\n\t\t\tswitch(prop) {\n\t\t\t\tcase Symbol.metroProxy:\n\t\t\t\t\tresult = true\n\t\t\t\tbreak\n\t\t\t\tcase Symbol.metroSource:\n\t\t\t\t\tresult = target\n\t\t\t\tbreak\n\t\t\t\tcase 'with':\n\t\t\t\t\tresult = function(...options) {\n\t\t\t\t\t\treturn url(target, ...options)\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t\tcase 'filename':\n\t\t\t\t\tresult = target.pathname.split('/').pop()\n\t\t\t\tbreak\n\t\t\t\tcase 'folderpath':\n\t\t\t\t\tresult = target.pathname.substring(0,target.pathname.lastIndexOf('\\\\')+1)\n\t\t\t\tbreak\n\t\t\t\tcase 'authority':\n\t\t\t\t\tresult = target.username ?? ''\n\t\t\t\t\tresult += target.password ? ':'+target.password : ''\n\t\t\t\t\tresult += result ? '@' : ''\n\t\t\t\t\tresult += target.hostname\n\t\t\t\t\tresult += target.port ? ':'+target.port : ''\n\t\t\t\t\tresult += '/'\n\t\t\t\t\tresult = target.protocol + '//' + result\n\t\t\t\tbreak\n\t\t\t\tcase 'origin':\n\t\t\t\t\tresult = target.protocol + '//' + target.hostname\n\t\t\t\t\tresult += target.port ? ':' + target.port : ''\n\t\t\t\t\tresult += '/'\n\t\t\t\tbreak\n\t\t\t\tcase 'fragment':\n\t\t\t\t\tresult = target.hash.substring(1)\n\t\t\t\tbreak\n\t\t\t\tcase 'scheme':\n\t\t\t\t\tif (target.protocol) {\n\t\t\t\t\t\tresult = target.protocol.substring(0, target.protocol.length-1)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = ''\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tif (target[prop] instanceof Function) {\n\t\t\t\t\t\tresult = target[prop].bind(target)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = target[prop]\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t})\n}\n\n/**\n * @typedef {FormData} MetroFormData\n * @property {Symbol(source)} - returns the target Request of this Proxy\n * @property {Symbol(isProxy)} - returns true\n * @method with - returns a new MetroRequest, with the given options added\n * @param {<FormData|Object>} ...options - url options, handled in order\n * \n * Returns a new metro FormData object\n * @param {<FormData|Object>} ...options - formdata options, handled in order\n * @return {MetroURL} - a new metro FormData object\n */\nexport function formdata(...options)\n{\n\tvar params = new FormData()\n\tfor (let option of options) {\n\t\tif (option instanceof HTMLFormElement) {\n\t\t\toption = new FormData(option)\n\t\t}\n\t\tif (option instanceof FormData) {\n\t\t\tfor (let entry of option.entries()) {\n\t\t\t\tparams.append(entry[0],entry[1])\n\t\t\t}\n\t\t} else if (option && typeof option == 'object') {\n\t\t\tfor (let entry of Object.entries(option)) {\n\t\t\t\tif (Array.isArray(entry[1])) {\n\t\t\t\t\tfor (let value of entry[1]) {\n\t\t\t\t\t\tparams.append(entry[0], value)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tparams.append(entry[0],entry[1])\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new metroError('metro.formdata: unknown option type '+metroURL+'formdata/unknown-option-value/', option)\n\t\t}\n\t}\n\tObject.freeze(params)\n\treturn new Proxy(params, {\n\t\tget(target, prop) {\n\t\t\tlet result\n\t\t\tswitch(prop) {\n\t\t\t\tcase Symbol.metroProxy:\n\t\t\t\t\tresult = true\n\t\t\t\tbreak\n\t\t\t\tcase Symbol.metroSource:\n\t\t\t\t\tresult = target\n\t\t\t\tbreak\n\t\t\t\t//TODO: add toString() that can check\n\t\t\t\t//headers param: toString({headers:request.headers})\n\t\t\t\t//for the content-type\n\t\t\t\tcase 'with':\n\t\t\t\t\tresult = function(...options) {\n\t\t\t\t\t\treturn formdata(target, ...options)\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tif (target[prop] instanceof Function) {\n\t\t\t\t\t\tresult = target[prop].bind(target)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = target[prop]\n\t\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn result\n\t\t}\n\t})\n}\n\nconst metroConsole = {\n\terror: (message, ...details) => {\n\t\tconsole.error('\u24C2\uFE0F ',message, ...details)\n\t},\n\tinfo: (message, ...details) => {\n\t\tconsole.info('\u24C2\uFE0F ',message, ...details)\n\t},\n\tgroup: (name) => {\n\t\tconsole.group('\u24C2\uFE0F '+name)\n\t},\n\tgroupEnd: (name) => {\n\t\tconsole.groupEnd('\u24C2\uFE0F '+name)\n\t}\n}\n\n\n/**\n * Custom Metro Error function that outputs to the console then throws an error\n */\nexport function metroError(message, ...details) {\n\tmetroConsole.error(message, ...details)\n\treturn new Error(message, ...details)\n}\n\n/**\n * Set of debugging tools to trace the request - response flow\n * Tracer are run on all metro fetch calls\n */\nexport const trace = {\n\t/**\n\t * Adds a named tracer function\n\t * @param {string} name - the name of the tracer\n\t * @param {Function} tracer - the tracer function to call\n\t */\n\tadd(name, tracer) {\n\t\tClient.tracers[name] = tracer\n\t},\n\t/**\n\t * Removes a named tracer function\n\t * @param {string} name\n\t */\n\tdelete(name) {\n\t\tdelete Client.tracers[name]\n\t},\n\t/**\n\t * Removes all tracer functions\n\t */\n\tclear() {\n\t\tClient.tracers = {}\n\t},\n\t/**\n\t * Returns a set of request and response tracer functions that use the\n\t * console.group feature to shows nested request/response pairs, with\n\t * most commonly needed information for debugging\n\t */\n\tgroup() {\n\t\tlet group = 0;\n\t\treturn {\n\t\t\trequest: (req, middleware) => {\n\t\t\t\tgroup++\n\t\t\t\tmetroConsole.group(group)\n\t\t\t\tmetroConsole.info(req?.url, req, middleware)\n\t\t\t},\n\t\t\tresponse: (res, middleware) => {\n\t\t\t\tmetroConsole.info(res?.body ? res.body[Symbol.metroSource]: null, res, middleware)\n\t\t\t\tmetroConsole.groupEnd(group)\n\t\t\t\tgroup--\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function deepClone(object) {\n\tif (Array.isArray(object)) {\n\t\treturn object.slice().map(deepClone)\n\t}\n\tif (object && typeof object==='object') {\n\t\tif (object.__proto__.constructor==Object || !object.__proto__) { // plain objects\n\t\t\tlet result = Object.assign({}, object)\n\t\t\tObject.keys(result).forEach(key => {\n\t\t\t\tresult[key] = deepClone(object[key])\n\t\t\t})\n\t\t\treturn result\n\t\t} else {\n\t\t\treturn object // don't clone custom classes or functions\n\t\t}\n\t}\n\treturn object\n}", "import Path from '../Path.mjs';\nimport { client, url } from '@muze-nl/metro/src/metro.mjs'\n\nexport default class HttpAdapter {\n \n #client;\n #path;\n\n constructor(metroClient, path='/') {\n this.#client = client(metroClient)\n this.#path = new Path(path);\n }\n\n get name() {\n return 'HttpAdapter';\n }\n\n get path() {\n return this.#path;\n }\n\n supportsWrite() {\n return true;\n }\n\n supportsStreamingWrite() {\n return supportsRequestStreams;\n }\n\n supportsStreamingRead() {\n return true;\n }\n\n cd(path) {\n if (!Path.isPath(path)) {\n throw new TypeError(path+' is not a valid path');\n }\n if (Path.isRelative(path)) {\n path = Path.collapse(path, this.#path)\n }\n return new this.constructor(this.#client, path);\n }\n\n //FIXME: return a jsfs result object instead of http response\n async write(path, contents, metadata=null) {\n return this.#client.put({body: contents})\n }\n\n writeStream(path, writer, metadata=null) {\n throw new Error('Not yet implemented')\n }\n\n async read(path) {\n let response = await this.#client.get(path);\n //TODO: create a special jsfsFile class\n //with a toString that returns the contents\n //or better: mimic the File class of the browser\n let result = {\n type: this.getMimetype(response),\n name: Path.filename(path),\n http: {\n headers: response.headers,\n status: response.status,\n url: response.url\n }\n }\n //TODO: add middleware in metro client for this\n if (result.type.match(/text\\/.*/)) {\n result.contents = await response.text()\n } else if (result.type.match(/application\\/json.*/)) {\n result.contents = await response.json()\n } else {\n result.contents = await response.blob()\n }\n return result\n }\n\n readStream(path, reader) {\n throw new Error('Not yet implemented')\n }\n\n async exists(path) {\n return this.#client.head(path);\n }\n\n async delete(path) {\n return this.#client.delete(path);\n }\n\n async list(path) {\n let supportedContentTypes = [\n 'text/html','text/xhtml','text/xhtml+xml','text/xml'\n ];\n let result = await this.read(path)\n if (supportedContentTypes.includes(result.type.split(';')[0])) {\n var html = result.contents\n } else {\n let url = this.getUrl(path);\n throw new TypeError('URL '+url+' is not of a supported content type', {\n cause: result\n }); \n }\n\n let basePath = url(this.#client.clientOptions.url).pathname;\n let parentUrl = this.getUrl(path);\n // TODO: use DOMParser() directly here\n let dom = document.createElement('template');\n dom.innerHTML = html;\n let links = dom.content.querySelectorAll('a[href]');\n\n return Array.from(links)\n .map(link => {\n // use getAttribute to get the unchanged href value\n // otherwise relative hrefs will be turned into absolute values relative to the current window.location\n // instead of the path used in list()\n let url = new URL(link.getAttribute('href'), parentUrl.href); \n link.href = url.href;\n return {\n filename: Path.filename(link.pathname),\n path: link.pathname,\n name: link.innerText,\n href: link.href\n }\n })\n .filter(link => {\n // show only links that have the current URL as direct parent\n let testURL = new URL(link.href)\n testURL.pathname = Path.parent(testURL.pathname);\n return testURL.href===parentUrl.href;\n })\n .map(link => {\n return {\n filename: link.filename,\n path: link.path.substring(basePath.length-1), //TODO: Path.collapse() now always adds a trailing '/', so this works, but the added trailing / is probably not correct\n name: link.name\n }\n })\n }\n\n getUrl(path) {\n let basePath = url(this.#client.clientOptions.url).pathname;\n path = Path.collapse(basePath + Path.collapse(path));\n return new URL(path, this.#client.clientOptions.url);\n }\n\n getMimetype(response) {\n if (response.headers.has('Content-Type')) {\n return response.headers.get('Content-Type')\n } else {\n return null\n }\n }\n}\n\nconst supportsRequestStreams = (async () => {\n const supportsStreamsInRequestObjects = !new Request(\n '', \n {\n body: new ReadableStream(),\n method: 'POST',\n duplex: 'half' // required in chrome\n }\n )\n .headers.has('Content-Type');\n\n if (!supportsStreamsInRequestObjects) {\n return false;\n }\n\n return fetch(\n 'data:a/a;charset=utf-8,', \n {\n method: 'POST',\n body: new ReadableStream(),\n duplex: 'half'\n }\n )\n .then(() => true, () => false);\n})();", "import JSFS from './FileSystem.mjs'\nimport HttpAdapter from './Adapters/Http.mjs'\nimport Path from './Path.mjs'\n\nconst jsfs = {\n\tfs: JSFS,\n\tadapters: {\n\t\thttps: HttpAdapter\n\t},\n\tpath: Path\n}\nglobalThis.jsfs = jsfs\n\nexport default jsfs", "export default function jsonmw(options)\n{\n options = Object.assign({\n contentType: 'application/json',\n reviver: null,\n replacer: null,\n space: ''\n }, options)\n\n return async function json(req, next) {\n if (!req.headers.get('Accept')) {\n req = req.with({\n headers: {\n 'Accept': options.accept ?? options.contentType\n }\n })\n }\n if (req.method!=='GET' && req.method!=='HEAD') {\n //https://developer.mozilla.org/en-US/docs/Web/API/Request/body\n if (req.data && typeof req.data=='object' && !(req.data instanceof ReadableStream)) {\n const contentType = req.headers.get('Content-Type')\n if (!contentType || isPlainText(contentType)) {\n req = req.with({\n headers: {\n 'Content-Type':options.contentType,\n }\n })\n }\n if (isJSON(req.headers.get('Content-Type'))) {\n req = req.with({\n body: JSON.stringify(req.data, options.replacer, options.space)\n })\n }\n }\n }\n let res = await next(req)\n if (res && isJSON(res.headers?.get('Content-Type'))) {\n let tempRes = res.clone()\n let body = await tempRes.text()\n try {\n let json = JSON.parse(body, options.reviver)\n return res.with({\n body: json\n })\n } catch(e) {\n // ignore parse errors\n }\n }\n return res\n }\n}\n\n/*\n this matches:\n - application/json\n - application/ld+json\n - application/json; charset=utf-8\n - application/ld+json; charset=utf-8\n*/\nconst jsonRE = /^application\\/([a-zA-Z0-9\\-_]+\\+)?json\\b/\nfunction isJSON(contentType)\n{\n return jsonRE.exec(contentType)\n}\n\nfunction isPlainText(contentType)\n{\n return /^text\\/plain\\b/.exec(contentType)\n}", "export default function throwermw(options) {\n\n\treturn async function thrower(req, next) {\n\t\tlet res = await next(req)\n\t\tif (!res.ok) {\n\t\t\tif (options && typeof options[res.status] == 'function') {\n\t\t\t\tres = options[res.status].apply(res, req)\n\t\t\t} else {\n\t\t\t\tthrow new Error(res.status+': '+res.statusText, {\n\t\t\t\t\tcause: res\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn res\n\t}\n\n}", "export default function getdatamw()\n{\n\n\treturn async function getdata(req, next) {\n\t\tlet res = await next(req)\n\t\tif (res.ok && res.data) {\n\t\t\treturn res.data\n\t\t}\n\t\treturn res\n\t}\n\n}", "import * as metro from './metro.mjs'\nimport jsonmw from './mw/json.mjs'\nimport throwermw from './mw/thrower.mjs'\nimport getdatamw from './mw/getdata.mjs'\n\n/**\n * Metro API Client, extends Client\n * @param base ClientOptions|URL|String\n * @param methods {name:function,...} list of API methods to expose\n * This class extends the metro client to allow you to add your own\n * api client methods. Methods are bound to this API object.\n * All default client methods (get/post/put/etc.) still work, unless\n * overridden. If a response object has a data part, that will be \n * returned by the api client methods, instead of the normal response\n * The base API class will throw errors for network responses that\n * are not ok (e.g. status >= 400)\n * It will also return response.data, if that is set, instead of response\n */\nexport class API extends metro.Client\n{\n\tconstructor(base, methods, bind=null)\n\t{\n\t\tif (base instanceof metro.Client) {\n\t\t\tsuper(base.clientOptions, throwermw(), getdatamw())\n\t\t} else {\n\t\t\tsuper(base, throwermw(), getdatamw())\n\t\t}\n\t\tif (!bind) {\n\t\t\tbind = this\n\t\t}\n\t\tfor (const methodName in methods) {\n\t\t\tif (typeof methods[methodName] == 'function') {\n\t\t\t\t// all methods have a this pointing to the (root) API class\n\t\t\t\t// so that you can do this.get()/this.post() or this.section.method()\n\t\t\t\t// inside an API method\n\t\t\t\tthis[methodName] = methods[methodName].bind(bind)\n\t\t\t} else if (methods[methodName] && typeof methods[methodName] == 'object') {\n\t\t\t\t// allows for api.section.method()\n\t\t\t\tthis[methodName] = new this.constructor(base, methods[methodName], bind)\n\t\t\t} else { \n\t\t\t\t// allows you to set string/number values in the client api\n\t\t\t\tthis[methodName] = methods[methodName]\n\t\t\t}\n\t\t}\t\t\n\t}\n}\n\n/**\n * This extends the API class to automatically add\n * the jsonmw middleware. So any request.body that is\n * a normal object is automatically translated to JSON\n * Any response that returns JSON is automatically parsed\n * into response.data.\n * If no Accept header is set, it is added.\n */\nexport class JsonAPI extends API\n{\n\tconstructor(base, methods, bind=null) \n\t{\n\t\tif (base instanceof metro.Client) {\n\t\t\tsuper(base.with(jsonmw()), methods, bind)\n\t\t} else {\n\t\t\tsuper(metro.client(base, jsonmw()), methods, bind)\n\t\t}\n\t}\n}\n\n/**\n * Returns a new Metro API object\n * @param {...ClientOptions|string|URL}\n * @return API\n */\nexport function api(...options)\n{\n\treturn new API(...metro.deepClone(options))\n}\n\nexport function jsonApi(...options)\n{\n\treturn new JsonAPI(...metro.deepClone(options))\n}", "import * as m from './metro.mjs'\nimport { api, jsonApi } from './api.mjs'\nimport json from './mw/json.mjs'\nimport thrower from './mw/thrower.mjs'\nimport getdata from './mw/getdata.mjs'\n\nconst metro = Object.assign({}, m, {\n\tmw: {\n\t\tjson,\n\t\tthrower,\n\t\tgetdata\n\t},\n\tapi,\n\tjsonApi\n})\n\nif (!globalThis.metro) {\n\tglobalThis.metro = metro\n}\n\nexport default metro", "/*\nTODO: add assertExplain global flag, so that if assert() fails, you can call explain() with\n the same pattern and it will return text explanation of why it failed, each assertion function must \n then check assertExplain, and return a text explanation of what fails or succeeds\n top level can then filter to show only the failures\n (so that not(x) can show the succeeds message of x)\n*/\n\n/**\n * assertEnabled (Boolean) used to toggle whether the assert()\n * method should test assertions or not.\n */\nglobalThis.assertEnabled = false\n\n/**\n * Enables assertion testing with assert()\n */\nexport function enable() {\n\tglobalThis.assertEnabled = true\n}\n\n/**\n * Disables assertion testing with assert()\n */\nexport function disable() {\n\tglobalThis.assertEnabled = false\n}\n\n/**\n * This function will check the source for the assertions in test, if\n * assertion checking is enabled globally.\n * If it is, and any assertion fails, it will throw an assertError\n * with a list of problems and other details.\n */\nexport function assert(source, test) {\n\tif (globalThis.assertEnabled) {\n\t\tlet problems = fails(source,test)\n\t\tif (problems) {\n\t\t\tconsole.error('\uD83C\uDD70\uFE0F Assertions failed because of:', problems, 'in this source:', source)\n\t\t\tthrow new Error('Assertions failed', {\n\t\t\t\tcause: { problems, source } \n\t\t\t})\n\t\t}\n\t}\n}\n\n/**\n * Tests a given value against a pattern, only if the value is not null or undefined\n */\nexport function Optional(pattern) {\n\treturn function _Optional(data, root, path) {\n\t\tif (typeof data != 'undefined' && data!=null && typeof pattern != 'undefined' ) {\n\t\t\treturn fails(data, pattern, root, path)\n\t\t}\n\t}\n}\n\n/**\n * Tests a given value against a pattern, always.\n */\nexport function Required(pattern) {\n\treturn function _Required(data, root, path) {\n\t\tif (data==null || typeof data == 'undefined') {\n\t\t\treturn error('data is required', data, pattern || 'any value', path)\n\t\t} else if (typeof pattern != 'undefined') {\n\t\t\treturn fails(data, pattern, root, path)\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t}\n}\n\n/**\n * Tests a given value against a pattern, only if the value is not null or undefined\n * If null or undefined, it does print a warning to the console.\n */\nexport function Recommended(pattern) {\n\treturn function _Recommended(data, root, path) {\n\t\tif (data==null || typeof data == 'undefined') {\n\t\t\twarn('data does not contain recommended value', data, pattern, path)\n\t\t\treturn false\n\t\t} else {\n\t\t\treturn fails(data, pattern, root, path)\n\t\t}\n\t}\n}\n\n/**\n * Tests a given value against a set of patterns, untill one succeeds\n * Returns an error if none succeed\n */\nexport function oneOf(...patterns) { \n\treturn function _oneOf(data, root, path) {\n\t\tfor(let pattern of patterns) {\n\t\t\tif (!fails(data, pattern, root, path)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn error('data does not match oneOf patterns', data, patterns, path)\n\t}\n}\n\n/**\n * Tests a given array of values against a set of patterns\n * If any value does not match one of the patterns, it will return an error\n * If not given an array to test, it will return an error\n */\nexport function anyOf(...patterns) {\n\treturn function _anyOf(data, root, path) {\n\t\tif (!Array.isArray(data)) {\n\t\t\treturn error('data is not an array',data,'anyOf',path)\n\t\t}\n\t\tfor (let value of data) {\n\t\t\tif (oneOf(...patterns)(value)) {\n\t\t\t\treturn error('data does not match anyOf patterns',value,patterns,path)\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n}\n\nexport function allOf(...patterns) {\n\treturn function _allOf(data, root, path) {\n\t\tlet problems = []\n\t\tfor (let pattern of patterns) {\n\t\t\tproblems = problems.concat(fails(data, pattern, root, path))\n\t\t}\n\t\tproblems = problems.filter(Boolean)\n\t\tif (problems.length) {\n\t\t\treturn error('data does not match all given patterns', data, patterns, path, problems)\n\t\t}\n\t}\n}\n\n/**\n * Tests a given value to see if it is a valid (and absolute) URL, by\n * parsing it with the URL() constructor, and then testing the href\n * value to be equal to the initial value.\n */\nexport function validURL(data, root, path) {\n\ttry {\n\t\tif (data instanceof URL) {\n\t\t\tdata = data.href\n\t\t}\n\t\tlet url = new URL(data)\n\t\tif (url.href!=data) {\n\t\t\tif (!(url.href+'/'==data || url.href==data+'/')) {\n\t\t\t\t// new URL() always adds a / as path\n\t\t\t\treturn error('data is not a valid url',data,'validURL',path)\n\t\t\t}\n\t\t}\n\t} catch(e) {\n\t\treturn error('data is not a valid url',data,'validURL',path)\n\t}\n}\n\n/**\n * Tests a given value to see if it looks like a valid email address, by\n * testing it against a regular expression. So there are no guarantees that\n * it is an actual working email address, just that it looks like one.\n */\nexport function validEmail(data, root, path) {\n\tif (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(data)) {\n\t\treturn error('data is not a valid email',data,'validEmail',path)\n\t}\n}\n\n/**\n * Tests a given value to see if it is an object which is an instance of the given\n * constructor\n */\nexport function instanceOf(constructor) {\n\treturn function _instanceOf(data, root, path) {\n\t\tif (!(data instanceof constructor)) {\n\t\t\treturn error('data is not an instanceof pattern',data,constructor,path)\n\t\t}\n\t}\n}\n\n/**\n * Runs the given test pattern on a value, if the test succeeds, it fails\n * the not() test.\n */\nexport function not(pattern) {\n\treturn function _not(data, root, path) {\n\t\tif (!fails(data, pattern, root, path)) {\n\t\t\treturn error('data matches pattern, when required not to', data, pattern, path)\n\t\t}\n\t}\n}\n\n/**\n * returns an array of problems if the data fails to satisfy \n * the assertions in the given pattern, false otherwise\n * @param {any} data The data to match\n * @param {any} pattern The pattern to match\n * @param {any} root Root object for assertions, set to data by default\n * @return {Array|false} Array with problems if the pattern fails, false otherwise\n */\nexport function fails(data, pattern, root, path='') {\n\tif (!root) {\n\t\troot = data\n\t}\n\tlet problems = []\n\tif (pattern === Boolean) {\n\t\tif (typeof data != 'boolean' && !(data instanceof Boolean)) {\n\t\t\tproblems.push(error('data is not a boolean', data, pattern, path))\n\t\t}\t\t\n\t} else if (pattern === Number) {\n\t\tif (typeof data != 'number' && !(data instanceof Number)) {\n\t\t\tproblems.push(error('data is not a number', data, pattern, path))\n\t\t}\n\t} else if (pattern === String) {\n\t\tif (typeof data != 'string' && !(data instanceof String)) {\n\t\t\tproblems.push(error('data is not a string', data, pattern, path))\n\t\t}\n\t\tif (data == \"\") {\n\t\t\tproblems.push(error('data is an empty string, which is not allowed', data, pattern, path))\n\t\t}\n\t} else if (pattern instanceof RegExp) {\n \tif (Array.isArray(data)) {\n\t\t\tlet index = data.findIndex((element,index) => fails(element,pattern,root,path+'['+index+']'))\n if (index>-1) {\n \tproblems.push(error('data['+index+'] does not match pattern', data[index], pattern, path+'['+index+']'))\n }\n } else if (typeof data == 'undefined') {\n \tproblems.push(error('data is undefined, should match pattern', data, pattern, path))\n \t} else if (!pattern.test(data)) {\n \tproblems.push(error('data does not match pattern', data, pattern, path))\n }\n } else if (pattern instanceof Function) {\n let problem = pattern(data, root, path)\n if (problem) {\n \tif (Array.isArray(problem)) {\n \t\tproblems = problems.concat(problem)\n \t} else {\n\t \tproblems.push(problem)\n\t }\n }\n } else if (Array.isArray(pattern)) {\n\t\tif (!Array.isArray(data)) {\n\t\t\tproblems.push(error('data is not an array',data,[],path))\n\t\t}\n\t\tfor (let p of pattern) {\n\t\t\tfor (let index of data.keys()) {\n\t\t\t\tlet problem = fails(data[index], p, root, path+'['+index+']')\n\t\t\t\tif (Array.isArray(problem)) {\n\t\t\t\t\tproblems = problems.concat(problem)\n\t\t\t\t} else if (problem) {\n\t\t\t\t\tproblems.push(problem)\n\t\t\t\t}\n\t\t\t}\n \t}\n } else if (pattern && typeof pattern == 'object') {\n if (Array.isArray(data)) {\n let index = data.findIndex((element,index) => fails(element,pattern,root,path+'['+index+']'))\n if (index>-1) {\n \tproblems.push(error('data['+index+'] does not match pattern', data[index], pattern, path+'['+index+']'))\n }\n } else if (!data || typeof data != 'object') {\n \tproblems.push(error('data is not an object, pattern is', data, pattern, path))\n } else {\n \tif (data instanceof URLSearchParams) {\n \t\tdata = Object.fromEntries(data)\n \t}\n \tif (pattern instanceof Function) {\n \t\tlet result = fails(data, pattern, root, path)\n\t if (result) {\n\t \tproblems = problems.concat(result)\n\t }\n \t} else {\n\t\t for (const [patternKey, subpattern] of Object.entries(pattern)) {\n\t\t let result = fails(data[patternKey], subpattern, root, path+'.'+patternKey)\n\t\t if (result) {\n\t\t \tproblems = problems.concat(result)\n\t\t }\n\t\t }\n\t\t }\n\t }\n } else {\n \tif (pattern!=data) {\n \t\tproblems.push(error('data and pattern are not equal', data, pattern, path))\n \t}\n }\n if (problems.length) {\n \treturn problems\n }\n return false\n}\n\n/**\n * Returns an object with message, found and expected properties\n */ \nexport function error(message, found, expected, path, problems) {\n\tlet result = {\n\t\tpath,\n\t\tmessage,\n\t\tfound,\n\t\texpected\n\t}\n\tif (problems) {\n\t\tresult.problems = problems\n\t}\n\treturn result\n}\n\nexport function warn(message, data, pattern, path) {\n\tconsole.warn('\uD83C\uDD70\uFE0F Assert: '+path, message, pattern, data)\n}\n\nglobalThis.assert = {\n\twarn,\n\terror,\n\tassert,\n\tenable,\n\tdisable,\n\tRequired,\n\tRecommended,\n\tOptional,\n\toneOf,\n\tanyOf,\n\tallOf,\n\tvalidURL,\n\tvalidEmail,\n\tinstanceOf,\n\tnot,\n\tfails\n}", "export function tokenStore(site) {\n\tlet localState, localTokens\n\tif (typeof localStorage !== 'undefined') {\n\t\tlocalState = {\n\t\t\tget: () => localStorage.getItem('metro/state:'+site),\n\t\t\tset: (value) => localStorage.setItem('metro/state:'+site, value),\n\t\t\thas: () => localStorage.getItem('metro/state:'+site)!==null,\n\t\t\tdelete: () => localStorage.remoteItem('metro/state:'+site)\n\t\t}\n\t\tlocalTokens = {\n\t\t\tget: (name) => JSON.parse(localStorage.getItem(site+':'+name)),\n\t\t\tset: (name, value) => localStorage.setItem(site+':'+name, JSON.stringify(value)),\n\t\t\thas: (name) => localStorage.getItem(site+':'+name)!==null,\n\t\t\tdelete: (name) => localStorage.removeItem(site+':'+name)\n\t\t}\n\t} else {\n\t\tlet stateMap = new Map()\n\t\tlocalState = {\n\t\t\tget: () => stateMap.get('metro/state:'+site),\n\t\t\tset: (value) => stateMap.set('metro/state:'+site, value),\n\t\t\thas: () => stateMap.has('metro/state:'+site),\n\t\t\tdelete: () => stateMap.delete('metro/state:'+site)\n\t\t}\n\t\tlocalTokens = new Map()\n\t}\n\treturn {\n\t\tstate: localState,\n\t\ttokens: localTokens\n\t}\n}", "import * as metro from '@muze-nl/metro/src/metro.mjs'\nimport { assert, Required, validURL } from '@muze-nl/assert'\nimport {tokenStore} from './tokenstore.mjs'\n\n/**\n * oauth2mw returns a middleware for @muze-nl/metro that\n * implements oauth2 authentication in the metro client.\n * it supports the authorization_code, refresh_token and\n * client_credentials grant_type.\n * Since implicit flow is deemed insecure, it is not supported\n * This library follows the OAuth2.1 RFC - https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-11)\n * Referenced as Oauth2.1 RFC from here on\n * by default it will use PKCE and generate a random code_verifier,\n * to skip this, set options.oauth2_configuration.code_verifier to false\n */\nexport default function oauth2mw(options)\n{\n\tconst defaultOptions = {\n\t\tclient: metro.client(),\n\t\tforce_authorization: false,\n\t\tsite: 'default',\n\t\toauth2_configuration: {\n\t\t\tauthorization_endpoint: '/authorize',\n\t\t\ttoken_endpoint: '/token',\n\t\t\tredirect_uri: globalThis.document?.location.href,\n\t\t\tgrant_type: 'authorization_code',\n\t\t\tcode_verifier: generateCodeVerifier(64)\n\t\t},\n\t\tauthorize_callback: async url => {\n\t\t\tif (window.location.href != url.href) {\n\t\t\t\twindow.location.replace(url.href)\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t}\n\n\tassert(options, {})\t\n\n\tconst oauth2 = Object.assign({}, defaultOptions.oauth2_configuration, options?.oauth2_configuration)\n\toptions = Object.assign({}, defaultOptions, options)\n\toptions.oauth2_configuration = oauth2\n\n\tconst store = tokenStore(options.site)\n\tif (!options.tokens) {\n\t\toptions.tokens = store.tokens\n\t}\n\tif (!options.state) {\n\t\toptions.state = store.state\n\t}\n\n\tassert(options, {\n\t\toauth2_configuration: {\n\t\t\tclient_id: Required(/.+/),\n\t\t\tgrant_type: 'authorization_code',\n\t\t\tauthorization_endpoint: Required(validURL),\n\t\t\ttoken_endpoint: Required(validURL),\n\t\t\tredirect_uri: Required(validURL)\n\t\t}\n\t})\n\n\t// FIXME: for oidc, we need to send the id_token instead of access token...\n\tfor (let option in oauth2) {\n\t\tswitch(option) {\n\t\t\tcase 'access_token':\n\t\t\tcase 'authorization_code':\n\t\t\tcase 'refresh_token':\n\t\t\t\toptions.tokens.set(option, oauth2[option])\n\t\t\tbreak\n\t\t}\n\t}\n\n\t/**\n\t * This is the middleware function. It will intercept a request, and if needed\n\t * go through the OAuth2 authorization flow first.\n\t */\n\treturn async function(req, next) {\n\t\tif (options.force_authorization) {\n\t\t\treturn oauth2authorized(req, next)\n\t\t}\n\t\tlet res\n\t\ttry {\n\t\t\tres = await next(req)\n\t\t\tif (res.ok) {\n\t\t\t\treturn res\n\t\t\t}\n\t\t} catch(err) {\n\t\t\tswitch(res?.status) { \n\t\t\t\tcase 400: // Oauth2.1 RFC 3.2.4\n\t\t\t\tcase 401: // in case of incorrect authentication method\n\t\t\t\t\t//FIXME: check payload of response as well? yes - may be able to recover\n\t\t\t\t\treturn oauth2authorized(req, next)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tthrow err\n\t\t}\n\t\tif (!res.ok) {\n\t\t\tswitch(res.status) { \n\t\t\t\tcase 400: // Oauth2.1 RFC 3.2.4\n\t\t\t\tcase 401: // in case of incorrect authentication method\n\t\t\t\t\t//FIXME: check payload of response as well? yes - may be able to recover\n\t\t\t\t\treturn oauth2authorized(req, next)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\treturn res\n\t}\n\n\t/**\n\t * Implements the OAuth2 authorization flow for a request\n\t */\n\tasync function oauth2authorized(req, next)\n\t{\n\t\tgetTokensFromLocation()\n\t\tconst accessToken = options.tokens.get('access_token')\n\t\tconst refreshToken = options.tokens.get('refresh_token')\n\t\tconst tokenIsExpired = isExpired(accessToken)\n\t\tif (!accessToken || (tokenIsExpired && !refreshToken)) {\n\t\t\ttry {\n\t\t\t\tlet token = await fetchAccessToken()\n\t\t\t\tif (!token) {\n\t\t\t\t\treturn metro.response('false')\n\t\t\t\t}\n\t\t\t} catch(e){\n\t\t\t\t//FIXME: handle some errors here\n\t\t\t\tthrow(e)\n\t\t\t}\n\t\t\treturn oauth2authorized(req, next)\n\t\t} else if (tokenIsExpired && refreshToken) {\n\t\t\ttry {\n\t\t\t\tlet token = await refreshAccessToken()\n\t\t\t\tif (!token) {\n\t\t\t\t\treturn metro.response('false')\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t\t//FIXME: handle some errors here\n\t\t\t\tthrow(e)\n\t\t\t}\n\t\t\treturn oauth2authorized(req, next)\n\t\t} else {\n\t\t\treq = metro.request(req, {\n\t\t\t\theaders: {\n\t\t\t\t\tAuthorization: accessToken.type+' '+accessToken.value\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn next(req)\n\t\t}\n\t}\n\n\t/**\n\t * Fetches and stores the authorization_code from a redirected URI\n\t * Then removes the authorization_code from the browser URL\n\t * OAuth2 RFC 4.1.2\n\t */\n\tfunction getTokensFromLocation()\n\t{\n\t\tif (typeof window !== 'undefined' && window?.location) {\n\t\t\tlet url = metro.url(window.location)\n\t\t\tlet code, state, params\n\t\t\tif (url.searchParams.has('code')) {\n\t\t\t\tparams = url.searchParams\n\t\t\t\turl = url.with({ search:'' })\n\t\t\t\thistory.pushState({},'',url.href)\n\t\t\t} else if (url.hash) {\n\t\t\t\tlet query = url.hash.substr(1)\n\t\t\t\tparams = new URLSearchParams('?'+query)\n\t\t\t\turl = url.with({ hash:'' })\n\t\t\t\thistory.pushState({},'',url.href)\n\t\t\t}\n\t\t\tif (params) {\n\t\t\t\tcode = params.get('code')\n\t\t\t\tstate = params.get('state')\n\t\t\t\tlet storedState = options.state.get('metro/state')\n\t\t\t\tif (!state || state!==storedState) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (code) {\n\t\t\t\t\toptions.tokens.set('authorization_code', code)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Fetches the access_token. If the authorization_code hasn't been retrieved yet,\n\t * it will first try to get that, using the options.callbacks.authorize function.\n\t * If a refresh_token is also returned, it will store that in the options.tokens storage.\n\t */\n\tasync function fetchAccessToken()\n\t{\n\t\tif (oauth2.grant_type === 'authorization_code' && !options.tokens.has('authorization_code')) {\n\t\t\tlet authReqURL = await getAuthorizationCodeURL()\n\t\t\tif (!options.authorize_callback || typeof options.authorize_callback !== 'function') {\n\t\t\t\tthrow metro.metroError('oauth2mw: oauth2 with grant_type:authorization_code requires a callback function in client options.authorize_callback')\n\t\t\t}\n\t\t\tlet token = await options.authorize_callback(authReqURL)\n\t\t\tif (token) {\n\t\t\t\toptions.tokens.set('authorization_code', token)\n\t\t\t} else {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\tlet tokenReq = getAccessTokenRequest()\n\t\tlet response = await options.client.post(tokenReq) //OAuth2.1 RFC 3.2\n\t\tif (!response.ok) {\n\t\t\tlet msg = await response.text()\n\t\t\tthrow metro.metroError('OAuth2mw: fetch access_token: '+response.status+': '+response.statusText+' ('+msg+')', {cause: tokenReq} )\n\t\t}\n\t\tlet data = await response.json()\n\t\t// OAuth2.1 RFC 3.2.3\n\t\toptions.tokens.set('access_token', {\n\t\t\tvalue: data.access_token,\n\t\t\texpires: getExpires(data.expires_in),\n\t\t\ttype: data.token_type,\n\t\t\tscope: data.scope\n\t\t})\n\t\tif (data.refresh_token) {\n\t\t\tlet token = {\n\t\t\t\tvalue: data.refresh_token\n\t\t\t}\n\t\t\toptions.tokens.set('refresh_token', token)\n\t\t}\n\t\toptions.tokens.delete('authorization_code') // no longer valid\n\t\treturn data\n\t}\n\n\t/**\n\t * Fetches a new access_token using a stored refresh_token\n\t * If a new refresh_token is also returned, it will update the stored refresh_token\n\t * OAuth2.1 RFC 4.3\n\t */\n\tasync function refreshAccessToken()\n\t{\n\t\tlet refreshTokenReq = getAccessTokenRequest('refresh_token')\n\t\tlet response = await options.client.post(refreshTokenReq)\n\t\tif (!response.ok) {\n\t\t\tthrow metro.metroError('OAuth2mw: refresh access_token: '+response.status+': '+response.statusText, {cause: refreshTokenReq} )\n\t\t}\n\t\tlet data = await response.json()\n\t\toptions.tokens.set('access_token', {\n\t\t\tvalue: data.access_token,\n\t\t\texpires: getExpires(data.expires_in),\n\t\t\ttype: data.token_type,\n\t\t\tscope: data.scope\n\t\t})\n\t\tif (data.refresh_token) {\n\t\t\tlet token = {\n\t\t\t\tvalue: data.refresh_token\n\t\t\t}\n\t\t\toptions.tokens.set('refresh_token', token)\n\t\t} else {\n\t\t\treturn false\n\t\t}\n\t\treturn data\n\t}\n\n\t/**\n\t * Returns the URL to use to get a authorization_code\n\t */\n\tasync function getAuthorizationCodeURL()\n\t{\n\t\tif (!oauth2.authorization_endpoint) {\n\t\t\tthrow metro.metroError('oauth2mw: Missing options.oauth2_configuration.authorization_endpoint')\n\t\t}\n\t\tlet url = metro.url(oauth2.authorization_endpoint, {hash: ''}) // OAuth2.1 RFC 3.1\n\t\tassert(oauth2, {\n\t\t\tclient_id: /.+/,\n\t\t\tredirect_uri: /.+/,\n\t\t\tscope: /.*/\n\t\t})\n\t\tlet search = {\n\t\t\tresponse_type: 'code', // implicit flow uses 'token' here, but is not considered safe, so not supported\n\t\t\tclient_id: oauth2.client_id,\n\t\t\tredirect_uri: oauth2.redirect_uri,\n\t\t\tstate: oauth2.state || createState(40) // OAuth2.1 RFC says optional, but its a good idea to always add/check it\n\t\t}\n\t\tif (oauth2.response_type) {\n\t\t\tsearch.response_type = oauth2.response_type\n\t\t}\n\t\tif (oauth2.response_mode) {\n\t\t\tsearch.response_mode = oauth2.response_mode\n\t\t}\n\t\toptions.state.set(search.state)\n\t\tif (oauth2.client_secret) {\n\t\t\tsearch.client_secret = oauth2.client_secret\n\t\t}\n\t\tif (oauth2.code_verifier) { //PKCE\n\t\t\toptions.tokens.set('code_verifier', oauth2.code_verifier)\n\t\t\tsearch.code_challenge = await generateCodeChallenge(oauth2.code_verifier)\n\t\t\tsearch.code_challenge_method = 'S256'\n\t\t}\n\t\tif (oauth2.scope) {\n\t\t\tsearch.scope = oauth2.scope\n\t\t}\n\t\tif (oauth2.prompt) {\n\t\t\tsearch.prompt = oauth2.prompt\n\t\t}\n\t\treturn metro.url(url, { search })\n\t}\n\n\n\t/**\n\t * Returns a token endpoint request with all the correct parameters, given the\n\t * grant_type. This can then be used in a metro.post.\n\t */\n\tfunction getAccessTokenRequest(grant_type=null)\n\t{\n\t\tassert(oauth2, {\n\t\t\tclient_id: /.+/,\n\t\t\tredirect_uri: /.+/\n\t\t})\n\t\tif (!oauth2.token_endpoint) {\n\t\t\tthrow metro.metroError('oauth2mw: Missing options.endpoints.token url')\n\t\t}\n\t\tlet url = metro.url(oauth2.token_endpoint, {hash: ''}) // OAuth2.1 RFC 3.2\n\t\tlet params = {\n\t\t\tgrant_type: grant_type || oauth2.grant_type,\n\t\t\tclient_id: oauth2.client_id\n\t\t}\n\t\tif (oauth2.client_secret) {\n\t\t\tparams.client_secret = oauth2.client_secret\n\t\t}\n\t\tif (oauth2.scope) {\n\t\t\tparams.scope = oauth2.scope\n\t\t}\n\t\tswitch(params.grant_type) {\n\t\t\tcase 'authorization_code':\n\t\t\t\tparams.redirect_uri = oauth2.redirect_uri\n\t\t\t\tparams.code = options.tokens.get('authorization_code')\n\t\t\t\tconst code_verifier = options.tokens.get('code_verifier') //PKCE\n\t\t\t\t// use previously stored code_verifier, not the current random generated one\n\t\t\t\t// previously stored code_verifier is linked to the code_challenge already sent\n\t\t\t\tif (code_verifier) {\n\t\t\t\t\tparams.code_verifier = code_verifier\n\t\t\t\t}\n\t\t\tbreak\n\t\t\tcase 'client_credentials':\n\t\t\t\t// nothing to add\n\t\t\tbreak\n\t\t\tcase 'refresh_token':\n\t\t\t\tparams.refresh_token = options.tokens.get('refresh_token')\n\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Unknown grant_type: '.oauth2.grant_type)\n\t\t\tbreak\n\t\t}\n\t\treturn metro.request(url, {method: 'POST', body: new URLSearchParams(params) })\n\t}\n\n}\n\n/**\n * Returns true if the access token is expired. False otherwise.\n */\nexport function isExpired(token)\n{\n\tif (!token) {\n\t\treturn true\n\t}\n\tlet expires = new Date(token.expires)\n\tlet now = new Date();\n\treturn now.getTime() > expires.getTime();\n}\n\n/**\n * Returns a new Date based on a duration, which can either be a date\n * or a number of seconds from now.\n */\nexport function getExpires(duration)\n{\n\tif (duration instanceof Date) {\n\t\treturn new Date(duration.getTime()); // return a copy\n\t}\n\tif (typeof duration === 'number') {\n\t\tlet date = new Date();\n\t\tdate.setSeconds(date.getSeconds() + duration);\n\t\treturn date;\n\t}\n\tthrow new TypeError('Unknown expires type '+duration);\n}\n\n\n/**\n * returns a PKCE code_verifier, as a uint8array\n * pass it to base64url_encode() to get a string\n */\nexport function\tgenerateCodeVerifier(size=64)\n{\n\tconst code_verifier = new Uint8Array(size)\n\tglobalThis.crypto.getRandomValues(code_verifier)\n\treturn base64url_encode(code_verifier)\n}\n\n/**\n * Returns a PKCE code_challenge derived from a code_verifier\n * Note that this is an async function, so you can't just call\n * it in the defaultOptions part of oauth2mw, or it will become async as well\n * and that is not supported using metro.client().with() (yet)\n */\nexport async function generateCodeChallenge(code_verifier)\n{\n\tconst encoder = new TextEncoder()\n\tconst data = encoder.encode(code_verifier)\n\tconst challenge = await globalThis.crypto.subtle.digest('SHA-256', data)\n\treturn base64url_encode(challenge)\n}\n\n/**\n * Base64url encoding, which handles UTF-8 input strings correctly.\n */\nexport function base64url_encode(buffer)\n{\n\tconst byteString = Array.from(new Uint8Array(buffer), b => String.fromCharCode(b)).join('')\n return btoa(byteString)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\n/**\n * Creates a random state to use in the authorization code URL\n */\nexport function createState(length)\n{\n\tconst validChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n\tlet randomState = ''\n\tlet counter = 0\n while (counter < length) {\n randomState += validChars.charAt(Math.floor(Math.random() * validChars.length))\n counter++\n }\n\treturn randomState\n}\n\n/**\n * Returns true if a parameter 'code' is in the document.location searchParams or\n * in the hash, if parsed as searchParams\n */\nexport function isRedirected() {\n\tlet url = new URL(document.location.href)\n\tif (!url.searchParams.has('code')) {\n\t\tif (url.hash) {\n\t\t\tlet query = url.hash.substr(1)\n\t\t\tconst params = new URLSearchParams('?'+query)\n\t\t\tif (params.has('code')) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t}\n\treturn true\n}\n\n/**\n * Returns true if there is a valid accessToken or refreshToken in the\n * tokens store.\n * @param (tokensStore.tokens|issuer) tokens - if tokens is a string, it \n * \tis assumed to be the oidc issuer, and tokens are fetched using the default\n * tokenStore. If you use a different tokenStore, pass the tokens section of it here\n */\nexport function isAuthorized(tokens) {\n\tif (typeof tokens == 'string') {//issuer\n\t\ttokens = tokenStore(tokens).tokens\n\t}\n\tlet accessToken = tokens.get('access_token')\n\tif (accessToken && !isExpired(accessToken)) {\n\t\treturn true\n\t}\n\tlet refreshToken = tokens.get('refresh_token')\n\tif (refreshToken) { // assumes refresh token is still valid\n\t\treturn true\n\t}\n\treturn false\n}", "export default function keysStore() {\n\treturn new Promise((resolve, reject) => {\n\t\tconst request = globalThis.indexedDB.open('metro', 1)\n\n\t\trequest.onupgradeneeded = () => request.result.createObjectStore('keyPairs', { keyPath: 'domain'})\n\n\t\trequest.onerror = (event) => {\n\t\t\treject(event)\n\t\t}\n\n\t\trequest.onsuccess = (event) => {\n\t\t\tconst db = event.target.result\n\t\t\tresolve({\n\t\t\t\tset: function(value, key) {\n\t\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\t\tconst tx = db.transaction('keyPairs', 'readwrite', {durability: 'strict'})\n\t\t\t\t\t\tconst objectStore = tx.objectStore('keyPairs')\n\t\t\t\t\t\ttx.oncomplete = () => {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttx.onerror = reject\n\t\t\t\t\t\tobjectStore.put(value, key)\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tget: function(key) {\n\t\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\t\tconst tx = db.transaction('keyPairs', 'readonly')\n\t\t\t\t\t\tconst objectStore = tx.objectStore('keyPairs')\n\t\t\t\t\t\tconst request = objectStore.get(key)\n\t\t\t\t\t\trequest.onsuccess = () => {\n\t\t\t\t\t\t\tresolve(request.result)\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequest.onerror = reject\n\t\t\t\t\t\ttx.onerror = reject\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tclear: function() {\n\t\t\t\t\treturn new Promise((resolve,reject) => {\n\t\t\t\t\t\tconst tx = db.transaction('keyPairs', 'readwrite')\n\t\t\t\t\t\tconst objectStore = tx.objectStore('keyPairs')\n\t\t\t\t\t\tconst request = objectStore.clear()\n\t\t\t\t\t\trequest.onsuccess = () => {\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequest.onerror = reject\n\t\t\t\t\t\ttx.onerror = reject\t\t\t\t\t\t\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t})\n}", null, "import metro from '@muze-nl/metro'\nimport * as DPoP from 'dpop'\nimport { assert, Required, Optional, validURL } from '@muze-nl/assert'\nimport keysStore from './keysstore.mjs'\n\nexport default function dpopmw(options) {\n\n\tassert(options, {\n\t\tsite: Required(validURL),\n\t\tauthorization_endpoint: Required(validURL),\n\t\ttoken_endpoint: Required(validURL),\n\t\tdpop_signing_alg_values_supported: Optional([]) // this property is unfortunately rarely supported\n\t})\n\n\treturn async (req, next) => {\n\t\tconst keys = await keysStore()\n\t\tlet keyInfo = await keys.get(options.site)\n\t\tif (!keyInfo) {\n \t\t\t// FIXME fetch from dpop_signing_alg_values_supported\n \t\t\t// which is unfortunately not available usually\n \t\t\tlet keyPair = await DPoP.generateKeyPair('ES256') // note: don't make them extractable! That potentially allows hackers to steal the privateKey\n\t\t\tkeyInfo = { domain: options.site, keyPair }\n\t\t\tawait keys.set(keyInfo)\n\t\t}\n\t\tconst url = metro.url(req.url)\n\n\t\tif (req.url.startsWith(options.authorization_endpoint)) {\n\t\t\tlet params = req.body\n\t\t\tif (params instanceof URLSearchParams || params instanceof FormData) {\n\t\t\t\tparams.set('dpop_jkt', keyInfo.keyPair.publicKey)\n\t\t\t} else {\n\t\t\t\tparams.dpop_jkt = keyInfo.keyPair.publicKey\n\t\t\t}\n\n\t\t} else if (req.url.startsWith(options.token_endpoint)) {\n\t\t\tconst dpopHeader = await DPoP.generateProof(keyInfo.keyPair, req.url, req.method)\n\t\t\treq = req.with({\n\t\t\t\theaders: {\n\t\t\t\t\t'DPoP': dpopHeader\n\t\t\t\t}\n\t\t\t})\n\n\t\t} else if (req.headers.has('Authorization')) { //FIXME: not all requests use the dpop bound access token, so check which key to use, or if to add dpop at all\n\t\t\t// note: don't use options.site here, nonce can differ\n\t\t\tconst nonce = localStorage.getItem(url.host+':nonce') || undefined // null is not acceptible for DpOp()\n\t\t\tconst accessToken = req.headers.get('Authorization').split(' ')[1]\n\t\t\tconst dpopHeader = await DPoP.generateProof(keyInfo.keyPair, req.url, req.method, nonce, accessToken)\n\t\t\treq = req.with({\n\t\t\t\theaders: {\n\t\t\t\t\t'Authorization': 'DPoP '+accessToken,\n\t\t\t\t\t'DPoP': dpopHeader\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tlet response = await next(req)\n\t\tif (response.headers.get('DPoP-Nonce')) {\n\t\t\t// note: don't use options.site here, nonce can differ\n\t\t\tlocalStorage.setItem(url.host+':nonce', response.headers.get('DPoP-Nonce'))\n\t\t}\n\t\treturn response\n\t}\n\t\n}", "import { error } from '@muze-nl/assert'\n\nexport const MustHave = (...options) => \n\t(value, root) => {\n\t\tif (options.filter(o => root.hasOwnKey(o)).length > 0) {\n\t\t\treturn false\n\t\t}\n\t\treturn error('root data must have all of', root, options)\n\t}\n\nexport const MustInclude = (...options) =>\n\t(value) => {\n\t\tif (Array.isArray(value) && options.filter(o => !value.includes(o)).length == 0) {\n\t\t\treturn false\n\t\t} else {\n\t\t\treturn error('data must be an array which includes',value,options)\n\t\t}\n\t}\n\n//TODO: add link to spec\nexport const validJWK = [\n\t'HS256','HS384','HS512','RS256','RS384','RS512','ES256','ES384','ES512'\n]\n\n//TODO: add link to spec\n// FIXME: enter correct values\nexport const validJWA = [\n\t'HS256','HS384','HS512','RS256','RS384','RS512','ES256','ES384','ES512'\n]\n\n//TODO: add link to spec\nexport const validAuthMethods = [\n\t'client_secret_post', 'client_secret_basic','client_secret_jwt','private_key_jwt'\n]\n", "/**\n * This module adheres to OpenID Connect Discovery 1.0 incorporating errata set 2 - december 15, 2023\n * https://openid.net/specs/openid-connect-discovery-1_0.html\n */\nimport metro from '@muze-nl/metro'\nimport jsonmw from '@muze-nl/metro/src/mw/json.mjs'\nimport throwermw from '@muze-nl/metro/src/mw/thrower.mjs'\nimport { validJWA, MustInclude, validAuthMethods } from './oidc.util.mjs'\nimport { assert, fails, Required, Recommended, Optional, oneOf, anyOf, allOf, validURL, instanceOf, not, error } from '@muze-nl/assert'\n\n/**\n * Given options.issuer will get the .well-known/openid-configuration information\n * parse it, assert if follows the specification and return it as a javascript object\n * @param options.issuer Required: URL with the root of the oidc issuer\n * @param options.client Optional: metro client to use in the request\n * @returns object with openid-configuration\n * @throws Error when a network error occurs while fetching openid-configuration\n * @throws assertError when either the options or the openid-configuration fail assertions (and assertion testing is enabled)\n */\nexport default async function oidcDiscovery(options={}) {\n\tassert(options, {\n\t\tclient: Optional(instanceOf(metro.client().constructor)),\n\t\tissuer: Required(validURL)\n\t})\n\n\tconst defaultOptions = {\n\t\tclient: metro.client().with(throwermw()).with(jsonmw()),\n\t\trequireDynamicRegistration: false\n\t}\n\n\toptions = Object.assign({},defaultOptions,options)\n\n\tconst TestSucceeded = false\n\tfunction MustUseHTTPS(url) {\n\t\treturn TestSucceeded // FIXME todo\n\t}\n\n\t// https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata\n\t// @TODO: this is a first approximation of the specced requirements, needs to implement\n\t// all MUST/MUST NOT etc. notes in the specification.\n\tconst openid_provider_metadata = {\n\t\tissuer: Required(allOf(options.issuer, MustUseHTTPS)),\n\t\tauthorization_endpoint: Required(validURL),\n\t\ttoken_endpoint: Required(validURL),\n\t\tuserinfo_endpoint: Recommended(validURL), // todo: test for https protocol\n\t\tjwks_uri: Required(validURL),\n\t\tregistration_endpoint: options.requireDynamicRegistration \n\t\t\t? Required(validURL) \n\t\t\t: Recommended(validURL),\n\t\tscopes_supported: Recommended(MustInclude('openid')),\n\t\tresponse_types_supported: options.requireDynamicRegistration\n\t\t\t? Required(MustInclude('code','id_token','id_token token')) \n\t\t\t: Required([]),\n\t\tresponse_modes_supported: Optional([]),\n\t\tgrant_types_supported: options.requireDynamicRegistration\n\t\t\t? Optional(MustInclude('authorization_code')) // implicit is required according to the spec, but not used in web apps\n\t\t\t: Optional([]),\n\t\tacr_values_supported: Optional([]),\n\t\tsubject_types_supported: Required([]),\n\t\tid_token_signing_alg_values_supported: Required(MustInclude('RS256')),\n\t\tid_token_encryption_alg_values_supported: Optional([]),\n\t\tid_token_encryption_enc_values_supported: Optional([]),\n\t\tuserinfo_signing_alg_values_supported: Optional([]),\n\t\tuserinfo_encryption_alg_values_supported: Optional([]),\n\t\tuserinfo_encryption_enc_values_supported: Optional([]),\n\t\trequest_object_signing_alg_values_supported: Optional(MustInclude('RS256')), // not testing for 'none'\n\t\trequest_object_encryption_alg_values_supported: Optional([]),\n\t\trequest_object_encryption_enc_values_supported: Optional([]),\n\t\ttoken_endpoint_auth_methods_supported: Optional(anyOf(...validAuthMethods)),\n\t\ttoken_endpoint_auth_signing_alg_values_supported: Optional(MustInclude('RS256'), not(MustInclude('none'))),\n\t\tdisplay_values_supported: Optional(anyOf('page','popup','touch','wap')),\n\t\tclaim_types_supported: Optional(anyOf('normal','aggregated','distributed')),\n\t\tclaims_supported: Recommended([]),\n\t\tservice_documentation: Optional(validURL),\n\t\tclaims_locales_supported: Optional([]),\n\t\tui_locales_supported: Optional([]),\n\t\tclaims_parameter_supported: Optional(Boolean),\n\t\trequest_parameter_supported: Optional(Boolean),\n\t\trequest_uri_parameter_supported: Optional(Boolean),\n\t\top_policy_uri: Optional(validURL),\n\t\top_tos_uri: Optional(validURL)\t\n\t}\n\n\t// fetch openid configuration from wellknown and return the json\n\tconst configURL = metro.url(options.issuer, '.well-known/openid-configuration')\n\n\tconst response = await options.client.get(\n\t\t// https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationRequest\n\t\t// note: this allows path components in the options.issuer url\n\t\tconfigURL\n\t)\n\tconst openid_config = response.data\n\tassert(openid_config, openid_provider_metadata)\n\n\t// https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfigurationValidation\n\tassert(openid_config.issuer, options.issuer)\n\treturn openid_config\n}", "/**\n * This module adheres to OpenID Connect Dynamic Client Registration 1.0 \n * incorporating errata set 2 - december 15, 2023\n * https://openid.net/specs/openid-connect-registration-1_0.html\n */\nimport metro from '@muze-nl/metro'\nimport jsonmw from '@muze-nl/metro/src/mw/json.mjs'\nimport throwermw from '@muze-nl/metro/src/mw/thrower.mjs'\nimport { validJWA, validAuthMethods, MustHave } from './oidc.util.mjs'\nimport { assert, Required, Optional, oneOf, anyOf, validURL, validEmail, not, instanceOf } from '@muze-nl/assert'\n\nexport default async function register(options)\n{\n\n // https://openid.net/specs/openid-connect-registration-1_0.html#ClientMetadata\n\tconst openid_client_metadata = {\n\t\tredirect_uris: Required([validURL]),\n\t\tresponse_types: Optional([]),\n\t\tgrant_types: Optional(anyOf('authorization_code','refresh_token')), //TODO: match response_types with grant_types\n\t\tapplication_type: Optional(oneOf('native','web')),\n\t\tcontacts: Optional([validEmail]),\n\t\tclient_name: Optional(String),\n\t\tlogo_uri: Optional(validURL),\n\t\tclient_uri: Optional(validURL),\n\t\tpolicy_uri: Optional(validURL),\n\t\ttos_uri: Optional(validURL),\n\t\tjwks_uri: Optional(validURL, not(MustHave('jwks'))),\n\t\tjwks: Optional(validURL, not(MustHave('jwks_uri'))),\n\t\tsector_identifier_uri: Optional(validURL),\n\t\tsubject_type: Optional(String),\n\t\tid_token_signed_response_alg: Optional(oneOf(...validJWA)),\n\t\tid_token_encrypted_response_alg: Optional(oneOf(...validJWA)),\n\t\tid_token_encrypted_response_enc: Optional(oneOf(...validJWA), MustHave('id_token_encrypted_response_alg')),\n\t\tuserinfo_signed_response_alg: Optional(oneOf(...validJWA)),\n\t\tuserinfo_encrypted_response_alg: Optional(oneOf(...validJWA)),\n\t\tuserinfo_encrypted_response_enc: Optional(oneOf(...validJWA), MustHave('userinfo_encrypted_response_alg')),\n\t\trequest_object_signing_alg: Optional(oneOf(...validJWA)),\n\t\trequest_object_encryption_alg: Optional(oneOf(...validJWA)),\n\t\trequest_object_encryption_enc: Optional(oneOf(...validJWA)),\n\t\ttoken_endpoint_auth_method: Optional(oneOf(...validAuthMethods)),\n\t\ttoken_endpoint_auth_signing_alg: Optional(oneOf(...validJWA)),\n\t\tdefault_max_age: Optional(Number),\n\t\trequire_auth_time: Optional(Boolean),\n\t\tdefault_acr_values: Optional([String]),\n\t\tinitiate_login_uri: Optional([validURL]),\n\t\trequest_uris: Optional([validURL])\n\t}\n\n\tassert(options, {\n\t\tclient: Optional(instanceOf(metro.client().constructor)),\n\t\tregistration_endpoint: validURL, \n\t\tclient_info: openid_client_metadata\n\t})\n\n\tconst defaultOptions = {\n\t\tclient: metro.client().with(throwermw()).with(jsonmw()),\n\t\tclient_info: {\n\t\t\tredirect_uris: [ globalThis.document?.location.href ]\n\t\t}\n\t}\n\n\toptions = Object.assign({}, defaultOptions, options)\n\tif (!options.client_info) {\n\t\toptions.client_info = {}\n\t} \n\tif (!options.client_info.redirect_uris) {\n\t\toptions.client_info.redirect_uris = [ globalThis.document?.location.href ]\n\t}\n\tlet response = await options.client\n\t\t.post(options.registration_endpoint, {\n\t\t\tbody: options.client_info\n\t\t})\n\tlet info = response.data\n\tif (!info.client_id || !info.client_secret) {\n\t\tthrow metro.metroError('metro.oidc: Error: dynamic registration of client failed, no client_id or client_secret returned', response)\n\t}\n\toptions.client_info = Object.assign(options.client_info, info)\n\treturn options.client_info\n}", "export default function oidcStore(site) {\n\tlet store\n\tif (typeof localStorage !== 'undefined') {\n\t\tstore = {\n\t\t\tget: (name) => JSON.parse(localStorage.getItem('metro/oidc:'+site+':'+name)),\n\t\t\tset: (name, value) => localStorage.setItem('metro/oidc:'+site+':'+name, JSON.stringify(value)),\n\t\t\thas: (name) => localStorage.getItem('metro/oidc:'+site+':'+name)!==null\n\t\t}\n\t} else {\n\t\tlet storeMap = new Map()\n\t\tstore = {\n\t\t\tget: (name) => JSON.parse(storeMap.get('metro/oidc:'+site+':'+name)||null),\n\t\t\tset: (name, value) => storeMap.set('metro/oidc:'+site+':'+name, JSON.stringify(value)),\n\t\t\thas: (name) => storeMap.has('metro/oidc:'+site+':'+name)\n\t\t}\n\t}\n\treturn store\n}", "import * as metro from '@muze-nl/metro/src/metro.mjs'\nimport oauth2mw, * as oauth2 from '@muze-nl/metro-oauth2/src/oauth2.mjs'\nimport dpopmw from '@muze-nl/metro-oauth2/src/oauth2.dpop.mjs'\nimport { assert, Required, Optional, validURL, instanceOf } from '@muze-nl/assert'\nimport discover from './oidc.discovery.mjs'\nimport register from './oidc.register.mjs'\nimport oidcStore from './oidc.store.mjs'\n\nexport default function oidcmw(options={}) {\n\n\tconst defaultOptions = {\n\t\tclient: metro.client(),\n\t\tforce_authorization: false,\n\t\tuse_dpop: true,\n\t\tauthorize_callback: async url => {\n\t\t\tif (window.location.href != url.href) {\n\t\t\t\twindow.location.replace(url.href)\n\t\t\t}\n\t\t\treturn false\n\t\t}\n\t}\n\n\toptions = Object.assign({}, defaultOptions, options)\n\n\tassert(options, {\n\t\tclient: Required(instanceOf(metro.client().constructor)), // required because it is set in defaultOptions\n\t\tclient_info: Required(),\n\t\tissuer: Required(validURL),\n\t\toauth2: Optional({}),\n\t\topenid_configuration: Optional()\n\t})\n\n\tif (!options.store) {\n\t\toptions.store = oidcStore(options.issuer)\n\t}\n\tif (!options.openid_configuration && options.store.has('openid_configuration')) {\n\t\toptions.openid_configuration = options.store.get('openid_configuration')\n\t}\n\tif (!options.client_info?.client_id && options.store.has('client_info')) {\n\t\toptions.client_info = options.store.get('client_info')\n\t}\n\n\treturn async (req, next) => {\n\t\tlet res\n\t\tif (!options.force_authorization) {\n\t\t\ttry {\n\t\t\t\tres = await next(req)\n\t\t\t} catch(err) {\n\t\t\t\tif (res.status!=401 && res.status!=403) {\n\t\t\t\t\tthrow err\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (res.ok || (res.status!=401 && res.status!=403)) {\n\t\t\t\treturn res\n\t\t\t}\n\t\t}\n\t\tif (!options.openid_configuration) {\n\t\t\toptions.openid_configuration = await discover({\n\t\t\t\tissuer: options.issuer\n\t\t\t})\n\t\t\toptions.store.set('openid_configuration', options.openid_configuration)\n\t\t}\n\n\t\tif (!options.client_info?.client_id) {\n\t\t\tif (!options.openid_configuration.registration_endpoint) {\n\t\t\t\tthrow metro.metroError('metro.oidcmw: Error: issuer '+options.issuer+' does not support dynamic client registration, but you haven\\'t specified a client_id')\n\t\t\t}\n\t\t\toptions.client_info = await register({\n\t\t\t\tregistration_endpoint: options.openid_configuration.registration_endpoint,\n\t\t\t\tclient_info: options.client_info\n\t\t\t})\n\t\t\toptions.store.set('client_info', options.client_info)\n\t\t}\n\n\t\t// now initialize an oauth2 client stack, using options.client as default\n\t\t// with forceAuthentication: true\n\t\tconst scope = options.scope || 'openid'\n\n\t\tconst oauth2Options = Object.assign(\n\t\t\t{\n\t\t\t\tsite: options.issuer,\n\t\t\t\tclient: options.client,\n\t\t\t\tforce_authorization: true,\n\t\t\t\tauthorize_callback: options.authorize_callback,\n\t\t\t\toauth2_configuration: {\n\t\t\t\t\tclient_id: options.client_info?.client_id,\n\t\t\t\t\tclient_secret: options.client_info?.client_secret,\n\t\t\t\t\tgrant_type: 'authorization_code',\n\t\t\t\t\tresponse_type: 'code',\n\t\t\t\t\tresponse_mode: 'query',\n\t\t\t\t\tauthorization_endpoint: options.openid_configuration.authorization_endpoint,\n\t\t\t\t\ttoken_endpoint: options.openid_configuration.token_endpoint,\n\t\t\t\t\tscope, //FIXME: should only use scopes supported by server\n\t\t\t\t\tredirect_uri: options.client_info.redirect_uris[0]\n\t\t\t\t}\n\t\t\t}\n\t\t\t//...\n\t\t)\n\t\t\n\t\tconst storeIdToken = async (req, next) => {\n\t\t\tconst res = await next(req)\n\t\t\tconst contentType = res.headers.get('content-type')\n\t\t\tif (contentType?.startsWith('application/json')) {\n\t\t\t\t//FIXME: check that this is actually the token endpoint\n\t\t\t\tlet id_token = res.data?.id_token\n\t\t\t\tif (!id_token) {\n\t\t\t\t\tconst res2 = res.clone() // otherwise res.body can't be read again\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlet data = await res2.json()\n\t\t\t\t\t\tif (data && data.id_token) {\n\t\t\t\t\t\t\tid_token = data.id_token\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t// ignore errors\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (id_token) {\n\t\t\t\t\toptions.store.set('id_token', id_token)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn res\n\t\t}\n\n\t\tlet oauth2client = options.client.with(options.issuer).with(storeIdToken)\n\n\t\tif (options.use_dpop) {\n\t\t\tconst dpopOptions = {\n\t\t\t\tsite: options.issuer,\n\t\t\t\tauthorization_endpoint: options.openid_configuration.authorization_endpoint,\n\t\t\t\ttoken_endpoint: options.openid_configuration.token_endpoint,\n\t\t\t\tdpop_signing_alg_values_supported: options.openid_configuration.dpop_signing_alg_values_supported\n\t\t\t}\n\t\t\toauth2client = oauth2client.with(dpopmw(dpopOptions)) // add DPoP headers in requests with Authorization headers\n\t\t\toauth2Options.client = oauth2client // make sure oath2 token request use dpop\n\t\t}\n\n\t\toauth2client = oauth2client.with(oauth2mw(oauth2Options))\n\n\t\tres = await oauth2client.fetch(req)\n\n\t\treturn res\n\t}\n\n}\n\nexport function isRedirected() {\n\treturn oauth2.isRedirected()\n}\n\nexport function idToken(options) {\n\tif (!options.store) {\n\t\tif (!options.issuer) {\n\t\t\tthrow metro.metroError('Must supply options.issuer or options.store to get the id_token')\n\t\t}\n\t\toptions.store = oidcStore(options.issuer)\n\t}\n\treturn options.store.get('id_token')\n}\n", "import metro from '@muze-nl/metro'\nimport oauth2 from '@muze-nl/metro-oauth2'\nimport oidcDiscover from './oidc.discovery.mjs'\nimport oidcRegister from './oidc.register.mjs'\nimport oidcmw, {isRedirected, idToken} from './oidcmw.mjs'\n\nconst oidc = {\n\toidcmw,\n\tdiscover: oidcDiscover,\n\tregister: oidcRegister,\n\tisRedirected,\n\tidToken\n}\n\nif (!globalThis.metro.oidc) {\n\tglobalThis.metro.oidc = oidc\n}\n\nexport default oidc", "export default function oldm(options) {\n\treturn new Context(options)\n}\n\nexport const rdfType = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'\n\nexport const prefixes = {\n\trdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n\tsolid: 'http://www.w3.org/ns/solid/terms#',\n\tschema: 'http://schema.org/',\n vcard: 'http://www.w3.org/2006/vcard/ns#'\n}\n\nexport function one(values, whichOne='last')\n{\n\tlet result = values\n\tif (Array.isArray(values)) {\n\t\tif (whichOne=='last') {\n\t\t\tresult = values[values.length-1]\n\t\t} else if (whichOne=='first') {\n\t\t\tresult = values[0]\n\t\t} else if (typeof whichOne=='function') {\n\t\t\tresult = whichOne(values)\t\t\t\n\t\t} else {\n\t\t\tthrow new Error('Unknown value for whichOne parameter')\n\t\t}\n\t}\n\treturn result\n}\n\nexport function many(values)\n{\n\tif (Array.isArray(values)) {\n\t\treturn values\n\t}\n\tif (values == null) {\n\t\treturn []\n\t}\n\treturn [values]\n}\n\nexport function first(...values)\n{\n\tfor (const value of values) {\n\t\tif (value!==null && value!==undefined) {\n\t\t\treturn value\n\t\t}\n\t}\n\treturn null\n}\n\nexport class Context {\n\tconstructor(options) {\n\t\tthis.prefixes = {...prefixes, ...options?.prefixes}\n\t\tif (!this.prefixes['xsd']) {\n\t\t\tthis.prefixes['xsd'] = 'http://www.w3.org/2001/XMLSchema#'\n\t\t}\n\t\tthis.parser = options?.parser\n\t\tthis.writer = options?.writer\n\t\tthis.sources = Object.create(null)\n//\t\tthis.subjects = Object.create(null) // or use a proxy here? should contain all subjects from all sources, merged, readonly\n\t\tthis.separator = options?.separator ?? '$'\n\t}\n\n\tparse(input, url, type) {\n\t\tconst {quads, prefixes} = this.parser(input, url, type)\n\t\tif (prefixes) {\n\t\t\tfor (let prefix in prefixes) {\n\t\t\t\tlet prefixURL = prefixes[prefix]\n\t\t\t\tif (prefixURL.match(/^http(s?):\\/\\/$/i)) {\n\t\t\t\t\tprefixURL += url.substring(prefixURL.length)\n\t\t\t\t} else try {\n\t\t\t\t\tprefixURL = new URL(prefixes[prefix], url).href\n\t\t\t\t} catch(err) {\n\t\t\t\t\tconsole.error('Could not parse prefix', prefixes[prefix], err.message)\n\t\t\t\t}\n\n\t\t\t\tif (!this.prefixes[prefix]) {\n\t\t\t\t\tthis.prefixes[prefix] = prefixURL\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.sources[url] = new Graph(quads, url, type, prefixes, this)\n\t\treturn this.sources[url]\n\t}\n\n\tsetType(literal, shortType) {\n\t\tif (!shortType) {\n\t\t\treturn literal\n\t\t}\n\t\tif (typeof literal == 'string') {\n\t\t\tliteral = new String(literal)\n\t\t} else if (typeof result == 'number') {\n\t\t\tliteral = new Number(literal)\n\t\t}\n\t\tif (typeof literal !== 'object') {\n\t\t\tthrow new Error('cannot set type on ',literal,shortType)\n\t\t}\n\t\tliteral.type = shortType\n\t\treturn literal\n\t}\n\n\tgetType(literal) {\n\t\tif (literal && typeof literal == 'object') {\n\t\t\treturn literal.type\n\t\t}\n\t\treturn null\n\t}\n}\n\nexport class Graph {\n\t#blankNodes = Object.create(null)\n\n\tconstructor(quads, url, mimetype, prefixes, context) {\n\t\tthis.mimetype = mimetype\n\t\tthis.url = url\n\t\tthis.prefixes = prefixes\n\t\tthis.context = context\n\t\tthis.subjects = Object.create(null)\n\t\tfor (let quad of quads) {\n\t\t\tlet subject\n\t\t\tif (quad.subject.termType=='BlankNode') {\n\t\t\t\tlet shortPred = this.shortURI(quad.predicate.id,':')\n\t\t\t\tlet shortObj\n\t\t\t\tswitch(shortPred) {\n\t\t\t\t\tcase 'rdf:first':\n\t\t\t\t\t\tsubject = this.addCollection(quad.subject.id)\n\t\t\t\t\t\tshortObj = this.shortURI(quad.object.id, ':')\n\t\t\t\t\t\tif (shortObj!='rdf:nil') {\n\t\t\t\t\t\t\tconst value = this.getValue(quad.object)\n\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\tsubject.push(value)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t\tcase 'rdf:rest':\n\t\t\t\t\t\tthis.#blankNodes[quad.object.id] = this.#blankNodes[quad.subject.id]\n\t\t\t\t\tcontinue\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsubject = this.addBlankNode(quad.subject.id)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsubject = this.addNamedNode(quad.subject.id)\n\t\t\t}\n\t\t\tsubject.addPredicate(quad.predicate.id, quad.object)\n\t\t}\n\t\tif (this.subjects[url]) {\n\t\t\tthis.primary = this.subjects[url]\n\t\t} else {\n\t\t\tthis.primary = null\n\t\t}\n\t\tObject.defineProperty(this, 'data', {\n\t\t\tget() {\n\t\t\t\treturn Object.values(this.subjects)\n\t\t\t}\n\t\t})\n\t}\n\n\taddNamedNode(uri) {\n\t\t// make sure any relative uri subject ids are fully qualified\n\t\tlet absURI = new URL(uri, this.url).href\n\t\tif (!this.subjects[absURI]) {\n\t\t\tthis.subjects[absURI] = new NamedNode(absURI, this)\n\t\t}\n\t\treturn this.subjects[absURI]\n\t}\n\n\taddBlankNode(id) {\n\t\tif (!this.#blankNodes[id]) {\n\t\t\tthis.#blankNodes[id] = new BlankNode(this)\n\t\t}\n\t\treturn this.#blankNodes[id]\n\t}\n\n\taddCollection(id) {\n\t\tif (!this.#blankNodes[id]) {\n\t\t\tthis.#blankNodes[id] = new Collection(this)\n\t\t}\n\t\treturn this.#blankNodes[id]\n\t}\n\n\twrite() {\n\t\treturn this.context.writer(this)\n\t}\n\n\tget(shortID) {\n\t\treturn this.subjects[this.fullURI(shortID)]\n\t}\n\n\tfullURI(shortURI, separator=null) {\n\t\tif (!separator) {\n\t\t\tseparator = this.context.separator\n\t\t}\n\t\tconst [prefix, path] = shortURI.split(separator)\n\t\tif (path) {\n\t\t\treturn this.prefixes[prefix]+path \n\t\t}\n\t\treturn shortURI\n\t}\n\n\tshortURI(fullURI, separator=null) {\n\t\tif (!separator) {\n\t\t\tseparator = this.context.separator\n\t\t}\n\t\tfor (let prefix in this.context.prefixes) {\n\t\t\tif (fullURI.startsWith(this.context.prefixes[prefix])) {\n\t\t\t\treturn prefix + separator + fullURI.substring(this.context.prefixes[prefix].length)\n\t\t\t}\n\t\t}\n\t\tif (this.url && fullURI.startsWith(this.url)) {\n\t\t\treturn fullURI.substring(this.url.length)\n\t\t}\n\t\treturn fullURI\n\t}\n\n\t/**\n\t * This sets the type of a literal, usually one of the xsd types\n\t */\n\tsetType(literal, type) {\n\t\tconst shortType = this.shortURI(type)\n\t\treturn this.context.setType(literal, shortType)\n\t}\n\n\t/**\n\t * This returns the type of a literal, or null\n\t */\n\tgetType(literal) {\n\t\treturn this.context.getType(literal)\n\t}\n\n\tsetLanguage(literal, language) {\n\t\tif (typeof literal == 'string') {\n\t\t\tliteral = new String(literal)\n\t\t} else if (typeof result == 'number') {\n\t\t\tliteral = new Number(literal)\n\t\t}\n\t\tif (typeof literal !== 'object') {\n\t\t\tthrow new Error('cannot set language on ',literal)\n\t\t}\n\t\tliteral.language = language\n\t\treturn literal\n\t}\n\n\tgetValue(object) {\n\t\tlet result\n\t\tif (object.termType=='Literal') {\n\t\t\tresult = object.value\n\t\t\tlet datatype = object.datatype?.id\n\t\t\tif (datatype) {\n\t\t\t\tresult = this.setType(result, datatype)\n\t\t\t}\n\t\t\tlet language = object.language\n\t\t\tif (language) {\n\t\t\t\tresult = this.setLanguage(result, language)\n\t\t\t}\n\t\t} else if (object.termType=='BlankNode') {\n\t\t\tresult = this.addBlankNode(object.id)\n\t\t} else {\n\t\t\tresult = this.addNamedNode(object.id)\n\t\t}\n\t\treturn result\n\t}\n\n\n}\n\nexport class BlankNode {\n\n\tconstructor(graph) {\n\t\tObject.defineProperty(this, 'graph', {\n\t\t\tvalue: graph,\n\t\t\twritable: false,\n\t\t\tenumerable: false\n\t\t})\n\t}\n\n\taddPredicate(predicate, object) {\n\t\tif (predicate.id) {\n\t\t\tpredicate = predicate.id\n\t\t}\n\t\tif (predicate==rdfType) {\n\t\t\tlet type = this.graph.shortURI(object.id)\n\t\t\tthis.addType(type)\n\t\t} else {\n\t\t\tconst value = this.graph.getValue(object)\n\t\t\tpredicate = this.graph.shortURI(predicate)\n\t\t\tif (!this[predicate]) {\n\t\t\t\tthis[predicate] = value\n\t\t\t} else if (Array.isArray(this[predicate])) {\n\t\t\t\tthis[predicate].push(value)\n\t\t\t} else {\n\t\t\t\tthis[predicate] = [ this[predicate], value]\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Adds a rdfType value, stored in this.a\n\t * Subjects can have more than one type (or class), unlike literals\n\t * The type value can be any URI, xsdTypes are unexpected here\n\t */\n\taddType(type) {\n\t\tif (!this.a) {\n\t\t\tthis.a = type\n\t\t} else {\n\t\t\tif (!Array.isArray(this.a)) {\n\t\t\t\tthis.a = [ this.a ]\n\t\t\t}\n\t\t\tthis.a.push(type)\n\t\t}\n\t}\n}\n\nexport class NamedNode extends BlankNode {\n\tconstructor(id, graph) {\n\t\tsuper(graph)\n\t\tObject.defineProperty(this, 'id', {\n\t\t\tvalue: id,\n\t\t\twritable: false,\n\t\t\tenumerable: true\n\t\t})\n\t}\n}\n\nexport class Collection extends Array {\n\n\tconstructor(id, graph) {\n\t\tsuper()\n\t\tObject.defineProperty(this, 'graph', {\n\t\t\tvalue: graph,\n\t\t\twritable: false,\n\t\t\tenumerable: false\n\t\t})\n\t}\n\n}", "import {rdfType, NamedNode, BlankNode, Collection} from './oldm.mjs'\nimport n3 from 'n3'\n\nexport const n3Parser = (input, uri, type) => {\n\tconst parser = new n3.Parser({\n baseIRI: uri,\n blankNodePrefix: '',\n format: type\n })\n let prefixes = Object.create(null) // clean object without prototype\n const quads = parser.parse(input, null, (prefix,url) => {\n prefixes[prefix] = url.id\n })\n return { quads, prefixes }\n}\n\n/**\n * Loops over all subjects in a source\n * and writes quads using n3.Writer\n * NamedNode objects are also in the subjects list, so\n * only need their object.id in a quad\n * BlankNodes use writer.blank, lists (collection) writer.list\n * blank expects an array of [predicate, object] pairs\n * so only write object blanks, lists and literals, use object.id for the rest\n */\nexport const n3Writer = (source) => {\n\treturn new Promise((resolve, reject) => {\n\t\tconst writer = new n3.Writer({\n\t\t\tformat: source.type,\n\t\t\tprefixes: {...source.prefixes}\n\t\t})\n\t\tconst xsd = source.prefixes.xsd\n\t\tconst {quad, namedNode, literal, blankNode} = n3.DataFactory\n\n\t\tconst writeClassNames = (id, subject) => {\n\t\t\tlet classNames = subject.a\n\t\t\tif (!Array.isArray(classNames)) {\n\t\t\t\tclassNames = [ classNames ]\n\t\t\t}\n\t\t\tif (classNames?.length) {\n\t\t\t\tfor(let name of classNames) {\n\t\t\t\t\tname = source.fullURI(name)\n\t\t\t\t\twriter.addQuad(quad(\n\t\t\t\t\t\tnamedNode(id),\n\t\t\t\t\t\tnamedNode(rdfType),\n\t\t\t\t\t\tnamedNode(name)\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\n\t\tconst writeProperties = (id, subject) => {\n\t\t\tif (!subject) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tlet preds = getPredicates(subject)\n\t\t\tfor (let pred of preds) {\n\t\t\t\tif (pred.predicate.id=='id' || pred.predicate.id=='a') {\n\t\t\t\t\t/* these are handled explicitly elsewhere */\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (!Array.isArray(pred.object)) {\n\t\t\t\t\tpred.object = [ pred.object ]\n\t\t\t\t}\n\t\t\t\tfor (let o of pred.object ) {\n\t\t\t\t\twriter.addQuad(quad(\n\t\t\t\t\t\tnamedNode(id),\n\t\t\t\t\t\tpred.predicate,\n\t\t\t\t\t\to\n\t\t\t\t\t))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst getPredicates = (object) => {\n\t\t\tlet preds = []\n\t\t\tObject.entries(object).forEach(entry => {\n\t\t\t\tconst predicate = entry[0]\n\t\t\t\tlet object = entry[1]\n\t\t\t\tconst fullPred = source.fullURI(predicate)\n\t\t\t\tlet pred = {\n\t\t\t\t\tpredicate: namedNode(fullPred)\n\t\t\t\t}\n\t\t\t\tif (object instanceof Collection) {\n\t\t\t\t\tpred.object = getCollection(object)\n\t\t\t\t} else if (Array.isArray(object)) {\n\t\t\t\t\tpred.object = getArray(object)\n\t\t\t\t} else if (object instanceof NamedNode) {\n\t\t\t\t\tpred.object = namedNode(object.id)\n\t\t\t\t} else if (object instanceof BlankNode) {\n\t\t\t\t\tpred.object = getBlankNode(object)\n\t\t\t\t} else if (isLiteral(object)) {\n\t\t\t\t\tpred.object = getLiteral(object)\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log('oldm-ns: encountered unknown object', object, predicate)\n\t\t\t\t}\n\t\t\t\tpreds.push(pred)\n\t\t\t})\n\t\t\treturn preds\n\t\t}\n\n\t\tconst getLiteral = (object) => {\n\t\t\tlet type = source.getType(object) || undefined\n\t\t\tif (type) {\n\t\t\t\tif (type == xsd+source.context.separator+'string' \n\t\t\t\t\t|| type == xsd+source.context.separator+'number') {\n\t\t\t\t\ttype = undefined\n\t\t\t\t} else {\n\t\t\t\t\ttype = source.fullURI(type)\n\t\t\t\t}\n\t\t\t\ttype = namedNode(type)\n\t\t\t} else {\n\t\t\t\tlet language = object?.language\n\t\t\t\tif (language) {\n\t\t\t\t\ttype = language // is automatically detected as language by literal()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (object instanceof String) {\n\t\t\t\tobject = ''+object\n\t\t\t} else if (object instanceof Number) {\n\t\t\t\tobject = +object\n\t\t\t}\n\t\t\treturn literal(object, type)\n\t\t}\n\n\t\tconst isLiteral = (value) => {\n\t\t\treturn (\n\t\t\t\tvalue instanceof String \n\t\t\t\t|| value instanceof Number\n\t\t\t\t|| typeof value == 'boolean' \n\t\t\t\t|| typeof value == 'string' \n\t\t\t\t|| typeof value == 'number'\n\t\t\t)\n\t\t}\n\n\t\tconst getCollection = (object) => {\n\t\t\tlet list = []\n\t\t\tfor (let value of object) {\n\t\t\t\tif (isLiteral(value)) {\n\t\t\t\t\tlist.push(getLiteral(value))\n\t\t\t\t} else if (value.id) {\n\t\t\t\t\tlist.push(namedNode(value.id))\n\t\t\t\t} else {\n\t\t\t\t\tlist.push(getBlankNode(value))\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn writer.list(list)\n\t\t}\n\n\n\t\tconst getBlankNode = (object) => {\n\t\t\treturn writer.blank(getPredicates(object))\n\t\t}\n\n\t\tconst getArray = (id, object) => {\n\t\t\t// array is a list of objects\n\t\t\t// either object.id (named node)\n\t\t\t// literal\n\t\t\t// blank\n\t\t\t// or list\n\t\t\tlet list = []\n\t\t\tfor (const o of object) {\n\t\t\t\tif (isLiteral(o)) {\n\t\t\t\t\tlist.push(getLiteral(o))\n\t\t\t\t} else if (o instanceof NamedNode) {\n\t\t\t\t\tlist.push(namedNode(o.id))\n\t\t\t\t} else if (o instanceof BlankNode) {\n\t\t\t\t\tlist.push(getBlankNode(o))\n\t\t\t\t} else if (o instanceof Collection) {\n\t\t\t\t\tlist.push(getCollection(o))\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn list\n\t\t}\n\n\t\tObject.entries(source.subjects).forEach(([id,subject]) => {\n\t\t\tid = source.shortURI(id, ':')\n\t\t\t\n\t\t\twriteClassNames(id, subject)\n\n\t\t\twriteProperties(id, subject)\t\t\t\n\t\t})\n\n\t\twriter.end((error, result) => {\n\t\t\tif (result) {\n\t\t\t\tresolve(result)\n\t\t\t} else {\n\t\t\t\treject(error)\n\t\t\t}\n\t\t})\n\t})\n}\n", "// **N3Lexer** tokenizes N3 documents.\nimport { Buffer } from 'buffer';\nimport namespaces from './IRIs';\n\nconst { xsd } = namespaces;\n\n// Regular expression and replacement string to escape N3 strings\nconst escapeSequence = /\\\\u([a-fA-F0-9]{4})|\\\\U([a-fA-F0-9]{8})|\\\\([^])/g;\nconst escapeReplacements = {\n '\\\\': '\\\\', \"'\": \"'\", '\"': '\"',\n 'n': '\\n', 'r': '\\r', 't': '\\t', 'f': '\\f', 'b': '\\b',\n '_': '_', '~': '~', '.': '.', '-': '-', '!': '!', '$': '$', '&': '&',\n '(': '(', ')': ')', '*': '*', '+': '+', ',': ',', ';': ';', '=': '=',\n '/': '/', '?': '?', '#': '#', '@': '@', '%': '%',\n};\nconst illegalIriChars = /[\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]/;\n\nconst lineModeRegExps = {\n _iri: true,\n _unescapedIri: true,\n _simpleQuotedString: true,\n _langcode: true,\n _dircode: true,\n _blank: true,\n _newline: true,\n _comment: true,\n _whitespace: true,\n _endOfFile: true,\n};\nconst invalidRegExp = /$0^/;\n\n// ## Constructor\nexport default class N3Lexer {\n constructor(options) {\n // ## Regular expressions\n // It's slightly faster to have these as properties than as in-scope variables\n this._iri = /^<((?:[^ <>{}\\\\]|\\\\[uU])+)>[ \\t]*/; // IRI with escape sequences; needs sanity check after unescaping\n this._unescapedIri = /^<([^\\x00-\\x20<>\\\\\"\\{\\}\\|\\^\\`]*)>[ \\t]*/; // IRI without escape sequences; no unescaping\n this._simpleQuotedString = /^\"([^\"\\\\\\r\\n]*)\"(?=[^\"])/; // string without escape sequences\n this._simpleApostropheString = /^'([^'\\\\\\r\\n]*)'(?=[^'])/;\n this._langcode = /^@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9])/i;\n this._dircode = /^--(ltr)|(rtl)/;\n this._prefix = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:(?=[#\\s<])/;\n this._prefixed = /^((?:[A-Za-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)?:((?:(?:[0-:A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])(?:(?:[\\.\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~])*(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff]|%[0-9a-fA-F]{2}|\\\\[!#-\\/;=?\\-@_~]))?)?)(?:[ \\t]+|(?=\\.?[,;!\\^\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._variable = /^\\?(?:(?:[A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:[\\-0-:A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?=[.,;!\\^\\s#()\\[\\]\\{\\}\"'<>])/;\n this._blank = /^_:((?:[0-9A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])(?:\\.?[\\-0-9A-Z_a-z\\xb7\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u203f\\u2040\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd]|[\\ud800-\\udb7f][\\udc00-\\udfff])*)(?:[ \\t]+|(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>]))/;\n this._number = /^[\\-+]?(?:(\\d+\\.\\d*|\\.?\\d+)[eE][\\-+]?|\\d*(\\.)?)\\d+(?=\\.?[,;:\\s#()\\[\\]\\{\\}\"'<>])/;\n this._boolean = /^(?:true|false)(?=[.,;\\s#()\\[\\]\\{\\}\"'<>])/;\n this._atKeyword = /^@[a-z]+(?=[\\s#<:])/i;\n this._keyword = /^(?:PREFIX|BASE|VERSION|GRAPH)(?=[\\s#<])/i;\n this._shortPredicates = /^a(?=[\\s#()\\[\\]\\{\\}\"'<>])/;\n this._newline = /^[ \\t]*(?:#[^\\n\\r]*)?(?:\\r\\n|\\n|\\r)[ \\t]*/;\n this._comment = /#([^\\n\\r]*)/;\n this._whitespace = /^[ \\t]+/;\n this._endOfFile = /^(?:#[^\\n\\r]*)?$/;\n options = options || {};\n\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n\n // In line mode (N-Triples or N-Quads), only simple features may be parsed\n if (this._lineMode = !!options.lineMode) {\n this._n3Mode = false;\n // Don't tokenize special literals\n for (const key in this) {\n if (!(key in lineModeRegExps) && this[key] instanceof RegExp)\n this[key] = invalidRegExp;\n }\n }\n // When not in line mode, enable N3 functionality by default\n else {\n this._n3Mode = options.n3 !== false;\n }\n // Don't output comment tokens by default\n this.comments = !!options.comments;\n // Cache the last tested closing position of long literals\n this._literalClosingPos = 0;\n }\n\n // ## Private methods\n\n // ### `_tokenizeToEnd` tokenizes as for as possible, emitting tokens through the callback\n _tokenizeToEnd(callback, inputFinished) {\n // Continue parsing as far as possible; the loop will return eventually\n let input = this._input;\n let currentLineLength = input.length;\n while (true) {\n // Count and skip whitespace lines\n let whiteSpaceMatch, comment;\n while (whiteSpaceMatch = this._newline.exec(input)) {\n // Try to find a comment\n if (this.comments && (comment = this._comment.exec(whiteSpaceMatch[0])))\n emitToken('comment', comment[1], '', this._line, whiteSpaceMatch[0].length);\n // Advance the input\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n currentLineLength = input.length;\n this._line++;\n }\n // Skip whitespace on current line\n if (!whiteSpaceMatch && (whiteSpaceMatch = this._whitespace.exec(input)))\n input = input.substr(whiteSpaceMatch[0].length, input.length);\n\n // Stop for now if we're at the end\n if (this._endOfFile.test(input)) {\n // If the input is finished, emit EOF\n if (inputFinished) {\n // Try to find a final comment\n if (this.comments && (comment = this._comment.exec(input)))\n emitToken('comment', comment[1], '', this._line, input.length);\n input = null;\n emitToken('eof', '', '', this._line, 0);\n }\n return this._input = input;\n }\n\n // Look for specific token types based on the first character\n const line = this._line, firstChar = input[0];\n let type = '', value = '', prefix = '',\n match = null, matchLength = 0, inconclusive = false;\n switch (firstChar) {\n case '^':\n // We need at least 3 tokens lookahead to distinguish ^^<IRI> and ^^pre:fixed\n if (input.length < 3)\n break;\n // Try to match a type\n else if (input[1] === '^') {\n this._previousMarker = '^^';\n // Move to type IRI or prefixed name\n input = input.substr(2);\n if (input[0] !== '<') {\n inconclusive = true;\n break;\n }\n }\n // If no type, it must be a path expression\n else {\n if (this._n3Mode) {\n matchLength = 1;\n type = '^';\n }\n break;\n }\n // Fall through in case the type is an IRI\n case '<':\n // Try to find a full IRI without escape sequences\n if (match = this._unescapedIri.exec(input))\n type = 'IRI', value = match[1];\n // Try to find a full IRI with escape sequences\n else if (match = this._iri.exec(input)) {\n value = this._unescape(match[1]);\n if (value === null || illegalIriChars.test(value))\n return reportSyntaxError(this);\n type = 'IRI';\n }\n // Try to find a triple term\n else if (input.length > 2 && input[1] === '<' && input[2] === '(')\n type = '<<(', matchLength = 3;\n // Try to find a reified triple\n else if (!this._lineMode && input.length > (inputFinished ? 1 : 2) && input[1] === '<')\n type = '<<', matchLength = 2;\n // Try to find a backwards implication arrow\n else if (this._n3Mode && input.length > 1 && input[1] === '=') {\n matchLength = 2;\n if (this._isImpliedBy) type = 'abbreviation', value = '<';\n else type = 'inverse', value = '>';\n }\n break;\n\n case '>':\n // Try to find a reified triple\n if (input.length > 1 && input[1] === '>')\n type = '>>', matchLength = 2;\n break;\n\n case '_':\n // Try to find a blank node. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a blank node.\n // Therefore, try inserting a space if we're at the end of the input.\n if ((match = this._blank.exec(input)) ||\n inputFinished && (match = this._blank.exec(`${input} `)))\n type = 'blank', prefix = '_', value = match[1];\n break;\n\n case '\"':\n // Try to find a literal without escape sequences\n if (match = this._simpleQuotedString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n break;\n\n case \"'\":\n if (!this._lineMode) {\n // Try to find a literal without escape sequences\n if (match = this._simpleApostropheString.exec(input))\n value = match[1];\n // Try to find a literal wrapped in three pairs of quotes\n else {\n ({ value, matchLength } = this._parseLiteral(input));\n if (value === null)\n return reportSyntaxError(this);\n }\n if (match !== null || matchLength !== 0) {\n type = 'literal';\n this._literalClosingPos = 0;\n }\n }\n break;\n\n case '?':\n // Try to find a variable\n if (this._n3Mode && (match = this._variable.exec(input)))\n type = 'var', value = match[0];\n break;\n\n case '@':\n // Try to find a language code\n if (this._previousMarker === 'literal' && (match = this._langcode.exec(input)) && match[1] !== 'version')\n type = 'langcode', value = match[1];\n // Try to find a keyword\n else if (match = this._atKeyword.exec(input))\n type = match[0];\n break;\n\n case '.':\n // Try to find a dot as punctuation\n if (input.length === 1 ? inputFinished : (input[1] < '0' || input[1] > '9')) {\n type = '.';\n matchLength = 1;\n break;\n }\n // Fall through to numerical case (could be a decimal dot)\n\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n case '+':\n case '-':\n if (input[1] === '-') {\n // Try to find a direction code\n if (this._previousMarker === 'langcode' && (match = this._dircode.exec(input)))\n type = 'dircode', matchLength = 2, value = (match[1] || match[2]), matchLength = value.length + 2;\n break;\n }\n\n // Try to find a number. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a number.\n // Therefore, try inserting a space if we're at the end of the input.\n if (match = this._number.exec(input) ||\n inputFinished && (match = this._number.exec(`${input} `))) {\n type = 'literal', value = match[0];\n prefix = (typeof match[1] === 'string' ? xsd.double :\n (typeof match[2] === 'string' ? xsd.decimal : xsd.integer));\n }\n break;\n\n case 'B':\n case 'b':\n case 'p':\n case 'P':\n case 'G':\n case 'g':\n case 'V':\n case 'v':\n // Try to find a SPARQL-style keyword\n if (match = this._keyword.exec(input))\n type = match[0].toUpperCase();\n else\n inconclusive = true;\n break;\n\n case 'f':\n case 't':\n // Try to match a boolean\n if (match = this._boolean.exec(input))\n type = 'literal', value = match[0], prefix = xsd.boolean;\n else\n inconclusive = true;\n break;\n\n case 'a':\n // Try to find an abbreviated predicate\n if (match = this._shortPredicates.exec(input))\n type = 'abbreviation', value = 'a';\n else\n inconclusive = true;\n break;\n\n case '=':\n // Try to find an implication arrow or equals sign\n if (this._n3Mode && input.length > 1) {\n type = 'abbreviation';\n if (input[1] !== '>')\n matchLength = 1, value = '=';\n else\n matchLength = 2, value = '>';\n }\n break;\n\n case '!':\n if (!this._n3Mode)\n break;\n case ')':\n if (!inputFinished && (input.length === 1 || (input.length === 2 && input[1] === '>'))) {\n // Don't consume yet, as it *could* become a triple term end.\n break;\n }\n // Try to find a triple term\n if (input.length > 2 && input[1] === '>' && input[2] === '>') {\n type = ')>>', matchLength = 3;\n break;\n }\n case ',':\n case ';':\n case '[':\n case ']':\n case '(':\n case '}':\n case '~':\n if (!this._lineMode) {\n matchLength = 1;\n type = firstChar;\n }\n break;\n case '{':\n // We need at least 2 tokens lookahead to distinguish \"{|\" and \"{ \"\n if (!this._lineMode && input.length >= 2) {\n // Try to find a quoted triple annotation start\n if (input[1] === '|')\n type = '{|', matchLength = 2;\n else\n type = firstChar, matchLength = 1;\n }\n break;\n case '|':\n // We need 2 tokens lookahead to parse \"|}\"\n // Try to find a quoted triple annotation end\n if (input.length >= 2 && input[1] === '}')\n type = '|}', matchLength = 2;\n break;\n\n default:\n inconclusive = true;\n }\n\n // Some first characters do not allow an immediate decision, so inspect more\n if (inconclusive) {\n // Try to find a prefix\n if ((this._previousMarker === '@prefix' || this._previousMarker === 'PREFIX') &&\n (match = this._prefix.exec(input)))\n type = 'prefix', value = match[1] || '';\n // Try to find a prefixed name. Since it can contain (but not end with) a dot,\n // we always need a non-dot character before deciding it is a prefixed name.\n // Therefore, try inserting a space if we're at the end of the input.\n else if ((match = this._prefixed.exec(input)) ||\n inputFinished && (match = this._prefixed.exec(`${input} `)))\n type = 'prefixed', prefix = match[1] || '', value = this._unescape(match[2]);\n }\n\n // A type token is special: it can only be emitted after an IRI or prefixed name is read\n if (this._previousMarker === '^^') {\n switch (type) {\n case 'prefixed': type = 'type'; break;\n case 'IRI': type = 'typeIRI'; break;\n default: type = '';\n }\n }\n\n // What if nothing of the above was found?\n if (!type) {\n // We could be in streaming mode, and then we just wait for more input to arrive.\n // Otherwise, a syntax error has occurred in the input.\n // One exception: error on an unaccounted linebreak (= not inside a triple-quoted literal).\n if (inputFinished || (!/^'''|^\"\"\"/.test(input) && /\\n|\\r/.test(input)))\n return reportSyntaxError(this);\n else\n return this._input = input;\n }\n\n // Emit the parsed token\n const length = matchLength || match[0].length;\n const token = emitToken(type, value, prefix, line, length);\n this.previousToken = token;\n this._previousMarker = type;\n\n // Advance to next part to tokenize\n input = input.substr(length, input.length);\n }\n\n // Emits the token through the callback\n function emitToken(type, value, prefix, line, length) {\n const start = input ? currentLineLength - input.length : currentLineLength;\n const end = start + length;\n const token = { type, value, prefix, line, start, end };\n callback(null, token);\n return token;\n }\n // Signals the syntax error through the callback\n function reportSyntaxError(self) { callback(self._syntaxError(/^\\S*/.exec(input)[0])); }\n }\n\n // ### `_unescape` replaces N3 escape codes by their corresponding characters\n _unescape(item) {\n let invalid = false;\n const replaced = item.replace(escapeSequence, (sequence, unicode4, unicode8, escapedChar) => {\n // 4-digit unicode character\n if (typeof unicode4 === 'string')\n return String.fromCharCode(Number.parseInt(unicode4, 16));\n // 8-digit unicode character\n if (typeof unicode8 === 'string') {\n let charCode = Number.parseInt(unicode8, 16);\n return charCode <= 0xFFFF ? String.fromCharCode(Number.parseInt(unicode8, 16)) :\n String.fromCharCode(0xD800 + ((charCode -= 0x10000) >> 10), 0xDC00 + (charCode & 0x3FF));\n }\n // fixed escape sequence\n if (escapedChar in escapeReplacements)\n return escapeReplacements[escapedChar];\n // invalid escape sequence\n invalid = true;\n return '';\n });\n return invalid ? null : replaced;\n }\n\n // ### `_parseLiteral` parses a literal into an unescaped value\n _parseLiteral(input) {\n // Ensure we have enough lookahead to identify triple-quoted strings\n if (input.length >= 3) {\n // Identify the opening quote(s)\n const opening = input.match(/^(?:\"\"\"|\"|'''|'|)/)[0];\n const openingLength = opening.length;\n\n // Find the next candidate closing quotes\n let closingPos = Math.max(this._literalClosingPos, openingLength);\n while ((closingPos = input.indexOf(opening, closingPos)) > 0) {\n // Count backslashes right before the closing quotes\n let backslashCount = 0;\n while (input[closingPos - backslashCount - 1] === '\\\\')\n backslashCount++;\n\n // An even number of backslashes (in particular 0)\n // means these are actual, non-escaped closing quotes\n if (backslashCount % 2 === 0) {\n // Extract and unescape the value\n const raw = input.substring(openingLength, closingPos);\n const lines = raw.split(/\\r\\n|\\r|\\n/).length - 1;\n const matchLength = closingPos + openingLength;\n // Only triple-quoted strings can be multi-line\n if (openingLength === 1 && lines !== 0 ||\n openingLength === 3 && this._lineMode)\n break;\n this._line += lines;\n return { value: this._unescape(raw), matchLength };\n }\n closingPos++;\n }\n this._literalClosingPos = input.length - openingLength + 1;\n }\n return { value: '', matchLength: 0 };\n }\n\n // ### `_syntaxError` creates a syntax error for the given issue\n _syntaxError(issue) {\n this._input = null;\n const err = new Error(`Unexpected \"${issue}\" on line ${this._line}.`);\n err.context = {\n token: undefined,\n line: this._line,\n previousToken: this.previousToken,\n };\n return err;\n }\n\n // ### Strips off any starting UTF BOM mark.\n _readStartingBom(input) {\n return input.startsWith('\\ufeff') ? input.substr(1) : input;\n }\n\n // ## Public methods\n\n // ### `tokenize` starts the transformation of an N3 document into an array of tokens.\n // The input can be a string or a stream.\n tokenize(input, callback) {\n this._line = 1;\n\n // If the input is a string, continuously emit tokens through the callback until the end\n if (typeof input === 'string') {\n this._input = this._readStartingBom(input);\n // If a callback was passed, asynchronously call it\n if (typeof callback === 'function')\n queueMicrotask(() => this._tokenizeToEnd(callback, true));\n // If no callback was passed, tokenize synchronously and return\n else {\n const tokens = [];\n let error;\n this._tokenizeToEnd((e, t) => e ? (error = e) : tokens.push(t), true);\n if (error) throw error;\n return tokens;\n }\n }\n // Otherwise, the input must be a stream\n else {\n this._pendingBuffer = null;\n if (typeof input.setEncoding === 'function')\n input.setEncoding('utf8');\n // Adds the data chunk to the buffer and parses as far as possible\n input.on('data', data => {\n if (this._input !== null && data.length !== 0) {\n // Prepend any previous pending writes\n if (this._pendingBuffer) {\n data = Buffer.concat([this._pendingBuffer, data]);\n this._pendingBuffer = null;\n }\n // Hold if the buffer ends in an incomplete unicode sequence\n if (data[data.length - 1] & 0x80) {\n this._pendingBuffer = data;\n }\n // Otherwise, tokenize as far as possible\n else {\n // Only read a BOM at the start\n if (typeof this._input === 'undefined')\n this._input = this._readStartingBom(typeof data === 'string' ? data : data.toString());\n else\n this._input += data;\n this._tokenizeToEnd(callback, false);\n }\n }\n });\n // Parses until the end\n input.on('end', () => {\n if (typeof this._input === 'string')\n this._tokenizeToEnd(callback, true);\n });\n input.on('error', callback);\n }\n }\n}\n", "const RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n XSD = 'http://www.w3.org/2001/XMLSchema#',\n SWAP = 'http://www.w3.org/2000/10/swap/';\n\nexport default {\n xsd: {\n decimal: `${XSD}decimal`,\n boolean: `${XSD}boolean`,\n double: `${XSD}double`,\n integer: `${XSD}integer`,\n string: `${XSD}string`,\n },\n rdf: {\n type: `${RDF}type`,\n nil: `${RDF}nil`,\n first: `${RDF}first`,\n rest: `${RDF}rest`,\n langString: `${RDF}langString`,\n dirLangString: `${RDF}dirLangString`,\n reifies: `${RDF}reifies`,\n },\n owl: {\n sameAs: 'http://www.w3.org/2002/07/owl#sameAs',\n },\n r: {\n forSome: `${SWAP}reify#forSome`,\n forAll: `${SWAP}reify#forAll`,\n },\n log: {\n implies: `${SWAP}log#implies`,\n isImpliedBy: `${SWAP}log#isImpliedBy`,\n },\n};\n", "// N3.js implementations of the RDF/JS core data types\n// See http://rdf.js.org/data-model-spec/\n\nimport namespaces from './IRIs';\n\nconst { rdf, xsd } = namespaces;\n\n// eslint-disable-next-line prefer-const\nlet DEFAULTGRAPH;\nlet _blankNodeCounter = 0;\n\nconst escapedLiteral = /^\"(.*\".*)(?=\"[^\"]*$)/;\n\n// ## DataFactory singleton\nconst DataFactory = {\n namedNode,\n blankNode,\n variable,\n literal,\n defaultGraph,\n quad,\n triple: quad,\n fromTerm,\n fromQuad,\n};\nexport default DataFactory;\n\n// ## Term constructor\nexport class Term {\n constructor(id) {\n this.id = id;\n }\n\n // ### The value of this term\n get value() {\n return this.id;\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through ids\n if (other instanceof Term)\n return this.id === other.id;\n // Otherwise, compare term type and value\n return !!other && this.termType === other.termType &&\n this.value === other.value;\n }\n\n // ### Implement hashCode for Immutable.js, since we implement `equals`\n // https://immutable-js.com/docs/v4.0.0/ValueObject/#hashCode()\n hashCode() {\n return 0;\n }\n\n // ### Returns a plain object representation of this term\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n };\n }\n}\n\n\n// ## NamedNode constructor\nexport class NamedNode extends Term {\n // ### The term type of this term\n get termType() {\n return 'NamedNode';\n }\n}\n\n// ## Literal constructor\nexport class Literal extends Term {\n // ### The term type of this term\n get termType() {\n return 'Literal';\n }\n\n // ### The text value of this literal\n get value() {\n return this.id.substring(1, this.id.lastIndexOf('\"'));\n }\n\n // ### The language of this literal\n get language() {\n // Find the last quotation mark (e.g., '\"abc\"@en-us')\n const id = this.id;\n let atPos = id.lastIndexOf('\"') + 1;\n const dirPos = id.lastIndexOf('--');\n // If \"@\" it follows, return the remaining substring; empty otherwise\n return atPos < id.length && id[atPos++] === '@' ? (dirPos > atPos ? id.substr(0, dirPos) : id).substr(atPos).toLowerCase() : '';\n }\n\n // ### The direction of this literal\n get direction() {\n // Find the last double dash after the closing quote (e.g., '\"abc\"@en-us--ltr')\n const id = this.id;\n const endPos = id.lastIndexOf('\"');\n const dirPos = id.lastIndexOf('--');\n return dirPos > endPos && dirPos + 2 < id.length ? id.substr(dirPos + 2).toLowerCase() : '';\n }\n\n // ### The datatype IRI of this literal\n get datatype() {\n return new NamedNode(this.datatypeString);\n }\n\n // ### The datatype string of this literal\n get datatypeString() {\n // Find the last quotation mark (e.g., '\"abc\"^^http://ex.org/types#t')\n const id = this.id, dtPos = id.lastIndexOf('\"') + 1;\n const char = dtPos < id.length ? id[dtPos] : '';\n // If \"^\" it follows, return the remaining substring\n return char === '^' ? id.substr(dtPos + 2) :\n // If \"@\" follows, return rdf:langString or rdf:dirLangString; xsd:string otherwise\n (char !== '@' ? xsd.string : (id.indexOf('--', dtPos) > 0 ? rdf.dirLangString : rdf.langString));\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both literals were created by this library,\n // equality can be computed through ids\n if (other instanceof Literal)\n return this.id === other.id;\n // Otherwise, compare term type, value, language, and datatype\n return !!other && !!other.datatype &&\n this.termType === other.termType &&\n this.value === other.value &&\n this.language === other.language &&\n ((this.direction === other.direction) || (this.direction === '' && !other.direction)) &&\n this.datatype.value === other.datatype.value;\n }\n\n toJSON() {\n return {\n termType: this.termType,\n value: this.value,\n language: this.language,\n direction: this.direction,\n datatype: { termType: 'NamedNode', value: this.datatypeString },\n };\n }\n}\n\n// ## BlankNode constructor\nexport class BlankNode extends Term {\n constructor(name) {\n super(`_:${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'BlankNode';\n }\n\n // ### The name of this blank node\n get value() {\n return this.id.substr(2);\n }\n}\n\nexport class Variable extends Term {\n constructor(name) {\n super(`?${name}`);\n }\n\n // ### The term type of this term\n get termType() {\n return 'Variable';\n }\n\n // ### The name of this variable\n get value() {\n return this.id.substr(1);\n }\n}\n\n// ## DefaultGraph constructor\nexport class DefaultGraph extends Term {\n constructor() {\n super('');\n return DEFAULTGRAPH || this;\n }\n\n // ### The term type of this term\n get termType() {\n return 'DefaultGraph';\n }\n\n // ### Returns whether this object represents the same term as the other\n equals(other) {\n // If both terms were created by this library,\n // equality can be computed through strict equality;\n // otherwise, compare term types.\n return (this === other) || (!!other && (this.termType === other.termType));\n }\n}\n\n// ## DefaultGraph singleton\nDEFAULTGRAPH = new DefaultGraph();\n\n// ### Constructs a term from the given internal string ID\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termFromId(id, factory, nested) {\n factory = factory || DataFactory;\n\n // Falsy value or empty string indicate the default graph\n if (!id)\n return factory.defaultGraph();\n\n // Identify the term type based on the first character\n switch (id[0]) {\n case '?':\n return factory.variable(id.substr(1));\n case '_':\n return factory.blankNode(id.substr(2));\n case '\"':\n // Shortcut for internal literals\n if (factory === DataFactory)\n return new Literal(id);\n // Literal without datatype or language\n if (id[id.length - 1] === '\"')\n return factory.literal(id.substr(1, id.length - 2));\n // Literal with datatype or language\n const endPos = id.lastIndexOf('\"', id.length - 1);\n let languageOrDatatype;\n if (id[endPos + 1] === '@') {\n languageOrDatatype = id.substr(endPos + 2);\n const dashDashIndex = languageOrDatatype.lastIndexOf('--');\n if (dashDashIndex > 0 && dashDashIndex < languageOrDatatype.length) {\n languageOrDatatype = {\n language: languageOrDatatype.substr(0, dashDashIndex),\n direction: languageOrDatatype.substr(dashDashIndex + 2),\n };\n }\n }\n else {\n languageOrDatatype = factory.namedNode(id.substr(endPos + 3));\n }\n return factory.literal(id.substr(1, endPos - 1),\n languageOrDatatype);\n case '[':\n id = JSON.parse(id);\n break;\n default:\n if (!nested || !Array.isArray(id)) {\n return factory.namedNode(id);\n }\n }\n return factory.quad(\n termFromId(id[0], factory, true),\n termFromId(id[1], factory, true),\n termFromId(id[2], factory, true),\n id[3] && termFromId(id[3], factory, true),\n );\n}\n\n// ### Constructs an internal string ID from the given term or ID string\n// The third 'nested' parameter of this function is to aid\n// with recursion over nested terms. It should not be used\n// by consumers of this library.\n// See https://github.com/rdfjs/N3.js/pull/311#discussion_r1061042725\nexport function termToId(term, nested) {\n if (typeof term === 'string')\n return term;\n if (term instanceof Term && term.termType !== 'Quad')\n return term.id;\n if (!term)\n return DEFAULTGRAPH.id;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return term.value;\n case 'BlankNode': return `_:${term.value}`;\n case 'Variable': return `?${term.value}`;\n case 'DefaultGraph': return '';\n case 'Literal': return `\"${term.value}\"${\n term.language ? `@${term.language}${term.direction ? `--${term.direction}` : ''}` :\n (term.datatype && term.datatype.value !== xsd.string ? `^^${term.datatype.value}` : '')}`;\n case 'Quad':\n const res = [\n termToId(term.subject, true),\n termToId(term.predicate, true),\n termToId(term.object, true),\n ];\n if (term.graph && term.graph.termType !== 'DefaultGraph') {\n res.push(termToId(term.graph, true));\n }\n return nested ? res : JSON.stringify(res);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\n\n// ## Quad constructor\nexport class Quad extends Term {\n constructor(subject, predicate, object, graph) {\n super('');\n this._subject = subject;\n this._predicate = predicate;\n this._object = object;\n this._graph = graph || DEFAULTGRAPH;\n }\n\n // ### The term type of this term\n get termType() {\n return 'Quad';\n }\n\n get subject() {\n return this._subject;\n }\n\n get predicate() {\n return this._predicate;\n }\n\n get object() {\n return this._object;\n }\n\n get graph() {\n return this._graph;\n }\n\n // ### Returns a plain object representation of this quad\n toJSON() {\n return {\n termType: this.termType,\n subject: this._subject.toJSON(),\n predicate: this._predicate.toJSON(),\n object: this._object.toJSON(),\n graph: this._graph.toJSON(),\n };\n }\n\n // ### Returns whether this object represents the same quad as the other\n equals(other) {\n return !!other && this._subject.equals(other.subject) &&\n this._predicate.equals(other.predicate) &&\n this._object.equals(other.object) &&\n this._graph.equals(other.graph);\n }\n}\nexport { Quad as Triple };\n\n// ### Escapes the quotes within the given literal\nexport function escapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"/g, '\"\"')}`);\n}\n\n// ### Unescapes the quotes within the given literal\nexport function unescapeQuotes(id) {\n return id.replace(escapedLiteral, (_, quoted) => `\"${quoted.replace(/\"\"/g, '\"')}`);\n}\n\n// ### Creates an IRI\nfunction namedNode(iri) {\n return new NamedNode(iri);\n}\n\n// ### Creates a blank node\nfunction blankNode(name) {\n return new BlankNode(name || `n3-${_blankNodeCounter++}`);\n}\n\n// ### Creates a literal\nfunction literal(value, languageOrDataType) {\n // Create a language-tagged string\n if (typeof languageOrDataType === 'string')\n return new Literal(`\"${value}\"@${languageOrDataType.toLowerCase()}`);\n\n // Create a language-tagged string with base direction\n if (languageOrDataType !== undefined && !('termType' in languageOrDataType)) {\n return new Literal(`\"${value}\"@${languageOrDataType.language.toLowerCase()}${languageOrDataType.direction ? `--${languageOrDataType.direction.toLowerCase()}` : ''}`);\n }\n\n // Automatically determine datatype for booleans and numbers\n let datatype = languageOrDataType ? languageOrDataType.value : '';\n if (datatype === '') {\n // Convert a boolean\n if (typeof value === 'boolean')\n datatype = xsd.boolean;\n // Convert an integer or double\n else if (typeof value === 'number') {\n if (Number.isFinite(value))\n datatype = Number.isInteger(value) ? xsd.integer : xsd.double;\n else {\n datatype = xsd.double;\n if (!Number.isNaN(value))\n value = value > 0 ? 'INF' : '-INF';\n }\n }\n }\n\n // Create a datatyped literal\n return (datatype === '' || datatype === xsd.string) ?\n new Literal(`\"${value}\"`) :\n new Literal(`\"${value}\"^^${datatype}`);\n}\n\n// ### Creates a variable\nfunction variable(name) {\n return new Variable(name);\n}\n\n// ### Returns the default graph\nfunction defaultGraph() {\n return DEFAULTGRAPH;\n}\n\n// ### Creates a quad\nfunction quad(subject, predicate, object, graph) {\n return new Quad(subject, predicate, object, graph);\n}\n\nexport function fromTerm(term) {\n if (term instanceof Term)\n return term;\n\n // Term instantiated with another library\n switch (term.termType) {\n case 'NamedNode': return namedNode(term.value);\n case 'BlankNode': return blankNode(term.value);\n case 'Variable': return variable(term.value);\n case 'DefaultGraph': return DEFAULTGRAPH;\n case 'Literal': return literal(term.value, term.language || term.datatype);\n case 'Quad': return fromQuad(term);\n default: throw new Error(`Unexpected termType: ${term.termType}`);\n }\n}\n\nexport function fromQuad(inQuad) {\n if (inQuad instanceof Quad)\n return inQuad;\n\n if (inQuad.termType !== 'Quad')\n throw new Error(`Unexpected termType: ${inQuad.termType}`);\n\n return quad(fromTerm(inQuad.subject), fromTerm(inQuad.predicate), fromTerm(inQuad.object), fromTerm(inQuad.graph));\n}\n", "// **N3Parser** parses N3 documents.\nimport N3Lexer from './N3Lexer';\nimport N3DataFactory from './N3DataFactory';\nimport namespaces from './IRIs';\n\nlet blankNodePrefix = 0;\n\n// ## Constructor\nexport default class N3Parser {\n constructor(options) {\n this._contextStack = [];\n this._graph = null;\n\n // Set the document IRI\n options = options || {};\n this._setBase(options.baseIRI);\n options.factory && initDataFactory(this, options.factory);\n\n // Set supported features depending on the format\n const format = (typeof options.format === 'string') ?\n options.format.match(/\\w*$/)[0].toLowerCase() : '',\n isTurtle = /turtle/.test(format), isTriG = /trig/.test(format),\n isNTriples = /triple/.test(format), isNQuads = /quad/.test(format),\n isN3 = this._n3Mode = /n3/.test(format),\n isLineMode = isNTriples || isNQuads;\n if (!(this._supportsNamedGraphs = !(isTurtle || isN3)))\n this._readPredicateOrNamedGraph = this._readPredicate;\n // Support triples in other graphs\n this._supportsQuads = !(isTurtle || isTriG || isNTriples || isN3);\n // Whether the log:isImpliedBy predicate is supported\n this._isImpliedBy = options.isImpliedBy;\n // Disable relative IRIs in N-Triples or N-Quads mode\n if (isLineMode)\n this._resolveRelativeIRI = iri => { return null; };\n this._blankNodePrefix = typeof options.blankNodePrefix !== 'string' ? '' :\n options.blankNodePrefix.replace(/^(?!_:)/, '_:');\n this._lexer = options.lexer || new N3Lexer({ lineMode: isLineMode, n3: isN3, isImpliedBy: this._isImpliedBy });\n // Disable explicit quantifiers by default\n this._explicitQuantifiers = !!options.explicitQuantifiers;\n // Disable parsing of unsupported versions by default\n this._parseUnsupportedVersions = !!options.parseUnsupportedVersions;\n this._version = options.version;\n }\n\n // ## Static class methods\n\n // ### `_resetBlankNodePrefix` restarts blank node prefix identification\n static _resetBlankNodePrefix() {\n blankNodePrefix = 0;\n }\n\n // ## Private methods\n\n // ### `_setBase` sets the base IRI to resolve relative IRIs\n _setBase(baseIRI) {\n if (!baseIRI) {\n this._base = '';\n this._basePath = '';\n }\n else {\n // Remove fragment if present\n const fragmentPos = baseIRI.indexOf('#');\n if (fragmentPos >= 0)\n baseIRI = baseIRI.substr(0, fragmentPos);\n // Set base IRI and its components\n this._base = baseIRI;\n this._basePath = baseIRI.indexOf('/') < 0 ? baseIRI :\n baseIRI.replace(/[^\\/?]*(?:\\?.*)?$/, '');\n baseIRI = baseIRI.match(/^(?:([a-z][a-z0-9+.-]*:))?(?:\\/\\/[^\\/]*)?/i);\n this._baseRoot = baseIRI[0];\n this._baseScheme = baseIRI[1];\n }\n }\n\n // ### `_saveContext` stores the current parsing context\n // when entering a new scope (list, blank node, formula)\n _saveContext(type, graph, subject, predicate, object) {\n const n3Mode = this._n3Mode;\n this._contextStack.push({\n type,\n subject, predicate, object, graph,\n inverse: n3Mode ? this._inversePredicate : false,\n blankPrefix: n3Mode ? this._prefixes._ : '',\n quantified: n3Mode ? this._quantified : null,\n });\n // The settings below only apply to N3 streams\n if (n3Mode) {\n // Every new scope resets the predicate direction\n this._inversePredicate = false;\n // In N3, blank nodes are scoped to a formula\n // (using a dot as separator, as a blank node label cannot start with it)\n this._prefixes._ = (this._graph ? `${this._graph.value}.` : '.');\n // Quantifiers are scoped to a formula\n this._quantified = Object.create(this._quantified);\n }\n }\n\n // ### `_restoreContext` restores the parent context\n // when leaving a scope (list, blank node, formula)\n _restoreContext(type, token) {\n // Obtain the previous context\n const context = this._contextStack.pop();\n if (!context || context.type !== type)\n return this._error(`Unexpected ${token.type}`, token);\n\n // Restore the quad of the previous context\n this._subject = context.subject;\n this._predicate = context.predicate;\n this._object = context.object;\n this._graph = context.graph;\n\n // Restore N3 context settings\n if (this._n3Mode) {\n this._inversePredicate = context.inverse;\n this._prefixes._ = context.blankPrefix;\n this._quantified = context.quantified;\n }\n }\n\n // ### `_readBeforeTopContext` is called once only at the start of parsing.\n _readBeforeTopContext(token) {\n if (this._version && !this._isValidVersion(this._version))\n return this._error(`Detected unsupported version as media type parameter: \"${this._version}\"`, token);\n return this._readInTopContext(token);\n }\n\n // ### `_readInTopContext` reads a token when in the top context\n _readInTopContext(token) {\n switch (token.type) {\n // If an EOF token arrives in the top context, signal that we're done\n case 'eof':\n if (this._graph !== null)\n return this._error('Unclosed graph', token);\n delete this._prefixes._;\n return this._callback(null, null, this._prefixes);\n // It could be a prefix declaration\n case 'PREFIX':\n this._sparqlStyle = true;\n case '@prefix':\n return this._readPrefix;\n // It could be a base declaration\n case 'BASE':\n this._sparqlStyle = true;\n case '@base':\n return this._readBaseIRI;\n // It could be a version declaration\n case 'VERSION':\n this._sparqlStyle = true;\n case '@version':\n return this._readVersion;\n // It could be a graph\n case '{':\n if (this._supportsNamedGraphs) {\n this._graph = '';\n this._subject = null;\n return this._readSubject;\n }\n case 'GRAPH':\n if (this._supportsNamedGraphs)\n return this._readNamedGraphLabel;\n // Otherwise, the next token must be a subject\n default:\n return this._readSubject(token);\n }\n }\n\n // ### `_readEntity` reads an IRI, prefixed name, blank node, or variable\n _readEntity(token, quantifier) {\n let value;\n switch (token.type) {\n // Read a relative or absolute IRI\n case 'IRI':\n case 'typeIRI':\n const iri = this._resolveIRI(token.value);\n if (iri === null)\n return this._error('Invalid IRI', token);\n value = this._factory.namedNode(iri);\n break;\n // Read a prefixed name\n case 'type':\n case 'prefixed':\n const prefix = this._prefixes[token.prefix];\n if (prefix === undefined)\n return this._error(`Undefined prefix \"${token.prefix}:\"`, token);\n value = this._factory.namedNode(prefix + token.value);\n break;\n // Read a blank node\n case 'blank':\n value = this._factory.blankNode(this._prefixes[token.prefix] + token.value);\n break;\n // Read a variable\n case 'var':\n value = this._factory.variable(token.value.substr(1));\n break;\n // Everything else is not an entity\n default:\n return this._error(`Expected entity but got ${token.type}`, token);\n }\n // In N3 mode, replace the entity if it is quantified\n if (!quantifier && this._n3Mode && (value.id in this._quantified))\n value = this._quantified[value.id];\n return value;\n }\n\n // ### `_readSubject` reads a quad's subject\n _readSubject(token) {\n this._predicate = null;\n switch (token.type) {\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph,\n this._subject = this._factory.blankNode(), null, null);\n return this._readBlankNodeHead;\n case '(':\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent.type === '<<') {\n return this._error('Unexpected list in reified triple', token);\n }\n // Start a new list\n this._saveContext('list', this._graph, this.RDF_NIL, null, null);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph,\n this._graph = this._factory.blankNode(), null, null);\n return this._readSubject;\n case '}':\n // No subject; the graph in which we are reading is closed instead\n return this._readPunctuation(token);\n case '@forSome':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forSome\"', token);\n this._subject = null;\n this._predicate = this.N3_FORSOME;\n this._quantifier = 'blankNode';\n return this._readQuantifierList;\n case '@forAll':\n if (!this._n3Mode)\n return this._error('Unexpected \"@forAll\"', token);\n this._subject = null;\n this._predicate = this.N3_FORALL;\n this._quantifier = 'variable';\n return this._readQuantifierList;\n case 'literal':\n if (!this._n3Mode)\n return this._error('Unexpected literal', token);\n\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._completeSubjectLiteral;\n }\n else\n this._subject = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n\n break;\n case '<<(':\n if (!this._n3Mode)\n return this._error('Disallowed triple term as subject', token);\n this._saveContext('<<(', this._graph, null, null, null);\n this._graph = null;\n return this._readSubject;\n case '<<':\n this._saveContext('<<', this._graph, null, null, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the subject entity\n if ((this._subject = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the subject might be a path\n if (this._n3Mode)\n return this._getPathReader(this._readPredicateOrNamedGraph);\n }\n\n // The next token must be a predicate,\n // or, if the subject was actually a graph IRI, a named graph\n return this._readPredicateOrNamedGraph;\n }\n\n // ### `_readPredicate` reads a quad's predicate\n _readPredicate(token) {\n const type = token.type;\n switch (type) {\n case 'inverse':\n this._inversePredicate = true;\n case 'abbreviation':\n this._predicate = this.ABBREVIATIONS[token.value];\n break;\n case '.':\n case ']':\n case '}':\n case '|}':\n // Expected predicate didn't come, must have been trailing semicolon\n if (this._predicate === null)\n return this._error(`Unexpected ${type}`, token);\n this._subject = null;\n return type === ']' ? this._readBlankNodeTail(token) : this._readPunctuation(token);\n case ';':\n // Additional semicolons can be safely ignored\n return this._predicate !== null ? this._readPredicate :\n this._error('Expected predicate but got ;', token);\n case '[':\n if (this._n3Mode) {\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject,\n this._subject = this._factory.blankNode(), null);\n return this._readBlankNodeHead;\n }\n case 'blank':\n if (!this._n3Mode)\n return this._error('Disallowed blank node as predicate', token);\n default:\n if ((this._predicate = this._readEntity(token)) === undefined)\n return;\n }\n this._validAnnotation = true;\n // The next token must be an object\n return this._readObject;\n }\n\n // ### `_readObject` reads a quad's object\n _readObject(token) {\n switch (token.type) {\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n return this._readDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else\n this._object = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n break;\n case '[':\n // Start a new quad with a new blank node as subject\n this._saveContext('blank', this._graph, this._subject, this._predicate,\n this._subject = this._factory.blankNode());\n return this._readBlankNodeHead;\n case '(':\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent.type === '<<') {\n return this._error('Unexpected list in reified triple', token);\n }\n // Start a new list\n this._saveContext('list', this._graph, this._subject, this._predicate, this.RDF_NIL);\n this._subject = null;\n return this._readListItem;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n case '<<(':\n this._saveContext('<<(', this._graph, this._subject, this._predicate, null);\n this._graph = null;\n return this._readSubject;\n case '<<':\n this._saveContext('<<', this._graph, this._subject, this._predicate, null);\n this._graph = null;\n return this._readSubject;\n default:\n // Read the object entity\n if ((this._object = this._readEntity(token)) === undefined)\n return;\n // In N3 mode, the object might be a path\n if (this._n3Mode)\n return this._getPathReader(this._getContextEndReader());\n }\n return this._getContextEndReader();\n }\n\n // ### `_readPredicateOrNamedGraph` reads a quad's predicate, or a named graph\n _readPredicateOrNamedGraph(token) {\n return token.type === '{' ? this._readGraph(token) : this._readPredicate(token);\n }\n\n // ### `_readGraph` reads a graph\n _readGraph(token) {\n if (token.type !== '{')\n return this._error(`Expected graph but got ${token.type}`, token);\n // The \"subject\" we read is actually the GRAPH's label\n this._graph = this._subject, this._subject = null;\n return this._readSubject;\n }\n\n // ### `_readBlankNodeHead` reads the head of a blank node\n _readBlankNodeHead(token) {\n if (token.type === ']') {\n this._subject = null;\n return this._readBlankNodeTail(token);\n }\n else {\n const stack = this._contextStack, parentParent = stack.length > 1 && stack[stack.length - 2];\n if (parentParent.type === '<<') {\n return this._error('Unexpected compound blank node expression in reified triple', token);\n }\n this._predicate = null;\n return this._readPredicate(token);\n }\n }\n\n // ### `_readBlankNodeTail` reads the end of a blank node\n _readBlankNodeTail(token) {\n if (token.type !== ']')\n return this._readBlankNodePunctuation(token);\n\n // Store blank node quad\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this blank node\n const empty = this._predicate === null;\n this._restoreContext('blank', token);\n // If the blank node was the object, restore previous context and read punctuation\n if (this._object !== null)\n return this._getContextEndReader();\n // If the blank node was the predicate, continue reading the object\n else if (this._predicate !== null)\n return this._readObject;\n // If the blank node was the subject, continue reading the predicate\n else\n // If the blank node was empty, it could be a named graph label\n return empty ? this._readPredicateOrNamedGraph : this._readPredicateAfterBlank;\n }\n\n // ### `_readPredicateAfterBlank` reads a predicate after an anonymous blank node\n _readPredicateAfterBlank(token) {\n switch (token.type) {\n case '.':\n case '}':\n // No predicate is coming if the triple is terminated here\n this._subject = null;\n return this._readPunctuation(token);\n default:\n return this._readPredicate(token);\n }\n }\n\n // ### `_readListItem` reads items from a list\n _readListItem(token) {\n let item = null, // The item of the list\n list = null, // The list itself\n next = this._readListItem; // The next function to execute\n const previousList = this._subject, // The previous list that contains this list\n stack = this._contextStack, // The stack of parent contexts\n parent = stack[stack.length - 1]; // The parent containing the current list\n\n switch (token.type) {\n case '[':\n // Stack the current list quad and start a new quad with a blank node as subject\n this._saveContext('blank', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST,\n this._subject = item = this._factory.blankNode());\n next = this._readBlankNodeHead;\n break;\n case '(':\n // Stack the current list quad and start a new list\n this._saveContext('list', this._graph,\n list = this._factory.blankNode(), this.RDF_FIRST, this.RDF_NIL);\n this._subject = null;\n break;\n case ')':\n // Closing the list; restore the parent context\n this._restoreContext('list', token);\n // If this list is contained within a parent list, return the membership quad here.\n // This will be `<parent list element> rdf:first <this list>.`.\n if (stack.length !== 0 && stack[stack.length - 1].type === 'list')\n this._emit(this._subject, this._predicate, this._object, this._graph);\n // Was this list the parent's subject?\n if (this._predicate === null) {\n // The next token is the predicate\n next = this._readPredicate;\n // No list tail if this was an empty list\n if (this._subject === this.RDF_NIL)\n return next;\n }\n // The list was in the parent context's object\n else {\n next = this._getContextEndReader();\n // No list tail if this was an empty list\n if (this._object === this.RDF_NIL)\n return next;\n }\n // Close the list by making the head nil\n list = this.RDF_NIL;\n break;\n case 'literal':\n // Regular literal, can still get a datatype or language\n if (token.prefix.length === 0) {\n this._literalValue = token.value;\n next = this._readListItemDataTypeOrLang;\n }\n // Pre-datatyped string literal (prefix stores the datatype)\n else {\n item = this._factory.literal(token.value, this._factory.namedNode(token.prefix));\n next = this._getContextEndReader();\n }\n break;\n case '{':\n // Start a new formula\n if (!this._n3Mode)\n return this._error('Unexpected graph', token);\n this._saveContext('formula', this._graph, this._subject, this._predicate,\n this._graph = this._factory.blankNode());\n return this._readSubject;\n case '<<':\n this._saveContext('<<', this._graph, null, null, null);\n this._graph = null;\n next = this._readSubject;\n break;\n default:\n if ((item = this._readEntity(token)) === undefined)\n return;\n }\n\n // Create a new blank node if no item head was assigned yet\n if (list === null)\n this._subject = list = this._factory.blankNode();\n\n // When reading a reified triple, store the list as subject in the stack, as this will be overridden when reading the triple.\n if (token.type === '<<')\n stack[stack.length - 1].subject = this._subject;\n\n // Is this the first element of the list?\n if (previousList === null) {\n // This list is either the subject or the object of its parent\n if (parent.predicate === null)\n parent.subject = list;\n else\n parent.object = list;\n }\n else {\n // Continue the previous list with the current list\n this._emit(previousList, this.RDF_REST, list, this._graph);\n }\n // If an item was read, add it to the list\n if (item !== null) {\n // In N3 mode, the item might be a path\n if (this._n3Mode && (token.type === 'IRI' || token.type === 'prefixed')) {\n // Create a new context to add the item's path\n this._saveContext('item', this._graph, list, this.RDF_FIRST, item);\n this._subject = item, this._predicate = null;\n // _readPath will restore the context and output the item\n return this._getPathReader(this._readListItem);\n }\n // Output the item\n this._emit(list, this.RDF_FIRST, item, this._graph);\n }\n return next;\n }\n\n // ### `_readDataTypeOrLang` reads an _optional_ datatype or language\n _readDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, false);\n }\n\n\n // ### `_readListItemDataTypeOrLang` reads an _optional_ datatype or language in a list\n _readListItemDataTypeOrLang(token) {\n return this._completeObjectLiteral(token, true);\n }\n\n // ### `_completeLiteral` completes a literal with an optional datatype or language\n _completeLiteral(token, component) {\n // Create a simple string literal by default\n let literal = this._factory.literal(this._literalValue);\n let readCb;\n\n switch (token.type) {\n // Create a datatyped literal\n case 'type':\n case 'typeIRI':\n const datatype = this._readEntity(token);\n if (datatype === undefined) return; // No datatype means an error occurred\n if (datatype.value === namespaces.rdf.langString || datatype.value === namespaces.rdf.dirLangString) {\n return this._error('Detected illegal (directional) languaged-tagged string with explicit datatype', token);\n }\n literal = this._factory.literal(this._literalValue, datatype);\n token = null;\n break;\n // Create a language-tagged string\n case 'langcode':\n if (token.value.split('-').some(t => t.length > 8))\n return this._error('Detected language tag with subtag longer than 8 characters', token);\n literal = this._factory.literal(this._literalValue, token.value);\n this._literalLanguage = token.value;\n token = null;\n readCb = this._readDirCode.bind(this, component);\n break;\n }\n\n return { token, literal, readCb };\n }\n\n _readDirCode(component, listItem, token) {\n // Attempt to read a dircode\n if (token.type === 'dircode') {\n const term = this._factory.literal(this._literalValue, { language: this._literalLanguage, direction: token.value });\n if (component === 'subject')\n this._subject = term;\n else\n this._object = term;\n this._literalLanguage = undefined;\n token = null;\n }\n\n if (component === 'subject')\n return token === null ? this._readPredicateOrNamedGraph : this._readPredicateOrNamedGraph(token);\n return this._completeObjectLiteralPost(token, listItem);\n }\n\n // Completes a literal in subject position\n _completeSubjectLiteral(token) {\n const completed = this._completeLiteral(token, 'subject');\n this._subject = completed.literal;\n\n // Postpone completion if the literal is only partially completed (such as lang+dir).\n if (completed.readCb)\n return completed.readCb.bind(this, false);\n\n return this._readPredicateOrNamedGraph;\n }\n\n // Completes a literal in object position\n _completeObjectLiteral(token, listItem) {\n const completed = this._completeLiteral(token, 'object');\n if (!completed)\n return;\n\n this._object = completed.literal;\n\n // Postpone completion if the literal is only partially completed (such as lang+dir).\n if (completed.readCb)\n return completed.readCb.bind(this, listItem);\n\n return this._completeObjectLiteralPost(completed.token, listItem);\n }\n\n _completeObjectLiteralPost(token, listItem) {\n // If this literal was part of a list, write the item\n // (we could also check the context stack, but passing in a flag is faster)\n if (listItem)\n this._emit(this._subject, this.RDF_FIRST, this._object, this._graph);\n // If the token was consumed, continue with the rest of the input\n if (token === null)\n return this._getContextEndReader();\n // Otherwise, consume the token now\n else {\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_readFormulaTail` reads the end of a formula\n _readFormulaTail(token) {\n if (token.type !== '}')\n return this._readPunctuation(token);\n\n // Store the last quad of the formula\n if (this._subject !== null)\n this._emit(this._subject, this._predicate, this._object, this._graph);\n\n // Restore the parent context containing this formula\n this._restoreContext('formula', token);\n // If the formula was the subject, continue reading the predicate.\n // If the formula was the object, read punctuation.\n return this._object === null ? this._readPredicate : this._getContextEndReader();\n }\n\n // ### `_readPunctuation` reads punctuation between quads or quad parts\n _readPunctuation(token) {\n let next, graph = this._graph, startingAnnotation = false;\n const subject = this._subject, inversePredicate = this._inversePredicate;\n switch (token.type) {\n // A closing brace ends a graph\n case '}':\n if (this._graph === null)\n return this._error('Unexpected graph closing', token);\n if (this._n3Mode)\n return this._readFormulaTail(token);\n this._graph = null;\n // A dot just ends the statement, without sharing anything with the next\n case '.':\n this._subject = null;\n this._tripleTerm = null;\n next = this._contextStack.length ? this._readSubject : this._readInTopContext;\n if (inversePredicate) this._inversePredicate = false;\n break;\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n // ~ is allowed in the annotation syntax\n case '~':\n next = this._readReifierInAnnotation;\n startingAnnotation = true;\n break;\n // {| means that the current triple is annotated with predicate-object pairs.\n case '{|':\n // Continue using the last triple as reified triple subject for the predicate-object pairs.\n this._subject = this._readTripleTerm();\n this._validAnnotation = false;\n startingAnnotation = true;\n next = this._readPredicate;\n break;\n // |} means that the current reified triple in annotation syntax is finalized.\n case '|}':\n if (!this._annotation)\n return this._error('Unexpected annotation syntax closing', token);\n if (!this._validAnnotation)\n return this._error('Annotation block can not be empty', token);\n this._subject = null;\n this._annotation = false;\n next = this._readPunctuation;\n break;\n default:\n // An entity means this is a quad (only allowed if not already inside a graph)\n if (this._supportsQuads && this._graph === null && (graph = this._readEntity(token)) !== undefined) {\n next = this._readQuadPunctuation;\n break;\n }\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n if (subject !== null && (!startingAnnotation || (startingAnnotation && !this._annotation))) {\n const predicate = this._predicate, object = this._object;\n if (!inversePredicate)\n this._emit(subject, predicate, object, graph);\n else\n this._emit(object, predicate, subject, graph);\n }\n if (startingAnnotation) {\n this._annotation = true;\n }\n return next;\n }\n\n // ### `_readBlankNodePunctuation` reads punctuation in a blank node\n _readBlankNodePunctuation(token) {\n let next;\n switch (token.type) {\n // Semicolon means the subject is shared; predicate and object are different\n case ';':\n next = this._readPredicate;\n break;\n // Comma means both the subject and predicate are shared; the object is different\n case ',':\n next = this._readObject;\n break;\n default:\n return this._error(`Expected punctuation to follow \"${this._object.id}\"`, token);\n }\n // A quad has been completed now, so return it\n this._emit(this._subject, this._predicate, this._object, this._graph);\n return next;\n }\n\n // ### `_readQuadPunctuation` reads punctuation after a quad\n _readQuadPunctuation(token) {\n if (token.type !== '.')\n return this._error('Expected dot to follow quad', token);\n return this._readInTopContext;\n }\n\n // ### `_readPrefix` reads the prefix of a prefix declaration\n _readPrefix(token) {\n if (token.type !== 'prefix')\n return this._error('Expected prefix to follow @prefix', token);\n this._prefix = token.value;\n return this._readPrefixIRI;\n }\n\n // ### `_readPrefixIRI` reads the IRI of a prefix declaration\n _readPrefixIRI(token) {\n if (token.type !== 'IRI')\n return this._error(`Expected IRI to follow prefix \"${this._prefix}:\"`, token);\n const prefixNode = this._readEntity(token);\n this._prefixes[this._prefix] = prefixNode.value;\n this._prefixCallback(this._prefix, prefixNode);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readBaseIRI` reads the IRI of a base declaration\n _readBaseIRI(token) {\n const iri = token.type === 'IRI' && this._resolveIRI(token.value);\n if (!iri)\n return this._error('Expected valid IRI to follow base declaration', token);\n this._setBase(iri);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_isValidVersion` checks if the given version is valid for this parser to handle.\n _isValidVersion(version) {\n return this._parseUnsupportedVersions || N3Parser.SUPPORTED_VERSIONS.includes(version);\n }\n\n // ### `_readVersion` reads version string declaration\n _readVersion(token) {\n if (token.type !== 'literal')\n return this._error('Expected literal to follow version declaration', token);\n if ((token.end - token.start) !== token.value.length + 2)\n return this._error('Version declarations must use single quotes', token);\n this._versionCallback(token.value);\n if (!this._isValidVersion(token.value))\n return this._error(`Detected unsupported version: \"${token.value}\"`, token);\n return this._readDeclarationPunctuation;\n }\n\n // ### `_readNamedGraphLabel` reads the label of a named graph\n _readNamedGraphLabel(token) {\n switch (token.type) {\n case 'IRI':\n case 'blank':\n case 'prefixed':\n return this._readSubject(token), this._readGraph;\n case '[':\n return this._readNamedGraphBlankLabel;\n default:\n return this._error('Invalid graph label', token);\n }\n }\n\n // ### `_readNamedGraphLabel` reads a blank node label of a named graph\n _readNamedGraphBlankLabel(token) {\n if (token.type !== ']')\n return this._error('Invalid graph label', token);\n this._subject = this._factory.blankNode();\n return this._readGraph;\n }\n\n // ### `_readDeclarationPunctuation` reads the punctuation of a declaration\n _readDeclarationPunctuation(token) {\n // SPARQL-style declarations don't have punctuation\n if (this._sparqlStyle) {\n this._sparqlStyle = false;\n return this._readInTopContext(token);\n }\n\n if (token.type !== '.')\n return this._error('Expected declaration to end with a dot', token);\n return this._readInTopContext;\n }\n\n // Reads a list of quantified symbols from a @forSome or @forAll statement\n _readQuantifierList(token) {\n let entity;\n switch (token.type) {\n case 'IRI':\n case 'prefixed':\n if ((entity = this._readEntity(token, true)) !== undefined)\n break;\n default:\n return this._error(`Unexpected ${token.type}`, token);\n }\n // Without explicit quantifiers, map entities to a quantified entity\n if (!this._explicitQuantifiers)\n this._quantified[entity.id] = this._factory[this._quantifier](this._factory.blankNode().value);\n // With explicit quantifiers, output the reified quantifier\n else {\n // If this is the first item, start a new quantifier list\n if (this._subject === null)\n this._emit(this._graph || this.DEFAULTGRAPH, this._predicate,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Otherwise, continue the previous list\n else\n this._emit(this._subject, this.RDF_REST,\n this._subject = this._factory.blankNode(), this.QUANTIFIERS_GRAPH);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, entity, this.QUANTIFIERS_GRAPH);\n }\n return this._readQuantifierPunctuation;\n }\n\n // Reads punctuation from a @forSome or @forAll statement\n _readQuantifierPunctuation(token) {\n // Read more quantifiers\n if (token.type === ',')\n return this._readQuantifierList;\n // End of the quantifier list\n else {\n // With explicit quantifiers, close the quantifier list\n if (this._explicitQuantifiers) {\n this._emit(this._subject, this.RDF_REST, this.RDF_NIL, this.QUANTIFIERS_GRAPH);\n this._subject = null;\n }\n // Read a dot\n this._readCallback = this._getContextEndReader();\n return this._readCallback(token);\n }\n }\n\n // ### `_getPathReader` reads a potential path and then resumes with the given function\n _getPathReader(afterPath) {\n this._afterPath = afterPath;\n return this._readPath;\n }\n\n // ### `_readPath` reads a potential path\n _readPath(token) {\n switch (token.type) {\n // Forward path\n case '!': return this._readForwardPath;\n // Backward path\n case '^': return this._readBackwardPath;\n // Not a path; resume reading where we left off\n default:\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n // If we were reading a list item, we still need to output it\n if (parent && parent.type === 'item') {\n // The list item is the remaining subejct after reading the path\n const item = this._subject;\n // Switch back to the context of the list\n this._restoreContext('item', token);\n // Output the list item\n this._emit(this._subject, this.RDF_FIRST, item, this._graph);\n }\n return this._afterPath(token);\n }\n }\n\n // ### `_readForwardPath` reads a '!' path\n _readForwardPath(token) {\n let subject, predicate;\n const object = this._factory.blankNode();\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's object\n if (this._predicate === null)\n subject = this._subject, this._subject = object;\n // If we were reading an object, replace the subject by the path's object\n else\n subject = this._object, this._object = object;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n // ### `_readBackwardPath` reads a '^' path\n _readBackwardPath(token) {\n const subject = this._factory.blankNode();\n let predicate, object;\n // The next token is the predicate\n if ((predicate = this._readEntity(token)) === undefined)\n return;\n // If we were reading a subject, replace the subject by the path's subject\n if (this._predicate === null)\n object = this._subject, this._subject = subject;\n // If we were reading an object, replace the subject by the path's subject\n else\n object = this._object, this._object = subject;\n // Emit the path's current quad and read its next section\n this._emit(subject, predicate, object, this._graph);\n return this._readPath;\n }\n\n// ### `_readTripleTermTail` reads the end of a triple term\n _readTripleTermTail(token) {\n if (token.type !== ')>>')\n return this._error(`Expected )>> but got ${token.type}`, token);\n // Read the quad and restore the previous context\n const quad = this._factory.quad(this._subject, this._predicate, this._object,\n this._graph || this.DEFAULTGRAPH);\n this._restoreContext('<<(', token);\n\n // If the triple was the subject, continue by reading the predicate.\n if (this._subject === null) {\n this._subject = quad;\n return this._readPredicate;\n }\n // If the triple was the object, read context end.\n else {\n this._object = quad;\n return this._getContextEndReader();\n }\n }\n\n // ### `_readReifiedTripleTailOrReifier` reads a reifier or the end of a nested reified triple\n _readReifiedTripleTailOrReifier(token) {\n if (token.type === '~') {\n return this._readReifier;\n }\n return this._readReifiedTripleTail(token);\n }\n\n // ### `_readReifiedTripleTail` reads the end of a nested reified triple\n _readReifiedTripleTail(token) {\n if (token.type !== '>>')\n return this._error(`Expected >> but got ${token.type}`, token);\n // Read the triple term and restore the previous context\n this._tripleTerm = null;\n const reifier = this._readTripleTerm();\n this._restoreContext('<<', token);\n\n // // If we're in a list, continue processing that list\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n if (parent && parent.type === 'list') {\n this._emit(this._subject, this.RDF_FIRST, reifier, this._graph);\n return this._getContextEndReader();\n }\n // If the triple was the subject, continue by reading the predicate.\n else if (this._subject === null) {\n this._subject = reifier;\n return this._readPredicateOrReifierTripleEnd;\n }\n // If the triple was the object, read context end.\n else {\n this._object = reifier;\n return this._getContextEndReader();\n }\n }\n\n _readPredicateOrReifierTripleEnd(token) {\n if (token.type === '.') {\n this._subject = null;\n return this._readPunctuation(token);\n }\n return this._readPredicate(token);\n }\n\n // ### `_readReifier` reads the triple term identifier after a tilde when in a reifying triple.\n _readReifier(token) {\n this._reifier = this._readEntity(token);\n return this._readReifiedTripleTail;\n }\n\n // ### `_readReifier` reads the optional triple term identifier after a tilde when in annotation syntax.\n _readReifierInAnnotation(token) {\n // If next token is a reifier, read it as such.\n if (token.type === 'IRI' || token.type === 'typeIRI' || token.type === 'type' || token.type === 'prefixed' || token.type === 'blank' || token.type === 'var') {\n this._reifier = this._readEntity(token);\n return this._readPunctuation;\n }\n // Otherwise, emit and assert triple term.\n this._readTripleTerm();\n this._subject = null;\n return this._readPunctuation(token);\n }\n\n _readTripleTerm() {\n const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];\n const parentGraph = parent ? parent.graph : undefined;\n const reifier = this._reifier || this._factory.blankNode();\n this._reifier = null;\n this._tripleTerm = this._tripleTerm || this._factory.quad(this._subject, this._predicate, this._object);\n this._emit(reifier, this.RDF_REIFIES, this._tripleTerm, parentGraph || this.DEFAULTGRAPH);\n return reifier;\n }\n\n // ### `_getContextEndReader` gets the next reader function at the end of a context\n _getContextEndReader() {\n const contextStack = this._contextStack;\n if (!contextStack.length)\n return this._readPunctuation;\n\n switch (contextStack[contextStack.length - 1].type) {\n case 'blank':\n return this._readBlankNodeTail;\n case 'list':\n return this._readListItem;\n case 'formula':\n return this._readFormulaTail;\n case '<<(':\n return this._readTripleTermTail;\n case '<<':\n return this._readReifiedTripleTailOrReifier;\n }\n }\n\n // ### `_emit` sends a quad through the callback\n _emit(subject, predicate, object, graph) {\n this._callback(null, this._factory.quad(subject, predicate, object, graph || this.DEFAULTGRAPH));\n }\n\n // ### `_error` emits an error message through the callback\n _error(message, token) {\n const err = new Error(`${message} on line ${token.line}.`);\n err.context = {\n token: token,\n line: token.line,\n previousToken: this._lexer.previousToken,\n };\n this._callback(err);\n this._callback = noop;\n }\n\n // ### `_resolveIRI` resolves an IRI against the base path\n _resolveIRI(iri) {\n return /^[a-z][a-z0-9+.-]*:/i.test(iri) ? iri : this._resolveRelativeIRI(iri);\n }\n\n // ### `_resolveRelativeIRI` resolves an IRI against the base path,\n // assuming that a base path has been set and that the IRI is indeed relative\n _resolveRelativeIRI(iri) {\n // An empty relative IRI indicates the base IRI\n if (!iri.length)\n return this._base;\n // Decide resolving strategy based in the first character\n switch (iri[0]) {\n // Resolve relative fragment IRIs against the base IRI\n case '#': return this._base + iri;\n // Resolve relative query string IRIs by replacing the query string\n case '?': return this._base.replace(/(?:\\?.*)?$/, iri);\n // Resolve root-relative IRIs at the root of the base IRI\n case '/':\n // Resolve scheme-relative IRIs to the scheme\n return (iri[1] === '/' ? this._baseScheme : this._baseRoot) + this._removeDotSegments(iri);\n // Resolve all other IRIs at the base IRI's path\n default:\n // Relative IRIs cannot contain a colon in the first path segment\n return (/^[^/:]*:/.test(iri)) ? null : this._removeDotSegments(this._basePath + iri);\n }\n }\n\n // ### `_removeDotSegments` resolves './' and '../' path segments in an IRI as per RFC3986\n _removeDotSegments(iri) {\n // Don't modify the IRI if it does not contain any dot segments\n if (!/(^|\\/)\\.\\.?($|[/#?])/.test(iri))\n return iri;\n\n // Start with an imaginary slash before the IRI in order to resolve trailing './' and '../'\n const length = iri.length;\n let result = '', i = -1, pathStart = -1, segmentStart = 0, next = '/';\n\n while (i < length) {\n switch (next) {\n // The path starts with the first slash after the authority\n case ':':\n if (pathStart < 0) {\n // Skip two slashes before the authority\n if (iri[++i] === '/' && iri[++i] === '/')\n // Skip to slash after the authority\n while ((pathStart = i + 1) < length && iri[pathStart] !== '/')\n i = pathStart;\n }\n break;\n // Don't modify a query string or fragment\n case '?':\n case '#':\n i = length;\n break;\n // Handle '/.' or '/..' path segments\n case '/':\n if (iri[i + 1] === '.') {\n next = iri[++i + 1];\n switch (next) {\n // Remove a '/.' segment\n case '/':\n result += iri.substring(segmentStart, i - 1);\n segmentStart = i + 1;\n break;\n // Remove a trailing '/.' segment\n case undefined:\n case '?':\n case '#':\n return result + iri.substring(segmentStart, i) + iri.substr(i + 1);\n // Remove a '/..' segment\n case '.':\n next = iri[++i + 1];\n if (next === undefined || next === '/' || next === '?' || next === '#') {\n result += iri.substring(segmentStart, i - 2);\n // Try to remove the parent path from result\n if ((segmentStart = result.lastIndexOf('/')) >= pathStart)\n result = result.substr(0, segmentStart);\n // Remove a trailing '/..' segment\n if (next !== '/')\n return `${result}/${iri.substr(i + 1)}`;\n segmentStart = i + 1;\n }\n }\n }\n }\n next = iri[++i];\n }\n return result + iri.substring(segmentStart);\n }\n\n // ## Public methods\n\n // ### `parse` parses the N3 input and emits each parsed quad through the onQuad callback.\n parse(input, quadCallback, prefixCallback, versionCallback) {\n // The second parameter accepts an object { onQuad: ..., onPrefix: ..., onComment: ...}\n // As a second and third parameter it still accepts a separate quadCallback and prefixCallback for backward compatibility as well\n let onQuad, onPrefix, onComment, onVersion;\n if (quadCallback && (quadCallback.onQuad || quadCallback.onPrefix || quadCallback.onComment || quadCallback.onVersion)) {\n onQuad = quadCallback.onQuad;\n onPrefix = quadCallback.onPrefix;\n onComment = quadCallback.onComment;\n onVersion = quadCallback.onVersion;\n }\n else {\n onQuad = quadCallback;\n onPrefix = prefixCallback;\n onVersion = versionCallback;\n }\n // The read callback is the next function to be executed when a token arrives.\n // We start reading in the top context.\n this._readCallback = this._readBeforeTopContext;\n this._sparqlStyle = false;\n this._prefixes = Object.create(null);\n this._prefixes._ = this._blankNodePrefix ? this._blankNodePrefix.substr(2)\n : `b${blankNodePrefix++}_`;\n this._prefixCallback = onPrefix || noop;\n this._versionCallback = onVersion || noop;\n this._inversePredicate = false;\n this._quantified = Object.create(null);\n\n // Parse synchronously if no quad callback is given\n if (!onQuad) {\n const quads = [];\n let error;\n this._callback = (e, t) => { e ? (error = e) : t && quads.push(t); };\n this._lexer.tokenize(input).every(token => {\n return this._readCallback = this._readCallback(token);\n });\n if (error) throw error;\n return quads;\n }\n\n let processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback)\n this._readCallback = this._readCallback(token);\n };\n\n // Enable checking for comments on every token when a commentCallback has been set\n if (onComment) {\n // Enable the lexer to return comments as tokens first (disabled by default)\n this._lexer.comments = true;\n // Patch the processNextToken function\n processNextToken = (error, token) => {\n if (error !== null)\n this._callback(error), this._callback = noop;\n else if (this._readCallback) {\n if (token.type === 'comment')\n onComment(token.value);\n else\n this._readCallback = this._readCallback(token);\n }\n };\n }\n\n // Parse asynchronously otherwise, executing the read callback when a token arrives\n this._callback = onQuad;\n this._lexer.tokenize(input, processNextToken);\n }\n}\n\n// The empty function\nfunction noop() {}\n\n// Initializes the parser with the given data factory\nfunction initDataFactory(parser, factory) {\n parser._factory = factory;\n\n parser.DEFAULTGRAPH = factory.defaultGraph();\n\n // Set common named nodes\n parser.RDF_FIRST = factory.namedNode(namespaces.rdf.first);\n parser.RDF_REST = factory.namedNode(namespaces.rdf.rest);\n parser.RDF_NIL = factory.namedNode(namespaces.rdf.nil);\n parser.RDF_REIFIES = factory.namedNode(namespaces.rdf.reifies);\n parser.N3_FORALL = factory.namedNode(namespaces.r.forAll);\n parser.N3_FORSOME = factory.namedNode(namespaces.r.forSome);\n parser.ABBREVIATIONS = {\n 'a': factory.namedNode(namespaces.rdf.type),\n '=': factory.namedNode(namespaces.owl.sameAs),\n '>': factory.namedNode(namespaces.log.implies),\n '<': factory.namedNode(namespaces.log.isImpliedBy),\n };\n parser.QUANTIFIERS_GRAPH = factory.namedNode('urn:n3:quantifiers');\n}\nN3Parser.SUPPORTED_VERSIONS = [\n '1.2',\n '1.2-basic',\n '1.1',\n];\ninitDataFactory(N3Parser.prototype, N3DataFactory);\n", "// **N3Util** provides N3 utility functions.\n\nimport N3DataFactory from './N3DataFactory';\n\n// Tests whether the given term represents an IRI\nexport function isNamedNode(term) {\n return !!term && term.termType === 'NamedNode';\n}\n\n// Tests whether the given term represents a blank node\nexport function isBlankNode(term) {\n return !!term && term.termType === 'BlankNode';\n}\n\n// Tests whether the given term represents a literal\nexport function isLiteral(term) {\n return !!term && term.termType === 'Literal';\n}\n\n// Tests whether the given term represents a variable\nexport function isVariable(term) {\n return !!term && term.termType === 'Variable';\n}\n\n// Tests whether the given term represents a quad\nexport function isQuad(term) {\n return !!term && term.termType === 'Quad';\n}\n\n// Tests whether the given term represents the default graph\nexport function isDefaultGraph(term) {\n return !!term && term.termType === 'DefaultGraph';\n}\n\n// Tests whether the given quad is in the default graph\nexport function inDefaultGraph(quad) {\n return isDefaultGraph(quad.graph);\n}\n\n// Creates a function that prepends the given IRI to a local name\nexport function prefix(iri, factory) {\n return prefixes({ '': iri.value || iri }, factory)('');\n}\n\n// Creates a function that allows registering and expanding prefixes\nexport function prefixes(defaultPrefixes, factory) {\n // Add all of the default prefixes\n const prefixes = Object.create(null);\n for (const prefix in defaultPrefixes)\n processPrefix(prefix, defaultPrefixes[prefix]);\n // Set the default factory if none was specified\n factory = factory || N3DataFactory;\n\n // Registers a new prefix (if an IRI was specified)\n // or retrieves a function that expands an existing prefix (if no IRI was specified)\n function processPrefix(prefix, iri) {\n // Create a new prefix if an IRI is specified or the prefix doesn't exist\n if (typeof iri === 'string') {\n // Create a function that expands the prefix\n const cache = Object.create(null);\n prefixes[prefix] = local => {\n return cache[local] || (cache[local] = factory.namedNode(iri + local));\n };\n }\n else if (!(prefix in prefixes)) {\n throw new Error(`Unknown prefix: ${prefix}`);\n }\n return prefixes[prefix];\n }\n return processPrefix;\n}\n", "export function escapeRegex(regex) {\n return regex.replace(/[\\]\\/\\(\\)\\*\\+\\?\\.\\\\\\$]/g, '\\\\$&');\n}\n", "import { escapeRegex } from './Util';\n\n// Do not handle base IRIs without scheme, and currently unsupported cases:\n// - file: IRIs (which could also use backslashes)\n// - IRIs containing /. or /.. or //\nconst BASE_UNSUPPORTED = /^:?[^:?#]*(?:[?#]|$)|^file:|^[^:]*:\\/*[^?#]+?\\/(?:\\.\\.?(?:\\/|$)|\\/)/i;\nconst SUFFIX_SUPPORTED = /^(?:(?:[^/?#]{3,}|\\.?[^/?#.]\\.?)(?:\\/[^/?#]{3,}|\\.?[^/?#.]\\.?)*\\/?)?(?:[?#]|$)/;\nconst CURRENT = './';\nconst PARENT = '../';\nconst QUERY = '?';\nconst FRAGMENT = '#';\n\nexport default class BaseIRI {\n constructor(base) {\n this.base = base;\n this._baseLength = 0;\n this._baseMatcher = null;\n this._pathReplacements = new Array(base.length + 1);\n }\n\n static supports(base) {\n return !BASE_UNSUPPORTED.test(base);\n }\n\n _getBaseMatcher() {\n if (this._baseMatcher)\n return this._baseMatcher;\n if (!BaseIRI.supports(this.base))\n return this._baseMatcher = /.^/;\n\n // Extract the scheme\n const scheme = /^[^:]*:\\/*/.exec(this.base)[0];\n const regexHead = ['^', escapeRegex(scheme)];\n const regexTail = [];\n\n // Generate a regex for every path segment\n const segments = [], segmenter = /[^/?#]*([/?#])/y;\n let segment, query = 0, fragment = 0, last = segmenter.lastIndex = scheme.length;\n while (!query && !fragment && (segment = segmenter.exec(this.base))) {\n // Truncate base resolution path at fragment start\n if (segment[1] === FRAGMENT)\n fragment = segmenter.lastIndex - 1;\n else {\n // Create regex that matches the segment\n regexHead.push(escapeRegex(segment[0]), '(?:');\n regexTail.push(')?');\n\n // Create dedicated query string replacement\n if (segment[1] !== QUERY)\n segments.push(last = segmenter.lastIndex);\n else {\n query = last = segmenter.lastIndex;\n fragment = this.base.indexOf(FRAGMENT, query);\n this._pathReplacements[query] = QUERY;\n }\n }\n }\n\n // Precalculate parent path substitutions\n for (let i = 0; i < segments.length; i++)\n this._pathReplacements[segments[i]] = PARENT.repeat(segments.length - i - 1);\n this._pathReplacements[segments[segments.length - 1]] = CURRENT;\n\n // Add the remainder of the base IRI (without fragment) to the regex\n this._baseLength = fragment > 0 ? fragment : this.base.length;\n regexHead.push(\n escapeRegex(this.base.substring(last, this._baseLength)),\n query ? '(?:#|$)' : '(?:[?#]|$)',\n );\n return this._baseMatcher = new RegExp([...regexHead, ...regexTail].join(''));\n }\n\n toRelative(iri) {\n // Unsupported or non-matching base IRI\n const match = this._getBaseMatcher().exec(iri);\n if (!match)\n return iri;\n\n // Exact base IRI match\n const length = match[0].length;\n if (length === this._baseLength && length === iri.length)\n return '';\n\n // Parent path match\n const parentPath = this._pathReplacements[length];\n if (parentPath) {\n const suffix = iri.substring(length);\n // Don't abbreviate unsupported path\n if (parentPath !== QUERY && !SUFFIX_SUPPORTED.test(suffix))\n return iri;\n // Omit ./ with fragment or query string\n if (parentPath === CURRENT && /^[^?#]/.test(suffix))\n return suffix;\n // Append suffix to relative parent path\n return parentPath + suffix;\n }\n\n // Fragment or query string, so include delimiter\n return iri.substring(length - 1);\n }\n}\n", "// **N3Writer** writes N3 documents.\nimport namespaces from './IRIs';\nimport { default as N3DataFactory, Term } from './N3DataFactory';\nimport { isDefaultGraph } from './N3Util';\nimport BaseIRI from './BaseIRI';\nimport { escapeRegex } from './Util';\n\nconst DEFAULTGRAPH = N3DataFactory.defaultGraph();\n\nconst { rdf, xsd } = namespaces;\n\n// Characters in literals that require escaping\nconst escape = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019\\ud800-\\udbff]/,\n escapeAll = /[\"\\\\\\t\\n\\r\\b\\f\\u0000-\\u0019]|[\\ud800-\\udbff][\\udc00-\\udfff]/g,\n escapedCharacters = {\n '\\\\': '\\\\\\\\', '\"': '\\\\\"', '\\t': '\\\\t',\n '\\n': '\\\\n', '\\r': '\\\\r', '\\b': '\\\\b', '\\f': '\\\\f',\n };\n\n// ## Placeholder class to represent already pretty-printed terms\nclass SerializedTerm extends Term {\n // Pretty-printed nodes are not equal to any other node\n // (e.g., [] does not equal [])\n equals(other) {\n return other === this;\n }\n}\n\n// ## Constructor\nexport default class N3Writer {\n constructor(outputStream, options) {\n // ### `_prefixRegex` matches a prefixed name or IRI that begins with one of the added prefixes\n this._prefixRegex = /$0^/;\n\n // Shift arguments if the first argument is not a stream\n if (outputStream && typeof outputStream.write !== 'function')\n options = outputStream, outputStream = null;\n options = options || {};\n this._lists = options.lists;\n\n // If no output stream given, send the output as string through the end callback\n if (!outputStream) {\n let output = '';\n this._outputStream = {\n write(chunk, encoding, done) { output += chunk; done && done(); },\n end: done => { done && done(null, output); },\n };\n this._endStream = true;\n }\n else {\n this._outputStream = outputStream;\n this._endStream = options.end === undefined ? true : !!options.end;\n }\n\n // Initialize writer, depending on the format\n this._subject = null;\n if (!(/triple|quad/i).test(options.format)) {\n this._lineMode = false;\n this._graph = DEFAULTGRAPH;\n this._prefixIRIs = Object.create(null);\n options.prefixes && this.addPrefixes(options.prefixes);\n if (options.baseIRI) {\n this._baseIri = new BaseIRI(options.baseIRI);\n }\n }\n else {\n this._lineMode = true;\n this._writeQuad = this._writeQuadLine;\n }\n }\n\n // ## Private methods\n\n // ### Whether the current graph is the default graph\n get _inDefaultGraph() {\n return DEFAULTGRAPH.equals(this._graph);\n }\n\n // ### `_write` writes the argument to the output stream\n _write(string, callback) {\n this._outputStream.write(string, 'utf8', callback);\n }\n\n // ### `_writeQuad` writes the quad to the output stream\n _writeQuad(subject, predicate, object, graph, done) {\n try {\n // Write the graph's label if it has changed\n if (!graph.equals(this._graph)) {\n // Close the previous graph and start the new one\n this._write((this._subject === null ? '' : (this._inDefaultGraph ? '.\\n' : '\\n}\\n')) +\n (DEFAULTGRAPH.equals(graph) ? '' : `${this._encodeIriOrBlank(graph)} {\\n`));\n this._graph = graph;\n this._subject = null;\n }\n // Don't repeat the subject if it's the same\n if (subject.equals(this._subject)) {\n // Don't repeat the predicate if it's the same\n if (predicate.equals(this._predicate))\n this._write(`, ${this._encodeObject(object)}`, done);\n // Same subject, different predicate\n else\n this._write(`;\\n ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n // Different subject; write the whole quad\n else\n this._write(`${(this._subject === null ? '' : '.\\n') +\n this._encodeSubject(this._subject = subject)} ${\n this._encodePredicate(this._predicate = predicate)} ${\n this._encodeObject(object)}`, done);\n }\n catch (error) { done && done(error); }\n }\n\n // ### `_writeQuadLine` writes the quad to the output stream as a single line\n _writeQuadLine(subject, predicate, object, graph, done) {\n // Write the quad without prefixes\n delete this._prefixMatch;\n this._write(this.quadToString(subject, predicate, object, graph), done);\n }\n\n // ### `quadToString` serializes a quad as a string\n quadToString(subject, predicate, object, graph) {\n return `${this._encodeSubject(subject)} ${\n this._encodeIriOrBlank(predicate)} ${\n this._encodeObject(object)\n }${graph && graph.value ? ` ${this._encodeIriOrBlank(graph)} .\\n` : ' .\\n'}`;\n }\n\n // ### `quadsToString` serializes an array of quads as a string\n quadsToString(quads) {\n let quadsString = '';\n for (const quad of quads)\n quadsString += this.quadToString(quad.subject, quad.predicate, quad.object, quad.graph);\n return quadsString;\n }\n\n // ### `_encodeSubject` represents a subject\n _encodeSubject(entity) {\n return entity.termType === 'Quad' ?\n this._encodeQuad(entity) : this._encodeIriOrBlank(entity);\n }\n\n // ### `_encodeIriOrBlank` represents an IRI or blank node\n _encodeIriOrBlank(entity) {\n // A blank node or list is represented as-is\n if (entity.termType !== 'NamedNode') {\n // If it is a list head, pretty-print it\n if (this._lists && (entity.value in this._lists))\n entity = this.list(this._lists[entity.value]);\n return 'id' in entity ? entity.id : `_:${entity.value}`;\n }\n let iri = entity.value;\n // Use relative IRIs if requested and possible\n if (this._baseIri) {\n iri = this._baseIri.toRelative(iri);\n }\n // Escape special characters\n if (escape.test(iri))\n iri = iri.replace(escapeAll, characterReplacer);\n // Try to represent the IRI as prefixed name\n const prefixMatch = this._prefixRegex.exec(iri);\n return !prefixMatch ? `<${iri}>` :\n (!prefixMatch[1] ? iri : this._prefixIRIs[prefixMatch[1]] + prefixMatch[2]);\n }\n\n // ### `_encodeLiteral` represents a literal\n _encodeLiteral(literal) {\n // Escape special characters\n let value = literal.value;\n if (escape.test(value))\n value = value.replace(escapeAll, characterReplacer);\n\n // Write a language-tagged literal\n const direction = literal.direction ? `--${literal.direction}` : '';\n if (literal.language)\n return `\"${value}\"@${literal.language}${direction}`;\n\n // Write dedicated literals per data type\n if (this._lineMode) {\n // Only abbreviate strings in N-Triples or N-Quads\n if (literal.datatype.value === xsd.string)\n return `\"${value}\"`;\n }\n else {\n // Use common datatype abbreviations in Turtle or TriG\n switch (literal.datatype.value) {\n case xsd.string:\n return `\"${value}\"`;\n case xsd.boolean:\n if (value === 'true' || value === 'false')\n return value;\n break;\n case xsd.integer:\n if (/^[+-]?\\d+$/.test(value))\n return value;\n break;\n case xsd.decimal:\n if (/^[+-]?\\d*\\.\\d+$/.test(value))\n return value;\n break;\n case xsd.double:\n if (/^[+-]?(?:\\d+\\.\\d*|\\.?\\d+)[eE][+-]?\\d+$/.test(value))\n return value;\n break;\n }\n }\n\n // Write a regular datatyped literal\n return `\"${value}\"^^${this._encodeIriOrBlank(literal.datatype)}`;\n }\n\n // ### `_encodePredicate` represents a predicate\n _encodePredicate(predicate) {\n return predicate.value === rdf.type ? 'a' : this._encodeIriOrBlank(predicate);\n }\n\n // ### `_encodeObject` represents an object\n _encodeObject(object) {\n switch (object.termType) {\n case 'Quad':\n return this._encodeQuad(object);\n case 'Literal':\n return this._encodeLiteral(object);\n default:\n return this._encodeIriOrBlank(object);\n }\n }\n\n // ### `_encodeQuad` encodes an RDF-star quad\n _encodeQuad({ subject, predicate, object, graph }) {\n return `<<(${\n this._encodeSubject(subject)} ${\n this._encodePredicate(predicate)} ${\n this._encodeObject(object)}${\n isDefaultGraph(graph) ? '' : ` ${this._encodeIriOrBlank(graph)}`})>>`;\n }\n\n // ### `_blockedWrite` replaces `_write` after the writer has been closed\n _blockedWrite() {\n throw new Error('Cannot write because the writer has been closed.');\n }\n\n // ### `addQuad` adds the quad to the output stream\n addQuad(subject, predicate, object, graph, done) {\n // The quad was given as an object, so shift parameters\n if (object === undefined)\n this._writeQuad(subject.subject, subject.predicate, subject.object, subject.graph, predicate);\n // The optional `graph` parameter was not provided\n else if (typeof graph === 'function')\n this._writeQuad(subject, predicate, object, DEFAULTGRAPH, graph);\n // The `graph` parameter was provided\n else\n this._writeQuad(subject, predicate, object, graph || DEFAULTGRAPH, done);\n }\n\n // ### `addQuads` adds the quads to the output stream\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `addPrefix` adds the prefix to the output stream\n addPrefix(prefix, iri, done) {\n const prefixes = {};\n prefixes[prefix] = iri;\n this.addPrefixes(prefixes, done);\n }\n\n // ### `addPrefixes` adds the prefixes to the output stream\n addPrefixes(prefixes, done) {\n // Ignore prefixes if not supported by the serialization\n if (!this._prefixIRIs)\n return done && done();\n\n // Write all new prefixes\n let hasPrefixes = false;\n for (let prefix in prefixes) {\n let iri = prefixes[prefix];\n if (typeof iri !== 'string')\n iri = iri.value;\n hasPrefixes = true;\n // Finish a possible pending quad\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null, this._graph = '';\n }\n // Store and write the prefix\n this._prefixIRIs[iri] = (prefix += ':');\n this._write(`@prefix ${prefix} <${iri}>.\\n`);\n }\n // Recreate the prefix matcher\n if (hasPrefixes) {\n let IRIlist = '', prefixList = '';\n for (const prefixIRI in this._prefixIRIs) {\n IRIlist += IRIlist ? `|${prefixIRI}` : prefixIRI;\n prefixList += (prefixList ? '|' : '') + this._prefixIRIs[prefixIRI];\n }\n IRIlist = escapeRegex(IRIlist, /[\\]\\/\\(\\)\\*\\+\\?\\.\\\\\\$]/g, '\\\\$&');\n this._prefixRegex = new RegExp(`^(?:${prefixList})[^\\/]*$|` +\n `^(${IRIlist})([_a-zA-Z0-9][\\\\-_a-zA-Z0-9]*)$`);\n }\n // End a prefix block with a newline\n this._write(hasPrefixes ? '\\n' : '', done);\n }\n\n // ### `blank` creates a blank node with the given content\n blank(predicate, object) {\n let children = predicate, child, length;\n // Empty blank node\n if (predicate === undefined)\n children = [];\n // Blank node passed as blank(Term(\"predicate\"), Term(\"object\"))\n else if (predicate.termType)\n children = [{ predicate: predicate, object: object }];\n // Blank node passed as blank({ predicate: predicate, object: object })\n else if (!('length' in predicate))\n children = [predicate];\n\n switch (length = children.length) {\n // Generate an empty blank node\n case 0:\n return new SerializedTerm('[]');\n // Generate a non-nested one-triple blank node\n case 1:\n child = children[0];\n if (!(child.object instanceof SerializedTerm))\n return new SerializedTerm(`[ ${this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)} ]`);\n // Generate a multi-triple or nested blank node\n default:\n let contents = '[';\n // Write all triples in order\n for (let i = 0; i < length; i++) {\n child = children[i];\n // Write only the object is the predicate is the same as the previous\n if (child.predicate.equals(predicate))\n contents += `, ${this._encodeObject(child.object)}`;\n // Otherwise, write the predicate and the object\n else {\n contents += `${(i ? ';\\n ' : '\\n ') +\n this._encodePredicate(child.predicate)} ${\n this._encodeObject(child.object)}`;\n predicate = child.predicate;\n }\n }\n return new SerializedTerm(`${contents}\\n]`);\n }\n }\n\n // ### `list` creates a list node with the given content\n list(elements) {\n const length = elements && elements.length || 0, contents = new Array(length);\n for (let i = 0; i < length; i++)\n contents[i] = this._encodeObject(elements[i]);\n return new SerializedTerm(`(${contents.join(' ')})`);\n }\n\n // ### `end` signals the end of the output stream\n end(done) {\n // Finish a possible pending quad\n if (this._subject !== null) {\n this._write(this._inDefaultGraph ? '.\\n' : '\\n}\\n');\n this._subject = null;\n }\n // Disallow further writing\n this._write = this._blockedWrite;\n\n // Try to end the underlying stream, ensuring done is called exactly one time\n let singleDone = done && ((error, result) => { singleDone = null, done(error, result); });\n if (this._endStream) {\n try { return this._outputStream.end(singleDone); }\n catch (error) { /* error closing stream */ }\n }\n singleDone && singleDone();\n }\n}\n\n// Replaces a character by its escaped version\nfunction characterReplacer(character) {\n // Replace a single character by its escaped version\n let result = escapedCharacters[character];\n if (result === undefined) {\n // Replace a single character with its 4-bit unicode escape sequence\n if (character.length === 1) {\n result = character.charCodeAt(0).toString(16);\n result = '\\\\u0000'.substr(0, 6 - result.length) + result;\n }\n // Replace a surrogate pair with its 8-bit unicode escape sequence\n else {\n result = ((character.charCodeAt(0) - 0xD800) * 0x400 +\n character.charCodeAt(1) + 0x2400).toString(16);\n result = '\\\\U00000000'.substr(0, 10 - result.length) + result;\n }\n }\n return result;\n}\n", "// **N3Store** objects store N3 quads by graph in memory.\nimport { Readable } from 'readable-stream';\nimport { default as N3DataFactory, termToId, termFromId } from './N3DataFactory';\nimport namespaces from './IRIs';\nimport { isDefaultGraph } from './N3Util';\nimport N3Writer from './N3Writer';\n\nconst ITERATOR = Symbol('iter');\n\nfunction merge(target, source, depth = 4) {\n if (depth === 0)\n return Object.assign(target, source);\n\n for (const key in source)\n target[key] = merge(target[key] || Object.create(null), source[key], depth - 1);\n\n return target;\n}\n\n/**\n * Determines the intersection of the `_graphs` index s1 and s2.\n * s1 and s2 *must* belong to Stores that share an `_entityIndex`.\n *\n * False is returned when there is no intersection; this should\n * *not* be set as the value for an index.\n */\nfunction intersect(s1, s2, depth = 4) {\n let target = false;\n\n for (const key in s1) {\n if (key in s2) {\n const intersection = depth === 0 ? null : intersect(s1[key], s2[key], depth - 1);\n if (intersection !== false) {\n target = target || Object.create(null);\n target[key] = intersection;\n }\n // Depth 3 is the 'subjects', 'predicates' and 'objects' keys.\n // If the 'subjects' index is empty, so will the 'predicates' and 'objects' index.\n else if (depth === 3) {\n return false;\n }\n }\n }\n\n return target;\n}\n\n/**\n * Determines the difference of the `_graphs` index s1 and s2.\n * s1 and s2 *must* belong to Stores that share an `_entityIndex`.\n *\n * False is returned when there is no difference; this should\n * *not* be set as the value for an index.\n */\nfunction difference(s1, s2, depth = 4) {\n let target = false;\n\n for (const key in s1) {\n // When the key is not in the index, then none of the triples defined by s1[key] are\n // in s2 and so we want to copy them over to the resultant store.\n if (!(key in s2)) {\n target = target || Object.create(null);\n target[key] = depth === 0 ? null : merge({}, s1[key], depth - 1);\n }\n else if (depth !== 0) {\n const diff = difference(s1[key], s2[key], depth - 1);\n if (diff !== false) {\n target = target || Object.create(null);\n target[key] = diff;\n }\n // Depth 3 is the 'subjects', 'predicates' and 'objects' keys.\n // If the 'subjects' index is empty, so will the 'predicates' and 'objects' index.\n else if (depth === 3) {\n return false;\n }\n }\n }\n\n return target;\n}\n\n// ## Constructor\nexport class N3EntityIndex {\n constructor(options = {}) {\n this._id = 1;\n // `_ids` maps entities such as `http://xmlns.com/foaf/0.1/name` to numbers,\n // saving memory by using only numbers as keys in `_graphs`\n this._ids = Object.create(null);\n this._ids[''] = 1;\n // inverse of `_ids`\n this._entities = Object.create(null);\n this._entities[1] = '';\n // `_blankNodeIndex` is the index of the last automatically named blank node\n this._blankNodeIndex = 0;\n this._factory = options.factory || N3DataFactory;\n }\n\n _termFromId(id) {\n if (id[0] === '.') {\n const entities = this._entities;\n const terms = id.split('.');\n const q = this._factory.quad(\n this._termFromId(entities[terms[1]]),\n this._termFromId(entities[terms[2]]),\n this._termFromId(entities[terms[3]]),\n terms[4] && this._termFromId(entities[terms[4]]),\n );\n return q;\n }\n return termFromId(id, this._factory);\n }\n\n _termToNumericId(term) {\n if (term.termType === 'Quad') {\n const s = this._termToNumericId(term.subject),\n p = this._termToNumericId(term.predicate),\n o = this._termToNumericId(term.object);\n let g;\n\n return s && p && o && (isDefaultGraph(term.graph) || (g = this._termToNumericId(term.graph))) &&\n this._ids[g ? `.${s}.${p}.${o}.${g}` : `.${s}.${p}.${o}`];\n }\n return this._ids[termToId(term)];\n }\n\n _termToNewNumericId(term) {\n // This assumes that no graph term is present - we may wish to error if there is one\n const str = term && term.termType === 'Quad' ?\n `.${this._termToNewNumericId(term.subject)}.${this._termToNewNumericId(term.predicate)}.${this._termToNewNumericId(term.object)}${\n isDefaultGraph(term.graph) ? '' : `.${this._termToNewNumericId(term.graph)}`\n }`\n : termToId(term);\n\n return this._ids[str] || (this._ids[this._entities[++this._id] = str] = this._id);\n }\n\n createBlankNode(suggestedName) {\n let name, index;\n // Generate a name based on the suggested name\n if (suggestedName) {\n name = suggestedName = `_:${suggestedName}`, index = 1;\n while (this._ids[name])\n name = suggestedName + index++;\n }\n // Generate a generic blank node name\n else {\n do { name = `_:b${this._blankNodeIndex++}`; }\n while (this._ids[name]);\n }\n // Add the blank node to the entities, avoiding the generation of duplicates\n this._ids[name] = ++this._id;\n this._entities[this._id] = name;\n return this._factory.blankNode(name.substr(2));\n }\n}\n\n// ## Constructor\nexport default class N3Store {\n constructor(quads, options) {\n // The number of quads is initially zero\n this._size = 0;\n // `_graphs` contains subject, predicate, and object indexes per graph\n this._graphs = Object.create(null);\n\n // Shift parameters if `quads` is not given\n if (!options && quads && !quads[0] && !(typeof quads.match === 'function'))\n options = quads, quads = null;\n options = options || {};\n this._factory = options.factory || N3DataFactory;\n this._entityIndex = options.entityIndex || new N3EntityIndex({ factory: this._factory });\n this._entities = this._entityIndex._entities;\n this._termFromId = this._entityIndex._termFromId.bind(this._entityIndex);\n this._termToNumericId = this._entityIndex._termToNumericId.bind(this._entityIndex);\n this._termToNewNumericId = this._entityIndex._termToNewNumericId.bind(this._entityIndex);\n\n // Add quads if passed\n if (quads)\n this.addAll(quads);\n }\n\n // ## Public properties\n\n // ### `size` returns the number of quads in the store\n get size() {\n // Return the quad count if if was cached\n let size = this._size;\n if (size !== null)\n return size;\n\n // Calculate the number of quads by counting to the deepest level\n size = 0;\n const graphs = this._graphs;\n let subjects, subject;\n for (const graphKey in graphs)\n for (const subjectKey in (subjects = graphs[graphKey].subjects))\n for (const predicateKey in (subject = subjects[subjectKey]))\n size += Object.keys(subject[predicateKey]).length;\n return this._size = size;\n }\n\n // ## Private methods\n\n // ### `_addToIndex` adds a quad to a three-layered index.\n // Returns if the index has changed, if the entry did not already exist.\n _addToIndex(index0, key0, key1, key2) {\n // Create layers as necessary\n const index1 = index0[key0] || (index0[key0] = {});\n const index2 = index1[key1] || (index1[key1] = {});\n // Setting the key to _any_ value signals the presence of the quad\n const existed = key2 in index2;\n if (!existed)\n index2[key2] = null;\n return !existed;\n }\n\n // ### `_removeFromIndex` removes a quad from a three-layered index\n _removeFromIndex(index0, key0, key1, key2) {\n // Remove the quad from the index\n const index1 = index0[key0], index2 = index1[key1];\n delete index2[key2];\n\n // Remove intermediary index layers if they are empty\n for (const key in index2) return;\n delete index1[key1];\n for (const key in index1) return;\n delete index0[key0];\n }\n\n // ### `_findInIndex` finds a set of quads in a three-layered index.\n // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`.\n // Any of these keys can be undefined, which is interpreted as a wildcard.\n // `name0`, `name1`, and `name2` are the names of the keys at each level,\n // used when reconstructing the resulting quad\n // (for instance: _subject_, _predicate_, and _object_).\n // Finally, `graphId` will be the graph of the created quads.\n *_findInIndex(index0, key0, key1, key2, name0, name1, name2, graphId) {\n let tmp, index1, index2;\n const entityKeys = this._entities;\n const graph = this._termFromId(entityKeys[graphId]);\n const parts = { subject: null, predicate: null, object: null };\n\n // If a key is specified, use only that part of index 0.\n if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0];\n for (const value0 in index0) {\n if (index1 = index0[value0]) {\n parts[name0] = this._termFromId(entityKeys[value0]);\n // If a key is specified, use only that part of index 1.\n if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1];\n for (const value1 in index1) {\n if (index2 = index1[value1]) {\n parts[name1] = this._termFromId(entityKeys[value1]);\n // If a key is specified, use only that part of index 2, if it exists.\n const values = key2 ? (key2 in index2 ? [key2] : []) : Object.keys(index2);\n // Create quads for all items found in index 2.\n for (let l = 0; l < values.length; l++) {\n parts[name2] = this._termFromId(entityKeys[values[l]]);\n yield this._factory.quad(parts.subject, parts.predicate, parts.object, graph);\n }\n }\n }\n }\n }\n }\n\n // ### `_loop` executes the callback on all keys of index 0\n _loop(index0, callback) {\n for (const key0 in index0)\n callback(key0);\n }\n\n // ### `_loopByKey0` executes the callback on all keys of a certain entry in index 0\n _loopByKey0(index0, key0, callback) {\n let index1, key1;\n if (index1 = index0[key0]) {\n for (key1 in index1)\n callback(key1);\n }\n }\n\n // ### `_loopByKey1` executes the callback on given keys of all entries in index 0\n _loopByKey1(index0, key1, callback) {\n let key0, index1;\n for (key0 in index0) {\n index1 = index0[key0];\n if (index1[key1])\n callback(key0);\n }\n }\n\n // ### `_loopBy2Keys` executes the callback on given keys of certain entries in index 2\n _loopBy2Keys(index0, key0, key1, callback) {\n let index1, index2, key2;\n if ((index1 = index0[key0]) && (index2 = index1[key1])) {\n for (key2 in index2)\n callback(key2);\n }\n }\n\n // ### `_countInIndex` counts matching quads in a three-layered index.\n // The index base is `index0` and the keys at each level are `key0`, `key1`, and `key2`.\n // Any of these keys can be undefined, which is interpreted as a wildcard.\n _countInIndex(index0, key0, key1, key2) {\n let count = 0, tmp, index1, index2;\n\n // If a key is specified, count only that part of index 0\n if (key0) (tmp = index0, index0 = {})[key0] = tmp[key0];\n for (const value0 in index0) {\n if (index1 = index0[value0]) {\n // If a key is specified, count only that part of index 1\n if (key1) (tmp = index1, index1 = {})[key1] = tmp[key1];\n for (const value1 in index1) {\n if (index2 = index1[value1]) {\n // If a key is specified, count the quad if it exists\n if (key2) (key2 in index2) && count++;\n // Otherwise, count all quads\n else count += Object.keys(index2).length;\n }\n }\n }\n }\n return count;\n }\n\n // ### `_getGraphs` returns an array with the given graph,\n // or all graphs if the argument is null or undefined.\n _getGraphs(graph) {\n graph = graph === '' ? 1 : (graph && (this._termToNumericId(graph) || -1));\n return typeof graph !== 'number' ? this._graphs : { [graph]: this._graphs[graph] };\n }\n\n // ### `_uniqueEntities` returns a function that accepts an entity ID\n // and passes the corresponding entity to callback if it hasn't occurred before.\n _uniqueEntities(callback) {\n const uniqueIds = Object.create(null);\n return id => {\n if (!(id in uniqueIds)) {\n uniqueIds[id] = true;\n callback(this._termFromId(this._entities[id], this._factory));\n }\n };\n }\n\n // ## Public methods\n\n // ### `add` adds the specified quad to the dataset.\n // Returns the dataset instance it was called on.\n // Existing quads, as defined in Quad.equals, will be ignored.\n add(quad) {\n this.addQuad(quad);\n return this;\n }\n\n // ### `addQuad` adds a new quad to the store.\n // Returns if the quad index has changed, if the quad did not already exist.\n addQuad(subject, predicate, object, graph) {\n // Shift arguments if a quad object is given instead of components\n if (!predicate)\n graph = subject.graph, object = subject.object,\n predicate = subject.predicate, subject = subject.subject;\n\n // Convert terms to internal string representation\n graph = graph ? this._termToNewNumericId(graph) : 1;\n\n // Find the graph that will contain the triple\n let graphItem = this._graphs[graph];\n // Create the graph if it doesn't exist yet\n if (!graphItem) {\n graphItem = this._graphs[graph] = { subjects: {}, predicates: {}, objects: {} };\n // Freezing a graph helps subsequent `add` performance,\n // and properties will never be modified anyway\n Object.freeze(graphItem);\n }\n\n // Since entities can often be long IRIs, we avoid storing them in every index.\n // Instead, we have a separate index that maps entities to numbers,\n // which are then used as keys in the other indexes.\n subject = this._termToNewNumericId(subject);\n predicate = this._termToNewNumericId(predicate);\n object = this._termToNewNumericId(object);\n\n if (!this._addToIndex(graphItem.subjects, subject, predicate, object))\n return false;\n this._addToIndex(graphItem.predicates, predicate, object, subject);\n this._addToIndex(graphItem.objects, object, subject, predicate);\n\n // The cached quad count is now invalid\n this._size = null;\n return true;\n }\n\n // ### `addQuads` adds multiple quads to the store\n addQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.addQuad(quads[i]);\n }\n\n // ### `delete` removes the specified quad from the dataset.\n // Returns the dataset instance it was called on.\n delete(quad) {\n this.removeQuad(quad);\n return this;\n }\n\n // ### `has` determines whether a dataset includes a certain quad or quad pattern.\n has(subjectOrQuad, predicate, object, graph) {\n if (subjectOrQuad && subjectOrQuad.subject)\n ({ subject: subjectOrQuad, predicate, object, graph } = subjectOrQuad);\n return !this.readQuads(subjectOrQuad, predicate, object, graph).next().done;\n }\n\n // ### `import` adds a stream of quads to the store\n import(stream) {\n stream.on('data', quad => { this.addQuad(quad); });\n return stream;\n }\n\n // ### `removeQuad` removes a quad from the store if it exists\n removeQuad(subject, predicate, object, graph) {\n // Shift arguments if a quad object is given instead of components\n if (!predicate)\n ({ subject, predicate, object, graph } = subject);\n // Convert terms to internal string representation\n graph = graph ? this._termToNumericId(graph) : 1;\n\n // Find internal identifiers for all components\n // and verify the quad exists.\n const graphs = this._graphs;\n let graphItem, subjects, predicates;\n if (!(subject = subject && this._termToNumericId(subject)) || !(predicate = predicate && this._termToNumericId(predicate)) ||\n !(object = object && this._termToNumericId(object)) || !(graphItem = graphs[graph]) ||\n !(subjects = graphItem.subjects[subject]) ||\n !(predicates = subjects[predicate]) ||\n !(object in predicates))\n return false;\n\n // Remove it from all indexes\n this._removeFromIndex(graphItem.subjects, subject, predicate, object);\n this._removeFromIndex(graphItem.predicates, predicate, object, subject);\n this._removeFromIndex(graphItem.objects, object, subject, predicate);\n if (this._size !== null) this._size--;\n\n // Remove the graph if it is empty\n for (subject in graphItem.subjects) return true;\n delete graphs[graph];\n return true;\n }\n\n // ### `removeQuads` removes multiple quads from the store\n removeQuads(quads) {\n for (let i = 0; i < quads.length; i++)\n this.removeQuad(quads[i]);\n }\n\n // ### `remove` removes a stream of quads from the store\n remove(stream) {\n stream.on('data', quad => { this.removeQuad(quad); });\n return stream;\n }\n\n // ### `removeMatches` removes all matching quads from the store\n // Setting any field to `undefined` or `null` indicates a wildcard.\n removeMatches(subject, predicate, object, graph) {\n const stream = new Readable({ objectMode: true });\n\n const iterable = this.readQuads(subject, predicate, object, graph);\n stream._read = size => {\n while (--size >= 0) {\n const { done, value } = iterable.next();\n if (done) {\n stream.push(null);\n return;\n }\n stream.push(value);\n }\n };\n\n return this.remove(stream);\n }\n\n // ### `deleteGraph` removes all triples with the given graph from the store\n deleteGraph(graph) {\n return this.removeMatches(null, null, null, graph);\n }\n\n // ### `getQuads` returns an array of quads matching a pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getQuads(subject, predicate, object, graph) {\n return [...this.readQuads(subject, predicate, object, graph)];\n }\n\n /**\n * `readQuads` returns a generator of quads matching a pattern.\n * Setting any field to `undefined` or `null` indicates a wildcard.\n * @deprecated Use `match` instead.\n */\n *readQuads(subject, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (const graphId in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graphId]) {\n // Choose the optimal index, based on what fields are present\n if (subjectId) {\n if (objectId)\n // If subject and object are given, the object index will be the fastest\n yield* this._findInIndex(content.objects, objectId, subjectId, predicateId,\n 'object', 'subject', 'predicate', graphId);\n else\n // If only subject and possibly predicate are given, the subject index will be the fastest\n yield* this._findInIndex(content.subjects, subjectId, predicateId, null,\n 'subject', 'predicate', 'object', graphId);\n }\n else if (predicateId)\n // If only predicate and possibly object are given, the predicate index will be the fastest\n yield* this._findInIndex(content.predicates, predicateId, objectId, null,\n 'predicate', 'object', 'subject', graphId);\n else if (objectId)\n // If only object is given, the object index will be the fastest\n yield* this._findInIndex(content.objects, objectId, null, null,\n 'object', 'subject', 'predicate', graphId);\n else\n // If nothing is given, iterate subjects and predicates first\n yield* this._findInIndex(content.subjects, null, null, null,\n 'subject', 'predicate', 'object', graphId);\n }\n }\n }\n\n // ### `match` returns a new dataset that is comprised of all quads in the current instance matching the given arguments.\n // The logic described in Quad Matching is applied for each quad in this dataset to check if it should be included in the output dataset.\n // Note: This method always returns a new DatasetCore, even if that dataset contains no quads.\n // Note: Since a DatasetCore is an unordered set, the order of the quads within the returned sequence is arbitrary.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n // For backwards compatibility, the object return also implements the Readable stream interface.\n match(subject, predicate, object, graph) {\n return new DatasetCoreAndReadableStream(this, subject, predicate, object, graph, { entityIndex: this._entityIndex });\n }\n\n // ### `countQuads` returns the number of quads matching a pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n countQuads(subject, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let count = 0, content, subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return 0;\n\n for (const graphId in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graphId]) {\n // Choose the optimal index, based on what fields are present\n if (subject) {\n if (object)\n // If subject and object are given, the object index will be the fastest\n count += this._countInIndex(content.objects, objectId, subjectId, predicateId);\n else\n // If only subject and possibly predicate are given, the subject index will be the fastest\n count += this._countInIndex(content.subjects, subjectId, predicateId, objectId);\n }\n else if (predicate) {\n // If only predicate and possibly object are given, the predicate index will be the fastest\n count += this._countInIndex(content.predicates, predicateId, objectId, subjectId);\n }\n else {\n // If only object is possibly given, the object index will be the fastest\n count += this._countInIndex(content.objects, objectId, subjectId, predicateId);\n }\n }\n }\n return count;\n }\n\n // ### `forEach` executes the callback on all quads.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forEach(callback, subject, predicate, object, graph) {\n this.some(quad => {\n callback(quad, this);\n return false;\n }, subject, predicate, object, graph);\n }\n\n // ### `every` executes the callback on all quads,\n // and returns `true` if it returns truthy for all them.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n every(callback, subject, predicate, object, graph) {\n return !this.some(quad => !callback(quad, this), subject, predicate, object, graph);\n }\n\n // ### `some` executes the callback on all quads,\n // and returns `true` if it returns truthy for any of them.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n some(callback, subject, predicate, object, graph) {\n for (const quad of this.readQuads(subject, predicate, object, graph))\n if (callback(quad, this))\n return true;\n return false;\n }\n\n // ### `getSubjects` returns all subjects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getSubjects(predicate, object, graph) {\n const results = [];\n this.forSubjects(s => { results.push(s); }, predicate, object, graph);\n return results;\n }\n\n // ### `forSubjects` executes the callback on all subjects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forSubjects(callback, predicate, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, predicateId, objectId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (predicate && !(predicateId = this._termToNumericId(predicate)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (predicateId) {\n if (objectId)\n // If predicate and object are given, the POS index is best.\n this._loopBy2Keys(content.predicates, predicateId, objectId, callback);\n else\n // If only predicate is given, the SPO index is best.\n this._loopByKey1(content.subjects, predicateId, callback);\n }\n else if (objectId)\n // If only object is given, the OSP index is best.\n this._loopByKey0(content.objects, objectId, callback);\n else\n // If no params given, iterate all the subjects\n this._loop(content.subjects, callback);\n }\n }\n }\n\n // ### `getPredicates` returns all predicates that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getPredicates(subject, object, graph) {\n const results = [];\n this.forPredicates(p => { results.push(p); }, subject, object, graph);\n return results;\n }\n\n // ### `forPredicates` executes the callback on all predicates that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forPredicates(callback, subject, object, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, objectId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n object && !(objectId = this._termToNumericId(object)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (subjectId) {\n if (objectId)\n // If subject and object are given, the OSP index is best.\n this._loopBy2Keys(content.objects, objectId, subjectId, callback);\n else\n // If only subject is given, the SPO index is best.\n this._loopByKey0(content.subjects, subjectId, callback);\n }\n else if (objectId)\n // If only object is given, the POS index is best.\n this._loopByKey1(content.predicates, objectId, callback);\n else\n // If no params given, iterate all the predicates.\n this._loop(content.predicates, callback);\n }\n }\n }\n\n // ### `getObjects` returns all objects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getObjects(subject, predicate, graph) {\n const results = [];\n this.forObjects(o => { results.push(o); }, subject, predicate, graph);\n return results;\n }\n\n // ### `forObjects` executes the callback on all objects that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forObjects(callback, subject, predicate, graph) {\n const graphs = this._getGraphs(graph);\n let content, subjectId, predicateId;\n callback = this._uniqueEntities(callback);\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = this._termToNumericId(subject)) ||\n predicate && !(predicateId = this._termToNumericId(predicate)))\n return;\n\n for (graph in graphs) {\n // Only if the specified graph contains triples, there can be results\n if (content = graphs[graph]) {\n // Choose optimal index based on which fields are wildcards\n if (subjectId) {\n if (predicateId)\n // If subject and predicate are given, the SPO index is best.\n this._loopBy2Keys(content.subjects, subjectId, predicateId, callback);\n else\n // If only subject is given, the OSP index is best.\n this._loopByKey1(content.objects, subjectId, callback);\n }\n else if (predicateId)\n // If only predicate is given, the POS index is best.\n this._loopByKey0(content.predicates, predicateId, callback);\n else\n // If no params given, iterate all the objects.\n this._loop(content.objects, callback);\n }\n }\n }\n\n // ### `getGraphs` returns all graphs that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n getGraphs(subject, predicate, object) {\n const results = [];\n this.forGraphs(g => { results.push(g); }, subject, predicate, object);\n return results;\n }\n\n // ### `forGraphs` executes the callback on all graphs that match the pattern.\n // Setting any field to `undefined` or `null` indicates a wildcard.\n forGraphs(callback, subject, predicate, object) {\n for (const graph in this._graphs) {\n this.some(quad => {\n callback(quad.graph);\n return true; // Halt iteration of some()\n }, subject, predicate, object, this._termFromId(this._entities[graph]));\n }\n }\n\n // ### `createBlankNode` creates a new blank node, returning its name\n createBlankNode(suggestedName) {\n return this._entityIndex.createBlankNode(suggestedName);\n }\n\n // ### `extractLists` finds and removes all list triples\n // and returns the items per list.\n extractLists({ remove = false, ignoreErrors = false } = {}) {\n const lists = {}; // has scalar keys so could be a simple Object\n const onError = ignoreErrors ? (() => true) :\n ((node, message) => { throw new Error(`${node.value} ${message}`); });\n\n // Traverse each list from its tail\n const tails = this.getQuads(null, namespaces.rdf.rest, namespaces.rdf.nil, null);\n const toRemove = remove ? [...tails] : [];\n tails.forEach(tailQuad => {\n const items = []; // the members found as objects of rdf:first quads\n let malformed = false; // signals whether the current list is malformed\n let head; // the head of the list (_:b1 in above example)\n let headPos; // set to subject or object when head is set\n const graph = tailQuad.graph; // make sure list is in exactly one graph\n\n // Traverse the list from tail to end\n let current = tailQuad.subject;\n while (current && !malformed) {\n const objectQuads = this.getQuads(null, null, current, null);\n const subjectQuads = this.getQuads(current, null, null, null);\n let quad, first = null, rest = null, parent = null;\n\n // Find the first and rest of this list node\n for (let i = 0; i < subjectQuads.length && !malformed; i++) {\n quad = subjectQuads[i];\n if (!quad.graph.equals(graph))\n malformed = onError(current, 'not confined to single graph');\n else if (head)\n malformed = onError(current, 'has non-list arcs out');\n\n // one rdf:first\n else if (quad.predicate.value === namespaces.rdf.first) {\n if (first)\n malformed = onError(current, 'has multiple rdf:first arcs');\n else\n toRemove.push(first = quad);\n }\n\n // one rdf:rest\n else if (quad.predicate.value === namespaces.rdf.rest) {\n if (rest)\n malformed = onError(current, 'has multiple rdf:rest arcs');\n else\n toRemove.push(rest = quad);\n }\n\n // alien triple\n else if (objectQuads.length)\n malformed = onError(current, 'can\\'t be subject and object');\n else {\n head = quad; // e.g. { (1 2 3) :p :o }\n headPos = 'subject';\n }\n }\n\n // { :s :p (1 2) } arrives here with no head\n // { (1 2) :p :o } arrives here with head set to the list.\n for (let i = 0; i < objectQuads.length && !malformed; ++i) {\n quad = objectQuads[i];\n if (head)\n malformed = onError(current, 'can\\'t have coreferences');\n // one rdf:rest\n else if (quad.predicate.value === namespaces.rdf.rest) {\n if (parent)\n malformed = onError(current, 'has incoming rdf:rest arcs');\n else\n parent = quad;\n }\n else {\n head = quad; // e.g. { :s :p (1 2) }\n headPos = 'object';\n }\n }\n\n // Store the list item and continue with parent\n if (!first)\n malformed = onError(current, 'has no list head');\n else\n items.unshift(first.object);\n current = parent && parent.subject;\n }\n\n // Don't remove any quads if the list is malformed\n if (malformed)\n remove = false;\n // Store the list under the value of its head\n else if (head)\n lists[head[headPos].value] = items;\n });\n\n // Remove list quads if requested\n if (remove)\n this.removeQuads(toRemove);\n return lists;\n }\n\n /**\n * Returns `true` if the current dataset is a superset of the given dataset; in other words, returns `true` if\n * the given dataset is a subset of, i.e., is contained within, the current dataset.\n *\n * Blank Nodes will be normalized.\n */\n addAll(quads) {\n if (quads instanceof DatasetCoreAndReadableStream)\n quads = quads.filtered;\n\n if (Array.isArray(quads))\n this.addQuads(quads);\n else if (quads instanceof N3Store && quads._entityIndex === this._entityIndex) {\n if (quads._size !== 0) {\n this._graphs = merge(this._graphs, quads._graphs);\n this._size = null; // Invalidate the cached size\n }\n }\n else {\n for (const quad of quads)\n this.add(quad);\n }\n return this;\n }\n\n /**\n * Returns `true` if the current dataset is a superset of the given dataset; in other words, returns `true` if\n * the given dataset is a subset of, i.e., is contained within, the current dataset.\n *\n * Blank Nodes will be normalized.\n */\n contains(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this)\n return true;\n\n if (!(other instanceof N3Store) || this._entityIndex !== other._entityIndex)\n return other.every(quad => this.has(quad));\n\n const g1 = this._graphs, g2 = other._graphs;\n let s1, s2, p1, p2, o1;\n for (const graph in g2) {\n if (!(s1 = g1[graph])) return false;\n s1 = s1.subjects;\n for (const subject in (s2 = g2[graph].subjects)) {\n if (!(p1 = s1[subject])) return false;\n for (const predicate in (p2 = s2[subject])) {\n if (!(o1 = p1[predicate])) return false;\n for (const object in p2[predicate])\n if (!(object in o1)) return false;\n }\n }\n }\n return true;\n }\n\n /**\n * This method removes the quads in the current dataset that match the given arguments.\n *\n * The logic described in {@link https://rdf.js.org/dataset-spec/#quad-matching|Quad Matching} is applied for each\n * quad in this dataset, to select the quads which will be deleted.\n *\n * @param subject The optional exact subject to match.\n * @param predicate The optional exact predicate to match.\n * @param object The optional exact object to match.\n * @param graph The optional exact graph to match.\n */\n deleteMatches(subject, predicate, object, graph) {\n for (const quad of this.match(subject, predicate, object, graph))\n this.removeQuad(quad);\n return this;\n }\n\n /**\n * Returns a new dataset that contains all quads from the current dataset that are not included in the given dataset.\n */\n difference(other) {\n if (other && other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this)\n return new N3Store({ entityIndex: this._entityIndex });\n\n if ((other instanceof N3Store) && other._entityIndex === this._entityIndex) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n const graphs = difference(this._graphs, other._graphs);\n if (graphs) {\n store._graphs = graphs;\n store._size = null;\n }\n return store;\n }\n\n return this.filter(quad => !other.has(quad));\n }\n\n /**\n * Returns true if the current dataset contains the same graph structure as the given dataset.\n *\n * Blank Nodes will be normalized.\n */\n equals(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n return other === this || (this.size === other.size && this.contains(other));\n }\n\n /**\n * Creates a new dataset with all the quads that pass the test implemented by the provided `iteratee`.\n *\n * This method is aligned with Array.prototype.filter() in ECMAScript-262.\n */\n filter(iteratee) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n for (const quad of this)\n if (iteratee(quad, this))\n store.add(quad);\n return store;\n }\n\n /**\n * Returns a new dataset containing all quads from the current dataset that are also included in the given dataset.\n */\n intersection(other) {\n if (other instanceof DatasetCoreAndReadableStream)\n other = other.filtered;\n\n if (other === this) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n store._graphs = merge(Object.create(null), this._graphs);\n store._size = this._size;\n return store;\n }\n else if ((other instanceof N3Store) && this._entityIndex === other._entityIndex) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n const graphs = intersect(other._graphs, this._graphs);\n if (graphs) {\n store._graphs = graphs;\n store._size = null;\n }\n return store;\n }\n\n return this.filter(quad => other.has(quad));\n }\n\n /**\n * Returns a new dataset containing all quads returned by applying `iteratee` to each quad in the current dataset.\n */\n map(iteratee) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n for (const quad of this)\n store.add(iteratee(quad, this));\n return store;\n }\n\n /**\n * This method calls the `iteratee` method on each `quad` of the `Dataset`. The first time the `iteratee` method\n * is called, the `accumulator` value is the `initialValue`, or, if not given, equals the first quad of the `Dataset`.\n * The return value of each call to the `iteratee` method is used as the `accumulator` value for the next call.\n *\n * This method returns the return value of the last `iteratee` call.\n *\n * This method is aligned with `Array.prototype.reduce()` in ECMAScript-262.\n */\n reduce(callback, initialValue) {\n const iter = this.readQuads();\n let accumulator = initialValue === undefined ? iter.next().value : initialValue;\n for (const quad of iter)\n accumulator = callback(accumulator, quad, this);\n return accumulator;\n }\n\n /**\n * Returns the set of quads within the dataset as a host-language-native sequence, for example an `Array` in\n * ECMAScript-262.\n *\n * Since a `Dataset` is an unordered set, the order of the quads within the returned sequence is arbitrary.\n */\n toArray() {\n return this.getQuads();\n }\n\n /**\n * Returns an N-Quads string representation of the dataset, preprocessed with the\n * {@link https://json-ld.github.io/normalization/spec/|RDF Dataset Normalization} algorithm.\n */\n toCanonical() {\n throw new Error('not implemented');\n }\n\n /**\n * Returns a stream that contains all quads of the dataset.\n */\n toStream() {\n return this.match();\n }\n\n /**\n * Returns an N-Quads string representation of the dataset.\n *\n * No prior normalization is required, therefore the results for the same quads may vary depending on the `Dataset`\n * implementation.\n */\n toString() {\n return (new N3Writer()).quadsToString(this);\n }\n\n /**\n * Returns a new `Dataset` that is a concatenation of this dataset and the quads given as an argument.\n */\n union(quads) {\n const store = new N3Store({ entityIndex: this._entityIndex });\n store._graphs = merge(Object.create(null), this._graphs);\n store._size = this._size;\n\n store.addAll(quads);\n return store;\n }\n\n // ### Store is an iterable.\n // Can be used where iterables are expected: for...of loops, array spread operator,\n // `yield*`, and destructuring assignment (order is not guaranteed).\n *[Symbol.iterator]() {\n yield* this.readQuads();\n }\n}\n\n/**\n * Returns a subset of the `index` with that part of the index\n * matching the `ids` array. `ids` contains 3 elements that are\n * either numerical ids; or `null`.\n *\n * `false` is returned when there are no matching indices; this should\n * *not* be set as the value for an index.\n */\nfunction indexMatch(index, ids, depth = 0) {\n const ind = ids[depth];\n if (ind && !(ind in index))\n return false;\n\n let target = false;\n for (const key in (ind ? { [ind]: index[ind] } : index)) {\n const result = depth === 2 ? null : indexMatch(index[key], ids, depth + 1);\n\n if (result !== false) {\n target = target || Object.create(null);\n target[key] = result;\n }\n }\n return target;\n}\n\n/**\n * A class that implements both DatasetCore and Readable.\n */\nclass DatasetCoreAndReadableStream extends Readable {\n constructor(n3Store, subject, predicate, object, graph, options) {\n super({ objectMode: true });\n Object.assign(this, { n3Store, subject, predicate, object, graph, options });\n }\n\n get filtered() {\n if (!this._filtered) {\n const { n3Store, graph, object, predicate, subject } = this;\n const newStore = this._filtered = new N3Store({ factory: n3Store._factory, entityIndex: this.options.entityIndex });\n\n let subjectId, predicateId, objectId;\n\n // Translate IRIs to internal index keys.\n if (subject && !(subjectId = newStore._termToNumericId(subject)) ||\n predicate && !(predicateId = newStore._termToNumericId(predicate)) ||\n object && !(objectId = newStore._termToNumericId(object)))\n return newStore;\n\n const graphs = n3Store._getGraphs(graph);\n for (const graphKey in graphs) {\n let subjects, predicates, objects, content;\n if (content = graphs[graphKey]) {\n if (!subjectId && predicateId) {\n if (predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId])) {\n subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId]);\n objects = indexMatch(content.objects, [objectId, subjectId, predicateId]);\n }\n }\n else if (objectId) {\n if (objects = indexMatch(content.objects, [objectId, subjectId, predicateId])) {\n subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId]);\n predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId]);\n }\n }\n else if (subjects = indexMatch(content.subjects, [subjectId, predicateId, objectId])) {\n predicates = indexMatch(content.predicates, [predicateId, objectId, subjectId]);\n objects = indexMatch(content.objects, [objectId, subjectId, predicateId]);\n }\n\n if (subjects)\n newStore._graphs[graphKey] = { subjects, predicates, objects };\n }\n }\n newStore._size = null;\n }\n return this._filtered;\n }\n\n get size() {\n return this.filtered.size;\n }\n\n _read(size) {\n if (size > 0 && !this[ITERATOR])\n this[ITERATOR] = this[Symbol.iterator]();\n const iterable = this[ITERATOR];\n while (--size >= 0) {\n const { done, value } = iterable.next();\n if (done) {\n this.push(null);\n return;\n }\n this.push(value);\n }\n }\n\n addAll(quads) {\n return this.filtered.addAll(quads);\n }\n\n contains(other) {\n return this.filtered.contains(other);\n }\n\n deleteMatches(subject, predicate, object, graph) {\n return this.filtered.deleteMatches(subject, predicate, object, graph);\n }\n\n difference(other) {\n return this.filtered.difference(other);\n }\n\n equals(other) {\n return this.filtered.equals(other);\n }\n\n every(callback, subject, predicate, object, graph) {\n return this.filtered.every(callback, subject, predicate, object, graph);\n }\n\n filter(iteratee) {\n return this.filtered.filter(iteratee);\n }\n\n forEach(callback, subject, predicate, object, graph) {\n return this.filtered.forEach(callback, subject, predicate, object, graph);\n }\n\n import(stream) {\n return this.filtered.import(stream);\n }\n\n intersection(other) {\n return this.filtered.intersection(other);\n }\n\n map(iteratee) {\n return this.filtered.map(iteratee);\n }\n\n some(callback, subject, predicate, object, graph) {\n return this.filtered.some(callback, subject, predicate, object, graph);\n }\n\n toCanonical() {\n return this.filtered.toCanonical();\n }\n\n toStream() {\n return this._filtered ?\n this._filtered.toStream()\n : this.n3Store.match(this.subject, this.predicate, this.object, this.graph);\n }\n\n union(quads) {\n return this._filtered ?\n this._filtered.union(quads)\n : this.n3Store.match(this.subject, this.predicate, this.object, this.graph).addAll(quads);\n }\n\n toArray() {\n return this._filtered ? this._filtered.toArray() : this.n3Store.getQuads(this.subject, this.predicate, this.object, this.graph);\n }\n\n reduce(callback, initialValue) {\n return this.filtered.reduce(callback, initialValue);\n }\n\n toString() {\n return (new N3Writer()).quadsToString(this);\n }\n\n add(quad) {\n return this.filtered.add(quad);\n }\n\n delete(quad) {\n return this.filtered.delete(quad);\n }\n\n has(quad) {\n return this.filtered.has(quad);\n }\n\n match(subject, predicate, object, graph) {\n return new DatasetCoreAndReadableStream(this.filtered, subject, predicate, object, graph, this.options);\n }\n\n *[Symbol.iterator]() {\n yield* this._filtered || this.n3Store.readQuads(this.subject, this.predicate, this.object, this.graph);\n }\n}\n", "import N3Store from './N3Store';\n\nexport default class N3DatasetCoreFactory {\n dataset(quads) {\n return new N3Store(quads);\n }\n}\n", "import DF from './N3DataFactory';\n\n/**\n * Gets rules from a dataset. This will only collect horn rules declared using log:implies.\n */\nexport function getRulesFromDataset(dataset) {\n const rules = [];\n for (const { subject, object } of dataset.match(null, DF.namedNode('http://www.w3.org/2000/10/swap/log#implies'), null, DF.defaultGraph())) {\n const premise = [...dataset.match(null, null, null, subject)];\n const conclusion = [...dataset.match(null, null, null, object)];\n rules.push({ premise, conclusion });\n }\n return rules;\n}\n\nexport default class N3Reasoner {\n constructor(store) {\n this._store = store;\n }\n\n _add(subject, predicate, object, graphItem, cb) {\n // Only add to the remaining indexes if there is not already a value in the index\n if (!this._store._addToIndex(graphItem.subjects, subject, predicate, object)) return;\n this._store._addToIndex(graphItem.predicates, predicate, object, subject);\n this._store._addToIndex(graphItem.objects, object, subject, predicate);\n cb();\n }\n\n // eslint-disable-next-line no-warning-comments\n _evaluatePremise(rule, content, cb, i = 0) {\n let v1, v2, value, index1, index2;\n const [val0, val1, val2] = rule.premise[i].value, index = content[rule.premise[i].content];\n const v0 = !(value = val0.value);\n for (value in v0 ? index : { [value]: index[value] }) {\n if (index1 = index[value]) {\n if (v0) val0.value = Number(value);\n v1 = !(value = val1.value);\n for (value in v1 ? index1 : { [value]: index1[value] }) {\n if (index2 = index1[value]) {\n if (v1) val1.value = Number(value);\n v2 = !(value = val2.value);\n for (value in v2 ? index2 : { [value]: index2[value] }) {\n if (v2) val2.value = Number(value);\n\n if (i === rule.premise.length - 1)\n rule.conclusion.forEach(c => {\n // eslint-disable-next-line max-nested-callbacks\n this._add(c.subject.value, c.predicate.value, c.object.value, content, () => { cb(c); });\n });\n else\n this._evaluatePremise(rule, content, cb, i + 1);\n }\n if (v2) val2.value = null;\n }\n }\n if (v1) val1.value = null;\n }\n }\n if (v0) val0.value = null;\n }\n\n _evaluateRules(rules, content, cb) {\n for (let i = 0; i < rules.length; i++) {\n this._evaluatePremise(rules[i], content, cb);\n }\n }\n\n // A naive reasoning algorithm where rules are just applied by repeatedly applying rules\n // until no more evaluations are made\n _reasonGraphNaive(rules, content) {\n const newRules = [];\n\n function addRule(conclusion) {\n if (conclusion.next)\n conclusion.next.forEach(rule => {\n newRules.push([conclusion.subject.value, conclusion.predicate.value, conclusion.object.value, rule]);\n });\n }\n\n // eslint-disable-next-line func-style\n const addConclusions = conclusion => {\n conclusion.forEach(c => {\n // eslint-disable-next-line max-nested-callbacks\n this._add(c.subject.value, c.predicate.value, c.object.value, content, () => { addRule(c); });\n });\n };\n\n this._evaluateRules(rules, content, addRule);\n\n let r;\n while ((r = newRules.pop()) !== undefined) {\n const [subject, predicate, object, rule] = r;\n const v1 = rule.basePremise.subject.value;\n if (!v1) rule.basePremise.subject.value = subject;\n const v2 = rule.basePremise.predicate.value;\n if (!v2) rule.basePremise.predicate.value = predicate;\n const v3 = rule.basePremise.object.value;\n if (!v3) rule.basePremise.object.value = object;\n\n if (rule.premise.length === 0) {\n addConclusions(rule.conclusion);\n }\n else {\n this._evaluatePremise(rule, content, addRule);\n }\n\n if (!v1) rule.basePremise.subject.value = null;\n if (!v2) rule.basePremise.predicate.value = null;\n if (!v3) rule.basePremise.object.value = null;\n }\n }\n\n _createRule({ premise, conclusion }) {\n const varMapping = {};\n\n const toId = value => value.termType === 'Variable' ?\n // If the term is a variable, then create an empty object that values can be placed into\n (varMapping[value.value] = varMapping[value.value] || {}) :\n // If the term is not a variable, then set the ID value\n { value: this._store._termToNewNumericId(value) };\n\n // eslint-disable-next-line func-style\n const t = term => ({ subject: toId(term.subject), predicate: toId(term.predicate), object: toId(term.object) });\n\n return {\n premise: premise.map(p => t(p)),\n conclusion: conclusion.map(p => t(p)),\n variables: Object.values(varMapping),\n };\n }\n\n reason(rules) {\n if (!Array.isArray(rules)) {\n rules = getRulesFromDataset(rules);\n }\n rules = rules.map(rule => this._createRule(rule));\n\n for (const r1 of rules) {\n for (const r2 of rules) {\n for (let i = 0; i < r2.premise.length; i++) {\n const p = r2.premise[i];\n for (const c of r1.conclusion) {\n if (termEq(p.subject, c.subject) && termEq(p.predicate, c.predicate) && termEq(p.object, c.object)) {\n const set = new Set();\n\n const premise = [];\n\n // Since these *will* be substituted when we apply the rule,\n // we need to do this, so that we index correctly in the subsequent section\n p.subject.value = p.subject.value || 1;\n p.object.value = p.object.value || 1;\n p.predicate.value = p.predicate.value || 1;\n\n for (let j = 0; j < r2.premise.length; j++) {\n if (j !== i) {\n premise.push(getIndex(r2.premise[j], set));\n }\n }\n\n // eslint-disable-next-line no-warning-comments\n // TODO: Create new rule, with new indexing\n // Future, 'collapse' the next statements when they share a premise/base-premise\n (c.next = c.next || []).push({\n premise,\n conclusion: r2.conclusion,\n // This is a single premise of the form { subject, predicate, object },\n // which we can use to instantiate the rule using the new data that was emitted\n basePremise: p,\n });\n }\n r2.variables.forEach(v => { v.value = null; });\n }\n }\n }\n }\n\n for (const rule of rules) {\n const set = new Set();\n rule.premise = rule.premise.map(p => getIndex(p, set));\n }\n\n const graphs = this._store._getGraphs();\n for (const graphId in graphs) {\n this._reasonGraphNaive(rules, graphs[graphId]);\n }\n\n this._store._size = null;\n }\n}\n\nfunction getIndex({ subject, predicate, object }, set) {\n const s = subject.value || set.has(subject) || (set.add(subject), false);\n const p = predicate.value || set.has(predicate) || (set.add(predicate), false);\n const o = object.value || set.has(object) || (set.add(object), false);\n\n return (!s && p) ? { content: 'predicates', value: [predicate, object, subject] } :\n o ? { content: 'objects', value: [object, subject, predicate] } :\n { content: 'subjects', value: [subject, predicate, object] };\n}\n\nfunction termEq(t1, t2) {\n if (t1.value === null) {\n t1.value = t2.value;\n }\n return t1.value === t2.value;\n}\n", "// **N3StreamParser** parses a text stream into a quad stream.\nimport { Transform } from 'readable-stream';\nimport N3Parser from './N3Parser';\n\n// ## Constructor\nexport default class N3StreamParser extends Transform {\n constructor(options) {\n super({ decodeStrings: true });\n this._readableState.objectMode = true;\n\n // Set up parser with dummy stream to obtain `data` and `end` callbacks\n const parser = new N3Parser(options);\n let onData, onEnd;\n\n const callbacks = {\n // Handle quads by pushing them down the pipeline\n onQuad: (error, quad) => { error && this.emit('error', error) || quad && this.push(quad); },\n // Emit prefixes through the `prefix` event\n onPrefix: (prefix, uri) => { this.emit('prefix', prefix, uri); },\n };\n\n if (options && options.comments)\n callbacks.onComment = comment => { this.emit('comment', comment); };\n\n parser.parse({\n on: (event, callback) => {\n switch (event) {\n case 'data': onData = callback; break;\n case 'end': onEnd = callback; break;\n }\n },\n }, callbacks);\n\n // Implement Transform methods through parser callbacks\n this._transform = (chunk, encoding, done) => { onData(chunk); done(); };\n this._flush = done => { onEnd(); done(); };\n }\n\n // ### Parses a stream of strings\n import(stream) {\n stream.on('data', chunk => { this.write(chunk); });\n stream.on('end', () => { this.end(); });\n stream.on('error', error => { this.emit('error', error); });\n return this;\n }\n}\n", "// **N3StreamWriter** serializes a quad stream into a text stream.\nimport { Transform } from 'readable-stream';\nimport N3Writer from './N3Writer';\n\n// ## Constructor\nexport default class N3StreamWriter extends Transform {\n constructor(options) {\n super({ encoding: 'utf8', writableObjectMode: true });\n\n // Set up writer with a dummy stream object\n const writer = this._writer = new N3Writer({\n write: (quad, encoding, callback) => { this.push(quad); callback && callback(); },\n end: callback => { this.push(null); callback && callback(); },\n }, options);\n\n // Implement Transform methods on top of writer\n this._transform = (quad, encoding, done) => { writer.addQuad(quad, done); };\n this._flush = done => { writer.end(done); };\n }\n\n// ### Serializes a stream of quads\n import(stream) {\n stream.on('data', quad => { this.write(quad); });\n stream.on('end', () => { this.end(); });\n stream.on('error', error => { this.emit('error', error); });\n stream.on('prefix', (prefix, iri) => { this._writer.addPrefix(prefix, iri); });\n return this;\n }\n}\n", "import Lexer from './N3Lexer';\nimport Parser from './N3Parser';\nimport Writer from './N3Writer';\nimport Store, { N3EntityIndex as EntityIndex } from './N3Store';\nimport StoreFactory from './N3StoreFactory';\nimport Reasoner, { getRulesFromDataset } from './N3Reasoner';\nimport StreamParser from './N3StreamParser';\nimport StreamWriter from './N3StreamWriter';\nimport * as Util from './N3Util';\nimport BaseIRI from './BaseIRI';\n\nimport {\n default as DataFactory,\n\n Term,\n NamedNode,\n Literal,\n BlankNode,\n Variable,\n DefaultGraph,\n Quad,\n Triple,\n\n termFromId,\n termToId,\n} from './N3DataFactory';\n\n// Named exports\nexport {\n Lexer,\n Parser,\n Writer,\n Store,\n StoreFactory,\n EntityIndex,\n StreamParser,\n StreamWriter,\n Util,\n Reasoner,\n BaseIRI,\n\n DataFactory,\n\n Term,\n NamedNode,\n Literal,\n BlankNode,\n Variable,\n DefaultGraph,\n Quad,\n Triple,\n\n termFromId,\n termToId,\n getRulesFromDataset,\n};\n\n// Export all named exports as a default object for backward compatibility\nexport default {\n Lexer,\n Parser,\n Writer,\n Store,\n StoreFactory,\n EntityIndex,\n StreamParser,\n StreamWriter,\n Util,\n Reasoner,\n BaseIRI,\n\n DataFactory,\n\n Term,\n NamedNode,\n Literal,\n BlankNode,\n Variable,\n DefaultGraph,\n Quad,\n Triple,\n\n termFromId,\n termToId,\n};\n", "import oldmCore from './oldm.mjs'\nimport * as oldmN3 from './oldm-n3.mjs'\n\nconst oldm = {\n\tcontext: oldmCore,\n\t...oldmN3\n}\n\nglobalThis.oldm = oldm\n\nexport default oldm", "/**\n * checks if data is a wrapper object for one of the primitive types\n *\n * @param {mixed} data The data to check\n * @return {Boolean} True if data is a primitive wrapper object\n */\nfunction isPrimitiveWrapper(data)\n{\n return [String, Boolean, Number, BigInt].includes(data?.constructor)\n}\n\n/**\n * Selects only one of the matching values. You can specify whether to return\n * the 'last' value, or the 'first'. Or you can pass a function as the whichOne\n * parameter and let it decide which value to return.\n * \n * @param function selectFn The selector, e.g. `_.name`\n * @param {mixed} whichOne Default value 'last'. Either 'first', 'last' or a function with (array) => value\n * @return {mixed} One of the matching values\n */\nexport function one(selectFn, whichOne='last')\n{\n return (data, key, context) => {\n if (typeof selectFn !== 'function') {\n let selectFnOriginal = selectFn\n selectFn = (o) => {\n return from(o[key]).select(selectFnOriginal);\n }\n }\n let result = selectFn(data, key, context)\n if (Array.isArray(result)) {\n if (whichOne=='last') {\n result = result.pop()\n } else if (whichOne=='first') {\n result = result.shift()\n } else if (typeof whichOne == 'function') {\n result = whichOne(result)\n }\n }\n return result\n }\n}\n\n/**\n * Turns the selected value into an array, if it wasn't already an array\n * \n * @param {function} selectFn the selector function, e.g. _.name\n * @return {array}\n */\nexport function many(selectFn)\n{\n return (data, key, context) => {\n if (typeof selectFn !== 'function') {\n let selectFnOriginal = selectFn\n selectFn = (o) => {\n return from(o[key]).select(selectFnOriginal);\n }\n }\n let result = selectFn(data, key, context)\n if (result == null) {\n result = []\n } else if (!Array.isArray(result)) {\n result = [result]\n }\n return result\n }\n}\n\n/**\n * Returns the first matching value that is not null or undefined or an empty string.\n * \n * @param {...mixed} args A list of selector functions or static values.\n * @return the first selected value that is not empty (null, undefined or \"\")\n */\nexport function first(...args)\n{\n return (data, key, context) => {\n let result = null\n for (let arg of args) {\n if (typeof arg == 'function') {\n result = arg(data, key, context)\n if (result!=null && result!==undefined && result!==\"\") {\n return result\n }\n } else if (arg!==null && arg!==undefined && arg!==\"\") {\n return arg\n }\n }\n return null\n }\n}\n\n\n\n/**\n * implements a minimal graphql-alike selection syntax, using plain javascript\n * use with from(...arr).select\n *\n * @param {object|function} filter Which keys with which values you want\n * @return Function a function that selects values from objects as defined by filter\n */\nfunction getSelectFn(filter)\n{\n let fns = []\n if (filter instanceof Function) {\n fns.push(filter)\n } else for (const [filterKey, filterValue] of Object.entries(filter)) {\n if (filterValue instanceof Function) {\n fns.push( (data) => {\n if (filterKey=='_') {\n return filterValue(data, filterKey, 'select')\n } else {\n return {\n [filterKey]: filterValue(data, filterKey, 'select')\n }\n }\n })\n } else if (!isPrimitiveWrapper(filterValue)) {\n fns.push( (data) => {\n if (filterKey=='_') {\n return from(data[filterKey]).select(filterValue)\n } else {\n return {\n [filterKey]: from(data[filterKey]).select(filterValue)\n }\n }\n })\n } else {\n fns.push( () => {\n if (filterKey=='_') {\n return filterValue\n } else {\n return {\n [filterKey]: filterValue\n }\n }\n })\n }\n }\n if (fns.length==1) {\n return fns[0]\n }\n return (data) => {\n let result = {}\n for (let fn of fns) {\n Object.assign(result, fn(data))\n }\n return result\n }\n}\n\n/**\n * This function checks whether the given data matches the given pattern\n * Pattern can be a function, a regular expression, an object or a literal value\n * The pattern is matched recursively\n * Use with from(...arr).where\n *\n * @param {mixed} pattern The pattern to test\n * @return Function The filter function\n */\nexport function getMatchFn(pattern)\n{\n let fns = []\n if (Array.isArray(pattern)) {\n fns.push(anyOf(...pattern))\n } else if (pattern instanceof RegExp) {\n fns.push((data) => pattern.test(data))\n } else if (pattern instanceof Function) {\n fns.push((data) => pattern(data))\n } else if (!isPrimitiveWrapper(pattern)) {\n let patternMatches = {}\n for (const [wKey, wVal] of Object.entries(pattern)) {\n patternMatches[wKey] = getMatchFn(wVal)\n }\n let matchFn = (data) => {\n if (Array.isArray(data)) {\n return data.filter(element => matchFn(element)).length>0\n }\n if (isPrimitiveWrapper(data)) {\n return false\n }\n for (let wKey in patternMatches) {\n let patternMatchFn = patternMatches[wKey]\n if (!patternMatchFn(data?.[wKey])) {\n return false\n }\n }\n return true\n }\n fns.push(matchFn)\n } else {\n fns.push((data) => {\n if (Array.isArray(data)) {\n return data.filter(element => pattern==element).length>0\n } else {\n return pattern==data\n }\n })\n }\n if (fns.length==1) {\n return fns[0]\n }\n return (data) => {\n for (let fn of fns) {\n if (!fn(data)) {\n return false\n }\n }\n return true\n }\n}\n\n/**\n * If used in a pattern for orderBy(), denotes that the key\n * value should be sorted ascending\n */\nexport const asc = Symbol('asc')\n\n/**\n * If used in a pattern for orderBy(), denotes that the key\n * value should be sorted descending\n */\nexport const desc = Symbol('desc')\n\n/**\n * Returns a function to sort an array according to the pattern. A pattern is\n * an object with keys which are a sub pattern object or\n * one of the asc/desc symbols, or a custom sort(a,b) function\n * @param {mixed} pattern The comparison pattern\n * @return Function The function to use with toSorted()\n */\nexport function getSortFn(pattern)\n{\n let comparisons = Object.entries(pattern)\n let fns = []\n for (let [key,compare] of comparisons) {\n if (compare instanceof Function) {\n fns.push(compare)\n } else if (compare === asc) {\n fns.push((a,b) => (a[key]>b[key] ? 1 : a[key]<b[key] ? -1: 0))\n } else if (compare === desc) {\n fns.push((a,b) => (a[key]<b[key] ? 1 : a[key]>b[key] ? -1: 0))\n } else if (!isPrimitiveWrapper(compare)) {\n let subFn = getSortFn(compare)\n fns.push((a,b) => subFn(a[key],b[key]))\n } else {\n throw new Error('Unknown sort order',compare)\n }\n }\n if (fns.length==1) {\n return fns[0] // special case, if you only have one sort element, just return that, it is faster\n }\n return (a,b) => {\n for (let fn of fns) {\n let result = fn(a,b)\n if (result!==0) {\n return result\n }\n }\n return 0\n }\n}\n\n/**\n * Like getSelectFn this accepts an object, but function values must be\n * reducers.\n * @param {object|function} filter Which keys with which values you want\n * @return Function a function that reduces values\n */\nexport function getAggregateFn(filter)\n{\n let fns = []\n if (filter instanceof Function) {\n fns.push(filter)\n } else for (const [filterKey, filterValue] of Object.entries(filter)) {\n if (filterValue instanceof Function) {\n fns.push( (a, o, i, l) => {\n if (isPrimitiveWrapper(a)) {\n a = {}\n }\n if (o.reduce) {\n a[filterKey] = o.reduce(filterValue, a[filterKey] || [])\n } else {\n a[filterKey] = filterValue(a[filterKey] || [], o, i, l)\n }\n return a\n })\n } else if (!isPrimitiveWrapper(filterValue)) {\n fns.push( (a, o) => {\n if (isPrimitiveWrapper(a)) {\n a = {}\n }\n a[filterKey] = from(o[filterKey]).reduce(filterValue, [])\n return a\n })\n } else {\n fns.push( (a) => {\n if (isPrimitiveWrapper(a)) {\n a = {}\n }\n a[filterKey] = filterValue\n return a\n })\n }\n }\n if (fns.length==1) {\n return fns[0]\n }\n return (a, o, i, l) => {\n let result = {}\n for (let fn of fns) {\n Object.assign(result, fn(a, o, i, l))\n }\n return result\n }\n}\n\n/**\n * This is an alternative implementation of Object.groupBy\n * With support for objects being part of multiple groups\n * So if pointerFn() returns an array, each element of the\n * array is a group\n *\n */\nfunction getMatchingGroups(data, pointerFn)\n{\n let result = {}\n for (let entity of data) {\n let groups = pointerFn(entity)\n if (!Array.isArray(groups)) {\n groups = [groups]\n }\n for (let group of groups) {\n if (typeof group!='string' && !(group instanceof String)) {\n console.warn('JAQT: groupBy(selector) can only handle string values, got:',group)\n continue\n }\n if (!result[group]) {\n result[group] = []\n }\n result[group].push(entity)\n }\n }\n return result\n}\n\n/**\n * Returns a function that groups an array by one or more values defined in the pattern\n *\n * @param (object) data The data to parse and get the group from\n * @param (array) properties The properties to group by, in order, should be pointer functions\n */\nfunction groupBy(data, pointerFunctions)\n{\n let pointerFn = pointerFunctions.shift()\n if (typeof pointerFn=='string') {\n pointerFn = _[pointerFn]\n }\n if (typeof pointerFn != 'function') {\n throw new Error('groupBy parameters must be either a property name or a pointer function (e.g.: _.name)')\n }\n let groups = getMatchingGroups(data, pointerFn)\n if (pointerFunctions.length) {\n for (let group in groups) {\n groups[group] = groupBy(groups[group], pointerFunctions)\n }\n }\n return groups\n}\n\n/**\n * Creates a function to sum (add) all grouped values, assumes/enforces all values are floats\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.price\n * @return Function function (value, accumulator) => accumulator + value\n */\nexport function sum(fetchFn)\n{\n return (a,o) => {\n if (Array.isArray(a)) {\n a = 0\n }\n a += parseFloat(fetchFn(o)) || 0\n return a\n }\n}\n\n/**\n * Creates a function to average all grouped values, assumes/enforces all values are floats\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.price\n * @return Function function (value, accumulator) => average(accumulator + value)\n */\nexport function avg(fetchFn)\n{\n return (a,o,count) => {\n return +a + ((parseFloat(fetchFn(o)) || 0) - a) / (count+1)\n }\n}\n\n/**\n * Creates a function that removes duplicate values from the grouped data\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.name\n * @return Function\n */\nexport function distinct(fetchFn)\n{\n return (a, o, context) => {\n let v\n if (context=='select') {\n // a is the data param in select() context, o is the key\n v = fetchFn(a)\n if (Array.isArray(v)) { \n return v.filter((val,i,arr) => arr.indexOf(val)===i)\n }\n } else { \n // assume context is reduce, since context is the 3rd param, in reduce that contains the index\n // a is the accumulator, o is the current object/value\n let v = fetchFn(o)\n if (!a.includes[v]) {\n a.push(v)\n }\n }\n return a\n }\n}\n\n/**\n * Creates a function to count all grouped values\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.price\n * @return Function function (value, accumulator) => accumulator + 1\n */\nexport function count()\n{\n return (a) => {\n if (Array.isArray(a)) {\n a = 0\n }\n return a+1\n }\n}\n\n/**\n * Creates a function to find the maximum value in all grouped values, assumes/enforces all values are floats\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.price\n * @return Function function (value, accumulator) => Math.max(accumulator, value)\n */\nexport function max(fetchFn)\n{\n return (a,o) => {\n if (Array.isArray(a)) {\n a = Number.NEGATIVE_INFINITY\n }\n let value = parseFloat(fetchFn(o))\n if (!isNaN(value) && value>a) {\n a = value\n }\n return a\n }\n}\n\n/**\n * Creates a function to find the minimum value in all grouped values, assumes/enforces all values are floats\n *\n * @param fetchFn the function that fetches the correct value, e.g. _.price\n * @return Function function (value, accumulator) => Math.min(accumulator, value)\n */\nexport function min(fetchFn)\n{\n return (a,o) => {\n if (Array.isArray(a)) {\n a = Number.POSITIVE_INFINITY\n }\n let value = parseFloat(fetchFn(o))\n if (!isNaN(value) && value<a) {\n a = value\n }\n return a\n }\n}\n\n\n/**\n * Not inverts the result from the matches function.\n * It returns a function expecting a data parameter and inverts the result\n * of matching that data with the pattern given to not()\n *\n * @param {mixed} pattern The pattern to match not\n * @return {function} A function that inverts the match, with a single data parameter\n */\nexport function not(...pattern)\n{\n let matchFn = getMatchFn(pattern)\n return data => !matchFn(data)\n}\n\n/**\n * AnyOf returns a function that returns true if any of the patterns match the data parameter\n *\n * @param {...mixed} patterns The patterns to test\n * @return {Boolean} True if at least one pattern matches\n */\nexport function anyOf(...patterns)\n{\n let matchFns = patterns.map(pattern => getMatchFn(pattern))\n return data => matchFns.some(fn => fn(data))\n}\n\n/**\n * AllOf returns a function that returns true if all of the patterns match the data parameter\n *\n * @param {...mixed} patterns The patterns to test\n * @return {Boolean} True if all of the patterns match\n */\nexport function allOf(...patterns)\n{\n let matchFns = patterns.map(pattern => getMatchFn(pattern))\n return data => matchFns\n .map(matchFn => matchFn(data))\n .filter(value => !value)\n .length===0\n}\n\n/**\n * Handler for proxying functions like filter, map, etc. So that\n * results of those functions will still be proxied when using from()\n * and you can chain .select() after it\n *\n * @type {Object}\n */\nconst FunctionProxyHandler = {\n apply(target, thisArg, argumentsList)\n {\n let result = target.apply(thisArg,argumentsList)\n if (typeof result === 'object') {\n return new Proxy(result, DataProxyHandler)\n }\n return result\n }\n}\n\n/**\n * Handler for proxying data returned with from()\n *\n * @type {Object}\n */\nconst DataProxyHandler = {\n get(target, property)\n {\n let result = null\n if (typeof property === 'symbol') { // handles iterators and other stuff we don't want to change\n result = target[property]\n }\n if (Array.isArray(target)) {\n switch(property) {\n case 'where':\n result = function(shape) {\n let matchFn = getMatchFn(shape)\n return new Proxy(target\n .filter(element => matchFn(element))\n , DataProxyHandler)\n }\n break\n case 'select':\n result = function(filter) {\n let selectFn = getSelectFn(filter)\n return new Proxy(target\n .map(selectFn)\n , DataProxyHandler)\n }\n break\n case 'reduce':\n result = function(pattern, initial=[]) {\n let aggregateFn = getAggregateFn(pattern)\n let temp = target.reduce(aggregateFn, initial)\n if (Array.isArray(temp)) {\n return new Proxy(temp, DataProxyHandler)\n } else if (!isPrimitiveWrapper(temp)) {\n return new Proxy(temp, GroupByProxyHandler)\n } else {\n return temp\n }\n }\n break\n case 'orderBy':\n result = function(pattern) {\n let sortFn = getSortFn(pattern)\n return new Proxy(target\n .toSorted(sortFn)\n , DataProxyHandler)\n }\n break\n case 'groupBy':\n result = function(...groups) {\n let temp = groupBy(target, groups)\n return new Proxy(temp\n , GroupByProxyHandler)\n }\n break\n }\n }\n if (!result && target && typeof target==='object') {\n if (property==='select') {\n result = function(filter) {\n let selector = getSelectFn(filter)\n return new Proxy(selector(target), DataProxyHandler)\n }\n }\n }\n if (!result && target && typeof target[property]==='function'\n ) {\n result = new Proxy(target[property], FunctionProxyHandler)\n }\n if (!result) {\n result = target[property]\n }\n return result\n }\n}\n\nconst GroupByProxyHandler = {\n get(target, property)\n {\n let result = null\n switch(property) {\n case 'select':\n result = function(filter) {\n let selectFn = getSelectFn(filter)\n let result = {}\n for (let group in target) {\n if (Array.isArray(target[group])) {\n result[group] = new Proxy(target[group].map(selectFn), DataProxyHandler)\n } else {\n result[group] = new Proxy(target[group], GroupByProxyHandler)\n }\n }\n return result\n }\n break\n case 'reduce':\n result = function(pattern, initial=[]) {\n let aggregateFn = getAggregateFn(pattern)\n let result = {}\n for (let group in target) {\n if (Array.isArray(target[group])) {\n let temp = target[group].reduce(aggregateFn, initial)\n if (Array.isArray(temp)) {\n result[group] = new Proxy(temp, DataProxyHandler)\n } else if (!isPrimitiveWrapper(temp)) {\n result[group] = new Proxy(temp, GroupByProxyHandler)\n } else {\n result[group] = temp\n }\n } else {\n result[group] = new Proxy(target[group], GroupByProxyHandler)\n }\n }\n return result\n }\n break\n default:\n if (Array.isArray(target[property])) {\n result = from(target[property])\n } else {\n result = target[property]\n }\n break\n }\n return result\n }\n}\n\n/**\n * Handler for proxying null of undefined values, so that\n * you can still chain the from.where.select functions\n *\n * @type {Object}\n */\nconst EmptyHandler = {\n get(target, property)\n {\n let result = null\n switch(property) {\n case 'where':\n result = function() {\n return new Proxy(new Null(), EmptyHandler)\n }\n break\n case 'reduce':\n case 'select':\n result = function() {\n return null\n }\n break\n case 'orderBy':\n result = function() {\n return new Proxy(new Null(), EmptyHandler)\n }\n break\n case 'groupBy':\n result = function() {\n return new Proxy(new Null(), EmptyHandler)\n }\n break\n }\n if (!result && typeof target?.[property] == 'function') {\n result = target[property];\n }\n return result\n }\n}\n\nclass Null \n{\n toJSON() {\n return null\n }\n}\n\n/**\n * This returns a proxy object for the given data, that adds\n * .where() and .select() functions\n *\n * @param {mixed} data The data to proxy\n * @return {Proxy} The proxy\n */\nexport function from(data)\n{\n if (!data || typeof data !== 'object') {\n return new Proxy(new Null(), EmptyHandler)\n }\n return new Proxy(data, DataProxyHandler)\n}\n\n/**\n * This is the function factory that builds the _ function\n * It will return a function that walks over the root object to\n * return the correct data\n *\n * @param {array} path The list of properties to access in order\n * @return {function} The accessor function that returns the data matching the path\n */\nfunction getPointerFn(path)\n{\n /**\n * The json pointer function\n * @param {mixed} data Any data\n * @param {string} key Optional key for data objects in select context or group in groupBy context\n * @return {mixed} data or data[key]\n */\n return (data, key) => {\n if (path?.length>0) {\n let localPath = path.slice()\n let prop = localPath.shift()\n while(prop) {\n if (Array.isArray(data) && parseInt(prop)!=prop) {\n localPath.unshift(prop) // put it back to call in .map\n return data.map(getPointerFn(localPath))\n } else if (typeof data?.[prop] != 'undefined') {\n data = data[prop]\n } else {\n data = null\n }\n prop = localPath.shift()\n }\n return data\n } else if (key && key!=='_') {\n if (typeof data?.[key] != 'undefined') {\n return data[key]\n } else {\n return null\n }\n } else {\n return data\n }\n }\n}\n\n/**\n * Handler for the getval proxy, used to implement _\n * The get trap handles things like _.key, it returns a function\n * so that select can apply it on result objects\n *\n * @type {Object}\n */\nconst pointerHandler = (path) => {\n if (!path) {\n path = []\n }\n return {\n get(target, property)\n {\n if (property=='constructor' || typeof property == 'symbol') {\n return target[property]\n }\n // creates a new path, which is passed to pointerFn en pointerHandler\n // so it is kept in a new stack frame\n let newpath = path.concat([property])\n return new Proxy(getPointerFn(newpath), pointerHandler(newpath))\n },\n apply(target, thisArg, argumentsList)\n {\n let result = target(...argumentsList)\n if (Array.isArray(result)) {\n result = result.flat(Infinity)\n }\n return result\n }\n }\n}\n\n/**\n * Placeholder in select queries that gets replaced with the\n * object or value being selected, or a specific key of that object\n *\n * @type {Proxy}\n */\nexport const _ = new Proxy(getPointerFn(), pointerHandler())\n", "import oldm from '@muze-nl/oldm'\n\nexport default function oldmmw(options)\n{\n\toptions = Object.assign({\n\t\tcontentType: 'text/turtle',\n\t\tprefixes: {\n\t\t 'ldp': 'http://www.w3.org/ns/ldp#',\n\t\t 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n\t\t 'dct': 'http://purl.org/dc/terms/',\n\t\t 'stat': 'http://www.w3.org/ns/posix/stat#',\n\t\t 'turtle': 'http://www.w3.org/ns/iana/media-types/text/turtle#',\n\t\t 'schem': 'https://schema.org/',\n\t\t 'solid': 'http://www.w3.org/ns/solid/terms#',\n\t\t 'acl': 'http://www.w3.org/ns/auth/acl#',\n\t\t 'pims': 'http://www.w3.org/ns/pim/space#',\n\t\t 'vcard': 'http://www.w3.org/2006/vcard/ns#',\n\t\t 'foaf': 'http://xmlns.com/foaf/0.1/'\n\t\t},\n\t\tparser: oldm.n3Parser,\n\t\twriter: oldm.n3Writer\n\t}, options)\n\n\tif (!options.prefixes['ldp']) {\n\t\toptions.prefixes['ldp'] = 'http://www.w3.org/ns/ldp#'\n\t}\n\n\tconst context = oldm.context(options)\n\n\treturn async function oldmmw(req, next) {\n\t\tif (!req.headers.get('Accept')) {\n req = req.with({\n headers: {\n 'Accept': options.accept ?? options.contentType\n }\n })\n }\n if (req.method!=='GET' && req.method!=='HEAD') {\n //https://developer.mozilla.org/en-US/docs/Web/API/Request/body\n if (req.data && typeof req.data=='object' && !(req.data instanceof ReadableStream)) {\n const contentType = req.headers.get('Content-Type')\n if (!contentType || isPlainText(contentType)) {\n req = req.with({\n headers: {\n 'Content-Type': options.contentType,\n }\n })\n }\n if (isLinkedData(req.headers.get('Content-Type'))) {\n req = req.with({\n body: await context.writer(req.data)\n })\n }\n }\n }\n let res = await next(req)\n if (res && isLinkedData(res.headers?.get('Content-Type'))) {\n \tlet tempRes = res.clone()\n \tlet body = await tempRes.text()\n \ttry {\n \t\tlet ld = context.parse(body, req.url, res.headers.get('Content-Type'))\n \t\treturn res.with({\n \t\t\tbody: ld\n \t\t})\n \t} catch(e) {\n \t\t// ignore parse errors\n \t}\n }\n return res\n\t}\n}\n\nconst mimetypes = [\n\t/^text\\/turtle\\b/,\n\t/^application\\/n-quads\\b/,\n\t/^text\\/x-nquads\\b/,\n\t/^appliction\\/n-triples\\b/,\n\t/^application\\/trig\\b/\n]\n\nfunction isLinkedData(contentType) {\n\tfor (const re of mimetypes) {\n\t\tif (re.exec(contentType)) {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn false\n}", "import oldmmw from './oldmmw.mjs'\n\nglobalThis.oldmmw = oldmmw\n\nexport default oldmmw", "import Path from '@muze-nl/jsfs/src/Path.mjs';\nimport HttpAdapter from '@muze-nl/jsfs/src/Adapters/Http.mjs'\nimport {client, url} from '@muze-nl/metro/src/metro.mjs'\nimport getdatamw from '@muze-nl/metro/src/mw/getdata.mjs'\nimport oidc from '@muze-nl/metro-oidc'\nimport oldmmw from '@muze-nl/metro-oldm'\nimport oldm from '@muze-nl/oldm' \nimport { _, from } from '@muze-nl/jaqt/src/jaqt.mjs'\n\nexport default class SolidAdapter extends HttpAdapter\n{\n #client\n #path\n\n constructor(metroClient, path='/', solidConfiguration={})\n {\n metroClient = client(metroClient)\n .with( oidc.oidcmw(solidConfiguration))\n .with( oldmmw(solidConfiguration))\n path = Path.collapse(path);\n super(metroClient, path)\n this.#client = metroClient\n this.#path = path\n }\n\n get name()\n {\n return 'SolidAdapter';\n }\n\n async read(path)\n {\n let response = await this.#client.get(Path.collapse(path, this.#path));\n let result = {\n type: this.getMimetype(response),\n name: Path.filename(path),\n http: {\n headers: response.headers,\n status: response.status,\n url: response.url\n }\n }\n if (response.data) {\n result.data = response.data\n }\n if (result.type.match(/text\\/.*/)) {\n result.contents = await response.text()\n } else if (result.type.match(/application\\/json.*/)) {\n result.contents = await response.json()\n } else {\n result.contents = await response.blob()\n }\n return result\n }\n\n async list(path)\n {\n let result = await this.read(path)\n if (result.data) {\n if (!result.data.primary?.ldp$contains) {\n throw new Error(path+' could not find ldp container', {cause: result})\n }\n return from(result.data.primary.ldp$contains)\n .where({\n a: 'ldp$Resource'\n })\n .select({\n filename: o => jsfs.path.filename(metro.url(o.id).pathname),\n path: o => metro.url(o.id).pathname,\n type: o => o.a.includes('ldp$Container') ? 'folder' : 'file'\n })\n } else {\n throw new Error(path+' could not be parsed', {cause: result}) \n }\n }\n\n}", "import '@muze-nl/jsfs'\nimport '@muze-nl/metro'\nimport '@muze-nl/metro-oidc'\nimport '@muze-nl/oldm'\nimport '@muze-nl/jaqt'\nimport '@muze-nl/assert'\nimport SolidAdapter from './SolidAdapter.js'\n\nexport function solidClient(...options) {\n\treturn new jsfs.fs(new SolidAdapter(...options))\n}\n\nexport default SolidAdapter\n\nglobalThis.solidClient = solidClient\nglobalThis.SolidAdapter = SolidAdapter"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["require_base64_js", "__commonJSMin", "exports", "byteLength", "toByteArray", "fromByteArray", "lookup", "revLookup", "Arr", "code", "i", "len", "getLens", "b64", "validLen", "placeHoldersLen", "lens", "_byteLength", "tmp", "arr", "curByte", "tripletToBase64", "num", "encodeChunk", "uint8", "start", "end", "output", "extraBytes", "parts", "maxChunkLength", "len2", "require_ieee754", "__commonJSMin", "exports", "buffer", "offset", "isLE", "mLen", "nBytes", "e", "m", "eLen", "eMax", "eBias", "nBits", "i", "s", "value", "c", "rt", "d", "require_buffer", "__commonJSMin", "exports", "base64", "ieee754", "customInspectSymbol", "Buffer", "SlowBuffer", "K_MAX_LENGTH", "typedArraySupport", "arr", "proto", "createBuffer", "length", "buf", "arg", "encodingOrOffset", "allocUnsafe", "from", "value", "fromString", "fromArrayView", "isInstance", "fromArrayBuffer", "valueOf", "b", "fromObject", "assertSize", "size", "alloc", "fill", "encoding", "checked", "string", "byteLength", "actual", "fromArrayLike", "array", "i", "arrayView", "copy", "byteOffset", "obj", "len", "numberIsNaN", "a", "x", "y", "list", "buffer", "pos", "mustMatch", "loweredCase", "utf8ToBytes", "base64ToBytes", "slowToString", "start", "end", "hexSlice", "utf8Slice", "asciiSlice", "latin1Slice", "base64Slice", "utf16leSlice", "swap", "n", "m", "str", "max", "target", "thisStart", "thisEnd", "thisCopy", "targetCopy", "bidirectionalIndexOf", "val", "dir", "arrayIndexOf", "indexSize", "arrLength", "valLength", "read", "foundIndex", "found", "j", "hexWrite", "offset", "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", "hi", "checkInt", "min", "maxBytes", "wrtBigUInt64LE", "checkIntBI", "wrtBigUInt64BE", "limit", "sub", "checkIEEE754", "writeFloat", "littleEndian", "writeDouble", "targetStart", "code", "errors", "E", "sym", "getMessage", "Base", "name", "range", "input", "msg", "received", "addNumericalSeparator", "checkBounds", "type", "INVALID_BASE64_RE", "base64clean", "units", "leadSurrogate", "byteArray", "c", "src", "dst", "alphabet", "table", "i16", "fn", "BufferBigIntNotDefined", "require_primordials", "__commonJSMin", "exports", "module", "AggregateError", "errors", "message", "i", "self", "el", "sep", "fn", "start", "end", "thisArgs", "args", "instance", "props", "name", "prop", "obj", "target", "proto", "thenFn", "catchFn", "err", "val", "value", "buf", "len", "require_inspect", "__commonJSMin", "exports", "module", "format", "args", "_unused", "type", "replacement", "value", "require_errors", "__commonJSMin", "exports", "module", "format", "inspect", "CustomAggregateError", "AggregateError", "kIsNodeError", "kTypes", "classRegExp", "nodeInternalPrefix", "codes", "assert", "value", "message", "addNumericalSeparator", "val", "res", "i", "start", "getMessage", "key", "msg", "args", "expectedLength", "E", "code", "Base", "NodeError", "hideStackFrames", "fn", "hidden", "aggregateTwoErrors", "innerError", "outerError", "err", "AbortError", "options", "name", "expected", "actual", "types", "instances", "other", "pos", "last", "_actual$constructor", "inspected", "reason", "input", "_value$constructor", "type", "len", "a", "str", "range", "received", "limit", "require_browser", "__commonJSMin", "exports", "module", "AbortController", "AbortSignal", "require_events", "__commonJSMin", "exports", "module", "R", "ReflectApply", "target", "receiver", "args", "ReflectOwnKeys", "ProcessEmitWarning", "warning", "NumberIsNaN", "value", "EventEmitter", "once", "defaultMaxListeners", "checkListener", "listener", "arg", "n", "_getMaxListeners", "that", "type", "i", "doError", "events", "er", "err", "handler", "len", "listeners", "arrayClone", "_addListener", "prepend", "m", "existing", "w", "onceWrapper", "_onceWrap", "state", "wrapped", "list", "position", "originalListener", "spliceOne", "keys", "key", "_listeners", "unwrap", "evlistener", "unwrapListeners", "emitter", "listenerCount", "arr", "copy", "index", "ret", "name", "resolve", "reject", "errorListener", "resolver", "eventTargetAgnosticAddListener", "addErrorHandlerIfEventEmitter", "flags", "wrapListener", "require_util", "__commonJSMin", "exports", "module", "bufferModule", "format", "inspect", "ERR_INVALID_ARG_TYPE", "kResistStopPropagation", "AggregateError", "SymbolDispose", "AbortSignal", "AbortController", "AsyncFunction", "Blob", "isBlob", "b", "validateAbortSignal", "signal", "name", "validateFunction", "value", "callback", "called", "args", "resolve", "reject", "res", "rej", "fn", "err", "arr", "message", "listener", "removeEventListener", "_removeEventListener", "signals", "ac", "abort", "require_validators", "__commonJSMin", "exports", "module", "ArrayIsArray", "ArrayPrototypeIncludes", "ArrayPrototypeJoin", "ArrayPrototypeMap", "NumberIsInteger", "NumberIsNaN", "NumberMAX_SAFE_INTEGER", "NumberMIN_SAFE_INTEGER", "NumberParseInt", "ObjectPrototypeHasOwnProperty", "RegExpPrototypeExec", "String", "StringPrototypeToUpperCase", "StringPrototypeTrim", "hideStackFrames", "ERR_SOCKET_BAD_PORT", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_ARG_VALUE", "ERR_OUT_OF_RANGE", "ERR_UNKNOWN_SIGNAL", "normalizeEncoding", "isAsyncFunction", "isArrayBufferView", "signals", "isInt32", "value", "isUint32", "octalReg", "modeDesc", "parseFileMode", "name", "def", "validateUint32", "validateInteger", "min", "max", "validateInt32", "positive", "validateString", "validateNumber", "validateOneOf", "oneOf", "reason", "v", "validateBoolean", "getOwnPropertyValueOrDefault", "options", "key", "defaultValue", "validateObject", "allowArray", "allowFunction", "validateDictionary", "validateArray", "minLength", "validateStringArray", "i", "validateBooleanArray", "validateAbortSignalArray", "signal", "indexedName", "validateAbortSignal", "validateSignalName", "validateBuffer", "buffer", "validateEncoding", "data", "encoding", "normalizedEncoding", "length", "validatePort", "port", "allowZero", "validateFunction", "validatePlainFunction", "validateUndefined", "validateUnion", "union", "linkValueRegExp", "validateLinkHeaderFormat", "validateLinkHeaderValue", "hints", "hintsLength", "result", "link", "require_browser", "__commonJSMin", "exports", "module", "process", "cachedSetTimeout", "cachedClearTimeout", "defaultSetTimout", "defaultClearTimeout", "runTimeout", "fun", "runClearTimeout", "marker", "queue", "draining", "currentQueue", "queueIndex", "cleanUpNextTick", "drainQueue", "timeout", "len", "args", "i", "Item", "array", "noop", "name", "dir", "require_utils", "__commonJSMin", "exports", "module", "SymbolAsyncIterator", "SymbolIterator", "SymbolFor", "kIsDestroyed", "kIsErrored", "kIsReadable", "kIsWritable", "kIsDisturbed", "kIsClosedPromise", "kControllerErrorFunction", "isReadableNodeStream", "obj", "strict", "_obj$_readableState", "isWritableNodeStream", "_obj$_writableState", "isDuplexNodeStream", "isNodeStream", "isReadableStream", "isWritableStream", "isTransformStream", "isWebStream", "isIterable", "isAsync", "isDestroyed", "stream", "wState", "rState", "state", "isWritableEnded", "isWritableFinished", "isReadableEnded", "isReadableFinished", "isReadable", "isWritable", "isFinished", "opts", "isWritableErrored", "_stream$_writableStat", "_stream$_writableStat2", "isReadableErrored", "_stream$_readableStat", "_stream$_readableStat2", "isClosed", "isOutgoingMessage", "isServerResponse", "isServerRequest", "_stream$req", "willEmitClose", "isDisturbed", "_stream$kIsDisturbed", "isErrored", "_ref", "_ref2", "_ref3", "_ref4", "_ref5", "_stream$kIsErrored", "_stream$_readableStat3", "_stream$_writableStat3", "_stream$_readableStat4", "_stream$_writableStat4", "require_end_of_stream", "__commonJSMin", "exports", "module", "process", "AbortError", "codes", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_PREMATURE_CLOSE", "kEmptyObject", "once", "validateAbortSignal", "validateFunction", "validateObject", "validateBoolean", "Promise", "PromisePrototypeThen", "SymbolDispose", "isClosed", "isReadable", "isReadableNodeStream", "isReadableStream", "isReadableFinished", "isReadableErrored", "isWritable", "isWritableNodeStream", "isWritableStream", "isWritableFinished", "isWritableErrored", "isNodeStream", "_willEmitClose", "kIsClosedPromise", "addAbortListener", "isRequest", "stream", "nop", "eos", "options", "callback", "_options$readable", "_options$writable", "eosWeb", "readable", "writable", "wState", "rState", "onlegacyfinish", "onfinish", "willEmitClose", "writableFinished", "readableFinished", "onend", "onerror", "err", "closed", "onclose", "errored", "onclosed", "onrequest", "cleanup", "abort", "endCallback", "disposable", "originalCallback", "args", "isAborted", "resolverFn", "finished", "opts", "_opts", "autoCleanup", "resolve", "reject", "require_destroy", "__commonJSMin", "exports", "module", "process", "aggregateTwoErrors", "ERR_MULTIPLE_CALLBACK", "AbortError", "Symbol", "kIsDestroyed", "isDestroyed", "isFinished", "isServerRequest", "kDestroy", "kConstruct", "checkError", "err", "w", "destroy", "cb", "s", "_destroy", "er", "self", "called", "onDestroy", "r", "emitErrorCloseNT", "emitCloseNT", "emitErrorNT", "undestroy", "errorOrDestroy", "stream", "sync", "construct", "constructNT", "onConstruct", "emitConstructNT", "isRequest", "emitCloseLegacy", "emitErrorCloseLegacy", "destroyer", "require_legacy", "__commonJSMin", "exports", "module", "ArrayIsArray", "ObjectSetPrototypeOf", "EE", "Stream", "opts", "dest", "options", "source", "ondata", "chunk", "ondrain", "onend", "onclose", "didOnEnd", "onerror", "er", "cleanup", "prependListener", "emitter", "event", "fn", "require_add_abort_signal", "__commonJSMin", "exports", "module", "SymbolDispose", "AbortError", "codes", "isNodeStream", "isWebStream", "kControllerErrorFunction", "eos", "ERR_INVALID_ARG_TYPE", "addAbortListener", "validateAbortSignal", "signal", "name", "stream", "onAbort", "disposable", "require_buffer_list", "__commonJSMin", "exports", "module", "StringPrototypeSlice", "SymbolIterator", "TypedArrayPrototypeSet", "Uint8Array", "Buffer", "inspect", "v", "entry", "ret", "s", "p", "n", "hasStrings", "data", "slice", "c", "str", "retLen", "buf", "_", "options", "require_state", "__commonJSMin", "exports", "module", "MathFloor", "NumberIsInteger", "validateInteger", "ERR_INVALID_ARG_VALUE", "defaultHighWaterMarkBytes", "defaultHighWaterMarkObjectMode", "highWaterMarkFrom", "options", "isDuplex", "duplexKey", "getDefaultHighWaterMark", "objectMode", "setDefaultHighWaterMark", "value", "getHighWaterMark", "state", "hwm", "name", "require_safe_buffer", "__commonJSMin", "exports", "module", "buffer", "Buffer", "copyProps", "src", "dst", "key", "SafeBuffer", "arg", "encodingOrOffset", "length", "size", "fill", "encoding", "buf", "require_string_decoder", "__commonJSMin", "exports", "Buffer", "isEncoding", "encoding", "_normalizeEncoding", "enc", "retried", "normalizeEncoding", "nenc", "StringDecoder", "nb", "utf16Text", "utf16End", "utf8FillLast", "base64Text", "base64End", "simpleWrite", "simpleEnd", "buf", "r", "i", "utf8End", "utf8Text", "utf8CheckByte", "byte", "utf8CheckIncomplete", "self", "j", "utf8CheckExtraBytes", "p", "total", "end", "c", "n", "require_from", "__commonJSMin", "exports", "module", "process", "PromisePrototypeThen", "SymbolAsyncIterator", "SymbolIterator", "Buffer", "ERR_INVALID_ARG_TYPE", "ERR_STREAM_NULL_VALUES", "from", "Readable", "iterable", "opts", "iterator", "isAsync", "readable", "reading", "next", "error", "cb", "close", "e", "hadError", "hasThrow", "value", "done", "res", "err", "require_readable", "__commonJSMin", "exports", "module", "process", "ArrayPrototypeIndexOf", "NumberIsInteger", "NumberIsNaN", "NumberParseInt", "ObjectDefineProperties", "ObjectKeys", "ObjectSetPrototypeOf", "Promise", "SafeSet", "SymbolAsyncDispose", "SymbolAsyncIterator", "Symbol", "Readable", "ReadableState", "EE", "Stream", "prependListener", "Buffer", "addAbortSignal", "eos", "debug", "fn", "BufferList", "destroyImpl", "getHighWaterMark", "getDefaultHighWaterMark", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_OUT_OF_RANGE", "ERR_STREAM_PUSH_AFTER_EOF", "ERR_STREAM_UNSHIFT_AFTER_END_EVENT", "AbortError", "validateObject", "kPaused", "StringDecoder", "from", "nop", "errorOrDestroy", "kObjectMode", "kEnded", "kEndEmitted", "kReading", "kConstructed", "kSync", "kNeedReadable", "kEmittedReadable", "kReadableListening", "kResumeScheduled", "kErrorEmitted", "kEmitClose", "kAutoDestroy", "kDestroyed", "kClosed", "kCloseEmitted", "kMultiAwaitDrain", "kReadingMore", "kDataEmitted", "makeBitMapDescriptor", "bit", "value", "options", "stream", "isDuplex", "maybeReadMore", "err", "cb", "error", "resolve", "reject", "chunk", "encoding", "readableAddChunk", "addToFront", "state", "onEofChunk", "addChunk", "emitReadable", "enc", "decoder", "buffer", "content", "data", "MAX_HWM", "computeNewHighWaterMark", "n", "howMuchToRead", "nOrig", "endReadable", "doRead", "ret", "fromList", "emitReadable_", "flow", "maybeReadMore_", "len", "dest", "pipeOpts", "src", "endFn", "onend", "unpipe", "onunpipe", "readable", "unpipeInfo", "cleanup", "ondrain", "cleanedUp", "onclose", "onfinish", "onerror", "ondata", "pause", "pipeOnDrain", "er", "s", "dests", "i", "index", "ev", "res", "nReadingNextTick", "updateReadableListening", "self", "resume", "resume_", "paused", "streamKeys", "j", "streamToAsyncIterator", "iter", "createAsyncIterator", "callback", "next", "r", "val", "endReadableNT", "endWritableNT", "wState", "iterable", "opts", "webStreamsAdapters", "lazyWebStreams", "readableStream", "streamReadable", "_ref", "_src$readableObjectMo", "require_writable", "__commonJSMin", "exports", "module", "process", "ArrayPrototypeSlice", "Error", "FunctionPrototypeSymbolHasInstance", "ObjectDefineProperty", "ObjectDefineProperties", "ObjectSetPrototypeOf", "StringPrototypeToLowerCase", "Symbol", "SymbolHasInstance", "Writable", "WritableState", "EE", "Stream", "Buffer", "destroyImpl", "addAbortSignal", "getHighWaterMark", "getDefaultHighWaterMark", "ERR_INVALID_ARG_TYPE", "ERR_METHOD_NOT_IMPLEMENTED", "ERR_MULTIPLE_CALLBACK", "ERR_STREAM_CANNOT_PIPE", "ERR_STREAM_DESTROYED", "ERR_STREAM_ALREADY_FINISHED", "ERR_STREAM_NULL_VALUES", "ERR_STREAM_WRITE_AFTER_END", "ERR_UNKNOWN_ENCODING", "errorOrDestroy", "nop", "kOnFinished", "options", "stream", "isDuplex", "noDecode", "onwrite", "resetBuffer", "state", "clearBuffer", "finishMaybe", "object", "_write", "chunk", "encoding", "cb", "err", "writeOrBuffer", "callback", "len", "ret", "doWrite", "writev", "onwriteError", "er", "errorBuffer", "sync", "afterWriteTick", "afterWrite", "count", "n", "_state$errored", "onfinishCallbacks", "_state$errored2", "buffered", "bufferedIndex", "objectMode", "bufferedLength", "i", "chunks", "needFinish", "callFinal", "called", "onFinish", "finish", "prefinish", "rState", "value", "w", "val", "wState", "destroy", "webStreamsAdapters", "lazyWebStreams", "writableStream", "streamWritable", "require_duplexify", "__commonJSMin", "exports", "module", "process", "bufferModule", "isReadable", "isWritable", "isIterable", "isNodeStream", "isReadableNodeStream", "isWritableNodeStream", "isDuplexNodeStream", "isReadableStream", "isWritableStream", "eos", "AbortError", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "destroyer", "Duplex", "Readable", "Writable", "createDeferredPromise", "from", "Blob", "isBlob", "b", "AbortController", "FunctionPrototypeCall", "Duplexify", "options", "duplexify", "body", "name", "_duplexify", "value", "write", "final", "destroy", "fromAsyncGen", "then", "d", "promise", "val", "err", "cb", "readable", "writable", "fn", "resolve", "ac", "signal", "_promise", "chunk", "done", "encoding", "_resolve", "pair", "r", "w", "ondrain", "onfinish", "onreadable", "onclose", "onfinished", "callback", "buf", "require_duplex", "__commonJSMin", "exports", "module", "ObjectDefineProperties", "ObjectGetOwnPropertyDescriptor", "ObjectKeys", "ObjectSetPrototypeOf", "Duplex", "Readable", "Writable", "keys", "i", "method", "options", "value", "webStreamsAdapters", "lazyWebStreams", "pair", "duplex", "duplexify", "body", "require_transform", "__commonJSMin", "exports", "module", "ObjectSetPrototypeOf", "Symbol", "Transform", "ERR_METHOD_NOT_IMPLEMENTED", "Duplex", "getHighWaterMark", "kCallback", "options", "readableHighWaterMark", "prefinish", "final", "cb", "er", "data", "chunk", "encoding", "callback", "rState", "wState", "length", "err", "val", "require_passthrough", "__commonJSMin", "exports", "module", "ObjectSetPrototypeOf", "PassThrough", "Transform", "options", "chunk", "encoding", "cb", "require_pipeline", "__commonJSMin", "exports", "module", "process", "ArrayIsArray", "Promise", "SymbolAsyncIterator", "SymbolDispose", "eos", "once", "destroyImpl", "Duplex", "aggregateTwoErrors", "ERR_INVALID_ARG_TYPE", "ERR_INVALID_RETURN_VALUE", "ERR_MISSING_ARGS", "ERR_STREAM_DESTROYED", "ERR_STREAM_PREMATURE_CLOSE", "AbortError", "validateFunction", "validateAbortSignal", "isIterable", "isReadable", "isReadableNodeStream", "isNodeStream", "isTransformStream", "isWebStream", "isReadableStream", "isReadableFinished", "AbortController", "PassThrough", "Readable", "addAbortListener", "destroyer", "stream", "reading", "writing", "finished", "cleanup", "err", "popCallback", "streams", "makeAsyncIterable", "val", "fromReadable", "pumpToNode", "iterable", "writable", "finish", "end", "error", "onresolve", "resume", "callback", "wait", "resolve", "reject", "chunk", "pumpToWeb", "readable", "writer", "pipeline", "pipelineImpl", "opts", "ac", "signal", "outerSignal", "lastStreamCleanup", "abort", "finishImpl", "disposable", "value", "destroys", "finishCount", "final", "_disposable", "fn", "ret", "i", "isLastStream", "onError", "destroy", "_ret", "_ret2", "pt", "then", "toRead", "pipe", "src", "dst", "ended", "endFn", "rState", "require_compose", "__commonJSMin", "exports", "module", "pipeline", "Duplex", "destroyer", "isNodeStream", "isReadable", "isWritable", "isWebStream", "isTransformStream", "isWritableStream", "isReadableStream", "AbortError", "ERR_INVALID_ARG_VALUE", "ERR_MISSING_ARGS", "eos", "streams", "orgStreams", "idx", "n", "ondrain", "onfinish", "onreadable", "onclose", "d", "onfinished", "err", "cb", "readable", "writable", "head", "tail", "chunk", "encoding", "callback", "writer", "toRead", "buf", "reader", "value", "done", "require_operators", "__commonJSMin", "exports", "module", "AbortController", "ERR_INVALID_ARG_VALUE", "ERR_INVALID_ARG_TYPE", "ERR_MISSING_ARGS", "ERR_OUT_OF_RANGE", "AbortError", "validateAbortSignal", "validateInteger", "validateObject", "kWeakHandler", "kResistStopPropagation", "finished", "staticCompose", "addAbortSignalNoValidate", "isWritable", "isNodeStream", "deprecate", "ArrayPrototypePush", "Boolean", "MathFloor", "Number", "NumberIsNaN", "Promise", "PromiseReject", "PromiseResolve", "PromisePrototypeThen", "Symbol", "kEmpty", "kEof", "compose", "stream", "options", "composedStream", "map", "fn", "concurrency", "highWaterMark", "signal", "queue", "signalOpt", "next", "resume", "done", "cnt", "onCatch", "afterItemProcessed", "maybeResume", "pump", "val", "err", "resolve", "asIndexedPairs", "index", "_options$signal", "some", "unused", "filter", "every", "args", "find", "result", "forEach", "forEachFn", "value", "filterFn", "ReduceAwareErrMissingArgs", "reduce", "reducer", "initialValue", "_options$signal2", "hasInitialValue", "ac", "opts", "gotAnyItemFromStream", "_options$signal3", "toArray", "_options$signal4", "flatMap", "values", "toIntegerOrInfinity", "number", "drop", "_options$signal5", "_options$signal6", "take", "_options$signal7", "_options$signal8", "require_promises", "__commonJSMin", "exports", "module", "ArrayPrototypePop", "Promise", "isIterable", "isNodeStream", "isWebStream", "pl", "finished", "pipeline", "streams", "resolve", "reject", "signal", "end", "lastArg", "options", "err", "value", "require_stream", "__commonJSMin", "exports", "module", "Buffer", "ObjectDefineProperty", "ObjectKeys", "ReflectApply", "customPromisify", "streamReturningOperators", "promiseReturningOperators", "ERR_ILLEGAL_CONSTRUCTOR", "compose", "setDefaultHighWaterMark", "getDefaultHighWaterMark", "pipeline", "destroyer", "eos", "promises", "utils", "Stream", "key", "fn", "args", "op", "addAbortSignal", "value", "chunk", "require_browser", "__commonJSMin", "exports", "module", "CustomStream", "promises", "originalDestroy", "Path", "_Path", "#value", "path", "cwd", "pathnames", "result", "entry", "reducer", "initial", "callback", "FileSystem", "_FileSystem", "#adapter", "#path", "adapter", "path", "Path", "reader", "contents", "metadata", "metro_exports", "__export", "Client", "client", "deepClone", "formdata", "metroError", "request", "response", "trace", "url", "metroURL", "_Client", "options", "option", "#addMiddlewares", "param", "verb", "middlewares", "index", "m", "req", "res", "next", "middleware", "tracers", "tracer", "getRequestParams", "current", "params", "prop", "value", "key", "val", "requestParams", "data", "target", "result", "getResponseParams", "responseParams", "r", "appendSearchParams", "validParams", "u", "entry", "metroConsole", "message", "details", "name", "group", "object", "HttpAdapter", "#client", "#path", "metroClient", "path", "client", "Path", "supportsRequestStreams", "contents", "metadata", "writer", "response", "result", "reader", "supportedContentTypes", "html", "url", "basePath", "parentUrl", "dom", "links", "link", "testURL", "jsfs", "FileSystem", "HttpAdapter", "Path", "jsonmw", "options", "req", "next", "contentType", "isPlainText", "isJSON", "res", "body", "json", "jsonRE", "throwermw", "options", "req", "next", "res", "getdatamw", "req", "next", "res", "API", "Client", "base", "methods", "bind", "throwermw", "getdatamw", "methodName", "JsonAPI", "jsonmw", "client", "api", "options", "deepClone", "jsonApi", "metro", "metro_exports", "jsonmw", "throwermw", "getdatamw", "api", "jsonApi", "everything_default", "enable", "disable", "assert", "source", "test", "problems", "fails", "Optional", "pattern", "data", "root", "path", "Required", "error", "Recommended", "warn", "oneOf", "patterns", "anyOf", "value", "allOf", "validURL", "url", "validEmail", "instanceOf", "constructor", "not", "index", "element", "problem", "p", "result", "patternKey", "subpattern", "message", "found", "expected", "tokenStore", "site", "localState", "localTokens", "value", "name", "stateMap", "oauth2mw", "options", "defaultOptions", "client", "generateCodeVerifier", "url", "assert", "oauth2", "store", "tokenStore", "Required", "validURL", "option", "req", "next", "oauth2authorized", "res", "err", "getTokensFromLocation", "accessToken", "refreshToken", "tokenIsExpired", "isExpired", "fetchAccessToken", "response", "e", "refreshAccessToken", "request", "code", "state", "params", "query", "storedState", "authReqURL", "getAuthorizationCodeURL", "metroError", "token", "tokenReq", "getAccessTokenRequest", "msg", "data", "getExpires", "refreshTokenReq", "search", "createState", "generateCodeChallenge", "grant_type", "code_verifier", "expires", "duration", "date", "size", "base64url_encode", "challenge", "buffer", "byteString", "b", "length", "validChars", "randomState", "counter", "isRedirected", "keysStore", "resolve", "reject", "request", "event", "db", "value", "key", "tx", "objectStore", "encoder", "decoder", "buf", "input", "checkRsaKeyAlgorithm", "algorithm", "OperationProcessingError", "subtleAlgorithm", "key", "UnsupportedOperationError", "jwt", "header", "claimsSet", "b64u", "signature", "encodeBase64Url", "arr", "i", "message", "_a", "psAlg", "rsAlg", "esAlg", "determineJWSAlgorithm", "isCryptoKey", "isPrivateKey", "isPublicKey", "epochTime", "generateProof", "keypair", "htu", "htm", "nonce", "accessToken", "additional", "privateKey", "publicKey", "publicJwk", "kty", "e", "x", "y", "crv", "generateKeyPair", "alg", "options", "dpopmw", "options", "assert", "Required", "validURL", "Optional", "req", "next", "keys", "keysStore", "keyInfo", "keyPair", "generateKeyPair", "url", "everything_default", "params", "dpopHeader", "generateProof", "nonce", "accessToken", "response", "MustHave", "options", "value", "root", "o", "error", "MustInclude", "validJWA", "validAuthMethods", "oidcDiscovery", "options", "assert", "Optional", "instanceOf", "everything_default", "Required", "validURL", "defaultOptions", "throwermw", "jsonmw", "TestSucceeded", "MustUseHTTPS", "url", "openid_provider_metadata", "allOf", "Recommended", "MustInclude", "anyOf", "validAuthMethods", "not", "configURL", "openid_config", "register", "options", "openid_client_metadata", "Required", "validURL", "Optional", "anyOf", "oneOf", "validEmail", "not", "MustHave", "validJWA", "validAuthMethods", "assert", "instanceOf", "everything_default", "defaultOptions", "throwermw", "jsonmw", "response", "info", "oidcStore", "site", "store", "name", "value", "storeMap", "oidcmw", "options", "defaultOptions", "client", "url", "assert", "Required", "instanceOf", "validURL", "Optional", "oidcStore", "req", "next", "res", "err", "oidcDiscovery", "metroError", "register", "scope", "oauth2Options", "storeIdToken", "id_token", "res2", "data", "oauth2client", "dpopOptions", "dpopmw", "oauth2mw", "isRedirected", "idToken", "oidc", "oidcmw", "oidcDiscovery", "register", "isRedirected", "idToken", "browser_default", "oldm", "options", "Context", "rdfType", "prefixes", "Context", "options", "prefixes", "input", "url", "type", "quads", "prefix", "prefixURL", "err", "Graph", "literal", "shortType", "#blankNodes", "mimetype", "context", "quad", "subject", "shortPred", "shortObj", "value", "uri", "absURI", "NamedNode", "id", "BlankNode", "Collection", "shortID", "shortURI", "separator", "path", "fullURI", "language", "object", "result", "datatype", "graph", "predicate", "rdfType", "oldm_n3_exports", "__export", "n3Parser", "n3Writer", "import_buffer", "RDF", "XSD", "SWAP", "IRIs_default", "xsd", "IRIs_default", "escapeSequence", "escapeReplacements", "illegalIriChars", "lineModeRegExps", "invalidRegExp", "N3Lexer", "options", "key", "callback", "inputFinished", "input", "currentLineLength", "whiteSpaceMatch", "comment", "emitToken", "line", "firstChar", "type", "value", "prefix", "match", "matchLength", "inconclusive", "reportSyntaxError", "length", "token", "start", "end", "self", "item", "invalid", "replaced", "sequence", "unicode4", "unicode8", "escapedChar", "charCode", "opening", "openingLength", "closingPos", "backslashCount", "raw", "lines", "issue", "err", "tokens", "error", "e", "t", "data", "rdf", "xsd", "IRIs_default", "DEFAULTGRAPH", "_blankNodeCounter", "DataFactory", "namedNode", "blankNode", "variable", "literal", "defaultGraph", "quad", "fromTerm", "fromQuad", "N3DataFactory_default", "Term", "_Term", "id", "other", "NamedNode", "Literal", "_Literal", "atPos", "dirPos", "endPos", "dtPos", "char", "xsd", "rdf", "BlankNode", "name", "Variable", "DefaultGraph", "DEFAULTGRAPH", "termFromId", "factory", "nested", "languageOrDatatype", "dashDashIndex", "termToId", "term", "res", "Quad", "subject", "predicate", "object", "graph", "namedNode", "iri", "NamedNode", "blankNode", "name", "BlankNode", "_blankNodeCounter", "literal", "value", "languageOrDataType", "Literal", "datatype", "xsd", "variable", "Variable", "defaultGraph", "DEFAULTGRAPH", "quad", "subject", "predicate", "object", "graph", "Quad", "fromTerm", "term", "Term", "fromQuad", "inQuad", "blankNodePrefix", "N3Parser", "_N3Parser", "options", "initDataFactory", "format", "isTurtle", "isTriG", "isNTriples", "isNQuads", "isN3", "isLineMode", "iri", "N3Lexer", "baseIRI", "fragmentPos", "type", "graph", "subject", "predicate", "object", "n3Mode", "token", "context", "quantifier", "value", "prefix", "stack", "empty", "item", "list", "next", "previousList", "parent", "component", "literal", "readCb", "datatype", "IRIs_default", "t", "listItem", "term", "completed", "startingAnnotation", "inversePredicate", "prefixNode", "version", "entity", "afterPath", "quad", "reifier", "parentGraph", "contextStack", "message", "err", "noop", "length", "result", "pathStart", "segmentStart", "input", "quadCallback", "prefixCallback", "versionCallback", "onQuad", "onPrefix", "onComment", "onVersion", "quads", "error", "e", "processNextToken", "parser", "factory", "N3DataFactory_default", "N3Util_exports", "__export", "inDefaultGraph", "isBlankNode", "isDefaultGraph", "isLiteral", "isNamedNode", "isQuad", "isVariable", "prefix", "prefixes", "isNamedNode", "term", "isBlankNode", "isLiteral", "isVariable", "isQuad", "isDefaultGraph", "inDefaultGraph", "quad", "prefix", "iri", "factory", "prefixes", "defaultPrefixes", "processPrefix", "N3DataFactory_default", "cache", "local", "escapeRegex", "regex", "BASE_UNSUPPORTED", "SUFFIX_SUPPORTED", "CURRENT", "PARENT", "QUERY", "FRAGMENT", "BaseIRI", "_BaseIRI", "base", "scheme", "regexHead", "escapeRegex", "regexTail", "segments", "segmenter", "segment", "query", "fragment", "last", "i", "iri", "match", "length", "parentPath", "suffix", "DEFAULTGRAPH", "N3DataFactory_default", "rdf", "xsd", "IRIs_default", "escape", "escapeAll", "escapedCharacters", "SerializedTerm", "Term", "other", "N3Writer", "outputStream", "options", "output", "chunk", "encoding", "done", "BaseIRI", "string", "callback", "subject", "predicate", "object", "graph", "error", "quads", "quadsString", "quad", "entity", "iri", "characterReplacer", "prefixMatch", "literal", "value", "direction", "isDefaultGraph", "i", "prefix", "prefixes", "hasPrefixes", "IRIlist", "prefixList", "prefixIRI", "escapeRegex", "children", "child", "length", "contents", "elements", "singleDone", "result", "character", "import_readable_stream", "ITERATOR", "merge", "target", "source", "depth", "key", "intersect", "s1", "s2", "intersection", "difference", "diff", "N3EntityIndex", "options", "N3DataFactory_default", "id", "entities", "terms", "termFromId", "term", "s", "p", "o", "g", "isDefaultGraph", "termToId", "str", "suggestedName", "name", "index", "N3Store", "_N3Store", "quads", "size", "graphs", "subjects", "subject", "graphKey", "subjectKey", "predicateKey", "index0", "key0", "key1", "key2", "index1", "index2", "existed", "name0", "name1", "name2", "graphId", "tmp", "entityKeys", "graph", "parts", "value0", "value1", "values", "l", "callback", "count", "uniqueIds", "quad", "predicate", "object", "graphItem", "i", "subjectOrQuad", "stream", "predicates", "iterable", "done", "value", "content", "subjectId", "predicateId", "objectId", "DatasetCoreAndReadableStream", "results", "remove", "ignoreErrors", "lists", "onError", "node", "message", "tails", "IRIs_default", "toRemove", "tailQuad", "items", "malformed", "head", "headPos", "current", "objectQuads", "subjectQuads", "first", "rest", "parent", "other", "g1", "g2", "p1", "p2", "o1", "store", "iteratee", "initialValue", "iter", "accumulator", "N3Writer", "indexMatch", "ids", "ind", "result", "_DatasetCoreAndReadableStream", "n3Store", "newStore", "objects", "N3DatasetCoreFactory", "quads", "N3Store", "getRulesFromDataset", "dataset", "rules", "subject", "object", "N3DataFactory_default", "premise", "conclusion", "N3Reasoner", "store", "predicate", "graphItem", "cb", "rule", "content", "v1", "v2", "value", "index1", "index2", "val0", "val1", "val2", "index", "v0", "c", "newRules", "addRule", "addConclusions", "r", "v3", "varMapping", "toId", "t", "term", "p", "r1", "r2", "i", "termEq", "set", "j", "getIndex", "v", "graphs", "graphId", "s", "t1", "t2", "import_readable_stream", "N3StreamParser", "options", "parser", "N3Parser", "onData", "onEnd", "callbacks", "error", "quad", "prefix", "uri", "comment", "event", "callback", "chunk", "encoding", "done", "stream", "import_readable_stream", "N3StreamWriter", "options", "writer", "N3Writer", "quad", "encoding", "callback", "done", "stream", "error", "prefix", "iri", "src_default", "N3Lexer", "N3Parser", "N3Writer", "N3Store", "N3DatasetCoreFactory", "N3EntityIndex", "N3StreamParser", "N3StreamWriter", "N3Util_exports", "N3Reasoner", "BaseIRI", "N3DataFactory_default", "Term", "NamedNode", "Literal", "BlankNode", "Variable", "DefaultGraph", "Quad", "termFromId", "termToId", "n3Parser", "input", "uri", "type", "parser", "src_default", "prefixes", "prefix", "url", "n3Writer", "source", "resolve", "reject", "writer", "xsd", "quad", "namedNode", "literal", "blankNode", "writeClassNames", "id", "subject", "classNames", "name", "rdfType", "writeProperties", "preds", "getPredicates", "pred", "o", "object", "entry", "predicate", "fullPred", "Collection", "getCollection", "getArray", "NamedNode", "BlankNode", "getBlankNode", "isLiteral", "getLiteral", "language", "value", "list", "error", "result", "oldm", "oldm_n3_exports", "src_default", "isPrimitiveWrapper", "data", "getSelectFn", "filter", "fns", "filterKey", "filterValue", "data", "isPrimitiveWrapper", "from", "result", "fn", "getMatchFn", "pattern", "anyOf", "element", "patternMatches", "wKey", "wVal", "matchFn", "patternMatchFn", "asc", "desc", "getSortFn", "comparisons", "key", "compare", "a", "b", "subFn", "getAggregateFn", "o", "i", "l", "getMatchingGroups", "pointerFn", "entity", "groups", "group", "groupBy", "pointerFunctions", "_", "anyOf", "patterns", "matchFns", "pattern", "getMatchFn", "data", "fn", "FunctionProxyHandler", "target", "thisArg", "argumentsList", "result", "DataProxyHandler", "property", "shape", "matchFn", "getMatchFn", "element", "filter", "selectFn", "getSelectFn", "pattern", "initial", "aggregateFn", "getAggregateFn", "temp", "isPrimitiveWrapper", "GroupByProxyHandler", "sortFn", "getSortFn", "groups", "groupBy", "selector", "group", "from", "EmptyHandler", "Null", "data", "getPointerFn", "path", "key", "localPath", "prop", "pointerHandler", "newpath", "_", "oldmmw", "options", "src_default", "context", "req", "next", "contentType", "isLinkedData", "res", "body", "ld", "mimetypes", "re", "oldmmw", "src_default", "SolidAdapter", "HttpAdapter", "#client", "#path", "metroClient", "path", "solidConfiguration", "client", "browser_default", "src_default", "Path", "response", "result", "from", "o", "solidClient", "options", "SolidAdapter", "SolidClient_default"]
|
|
7
7
|
}
|