@automerge/automerge-repo-react-hooks 2.5.2 → 2.5.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/index.js +53 -146
- package/dist/index.js.map +1 -1
- package/dist/usePresence.d.ts +2 -4
- package/dist/usePresence.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/usePresence.ts +2 -10
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/wrapPromise.ts","../src/useRepo.ts","../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/regex.js","../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/validate.js","../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/parse.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/crypto.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/utils.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/_md.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/_u64.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/sha2.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/sha256.js","../../../node_modules/.pnpm/base-x@4.0.1/node_modules/base-x/src/index.js","../../../node_modules/.pnpm/bs58@5.0.0/node_modules/bs58/index.js","../../../node_modules/.pnpm/bs58check@3.0.1/node_modules/bs58check/base.js","../../../node_modules/.pnpm/bs58check@3.0.1/node_modules/bs58check/index.js","../../automerge-repo/dist/helpers/bufferFromHex.js","../../automerge-repo/dist/AutomergeUrl.js","../src/useDocHandle.ts","../src/useDocument.ts","../src/helpers/useSet.ts","../src/useDocHandles.ts","../src/useDocuments.ts","../../../node_modules/.pnpm/react-usestateref@1.0.9_react@18.3.1/node_modules/react-usestateref/dist/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js","../src/useRemoteAwareness.ts","../src/useLocalAwareness.ts","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/constants.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/counter.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/immutable_string.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/proxies.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/wasm_bindgen_output/web/automerge_wasm.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/implementation.js","../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/common.js","../../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/browser.js","../../../node_modules/.pnpm/cbor-x@1.6.0/node_modules/cbor-x/decode.js","../../../node_modules/.pnpm/cbor-x@1.6.0/node_modules/cbor-x/encode.js","../../automerge-repo/dist/refs/ref.js","../../../node_modules/.pnpm/fast-sha256@1.3.0/node_modules/fast-sha256/sha256.js","../../automerge-repo/dist/synchronizer/CollectionSynchronizer.js","../../automerge-repo/dist/presence/constants.js","../../automerge-repo/dist/helpers/array.js","../../automerge-repo/dist/presence/PeerStateView.js","../../automerge-repo/dist/presence/PeerPresenceInfo.js","../../automerge-repo/dist/presence/Presence.js","../src/usePresence.ts"],"sourcesContent":["type Status = \"pending\" | \"success\" | \"error\"\n\nexport type PromiseWrapper<T> = {\n promise: Promise<T>\n read(): T\n}\n\nexport function wrapPromise<T>(promise: Promise<T>): PromiseWrapper<T> {\n let status: Status = \"pending\"\n let result: T\n let error: Error\n\n const suspender = promise.then(\n data => {\n status = \"success\"\n result = data\n },\n err => {\n status = \"error\"\n error = err\n }\n )\n\n return {\n promise,\n read(): T {\n switch (status) {\n case \"pending\":\n throw suspender\n case \"error\":\n throw error\n case \"success\":\n return result\n }\n },\n }\n}\n","import { Repo } from \"@automerge/automerge-repo/slim\"\nimport { createContext, useContext } from \"react\"\n\n/** A [React context](https://react.dev/learn/passing-data-deeply-with-context) which provides access to an Automerge repo. */\nexport const RepoContext = createContext<Repo | null>(null)\n\n/** A [React hook](https://reactjs.org/docs/hooks-intro.html) which returns the Automerge repo from {@link RepoContext}. */\nexport function useRepo(): Repo {\n const repo = useContext(RepoContext)\n if (!repo) throw new Error(\"Repo was not found on RepoContext.\")\n return repo\n}\n","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\nexports.crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","\"use strict\";\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.Hash = exports.nextTick = exports.swap32IfBE = exports.byteSwapIfBE = exports.swap8IfBE = exports.isLE = void 0;\nexports.isBytes = isBytes;\nexports.anumber = anumber;\nexports.abytes = abytes;\nexports.ahash = ahash;\nexports.aexists = aexists;\nexports.aoutput = aoutput;\nexports.u8 = u8;\nexports.u32 = u32;\nexports.clean = clean;\nexports.createView = createView;\nexports.rotr = rotr;\nexports.rotl = rotl;\nexports.byteSwap = byteSwap;\nexports.byteSwap32 = byteSwap32;\nexports.bytesToHex = bytesToHex;\nexports.hexToBytes = hexToBytes;\nexports.asyncLoop = asyncLoop;\nexports.utf8ToBytes = utf8ToBytes;\nexports.bytesToUtf8 = bytesToUtf8;\nexports.toBytes = toBytes;\nexports.kdfInputToBytes = kdfInputToBytes;\nexports.concatBytes = concatBytes;\nexports.checkOpts = checkOpts;\nexports.createHasher = createHasher;\nexports.createOptHasher = createOptHasher;\nexports.createXOFer = createXOFer;\nexports.randomBytes = randomBytes;\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nfunction anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nfunction u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nfunction rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nfunction rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexports.isLE = (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nfunction byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexports.swap8IfBE = exports.isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexports.byteSwapIfBE = exports.swap8IfBE;\n/** In place byte swap for Uint32Array */\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexports.swap32IfBE = exports.isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nfunction bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nfunction kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nclass Hash {\n}\nexports.Hash = Hash;\n/** Wraps hash function, creating an interface on top of it */\nfunction createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nfunction createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nfunction createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructor = createHasher;\nexports.wrapConstructorWithOpts = createOptHasher;\nexports.wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto_1.crypto && typeof crypto_1.crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto_1.crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SHA512_IV = exports.SHA384_IV = exports.SHA224_IV = exports.SHA256_IV = exports.HashMD = void 0;\nexports.setBigUint64 = setBigUint64;\nexports.Chi = Chi;\nexports.Maj = Maj;\n/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nconst utils_ts_1 = require(\"./utils.js\");\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nfunction Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nfunction Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nclass HashMD extends utils_ts_1.Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = (0, utils_ts_1.createView)(this.buffer);\n }\n update(data) {\n (0, utils_ts_1.aexists)(this);\n data = (0, utils_ts_1.toBytes)(data);\n (0, utils_ts_1.abytes)(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = (0, utils_ts_1.createView)(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n (0, utils_ts_1.aexists)(this);\n (0, utils_ts_1.aoutput)(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n (0, utils_ts_1.clean)(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = (0, utils_ts_1.createView)(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\nexports.HashMD = HashMD;\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexports.SHA256_IV = Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexports.SHA224_IV = Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexports.SHA384_IV = Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexports.SHA512_IV = Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toBig = exports.shrSL = exports.shrSH = exports.rotrSL = exports.rotrSH = exports.rotrBL = exports.rotrBH = exports.rotr32L = exports.rotr32H = exports.rotlSL = exports.rotlSH = exports.rotlBL = exports.rotlBH = exports.add5L = exports.add5H = exports.add4L = exports.add4H = exports.add3L = exports.add3H = void 0;\nexports.add = add;\nexports.fromBig = fromBig;\nexports.split = split;\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nexports.shrSH = shrSH;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.shrSL = shrSL;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexports.rotrSH = rotrSH;\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.rotrSL = rotrSL;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexports.rotrBH = rotrBH;\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\nexports.rotrBL = rotrBL;\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nexports.rotr32H = rotr32H;\nconst rotr32L = (h, _l) => h;\nexports.rotr32L = rotr32L;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexports.rotlSH = rotlSH;\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\nexports.rotlSL = rotlSL;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexports.rotlBH = rotlBH;\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\nexports.rotlBL = rotlBL;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexports.add3L = add3L;\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexports.add3H = add3H;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexports.add4L = add4L;\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexports.add4H = add4H;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexports.add5L = add5L;\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\nexports.add5H = add5H;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n//# sourceMappingURL=_u64.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha512_224 = exports.sha512_256 = exports.sha384 = exports.sha512 = exports.sha224 = exports.sha256 = exports.SHA512_256 = exports.SHA512_224 = exports.SHA384 = exports.SHA512 = exports.SHA224 = exports.SHA256 = void 0;\n/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nconst _md_ts_1 = require(\"./_md.js\");\nconst u64 = require(\"./_u64.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends _md_ts_1.HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = _md_ts_1.SHA256_IV[0] | 0;\n this.B = _md_ts_1.SHA256_IV[1] | 0;\n this.C = _md_ts_1.SHA256_IV[2] | 0;\n this.D = _md_ts_1.SHA256_IV[3] | 0;\n this.E = _md_ts_1.SHA256_IV[4] | 0;\n this.F = _md_ts_1.SHA256_IV[5] | 0;\n this.G = _md_ts_1.SHA256_IV[6] | 0;\n this.H = _md_ts_1.SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = (0, utils_ts_1.rotr)(W15, 7) ^ (0, utils_ts_1.rotr)(W15, 18) ^ (W15 >>> 3);\n const s1 = (0, utils_ts_1.rotr)(W2, 17) ^ (0, utils_ts_1.rotr)(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = (0, utils_ts_1.rotr)(E, 6) ^ (0, utils_ts_1.rotr)(E, 11) ^ (0, utils_ts_1.rotr)(E, 25);\n const T1 = (H + sigma1 + (0, _md_ts_1.Chi)(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = (0, utils_ts_1.rotr)(A, 2) ^ (0, utils_ts_1.rotr)(A, 13) ^ (0, utils_ts_1.rotr)(A, 22);\n const T2 = (sigma0 + (0, _md_ts_1.Maj)(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n (0, utils_ts_1.clean)(this.buffer);\n }\n}\nexports.SHA256 = SHA256;\nclass SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = _md_ts_1.SHA224_IV[0] | 0;\n this.B = _md_ts_1.SHA224_IV[1] | 0;\n this.C = _md_ts_1.SHA224_IV[2] | 0;\n this.D = _md_ts_1.SHA224_IV[3] | 0;\n this.E = _md_ts_1.SHA224_IV[4] | 0;\n this.F = _md_ts_1.SHA224_IV[5] | 0;\n this.G = _md_ts_1.SHA224_IV[6] | 0;\n this.H = _md_ts_1.SHA224_IV[7] | 0;\n }\n}\nexports.SHA224 = SHA224;\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nclass SHA512 extends _md_ts_1.HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = _md_ts_1.SHA512_IV[0] | 0;\n this.Al = _md_ts_1.SHA512_IV[1] | 0;\n this.Bh = _md_ts_1.SHA512_IV[2] | 0;\n this.Bl = _md_ts_1.SHA512_IV[3] | 0;\n this.Ch = _md_ts_1.SHA512_IV[4] | 0;\n this.Cl = _md_ts_1.SHA512_IV[5] | 0;\n this.Dh = _md_ts_1.SHA512_IV[6] | 0;\n this.Dl = _md_ts_1.SHA512_IV[7] | 0;\n this.Eh = _md_ts_1.SHA512_IV[8] | 0;\n this.El = _md_ts_1.SHA512_IV[9] | 0;\n this.Fh = _md_ts_1.SHA512_IV[10] | 0;\n this.Fl = _md_ts_1.SHA512_IV[11] | 0;\n this.Gh = _md_ts_1.SHA512_IV[12] | 0;\n this.Gl = _md_ts_1.SHA512_IV[13] | 0;\n this.Hh = _md_ts_1.SHA512_IV[14] | 0;\n this.Hl = _md_ts_1.SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n (0, utils_ts_1.clean)(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexports.SHA512 = SHA512;\nclass SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = _md_ts_1.SHA384_IV[0] | 0;\n this.Al = _md_ts_1.SHA384_IV[1] | 0;\n this.Bh = _md_ts_1.SHA384_IV[2] | 0;\n this.Bl = _md_ts_1.SHA384_IV[3] | 0;\n this.Ch = _md_ts_1.SHA384_IV[4] | 0;\n this.Cl = _md_ts_1.SHA384_IV[5] | 0;\n this.Dh = _md_ts_1.SHA384_IV[6] | 0;\n this.Dl = _md_ts_1.SHA384_IV[7] | 0;\n this.Eh = _md_ts_1.SHA384_IV[8] | 0;\n this.El = _md_ts_1.SHA384_IV[9] | 0;\n this.Fh = _md_ts_1.SHA384_IV[10] | 0;\n this.Fl = _md_ts_1.SHA384_IV[11] | 0;\n this.Gh = _md_ts_1.SHA384_IV[12] | 0;\n this.Gl = _md_ts_1.SHA384_IV[13] | 0;\n this.Hh = _md_ts_1.SHA384_IV[14] | 0;\n this.Hl = _md_ts_1.SHA384_IV[15] | 0;\n }\n}\nexports.SHA384 = SHA384;\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nclass SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexports.SHA512_224 = SHA512_224;\nclass SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\nexports.SHA512_256 = SHA512_256;\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexports.sha256 = (0, utils_ts_1.createHasher)(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexports.sha224 = (0, utils_ts_1.createHasher)(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexports.sha512 = (0, utils_ts_1.createHasher)(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexports.sha384 = (0, utils_ts_1.createHasher)(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_256 = (0, utils_ts_1.createHasher)(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_224 = (0, utils_ts_1.createHasher)(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha224 = exports.SHA224 = exports.sha256 = exports.SHA256 = void 0;\n/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nconst sha2_ts_1 = require(\"./sha2.js\");\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA256 = sha2_ts_1.SHA256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha256 = sha2_ts_1.sha256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA224 = sha2_ts_1.SHA224;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha224 = sha2_ts_1.sha224;\n//# sourceMappingURL=sha256.js.map","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) {\n } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = new Uint8Array(zeroes + (size - it4))\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","const basex = require('base-x')\nconst ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","'use strict'\n\nvar base58 = require('bs58')\n\nmodule.exports = function (checksumFn) {\n // Encode a buffer as a base58-check encoded string\n function encode (payload) {\n var payloadU8 = Uint8Array.from(payload)\n var checksum = checksumFn(payloadU8)\n var length = payloadU8.length + 4\n var both = new Uint8Array(length)\n both.set(payloadU8, 0)\n both.set(checksum.subarray(0, 4), payloadU8.length)\n return base58.encode(both, length)\n }\n\n function decodeRaw (buffer) {\n var payload = buffer.slice(0, -4)\n var checksum = buffer.slice(-4)\n var newChecksum = checksumFn(payload)\n\n if (checksum[0] ^ newChecksum[0] |\n checksum[1] ^ newChecksum[1] |\n checksum[2] ^ newChecksum[2] |\n checksum[3] ^ newChecksum[3]) return\n\n return payload\n }\n\n // Decode a base58-check encoded string to a buffer, no result if checksum is wrong\n function decodeUnsafe (string) {\n var buffer = base58.decodeUnsafe(string)\n if (!buffer) return\n\n return decodeRaw(buffer)\n }\n\n function decode (string) {\n var buffer = base58.decode(string)\n var payload = decodeRaw(buffer, checksumFn)\n if (!payload) throw new Error('Invalid checksum')\n return payload\n }\n\n return {\n encode: encode,\n decode: decode,\n decodeUnsafe: decodeUnsafe\n }\n}\n","'use strict'\n\nvar { sha256 } = require('@noble/hashes/sha256')\nvar bs58checkBase = require('./base')\n\n// SHA256(SHA256(buffer))\nfunction sha256x2 (buffer) {\n return sha256(sha256(buffer))\n}\n\nmodule.exports = bs58checkBase(sha256x2)\n","export const uint8ArrayFromHexString = (hexString) => {\n if (hexString.length % 2 !== 0) {\n throw new Error(\"Hex string must have an even length\");\n }\n const bytes = new Uint8Array(hexString.length / 2);\n for (let i = 0; i < hexString.length; i += 2) {\n bytes[i >> 1] = parseInt(hexString.slice(i, i + 2), 16);\n }\n return bytes;\n};\nexport const uint8ArrayToHexString = (data) => {\n return Array.from(data, byte => byte.toString(16).padStart(2, \"0\")).join(\"\");\n};\n","import * as Uuid from \"uuid\";\nimport bs58check from \"bs58check\";\nimport { uint8ArrayFromHexString, uint8ArrayToHexString, } from \"./helpers/bufferFromHex.js\";\nexport const urlPrefix = \"automerge:\";\n/** Given an Automerge URL, returns the DocumentId in both base58check-encoded form and binary form */\nexport const parseAutomergeUrl = (url) => {\n const [baseUrl, headsSection, ...rest] = url.split(\"#\");\n if (rest.length > 0) {\n throw new Error(\"Invalid URL: contains multiple heads sections\");\n }\n const regex = new RegExp(`^${urlPrefix}(\\\\w+)$`);\n const [, docMatch] = baseUrl.match(regex) || [];\n const documentId = docMatch;\n const binaryDocumentId = documentIdToBinary(documentId);\n if (!binaryDocumentId)\n throw new Error(\"Invalid document URL: \" + url);\n if (headsSection === undefined)\n return { binaryDocumentId, documentId };\n const heads = (headsSection === \"\" ? [] : headsSection.split(\"|\"));\n const hexHeads = heads.map(head => {\n try {\n return uint8ArrayToHexString(bs58check.decode(head));\n }\n catch (e) {\n throw new Error(`Invalid head in URL: ${head}`);\n }\n });\n return { binaryDocumentId, hexHeads, documentId, heads };\n};\n/**\n * Given a documentId in either binary or base58check-encoded form, returns an Automerge URL.\n * Throws on invalid input.\n */\nexport const stringifyAutomergeUrl = (arg) => {\n if (arg instanceof Uint8Array || typeof arg === \"string\") {\n return (urlPrefix +\n (arg instanceof Uint8Array\n ? binaryToDocumentId(arg)\n : arg));\n }\n const { documentId, heads = undefined } = arg;\n if (documentId === undefined)\n throw new Error(\"Invalid documentId: \" + documentId);\n const encodedDocumentId = documentId instanceof Uint8Array\n ? binaryToDocumentId(documentId)\n : documentId;\n let url = `${urlPrefix}${encodedDocumentId}`;\n if (heads !== undefined) {\n heads.forEach(head => {\n try {\n bs58check.decode(head);\n }\n catch (e) {\n throw new Error(`Invalid head: ${head}`);\n }\n });\n url += \"#\" + heads.join(\"|\");\n }\n return url;\n};\n/** Helper to extract just the heads from a URL if they exist */\nexport const getHeadsFromUrl = (url) => {\n const { heads } = parseAutomergeUrl(url);\n return heads;\n};\nexport const anyDocumentIdToAutomergeUrl = (id) => isValidAutomergeUrl(id)\n ? id\n : isValidDocumentId(id)\n ? stringifyAutomergeUrl({ documentId: id })\n : isValidUuid(id)\n ? parseLegacyUUID(id)\n : undefined;\n/**\n * Given a string, returns true if it is a valid Automerge URL. This function also acts as a type\n * discriminator in Typescript.\n */\nexport const isValidAutomergeUrl = (str) => {\n if (typeof str !== \"string\" || !str || !str.startsWith(urlPrefix))\n return false;\n try {\n const { documentId, heads } = parseAutomergeUrl(str);\n if (!isValidDocumentId(documentId))\n return false;\n if (heads &&\n !heads.every(head => {\n try {\n bs58check.decode(head);\n return true;\n }\n catch {\n return false;\n }\n }))\n return false;\n return true;\n }\n catch {\n return false;\n }\n};\nexport const isValidDocumentId = (str) => {\n if (typeof str !== \"string\")\n return false;\n // try to decode from base58\n const binaryDocumentID = documentIdToBinary(str);\n return binaryDocumentID !== undefined;\n};\nexport const isValidUuid = (str) => typeof str === \"string\" && Uuid.validate(str);\n/**\n * Returns a new Automerge URL with a random UUID documentId. Called by Repo.create(), and also used by tests.\n */\nexport const generateAutomergeUrl = () => {\n const documentId = Uuid.v4(null, new Uint8Array(16));\n return stringifyAutomergeUrl({ documentId });\n};\nexport const documentIdToBinary = (docId) => bs58check.decodeUnsafe(docId);\nexport const binaryToDocumentId = (docId) => bs58check.encode(docId);\nexport const encodeHeads = (heads) => heads.map(h => bs58check.encode(uint8ArrayFromHexString(h)));\nexport const decodeHeads = (heads) => heads.map(h => uint8ArrayToHexString(bs58check.decode(h)));\nexport const parseLegacyUUID = (str) => {\n if (!Uuid.validate(str))\n return undefined;\n const documentId = Uuid.parse(str);\n return stringifyAutomergeUrl({ documentId });\n};\n/**\n * Given any valid expression of a document ID, returns a DocumentId in base58check-encoded form.\n *\n * Currently supports:\n * - base58check-encoded DocumentId\n * - Automerge URL\n * - legacy UUID\n * - binary DocumentId\n *\n * Throws on invalid input.\n */\nexport const interpretAsDocumentId = (id) => {\n // binary\n if (id instanceof Uint8Array)\n return binaryToDocumentId(id);\n // url\n if (isValidAutomergeUrl(id))\n return parseAutomergeUrl(id).documentId;\n // base58check\n if (isValidDocumentId(id))\n return id;\n // legacy UUID\n if (isValidUuid(id)) {\n console.warn(\"Future versions will not support UUIDs as document IDs; use Automerge URLs instead.\");\n const binaryDocumentID = Uuid.parse(id);\n return binaryToDocumentId(binaryDocumentID);\n }\n // none of the above\n throw new Error(`Invalid AutomergeUrl: '${id}'`);\n};\n","import { AnyDocumentId, DocHandle } from \"@automerge/automerge-repo/slim\"\nimport { PromiseWrapper, wrapPromise } from \"./wrapPromise.js\"\nimport { useRepo } from \"./useRepo.js\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { anyDocumentIdToAutomergeUrl } from \"../../automerge-repo/dist/AutomergeUrl.js\"\n\n// Shared with useDocHandles\nexport const wrapperCache = new Map<\n AnyDocumentId,\n PromiseWrapper<DocHandle<unknown>>\n>()\n// NB: this is a global cache that isn't keyed on the Repo\n// so if your app uses the same documents in two Repos\n// this could cause problems. please let me know if you do.\n\ninterface UseDocHandleSuspendingParams {\n suspense: true\n}\ninterface UseDocHandleSynchronousParams {\n suspense: false\n}\n\ntype UseDocHandleParams =\n | UseDocHandleSuspendingParams\n | UseDocHandleSynchronousParams\n\nexport function useDocHandle<T>(\n id: AnyDocumentId,\n params: UseDocHandleSuspendingParams\n): DocHandle<T>\nexport function useDocHandle<T>(\n id: AnyDocumentId | undefined,\n params?: UseDocHandleSynchronousParams\n): DocHandle<T> | undefined\nexport function useDocHandle<T>(\n id: AnyDocumentId | undefined,\n { suspense }: UseDocHandleParams = { suspense: false }\n): DocHandle<T> | undefined {\n const repo = useRepo()\n const controllerRef = useRef<AbortController>()\n const [handle, setHandle] = useState<DocHandle<T> | undefined>()\n\n let currentHandle: DocHandle<T> | undefined =\n // make sure the handle matches the id\n id && handle && handle.url === anyDocumentIdToAutomergeUrl(id)\n ? handle\n : undefined\n\n if (id && !currentHandle) {\n // if we haven't saved a handle yet, check if one is immediately available\n const progress = repo.findWithProgress<T>(id)\n if (progress.state === \"ready\") {\n currentHandle = progress.handle\n }\n }\n\n let wrapper = id ? wrapperCache.get(id) : undefined\n if (!wrapper && id) {\n controllerRef.current?.abort()\n controllerRef.current = new AbortController()\n\n const promise = repo.find<T>(id, { signal: controllerRef.current.signal })\n wrapper = wrapPromise(promise)\n wrapperCache.set(id, wrapper)\n }\n\n /* From here we split into two paths: suspense and not.\n * In the suspense path, we return the wrapper directly.\n * In the non-suspense path, we wait for the promise to resolve\n * and then set the handle via setState. Suspense relies on\n * re-running this function until it succeeds, whereas the synchronous\n * form uses a setState to track the value. */\n useEffect(() => {\n if (currentHandle || suspense || !wrapper) {\n return\n }\n wrapper.promise\n .then(handle => {\n setHandle(handle as DocHandle<T>)\n })\n .catch(() => {\n setHandle(undefined)\n })\n }, [currentHandle, suspense, wrapper])\n\n if (currentHandle || !suspense || !wrapper) {\n return currentHandle\n }\n\n return wrapper.read() as DocHandle<T>\n}\n","import { AnyDocumentId } from \"@automerge/automerge-repo/slim\"\nimport { ChangeFn, ChangeOptions, Doc } from \"@automerge/automerge/slim\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useDocHandle } from \"./useDocHandle.js\"\n\n/**\n * A hook which returns a document and a function to change it.\n * Uses React Suspense for loading states, returning a tuple matching useState pattern.\n *\n * @example\n * ```tsx\n * function Counter() {\n * const [doc, changeDoc] = useDocument<{ count: number }>(docUrl)\n * return (\n * <button onClick={() => changeDoc(d => d.count++)}>\n * Count: {doc.count}\n * </button>\n * )\n * }\n *\n * // Must be wrapped in Suspense boundary\n * <Suspense fallback={<Loading />}>\n * <Counter />\n * </Suspense>\n * ```\n */\n\ninterface UseDocumentSuspendingParams {\n suspense: true\n}\ninterface UseDocumentSynchronousParams {\n suspense: false\n}\n\ntype UseDocumentParams =\n | UseDocumentSuspendingParams\n | UseDocumentSynchronousParams\n\nexport type UseDocumentReturn<T> = [\n Doc<T>,\n (changeFn: ChangeFn<T>, options?: ChangeOptions<T>) => void\n]\n\nexport function useDocument<T>(\n id: AnyDocumentId,\n params: UseDocumentSuspendingParams\n): UseDocumentReturn<T>\nexport function useDocument<T>(\n id: AnyDocumentId | undefined,\n params?: UseDocumentSynchronousParams\n): UseDocumentReturn<T> | [undefined, () => void]\nexport function useDocument<T>(\n id: AnyDocumentId | undefined,\n params: UseDocumentParams = { suspense: false }\n): UseDocumentReturn<T> | [undefined, () => void] {\n // @ts-expect-error -- typescript doesn't realize we're discriminating these types the same way in both functions\n const handle = useDocHandle<T>(id, params)\n // Initialize with current doc state\n const [doc, setDoc] = useState<Doc<T> | undefined>(() => handle?.doc())\n const [deleteError, setDeleteError] = useState<Error>()\n\n // Reinitialize doc when handle changes\n useEffect(() => {\n setDoc(handle?.doc())\n }, [handle])\n\n useEffect(() => {\n if (!handle) {\n return\n }\n const onChange = () => setDoc(handle.doc())\n const onDelete = () => {\n setDeleteError(new Error(`Document ${id} was deleted`))\n }\n\n handle.on(\"change\", onChange)\n handle.on(\"delete\", onDelete)\n\n return () => {\n handle.removeListener(\"change\", onChange)\n handle.removeListener(\"delete\", onDelete)\n }\n }, [handle, id])\n\n const changeDoc = useCallback(\n (changeFn: ChangeFn<T>, options?: ChangeOptions<T>) => {\n handle!.change(changeFn, options)\n },\n [handle]\n )\n\n if (deleteError) {\n throw deleteError\n }\n\n if (!doc) {\n return [undefined, () => {}]\n }\n return [doc, changeDoc]\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useSet<T>(items: T[]): Set<T> {\n const [set, setSet] = useState<Set<T>>(() => {\n return new Set<T>(items)\n })\n useEffect(() => {\n const newSet = new Set(items)\n if (identical(set, newSet)) {\n return\n }\n setSet(newSet)\n }, [set, items])\n return set\n}\n\nfunction identical<T>(s1: Set<T>, s2: Set<T>) {\n return s1.size === s2.size && Array.from(s1).every(v => s2.has(v))\n}\n","import { AutomergeUrl, DocHandle } from \"@automerge/automerge-repo/slim\"\nimport { useState, useEffect } from \"react\"\nimport { useRepo } from \"./useRepo.js\"\nimport { PromiseWrapper, wrapPromise } from \"./wrapPromise.js\"\nimport { wrapperCache } from \"./useDocHandle.js\"\nimport { useSet } from \"./helpers/useSet.js\"\n\ninterface UseDocHandlesParams {\n suspense?: boolean\n}\n\ntype DocHandleMap<T> = Map<AutomergeUrl, DocHandle<T> | undefined>\n\nexport function useDocHandles<T>(\n ids: AutomergeUrl[],\n { suspense = false }: UseDocHandlesParams = {}\n): DocHandleMap<T> {\n const idSet = useSet(ids)\n const repo = useRepo()\n const [handleMap, setHandleMap] = useState<DocHandleMap<T>>(() => {\n const map = new Map()\n\n // Initialize the map with any handles that are ready\n for (const id of idSet.values()) {\n let progress\n try {\n progress = repo.findWithProgress<T>(id)\n } catch (e) {\n continue\n }\n\n if (progress.state === \"ready\") {\n map.set(id, progress.handle)\n }\n }\n\n return map\n })\n\n const pendingPromises: PromiseWrapper<DocHandle<T>>[] = []\n const nextHandleMap = new Map<AutomergeUrl, DocHandle<T> | undefined>()\n\n // Check if we need any new wrappers\n for (const id of idSet.values()) {\n let handle = handleMap.get(id)\n let wrapper = wrapperCache.get(id)\n if (!wrapper) {\n try {\n const promise = repo.find<T>(id)\n wrapper = wrapPromise(promise)\n wrapperCache.set(id, wrapper)\n } catch (e) {\n continue\n }\n }\n\n // Try to read each wrapper.\n // Update handleMap with any available handles,\n // and collect any pending promises\n try {\n handle ??= wrapper.read() as DocHandle<T>\n nextHandleMap.set(id, handle)\n } catch (e) {\n if (e instanceof Promise) {\n pendingPromises.push(wrapper as PromiseWrapper<DocHandle<T>>)\n } else {\n nextHandleMap.set(id, undefined)\n }\n }\n }\n\n // Suspense is handled quasi-synchronously below by throwing if we still have\n // unresolved promises.\n useEffect(() => {\n if (pendingPromises.length > 0) {\n void Promise.allSettled(pendingPromises.map(p => p.promise)).then(\n handles => {\n handles.forEach(r => {\n if (r.status === \"fulfilled\") {\n const h = r.value as DocHandle<T>\n nextHandleMap.set(h.url, h)\n }\n })\n setHandleMap(nextHandleMap)\n }\n )\n } else {\n setHandleMap(nextHandleMap)\n }\n }, [suspense, idSet])\n\n // If any promises are pending, suspend with Promise.all\n // Note that this behaviour is different from the synchronous\n // form where we get gradual load-in of child documents.\n // I couldn't find an obvious way of incremental loading with\n // a single hook for suspense.\n // (But maybe with suspense this hook is less useful?)\n if (suspense && pendingPromises.length > 0) {\n throw Promise.all(pendingPromises.map(p => p.promise))\n }\n\n return handleMap\n}\n","import { AutomergeUrl } from \"@automerge/automerge-repo/slim\"\nimport { ChangeFn, ChangeOptions, Doc } from \"@automerge/automerge/slim\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useDocHandles } from \"./useDocHandles.js\"\n\ntype DocMap<T> = Map<AutomergeUrl, Doc<T>>\ntype ChangeDocFn<T> = (\n id: AutomergeUrl,\n changeFn: ChangeFn<T>,\n options?: ChangeOptions<T>\n) => void\n\ninterface UseDocumentsOptions {\n suspense?: boolean\n}\n\nexport function useDocuments<T>(\n ids: AutomergeUrl[],\n { suspense = true }: UseDocumentsOptions = {}\n): [DocMap<T>, ChangeDocFn<T>] {\n const handleMap = useDocHandles<T>(ids, { suspense })\n const [docMap, setDocMap] = useState<DocMap<T>>(() => {\n const docs: DocMap<T> = new Map()\n handleMap.forEach(handle => {\n const url = handle?.url\n if (url) {\n docs.set(url, handle?.doc())\n }\n })\n return docs\n })\n\n useEffect(() => {\n const listeners = new Map<AutomergeUrl, () => void>()\n\n handleMap.forEach((handle, id) => {\n if (handle) {\n const onChange = () => {\n setDocMap(prev => {\n const next = new Map(prev)\n next.set(id, handle.doc())\n return next\n })\n }\n\n // Initial state\n setDocMap(prev => {\n const next = new Map(prev)\n next.set(id, handle.doc())\n return next\n })\n\n handle.on(\"change\", onChange)\n listeners.set(id, onChange)\n }\n })\n\n // Clear docs that are no longer in handleMap\n setDocMap(prev => {\n const next = new Map(prev)\n for (const [id] of next) {\n if (!handleMap.has(id)) {\n next.delete(id)\n }\n }\n return next\n })\n\n return () => {\n handleMap.forEach((handle, id) => {\n const listener = listeners.get(id)\n if (handle && listener) {\n handle.removeListener(\"change\", listener)\n }\n })\n }\n }, [handleMap])\n\n const changeDoc = useCallback(\n (id: AutomergeUrl, changeFn: ChangeFn<T>, options?: ChangeOptions<T>) => {\n const handle = handleMap.get(id)\n if (handle) {\n handle.change(changeFn, options)\n }\n },\n [handleMap]\n )\n\n return [docMap, changeDoc]\n}\n","\"use strict\";\nvar react_1 = require(\"react\");\nvar isFunction = function (setStateAction) {\n return typeof setStateAction === \"function\";\n};\nvar useStateRef = function (initialState) {\n var _a = react_1.useState(initialState), state = _a[0], setState = _a[1];\n var ref = react_1.useRef(state);\n var dispatch = react_1.useCallback(function (setStateAction) {\n ref.current = isFunction(setStateAction) ? setStateAction(ref.current) : setStateAction;\n setState(ref.current);\n }, []);\n return [state, dispatch, ref];\n};\nmodule.exports = useStateRef;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import {\n DocHandle,\n DocHandleEphemeralMessagePayload,\n} from \"@automerge/automerge-repo/slim\"\nimport { useEffect } from \"react\"\nimport useStateRef from \"react-usestateref\"\nimport { EventEmitter } from \"eventemitter3\"\n\n// Emits new_peer event when a new peer is seen\nexport const peerEvents = new EventEmitter()\n\nexport interface UseRemoteAwarenessProps<T> {\n /** The handle to receive ephemeral state on */\n handle?: DocHandle<T>\n /** Our user ID */\n localUserId?: string\n /** How long to wait (in ms) before marking a peer as offline */\n offlineTimeout?: number\n /** Function to provide current epoch time */\n getTime?: () => number\n}\n\n/** A map from peer ID to their state */\nexport type PeerStates = Record<string, any>\n/** A map from peer ID to their last heartbeat timestamp */\nexport type Heartbeats = Record<string, number>\n\n// {@link @microsoft/my-control-library/lib/Button#Button | the Button class}\n\n/**\n * @deprecated use the usePresence hook instead\n *\n * This hook returns read-only state for remote clients.\n * It also returns their heartbeat status.\n * It is intended to be used alongside useLocalAwareness.\n *\n * @param {string} props.handle A document handle to associate with\n * @param {string?} props.localUserId Automerge BroadcastChannel sometimes sends us our own messages; optionally filters them\n * @param {number?30000} props.offlineTimeout How long to wait (in ms) before marking a peer as offline\n * @param {function?} props.getTime Function to provide current epoch time (used for testing)\n * @returns [ peerStates: { [userId]: state, ... }, { [userId]: heartbeatEpochTime, ...} ]\n */\nexport const useRemoteAwareness = <T>({\n handle,\n localUserId,\n offlineTimeout = 30000,\n getTime = () => new Date().getTime(),\n}: UseRemoteAwarenessProps<T>): [PeerStates, Heartbeats] => {\n // TODO: You should be able to use multiple instances of this hook on the same handle (write test)\n // TODO: This should support some kind of caching or memoization when switching between channelIDs\n const [peerStates, setPeerStates, peerStatesRef] = useStateRef<PeerStates>({})\n const [heartbeats, setHeartbeats, heartbeatsRef] = useStateRef<Heartbeats>({})\n useEffect(() => {\n if (!handle) {\n return\n }\n\n // Receive incoming message\n const handleIncomingUpdate = (\n event: DocHandleEphemeralMessagePayload<T>\n ) => {\n const [userId, state] = event.message as [string, unknown]\n if (userId === localUserId) return\n if (!heartbeatsRef.current[userId]) peerEvents.emit(\"new_peer\", event) // Let useLocalAwareness know we've seen a new peer\n setPeerStates({\n ...peerStatesRef.current,\n [userId]: state,\n })\n setHeartbeats({\n ...heartbeatsRef.current,\n [userId]: getTime(),\n })\n }\n // Remove peers we haven't seen recently\n const pruneOfflinePeers = () => {\n const peerStates = { ...peerStatesRef.current }\n const heartbeats = { ...heartbeatsRef.current }\n const time = getTime()\n let hasChanges = false\n for (const key in heartbeats) {\n if (time - heartbeats[key] > offlineTimeout) {\n delete peerStates[key]\n delete heartbeats[key]\n hasChanges = true\n }\n }\n if (hasChanges) {\n setPeerStates(peerStates)\n setHeartbeats(heartbeats)\n }\n }\n handle.on(\"ephemeral-message\", handleIncomingUpdate)\n // Check for offline peers every `offlineTimeout` ms\n const pruneOfflinePeersIntervalId = setInterval(\n pruneOfflinePeers,\n offlineTimeout\n )\n return () => {\n handle.removeListener(\"ephemeral-message\", handleIncomingUpdate)\n clearInterval(pruneOfflinePeersIntervalId)\n }\n }, [handle, localUserId, offlineTimeout, getTime])\n\n return [peerStates, heartbeats]\n}\n","import { useEffect } from \"react\"\nimport useStateRef from \"react-usestateref\"\nimport { peerEvents } from \"./useRemoteAwareness.js\"\nimport { DocHandle } from \"@automerge/automerge-repo/slim\"\n\nexport interface UseLocalAwarenessProps {\n /** The document handle to send ephemeral state on */\n handle?: DocHandle<unknown>\n /** Our user ID **/\n userId: string\n /** The initial state object/primitive we should advertise */\n initialState: any\n /** How frequently to send heartbeats */\n heartbeatTime?: number\n}\n/**\n * @deprecated use the usePresence hook instead\n *\n * This hook maintains state for the local client.\n * Like React.useState, it returns a [state, setState] array.\n * It is intended to be used alongside useRemoteAwareness.\n *\n * When state is changed it is broadcast to all clients.\n * It also broadcasts a heartbeat to let other clients know it is online.\n *\n * Note that userIds aren't secure (yet). Any client can lie about theirs.\n *\n * @param {string} props.userId Unique user ID. Clients can lie about this.\n * @param {any} props.initialState Initial state object/primitive\n * @param {number?1500} props.heartbeatTime How often to send a heartbeat (in ms)\n * @returns [state, setState]\n */\nexport const useLocalAwareness = ({\n handle,\n userId,\n initialState,\n heartbeatTime = 15000,\n}: UseLocalAwarenessProps) => {\n const [localState, setLocalState, localStateRef] = useStateRef(initialState)\n\n const setState = (stateOrUpdater: any) => {\n const state =\n typeof stateOrUpdater === \"function\"\n ? stateOrUpdater(localStateRef.current)\n : stateOrUpdater\n setLocalState(state)\n // TODO: Send deltas instead of entire state\n if (handle) {\n handle.broadcast([userId, state])\n }\n }\n\n useEffect(() => {\n // Don't broadcast if userId or handle isn't set: this avoids bogus broadcasts\n // during the loading of a userId document or handle.\n if (!userId || !handle) {\n return\n }\n\n // Send periodic heartbeats\n const heartbeat = () =>\n void handle.broadcast([userId, localStateRef.current])\n heartbeat() // Initial heartbeat\n // TODO: we don't need to send a heartbeat if we've changed state recently; use recursive setTimeout instead of setInterval\n const heartbeatIntervalId = setInterval(heartbeat, heartbeatTime)\n return () => void clearInterval(heartbeatIntervalId)\n }, [handle, userId, heartbeatTime])\n\n useEffect(() => {\n // Send entire state to new peers\n if (!handle || !userId) {\n return\n }\n\n let broadcastTimeoutId: ReturnType<typeof setTimeout>\n const newPeerEvents = peerEvents.on(\"new_peer\", () => {\n broadcastTimeoutId = setTimeout(\n () => handle.broadcast([userId, localStateRef.current]),\n 500 // Wait for the peer to be ready\n )\n })\n return () => {\n newPeerEvents.off(\"new_peer\")\n broadcastTimeoutId && clearTimeout(broadcastTimeoutId)\n }\n }, [handle, userId, peerEvents])\n\n // TODO: Send an \"offline\" message on unmount\n // useEffect(\n // () => () => void handle.broadcast(null), // Same as Yjs awareness\n // []\n // );\n\n return [localState, setState]\n}\n","// Properties of the document root object\nexport const STATE = Symbol.for(\"_am_meta\"); // symbol used to hide application metadata on automerge objects\nexport const TRACE = Symbol.for(\"_am_trace\"); // used for debugging\nexport const OBJECT_ID = Symbol.for(\"_am_objectId\"); // symbol used to hide the object id on automerge objects\nexport const IS_PROXY = Symbol.for(\"_am_isProxy\"); // symbol used to test if the document is a proxy object\nexport const CLEAR_CACHE = Symbol.for(\"_am_clearCache\"); // symbol used to tell a proxy object to clear its cache\nexport const UINT = Symbol.for(\"_am_uint\");\nexport const INT = Symbol.for(\"_am_int\");\nexport const F64 = Symbol.for(\"_am_f64\");\nexport const COUNTER = Symbol.for(\"_am_counter\");\nexport const TEXT = Symbol.for(\"_am_text\");\nexport const IMMUTABLE_STRING = Symbol.for(\"_am_immutableString\");\n","import { COUNTER } from \"./constants.js\";\n/**\n * The most basic CRDT: an integer value that can be changed only by\n * incrementing and decrementing. Since addition of integers is commutative,\n * the value trivially converges.\n */\nexport class Counter {\n constructor(value) {\n this.value = value || 0;\n Reflect.defineProperty(this, COUNTER, { value: true });\n }\n /**\n * A peculiar JavaScript language feature from its early days: if the object\n * `x` has a `valueOf()` method that returns a number, you can use numerical\n * operators on the object `x` directly, such as `x + 1` or `x < 4`.\n * This method is also called when coercing a value to a string by\n * concatenating it with another string, as in `x + ''`.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\n valueOf() {\n return this.value;\n }\n /**\n * Returns the counter value as a decimal string. If `x` is a counter object,\n * this method is called e.g. when you do `['value: ', x].join('')` or when\n * you use string interpolation: `value: ${x}`.\n */\n toString() {\n return this.valueOf().toString();\n }\n /**\n * Returns the counter value, so that a JSON serialization of an Automerge\n * document represents the counter simply as an integer.\n */\n toJSON() {\n return this.value;\n }\n /**\n * Increases the value of the counter by `delta`. If `delta` is not given,\n * increases the value of the counter by 1.\n *\n * Will throw an error if used outside of a change callback.\n */\n increment(_delta) {\n throw new Error(\"Counters should not be incremented outside of a change callback\");\n }\n /**\n * Decreases the value of the counter by `delta`. If `delta` is not given,\n * decreases the value of the counter by 1.\n *\n * Will throw an error if used outside of a change callback.\n */\n decrement(_delta) {\n throw new Error(\"Counters should not be decremented outside of a change callback\");\n }\n}\n/**\n * An instance of this class is used when a counter is accessed within a change\n * callback.\n */\nclass WriteableCounter extends Counter {\n constructor(value, context, path, objectId, key) {\n super(value);\n this.context = context;\n this.path = path;\n this.objectId = objectId;\n this.key = key;\n }\n /**\n * Increases the value of the counter by `delta`. If `delta` is not given,\n * increases the value of the counter by 1.\n */\n increment(delta) {\n delta = typeof delta === \"number\" ? delta : 1;\n this.context.increment(this.objectId, this.key, delta);\n this.value += delta;\n return this.value;\n }\n /**\n * Decreases the value of the counter by `delta`. If `delta` is not given,\n * decreases the value of the counter by 1.\n */\n decrement(delta) {\n return this.increment(typeof delta === \"number\" ? -delta : -1);\n }\n}\n/**\n * Returns an instance of `WriteableCounter` for use in a change callback.\n * `context` is the proxy context that keeps track of the mutations.\n * `objectId` is the ID of the object containing the counter, and `key` is\n * the property name (key in map, or index in list) where the counter is\n * located.\n */\nexport function getWriteableCounter(value, context, path, objectId, key) {\n return new WriteableCounter(value, context, path, objectId, key);\n}\n//module.exports = { Counter, getWriteableCounter }\n","var _a;\nimport { IMMUTABLE_STRING } from \"./constants.js\";\nexport class ImmutableString {\n constructor(val) {\n // Used to detect whether a value is a ImmutableString object rather than using an instanceof check\n this[_a] = true;\n this.val = val;\n }\n /**\n * Returns the content of the ImmutableString object as a simple string\n */\n toString() {\n return this.val;\n }\n toJSON() {\n return this.val;\n }\n}\n_a = IMMUTABLE_STRING;\n","import { getWriteableCounter } from \"./counter.js\";\nimport { STATE, TRACE, IS_PROXY, OBJECT_ID, CLEAR_CACHE, COUNTER, INT, UINT, F64, IMMUTABLE_STRING, TEXT, } from \"./constants.js\";\nimport { ImmutableString } from \"./immutable_string.js\";\nfunction parseListIndex(key) {\n if (typeof key === \"string\" && /^[0-9]+$/.test(key))\n key = parseInt(key, 10);\n if (typeof key !== \"number\") {\n return key;\n }\n if (key < 0 || isNaN(key) || key === Infinity || key === -Infinity) {\n throw new RangeError(\"A list index must be positive, but you passed \" + key);\n }\n return key;\n}\nfunction valueAt(target, prop) {\n const { context, objectId, path } = target;\n const value = context.getWithType(objectId, prop);\n if (value === null) {\n return;\n }\n const datatype = value[0];\n const val = value[1];\n switch (datatype) {\n case undefined:\n return;\n case \"map\":\n return mapProxy(context, val, [...path, prop]);\n case \"list\":\n return listProxy(context, val, [...path, prop]);\n case \"text\":\n return context.text(val);\n case \"str\":\n return new ImmutableString(val);\n case \"uint\":\n return val;\n case \"int\":\n return val;\n case \"f64\":\n return val;\n case \"boolean\":\n return val;\n case \"null\":\n return null;\n case \"bytes\":\n return val;\n case \"timestamp\":\n return val;\n case \"counter\": {\n const counter = getWriteableCounter(val, context, path, objectId, prop);\n return counter;\n }\n default:\n throw RangeError(`datatype ${datatype} unimplemented`);\n }\n}\nfunction import_value(value, path, context) {\n const type = typeof value;\n switch (type) {\n case \"object\":\n if (value == null) {\n return [null, \"null\"];\n }\n else if (value[UINT]) {\n return [value.value, \"uint\"];\n }\n else if (value[INT]) {\n return [value.value, \"int\"];\n }\n else if (value[F64]) {\n return [value.value, \"f64\"];\n }\n else if (value[COUNTER]) {\n return [value.value, \"counter\"];\n }\n else if (value instanceof Date) {\n return [value.getTime(), \"timestamp\"];\n }\n else if (isImmutableString(value)) {\n return [value.toString(), \"str\"];\n }\n else if (value instanceof Uint8Array) {\n return [value, \"bytes\"];\n }\n else if (value instanceof Array) {\n return [value, \"list\"];\n }\n else if (Object.prototype.toString.call(value) === \"[object Object]\") {\n return [value, \"map\"];\n }\n else if (isSameDocument(value, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n else {\n throw new RangeError(`Cannot assign unknown object: ${value}`);\n }\n case \"boolean\":\n return [value, \"boolean\"];\n case \"number\":\n if (Number.isInteger(value)) {\n return [value, \"int\"];\n }\n else {\n return [value, \"f64\"];\n }\n case \"string\":\n return [value, \"text\"];\n case \"undefined\":\n throw new RangeError([\n `Cannot assign undefined value at ${printPath(path)}, `,\n \"because `undefined` is not a valid JSON data type. \",\n \"You might consider setting the property's value to `null`, \",\n \"or using `delete` to remove it altogether.\",\n ].join(\"\"));\n default:\n throw new RangeError([\n `Cannot assign ${type} value at ${printPath(path)}. `,\n `All JSON primitive datatypes (object, array, string, number, boolean, null) `,\n `are supported in an Automerge document; ${type} values are not. `,\n ].join(\"\"));\n }\n}\n// When we assign a value to a property in a proxy we recursively walk through\n// the value we are assigning and copy it into the document. This is generally\n// desirable behaviour. However, a very common bug is to accidentally assign a\n// value which is already in the document to another key within the same\n// document, this often leads to surprising behaviour where users expected to\n// _move_ the object, but it is instead copied. To avoid this we check if the\n// value is from the same document and if it is we throw an error, this means\n// we require an explicit Object.assign call to copy the object, thus avoiding\n// the footgun\nfunction isSameDocument(val, context) {\n var _b, _c;\n // Date is technically an object, but immutable, so allowing people to assign\n // a date from one place in the document to another place in the document is\n // not likely to be a bug\n if (val instanceof Date) {\n return false;\n }\n // this depends on __wbg_ptr being the wasm pointer\n // a new version of wasm-bindgen will break this\n // but the tests should expose the break\n if (val && ((_c = (_b = val[STATE]) === null || _b === void 0 ? void 0 : _b.handle) === null || _c === void 0 ? void 0 : _c.__wbg_ptr) === context.__wbg_ptr) {\n return true;\n }\n return false;\n}\nconst MapHandler = {\n get(target, key) {\n const { context, objectId, cache } = target;\n if (key === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (key === OBJECT_ID)\n return objectId;\n if (key === IS_PROXY)\n return true;\n if (key === TRACE)\n return target.trace;\n if (key === STATE)\n return { handle: context };\n if (!cache[key]) {\n cache[key] = valueAt(target, key);\n }\n return cache[key];\n },\n set(target, key, val) {\n const { context, objectId, path } = target;\n target.cache = {}; // reset cache on set\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n if (key === TRACE) {\n target.trace = val;\n return true;\n }\n if (key === CLEAR_CACHE) {\n return true;\n }\n const [value, datatype] = import_value(val, [...path, key], context);\n switch (datatype) {\n case \"list\": {\n const list = context.putObject(objectId, key, []);\n const proxyList = listProxy(context, list, [...path, key]);\n for (let i = 0; i < value.length; i++) {\n proxyList[i] = value[i];\n }\n break;\n }\n case \"text\": {\n context.putObject(objectId, key, value);\n break;\n }\n case \"map\": {\n const map = context.putObject(objectId, key, {});\n const proxyMap = mapProxy(context, map, [...path, key]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n context.put(objectId, key, value, datatype);\n }\n return true;\n },\n deleteProperty(target, key) {\n const { context, objectId } = target;\n target.cache = {}; // reset cache on delete\n context.delete(objectId, key);\n return true;\n },\n has(target, key) {\n const value = this.get(target, key);\n return value !== undefined;\n },\n getOwnPropertyDescriptor(target, key) {\n // const { context, objectId } = target\n const value = this.get(target, key);\n if (typeof value !== \"undefined\") {\n return {\n configurable: true,\n enumerable: true,\n value,\n };\n }\n },\n ownKeys(target) {\n const { context, objectId } = target;\n // FIXME - this is a tmp workaround until fix the dupe key bug in keys()\n const keys = context.keys(objectId);\n return [...new Set(keys)];\n },\n};\nconst ListHandler = {\n get(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (index === Symbol.hasInstance) {\n return (instance) => {\n return Array.isArray(instance);\n };\n }\n if (index === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (index === OBJECT_ID)\n return objectId;\n if (index === IS_PROXY)\n return true;\n if (index === TRACE)\n return target.trace;\n if (index === STATE)\n return { handle: context };\n if (index === \"length\")\n return context.length(objectId);\n if (typeof index === \"number\") {\n return valueAt(target, index);\n }\n else {\n return listMethods(target)[index];\n }\n },\n set(target, index, val) {\n const { context, objectId, path } = target;\n index = parseListIndex(index);\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n if (index === CLEAR_CACHE) {\n return true;\n }\n if (index === TRACE) {\n target.trace = val;\n return true;\n }\n if (typeof index == \"string\") {\n throw new RangeError(\"list index must be a number\");\n }\n const [value, datatype] = import_value(val, [...path, index], context);\n switch (datatype) {\n case \"list\": {\n let list;\n if (index >= context.length(objectId)) {\n list = context.insertObject(objectId, index, []);\n }\n else {\n list = context.putObject(objectId, index, []);\n }\n const proxyList = listProxy(context, list, [...path, index]);\n proxyList.splice(0, 0, ...value);\n break;\n }\n case \"text\": {\n if (index >= context.length(objectId)) {\n context.insertObject(objectId, index, value);\n }\n else {\n context.putObject(objectId, index, value);\n }\n break;\n }\n case \"map\": {\n let map;\n if (index >= context.length(objectId)) {\n map = context.insertObject(objectId, index, {});\n }\n else {\n map = context.putObject(objectId, index, {});\n }\n const proxyMap = mapProxy(context, map, [...path, index]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n if (index >= context.length(objectId)) {\n context.insert(objectId, index, value, datatype);\n }\n else {\n context.put(objectId, index, value, datatype);\n }\n }\n return true;\n },\n deleteProperty(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n const elem = context.get(objectId, index);\n if (elem != null && elem[0] == \"counter\") {\n throw new TypeError(\"Unsupported operation: deleting a counter from a list\");\n }\n context.delete(objectId, index);\n return true;\n },\n has(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (typeof index === \"number\") {\n return index < context.length(objectId);\n }\n return index === \"length\";\n },\n getOwnPropertyDescriptor(target, index) {\n const { context, objectId } = target;\n if (index === \"length\")\n return { writable: true, value: context.length(objectId) };\n if (index === OBJECT_ID)\n return { configurable: false, enumerable: false, value: objectId };\n index = parseListIndex(index);\n const value = valueAt(target, index);\n return { configurable: true, enumerable: true, value };\n },\n getPrototypeOf(target) {\n return Object.getPrototypeOf(target);\n },\n ownKeys( /*target*/) {\n const keys = [];\n // uncommenting this causes assert.deepEqual() to fail when comparing to a pojo array\n // but not uncommenting it causes for (i in list) {} to not enumerate values properly\n //const {context, objectId } = target\n //for (let i = 0; i < target.context.length(objectId); i++) { keys.push(i.toString()) }\n keys.push(\"length\");\n return keys;\n },\n};\nconst TextHandler = Object.assign({}, ListHandler, {\n get(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (index === Symbol.hasInstance) {\n return (instance) => {\n return Array.isArray(instance);\n };\n }\n if (index === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (index === OBJECT_ID)\n return objectId;\n if (index === IS_PROXY)\n return true;\n if (index === TRACE)\n return target.trace;\n if (index === STATE)\n return { handle: context };\n if (index === \"length\")\n return context.length(objectId);\n if (typeof index === \"number\") {\n return valueAt(target, index);\n }\n else {\n return textMethods(target)[index] || listMethods(target)[index];\n }\n },\n getPrototypeOf( /*target*/) {\n return Object.getPrototypeOf(new Text());\n },\n});\nexport function mapProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = {};\n Object.assign(proxied, target);\n const result = new Proxy(proxied, MapHandler);\n // conversion through unknown is necessary because the types are so different\n return result;\n}\nexport function listProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = [];\n Object.assign(proxied, target);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return new Proxy(proxied, ListHandler);\n}\nexport function textProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = {};\n Object.assign(proxied, target);\n return new Proxy(proxied, TextHandler);\n}\nexport function rootProxy(context) {\n /* eslint-disable-next-line */\n return mapProxy(context, \"_root\", []);\n}\nfunction listMethods(target) {\n const { context, objectId, path } = target;\n const methods = {\n at(index) {\n return valueAt(target, index);\n },\n deleteAt(index, numDelete) {\n if (typeof numDelete === \"number\") {\n context.splice(objectId, index, numDelete);\n }\n else {\n context.delete(objectId, index);\n }\n return this;\n },\n fill(val, start, end) {\n const [value, datatype] = import_value(val, [...path, start], context);\n const length = context.length(objectId);\n start = parseListIndex(start || 0);\n end = parseListIndex(end || length);\n for (let i = start; i < Math.min(end, length); i++) {\n if (datatype === \"list\" || datatype === \"map\") {\n context.putObject(objectId, i, value);\n }\n else if (datatype === \"text\") {\n context.putObject(objectId, i, value);\n }\n else {\n context.put(objectId, i, value, datatype);\n }\n }\n return this;\n },\n indexOf(searchElement, start = 0) {\n const length = context.length(objectId);\n for (let i = start; i < length; i++) {\n const valueWithType = context.getWithType(objectId, i);\n if (!valueWithType) {\n continue;\n }\n const [valType, value] = valueWithType;\n // Either the target element is an object, and we return if we have found\n // the same object or it is a primitive value and we return if it matches\n // the current value\n const isObject = [\"map\", \"list\", \"text\"].includes(valType);\n if (!isObject) {\n // If the element is not an object, then check if the value is equal to the target\n if (value === searchElement) {\n return i;\n }\n else {\n continue;\n }\n }\n // if it's an object, but the type of the search element is a string, then we\n // need to check if the object is a text object with the same value as the search element\n if (valType === \"text\" && typeof searchElement === \"string\") {\n if (searchElement === valueAt(target, i)) {\n return i;\n }\n }\n // The only possible match now is if the searchElement is an object already in the\n // automerge document with the same object ID as the value\n if (searchElement[OBJECT_ID] === value) {\n return i;\n }\n }\n return -1;\n },\n insertAt(index, ...values) {\n this.splice(index, 0, ...values);\n return this;\n },\n pop() {\n const length = context.length(objectId);\n if (length == 0) {\n return undefined;\n }\n const last = valueAt(target, length - 1);\n context.delete(objectId, length - 1);\n return last;\n },\n push(...values) {\n const len = context.length(objectId);\n this.splice(len, 0, ...values);\n return context.length(objectId);\n },\n shift() {\n if (context.length(objectId) == 0)\n return;\n const first = valueAt(target, 0);\n context.delete(objectId, 0);\n return first;\n },\n splice(index, del, ...vals) {\n index = parseListIndex(index);\n // if del is undefined, delete until the end of the list\n if (typeof del !== \"number\") {\n del = context.length(objectId) - index;\n }\n del = parseListIndex(del);\n for (const val of vals) {\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n }\n const result = [];\n for (let i = 0; i < del; i++) {\n const value = valueAt(target, index);\n if (value !== undefined) {\n result.push(value);\n }\n context.delete(objectId, index);\n }\n const values = vals.map((val, index) => {\n try {\n return import_value(val, [...path], context);\n }\n catch (e) {\n if (e instanceof RangeError) {\n throw new RangeError(`${e.message} (at index ${index} in the input)`);\n }\n else {\n throw e;\n }\n }\n });\n for (const [value, datatype] of values) {\n switch (datatype) {\n case \"list\": {\n const list = context.insertObject(objectId, index, []);\n const proxyList = listProxy(context, list, [...path, index]);\n proxyList.splice(0, 0, ...value);\n break;\n }\n case \"text\": {\n context.insertObject(objectId, index, value);\n break;\n }\n case \"map\": {\n const map = context.insertObject(objectId, index, {});\n const proxyMap = mapProxy(context, map, [...path, index]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n context.insert(objectId, index, value, datatype);\n }\n index += 1;\n }\n return result;\n },\n unshift(...values) {\n this.splice(0, 0, ...values);\n return context.length(objectId);\n },\n entries() {\n let i = 0;\n const iterator = {\n next: () => {\n const value = valueAt(target, i);\n if (value === undefined) {\n return { value: undefined, done: true };\n }\n else {\n return { value: [i++, value], done: false };\n }\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n keys() {\n let i = 0;\n const len = context.length(objectId);\n const iterator = {\n next: () => {\n if (i < len) {\n return { value: i++, done: false };\n }\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n values() {\n let i = 0;\n const iterator = {\n next: () => {\n const value = valueAt(target, i++);\n if (value === undefined) {\n return { value: undefined, done: true };\n }\n else {\n return { value, done: false };\n }\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n toArray() {\n const list = [];\n let value;\n do {\n value = valueAt(target, list.length);\n if (value !== undefined) {\n list.push(value);\n }\n } while (value !== undefined);\n return list;\n },\n map(f) {\n return this.toArray().map(f);\n },\n toString() {\n return this.toArray().toString();\n },\n toLocaleString() {\n return this.toArray().toLocaleString();\n },\n forEach(f) {\n return this.toArray().forEach(f);\n },\n // todo: real concat function is different\n concat(other) {\n return this.toArray().concat(other);\n },\n every(f) {\n return this.toArray().every(f);\n },\n filter(f) {\n return this.toArray().filter(f);\n },\n find(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return v;\n }\n index += 1;\n }\n },\n findIndex(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return index;\n }\n index += 1;\n }\n return -1;\n },\n includes(elem) {\n return this.find(e => e === elem) !== undefined;\n },\n join(sep) {\n return this.toArray().join(sep);\n },\n reduce(f, initialValue) {\n return this.toArray().reduce(f, initialValue);\n },\n reduceRight(f, initialValue) {\n return this.toArray().reduceRight(f, initialValue);\n },\n lastIndexOf(search, fromIndex = +Infinity) {\n // this can be faster\n return this.toArray().lastIndexOf(search, fromIndex);\n },\n slice(index, num) {\n return this.toArray().slice(index, num);\n },\n some(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return true;\n }\n index += 1;\n }\n return false;\n },\n [Symbol.iterator]: function* () {\n let i = 0;\n let value = valueAt(target, i);\n while (value !== undefined) {\n yield value;\n i += 1;\n value = valueAt(target, i);\n }\n },\n };\n return methods;\n}\nfunction textMethods(target) {\n const { context, objectId } = target;\n const methods = {\n set(index, value) {\n return (this[index] = value);\n },\n get(index) {\n return this[index];\n },\n toString() {\n return context.text(objectId).replace(//g, \"\");\n },\n toSpans() {\n const spans = [];\n let chars = \"\";\n const length = context.length(objectId);\n for (let i = 0; i < length; i++) {\n const value = this[i];\n if (typeof value === \"string\") {\n chars += value;\n }\n else {\n if (chars.length > 0) {\n spans.push(chars);\n chars = \"\";\n }\n spans.push(value);\n }\n }\n if (chars.length > 0) {\n spans.push(chars);\n }\n return spans;\n },\n toJSON() {\n return this.toString();\n },\n indexOf(o, start = 0) {\n const text = context.text(objectId);\n return text.indexOf(o, start);\n },\n insertAt(index, ...values) {\n if (values.every(v => typeof v === \"string\")) {\n context.splice(objectId, index, 0, values.join(\"\"));\n }\n else {\n listMethods(target).insertAt(index, ...values);\n }\n },\n };\n return methods;\n}\nfunction printPath(path) {\n // print the path as a json pointer\n const jsonPointerComponents = path.map(component => {\n // if its a number just turn it into a string\n if (typeof component === \"number\") {\n return component.toString();\n }\n else if (typeof component === \"string\") {\n // otherwise we have to escape `/` and `~` characters\n return component.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n }\n });\n if (path.length === 0) {\n return \"\";\n }\n else {\n return \"/\" + jsonPointerComponents.join(\"/\");\n }\n}\n/*\n * Check if an object is a {@link ImmutableString}\n */\nexport function isImmutableString(obj) {\n // We used to determine whether something was a ImmutableString by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a ImmutableString\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, IMMUTABLE_STRING));\n}\nexport function isCounter(obj) {\n // We used to determine whether something was a Counter by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a Counter\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, COUNTER));\n}\n/*\n * Check if an object is a {@link Text}\n */\nexport function isText(obj) {\n // We used to determine whether something was a Text by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a TEXT\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, TEXT));\n}\n","let wasm;\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nconst cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_export_4.set(idx, obj);\n return idx;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nconst cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );\n\nif (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_export_4.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n}\n/**\n * @param {any} options\n * @returns {Automerge}\n */\nexport function create(options) {\n const ret = wasm.create(options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n}\n\n/**\n * @param {Uint8Array} data\n * @param {any} options\n * @returns {Automerge}\n */\nexport function load(data, options) {\n const ret = wasm.load(data, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n}\n\n/**\n * @param {any} change\n * @returns {Uint8Array}\n */\nexport function encodeChange(change) {\n const ret = wasm.encodeChange(change);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @param {Uint8Array} change\n * @returns {DecodedChange}\n */\nexport function decodeChange(change) {\n const ret = wasm.decodeChange(change);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @returns {SyncState}\n */\nexport function initSyncState() {\n const ret = wasm.initSyncState();\n return SyncState.__wrap(ret);\n}\n\n/**\n * @param {any} state\n * @returns {SyncState}\n */\nexport function importSyncState(state) {\n const ret = wasm.importSyncState(state);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return SyncState.__wrap(ret[0]);\n}\n\n/**\n * @param {SyncState} state\n * @returns {JsSyncState}\n */\nexport function exportSyncState(state) {\n _assertClass(state, SyncState);\n const ret = wasm.exportSyncState(state.__wbg_ptr);\n return ret;\n}\n\n/**\n * @param {any} message\n * @returns {SyncMessage}\n */\nexport function encodeSyncMessage(message) {\n const ret = wasm.encodeSyncMessage(message);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @param {Uint8Array} msg\n * @returns {DecodedSyncMessage}\n */\nexport function decodeSyncMessage(msg) {\n const ret = wasm.decodeSyncMessage(msg);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @param {SyncState} state\n * @returns {Uint8Array}\n */\nexport function encodeSyncState(state) {\n _assertClass(state, SyncState);\n const ret = wasm.encodeSyncState(state.__wbg_ptr);\n return ret;\n}\n\n/**\n * @param {Uint8Array} data\n * @returns {SyncState}\n */\nexport function decodeSyncState(data) {\n const ret = wasm.decodeSyncState(data);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return SyncState.__wrap(ret[0]);\n}\n\nconst AutomergeFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_automerge_free(ptr >>> 0, 1));\n\nexport class Automerge {\n\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(Automerge.prototype);\n obj.__wbg_ptr = ptr;\n AutomergeFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n AutomergeFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_automerge_free(ptr, 0);\n }\n /**\n * @param {string | null} [actor]\n * @returns {Automerge}\n */\n static new(actor) {\n var ptr0 = isLikeNone(actor) ? 0 : passStringToWasm0(actor, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_new(ptr0, len0);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n }\n /**\n * @param {string | null} [actor]\n * @returns {Automerge}\n */\n clone(actor) {\n var ptr0 = isLikeNone(actor) ? 0 : passStringToWasm0(actor, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_clone(this.__wbg_ptr, ptr0, len0);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n }\n /**\n * @param {string | null | undefined} actor\n * @param {any} heads\n * @returns {Automerge}\n */\n fork(actor, heads) {\n var ptr0 = isLikeNone(actor) ? 0 : passStringToWasm0(actor, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_fork(this.__wbg_ptr, ptr0, len0, heads);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n }\n /**\n * @returns {number}\n */\n pendingOps() {\n const ret = wasm.automerge_pendingOps(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {string | null} [message]\n * @param {number | null} [time]\n * @returns {Hash | null}\n */\n commit(message, time) {\n var ptr0 = isLikeNone(message) ? 0 : passStringToWasm0(message, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_commit(this.__wbg_ptr, ptr0, len0, !isLikeNone(time), isLikeNone(time) ? 0 : time);\n return ret;\n }\n /**\n * @param {Automerge} other\n * @returns {Heads}\n */\n merge(other) {\n _assertClass(other, Automerge);\n const ret = wasm.automerge_merge(this.__wbg_ptr, other.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @returns {number}\n */\n rollback() {\n const ret = wasm.automerge_rollback(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n keys(obj, heads) {\n const ret = wasm.automerge_keys(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {string}\n */\n text(obj, heads) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_text(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n spans(obj, heads) {\n const ret = wasm.automerge_spans(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {number} start\n * @param {number} delete_count\n * @param {any} text\n */\n splice(obj, start, delete_count, text) {\n const ret = wasm.automerge_splice(this.__wbg_ptr, obj, start, delete_count, text);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {string} new_text\n */\n updateText(obj, new_text) {\n const ret = wasm.automerge_updateText(this.__wbg_ptr, obj, new_text);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {Span[]} args\n */\n updateSpans(obj, args) {\n const ret = wasm.automerge_updateSpans(this.__wbg_ptr, obj, args);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} obj\n * @param {any} value\n * @param {any} datatype\n */\n push(obj, value, datatype) {\n const ret = wasm.automerge_push(this.__wbg_ptr, obj, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {ObjType} value\n * @returns {ObjID}\n */\n pushObject(obj, value) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_pushObject(this.__wbg_ptr, obj, value);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {number} index\n * @param {any} value\n * @param {any} datatype\n */\n insert(obj, index, value, datatype) {\n const ret = wasm.automerge_insert(this.__wbg_ptr, obj, index, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n * @param {{[key: string]: MaterializeValue}} block\n */\n splitBlock(obj, index, block) {\n const ret = wasm.automerge_splitBlock(this.__wbg_ptr, obj, index, block);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n */\n joinBlock(obj, index) {\n const ret = wasm.automerge_joinBlock(this.__wbg_ptr, obj, index);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n * @param {{[key: string]: MaterializeValue}} block\n */\n updateBlock(obj, index, block) {\n const ret = wasm.automerge_updateBlock(this.__wbg_ptr, obj, index, block);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} text\n * @param {number} index\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n getBlock(text, index, heads) {\n const ret = wasm.automerge_getBlock(this.__wbg_ptr, text, index, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n * @param {ObjType} value\n * @returns {ObjID}\n */\n insertObject(obj, index, value) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_insertObject(this.__wbg_ptr, obj, index, value);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {any} prop\n * @param {any} value\n * @param {any} datatype\n */\n put(obj, prop, value, datatype) {\n const ret = wasm.automerge_put(this.__wbg_ptr, obj, prop, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {Prop} prop\n * @param {ObjType} value\n * @returns {ObjID}\n */\n putObject(obj, prop, value) {\n const ret = wasm.automerge_putObject(this.__wbg_ptr, obj, prop, value);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {ObjID} obj\n * @param {Prop} prop\n * @param {number} value\n */\n increment(obj, prop, value) {\n const ret = wasm.automerge_increment(this.__wbg_ptr, obj, prop, value);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} obj\n * @param {any} prop\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n get(obj, prop, heads) {\n const ret = wasm.automerge_get(this.__wbg_ptr, obj, prop, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {any} prop\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n getWithType(obj, prop, heads) {\n const ret = wasm.automerge_getWithType(this.__wbg_ptr, obj, prop, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {object}\n */\n objInfo(obj, heads) {\n const ret = wasm.automerge_objInfo(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {any} arg\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n getAll(obj, arg, heads) {\n const ret = wasm.automerge_getAll(this.__wbg_ptr, obj, arg, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {boolean} enable\n * @returns {boolean}\n */\n enableFreeze(enable) {\n const ret = wasm.automerge_enableFreeze(this.__wbg_ptr, enable);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0] !== 0;\n }\n /**\n * @param {string} datatype\n * @param {Function} construct\n * @param {(arg: any) => any | undefined} deconstruct\n */\n registerDatatype(datatype, construct, deconstruct) {\n const ret = wasm.automerge_registerDatatype(this.__wbg_ptr, datatype, construct, deconstruct);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} object\n * @param {any} meta\n * @returns {any}\n */\n applyPatches(object, meta) {\n const ret = wasm.automerge_applyPatches(this.__wbg_ptr, object, meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} object\n * @param {any} meta\n * @returns {any}\n */\n applyAndReturnPatches(object, meta) {\n const ret = wasm.automerge_applyAndReturnPatches(this.__wbg_ptr, object, meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @returns {Patch[]}\n */\n diffIncremental() {\n const ret = wasm.automerge_diffIncremental(this.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n updateDiffCursor() {\n wasm.automerge_updateDiffCursor(this.__wbg_ptr);\n }\n resetDiffCursor() {\n wasm.automerge_resetDiffCursor(this.__wbg_ptr);\n }\n /**\n * @param {Heads} before\n * @param {Heads} after\n * @returns {Patch[]}\n */\n diff(before, after) {\n const ret = wasm.automerge_diff(this.__wbg_ptr, before, after);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Heads} heads\n */\n isolate(heads) {\n const ret = wasm.automerge_isolate(this.__wbg_ptr, heads);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n integrate() {\n wasm.automerge_integrate(this.__wbg_ptr);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {number}\n */\n length(obj, heads) {\n const ret = wasm.automerge_length(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0];\n }\n /**\n * @param {ObjID} obj\n * @param {Prop} prop\n */\n delete(obj, prop) {\n const ret = wasm.automerge_delete(this.__wbg_ptr, obj, prop);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @returns {Uint8Array}\n */\n save() {\n const ret = wasm.automerge_save(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Uint8Array}\n */\n saveIncremental() {\n const ret = wasm.automerge_saveIncremental(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {Heads} heads\n * @returns {Uint8Array}\n */\n saveSince(heads) {\n const ret = wasm.automerge_saveSince(this.__wbg_ptr, heads);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @returns {Uint8Array}\n */\n saveNoCompress() {\n const ret = wasm.automerge_saveNoCompress(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Uint8Array}\n */\n saveAndVerify() {\n const ret = wasm.automerge_saveAndVerify(this.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Uint8Array} data\n * @returns {number}\n */\n loadIncremental(data) {\n const ret = wasm.automerge_loadIncremental(this.__wbg_ptr, data);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0];\n }\n /**\n * @param {Change[]} changes\n */\n applyChanges(changes) {\n const ret = wasm.automerge_applyChanges(this.__wbg_ptr, changes);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {Heads} have_deps\n * @returns {Change[]}\n */\n getChanges(have_deps) {\n const ret = wasm.automerge_getChanges(this.__wbg_ptr, have_deps);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Heads} have_deps\n * @returns {ChangeMetadata[]}\n */\n getChangesMeta(have_deps) {\n const ret = wasm.automerge_getChangesMeta(this.__wbg_ptr, have_deps);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Hash} hash\n * @returns {Change | null}\n */\n getChangeByHash(hash) {\n const ret = wasm.automerge_getChangeByHash(this.__wbg_ptr, hash);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Hash} hash\n * @returns {ChangeMetadata | null}\n */\n getChangeMetaByHash(hash) {\n const ret = wasm.automerge_getChangeMetaByHash(this.__wbg_ptr, hash);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Hash} hash\n * @returns {DecodedChange | null}\n */\n getDecodedChangeByHash(hash) {\n const ret = wasm.automerge_getDecodedChangeByHash(this.__wbg_ptr, hash);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Automerge} other\n * @returns {Change[]}\n */\n getChangesAdded(other) {\n _assertClass(other, Automerge);\n const ret = wasm.automerge_getChangesAdded(this.__wbg_ptr, other.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Heads}\n */\n getHeads() {\n const ret = wasm.automerge_getHeads(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Actor}\n */\n getActorId() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.automerge_getActorId(this.__wbg_ptr);\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n }\n /**\n * @returns {Change | null}\n */\n getLastLocalChange() {\n const ret = wasm.automerge_getLastLocalChange(this.__wbg_ptr);\n return ret;\n }\n dump() {\n wasm.automerge_dump(this.__wbg_ptr);\n }\n /**\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n getMissingDeps(heads) {\n const ret = wasm.automerge_getMissingDeps(this.__wbg_ptr, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {SyncState} state\n * @param {SyncMessage} message\n */\n receiveSyncMessage(state, message) {\n _assertClass(state, SyncState);\n const ret = wasm.automerge_receiveSyncMessage(this.__wbg_ptr, state.__wbg_ptr, message);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {SyncState} state\n * @returns {SyncMessage | null}\n */\n generateSyncMessage(state) {\n _assertClass(state, SyncState);\n const ret = wasm.automerge_generateSyncMessage(this.__wbg_ptr, state.__wbg_ptr);\n return ret;\n }\n /**\n * @param {any} meta\n * @returns {MaterializeValue}\n */\n toJS(meta) {\n const ret = wasm.automerge_toJS(this.__wbg_ptr, meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null | undefined} heads\n * @param {any} meta\n * @returns {any}\n */\n materialize(obj, heads, meta) {\n const ret = wasm.automerge_materialize(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads), meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {any} position\n * @param {Array<any> | null | undefined} heads\n * @param {any} move_cursor\n * @returns {string}\n */\n getCursor(obj, position, heads, move_cursor) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_getCursor(this.__wbg_ptr, obj, position, isLikeNone(heads) ? 0 : addToExternrefTable0(heads), move_cursor);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {any} cursor\n * @param {Array<any> | null} [heads]\n * @returns {number}\n */\n getCursorPosition(obj, cursor, heads) {\n const ret = wasm.automerge_getCursorPosition(this.__wbg_ptr, obj, cursor, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0];\n }\n /**\n * @param {string | null} [message]\n * @param {number | null} [time]\n * @returns {Hash}\n */\n emptyChange(message, time) {\n var ptr0 = isLikeNone(message) ? 0 : passStringToWasm0(message, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_emptyChange(this.__wbg_ptr, ptr0, len0, !isLikeNone(time), isLikeNone(time) ? 0 : time);\n return ret;\n }\n /**\n * @param {any} obj\n * @param {any} range\n * @param {any} name\n * @param {any} value\n * @param {any} datatype\n */\n mark(obj, range, name, value, datatype) {\n const ret = wasm.automerge_mark(this.__wbg_ptr, obj, range, name, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {MarkRange} range\n * @param {string} name\n */\n unmark(obj, range, name) {\n const ret = wasm.automerge_unmark(this.__wbg_ptr, obj, range, name);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n marks(obj, heads) {\n const ret = wasm.automerge_marks(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {number} index\n * @param {Array<any> | null} [heads]\n * @returns {object}\n */\n marksAt(obj, index, heads) {\n const ret = wasm.automerge_marksAt(this.__wbg_ptr, obj, index, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {SyncState} state\n * @returns {boolean}\n */\n hasOurChanges(state) {\n _assertClass(state, SyncState);\n const ret = wasm.automerge_hasOurChanges(this.__wbg_ptr, state.__wbg_ptr);\n return ret !== 0;\n }\n /**\n * @returns {Hash[]}\n */\n topoHistoryTraversal() {\n const ret = wasm.automerge_topoHistoryTraversal(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Stats}\n */\n stats() {\n const ret = wasm.automerge_stats(this.__wbg_ptr);\n return ret;\n }\n}\n\nconst SyncStateFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_syncstate_free(ptr >>> 0, 1));\n\nexport class SyncState {\n\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(SyncState.prototype);\n obj.__wbg_ptr = ptr;\n SyncStateFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n SyncStateFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_syncstate_free(ptr, 0);\n }\n /**\n * @returns {Heads}\n */\n get sharedHeads() {\n const ret = wasm.syncstate_sharedHeads(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Heads}\n */\n get lastSentHeads() {\n const ret = wasm.syncstate_lastSentHeads(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {Heads} heads\n */\n set lastSentHeads(heads) {\n const ret = wasm.syncstate_set_lastSentHeads(this.__wbg_ptr, heads);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {Heads} hashes\n */\n set sentHashes(hashes) {\n const ret = wasm.syncstate_set_sentHashes(this.__wbg_ptr, hashes);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @returns {SyncState}\n */\n clone() {\n const ret = wasm.syncstate_clone(this.__wbg_ptr);\n return SyncState.__wrap(ret);\n }\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_String_8f0eb39a4a4c2f66 = function(arg0, arg1) {\n const ret = String(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_apply_eb9e9b97497f91e4 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.apply(arg0, arg1, arg2);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_assign_3627b8559449930a = function(arg0, arg1) {\n const ret = Object.assign(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) {\n const ret = arg0.buffer;\n return ret;\n };\n imports.wbg.__wbg_call_672a4d21634d4a24 = function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_call_7cccdd69e0791ae2 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.call(arg1, arg2);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_concat_9de968491c4340cf = function(arg0, arg1) {\n const ret = arg0.concat(arg1);\n return ret;\n };\n imports.wbg.__wbg_crypto_574e78ad8b13b65f = function(arg0) {\n const ret = arg0.crypto;\n return ret;\n };\n imports.wbg.__wbg_defineProperty_a3ddad9901e2d29e = function(arg0, arg1, arg2) {\n const ret = Object.defineProperty(arg0, arg1, arg2);\n return ret;\n };\n imports.wbg.__wbg_deleteProperty_96363d4a1d977c97 = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.deleteProperty(arg0, arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_done_769e5ede4b31c67b = function(arg0) {\n const ret = arg0.done;\n return ret;\n };\n imports.wbg.__wbg_entries_3265d4158b33e5dc = function(arg0) {\n const ret = Object.entries(arg0);\n return ret;\n };\n imports.wbg.__wbg_error_7534b8e9a36f1ab4 = function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n };\n imports.wbg.__wbg_for_4ff07bddd743c5e7 = function(arg0, arg1) {\n const ret = Symbol.for(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_freeze_ef6d70cf38e8d948 = function(arg0) {\n const ret = Object.freeze(arg0);\n return ret;\n };\n imports.wbg.__wbg_from_2a5d3e218e67aa85 = function(arg0) {\n const ret = Array.from(arg0);\n return ret;\n };\n imports.wbg.__wbg_getRandomValues_b8f5dbd5f3995a9e = function() { return handleError(function (arg0, arg1) {\n arg0.getRandomValues(arg1);\n }, arguments) };\n imports.wbg.__wbg_getTime_46267b1c24877e30 = function(arg0) {\n const ret = arg0.getTime();\n return ret;\n };\n imports.wbg.__wbg_get_67b2ba62fc30de12 = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(arg0, arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_get_b9b93047fe3cf45b = function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_e14585432e3737fc = function(arg0) {\n let result;\n try {\n result = arg0 instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Date_e9a9be8b9cea7890 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Date;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Object_7f2dcef8f78644a4 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Object;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_isArray_a1eab7e0d067391b = function(arg0) {\n const ret = Array.isArray(arg0);\n return ret;\n };\n imports.wbg.__wbg_iterator_9a24c88df860dc65 = function() {\n const ret = Symbol.iterator;\n return ret;\n };\n imports.wbg.__wbg_keys_5c77a08ddc2fb8a6 = function(arg0) {\n const ret = Object.keys(arg0);\n return ret;\n };\n imports.wbg.__wbg_length_a446193dc22c12f8 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_d56737991078581b = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_e2d2a49132c1b256 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_log_1ae1e9f741096e91 = function(arg0, arg1) {\n console.log(arg0, arg1);\n };\n imports.wbg.__wbg_log_c222819a41e063d3 = function(arg0) {\n console.log(arg0);\n };\n imports.wbg.__wbg_msCrypto_a61aeb35a24c1329 = function(arg0) {\n const ret = arg0.msCrypto;\n return ret;\n };\n imports.wbg.__wbg_new_1ab78df5e132f715 = function(arg0, arg1) {\n const ret = new RangeError(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_new_31a97dac4f10fab7 = function(arg0) {\n const ret = new Date(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_405e22f390576ce2 = function() {\n const ret = new Object();\n return ret;\n };\n imports.wbg.__wbg_new_78feb108b6472713 = function() {\n const ret = new Array();\n return ret;\n };\n imports.wbg.__wbg_new_8a6f238a6ece86ea = function() {\n const ret = new Error();\n return ret;\n };\n imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_c68d7209be747379 = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_newnoargs_105ed471475aaf50 = function(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_d97e637ebe145a9a = function(arg0, arg1, arg2) {\n const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithlength_a381634e90c276d4 = function(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_next_25feadfc0913fea9 = function(arg0) {\n const ret = arg0.next;\n return ret;\n };\n imports.wbg.__wbg_next_6574e1a8a62d1055 = function() { return handleError(function (arg0) {\n const ret = arg0.next();\n return ret;\n }, arguments) };\n imports.wbg.__wbg_node_905d3e251edff8a2 = function(arg0) {\n const ret = arg0.node;\n return ret;\n };\n imports.wbg.__wbg_ownKeys_3930041068756f1f = function() { return handleError(function (arg0) {\n const ret = Reflect.ownKeys(arg0);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_process_dc0fbacc7c1c06f7 = function(arg0) {\n const ret = arg0.process;\n return ret;\n };\n imports.wbg.__wbg_push_737cfc8c1432c2c6 = function(arg0, arg1) {\n const ret = arg0.push(arg1);\n return ret;\n };\n imports.wbg.__wbg_randomFillSync_ac0988aba3254290 = function() { return handleError(function (arg0, arg1) {\n arg0.randomFillSync(arg1);\n }, arguments) };\n imports.wbg.__wbg_require_60cc747a6bc5215a = function() { return handleError(function () {\n const ret = module.require;\n return ret;\n }, arguments) };\n imports.wbg.__wbg_set_37837023f3d740e8 = function(arg0, arg1, arg2) {\n arg0[arg1 >>> 0] = arg2;\n };\n imports.wbg.__wbg_set_3f1d0b984ed272ed = function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n };\n imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_set_bb8cecf6a62b9f46 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(arg0, arg1, arg2);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_slice_972c243648c9fd2e = function(arg0, arg1, arg2) {\n const ret = arg0.slice(arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_stack_0ed75d68575b0f3c = function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07 = function() {\n const ret = typeof global === 'undefined' ? null : global;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0 = function() {\n const ret = typeof globalThis === 'undefined' ? null : globalThis;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819 = function() {\n const ret = typeof self === 'undefined' ? null : self;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40 = function() {\n const ret = typeof window === 'undefined' ? null : window;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_subarray_aa9065fa9dc5df96 = function(arg0, arg1, arg2) {\n const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_toString_66ab719c2a98bdf1 = function(arg0) {\n const ret = arg0.toString();\n return ret;\n };\n imports.wbg.__wbg_unshift_c290010f73f04fb1 = function(arg0, arg1) {\n const ret = arg0.unshift(arg1);\n return ret;\n };\n imports.wbg.__wbg_value_cd1ffa7b1ab794f1 = function(arg0) {\n const ret = arg0.value;\n return ret;\n };\n imports.wbg.__wbg_values_fcb8ba8c0aad8b58 = function(arg0) {\n const ret = Object.values(arg0);\n return ret;\n };\n imports.wbg.__wbg_versions_c01dfd4722a88165 = function(arg0) {\n const ret = arg0.versions;\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_i64 = function(arg0) {\n const ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) {\n const ret = BigInt.asUintN(64, arg0);\n return ret;\n };\n imports.wbg.__wbindgen_boolean_get = function(arg0) {\n const v = arg0;\n const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;\n return ret;\n };\n imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_error_new = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_4;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n ;\n };\n imports.wbg.__wbindgen_is_array = function(arg0) {\n const ret = Array.isArray(arg0);\n return ret;\n };\n imports.wbg.__wbindgen_is_function = function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n };\n imports.wbg.__wbindgen_is_null = function(arg0) {\n const ret = arg0 === null;\n return ret;\n };\n imports.wbg.__wbindgen_is_object = function(arg0) {\n const val = arg0;\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n };\n imports.wbg.__wbindgen_is_string = function(arg0) {\n const ret = typeof(arg0) === 'string';\n return ret;\n };\n imports.wbg.__wbindgen_is_undefined = function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n };\n imports.wbg.__wbindgen_json_serialize = function(arg0, arg1) {\n const obj = arg1;\n const ret = JSON.stringify(obj === undefined ? null : obj);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) {\n const ret = arg0 == arg1;\n return ret;\n };\n imports.wbg.__wbindgen_memory = function() {\n const ret = wasm.memory;\n return ret;\n };\n imports.wbg.__wbindgen_number_get = function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n };\n imports.wbg.__wbindgen_number_new = function(arg0) {\n const ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new /* @vite-ignore */ URL('automerge_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { isImmutableString, rootProxy } from \"./proxies.js\";\nexport { isImmutableString, isCounter } from \"./proxies.js\";\nimport { STATE } from \"./constants.js\";\nimport { Counter, } from \"./types.js\";\nexport { Counter, Int, Uint, Float64, } from \"./types.js\";\nconst _SyncStateSymbol = Symbol(\"_syncstate\");\nimport { ApiHandler, UseApi } from \"./low_level.js\";\nexport { initializeWasm, initializeBase64Wasm, wasmInitialized, isWasmInitialized, } from \"./low_level.js\";\nimport { ImmutableString } from \"./immutable_string.js\";\nexport { ImmutableString } from \"./immutable_string.js\";\nimport { _state, _is_proxy, _clear_cache, _trace, _obj, } from \"./internal_state.js\";\nexport { applyPatch, applyPatches } from \"./apply_patches.js\";\nimport { conflictAt } from \"./conflicts.js\";\n/**\n * Function for use in {@link change} which inserts values into a list at a given index\n * @param list\n * @param index\n * @param values\n */\nexport function insertAt(list, index, ...values) {\n if (!_is_proxy(list)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n //eslint-disable-next-line no-extra-semi\n ;\n list.insertAt(index, ...values);\n}\n/**\n * Function for use in {@link change} which deletes values from a list at a given index\n * @param list\n * @param index\n * @param numDelete\n */\nexport function deleteAt(list, index, numDelete) {\n if (!_is_proxy(list)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n //eslint-disable-next-line no-extra-semi\n ;\n list.deleteAt(index, numDelete);\n}\n/** @hidden **/\nexport function use(api) {\n UseApi(api);\n}\n/** @hidden */\nexport function getBackend(doc) {\n return _state(doc).handle;\n}\nfunction importOpts(_actor) {\n if (typeof _actor === \"object\") {\n return _actor;\n }\n else {\n return { actor: _actor };\n }\n}\nexport function getChangesSince(state, heads) {\n const n = _state(state);\n return n.handle.getChanges(heads);\n}\nexport function getChangesMetaSince(state, heads) {\n const n = _state(state);\n return n.handle.getChangesMeta(heads);\n}\nfunction cursorToIndex(state, value, index) {\n if (typeof index == \"string\") {\n if (/^-?[0-9]+@[0-9a-zA-Z]+$|^[se]$/.test(index)) {\n return state.handle.getCursorPosition(value, index);\n }\n else {\n throw new RangeError(\"index must be a number or cursor\");\n }\n }\n else {\n return index;\n }\n}\n/**\n * Create a new automerge document\n *\n * @typeParam T - The type of value contained in the document. This will be the\n * type that is passed to the change closure in {@link change}\n * @param _opts - Either an actorId or an {@link InitOptions} (which may\n * contain an actorId). If this is null the document will be initialised with a\n * random actor ID\n */\nexport function init(_opts) {\n const opts = importOpts(_opts);\n const freeze = !!opts.freeze;\n const patchCallback = opts.patchCallback;\n const actor = opts.actor;\n const handle = ApiHandler.create({ actor });\n handle.enableFreeze(!!opts.freeze);\n registerDatatypes(handle);\n const doc = handle.materialize(\"/\", undefined, {\n handle,\n heads: undefined,\n freeze,\n patchCallback,\n });\n return doc;\n}\n/**\n * Make an immutable view of an automerge document as at `heads`\n *\n * @remarks\n * The document returned from this function cannot be passed to {@link change}.\n * This is because it shares the same underlying memory as `doc`, but it is\n * consequently a very cheap copy.\n *\n * Note that this function will throw an error if any of the hashes in `heads`\n * are not in the document.\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to create a view of\n * @param heads - The hashes of the heads to create a view at\n */\nexport function view(doc, heads) {\n const state = _state(doc);\n const handle = state.handle;\n return state.handle.materialize(\"/\", heads, Object.assign(Object.assign({}, state), { handle,\n heads }));\n}\n/**\n * Make a full writable copy of an automerge document\n *\n * @remarks\n * Unlike {@link view} this function makes a full copy of the memory backing\n * the document and can thus be passed to {@link change}. It also generates a\n * new actor ID so that changes made in the new document do not create duplicate\n * sequence numbers with respect to the old document. If you need control over\n * the actor ID which is generated you can pass the actor ID as the second\n * argument\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to clone\n * @param _opts - Either an actor ID to use for the new doc or an {@link InitOptions}\n */\nexport function clone(doc, _opts) {\n const state = _state(doc);\n const heads = state.heads;\n const opts = importOpts(_opts);\n const handle = state.handle.fork(opts.actor, heads);\n handle.updateDiffCursor();\n // `change` uses the presence of state.heads to determine if we are in a view\n // set it to undefined to indicate that this is a full fat document\n const { heads: _oldHeads } = state, stateSansHeads = __rest(state, [\"heads\"]);\n stateSansHeads.patchCallback = opts.patchCallback;\n return handle.applyPatches(doc, Object.assign(Object.assign({}, stateSansHeads), { handle }));\n}\n/** Explicity free the memory backing a document. Note that this is note\n * necessary in environments which support\n * [`FinalizationRegistry`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry)\n */\nexport function free(doc) {\n return _state(doc).handle.free();\n}\n/**\n * Create an automerge document from a POJO\n *\n * @param initialState - The initial state which will be copied into the document\n * @typeParam T - The type of the value passed to `from` _and_ the type the resulting document will contain\n * @typeParam actor - The actor ID of the resulting document, if this is null a random actor ID will be used\n *\n * @example\n * ```\n * const doc = automerge.from({\n * tasks: [\n * {description: \"feed dogs\", done: false}\n * ]\n * })\n * ```\n */\nexport function from(initialState, _opts) {\n return _change(init(_opts), \"from\", {}, d => Object.assign(d, initialState))\n .newDoc;\n}\n/**\n * Update the contents of an automerge document\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to update\n * @param options - Either a message, an {@link ChangeOptions}, or a {@link ChangeFn}\n * @param callback - A `ChangeFn` to be used if `options` was a `string`\n *\n * Note that if the second argument is a function it will be used as the `ChangeFn` regardless of what the third argument is.\n *\n * @example A simple change\n * ```\n * let doc1 = automerge.init()\n * doc1 = automerge.change(doc1, d => {\n * d.key = \"value\"\n * })\n * assert.equal(doc1.key, \"value\")\n * ```\n *\n * @example A change with a message\n *\n * ```\n * doc1 = automerge.change(doc1, \"add another value\", d => {\n * d.key2 = \"value2\"\n * })\n * ```\n *\n * @example A change with a message and a timestamp\n *\n * ```\n * doc1 = automerge.change(doc1, {message: \"add another value\", time: 1640995200}, d => {\n * d.key2 = \"value2\"\n * })\n * ```\n *\n * @example responding to a patch callback\n * ```\n * let patchedPath\n * let patchCallback = patch => {\n * patchedPath = patch.path\n * }\n * doc1 = automerge.change(doc1, {message: \"add another value\", time: 1640995200, patchCallback}, d => {\n * d.key2 = \"value2\"\n * })\n * assert.equal(patchedPath, [\"key2\"])\n * ```\n */\nexport function change(doc, options, callback) {\n if (typeof options === \"function\") {\n return _change(doc, \"change\", {}, options).newDoc;\n }\n else if (typeof callback === \"function\") {\n if (typeof options === \"string\") {\n options = { message: options };\n }\n return _change(doc, \"change\", options, callback).newDoc;\n }\n else {\n throw RangeError(\"Invalid args for change\");\n }\n}\n/**\n * Make a change to the document as it was at a particular point in history\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to update\n * @param scope - The heads representing the point in history to make the change\n * @param options - Either a message or a {@link ChangeOptions} for the new change\n * @param callback - A `ChangeFn` to be used if `options` was a `string`\n *\n * @remarks\n * This function is similar to {@link change} but allows you to make changes to\n * the document as if it were at a particular point in time. To understand this\n * imagine a document created with the following history:\n *\n * ```ts\n * let doc = automerge.from({..})\n * doc = automerge.change(doc, () => {...})\n *\n * const heads = automerge.getHeads(doc)\n *\n * // fork the document make a change\n * let fork = automerge.fork(doc)\n * fork = automerge.change(fork, () => {...})\n * const headsOnFork = automerge.getHeads(fork)\n *\n * // make a change on the original doc\n * doc = automerge.change(doc, () => {...})\n * const headsOnOriginal = automerge.getHeads(doc)\n *\n * // now merge the changes back to the original document\n * doc = automerge.merge(doc, fork)\n *\n * // The heads of the document will now be (headsOnFork, headsOnOriginal)\n * ```\n *\n * {@link ChangeAt} produces an equivalent history, but without having to\n * create a fork of the document. In particular the `newHeads` field of the\n * returned {@link ChangeAtResult} will be the same as `headsOnFork`.\n *\n * Why would you want this? It's typically used in conjunction with {@link diff}\n * to reconcile state which is managed concurrently with the document. For\n * example, if you have a text editor component which the user is modifying\n * and you can't send the changes to the document synchronously you might follow\n * a workflow like this:\n *\n * * On initialization save the current heads of the document in the text editor state\n * * Every time the user makes a change record the change in the text editor state\n *\n * Now from time to time reconcile the editor state and the document\n * * Load the last saved heads from the text editor state, call them `oldHeads`\n * * Apply all the unreconciled changes to the document using `changeAt(doc, oldHeads, ...)`\n * * Get the diff from the resulting document to the current document using {@link diff}\n * passing the {@link ChangeAtResult.newHeads} as the `before` argument and the\n * heads of the entire document as the `after` argument.\n * * Apply the diff to the text editor state\n * * Save the current heads of the document in the text editor state\n */\nexport function changeAt(doc, scope, options, callback) {\n if (typeof options === \"function\") {\n return _change(doc, \"changeAt\", {}, options, scope);\n }\n else if (typeof callback === \"function\") {\n if (typeof options === \"string\") {\n options = { message: options };\n }\n return _change(doc, \"changeAt\", options, callback, scope);\n }\n else {\n throw RangeError(\"Invalid args for changeAt\");\n }\n}\nfunction progressDocument(doc, source, heads, callback) {\n if (heads == null) {\n return doc;\n }\n const state = _state(doc);\n const nextState = Object.assign(Object.assign({}, state), { heads: undefined });\n const { value: nextDoc, patches } = state.handle.applyAndReturnPatches(doc, nextState);\n if (patches.length > 0) {\n if (callback != null) {\n callback(patches, { before: doc, after: nextDoc, source });\n }\n const newState = _state(nextDoc);\n newState.mostRecentPatch = {\n before: _state(doc).heads,\n after: newState.handle.getHeads(),\n patches,\n };\n }\n state.heads = heads;\n return nextDoc;\n}\nfunction _change(doc, source, options, callback, scope) {\n if (typeof callback !== \"function\") {\n throw new RangeError(\"invalid change function\");\n }\n const state = _state(doc);\n if (doc === undefined || state === undefined) {\n throw new RangeError(\"must be the document root\");\n }\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n let heads = state.handle.getHeads();\n if (scope && headsEqual(scope, heads)) {\n scope = undefined;\n }\n if (scope) {\n state.handle.isolate(scope);\n heads = scope;\n }\n if (!(\"time\" in options)) {\n options.time = Math.floor(Date.now() / 1000);\n }\n try {\n state.heads = heads;\n const root = rootProxy(state.handle);\n callback(root);\n if (state.handle.pendingOps() === 0) {\n state.heads = undefined;\n if (scope) {\n state.handle.integrate();\n }\n return {\n newDoc: doc,\n newHeads: null,\n };\n }\n else {\n const newHead = state.handle.commit(options.message, options.time);\n state.handle.integrate();\n return {\n newDoc: progressDocument(doc, source, heads, options.patchCallback || state.patchCallback),\n newHeads: newHead != null ? [newHead] : null,\n };\n }\n }\n catch (e) {\n state.heads = undefined;\n state.handle.rollback();\n throw e;\n }\n}\n/**\n * Make a change to a document which does not modify the document\n *\n * @param doc - The doc to add the empty change to\n * @param options - Either a message or a {@link ChangeOptions} for the new change\n *\n * Why would you want to do this? One reason might be that you have merged\n * changes from some other peers and you want to generate a change which\n * depends on those merged changes so that you can sign the new change with all\n * of the merged changes as part of the new change.\n */\nexport function emptyChange(doc, options) {\n if (options === undefined) {\n options = {};\n }\n if (typeof options === \"string\") {\n options = { message: options };\n }\n if (!(\"time\" in options)) {\n options.time = Math.floor(Date.now() / 1000);\n }\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.emptyChange(options.message, options.time);\n return progressDocument(doc, \"emptyChange\", heads);\n}\n/**\n * Load an automerge document from a compressed document produce by {@link save}\n *\n * @typeParam T - The type of the value which is contained in the document.\n * Note that no validation is done to make sure this type is in\n * fact the type of the contained value so be a bit careful\n * @param data - The compressed document\n * @param _opts - Either an actor ID or some {@link InitOptions}, if the actor\n * ID is null a random actor ID will be created\n *\n * Note that `load` will throw an error if passed incomplete content (for\n * example if you are receiving content over the network and don't know if you\n * have the complete document yet). If you need to handle incomplete content use\n * {@link init} followed by {@link loadIncremental}.\n */\nexport function load(data, _opts) {\n const opts = importOpts(_opts);\n if (opts.patchCallback) {\n return loadIncremental(init(opts), data);\n }\n const actor = opts.actor;\n const patchCallback = opts.patchCallback;\n const unchecked = opts.unchecked || false;\n const allowMissingDeps = opts.allowMissingChanges || false;\n const convertImmutableStringsToText = opts.convertImmutableStringsToText || false;\n const handle = ApiHandler.load(data, {\n actor,\n unchecked,\n allowMissingDeps,\n convertImmutableStringsToText,\n });\n handle.enableFreeze(!!opts.freeze);\n registerDatatypes(handle);\n const doc = handle.materialize(\"/\", undefined, {\n handle,\n heads: undefined,\n patchCallback,\n });\n return doc;\n}\n/**\n * Load changes produced by {@link saveIncremental}, or partial changes\n *\n * @typeParam T - The type of the value which is contained in the document.\n * Note that no validation is done to make sure this type is in\n * fact the type of the contained value so be a bit careful\n * @param data - The compressedchanges\n * @param opts - an {@link ApplyOptions}\n *\n * This function is useful when staying up to date with a connected peer.\n * Perhaps the other end sent you a full compresed document which you loaded\n * with {@link load} and they're sending you the result of\n * {@link getLastLocalChange} every time they make a change.\n *\n * Note that this function will succesfully load the results of {@link save} as\n * well as {@link getLastLocalChange} or any other incremental change.\n */\nexport function loadIncremental(doc, data, opts) {\n if (!opts) {\n opts = {};\n }\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an out of date document - set at: \" + _trace(doc));\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.loadIncremental(data);\n return progressDocument(doc, \"loadIncremental\", heads, opts.patchCallback || state.patchCallback);\n}\n/**\n * Create binary save data to be appended to a save file or fed into {@link loadIncremental}\n *\n * @typeParam T - The type of the value which is contained in the document.\n * Note that no validation is done to make sure this type is in\n * fact the type of the contained value so be a bit careful\n *\n * This function is useful for incrementally saving state. The data can be appended to a\n * automerge save file, or passed to a document replicating its state.\n *\n */\nexport function saveIncremental(doc) {\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an out of date document - set at: \" + _trace(doc));\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n return state.handle.saveIncremental();\n}\n/**\n * Export the contents of a document to a compressed format\n *\n * @param doc - The doc to save\n *\n * The returned bytes can be passed to {@link load} or {@link loadIncremental}\n */\nexport function save(doc) {\n return _state(doc).handle.save();\n}\n/**\n * Merge `remote` into `local`\n * @typeParam T - The type of values contained in each document\n * @param local - The document to merge changes into\n * @param remote - The document to merge changes from\n *\n * @returns - The merged document\n *\n * Often when you are merging documents you will also need to clone them. Both\n * arguments to `merge` are frozen after the call so you can no longer call\n * mutating methods (such as {@link change}) on them. The symtom of this will be\n * an error which says \"Attempting to change an out of date document\". To\n * overcome this call {@link clone} on the argument before passing it to {@link\n * merge}.\n */\nexport function merge(local, remote) {\n const localState = _state(local);\n if (localState.heads) {\n throw new RangeError(\"Attempting to change an out of date document - set at: \" + _trace(local));\n }\n const heads = localState.handle.getHeads();\n const remoteState = _state(remote);\n const changes = localState.handle.getChangesAdded(remoteState.handle);\n localState.handle.applyChanges(changes);\n return progressDocument(local, \"merge\", heads, localState.patchCallback);\n}\n/**\n * Get the actor ID associated with the document\n */\nexport function getActorId(doc) {\n const state = _state(doc);\n return state.handle.getActorId();\n}\n/**\n * Get the conflicts associated with a property\n *\n * The values of properties in a map in automerge can be conflicted if there\n * are concurrent \"put\" operations to the same key. Automerge chooses one value\n * arbitrarily (but deterministically, any two nodes who have the same set of\n * changes will choose the same value) from the set of conflicting values to\n * present as the value of the key.\n *\n * Sometimes you may want to examine these conflicts, in this case you can use\n * {@link getConflicts} to get the conflicts for the key.\n *\n * @example\n * ```\n * import * as automerge from \"@automerge/automerge\"\n *\n * type Profile = {\n * pets: Array<{name: string, type: string}>\n * }\n *\n * let doc1 = automerge.init<Profile>(\"aaaa\")\n * doc1 = automerge.change(doc1, d => {\n * d.pets = [{name: \"Lassie\", type: \"dog\"}]\n * })\n * let doc2 = automerge.init<Profile>(\"bbbb\")\n * doc2 = automerge.merge(doc2, automerge.clone(doc1))\n *\n * doc2 = automerge.change(doc2, d => {\n * d.pets[0].name = \"Beethoven\"\n * })\n *\n * doc1 = automerge.change(doc1, d => {\n * d.pets[0].name = \"Babe\"\n * })\n *\n * const doc3 = automerge.merge(doc1, doc2)\n *\n * // Note that here we pass `doc3.pets`, not `doc3`\n * let conflicts = automerge.getConflicts(doc3.pets[0], \"name\")\n *\n * // The two conflicting values are the keys of the conflicts object\n * assert.deepEqual(Object.values(conflicts), [\"Babe\", Beethoven\"])\n * ```\n */\nexport function getConflicts(doc, prop) {\n const state = _state(doc, false);\n const objectId = _obj(doc);\n if (objectId != null) {\n const withinChangeCallback = _is_proxy(doc);\n return conflictAt(state.handle, objectId, prop, withinChangeCallback);\n }\n else {\n return undefined;\n }\n}\n/**\n * Get the binary representation of the last change which was made to this doc\n *\n * This is most useful when staying in sync with other peers, every time you\n * make a change locally via {@link change} you immediately call {@link\n * getLastLocalChange} and send the result over the network to other peers.\n */\nexport function getLastLocalChange(doc) {\n const state = _state(doc);\n return state.handle.getLastLocalChange() || undefined;\n}\n/**\n * Return the object ID of an arbitrary javascript value\n *\n * This is useful to determine if something is actually an automerge document,\n * if `doc` is not an automerge document this will return null.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getObjectId(doc, prop) {\n if (prop) {\n const state = _state(doc, false);\n const objectId = _obj(doc);\n if (!state || !objectId) {\n return null;\n }\n return state.handle.get(objectId, prop);\n }\n else {\n return _obj(doc);\n }\n}\n/**\n * Get the changes which are in `newState` but not in `oldState`. The returned\n * changes can be loaded in `oldState` via {@link applyChanges}.\n *\n * Note that this will crash if there are changes in `oldState` which are not in `newState`.\n */\nexport function getChanges(oldState, newState) {\n const n = _state(newState);\n return n.handle.getChanges(getHeads(oldState));\n}\n/**\n * Get all the changes in a document\n *\n * This is different to {@link save} because the output is an array of changes\n * which can be individually applied via {@link applyChanges}`\n *\n */\nexport function getAllChanges(doc) {\n const state = _state(doc);\n return state.handle.getChanges([]);\n}\n/**\n * Apply changes received from another document\n *\n * `doc` will be updated to reflect the `changes`. If there are changes which\n * we do not have dependencies for yet those will be stored in the document and\n * applied when the depended on changes arrive.\n *\n * You can use the {@link ApplyOptions} to pass a patchcallback which will be\n * informed of any changes which occur as a result of applying the changes\n *\n */\nexport function applyChanges(doc, changes, opts) {\n const state = _state(doc);\n if (!opts) {\n opts = {};\n }\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.applyChanges(changes);\n state.heads = heads;\n return [\n progressDocument(doc, \"applyChanges\", heads, opts.patchCallback || state.patchCallback),\n ];\n}\n/** @hidden */\nexport function getHistory(doc) {\n const history = getAllChanges(doc);\n return history.map((change, index) => ({\n get change() {\n return decodeChange(change);\n },\n get snapshot() {\n const [state] = applyChanges(init(), history.slice(0, index + 1));\n return state;\n },\n }));\n}\n/**\n * Create a set of patches representing the change from one set of heads to another\n *\n * If either of the heads are missing from the document the returned set of patches will be empty\n */\nexport function diff(doc, before, after) {\n checkHeads(before, \"before\");\n checkHeads(after, \"after\");\n const state = _state(doc);\n if (state.mostRecentPatch &&\n equals(state.mostRecentPatch.before, before) &&\n equals(state.mostRecentPatch.after, after)) {\n return state.mostRecentPatch.patches;\n }\n return state.handle.diff(before, after);\n}\nfunction headsEqual(heads1, heads2) {\n if (heads1.length !== heads2.length) {\n return false;\n }\n for (let i = 0; i < heads1.length; i++) {\n if (heads1[i] !== heads2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction checkHeads(heads, fieldname) {\n if (!Array.isArray(heads)) {\n throw new Error(`${fieldname} must be an array`);\n }\n}\n/** @hidden */\n// FIXME : no tests\n// FIXME can we just use deep equals now?\nexport function equals(val1, val2) {\n if (!isObject(val1) || !isObject(val2))\n return val1 === val2;\n const keys1 = Object.keys(val1).sort(), keys2 = Object.keys(val2).sort();\n if (keys1.length !== keys2.length)\n return false;\n for (let i = 0; i < keys1.length; i++) {\n if (keys1[i] !== keys2[i])\n return false;\n if (!equals(val1[keys1[i]], val2[keys2[i]]))\n return false;\n }\n return true;\n}\n/**\n * encode a {@link SyncState} into binary to send over the network\n *\n * @group sync\n * */\nexport function encodeSyncState(state) {\n const sync = ApiHandler.importSyncState(state);\n const result = ApiHandler.encodeSyncState(sync);\n sync.free();\n return result;\n}\n/**\n * Decode some binary data into a {@link SyncState}\n *\n * @group sync\n */\nexport function decodeSyncState(state) {\n const sync = ApiHandler.decodeSyncState(state);\n const result = ApiHandler.exportSyncState(sync);\n sync.free();\n return result;\n}\n/**\n * Generate a sync message to send to the peer represented by `inState`\n * @param doc - The doc to generate messages about\n * @param inState - The {@link SyncState} representing the peer we are talking to\n *\n * @group sync\n *\n * @returns An array of `[newSyncState, syncMessage | null]` where\n * `newSyncState` should replace `inState` and `syncMessage` should be sent to\n * the peer if it is not null. If `syncMessage` is null then we are up to date.\n */\nexport function generateSyncMessage(doc, inState) {\n const state = _state(doc);\n const syncState = ApiHandler.importSyncState(inState);\n const message = state.handle.generateSyncMessage(syncState);\n const outState = ApiHandler.exportSyncState(syncState);\n return [outState, message];\n}\n/**\n * Update a document and our sync state on receiving a sync message\n *\n * @group sync\n *\n * @param doc - The doc the sync message is about\n * @param inState - The {@link SyncState} for the peer we are communicating with\n * @param message - The message which was received\n * @param opts - Any {@link ApplyOption}s, used for passing a\n * {@link PatchCallback} which will be informed of any changes\n * in `doc` which occur because of the received sync message.\n *\n * @returns An array of `[newDoc, newSyncState, null]` where\n * `newDoc` is the updated state of `doc`, `newSyncState` should replace\n * `inState`.\n *\n * @remarks Note that this function has three return values for legacy reasons.\n * The third value used to be a sync message to send back but this is now\n * always null and you should instead call `generateSyncMessage` after calling\n * `receiveSyncMessage` to see if there are new messages to send.\n */\nexport function receiveSyncMessage(doc, inState, message, opts) {\n const syncState = ApiHandler.importSyncState(inState);\n if (!opts) {\n opts = {};\n }\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.receiveSyncMessage(syncState, message);\n const outSyncState = ApiHandler.exportSyncState(syncState);\n return [\n progressDocument(doc, \"receiveSyncMessage\", heads, opts.patchCallback || state.patchCallback),\n outSyncState,\n null,\n ];\n}\n/**\n * Check whether the replica represented by `remoteState` has all our changes\n *\n * @param doc - The doc to check whether the remote has changes for\n * @param remoteState - The {@link SyncState} representing the peer we are talking to\n *\n * @group sync\n *\n * @returns true if the remote has all of our changes\n */\nexport function hasOurChanges(doc, remoteState) {\n const state = _state(doc);\n const syncState = ApiHandler.importSyncState(remoteState);\n return state.handle.hasOurChanges(syncState);\n}\n/**\n * Create a new, blank {@link SyncState}\n *\n * When communicating with a peer for the first time use this to generate a new\n * {@link SyncState} for them\n *\n * @group sync\n */\nexport function initSyncState() {\n return ApiHandler.exportSyncState(ApiHandler.initSyncState());\n}\n/** @hidden */\nexport function encodeChange(change) {\n return ApiHandler.encodeChange(change);\n}\n/** @hidden */\nexport function decodeChange(data) {\n return ApiHandler.decodeChange(data);\n}\n/** @hidden */\nexport function encodeSyncMessage(message) {\n return ApiHandler.encodeSyncMessage(message);\n}\n/** @hidden */\nexport function decodeSyncMessage(message) {\n return ApiHandler.decodeSyncMessage(message);\n}\n/**\n * Get any changes in `doc` which are not dependencies of `heads`\n */\nexport function getMissingDeps(doc, heads) {\n const state = _state(doc);\n return state.handle.getMissingDeps(heads);\n}\n/**\n * Get the hashes of the heads of this document\n */\nexport function getHeads(doc) {\n const state = _state(doc);\n return state.heads || state.handle.getHeads();\n}\n/** @hidden */\nexport function dump(doc) {\n const state = _state(doc);\n state.handle.dump();\n}\n/** @hidden */\nexport function toJS(doc) {\n const state = _state(doc);\n const enabled = state.handle.enableFreeze(false);\n const result = state.handle.materialize(\"/\", state.heads);\n state.handle.enableFreeze(enabled);\n return result;\n}\nexport function isAutomerge(doc) {\n if (typeof doc == \"object\" && doc !== null) {\n return getObjectId(doc) === \"_root\" && !!Reflect.get(doc, STATE);\n }\n else {\n return false;\n }\n}\nfunction isObject(obj) {\n return typeof obj === \"object\" && obj !== null;\n}\nexport function saveSince(doc, heads) {\n const state = _state(doc);\n const result = state.handle.saveSince(heads);\n return result;\n}\n/**\n * Returns true if the document has all of the given heads somewhere in its history\n */\nexport function hasHeads(doc, heads) {\n const state = _state(doc);\n for (const hash of heads) {\n if (!state.handle.getChangeByHash(hash)) {\n return false;\n }\n }\n return true;\n}\nfunction registerDatatypes(handle) {\n handle.registerDatatype(\"counter\", (n) => new Counter(n), n => {\n if (n instanceof Counter) {\n return n.value;\n }\n });\n handle.registerDatatype(\"str\", (n) => {\n return new ImmutableString(n);\n }, s => {\n if (isImmutableString(s)) {\n return s.val;\n }\n });\n}\n/**\n * @hidden\n */\nexport function topoHistoryTraversal(doc) {\n const state = _state(doc);\n return state.handle.topoHistoryTraversal();\n}\n/**\n * Decode a change hash into the details of this change\n *\n * This should be considered a semi-stable API. We try not to change the\n * encoding in backwards incompatible ways but we won't bump a major version if\n * we do have to change it\n */\nexport function inspectChange(doc, changeHash) {\n const state = _state(doc);\n return state.handle.getDecodedChangeByHash(changeHash);\n}\n/**\n * Return some internal statistics about the document\n */\nexport function stats(doc) {\n const state = _state(doc);\n return state.handle.stats();\n}\n/**\n * Modify a string\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to modify\n * @param path - The path to the string to modify\n * @param index - The position (as a {@link Cursor} or index) to edit.\n * If a cursor is used then the edit happens such that the cursor will\n * now point to the end of the newText, so you can continue to reuse\n * the same cursor for multiple calls to splice.\n * @param del - The number of code units to delete, a positive number\n * deletes N characters after the cursor, a negative number deletes\n * N characters before the cursor.\n * @param newText - The string to insert (if any).\n */\nexport function splice(doc, path, index, del, newText) {\n const objPath = absoluteObjPath(doc, path, \"splice\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n return state.handle.splice(objPath, index, del, newText);\n }\n catch (e) {\n throw new RangeError(`Cannot splice: ${e}`);\n }\n}\n/**\n * Update the value of a string\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to modify\n * @param path - The path to the string to modify\n * @param newText - The new text to update the value to\n *\n * @remarks\n * This will calculate a diff between the current value and the new value and\n * then convert that diff into calls to {@link splice}. This will produce results\n * which don't merge as well as directly capturing the user input actions, but\n * sometimes it's not possible to capture user input and this is the best you\n * can do.\n *\n * This is an experimental API and may change in the future.\n *\n * @beta\n */\nexport function updateText(doc, path, newText) {\n const objPath = absoluteObjPath(doc, path, \"updateText\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n _clear_cache(doc);\n try {\n return state.handle.updateText(objPath, newText);\n }\n catch (e) {\n throw new RangeError(`Cannot updateText: ${e}`);\n }\n}\n/**\n * Return the text + block markers at a given path\n *\n * @remarks\n * Rich text in automerge is represented as a sequence of characters with block\n * markers appearing inline with the text, and inline formatting spans overlaid\n * on the whole sequence. Block markers are normal automerge maps, but they are\n * only visible via either the {@link block} function or the {@link spans}\n * function. This function returns the current state of the spans\n */\nexport function spans(doc, path) {\n const state = _state(doc, false);\n const objPath = absoluteObjPath(doc, path, \"spans\");\n try {\n return state.handle.spans(objPath, state.heads);\n }\n catch (e) {\n throw new RangeError(`Cannot splice: ${e}`);\n }\n}\n/**\n * Get the block marker at the given index\n */\nexport function block(doc, path, index) {\n const objPath = absoluteObjPath(doc, path, \"splitBlock\");\n const state = _state(doc, false);\n index = cursorToIndex(state, objPath, index);\n try {\n return state.handle.getBlock(objPath, index);\n }\n catch (e) {\n throw new RangeError(`Cannot get block: ${e}`);\n }\n}\n/**\n * Insert a new block marker at the given index\n */\nexport function splitBlock(doc, path, index, block) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"splitBlock\");\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n state.handle.splitBlock(objPath, index, block);\n }\n catch (e) {\n throw new RangeError(`Cannot splice: ${e}`);\n }\n}\n/**\n * Delete the block marker at the given index\n */\nexport function joinBlock(doc, path, index) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"joinBlock\");\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n state.handle.joinBlock(objPath, index);\n }\n catch (e) {\n throw new RangeError(`Cannot joinBlock: ${e}`);\n }\n}\n/**\n * Update the block marker at the given index\n */\nexport function updateBlock(doc, path, index, block) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"updateBlock\");\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n state.handle.updateBlock(objPath, index, block);\n }\n catch (e) {\n throw new RangeError(`Cannot updateBlock: ${e}`);\n }\n}\n/**\n * Update the spans at the given path\n *\n * @remarks\n * Like {@link updateText} this will diff `newSpans` against the current state\n * of the text at `path` and perform a reasonably minimal number of operations\n * required to update the spans to the new state.\n */\nexport function updateSpans(doc, path, newSpans) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"updateSpans\");\n const state = _state(doc, false);\n _clear_cache(doc);\n try {\n state.handle.updateSpans(objPath, newSpans);\n }\n catch (e) {\n throw new RangeError(`Cannot updateBlock: ${e}`);\n }\n}\n/**\n * Returns a cursor for the given position in a string.\n *\n * @remarks\n * A cursor represents a relative position, \"before character X\",\n * rather than an absolute position. As the document is edited, the\n * cursor remains stable relative to its context, just as you'd expect\n * from a cursor in a concurrent text editor.\n *\n * The string representation is shareable, and so you can use this both\n * to edit the document yourself (using {@link splice}) or to share multiple\n * collaborator's current cursor positions over the network.\n *\n * The cursor's `position` can be an index in the string, `'start'` or `'end'`.\n * - `'start'` ensures this cursor always resolves to `0`\n * - `'end'` ensures this cursor always resolves to `string.length`\n *\n * Start cursors can be created by passing any negative number in `position`.\n *\n * End cursors can be created by passing a number `>= string.length` in `position`.\n *\n * `move` determines the position the cursor resolves to if the character at\n * `index` is removed:\n * - `'after'` causes the cursor to resolve towards `string.length`\n * - `'before'` causes the cursor to resolve towards `0`\n *\n * `move` is `'after'` by default.\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document\n * @param path - The path to the string\n * @param position - The position of the cursor, either an index, `'start'` or `'end'`\n * @param move - The direction the cursor should resolve to, defaults to 'after'\n */\nexport function getCursor(doc, path, position, move) {\n const objPath = absoluteObjPath(doc, path, \"getCursor\");\n const state = _state(doc, false);\n try {\n return state.handle.getCursor(objPath, position, state.heads, move);\n }\n catch (e) {\n throw new RangeError(`Cannot getCursor: ${e}`);\n }\n}\n/**\n * Returns the current index of the cursor.\n *\n * @typeParam T - The type of the value contained in the document\n *\n * @param doc - The document\n * @param path - The path to the string\n * @param index - The cursor\n */\nexport function getCursorPosition(doc, path, cursor) {\n const objPath = absoluteObjPath(doc, path, \"getCursorPosition\");\n const state = _state(doc, false);\n try {\n return state.handle.getCursorPosition(objPath, cursor, state.heads);\n }\n catch (e) {\n throw new RangeError(`Cannot getCursorPosition: ${e}`);\n }\n}\nexport function mark(doc, path, range, name, value) {\n const objPath = absoluteObjPath(doc, path, \"mark\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n try {\n return state.handle.mark(objPath, range, name, value);\n }\n catch (e) {\n throw new RangeError(`Cannot mark: ${e}`);\n }\n}\nexport function unmark(doc, path, range, name) {\n const objPath = absoluteObjPath(doc, path, \"unmark\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n try {\n return state.handle.unmark(objPath, range, name);\n }\n catch (e) {\n throw new RangeError(`Cannot unmark: ${e}`);\n }\n}\nexport function marks(doc, path) {\n const objPath = absoluteObjPath(doc, path, \"marks\");\n const state = _state(doc, false);\n try {\n return state.handle.marks(objPath);\n }\n catch (e) {\n throw new RangeError(`Cannot call marks(): ${e}`);\n }\n}\nexport function marksAt(doc, path, index) {\n const objPath = absoluteObjPath(doc, path, \"marksAt\");\n const state = _state(doc, false);\n try {\n return state.handle.marksAt(objPath, index);\n }\n catch (e) {\n throw new RangeError(`Cannot call marksAt(): ${e}`);\n }\n}\nfunction absoluteObjPath(doc, path, functionName) {\n path = path.slice();\n const objectId = _obj(doc);\n if (!objectId) {\n throw new RangeError(`invalid object for ${functionName}`);\n }\n path.unshift(objectId);\n return path.join(\"/\");\n}\n/**\n * @deprecated This method has been renamed to {@link isImmutableString}\n */\nexport const isRawString = isImmutableString;\n/**\n * @deprecated This type has been renamed to {@link ImmutableString}\n */\nexport const RawString = ImmutableString;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","let decoder\ntry {\n\tdecoder = new TextDecoder()\n} catch(error) {}\nlet src\nlet srcEnd\nlet position = 0\nlet alreadySet\nconst EMPTY_ARRAY = []\nconst LEGACY_RECORD_INLINE_ID = 105\nconst RECORD_DEFINITIONS_ID = 0xdffe\nconst RECORD_INLINE_ID = 0xdfff // temporary first-come first-serve tag // proposed tag: 0x7265 // 're'\nconst BUNDLED_STRINGS_ID = 0xdff9\nconst PACKED_TABLE_TAG_ID = 51\nconst PACKED_REFERENCE_TAG_ID = 6\nconst STOP_CODE = {}\nlet maxArraySize = 112810000 // This is the maximum array size in V8. We would potentially detect and set it higher\n// for JSC, but this is pretty large and should be sufficient for most use cases\nlet maxMapSize = 16810000 // JavaScript has a fixed maximum map size of about 16710000, but JS itself enforces this,\n// so we don't need to\n\nlet maxObjectSize = 16710000; // This is the maximum number of keys in a Map. It takes over a minute to create this\n// many keys in an object, so also probably a reasonable choice there.\nlet strings = EMPTY_ARRAY\nlet stringPosition = 0\nlet currentDecoder = {}\nlet currentStructures\nlet srcString\nlet srcStringStart = 0\nlet srcStringEnd = 0\nlet bundledStrings\nlet referenceMap\nlet currentExtensions = []\nlet currentExtensionRanges = []\nlet packedValues\nlet dataView\nlet restoreMapsAsObject\nlet defaultOptions = {\n\tuseRecords: false,\n\tmapsAsObjects: true\n}\nlet sequentialMode = false\nlet inlineObjectReadThreshold = 2;\nvar BlockedFunction // we use search and replace to change the next call to BlockedFunction to avoid CSP issues for\n// no-eval build\ntry {\n\tnew Function('')\n} catch(error) {\n\t// if eval variants are not supported, do not create inline object readers ever\n\tinlineObjectReadThreshold = Infinity\n}\n\n\n\nexport class Decoder {\n\tconstructor(options) {\n\t\tif (options) {\n\t\t\tif ((options.keyMap || options._keyMap) && !options.useRecords) {\n\t\t\t\toptions.useRecords = false\n\t\t\t\toptions.mapsAsObjects = true\n\t\t\t}\n\t\t\tif (options.useRecords === false && options.mapsAsObjects === undefined)\n\t\t\t\toptions.mapsAsObjects = true\n\t\t\tif (options.getStructures)\n\t\t\t\toptions.getShared = options.getStructures\n\t\t\tif (options.getShared && !options.structures)\n\t\t\t\t(options.structures = []).uninitialized = true // this is what we use to denote an uninitialized structures\n\t\t\tif (options.keyMap) {\n\t\t\t\tthis.mapKey = new Map()\n\t\t\t\tfor (let [k,v] of Object.entries(options.keyMap)) this.mapKey.set(v,k)\n\t\t\t}\n\t\t}\n\t\tObject.assign(this, options)\n\t}\n\t/*\n\tdecodeKey(key) {\n\t\treturn this.keyMap\n\t\t\t? Object.keys(this.keyMap)[Object.values(this.keyMap).indexOf(key)] || key\n\t\t\t: key\n\t}\n\t*/\n\tdecodeKey(key) {\n\t\treturn this.keyMap ? this.mapKey.get(key) || key : key\n\t}\n\t\n\tencodeKey(key) {\n\t\treturn this.keyMap && this.keyMap.hasOwnProperty(key) ? this.keyMap[key] : key\n\t}\n\n\tencodeKeys(rec) {\n\t\tif (!this._keyMap) return rec\n\t\tlet map = new Map()\n\t\tfor (let [k,v] of Object.entries(rec)) map.set((this._keyMap.hasOwnProperty(k) ? this._keyMap[k] : k), v)\n\t\treturn map\n\t}\n\n\tdecodeKeys(map) {\n\t\tif (!this._keyMap || map.constructor.name != 'Map') return map\n\t\tif (!this._mapKey) {\n\t\t\tthis._mapKey = new Map()\n\t\t\tfor (let [k,v] of Object.entries(this._keyMap)) this._mapKey.set(v,k)\n\t\t}\n\t\tlet res = {}\n\t\t//map.forEach((v,k) => res[Object.keys(this._keyMap)[Object.values(this._keyMap).indexOf(k)] || k] = v)\n\t\tmap.forEach((v,k) => res[safeKey(this._mapKey.has(k) ? this._mapKey.get(k) : k)] = v)\n\t\treturn res\n\t}\n\t\n\tmapDecode(source, end) {\n\t\n\t\tlet res = this.decode(source)\n\t\tif (this._keyMap) { \n\t\t\t//Experiemntal support for Optimised KeyMap decoding \n\t\t\tswitch (res.constructor.name) {\n\t\t\t\tcase 'Array': return res.map(r => this.decodeKeys(r))\n\t\t\t\t//case 'Map': return this.decodeKeys(res)\n\t\t\t}\n\t\t}\n\t\treturn res\n\t}\n\n\tdecode(source, end) {\n\t\tif (src) {\n\t\t\t// re-entrant execution, save the state and restore it after we do this decode\n\t\t\treturn saveState(() => {\n\t\t\t\tclearSource()\n\t\t\t\treturn this ? this.decode(source, end) : Decoder.prototype.decode.call(defaultOptions, source, end)\n\t\t\t})\n\t\t}\n\t\tsrcEnd = end > -1 ? end : source.length\n\t\tposition = 0\n\t\tstringPosition = 0\n\t\tsrcStringEnd = 0\n\t\tsrcString = null\n\t\tstrings = EMPTY_ARRAY\n\t\tbundledStrings = null\n\t\tsrc = source\n\t\t// this provides cached access to the data view for a buffer if it is getting reused, which is a recommend\n\t\t// technique for getting data from a database where it can be copied into an existing buffer instead of creating\n\t\t// new ones\n\t\ttry {\n\t\t\tdataView = source.dataView || (source.dataView = new DataView(source.buffer, source.byteOffset, source.byteLength))\n\t\t} catch(error) {\n\t\t\t// if it doesn't have a buffer, maybe it is the wrong type of object\n\t\t\tsrc = null\n\t\t\tif (source instanceof Uint8Array)\n\t\t\t\tthrow error\n\t\t\tthrow new Error('Source must be a Uint8Array or Buffer but was a ' + ((source && typeof source == 'object') ? source.constructor.name : typeof source))\n\t\t}\n\t\tif (this instanceof Decoder) {\n\t\t\tcurrentDecoder = this\n\t\t\tpackedValues = this.sharedValues &&\n\t\t\t\t(this.pack ? new Array(this.maxPrivatePackedValues || 16).concat(this.sharedValues) :\n\t\t\t\tthis.sharedValues)\n\t\t\tif (this.structures) {\n\t\t\t\tcurrentStructures = this.structures\n\t\t\t\treturn checkedRead()\n\t\t\t} else if (!currentStructures || currentStructures.length > 0) {\n\t\t\t\tcurrentStructures = []\n\t\t\t}\n\t\t} else {\n\t\t\tcurrentDecoder = defaultOptions\n\t\t\tif (!currentStructures || currentStructures.length > 0)\n\t\t\t\tcurrentStructures = []\n\t\t\tpackedValues = null\n\t\t}\n\t\treturn checkedRead()\n\t}\n\tdecodeMultiple(source, forEach) {\n\t\tlet values, lastPosition = 0\n\t\ttry {\n\t\t\tlet size = source.length\n\t\t\tsequentialMode = true\n\t\t\tlet value = this ? this.decode(source, size) : defaultDecoder.decode(source, size)\n\t\t\tif (forEach) {\n\t\t\t\tif (forEach(value) === false) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\twhile(position < size) {\n\t\t\t\t\tlastPosition = position\n\t\t\t\t\tif (forEach(checkedRead()) === false) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalues = [ value ]\n\t\t\t\twhile(position < size) {\n\t\t\t\t\tlastPosition = position\n\t\t\t\t\tvalues.push(checkedRead())\n\t\t\t\t}\n\t\t\t\treturn values\n\t\t\t}\n\t\t} catch(error) {\n\t\t\terror.lastPosition = lastPosition\n\t\t\terror.values = values\n\t\t\tthrow error\n\t\t} finally {\n\t\t\tsequentialMode = false\n\t\t\tclearSource()\n\t\t}\n\t}\n}\nexport function getPosition() {\n\treturn position\n}\nexport function checkedRead() {\n\ttry {\n\t\tlet result = read()\n\t\tif (bundledStrings) {\n\t\t\tif (position >= bundledStrings.postBundlePosition) {\n\t\t\t\tlet error = new Error('Unexpected bundle position');\n\t\t\t\terror.incomplete = true;\n\t\t\t\tthrow error\n\t\t\t}\n\t\t\t// bundled strings to skip past\n\t\t\tposition = bundledStrings.postBundlePosition;\n\t\t\tbundledStrings = null;\n\t\t}\n\n\t\tif (position == srcEnd) {\n\t\t\t// finished reading this source, cleanup references\n\t\t\tcurrentStructures = null\n\t\t\tsrc = null\n\t\t\tif (referenceMap)\n\t\t\t\treferenceMap = null\n\t\t} else if (position > srcEnd) {\n\t\t\t// over read\n\t\t\tlet error = new Error('Unexpected end of CBOR data')\n\t\t\terror.incomplete = true\n\t\t\tthrow error\n\t\t} else if (!sequentialMode) {\n\t\t\tthrow new Error('Data read, but end of buffer not reached')\n\t\t}\n\t\t// else more to read, but we are reading sequentially, so don't clear source yet\n\t\treturn result\n\t} catch(error) {\n\t\tclearSource()\n\t\tif (error instanceof RangeError || error.message.startsWith('Unexpected end of buffer')) {\n\t\t\terror.incomplete = true\n\t\t}\n\t\tthrow error\n\t}\n}\n\nexport function read() {\n\tlet token = src[position++]\n\tlet majorType = token >> 5\n\ttoken = token & 0x1f\n\tif (token > 0x17) {\n\t\tswitch (token) {\n\t\t\tcase 0x18:\n\t\t\t\ttoken = src[position++]\n\t\t\t\tbreak\n\t\t\tcase 0x19:\n\t\t\t\tif (majorType == 7) {\n\t\t\t\t\treturn getFloat16()\n\t\t\t\t}\n\t\t\t\ttoken = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\tbreak\n\t\t\tcase 0x1a:\n\t\t\t\tif (majorType == 7) {\n\t\t\t\t\tlet value = dataView.getFloat32(position)\n\t\t\t\t\tif (currentDecoder.useFloat32 > 2) {\n\t\t\t\t\t\t// this does rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved\n\t\t\t\t\t\tlet multiplier = mult10[((src[position] & 0x7f) << 1) | (src[position + 1] >> 7)]\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\treturn ((multiplier * value + (value > 0 ? 0.5 : -0.5)) >> 0) / multiplier\n\t\t\t\t\t}\n\t\t\t\t\tposition += 4\n\t\t\t\t\treturn value\n\t\t\t\t}\n\t\t\t\ttoken = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\tbreak\n\t\t\tcase 0x1b:\n\t\t\t\tif (majorType == 7) {\n\t\t\t\t\tlet value = dataView.getFloat64(position)\n\t\t\t\t\tposition += 8\n\t\t\t\t\treturn value\n\t\t\t\t}\n\t\t\t\tif (majorType > 1) {\n\t\t\t\t\tif (dataView.getUint32(position) > 0)\n\t\t\t\t\t\tthrow new Error('JavaScript does not support arrays, maps, or strings with length over 4294967295')\n\t\t\t\t\ttoken = dataView.getUint32(position + 4)\n\t\t\t\t} else if (currentDecoder.int64AsNumber) {\n\t\t\t\t\ttoken = dataView.getUint32(position) * 0x100000000\n\t\t\t\t\ttoken += dataView.getUint32(position + 4)\n\t\t\t\t} else\n\t\t\t\t\ttoken = dataView.getBigUint64(position)\n\t\t\t\tposition += 8\n\t\t\t\tbreak\n\t\t\tcase 0x1f: \n\t\t\t\t// indefinite length\n\t\t\t\tswitch(majorType) {\n\t\t\t\t\tcase 2: // byte string\n\t\t\t\t\tcase 3: // text string\n\t\t\t\t\t\tthrow new Error('Indefinite length not supported for byte or text strings')\n\t\t\t\t\tcase 4: // array\n\t\t\t\t\t\tlet array = []\n\t\t\t\t\t\tlet value, i = 0\n\t\t\t\t\t\twhile ((value = read()) != STOP_CODE) {\n\t\t\t\t\t\t\tif (i >= maxArraySize) throw new Error(`Array length exceeds ${maxArraySize}`)\n\t\t\t\t\t\t\tarray[i++] = value\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn majorType == 4 ? array : majorType == 3 ? array.join('') : Buffer.concat(array)\n\t\t\t\t\tcase 5: // map\n\t\t\t\t\t\tlet key\n\t\t\t\t\t\tif (currentDecoder.mapsAsObjects) {\n\t\t\t\t\t\t\tlet object = {}\n\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\tif (currentDecoder.keyMap) {\n\t\t\t\t\t\t\t\twhile((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) throw new Error(`Property count exceeds ${maxMapSize}`)\n\t\t\t\t\t\t\t\t\tobject[safeKey(currentDecoder.decodeKey(key))] = read()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\twhile ((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) throw new Error(`Property count exceeds ${maxMapSize}`)\n\t\t\t\t\t\t\t\t\tobject[safeKey(key)] = read()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn object\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (restoreMapsAsObject) {\n\t\t\t\t\t\t\t\tcurrentDecoder.mapsAsObjects = true\n\t\t\t\t\t\t\t\trestoreMapsAsObject = false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet map = new Map()\n\t\t\t\t\t\t\tif (currentDecoder.keyMap) {\n\t\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\t\twhile((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(`Map size exceeds ${maxMapSize}`);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tmap.set(currentDecoder.decodeKey(key), read())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\t\twhile ((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(`Map size exceeds ${maxMapSize}`);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tmap.set(key, read())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn map\n\t\t\t\t\t\t}\n\t\t\t\t\tcase 7:\n\t\t\t\t\t\treturn STOP_CODE\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error('Invalid major type for indefinite length ' + majorType)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Unknown token ' + token)\n\t\t}\n\t}\n\tswitch (majorType) {\n\t\tcase 0: // positive int\n\t\t\treturn token\n\t\tcase 1: // negative int\n\t\t\treturn ~token\n\t\tcase 2: // buffer\n\t\t\treturn readBin(token)\n\t\tcase 3: // string\n\t\t\tif (srcStringEnd >= position) {\n\t\t\t\treturn srcString.slice(position - srcStringStart, (position += token) - srcStringStart)\n\t\t\t}\n\t\t\tif (srcStringEnd == 0 && srcEnd < 140 && token < 32) {\n\t\t\t\t// for small blocks, avoiding the overhead of the extract call is helpful\n\t\t\t\tlet string = token < 16 ? shortStringInJS(token) : longStringInJS(token)\n\t\t\t\tif (string != null)\n\t\t\t\t\treturn string\n\t\t\t}\n\t\t\treturn readFixedString(token)\n\t\tcase 4: // array\n\t\t\tif (token >= maxArraySize) throw new Error(`Array length exceeds ${maxArraySize}`)\n\t\t\tlet array = new Array(token)\n\t\t //if (currentDecoder.keyMap) for (let i = 0; i < token; i++) array[i] = currentDecoder.decodeKey(read())\t\n\t\t\t//else \n\t\t\tfor (let i = 0; i < token; i++) array[i] = read()\n\t\t\treturn array\n\t\tcase 5: // map\n\t\t\tif (token >= maxMapSize) throw new Error(`Map size exceeds ${maxArraySize}`)\n\t\t\tif (currentDecoder.mapsAsObjects) {\n\t\t\t\tlet object = {}\n\t\t\t\tif (currentDecoder.keyMap) for (let i = 0; i < token; i++) object[safeKey(currentDecoder.decodeKey(read()))] = read()\n\t\t\t\telse for (let i = 0; i < token; i++) object[safeKey(read())] = read()\n\t\t\t\treturn object\n\t\t\t} else {\n\t\t\t\tif (restoreMapsAsObject) {\n\t\t\t\t\tcurrentDecoder.mapsAsObjects = true\n\t\t\t\t\trestoreMapsAsObject = false\n\t\t\t\t}\n\t\t\t\tlet map = new Map()\n\t\t\t\tif (currentDecoder.keyMap) for (let i = 0; i < token; i++) map.set(currentDecoder.decodeKey(read()),read())\n\t\t\t\telse for (let i = 0; i < token; i++) map.set(read(), read())\n\t\t\t\treturn map\n\t\t\t}\n\t\tcase 6: // extension\n\t\t\tif (token >= BUNDLED_STRINGS_ID) {\n\t\t\t\tlet structure = currentStructures[token & 0x1fff] // check record structures first\n\t\t\t\t// At some point we may provide an option for dynamic tag assignment with a range like token >= 8 && (token < 16 || (token > 0x80 && token < 0xc0) || (token > 0x130 && token < 0x4000))\n\t\t\t\tif (structure) {\n\t\t\t\t\tif (!structure.read) structure.read = createStructureReader(structure)\n\t\t\t\t\treturn structure.read()\n\t\t\t\t}\n\t\t\t\tif (token < 0x10000) {\n\t\t\t\t\tif (token == RECORD_INLINE_ID) { // we do a special check for this so that we can keep the\n\t\t\t\t\t\t// currentExtensions as densely stored array (v8 stores arrays densely under about 3000 elements)\n\t\t\t\t\t\tlet length = readJustLength()\n\t\t\t\t\t\tlet id = read()\n\t\t\t\t\t\tlet structure = read()\n\t\t\t\t\t\trecordDefinition(id, structure)\n\t\t\t\t\t\tlet object = {}\n\t\t\t\t\t\tif (currentDecoder.keyMap) for (let i = 2; i < length; i++) {\n\t\t\t\t\t\t\tlet key = currentDecoder.decodeKey(structure[i - 2])\n\t\t\t\t\t\t\tobject[safeKey(key)] = read()\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse for (let i = 2; i < length; i++) {\n\t\t\t\t\t\t\tlet key = structure[i - 2]\n\t\t\t\t\t\t\tobject[safeKey(key)] = read()\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn object\n\t\t\t\t\t}\n\t\t\t\t\telse if (token == RECORD_DEFINITIONS_ID) {\n\t\t\t\t\t\tlet length = readJustLength()\n\t\t\t\t\t\tlet id = read()\n\t\t\t\t\t\tfor (let i = 2; i < length; i++) {\n\t\t\t\t\t\t\trecordDefinition(id++, read())\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn read()\n\t\t\t\t\t} else if (token == BUNDLED_STRINGS_ID) {\n\t\t\t\t\t\treturn readBundleExt()\n\t\t\t\t\t}\n\t\t\t\t\tif (currentDecoder.getShared) {\n\t\t\t\t\t\tloadShared()\n\t\t\t\t\t\tstructure = currentStructures[token & 0x1fff]\n\t\t\t\t\t\tif (structure) {\n\t\t\t\t\t\t\tif (!structure.read)\n\t\t\t\t\t\t\t\tstructure.read = createStructureReader(structure)\n\t\t\t\t\t\t\treturn structure.read()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet extension = currentExtensions[token]\n\t\t\tif (extension) {\n\t\t\t\tif (extension.handlesRead)\n\t\t\t\t\treturn extension(read)\n\t\t\t\telse\n\t\t\t\t\treturn extension(read())\n\t\t\t} else {\n\t\t\t\tlet input = read()\n\t\t\t\tfor (let i = 0; i < currentExtensionRanges.length; i++) {\n\t\t\t\t\tlet value = currentExtensionRanges[i](token, input)\n\t\t\t\t\tif (value !== undefined)\n\t\t\t\t\t\treturn value\n\t\t\t\t}\n\t\t\t\treturn new Tag(input, token)\n\t\t\t}\n\t\tcase 7: // fixed value\n\t\t\tswitch (token) {\n\t\t\t\tcase 0x14: return false\n\t\t\t\tcase 0x15: return true\n\t\t\t\tcase 0x16: return null\n\t\t\t\tcase 0x17: return; // undefined\n\t\t\t\tcase 0x1f:\n\t\t\t\tdefault:\n\t\t\t\t\tlet packedValue = (packedValues || getPackedValues())[token]\n\t\t\t\t\tif (packedValue !== undefined)\n\t\t\t\t\t\treturn packedValue\n\t\t\t\t\tthrow new Error('Unknown token ' + token)\n\t\t\t}\n\t\tdefault: // negative int\n\t\t\tif (isNaN(token)) {\n\t\t\t\tlet error = new Error('Unexpected end of CBOR data')\n\t\t\t\terror.incomplete = true\n\t\t\t\tthrow error\n\t\t\t}\n\t\t\tthrow new Error('Unknown CBOR token ' + token)\n\t}\n}\nconst validName = /^[a-zA-Z_$][a-zA-Z\\d_$]*$/\nfunction createStructureReader(structure) {\n\tif (!structure) throw new Error('Structure is required in record definition');\n\tfunction readObject() {\n\t\t// get the array size from the header\n\t\tlet length = src[position++]\n\t\t//let majorType = token >> 5\n\t\tlength = length & 0x1f\n\t\tif (length > 0x17) {\n\t\t\tswitch (length) {\n\t\t\t\tcase 0x18:\n\t\t\t\t\tlength = src[position++]\n\t\t\t\t\tbreak\n\t\t\t\tcase 0x19:\n\t\t\t\t\tlength = dataView.getUint16(position)\n\t\t\t\t\tposition += 2\n\t\t\t\t\tbreak\n\t\t\t\tcase 0x1a:\n\t\t\t\t\tlength = dataView.getUint32(position)\n\t\t\t\t\tposition += 4\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('Expected array header, but got ' + src[position - 1])\n\t\t\t}\n\t\t}\n\t\t// This initial function is quick to instantiate, but runs slower. After several iterations pay the cost to build the faster function\n\t\tlet compiledReader = this.compiledReader // first look to see if we have the fast compiled function\n\t\twhile(compiledReader) {\n\t\t\t// we have a fast compiled object literal reader\n\t\t\tif (compiledReader.propertyCount === length)\n\t\t\t\treturn compiledReader(read) // with the right length, so we use it\n\t\t\tcompiledReader = compiledReader.next // see if there is another reader with the right length\n\t\t}\n\t\tif (this.slowReads++ >= inlineObjectReadThreshold) { // create a fast compiled reader\n\t\t\tlet array = this.length == length ? this : this.slice(0, length)\n\t\t\tcompiledReader = currentDecoder.keyMap \n\t\t\t? new Function('r', 'return {' + array.map(k => currentDecoder.decodeKey(k)).map(k => validName.test(k) ? safeKey(k) + ':r()' : ('[' + JSON.stringify(k) + ']:r()')).join(',') + '}')\n\t\t\t: new Function('r', 'return {' + array.map(key => validName.test(key) ? safeKey(key) + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '}')\n\t\t\tif (this.compiledReader)\n\t\t\t\tcompiledReader.next = this.compiledReader // if there is an existing one, we store multiple readers as a linked list because it is usually pretty rare to have multiple readers (of different length) for the same structure\n\t\t\tcompiledReader.propertyCount = length\n\t\t\tthis.compiledReader = compiledReader\n\t\t\treturn compiledReader(read)\n\t\t}\n\t\tlet object = {}\n\t\tif (currentDecoder.keyMap) for (let i = 0; i < length; i++) object[safeKey(currentDecoder.decodeKey(this[i]))] = read()\n\t\telse for (let i = 0; i < length; i++) {\n\t\t\tobject[safeKey(this[i])] = read();\n\t\t}\n\t\treturn object\n\t}\n\tstructure.slowReads = 0\n\treturn readObject\n}\n\nfunction safeKey(key) {\n\t// protect against prototype pollution\n\tif (typeof key === 'string') return key === '__proto__' ? '__proto_' : key\n\tif (typeof key === 'number' || typeof key === 'boolean' || typeof key === 'bigint') return key.toString();\n\tif (key == null) return key + '';\n\t// protect against expensive (DoS) string conversions\n\tthrow new Error('Invalid property name type ' + typeof key);\n}\n\nlet readFixedString = readStringJS\nlet readString8 = readStringJS\nlet readString16 = readStringJS\nlet readString32 = readStringJS\n\nexport let isNativeAccelerationEnabled = false\nexport function setExtractor(extractStrings) {\n\tisNativeAccelerationEnabled = true\n\treadFixedString = readString(1)\n\treadString8 = readString(2)\n\treadString16 = readString(3)\n\treadString32 = readString(5)\n\tfunction readString(headerLength) {\n\t\treturn function readString(length) {\n\t\t\tlet string = strings[stringPosition++]\n\t\t\tif (string == null) {\n\t\t\t\tif (bundledStrings)\n\t\t\t\t\treturn readStringJS(length)\n\t\t\t\tlet extraction = extractStrings(position, srcEnd, length, src)\n\t\t\t\tif (typeof extraction == 'string') {\n\t\t\t\t\tstring = extraction\n\t\t\t\t\tstrings = EMPTY_ARRAY\n\t\t\t\t} else {\n\t\t\t\t\tstrings = extraction\n\t\t\t\t\tstringPosition = 1\n\t\t\t\t\tsrcStringEnd = 1 // even if a utf-8 string was decoded, must indicate we are in the midst of extracted strings and can't skip strings\n\t\t\t\t\tstring = strings[0]\n\t\t\t\t\tif (string === undefined)\n\t\t\t\t\t\tthrow new Error('Unexpected end of buffer')\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet srcStringLength = string.length\n\t\t\tif (srcStringLength <= length) {\n\t\t\t\tposition += length\n\t\t\t\treturn string\n\t\t\t}\n\t\t\tsrcString = string\n\t\t\tsrcStringStart = position\n\t\t\tsrcStringEnd = position + srcStringLength\n\t\t\tposition += length\n\t\t\treturn string.slice(0, length) // we know we just want the beginning\n\t\t}\n\t}\n}\nfunction readStringJS(length) {\n\tlet result\n\tif (length < 16) {\n\t\tif (result = shortStringInJS(length))\n\t\t\treturn result\n\t}\n\tif (length > 64 && decoder)\n\t\treturn decoder.decode(src.subarray(position, position += length))\n\tconst end = position + length\n\tconst units = []\n\tresult = ''\n\twhile (position < end) {\n\t\tconst byte1 = src[position++]\n\t\tif ((byte1 & 0x80) === 0) {\n\t\t\t// 1 byte\n\t\t\tunits.push(byte1)\n\t\t} else if ((byte1 & 0xe0) === 0xc0) {\n\t\t\t// 2 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tunits.push(((byte1 & 0x1f) << 6) | byte2)\n\t\t} else if ((byte1 & 0xf0) === 0xe0) {\n\t\t\t// 3 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tconst byte3 = src[position++] & 0x3f\n\t\t\tunits.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3)\n\t\t} else if ((byte1 & 0xf8) === 0xf0) {\n\t\t\t// 4 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tconst byte3 = src[position++] & 0x3f\n\t\t\tconst byte4 = src[position++] & 0x3f\n\t\t\tlet unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4\n\t\t\tif (unit > 0xffff) {\n\t\t\t\tunit -= 0x10000\n\t\t\t\tunits.push(((unit >>> 10) & 0x3ff) | 0xd800)\n\t\t\t\tunit = 0xdc00 | (unit & 0x3ff)\n\t\t\t}\n\t\t\tunits.push(unit)\n\t\t} else {\n\t\t\tunits.push(byte1)\n\t\t}\n\n\t\tif (units.length >= 0x1000) {\n\t\t\tresult += fromCharCode.apply(String, units)\n\t\t\tunits.length = 0\n\t\t}\n\t}\n\n\tif (units.length > 0) {\n\t\tresult += fromCharCode.apply(String, units)\n\t}\n\n\treturn result\n}\nlet fromCharCode = String.fromCharCode\nfunction longStringInJS(length) {\n\tlet start = position\n\tlet bytes = new Array(length)\n\tfor (let i = 0; i < length; i++) {\n\t\tconst byte = src[position++];\n\t\tif ((byte & 0x80) > 0) {\n\t\t\tposition = start\n \t\t\treturn\n \t\t}\n \t\tbytes[i] = byte\n \t}\n \treturn fromCharCode.apply(String, bytes)\n}\nfunction shortStringInJS(length) {\n\tif (length < 4) {\n\t\tif (length < 2) {\n\t\t\tif (length === 0)\n\t\t\t\treturn ''\n\t\t\telse {\n\t\t\t\tlet a = src[position++]\n\t\t\t\tif ((a & 0x80) > 1) {\n\t\t\t\t\tposition -= 1\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a)\n\t\t\t}\n\t\t} else {\n\t\t\tlet a = src[position++]\n\t\t\tlet b = src[position++]\n\t\t\tif ((a & 0x80) > 0 || (b & 0x80) > 0) {\n\t\t\t\tposition -= 2\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 3)\n\t\t\t\treturn fromCharCode(a, b)\n\t\t\tlet c = src[position++]\n\t\t\tif ((c & 0x80) > 0) {\n\t\t\t\tposition -= 3\n\t\t\t\treturn\n\t\t\t}\n\t\t\treturn fromCharCode(a, b, c)\n\t\t}\n\t} else {\n\t\tlet a = src[position++]\n\t\tlet b = src[position++]\n\t\tlet c = src[position++]\n\t\tlet d = src[position++]\n\t\tif ((a & 0x80) > 0 || (b & 0x80) > 0 || (c & 0x80) > 0 || (d & 0x80) > 0) {\n\t\t\tposition -= 4\n\t\t\treturn\n\t\t}\n\t\tif (length < 6) {\n\t\t\tif (length === 4)\n\t\t\t\treturn fromCharCode(a, b, c, d)\n\t\t\telse {\n\t\t\t\tlet e = src[position++]\n\t\t\t\tif ((e & 0x80) > 0) {\n\t\t\t\t\tposition -= 5\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a, b, c, d, e)\n\t\t\t}\n\t\t} else if (length < 8) {\n\t\t\tlet e = src[position++]\n\t\t\tlet f = src[position++]\n\t\t\tif ((e & 0x80) > 0 || (f & 0x80) > 0) {\n\t\t\t\tposition -= 6\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 7)\n\t\t\t\treturn fromCharCode(a, b, c, d, e, f)\n\t\t\tlet g = src[position++]\n\t\t\tif ((g & 0x80) > 0) {\n\t\t\t\tposition -= 7\n\t\t\t\treturn\n\t\t\t}\n\t\t\treturn fromCharCode(a, b, c, d, e, f, g)\n\t\t} else {\n\t\t\tlet e = src[position++]\n\t\t\tlet f = src[position++]\n\t\t\tlet g = src[position++]\n\t\t\tlet h = src[position++]\n\t\t\tif ((e & 0x80) > 0 || (f & 0x80) > 0 || (g & 0x80) > 0 || (h & 0x80) > 0) {\n\t\t\t\tposition -= 8\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 10) {\n\t\t\t\tif (length === 8)\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h)\n\t\t\t\telse {\n\t\t\t\t\tlet i = src[position++]\n\t\t\t\t\tif ((i & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 9\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i)\n\t\t\t\t}\n\t\t\t} else if (length < 12) {\n\t\t\t\tlet i = src[position++]\n\t\t\t\tlet j = src[position++]\n\t\t\t\tif ((i & 0x80) > 0 || (j & 0x80) > 0) {\n\t\t\t\t\tposition -= 10\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (length < 11)\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j)\n\t\t\t\tlet k = src[position++]\n\t\t\t\tif ((k & 0x80) > 0) {\n\t\t\t\t\tposition -= 11\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k)\n\t\t\t} else {\n\t\t\t\tlet i = src[position++]\n\t\t\t\tlet j = src[position++]\n\t\t\t\tlet k = src[position++]\n\t\t\t\tlet l = src[position++]\n\t\t\t\tif ((i & 0x80) > 0 || (j & 0x80) > 0 || (k & 0x80) > 0 || (l & 0x80) > 0) {\n\t\t\t\t\tposition -= 12\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (length < 14) {\n\t\t\t\t\tif (length === 12)\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l)\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet m = src[position++]\n\t\t\t\t\t\tif ((m & 0x80) > 0) {\n\t\t\t\t\t\t\tposition -= 13\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet m = src[position++]\n\t\t\t\t\tlet n = src[position++]\n\t\t\t\t\tif ((m & 0x80) > 0 || (n & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 14\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tif (length < 15)\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n)\n\t\t\t\t\tlet o = src[position++]\n\t\t\t\t\tif ((o & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 15\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction readBin(length) {\n\treturn currentDecoder.copyBuffers ?\n\t\t// specifically use the copying slice (not the node one)\n\t\tUint8Array.prototype.slice.call(src, position, position += length) :\n\t\tsrc.subarray(position, position += length)\n}\nfunction readExt(length) {\n\tlet type = src[position++]\n\tif (currentExtensions[type]) {\n\t\treturn currentExtensions[type](src.subarray(position, position += length))\n\t}\n\telse\n\t\tthrow new Error('Unknown extension type ' + type)\n}\nlet f32Array = new Float32Array(1)\nlet u8Array = new Uint8Array(f32Array.buffer, 0, 4)\nfunction getFloat16() {\n\tlet byte0 = src[position++]\n\tlet byte1 = src[position++]\n\tlet exponent = (byte0 & 0x7f) >> 2;\n\tif (exponent === 0x1f) { // specials\n\t\tif (byte1 || (byte0 & 3))\n\t\t\treturn NaN;\n\t\treturn (byte0 & 0x80) ? -Infinity : Infinity;\n\t}\n\tif (exponent === 0) { // sub-normals\n\t\t// significand with 10 fractional bits and divided by 2^14\n\t\tlet abs = (((byte0 & 3) << 8) | byte1) / (1 << 24)\n\t\treturn (byte0 & 0x80) ? -abs : abs\n\t}\n\n\tu8Array[3] = (byte0 & 0x80) | // sign bit\n\t\t((exponent >> 1) + 56) // 4 of 5 of the exponent bits, re-offset-ed\n\tu8Array[2] = ((byte0 & 7) << 5) | // last exponent bit and first two mantissa bits\n\t\t(byte1 >> 3) // next 5 bits of mantissa\n\tu8Array[1] = byte1 << 5; // last three bits of mantissa\n\tu8Array[0] = 0;\n\treturn f32Array[0];\n}\n\nlet keyCache = new Array(4096)\nfunction readKey() {\n\tlet length = src[position++]\n\tif (length >= 0x60 && length < 0x78) {\n\t\t// fixstr, potentially use key cache\n\t\tlength = length - 0x60\n\t\tif (srcStringEnd >= position) // if it has been extracted, must use it (and faster anyway)\n\t\t\treturn srcString.slice(position - srcStringStart, (position += length) - srcStringStart)\n\t\telse if (!(srcStringEnd == 0 && srcEnd < 180))\n\t\t\treturn readFixedString(length)\n\t} else { // not cacheable, go back and do a standard read\n\t\tposition--\n\t\treturn read()\n\t}\n\tlet key = ((length << 5) ^ (length > 1 ? dataView.getUint16(position) : length > 0 ? src[position] : 0)) & 0xfff\n\tlet entry = keyCache[key]\n\tlet checkPosition = position\n\tlet end = position + length - 3\n\tlet chunk\n\tlet i = 0\n\tif (entry && entry.bytes == length) {\n\t\twhile (checkPosition < end) {\n\t\t\tchunk = dataView.getUint32(checkPosition)\n\t\t\tif (chunk != entry[i++]) {\n\t\t\t\tcheckPosition = 0x70000000\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcheckPosition += 4\n\t\t}\n\t\tend += 3\n\t\twhile (checkPosition < end) {\n\t\t\tchunk = src[checkPosition++]\n\t\t\tif (chunk != entry[i++]) {\n\t\t\t\tcheckPosition = 0x70000000\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (checkPosition === end) {\n\t\t\tposition = checkPosition\n\t\t\treturn entry.string\n\t\t}\n\t\tend -= 3\n\t\tcheckPosition = position\n\t}\n\tentry = []\n\tkeyCache[key] = entry\n\tentry.bytes = length\n\twhile (checkPosition < end) {\n\t\tchunk = dataView.getUint32(checkPosition)\n\t\tentry.push(chunk)\n\t\tcheckPosition += 4\n\t}\n\tend += 3\n\twhile (checkPosition < end) {\n\t\tchunk = src[checkPosition++]\n\t\tentry.push(chunk)\n\t}\n\t// for small blocks, avoiding the overhead of the extract call is helpful\n\tlet string = length < 16 ? shortStringInJS(length) : longStringInJS(length)\n\tif (string != null)\n\t\treturn entry.string = string\n\treturn entry.string = readFixedString(length)\n}\n\nexport class Tag {\n\tconstructor(value, tag) {\n\t\tthis.value = value\n\t\tthis.tag = tag\n\t}\n}\n\ncurrentExtensions[0] = (dateString) => {\n\t// string date extension\n\treturn new Date(dateString)\n}\n\ncurrentExtensions[1] = (epochSec) => {\n\t// numeric date extension\n\treturn new Date(Math.round(epochSec * 1000))\n}\n\ncurrentExtensions[2] = (buffer) => {\n\t// bigint extension\n\tlet value = BigInt(0)\n\tfor (let i = 0, l = buffer.byteLength; i < l; i++) {\n\t\tvalue = BigInt(buffer[i]) + (value << BigInt(8))\n\t}\n\treturn value\n}\n\ncurrentExtensions[3] = (buffer) => {\n\t// negative bigint extension\n\treturn BigInt(-1) - currentExtensions[2](buffer)\n}\ncurrentExtensions[4] = (fraction) => {\n\t// best to reparse to maintain accuracy\n\treturn +(fraction[1] + 'e' + fraction[0])\n}\n\ncurrentExtensions[5] = (fraction) => {\n\t// probably not sufficiently accurate\n\treturn fraction[1] * Math.exp(fraction[0] * Math.log(2))\n}\n\n// the registration of the record definition extension\nconst recordDefinition = (id, structure) => {\n\tid = id - 0xe000\n\tlet existingStructure = currentStructures[id]\n\tif (existingStructure && existingStructure.isShared) {\n\t\t(currentStructures.restoreStructures || (currentStructures.restoreStructures = []))[id] = existingStructure\n\t}\n\tcurrentStructures[id] = structure\n\n\tstructure.read = createStructureReader(structure)\n}\ncurrentExtensions[LEGACY_RECORD_INLINE_ID] = (data) => {\n\tlet length = data.length\n\tlet structure = data[1]\n\trecordDefinition(data[0], structure)\n\tlet object = {}\n\tfor (let i = 2; i < length; i++) {\n\t\tlet key = structure[i - 2]\n\t\tobject[safeKey(key)] = data[i]\n\t}\n\treturn object\n}\ncurrentExtensions[14] = (value) => {\n\tif (bundledStrings)\n\t\treturn bundledStrings[0].slice(bundledStrings.position0, bundledStrings.position0 += value)\n\treturn new Tag(value, 14)\n}\ncurrentExtensions[15] = (value) => {\n\tif (bundledStrings)\n\t\treturn bundledStrings[1].slice(bundledStrings.position1, bundledStrings.position1 += value)\n\treturn new Tag(value, 15)\n}\nlet glbl = { Error, RegExp }\ncurrentExtensions[27] = (data) => { // http://cbor.schmorp.de/generic-object\n\treturn (glbl[data[0]] || Error)(data[1], data[2])\n}\nconst packedTable = (read) => {\n\tif (src[position++] != 0x84) {\n\t\tlet error = new Error('Packed values structure must be followed by a 4 element array')\n\t\tif (src.length < position)\n\t\t\terror.incomplete = true\n\t\tthrow error\n\t}\n\tlet newPackedValues = read() // packed values\n\tif (!newPackedValues || !newPackedValues.length) {\n\t\tlet error = new Error('Packed values structure must be followed by a 4 element array')\n\t\terror.incomplete = true\n\t\tthrow error\n\t}\n\tpackedValues = packedValues ? newPackedValues.concat(packedValues.slice(newPackedValues.length)) : newPackedValues\n\tpackedValues.prefixes = read()\n\tpackedValues.suffixes = read()\n\treturn read() // read the rump\n}\npackedTable.handlesRead = true\ncurrentExtensions[51] = packedTable\n\ncurrentExtensions[PACKED_REFERENCE_TAG_ID] = (data) => { // packed reference\n\tif (!packedValues) {\n\t\tif (currentDecoder.getShared)\n\t\t\tloadShared()\n\t\telse\n\t\t\treturn new Tag(data, PACKED_REFERENCE_TAG_ID)\n\t}\n\tif (typeof data == 'number')\n\t\treturn packedValues[16 + (data >= 0 ? 2 * data : (-2 * data - 1))]\n\tlet error = new Error('No support for non-integer packed references yet')\n\tif (data === undefined)\n\t\terror.incomplete = true\n\tthrow error\n}\n\n// The following code is an incomplete implementation of http://cbor.schmorp.de/stringref\n// the real thing would need to implemennt more logic to populate the stringRefs table and\n// maintain a stack of stringRef \"namespaces\".\n//\n// currentExtensions[25] = (id) => {\n// \treturn stringRefs[id]\n// }\n// currentExtensions[256] = (read) => {\n// \tstringRefs = []\n// \ttry {\n// \t\treturn read()\n// \t} finally {\n// \t\tstringRefs = null\n// \t}\n// }\n// currentExtensions[256].handlesRead = true\n\ncurrentExtensions[28] = (read) => { \n\t// shareable http://cbor.schmorp.de/value-sharing (for structured clones)\n\tif (!referenceMap) {\n\t\treferenceMap = new Map()\n\t\treferenceMap.id = 0\n\t}\n\tlet id = referenceMap.id++\n\tlet startingPosition = position\n\tlet token = src[position]\n\tlet target\n\t// TODO: handle Maps, Sets, and other types that can cycle; this is complicated, because you potentially need to read\n\t// ahead past references to record structure definitions\n\tif ((token >> 5) == 4)\n\t\ttarget = []\n\telse\n\t\ttarget = {}\n\n\tlet refEntry = { target } // a placeholder object\n\treferenceMap.set(id, refEntry)\n\tlet targetProperties = read() // read the next value as the target object to id\n\tif (refEntry.used) {// there is a cycle, so we have to assign properties to original target\n\t\tif (Object.getPrototypeOf(target) !== Object.getPrototypeOf(targetProperties)) {\n\t\t\t// this means that the returned target does not match the targetProperties, so we need rerun the read to\n\t\t\t// have the correctly create instance be assigned as a reference, then we do the copy the properties back to the\n\t\t\t// target\n\t\t\t// reset the position so that the read can be repeated\n\t\t\tposition = startingPosition\n\t\t\t// the returned instance is our new target for references\n\t\t\ttarget = targetProperties\n\t\t\treferenceMap.set(id, { target })\n\t\t\ttargetProperties = read()\n\t\t}\n\t\treturn Object.assign(target, targetProperties)\n\t}\n\trefEntry.target = targetProperties // the placeholder wasn't used, replace with the deserialized one\n\treturn targetProperties // no cycle, can just use the returned read object\n}\ncurrentExtensions[28].handlesRead = true\n\ncurrentExtensions[29] = (id) => {\n\t// sharedref http://cbor.schmorp.de/value-sharing (for structured clones)\n\tlet refEntry = referenceMap.get(id)\n\trefEntry.used = true\n\treturn refEntry.target\n}\n\ncurrentExtensions[258] = (array) => new Set(array); // https://github.com/input-output-hk/cbor-sets-spec/blob/master/CBOR_SETS.md\n(currentExtensions[259] = (read) => {\n\t// https://github.com/shanewholloway/js-cbor-codec/blob/master/docs/CBOR-259-spec\n\t// for decoding as a standard Map\n\tif (currentDecoder.mapsAsObjects) {\n\t\tcurrentDecoder.mapsAsObjects = false\n\t\trestoreMapsAsObject = true\n\t}\n\treturn read()\n}).handlesRead = true\nfunction combine(a, b) {\n\tif (typeof a === 'string')\n\t\treturn a + b\n\tif (a instanceof Array)\n\t\treturn a.concat(b)\n\treturn Object.assign({}, a, b)\n}\nfunction getPackedValues() {\n\tif (!packedValues) {\n\t\tif (currentDecoder.getShared)\n\t\t\tloadShared()\n\t\telse\n\t\t\tthrow new Error('No packed values available')\n\t}\n\treturn packedValues\n}\nconst SHARED_DATA_TAG_ID = 0x53687264 // ascii 'Shrd'\ncurrentExtensionRanges.push((tag, input) => {\n\tif (tag >= 225 && tag <= 255)\n\t\treturn combine(getPackedValues().prefixes[tag - 224], input)\n\tif (tag >= 28704 && tag <= 32767)\n\t\treturn combine(getPackedValues().prefixes[tag - 28672], input)\n\tif (tag >= 1879052288 && tag <= 2147483647)\n\t\treturn combine(getPackedValues().prefixes[tag - 1879048192], input)\n\tif (tag >= 216 && tag <= 223)\n\t\treturn combine(input, getPackedValues().suffixes[tag - 216])\n\tif (tag >= 27647 && tag <= 28671)\n\t\treturn combine(input, getPackedValues().suffixes[tag - 27639])\n\tif (tag >= 1811940352 && tag <= 1879048191)\n\t\treturn combine(input, getPackedValues().suffixes[tag - 1811939328])\n\tif (tag == SHARED_DATA_TAG_ID) {// we do a special check for this so that we can keep the currentExtensions as densely stored array (v8 stores arrays densely under about 3000 elements)\n\t\treturn {\n\t\t\tpackedValues: packedValues,\n\t\t\tstructures: currentStructures.slice(0),\n\t\t\tversion: input,\n\t\t}\n\t}\n\tif (tag == 55799) // self-descriptive CBOR tag, just return input value\n\t\treturn input\n})\n\nconst isLittleEndianMachine = new Uint8Array(new Uint16Array([1]).buffer)[0] == 1\nexport const typedArrays = [Uint8Array, Uint8ClampedArray, Uint16Array, Uint32Array,\n\ttypeof BigUint64Array == 'undefined' ? { name:'BigUint64Array' } : BigUint64Array, Int8Array, Int16Array, Int32Array,\n\ttypeof BigInt64Array == 'undefined' ? { name:'BigInt64Array' } : BigInt64Array, Float32Array, Float64Array]\nconst typedArrayTags = [64, 68, 69, 70, 71, 72, 77, 78, 79, 85, 86]\nfor (let i = 0; i < typedArrays.length; i++) {\n\tregisterTypedArray(typedArrays[i], typedArrayTags[i])\n}\nfunction registerTypedArray(TypedArray, tag) {\n\tlet dvMethod = 'get' + TypedArray.name.slice(0, -5)\n\tlet bytesPerElement;\n\tif (typeof TypedArray === 'function')\n\t\tbytesPerElement = TypedArray.BYTES_PER_ELEMENT;\n\telse\n\t\tTypedArray = null;\n\tfor (let littleEndian = 0; littleEndian < 2; littleEndian++) {\n\t\tif (!littleEndian && bytesPerElement == 1)\n\t\t\tcontinue\n\t\tlet sizeShift = bytesPerElement == 2 ? 1 : bytesPerElement == 4 ? 2 : bytesPerElement == 8 ? 3 : 0\n\t\tcurrentExtensions[littleEndian ? tag : (tag - 4)] = (bytesPerElement == 1 || littleEndian == isLittleEndianMachine) ? (buffer) => {\n\t\t\tif (!TypedArray)\n\t\t\t\tthrow new Error('Could not find typed array for code ' + tag)\n\t\t\tif (!currentDecoder.copyBuffers) {\n\t\t\t\t// try provide a direct view, but will only work if we are byte-aligned\n\t\t\t\tif (bytesPerElement === 1 ||\n\t\t\t\t\tbytesPerElement === 2 && !(buffer.byteOffset & 1) ||\n\t\t\t\t\tbytesPerElement === 4 && !(buffer.byteOffset & 3) ||\n\t\t\t\t\tbytesPerElement === 8 && !(buffer.byteOffset & 7))\n\t\t\t\t\treturn new TypedArray(buffer.buffer, buffer.byteOffset, buffer.byteLength >> sizeShift);\n\t\t\t}\n\t\t\t// we have to slice/copy here to get a new ArrayBuffer, if we are not word/byte aligned\n\t\t\treturn new TypedArray(Uint8Array.prototype.slice.call(buffer, 0).buffer)\n\t\t} : buffer => {\n\t\t\tif (!TypedArray)\n\t\t\t\tthrow new Error('Could not find typed array for code ' + tag)\n\t\t\tlet dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n\t\t\tlet elements = buffer.length >> sizeShift\n\t\t\tlet ta = new TypedArray(elements)\n\t\t\tlet method = dv[dvMethod]\n\t\t\tfor (let i = 0; i < elements; i++) {\n\t\t\t\tta[i] = method.call(dv, i << sizeShift, littleEndian)\n\t\t\t}\n\t\t\treturn ta\n\t\t}\n\t}\n}\n\nfunction readBundleExt() {\n\tlet length = readJustLength()\n\tlet bundlePosition = position + read()\n\tfor (let i = 2; i < length; i++) {\n\t\t// skip past bundles that were already read\n\t\tlet bundleLength = readJustLength() // this will increment position, so must add to position afterwards\n\t\tposition += bundleLength\n\t}\n\tlet dataPosition = position\n\tposition = bundlePosition\n\tbundledStrings = [readStringJS(readJustLength()), readStringJS(readJustLength())]\n\tbundledStrings.position0 = 0\n\tbundledStrings.position1 = 0\n\tbundledStrings.postBundlePosition = position\n\tposition = dataPosition\n\treturn read()\n}\n\nfunction readJustLength() {\n\tlet token = src[position++] & 0x1f\n\tif (token > 0x17) {\n\t\tswitch (token) {\n\t\t\tcase 0x18:\n\t\t\t\ttoken = src[position++]\n\t\t\t\tbreak\n\t\t\tcase 0x19:\n\t\t\t\ttoken = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\tbreak\n\t\t\tcase 0x1a:\n\t\t\t\ttoken = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\tbreak\n\t\t}\n\t}\n\treturn token\n}\n\nfunction loadShared() {\n\tif (currentDecoder.getShared) {\n\t\tlet sharedData = saveState(() => {\n\t\t\t// save the state in case getShared modifies our buffer\n\t\t\tsrc = null\n\t\t\treturn currentDecoder.getShared()\n\t\t}) || {}\n\t\tlet updatedStructures = sharedData.structures || []\n\t\tcurrentDecoder.sharedVersion = sharedData.version\n\t\tpackedValues = currentDecoder.sharedValues = sharedData.packedValues\n\t\tif (currentStructures === true)\n\t\t\tcurrentDecoder.structures = currentStructures = updatedStructures\n\t\telse\n\t\t\tcurrentStructures.splice.apply(currentStructures, [0, updatedStructures.length].concat(updatedStructures))\n\t}\n}\n\nfunction saveState(callback) {\n\tlet savedSrcEnd = srcEnd\n\tlet savedPosition = position\n\tlet savedStringPosition = stringPosition\n\tlet savedSrcStringStart = srcStringStart\n\tlet savedSrcStringEnd = srcStringEnd\n\tlet savedSrcString = srcString\n\tlet savedStrings = strings\n\tlet savedReferenceMap = referenceMap\n\tlet savedBundledStrings = bundledStrings\n\n\t// TODO: We may need to revisit this if we do more external calls to user code (since it could be slow)\n\tlet savedSrc = new Uint8Array(src.slice(0, srcEnd)) // we copy the data in case it changes while external data is processed\n\tlet savedStructures = currentStructures\n\tlet savedDecoder = currentDecoder\n\tlet savedSequentialMode = sequentialMode\n\tlet value = callback()\n\tsrcEnd = savedSrcEnd\n\tposition = savedPosition\n\tstringPosition = savedStringPosition\n\tsrcStringStart = savedSrcStringStart\n\tsrcStringEnd = savedSrcStringEnd\n\tsrcString = savedSrcString\n\tstrings = savedStrings\n\treferenceMap = savedReferenceMap\n\tbundledStrings = savedBundledStrings\n\tsrc = savedSrc\n\tsequentialMode = savedSequentialMode\n\tcurrentStructures = savedStructures\n\tcurrentDecoder = savedDecoder\n\tdataView = new DataView(src.buffer, src.byteOffset, src.byteLength)\n\treturn value\n}\nexport function clearSource() {\n\tsrc = null\n\treferenceMap = null\n\tcurrentStructures = null\n}\n\nexport function addExtension(extension) {\n\tcurrentExtensions[extension.tag] = extension.decode\n}\n\nexport function setSizeLimits(limits) {\n\tif (limits.maxMapSize) maxMapSize = limits.maxMapSize;\n\tif (limits.maxArraySize) maxArraySize = limits.maxArraySize;\n\tif (limits.maxObjectSize) maxObjectSize = limits.maxObjectSize;\n}\n\nexport const mult10 = new Array(147) // this is a table matching binary exponents to the multiplier to determine significant digit rounding\nfor (let i = 0; i < 256; i++) {\n\tmult10[i] = +('1e' + Math.floor(45.15 - i * 0.30103))\n}\nlet defaultDecoder = new Decoder({ useRecords: false })\nexport const decode = defaultDecoder.decode\nexport const decodeMultiple = defaultDecoder.decodeMultiple\nexport const FLOAT32_OPTIONS = {\n\tNEVER: 0,\n\tALWAYS: 1,\n\tDECIMAL_ROUND: 3,\n\tDECIMAL_FIT: 4\n}\nexport function roundFloat32(float32Number) {\n\tf32Array[0] = float32Number\n\tlet multiplier = mult10[((u8Array[3] & 0x7f) << 1) | (u8Array[2] >> 7)]\n\treturn ((multiplier * float32Number + (float32Number > 0 ? 0.5 : -0.5)) >> 0) / multiplier\n}\n","import { Decoder, mult10, Tag, typedArrays, addExtension as decodeAddExtension } from './decode.js'\nlet textEncoder\ntry {\n\ttextEncoder = new TextEncoder()\n} catch (error) {}\nlet extensions, extensionClasses\nconst Buffer = typeof globalThis === 'object' && globalThis.Buffer;\nconst hasNodeBuffer = typeof Buffer !== 'undefined'\nconst ByteArrayAllocate = hasNodeBuffer ? Buffer.allocUnsafeSlow : Uint8Array\nconst ByteArray = hasNodeBuffer ? Buffer : Uint8Array\nconst MAX_STRUCTURES = 0x100\nconst MAX_BUFFER_SIZE = hasNodeBuffer ? 0x100000000 : 0x7fd00000\nlet serializationId = 1\nlet throwOnIterable\nlet target\nlet targetView\nlet position = 0\nlet safeEnd\nlet bundledStrings = null\nconst MAX_BUNDLE_SIZE = 0xf000\nconst hasNonLatin = /[\\u0080-\\uFFFF]/\nconst RECORD_SYMBOL = Symbol('record-id')\nexport class Encoder extends Decoder {\n\tconstructor(options) {\n\t\tsuper(options)\n\t\tthis.offset = 0\n\t\tlet typeBuffer\n\t\tlet start\n\t\tlet sharedStructures\n\t\tlet hasSharedUpdate\n\t\tlet structures\n\t\tlet referenceMap\n\t\toptions = options || {}\n\t\tlet encodeUtf8 = ByteArray.prototype.utf8Write ? function(string, position, maxBytes) {\n\t\t\treturn target.utf8Write(string, position, maxBytes)\n\t\t} : (textEncoder && textEncoder.encodeInto) ?\n\t\t\tfunction(string, position) {\n\t\t\t\treturn textEncoder.encodeInto(string, target.subarray(position)).written\n\t\t\t} : false\n\n\t\tlet encoder = this\n\t\tlet hasSharedStructures = options.structures || options.saveStructures\n\t\tlet maxSharedStructures = options.maxSharedStructures\n\t\tif (maxSharedStructures == null)\n\t\t\tmaxSharedStructures = hasSharedStructures ? 128 : 0\n\t\tif (maxSharedStructures > 8190)\n\t\t\tthrow new Error('Maximum maxSharedStructure is 8190')\n\t\tlet isSequential = options.sequential\n\t\tif (isSequential) {\n\t\t\tmaxSharedStructures = 0\n\t\t}\n\t\tif (!this.structures)\n\t\t\tthis.structures = []\n\t\tif (this.saveStructures)\n\t\t\tthis.saveShared = this.saveStructures\n\t\tlet samplingPackedValues, packedObjectMap, sharedValues = options.sharedValues\n\t\tlet sharedPackedObjectMap\n\t\tif (sharedValues) {\n\t\t\tsharedPackedObjectMap = Object.create(null)\n\t\t\tfor (let i = 0, l = sharedValues.length; i < l; i++) {\n\t\t\t\tsharedPackedObjectMap[sharedValues[i]] = i\n\t\t\t}\n\t\t}\n\t\tlet recordIdsToRemove = []\n\t\tlet transitionsCount = 0\n\t\tlet serializationsSinceTransitionRebuild = 0\n\t\t\n\t\tthis.mapEncode = function(value, encodeOptions) {\n\t\t\t// Experimental support for premapping keys using _keyMap instad of keyMap - not optiimised yet)\n\t\t\tif (this._keyMap && !this._mapped) {\n\t\t\t\t//console.log('encoding ', value)\n\t\t\t\tswitch (value.constructor.name) {\n\t\t\t\t\tcase 'Array': \n\t\t\t\t\t\tvalue = value.map(r => this.encodeKeys(r))\n\t\t\t\t\t\tbreak\n\t\t\t\t\t//case 'Map': \n\t\t\t\t\t//\tvalue = this.encodeKeys(value)\n\t\t\t\t\t//\tbreak\n\t\t\t\t}\n\t\t\t\t//this._mapped = true\n\t\t\t}\n\t\t\treturn this.encode(value, encodeOptions)\n\t\t}\n\t\t\n\t\tthis.encode = function(value, encodeOptions)\t{\n\t\t\tif (!target) {\n\t\t\t\ttarget = new ByteArrayAllocate(8192)\n\t\t\t\ttargetView = new DataView(target.buffer, 0, 8192)\n\t\t\t\tposition = 0\n\t\t\t}\n\t\t\tsafeEnd = target.length - 10\n\t\t\tif (safeEnd - position < 0x800) {\n\t\t\t\t// don't start too close to the end, \n\t\t\t\ttarget = new ByteArrayAllocate(target.length)\n\t\t\t\ttargetView = new DataView(target.buffer, 0, target.length)\n\t\t\t\tsafeEnd = target.length - 10\n\t\t\t\tposition = 0\n\t\t\t} else if (encodeOptions === REUSE_BUFFER_MODE)\n\t\t\t\tposition = (position + 7) & 0x7ffffff8 // Word align to make any future copying of this buffer faster\n\t\t\tstart = position\n\t\t\tif (encoder.useSelfDescribedHeader) {\n\t\t\t\ttargetView.setUint32(position, 0xd9d9f700) // tag two byte, then self-descriptive tag\n\t\t\t\tposition += 3\n\t\t\t}\n\t\t\treferenceMap = encoder.structuredClone ? new Map() : null\n\t\t\tif (encoder.bundleStrings && typeof value !== 'string') {\n\t\t\t\tbundledStrings = []\n\t\t\t\tbundledStrings.size = Infinity // force a new bundle start on first string\n\t\t\t} else\n\t\t\t\tbundledStrings = null\n\n\t\t\tsharedStructures = encoder.structures\n\t\t\tif (sharedStructures) {\n\t\t\t\tif (sharedStructures.uninitialized) {\n\t\t\t\t\tlet sharedData = encoder.getShared() || {}\n\t\t\t\t\tencoder.structures = sharedStructures = sharedData.structures || []\n\t\t\t\t\tencoder.sharedVersion = sharedData.version\n\t\t\t\t\tlet sharedValues = encoder.sharedValues = sharedData.packedValues\n\t\t\t\t\tif (sharedValues) {\n\t\t\t\t\t\tsharedPackedObjectMap = {}\n\t\t\t\t\t\tfor (let i = 0, l = sharedValues.length; i < l; i++)\n\t\t\t\t\t\t\tsharedPackedObjectMap[sharedValues[i]] = i\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet sharedStructuresLength = sharedStructures.length\n\t\t\t\tif (sharedStructuresLength > maxSharedStructures && !isSequential)\n\t\t\t\t\tsharedStructuresLength = maxSharedStructures\n\t\t\t\tif (!sharedStructures.transitions) {\n\t\t\t\t\t// rebuild our structure transitions\n\t\t\t\t\tsharedStructures.transitions = Object.create(null)\n\t\t\t\t\tfor (let i = 0; i < sharedStructuresLength; i++) {\n\t\t\t\t\t\tlet keys = sharedStructures[i]\n\t\t\t\t\t\t//console.log('shared struct keys:', keys)\n\t\t\t\t\t\tif (!keys)\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\tlet nextTransition, transition = sharedStructures.transitions\n\t\t\t\t\t\tfor (let j = 0, l = keys.length; j < l; j++) {\n\t\t\t\t\t\t\tif (transition[RECORD_SYMBOL] === undefined)\n\t\t\t\t\t\t\t\ttransition[RECORD_SYMBOL] = i\n\t\t\t\t\t\t\tlet key = keys[j]\n\t\t\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttransition = nextTransition\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttransition[RECORD_SYMBOL] = i | 0x100000\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isSequential)\n\t\t\t\t\tsharedStructures.nextId = sharedStructuresLength\n\t\t\t}\n\t\t\tif (hasSharedUpdate)\n\t\t\t\thasSharedUpdate = false\n\t\t\tstructures = sharedStructures || []\n\t\t\tpackedObjectMap = sharedPackedObjectMap\n\t\t\tif (options.pack) {\n\t\t\t\tlet packedValues = new Map()\n\t\t\t\tpackedValues.values = []\n\t\t\t\tpackedValues.encoder = encoder\n\t\t\t\tpackedValues.maxValues = options.maxPrivatePackedValues || (sharedPackedObjectMap ? 16 : Infinity)\n\t\t\t\tpackedValues.objectMap = sharedPackedObjectMap || false\n\t\t\t\tpackedValues.samplingPackedValues = samplingPackedValues\n\t\t\t\tfindRepetitiveStrings(value, packedValues)\n\t\t\t\tif (packedValues.values.length > 0) {\n\t\t\t\t\ttarget[position++] = 0xd8 // one-byte tag\n\t\t\t\t\ttarget[position++] = 51 // tag 51 for packed shared structures https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\t\t\twriteArrayHeader(4)\n\t\t\t\t\tlet valuesArray = packedValues.values\n\t\t\t\t\tencode(valuesArray)\n\t\t\t\t\twriteArrayHeader(0) // prefixes\n\t\t\t\t\twriteArrayHeader(0) // suffixes\n\t\t\t\t\tpackedObjectMap = Object.create(sharedPackedObjectMap || null)\n\t\t\t\t\tfor (let i = 0, l = valuesArray.length; i < l; i++) {\n\t\t\t\t\t\tpackedObjectMap[valuesArray[i]] = i\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrowOnIterable = encodeOptions & THROW_ON_ITERABLE;\n\t\t\ttry {\n\t\t\t\tif (throwOnIterable)\n\t\t\t\t\treturn;\n\t\t\t\tencode(value)\n\t\t\t\tif (bundledStrings) {\n\t\t\t\t\twriteBundles(start, encode)\n\t\t\t\t}\n\t\t\t\tencoder.offset = position // update the offset so next serialization doesn't write over our buffer, but can continue writing to same buffer sequentially\n\t\t\t\tif (referenceMap && referenceMap.idsToInsert) {\n\t\t\t\t\tposition += referenceMap.idsToInsert.length * 2\n\t\t\t\t\tif (position > safeEnd)\n\t\t\t\t\t\tmakeRoom(position)\n\t\t\t\t\tencoder.offset = position\n\t\t\t\t\tlet serialized = insertIds(target.subarray(start, position), referenceMap.idsToInsert)\n\t\t\t\t\treferenceMap = null\n\t\t\t\t\treturn serialized\n\t\t\t\t}\n\t\t\t\tif (encodeOptions & REUSE_BUFFER_MODE) {\n\t\t\t\t\ttarget.start = start\n\t\t\t\t\ttarget.end = position\n\t\t\t\t\treturn target\n\t\t\t\t}\n\t\t\t\treturn target.subarray(start, position) // position can change if we call encode again in saveShared, so we get the buffer now\n\t\t\t} finally {\n\t\t\t\tif (sharedStructures) {\n\t\t\t\t\tif (serializationsSinceTransitionRebuild < 10)\n\t\t\t\t\t\tserializationsSinceTransitionRebuild++\n\t\t\t\t\tif (sharedStructures.length > maxSharedStructures)\n\t\t\t\t\t\tsharedStructures.length = maxSharedStructures\n\t\t\t\t\tif (transitionsCount > 10000) {\n\t\t\t\t\t\t// force a rebuild occasionally after a lot of transitions so it can get cleaned up\n\t\t\t\t\t\tsharedStructures.transitions = null\n\t\t\t\t\t\tserializationsSinceTransitionRebuild = 0\n\t\t\t\t\t\ttransitionsCount = 0\n\t\t\t\t\t\tif (recordIdsToRemove.length > 0)\n\t\t\t\t\t\t\trecordIdsToRemove = []\n\t\t\t\t\t} else if (recordIdsToRemove.length > 0 && !isSequential) {\n\t\t\t\t\t\tfor (let i = 0, l = recordIdsToRemove.length; i < l; i++) {\n\t\t\t\t\t\t\trecordIdsToRemove[i][RECORD_SYMBOL] = undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\trecordIdsToRemove = []\n\t\t\t\t\t\t//sharedStructures.nextId = maxSharedStructures\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (hasSharedUpdate && encoder.saveShared) {\n\t\t\t\t\tif (encoder.structures.length > maxSharedStructures) {\n\t\t\t\t\t\tencoder.structures = encoder.structures.slice(0, maxSharedStructures)\n\t\t\t\t\t}\n\t\t\t\t\t// we can't rely on start/end with REUSE_BUFFER_MODE since they will (probably) change when we save\n\t\t\t\t\tlet returnBuffer = target.subarray(start, position)\n\t\t\t\t\tif (encoder.updateSharedData() === false)\n\t\t\t\t\t\treturn encoder.encode(value) // re-encode if it fails\n\t\t\t\t\treturn returnBuffer\n\t\t\t\t}\n\t\t\t\tif (encodeOptions & RESET_BUFFER_MODE)\n\t\t\t\t\tposition = start\n\t\t\t}\n\t\t}\n\t\tthis.findCommonStringsToPack = () => {\n\t\t\tsamplingPackedValues = new Map()\n\t\t\tif (!sharedPackedObjectMap)\n\t\t\t\tsharedPackedObjectMap = Object.create(null)\n\t\t\treturn (options) => {\n\t\t\t\tlet threshold = options && options.threshold || 4\n\t\t\t\tlet position = this.pack ? options.maxPrivatePackedValues || 16 : 0\n\t\t\t\tif (!sharedValues)\n\t\t\t\t\tsharedValues = this.sharedValues = []\n\t\t\t\tfor (let [ key, status ] of samplingPackedValues) {\n\t\t\t\t\tif (status.count > threshold) {\n\t\t\t\t\t\tsharedPackedObjectMap[key] = position++\n\t\t\t\t\t\tsharedValues.push(key)\n\t\t\t\t\t\thasSharedUpdate = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (this.saveShared && this.updateSharedData() === false) {}\n\t\t\t\tsamplingPackedValues = null\n\t\t\t}\n\t\t}\n\t\tconst encode = (value) => {\n\t\t\tif (position > safeEnd)\n\t\t\t\ttarget = makeRoom(position)\n\n\t\t\tvar type = typeof value\n\t\t\tvar length\n\t\t\tif (type === 'string') {\n\t\t\t\tif (packedObjectMap) {\n\t\t\t\t\tlet packedPosition = packedObjectMap[value]\n\t\t\t\t\tif (packedPosition >= 0) {\n\t\t\t\t\t\tif (packedPosition < 16)\n\t\t\t\t\t\t\ttarget[position++] = packedPosition + 0xe0 // simple values, defined in https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ttarget[position++] = 0xc6 // tag 6 defined in https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\t\t\t\t\tif (packedPosition & 1)\n\t\t\t\t\t\t\t\tencode((15 - packedPosition) >> 1)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tencode((packedPosition - 16) >> 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n/*\t\t\t\t\t\t} else if (packedStatus.serializationId != serializationId) {\n\t\t\t\t\t\t\tpackedStatus.serializationId = serializationId\n\t\t\t\t\t\t\tpackedStatus.count = 1\n\t\t\t\t\t\t\tif (options.sharedPack) {\n\t\t\t\t\t\t\t\tlet sharedCount = packedStatus.sharedCount = (packedStatus.sharedCount || 0) + 1\n\t\t\t\t\t\t\t\tif (shareCount > (options.sharedPack.threshold || 5)) {\n\t\t\t\t\t\t\t\t\tlet sharedPosition = packedStatus.position = packedStatus.nextSharedPosition\n\t\t\t\t\t\t\t\t\thasSharedUpdate = true\n\t\t\t\t\t\t\t\t\tif (sharedPosition < 16)\n\t\t\t\t\t\t\t\t\t\ttarget[position++] = sharedPosition + 0xc0\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} // else any in-doc incrementation?*/\n\t\t\t\t\t} else if (samplingPackedValues && !options.pack) {\n\t\t\t\t\t\tlet status = samplingPackedValues.get(value)\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tstatus.count++\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tsamplingPackedValues.set(value, {\n\t\t\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet strLength = value.length\n\t\t\t\tif (bundledStrings && strLength >= 4 && strLength < 0x400) {\n\t\t\t\t\tif ((bundledStrings.size += strLength) > MAX_BUNDLE_SIZE) {\n\t\t\t\t\t\tlet extStart\n\t\t\t\t\t\tlet maxBytes = (bundledStrings[0] ? bundledStrings[0].length * 3 + bundledStrings[1].length : 0) + 10\n\t\t\t\t\t\tif (position + maxBytes > safeEnd)\n\t\t\t\t\t\t\ttarget = makeRoom(position + maxBytes)\n\t\t\t\t\t\ttarget[position++] = 0xd9 // tag 16-bit\n\t\t\t\t\t\ttarget[position++] = 0xdf // tag 0xdff9\n\t\t\t\t\t\ttarget[position++] = 0xf9\n\t\t\t\t\t\t// TODO: If we only have one bundle with any string data, only write one string bundle\n\t\t\t\t\t\ttarget[position++] = bundledStrings.position ? 0x84 : 0x82 // array of 4 or 2 elements depending on if we write bundles\n\t\t\t\t\t\ttarget[position++] = 0x1a // 32-bit unsigned int\n\t\t\t\t\t\textStart = position - start\n\t\t\t\t\t\tposition += 4 // reserve for writing bundle reference\n\t\t\t\t\t\tif (bundledStrings.position) {\n\t\t\t\t\t\t\twriteBundles(start, encode) // write the last bundles\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbundledStrings = ['', ''] // create new ones\n\t\t\t\t\t\tbundledStrings.size = 0\n\t\t\t\t\t\tbundledStrings.position = extStart\n\t\t\t\t\t}\n\t\t\t\t\tlet twoByte = hasNonLatin.test(value)\n\t\t\t\t\tbundledStrings[twoByte ? 0 : 1] += value\n\t\t\t\t\ttarget[position++] = twoByte ? 0xce : 0xcf\n\t\t\t\t\tencode(strLength);\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tlet headerSize\n\t\t\t\t// first we estimate the header size, so we can write to the correct location\n\t\t\t\tif (strLength < 0x20) {\n\t\t\t\t\theaderSize = 1\n\t\t\t\t} else if (strLength < 0x100) {\n\t\t\t\t\theaderSize = 2\n\t\t\t\t} else if (strLength < 0x10000) {\n\t\t\t\t\theaderSize = 3\n\t\t\t\t} else {\n\t\t\t\t\theaderSize = 5\n\t\t\t\t}\n\t\t\t\tlet maxBytes = strLength * 3\n\t\t\t\tif (position + maxBytes > safeEnd)\n\t\t\t\t\ttarget = makeRoom(position + maxBytes)\n\n\t\t\t\tif (strLength < 0x40 || !encodeUtf8) {\n\t\t\t\t\tlet i, c1, c2, strPosition = position + headerSize\n\t\t\t\t\tfor (i = 0; i < strLength; i++) {\n\t\t\t\t\t\tc1 = value.charCodeAt(i)\n\t\t\t\t\t\tif (c1 < 0x80) {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1\n\t\t\t\t\t\t} else if (c1 < 0x800) {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 | 0xc0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t(c1 & 0xfc00) === 0xd800 &&\n\t\t\t\t\t\t\t((c2 = value.charCodeAt(i + 1)) & 0xfc00) === 0xdc00\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tc1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff)\n\t\t\t\t\t\t\ti++\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 18 | 0xf0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 12 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 12 | 0xe0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlength = strPosition - position - headerSize\n\t\t\t\t} else {\n\t\t\t\t\tlength = encodeUtf8(value, position + headerSize, maxBytes)\n\t\t\t\t}\n\n\t\t\t\tif (length < 0x18) {\n\t\t\t\t\ttarget[position++] = 0x60 | length\n\t\t\t\t} else if (length < 0x100) {\n\t\t\t\t\tif (headerSize < 2) {\n\t\t\t\t\t\ttarget.copyWithin(position + 2, position + 1, position + 1 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0x78\n\t\t\t\t\ttarget[position++] = length\n\t\t\t\t} else if (length < 0x10000) {\n\t\t\t\t\tif (headerSize < 3) {\n\t\t\t\t\t\ttarget.copyWithin(position + 3, position + 2, position + 2 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0x79\n\t\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t\t} else {\n\t\t\t\t\tif (headerSize < 5) {\n\t\t\t\t\t\ttarget.copyWithin(position + 5, position + 3, position + 3 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0x7a\n\t\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\t\tposition += 4\n\t\t\t\t}\n\t\t\t\tposition += length\n\t\t\t} else if (type === 'number') {\n\t\t\t\tif (!this.alwaysUseFloat && value >>> 0 === value) {// positive integer, 32-bit or less\n\t\t\t\t\t// positive uint\n\t\t\t\t\tif (value < 0x18) {\n\t\t\t\t\t\ttarget[position++] = value\n\t\t\t\t\t} else if (value < 0x100) {\n\t\t\t\t\t\ttarget[position++] = 0x18\n\t\t\t\t\t\ttarget[position++] = value\n\t\t\t\t\t} else if (value < 0x10000) {\n\t\t\t\t\t\ttarget[position++] = 0x19\n\t\t\t\t\t\ttarget[position++] = value >> 8\n\t\t\t\t\t\ttarget[position++] = value & 0xff\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[position++] = 0x1a\n\t\t\t\t\t\ttargetView.setUint32(position, value)\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t}\n\t\t\t\t} else if (!this.alwaysUseFloat && value >> 0 === value) { // negative integer\n\t\t\t\t\tif (value >= -0x18) {\n\t\t\t\t\t\ttarget[position++] = 0x1f - value\n\t\t\t\t\t} else if (value >= -0x100) {\n\t\t\t\t\t\ttarget[position++] = 0x38\n\t\t\t\t\t\ttarget[position++] = ~value\n\t\t\t\t\t} else if (value >= -0x10000) {\n\t\t\t\t\t\ttarget[position++] = 0x39\n\t\t\t\t\t\ttargetView.setUint16(position, ~value)\n\t\t\t\t\t\tposition += 2\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[position++] = 0x3a\n\t\t\t\t\t\ttargetView.setUint32(position, ~value)\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet useFloat32\n\t\t\t\t\tif ((useFloat32 = this.useFloat32) > 0 && value < 0x100000000 && value >= -0x80000000) {\n\t\t\t\t\t\ttarget[position++] = 0xfa\n\t\t\t\t\t\ttargetView.setFloat32(position, value)\n\t\t\t\t\t\tlet xShifted\n\t\t\t\t\t\tif (useFloat32 < 4 ||\n\t\t\t\t\t\t\t\t// this checks for rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved\n\t\t\t\t\t\t\t\t((xShifted = value * mult10[((target[position] & 0x7f) << 1) | (target[position + 1] >> 7)]) >> 0) === xShifted) {\n\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tposition-- // move back into position for writing a double\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0xfb\n\t\t\t\t\ttargetView.setFloat64(position, value)\n\t\t\t\t\tposition += 8\n\t\t\t\t}\n\t\t\t} else if (type === 'object') {\n\t\t\t\tif (!value)\n\t\t\t\t\ttarget[position++] = 0xf6\n\t\t\t\telse {\n\t\t\t\t\tif (referenceMap) {\n\t\t\t\t\t\tlet referee = referenceMap.get(value)\n\t\t\t\t\t\tif (referee) {\n\t\t\t\t\t\t\ttarget[position++] = 0xd8\n\t\t\t\t\t\t\ttarget[position++] = 29 // http://cbor.schmorp.de/value-sharing\n\t\t\t\t\t\t\ttarget[position++] = 0x19 // 16-bit uint\n\t\t\t\t\t\t\tif (!referee.references) {\n\t\t\t\t\t\t\t\tlet idsToInsert = referenceMap.idsToInsert || (referenceMap.idsToInsert = [])\n\t\t\t\t\t\t\t\treferee.references = []\n\t\t\t\t\t\t\t\tidsToInsert.push(referee)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treferee.references.push(position - start)\n\t\t\t\t\t\t\tposition += 2 // TODO: also support 32-bit\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t} else \n\t\t\t\t\t\t\treferenceMap.set(value, { offset: position - start })\n\t\t\t\t\t}\n\t\t\t\t\tlet constructor = value.constructor\n\t\t\t\t\tif (constructor === Object) {\n\t\t\t\t\t\twriteObject(value)\n\t\t\t\t\t} else if (constructor === Array) {\n\t\t\t\t\t\tlength = value.length\n\t\t\t\t\t\tif (length < 0x18) {\n\t\t\t\t\t\t\ttarget[position++] = 0x80 | length\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twriteArrayHeader(length)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\t\t\tencode(value[i])\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (constructor === Map) {\n\t\t\t\t\t\tif (this.mapsAsObjects ? this.useTag259ForMaps !== false : this.useTag259ForMaps) {\n\t\t\t\t\t\t\t// use Tag 259 (https://github.com/shanewholloway/js-cbor-codec/blob/master/docs/CBOR-259-spec--explicit-maps.md) for maps if the user wants it that way\n\t\t\t\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\t\t\t\ttarget[position++] = 1\n\t\t\t\t\t\t\ttarget[position++] = 3\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlength = value.size\n\t\t\t\t\t\tif (length < 0x18) {\n\t\t\t\t\t\t\ttarget[position++] = 0xa0 | length\n\t\t\t\t\t\t} else if (length < 0x100) {\n\t\t\t\t\t\t\ttarget[position++] = 0xb8\n\t\t\t\t\t\t\ttarget[position++] = length\n\t\t\t\t\t\t} else if (length < 0x10000) {\n\t\t\t\t\t\t\ttarget[position++] = 0xb9\n\t\t\t\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget[position++] = 0xba\n\t\t\t\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (encoder.keyMap) { \n\t\t\t\t\t\t\tfor (let [ key, entryValue ] of value) {\n\t\t\t\t\t\t\t\tencode(encoder.encodeKey(key))\n\t\t\t\t\t\t\t\tencode(entryValue)\n\t\t\t\t\t\t\t} \n\t\t\t\t\t\t} else { \n\t\t\t\t\t\t\tfor (let [ key, entryValue ] of value) {\n\t\t\t\t\t\t\t\tencode(key) \n\t\t\t\t\t\t\t\tencode(entryValue)\n\t\t\t\t\t\t\t} \t\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (let i = 0, l = extensions.length; i < l; i++) {\n\t\t\t\t\t\t\tlet extensionClass = extensionClasses[i]\n\t\t\t\t\t\t\tif (value instanceof extensionClass) {\n\t\t\t\t\t\t\t\tlet extension = extensions[i]\n\t\t\t\t\t\t\t\tlet tag = extension.tag\n\t\t\t\t\t\t\t\tif (tag == undefined)\n\t\t\t\t\t\t\t\t\ttag = extension.getTag && extension.getTag.call(this, value)\n\t\t\t\t\t\t\t\tif (tag < 0x18) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xc0 | tag\n\t\t\t\t\t\t\t\t} else if (tag < 0x100) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xd8\n\t\t\t\t\t\t\t\t\ttarget[position++] = tag\n\t\t\t\t\t\t\t\t} else if (tag < 0x10000) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\t\t\t\t\t\ttarget[position++] = tag >> 8\n\t\t\t\t\t\t\t\t\ttarget[position++] = tag & 0xff\n\t\t\t\t\t\t\t\t} else if (tag > -1) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xda\n\t\t\t\t\t\t\t\t\ttargetView.setUint32(position, tag)\n\t\t\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t\t\t} // else undefined, don't write tag\n\t\t\t\t\t\t\t\textension.encode.call(this, value, encode, makeRoom)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value[Symbol.iterator]) {\n\t\t\t\t\t\t\tif (throwOnIterable) {\n\t\t\t\t\t\t\t\tlet error = new Error('Iterable should be serialized as iterator')\n\t\t\t\t\t\t\t\terror.iteratorNotHandled = true;\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttarget[position++] = 0x9f // indefinite length array\n\t\t\t\t\t\t\tfor (let entry of value) {\n\t\t\t\t\t\t\t\tencode(entry)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttarget[position++] = 0xff // stop-code\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value[Symbol.asyncIterator] || isBlob(value)) {\n\t\t\t\t\t\t\tlet error = new Error('Iterable/blob should be serialized as iterator')\n\t\t\t\t\t\t\terror.iteratorNotHandled = true;\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.useToJSON && value.toJSON) {\n\t\t\t\t\t\t\tconst json = value.toJSON()\n\t\t\t\t\t\t\t// if for some reason value.toJSON returns itself it'll loop forever\n\t\t\t\t\t\t\tif (json !== value)\n\t\t\t\t\t\t\t\treturn encode(json)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// no extension found, write as a plain object\n\t\t\t\t\t\twriteObject(value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (type === 'boolean') {\n\t\t\t\ttarget[position++] = value ? 0xf5 : 0xf4\n\t\t\t} else if (type === 'bigint') {\n\t\t\t\tif (value < (BigInt(1)<<BigInt(64)) && value >= 0) {\n\t\t\t\t\t// use an unsigned int as long as it fits\n\t\t\t\t\ttarget[position++] = 0x1b\n\t\t\t\t\ttargetView.setBigUint64(position, value)\n\t\t\t\t} else if (value > -(BigInt(1)<<BigInt(64)) && value < 0) {\n\t\t\t\t\t// if we can fit an unsigned int, use that\n\t\t\t\t\ttarget[position++] = 0x3b\n\t\t\t\t\ttargetView.setBigUint64(position, -value - BigInt(1))\n\t\t\t\t} else {\n\t\t\t\t\t// overflow\n\t\t\t\t\tif (this.largeBigIntToFloat) {\n\t\t\t\t\t\ttarget[position++] = 0xfb\n\t\t\t\t\t\ttargetView.setFloat64(position, Number(value))\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (value >= BigInt(0))\n\t\t\t\t\t\t\ttarget[position++] = 0xc2 // tag 2\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ttarget[position++] = 0xc3 // tag 2\n\t\t\t\t\t\t\tvalue = BigInt(-1) - value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet bytes = [];\n\t\t\t\t\t\twhile (value) {\n\t\t\t\t\t\t\tbytes.push(Number(value & BigInt(0xff)));\n\t\t\t\t\t\t\tvalue >>= BigInt(8);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twriteBuffer(new Uint8Array(bytes.reverse()), makeRoom);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tposition += 8\n\t\t\t} else if (type === 'undefined') {\n\t\t\t\ttarget[position++] = 0xf7\n\t\t\t} else {\n\t\t\t\tthrow new Error('Unknown type: ' + type)\n\t\t\t}\n\t\t}\n\n\t\tconst writeObject = this.useRecords === false ? this.variableMapSize ? (object) => {\n\t\t\t// this method is slightly slower, but generates \"preferred serialization\" (optimally small for smaller objects)\n\t\t\tlet keys = Object.keys(object)\n\t\t\tlet vals = Object.values(object)\n\t\t\tlet length = keys.length\n\t\t\tif (length < 0x18) {\n\t\t\t\ttarget[position++] = 0xa0 | length\n\t\t\t} else if (length < 0x100) {\n\t\t\t\ttarget[position++] = 0xb8\n\t\t\t\ttarget[position++] = length\n\t\t\t} else if (length < 0x10000) {\n\t\t\t\ttarget[position++] = 0xb9\n\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t} else {\n\t\t\t\ttarget[position++] = 0xba\n\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\tposition += 4\n\t\t\t}\n\t\t\tlet key\n\t\t\tif (encoder.keyMap) { \n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tencode(encoder.encodeKey(keys[i]))\n\t\t\t\t\tencode(vals[i])\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tencode(keys[i])\n\t\t\t\t\tencode(vals[i])\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\t\t(object) => {\n\t\t\ttarget[position++] = 0xb9 // always use map 16, so we can preallocate and set the length afterwards\n\t\t\tlet objectOffset = position - start\n\t\t\tposition += 2\n\t\t\tlet size = 0\n\t\t\tif (encoder.keyMap) {\n\t\t\t\tfor (let key in object) if (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\tencode(encoder.encodeKey(key))\n\t\t\t\t\tencode(object[key])\n\t\t\t\t\tsize++\n\t\t\t\t}\n\t\t\t} else { \n\t\t\t\tfor (let key in object) if (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\t\tencode(key)\n\t\t\t\t\t\tencode(object[key])\n\t\t\t\t\tsize++\n\t\t\t\t}\n\t\t\t}\n\t\t\ttarget[objectOffset++ + start] = size >> 8\n\t\t\ttarget[objectOffset + start] = size & 0xff\n\t\t} :\n\t\t(object, skipValues) => {\n\t\t\tlet nextTransition, transition = structures.transitions || (structures.transitions = Object.create(null))\n\t\t\tlet newTransitions = 0\n\t\t\tlet length = 0\n\t\t\tlet parentRecordId\n\t\t\tlet keys\n\t\t\tif (this.keyMap) {\n\t\t\t\tkeys = Object.keys(object).map(k => this.encodeKey(k))\n\t\t\t\tlength = keys.length\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tlet key = keys[i]\n\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\tnewTransitions++\n\t\t\t\t\t}\n\t\t\t\t\ttransition = nextTransition\n\t\t\t\t}\t\t\t\t\n\t\t\t} else {\n\t\t\t\tfor (let key in object) if (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\tif (transition[RECORD_SYMBOL] & 0x100000) {// this indicates it is a brancheable/extendable terminal node, so we will use this record id and extend it\n\t\t\t\t\t\t\tparentRecordId = transition[RECORD_SYMBOL] & 0xffff\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\tnewTransitions++\n\t\t\t\t\t}\n\t\t\t\t\ttransition = nextTransition\n\t\t\t\t\tlength++\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet recordId = transition[RECORD_SYMBOL]\n\t\t\tif (recordId !== undefined) {\n\t\t\t\trecordId &= 0xffff\n\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\ttarget[position++] = (recordId >> 8) | 0xe0\n\t\t\t\ttarget[position++] = recordId & 0xff\n\t\t\t} else {\n\t\t\t\tif (!keys)\n\t\t\t\t\tkeys = transition.__keys__ || (transition.__keys__ = Object.keys(object))\n\t\t\t\tif (parentRecordId === undefined) {\n\t\t\t\t\trecordId = structures.nextId++\n\t\t\t\t\tif (!recordId) {\n\t\t\t\t\t\trecordId = 0\n\t\t\t\t\t\tstructures.nextId = 1\n\t\t\t\t\t}\n\t\t\t\t\tif (recordId >= MAX_STRUCTURES) {// cycle back around\n\t\t\t\t\t\tstructures.nextId = (recordId = maxSharedStructures) + 1\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trecordId = parentRecordId\n\t\t\t\t}\n\t\t\t\tstructures[recordId] = keys\n\t\t\t\tif (recordId < maxSharedStructures) {\n\t\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\t\ttarget[position++] = (recordId >> 8) | 0xe0\n\t\t\t\t\ttarget[position++] = recordId & 0xff\n\t\t\t\t\ttransition = structures.transitions\n\t\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\t\tif (transition[RECORD_SYMBOL] === undefined || (transition[RECORD_SYMBOL] & 0x100000))\n\t\t\t\t\t\t\ttransition[RECORD_SYMBOL] = recordId\n\t\t\t\t\t\ttransition = transition[keys[i]]\n\t\t\t\t\t}\n\t\t\t\t\ttransition[RECORD_SYMBOL] = recordId | 0x100000 // indicates it is a extendable terminal\n\t\t\t\t\thasSharedUpdate = true\n\t\t\t\t} else {\n\t\t\t\t\ttransition[RECORD_SYMBOL] = recordId\n\t\t\t\t\ttargetView.setUint32(position, 0xd9dfff00) // tag two byte, then record definition id\n\t\t\t\t\tposition += 3\n\t\t\t\t\tif (newTransitions)\n\t\t\t\t\t\ttransitionsCount += serializationsSinceTransitionRebuild * newTransitions\n\t\t\t\t\t// record the removal of the id, we can maintain our shared structure\n\t\t\t\t\tif (recordIdsToRemove.length >= MAX_STRUCTURES - maxSharedStructures)\n\t\t\t\t\t\trecordIdsToRemove.shift()[RECORD_SYMBOL] = undefined // we are cycling back through, and have to remove old ones\n\t\t\t\t\trecordIdsToRemove.push(transition)\n\t\t\t\t\twriteArrayHeader(length + 2)\n\t\t\t\t\tencode(0xe000 + recordId)\n\t\t\t\t\tencode(keys)\n\t\t\t\t\tif (skipValues) return; // special exit for iterator\n\t\t\t\t\tfor (let key in object)\n\t\t\t\t\t\tif (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key))\n\t\t\t\t\t\t\tencode(object[key])\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (length < 0x18) { // write the array header\n\t\t\t\ttarget[position++] = 0x80 | length\n\t\t\t} else {\n\t\t\t\twriteArrayHeader(length)\n\t\t\t}\n\t\t\tif (skipValues) return; // special exit for iterator\n\t\t\tfor (let key in object)\n\t\t\t\tif (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key))\n\t\t\t\t\tencode(object[key])\n\t\t}\n\t\tconst makeRoom = (end) => {\n\t\t\tlet newSize\n\t\t\tif (end > 0x1000000) {\n\t\t\t\t// special handling for really large buffers\n\t\t\t\tif ((end - start) > MAX_BUFFER_SIZE)\n\t\t\t\t\tthrow new Error('Encoded buffer would be larger than maximum buffer size')\n\t\t\t\tnewSize = Math.min(MAX_BUFFER_SIZE,\n\t\t\t\t\tMath.round(Math.max((end - start) * (end > 0x4000000 ? 1.25 : 2), 0x400000) / 0x1000) * 0x1000)\n\t\t\t} else // faster handling for smaller buffers\n\t\t\t\tnewSize = ((Math.max((end - start) << 2, target.length - 1) >> 12) + 1) << 12\n\t\t\tlet newBuffer = new ByteArrayAllocate(newSize)\n\t\t\ttargetView = new DataView(newBuffer.buffer, 0, newSize)\n\t\t\tif (target.copy)\n\t\t\t\ttarget.copy(newBuffer, 0, start, end)\n\t\t\telse\n\t\t\t\tnewBuffer.set(target.slice(start, end))\n\t\t\tposition -= start\n\t\t\tstart = 0\n\t\t\tsafeEnd = newBuffer.length - 10\n\t\t\treturn target = newBuffer\n\t\t}\n\t\tlet chunkThreshold = 100;\n\t\tlet continuedChunkThreshold = 1000;\n\t\tthis.encodeAsIterable = function(value, options) {\n\t\t\treturn startEncoding(value, options, encodeObjectAsIterable);\n\t\t}\n\t\tthis.encodeAsAsyncIterable = function(value, options) {\n\t\t\treturn startEncoding(value, options, encodeObjectAsAsyncIterable);\n\t\t}\n\n\t\tfunction* encodeObjectAsIterable(object, iterateProperties, finalIterable) {\n\t\t\tlet constructor = object.constructor;\n\t\t\tif (constructor === Object) {\n\t\t\t\tlet useRecords = encoder.useRecords !== false;\n\t\t\t\tif (useRecords)\n\t\t\t\t\twriteObject(object, true); // write the record identifier\n\t\t\t\telse\n\t\t\t\t\twriteEntityLength(Object.keys(object).length, 0xa0);\n\t\t\t\tfor (let key in object) {\n\t\t\t\t\tlet value = object[key];\n\t\t\t\t\tif (!useRecords) encode(key);\n\t\t\t\t\tif (value && typeof value === 'object') {\n\t\t\t\t\t\tif (iterateProperties[key])\n\t\t\t\t\t\t\tyield* encodeObjectAsIterable(value, iterateProperties[key]);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tyield* tryEncode(value, iterateProperties, key);\n\t\t\t\t\t} else encode(value);\n\t\t\t\t}\n\t\t\t} else if (constructor === Array) {\n\t\t\t\tlet length = object.length;\n\t\t\t\twriteArrayHeader(length);\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tlet value = object[i];\n\t\t\t\t\tif (value && (typeof value === 'object' || position - start > chunkThreshold)) {\n\t\t\t\t\t\tif (iterateProperties.element)\n\t\t\t\t\t\t\tyield* encodeObjectAsIterable(value, iterateProperties.element);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tyield* tryEncode(value, iterateProperties, 'element');\n\t\t\t\t\t} else encode(value);\n\t\t\t\t}\n\t\t\t} else if (object[Symbol.iterator] && !object.buffer) { // iterator, but exclude typed arrays\n\t\t\t\ttarget[position++] = 0x9f; // start indefinite array\n\t\t\t\tfor (let value of object) {\n\t\t\t\t\tif (value && (typeof value === 'object' || position - start > chunkThreshold)) {\n\t\t\t\t\t\tif (iterateProperties.element)\n\t\t\t\t\t\t\tyield* encodeObjectAsIterable(value, iterateProperties.element);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tyield* tryEncode(value, iterateProperties, 'element');\n\t\t\t\t\t} else encode(value);\n\t\t\t\t}\n\t\t\t\ttarget[position++] = 0xff; // stop byte\n\t\t\t} else if (isBlob(object)){\n\t\t\t\twriteEntityLength(object.size, 0x40); // encode as binary data\n\t\t\t\tyield target.subarray(start, position);\n\t\t\t\tyield object; // directly return blobs, they have to be encoded asynchronously\n\t\t\t\trestartEncoding();\n\t\t\t} else if (object[Symbol.asyncIterator]) {\n\t\t\t\ttarget[position++] = 0x9f; // start indefinite array\n\t\t\t\tyield target.subarray(start, position);\n\t\t\t\tyield object; // directly return async iterators, they have to be encoded asynchronously\n\t\t\t\trestartEncoding();\n\t\t\t\ttarget[position++] = 0xff; // stop byte\n\t\t\t} else {\n\t\t\t\tencode(object);\n\t\t\t}\n\t\t\tif (finalIterable && position > start) yield target.subarray(start, position);\n\t\t\telse if (position - start > chunkThreshold) {\n\t\t\t\tyield target.subarray(start, position);\n\t\t\t\trestartEncoding();\n\t\t\t}\n\t\t}\n\t\tfunction* tryEncode(value, iterateProperties, key) {\n\t\t\tlet restart = position - start;\n\t\t\ttry {\n\t\t\t\tencode(value);\n\t\t\t\tif (position - start > chunkThreshold) {\n\t\t\t\t\tyield target.subarray(start, position);\n\t\t\t\t\trestartEncoding();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (error.iteratorNotHandled) {\n\t\t\t\t\titerateProperties[key] = {};\n\t\t\t\t\tposition = start + restart; // restart our position so we don't have partial data from last encode\n\t\t\t\t\tyield* encodeObjectAsIterable.call(this, value, iterateProperties[key]);\n\t\t\t\t} else throw error;\n\t\t\t}\n\t\t}\n\t\tfunction restartEncoding() {\n\t\t\tchunkThreshold = continuedChunkThreshold;\n\t\t\tencoder.encode(null, THROW_ON_ITERABLE); // restart encoding\n\t\t}\n\t\tfunction startEncoding(value, options, encodeIterable) {\n\t\t\tif (options && options.chunkThreshold) // explicitly specified chunk sizes\n\t\t\t\tchunkThreshold = continuedChunkThreshold = options.chunkThreshold;\n\t\t\telse // we start with a smaller threshold to get initial bytes sent quickly\n\t\t\t\tchunkThreshold = 100;\n\t\t\tif (value && typeof value === 'object') {\n\t\t\t\tencoder.encode(null, THROW_ON_ITERABLE); // start encoding\n\t\t\t\treturn encodeIterable(value, encoder.iterateProperties || (encoder.iterateProperties = {}), true);\n\t\t\t}\n\t\t\treturn [encoder.encode(value)];\n\t\t}\n\n\t\tasync function* encodeObjectAsAsyncIterable(value, iterateProperties) {\n\t\t\tfor (let encodedValue of encodeObjectAsIterable(value, iterateProperties, true)) {\n\t\t\t\tlet constructor = encodedValue.constructor;\n\t\t\t\tif (constructor === ByteArray || constructor === Uint8Array)\n\t\t\t\t\tyield encodedValue;\n\t\t\t\telse if (isBlob(encodedValue)) {\n\t\t\t\t\tlet reader = encodedValue.stream().getReader();\n\t\t\t\t\tlet next;\n\t\t\t\t\twhile (!(next = await reader.read()).done) {\n\t\t\t\t\t\tyield next.value;\n\t\t\t\t\t}\n\t\t\t\t} else if (encodedValue[Symbol.asyncIterator]) {\n\t\t\t\t\tfor await (let asyncValue of encodedValue) {\n\t\t\t\t\t\trestartEncoding();\n\t\t\t\t\t\tif (asyncValue)\n\t\t\t\t\t\t\tyield* encodeObjectAsAsyncIterable(asyncValue, iterateProperties.async || (iterateProperties.async = {}));\n\t\t\t\t\t\telse yield encoder.encode(asyncValue);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tyield encodedValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tuseBuffer(buffer) {\n\t\t// this means we are finished using our own buffer and we can write over it safely\n\t\ttarget = buffer\n\t\ttargetView = new DataView(target.buffer, target.byteOffset, target.byteLength)\n\t\tposition = 0\n\t}\n\tclearSharedData() {\n\t\tif (this.structures)\n\t\t\tthis.structures = []\n\t\tif (this.sharedValues)\n\t\t\tthis.sharedValues = undefined\n\t}\n\tupdateSharedData() {\n\t\tlet lastVersion = this.sharedVersion || 0\n\t\tthis.sharedVersion = lastVersion + 1\n\t\tlet structuresCopy = this.structures.slice(0)\n\t\tlet sharedData = new SharedData(structuresCopy, this.sharedValues, this.sharedVersion)\n\t\tlet saveResults = this.saveShared(sharedData,\n\t\t\t\texistingShared => (existingShared && existingShared.version || 0) == lastVersion)\n\t\tif (saveResults === false) {\n\t\t\t// get updated structures and try again if the update failed\n\t\t\tsharedData = this.getShared() || {}\n\t\t\tthis.structures = sharedData.structures || []\n\t\t\tthis.sharedValues = sharedData.packedValues\n\t\t\tthis.sharedVersion = sharedData.version\n\t\t\tthis.structures.nextId = this.structures.length\n\t\t} else {\n\t\t\t// restore structures\n\t\t\tstructuresCopy.forEach((structure, i) => this.structures[i] = structure)\n\t\t}\n\t\t// saveShared may fail to write and reload, or may have reloaded to check compatibility and overwrite saved data, either way load the correct shared data\n\t\treturn saveResults\n\t}\n}\nfunction writeEntityLength(length, majorValue) {\n\tif (length < 0x18)\n\t\ttarget[position++] = majorValue | length\n\telse if (length < 0x100) {\n\t\ttarget[position++] = majorValue | 0x18\n\t\ttarget[position++] = length\n\t} else if (length < 0x10000) {\n\t\ttarget[position++] = majorValue | 0x19\n\t\ttarget[position++] = length >> 8\n\t\ttarget[position++] = length & 0xff\n\t} else {\n\t\ttarget[position++] = majorValue | 0x1a\n\t\ttargetView.setUint32(position, length)\n\t\tposition += 4\n\t}\n\n}\nclass SharedData {\n\tconstructor(structures, values, version) {\n\t\tthis.structures = structures\n\t\tthis.packedValues = values\n\t\tthis.version = version\n\t}\n}\n\nfunction writeArrayHeader(length) {\n\tif (length < 0x18)\n\t\ttarget[position++] = 0x80 | length\n\telse if (length < 0x100) {\n\t\ttarget[position++] = 0x98\n\t\ttarget[position++] = length\n\t} else if (length < 0x10000) {\n\t\ttarget[position++] = 0x99\n\t\ttarget[position++] = length >> 8\n\t\ttarget[position++] = length & 0xff\n\t} else {\n\t\ttarget[position++] = 0x9a\n\t\ttargetView.setUint32(position, length)\n\t\tposition += 4\n\t}\n}\n\nconst BlobConstructor = typeof Blob === 'undefined' ? function(){} : Blob;\nfunction isBlob(object) {\n\tif (object instanceof BlobConstructor)\n\t\treturn true;\n\tlet tag = object[Symbol.toStringTag];\n\treturn tag === 'Blob' || tag === 'File';\n}\nfunction findRepetitiveStrings(value, packedValues) {\n\tswitch(typeof value) {\n\t\tcase 'string':\n\t\t\tif (value.length > 3) {\n\t\t\t\tif (packedValues.objectMap[value] > -1 || packedValues.values.length >= packedValues.maxValues)\n\t\t\t\t\treturn\n\t\t\t\tlet packedStatus = packedValues.get(value)\n\t\t\t\tif (packedStatus) {\n\t\t\t\t\tif (++packedStatus.count == 2) {\n\t\t\t\t\t\tpackedValues.values.push(value)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpackedValues.set(value, {\n\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t})\n\t\t\t\t\tif (packedValues.samplingPackedValues) {\n\t\t\t\t\t\tlet status = packedValues.samplingPackedValues.get(value)\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tstatus.count++\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpackedValues.samplingPackedValues.set(value, {\n\t\t\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'object':\n\t\t\tif (value) {\n\t\t\t\tif (value instanceof Array) {\n\t\t\t\t\tfor (let i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\t\tfindRepetitiveStrings(value[i], packedValues)\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tlet includeKeys = !packedValues.encoder.useRecords\n\t\t\t\t\tfor (var key in value) {\n\t\t\t\t\t\tif (value.hasOwnProperty(key)) {\n\t\t\t\t\t\t\tif (includeKeys)\n\t\t\t\t\t\t\t\tfindRepetitiveStrings(key, packedValues)\n\t\t\t\t\t\t\tfindRepetitiveStrings(value[key], packedValues)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'function': console.log(value)\n\t}\n}\nconst isLittleEndianMachine = new Uint8Array(new Uint16Array([1]).buffer)[0] == 1\nextensionClasses = [ Date, Set, Error, RegExp, Tag, ArrayBuffer,\n\tUint8Array, Uint8ClampedArray, Uint16Array, Uint32Array,\n\ttypeof BigUint64Array == 'undefined' ? function() {} : BigUint64Array, Int8Array, Int16Array, Int32Array,\n\ttypeof BigInt64Array == 'undefined' ? function() {} : BigInt64Array,\n\tFloat32Array, Float64Array, SharedData ]\n\n//Object.getPrototypeOf(Uint8Array.prototype).constructor /*TypedArray*/\nextensions = [{ // Date\n\ttag: 1,\n\tencode(date, encode) {\n\t\tlet seconds = date.getTime() / 1000\n\t\tif ((this.useTimestamp32 || date.getMilliseconds() === 0) && seconds >= 0 && seconds < 0x100000000) {\n\t\t\t// Timestamp 32\n\t\t\ttarget[position++] = 0x1a\n\t\t\ttargetView.setUint32(position, seconds)\n\t\t\tposition += 4\n\t\t} else {\n\t\t\t// Timestamp float64\n\t\t\ttarget[position++] = 0xfb\n\t\t\ttargetView.setFloat64(position, seconds)\n\t\t\tposition += 8\n\t\t}\n\t}\n}, { // Set\n\ttag: 258, // https://github.com/input-output-hk/cbor-sets-spec/blob/master/CBOR_SETS.md\n\tencode(set, encode) {\n\t\tlet array = Array.from(set)\n\t\tencode(array)\n\t}\n}, { // Error\n\ttag: 27, // http://cbor.schmorp.de/generic-object\n\tencode(error, encode) {\n\t\tencode([ error.name, error.message ])\n\t}\n}, { // RegExp\n\ttag: 27, // http://cbor.schmorp.de/generic-object\n\tencode(regex, encode) {\n\t\tencode([ 'RegExp', regex.source, regex.flags ])\n\t}\n}, { // Tag\n\tgetTag(tag) {\n\t\treturn tag.tag\n\t},\n\tencode(tag, encode) {\n\t\tencode(tag.value)\n\t}\n}, { // ArrayBuffer\n\tencode(arrayBuffer, encode, makeRoom) {\n\t\twriteBuffer(arrayBuffer, makeRoom)\n\t}\n}, { // Uint8Array\n\tgetTag(typedArray) {\n\t\tif (typedArray.constructor === Uint8Array) {\n\t\t\tif (this.tagUint8Array || hasNodeBuffer && this.tagUint8Array !== false)\n\t\t\t\treturn 64;\n\t\t} // else no tag\n\t},\n\tencode(typedArray, encode, makeRoom) {\n\t\twriteBuffer(typedArray, makeRoom)\n\t}\n},\n\ttypedArrayEncoder(68, 1),\n\ttypedArrayEncoder(69, 2),\n\ttypedArrayEncoder(70, 4),\n\ttypedArrayEncoder(71, 8),\n\ttypedArrayEncoder(72, 1),\n\ttypedArrayEncoder(77, 2),\n\ttypedArrayEncoder(78, 4),\n\ttypedArrayEncoder(79, 8),\n\ttypedArrayEncoder(85, 4),\n\ttypedArrayEncoder(86, 8),\n{\n\tencode(sharedData, encode) { // write SharedData\n\t\tlet packedValues = sharedData.packedValues || []\n\t\tlet sharedStructures = sharedData.structures || []\n\t\tif (packedValues.values.length > 0) {\n\t\t\ttarget[position++] = 0xd8 // one-byte tag\n\t\t\ttarget[position++] = 51 // tag 51 for packed shared structures https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\twriteArrayHeader(4)\n\t\t\tlet valuesArray = packedValues.values\n\t\t\tencode(valuesArray)\n\t\t\twriteArrayHeader(0) // prefixes\n\t\t\twriteArrayHeader(0) // suffixes\n\t\t\tpackedObjectMap = Object.create(sharedPackedObjectMap || null)\n\t\t\tfor (let i = 0, l = valuesArray.length; i < l; i++) {\n\t\t\t\tpackedObjectMap[valuesArray[i]] = i\n\t\t\t}\n\t\t}\n\t\tif (sharedStructures) {\n\t\t\ttargetView.setUint32(position, 0xd9dffe00)\n\t\t\tposition += 3\n\t\t\tlet definitions = sharedStructures.slice(0)\n\t\t\tdefinitions.unshift(0xe000)\n\t\t\tdefinitions.push(new Tag(sharedData.version, 0x53687264))\n\t\t\tencode(definitions)\n\t\t} else\n\t\t\tencode(new Tag(sharedData.version, 0x53687264))\n\t\t}\n\t}]\nfunction typedArrayEncoder(tag, size) {\n\tif (!isLittleEndianMachine && size > 1)\n\t\ttag -= 4 // the big endian equivalents are 4 less\n\treturn {\n\t\ttag: tag,\n\t\tencode: function writeExtBuffer(typedArray, encode) {\n\t\t\tlet length = typedArray.byteLength\n\t\t\tlet offset = typedArray.byteOffset || 0\n\t\t\tlet buffer = typedArray.buffer || typedArray\n\t\t\tencode(hasNodeBuffer ? Buffer.from(buffer, offset, length) :\n\t\t\t\tnew Uint8Array(buffer, offset, length))\n\t\t}\n\t}\n}\nfunction writeBuffer(buffer, makeRoom) {\n\tlet length = buffer.byteLength\n\tif (length < 0x18) {\n\t\ttarget[position++] = 0x40 + length\n\t} else if (length < 0x100) {\n\t\ttarget[position++] = 0x58\n\t\ttarget[position++] = length\n\t} else if (length < 0x10000) {\n\t\ttarget[position++] = 0x59\n\t\ttarget[position++] = length >> 8\n\t\ttarget[position++] = length & 0xff\n\t} else {\n\t\ttarget[position++] = 0x5a\n\t\ttargetView.setUint32(position, length)\n\t\tposition += 4\n\t}\n\tif (position + length >= target.length) {\n\t\tmakeRoom(position + length)\n\t}\n\t// if it is already a typed array (has an ArrayBuffer), use that, but if it is an ArrayBuffer itself,\n\t// must wrap it to set it.\n\ttarget.set(buffer.buffer ? buffer : new Uint8Array(buffer), position)\n\tposition += length\n}\n\nfunction insertIds(serialized, idsToInsert) {\n\t// insert the ids that need to be referenced for structured clones\n\tlet nextId\n\tlet distanceToMove = idsToInsert.length * 2\n\tlet lastEnd = serialized.length - distanceToMove\n\tidsToInsert.sort((a, b) => a.offset > b.offset ? 1 : -1)\n\tfor (let id = 0; id < idsToInsert.length; id++) {\n\t\tlet referee = idsToInsert[id]\n\t\treferee.id = id\n\t\tfor (let position of referee.references) {\n\t\t\tserialized[position++] = id >> 8\n\t\t\tserialized[position] = id & 0xff\n\t\t}\n\t}\n\twhile (nextId = idsToInsert.pop()) {\n\t\tlet offset = nextId.offset\n\t\tserialized.copyWithin(offset + distanceToMove, offset, lastEnd)\n\t\tdistanceToMove -= 2\n\t\tlet position = offset + distanceToMove\n\t\tserialized[position++] = 0xd8\n\t\tserialized[position++] = 28 // http://cbor.schmorp.de/value-sharing\n\t\tlastEnd = offset\n\t}\n\treturn serialized\n}\nfunction writeBundles(start, encode) {\n\ttargetView.setUint32(bundledStrings.position + start, position - bundledStrings.position - start + 1) // the offset to bundle\n\tlet writeStrings = bundledStrings\n\tbundledStrings = null\n\tencode(writeStrings[0])\n\tencode(writeStrings[1])\n}\n\nexport function addExtension(extension) {\n\tif (extension.Class) {\n\t\tif (!extension.encode)\n\t\t\tthrow new Error('Extension has no encode function')\n\t\textensionClasses.unshift(extension.Class)\n\t\textensions.unshift(extension)\n\t}\n\tdecodeAddExtension(extension)\n}\nlet defaultEncoder = new Encoder({ useRecords: false })\nexport const encode = defaultEncoder.encode\nexport const encodeAsIterable = defaultEncoder.encodeAsIterable\nexport const encodeAsAsyncIterable = defaultEncoder.encodeAsAsyncIterable\nexport { FLOAT32_OPTIONS } from './decode.js'\nimport { FLOAT32_OPTIONS } from './decode.js'\nexport const { NEVER, ALWAYS, DECIMAL_ROUND, DECIMAL_FIT } = FLOAT32_OPTIONS\nexport const REUSE_BUFFER_MODE = 512\nexport const RESET_BUFFER_MODE = 1024\nexport const THROW_ON_ITERABLE = 2048\n\n\n","import * as Automerge from \"@automerge/automerge/slim\";\nimport { encodeHeads, decodeHeads } from \"../AutomergeUrl.js\";\nimport { KIND } from \"./types.js\";\nimport { isSegment, isPattern } from \"./guards.js\";\nimport { matchesPattern } from \"./utils.js\";\nimport { isCursorMarker } from \"./guards.js\";\nimport { stringifyRefUrl } from \"./parser.js\";\nimport { MutableText } from \"./mutable-text.js\";\n/**\n * FinalizationRegistry for automatic cleanup of Ref instances.\n * This ensures subscriptions are cleaned up when Refs are garbage collected,\n * even if dispose() is never called.\n */\nconst refCleanupRegistry = new FinalizationRegistry(cleanup => cleanup());\n/**\n * Internal implementation of the Ref interface.\n *\n * Refs are stable by default - they track objects by ID, not position.\n *\n * Cleanup: Refs automatically clean up their subscriptions when garbage collected.\n *\n * @internal Use DocHandle.ref() to create refs, not this class directly.\n */\nexport class RefImpl {\n docHandle;\n path;\n range;\n #onChangeCallbacks = new Set();\n #updateHandler;\n constructor(docHandle, segments) {\n this.docHandle = docHandle;\n const doc = docHandle.doc();\n const { path, range } = this.#normalizePath(doc, segments);\n this.path = path;\n this.range = range;\n this.#updateHandler = () => {\n const currentDoc = this.docHandle.doc();\n this.#updateProps(currentDoc);\n };\n this.docHandle.on(\"change\", this.#updateHandler);\n // Register for automatic cleanup when this Ref is garbage collected\n refCleanupRegistry.register(this, () => this.#cleanup(), this);\n }\n #cleanup() {\n this.docHandle.off(\"change\", this.#updateHandler);\n for (const callback of this.#onChangeCallbacks) {\n this.docHandle.off(\"change\", callback);\n }\n this.#onChangeCallbacks.clear();\n }\n get rangePositions() {\n if (!this.range)\n return undefined;\n const propPath = this.#getPropPath();\n if (!propPath)\n return undefined;\n const doc = this.doc();\n return this.#getRangePositions(doc, propPath, this.range);\n }\n viewAt(heads) {\n const viewHandle = this.docHandle.view(encodeHeads(heads));\n return viewHandle.ref(...this.path);\n }\n value() {\n const doc = this.doc();\n const propPath = this.#getPropPath();\n if (!propPath)\n return undefined;\n const value = this.#getValueAt(doc, propPath);\n return (this.range ? this.#extractRange(doc, propPath, value, this.range) : value);\n }\n doc() {\n return this.docHandle.doc();\n }\n change(fnOrValue) {\n if (this.docHandle.isReadOnly()) {\n throw new Error(\"Cannot change a Ref on a read-only handle\");\n }\n // Convert direct value to function form\n const fn = typeof fnOrValue === \"function\"\n ? fnOrValue\n : () => fnOrValue;\n this.docHandle.change((doc) => {\n if (this.path.length === 0 && !this.range) {\n fn(doc);\n return;\n }\n const propPath = this.#getPropPath();\n if (!propPath)\n throw new Error(\"Cannot resolve path\");\n let current;\n if (this.range) {\n const parent = this.#getValueAt(doc, propPath);\n if (typeof parent !== \"string\") {\n throw new Error(\"Range refs can only be used on string values\");\n }\n current = this.#extractRange(doc, propPath, parent, this.range);\n }\n else {\n current = this.#getValueAt(doc, propPath);\n }\n // If current is a string, wrap it in MutableText\n const valueToPass = typeof current === \"string\"\n ? MutableText(doc, propPath, current)\n : current;\n const newValue = fn(valueToPass);\n if (newValue === undefined)\n return;\n // Warn if non-primitive value is returned (should mutate instead)\n if (!(newValue === null ||\n typeof newValue === \"string\" ||\n typeof newValue === \"number\" ||\n typeof newValue === \"boolean\" ||\n typeof newValue === \"bigint\")) {\n console.warn(\"Ref.change() returned a non-primitive value. For objects and arrays, \" +\n \"you should mutate them in place rather than returning a new instance. \" +\n \"Returning new instances loses granular change tracking.\");\n }\n if (this.range) {\n this.#spliceRange(doc, propPath, this.range, newValue);\n }\n else {\n this.#setValueAt(doc, propPath, newValue);\n }\n });\n }\n remove() {\n if (this.docHandle.isReadOnly()) {\n throw new Error(\"Cannot remove from a Ref on a read-only handle\");\n }\n if (this.path.length === 0 && !this.range) {\n throw new Error(\"Cannot remove the root document\");\n }\n this.docHandle.change((doc) => {\n const propPath = this.#getPropPath();\n if (!propPath || propPath.length === 0) {\n throw new Error(\"Cannot resolve path for removal\");\n }\n // Handle range refs - delete the text within the range\n if (this.range) {\n this.#spliceRange(doc, propPath, this.range, \"\");\n return;\n }\n const parentPath = propPath.slice(0, -1);\n const key = propPath[propPath.length - 1];\n const parent = parentPath.length === 0 ? doc : this.#getValueAt(doc, parentPath);\n if (parent == null) {\n throw new Error(\"Cannot remove: parent is null or undefined\");\n }\n if (Array.isArray(parent)) {\n if (typeof key !== \"number\") {\n throw new Error(\"Cannot remove from array: key is not a number\");\n }\n parent.splice(key, 1);\n }\n else {\n delete parent[key];\n }\n });\n }\n onChange(callback) {\n const wrappedCallback = (payload) => {\n if (this.#patchAffectsRef(payload.patches)) {\n const value = this.value();\n callback(value, payload);\n }\n };\n this.docHandle.on(\"change\", wrappedCallback);\n // Track this callback so it can be cleaned up in dispose()\n this.#onChangeCallbacks.add(wrappedCallback);\n const unsubscribe = () => {\n this.docHandle.off(\"change\", wrappedCallback);\n this.#onChangeCallbacks.delete(wrappedCallback);\n };\n return unsubscribe;\n }\n get url() {\n const allSegments = this.range\n ? [...this.path, this.range]\n : this.path;\n // Include heads in URL only for read-only (time-traveled) handles\n const heads = this.docHandle.isReadOnly()\n ? decodeHeads(this.docHandle.heads())\n : undefined;\n return stringifyRefUrl(this.docHandle.documentId, allSegments, heads);\n }\n equals(other) {\n return this.url === other.url;\n }\n contains(other) {\n // Must be same document\n if (this.docHandle.documentId !== other.docHandle.documentId) {\n return false;\n }\n // Must have same heads (compare handle URLs which include heads for read-only handles)\n if (this.docHandle.url !== other.docHandle.url) {\n return false;\n }\n // This path must be a prefix of other's path\n if (this.path.length >= other.path.length) {\n return false;\n }\n // Check if all segments match\n for (let i = 0; i < this.path.length; i++) {\n if (!this.#segmentsEqual(this.path[i], other.path[i])) {\n return false;\n }\n }\n return true;\n }\n isChildOf(parent) {\n // Must be same document\n if (this.docHandle.documentId !== parent.docHandle.documentId) {\n return false;\n }\n // Must have same heads (compare handle URLs which include heads for read-only handles)\n if (this.docHandle.url !== parent.docHandle.url) {\n return false;\n }\n // Check if paths match up to parent's length\n if (this.path.length < parent.path.length) {\n return false;\n }\n // All of parent's path segments must match\n for (let i = 0; i < parent.path.length; i++) {\n if (!this.#segmentsEqual(this.path[i], parent.path[i])) {\n return false;\n }\n }\n // Case 1: Same path length - only valid if this has a range and parent doesn't\n // (this is a range child of text)\n if (this.path.length === parent.path.length) {\n return this.range !== undefined && parent.range === undefined;\n }\n // Case 2: Path is exactly one segment longer (direct child)\n if (this.path.length === parent.path.length + 1) {\n return true;\n }\n // Case 3: Path is more than one segment longer (not a direct child)\n return false;\n }\n overlaps(other) {\n // Must be same document\n if (this.docHandle.documentId !== other.docHandle.documentId) {\n return false;\n }\n // Must have same heads (compare handle URLs which include heads for read-only handles)\n if (this.docHandle.url !== other.docHandle.url) {\n return false;\n }\n // Both must have ranges\n if (!this.range || !other.range) {\n return false;\n }\n // Paths must be identical (same parent location)\n if (this.path.length !== other.path.length) {\n return false;\n }\n for (let i = 0; i < this.path.length; i++) {\n if (!this.#segmentsEqual(this.path[i], other.path[i])) {\n return false;\n }\n }\n // Check if ranges overlap\n // Get the numeric positions for both ranges\n const doc = this.doc();\n const propPath = this.#getPropPath();\n if (!propPath)\n return false;\n const thisPositions = this.#getRangePositions(doc, propPath, this.range);\n const otherPositions = this.#getRangePositions(doc, propPath, other.range);\n if (!thisPositions || !otherPositions)\n return false;\n const [thisStart, thisEnd] = thisPositions;\n const [otherStart, otherEnd] = otherPositions;\n // Ranges overlap if: thisStart < otherEnd && otherStart < thisEnd\n return thisStart < otherEnd && otherStart < thisEnd;\n }\n isEquivalent(other) {\n // Fast path: identity check\n if (this === other) {\n return true;\n }\n // Different documents can't be equivalent\n if (this.docHandle.documentId !== other.docHandle.documentId) {\n return false;\n }\n // Check heads equivalence\n // undefined heads means \"current document state\"\n // If one has undefined and other has explicit heads, check if they match current\n if (!this.#headsEquivalent(other)) {\n return false;\n }\n // Different path lengths can't be equivalent\n if (this.path.length !== other.path.length) {\n return false;\n }\n // Check range presence mismatch\n if ((this.range === undefined) !== (other.range === undefined)) {\n return false;\n }\n // Fast path: if segments are structurally equal, they're equivalent\n let segmentsEqual = true;\n for (let i = 0; i < this.path.length; i++) {\n if (!this.#segmentsEqual(this.path[i], other.path[i])) {\n segmentsEqual = false;\n break;\n }\n }\n if (segmentsEqual) {\n // Same path structure, now check ranges\n if (!this.range && !other.range) {\n return true;\n }\n // Both have ranges (checked above), compare them\n return (this.range.start === other.range.start &&\n this.range.end === other.range.end);\n }\n // Segments differ structurally - check if they resolve to the same prop path\n // Note: we access other.path[i].prop directly (public) instead of calling\n // private methods on other, since other may be from a different bundle\n for (let i = 0; i < this.path.length; i++) {\n const thisProp = this.path[i].prop;\n const otherProp = other.path[i].prop;\n // If either can't be resolved, they're not equivalent\n if (thisProp === undefined || otherProp === undefined) {\n return false;\n }\n if (thisProp !== otherProp) {\n return false;\n }\n }\n // Prop paths match, now check ranges\n if (!this.range && !other.range) {\n return true;\n }\n // Both have ranges - compare cursor values\n return (this.range.start === other.range.start &&\n this.range.end === other.range.end);\n }\n valueOf() {\n return this.url;\n }\n toString() {\n return this.url;\n }\n /**\n * Check if this ref's heads are equivalent to another ref's heads.\n * A ref on a non-read-only handle represents \"current document state\",\n * so it's equivalent to a ref on a read-only handle with heads matching the current document.\n */\n #headsEquivalent(other) {\n // If both handles have the same URL (including heads for read-only handles), they're equivalent\n if (this.docHandle.url === other.docHandle.url) {\n return true;\n }\n // Get effective heads for each - use handle's heads (which is current for non-read-only)\n const thisHeadsStr = this.docHandle.heads().join(\",\");\n const otherHeadsStr = other.docHandle.heads().join(\",\");\n return thisHeadsStr === otherHeadsStr;\n }\n /**\n * Normalize path inputs and extract stable IDs where possible.\n */\n #normalizePath(doc, inputs) {\n const pathSegments = [];\n const propPath = [];\n let current = doc;\n let rangeSegment;\n for (let i = 0; i < inputs.length; i++) {\n const input = inputs[i];\n // Handle cursor() marker - creates cursor-based range\n if (isCursorMarker(input)) {\n // cursor() must be the last segment\n if (i < inputs.length - 1) {\n throw new Error(\"cursor() must be the last segment in a ref path. \" +\n \"Segments after cursor() are not allowed.\");\n }\n rangeSegment = this.#createCursorRange(doc, propPath, current, input);\n break;\n }\n const segment = isSegment(input)\n ? this.#ensureSegmentResolved(current, input)\n : this.#normalizeInput(current, input);\n if (segment[KIND] === \"cursors\") {\n // Cursor range from URL parsing - must also be last\n if (i < inputs.length - 1) {\n throw new Error(\"Cursor range must be the last segment in a ref path. \" +\n \"Segments after cursor range are not allowed.\");\n }\n rangeSegment = segment;\n break;\n }\n pathSegments.push(segment);\n if (segment.prop !== undefined &&\n current !== undefined &&\n current !== null) {\n propPath.push(segment.prop);\n current = current[segment.prop];\n }\n }\n return { path: pathSegments, range: rangeSegment };\n }\n /** Ensure a segment has its prop set */\n #ensureSegmentResolved(container, segment) {\n const prop = this.#resolveSegmentProp(container, segment);\n return { ...segment, prop };\n }\n /**\n * Resolve a path segment to its Automerge prop.\n * Returns undefined if the segment cannot be resolved.\n */\n #resolveSegmentProp(container, segment) {\n if (container === undefined || container === null)\n return undefined;\n switch (segment[KIND]) {\n case \"key\":\n return segment.key;\n case \"index\":\n return segment.index;\n case \"match\": {\n if (!Array.isArray(container))\n return undefined;\n const matchIndex = container.findIndex(item => matchesPattern(item, segment.match));\n return matchIndex !== -1 ? matchIndex : undefined;\n }\n case \"cursors\":\n return undefined;\n default:\n segment;\n return undefined;\n }\n }\n /** Update resolved props for all path segments based on current document state */\n #updateProps(doc) {\n let current = doc;\n for (const segment of this.path) {\n const prop = this.#resolveSegmentProp(current, segment);\n // Internal mutation: Update cached prop for efficient path resolution.\n // Safe because segments are owned by this Ref instance.\n segment.prop = prop;\n if (prop !== undefined && current !== undefined && current !== null) {\n current = current[prop];\n }\n else {\n break;\n }\n }\n }\n /**\n * Check if two PathSegments are equal.\n * Used by `contains` and `overlaps` methods.\n */\n #segmentsEqual(a, b) {\n if (a[KIND] !== b[KIND]) {\n return false;\n }\n switch (a[KIND]) {\n case \"key\":\n return a.key === b.key;\n case \"index\":\n return a.index === b.index;\n case \"match\": {\n const aKeys = Object.keys(a.match);\n const bKeys = Object.keys(b.match);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every(key => a.match[key] === b.match[key]);\n }\n default:\n a;\n return false;\n }\n }\n #normalizeInput(container, input) {\n if (typeof input === \"string\") {\n return { [KIND]: \"key\", key: input, prop: input };\n }\n if (typeof input === \"number\") {\n return { [KIND]: \"index\", index: input, prop: input };\n }\n if (isPattern(input)) {\n if (!Array.isArray(container)) {\n return { [KIND]: \"match\", match: input, prop: undefined };\n }\n const index = container.findIndex(obj => matchesPattern(obj, input));\n return {\n [KIND]: \"match\",\n match: input,\n prop: index !== -1 ? index : undefined,\n };\n }\n throw new Error(`Unsupported path input type: ${typeof input}. ` +\n `Expected string, number, or plain object.`);\n }\n /** Create a cursor-based range from a CursorMarker */\n #createCursorRange(doc, propPath, container, marker) {\n const { start, end } = marker;\n if (typeof container !== \"string\") {\n throw new Error(`cursor() can only be used on string values, got ${typeof container}`);\n }\n const startCursor = Automerge.getCursor(doc, propPath, start);\n const endCursor = Automerge.getCursor(doc, propPath, end);\n if (!startCursor || !endCursor) {\n throw new Error(`Failed to create cursors at positions ${start}-${end}.`);\n }\n return { [KIND]: \"cursors\", start: startCursor, end: endCursor };\n }\n /** Extract cached navigation path from segments */\n #getPropPath() {\n const props = [];\n for (const segment of this.path) {\n if (segment.prop === undefined)\n return undefined;\n props.push(segment.prop);\n }\n return props;\n }\n /** Navigate to a value by following a prop path */\n #getValueAt(container, propPath) {\n let current = container;\n for (const prop of propPath) {\n if (current == null)\n return undefined;\n current = current[prop];\n }\n return current;\n }\n /** Extract substring from a text value using a range */\n #extractRange(doc, propPath, text, range) {\n const positions = this.#getRangePositions(doc, propPath, range);\n if (!positions)\n return undefined;\n return text.slice(positions[0], positions[1]);\n }\n /** Set a value at a prop path (change-only: mutates the doc proxy) */\n #setValueAt(container, propPath, value) {\n if (propPath.length === 0) {\n throw new Error(\"Internal error: #setValueAt called with empty path. \" +\n \"Root document changes should be handled by the caller.\");\n }\n const parent = this.#getValueAt(container, propPath.slice(0, -1));\n if (parent == null) {\n throw new Error(\"Cannot set value: parent is null or undefined\");\n }\n parent[propPath[propPath.length - 1]] = value;\n }\n /** Replace a substring at a range using Automerge.splice (change-only: mutates the doc proxy) */\n #spliceRange(doc, propPath, range, newValue) {\n const positions = this.#getRangePositions(doc, propPath, range);\n if (!positions) {\n throw new Error(\"Cannot resolve range positions\");\n }\n const [start, end] = positions;\n Automerge.splice(doc, propPath, start, end - start, newValue);\n }\n /** Convert cursor positions to numeric [start, end] positions */\n #getRangePositions(doc, propPath, range) {\n const start = Automerge.getCursorPosition(doc, propPath, range.start);\n const end = Automerge.getCursorPosition(doc, propPath, range.end);\n return start !== undefined && end !== undefined ? [start, end] : undefined;\n }\n #patchAffectsRef(patches) {\n const refPropPath = [];\n for (const segment of this.path) {\n if (segment.prop === undefined)\n break;\n refPropPath.push(segment.prop);\n }\n // If we couldn't resolve any part, ref was never valid - don't fire\n if (refPropPath.length === 0)\n return false;\n return patches.some(patch => this.#pathsOverlap(patch.path, refPropPath));\n }\n #pathsOverlap(patchPath, refPropPath) {\n const minLength = Math.min(patchPath.length, refPropPath.length);\n return patchPath\n .slice(0, minLength)\n .every((prop, i) => prop === refPropPath[i]);\n }\n}\n","(function (root, factory) {\n // Hack to make all exports of this module sha256 function object properties.\n var exports = {};\n factory(exports);\n var sha256 = exports[\"default\"];\n for (var k in exports) {\n sha256[k] = exports[k];\n }\n \n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = sha256;\n } else if (typeof define === 'function' && define.amd) {\n define(function() { return sha256; }); \n } else {\n root.sha256 = sha256;\n }\n})(this, function(exports) {\n\"use strict\";\nexports.__esModule = true;\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nexports.digestLength = 32;\nexports.blockSize = 64;\n// SHA-256 constants\nvar K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n var a, b, c, d, e, f, g, h, u, i, j, t1, t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nvar Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = exports.digestLength;\n this.blockSize = exports.blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n var dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n var bytesHashed = this.bytesHashed;\n var left = this.bufferLength;\n var bitLenHi = (bytesHashed / 0x20000000) | 0;\n var bitLenLo = bytesHashed << 3;\n var padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (var i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (var i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (var i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (var i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nexports.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nvar HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n var pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n }\n else {\n for (var i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (var i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (var i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n }\n else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nexports.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n var h = (new Hash()).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hash = hash;\n// Function hash is both available as module.hash and as default export.\nexports[\"default\"] = hash;\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n var h = (new HMAC(key)).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n var num = counter[0];\n if (num === 0) {\n throw new Error(\"hkdf: cannot expand more\");\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nvar hkdfSalt = new Uint8Array(exports.digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n var counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n var okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n var hmac_ = new HMAC(okm);\n // Allocate buffer.\n var buffer = new Uint8Array(hmac_.digestLength);\n var bufpos = buffer.length;\n var out = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nexports.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n var prf = new HMAC(password);\n var len = prf.digestLength;\n var ctr = new Uint8Array(4);\n var t = new Uint8Array(len);\n var u = new Uint8Array(len);\n var dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n var c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (var k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nexports.pbkdf2 = pbkdf2;\n});\n","import debug from \"debug\";\nimport { parseAutomergeUrl } from \"../AutomergeUrl.js\";\nimport { DocSynchronizer } from \"./DocSynchronizer.js\";\nimport { Synchronizer } from \"./Synchronizer.js\";\nconst log = debug(\"automerge-repo:collectionsync\");\n/** A CollectionSynchronizer is responsible for synchronizing a DocCollection with peers. */\nexport class CollectionSynchronizer extends Synchronizer {\n repo;\n /** The set of peers we are connected with */\n #peers = new Set();\n /** A map of documentIds to their synchronizers */\n /** @hidden */\n docSynchronizers = {};\n /** Used to determine if the document is know to the Collection and a synchronizer exists or is being set up */\n #docSetUp = {};\n #denylist;\n #hasRequested = new Map();\n constructor(repo, denylist = []) {\n super();\n this.repo = repo;\n this.#denylist = denylist.map(url => parseAutomergeUrl(url).documentId);\n }\n /** Returns a synchronizer for the given document, creating one if it doesn't already exist. */\n #fetchDocSynchronizer(handle) {\n if (!this.docSynchronizers[handle.documentId]) {\n this.docSynchronizers[handle.documentId] =\n this.#initDocSynchronizer(handle);\n }\n return this.docSynchronizers[handle.documentId];\n }\n /** Creates a new docSynchronizer and sets it up to propagate messages */\n #initDocSynchronizer(handle) {\n const docSynchronizer = new DocSynchronizer({\n handle,\n peerId: this.repo.networkSubsystem.peerId,\n onLoadSyncState: async (peerId) => {\n if (!this.repo.storageSubsystem) {\n return;\n }\n const { storageId, isEphemeral } = this.repo.peerMetadataByPeerId[peerId] || {};\n if (!storageId || isEphemeral) {\n return;\n }\n return this.repo.storageSubsystem.loadSyncState(handle.documentId, storageId);\n },\n });\n docSynchronizer.on(\"message\", event => this.emit(\"message\", event));\n docSynchronizer.on(\"open-doc\", event => this.emit(\"open-doc\", event));\n docSynchronizer.on(\"sync-state\", event => this.emit(\"sync-state\", event));\n docSynchronizer.on(\"metrics\", event => this.emit(\"metrics\", event));\n return docSynchronizer;\n }\n /** returns an array of peerIds that we share this document generously with */\n async #documentGenerousPeers(documentId) {\n const peers = Array.from(this.#peers);\n const generousPeers = [];\n for (const peerId of peers) {\n const okToShare = await this.#shouldShare(peerId, documentId);\n if (okToShare)\n generousPeers.push(peerId);\n }\n return generousPeers;\n }\n // PUBLIC\n /**\n * When we receive a sync message for a document we haven't got in memory, we\n * register it with the repo and start synchronizing\n */\n async receiveMessage(message) {\n log(`onSyncMessage: ${message.senderId}, ${message.documentId}, ${\"data\" in message ? message.data.byteLength + \"bytes\" : \"\"}`);\n const documentId = message.documentId;\n if (!documentId) {\n throw new Error(\"received a message with an invalid documentId\");\n }\n if (this.#denylist.includes(documentId)) {\n this.emit(\"metrics\", {\n type: \"doc-denied\",\n documentId,\n });\n this.emit(\"message\", {\n type: \"doc-unavailable\",\n documentId,\n targetId: message.senderId,\n });\n return;\n }\n // Record the request so that even if access is denied now, we know that the\n // peer requested the document so that if the share policy changes we know\n // to begin syncing with this peer\n if (message.type === \"request\") {\n if (!this.#hasRequested.has(documentId)) {\n this.#hasRequested.set(documentId, new Set());\n }\n this.#hasRequested.get(documentId)?.add(message.senderId);\n }\n const hasAccess = await this.repo.shareConfig.access(message.senderId, documentId);\n if (!hasAccess) {\n log(\"access denied\");\n this.emit(\"message\", {\n type: \"doc-unavailable\",\n documentId,\n targetId: message.senderId,\n });\n return;\n }\n this.#docSetUp[documentId] = true;\n const handle = await this.repo.find(documentId, {\n allowableStates: [\"ready\", \"unavailable\", \"requesting\"],\n });\n const docSynchronizer = this.#fetchDocSynchronizer(handle);\n docSynchronizer.receiveMessage(message);\n // Initiate sync with any new peers\n const peers = await this.#documentGenerousPeers(documentId);\n void docSynchronizer.beginSync(peers.filter(peerId => !docSynchronizer.hasPeer(peerId)));\n }\n /**\n * Starts synchronizing the given document with all peers that we share it generously with.\n */\n addDocument(handle) {\n // HACK: this is a hack to prevent us from adding the same document twice\n if (this.#docSetUp[handle.documentId]) {\n return;\n }\n this.#docSetUp[handle.documentId] = true;\n const docSynchronizer = this.#fetchDocSynchronizer(handle);\n void this.#documentGenerousPeers(handle.documentId).then(peers => {\n void docSynchronizer.beginSync(peers);\n });\n }\n /** Removes a document and stops synchronizing them */\n removeDocument(documentId) {\n log(`removing document ${documentId}`);\n const docSynchronizer = this.docSynchronizers[documentId];\n if (docSynchronizer !== undefined) {\n this.peers.forEach(peerId => docSynchronizer.endSync(peerId));\n }\n delete this.docSynchronizers[documentId];\n delete this.#docSetUp[documentId];\n }\n /** Adds a peer and maybe starts synchronizing with them */\n addPeer(peerId) {\n log(`adding ${peerId} & synchronizing with them`);\n if (this.#peers.has(peerId)) {\n return;\n }\n this.#peers.add(peerId);\n for (const docSynchronizer of Object.values(this.docSynchronizers)) {\n const { documentId } = docSynchronizer;\n void this.#shouldShare(peerId, documentId).then(okToShare => {\n if (okToShare)\n void docSynchronizer.beginSync([peerId]);\n });\n }\n }\n /** Removes a peer and stops synchronizing with them */\n removePeer(peerId) {\n log(`removing peer ${peerId}`);\n this.#peers.delete(peerId);\n for (const requested of this.#hasRequested.values()) {\n requested.delete(peerId);\n }\n for (const docSynchronizer of Object.values(this.docSynchronizers)) {\n docSynchronizer.endSync(peerId);\n }\n }\n /** Returns a list of all connected peer ids */\n get peers() {\n return Array.from(this.#peers);\n }\n /**\n * Re-evaluates share policy for a document and updates sync accordingly\n *\n * @remarks\n * This is called when the share policy for a document has changed. It re-evaluates\n * which peers should have access and starts/stops synchronization as needed.\n */\n async reevaluateDocumentShare() {\n const peers = Array.from(this.#peers);\n const docPromises = [];\n for (const docSynchronizer of Object.values(this.docSynchronizers)) {\n const documentId = docSynchronizer.documentId;\n docPromises.push((async () => {\n for (const peerId of peers) {\n const shouldShare = await this.#shouldShare(peerId, documentId);\n const isAlreadySyncing = docSynchronizer.hasPeer(peerId);\n log(`reevaluateDocumentShare: ${peerId} for ${documentId}, shouldShare: ${shouldShare}, isAlreadySyncing: ${isAlreadySyncing}`);\n if (shouldShare && !isAlreadySyncing) {\n log(`reevaluateDocumentShare: starting sync with ${peerId} for ${documentId}`);\n void docSynchronizer.beginSync([peerId]);\n }\n else if (!shouldShare && isAlreadySyncing) {\n log(`reevaluateDocumentShare: stopping sync with ${peerId} for ${documentId}`);\n docSynchronizer.endSync(peerId);\n }\n }\n })().catch(e => {\n console.log(`error reevaluating document share for ${documentId}: ${e}`);\n }));\n }\n await Promise.allSettled(docPromises);\n }\n metrics() {\n return Object.fromEntries(Object.entries(this.docSynchronizers).map(([documentId, synchronizer]) => {\n return [documentId, synchronizer.metrics()];\n }));\n }\n async #shouldShare(peerId, documentId) {\n const [announce, access] = await Promise.all([\n this.repo.shareConfig.announce(peerId, documentId),\n this.repo.shareConfig.access(peerId, documentId),\n ]);\n const hasRequested = this.#hasRequested.get(documentId)?.has(peerId) ?? false;\n return announce || (access && hasRequested);\n }\n}\n","export const DEFAULT_HEARTBEAT_INTERVAL_MS = 15_000;\nexport const DEFAULT_PEER_TTL_MS = 3 * DEFAULT_HEARTBEAT_INTERVAL_MS;\nexport const PRESENCE_MESSAGE_MARKER = \"__presence\";\n","export function unique(items) {\n return Array.from(new Set(items));\n}\n","import { unique } from \"../helpers/array.js\";\nexport class PeerStateView {\n value;\n constructor(value) {\n this.value = value;\n }\n /**\n * Get all users.\n *\n * @returns Array of user presence {@link State}s\n */\n get users() {\n const userIds = unique(Object.values(this.value).map(peerState => peerState.userId));\n return userIds.map(u => this.getUserState(u));\n }\n /**\n * Get all devices.\n *\n * @returns Array of device presence {@link State}s\n */\n get devices() {\n const deviceIds = unique(Object.values(this.value).map(peerState => peerState.deviceId));\n return deviceIds.map(d => this.getDeviceState(d));\n }\n /**\n * Get all peers.\n *\n * @returns Array of peer presence {@link State}s\n */\n get peers() {\n return Object.values(this.value);\n }\n /**\n * Get all peer ids for this user.\n *\n * @param userId\n * @returns Array of peer ids for this user\n */\n getUserPeers(userId) {\n return Object.values(this.value)\n .filter(peerState => peerState.userId === userId)\n .map(peerState => peerState.peerId);\n }\n /**\n * Get all peers for this device.\n *\n * @param deviceId\n * @returns Array of peer ids for this device\n */\n getDevicePeers(deviceId) {\n return Object.values(this.value)\n .filter(peerState => peerState.deviceId === deviceId)\n .map(peerState => peerState.peerId);\n }\n /**\n * Return the most-recently-seen peer from this group.\n *\n * @param peers\n * @returns id of most recently seen peer\n */\n getLastSeenPeer(peers) {\n let freshestLastSeenAt;\n return peers.reduce((freshest, curr) => {\n const lastSeenAt = this.value[curr]?.lastSeenAt;\n if (!lastSeenAt) {\n return freshest;\n }\n if (!freshest || lastSeenAt > freshestLastSeenAt) {\n freshestLastSeenAt = lastSeenAt;\n return curr;\n }\n return freshest;\n }, undefined);\n }\n /**\n * Return the peer from this group that sent a state update most recently\n *\n * @param peers\n * @returns id of most recently seen peer\n */\n getLastActivePeer(peers) {\n let freshestLastActiveAt;\n return peers.reduce((freshest, curr) => {\n const lastActiveAt = this.value[curr]?.lastActiveAt;\n if (!lastActiveAt) {\n return freshest;\n }\n if (!freshest || lastActiveAt > freshestLastActiveAt) {\n freshestLastActiveAt = lastActiveAt;\n return curr;\n }\n return freshest;\n }, undefined);\n }\n /**\n * Get current ephemeral state value for this user's most-recently-active\n * peer.\n *\n * @param userId\n * @returns user's {@link State}\n */\n getUserState(userId) {\n const peers = this.getUserPeers(userId);\n if (!peers) {\n return undefined;\n }\n const peer = this.getLastActivePeer(peers);\n if (!peer) {\n return undefined;\n }\n return this.value[peer];\n }\n /**\n * Get current ephemeral state value for this device's most-recently-active\n * peer.\n *\n * @param deviceId\n * @returns device's {@link State}\n */\n getDeviceState(deviceId) {\n const peers = this.getDevicePeers(deviceId);\n if (!peers) {\n return undefined;\n }\n const peer = this.getLastActivePeer(peers);\n if (!peer) {\n return undefined;\n }\n return this.value[peer];\n }\n}\n","import { PeerStateView } from \"./PeerStateView.js\";\nexport class PeerPresenceInfo {\n ttl;\n #peerStates = new PeerStateView({});\n /**\n * Build a new peer presence state.\n *\n * @param ttl in milliseconds - peers with no activity within this timeframe\n * are forgotten when {@link prune} is called.\n */\n constructor(ttl) {\n this.ttl = ttl;\n }\n has(peerId) {\n return peerId in this.#peerStates.value;\n }\n /**\n * Record that we've seen the given peer recently.\n *\n * @param peerId\n */\n markSeen(peerId) {\n if (!(peerId in this.#peerStates.value)) {\n // Ignore heartbeats from peers we have not seen before: they will send a snapshot\n return;\n }\n this.#peerStates = new PeerStateView({\n ...this.#peerStates.value,\n [peerId]: {\n ...this.#peerStates.value[peerId],\n lastSeenAt: Date.now(),\n },\n });\n }\n /**\n * Record a state update for the given peer. Note that existing state is not\n * overwritten.\n *\n * @param peerId\n * @param value\n */\n update({ peerId, deviceId, userId, value, }) {\n const peerState = this.#peerStates.value[peerId];\n const existingState = peerState?.value ?? {};\n const now = Date.now();\n this.#peerStates = new PeerStateView({\n ...this.#peerStates.value,\n [peerId]: {\n peerId,\n deviceId,\n userId,\n lastActiveAt: now,\n lastSeenAt: now,\n value: {\n ...existingState,\n ...value,\n },\n },\n });\n }\n /**\n * Forget the given peer.\n *\n * @param peerId\n */\n delete(peerId) {\n this.#peerStates = new PeerStateView(Object.fromEntries(Object.entries(this.#peerStates.value).filter(([existingId]) => {\n return existingId != peerId;\n })));\n }\n /**\n * Prune all peers that have not been seen since the configured ttl has\n * elapsed.\n */\n prune() {\n const threshold = Date.now() - this.ttl;\n const pruned = [];\n this.#peerStates = new PeerStateView(Object.fromEntries(Object.entries(this.#peerStates.value).filter(([id, state]) => {\n const keep = state.lastSeenAt >= threshold;\n if (!keep) {\n pruned.push(id);\n }\n return keep;\n })));\n return pruned;\n }\n /**\n * Get a snapshot of the current peer states\n */\n get states() {\n return this.#peerStates;\n }\n}\n","import { EventEmitter } from \"eventemitter3\";\nimport { DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_PEER_TTL_MS, PRESENCE_MESSAGE_MARKER, } from \"./constants.js\";\nimport { PeerPresenceInfo } from \"./PeerPresenceInfo.js\";\n/**\n * Presence encapsulates ephemeral state communication for a specific doc\n * handle. It tracks caller-provided local state and broadcasts that state to\n * all peers. It sends periodic heartbeats when there are no state updates.\n *\n * It also tracks ephemeral state broadcast by peers and emits events when peers\n * send ephemeral state updates (see {@link PresenceEvents}).\n *\n * Presence starts out in an inactive state. Call {@link start} and {@link stop}\n * to activate and deactivate it.\n */\nexport class Presence extends EventEmitter {\n #handle;\n deviceId;\n userId;\n #peers;\n #localState;\n #heartbeatMs;\n #handleEphemeralMessage;\n #heartbeatInterval;\n #pruningInterval;\n #hellos = [];\n #running = false;\n /**\n * Create a new Presence to share ephemeral state with peers.\n *\n * @param config see {@link PresenceConfig}\n * @returns\n */\n constructor({ handle, deviceId, userId, }) {\n super();\n this.#handle = handle;\n this.#peers = new PeerPresenceInfo(DEFAULT_PEER_TTL_MS);\n this.#localState = {};\n this.userId = userId;\n this.deviceId = deviceId;\n }\n /**\n * Start listening to ephemeral messages on the handle, broadcast initial\n * state to peers, and start sending heartbeats.\n */\n start({ initialState, heartbeatMs, peerTtlMs }) {\n if (this.#running) {\n return;\n }\n this.#running = true;\n this.#heartbeatMs = heartbeatMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS;\n this.#peers = new PeerPresenceInfo(peerTtlMs ?? DEFAULT_PEER_TTL_MS);\n this.#localState = initialState;\n // N.B.: We can't use a regular member function here since member functions\n // of two distinct objects are identical, and we need to be able to stop\n // listening to the handle for just this Presence instance in stop()\n this.#handleEphemeralMessage = (e) => {\n const peerId = e.senderId;\n const envelope = e.message;\n if (!(PRESENCE_MESSAGE_MARKER in envelope)) {\n return;\n }\n const message = envelope[PRESENCE_MESSAGE_MARKER];\n const { deviceId, userId } = message;\n if (!this.#peers.has(peerId)) {\n this.announce();\n }\n switch (message.type) {\n case \"heartbeat\":\n this.#peers.markSeen(peerId);\n this.emit(\"heartbeat\", { type: \"heartbeat\", peerId });\n break;\n case \"goodbye\":\n this.#peers.delete(peerId);\n this.emit(\"goodbye\", { type: \"goodbye\", peerId });\n break;\n case \"update\":\n this.#peers.update({\n peerId,\n deviceId,\n userId,\n value: { [message.channel]: message.value },\n });\n this.emit(\"update\", {\n type: \"update\",\n peerId,\n deviceId,\n userId,\n channel: message.channel,\n value: message.value,\n });\n break;\n case \"snapshot\":\n this.#peers.update({\n peerId,\n deviceId,\n userId,\n value: message.state,\n });\n this.emit(\"snapshot\", {\n type: \"snapshot\",\n peerId,\n deviceId,\n userId,\n state: message.state,\n });\n break;\n }\n };\n this.#handle.on(\"ephemeral-message\", this.#handleEphemeralMessage);\n this.broadcastLocalState(); // also starts heartbeats\n this.startPruningPeers();\n }\n /**\n * Return a view of current peer states.\n */\n getPeerStates() {\n return this.#peers.states;\n }\n /**\n * Return a view of current local state.\n */\n getLocalState() {\n return this.#localState;\n }\n /**\n * Update state for the specific channel, and broadcast new state to all\n * peers.\n *\n * @param channel\n * @param value\n */\n broadcast(channel, value) {\n this.#localState = Object.assign({}, this.#localState, {\n [channel]: value,\n });\n this.broadcastChannelState(channel);\n }\n /**\n * Whether this Presence is currently active. See\n * {@link start} and {@link stop}.\n */\n get running() {\n return this.#running;\n }\n /**\n * Stop this Presence: broadcast a \"goodbye\" message (when received, other\n * peers will immediately forget the sender), stop sending heartbeats, and\n * stop listening to ephemeral-messages broadcast from peers.\n *\n * This can be used with browser events like\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/pagehide_event | \"pagehide\"}\n * or\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilitychange_event | \"visibilitychange\"}\n * to stop sending and receiving updates when not active.\n */\n stop() {\n if (!this.#running) {\n return;\n }\n this.#hellos.forEach(timeoutId => {\n clearTimeout(timeoutId);\n });\n this.#hellos = [];\n this.#handle.off(\"ephemeral-message\", this.#handleEphemeralMessage);\n this.stopHeartbeats();\n this.stopPruningPeers();\n this.send({ type: \"goodbye\" });\n this.#running = false;\n }\n announce() {\n // Broadcast our current state whenever we see new peers\n // TODO: We currently need to wait for the peer to be ready, but waiting\n // some arbitrary amount of time is brittle\n const helloId = setTimeout(() => {\n this.broadcastLocalState();\n this.#hellos = this.#hellos.filter(id => id !== helloId);\n }, 500);\n this.#hellos.push(helloId);\n }\n broadcastLocalState() {\n this.doBroadcast(\"snapshot\", { state: this.#localState });\n this.resetHeartbeats();\n }\n broadcastChannelState(channel) {\n const value = this.#localState[channel];\n this.doBroadcast(\"update\", { channel, value });\n this.resetHeartbeats();\n }\n resetHeartbeats() {\n // Reset heartbeats every time we broadcast a message to avoid sending\n // unnecessary heartbeats when there is plenty of actual update activity\n // happening.\n this.stopHeartbeats();\n this.startHeartbeats();\n }\n doBroadcast(type, extra) {\n this.send({\n userId: this.userId,\n deviceId: this.deviceId,\n type,\n ...extra,\n });\n }\n send(message) {\n if (!this.#running) {\n return;\n }\n this.#handle.broadcast({\n [PRESENCE_MESSAGE_MARKER]: message,\n });\n }\n startHeartbeats() {\n if (this.#heartbeatInterval !== undefined) {\n return;\n }\n this.#heartbeatInterval = setInterval(() => {\n this.send({ type: \"heartbeat\" });\n }, this.#heartbeatMs);\n }\n stopHeartbeats() {\n if (this.#heartbeatInterval === undefined) {\n return;\n }\n clearInterval(this.#heartbeatInterval);\n this.#heartbeatInterval = undefined;\n }\n startPruningPeers() {\n if (this.#pruningInterval !== undefined) {\n return;\n }\n // Pruning happens at the heartbeat frequency, not on a peer ttl frequency,\n // to minimize variance between peer expiration, since the heartbeat frequency\n // is expected to be several times higher.\n this.#pruningInterval = setInterval(() => {\n const pruned = this.#peers.prune();\n if (pruned.length > 0) {\n this.emit(\"pruning\", { pruned });\n }\n }, this.#heartbeatMs);\n }\n stopPruningPeers() {\n if (this.#pruningInterval === undefined) {\n return;\n }\n clearInterval(this.#pruningInterval);\n this.#pruningInterval = undefined;\n }\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\"\n\nimport {\n Presence,\n PresenceConfig,\n DocHandle,\n UserId,\n DeviceId,\n PeerStateView,\n PresenceState,\n} from \"@automerge/automerge-repo/slim\"\n\nexport type UsePresenceConfig<State extends PresenceState> =\n PresenceConfig<State> & {\n handle: DocHandle<unknown>\n userId?: UserId\n deviceId?: DeviceId\n }\n\nexport type UsePresenceResult<State extends PresenceState> = {\n /**\n * Presence view of our peers.\n */\n peerStates: PeerStateView<State>\n /**\n * Our own presence state, as last set by `update` or the initial value.\n */\n localState: State | undefined\n /**\n * Update our presence state for the given channel and broadcast\n * it to our peers.\n *\n * @param channel\n * @param value\n */\n update: <Channel extends keyof State>(\n channel: Channel,\n value: State[Channel]\n ) => void\n /**\n * Resume presence broadcasting and listening to peer presence.\n *\n * Note that this only needs to be called after `stop` has been called:\n * usePresence starts running immediately.\n */\n start: (config?: Partial<PresenceConfig<State>>) => void\n /**\n * Stop broadcasting presence state and listening to peer presence.\n */\n stop: () => void\n}\n\n/**\n * This hook encapsulates ephemeral state communication for a specific doc\n * handle. It tracks caller-provided local state and broadcasts that state to\n * all peers. It sends periodic heartbeats when there are no state updates.\n *\n * It also tracks ephemeral state broadcast by peers and forces a re-render when\n * the state of a peer changes.\n *\n * It cleans up (stops sending heartbeats and processing ephemeral messages)\n * when it unmounts.\n *\n * It is implemented using {@link Presence}.\n *\n * @param config - see {@link UsePresenceConfig}. Note that initialState only\n * determines the initial value. Updates to this param will not trigger a\n * re-render of the hook.\n *\n * @returns see {@link UsePresenceResult}\n */\nexport function usePresence<State extends PresenceState>({\n handle,\n userId,\n deviceId,\n initialState,\n heartbeatMs,\n peerTtlMs,\n}: UsePresenceConfig<State>): UsePresenceResult<State> {\n const [localState, setLocalState] = useState<State>(initialState)\n const [peerStates, setPeerStates] = useState(new PeerStateView<State>({}))\n // Don't re-render based on changes to these: they are not expected to\n // change but may be passed in as object literals\n const firstOpts = useRef({\n heartbeatMs,\n peerTtlMs,\n })\n const firstInitialState = useRef(initialState)\n const [presence] = useState(\n () => new Presence<State>({ handle, userId, deviceId })\n )\n\n useEffect(() => {\n presence.start({\n initialState: firstInitialState.current,\n ...firstOpts.current,\n })\n presence.on(\"heartbeat\", () => setPeerStates(presence.getPeerStates()))\n presence.on(\"snapshot\", () => setPeerStates(presence.getPeerStates()))\n presence.on(\"update\", () => setPeerStates(presence.getPeerStates()))\n presence.on(\"goodbye\", () => setPeerStates(presence.getPeerStates()))\n presence.on(\"pruning\", () => setPeerStates(presence.getPeerStates()))\n\n return () => {\n presence.stop()\n }\n }, [presence, userId, deviceId, firstInitialState, firstOpts])\n\n const start = useCallback(\n (config?: Partial<PresenceConfig<State>>) => {\n // Fall back to the last state if not provided when restarting\n const initialState = config?.initialState ?? presence.getLocalState()\n const opts = {\n ...firstOpts.current,\n ...config,\n initialState,\n }\n presence.start(opts)\n },\n [presence, firstOpts]\n )\n const stop = useCallback(() => {\n presence.stop()\n }, [presence])\n\n const update = useCallback(\n <Channel extends keyof State>(channel: Channel, msg: State[Channel]) => {\n presence.broadcast(channel, msg)\n const updated = presence.getLocalState()\n setLocalState(updated)\n },\n [presence]\n )\n\n return {\n peerStates,\n localState,\n update,\n start,\n stop,\n }\n}\n"],"names":["require$$0","require$$1","require$$2","sha256","src","bs58check","Uuid.validate","Uuid.parse","handle","peerStates","heartbeats","this","position","bundledStrings","isLittleEndianMachine","Buffer","initialState"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,22,23,26,27,28,29,30,31,32,33,34,35,36,38]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/wrapPromise.ts","../src/useRepo.ts","../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/regex.js","../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/validate.js","../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/parse.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/crypto.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/utils.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/_md.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/_u64.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/sha2.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/sha256.js","../../../node_modules/.pnpm/base-x@4.0.1/node_modules/base-x/src/index.js","../../../node_modules/.pnpm/bs58@5.0.0/node_modules/bs58/index.js","../../../node_modules/.pnpm/bs58check@3.0.1/node_modules/bs58check/base.js","../../../node_modules/.pnpm/bs58check@3.0.1/node_modules/bs58check/index.js","../../automerge-repo/dist/helpers/bufferFromHex.js","../../automerge-repo/dist/AutomergeUrl.js","../src/useDocHandle.ts","../src/useDocument.ts","../src/helpers/useSet.ts","../src/useDocHandles.ts","../src/useDocuments.ts","../../../node_modules/.pnpm/react-usestateref@1.0.9_react@18.3.1/node_modules/react-usestateref/dist/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js","../src/useRemoteAwareness.ts","../src/useLocalAwareness.ts","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/constants.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/counter.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/immutable_string.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/proxies.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/wasm_bindgen_output/web/automerge_wasm.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/implementation.js","../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/common.js","../../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/browser.js","../../../node_modules/.pnpm/cbor-x@1.6.0/node_modules/cbor-x/decode.js","../../../node_modules/.pnpm/cbor-x@1.6.0/node_modules/cbor-x/encode.js","../../automerge-repo/dist/refs/ref.js","../../../node_modules/.pnpm/fast-sha256@1.3.0/node_modules/fast-sha256/sha256.js","../../automerge-repo/dist/synchronizer/CollectionSynchronizer.js","../../automerge-repo/dist/presence/constants.js","../../automerge-repo/dist/presence/PeerStateView.js","../../automerge-repo/dist/presence/PeerPresenceInfo.js","../../automerge-repo/dist/presence/Presence.js","../src/usePresence.ts"],"sourcesContent":["type Status = \"pending\" | \"success\" | \"error\"\n\nexport type PromiseWrapper<T> = {\n promise: Promise<T>\n read(): T\n}\n\nexport function wrapPromise<T>(promise: Promise<T>): PromiseWrapper<T> {\n let status: Status = \"pending\"\n let result: T\n let error: Error\n\n const suspender = promise.then(\n data => {\n status = \"success\"\n result = data\n },\n err => {\n status = \"error\"\n error = err\n }\n )\n\n return {\n promise,\n read(): T {\n switch (status) {\n case \"pending\":\n throw suspender\n case \"error\":\n throw error\n case \"success\":\n return result\n }\n },\n }\n}\n","import { Repo } from \"@automerge/automerge-repo/slim\"\nimport { createContext, useContext } from \"react\"\n\n/** A [React context](https://react.dev/learn/passing-data-deeply-with-context) which provides access to an Automerge repo. */\nexport const RepoContext = createContext<Repo | null>(null)\n\n/** A [React hook](https://reactjs.org/docs/hooks-intro.html) which returns the Automerge repo from {@link RepoContext}. */\nexport function useRepo(): Repo {\n const repo = useContext(RepoContext)\n if (!repo) throw new Error(\"Repo was not found on RepoContext.\")\n return repo\n}\n","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n let v;\n const arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n arr[1] = v >>> 16 & 0xff;\n arr[2] = v >>> 8 & 0xff;\n arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n arr[9] = v & 0xff; // Parse ........-....-....-....-############\n // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n arr[11] = v / 0x100000000 & 0xff;\n arr[12] = v >>> 24 & 0xff;\n arr[13] = v >>> 16 & 0xff;\n arr[14] = v >>> 8 & 0xff;\n arr[15] = v & 0xff;\n return arr;\n}\n\nexport default parse;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\nexports.crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","\"use strict\";\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.wrapXOFConstructorWithOpts = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.Hash = exports.nextTick = exports.swap32IfBE = exports.byteSwapIfBE = exports.swap8IfBE = exports.isLE = void 0;\nexports.isBytes = isBytes;\nexports.anumber = anumber;\nexports.abytes = abytes;\nexports.ahash = ahash;\nexports.aexists = aexists;\nexports.aoutput = aoutput;\nexports.u8 = u8;\nexports.u32 = u32;\nexports.clean = clean;\nexports.createView = createView;\nexports.rotr = rotr;\nexports.rotl = rotl;\nexports.byteSwap = byteSwap;\nexports.byteSwap32 = byteSwap32;\nexports.bytesToHex = bytesToHex;\nexports.hexToBytes = hexToBytes;\nexports.asyncLoop = asyncLoop;\nexports.utf8ToBytes = utf8ToBytes;\nexports.bytesToUtf8 = bytesToUtf8;\nexports.toBytes = toBytes;\nexports.kdfInputToBytes = kdfInputToBytes;\nexports.concatBytes = concatBytes;\nexports.checkOpts = checkOpts;\nexports.createHasher = createHasher;\nexports.createOptHasher = createOptHasher;\nexports.createXOFer = createXOFer;\nexports.randomBytes = randomBytes;\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nfunction anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nfunction ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nfunction u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nfunction rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nfunction rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexports.isLE = (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nfunction byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexports.swap8IfBE = exports.isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexports.byteSwapIfBE = exports.swap8IfBE;\n/** In place byte swap for Uint32Array */\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexports.swap32IfBE = exports.isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nfunction bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nfunction bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nfunction kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nclass Hash {\n}\nexports.Hash = Hash;\n/** Wraps hash function, creating an interface on top of it */\nfunction createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nfunction createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nfunction createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructor = createHasher;\nexports.wrapConstructorWithOpts = createOptHasher;\nexports.wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto && typeof crypto_1.crypto.getRandomValues === 'function') {\n return crypto_1.crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto_1.crypto && typeof crypto_1.crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto_1.crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SHA512_IV = exports.SHA384_IV = exports.SHA224_IV = exports.SHA256_IV = exports.HashMD = void 0;\nexports.setBigUint64 = setBigUint64;\nexports.Chi = Chi;\nexports.Maj = Maj;\n/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nconst utils_ts_1 = require(\"./utils.js\");\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nfunction Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nfunction Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nclass HashMD extends utils_ts_1.Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = (0, utils_ts_1.createView)(this.buffer);\n }\n update(data) {\n (0, utils_ts_1.aexists)(this);\n data = (0, utils_ts_1.toBytes)(data);\n (0, utils_ts_1.abytes)(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = (0, utils_ts_1.createView)(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n (0, utils_ts_1.aexists)(this);\n (0, utils_ts_1.aoutput)(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n (0, utils_ts_1.clean)(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = (0, utils_ts_1.createView)(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\nexports.HashMD = HashMD;\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexports.SHA256_IV = Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexports.SHA224_IV = Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexports.SHA384_IV = Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexports.SHA512_IV = Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.toBig = exports.shrSL = exports.shrSH = exports.rotrSL = exports.rotrSH = exports.rotrBL = exports.rotrBH = exports.rotr32L = exports.rotr32H = exports.rotlSL = exports.rotlSH = exports.rotlBL = exports.rotlBH = exports.add5L = exports.add5H = exports.add4L = exports.add4H = exports.add3L = exports.add3H = void 0;\nexports.add = add;\nexports.fromBig = fromBig;\nexports.split = split;\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nexports.shrSH = shrSH;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.shrSL = shrSL;\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nexports.rotrSH = rotrSH;\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\nexports.rotrSL = rotrSL;\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nexports.rotrBH = rotrBH;\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\nexports.rotrBL = rotrBL;\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nexports.rotr32H = rotr32H;\nconst rotr32L = (h, _l) => h;\nexports.rotr32L = rotr32L;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nexports.rotlSH = rotlSH;\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\nexports.rotlSL = rotlSL;\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nexports.rotlBH = rotlBH;\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\nexports.rotlBL = rotlBL;\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nexports.add3L = add3L;\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nexports.add3H = add3H;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nexports.add4L = add4L;\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nexports.add4H = add4H;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nexports.add5L = add5L;\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\nexports.add5H = add5H;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n//# sourceMappingURL=_u64.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha512_224 = exports.sha512_256 = exports.sha384 = exports.sha512 = exports.sha224 = exports.sha256 = exports.SHA512_256 = exports.SHA512_224 = exports.SHA384 = exports.SHA512 = exports.SHA224 = exports.SHA256 = void 0;\n/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nconst _md_ts_1 = require(\"./_md.js\");\nconst u64 = require(\"./_u64.js\");\nconst utils_ts_1 = require(\"./utils.js\");\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends _md_ts_1.HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = _md_ts_1.SHA256_IV[0] | 0;\n this.B = _md_ts_1.SHA256_IV[1] | 0;\n this.C = _md_ts_1.SHA256_IV[2] | 0;\n this.D = _md_ts_1.SHA256_IV[3] | 0;\n this.E = _md_ts_1.SHA256_IV[4] | 0;\n this.F = _md_ts_1.SHA256_IV[5] | 0;\n this.G = _md_ts_1.SHA256_IV[6] | 0;\n this.H = _md_ts_1.SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = (0, utils_ts_1.rotr)(W15, 7) ^ (0, utils_ts_1.rotr)(W15, 18) ^ (W15 >>> 3);\n const s1 = (0, utils_ts_1.rotr)(W2, 17) ^ (0, utils_ts_1.rotr)(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = (0, utils_ts_1.rotr)(E, 6) ^ (0, utils_ts_1.rotr)(E, 11) ^ (0, utils_ts_1.rotr)(E, 25);\n const T1 = (H + sigma1 + (0, _md_ts_1.Chi)(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = (0, utils_ts_1.rotr)(A, 2) ^ (0, utils_ts_1.rotr)(A, 13) ^ (0, utils_ts_1.rotr)(A, 22);\n const T2 = (sigma0 + (0, _md_ts_1.Maj)(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n (0, utils_ts_1.clean)(this.buffer);\n }\n}\nexports.SHA256 = SHA256;\nclass SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = _md_ts_1.SHA224_IV[0] | 0;\n this.B = _md_ts_1.SHA224_IV[1] | 0;\n this.C = _md_ts_1.SHA224_IV[2] | 0;\n this.D = _md_ts_1.SHA224_IV[3] | 0;\n this.E = _md_ts_1.SHA224_IV[4] | 0;\n this.F = _md_ts_1.SHA224_IV[5] | 0;\n this.G = _md_ts_1.SHA224_IV[6] | 0;\n this.H = _md_ts_1.SHA224_IV[7] | 0;\n }\n}\nexports.SHA224 = SHA224;\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nclass SHA512 extends _md_ts_1.HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = _md_ts_1.SHA512_IV[0] | 0;\n this.Al = _md_ts_1.SHA512_IV[1] | 0;\n this.Bh = _md_ts_1.SHA512_IV[2] | 0;\n this.Bl = _md_ts_1.SHA512_IV[3] | 0;\n this.Ch = _md_ts_1.SHA512_IV[4] | 0;\n this.Cl = _md_ts_1.SHA512_IV[5] | 0;\n this.Dh = _md_ts_1.SHA512_IV[6] | 0;\n this.Dl = _md_ts_1.SHA512_IV[7] | 0;\n this.Eh = _md_ts_1.SHA512_IV[8] | 0;\n this.El = _md_ts_1.SHA512_IV[9] | 0;\n this.Fh = _md_ts_1.SHA512_IV[10] | 0;\n this.Fl = _md_ts_1.SHA512_IV[11] | 0;\n this.Gh = _md_ts_1.SHA512_IV[12] | 0;\n this.Gl = _md_ts_1.SHA512_IV[13] | 0;\n this.Hh = _md_ts_1.SHA512_IV[14] | 0;\n this.Hl = _md_ts_1.SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n (0, utils_ts_1.clean)(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n (0, utils_ts_1.clean)(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexports.SHA512 = SHA512;\nclass SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = _md_ts_1.SHA384_IV[0] | 0;\n this.Al = _md_ts_1.SHA384_IV[1] | 0;\n this.Bh = _md_ts_1.SHA384_IV[2] | 0;\n this.Bl = _md_ts_1.SHA384_IV[3] | 0;\n this.Ch = _md_ts_1.SHA384_IV[4] | 0;\n this.Cl = _md_ts_1.SHA384_IV[5] | 0;\n this.Dh = _md_ts_1.SHA384_IV[6] | 0;\n this.Dl = _md_ts_1.SHA384_IV[7] | 0;\n this.Eh = _md_ts_1.SHA384_IV[8] | 0;\n this.El = _md_ts_1.SHA384_IV[9] | 0;\n this.Fh = _md_ts_1.SHA384_IV[10] | 0;\n this.Fl = _md_ts_1.SHA384_IV[11] | 0;\n this.Gh = _md_ts_1.SHA384_IV[12] | 0;\n this.Gl = _md_ts_1.SHA384_IV[13] | 0;\n this.Hh = _md_ts_1.SHA384_IV[14] | 0;\n this.Hl = _md_ts_1.SHA384_IV[15] | 0;\n }\n}\nexports.SHA384 = SHA384;\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nclass SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexports.SHA512_224 = SHA512_224;\nclass SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\nexports.SHA512_256 = SHA512_256;\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexports.sha256 = (0, utils_ts_1.createHasher)(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexports.sha224 = (0, utils_ts_1.createHasher)(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexports.sha512 = (0, utils_ts_1.createHasher)(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexports.sha384 = (0, utils_ts_1.createHasher)(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_256 = (0, utils_ts_1.createHasher)(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexports.sha512_224 = (0, utils_ts_1.createHasher)(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.sha224 = exports.SHA224 = exports.sha256 = exports.SHA256 = void 0;\n/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nconst sha2_ts_1 = require(\"./sha2.js\");\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA256 = sha2_ts_1.SHA256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha256 = sha2_ts_1.sha256;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.SHA224 = sha2_ts_1.SHA224;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexports.sha224 = sha2_ts_1.sha224;\n//# sourceMappingURL=sha256.js.map","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) {\n } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = new Uint8Array(zeroes + (size - it4))\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","const basex = require('base-x')\nconst ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","'use strict'\n\nvar base58 = require('bs58')\n\nmodule.exports = function (checksumFn) {\n // Encode a buffer as a base58-check encoded string\n function encode (payload) {\n var payloadU8 = Uint8Array.from(payload)\n var checksum = checksumFn(payloadU8)\n var length = payloadU8.length + 4\n var both = new Uint8Array(length)\n both.set(payloadU8, 0)\n both.set(checksum.subarray(0, 4), payloadU8.length)\n return base58.encode(both, length)\n }\n\n function decodeRaw (buffer) {\n var payload = buffer.slice(0, -4)\n var checksum = buffer.slice(-4)\n var newChecksum = checksumFn(payload)\n\n if (checksum[0] ^ newChecksum[0] |\n checksum[1] ^ newChecksum[1] |\n checksum[2] ^ newChecksum[2] |\n checksum[3] ^ newChecksum[3]) return\n\n return payload\n }\n\n // Decode a base58-check encoded string to a buffer, no result if checksum is wrong\n function decodeUnsafe (string) {\n var buffer = base58.decodeUnsafe(string)\n if (!buffer) return\n\n return decodeRaw(buffer)\n }\n\n function decode (string) {\n var buffer = base58.decode(string)\n var payload = decodeRaw(buffer, checksumFn)\n if (!payload) throw new Error('Invalid checksum')\n return payload\n }\n\n return {\n encode: encode,\n decode: decode,\n decodeUnsafe: decodeUnsafe\n }\n}\n","'use strict'\n\nvar { sha256 } = require('@noble/hashes/sha256')\nvar bs58checkBase = require('./base')\n\n// SHA256(SHA256(buffer))\nfunction sha256x2 (buffer) {\n return sha256(sha256(buffer))\n}\n\nmodule.exports = bs58checkBase(sha256x2)\n","export const uint8ArrayFromHexString = (hexString) => {\n if (hexString.length % 2 !== 0) {\n throw new Error(\"Hex string must have an even length\");\n }\n const bytes = new Uint8Array(hexString.length / 2);\n for (let i = 0; i < hexString.length; i += 2) {\n bytes[i >> 1] = parseInt(hexString.slice(i, i + 2), 16);\n }\n return bytes;\n};\nexport const uint8ArrayToHexString = (data) => {\n return Array.from(data, byte => byte.toString(16).padStart(2, \"0\")).join(\"\");\n};\n","import * as Uuid from \"uuid\";\nimport bs58check from \"bs58check\";\nimport { uint8ArrayFromHexString, uint8ArrayToHexString, } from \"./helpers/bufferFromHex.js\";\nexport const urlPrefix = \"automerge:\";\n/** Given an Automerge URL, returns the DocumentId in both base58check-encoded form and binary form */\nexport const parseAutomergeUrl = (url) => {\n const [baseUrl, headsSection, ...rest] = url.split(\"#\");\n if (rest.length > 0) {\n throw new Error(\"Invalid URL: contains multiple heads sections\");\n }\n const regex = new RegExp(`^${urlPrefix}(\\\\w+)$`);\n const [, docMatch] = baseUrl.match(regex) || [];\n const documentId = docMatch;\n const binaryDocumentId = documentIdToBinary(documentId);\n if (!binaryDocumentId)\n throw new Error(\"Invalid document URL: \" + url);\n if (headsSection === undefined)\n return { binaryDocumentId, documentId };\n const heads = (headsSection === \"\" ? [] : headsSection.split(\"|\"));\n const hexHeads = heads.map(head => {\n try {\n return uint8ArrayToHexString(bs58check.decode(head));\n }\n catch (e) {\n throw new Error(`Invalid head in URL: ${head}`);\n }\n });\n return { binaryDocumentId, hexHeads, documentId, heads };\n};\n/**\n * Given a documentId in either binary or base58check-encoded form, returns an Automerge URL.\n * Throws on invalid input.\n */\nexport const stringifyAutomergeUrl = (arg) => {\n if (arg instanceof Uint8Array || typeof arg === \"string\") {\n return (urlPrefix +\n (arg instanceof Uint8Array\n ? binaryToDocumentId(arg)\n : arg));\n }\n const { documentId, heads = undefined } = arg;\n if (documentId === undefined)\n throw new Error(\"Invalid documentId: \" + documentId);\n const encodedDocumentId = documentId instanceof Uint8Array\n ? binaryToDocumentId(documentId)\n : documentId;\n let url = `${urlPrefix}${encodedDocumentId}`;\n if (heads !== undefined) {\n heads.forEach(head => {\n try {\n bs58check.decode(head);\n }\n catch (e) {\n throw new Error(`Invalid head: ${head}`);\n }\n });\n url += \"#\" + heads.join(\"|\");\n }\n return url;\n};\n/** Helper to extract just the heads from a URL if they exist */\nexport const getHeadsFromUrl = (url) => {\n const { heads } = parseAutomergeUrl(url);\n return heads;\n};\nexport const anyDocumentIdToAutomergeUrl = (id) => isValidAutomergeUrl(id)\n ? id\n : isValidDocumentId(id)\n ? stringifyAutomergeUrl({ documentId: id })\n : isValidUuid(id)\n ? parseLegacyUUID(id)\n : undefined;\n/**\n * Given a string, returns true if it is a valid Automerge URL. This function also acts as a type\n * discriminator in Typescript.\n */\nexport const isValidAutomergeUrl = (str) => {\n if (typeof str !== \"string\" || !str || !str.startsWith(urlPrefix))\n return false;\n try {\n const { documentId, heads } = parseAutomergeUrl(str);\n if (!isValidDocumentId(documentId))\n return false;\n if (heads &&\n !heads.every(head => {\n try {\n bs58check.decode(head);\n return true;\n }\n catch {\n return false;\n }\n }))\n return false;\n return true;\n }\n catch {\n return false;\n }\n};\nexport const isValidDocumentId = (str) => {\n if (typeof str !== \"string\")\n return false;\n // try to decode from base58\n const binaryDocumentID = documentIdToBinary(str);\n return binaryDocumentID !== undefined;\n};\nexport const isValidUuid = (str) => typeof str === \"string\" && Uuid.validate(str);\n/**\n * Returns a new Automerge URL with a random UUID documentId. Called by Repo.create(), and also used by tests.\n */\nexport const generateAutomergeUrl = () => {\n const documentId = Uuid.v4(null, new Uint8Array(16));\n return stringifyAutomergeUrl({ documentId });\n};\nexport const documentIdToBinary = (docId) => bs58check.decodeUnsafe(docId);\nexport const binaryToDocumentId = (docId) => bs58check.encode(docId);\nexport const encodeHeads = (heads) => heads.map(h => bs58check.encode(uint8ArrayFromHexString(h)));\nexport const decodeHeads = (heads) => heads.map(h => uint8ArrayToHexString(bs58check.decode(h)));\nexport const parseLegacyUUID = (str) => {\n if (!Uuid.validate(str))\n return undefined;\n const documentId = Uuid.parse(str);\n return stringifyAutomergeUrl({ documentId });\n};\n/**\n * Given any valid expression of a document ID, returns a DocumentId in base58check-encoded form.\n *\n * Currently supports:\n * - base58check-encoded DocumentId\n * - Automerge URL\n * - legacy UUID\n * - binary DocumentId\n *\n * Throws on invalid input.\n */\nexport const interpretAsDocumentId = (id) => {\n // binary\n if (id instanceof Uint8Array)\n return binaryToDocumentId(id);\n // url\n if (isValidAutomergeUrl(id))\n return parseAutomergeUrl(id).documentId;\n // base58check\n if (isValidDocumentId(id))\n return id;\n // legacy UUID\n if (isValidUuid(id)) {\n console.warn(\"Future versions will not support UUIDs as document IDs; use Automerge URLs instead.\");\n const binaryDocumentID = Uuid.parse(id);\n return binaryToDocumentId(binaryDocumentID);\n }\n // none of the above\n throw new Error(`Invalid AutomergeUrl: '${id}'`);\n};\n","import { AnyDocumentId, DocHandle } from \"@automerge/automerge-repo/slim\"\nimport { PromiseWrapper, wrapPromise } from \"./wrapPromise.js\"\nimport { useRepo } from \"./useRepo.js\"\nimport { useEffect, useRef, useState } from \"react\"\nimport { anyDocumentIdToAutomergeUrl } from \"../../automerge-repo/dist/AutomergeUrl.js\"\n\n// Shared with useDocHandles\nexport const wrapperCache = new Map<\n AnyDocumentId,\n PromiseWrapper<DocHandle<unknown>>\n>()\n// NB: this is a global cache that isn't keyed on the Repo\n// so if your app uses the same documents in two Repos\n// this could cause problems. please let me know if you do.\n\ninterface UseDocHandleSuspendingParams {\n suspense: true\n}\ninterface UseDocHandleSynchronousParams {\n suspense: false\n}\n\ntype UseDocHandleParams =\n | UseDocHandleSuspendingParams\n | UseDocHandleSynchronousParams\n\nexport function useDocHandle<T>(\n id: AnyDocumentId,\n params: UseDocHandleSuspendingParams\n): DocHandle<T>\nexport function useDocHandle<T>(\n id: AnyDocumentId | undefined,\n params?: UseDocHandleSynchronousParams\n): DocHandle<T> | undefined\nexport function useDocHandle<T>(\n id: AnyDocumentId | undefined,\n { suspense }: UseDocHandleParams = { suspense: false }\n): DocHandle<T> | undefined {\n const repo = useRepo()\n const controllerRef = useRef<AbortController>()\n const [handle, setHandle] = useState<DocHandle<T> | undefined>()\n\n let currentHandle: DocHandle<T> | undefined =\n // make sure the handle matches the id\n id && handle && handle.url === anyDocumentIdToAutomergeUrl(id)\n ? handle\n : undefined\n\n if (id && !currentHandle) {\n // if we haven't saved a handle yet, check if one is immediately available\n const progress = repo.findWithProgress<T>(id)\n if (progress.state === \"ready\") {\n currentHandle = progress.handle\n }\n }\n\n let wrapper = id ? wrapperCache.get(id) : undefined\n if (!wrapper && id) {\n controllerRef.current?.abort()\n controllerRef.current = new AbortController()\n\n const promise = repo.find<T>(id, { signal: controllerRef.current.signal })\n wrapper = wrapPromise(promise)\n wrapperCache.set(id, wrapper)\n }\n\n /* From here we split into two paths: suspense and not.\n * In the suspense path, we return the wrapper directly.\n * In the non-suspense path, we wait for the promise to resolve\n * and then set the handle via setState. Suspense relies on\n * re-running this function until it succeeds, whereas the synchronous\n * form uses a setState to track the value. */\n useEffect(() => {\n if (currentHandle || suspense || !wrapper) {\n return\n }\n wrapper.promise\n .then(handle => {\n setHandle(handle as DocHandle<T>)\n })\n .catch(() => {\n setHandle(undefined)\n })\n }, [currentHandle, suspense, wrapper])\n\n if (currentHandle || !suspense || !wrapper) {\n return currentHandle\n }\n\n return wrapper.read() as DocHandle<T>\n}\n","import { AnyDocumentId } from \"@automerge/automerge-repo/slim\"\nimport { ChangeFn, ChangeOptions, Doc } from \"@automerge/automerge/slim\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useDocHandle } from \"./useDocHandle.js\"\n\n/**\n * A hook which returns a document and a function to change it.\n * Uses React Suspense for loading states, returning a tuple matching useState pattern.\n *\n * @example\n * ```tsx\n * function Counter() {\n * const [doc, changeDoc] = useDocument<{ count: number }>(docUrl)\n * return (\n * <button onClick={() => changeDoc(d => d.count++)}>\n * Count: {doc.count}\n * </button>\n * )\n * }\n *\n * // Must be wrapped in Suspense boundary\n * <Suspense fallback={<Loading />}>\n * <Counter />\n * </Suspense>\n * ```\n */\n\ninterface UseDocumentSuspendingParams {\n suspense: true\n}\ninterface UseDocumentSynchronousParams {\n suspense: false\n}\n\ntype UseDocumentParams =\n | UseDocumentSuspendingParams\n | UseDocumentSynchronousParams\n\nexport type UseDocumentReturn<T> = [\n Doc<T>,\n (changeFn: ChangeFn<T>, options?: ChangeOptions<T>) => void\n]\n\nexport function useDocument<T>(\n id: AnyDocumentId,\n params: UseDocumentSuspendingParams\n): UseDocumentReturn<T>\nexport function useDocument<T>(\n id: AnyDocumentId | undefined,\n params?: UseDocumentSynchronousParams\n): UseDocumentReturn<T> | [undefined, () => void]\nexport function useDocument<T>(\n id: AnyDocumentId | undefined,\n params: UseDocumentParams = { suspense: false }\n): UseDocumentReturn<T> | [undefined, () => void] {\n // @ts-expect-error -- typescript doesn't realize we're discriminating these types the same way in both functions\n const handle = useDocHandle<T>(id, params)\n // Initialize with current doc state\n const [doc, setDoc] = useState<Doc<T> | undefined>(() => handle?.doc())\n const [deleteError, setDeleteError] = useState<Error>()\n\n // Reinitialize doc when handle changes\n useEffect(() => {\n setDoc(handle?.doc())\n }, [handle])\n\n useEffect(() => {\n if (!handle) {\n return\n }\n const onChange = () => setDoc(handle.doc())\n const onDelete = () => {\n setDeleteError(new Error(`Document ${id} was deleted`))\n }\n\n handle.on(\"change\", onChange)\n handle.on(\"delete\", onDelete)\n\n return () => {\n handle.removeListener(\"change\", onChange)\n handle.removeListener(\"delete\", onDelete)\n }\n }, [handle, id])\n\n const changeDoc = useCallback(\n (changeFn: ChangeFn<T>, options?: ChangeOptions<T>) => {\n handle!.change(changeFn, options)\n },\n [handle]\n )\n\n if (deleteError) {\n throw deleteError\n }\n\n if (!doc) {\n return [undefined, () => {}]\n }\n return [doc, changeDoc]\n}\n","import { useEffect, useState } from \"react\"\n\nexport function useSet<T>(items: T[]): Set<T> {\n const [set, setSet] = useState<Set<T>>(() => {\n return new Set<T>(items)\n })\n useEffect(() => {\n const newSet = new Set(items)\n if (identical(set, newSet)) {\n return\n }\n setSet(newSet)\n }, [set, items])\n return set\n}\n\nfunction identical<T>(s1: Set<T>, s2: Set<T>) {\n return s1.size === s2.size && Array.from(s1).every(v => s2.has(v))\n}\n","import { AutomergeUrl, DocHandle } from \"@automerge/automerge-repo/slim\"\nimport { useState, useEffect } from \"react\"\nimport { useRepo } from \"./useRepo.js\"\nimport { PromiseWrapper, wrapPromise } from \"./wrapPromise.js\"\nimport { wrapperCache } from \"./useDocHandle.js\"\nimport { useSet } from \"./helpers/useSet.js\"\n\ninterface UseDocHandlesParams {\n suspense?: boolean\n}\n\ntype DocHandleMap<T> = Map<AutomergeUrl, DocHandle<T> | undefined>\n\nexport function useDocHandles<T>(\n ids: AutomergeUrl[],\n { suspense = false }: UseDocHandlesParams = {}\n): DocHandleMap<T> {\n const idSet = useSet(ids)\n const repo = useRepo()\n const [handleMap, setHandleMap] = useState<DocHandleMap<T>>(() => {\n const map = new Map()\n\n // Initialize the map with any handles that are ready\n for (const id of idSet.values()) {\n let progress\n try {\n progress = repo.findWithProgress<T>(id)\n } catch (e) {\n continue\n }\n\n if (progress.state === \"ready\") {\n map.set(id, progress.handle)\n }\n }\n\n return map\n })\n\n const pendingPromises: PromiseWrapper<DocHandle<T>>[] = []\n const nextHandleMap = new Map<AutomergeUrl, DocHandle<T> | undefined>()\n\n // Check if we need any new wrappers\n for (const id of idSet.values()) {\n let handle = handleMap.get(id)\n let wrapper = wrapperCache.get(id)\n if (!wrapper) {\n try {\n const promise = repo.find<T>(id)\n wrapper = wrapPromise(promise)\n wrapperCache.set(id, wrapper)\n } catch (e) {\n continue\n }\n }\n\n // Try to read each wrapper.\n // Update handleMap with any available handles,\n // and collect any pending promises\n try {\n handle ??= wrapper.read() as DocHandle<T>\n nextHandleMap.set(id, handle)\n } catch (e) {\n if (e instanceof Promise) {\n pendingPromises.push(wrapper as PromiseWrapper<DocHandle<T>>)\n } else {\n nextHandleMap.set(id, undefined)\n }\n }\n }\n\n // Suspense is handled quasi-synchronously below by throwing if we still have\n // unresolved promises.\n useEffect(() => {\n if (pendingPromises.length > 0) {\n void Promise.allSettled(pendingPromises.map(p => p.promise)).then(\n handles => {\n handles.forEach(r => {\n if (r.status === \"fulfilled\") {\n const h = r.value as DocHandle<T>\n nextHandleMap.set(h.url, h)\n }\n })\n setHandleMap(nextHandleMap)\n }\n )\n } else {\n setHandleMap(nextHandleMap)\n }\n }, [suspense, idSet])\n\n // If any promises are pending, suspend with Promise.all\n // Note that this behaviour is different from the synchronous\n // form where we get gradual load-in of child documents.\n // I couldn't find an obvious way of incremental loading with\n // a single hook for suspense.\n // (But maybe with suspense this hook is less useful?)\n if (suspense && pendingPromises.length > 0) {\n throw Promise.all(pendingPromises.map(p => p.promise))\n }\n\n return handleMap\n}\n","import { AutomergeUrl } from \"@automerge/automerge-repo/slim\"\nimport { ChangeFn, ChangeOptions, Doc } from \"@automerge/automerge/slim\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useDocHandles } from \"./useDocHandles.js\"\n\ntype DocMap<T> = Map<AutomergeUrl, Doc<T>>\ntype ChangeDocFn<T> = (\n id: AutomergeUrl,\n changeFn: ChangeFn<T>,\n options?: ChangeOptions<T>\n) => void\n\ninterface UseDocumentsOptions {\n suspense?: boolean\n}\n\nexport function useDocuments<T>(\n ids: AutomergeUrl[],\n { suspense = true }: UseDocumentsOptions = {}\n): [DocMap<T>, ChangeDocFn<T>] {\n const handleMap = useDocHandles<T>(ids, { suspense })\n const [docMap, setDocMap] = useState<DocMap<T>>(() => {\n const docs: DocMap<T> = new Map()\n handleMap.forEach(handle => {\n const url = handle?.url\n if (url) {\n docs.set(url, handle?.doc())\n }\n })\n return docs\n })\n\n useEffect(() => {\n const listeners = new Map<AutomergeUrl, () => void>()\n\n handleMap.forEach((handle, id) => {\n if (handle) {\n const onChange = () => {\n setDocMap(prev => {\n const next = new Map(prev)\n next.set(id, handle.doc())\n return next\n })\n }\n\n // Initial state\n setDocMap(prev => {\n const next = new Map(prev)\n next.set(id, handle.doc())\n return next\n })\n\n handle.on(\"change\", onChange)\n listeners.set(id, onChange)\n }\n })\n\n // Clear docs that are no longer in handleMap\n setDocMap(prev => {\n const next = new Map(prev)\n for (const [id] of next) {\n if (!handleMap.has(id)) {\n next.delete(id)\n }\n }\n return next\n })\n\n return () => {\n handleMap.forEach((handle, id) => {\n const listener = listeners.get(id)\n if (handle && listener) {\n handle.removeListener(\"change\", listener)\n }\n })\n }\n }, [handleMap])\n\n const changeDoc = useCallback(\n (id: AutomergeUrl, changeFn: ChangeFn<T>, options?: ChangeOptions<T>) => {\n const handle = handleMap.get(id)\n if (handle) {\n handle.change(changeFn, options)\n }\n },\n [handleMap]\n )\n\n return [docMap, changeDoc]\n}\n","\"use strict\";\nvar react_1 = require(\"react\");\nvar isFunction = function (setStateAction) {\n return typeof setStateAction === \"function\";\n};\nvar useStateRef = function (initialState) {\n var _a = react_1.useState(initialState), state = _a[0], setState = _a[1];\n var ref = react_1.useRef(state);\n var dispatch = react_1.useCallback(function (setStateAction) {\n ref.current = isFunction(setStateAction) ? setStateAction(ref.current) : setStateAction;\n setState(ref.current);\n }, []);\n return [state, dispatch, ref];\n};\nmodule.exports = useStateRef;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import {\n DocHandle,\n DocHandleEphemeralMessagePayload,\n} from \"@automerge/automerge-repo/slim\"\nimport { useEffect } from \"react\"\nimport useStateRef from \"react-usestateref\"\nimport { EventEmitter } from \"eventemitter3\"\n\n// Emits new_peer event when a new peer is seen\nexport const peerEvents = new EventEmitter()\n\nexport interface UseRemoteAwarenessProps<T> {\n /** The handle to receive ephemeral state on */\n handle?: DocHandle<T>\n /** Our user ID */\n localUserId?: string\n /** How long to wait (in ms) before marking a peer as offline */\n offlineTimeout?: number\n /** Function to provide current epoch time */\n getTime?: () => number\n}\n\n/** A map from peer ID to their state */\nexport type PeerStates = Record<string, any>\n/** A map from peer ID to their last heartbeat timestamp */\nexport type Heartbeats = Record<string, number>\n\n// {@link @microsoft/my-control-library/lib/Button#Button | the Button class}\n\n/**\n * @deprecated use the usePresence hook instead\n *\n * This hook returns read-only state for remote clients.\n * It also returns their heartbeat status.\n * It is intended to be used alongside useLocalAwareness.\n *\n * @param {string} props.handle A document handle to associate with\n * @param {string?} props.localUserId Automerge BroadcastChannel sometimes sends us our own messages; optionally filters them\n * @param {number?30000} props.offlineTimeout How long to wait (in ms) before marking a peer as offline\n * @param {function?} props.getTime Function to provide current epoch time (used for testing)\n * @returns [ peerStates: { [userId]: state, ... }, { [userId]: heartbeatEpochTime, ...} ]\n */\nexport const useRemoteAwareness = <T>({\n handle,\n localUserId,\n offlineTimeout = 30000,\n getTime = () => new Date().getTime(),\n}: UseRemoteAwarenessProps<T>): [PeerStates, Heartbeats] => {\n // TODO: You should be able to use multiple instances of this hook on the same handle (write test)\n // TODO: This should support some kind of caching or memoization when switching between channelIDs\n const [peerStates, setPeerStates, peerStatesRef] = useStateRef<PeerStates>({})\n const [heartbeats, setHeartbeats, heartbeatsRef] = useStateRef<Heartbeats>({})\n useEffect(() => {\n if (!handle) {\n return\n }\n\n // Receive incoming message\n const handleIncomingUpdate = (\n event: DocHandleEphemeralMessagePayload<T>\n ) => {\n const [userId, state] = event.message as [string, unknown]\n if (userId === localUserId) return\n if (!heartbeatsRef.current[userId]) peerEvents.emit(\"new_peer\", event) // Let useLocalAwareness know we've seen a new peer\n setPeerStates({\n ...peerStatesRef.current,\n [userId]: state,\n })\n setHeartbeats({\n ...heartbeatsRef.current,\n [userId]: getTime(),\n })\n }\n // Remove peers we haven't seen recently\n const pruneOfflinePeers = () => {\n const peerStates = { ...peerStatesRef.current }\n const heartbeats = { ...heartbeatsRef.current }\n const time = getTime()\n let hasChanges = false\n for (const key in heartbeats) {\n if (time - heartbeats[key] > offlineTimeout) {\n delete peerStates[key]\n delete heartbeats[key]\n hasChanges = true\n }\n }\n if (hasChanges) {\n setPeerStates(peerStates)\n setHeartbeats(heartbeats)\n }\n }\n handle.on(\"ephemeral-message\", handleIncomingUpdate)\n // Check for offline peers every `offlineTimeout` ms\n const pruneOfflinePeersIntervalId = setInterval(\n pruneOfflinePeers,\n offlineTimeout\n )\n return () => {\n handle.removeListener(\"ephemeral-message\", handleIncomingUpdate)\n clearInterval(pruneOfflinePeersIntervalId)\n }\n }, [handle, localUserId, offlineTimeout, getTime])\n\n return [peerStates, heartbeats]\n}\n","import { useEffect } from \"react\"\nimport useStateRef from \"react-usestateref\"\nimport { peerEvents } from \"./useRemoteAwareness.js\"\nimport { DocHandle } from \"@automerge/automerge-repo/slim\"\n\nexport interface UseLocalAwarenessProps {\n /** The document handle to send ephemeral state on */\n handle?: DocHandle<unknown>\n /** Our user ID **/\n userId: string\n /** The initial state object/primitive we should advertise */\n initialState: any\n /** How frequently to send heartbeats */\n heartbeatTime?: number\n}\n/**\n * @deprecated use the usePresence hook instead\n *\n * This hook maintains state for the local client.\n * Like React.useState, it returns a [state, setState] array.\n * It is intended to be used alongside useRemoteAwareness.\n *\n * When state is changed it is broadcast to all clients.\n * It also broadcasts a heartbeat to let other clients know it is online.\n *\n * Note that userIds aren't secure (yet). Any client can lie about theirs.\n *\n * @param {string} props.userId Unique user ID. Clients can lie about this.\n * @param {any} props.initialState Initial state object/primitive\n * @param {number?1500} props.heartbeatTime How often to send a heartbeat (in ms)\n * @returns [state, setState]\n */\nexport const useLocalAwareness = ({\n handle,\n userId,\n initialState,\n heartbeatTime = 15000,\n}: UseLocalAwarenessProps) => {\n const [localState, setLocalState, localStateRef] = useStateRef(initialState)\n\n const setState = (stateOrUpdater: any) => {\n const state =\n typeof stateOrUpdater === \"function\"\n ? stateOrUpdater(localStateRef.current)\n : stateOrUpdater\n setLocalState(state)\n // TODO: Send deltas instead of entire state\n if (handle) {\n handle.broadcast([userId, state])\n }\n }\n\n useEffect(() => {\n // Don't broadcast if userId or handle isn't set: this avoids bogus broadcasts\n // during the loading of a userId document or handle.\n if (!userId || !handle) {\n return\n }\n\n // Send periodic heartbeats\n const heartbeat = () =>\n void handle.broadcast([userId, localStateRef.current])\n heartbeat() // Initial heartbeat\n // TODO: we don't need to send a heartbeat if we've changed state recently; use recursive setTimeout instead of setInterval\n const heartbeatIntervalId = setInterval(heartbeat, heartbeatTime)\n return () => void clearInterval(heartbeatIntervalId)\n }, [handle, userId, heartbeatTime])\n\n useEffect(() => {\n // Send entire state to new peers\n if (!handle || !userId) {\n return\n }\n\n let broadcastTimeoutId: ReturnType<typeof setTimeout>\n const newPeerEvents = peerEvents.on(\"new_peer\", () => {\n broadcastTimeoutId = setTimeout(\n () => handle.broadcast([userId, localStateRef.current]),\n 500 // Wait for the peer to be ready\n )\n })\n return () => {\n newPeerEvents.off(\"new_peer\")\n broadcastTimeoutId && clearTimeout(broadcastTimeoutId)\n }\n }, [handle, userId, peerEvents])\n\n // TODO: Send an \"offline\" message on unmount\n // useEffect(\n // () => () => void handle.broadcast(null), // Same as Yjs awareness\n // []\n // );\n\n return [localState, setState]\n}\n","// Properties of the document root object\nexport const STATE = Symbol.for(\"_am_meta\"); // symbol used to hide application metadata on automerge objects\nexport const TRACE = Symbol.for(\"_am_trace\"); // used for debugging\nexport const OBJECT_ID = Symbol.for(\"_am_objectId\"); // symbol used to hide the object id on automerge objects\nexport const IS_PROXY = Symbol.for(\"_am_isProxy\"); // symbol used to test if the document is a proxy object\nexport const CLEAR_CACHE = Symbol.for(\"_am_clearCache\"); // symbol used to tell a proxy object to clear its cache\nexport const UINT = Symbol.for(\"_am_uint\");\nexport const INT = Symbol.for(\"_am_int\");\nexport const F64 = Symbol.for(\"_am_f64\");\nexport const COUNTER = Symbol.for(\"_am_counter\");\nexport const TEXT = Symbol.for(\"_am_text\");\nexport const IMMUTABLE_STRING = Symbol.for(\"_am_immutableString\");\n","import { COUNTER } from \"./constants.js\";\n/**\n * The most basic CRDT: an integer value that can be changed only by\n * incrementing and decrementing. Since addition of integers is commutative,\n * the value trivially converges.\n */\nexport class Counter {\n constructor(value) {\n this.value = value || 0;\n Reflect.defineProperty(this, COUNTER, { value: true });\n }\n /**\n * A peculiar JavaScript language feature from its early days: if the object\n * `x` has a `valueOf()` method that returns a number, you can use numerical\n * operators on the object `x` directly, such as `x + 1` or `x < 4`.\n * This method is also called when coercing a value to a string by\n * concatenating it with another string, as in `x + ''`.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/valueOf\n */\n valueOf() {\n return this.value;\n }\n /**\n * Returns the counter value as a decimal string. If `x` is a counter object,\n * this method is called e.g. when you do `['value: ', x].join('')` or when\n * you use string interpolation: `value: ${x}`.\n */\n toString() {\n return this.valueOf().toString();\n }\n /**\n * Returns the counter value, so that a JSON serialization of an Automerge\n * document represents the counter simply as an integer.\n */\n toJSON() {\n return this.value;\n }\n /**\n * Increases the value of the counter by `delta`. If `delta` is not given,\n * increases the value of the counter by 1.\n *\n * Will throw an error if used outside of a change callback.\n */\n increment(_delta) {\n throw new Error(\"Counters should not be incremented outside of a change callback\");\n }\n /**\n * Decreases the value of the counter by `delta`. If `delta` is not given,\n * decreases the value of the counter by 1.\n *\n * Will throw an error if used outside of a change callback.\n */\n decrement(_delta) {\n throw new Error(\"Counters should not be decremented outside of a change callback\");\n }\n}\n/**\n * An instance of this class is used when a counter is accessed within a change\n * callback.\n */\nclass WriteableCounter extends Counter {\n constructor(value, context, path, objectId, key) {\n super(value);\n this.context = context;\n this.path = path;\n this.objectId = objectId;\n this.key = key;\n }\n /**\n * Increases the value of the counter by `delta`. If `delta` is not given,\n * increases the value of the counter by 1.\n */\n increment(delta) {\n delta = typeof delta === \"number\" ? delta : 1;\n this.context.increment(this.objectId, this.key, delta);\n this.value += delta;\n return this.value;\n }\n /**\n * Decreases the value of the counter by `delta`. If `delta` is not given,\n * decreases the value of the counter by 1.\n */\n decrement(delta) {\n return this.increment(typeof delta === \"number\" ? -delta : -1);\n }\n}\n/**\n * Returns an instance of `WriteableCounter` for use in a change callback.\n * `context` is the proxy context that keeps track of the mutations.\n * `objectId` is the ID of the object containing the counter, and `key` is\n * the property name (key in map, or index in list) where the counter is\n * located.\n */\nexport function getWriteableCounter(value, context, path, objectId, key) {\n return new WriteableCounter(value, context, path, objectId, key);\n}\n//module.exports = { Counter, getWriteableCounter }\n","var _a;\nimport { IMMUTABLE_STRING } from \"./constants.js\";\nexport class ImmutableString {\n constructor(val) {\n // Used to detect whether a value is a ImmutableString object rather than using an instanceof check\n this[_a] = true;\n this.val = val;\n }\n /**\n * Returns the content of the ImmutableString object as a simple string\n */\n toString() {\n return this.val;\n }\n toJSON() {\n return this.val;\n }\n}\n_a = IMMUTABLE_STRING;\n","import { getWriteableCounter } from \"./counter.js\";\nimport { STATE, TRACE, IS_PROXY, OBJECT_ID, CLEAR_CACHE, COUNTER, INT, UINT, F64, IMMUTABLE_STRING, TEXT, } from \"./constants.js\";\nimport { ImmutableString } from \"./immutable_string.js\";\nfunction parseListIndex(key) {\n if (typeof key === \"string\" && /^[0-9]+$/.test(key))\n key = parseInt(key, 10);\n if (typeof key !== \"number\") {\n return key;\n }\n if (key < 0 || isNaN(key) || key === Infinity || key === -Infinity) {\n throw new RangeError(\"A list index must be positive, but you passed \" + key);\n }\n return key;\n}\nfunction valueAt(target, prop) {\n const { context, objectId, path } = target;\n const value = context.getWithType(objectId, prop);\n if (value === null) {\n return;\n }\n const datatype = value[0];\n const val = value[1];\n switch (datatype) {\n case undefined:\n return;\n case \"map\":\n return mapProxy(context, val, [...path, prop]);\n case \"list\":\n return listProxy(context, val, [...path, prop]);\n case \"text\":\n return context.text(val);\n case \"str\":\n return new ImmutableString(val);\n case \"uint\":\n return val;\n case \"int\":\n return val;\n case \"f64\":\n return val;\n case \"boolean\":\n return val;\n case \"null\":\n return null;\n case \"bytes\":\n return val;\n case \"timestamp\":\n return val;\n case \"counter\": {\n const counter = getWriteableCounter(val, context, path, objectId, prop);\n return counter;\n }\n default:\n throw RangeError(`datatype ${datatype} unimplemented`);\n }\n}\nfunction import_value(value, path, context) {\n const type = typeof value;\n switch (type) {\n case \"object\":\n if (value == null) {\n return [null, \"null\"];\n }\n else if (value[UINT]) {\n return [value.value, \"uint\"];\n }\n else if (value[INT]) {\n return [value.value, \"int\"];\n }\n else if (value[F64]) {\n return [value.value, \"f64\"];\n }\n else if (value[COUNTER]) {\n return [value.value, \"counter\"];\n }\n else if (value instanceof Date) {\n return [value.getTime(), \"timestamp\"];\n }\n else if (isImmutableString(value)) {\n return [value.toString(), \"str\"];\n }\n else if (value instanceof Uint8Array) {\n return [value, \"bytes\"];\n }\n else if (value instanceof Array) {\n return [value, \"list\"];\n }\n else if (Object.prototype.toString.call(value) === \"[object Object]\") {\n return [value, \"map\"];\n }\n else if (isSameDocument(value, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n else {\n throw new RangeError(`Cannot assign unknown object: ${value}`);\n }\n case \"boolean\":\n return [value, \"boolean\"];\n case \"number\":\n if (Number.isInteger(value)) {\n return [value, \"int\"];\n }\n else {\n return [value, \"f64\"];\n }\n case \"string\":\n return [value, \"text\"];\n case \"undefined\":\n throw new RangeError([\n `Cannot assign undefined value at ${printPath(path)}, `,\n \"because `undefined` is not a valid JSON data type. \",\n \"You might consider setting the property's value to `null`, \",\n \"or using `delete` to remove it altogether.\",\n ].join(\"\"));\n default:\n throw new RangeError([\n `Cannot assign ${type} value at ${printPath(path)}. `,\n `All JSON primitive datatypes (object, array, string, number, boolean, null) `,\n `are supported in an Automerge document; ${type} values are not. `,\n ].join(\"\"));\n }\n}\n// When we assign a value to a property in a proxy we recursively walk through\n// the value we are assigning and copy it into the document. This is generally\n// desirable behaviour. However, a very common bug is to accidentally assign a\n// value which is already in the document to another key within the same\n// document, this often leads to surprising behaviour where users expected to\n// _move_ the object, but it is instead copied. To avoid this we check if the\n// value is from the same document and if it is we throw an error, this means\n// we require an explicit Object.assign call to copy the object, thus avoiding\n// the footgun\nfunction isSameDocument(val, context) {\n var _b, _c;\n // Date is technically an object, but immutable, so allowing people to assign\n // a date from one place in the document to another place in the document is\n // not likely to be a bug\n if (val instanceof Date) {\n return false;\n }\n // this depends on __wbg_ptr being the wasm pointer\n // a new version of wasm-bindgen will break this\n // but the tests should expose the break\n if (val && ((_c = (_b = val[STATE]) === null || _b === void 0 ? void 0 : _b.handle) === null || _c === void 0 ? void 0 : _c.__wbg_ptr) === context.__wbg_ptr) {\n return true;\n }\n return false;\n}\nconst MapHandler = {\n get(target, key) {\n const { context, objectId, cache } = target;\n if (key === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (key === OBJECT_ID)\n return objectId;\n if (key === IS_PROXY)\n return true;\n if (key === TRACE)\n return target.trace;\n if (key === STATE)\n return { handle: context };\n if (!cache[key]) {\n cache[key] = valueAt(target, key);\n }\n return cache[key];\n },\n set(target, key, val) {\n const { context, objectId, path } = target;\n target.cache = {}; // reset cache on set\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n if (key === TRACE) {\n target.trace = val;\n return true;\n }\n if (key === CLEAR_CACHE) {\n return true;\n }\n const [value, datatype] = import_value(val, [...path, key], context);\n switch (datatype) {\n case \"list\": {\n const list = context.putObject(objectId, key, []);\n const proxyList = listProxy(context, list, [...path, key]);\n for (let i = 0; i < value.length; i++) {\n proxyList[i] = value[i];\n }\n break;\n }\n case \"text\": {\n context.putObject(objectId, key, value);\n break;\n }\n case \"map\": {\n const map = context.putObject(objectId, key, {});\n const proxyMap = mapProxy(context, map, [...path, key]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n context.put(objectId, key, value, datatype);\n }\n return true;\n },\n deleteProperty(target, key) {\n const { context, objectId } = target;\n target.cache = {}; // reset cache on delete\n context.delete(objectId, key);\n return true;\n },\n has(target, key) {\n const value = this.get(target, key);\n return value !== undefined;\n },\n getOwnPropertyDescriptor(target, key) {\n // const { context, objectId } = target\n const value = this.get(target, key);\n if (typeof value !== \"undefined\") {\n return {\n configurable: true,\n enumerable: true,\n value,\n };\n }\n },\n ownKeys(target) {\n const { context, objectId } = target;\n // FIXME - this is a tmp workaround until fix the dupe key bug in keys()\n const keys = context.keys(objectId);\n return [...new Set(keys)];\n },\n};\nconst ListHandler = {\n get(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (index === Symbol.hasInstance) {\n return (instance) => {\n return Array.isArray(instance);\n };\n }\n if (index === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (index === OBJECT_ID)\n return objectId;\n if (index === IS_PROXY)\n return true;\n if (index === TRACE)\n return target.trace;\n if (index === STATE)\n return { handle: context };\n if (index === \"length\")\n return context.length(objectId);\n if (typeof index === \"number\") {\n return valueAt(target, index);\n }\n else {\n return listMethods(target)[index];\n }\n },\n set(target, index, val) {\n const { context, objectId, path } = target;\n index = parseListIndex(index);\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n if (index === CLEAR_CACHE) {\n return true;\n }\n if (index === TRACE) {\n target.trace = val;\n return true;\n }\n if (typeof index == \"string\") {\n throw new RangeError(\"list index must be a number\");\n }\n const [value, datatype] = import_value(val, [...path, index], context);\n switch (datatype) {\n case \"list\": {\n let list;\n if (index >= context.length(objectId)) {\n list = context.insertObject(objectId, index, []);\n }\n else {\n list = context.putObject(objectId, index, []);\n }\n const proxyList = listProxy(context, list, [...path, index]);\n proxyList.splice(0, 0, ...value);\n break;\n }\n case \"text\": {\n if (index >= context.length(objectId)) {\n context.insertObject(objectId, index, value);\n }\n else {\n context.putObject(objectId, index, value);\n }\n break;\n }\n case \"map\": {\n let map;\n if (index >= context.length(objectId)) {\n map = context.insertObject(objectId, index, {});\n }\n else {\n map = context.putObject(objectId, index, {});\n }\n const proxyMap = mapProxy(context, map, [...path, index]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n if (index >= context.length(objectId)) {\n context.insert(objectId, index, value, datatype);\n }\n else {\n context.put(objectId, index, value, datatype);\n }\n }\n return true;\n },\n deleteProperty(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n const elem = context.get(objectId, index);\n if (elem != null && elem[0] == \"counter\") {\n throw new TypeError(\"Unsupported operation: deleting a counter from a list\");\n }\n context.delete(objectId, index);\n return true;\n },\n has(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (typeof index === \"number\") {\n return index < context.length(objectId);\n }\n return index === \"length\";\n },\n getOwnPropertyDescriptor(target, index) {\n const { context, objectId } = target;\n if (index === \"length\")\n return { writable: true, value: context.length(objectId) };\n if (index === OBJECT_ID)\n return { configurable: false, enumerable: false, value: objectId };\n index = parseListIndex(index);\n const value = valueAt(target, index);\n return { configurable: true, enumerable: true, value };\n },\n getPrototypeOf(target) {\n return Object.getPrototypeOf(target);\n },\n ownKeys( /*target*/) {\n const keys = [];\n // uncommenting this causes assert.deepEqual() to fail when comparing to a pojo array\n // but not uncommenting it causes for (i in list) {} to not enumerate values properly\n //const {context, objectId } = target\n //for (let i = 0; i < target.context.length(objectId); i++) { keys.push(i.toString()) }\n keys.push(\"length\");\n return keys;\n },\n};\nconst TextHandler = Object.assign({}, ListHandler, {\n get(target, index) {\n const { context, objectId } = target;\n index = parseListIndex(index);\n if (index === Symbol.hasInstance) {\n return (instance) => {\n return Array.isArray(instance);\n };\n }\n if (index === Symbol.toStringTag) {\n return target[Symbol.toStringTag];\n }\n if (index === OBJECT_ID)\n return objectId;\n if (index === IS_PROXY)\n return true;\n if (index === TRACE)\n return target.trace;\n if (index === STATE)\n return { handle: context };\n if (index === \"length\")\n return context.length(objectId);\n if (typeof index === \"number\") {\n return valueAt(target, index);\n }\n else {\n return textMethods(target)[index] || listMethods(target)[index];\n }\n },\n getPrototypeOf( /*target*/) {\n return Object.getPrototypeOf(new Text());\n },\n});\nexport function mapProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = {};\n Object.assign(proxied, target);\n const result = new Proxy(proxied, MapHandler);\n // conversion through unknown is necessary because the types are so different\n return result;\n}\nexport function listProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = [];\n Object.assign(proxied, target);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return new Proxy(proxied, ListHandler);\n}\nexport function textProxy(context, objectId, path) {\n const target = {\n context,\n objectId,\n path: path || [],\n cache: {},\n };\n const proxied = {};\n Object.assign(proxied, target);\n return new Proxy(proxied, TextHandler);\n}\nexport function rootProxy(context) {\n /* eslint-disable-next-line */\n return mapProxy(context, \"_root\", []);\n}\nfunction listMethods(target) {\n const { context, objectId, path } = target;\n const methods = {\n at(index) {\n return valueAt(target, index);\n },\n deleteAt(index, numDelete) {\n if (typeof numDelete === \"number\") {\n context.splice(objectId, index, numDelete);\n }\n else {\n context.delete(objectId, index);\n }\n return this;\n },\n fill(val, start, end) {\n const [value, datatype] = import_value(val, [...path, start], context);\n const length = context.length(objectId);\n start = parseListIndex(start || 0);\n end = parseListIndex(end || length);\n for (let i = start; i < Math.min(end, length); i++) {\n if (datatype === \"list\" || datatype === \"map\") {\n context.putObject(objectId, i, value);\n }\n else if (datatype === \"text\") {\n context.putObject(objectId, i, value);\n }\n else {\n context.put(objectId, i, value, datatype);\n }\n }\n return this;\n },\n indexOf(searchElement, start = 0) {\n const length = context.length(objectId);\n for (let i = start; i < length; i++) {\n const valueWithType = context.getWithType(objectId, i);\n if (!valueWithType) {\n continue;\n }\n const [valType, value] = valueWithType;\n // Either the target element is an object, and we return if we have found\n // the same object or it is a primitive value and we return if it matches\n // the current value\n const isObject = [\"map\", \"list\", \"text\"].includes(valType);\n if (!isObject) {\n // If the element is not an object, then check if the value is equal to the target\n if (value === searchElement) {\n return i;\n }\n else {\n continue;\n }\n }\n // if it's an object, but the type of the search element is a string, then we\n // need to check if the object is a text object with the same value as the search element\n if (valType === \"text\" && typeof searchElement === \"string\") {\n if (searchElement === valueAt(target, i)) {\n return i;\n }\n }\n // The only possible match now is if the searchElement is an object already in the\n // automerge document with the same object ID as the value\n if (searchElement[OBJECT_ID] === value) {\n return i;\n }\n }\n return -1;\n },\n insertAt(index, ...values) {\n this.splice(index, 0, ...values);\n return this;\n },\n pop() {\n const length = context.length(objectId);\n if (length == 0) {\n return undefined;\n }\n const last = valueAt(target, length - 1);\n context.delete(objectId, length - 1);\n return last;\n },\n push(...values) {\n const len = context.length(objectId);\n this.splice(len, 0, ...values);\n return context.length(objectId);\n },\n shift() {\n if (context.length(objectId) == 0)\n return;\n const first = valueAt(target, 0);\n context.delete(objectId, 0);\n return first;\n },\n splice(index, del, ...vals) {\n index = parseListIndex(index);\n // if del is undefined, delete until the end of the list\n if (typeof del !== \"number\") {\n del = context.length(objectId) - index;\n }\n del = parseListIndex(del);\n for (const val of vals) {\n if (isSameDocument(val, context)) {\n throw new RangeError(\"Cannot create a reference to an existing document object\");\n }\n }\n const result = [];\n for (let i = 0; i < del; i++) {\n const value = valueAt(target, index);\n if (value !== undefined) {\n result.push(value);\n }\n context.delete(objectId, index);\n }\n const values = vals.map((val, index) => {\n try {\n return import_value(val, [...path], context);\n }\n catch (e) {\n if (e instanceof RangeError) {\n throw new RangeError(`${e.message} (at index ${index} in the input)`);\n }\n else {\n throw e;\n }\n }\n });\n for (const [value, datatype] of values) {\n switch (datatype) {\n case \"list\": {\n const list = context.insertObject(objectId, index, []);\n const proxyList = listProxy(context, list, [...path, index]);\n proxyList.splice(0, 0, ...value);\n break;\n }\n case \"text\": {\n context.insertObject(objectId, index, value);\n break;\n }\n case \"map\": {\n const map = context.insertObject(objectId, index, {});\n const proxyMap = mapProxy(context, map, [...path, index]);\n for (const key in value) {\n proxyMap[key] = value[key];\n }\n break;\n }\n default:\n context.insert(objectId, index, value, datatype);\n }\n index += 1;\n }\n return result;\n },\n unshift(...values) {\n this.splice(0, 0, ...values);\n return context.length(objectId);\n },\n entries() {\n let i = 0;\n const iterator = {\n next: () => {\n const value = valueAt(target, i);\n if (value === undefined) {\n return { value: undefined, done: true };\n }\n else {\n return { value: [i++, value], done: false };\n }\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n keys() {\n let i = 0;\n const len = context.length(objectId);\n const iterator = {\n next: () => {\n if (i < len) {\n return { value: i++, done: false };\n }\n return { value: undefined, done: true };\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n values() {\n let i = 0;\n const iterator = {\n next: () => {\n const value = valueAt(target, i++);\n if (value === undefined) {\n return { value: undefined, done: true };\n }\n else {\n return { value, done: false };\n }\n },\n [Symbol.iterator]() {\n return this;\n },\n };\n return iterator;\n },\n toArray() {\n const list = [];\n let value;\n do {\n value = valueAt(target, list.length);\n if (value !== undefined) {\n list.push(value);\n }\n } while (value !== undefined);\n return list;\n },\n map(f) {\n return this.toArray().map(f);\n },\n toString() {\n return this.toArray().toString();\n },\n toLocaleString() {\n return this.toArray().toLocaleString();\n },\n forEach(f) {\n return this.toArray().forEach(f);\n },\n // todo: real concat function is different\n concat(other) {\n return this.toArray().concat(other);\n },\n every(f) {\n return this.toArray().every(f);\n },\n filter(f) {\n return this.toArray().filter(f);\n },\n find(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return v;\n }\n index += 1;\n }\n },\n findIndex(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return index;\n }\n index += 1;\n }\n return -1;\n },\n includes(elem) {\n return this.find(e => e === elem) !== undefined;\n },\n join(sep) {\n return this.toArray().join(sep);\n },\n reduce(f, initialValue) {\n return this.toArray().reduce(f, initialValue);\n },\n reduceRight(f, initialValue) {\n return this.toArray().reduceRight(f, initialValue);\n },\n lastIndexOf(search, fromIndex = +Infinity) {\n // this can be faster\n return this.toArray().lastIndexOf(search, fromIndex);\n },\n slice(index, num) {\n return this.toArray().slice(index, num);\n },\n some(f) {\n let index = 0;\n for (const v of this) {\n if (f(v, index)) {\n return true;\n }\n index += 1;\n }\n return false;\n },\n [Symbol.iterator]: function* () {\n let i = 0;\n let value = valueAt(target, i);\n while (value !== undefined) {\n yield value;\n i += 1;\n value = valueAt(target, i);\n }\n },\n };\n return methods;\n}\nfunction textMethods(target) {\n const { context, objectId } = target;\n const methods = {\n set(index, value) {\n return (this[index] = value);\n },\n get(index) {\n return this[index];\n },\n toString() {\n return context.text(objectId).replace(//g, \"\");\n },\n toSpans() {\n const spans = [];\n let chars = \"\";\n const length = context.length(objectId);\n for (let i = 0; i < length; i++) {\n const value = this[i];\n if (typeof value === \"string\") {\n chars += value;\n }\n else {\n if (chars.length > 0) {\n spans.push(chars);\n chars = \"\";\n }\n spans.push(value);\n }\n }\n if (chars.length > 0) {\n spans.push(chars);\n }\n return spans;\n },\n toJSON() {\n return this.toString();\n },\n indexOf(o, start = 0) {\n const text = context.text(objectId);\n return text.indexOf(o, start);\n },\n insertAt(index, ...values) {\n if (values.every(v => typeof v === \"string\")) {\n context.splice(objectId, index, 0, values.join(\"\"));\n }\n else {\n listMethods(target).insertAt(index, ...values);\n }\n },\n };\n return methods;\n}\nfunction printPath(path) {\n // print the path as a json pointer\n const jsonPointerComponents = path.map(component => {\n // if its a number just turn it into a string\n if (typeof component === \"number\") {\n return component.toString();\n }\n else if (typeof component === \"string\") {\n // otherwise we have to escape `/` and `~` characters\n return component.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n }\n });\n if (path.length === 0) {\n return \"\";\n }\n else {\n return \"/\" + jsonPointerComponents.join(\"/\");\n }\n}\n/*\n * Check if an object is a {@link ImmutableString}\n */\nexport function isImmutableString(obj) {\n // We used to determine whether something was a ImmutableString by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a ImmutableString\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, IMMUTABLE_STRING));\n}\nexport function isCounter(obj) {\n // We used to determine whether something was a Counter by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a Counter\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, COUNTER));\n}\n/*\n * Check if an object is a {@link Text}\n */\nexport function isText(obj) {\n // We used to determine whether something was a Text by doing an instanceof check, but\n // this doesn't work if the automerge module is loaded twice somehow. Instead, use the presence\n // of a symbol to determine if something is a TEXT\n return (typeof obj === \"object\" &&\n obj !== null &&\n Object.prototype.hasOwnProperty.call(obj, TEXT));\n}\n","let wasm;\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nconst cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } );\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction addToExternrefTable0(obj) {\n const idx = wasm.__externref_table_alloc();\n wasm.__wbindgen_export_4.set(idx, obj);\n return idx;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n const idx = addToExternrefTable0(e);\n wasm.__wbindgen_exn_store(idx);\n }\n}\n\nconst cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );\n\nif (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction takeFromExternrefTable0(idx) {\n const value = wasm.__wbindgen_export_4.get(idx);\n wasm.__externref_table_dealloc(idx);\n return value;\n}\n\nfunction _assertClass(instance, klass) {\n if (!(instance instanceof klass)) {\n throw new Error(`expected instance of ${klass.name}`);\n }\n}\n/**\n * @param {any} options\n * @returns {Automerge}\n */\nexport function create(options) {\n const ret = wasm.create(options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n}\n\n/**\n * @param {Uint8Array} data\n * @param {any} options\n * @returns {Automerge}\n */\nexport function load(data, options) {\n const ret = wasm.load(data, options);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n}\n\n/**\n * @param {any} change\n * @returns {Uint8Array}\n */\nexport function encodeChange(change) {\n const ret = wasm.encodeChange(change);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @param {Uint8Array} change\n * @returns {DecodedChange}\n */\nexport function decodeChange(change) {\n const ret = wasm.decodeChange(change);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @returns {SyncState}\n */\nexport function initSyncState() {\n const ret = wasm.initSyncState();\n return SyncState.__wrap(ret);\n}\n\n/**\n * @param {any} state\n * @returns {SyncState}\n */\nexport function importSyncState(state) {\n const ret = wasm.importSyncState(state);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return SyncState.__wrap(ret[0]);\n}\n\n/**\n * @param {SyncState} state\n * @returns {JsSyncState}\n */\nexport function exportSyncState(state) {\n _assertClass(state, SyncState);\n const ret = wasm.exportSyncState(state.__wbg_ptr);\n return ret;\n}\n\n/**\n * @param {any} message\n * @returns {SyncMessage}\n */\nexport function encodeSyncMessage(message) {\n const ret = wasm.encodeSyncMessage(message);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @param {Uint8Array} msg\n * @returns {DecodedSyncMessage}\n */\nexport function decodeSyncMessage(msg) {\n const ret = wasm.decodeSyncMessage(msg);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n}\n\n/**\n * @param {SyncState} state\n * @returns {Uint8Array}\n */\nexport function encodeSyncState(state) {\n _assertClass(state, SyncState);\n const ret = wasm.encodeSyncState(state.__wbg_ptr);\n return ret;\n}\n\n/**\n * @param {Uint8Array} data\n * @returns {SyncState}\n */\nexport function decodeSyncState(data) {\n const ret = wasm.decodeSyncState(data);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return SyncState.__wrap(ret[0]);\n}\n\nconst AutomergeFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_automerge_free(ptr >>> 0, 1));\n\nexport class Automerge {\n\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(Automerge.prototype);\n obj.__wbg_ptr = ptr;\n AutomergeFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n AutomergeFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_automerge_free(ptr, 0);\n }\n /**\n * @param {string | null} [actor]\n * @returns {Automerge}\n */\n static new(actor) {\n var ptr0 = isLikeNone(actor) ? 0 : passStringToWasm0(actor, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_new(ptr0, len0);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n }\n /**\n * @param {string | null} [actor]\n * @returns {Automerge}\n */\n clone(actor) {\n var ptr0 = isLikeNone(actor) ? 0 : passStringToWasm0(actor, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_clone(this.__wbg_ptr, ptr0, len0);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n }\n /**\n * @param {string | null | undefined} actor\n * @param {any} heads\n * @returns {Automerge}\n */\n fork(actor, heads) {\n var ptr0 = isLikeNone(actor) ? 0 : passStringToWasm0(actor, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_fork(this.__wbg_ptr, ptr0, len0, heads);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return Automerge.__wrap(ret[0]);\n }\n /**\n * @returns {number}\n */\n pendingOps() {\n const ret = wasm.automerge_pendingOps(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {string | null} [message]\n * @param {number | null} [time]\n * @returns {Hash | null}\n */\n commit(message, time) {\n var ptr0 = isLikeNone(message) ? 0 : passStringToWasm0(message, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_commit(this.__wbg_ptr, ptr0, len0, !isLikeNone(time), isLikeNone(time) ? 0 : time);\n return ret;\n }\n /**\n * @param {Automerge} other\n * @returns {Heads}\n */\n merge(other) {\n _assertClass(other, Automerge);\n const ret = wasm.automerge_merge(this.__wbg_ptr, other.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @returns {number}\n */\n rollback() {\n const ret = wasm.automerge_rollback(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n keys(obj, heads) {\n const ret = wasm.automerge_keys(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {string}\n */\n text(obj, heads) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_text(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n spans(obj, heads) {\n const ret = wasm.automerge_spans(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {number} start\n * @param {number} delete_count\n * @param {any} text\n */\n splice(obj, start, delete_count, text) {\n const ret = wasm.automerge_splice(this.__wbg_ptr, obj, start, delete_count, text);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {string} new_text\n */\n updateText(obj, new_text) {\n const ret = wasm.automerge_updateText(this.__wbg_ptr, obj, new_text);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {Span[]} args\n */\n updateSpans(obj, args) {\n const ret = wasm.automerge_updateSpans(this.__wbg_ptr, obj, args);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} obj\n * @param {any} value\n * @param {any} datatype\n */\n push(obj, value, datatype) {\n const ret = wasm.automerge_push(this.__wbg_ptr, obj, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {ObjType} value\n * @returns {ObjID}\n */\n pushObject(obj, value) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_pushObject(this.__wbg_ptr, obj, value);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {number} index\n * @param {any} value\n * @param {any} datatype\n */\n insert(obj, index, value, datatype) {\n const ret = wasm.automerge_insert(this.__wbg_ptr, obj, index, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n * @param {{[key: string]: MaterializeValue}} block\n */\n splitBlock(obj, index, block) {\n const ret = wasm.automerge_splitBlock(this.__wbg_ptr, obj, index, block);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n */\n joinBlock(obj, index) {\n const ret = wasm.automerge_joinBlock(this.__wbg_ptr, obj, index);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n * @param {{[key: string]: MaterializeValue}} block\n */\n updateBlock(obj, index, block) {\n const ret = wasm.automerge_updateBlock(this.__wbg_ptr, obj, index, block);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} text\n * @param {number} index\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n getBlock(text, index, heads) {\n const ret = wasm.automerge_getBlock(this.__wbg_ptr, text, index, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {ObjID} obj\n * @param {number} index\n * @param {ObjType} value\n * @returns {ObjID}\n */\n insertObject(obj, index, value) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_insertObject(this.__wbg_ptr, obj, index, value);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {any} prop\n * @param {any} value\n * @param {any} datatype\n */\n put(obj, prop, value, datatype) {\n const ret = wasm.automerge_put(this.__wbg_ptr, obj, prop, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {Prop} prop\n * @param {ObjType} value\n * @returns {ObjID}\n */\n putObject(obj, prop, value) {\n const ret = wasm.automerge_putObject(this.__wbg_ptr, obj, prop, value);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {ObjID} obj\n * @param {Prop} prop\n * @param {number} value\n */\n increment(obj, prop, value) {\n const ret = wasm.automerge_increment(this.__wbg_ptr, obj, prop, value);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} obj\n * @param {any} prop\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n get(obj, prop, heads) {\n const ret = wasm.automerge_get(this.__wbg_ptr, obj, prop, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {any} prop\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n getWithType(obj, prop, heads) {\n const ret = wasm.automerge_getWithType(this.__wbg_ptr, obj, prop, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {object}\n */\n objInfo(obj, heads) {\n const ret = wasm.automerge_objInfo(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {any} arg\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n getAll(obj, arg, heads) {\n const ret = wasm.automerge_getAll(this.__wbg_ptr, obj, arg, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {boolean} enable\n * @returns {boolean}\n */\n enableFreeze(enable) {\n const ret = wasm.automerge_enableFreeze(this.__wbg_ptr, enable);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0] !== 0;\n }\n /**\n * @param {string} datatype\n * @param {Function} construct\n * @param {(arg: any) => any | undefined} deconstruct\n */\n registerDatatype(datatype, construct, deconstruct) {\n const ret = wasm.automerge_registerDatatype(this.__wbg_ptr, datatype, construct, deconstruct);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} object\n * @param {any} meta\n * @returns {any}\n */\n applyPatches(object, meta) {\n const ret = wasm.automerge_applyPatches(this.__wbg_ptr, object, meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} object\n * @param {any} meta\n * @returns {any}\n */\n applyAndReturnPatches(object, meta) {\n const ret = wasm.automerge_applyAndReturnPatches(this.__wbg_ptr, object, meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @returns {Patch[]}\n */\n diffIncremental() {\n const ret = wasm.automerge_diffIncremental(this.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n updateDiffCursor() {\n wasm.automerge_updateDiffCursor(this.__wbg_ptr);\n }\n resetDiffCursor() {\n wasm.automerge_resetDiffCursor(this.__wbg_ptr);\n }\n /**\n * @param {Heads} before\n * @param {Heads} after\n * @returns {Patch[]}\n */\n diff(before, after) {\n const ret = wasm.automerge_diff(this.__wbg_ptr, before, after);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Heads} heads\n */\n isolate(heads) {\n const ret = wasm.automerge_isolate(this.__wbg_ptr, heads);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n integrate() {\n wasm.automerge_integrate(this.__wbg_ptr);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {number}\n */\n length(obj, heads) {\n const ret = wasm.automerge_length(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0];\n }\n /**\n * @param {ObjID} obj\n * @param {Prop} prop\n */\n delete(obj, prop) {\n const ret = wasm.automerge_delete(this.__wbg_ptr, obj, prop);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @returns {Uint8Array}\n */\n save() {\n const ret = wasm.automerge_save(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Uint8Array}\n */\n saveIncremental() {\n const ret = wasm.automerge_saveIncremental(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {Heads} heads\n * @returns {Uint8Array}\n */\n saveSince(heads) {\n const ret = wasm.automerge_saveSince(this.__wbg_ptr, heads);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @returns {Uint8Array}\n */\n saveNoCompress() {\n const ret = wasm.automerge_saveNoCompress(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Uint8Array}\n */\n saveAndVerify() {\n const ret = wasm.automerge_saveAndVerify(this.__wbg_ptr);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Uint8Array} data\n * @returns {number}\n */\n loadIncremental(data) {\n const ret = wasm.automerge_loadIncremental(this.__wbg_ptr, data);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0];\n }\n /**\n * @param {Change[]} changes\n */\n applyChanges(changes) {\n const ret = wasm.automerge_applyChanges(this.__wbg_ptr, changes);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {Heads} have_deps\n * @returns {Change[]}\n */\n getChanges(have_deps) {\n const ret = wasm.automerge_getChanges(this.__wbg_ptr, have_deps);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Heads} have_deps\n * @returns {ChangeMetadata[]}\n */\n getChangesMeta(have_deps) {\n const ret = wasm.automerge_getChangesMeta(this.__wbg_ptr, have_deps);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Hash} hash\n * @returns {Change | null}\n */\n getChangeByHash(hash) {\n const ret = wasm.automerge_getChangeByHash(this.__wbg_ptr, hash);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Hash} hash\n * @returns {ChangeMetadata | null}\n */\n getChangeMetaByHash(hash) {\n const ret = wasm.automerge_getChangeMetaByHash(this.__wbg_ptr, hash);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Hash} hash\n * @returns {DecodedChange | null}\n */\n getDecodedChangeByHash(hash) {\n const ret = wasm.automerge_getDecodedChangeByHash(this.__wbg_ptr, hash);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {Automerge} other\n * @returns {Change[]}\n */\n getChangesAdded(other) {\n _assertClass(other, Automerge);\n const ret = wasm.automerge_getChangesAdded(this.__wbg_ptr, other.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Heads}\n */\n getHeads() {\n const ret = wasm.automerge_getHeads(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Actor}\n */\n getActorId() {\n let deferred1_0;\n let deferred1_1;\n try {\n const ret = wasm.automerge_getActorId(this.__wbg_ptr);\n deferred1_0 = ret[0];\n deferred1_1 = ret[1];\n return getStringFromWasm0(ret[0], ret[1]);\n } finally {\n wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);\n }\n }\n /**\n * @returns {Change | null}\n */\n getLastLocalChange() {\n const ret = wasm.automerge_getLastLocalChange(this.__wbg_ptr);\n return ret;\n }\n dump() {\n wasm.automerge_dump(this.__wbg_ptr);\n }\n /**\n * @param {Array<any> | null} [heads]\n * @returns {Array<any>}\n */\n getMissingDeps(heads) {\n const ret = wasm.automerge_getMissingDeps(this.__wbg_ptr, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {SyncState} state\n * @param {SyncMessage} message\n */\n receiveSyncMessage(state, message) {\n _assertClass(state, SyncState);\n const ret = wasm.automerge_receiveSyncMessage(this.__wbg_ptr, state.__wbg_ptr, message);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {SyncState} state\n * @returns {SyncMessage | null}\n */\n generateSyncMessage(state) {\n _assertClass(state, SyncState);\n const ret = wasm.automerge_generateSyncMessage(this.__wbg_ptr, state.__wbg_ptr);\n return ret;\n }\n /**\n * @param {any} meta\n * @returns {MaterializeValue}\n */\n toJS(meta) {\n const ret = wasm.automerge_toJS(this.__wbg_ptr, meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null | undefined} heads\n * @param {any} meta\n * @returns {any}\n */\n materialize(obj, heads, meta) {\n const ret = wasm.automerge_materialize(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads), meta);\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {any} position\n * @param {Array<any> | null | undefined} heads\n * @param {any} move_cursor\n * @returns {string}\n */\n getCursor(obj, position, heads, move_cursor) {\n let deferred2_0;\n let deferred2_1;\n try {\n const ret = wasm.automerge_getCursor(this.__wbg_ptr, obj, position, isLikeNone(heads) ? 0 : addToExternrefTable0(heads), move_cursor);\n var ptr1 = ret[0];\n var len1 = ret[1];\n if (ret[3]) {\n ptr1 = 0; len1 = 0;\n throw takeFromExternrefTable0(ret[2]);\n }\n deferred2_0 = ptr1;\n deferred2_1 = len1;\n return getStringFromWasm0(ptr1, len1);\n } finally {\n wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);\n }\n }\n /**\n * @param {any} obj\n * @param {any} cursor\n * @param {Array<any> | null} [heads]\n * @returns {number}\n */\n getCursorPosition(obj, cursor, heads) {\n const ret = wasm.automerge_getCursorPosition(this.__wbg_ptr, obj, cursor, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return ret[0];\n }\n /**\n * @param {string | null} [message]\n * @param {number | null} [time]\n * @returns {Hash}\n */\n emptyChange(message, time) {\n var ptr0 = isLikeNone(message) ? 0 : passStringToWasm0(message, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n const ret = wasm.automerge_emptyChange(this.__wbg_ptr, ptr0, len0, !isLikeNone(time), isLikeNone(time) ? 0 : time);\n return ret;\n }\n /**\n * @param {any} obj\n * @param {any} range\n * @param {any} name\n * @param {any} value\n * @param {any} datatype\n */\n mark(obj, range, name, value, datatype) {\n const ret = wasm.automerge_mark(this.__wbg_ptr, obj, range, name, value, datatype);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {ObjID} obj\n * @param {MarkRange} range\n * @param {string} name\n */\n unmark(obj, range, name) {\n const ret = wasm.automerge_unmark(this.__wbg_ptr, obj, range, name);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {any} obj\n * @param {Array<any> | null} [heads]\n * @returns {any}\n */\n marks(obj, heads) {\n const ret = wasm.automerge_marks(this.__wbg_ptr, obj, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {any} obj\n * @param {number} index\n * @param {Array<any> | null} [heads]\n * @returns {object}\n */\n marksAt(obj, index, heads) {\n const ret = wasm.automerge_marksAt(this.__wbg_ptr, obj, index, isLikeNone(heads) ? 0 : addToExternrefTable0(heads));\n if (ret[2]) {\n throw takeFromExternrefTable0(ret[1]);\n }\n return takeFromExternrefTable0(ret[0]);\n }\n /**\n * @param {SyncState} state\n * @returns {boolean}\n */\n hasOurChanges(state) {\n _assertClass(state, SyncState);\n const ret = wasm.automerge_hasOurChanges(this.__wbg_ptr, state.__wbg_ptr);\n return ret !== 0;\n }\n /**\n * @returns {Hash[]}\n */\n topoHistoryTraversal() {\n const ret = wasm.automerge_topoHistoryTraversal(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Stats}\n */\n stats() {\n const ret = wasm.automerge_stats(this.__wbg_ptr);\n return ret;\n }\n}\n\nconst SyncStateFinalization = (typeof FinalizationRegistry === 'undefined')\n ? { register: () => {}, unregister: () => {} }\n : new FinalizationRegistry(ptr => wasm.__wbg_syncstate_free(ptr >>> 0, 1));\n\nexport class SyncState {\n\n static __wrap(ptr) {\n ptr = ptr >>> 0;\n const obj = Object.create(SyncState.prototype);\n obj.__wbg_ptr = ptr;\n SyncStateFinalization.register(obj, obj.__wbg_ptr, obj);\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n SyncStateFinalization.unregister(this);\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_syncstate_free(ptr, 0);\n }\n /**\n * @returns {Heads}\n */\n get sharedHeads() {\n const ret = wasm.syncstate_sharedHeads(this.__wbg_ptr);\n return ret;\n }\n /**\n * @returns {Heads}\n */\n get lastSentHeads() {\n const ret = wasm.syncstate_lastSentHeads(this.__wbg_ptr);\n return ret;\n }\n /**\n * @param {Heads} heads\n */\n set lastSentHeads(heads) {\n const ret = wasm.syncstate_set_lastSentHeads(this.__wbg_ptr, heads);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @param {Heads} hashes\n */\n set sentHashes(hashes) {\n const ret = wasm.syncstate_set_sentHashes(this.__wbg_ptr, hashes);\n if (ret[1]) {\n throw takeFromExternrefTable0(ret[0]);\n }\n }\n /**\n * @returns {SyncState}\n */\n clone() {\n const ret = wasm.syncstate_clone(this.__wbg_ptr);\n return SyncState.__wrap(ret);\n }\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_String_8f0eb39a4a4c2f66 = function(arg0, arg1) {\n const ret = String(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_apply_eb9e9b97497f91e4 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.apply(arg0, arg1, arg2);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_assign_3627b8559449930a = function(arg0, arg1) {\n const ret = Object.assign(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) {\n const ret = arg0.buffer;\n return ret;\n };\n imports.wbg.__wbg_call_672a4d21634d4a24 = function() { return handleError(function (arg0, arg1) {\n const ret = arg0.call(arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_call_7cccdd69e0791ae2 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = arg0.call(arg1, arg2);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_concat_9de968491c4340cf = function(arg0, arg1) {\n const ret = arg0.concat(arg1);\n return ret;\n };\n imports.wbg.__wbg_crypto_574e78ad8b13b65f = function(arg0) {\n const ret = arg0.crypto;\n return ret;\n };\n imports.wbg.__wbg_defineProperty_a3ddad9901e2d29e = function(arg0, arg1, arg2) {\n const ret = Object.defineProperty(arg0, arg1, arg2);\n return ret;\n };\n imports.wbg.__wbg_deleteProperty_96363d4a1d977c97 = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.deleteProperty(arg0, arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_done_769e5ede4b31c67b = function(arg0) {\n const ret = arg0.done;\n return ret;\n };\n imports.wbg.__wbg_entries_3265d4158b33e5dc = function(arg0) {\n const ret = Object.entries(arg0);\n return ret;\n };\n imports.wbg.__wbg_error_7534b8e9a36f1ab4 = function(arg0, arg1) {\n let deferred0_0;\n let deferred0_1;\n try {\n deferred0_0 = arg0;\n deferred0_1 = arg1;\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);\n }\n };\n imports.wbg.__wbg_for_4ff07bddd743c5e7 = function(arg0, arg1) {\n const ret = Symbol.for(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_freeze_ef6d70cf38e8d948 = function(arg0) {\n const ret = Object.freeze(arg0);\n return ret;\n };\n imports.wbg.__wbg_from_2a5d3e218e67aa85 = function(arg0) {\n const ret = Array.from(arg0);\n return ret;\n };\n imports.wbg.__wbg_getRandomValues_b8f5dbd5f3995a9e = function() { return handleError(function (arg0, arg1) {\n arg0.getRandomValues(arg1);\n }, arguments) };\n imports.wbg.__wbg_getTime_46267b1c24877e30 = function(arg0) {\n const ret = arg0.getTime();\n return ret;\n };\n imports.wbg.__wbg_get_67b2ba62fc30de12 = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(arg0, arg1);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_get_b9b93047fe3cf45b = function(arg0, arg1) {\n const ret = arg0[arg1 >>> 0];\n return ret;\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_e14585432e3737fc = function(arg0) {\n let result;\n try {\n result = arg0 instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Date_e9a9be8b9cea7890 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Date;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Object_7f2dcef8f78644a4 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Object;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Uint8Array_17156bcf118086a9 = function(arg0) {\n let result;\n try {\n result = arg0 instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_isArray_a1eab7e0d067391b = function(arg0) {\n const ret = Array.isArray(arg0);\n return ret;\n };\n imports.wbg.__wbg_iterator_9a24c88df860dc65 = function() {\n const ret = Symbol.iterator;\n return ret;\n };\n imports.wbg.__wbg_keys_5c77a08ddc2fb8a6 = function(arg0) {\n const ret = Object.keys(arg0);\n return ret;\n };\n imports.wbg.__wbg_length_a446193dc22c12f8 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_d56737991078581b = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_length_e2d2a49132c1b256 = function(arg0) {\n const ret = arg0.length;\n return ret;\n };\n imports.wbg.__wbg_log_1ae1e9f741096e91 = function(arg0, arg1) {\n console.log(arg0, arg1);\n };\n imports.wbg.__wbg_log_c222819a41e063d3 = function(arg0) {\n console.log(arg0);\n };\n imports.wbg.__wbg_msCrypto_a61aeb35a24c1329 = function(arg0) {\n const ret = arg0.msCrypto;\n return ret;\n };\n imports.wbg.__wbg_new_1ab78df5e132f715 = function(arg0, arg1) {\n const ret = new RangeError(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_new_31a97dac4f10fab7 = function(arg0) {\n const ret = new Date(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_405e22f390576ce2 = function() {\n const ret = new Object();\n return ret;\n };\n imports.wbg.__wbg_new_78feb108b6472713 = function() {\n const ret = new Array();\n return ret;\n };\n imports.wbg.__wbg_new_8a6f238a6ece86ea = function() {\n const ret = new Error();\n return ret;\n };\n imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) {\n const ret = new Uint8Array(arg0);\n return ret;\n };\n imports.wbg.__wbg_new_c68d7209be747379 = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_newnoargs_105ed471475aaf50 = function(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_d97e637ebe145a9a = function(arg0, arg1, arg2) {\n const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_newwithlength_a381634e90c276d4 = function(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_next_25feadfc0913fea9 = function(arg0) {\n const ret = arg0.next;\n return ret;\n };\n imports.wbg.__wbg_next_6574e1a8a62d1055 = function() { return handleError(function (arg0) {\n const ret = arg0.next();\n return ret;\n }, arguments) };\n imports.wbg.__wbg_node_905d3e251edff8a2 = function(arg0) {\n const ret = arg0.node;\n return ret;\n };\n imports.wbg.__wbg_ownKeys_3930041068756f1f = function() { return handleError(function (arg0) {\n const ret = Reflect.ownKeys(arg0);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_process_dc0fbacc7c1c06f7 = function(arg0) {\n const ret = arg0.process;\n return ret;\n };\n imports.wbg.__wbg_push_737cfc8c1432c2c6 = function(arg0, arg1) {\n const ret = arg0.push(arg1);\n return ret;\n };\n imports.wbg.__wbg_randomFillSync_ac0988aba3254290 = function() { return handleError(function (arg0, arg1) {\n arg0.randomFillSync(arg1);\n }, arguments) };\n imports.wbg.__wbg_require_60cc747a6bc5215a = function() { return handleError(function () {\n const ret = module.require;\n return ret;\n }, arguments) };\n imports.wbg.__wbg_set_37837023f3d740e8 = function(arg0, arg1, arg2) {\n arg0[arg1 >>> 0] = arg2;\n };\n imports.wbg.__wbg_set_3f1d0b984ed272ed = function(arg0, arg1, arg2) {\n arg0[arg1] = arg2;\n };\n imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) {\n arg0.set(arg1, arg2 >>> 0);\n };\n imports.wbg.__wbg_set_bb8cecf6a62b9f46 = function() { return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(arg0, arg1, arg2);\n return ret;\n }, arguments) };\n imports.wbg.__wbg_slice_972c243648c9fd2e = function(arg0, arg1, arg2) {\n const ret = arg0.slice(arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_stack_0ed75d68575b0f3c = function(arg0, arg1) {\n const ret = arg1.stack;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07 = function() {\n const ret = typeof global === 'undefined' ? null : global;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0 = function() {\n const ret = typeof globalThis === 'undefined' ? null : globalThis;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819 = function() {\n const ret = typeof self === 'undefined' ? null : self;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40 = function() {\n const ret = typeof window === 'undefined' ? null : window;\n return isLikeNone(ret) ? 0 : addToExternrefTable0(ret);\n };\n imports.wbg.__wbg_subarray_aa9065fa9dc5df96 = function(arg0, arg1, arg2) {\n const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_toString_66ab719c2a98bdf1 = function(arg0) {\n const ret = arg0.toString();\n return ret;\n };\n imports.wbg.__wbg_unshift_c290010f73f04fb1 = function(arg0, arg1) {\n const ret = arg0.unshift(arg1);\n return ret;\n };\n imports.wbg.__wbg_value_cd1ffa7b1ab794f1 = function(arg0) {\n const ret = arg0.value;\n return ret;\n };\n imports.wbg.__wbg_values_fcb8ba8c0aad8b58 = function(arg0) {\n const ret = Object.values(arg0);\n return ret;\n };\n imports.wbg.__wbg_versions_c01dfd4722a88165 = function(arg0) {\n const ret = arg0.versions;\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_i64 = function(arg0) {\n const ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) {\n const ret = BigInt.asUintN(64, arg0);\n return ret;\n };\n imports.wbg.__wbindgen_boolean_get = function(arg0) {\n const v = arg0;\n const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;\n return ret;\n };\n imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n const ret = debugString(arg1);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_error_new = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return ret;\n };\n imports.wbg.__wbindgen_init_externref_table = function() {\n const table = wasm.__wbindgen_export_4;\n const offset = table.grow(4);\n table.set(0, undefined);\n table.set(offset + 0, undefined);\n table.set(offset + 1, null);\n table.set(offset + 2, true);\n table.set(offset + 3, false);\n ;\n };\n imports.wbg.__wbindgen_is_array = function(arg0) {\n const ret = Array.isArray(arg0);\n return ret;\n };\n imports.wbg.__wbindgen_is_function = function(arg0) {\n const ret = typeof(arg0) === 'function';\n return ret;\n };\n imports.wbg.__wbindgen_is_null = function(arg0) {\n const ret = arg0 === null;\n return ret;\n };\n imports.wbg.__wbindgen_is_object = function(arg0) {\n const val = arg0;\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n };\n imports.wbg.__wbindgen_is_string = function(arg0) {\n const ret = typeof(arg0) === 'string';\n return ret;\n };\n imports.wbg.__wbindgen_is_undefined = function(arg0) {\n const ret = arg0 === undefined;\n return ret;\n };\n imports.wbg.__wbindgen_json_serialize = function(arg0, arg1) {\n const obj = arg1;\n const ret = JSON.stringify(obj === undefined ? null : obj);\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) {\n const ret = arg0 == arg1;\n return ret;\n };\n imports.wbg.__wbindgen_memory = function() {\n const ret = wasm.memory;\n return ret;\n };\n imports.wbg.__wbindgen_number_get = function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n };\n imports.wbg.__wbindgen_number_new = function(arg0) {\n const ret = arg0;\n return ret;\n };\n imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n const obj = arg1;\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return ret;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, memory) {\n\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new /* @vite-ignore */ URL('automerge_wasm_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { isImmutableString, rootProxy } from \"./proxies.js\";\nexport { isImmutableString, isCounter } from \"./proxies.js\";\nimport { STATE } from \"./constants.js\";\nimport { Counter, } from \"./types.js\";\nexport { Counter, Int, Uint, Float64, } from \"./types.js\";\nconst _SyncStateSymbol = Symbol(\"_syncstate\");\nimport { ApiHandler, UseApi } from \"./low_level.js\";\nexport { initializeWasm, initializeBase64Wasm, wasmInitialized, isWasmInitialized, } from \"./low_level.js\";\nimport { ImmutableString } from \"./immutable_string.js\";\nexport { ImmutableString } from \"./immutable_string.js\";\nimport { _state, _is_proxy, _clear_cache, _trace, _obj, } from \"./internal_state.js\";\nexport { applyPatch, applyPatches } from \"./apply_patches.js\";\nimport { conflictAt } from \"./conflicts.js\";\n/**\n * Function for use in {@link change} which inserts values into a list at a given index\n * @param list\n * @param index\n * @param values\n */\nexport function insertAt(list, index, ...values) {\n if (!_is_proxy(list)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n //eslint-disable-next-line no-extra-semi\n ;\n list.insertAt(index, ...values);\n}\n/**\n * Function for use in {@link change} which deletes values from a list at a given index\n * @param list\n * @param index\n * @param numDelete\n */\nexport function deleteAt(list, index, numDelete) {\n if (!_is_proxy(list)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n //eslint-disable-next-line no-extra-semi\n ;\n list.deleteAt(index, numDelete);\n}\n/** @hidden **/\nexport function use(api) {\n UseApi(api);\n}\n/** @hidden */\nexport function getBackend(doc) {\n return _state(doc).handle;\n}\nfunction importOpts(_actor) {\n if (typeof _actor === \"object\") {\n return _actor;\n }\n else {\n return { actor: _actor };\n }\n}\nexport function getChangesSince(state, heads) {\n const n = _state(state);\n return n.handle.getChanges(heads);\n}\nexport function getChangesMetaSince(state, heads) {\n const n = _state(state);\n return n.handle.getChangesMeta(heads);\n}\nfunction cursorToIndex(state, value, index) {\n if (typeof index == \"string\") {\n if (/^-?[0-9]+@[0-9a-zA-Z]+$|^[se]$/.test(index)) {\n return state.handle.getCursorPosition(value, index);\n }\n else {\n throw new RangeError(\"index must be a number or cursor\");\n }\n }\n else {\n return index;\n }\n}\n/**\n * Create a new automerge document\n *\n * @typeParam T - The type of value contained in the document. This will be the\n * type that is passed to the change closure in {@link change}\n * @param _opts - Either an actorId or an {@link InitOptions} (which may\n * contain an actorId). If this is null the document will be initialised with a\n * random actor ID\n */\nexport function init(_opts) {\n const opts = importOpts(_opts);\n const freeze = !!opts.freeze;\n const patchCallback = opts.patchCallback;\n const actor = opts.actor;\n const handle = ApiHandler.create({ actor });\n handle.enableFreeze(!!opts.freeze);\n registerDatatypes(handle);\n const doc = handle.materialize(\"/\", undefined, {\n handle,\n heads: undefined,\n freeze,\n patchCallback,\n });\n return doc;\n}\n/**\n * Make an immutable view of an automerge document as at `heads`\n *\n * @remarks\n * The document returned from this function cannot be passed to {@link change}.\n * This is because it shares the same underlying memory as `doc`, but it is\n * consequently a very cheap copy.\n *\n * Note that this function will throw an error if any of the hashes in `heads`\n * are not in the document.\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to create a view of\n * @param heads - The hashes of the heads to create a view at\n */\nexport function view(doc, heads) {\n const state = _state(doc);\n const handle = state.handle;\n return state.handle.materialize(\"/\", heads, Object.assign(Object.assign({}, state), { handle,\n heads }));\n}\n/**\n * Make a full writable copy of an automerge document\n *\n * @remarks\n * Unlike {@link view} this function makes a full copy of the memory backing\n * the document and can thus be passed to {@link change}. It also generates a\n * new actor ID so that changes made in the new document do not create duplicate\n * sequence numbers with respect to the old document. If you need control over\n * the actor ID which is generated you can pass the actor ID as the second\n * argument\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to clone\n * @param _opts - Either an actor ID to use for the new doc or an {@link InitOptions}\n */\nexport function clone(doc, _opts) {\n const state = _state(doc);\n const heads = state.heads;\n const opts = importOpts(_opts);\n const handle = state.handle.fork(opts.actor, heads);\n handle.updateDiffCursor();\n // `change` uses the presence of state.heads to determine if we are in a view\n // set it to undefined to indicate that this is a full fat document\n const { heads: _oldHeads } = state, stateSansHeads = __rest(state, [\"heads\"]);\n stateSansHeads.patchCallback = opts.patchCallback;\n return handle.applyPatches(doc, Object.assign(Object.assign({}, stateSansHeads), { handle }));\n}\n/** Explicity free the memory backing a document. Note that this is note\n * necessary in environments which support\n * [`FinalizationRegistry`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry)\n */\nexport function free(doc) {\n return _state(doc).handle.free();\n}\n/**\n * Create an automerge document from a POJO\n *\n * @param initialState - The initial state which will be copied into the document\n * @typeParam T - The type of the value passed to `from` _and_ the type the resulting document will contain\n * @typeParam actor - The actor ID of the resulting document, if this is null a random actor ID will be used\n *\n * @example\n * ```\n * const doc = automerge.from({\n * tasks: [\n * {description: \"feed dogs\", done: false}\n * ]\n * })\n * ```\n */\nexport function from(initialState, _opts) {\n return _change(init(_opts), \"from\", {}, d => Object.assign(d, initialState))\n .newDoc;\n}\n/**\n * Update the contents of an automerge document\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to update\n * @param options - Either a message, an {@link ChangeOptions}, or a {@link ChangeFn}\n * @param callback - A `ChangeFn` to be used if `options` was a `string`\n *\n * Note that if the second argument is a function it will be used as the `ChangeFn` regardless of what the third argument is.\n *\n * @example A simple change\n * ```\n * let doc1 = automerge.init()\n * doc1 = automerge.change(doc1, d => {\n * d.key = \"value\"\n * })\n * assert.equal(doc1.key, \"value\")\n * ```\n *\n * @example A change with a message\n *\n * ```\n * doc1 = automerge.change(doc1, \"add another value\", d => {\n * d.key2 = \"value2\"\n * })\n * ```\n *\n * @example A change with a message and a timestamp\n *\n * ```\n * doc1 = automerge.change(doc1, {message: \"add another value\", time: 1640995200}, d => {\n * d.key2 = \"value2\"\n * })\n * ```\n *\n * @example responding to a patch callback\n * ```\n * let patchedPath\n * let patchCallback = patch => {\n * patchedPath = patch.path\n * }\n * doc1 = automerge.change(doc1, {message: \"add another value\", time: 1640995200, patchCallback}, d => {\n * d.key2 = \"value2\"\n * })\n * assert.equal(patchedPath, [\"key2\"])\n * ```\n */\nexport function change(doc, options, callback) {\n if (typeof options === \"function\") {\n return _change(doc, \"change\", {}, options).newDoc;\n }\n else if (typeof callback === \"function\") {\n if (typeof options === \"string\") {\n options = { message: options };\n }\n return _change(doc, \"change\", options, callback).newDoc;\n }\n else {\n throw RangeError(\"Invalid args for change\");\n }\n}\n/**\n * Make a change to the document as it was at a particular point in history\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to update\n * @param scope - The heads representing the point in history to make the change\n * @param options - Either a message or a {@link ChangeOptions} for the new change\n * @param callback - A `ChangeFn` to be used if `options` was a `string`\n *\n * @remarks\n * This function is similar to {@link change} but allows you to make changes to\n * the document as if it were at a particular point in time. To understand this\n * imagine a document created with the following history:\n *\n * ```ts\n * let doc = automerge.from({..})\n * doc = automerge.change(doc, () => {...})\n *\n * const heads = automerge.getHeads(doc)\n *\n * // fork the document make a change\n * let fork = automerge.fork(doc)\n * fork = automerge.change(fork, () => {...})\n * const headsOnFork = automerge.getHeads(fork)\n *\n * // make a change on the original doc\n * doc = automerge.change(doc, () => {...})\n * const headsOnOriginal = automerge.getHeads(doc)\n *\n * // now merge the changes back to the original document\n * doc = automerge.merge(doc, fork)\n *\n * // The heads of the document will now be (headsOnFork, headsOnOriginal)\n * ```\n *\n * {@link ChangeAt} produces an equivalent history, but without having to\n * create a fork of the document. In particular the `newHeads` field of the\n * returned {@link ChangeAtResult} will be the same as `headsOnFork`.\n *\n * Why would you want this? It's typically used in conjunction with {@link diff}\n * to reconcile state which is managed concurrently with the document. For\n * example, if you have a text editor component which the user is modifying\n * and you can't send the changes to the document synchronously you might follow\n * a workflow like this:\n *\n * * On initialization save the current heads of the document in the text editor state\n * * Every time the user makes a change record the change in the text editor state\n *\n * Now from time to time reconcile the editor state and the document\n * * Load the last saved heads from the text editor state, call them `oldHeads`\n * * Apply all the unreconciled changes to the document using `changeAt(doc, oldHeads, ...)`\n * * Get the diff from the resulting document to the current document using {@link diff}\n * passing the {@link ChangeAtResult.newHeads} as the `before` argument and the\n * heads of the entire document as the `after` argument.\n * * Apply the diff to the text editor state\n * * Save the current heads of the document in the text editor state\n */\nexport function changeAt(doc, scope, options, callback) {\n if (typeof options === \"function\") {\n return _change(doc, \"changeAt\", {}, options, scope);\n }\n else if (typeof callback === \"function\") {\n if (typeof options === \"string\") {\n options = { message: options };\n }\n return _change(doc, \"changeAt\", options, callback, scope);\n }\n else {\n throw RangeError(\"Invalid args for changeAt\");\n }\n}\nfunction progressDocument(doc, source, heads, callback) {\n if (heads == null) {\n return doc;\n }\n const state = _state(doc);\n const nextState = Object.assign(Object.assign({}, state), { heads: undefined });\n const { value: nextDoc, patches } = state.handle.applyAndReturnPatches(doc, nextState);\n if (patches.length > 0) {\n if (callback != null) {\n callback(patches, { before: doc, after: nextDoc, source });\n }\n const newState = _state(nextDoc);\n newState.mostRecentPatch = {\n before: _state(doc).heads,\n after: newState.handle.getHeads(),\n patches,\n };\n }\n state.heads = heads;\n return nextDoc;\n}\nfunction _change(doc, source, options, callback, scope) {\n if (typeof callback !== \"function\") {\n throw new RangeError(\"invalid change function\");\n }\n const state = _state(doc);\n if (doc === undefined || state === undefined) {\n throw new RangeError(\"must be the document root\");\n }\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n let heads = state.handle.getHeads();\n if (scope && headsEqual(scope, heads)) {\n scope = undefined;\n }\n if (scope) {\n state.handle.isolate(scope);\n heads = scope;\n }\n if (!(\"time\" in options)) {\n options.time = Math.floor(Date.now() / 1000);\n }\n try {\n state.heads = heads;\n const root = rootProxy(state.handle);\n callback(root);\n if (state.handle.pendingOps() === 0) {\n state.heads = undefined;\n if (scope) {\n state.handle.integrate();\n }\n return {\n newDoc: doc,\n newHeads: null,\n };\n }\n else {\n const newHead = state.handle.commit(options.message, options.time);\n state.handle.integrate();\n return {\n newDoc: progressDocument(doc, source, heads, options.patchCallback || state.patchCallback),\n newHeads: newHead != null ? [newHead] : null,\n };\n }\n }\n catch (e) {\n state.heads = undefined;\n state.handle.rollback();\n throw e;\n }\n}\n/**\n * Make a change to a document which does not modify the document\n *\n * @param doc - The doc to add the empty change to\n * @param options - Either a message or a {@link ChangeOptions} for the new change\n *\n * Why would you want to do this? One reason might be that you have merged\n * changes from some other peers and you want to generate a change which\n * depends on those merged changes so that you can sign the new change with all\n * of the merged changes as part of the new change.\n */\nexport function emptyChange(doc, options) {\n if (options === undefined) {\n options = {};\n }\n if (typeof options === \"string\") {\n options = { message: options };\n }\n if (!(\"time\" in options)) {\n options.time = Math.floor(Date.now() / 1000);\n }\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.emptyChange(options.message, options.time);\n return progressDocument(doc, \"emptyChange\", heads);\n}\n/**\n * Load an automerge document from a compressed document produce by {@link save}\n *\n * @typeParam T - The type of the value which is contained in the document.\n * Note that no validation is done to make sure this type is in\n * fact the type of the contained value so be a bit careful\n * @param data - The compressed document\n * @param _opts - Either an actor ID or some {@link InitOptions}, if the actor\n * ID is null a random actor ID will be created\n *\n * Note that `load` will throw an error if passed incomplete content (for\n * example if you are receiving content over the network and don't know if you\n * have the complete document yet). If you need to handle incomplete content use\n * {@link init} followed by {@link loadIncremental}.\n */\nexport function load(data, _opts) {\n const opts = importOpts(_opts);\n if (opts.patchCallback) {\n return loadIncremental(init(opts), data);\n }\n const actor = opts.actor;\n const patchCallback = opts.patchCallback;\n const unchecked = opts.unchecked || false;\n const allowMissingDeps = opts.allowMissingChanges || false;\n const convertImmutableStringsToText = opts.convertImmutableStringsToText || false;\n const handle = ApiHandler.load(data, {\n actor,\n unchecked,\n allowMissingDeps,\n convertImmutableStringsToText,\n });\n handle.enableFreeze(!!opts.freeze);\n registerDatatypes(handle);\n const doc = handle.materialize(\"/\", undefined, {\n handle,\n heads: undefined,\n patchCallback,\n });\n return doc;\n}\n/**\n * Load changes produced by {@link saveIncremental}, or partial changes\n *\n * @typeParam T - The type of the value which is contained in the document.\n * Note that no validation is done to make sure this type is in\n * fact the type of the contained value so be a bit careful\n * @param data - The compressedchanges\n * @param opts - an {@link ApplyOptions}\n *\n * This function is useful when staying up to date with a connected peer.\n * Perhaps the other end sent you a full compresed document which you loaded\n * with {@link load} and they're sending you the result of\n * {@link getLastLocalChange} every time they make a change.\n *\n * Note that this function will succesfully load the results of {@link save} as\n * well as {@link getLastLocalChange} or any other incremental change.\n */\nexport function loadIncremental(doc, data, opts) {\n if (!opts) {\n opts = {};\n }\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an out of date document - set at: \" + _trace(doc));\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.loadIncremental(data);\n return progressDocument(doc, \"loadIncremental\", heads, opts.patchCallback || state.patchCallback);\n}\n/**\n * Create binary save data to be appended to a save file or fed into {@link loadIncremental}\n *\n * @typeParam T - The type of the value which is contained in the document.\n * Note that no validation is done to make sure this type is in\n * fact the type of the contained value so be a bit careful\n *\n * This function is useful for incrementally saving state. The data can be appended to a\n * automerge save file, or passed to a document replicating its state.\n *\n */\nexport function saveIncremental(doc) {\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an out of date document - set at: \" + _trace(doc));\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n return state.handle.saveIncremental();\n}\n/**\n * Export the contents of a document to a compressed format\n *\n * @param doc - The doc to save\n *\n * The returned bytes can be passed to {@link load} or {@link loadIncremental}\n */\nexport function save(doc) {\n return _state(doc).handle.save();\n}\n/**\n * Merge `remote` into `local`\n * @typeParam T - The type of values contained in each document\n * @param local - The document to merge changes into\n * @param remote - The document to merge changes from\n *\n * @returns - The merged document\n *\n * Often when you are merging documents you will also need to clone them. Both\n * arguments to `merge` are frozen after the call so you can no longer call\n * mutating methods (such as {@link change}) on them. The symtom of this will be\n * an error which says \"Attempting to change an out of date document\". To\n * overcome this call {@link clone} on the argument before passing it to {@link\n * merge}.\n */\nexport function merge(local, remote) {\n const localState = _state(local);\n if (localState.heads) {\n throw new RangeError(\"Attempting to change an out of date document - set at: \" + _trace(local));\n }\n const heads = localState.handle.getHeads();\n const remoteState = _state(remote);\n const changes = localState.handle.getChangesAdded(remoteState.handle);\n localState.handle.applyChanges(changes);\n return progressDocument(local, \"merge\", heads, localState.patchCallback);\n}\n/**\n * Get the actor ID associated with the document\n */\nexport function getActorId(doc) {\n const state = _state(doc);\n return state.handle.getActorId();\n}\n/**\n * Get the conflicts associated with a property\n *\n * The values of properties in a map in automerge can be conflicted if there\n * are concurrent \"put\" operations to the same key. Automerge chooses one value\n * arbitrarily (but deterministically, any two nodes who have the same set of\n * changes will choose the same value) from the set of conflicting values to\n * present as the value of the key.\n *\n * Sometimes you may want to examine these conflicts, in this case you can use\n * {@link getConflicts} to get the conflicts for the key.\n *\n * @example\n * ```\n * import * as automerge from \"@automerge/automerge\"\n *\n * type Profile = {\n * pets: Array<{name: string, type: string}>\n * }\n *\n * let doc1 = automerge.init<Profile>(\"aaaa\")\n * doc1 = automerge.change(doc1, d => {\n * d.pets = [{name: \"Lassie\", type: \"dog\"}]\n * })\n * let doc2 = automerge.init<Profile>(\"bbbb\")\n * doc2 = automerge.merge(doc2, automerge.clone(doc1))\n *\n * doc2 = automerge.change(doc2, d => {\n * d.pets[0].name = \"Beethoven\"\n * })\n *\n * doc1 = automerge.change(doc1, d => {\n * d.pets[0].name = \"Babe\"\n * })\n *\n * const doc3 = automerge.merge(doc1, doc2)\n *\n * // Note that here we pass `doc3.pets`, not `doc3`\n * let conflicts = automerge.getConflicts(doc3.pets[0], \"name\")\n *\n * // The two conflicting values are the keys of the conflicts object\n * assert.deepEqual(Object.values(conflicts), [\"Babe\", Beethoven\"])\n * ```\n */\nexport function getConflicts(doc, prop) {\n const state = _state(doc, false);\n const objectId = _obj(doc);\n if (objectId != null) {\n const withinChangeCallback = _is_proxy(doc);\n return conflictAt(state.handle, objectId, prop, withinChangeCallback);\n }\n else {\n return undefined;\n }\n}\n/**\n * Get the binary representation of the last change which was made to this doc\n *\n * This is most useful when staying in sync with other peers, every time you\n * make a change locally via {@link change} you immediately call {@link\n * getLastLocalChange} and send the result over the network to other peers.\n */\nexport function getLastLocalChange(doc) {\n const state = _state(doc);\n return state.handle.getLastLocalChange() || undefined;\n}\n/**\n * Return the object ID of an arbitrary javascript value\n *\n * This is useful to determine if something is actually an automerge document,\n * if `doc` is not an automerge document this will return null.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getObjectId(doc, prop) {\n if (prop) {\n const state = _state(doc, false);\n const objectId = _obj(doc);\n if (!state || !objectId) {\n return null;\n }\n return state.handle.get(objectId, prop);\n }\n else {\n return _obj(doc);\n }\n}\n/**\n * Get the changes which are in `newState` but not in `oldState`. The returned\n * changes can be loaded in `oldState` via {@link applyChanges}.\n *\n * Note that this will crash if there are changes in `oldState` which are not in `newState`.\n */\nexport function getChanges(oldState, newState) {\n const n = _state(newState);\n return n.handle.getChanges(getHeads(oldState));\n}\n/**\n * Get all the changes in a document\n *\n * This is different to {@link save} because the output is an array of changes\n * which can be individually applied via {@link applyChanges}`\n *\n */\nexport function getAllChanges(doc) {\n const state = _state(doc);\n return state.handle.getChanges([]);\n}\n/**\n * Apply changes received from another document\n *\n * `doc` will be updated to reflect the `changes`. If there are changes which\n * we do not have dependencies for yet those will be stored in the document and\n * applied when the depended on changes arrive.\n *\n * You can use the {@link ApplyOptions} to pass a patchcallback which will be\n * informed of any changes which occur as a result of applying the changes\n *\n */\nexport function applyChanges(doc, changes, opts) {\n const state = _state(doc);\n if (!opts) {\n opts = {};\n }\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.applyChanges(changes);\n state.heads = heads;\n return [\n progressDocument(doc, \"applyChanges\", heads, opts.patchCallback || state.patchCallback),\n ];\n}\n/** @hidden */\nexport function getHistory(doc) {\n const history = getAllChanges(doc);\n return history.map((change, index) => ({\n get change() {\n return decodeChange(change);\n },\n get snapshot() {\n const [state] = applyChanges(init(), history.slice(0, index + 1));\n return state;\n },\n }));\n}\n/**\n * Create a set of patches representing the change from one set of heads to another\n *\n * If either of the heads are missing from the document the returned set of patches will be empty\n */\nexport function diff(doc, before, after) {\n checkHeads(before, \"before\");\n checkHeads(after, \"after\");\n const state = _state(doc);\n if (state.mostRecentPatch &&\n equals(state.mostRecentPatch.before, before) &&\n equals(state.mostRecentPatch.after, after)) {\n return state.mostRecentPatch.patches;\n }\n return state.handle.diff(before, after);\n}\nfunction headsEqual(heads1, heads2) {\n if (heads1.length !== heads2.length) {\n return false;\n }\n for (let i = 0; i < heads1.length; i++) {\n if (heads1[i] !== heads2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction checkHeads(heads, fieldname) {\n if (!Array.isArray(heads)) {\n throw new Error(`${fieldname} must be an array`);\n }\n}\n/** @hidden */\n// FIXME : no tests\n// FIXME can we just use deep equals now?\nexport function equals(val1, val2) {\n if (!isObject(val1) || !isObject(val2))\n return val1 === val2;\n const keys1 = Object.keys(val1).sort(), keys2 = Object.keys(val2).sort();\n if (keys1.length !== keys2.length)\n return false;\n for (let i = 0; i < keys1.length; i++) {\n if (keys1[i] !== keys2[i])\n return false;\n if (!equals(val1[keys1[i]], val2[keys2[i]]))\n return false;\n }\n return true;\n}\n/**\n * encode a {@link SyncState} into binary to send over the network\n *\n * @group sync\n * */\nexport function encodeSyncState(state) {\n const sync = ApiHandler.importSyncState(state);\n const result = ApiHandler.encodeSyncState(sync);\n sync.free();\n return result;\n}\n/**\n * Decode some binary data into a {@link SyncState}\n *\n * @group sync\n */\nexport function decodeSyncState(state) {\n const sync = ApiHandler.decodeSyncState(state);\n const result = ApiHandler.exportSyncState(sync);\n sync.free();\n return result;\n}\n/**\n * Generate a sync message to send to the peer represented by `inState`\n * @param doc - The doc to generate messages about\n * @param inState - The {@link SyncState} representing the peer we are talking to\n *\n * @group sync\n *\n * @returns An array of `[newSyncState, syncMessage | null]` where\n * `newSyncState` should replace `inState` and `syncMessage` should be sent to\n * the peer if it is not null. If `syncMessage` is null then we are up to date.\n */\nexport function generateSyncMessage(doc, inState) {\n const state = _state(doc);\n const syncState = ApiHandler.importSyncState(inState);\n const message = state.handle.generateSyncMessage(syncState);\n const outState = ApiHandler.exportSyncState(syncState);\n return [outState, message];\n}\n/**\n * Update a document and our sync state on receiving a sync message\n *\n * @group sync\n *\n * @param doc - The doc the sync message is about\n * @param inState - The {@link SyncState} for the peer we are communicating with\n * @param message - The message which was received\n * @param opts - Any {@link ApplyOption}s, used for passing a\n * {@link PatchCallback} which will be informed of any changes\n * in `doc` which occur because of the received sync message.\n *\n * @returns An array of `[newDoc, newSyncState, null]` where\n * `newDoc` is the updated state of `doc`, `newSyncState` should replace\n * `inState`.\n *\n * @remarks Note that this function has three return values for legacy reasons.\n * The third value used to be a sync message to send back but this is now\n * always null and you should instead call `generateSyncMessage` after calling\n * `receiveSyncMessage` to see if there are new messages to send.\n */\nexport function receiveSyncMessage(doc, inState, message, opts) {\n const syncState = ApiHandler.importSyncState(inState);\n if (!opts) {\n opts = {};\n }\n const state = _state(doc);\n if (state.heads) {\n throw new RangeError(\"Attempting to change an outdated document. Use Automerge.clone() if you wish to make a writable copy.\");\n }\n if (_is_proxy(doc)) {\n throw new RangeError(\"Calls to Automerge.change cannot be nested\");\n }\n const heads = state.handle.getHeads();\n state.handle.receiveSyncMessage(syncState, message);\n const outSyncState = ApiHandler.exportSyncState(syncState);\n return [\n progressDocument(doc, \"receiveSyncMessage\", heads, opts.patchCallback || state.patchCallback),\n outSyncState,\n null,\n ];\n}\n/**\n * Check whether the replica represented by `remoteState` has all our changes\n *\n * @param doc - The doc to check whether the remote has changes for\n * @param remoteState - The {@link SyncState} representing the peer we are talking to\n *\n * @group sync\n *\n * @returns true if the remote has all of our changes\n */\nexport function hasOurChanges(doc, remoteState) {\n const state = _state(doc);\n const syncState = ApiHandler.importSyncState(remoteState);\n return state.handle.hasOurChanges(syncState);\n}\n/**\n * Create a new, blank {@link SyncState}\n *\n * When communicating with a peer for the first time use this to generate a new\n * {@link SyncState} for them\n *\n * @group sync\n */\nexport function initSyncState() {\n return ApiHandler.exportSyncState(ApiHandler.initSyncState());\n}\n/** @hidden */\nexport function encodeChange(change) {\n return ApiHandler.encodeChange(change);\n}\n/** @hidden */\nexport function decodeChange(data) {\n return ApiHandler.decodeChange(data);\n}\n/** @hidden */\nexport function encodeSyncMessage(message) {\n return ApiHandler.encodeSyncMessage(message);\n}\n/** @hidden */\nexport function decodeSyncMessage(message) {\n return ApiHandler.decodeSyncMessage(message);\n}\n/**\n * Get any changes in `doc` which are not dependencies of `heads`\n */\nexport function getMissingDeps(doc, heads) {\n const state = _state(doc);\n return state.handle.getMissingDeps(heads);\n}\n/**\n * Get the hashes of the heads of this document\n */\nexport function getHeads(doc) {\n const state = _state(doc);\n return state.heads || state.handle.getHeads();\n}\n/** @hidden */\nexport function dump(doc) {\n const state = _state(doc);\n state.handle.dump();\n}\n/** @hidden */\nexport function toJS(doc) {\n const state = _state(doc);\n const enabled = state.handle.enableFreeze(false);\n const result = state.handle.materialize(\"/\", state.heads);\n state.handle.enableFreeze(enabled);\n return result;\n}\nexport function isAutomerge(doc) {\n if (typeof doc == \"object\" && doc !== null) {\n return getObjectId(doc) === \"_root\" && !!Reflect.get(doc, STATE);\n }\n else {\n return false;\n }\n}\nfunction isObject(obj) {\n return typeof obj === \"object\" && obj !== null;\n}\nexport function saveSince(doc, heads) {\n const state = _state(doc);\n const result = state.handle.saveSince(heads);\n return result;\n}\n/**\n * Returns true if the document has all of the given heads somewhere in its history\n */\nexport function hasHeads(doc, heads) {\n const state = _state(doc);\n for (const hash of heads) {\n if (!state.handle.getChangeByHash(hash)) {\n return false;\n }\n }\n return true;\n}\nfunction registerDatatypes(handle) {\n handle.registerDatatype(\"counter\", (n) => new Counter(n), n => {\n if (n instanceof Counter) {\n return n.value;\n }\n });\n handle.registerDatatype(\"str\", (n) => {\n return new ImmutableString(n);\n }, s => {\n if (isImmutableString(s)) {\n return s.val;\n }\n });\n}\n/**\n * @hidden\n */\nexport function topoHistoryTraversal(doc) {\n const state = _state(doc);\n return state.handle.topoHistoryTraversal();\n}\n/**\n * Decode a change hash into the details of this change\n *\n * This should be considered a semi-stable API. We try not to change the\n * encoding in backwards incompatible ways but we won't bump a major version if\n * we do have to change it\n */\nexport function inspectChange(doc, changeHash) {\n const state = _state(doc);\n return state.handle.getDecodedChangeByHash(changeHash);\n}\n/**\n * Return some internal statistics about the document\n */\nexport function stats(doc) {\n const state = _state(doc);\n return state.handle.stats();\n}\n/**\n * Modify a string\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to modify\n * @param path - The path to the string to modify\n * @param index - The position (as a {@link Cursor} or index) to edit.\n * If a cursor is used then the edit happens such that the cursor will\n * now point to the end of the newText, so you can continue to reuse\n * the same cursor for multiple calls to splice.\n * @param del - The number of code units to delete, a positive number\n * deletes N characters after the cursor, a negative number deletes\n * N characters before the cursor.\n * @param newText - The string to insert (if any).\n */\nexport function splice(doc, path, index, del, newText) {\n const objPath = absoluteObjPath(doc, path, \"splice\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n return state.handle.splice(objPath, index, del, newText);\n }\n catch (e) {\n throw new RangeError(`Cannot splice: ${e}`);\n }\n}\n/**\n * Update the value of a string\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document to modify\n * @param path - The path to the string to modify\n * @param newText - The new text to update the value to\n *\n * @remarks\n * This will calculate a diff between the current value and the new value and\n * then convert that diff into calls to {@link splice}. This will produce results\n * which don't merge as well as directly capturing the user input actions, but\n * sometimes it's not possible to capture user input and this is the best you\n * can do.\n *\n * This is an experimental API and may change in the future.\n *\n * @beta\n */\nexport function updateText(doc, path, newText) {\n const objPath = absoluteObjPath(doc, path, \"updateText\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n _clear_cache(doc);\n try {\n return state.handle.updateText(objPath, newText);\n }\n catch (e) {\n throw new RangeError(`Cannot updateText: ${e}`);\n }\n}\n/**\n * Return the text + block markers at a given path\n *\n * @remarks\n * Rich text in automerge is represented as a sequence of characters with block\n * markers appearing inline with the text, and inline formatting spans overlaid\n * on the whole sequence. Block markers are normal automerge maps, but they are\n * only visible via either the {@link block} function or the {@link spans}\n * function. This function returns the current state of the spans\n */\nexport function spans(doc, path) {\n const state = _state(doc, false);\n const objPath = absoluteObjPath(doc, path, \"spans\");\n try {\n return state.handle.spans(objPath, state.heads);\n }\n catch (e) {\n throw new RangeError(`Cannot splice: ${e}`);\n }\n}\n/**\n * Get the block marker at the given index\n */\nexport function block(doc, path, index) {\n const objPath = absoluteObjPath(doc, path, \"splitBlock\");\n const state = _state(doc, false);\n index = cursorToIndex(state, objPath, index);\n try {\n return state.handle.getBlock(objPath, index);\n }\n catch (e) {\n throw new RangeError(`Cannot get block: ${e}`);\n }\n}\n/**\n * Insert a new block marker at the given index\n */\nexport function splitBlock(doc, path, index, block) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"splitBlock\");\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n state.handle.splitBlock(objPath, index, block);\n }\n catch (e) {\n throw new RangeError(`Cannot splice: ${e}`);\n }\n}\n/**\n * Delete the block marker at the given index\n */\nexport function joinBlock(doc, path, index) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"joinBlock\");\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n state.handle.joinBlock(objPath, index);\n }\n catch (e) {\n throw new RangeError(`Cannot joinBlock: ${e}`);\n }\n}\n/**\n * Update the block marker at the given index\n */\nexport function updateBlock(doc, path, index, block) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"updateBlock\");\n const state = _state(doc, false);\n _clear_cache(doc);\n index = cursorToIndex(state, objPath, index);\n try {\n state.handle.updateBlock(objPath, index, block);\n }\n catch (e) {\n throw new RangeError(`Cannot updateBlock: ${e}`);\n }\n}\n/**\n * Update the spans at the given path\n *\n * @remarks\n * Like {@link updateText} this will diff `newSpans` against the current state\n * of the text at `path` and perform a reasonably minimal number of operations\n * required to update the spans to the new state.\n */\nexport function updateSpans(doc, path, newSpans) {\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const objPath = absoluteObjPath(doc, path, \"updateSpans\");\n const state = _state(doc, false);\n _clear_cache(doc);\n try {\n state.handle.updateSpans(objPath, newSpans);\n }\n catch (e) {\n throw new RangeError(`Cannot updateBlock: ${e}`);\n }\n}\n/**\n * Returns a cursor for the given position in a string.\n *\n * @remarks\n * A cursor represents a relative position, \"before character X\",\n * rather than an absolute position. As the document is edited, the\n * cursor remains stable relative to its context, just as you'd expect\n * from a cursor in a concurrent text editor.\n *\n * The string representation is shareable, and so you can use this both\n * to edit the document yourself (using {@link splice}) or to share multiple\n * collaborator's current cursor positions over the network.\n *\n * The cursor's `position` can be an index in the string, `'start'` or `'end'`.\n * - `'start'` ensures this cursor always resolves to `0`\n * - `'end'` ensures this cursor always resolves to `string.length`\n *\n * Start cursors can be created by passing any negative number in `position`.\n *\n * End cursors can be created by passing a number `>= string.length` in `position`.\n *\n * `move` determines the position the cursor resolves to if the character at\n * `index` is removed:\n * - `'after'` causes the cursor to resolve towards `string.length`\n * - `'before'` causes the cursor to resolve towards `0`\n *\n * `move` is `'after'` by default.\n *\n * @typeParam T - The type of the value contained in the document\n * @param doc - The document\n * @param path - The path to the string\n * @param position - The position of the cursor, either an index, `'start'` or `'end'`\n * @param move - The direction the cursor should resolve to, defaults to 'after'\n */\nexport function getCursor(doc, path, position, move) {\n const objPath = absoluteObjPath(doc, path, \"getCursor\");\n const state = _state(doc, false);\n try {\n return state.handle.getCursor(objPath, position, state.heads, move);\n }\n catch (e) {\n throw new RangeError(`Cannot getCursor: ${e}`);\n }\n}\n/**\n * Returns the current index of the cursor.\n *\n * @typeParam T - The type of the value contained in the document\n *\n * @param doc - The document\n * @param path - The path to the string\n * @param index - The cursor\n */\nexport function getCursorPosition(doc, path, cursor) {\n const objPath = absoluteObjPath(doc, path, \"getCursorPosition\");\n const state = _state(doc, false);\n try {\n return state.handle.getCursorPosition(objPath, cursor, state.heads);\n }\n catch (e) {\n throw new RangeError(`Cannot getCursorPosition: ${e}`);\n }\n}\nexport function mark(doc, path, range, name, value) {\n const objPath = absoluteObjPath(doc, path, \"mark\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n try {\n return state.handle.mark(objPath, range, name, value);\n }\n catch (e) {\n throw new RangeError(`Cannot mark: ${e}`);\n }\n}\nexport function unmark(doc, path, range, name) {\n const objPath = absoluteObjPath(doc, path, \"unmark\");\n if (!_is_proxy(doc)) {\n throw new RangeError(\"object cannot be modified outside of a change block\");\n }\n const state = _state(doc, false);\n try {\n return state.handle.unmark(objPath, range, name);\n }\n catch (e) {\n throw new RangeError(`Cannot unmark: ${e}`);\n }\n}\nexport function marks(doc, path) {\n const objPath = absoluteObjPath(doc, path, \"marks\");\n const state = _state(doc, false);\n try {\n return state.handle.marks(objPath);\n }\n catch (e) {\n throw new RangeError(`Cannot call marks(): ${e}`);\n }\n}\nexport function marksAt(doc, path, index) {\n const objPath = absoluteObjPath(doc, path, \"marksAt\");\n const state = _state(doc, false);\n try {\n return state.handle.marksAt(objPath, index);\n }\n catch (e) {\n throw new RangeError(`Cannot call marksAt(): ${e}`);\n }\n}\nfunction absoluteObjPath(doc, path, functionName) {\n path = path.slice();\n const objectId = _obj(doc);\n if (!objectId) {\n throw new RangeError(`invalid object for ${functionName}`);\n }\n path.unshift(objectId);\n return path.join(\"/\");\n}\n/**\n * @deprecated This method has been renamed to {@link isImmutableString}\n */\nexport const isRawString = isImmutableString;\n/**\n * @deprecated This type has been renamed to {@link ImmutableString}\n */\nexport const RawString = ImmutableString;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","let decoder\ntry {\n\tdecoder = new TextDecoder()\n} catch(error) {}\nlet src\nlet srcEnd\nlet position = 0\nlet alreadySet\nconst EMPTY_ARRAY = []\nconst LEGACY_RECORD_INLINE_ID = 105\nconst RECORD_DEFINITIONS_ID = 0xdffe\nconst RECORD_INLINE_ID = 0xdfff // temporary first-come first-serve tag // proposed tag: 0x7265 // 're'\nconst BUNDLED_STRINGS_ID = 0xdff9\nconst PACKED_TABLE_TAG_ID = 51\nconst PACKED_REFERENCE_TAG_ID = 6\nconst STOP_CODE = {}\nlet maxArraySize = 112810000 // This is the maximum array size in V8. We would potentially detect and set it higher\n// for JSC, but this is pretty large and should be sufficient for most use cases\nlet maxMapSize = 16810000 // JavaScript has a fixed maximum map size of about 16710000, but JS itself enforces this,\n// so we don't need to\n\nlet maxObjectSize = 16710000; // This is the maximum number of keys in a Map. It takes over a minute to create this\n// many keys in an object, so also probably a reasonable choice there.\nlet strings = EMPTY_ARRAY\nlet stringPosition = 0\nlet currentDecoder = {}\nlet currentStructures\nlet srcString\nlet srcStringStart = 0\nlet srcStringEnd = 0\nlet bundledStrings\nlet referenceMap\nlet currentExtensions = []\nlet currentExtensionRanges = []\nlet packedValues\nlet dataView\nlet restoreMapsAsObject\nlet defaultOptions = {\n\tuseRecords: false,\n\tmapsAsObjects: true\n}\nlet sequentialMode = false\nlet inlineObjectReadThreshold = 2;\nvar BlockedFunction // we use search and replace to change the next call to BlockedFunction to avoid CSP issues for\n// no-eval build\ntry {\n\tnew Function('')\n} catch(error) {\n\t// if eval variants are not supported, do not create inline object readers ever\n\tinlineObjectReadThreshold = Infinity\n}\n\n\n\nexport class Decoder {\n\tconstructor(options) {\n\t\tif (options) {\n\t\t\tif ((options.keyMap || options._keyMap) && !options.useRecords) {\n\t\t\t\toptions.useRecords = false\n\t\t\t\toptions.mapsAsObjects = true\n\t\t\t}\n\t\t\tif (options.useRecords === false && options.mapsAsObjects === undefined)\n\t\t\t\toptions.mapsAsObjects = true\n\t\t\tif (options.getStructures)\n\t\t\t\toptions.getShared = options.getStructures\n\t\t\tif (options.getShared && !options.structures)\n\t\t\t\t(options.structures = []).uninitialized = true // this is what we use to denote an uninitialized structures\n\t\t\tif (options.keyMap) {\n\t\t\t\tthis.mapKey = new Map()\n\t\t\t\tfor (let [k,v] of Object.entries(options.keyMap)) this.mapKey.set(v,k)\n\t\t\t}\n\t\t}\n\t\tObject.assign(this, options)\n\t}\n\t/*\n\tdecodeKey(key) {\n\t\treturn this.keyMap\n\t\t\t? Object.keys(this.keyMap)[Object.values(this.keyMap).indexOf(key)] || key\n\t\t\t: key\n\t}\n\t*/\n\tdecodeKey(key) {\n\t\treturn this.keyMap ? this.mapKey.get(key) || key : key\n\t}\n\t\n\tencodeKey(key) {\n\t\treturn this.keyMap && this.keyMap.hasOwnProperty(key) ? this.keyMap[key] : key\n\t}\n\n\tencodeKeys(rec) {\n\t\tif (!this._keyMap) return rec\n\t\tlet map = new Map()\n\t\tfor (let [k,v] of Object.entries(rec)) map.set((this._keyMap.hasOwnProperty(k) ? this._keyMap[k] : k), v)\n\t\treturn map\n\t}\n\n\tdecodeKeys(map) {\n\t\tif (!this._keyMap || map.constructor.name != 'Map') return map\n\t\tif (!this._mapKey) {\n\t\t\tthis._mapKey = new Map()\n\t\t\tfor (let [k,v] of Object.entries(this._keyMap)) this._mapKey.set(v,k)\n\t\t}\n\t\tlet res = {}\n\t\t//map.forEach((v,k) => res[Object.keys(this._keyMap)[Object.values(this._keyMap).indexOf(k)] || k] = v)\n\t\tmap.forEach((v,k) => res[safeKey(this._mapKey.has(k) ? this._mapKey.get(k) : k)] = v)\n\t\treturn res\n\t}\n\t\n\tmapDecode(source, end) {\n\t\n\t\tlet res = this.decode(source)\n\t\tif (this._keyMap) { \n\t\t\t//Experiemntal support for Optimised KeyMap decoding \n\t\t\tswitch (res.constructor.name) {\n\t\t\t\tcase 'Array': return res.map(r => this.decodeKeys(r))\n\t\t\t\t//case 'Map': return this.decodeKeys(res)\n\t\t\t}\n\t\t}\n\t\treturn res\n\t}\n\n\tdecode(source, end) {\n\t\tif (src) {\n\t\t\t// re-entrant execution, save the state and restore it after we do this decode\n\t\t\treturn saveState(() => {\n\t\t\t\tclearSource()\n\t\t\t\treturn this ? this.decode(source, end) : Decoder.prototype.decode.call(defaultOptions, source, end)\n\t\t\t})\n\t\t}\n\t\tsrcEnd = end > -1 ? end : source.length\n\t\tposition = 0\n\t\tstringPosition = 0\n\t\tsrcStringEnd = 0\n\t\tsrcString = null\n\t\tstrings = EMPTY_ARRAY\n\t\tbundledStrings = null\n\t\tsrc = source\n\t\t// this provides cached access to the data view for a buffer if it is getting reused, which is a recommend\n\t\t// technique for getting data from a database where it can be copied into an existing buffer instead of creating\n\t\t// new ones\n\t\ttry {\n\t\t\tdataView = source.dataView || (source.dataView = new DataView(source.buffer, source.byteOffset, source.byteLength))\n\t\t} catch(error) {\n\t\t\t// if it doesn't have a buffer, maybe it is the wrong type of object\n\t\t\tsrc = null\n\t\t\tif (source instanceof Uint8Array)\n\t\t\t\tthrow error\n\t\t\tthrow new Error('Source must be a Uint8Array or Buffer but was a ' + ((source && typeof source == 'object') ? source.constructor.name : typeof source))\n\t\t}\n\t\tif (this instanceof Decoder) {\n\t\t\tcurrentDecoder = this\n\t\t\tpackedValues = this.sharedValues &&\n\t\t\t\t(this.pack ? new Array(this.maxPrivatePackedValues || 16).concat(this.sharedValues) :\n\t\t\t\tthis.sharedValues)\n\t\t\tif (this.structures) {\n\t\t\t\tcurrentStructures = this.structures\n\t\t\t\treturn checkedRead()\n\t\t\t} else if (!currentStructures || currentStructures.length > 0) {\n\t\t\t\tcurrentStructures = []\n\t\t\t}\n\t\t} else {\n\t\t\tcurrentDecoder = defaultOptions\n\t\t\tif (!currentStructures || currentStructures.length > 0)\n\t\t\t\tcurrentStructures = []\n\t\t\tpackedValues = null\n\t\t}\n\t\treturn checkedRead()\n\t}\n\tdecodeMultiple(source, forEach) {\n\t\tlet values, lastPosition = 0\n\t\ttry {\n\t\t\tlet size = source.length\n\t\t\tsequentialMode = true\n\t\t\tlet value = this ? this.decode(source, size) : defaultDecoder.decode(source, size)\n\t\t\tif (forEach) {\n\t\t\t\tif (forEach(value) === false) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\twhile(position < size) {\n\t\t\t\t\tlastPosition = position\n\t\t\t\t\tif (forEach(checkedRead()) === false) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvalues = [ value ]\n\t\t\t\twhile(position < size) {\n\t\t\t\t\tlastPosition = position\n\t\t\t\t\tvalues.push(checkedRead())\n\t\t\t\t}\n\t\t\t\treturn values\n\t\t\t}\n\t\t} catch(error) {\n\t\t\terror.lastPosition = lastPosition\n\t\t\terror.values = values\n\t\t\tthrow error\n\t\t} finally {\n\t\t\tsequentialMode = false\n\t\t\tclearSource()\n\t\t}\n\t}\n}\nexport function getPosition() {\n\treturn position\n}\nexport function checkedRead() {\n\ttry {\n\t\tlet result = read()\n\t\tif (bundledStrings) {\n\t\t\tif (position >= bundledStrings.postBundlePosition) {\n\t\t\t\tlet error = new Error('Unexpected bundle position');\n\t\t\t\terror.incomplete = true;\n\t\t\t\tthrow error\n\t\t\t}\n\t\t\t// bundled strings to skip past\n\t\t\tposition = bundledStrings.postBundlePosition;\n\t\t\tbundledStrings = null;\n\t\t}\n\n\t\tif (position == srcEnd) {\n\t\t\t// finished reading this source, cleanup references\n\t\t\tcurrentStructures = null\n\t\t\tsrc = null\n\t\t\tif (referenceMap)\n\t\t\t\treferenceMap = null\n\t\t} else if (position > srcEnd) {\n\t\t\t// over read\n\t\t\tlet error = new Error('Unexpected end of CBOR data')\n\t\t\terror.incomplete = true\n\t\t\tthrow error\n\t\t} else if (!sequentialMode) {\n\t\t\tthrow new Error('Data read, but end of buffer not reached')\n\t\t}\n\t\t// else more to read, but we are reading sequentially, so don't clear source yet\n\t\treturn result\n\t} catch(error) {\n\t\tclearSource()\n\t\tif (error instanceof RangeError || error.message.startsWith('Unexpected end of buffer')) {\n\t\t\terror.incomplete = true\n\t\t}\n\t\tthrow error\n\t}\n}\n\nexport function read() {\n\tlet token = src[position++]\n\tlet majorType = token >> 5\n\ttoken = token & 0x1f\n\tif (token > 0x17) {\n\t\tswitch (token) {\n\t\t\tcase 0x18:\n\t\t\t\ttoken = src[position++]\n\t\t\t\tbreak\n\t\t\tcase 0x19:\n\t\t\t\tif (majorType == 7) {\n\t\t\t\t\treturn getFloat16()\n\t\t\t\t}\n\t\t\t\ttoken = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\tbreak\n\t\t\tcase 0x1a:\n\t\t\t\tif (majorType == 7) {\n\t\t\t\t\tlet value = dataView.getFloat32(position)\n\t\t\t\t\tif (currentDecoder.useFloat32 > 2) {\n\t\t\t\t\t\t// this does rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved\n\t\t\t\t\t\tlet multiplier = mult10[((src[position] & 0x7f) << 1) | (src[position + 1] >> 7)]\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\treturn ((multiplier * value + (value > 0 ? 0.5 : -0.5)) >> 0) / multiplier\n\t\t\t\t\t}\n\t\t\t\t\tposition += 4\n\t\t\t\t\treturn value\n\t\t\t\t}\n\t\t\t\ttoken = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\tbreak\n\t\t\tcase 0x1b:\n\t\t\t\tif (majorType == 7) {\n\t\t\t\t\tlet value = dataView.getFloat64(position)\n\t\t\t\t\tposition += 8\n\t\t\t\t\treturn value\n\t\t\t\t}\n\t\t\t\tif (majorType > 1) {\n\t\t\t\t\tif (dataView.getUint32(position) > 0)\n\t\t\t\t\t\tthrow new Error('JavaScript does not support arrays, maps, or strings with length over 4294967295')\n\t\t\t\t\ttoken = dataView.getUint32(position + 4)\n\t\t\t\t} else if (currentDecoder.int64AsNumber) {\n\t\t\t\t\ttoken = dataView.getUint32(position) * 0x100000000\n\t\t\t\t\ttoken += dataView.getUint32(position + 4)\n\t\t\t\t} else\n\t\t\t\t\ttoken = dataView.getBigUint64(position)\n\t\t\t\tposition += 8\n\t\t\t\tbreak\n\t\t\tcase 0x1f: \n\t\t\t\t// indefinite length\n\t\t\t\tswitch(majorType) {\n\t\t\t\t\tcase 2: // byte string\n\t\t\t\t\tcase 3: // text string\n\t\t\t\t\t\tthrow new Error('Indefinite length not supported for byte or text strings')\n\t\t\t\t\tcase 4: // array\n\t\t\t\t\t\tlet array = []\n\t\t\t\t\t\tlet value, i = 0\n\t\t\t\t\t\twhile ((value = read()) != STOP_CODE) {\n\t\t\t\t\t\t\tif (i >= maxArraySize) throw new Error(`Array length exceeds ${maxArraySize}`)\n\t\t\t\t\t\t\tarray[i++] = value\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn majorType == 4 ? array : majorType == 3 ? array.join('') : Buffer.concat(array)\n\t\t\t\t\tcase 5: // map\n\t\t\t\t\t\tlet key\n\t\t\t\t\t\tif (currentDecoder.mapsAsObjects) {\n\t\t\t\t\t\t\tlet object = {}\n\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\tif (currentDecoder.keyMap) {\n\t\t\t\t\t\t\t\twhile((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) throw new Error(`Property count exceeds ${maxMapSize}`)\n\t\t\t\t\t\t\t\t\tobject[safeKey(currentDecoder.decodeKey(key))] = read()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\twhile ((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) throw new Error(`Property count exceeds ${maxMapSize}`)\n\t\t\t\t\t\t\t\t\tobject[safeKey(key)] = read()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn object\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (restoreMapsAsObject) {\n\t\t\t\t\t\t\t\tcurrentDecoder.mapsAsObjects = true\n\t\t\t\t\t\t\t\trestoreMapsAsObject = false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet map = new Map()\n\t\t\t\t\t\t\tif (currentDecoder.keyMap) {\n\t\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\t\twhile((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(`Map size exceeds ${maxMapSize}`);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tmap.set(currentDecoder.decodeKey(key), read())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tlet i = 0;\n\t\t\t\t\t\t\t\twhile ((key = read()) != STOP_CODE) {\n\t\t\t\t\t\t\t\t\tif (i++ >= maxMapSize) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(`Map size exceeds ${maxMapSize}`);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tmap.set(key, read())\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn map\n\t\t\t\t\t\t}\n\t\t\t\t\tcase 7:\n\t\t\t\t\t\treturn STOP_CODE\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error('Invalid major type for indefinite length ' + majorType)\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Unknown token ' + token)\n\t\t}\n\t}\n\tswitch (majorType) {\n\t\tcase 0: // positive int\n\t\t\treturn token\n\t\tcase 1: // negative int\n\t\t\treturn ~token\n\t\tcase 2: // buffer\n\t\t\treturn readBin(token)\n\t\tcase 3: // string\n\t\t\tif (srcStringEnd >= position) {\n\t\t\t\treturn srcString.slice(position - srcStringStart, (position += token) - srcStringStart)\n\t\t\t}\n\t\t\tif (srcStringEnd == 0 && srcEnd < 140 && token < 32) {\n\t\t\t\t// for small blocks, avoiding the overhead of the extract call is helpful\n\t\t\t\tlet string = token < 16 ? shortStringInJS(token) : longStringInJS(token)\n\t\t\t\tif (string != null)\n\t\t\t\t\treturn string\n\t\t\t}\n\t\t\treturn readFixedString(token)\n\t\tcase 4: // array\n\t\t\tif (token >= maxArraySize) throw new Error(`Array length exceeds ${maxArraySize}`)\n\t\t\tlet array = new Array(token)\n\t\t //if (currentDecoder.keyMap) for (let i = 0; i < token; i++) array[i] = currentDecoder.decodeKey(read())\t\n\t\t\t//else \n\t\t\tfor (let i = 0; i < token; i++) array[i] = read()\n\t\t\treturn array\n\t\tcase 5: // map\n\t\t\tif (token >= maxMapSize) throw new Error(`Map size exceeds ${maxArraySize}`)\n\t\t\tif (currentDecoder.mapsAsObjects) {\n\t\t\t\tlet object = {}\n\t\t\t\tif (currentDecoder.keyMap) for (let i = 0; i < token; i++) object[safeKey(currentDecoder.decodeKey(read()))] = read()\n\t\t\t\telse for (let i = 0; i < token; i++) object[safeKey(read())] = read()\n\t\t\t\treturn object\n\t\t\t} else {\n\t\t\t\tif (restoreMapsAsObject) {\n\t\t\t\t\tcurrentDecoder.mapsAsObjects = true\n\t\t\t\t\trestoreMapsAsObject = false\n\t\t\t\t}\n\t\t\t\tlet map = new Map()\n\t\t\t\tif (currentDecoder.keyMap) for (let i = 0; i < token; i++) map.set(currentDecoder.decodeKey(read()),read())\n\t\t\t\telse for (let i = 0; i < token; i++) map.set(read(), read())\n\t\t\t\treturn map\n\t\t\t}\n\t\tcase 6: // extension\n\t\t\tif (token >= BUNDLED_STRINGS_ID) {\n\t\t\t\tlet structure = currentStructures[token & 0x1fff] // check record structures first\n\t\t\t\t// At some point we may provide an option for dynamic tag assignment with a range like token >= 8 && (token < 16 || (token > 0x80 && token < 0xc0) || (token > 0x130 && token < 0x4000))\n\t\t\t\tif (structure) {\n\t\t\t\t\tif (!structure.read) structure.read = createStructureReader(structure)\n\t\t\t\t\treturn structure.read()\n\t\t\t\t}\n\t\t\t\tif (token < 0x10000) {\n\t\t\t\t\tif (token == RECORD_INLINE_ID) { // we do a special check for this so that we can keep the\n\t\t\t\t\t\t// currentExtensions as densely stored array (v8 stores arrays densely under about 3000 elements)\n\t\t\t\t\t\tlet length = readJustLength()\n\t\t\t\t\t\tlet id = read()\n\t\t\t\t\t\tlet structure = read()\n\t\t\t\t\t\trecordDefinition(id, structure)\n\t\t\t\t\t\tlet object = {}\n\t\t\t\t\t\tif (currentDecoder.keyMap) for (let i = 2; i < length; i++) {\n\t\t\t\t\t\t\tlet key = currentDecoder.decodeKey(structure[i - 2])\n\t\t\t\t\t\t\tobject[safeKey(key)] = read()\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse for (let i = 2; i < length; i++) {\n\t\t\t\t\t\t\tlet key = structure[i - 2]\n\t\t\t\t\t\t\tobject[safeKey(key)] = read()\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn object\n\t\t\t\t\t}\n\t\t\t\t\telse if (token == RECORD_DEFINITIONS_ID) {\n\t\t\t\t\t\tlet length = readJustLength()\n\t\t\t\t\t\tlet id = read()\n\t\t\t\t\t\tfor (let i = 2; i < length; i++) {\n\t\t\t\t\t\t\trecordDefinition(id++, read())\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn read()\n\t\t\t\t\t} else if (token == BUNDLED_STRINGS_ID) {\n\t\t\t\t\t\treturn readBundleExt()\n\t\t\t\t\t}\n\t\t\t\t\tif (currentDecoder.getShared) {\n\t\t\t\t\t\tloadShared()\n\t\t\t\t\t\tstructure = currentStructures[token & 0x1fff]\n\t\t\t\t\t\tif (structure) {\n\t\t\t\t\t\t\tif (!structure.read)\n\t\t\t\t\t\t\t\tstructure.read = createStructureReader(structure)\n\t\t\t\t\t\t\treturn structure.read()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet extension = currentExtensions[token]\n\t\t\tif (extension) {\n\t\t\t\tif (extension.handlesRead)\n\t\t\t\t\treturn extension(read)\n\t\t\t\telse\n\t\t\t\t\treturn extension(read())\n\t\t\t} else {\n\t\t\t\tlet input = read()\n\t\t\t\tfor (let i = 0; i < currentExtensionRanges.length; i++) {\n\t\t\t\t\tlet value = currentExtensionRanges[i](token, input)\n\t\t\t\t\tif (value !== undefined)\n\t\t\t\t\t\treturn value\n\t\t\t\t}\n\t\t\t\treturn new Tag(input, token)\n\t\t\t}\n\t\tcase 7: // fixed value\n\t\t\tswitch (token) {\n\t\t\t\tcase 0x14: return false\n\t\t\t\tcase 0x15: return true\n\t\t\t\tcase 0x16: return null\n\t\t\t\tcase 0x17: return; // undefined\n\t\t\t\tcase 0x1f:\n\t\t\t\tdefault:\n\t\t\t\t\tlet packedValue = (packedValues || getPackedValues())[token]\n\t\t\t\t\tif (packedValue !== undefined)\n\t\t\t\t\t\treturn packedValue\n\t\t\t\t\tthrow new Error('Unknown token ' + token)\n\t\t\t}\n\t\tdefault: // negative int\n\t\t\tif (isNaN(token)) {\n\t\t\t\tlet error = new Error('Unexpected end of CBOR data')\n\t\t\t\terror.incomplete = true\n\t\t\t\tthrow error\n\t\t\t}\n\t\t\tthrow new Error('Unknown CBOR token ' + token)\n\t}\n}\nconst validName = /^[a-zA-Z_$][a-zA-Z\\d_$]*$/\nfunction createStructureReader(structure) {\n\tif (!structure) throw new Error('Structure is required in record definition');\n\tfunction readObject() {\n\t\t// get the array size from the header\n\t\tlet length = src[position++]\n\t\t//let majorType = token >> 5\n\t\tlength = length & 0x1f\n\t\tif (length > 0x17) {\n\t\t\tswitch (length) {\n\t\t\t\tcase 0x18:\n\t\t\t\t\tlength = src[position++]\n\t\t\t\t\tbreak\n\t\t\t\tcase 0x19:\n\t\t\t\t\tlength = dataView.getUint16(position)\n\t\t\t\t\tposition += 2\n\t\t\t\t\tbreak\n\t\t\t\tcase 0x1a:\n\t\t\t\t\tlength = dataView.getUint32(position)\n\t\t\t\t\tposition += 4\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('Expected array header, but got ' + src[position - 1])\n\t\t\t}\n\t\t}\n\t\t// This initial function is quick to instantiate, but runs slower. After several iterations pay the cost to build the faster function\n\t\tlet compiledReader = this.compiledReader // first look to see if we have the fast compiled function\n\t\twhile(compiledReader) {\n\t\t\t// we have a fast compiled object literal reader\n\t\t\tif (compiledReader.propertyCount === length)\n\t\t\t\treturn compiledReader(read) // with the right length, so we use it\n\t\t\tcompiledReader = compiledReader.next // see if there is another reader with the right length\n\t\t}\n\t\tif (this.slowReads++ >= inlineObjectReadThreshold) { // create a fast compiled reader\n\t\t\tlet array = this.length == length ? this : this.slice(0, length)\n\t\t\tcompiledReader = currentDecoder.keyMap \n\t\t\t? new Function('r', 'return {' + array.map(k => currentDecoder.decodeKey(k)).map(k => validName.test(k) ? safeKey(k) + ':r()' : ('[' + JSON.stringify(k) + ']:r()')).join(',') + '}')\n\t\t\t: new Function('r', 'return {' + array.map(key => validName.test(key) ? safeKey(key) + ':r()' : ('[' + JSON.stringify(key) + ']:r()')).join(',') + '}')\n\t\t\tif (this.compiledReader)\n\t\t\t\tcompiledReader.next = this.compiledReader // if there is an existing one, we store multiple readers as a linked list because it is usually pretty rare to have multiple readers (of different length) for the same structure\n\t\t\tcompiledReader.propertyCount = length\n\t\t\tthis.compiledReader = compiledReader\n\t\t\treturn compiledReader(read)\n\t\t}\n\t\tlet object = {}\n\t\tif (currentDecoder.keyMap) for (let i = 0; i < length; i++) object[safeKey(currentDecoder.decodeKey(this[i]))] = read()\n\t\telse for (let i = 0; i < length; i++) {\n\t\t\tobject[safeKey(this[i])] = read();\n\t\t}\n\t\treturn object\n\t}\n\tstructure.slowReads = 0\n\treturn readObject\n}\n\nfunction safeKey(key) {\n\t// protect against prototype pollution\n\tif (typeof key === 'string') return key === '__proto__' ? '__proto_' : key\n\tif (typeof key === 'number' || typeof key === 'boolean' || typeof key === 'bigint') return key.toString();\n\tif (key == null) return key + '';\n\t// protect against expensive (DoS) string conversions\n\tthrow new Error('Invalid property name type ' + typeof key);\n}\n\nlet readFixedString = readStringJS\nlet readString8 = readStringJS\nlet readString16 = readStringJS\nlet readString32 = readStringJS\n\nexport let isNativeAccelerationEnabled = false\nexport function setExtractor(extractStrings) {\n\tisNativeAccelerationEnabled = true\n\treadFixedString = readString(1)\n\treadString8 = readString(2)\n\treadString16 = readString(3)\n\treadString32 = readString(5)\n\tfunction readString(headerLength) {\n\t\treturn function readString(length) {\n\t\t\tlet string = strings[stringPosition++]\n\t\t\tif (string == null) {\n\t\t\t\tif (bundledStrings)\n\t\t\t\t\treturn readStringJS(length)\n\t\t\t\tlet extraction = extractStrings(position, srcEnd, length, src)\n\t\t\t\tif (typeof extraction == 'string') {\n\t\t\t\t\tstring = extraction\n\t\t\t\t\tstrings = EMPTY_ARRAY\n\t\t\t\t} else {\n\t\t\t\t\tstrings = extraction\n\t\t\t\t\tstringPosition = 1\n\t\t\t\t\tsrcStringEnd = 1 // even if a utf-8 string was decoded, must indicate we are in the midst of extracted strings and can't skip strings\n\t\t\t\t\tstring = strings[0]\n\t\t\t\t\tif (string === undefined)\n\t\t\t\t\t\tthrow new Error('Unexpected end of buffer')\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet srcStringLength = string.length\n\t\t\tif (srcStringLength <= length) {\n\t\t\t\tposition += length\n\t\t\t\treturn string\n\t\t\t}\n\t\t\tsrcString = string\n\t\t\tsrcStringStart = position\n\t\t\tsrcStringEnd = position + srcStringLength\n\t\t\tposition += length\n\t\t\treturn string.slice(0, length) // we know we just want the beginning\n\t\t}\n\t}\n}\nfunction readStringJS(length) {\n\tlet result\n\tif (length < 16) {\n\t\tif (result = shortStringInJS(length))\n\t\t\treturn result\n\t}\n\tif (length > 64 && decoder)\n\t\treturn decoder.decode(src.subarray(position, position += length))\n\tconst end = position + length\n\tconst units = []\n\tresult = ''\n\twhile (position < end) {\n\t\tconst byte1 = src[position++]\n\t\tif ((byte1 & 0x80) === 0) {\n\t\t\t// 1 byte\n\t\t\tunits.push(byte1)\n\t\t} else if ((byte1 & 0xe0) === 0xc0) {\n\t\t\t// 2 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tunits.push(((byte1 & 0x1f) << 6) | byte2)\n\t\t} else if ((byte1 & 0xf0) === 0xe0) {\n\t\t\t// 3 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tconst byte3 = src[position++] & 0x3f\n\t\t\tunits.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3)\n\t\t} else if ((byte1 & 0xf8) === 0xf0) {\n\t\t\t// 4 bytes\n\t\t\tconst byte2 = src[position++] & 0x3f\n\t\t\tconst byte3 = src[position++] & 0x3f\n\t\t\tconst byte4 = src[position++] & 0x3f\n\t\t\tlet unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4\n\t\t\tif (unit > 0xffff) {\n\t\t\t\tunit -= 0x10000\n\t\t\t\tunits.push(((unit >>> 10) & 0x3ff) | 0xd800)\n\t\t\t\tunit = 0xdc00 | (unit & 0x3ff)\n\t\t\t}\n\t\t\tunits.push(unit)\n\t\t} else {\n\t\t\tunits.push(byte1)\n\t\t}\n\n\t\tif (units.length >= 0x1000) {\n\t\t\tresult += fromCharCode.apply(String, units)\n\t\t\tunits.length = 0\n\t\t}\n\t}\n\n\tif (units.length > 0) {\n\t\tresult += fromCharCode.apply(String, units)\n\t}\n\n\treturn result\n}\nlet fromCharCode = String.fromCharCode\nfunction longStringInJS(length) {\n\tlet start = position\n\tlet bytes = new Array(length)\n\tfor (let i = 0; i < length; i++) {\n\t\tconst byte = src[position++];\n\t\tif ((byte & 0x80) > 0) {\n\t\t\tposition = start\n \t\t\treturn\n \t\t}\n \t\tbytes[i] = byte\n \t}\n \treturn fromCharCode.apply(String, bytes)\n}\nfunction shortStringInJS(length) {\n\tif (length < 4) {\n\t\tif (length < 2) {\n\t\t\tif (length === 0)\n\t\t\t\treturn ''\n\t\t\telse {\n\t\t\t\tlet a = src[position++]\n\t\t\t\tif ((a & 0x80) > 1) {\n\t\t\t\t\tposition -= 1\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a)\n\t\t\t}\n\t\t} else {\n\t\t\tlet a = src[position++]\n\t\t\tlet b = src[position++]\n\t\t\tif ((a & 0x80) > 0 || (b & 0x80) > 0) {\n\t\t\t\tposition -= 2\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 3)\n\t\t\t\treturn fromCharCode(a, b)\n\t\t\tlet c = src[position++]\n\t\t\tif ((c & 0x80) > 0) {\n\t\t\t\tposition -= 3\n\t\t\t\treturn\n\t\t\t}\n\t\t\treturn fromCharCode(a, b, c)\n\t\t}\n\t} else {\n\t\tlet a = src[position++]\n\t\tlet b = src[position++]\n\t\tlet c = src[position++]\n\t\tlet d = src[position++]\n\t\tif ((a & 0x80) > 0 || (b & 0x80) > 0 || (c & 0x80) > 0 || (d & 0x80) > 0) {\n\t\t\tposition -= 4\n\t\t\treturn\n\t\t}\n\t\tif (length < 6) {\n\t\t\tif (length === 4)\n\t\t\t\treturn fromCharCode(a, b, c, d)\n\t\t\telse {\n\t\t\t\tlet e = src[position++]\n\t\t\t\tif ((e & 0x80) > 0) {\n\t\t\t\t\tposition -= 5\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a, b, c, d, e)\n\t\t\t}\n\t\t} else if (length < 8) {\n\t\t\tlet e = src[position++]\n\t\t\tlet f = src[position++]\n\t\t\tif ((e & 0x80) > 0 || (f & 0x80) > 0) {\n\t\t\t\tposition -= 6\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 7)\n\t\t\t\treturn fromCharCode(a, b, c, d, e, f)\n\t\t\tlet g = src[position++]\n\t\t\tif ((g & 0x80) > 0) {\n\t\t\t\tposition -= 7\n\t\t\t\treturn\n\t\t\t}\n\t\t\treturn fromCharCode(a, b, c, d, e, f, g)\n\t\t} else {\n\t\t\tlet e = src[position++]\n\t\t\tlet f = src[position++]\n\t\t\tlet g = src[position++]\n\t\t\tlet h = src[position++]\n\t\t\tif ((e & 0x80) > 0 || (f & 0x80) > 0 || (g & 0x80) > 0 || (h & 0x80) > 0) {\n\t\t\t\tposition -= 8\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (length < 10) {\n\t\t\t\tif (length === 8)\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h)\n\t\t\t\telse {\n\t\t\t\t\tlet i = src[position++]\n\t\t\t\t\tif ((i & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 9\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i)\n\t\t\t\t}\n\t\t\t} else if (length < 12) {\n\t\t\t\tlet i = src[position++]\n\t\t\t\tlet j = src[position++]\n\t\t\t\tif ((i & 0x80) > 0 || (j & 0x80) > 0) {\n\t\t\t\t\tposition -= 10\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (length < 11)\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j)\n\t\t\t\tlet k = src[position++]\n\t\t\t\tif ((k & 0x80) > 0) {\n\t\t\t\t\tposition -= 11\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k)\n\t\t\t} else {\n\t\t\t\tlet i = src[position++]\n\t\t\t\tlet j = src[position++]\n\t\t\t\tlet k = src[position++]\n\t\t\t\tlet l = src[position++]\n\t\t\t\tif ((i & 0x80) > 0 || (j & 0x80) > 0 || (k & 0x80) > 0 || (l & 0x80) > 0) {\n\t\t\t\t\tposition -= 12\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (length < 14) {\n\t\t\t\t\tif (length === 12)\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l)\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet m = src[position++]\n\t\t\t\t\t\tif ((m & 0x80) > 0) {\n\t\t\t\t\t\t\tposition -= 13\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet m = src[position++]\n\t\t\t\t\tlet n = src[position++]\n\t\t\t\t\tif ((m & 0x80) > 0 || (n & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 14\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tif (length < 15)\n\t\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n)\n\t\t\t\t\tlet o = src[position++]\n\t\t\t\t\tif ((o & 0x80) > 0) {\n\t\t\t\t\t\tposition -= 15\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\treturn fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction readBin(length) {\n\treturn currentDecoder.copyBuffers ?\n\t\t// specifically use the copying slice (not the node one)\n\t\tUint8Array.prototype.slice.call(src, position, position += length) :\n\t\tsrc.subarray(position, position += length)\n}\nfunction readExt(length) {\n\tlet type = src[position++]\n\tif (currentExtensions[type]) {\n\t\treturn currentExtensions[type](src.subarray(position, position += length))\n\t}\n\telse\n\t\tthrow new Error('Unknown extension type ' + type)\n}\nlet f32Array = new Float32Array(1)\nlet u8Array = new Uint8Array(f32Array.buffer, 0, 4)\nfunction getFloat16() {\n\tlet byte0 = src[position++]\n\tlet byte1 = src[position++]\n\tlet exponent = (byte0 & 0x7f) >> 2;\n\tif (exponent === 0x1f) { // specials\n\t\tif (byte1 || (byte0 & 3))\n\t\t\treturn NaN;\n\t\treturn (byte0 & 0x80) ? -Infinity : Infinity;\n\t}\n\tif (exponent === 0) { // sub-normals\n\t\t// significand with 10 fractional bits and divided by 2^14\n\t\tlet abs = (((byte0 & 3) << 8) | byte1) / (1 << 24)\n\t\treturn (byte0 & 0x80) ? -abs : abs\n\t}\n\n\tu8Array[3] = (byte0 & 0x80) | // sign bit\n\t\t((exponent >> 1) + 56) // 4 of 5 of the exponent bits, re-offset-ed\n\tu8Array[2] = ((byte0 & 7) << 5) | // last exponent bit and first two mantissa bits\n\t\t(byte1 >> 3) // next 5 bits of mantissa\n\tu8Array[1] = byte1 << 5; // last three bits of mantissa\n\tu8Array[0] = 0;\n\treturn f32Array[0];\n}\n\nlet keyCache = new Array(4096)\nfunction readKey() {\n\tlet length = src[position++]\n\tif (length >= 0x60 && length < 0x78) {\n\t\t// fixstr, potentially use key cache\n\t\tlength = length - 0x60\n\t\tif (srcStringEnd >= position) // if it has been extracted, must use it (and faster anyway)\n\t\t\treturn srcString.slice(position - srcStringStart, (position += length) - srcStringStart)\n\t\telse if (!(srcStringEnd == 0 && srcEnd < 180))\n\t\t\treturn readFixedString(length)\n\t} else { // not cacheable, go back and do a standard read\n\t\tposition--\n\t\treturn read()\n\t}\n\tlet key = ((length << 5) ^ (length > 1 ? dataView.getUint16(position) : length > 0 ? src[position] : 0)) & 0xfff\n\tlet entry = keyCache[key]\n\tlet checkPosition = position\n\tlet end = position + length - 3\n\tlet chunk\n\tlet i = 0\n\tif (entry && entry.bytes == length) {\n\t\twhile (checkPosition < end) {\n\t\t\tchunk = dataView.getUint32(checkPosition)\n\t\t\tif (chunk != entry[i++]) {\n\t\t\t\tcheckPosition = 0x70000000\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcheckPosition += 4\n\t\t}\n\t\tend += 3\n\t\twhile (checkPosition < end) {\n\t\t\tchunk = src[checkPosition++]\n\t\t\tif (chunk != entry[i++]) {\n\t\t\t\tcheckPosition = 0x70000000\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (checkPosition === end) {\n\t\t\tposition = checkPosition\n\t\t\treturn entry.string\n\t\t}\n\t\tend -= 3\n\t\tcheckPosition = position\n\t}\n\tentry = []\n\tkeyCache[key] = entry\n\tentry.bytes = length\n\twhile (checkPosition < end) {\n\t\tchunk = dataView.getUint32(checkPosition)\n\t\tentry.push(chunk)\n\t\tcheckPosition += 4\n\t}\n\tend += 3\n\twhile (checkPosition < end) {\n\t\tchunk = src[checkPosition++]\n\t\tentry.push(chunk)\n\t}\n\t// for small blocks, avoiding the overhead of the extract call is helpful\n\tlet string = length < 16 ? shortStringInJS(length) : longStringInJS(length)\n\tif (string != null)\n\t\treturn entry.string = string\n\treturn entry.string = readFixedString(length)\n}\n\nexport class Tag {\n\tconstructor(value, tag) {\n\t\tthis.value = value\n\t\tthis.tag = tag\n\t}\n}\n\ncurrentExtensions[0] = (dateString) => {\n\t// string date extension\n\treturn new Date(dateString)\n}\n\ncurrentExtensions[1] = (epochSec) => {\n\t// numeric date extension\n\treturn new Date(Math.round(epochSec * 1000))\n}\n\ncurrentExtensions[2] = (buffer) => {\n\t// bigint extension\n\tlet value = BigInt(0)\n\tfor (let i = 0, l = buffer.byteLength; i < l; i++) {\n\t\tvalue = BigInt(buffer[i]) + (value << BigInt(8))\n\t}\n\treturn value\n}\n\ncurrentExtensions[3] = (buffer) => {\n\t// negative bigint extension\n\treturn BigInt(-1) - currentExtensions[2](buffer)\n}\ncurrentExtensions[4] = (fraction) => {\n\t// best to reparse to maintain accuracy\n\treturn +(fraction[1] + 'e' + fraction[0])\n}\n\ncurrentExtensions[5] = (fraction) => {\n\t// probably not sufficiently accurate\n\treturn fraction[1] * Math.exp(fraction[0] * Math.log(2))\n}\n\n// the registration of the record definition extension\nconst recordDefinition = (id, structure) => {\n\tid = id - 0xe000\n\tlet existingStructure = currentStructures[id]\n\tif (existingStructure && existingStructure.isShared) {\n\t\t(currentStructures.restoreStructures || (currentStructures.restoreStructures = []))[id] = existingStructure\n\t}\n\tcurrentStructures[id] = structure\n\n\tstructure.read = createStructureReader(structure)\n}\ncurrentExtensions[LEGACY_RECORD_INLINE_ID] = (data) => {\n\tlet length = data.length\n\tlet structure = data[1]\n\trecordDefinition(data[0], structure)\n\tlet object = {}\n\tfor (let i = 2; i < length; i++) {\n\t\tlet key = structure[i - 2]\n\t\tobject[safeKey(key)] = data[i]\n\t}\n\treturn object\n}\ncurrentExtensions[14] = (value) => {\n\tif (bundledStrings)\n\t\treturn bundledStrings[0].slice(bundledStrings.position0, bundledStrings.position0 += value)\n\treturn new Tag(value, 14)\n}\ncurrentExtensions[15] = (value) => {\n\tif (bundledStrings)\n\t\treturn bundledStrings[1].slice(bundledStrings.position1, bundledStrings.position1 += value)\n\treturn new Tag(value, 15)\n}\nlet glbl = { Error, RegExp }\ncurrentExtensions[27] = (data) => { // http://cbor.schmorp.de/generic-object\n\treturn (glbl[data[0]] || Error)(data[1], data[2])\n}\nconst packedTable = (read) => {\n\tif (src[position++] != 0x84) {\n\t\tlet error = new Error('Packed values structure must be followed by a 4 element array')\n\t\tif (src.length < position)\n\t\t\terror.incomplete = true\n\t\tthrow error\n\t}\n\tlet newPackedValues = read() // packed values\n\tif (!newPackedValues || !newPackedValues.length) {\n\t\tlet error = new Error('Packed values structure must be followed by a 4 element array')\n\t\terror.incomplete = true\n\t\tthrow error\n\t}\n\tpackedValues = packedValues ? newPackedValues.concat(packedValues.slice(newPackedValues.length)) : newPackedValues\n\tpackedValues.prefixes = read()\n\tpackedValues.suffixes = read()\n\treturn read() // read the rump\n}\npackedTable.handlesRead = true\ncurrentExtensions[51] = packedTable\n\ncurrentExtensions[PACKED_REFERENCE_TAG_ID] = (data) => { // packed reference\n\tif (!packedValues) {\n\t\tif (currentDecoder.getShared)\n\t\t\tloadShared()\n\t\telse\n\t\t\treturn new Tag(data, PACKED_REFERENCE_TAG_ID)\n\t}\n\tif (typeof data == 'number')\n\t\treturn packedValues[16 + (data >= 0 ? 2 * data : (-2 * data - 1))]\n\tlet error = new Error('No support for non-integer packed references yet')\n\tif (data === undefined)\n\t\terror.incomplete = true\n\tthrow error\n}\n\n// The following code is an incomplete implementation of http://cbor.schmorp.de/stringref\n// the real thing would need to implemennt more logic to populate the stringRefs table and\n// maintain a stack of stringRef \"namespaces\".\n//\n// currentExtensions[25] = (id) => {\n// \treturn stringRefs[id]\n// }\n// currentExtensions[256] = (read) => {\n// \tstringRefs = []\n// \ttry {\n// \t\treturn read()\n// \t} finally {\n// \t\tstringRefs = null\n// \t}\n// }\n// currentExtensions[256].handlesRead = true\n\ncurrentExtensions[28] = (read) => { \n\t// shareable http://cbor.schmorp.de/value-sharing (for structured clones)\n\tif (!referenceMap) {\n\t\treferenceMap = new Map()\n\t\treferenceMap.id = 0\n\t}\n\tlet id = referenceMap.id++\n\tlet startingPosition = position\n\tlet token = src[position]\n\tlet target\n\t// TODO: handle Maps, Sets, and other types that can cycle; this is complicated, because you potentially need to read\n\t// ahead past references to record structure definitions\n\tif ((token >> 5) == 4)\n\t\ttarget = []\n\telse\n\t\ttarget = {}\n\n\tlet refEntry = { target } // a placeholder object\n\treferenceMap.set(id, refEntry)\n\tlet targetProperties = read() // read the next value as the target object to id\n\tif (refEntry.used) {// there is a cycle, so we have to assign properties to original target\n\t\tif (Object.getPrototypeOf(target) !== Object.getPrototypeOf(targetProperties)) {\n\t\t\t// this means that the returned target does not match the targetProperties, so we need rerun the read to\n\t\t\t// have the correctly create instance be assigned as a reference, then we do the copy the properties back to the\n\t\t\t// target\n\t\t\t// reset the position so that the read can be repeated\n\t\t\tposition = startingPosition\n\t\t\t// the returned instance is our new target for references\n\t\t\ttarget = targetProperties\n\t\t\treferenceMap.set(id, { target })\n\t\t\ttargetProperties = read()\n\t\t}\n\t\treturn Object.assign(target, targetProperties)\n\t}\n\trefEntry.target = targetProperties // the placeholder wasn't used, replace with the deserialized one\n\treturn targetProperties // no cycle, can just use the returned read object\n}\ncurrentExtensions[28].handlesRead = true\n\ncurrentExtensions[29] = (id) => {\n\t// sharedref http://cbor.schmorp.de/value-sharing (for structured clones)\n\tlet refEntry = referenceMap.get(id)\n\trefEntry.used = true\n\treturn refEntry.target\n}\n\ncurrentExtensions[258] = (array) => new Set(array); // https://github.com/input-output-hk/cbor-sets-spec/blob/master/CBOR_SETS.md\n(currentExtensions[259] = (read) => {\n\t// https://github.com/shanewholloway/js-cbor-codec/blob/master/docs/CBOR-259-spec\n\t// for decoding as a standard Map\n\tif (currentDecoder.mapsAsObjects) {\n\t\tcurrentDecoder.mapsAsObjects = false\n\t\trestoreMapsAsObject = true\n\t}\n\treturn read()\n}).handlesRead = true\nfunction combine(a, b) {\n\tif (typeof a === 'string')\n\t\treturn a + b\n\tif (a instanceof Array)\n\t\treturn a.concat(b)\n\treturn Object.assign({}, a, b)\n}\nfunction getPackedValues() {\n\tif (!packedValues) {\n\t\tif (currentDecoder.getShared)\n\t\t\tloadShared()\n\t\telse\n\t\t\tthrow new Error('No packed values available')\n\t}\n\treturn packedValues\n}\nconst SHARED_DATA_TAG_ID = 0x53687264 // ascii 'Shrd'\ncurrentExtensionRanges.push((tag, input) => {\n\tif (tag >= 225 && tag <= 255)\n\t\treturn combine(getPackedValues().prefixes[tag - 224], input)\n\tif (tag >= 28704 && tag <= 32767)\n\t\treturn combine(getPackedValues().prefixes[tag - 28672], input)\n\tif (tag >= 1879052288 && tag <= 2147483647)\n\t\treturn combine(getPackedValues().prefixes[tag - 1879048192], input)\n\tif (tag >= 216 && tag <= 223)\n\t\treturn combine(input, getPackedValues().suffixes[tag - 216])\n\tif (tag >= 27647 && tag <= 28671)\n\t\treturn combine(input, getPackedValues().suffixes[tag - 27639])\n\tif (tag >= 1811940352 && tag <= 1879048191)\n\t\treturn combine(input, getPackedValues().suffixes[tag - 1811939328])\n\tif (tag == SHARED_DATA_TAG_ID) {// we do a special check for this so that we can keep the currentExtensions as densely stored array (v8 stores arrays densely under about 3000 elements)\n\t\treturn {\n\t\t\tpackedValues: packedValues,\n\t\t\tstructures: currentStructures.slice(0),\n\t\t\tversion: input,\n\t\t}\n\t}\n\tif (tag == 55799) // self-descriptive CBOR tag, just return input value\n\t\treturn input\n})\n\nconst isLittleEndianMachine = new Uint8Array(new Uint16Array([1]).buffer)[0] == 1\nexport const typedArrays = [Uint8Array, Uint8ClampedArray, Uint16Array, Uint32Array,\n\ttypeof BigUint64Array == 'undefined' ? { name:'BigUint64Array' } : BigUint64Array, Int8Array, Int16Array, Int32Array,\n\ttypeof BigInt64Array == 'undefined' ? { name:'BigInt64Array' } : BigInt64Array, Float32Array, Float64Array]\nconst typedArrayTags = [64, 68, 69, 70, 71, 72, 77, 78, 79, 85, 86]\nfor (let i = 0; i < typedArrays.length; i++) {\n\tregisterTypedArray(typedArrays[i], typedArrayTags[i])\n}\nfunction registerTypedArray(TypedArray, tag) {\n\tlet dvMethod = 'get' + TypedArray.name.slice(0, -5)\n\tlet bytesPerElement;\n\tif (typeof TypedArray === 'function')\n\t\tbytesPerElement = TypedArray.BYTES_PER_ELEMENT;\n\telse\n\t\tTypedArray = null;\n\tfor (let littleEndian = 0; littleEndian < 2; littleEndian++) {\n\t\tif (!littleEndian && bytesPerElement == 1)\n\t\t\tcontinue\n\t\tlet sizeShift = bytesPerElement == 2 ? 1 : bytesPerElement == 4 ? 2 : bytesPerElement == 8 ? 3 : 0\n\t\tcurrentExtensions[littleEndian ? tag : (tag - 4)] = (bytesPerElement == 1 || littleEndian == isLittleEndianMachine) ? (buffer) => {\n\t\t\tif (!TypedArray)\n\t\t\t\tthrow new Error('Could not find typed array for code ' + tag)\n\t\t\tif (!currentDecoder.copyBuffers) {\n\t\t\t\t// try provide a direct view, but will only work if we are byte-aligned\n\t\t\t\tif (bytesPerElement === 1 ||\n\t\t\t\t\tbytesPerElement === 2 && !(buffer.byteOffset & 1) ||\n\t\t\t\t\tbytesPerElement === 4 && !(buffer.byteOffset & 3) ||\n\t\t\t\t\tbytesPerElement === 8 && !(buffer.byteOffset & 7))\n\t\t\t\t\treturn new TypedArray(buffer.buffer, buffer.byteOffset, buffer.byteLength >> sizeShift);\n\t\t\t}\n\t\t\t// we have to slice/copy here to get a new ArrayBuffer, if we are not word/byte aligned\n\t\t\treturn new TypedArray(Uint8Array.prototype.slice.call(buffer, 0).buffer)\n\t\t} : buffer => {\n\t\t\tif (!TypedArray)\n\t\t\t\tthrow new Error('Could not find typed array for code ' + tag)\n\t\t\tlet dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength)\n\t\t\tlet elements = buffer.length >> sizeShift\n\t\t\tlet ta = new TypedArray(elements)\n\t\t\tlet method = dv[dvMethod]\n\t\t\tfor (let i = 0; i < elements; i++) {\n\t\t\t\tta[i] = method.call(dv, i << sizeShift, littleEndian)\n\t\t\t}\n\t\t\treturn ta\n\t\t}\n\t}\n}\n\nfunction readBundleExt() {\n\tlet length = readJustLength()\n\tlet bundlePosition = position + read()\n\tfor (let i = 2; i < length; i++) {\n\t\t// skip past bundles that were already read\n\t\tlet bundleLength = readJustLength() // this will increment position, so must add to position afterwards\n\t\tposition += bundleLength\n\t}\n\tlet dataPosition = position\n\tposition = bundlePosition\n\tbundledStrings = [readStringJS(readJustLength()), readStringJS(readJustLength())]\n\tbundledStrings.position0 = 0\n\tbundledStrings.position1 = 0\n\tbundledStrings.postBundlePosition = position\n\tposition = dataPosition\n\treturn read()\n}\n\nfunction readJustLength() {\n\tlet token = src[position++] & 0x1f\n\tif (token > 0x17) {\n\t\tswitch (token) {\n\t\t\tcase 0x18:\n\t\t\t\ttoken = src[position++]\n\t\t\t\tbreak\n\t\t\tcase 0x19:\n\t\t\t\ttoken = dataView.getUint16(position)\n\t\t\t\tposition += 2\n\t\t\t\tbreak\n\t\t\tcase 0x1a:\n\t\t\t\ttoken = dataView.getUint32(position)\n\t\t\t\tposition += 4\n\t\t\t\tbreak\n\t\t}\n\t}\n\treturn token\n}\n\nfunction loadShared() {\n\tif (currentDecoder.getShared) {\n\t\tlet sharedData = saveState(() => {\n\t\t\t// save the state in case getShared modifies our buffer\n\t\t\tsrc = null\n\t\t\treturn currentDecoder.getShared()\n\t\t}) || {}\n\t\tlet updatedStructures = sharedData.structures || []\n\t\tcurrentDecoder.sharedVersion = sharedData.version\n\t\tpackedValues = currentDecoder.sharedValues = sharedData.packedValues\n\t\tif (currentStructures === true)\n\t\t\tcurrentDecoder.structures = currentStructures = updatedStructures\n\t\telse\n\t\t\tcurrentStructures.splice.apply(currentStructures, [0, updatedStructures.length].concat(updatedStructures))\n\t}\n}\n\nfunction saveState(callback) {\n\tlet savedSrcEnd = srcEnd\n\tlet savedPosition = position\n\tlet savedStringPosition = stringPosition\n\tlet savedSrcStringStart = srcStringStart\n\tlet savedSrcStringEnd = srcStringEnd\n\tlet savedSrcString = srcString\n\tlet savedStrings = strings\n\tlet savedReferenceMap = referenceMap\n\tlet savedBundledStrings = bundledStrings\n\n\t// TODO: We may need to revisit this if we do more external calls to user code (since it could be slow)\n\tlet savedSrc = new Uint8Array(src.slice(0, srcEnd)) // we copy the data in case it changes while external data is processed\n\tlet savedStructures = currentStructures\n\tlet savedDecoder = currentDecoder\n\tlet savedSequentialMode = sequentialMode\n\tlet value = callback()\n\tsrcEnd = savedSrcEnd\n\tposition = savedPosition\n\tstringPosition = savedStringPosition\n\tsrcStringStart = savedSrcStringStart\n\tsrcStringEnd = savedSrcStringEnd\n\tsrcString = savedSrcString\n\tstrings = savedStrings\n\treferenceMap = savedReferenceMap\n\tbundledStrings = savedBundledStrings\n\tsrc = savedSrc\n\tsequentialMode = savedSequentialMode\n\tcurrentStructures = savedStructures\n\tcurrentDecoder = savedDecoder\n\tdataView = new DataView(src.buffer, src.byteOffset, src.byteLength)\n\treturn value\n}\nexport function clearSource() {\n\tsrc = null\n\treferenceMap = null\n\tcurrentStructures = null\n}\n\nexport function addExtension(extension) {\n\tcurrentExtensions[extension.tag] = extension.decode\n}\n\nexport function setSizeLimits(limits) {\n\tif (limits.maxMapSize) maxMapSize = limits.maxMapSize;\n\tif (limits.maxArraySize) maxArraySize = limits.maxArraySize;\n\tif (limits.maxObjectSize) maxObjectSize = limits.maxObjectSize;\n}\n\nexport const mult10 = new Array(147) // this is a table matching binary exponents to the multiplier to determine significant digit rounding\nfor (let i = 0; i < 256; i++) {\n\tmult10[i] = +('1e' + Math.floor(45.15 - i * 0.30103))\n}\nlet defaultDecoder = new Decoder({ useRecords: false })\nexport const decode = defaultDecoder.decode\nexport const decodeMultiple = defaultDecoder.decodeMultiple\nexport const FLOAT32_OPTIONS = {\n\tNEVER: 0,\n\tALWAYS: 1,\n\tDECIMAL_ROUND: 3,\n\tDECIMAL_FIT: 4\n}\nexport function roundFloat32(float32Number) {\n\tf32Array[0] = float32Number\n\tlet multiplier = mult10[((u8Array[3] & 0x7f) << 1) | (u8Array[2] >> 7)]\n\treturn ((multiplier * float32Number + (float32Number > 0 ? 0.5 : -0.5)) >> 0) / multiplier\n}\n","import { Decoder, mult10, Tag, typedArrays, addExtension as decodeAddExtension } from './decode.js'\nlet textEncoder\ntry {\n\ttextEncoder = new TextEncoder()\n} catch (error) {}\nlet extensions, extensionClasses\nconst Buffer = typeof globalThis === 'object' && globalThis.Buffer;\nconst hasNodeBuffer = typeof Buffer !== 'undefined'\nconst ByteArrayAllocate = hasNodeBuffer ? Buffer.allocUnsafeSlow : Uint8Array\nconst ByteArray = hasNodeBuffer ? Buffer : Uint8Array\nconst MAX_STRUCTURES = 0x100\nconst MAX_BUFFER_SIZE = hasNodeBuffer ? 0x100000000 : 0x7fd00000\nlet serializationId = 1\nlet throwOnIterable\nlet target\nlet targetView\nlet position = 0\nlet safeEnd\nlet bundledStrings = null\nconst MAX_BUNDLE_SIZE = 0xf000\nconst hasNonLatin = /[\\u0080-\\uFFFF]/\nconst RECORD_SYMBOL = Symbol('record-id')\nexport class Encoder extends Decoder {\n\tconstructor(options) {\n\t\tsuper(options)\n\t\tthis.offset = 0\n\t\tlet typeBuffer\n\t\tlet start\n\t\tlet sharedStructures\n\t\tlet hasSharedUpdate\n\t\tlet structures\n\t\tlet referenceMap\n\t\toptions = options || {}\n\t\tlet encodeUtf8 = ByteArray.prototype.utf8Write ? function(string, position, maxBytes) {\n\t\t\treturn target.utf8Write(string, position, maxBytes)\n\t\t} : (textEncoder && textEncoder.encodeInto) ?\n\t\t\tfunction(string, position) {\n\t\t\t\treturn textEncoder.encodeInto(string, target.subarray(position)).written\n\t\t\t} : false\n\n\t\tlet encoder = this\n\t\tlet hasSharedStructures = options.structures || options.saveStructures\n\t\tlet maxSharedStructures = options.maxSharedStructures\n\t\tif (maxSharedStructures == null)\n\t\t\tmaxSharedStructures = hasSharedStructures ? 128 : 0\n\t\tif (maxSharedStructures > 8190)\n\t\t\tthrow new Error('Maximum maxSharedStructure is 8190')\n\t\tlet isSequential = options.sequential\n\t\tif (isSequential) {\n\t\t\tmaxSharedStructures = 0\n\t\t}\n\t\tif (!this.structures)\n\t\t\tthis.structures = []\n\t\tif (this.saveStructures)\n\t\t\tthis.saveShared = this.saveStructures\n\t\tlet samplingPackedValues, packedObjectMap, sharedValues = options.sharedValues\n\t\tlet sharedPackedObjectMap\n\t\tif (sharedValues) {\n\t\t\tsharedPackedObjectMap = Object.create(null)\n\t\t\tfor (let i = 0, l = sharedValues.length; i < l; i++) {\n\t\t\t\tsharedPackedObjectMap[sharedValues[i]] = i\n\t\t\t}\n\t\t}\n\t\tlet recordIdsToRemove = []\n\t\tlet transitionsCount = 0\n\t\tlet serializationsSinceTransitionRebuild = 0\n\t\t\n\t\tthis.mapEncode = function(value, encodeOptions) {\n\t\t\t// Experimental support for premapping keys using _keyMap instad of keyMap - not optiimised yet)\n\t\t\tif (this._keyMap && !this._mapped) {\n\t\t\t\t//console.log('encoding ', value)\n\t\t\t\tswitch (value.constructor.name) {\n\t\t\t\t\tcase 'Array': \n\t\t\t\t\t\tvalue = value.map(r => this.encodeKeys(r))\n\t\t\t\t\t\tbreak\n\t\t\t\t\t//case 'Map': \n\t\t\t\t\t//\tvalue = this.encodeKeys(value)\n\t\t\t\t\t//\tbreak\n\t\t\t\t}\n\t\t\t\t//this._mapped = true\n\t\t\t}\n\t\t\treturn this.encode(value, encodeOptions)\n\t\t}\n\t\t\n\t\tthis.encode = function(value, encodeOptions)\t{\n\t\t\tif (!target) {\n\t\t\t\ttarget = new ByteArrayAllocate(8192)\n\t\t\t\ttargetView = new DataView(target.buffer, 0, 8192)\n\t\t\t\tposition = 0\n\t\t\t}\n\t\t\tsafeEnd = target.length - 10\n\t\t\tif (safeEnd - position < 0x800) {\n\t\t\t\t// don't start too close to the end, \n\t\t\t\ttarget = new ByteArrayAllocate(target.length)\n\t\t\t\ttargetView = new DataView(target.buffer, 0, target.length)\n\t\t\t\tsafeEnd = target.length - 10\n\t\t\t\tposition = 0\n\t\t\t} else if (encodeOptions === REUSE_BUFFER_MODE)\n\t\t\t\tposition = (position + 7) & 0x7ffffff8 // Word align to make any future copying of this buffer faster\n\t\t\tstart = position\n\t\t\tif (encoder.useSelfDescribedHeader) {\n\t\t\t\ttargetView.setUint32(position, 0xd9d9f700) // tag two byte, then self-descriptive tag\n\t\t\t\tposition += 3\n\t\t\t}\n\t\t\treferenceMap = encoder.structuredClone ? new Map() : null\n\t\t\tif (encoder.bundleStrings && typeof value !== 'string') {\n\t\t\t\tbundledStrings = []\n\t\t\t\tbundledStrings.size = Infinity // force a new bundle start on first string\n\t\t\t} else\n\t\t\t\tbundledStrings = null\n\n\t\t\tsharedStructures = encoder.structures\n\t\t\tif (sharedStructures) {\n\t\t\t\tif (sharedStructures.uninitialized) {\n\t\t\t\t\tlet sharedData = encoder.getShared() || {}\n\t\t\t\t\tencoder.structures = sharedStructures = sharedData.structures || []\n\t\t\t\t\tencoder.sharedVersion = sharedData.version\n\t\t\t\t\tlet sharedValues = encoder.sharedValues = sharedData.packedValues\n\t\t\t\t\tif (sharedValues) {\n\t\t\t\t\t\tsharedPackedObjectMap = {}\n\t\t\t\t\t\tfor (let i = 0, l = sharedValues.length; i < l; i++)\n\t\t\t\t\t\t\tsharedPackedObjectMap[sharedValues[i]] = i\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet sharedStructuresLength = sharedStructures.length\n\t\t\t\tif (sharedStructuresLength > maxSharedStructures && !isSequential)\n\t\t\t\t\tsharedStructuresLength = maxSharedStructures\n\t\t\t\tif (!sharedStructures.transitions) {\n\t\t\t\t\t// rebuild our structure transitions\n\t\t\t\t\tsharedStructures.transitions = Object.create(null)\n\t\t\t\t\tfor (let i = 0; i < sharedStructuresLength; i++) {\n\t\t\t\t\t\tlet keys = sharedStructures[i]\n\t\t\t\t\t\t//console.log('shared struct keys:', keys)\n\t\t\t\t\t\tif (!keys)\n\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\tlet nextTransition, transition = sharedStructures.transitions\n\t\t\t\t\t\tfor (let j = 0, l = keys.length; j < l; j++) {\n\t\t\t\t\t\t\tif (transition[RECORD_SYMBOL] === undefined)\n\t\t\t\t\t\t\t\ttransition[RECORD_SYMBOL] = i\n\t\t\t\t\t\t\tlet key = keys[j]\n\t\t\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttransition = nextTransition\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttransition[RECORD_SYMBOL] = i | 0x100000\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!isSequential)\n\t\t\t\t\tsharedStructures.nextId = sharedStructuresLength\n\t\t\t}\n\t\t\tif (hasSharedUpdate)\n\t\t\t\thasSharedUpdate = false\n\t\t\tstructures = sharedStructures || []\n\t\t\tpackedObjectMap = sharedPackedObjectMap\n\t\t\tif (options.pack) {\n\t\t\t\tlet packedValues = new Map()\n\t\t\t\tpackedValues.values = []\n\t\t\t\tpackedValues.encoder = encoder\n\t\t\t\tpackedValues.maxValues = options.maxPrivatePackedValues || (sharedPackedObjectMap ? 16 : Infinity)\n\t\t\t\tpackedValues.objectMap = sharedPackedObjectMap || false\n\t\t\t\tpackedValues.samplingPackedValues = samplingPackedValues\n\t\t\t\tfindRepetitiveStrings(value, packedValues)\n\t\t\t\tif (packedValues.values.length > 0) {\n\t\t\t\t\ttarget[position++] = 0xd8 // one-byte tag\n\t\t\t\t\ttarget[position++] = 51 // tag 51 for packed shared structures https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\t\t\twriteArrayHeader(4)\n\t\t\t\t\tlet valuesArray = packedValues.values\n\t\t\t\t\tencode(valuesArray)\n\t\t\t\t\twriteArrayHeader(0) // prefixes\n\t\t\t\t\twriteArrayHeader(0) // suffixes\n\t\t\t\t\tpackedObjectMap = Object.create(sharedPackedObjectMap || null)\n\t\t\t\t\tfor (let i = 0, l = valuesArray.length; i < l; i++) {\n\t\t\t\t\t\tpackedObjectMap[valuesArray[i]] = i\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrowOnIterable = encodeOptions & THROW_ON_ITERABLE;\n\t\t\ttry {\n\t\t\t\tif (throwOnIterable)\n\t\t\t\t\treturn;\n\t\t\t\tencode(value)\n\t\t\t\tif (bundledStrings) {\n\t\t\t\t\twriteBundles(start, encode)\n\t\t\t\t}\n\t\t\t\tencoder.offset = position // update the offset so next serialization doesn't write over our buffer, but can continue writing to same buffer sequentially\n\t\t\t\tif (referenceMap && referenceMap.idsToInsert) {\n\t\t\t\t\tposition += referenceMap.idsToInsert.length * 2\n\t\t\t\t\tif (position > safeEnd)\n\t\t\t\t\t\tmakeRoom(position)\n\t\t\t\t\tencoder.offset = position\n\t\t\t\t\tlet serialized = insertIds(target.subarray(start, position), referenceMap.idsToInsert)\n\t\t\t\t\treferenceMap = null\n\t\t\t\t\treturn serialized\n\t\t\t\t}\n\t\t\t\tif (encodeOptions & REUSE_BUFFER_MODE) {\n\t\t\t\t\ttarget.start = start\n\t\t\t\t\ttarget.end = position\n\t\t\t\t\treturn target\n\t\t\t\t}\n\t\t\t\treturn target.subarray(start, position) // position can change if we call encode again in saveShared, so we get the buffer now\n\t\t\t} finally {\n\t\t\t\tif (sharedStructures) {\n\t\t\t\t\tif (serializationsSinceTransitionRebuild < 10)\n\t\t\t\t\t\tserializationsSinceTransitionRebuild++\n\t\t\t\t\tif (sharedStructures.length > maxSharedStructures)\n\t\t\t\t\t\tsharedStructures.length = maxSharedStructures\n\t\t\t\t\tif (transitionsCount > 10000) {\n\t\t\t\t\t\t// force a rebuild occasionally after a lot of transitions so it can get cleaned up\n\t\t\t\t\t\tsharedStructures.transitions = null\n\t\t\t\t\t\tserializationsSinceTransitionRebuild = 0\n\t\t\t\t\t\ttransitionsCount = 0\n\t\t\t\t\t\tif (recordIdsToRemove.length > 0)\n\t\t\t\t\t\t\trecordIdsToRemove = []\n\t\t\t\t\t} else if (recordIdsToRemove.length > 0 && !isSequential) {\n\t\t\t\t\t\tfor (let i = 0, l = recordIdsToRemove.length; i < l; i++) {\n\t\t\t\t\t\t\trecordIdsToRemove[i][RECORD_SYMBOL] = undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\trecordIdsToRemove = []\n\t\t\t\t\t\t//sharedStructures.nextId = maxSharedStructures\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (hasSharedUpdate && encoder.saveShared) {\n\t\t\t\t\tif (encoder.structures.length > maxSharedStructures) {\n\t\t\t\t\t\tencoder.structures = encoder.structures.slice(0, maxSharedStructures)\n\t\t\t\t\t}\n\t\t\t\t\t// we can't rely on start/end with REUSE_BUFFER_MODE since they will (probably) change when we save\n\t\t\t\t\tlet returnBuffer = target.subarray(start, position)\n\t\t\t\t\tif (encoder.updateSharedData() === false)\n\t\t\t\t\t\treturn encoder.encode(value) // re-encode if it fails\n\t\t\t\t\treturn returnBuffer\n\t\t\t\t}\n\t\t\t\tif (encodeOptions & RESET_BUFFER_MODE)\n\t\t\t\t\tposition = start\n\t\t\t}\n\t\t}\n\t\tthis.findCommonStringsToPack = () => {\n\t\t\tsamplingPackedValues = new Map()\n\t\t\tif (!sharedPackedObjectMap)\n\t\t\t\tsharedPackedObjectMap = Object.create(null)\n\t\t\treturn (options) => {\n\t\t\t\tlet threshold = options && options.threshold || 4\n\t\t\t\tlet position = this.pack ? options.maxPrivatePackedValues || 16 : 0\n\t\t\t\tif (!sharedValues)\n\t\t\t\t\tsharedValues = this.sharedValues = []\n\t\t\t\tfor (let [ key, status ] of samplingPackedValues) {\n\t\t\t\t\tif (status.count > threshold) {\n\t\t\t\t\t\tsharedPackedObjectMap[key] = position++\n\t\t\t\t\t\tsharedValues.push(key)\n\t\t\t\t\t\thasSharedUpdate = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\twhile (this.saveShared && this.updateSharedData() === false) {}\n\t\t\t\tsamplingPackedValues = null\n\t\t\t}\n\t\t}\n\t\tconst encode = (value) => {\n\t\t\tif (position > safeEnd)\n\t\t\t\ttarget = makeRoom(position)\n\n\t\t\tvar type = typeof value\n\t\t\tvar length\n\t\t\tif (type === 'string') {\n\t\t\t\tif (packedObjectMap) {\n\t\t\t\t\tlet packedPosition = packedObjectMap[value]\n\t\t\t\t\tif (packedPosition >= 0) {\n\t\t\t\t\t\tif (packedPosition < 16)\n\t\t\t\t\t\t\ttarget[position++] = packedPosition + 0xe0 // simple values, defined in https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ttarget[position++] = 0xc6 // tag 6 defined in https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\t\t\t\t\tif (packedPosition & 1)\n\t\t\t\t\t\t\t\tencode((15 - packedPosition) >> 1)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tencode((packedPosition - 16) >> 1)\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n/*\t\t\t\t\t\t} else if (packedStatus.serializationId != serializationId) {\n\t\t\t\t\t\t\tpackedStatus.serializationId = serializationId\n\t\t\t\t\t\t\tpackedStatus.count = 1\n\t\t\t\t\t\t\tif (options.sharedPack) {\n\t\t\t\t\t\t\t\tlet sharedCount = packedStatus.sharedCount = (packedStatus.sharedCount || 0) + 1\n\t\t\t\t\t\t\t\tif (shareCount > (options.sharedPack.threshold || 5)) {\n\t\t\t\t\t\t\t\t\tlet sharedPosition = packedStatus.position = packedStatus.nextSharedPosition\n\t\t\t\t\t\t\t\t\thasSharedUpdate = true\n\t\t\t\t\t\t\t\t\tif (sharedPosition < 16)\n\t\t\t\t\t\t\t\t\t\ttarget[position++] = sharedPosition + 0xc0\n\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} // else any in-doc incrementation?*/\n\t\t\t\t\t} else if (samplingPackedValues && !options.pack) {\n\t\t\t\t\t\tlet status = samplingPackedValues.get(value)\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tstatus.count++\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tsamplingPackedValues.set(value, {\n\t\t\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet strLength = value.length\n\t\t\t\tif (bundledStrings && strLength >= 4 && strLength < 0x400) {\n\t\t\t\t\tif ((bundledStrings.size += strLength) > MAX_BUNDLE_SIZE) {\n\t\t\t\t\t\tlet extStart\n\t\t\t\t\t\tlet maxBytes = (bundledStrings[0] ? bundledStrings[0].length * 3 + bundledStrings[1].length : 0) + 10\n\t\t\t\t\t\tif (position + maxBytes > safeEnd)\n\t\t\t\t\t\t\ttarget = makeRoom(position + maxBytes)\n\t\t\t\t\t\ttarget[position++] = 0xd9 // tag 16-bit\n\t\t\t\t\t\ttarget[position++] = 0xdf // tag 0xdff9\n\t\t\t\t\t\ttarget[position++] = 0xf9\n\t\t\t\t\t\t// TODO: If we only have one bundle with any string data, only write one string bundle\n\t\t\t\t\t\ttarget[position++] = bundledStrings.position ? 0x84 : 0x82 // array of 4 or 2 elements depending on if we write bundles\n\t\t\t\t\t\ttarget[position++] = 0x1a // 32-bit unsigned int\n\t\t\t\t\t\textStart = position - start\n\t\t\t\t\t\tposition += 4 // reserve for writing bundle reference\n\t\t\t\t\t\tif (bundledStrings.position) {\n\t\t\t\t\t\t\twriteBundles(start, encode) // write the last bundles\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbundledStrings = ['', ''] // create new ones\n\t\t\t\t\t\tbundledStrings.size = 0\n\t\t\t\t\t\tbundledStrings.position = extStart\n\t\t\t\t\t}\n\t\t\t\t\tlet twoByte = hasNonLatin.test(value)\n\t\t\t\t\tbundledStrings[twoByte ? 0 : 1] += value\n\t\t\t\t\ttarget[position++] = twoByte ? 0xce : 0xcf\n\t\t\t\t\tencode(strLength);\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tlet headerSize\n\t\t\t\t// first we estimate the header size, so we can write to the correct location\n\t\t\t\tif (strLength < 0x20) {\n\t\t\t\t\theaderSize = 1\n\t\t\t\t} else if (strLength < 0x100) {\n\t\t\t\t\theaderSize = 2\n\t\t\t\t} else if (strLength < 0x10000) {\n\t\t\t\t\theaderSize = 3\n\t\t\t\t} else {\n\t\t\t\t\theaderSize = 5\n\t\t\t\t}\n\t\t\t\tlet maxBytes = strLength * 3\n\t\t\t\tif (position + maxBytes > safeEnd)\n\t\t\t\t\ttarget = makeRoom(position + maxBytes)\n\n\t\t\t\tif (strLength < 0x40 || !encodeUtf8) {\n\t\t\t\t\tlet i, c1, c2, strPosition = position + headerSize\n\t\t\t\t\tfor (i = 0; i < strLength; i++) {\n\t\t\t\t\t\tc1 = value.charCodeAt(i)\n\t\t\t\t\t\tif (c1 < 0x80) {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1\n\t\t\t\t\t\t} else if (c1 < 0x800) {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 | 0xc0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t(c1 & 0xfc00) === 0xd800 &&\n\t\t\t\t\t\t\t((c2 = value.charCodeAt(i + 1)) & 0xfc00) === 0xdc00\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tc1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff)\n\t\t\t\t\t\t\ti++\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 18 | 0xf0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 12 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 12 | 0xe0\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 >> 6 & 0x3f | 0x80\n\t\t\t\t\t\t\ttarget[strPosition++] = c1 & 0x3f | 0x80\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlength = strPosition - position - headerSize\n\t\t\t\t} else {\n\t\t\t\t\tlength = encodeUtf8(value, position + headerSize, maxBytes)\n\t\t\t\t}\n\n\t\t\t\tif (length < 0x18) {\n\t\t\t\t\ttarget[position++] = 0x60 | length\n\t\t\t\t} else if (length < 0x100) {\n\t\t\t\t\tif (headerSize < 2) {\n\t\t\t\t\t\ttarget.copyWithin(position + 2, position + 1, position + 1 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0x78\n\t\t\t\t\ttarget[position++] = length\n\t\t\t\t} else if (length < 0x10000) {\n\t\t\t\t\tif (headerSize < 3) {\n\t\t\t\t\t\ttarget.copyWithin(position + 3, position + 2, position + 2 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0x79\n\t\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t\t} else {\n\t\t\t\t\tif (headerSize < 5) {\n\t\t\t\t\t\ttarget.copyWithin(position + 5, position + 3, position + 3 + length)\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0x7a\n\t\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\t\tposition += 4\n\t\t\t\t}\n\t\t\t\tposition += length\n\t\t\t} else if (type === 'number') {\n\t\t\t\tif (!this.alwaysUseFloat && value >>> 0 === value) {// positive integer, 32-bit or less\n\t\t\t\t\t// positive uint\n\t\t\t\t\tif (value < 0x18) {\n\t\t\t\t\t\ttarget[position++] = value\n\t\t\t\t\t} else if (value < 0x100) {\n\t\t\t\t\t\ttarget[position++] = 0x18\n\t\t\t\t\t\ttarget[position++] = value\n\t\t\t\t\t} else if (value < 0x10000) {\n\t\t\t\t\t\ttarget[position++] = 0x19\n\t\t\t\t\t\ttarget[position++] = value >> 8\n\t\t\t\t\t\ttarget[position++] = value & 0xff\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[position++] = 0x1a\n\t\t\t\t\t\ttargetView.setUint32(position, value)\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t}\n\t\t\t\t} else if (!this.alwaysUseFloat && value >> 0 === value) { // negative integer\n\t\t\t\t\tif (value >= -0x18) {\n\t\t\t\t\t\ttarget[position++] = 0x1f - value\n\t\t\t\t\t} else if (value >= -0x100) {\n\t\t\t\t\t\ttarget[position++] = 0x38\n\t\t\t\t\t\ttarget[position++] = ~value\n\t\t\t\t\t} else if (value >= -0x10000) {\n\t\t\t\t\t\ttarget[position++] = 0x39\n\t\t\t\t\t\ttargetView.setUint16(position, ~value)\n\t\t\t\t\t\tposition += 2\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttarget[position++] = 0x3a\n\t\t\t\t\t\ttargetView.setUint32(position, ~value)\n\t\t\t\t\t\tposition += 4\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tlet useFloat32\n\t\t\t\t\tif ((useFloat32 = this.useFloat32) > 0 && value < 0x100000000 && value >= -0x80000000) {\n\t\t\t\t\t\ttarget[position++] = 0xfa\n\t\t\t\t\t\ttargetView.setFloat32(position, value)\n\t\t\t\t\t\tlet xShifted\n\t\t\t\t\t\tif (useFloat32 < 4 ||\n\t\t\t\t\t\t\t\t// this checks for rounding of numbers that were encoded in 32-bit float to nearest significant decimal digit that could be preserved\n\t\t\t\t\t\t\t\t((xShifted = value * mult10[((target[position] & 0x7f) << 1) | (target[position + 1] >> 7)]) >> 0) === xShifted) {\n\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\tposition-- // move back into position for writing a double\n\t\t\t\t\t}\n\t\t\t\t\ttarget[position++] = 0xfb\n\t\t\t\t\ttargetView.setFloat64(position, value)\n\t\t\t\t\tposition += 8\n\t\t\t\t}\n\t\t\t} else if (type === 'object') {\n\t\t\t\tif (!value)\n\t\t\t\t\ttarget[position++] = 0xf6\n\t\t\t\telse {\n\t\t\t\t\tif (referenceMap) {\n\t\t\t\t\t\tlet referee = referenceMap.get(value)\n\t\t\t\t\t\tif (referee) {\n\t\t\t\t\t\t\ttarget[position++] = 0xd8\n\t\t\t\t\t\t\ttarget[position++] = 29 // http://cbor.schmorp.de/value-sharing\n\t\t\t\t\t\t\ttarget[position++] = 0x19 // 16-bit uint\n\t\t\t\t\t\t\tif (!referee.references) {\n\t\t\t\t\t\t\t\tlet idsToInsert = referenceMap.idsToInsert || (referenceMap.idsToInsert = [])\n\t\t\t\t\t\t\t\treferee.references = []\n\t\t\t\t\t\t\t\tidsToInsert.push(referee)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treferee.references.push(position - start)\n\t\t\t\t\t\t\tposition += 2 // TODO: also support 32-bit\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t} else \n\t\t\t\t\t\t\treferenceMap.set(value, { offset: position - start })\n\t\t\t\t\t}\n\t\t\t\t\tlet constructor = value.constructor\n\t\t\t\t\tif (constructor === Object) {\n\t\t\t\t\t\twriteObject(value)\n\t\t\t\t\t} else if (constructor === Array) {\n\t\t\t\t\t\tlength = value.length\n\t\t\t\t\t\tif (length < 0x18) {\n\t\t\t\t\t\t\ttarget[position++] = 0x80 | length\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\twriteArrayHeader(length)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\t\t\tencode(value[i])\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (constructor === Map) {\n\t\t\t\t\t\tif (this.mapsAsObjects ? this.useTag259ForMaps !== false : this.useTag259ForMaps) {\n\t\t\t\t\t\t\t// use Tag 259 (https://github.com/shanewholloway/js-cbor-codec/blob/master/docs/CBOR-259-spec--explicit-maps.md) for maps if the user wants it that way\n\t\t\t\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\t\t\t\ttarget[position++] = 1\n\t\t\t\t\t\t\ttarget[position++] = 3\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlength = value.size\n\t\t\t\t\t\tif (length < 0x18) {\n\t\t\t\t\t\t\ttarget[position++] = 0xa0 | length\n\t\t\t\t\t\t} else if (length < 0x100) {\n\t\t\t\t\t\t\ttarget[position++] = 0xb8\n\t\t\t\t\t\t\ttarget[position++] = length\n\t\t\t\t\t\t} else if (length < 0x10000) {\n\t\t\t\t\t\t\ttarget[position++] = 0xb9\n\t\t\t\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget[position++] = 0xba\n\t\t\t\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (encoder.keyMap) { \n\t\t\t\t\t\t\tfor (let [ key, entryValue ] of value) {\n\t\t\t\t\t\t\t\tencode(encoder.encodeKey(key))\n\t\t\t\t\t\t\t\tencode(entryValue)\n\t\t\t\t\t\t\t} \n\t\t\t\t\t\t} else { \n\t\t\t\t\t\t\tfor (let [ key, entryValue ] of value) {\n\t\t\t\t\t\t\t\tencode(key) \n\t\t\t\t\t\t\t\tencode(entryValue)\n\t\t\t\t\t\t\t} \t\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (let i = 0, l = extensions.length; i < l; i++) {\n\t\t\t\t\t\t\tlet extensionClass = extensionClasses[i]\n\t\t\t\t\t\t\tif (value instanceof extensionClass) {\n\t\t\t\t\t\t\t\tlet extension = extensions[i]\n\t\t\t\t\t\t\t\tlet tag = extension.tag\n\t\t\t\t\t\t\t\tif (tag == undefined)\n\t\t\t\t\t\t\t\t\ttag = extension.getTag && extension.getTag.call(this, value)\n\t\t\t\t\t\t\t\tif (tag < 0x18) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xc0 | tag\n\t\t\t\t\t\t\t\t} else if (tag < 0x100) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xd8\n\t\t\t\t\t\t\t\t\ttarget[position++] = tag\n\t\t\t\t\t\t\t\t} else if (tag < 0x10000) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\t\t\t\t\t\ttarget[position++] = tag >> 8\n\t\t\t\t\t\t\t\t\ttarget[position++] = tag & 0xff\n\t\t\t\t\t\t\t\t} else if (tag > -1) {\n\t\t\t\t\t\t\t\t\ttarget[position++] = 0xda\n\t\t\t\t\t\t\t\t\ttargetView.setUint32(position, tag)\n\t\t\t\t\t\t\t\t\tposition += 4\n\t\t\t\t\t\t\t\t} // else undefined, don't write tag\n\t\t\t\t\t\t\t\textension.encode.call(this, value, encode, makeRoom)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value[Symbol.iterator]) {\n\t\t\t\t\t\t\tif (throwOnIterable) {\n\t\t\t\t\t\t\t\tlet error = new Error('Iterable should be serialized as iterator')\n\t\t\t\t\t\t\t\terror.iteratorNotHandled = true;\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttarget[position++] = 0x9f // indefinite length array\n\t\t\t\t\t\t\tfor (let entry of value) {\n\t\t\t\t\t\t\t\tencode(entry)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttarget[position++] = 0xff // stop-code\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value[Symbol.asyncIterator] || isBlob(value)) {\n\t\t\t\t\t\t\tlet error = new Error('Iterable/blob should be serialized as iterator')\n\t\t\t\t\t\t\terror.iteratorNotHandled = true;\n\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.useToJSON && value.toJSON) {\n\t\t\t\t\t\t\tconst json = value.toJSON()\n\t\t\t\t\t\t\t// if for some reason value.toJSON returns itself it'll loop forever\n\t\t\t\t\t\t\tif (json !== value)\n\t\t\t\t\t\t\t\treturn encode(json)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// no extension found, write as a plain object\n\t\t\t\t\t\twriteObject(value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (type === 'boolean') {\n\t\t\t\ttarget[position++] = value ? 0xf5 : 0xf4\n\t\t\t} else if (type === 'bigint') {\n\t\t\t\tif (value < (BigInt(1)<<BigInt(64)) && value >= 0) {\n\t\t\t\t\t// use an unsigned int as long as it fits\n\t\t\t\t\ttarget[position++] = 0x1b\n\t\t\t\t\ttargetView.setBigUint64(position, value)\n\t\t\t\t} else if (value > -(BigInt(1)<<BigInt(64)) && value < 0) {\n\t\t\t\t\t// if we can fit an unsigned int, use that\n\t\t\t\t\ttarget[position++] = 0x3b\n\t\t\t\t\ttargetView.setBigUint64(position, -value - BigInt(1))\n\t\t\t\t} else {\n\t\t\t\t\t// overflow\n\t\t\t\t\tif (this.largeBigIntToFloat) {\n\t\t\t\t\t\ttarget[position++] = 0xfb\n\t\t\t\t\t\ttargetView.setFloat64(position, Number(value))\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (value >= BigInt(0))\n\t\t\t\t\t\t\ttarget[position++] = 0xc2 // tag 2\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\ttarget[position++] = 0xc3 // tag 2\n\t\t\t\t\t\t\tvalue = BigInt(-1) - value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlet bytes = [];\n\t\t\t\t\t\twhile (value) {\n\t\t\t\t\t\t\tbytes.push(Number(value & BigInt(0xff)));\n\t\t\t\t\t\t\tvalue >>= BigInt(8);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twriteBuffer(new Uint8Array(bytes.reverse()), makeRoom);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tposition += 8\n\t\t\t} else if (type === 'undefined') {\n\t\t\t\ttarget[position++] = 0xf7\n\t\t\t} else {\n\t\t\t\tthrow new Error('Unknown type: ' + type)\n\t\t\t}\n\t\t}\n\n\t\tconst writeObject = this.useRecords === false ? this.variableMapSize ? (object) => {\n\t\t\t// this method is slightly slower, but generates \"preferred serialization\" (optimally small for smaller objects)\n\t\t\tlet keys = Object.keys(object)\n\t\t\tlet vals = Object.values(object)\n\t\t\tlet length = keys.length\n\t\t\tif (length < 0x18) {\n\t\t\t\ttarget[position++] = 0xa0 | length\n\t\t\t} else if (length < 0x100) {\n\t\t\t\ttarget[position++] = 0xb8\n\t\t\t\ttarget[position++] = length\n\t\t\t} else if (length < 0x10000) {\n\t\t\t\ttarget[position++] = 0xb9\n\t\t\t\ttarget[position++] = length >> 8\n\t\t\t\ttarget[position++] = length & 0xff\n\t\t\t} else {\n\t\t\t\ttarget[position++] = 0xba\n\t\t\t\ttargetView.setUint32(position, length)\n\t\t\t\tposition += 4\n\t\t\t}\n\t\t\tlet key\n\t\t\tif (encoder.keyMap) { \n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tencode(encoder.encodeKey(keys[i]))\n\t\t\t\t\tencode(vals[i])\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tencode(keys[i])\n\t\t\t\t\tencode(vals[i])\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\t\t(object) => {\n\t\t\ttarget[position++] = 0xb9 // always use map 16, so we can preallocate and set the length afterwards\n\t\t\tlet objectOffset = position - start\n\t\t\tposition += 2\n\t\t\tlet size = 0\n\t\t\tif (encoder.keyMap) {\n\t\t\t\tfor (let key in object) if (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\tencode(encoder.encodeKey(key))\n\t\t\t\t\tencode(object[key])\n\t\t\t\t\tsize++\n\t\t\t\t}\n\t\t\t} else { \n\t\t\t\tfor (let key in object) if (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\t\tencode(key)\n\t\t\t\t\t\tencode(object[key])\n\t\t\t\t\tsize++\n\t\t\t\t}\n\t\t\t}\n\t\t\ttarget[objectOffset++ + start] = size >> 8\n\t\t\ttarget[objectOffset + start] = size & 0xff\n\t\t} :\n\t\t(object, skipValues) => {\n\t\t\tlet nextTransition, transition = structures.transitions || (structures.transitions = Object.create(null))\n\t\t\tlet newTransitions = 0\n\t\t\tlet length = 0\n\t\t\tlet parentRecordId\n\t\t\tlet keys\n\t\t\tif (this.keyMap) {\n\t\t\t\tkeys = Object.keys(object).map(k => this.encodeKey(k))\n\t\t\t\tlength = keys.length\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tlet key = keys[i]\n\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\tnewTransitions++\n\t\t\t\t\t}\n\t\t\t\t\ttransition = nextTransition\n\t\t\t\t}\t\t\t\t\n\t\t\t} else {\n\t\t\t\tfor (let key in object) if (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key)) {\n\t\t\t\t\tnextTransition = transition[key]\n\t\t\t\t\tif (!nextTransition) {\n\t\t\t\t\t\tif (transition[RECORD_SYMBOL] & 0x100000) {// this indicates it is a brancheable/extendable terminal node, so we will use this record id and extend it\n\t\t\t\t\t\t\tparentRecordId = transition[RECORD_SYMBOL] & 0xffff\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnextTransition = transition[key] = Object.create(null)\n\t\t\t\t\t\tnewTransitions++\n\t\t\t\t\t}\n\t\t\t\t\ttransition = nextTransition\n\t\t\t\t\tlength++\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet recordId = transition[RECORD_SYMBOL]\n\t\t\tif (recordId !== undefined) {\n\t\t\t\trecordId &= 0xffff\n\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\ttarget[position++] = (recordId >> 8) | 0xe0\n\t\t\t\ttarget[position++] = recordId & 0xff\n\t\t\t} else {\n\t\t\t\tif (!keys)\n\t\t\t\t\tkeys = transition.__keys__ || (transition.__keys__ = Object.keys(object))\n\t\t\t\tif (parentRecordId === undefined) {\n\t\t\t\t\trecordId = structures.nextId++\n\t\t\t\t\tif (!recordId) {\n\t\t\t\t\t\trecordId = 0\n\t\t\t\t\t\tstructures.nextId = 1\n\t\t\t\t\t}\n\t\t\t\t\tif (recordId >= MAX_STRUCTURES) {// cycle back around\n\t\t\t\t\t\tstructures.nextId = (recordId = maxSharedStructures) + 1\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trecordId = parentRecordId\n\t\t\t\t}\n\t\t\t\tstructures[recordId] = keys\n\t\t\t\tif (recordId < maxSharedStructures) {\n\t\t\t\t\ttarget[position++] = 0xd9\n\t\t\t\t\ttarget[position++] = (recordId >> 8) | 0xe0\n\t\t\t\t\ttarget[position++] = recordId & 0xff\n\t\t\t\t\ttransition = structures.transitions\n\t\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\t\tif (transition[RECORD_SYMBOL] === undefined || (transition[RECORD_SYMBOL] & 0x100000))\n\t\t\t\t\t\t\ttransition[RECORD_SYMBOL] = recordId\n\t\t\t\t\t\ttransition = transition[keys[i]]\n\t\t\t\t\t}\n\t\t\t\t\ttransition[RECORD_SYMBOL] = recordId | 0x100000 // indicates it is a extendable terminal\n\t\t\t\t\thasSharedUpdate = true\n\t\t\t\t} else {\n\t\t\t\t\ttransition[RECORD_SYMBOL] = recordId\n\t\t\t\t\ttargetView.setUint32(position, 0xd9dfff00) // tag two byte, then record definition id\n\t\t\t\t\tposition += 3\n\t\t\t\t\tif (newTransitions)\n\t\t\t\t\t\ttransitionsCount += serializationsSinceTransitionRebuild * newTransitions\n\t\t\t\t\t// record the removal of the id, we can maintain our shared structure\n\t\t\t\t\tif (recordIdsToRemove.length >= MAX_STRUCTURES - maxSharedStructures)\n\t\t\t\t\t\trecordIdsToRemove.shift()[RECORD_SYMBOL] = undefined // we are cycling back through, and have to remove old ones\n\t\t\t\t\trecordIdsToRemove.push(transition)\n\t\t\t\t\twriteArrayHeader(length + 2)\n\t\t\t\t\tencode(0xe000 + recordId)\n\t\t\t\t\tencode(keys)\n\t\t\t\t\tif (skipValues) return; // special exit for iterator\n\t\t\t\t\tfor (let key in object)\n\t\t\t\t\t\tif (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key))\n\t\t\t\t\t\t\tencode(object[key])\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (length < 0x18) { // write the array header\n\t\t\t\ttarget[position++] = 0x80 | length\n\t\t\t} else {\n\t\t\t\twriteArrayHeader(length)\n\t\t\t}\n\t\t\tif (skipValues) return; // special exit for iterator\n\t\t\tfor (let key in object)\n\t\t\t\tif (typeof object.hasOwnProperty !== 'function' || object.hasOwnProperty(key))\n\t\t\t\t\tencode(object[key])\n\t\t}\n\t\tconst makeRoom = (end) => {\n\t\t\tlet newSize\n\t\t\tif (end > 0x1000000) {\n\t\t\t\t// special handling for really large buffers\n\t\t\t\tif ((end - start) > MAX_BUFFER_SIZE)\n\t\t\t\t\tthrow new Error('Encoded buffer would be larger than maximum buffer size')\n\t\t\t\tnewSize = Math.min(MAX_BUFFER_SIZE,\n\t\t\t\t\tMath.round(Math.max((end - start) * (end > 0x4000000 ? 1.25 : 2), 0x400000) / 0x1000) * 0x1000)\n\t\t\t} else // faster handling for smaller buffers\n\t\t\t\tnewSize = ((Math.max((end - start) << 2, target.length - 1) >> 12) + 1) << 12\n\t\t\tlet newBuffer = new ByteArrayAllocate(newSize)\n\t\t\ttargetView = new DataView(newBuffer.buffer, 0, newSize)\n\t\t\tif (target.copy)\n\t\t\t\ttarget.copy(newBuffer, 0, start, end)\n\t\t\telse\n\t\t\t\tnewBuffer.set(target.slice(start, end))\n\t\t\tposition -= start\n\t\t\tstart = 0\n\t\t\tsafeEnd = newBuffer.length - 10\n\t\t\treturn target = newBuffer\n\t\t}\n\t\tlet chunkThreshold = 100;\n\t\tlet continuedChunkThreshold = 1000;\n\t\tthis.encodeAsIterable = function(value, options) {\n\t\t\treturn startEncoding(value, options, encodeObjectAsIterable);\n\t\t}\n\t\tthis.encodeAsAsyncIterable = function(value, options) {\n\t\t\treturn startEncoding(value, options, encodeObjectAsAsyncIterable);\n\t\t}\n\n\t\tfunction* encodeObjectAsIterable(object, iterateProperties, finalIterable) {\n\t\t\tlet constructor = object.constructor;\n\t\t\tif (constructor === Object) {\n\t\t\t\tlet useRecords = encoder.useRecords !== false;\n\t\t\t\tif (useRecords)\n\t\t\t\t\twriteObject(object, true); // write the record identifier\n\t\t\t\telse\n\t\t\t\t\twriteEntityLength(Object.keys(object).length, 0xa0);\n\t\t\t\tfor (let key in object) {\n\t\t\t\t\tlet value = object[key];\n\t\t\t\t\tif (!useRecords) encode(key);\n\t\t\t\t\tif (value && typeof value === 'object') {\n\t\t\t\t\t\tif (iterateProperties[key])\n\t\t\t\t\t\t\tyield* encodeObjectAsIterable(value, iterateProperties[key]);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tyield* tryEncode(value, iterateProperties, key);\n\t\t\t\t\t} else encode(value);\n\t\t\t\t}\n\t\t\t} else if (constructor === Array) {\n\t\t\t\tlet length = object.length;\n\t\t\t\twriteArrayHeader(length);\n\t\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\t\tlet value = object[i];\n\t\t\t\t\tif (value && (typeof value === 'object' || position - start > chunkThreshold)) {\n\t\t\t\t\t\tif (iterateProperties.element)\n\t\t\t\t\t\t\tyield* encodeObjectAsIterable(value, iterateProperties.element);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tyield* tryEncode(value, iterateProperties, 'element');\n\t\t\t\t\t} else encode(value);\n\t\t\t\t}\n\t\t\t} else if (object[Symbol.iterator] && !object.buffer) { // iterator, but exclude typed arrays\n\t\t\t\ttarget[position++] = 0x9f; // start indefinite array\n\t\t\t\tfor (let value of object) {\n\t\t\t\t\tif (value && (typeof value === 'object' || position - start > chunkThreshold)) {\n\t\t\t\t\t\tif (iterateProperties.element)\n\t\t\t\t\t\t\tyield* encodeObjectAsIterable(value, iterateProperties.element);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tyield* tryEncode(value, iterateProperties, 'element');\n\t\t\t\t\t} else encode(value);\n\t\t\t\t}\n\t\t\t\ttarget[position++] = 0xff; // stop byte\n\t\t\t} else if (isBlob(object)){\n\t\t\t\twriteEntityLength(object.size, 0x40); // encode as binary data\n\t\t\t\tyield target.subarray(start, position);\n\t\t\t\tyield object; // directly return blobs, they have to be encoded asynchronously\n\t\t\t\trestartEncoding();\n\t\t\t} else if (object[Symbol.asyncIterator]) {\n\t\t\t\ttarget[position++] = 0x9f; // start indefinite array\n\t\t\t\tyield target.subarray(start, position);\n\t\t\t\tyield object; // directly return async iterators, they have to be encoded asynchronously\n\t\t\t\trestartEncoding();\n\t\t\t\ttarget[position++] = 0xff; // stop byte\n\t\t\t} else {\n\t\t\t\tencode(object);\n\t\t\t}\n\t\t\tif (finalIterable && position > start) yield target.subarray(start, position);\n\t\t\telse if (position - start > chunkThreshold) {\n\t\t\t\tyield target.subarray(start, position);\n\t\t\t\trestartEncoding();\n\t\t\t}\n\t\t}\n\t\tfunction* tryEncode(value, iterateProperties, key) {\n\t\t\tlet restart = position - start;\n\t\t\ttry {\n\t\t\t\tencode(value);\n\t\t\t\tif (position - start > chunkThreshold) {\n\t\t\t\t\tyield target.subarray(start, position);\n\t\t\t\t\trestartEncoding();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (error.iteratorNotHandled) {\n\t\t\t\t\titerateProperties[key] = {};\n\t\t\t\t\tposition = start + restart; // restart our position so we don't have partial data from last encode\n\t\t\t\t\tyield* encodeObjectAsIterable.call(this, value, iterateProperties[key]);\n\t\t\t\t} else throw error;\n\t\t\t}\n\t\t}\n\t\tfunction restartEncoding() {\n\t\t\tchunkThreshold = continuedChunkThreshold;\n\t\t\tencoder.encode(null, THROW_ON_ITERABLE); // restart encoding\n\t\t}\n\t\tfunction startEncoding(value, options, encodeIterable) {\n\t\t\tif (options && options.chunkThreshold) // explicitly specified chunk sizes\n\t\t\t\tchunkThreshold = continuedChunkThreshold = options.chunkThreshold;\n\t\t\telse // we start with a smaller threshold to get initial bytes sent quickly\n\t\t\t\tchunkThreshold = 100;\n\t\t\tif (value && typeof value === 'object') {\n\t\t\t\tencoder.encode(null, THROW_ON_ITERABLE); // start encoding\n\t\t\t\treturn encodeIterable(value, encoder.iterateProperties || (encoder.iterateProperties = {}), true);\n\t\t\t}\n\t\t\treturn [encoder.encode(value)];\n\t\t}\n\n\t\tasync function* encodeObjectAsAsyncIterable(value, iterateProperties) {\n\t\t\tfor (let encodedValue of encodeObjectAsIterable(value, iterateProperties, true)) {\n\t\t\t\tlet constructor = encodedValue.constructor;\n\t\t\t\tif (constructor === ByteArray || constructor === Uint8Array)\n\t\t\t\t\tyield encodedValue;\n\t\t\t\telse if (isBlob(encodedValue)) {\n\t\t\t\t\tlet reader = encodedValue.stream().getReader();\n\t\t\t\t\tlet next;\n\t\t\t\t\twhile (!(next = await reader.read()).done) {\n\t\t\t\t\t\tyield next.value;\n\t\t\t\t\t}\n\t\t\t\t} else if (encodedValue[Symbol.asyncIterator]) {\n\t\t\t\t\tfor await (let asyncValue of encodedValue) {\n\t\t\t\t\t\trestartEncoding();\n\t\t\t\t\t\tif (asyncValue)\n\t\t\t\t\t\t\tyield* encodeObjectAsAsyncIterable(asyncValue, iterateProperties.async || (iterateProperties.async = {}));\n\t\t\t\t\t\telse yield encoder.encode(asyncValue);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tyield encodedValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tuseBuffer(buffer) {\n\t\t// this means we are finished using our own buffer and we can write over it safely\n\t\ttarget = buffer\n\t\ttargetView = new DataView(target.buffer, target.byteOffset, target.byteLength)\n\t\tposition = 0\n\t}\n\tclearSharedData() {\n\t\tif (this.structures)\n\t\t\tthis.structures = []\n\t\tif (this.sharedValues)\n\t\t\tthis.sharedValues = undefined\n\t}\n\tupdateSharedData() {\n\t\tlet lastVersion = this.sharedVersion || 0\n\t\tthis.sharedVersion = lastVersion + 1\n\t\tlet structuresCopy = this.structures.slice(0)\n\t\tlet sharedData = new SharedData(structuresCopy, this.sharedValues, this.sharedVersion)\n\t\tlet saveResults = this.saveShared(sharedData,\n\t\t\t\texistingShared => (existingShared && existingShared.version || 0) == lastVersion)\n\t\tif (saveResults === false) {\n\t\t\t// get updated structures and try again if the update failed\n\t\t\tsharedData = this.getShared() || {}\n\t\t\tthis.structures = sharedData.structures || []\n\t\t\tthis.sharedValues = sharedData.packedValues\n\t\t\tthis.sharedVersion = sharedData.version\n\t\t\tthis.structures.nextId = this.structures.length\n\t\t} else {\n\t\t\t// restore structures\n\t\t\tstructuresCopy.forEach((structure, i) => this.structures[i] = structure)\n\t\t}\n\t\t// saveShared may fail to write and reload, or may have reloaded to check compatibility and overwrite saved data, either way load the correct shared data\n\t\treturn saveResults\n\t}\n}\nfunction writeEntityLength(length, majorValue) {\n\tif (length < 0x18)\n\t\ttarget[position++] = majorValue | length\n\telse if (length < 0x100) {\n\t\ttarget[position++] = majorValue | 0x18\n\t\ttarget[position++] = length\n\t} else if (length < 0x10000) {\n\t\ttarget[position++] = majorValue | 0x19\n\t\ttarget[position++] = length >> 8\n\t\ttarget[position++] = length & 0xff\n\t} else {\n\t\ttarget[position++] = majorValue | 0x1a\n\t\ttargetView.setUint32(position, length)\n\t\tposition += 4\n\t}\n\n}\nclass SharedData {\n\tconstructor(structures, values, version) {\n\t\tthis.structures = structures\n\t\tthis.packedValues = values\n\t\tthis.version = version\n\t}\n}\n\nfunction writeArrayHeader(length) {\n\tif (length < 0x18)\n\t\ttarget[position++] = 0x80 | length\n\telse if (length < 0x100) {\n\t\ttarget[position++] = 0x98\n\t\ttarget[position++] = length\n\t} else if (length < 0x10000) {\n\t\ttarget[position++] = 0x99\n\t\ttarget[position++] = length >> 8\n\t\ttarget[position++] = length & 0xff\n\t} else {\n\t\ttarget[position++] = 0x9a\n\t\ttargetView.setUint32(position, length)\n\t\tposition += 4\n\t}\n}\n\nconst BlobConstructor = typeof Blob === 'undefined' ? function(){} : Blob;\nfunction isBlob(object) {\n\tif (object instanceof BlobConstructor)\n\t\treturn true;\n\tlet tag = object[Symbol.toStringTag];\n\treturn tag === 'Blob' || tag === 'File';\n}\nfunction findRepetitiveStrings(value, packedValues) {\n\tswitch(typeof value) {\n\t\tcase 'string':\n\t\t\tif (value.length > 3) {\n\t\t\t\tif (packedValues.objectMap[value] > -1 || packedValues.values.length >= packedValues.maxValues)\n\t\t\t\t\treturn\n\t\t\t\tlet packedStatus = packedValues.get(value)\n\t\t\t\tif (packedStatus) {\n\t\t\t\t\tif (++packedStatus.count == 2) {\n\t\t\t\t\t\tpackedValues.values.push(value)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpackedValues.set(value, {\n\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t})\n\t\t\t\t\tif (packedValues.samplingPackedValues) {\n\t\t\t\t\t\tlet status = packedValues.samplingPackedValues.get(value)\n\t\t\t\t\t\tif (status)\n\t\t\t\t\t\t\tstatus.count++\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpackedValues.samplingPackedValues.set(value, {\n\t\t\t\t\t\t\t\tcount: 1,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'object':\n\t\t\tif (value) {\n\t\t\t\tif (value instanceof Array) {\n\t\t\t\t\tfor (let i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\t\tfindRepetitiveStrings(value[i], packedValues)\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tlet includeKeys = !packedValues.encoder.useRecords\n\t\t\t\t\tfor (var key in value) {\n\t\t\t\t\t\tif (value.hasOwnProperty(key)) {\n\t\t\t\t\t\t\tif (includeKeys)\n\t\t\t\t\t\t\t\tfindRepetitiveStrings(key, packedValues)\n\t\t\t\t\t\t\tfindRepetitiveStrings(value[key], packedValues)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'function': console.log(value)\n\t}\n}\nconst isLittleEndianMachine = new Uint8Array(new Uint16Array([1]).buffer)[0] == 1\nextensionClasses = [ Date, Set, Error, RegExp, Tag, ArrayBuffer,\n\tUint8Array, Uint8ClampedArray, Uint16Array, Uint32Array,\n\ttypeof BigUint64Array == 'undefined' ? function() {} : BigUint64Array, Int8Array, Int16Array, Int32Array,\n\ttypeof BigInt64Array == 'undefined' ? function() {} : BigInt64Array,\n\tFloat32Array, Float64Array, SharedData ]\n\n//Object.getPrototypeOf(Uint8Array.prototype).constructor /*TypedArray*/\nextensions = [{ // Date\n\ttag: 1,\n\tencode(date, encode) {\n\t\tlet seconds = date.getTime() / 1000\n\t\tif ((this.useTimestamp32 || date.getMilliseconds() === 0) && seconds >= 0 && seconds < 0x100000000) {\n\t\t\t// Timestamp 32\n\t\t\ttarget[position++] = 0x1a\n\t\t\ttargetView.setUint32(position, seconds)\n\t\t\tposition += 4\n\t\t} else {\n\t\t\t// Timestamp float64\n\t\t\ttarget[position++] = 0xfb\n\t\t\ttargetView.setFloat64(position, seconds)\n\t\t\tposition += 8\n\t\t}\n\t}\n}, { // Set\n\ttag: 258, // https://github.com/input-output-hk/cbor-sets-spec/blob/master/CBOR_SETS.md\n\tencode(set, encode) {\n\t\tlet array = Array.from(set)\n\t\tencode(array)\n\t}\n}, { // Error\n\ttag: 27, // http://cbor.schmorp.de/generic-object\n\tencode(error, encode) {\n\t\tencode([ error.name, error.message ])\n\t}\n}, { // RegExp\n\ttag: 27, // http://cbor.schmorp.de/generic-object\n\tencode(regex, encode) {\n\t\tencode([ 'RegExp', regex.source, regex.flags ])\n\t}\n}, { // Tag\n\tgetTag(tag) {\n\t\treturn tag.tag\n\t},\n\tencode(tag, encode) {\n\t\tencode(tag.value)\n\t}\n}, { // ArrayBuffer\n\tencode(arrayBuffer, encode, makeRoom) {\n\t\twriteBuffer(arrayBuffer, makeRoom)\n\t}\n}, { // Uint8Array\n\tgetTag(typedArray) {\n\t\tif (typedArray.constructor === Uint8Array) {\n\t\t\tif (this.tagUint8Array || hasNodeBuffer && this.tagUint8Array !== false)\n\t\t\t\treturn 64;\n\t\t} // else no tag\n\t},\n\tencode(typedArray, encode, makeRoom) {\n\t\twriteBuffer(typedArray, makeRoom)\n\t}\n},\n\ttypedArrayEncoder(68, 1),\n\ttypedArrayEncoder(69, 2),\n\ttypedArrayEncoder(70, 4),\n\ttypedArrayEncoder(71, 8),\n\ttypedArrayEncoder(72, 1),\n\ttypedArrayEncoder(77, 2),\n\ttypedArrayEncoder(78, 4),\n\ttypedArrayEncoder(79, 8),\n\ttypedArrayEncoder(85, 4),\n\ttypedArrayEncoder(86, 8),\n{\n\tencode(sharedData, encode) { // write SharedData\n\t\tlet packedValues = sharedData.packedValues || []\n\t\tlet sharedStructures = sharedData.structures || []\n\t\tif (packedValues.values.length > 0) {\n\t\t\ttarget[position++] = 0xd8 // one-byte tag\n\t\t\ttarget[position++] = 51 // tag 51 for packed shared structures https://www.potaroo.net/ietf/ids/draft-ietf-cbor-packed-03.txt\n\t\t\twriteArrayHeader(4)\n\t\t\tlet valuesArray = packedValues.values\n\t\t\tencode(valuesArray)\n\t\t\twriteArrayHeader(0) // prefixes\n\t\t\twriteArrayHeader(0) // suffixes\n\t\t\tpackedObjectMap = Object.create(sharedPackedObjectMap || null)\n\t\t\tfor (let i = 0, l = valuesArray.length; i < l; i++) {\n\t\t\t\tpackedObjectMap[valuesArray[i]] = i\n\t\t\t}\n\t\t}\n\t\tif (sharedStructures) {\n\t\t\ttargetView.setUint32(position, 0xd9dffe00)\n\t\t\tposition += 3\n\t\t\tlet definitions = sharedStructures.slice(0)\n\t\t\tdefinitions.unshift(0xe000)\n\t\t\tdefinitions.push(new Tag(sharedData.version, 0x53687264))\n\t\t\tencode(definitions)\n\t\t} else\n\t\t\tencode(new Tag(sharedData.version, 0x53687264))\n\t\t}\n\t}]\nfunction typedArrayEncoder(tag, size) {\n\tif (!isLittleEndianMachine && size > 1)\n\t\ttag -= 4 // the big endian equivalents are 4 less\n\treturn {\n\t\ttag: tag,\n\t\tencode: function writeExtBuffer(typedArray, encode) {\n\t\t\tlet length = typedArray.byteLength\n\t\t\tlet offset = typedArray.byteOffset || 0\n\t\t\tlet buffer = typedArray.buffer || typedArray\n\t\t\tencode(hasNodeBuffer ? Buffer.from(buffer, offset, length) :\n\t\t\t\tnew Uint8Array(buffer, offset, length))\n\t\t}\n\t}\n}\nfunction writeBuffer(buffer, makeRoom) {\n\tlet length = buffer.byteLength\n\tif (length < 0x18) {\n\t\ttarget[position++] = 0x40 + length\n\t} else if (length < 0x100) {\n\t\ttarget[position++] = 0x58\n\t\ttarget[position++] = length\n\t} else if (length < 0x10000) {\n\t\ttarget[position++] = 0x59\n\t\ttarget[position++] = length >> 8\n\t\ttarget[position++] = length & 0xff\n\t} else {\n\t\ttarget[position++] = 0x5a\n\t\ttargetView.setUint32(position, length)\n\t\tposition += 4\n\t}\n\tif (position + length >= target.length) {\n\t\tmakeRoom(position + length)\n\t}\n\t// if it is already a typed array (has an ArrayBuffer), use that, but if it is an ArrayBuffer itself,\n\t// must wrap it to set it.\n\ttarget.set(buffer.buffer ? buffer : new Uint8Array(buffer), position)\n\tposition += length\n}\n\nfunction insertIds(serialized, idsToInsert) {\n\t// insert the ids that need to be referenced for structured clones\n\tlet nextId\n\tlet distanceToMove = idsToInsert.length * 2\n\tlet lastEnd = serialized.length - distanceToMove\n\tidsToInsert.sort((a, b) => a.offset > b.offset ? 1 : -1)\n\tfor (let id = 0; id < idsToInsert.length; id++) {\n\t\tlet referee = idsToInsert[id]\n\t\treferee.id = id\n\t\tfor (let position of referee.references) {\n\t\t\tserialized[position++] = id >> 8\n\t\t\tserialized[position] = id & 0xff\n\t\t}\n\t}\n\twhile (nextId = idsToInsert.pop()) {\n\t\tlet offset = nextId.offset\n\t\tserialized.copyWithin(offset + distanceToMove, offset, lastEnd)\n\t\tdistanceToMove -= 2\n\t\tlet position = offset + distanceToMove\n\t\tserialized[position++] = 0xd8\n\t\tserialized[position++] = 28 // http://cbor.schmorp.de/value-sharing\n\t\tlastEnd = offset\n\t}\n\treturn serialized\n}\nfunction writeBundles(start, encode) {\n\ttargetView.setUint32(bundledStrings.position + start, position - bundledStrings.position - start + 1) // the offset to bundle\n\tlet writeStrings = bundledStrings\n\tbundledStrings = null\n\tencode(writeStrings[0])\n\tencode(writeStrings[1])\n}\n\nexport function addExtension(extension) {\n\tif (extension.Class) {\n\t\tif (!extension.encode)\n\t\t\tthrow new Error('Extension has no encode function')\n\t\textensionClasses.unshift(extension.Class)\n\t\textensions.unshift(extension)\n\t}\n\tdecodeAddExtension(extension)\n}\nlet defaultEncoder = new Encoder({ useRecords: false })\nexport const encode = defaultEncoder.encode\nexport const encodeAsIterable = defaultEncoder.encodeAsIterable\nexport const encodeAsAsyncIterable = defaultEncoder.encodeAsAsyncIterable\nexport { FLOAT32_OPTIONS } from './decode.js'\nimport { FLOAT32_OPTIONS } from './decode.js'\nexport const { NEVER, ALWAYS, DECIMAL_ROUND, DECIMAL_FIT } = FLOAT32_OPTIONS\nexport const REUSE_BUFFER_MODE = 512\nexport const RESET_BUFFER_MODE = 1024\nexport const THROW_ON_ITERABLE = 2048\n\n\n","import * as Automerge from \"@automerge/automerge/slim\";\nimport { encodeHeads, decodeHeads } from \"../AutomergeUrl.js\";\nimport { KIND } from \"./types.js\";\nimport { isSegment, isPattern } from \"./guards.js\";\nimport { matchesPattern } from \"./utils.js\";\nimport { isCursorMarker } from \"./guards.js\";\nimport { stringifyRefUrl } from \"./parser.js\";\nimport { MutableText } from \"./mutable-text.js\";\n/**\n * FinalizationRegistry for automatic cleanup of Ref instances.\n * This ensures subscriptions are cleaned up when Refs are garbage collected,\n * even if dispose() is never called.\n */\nconst refCleanupRegistry = new FinalizationRegistry(cleanup => cleanup());\n/**\n * Internal implementation of the Ref interface.\n *\n * Refs are stable by default - they track objects by ID, not position.\n *\n * Cleanup: Refs automatically clean up their subscriptions when garbage collected.\n *\n * @internal Use DocHandle.ref() to create refs, not this class directly.\n */\nexport class RefImpl {\n docHandle;\n path;\n range;\n #onChangeCallbacks = new Set();\n #updateHandler;\n constructor(docHandle, segments) {\n this.docHandle = docHandle;\n const doc = docHandle.doc();\n const { path, range } = this.#normalizePath(doc, segments);\n this.path = path;\n this.range = range;\n this.#updateHandler = () => {\n const currentDoc = this.docHandle.doc();\n this.#updateProps(currentDoc);\n };\n this.docHandle.on(\"change\", this.#updateHandler);\n // Register for automatic cleanup when this Ref is garbage collected\n refCleanupRegistry.register(this, () => this.#cleanup(), this);\n }\n #cleanup() {\n this.docHandle.off(\"change\", this.#updateHandler);\n for (const callback of this.#onChangeCallbacks) {\n this.docHandle.off(\"change\", callback);\n }\n this.#onChangeCallbacks.clear();\n }\n get rangePositions() {\n if (!this.range)\n return undefined;\n const propPath = this.#getPropPath();\n if (!propPath)\n return undefined;\n const doc = this.doc();\n return this.#getRangePositions(doc, propPath, this.range);\n }\n viewAt(heads) {\n const viewHandle = this.docHandle.view(encodeHeads(heads));\n return viewHandle.ref(...this.path);\n }\n value() {\n const doc = this.doc();\n const propPath = this.#getPropPath();\n if (!propPath)\n return undefined;\n const value = this.#getValueAt(doc, propPath);\n return (this.range ? this.#extractRange(doc, propPath, value, this.range) : value);\n }\n doc() {\n return this.docHandle.doc();\n }\n change(fnOrValue) {\n if (this.docHandle.isReadOnly()) {\n throw new Error(\"Cannot change a Ref on a read-only handle\");\n }\n // Convert direct value to function form\n const fn = typeof fnOrValue === \"function\"\n ? fnOrValue\n : () => fnOrValue;\n this.docHandle.change((doc) => {\n if (this.path.length === 0 && !this.range) {\n fn(doc);\n return;\n }\n const propPath = this.#getPropPath();\n if (!propPath)\n throw new Error(\"Cannot resolve path\");\n let current;\n if (this.range) {\n const parent = this.#getValueAt(doc, propPath);\n if (typeof parent !== \"string\") {\n throw new Error(\"Range refs can only be used on string values\");\n }\n current = this.#extractRange(doc, propPath, parent, this.range);\n }\n else {\n current = this.#getValueAt(doc, propPath);\n }\n // If current is a string, wrap it in MutableText\n const valueToPass = typeof current === \"string\"\n ? MutableText(doc, propPath, current)\n : current;\n const newValue = fn(valueToPass);\n if (newValue === undefined)\n return;\n // Warn if non-primitive value is returned (should mutate instead)\n if (!(newValue === null ||\n typeof newValue === \"string\" ||\n typeof newValue === \"number\" ||\n typeof newValue === \"boolean\" ||\n typeof newValue === \"bigint\")) {\n console.warn(\"Ref.change() returned a non-primitive value. For objects and arrays, \" +\n \"you should mutate them in place rather than returning a new instance. \" +\n \"Returning new instances loses granular change tracking.\");\n }\n if (this.range) {\n this.#spliceRange(doc, propPath, this.range, newValue);\n }\n else {\n this.#setValueAt(doc, propPath, newValue);\n }\n });\n }\n remove() {\n if (this.docHandle.isReadOnly()) {\n throw new Error(\"Cannot remove from a Ref on a read-only handle\");\n }\n if (this.path.length === 0 && !this.range) {\n throw new Error(\"Cannot remove the root document\");\n }\n this.docHandle.change((doc) => {\n const propPath = this.#getPropPath();\n if (!propPath || propPath.length === 0) {\n throw new Error(\"Cannot resolve path for removal\");\n }\n // Handle range refs - delete the text within the range\n if (this.range) {\n this.#spliceRange(doc, propPath, this.range, \"\");\n return;\n }\n const parentPath = propPath.slice(0, -1);\n const key = propPath[propPath.length - 1];\n const parent = parentPath.length === 0 ? doc : this.#getValueAt(doc, parentPath);\n if (parent == null) {\n throw new Error(\"Cannot remove: parent is null or undefined\");\n }\n if (Array.isArray(parent)) {\n if (typeof key !== \"number\") {\n throw new Error(\"Cannot remove from array: key is not a number\");\n }\n parent.splice(key, 1);\n }\n else {\n delete parent[key];\n }\n });\n }\n onChange(callback) {\n const wrappedCallback = (payload) => {\n if (this.#patchAffectsRef(payload.patches)) {\n const value = this.value();\n callback(value, payload);\n }\n };\n this.docHandle.on(\"change\", wrappedCallback);\n // Track this callback so it can be cleaned up in dispose()\n this.#onChangeCallbacks.add(wrappedCallback);\n const unsubscribe = () => {\n this.docHandle.off(\"change\", wrappedCallback);\n this.#onChangeCallbacks.delete(wrappedCallback);\n };\n return unsubscribe;\n }\n get url() {\n const allSegments = this.range\n ? [...this.path, this.range]\n : this.path;\n // Include heads in URL only for read-only (time-traveled) handles\n const heads = this.docHandle.isReadOnly()\n ? decodeHeads(this.docHandle.heads())\n : undefined;\n return stringifyRefUrl(this.docHandle.documentId, allSegments, heads);\n }\n equals(other) {\n return this.url === other.url;\n }\n contains(other) {\n // Must be same document\n if (this.docHandle.documentId !== other.docHandle.documentId) {\n return false;\n }\n // Must have same heads (compare handle URLs which include heads for read-only handles)\n if (this.docHandle.url !== other.docHandle.url) {\n return false;\n }\n // This path must be a prefix of other's path\n if (this.path.length >= other.path.length) {\n return false;\n }\n // Check if all segments match\n for (let i = 0; i < this.path.length; i++) {\n if (!this.#segmentsEqual(this.path[i], other.path[i])) {\n return false;\n }\n }\n return true;\n }\n isChildOf(parent) {\n // Must be same document\n if (this.docHandle.documentId !== parent.docHandle.documentId) {\n return false;\n }\n // Must have same heads (compare handle URLs which include heads for read-only handles)\n if (this.docHandle.url !== parent.docHandle.url) {\n return false;\n }\n // Check if paths match up to parent's length\n if (this.path.length < parent.path.length) {\n return false;\n }\n // All of parent's path segments must match\n for (let i = 0; i < parent.path.length; i++) {\n if (!this.#segmentsEqual(this.path[i], parent.path[i])) {\n return false;\n }\n }\n // Case 1: Same path length - only valid if this has a range and parent doesn't\n // (this is a range child of text)\n if (this.path.length === parent.path.length) {\n return this.range !== undefined && parent.range === undefined;\n }\n // Case 2: Path is exactly one segment longer (direct child)\n if (this.path.length === parent.path.length + 1) {\n return true;\n }\n // Case 3: Path is more than one segment longer (not a direct child)\n return false;\n }\n overlaps(other) {\n // Must be same document\n if (this.docHandle.documentId !== other.docHandle.documentId) {\n return false;\n }\n // Must have same heads (compare handle URLs which include heads for read-only handles)\n if (this.docHandle.url !== other.docHandle.url) {\n return false;\n }\n // Both must have ranges\n if (!this.range || !other.range) {\n return false;\n }\n // Paths must be identical (same parent location)\n if (this.path.length !== other.path.length) {\n return false;\n }\n for (let i = 0; i < this.path.length; i++) {\n if (!this.#segmentsEqual(this.path[i], other.path[i])) {\n return false;\n }\n }\n // Check if ranges overlap\n // Get the numeric positions for both ranges\n const doc = this.doc();\n const propPath = this.#getPropPath();\n if (!propPath)\n return false;\n const thisPositions = this.#getRangePositions(doc, propPath, this.range);\n const otherPositions = this.#getRangePositions(doc, propPath, other.range);\n if (!thisPositions || !otherPositions)\n return false;\n const [thisStart, thisEnd] = thisPositions;\n const [otherStart, otherEnd] = otherPositions;\n // Ranges overlap if: thisStart < otherEnd && otherStart < thisEnd\n return thisStart < otherEnd && otherStart < thisEnd;\n }\n isEquivalent(other) {\n // Fast path: identity check\n if (this === other) {\n return true;\n }\n // Different documents can't be equivalent\n if (this.docHandle.documentId !== other.docHandle.documentId) {\n return false;\n }\n // Check heads equivalence\n // undefined heads means \"current document state\"\n // If one has undefined and other has explicit heads, check if they match current\n if (!this.#headsEquivalent(other)) {\n return false;\n }\n // Different path lengths can't be equivalent\n if (this.path.length !== other.path.length) {\n return false;\n }\n // Check range presence mismatch\n if ((this.range === undefined) !== (other.range === undefined)) {\n return false;\n }\n // Fast path: if segments are structurally equal, they're equivalent\n let segmentsEqual = true;\n for (let i = 0; i < this.path.length; i++) {\n if (!this.#segmentsEqual(this.path[i], other.path[i])) {\n segmentsEqual = false;\n break;\n }\n }\n if (segmentsEqual) {\n // Same path structure, now check ranges\n if (!this.range && !other.range) {\n return true;\n }\n // Both have ranges (checked above), compare them\n return (this.range.start === other.range.start &&\n this.range.end === other.range.end);\n }\n // Segments differ structurally - check if they resolve to the same prop path\n // Note: we access other.path[i].prop directly (public) instead of calling\n // private methods on other, since other may be from a different bundle\n for (let i = 0; i < this.path.length; i++) {\n const thisProp = this.path[i].prop;\n const otherProp = other.path[i].prop;\n // If either can't be resolved, they're not equivalent\n if (thisProp === undefined || otherProp === undefined) {\n return false;\n }\n if (thisProp !== otherProp) {\n return false;\n }\n }\n // Prop paths match, now check ranges\n if (!this.range && !other.range) {\n return true;\n }\n // Both have ranges - compare cursor values\n return (this.range.start === other.range.start &&\n this.range.end === other.range.end);\n }\n valueOf() {\n return this.url;\n }\n toString() {\n return this.url;\n }\n /**\n * Check if this ref's heads are equivalent to another ref's heads.\n * A ref on a non-read-only handle represents \"current document state\",\n * so it's equivalent to a ref on a read-only handle with heads matching the current document.\n */\n #headsEquivalent(other) {\n // If both handles have the same URL (including heads for read-only handles), they're equivalent\n if (this.docHandle.url === other.docHandle.url) {\n return true;\n }\n // Get effective heads for each - use handle's heads (which is current for non-read-only)\n const thisHeadsStr = this.docHandle.heads().join(\",\");\n const otherHeadsStr = other.docHandle.heads().join(\",\");\n return thisHeadsStr === otherHeadsStr;\n }\n /**\n * Normalize path inputs and extract stable IDs where possible.\n */\n #normalizePath(doc, inputs) {\n const pathSegments = [];\n const propPath = [];\n let current = doc;\n let rangeSegment;\n for (let i = 0; i < inputs.length; i++) {\n const input = inputs[i];\n // Handle cursor() marker - creates cursor-based range\n if (isCursorMarker(input)) {\n // cursor() must be the last segment\n if (i < inputs.length - 1) {\n throw new Error(\"cursor() must be the last segment in a ref path. \" +\n \"Segments after cursor() are not allowed.\");\n }\n rangeSegment = this.#createCursorRange(doc, propPath, current, input);\n break;\n }\n const segment = isSegment(input)\n ? this.#ensureSegmentResolved(current, input)\n : this.#normalizeInput(current, input);\n if (segment[KIND] === \"cursors\") {\n // Cursor range from URL parsing - must also be last\n if (i < inputs.length - 1) {\n throw new Error(\"Cursor range must be the last segment in a ref path. \" +\n \"Segments after cursor range are not allowed.\");\n }\n rangeSegment = segment;\n break;\n }\n pathSegments.push(segment);\n if (segment.prop !== undefined &&\n current !== undefined &&\n current !== null) {\n propPath.push(segment.prop);\n current = current[segment.prop];\n }\n }\n return { path: pathSegments, range: rangeSegment };\n }\n /** Ensure a segment has its prop set */\n #ensureSegmentResolved(container, segment) {\n const prop = this.#resolveSegmentProp(container, segment);\n return { ...segment, prop };\n }\n /**\n * Resolve a path segment to its Automerge prop.\n * Returns undefined if the segment cannot be resolved.\n */\n #resolveSegmentProp(container, segment) {\n if (container === undefined || container === null)\n return undefined;\n switch (segment[KIND]) {\n case \"key\":\n return segment.key;\n case \"index\":\n return segment.index;\n case \"match\": {\n if (!Array.isArray(container))\n return undefined;\n const matchIndex = container.findIndex(item => matchesPattern(item, segment.match));\n return matchIndex !== -1 ? matchIndex : undefined;\n }\n case \"cursors\":\n return undefined;\n default:\n segment;\n return undefined;\n }\n }\n /** Update resolved props for all path segments based on current document state */\n #updateProps(doc) {\n let current = doc;\n for (const segment of this.path) {\n const prop = this.#resolveSegmentProp(current, segment);\n // Internal mutation: Update cached prop for efficient path resolution.\n // Safe because segments are owned by this Ref instance.\n segment.prop = prop;\n if (prop !== undefined && current !== undefined && current !== null) {\n current = current[prop];\n }\n else {\n break;\n }\n }\n }\n /**\n * Check if two PathSegments are equal.\n * Used by `contains` and `overlaps` methods.\n */\n #segmentsEqual(a, b) {\n if (a[KIND] !== b[KIND]) {\n return false;\n }\n switch (a[KIND]) {\n case \"key\":\n return a.key === b.key;\n case \"index\":\n return a.index === b.index;\n case \"match\": {\n const aKeys = Object.keys(a.match);\n const bKeys = Object.keys(b.match);\n if (aKeys.length !== bKeys.length)\n return false;\n return aKeys.every(key => a.match[key] === b.match[key]);\n }\n default:\n a;\n return false;\n }\n }\n #normalizeInput(container, input) {\n if (typeof input === \"string\") {\n return { [KIND]: \"key\", key: input, prop: input };\n }\n if (typeof input === \"number\") {\n return { [KIND]: \"index\", index: input, prop: input };\n }\n if (isPattern(input)) {\n if (!Array.isArray(container)) {\n return { [KIND]: \"match\", match: input, prop: undefined };\n }\n const index = container.findIndex(obj => matchesPattern(obj, input));\n return {\n [KIND]: \"match\",\n match: input,\n prop: index !== -1 ? index : undefined,\n };\n }\n throw new Error(`Unsupported path input type: ${typeof input}. ` +\n `Expected string, number, or plain object.`);\n }\n /** Create a cursor-based range from a CursorMarker */\n #createCursorRange(doc, propPath, container, marker) {\n const { start, end } = marker;\n if (typeof container !== \"string\") {\n throw new Error(`cursor() can only be used on string values, got ${typeof container}`);\n }\n const startCursor = Automerge.getCursor(doc, propPath, start);\n const endCursor = Automerge.getCursor(doc, propPath, end);\n if (!startCursor || !endCursor) {\n throw new Error(`Failed to create cursors at positions ${start}-${end}.`);\n }\n return { [KIND]: \"cursors\", start: startCursor, end: endCursor };\n }\n /** Extract cached navigation path from segments */\n #getPropPath() {\n const props = [];\n for (const segment of this.path) {\n if (segment.prop === undefined)\n return undefined;\n props.push(segment.prop);\n }\n return props;\n }\n /** Navigate to a value by following a prop path */\n #getValueAt(container, propPath) {\n let current = container;\n for (const prop of propPath) {\n if (current == null)\n return undefined;\n current = current[prop];\n }\n return current;\n }\n /** Extract substring from a text value using a range */\n #extractRange(doc, propPath, text, range) {\n const positions = this.#getRangePositions(doc, propPath, range);\n if (!positions)\n return undefined;\n return text.slice(positions[0], positions[1]);\n }\n /** Set a value at a prop path (change-only: mutates the doc proxy) */\n #setValueAt(container, propPath, value) {\n if (propPath.length === 0) {\n throw new Error(\"Internal error: #setValueAt called with empty path. \" +\n \"Root document changes should be handled by the caller.\");\n }\n const parent = this.#getValueAt(container, propPath.slice(0, -1));\n if (parent == null) {\n throw new Error(\"Cannot set value: parent is null or undefined\");\n }\n parent[propPath[propPath.length - 1]] = value;\n }\n /** Replace a substring at a range using Automerge.splice (change-only: mutates the doc proxy) */\n #spliceRange(doc, propPath, range, newValue) {\n const positions = this.#getRangePositions(doc, propPath, range);\n if (!positions) {\n throw new Error(\"Cannot resolve range positions\");\n }\n const [start, end] = positions;\n Automerge.splice(doc, propPath, start, end - start, newValue);\n }\n /** Convert cursor positions to numeric [start, end] positions */\n #getRangePositions(doc, propPath, range) {\n const start = Automerge.getCursorPosition(doc, propPath, range.start);\n const end = Automerge.getCursorPosition(doc, propPath, range.end);\n return start !== undefined && end !== undefined ? [start, end] : undefined;\n }\n #patchAffectsRef(patches) {\n const refPropPath = [];\n for (const segment of this.path) {\n if (segment.prop === undefined)\n break;\n refPropPath.push(segment.prop);\n }\n // If we couldn't resolve any part, ref was never valid - don't fire\n if (refPropPath.length === 0)\n return false;\n return patches.some(patch => this.#pathsOverlap(patch.path, refPropPath));\n }\n #pathsOverlap(patchPath, refPropPath) {\n const minLength = Math.min(patchPath.length, refPropPath.length);\n return patchPath\n .slice(0, minLength)\n .every((prop, i) => prop === refPropPath[i]);\n }\n}\n","(function (root, factory) {\n // Hack to make all exports of this module sha256 function object properties.\n var exports = {};\n factory(exports);\n var sha256 = exports[\"default\"];\n for (var k in exports) {\n sha256[k] = exports[k];\n }\n \n if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = sha256;\n } else if (typeof define === 'function' && define.amd) {\n define(function() { return sha256; }); \n } else {\n root.sha256 = sha256;\n }\n})(this, function(exports) {\n\"use strict\";\nexports.__esModule = true;\n// SHA-256 (+ HMAC and PBKDF2) for JavaScript.\n//\n// Written in 2014-2016 by Dmitry Chestnykh.\n// Public domain, no warranty.\n//\n// Functions (accept and return Uint8Arrays):\n//\n// sha256(message) -> hash\n// sha256.hmac(key, message) -> mac\n// sha256.pbkdf2(password, salt, rounds, dkLen) -> dk\n//\n// Classes:\n//\n// new sha256.Hash()\n// new sha256.HMAC(key)\n//\nexports.digestLength = 32;\nexports.blockSize = 64;\n// SHA-256 constants\nvar K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\nfunction hashBlocks(w, v, p, pos, len) {\n var a, b, c, d, e, f, g, h, u, i, j, t1, t2;\n while (len >= 64) {\n a = v[0];\n b = v[1];\n c = v[2];\n d = v[3];\n e = v[4];\n f = v[5];\n g = v[6];\n h = v[7];\n for (i = 0; i < 16; i++) {\n j = pos + i * 4;\n w[i] = (((p[j] & 0xff) << 24) | ((p[j + 1] & 0xff) << 16) |\n ((p[j + 2] & 0xff) << 8) | (p[j + 3] & 0xff));\n }\n for (i = 16; i < 64; i++) {\n u = w[i - 2];\n t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n u = w[i - 15];\n t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n for (i = 0; i < 64; i++) {\n t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n// Hash implements SHA256 hash algorithm.\nvar Hash = /** @class */ (function () {\n function Hash() {\n this.digestLength = exports.digestLength;\n this.blockSize = exports.blockSize;\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n this.state = new Int32Array(8); // hash state\n this.temp = new Int32Array(64); // temporary state\n this.buffer = new Uint8Array(128); // buffer for data to hash\n this.bufferLength = 0; // number of bytes in buffer\n this.bytesHashed = 0; // number of total bytes hashed\n this.finished = false; // indicates whether the hash was finalized\n this.reset();\n }\n // Resets hash state making it possible\n // to re-use this instance to hash other data.\n Hash.prototype.reset = function () {\n this.state[0] = 0x6a09e667;\n this.state[1] = 0xbb67ae85;\n this.state[2] = 0x3c6ef372;\n this.state[3] = 0xa54ff53a;\n this.state[4] = 0x510e527f;\n this.state[5] = 0x9b05688c;\n this.state[6] = 0x1f83d9ab;\n this.state[7] = 0x5be0cd19;\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n return this;\n };\n // Cleans internal buffers and re-initializes hash state.\n Hash.prototype.clean = function () {\n for (var i = 0; i < this.buffer.length; i++) {\n this.buffer[i] = 0;\n }\n for (var i = 0; i < this.temp.length; i++) {\n this.temp[i] = 0;\n }\n this.reset();\n };\n // Updates hash state with the given data.\n //\n // Optionally, length of the data can be specified to hash\n // fewer bytes than data.length.\n //\n // Throws error when trying to update already finalized hash:\n // instance must be reset to use it again.\n Hash.prototype.update = function (data, dataLength) {\n if (dataLength === void 0) { dataLength = data.length; }\n if (this.finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n var dataPos = 0;\n this.bytesHashed += dataLength;\n if (this.bufferLength > 0) {\n while (this.bufferLength < 64 && dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this.bufferLength === 64) {\n hashBlocks(this.temp, this.state, this.buffer, 0, 64);\n this.bufferLength = 0;\n }\n }\n if (dataLength >= 64) {\n dataPos = hashBlocks(this.temp, this.state, data, dataPos, dataLength);\n dataLength %= 64;\n }\n while (dataLength > 0) {\n this.buffer[this.bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n };\n // Finalizes hash state and puts hash into out.\n //\n // If hash was already finalized, puts the same value.\n Hash.prototype.finish = function (out) {\n if (!this.finished) {\n var bytesHashed = this.bytesHashed;\n var left = this.bufferLength;\n var bitLenHi = (bytesHashed / 0x20000000) | 0;\n var bitLenLo = bytesHashed << 3;\n var padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n this.buffer[left] = 0x80;\n for (var i = left + 1; i < padLength - 8; i++) {\n this.buffer[i] = 0;\n }\n this.buffer[padLength - 8] = (bitLenHi >>> 24) & 0xff;\n this.buffer[padLength - 7] = (bitLenHi >>> 16) & 0xff;\n this.buffer[padLength - 6] = (bitLenHi >>> 8) & 0xff;\n this.buffer[padLength - 5] = (bitLenHi >>> 0) & 0xff;\n this.buffer[padLength - 4] = (bitLenLo >>> 24) & 0xff;\n this.buffer[padLength - 3] = (bitLenLo >>> 16) & 0xff;\n this.buffer[padLength - 2] = (bitLenLo >>> 8) & 0xff;\n this.buffer[padLength - 1] = (bitLenLo >>> 0) & 0xff;\n hashBlocks(this.temp, this.state, this.buffer, 0, padLength);\n this.finished = true;\n }\n for (var i = 0; i < 8; i++) {\n out[i * 4 + 0] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return this;\n };\n // Returns the final hash digest.\n Hash.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._saveState = function (out) {\n for (var i = 0; i < this.state.length; i++) {\n out[i] = this.state[i];\n }\n };\n // Internal function for use in HMAC for optimization.\n Hash.prototype._restoreState = function (from, bytesHashed) {\n for (var i = 0; i < this.state.length; i++) {\n this.state[i] = from[i];\n }\n this.bytesHashed = bytesHashed;\n this.finished = false;\n this.bufferLength = 0;\n };\n return Hash;\n}());\nexports.Hash = Hash;\n// HMAC implements HMAC-SHA256 message authentication algorithm.\nvar HMAC = /** @class */ (function () {\n function HMAC(key) {\n this.inner = new Hash();\n this.outer = new Hash();\n this.blockSize = this.inner.blockSize;\n this.digestLength = this.inner.digestLength;\n var pad = new Uint8Array(this.blockSize);\n if (key.length > this.blockSize) {\n (new Hash()).update(key).finish(pad).clean();\n }\n else {\n for (var i = 0; i < key.length; i++) {\n pad[i] = key[i];\n }\n }\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n this.inner.update(pad);\n for (var i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n this.outer.update(pad);\n this.istate = new Uint32Array(8);\n this.ostate = new Uint32Array(8);\n this.inner._saveState(this.istate);\n this.outer._saveState(this.ostate);\n for (var i = 0; i < pad.length; i++) {\n pad[i] = 0;\n }\n }\n // Returns HMAC state to the state initialized with key\n // to make it possible to run HMAC over the other data with the same\n // key without creating a new instance.\n HMAC.prototype.reset = function () {\n this.inner._restoreState(this.istate, this.inner.blockSize);\n this.outer._restoreState(this.ostate, this.outer.blockSize);\n return this;\n };\n // Cleans HMAC state.\n HMAC.prototype.clean = function () {\n for (var i = 0; i < this.istate.length; i++) {\n this.ostate[i] = this.istate[i] = 0;\n }\n this.inner.clean();\n this.outer.clean();\n };\n // Updates state with provided data.\n HMAC.prototype.update = function (data) {\n this.inner.update(data);\n return this;\n };\n // Finalizes HMAC and puts the result in out.\n HMAC.prototype.finish = function (out) {\n if (this.outer.finished) {\n this.outer.finish(out);\n }\n else {\n this.inner.finish(out);\n this.outer.update(out, this.digestLength).finish(out);\n }\n return this;\n };\n // Returns message authentication code.\n HMAC.prototype.digest = function () {\n var out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n };\n return HMAC;\n}());\nexports.HMAC = HMAC;\n// Returns SHA256 hash of data.\nfunction hash(data) {\n var h = (new Hash()).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hash = hash;\n// Function hash is both available as module.hash and as default export.\nexports[\"default\"] = hash;\n// Returns HMAC-SHA256 of data under the key.\nfunction hmac(key, data) {\n var h = (new HMAC(key)).update(data);\n var digest = h.digest();\n h.clean();\n return digest;\n}\nexports.hmac = hmac;\n// Fills hkdf buffer like this:\n// T(1) = HMAC-Hash(PRK, T(0) | info | 0x01)\nfunction fillBuffer(buffer, hmac, info, counter) {\n // Counter is a byte value: check if it overflowed.\n var num = counter[0];\n if (num === 0) {\n throw new Error(\"hkdf: cannot expand more\");\n }\n // Prepare HMAC instance for new data with old key.\n hmac.reset();\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (num > 1) {\n hmac.update(buffer);\n }\n // Hash in info if it exists.\n if (info) {\n hmac.update(info);\n }\n // Hash in the counter.\n hmac.update(counter);\n // Output result to buffer and clean HMAC instance.\n hmac.finish(buffer);\n // Increment counter inside typed array, this works properly.\n counter[0]++;\n}\nvar hkdfSalt = new Uint8Array(exports.digestLength); // Filled with zeroes.\nfunction hkdf(key, salt, info, length) {\n if (salt === void 0) { salt = hkdfSalt; }\n if (length === void 0) { length = 32; }\n var counter = new Uint8Array([1]);\n // HKDF-Extract uses salt as HMAC key, and key as data.\n var okm = hmac(salt, key);\n // Initialize HMAC for expanding with extracted key.\n // Ensure no collisions with `hmac` function.\n var hmac_ = new HMAC(okm);\n // Allocate buffer.\n var buffer = new Uint8Array(hmac_.digestLength);\n var bufpos = buffer.length;\n var out = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n if (bufpos === buffer.length) {\n fillBuffer(buffer, hmac_, info, counter);\n bufpos = 0;\n }\n out[i] = buffer[bufpos++];\n }\n hmac_.clean();\n buffer.fill(0);\n counter.fill(0);\n return out;\n}\nexports.hkdf = hkdf;\n// Derives a key from password and salt using PBKDF2-HMAC-SHA256\n// with the given number of iterations.\n//\n// The number of bytes returned is equal to dkLen.\n//\n// (For better security, avoid dkLen greater than hash length - 32 bytes).\nfunction pbkdf2(password, salt, iterations, dkLen) {\n var prf = new HMAC(password);\n var len = prf.digestLength;\n var ctr = new Uint8Array(4);\n var t = new Uint8Array(len);\n var u = new Uint8Array(len);\n var dk = new Uint8Array(dkLen);\n for (var i = 0; i * len < dkLen; i++) {\n var c = i + 1;\n ctr[0] = (c >>> 24) & 0xff;\n ctr[1] = (c >>> 16) & 0xff;\n ctr[2] = (c >>> 8) & 0xff;\n ctr[3] = (c >>> 0) & 0xff;\n prf.reset();\n prf.update(salt);\n prf.update(ctr);\n prf.finish(u);\n for (var j = 0; j < len; j++) {\n t[j] = u[j];\n }\n for (var j = 2; j <= iterations; j++) {\n prf.reset();\n prf.update(u).finish(u);\n for (var k = 0; k < len; k++) {\n t[k] ^= u[k];\n }\n }\n for (var j = 0; j < len && i * len + j < dkLen; j++) {\n dk[i * len + j] = t[j];\n }\n }\n for (var i = 0; i < len; i++) {\n t[i] = u[i] = 0;\n }\n for (var i = 0; i < 4; i++) {\n ctr[i] = 0;\n }\n prf.clean();\n return dk;\n}\nexports.pbkdf2 = pbkdf2;\n});\n","import debug from \"debug\";\nimport { parseAutomergeUrl } from \"../AutomergeUrl.js\";\nimport { DocSynchronizer } from \"./DocSynchronizer.js\";\nimport { Synchronizer } from \"./Synchronizer.js\";\nconst log = debug(\"automerge-repo:collectionsync\");\n/** A CollectionSynchronizer is responsible for synchronizing a DocCollection with peers. */\nexport class CollectionSynchronizer extends Synchronizer {\n repo;\n /** The set of peers we are connected with */\n #peers = new Set();\n /** A map of documentIds to their synchronizers */\n /** @hidden */\n docSynchronizers = {};\n /** Used to determine if the document is know to the Collection and a synchronizer exists or is being set up */\n #docSetUp = {};\n #denylist;\n #hasRequested = new Map();\n constructor(repo, denylist = []) {\n super();\n this.repo = repo;\n this.#denylist = denylist.map(url => parseAutomergeUrl(url).documentId);\n }\n /** Returns a synchronizer for the given document, creating one if it doesn't already exist. */\n #fetchDocSynchronizer(handle) {\n if (!this.docSynchronizers[handle.documentId]) {\n this.docSynchronizers[handle.documentId] =\n this.#initDocSynchronizer(handle);\n }\n return this.docSynchronizers[handle.documentId];\n }\n /** Creates a new docSynchronizer and sets it up to propagate messages */\n #initDocSynchronizer(handle) {\n const docSynchronizer = new DocSynchronizer({\n handle,\n peerId: this.repo.networkSubsystem.peerId,\n onLoadSyncState: async (peerId) => {\n if (!this.repo.storageSubsystem) {\n return;\n }\n const { storageId, isEphemeral } = this.repo.peerMetadataByPeerId[peerId] || {};\n if (!storageId || isEphemeral) {\n return;\n }\n return this.repo.storageSubsystem.loadSyncState(handle.documentId, storageId);\n },\n });\n docSynchronizer.on(\"message\", event => this.emit(\"message\", event));\n docSynchronizer.on(\"open-doc\", event => this.emit(\"open-doc\", event));\n docSynchronizer.on(\"sync-state\", event => this.emit(\"sync-state\", event));\n docSynchronizer.on(\"metrics\", event => this.emit(\"metrics\", event));\n return docSynchronizer;\n }\n /** returns an array of peerIds that we share this document generously with */\n async #documentGenerousPeers(documentId) {\n const peers = Array.from(this.#peers);\n const generousPeers = [];\n for (const peerId of peers) {\n const okToShare = await this.#shouldShare(peerId, documentId);\n if (okToShare)\n generousPeers.push(peerId);\n }\n return generousPeers;\n }\n // PUBLIC\n /**\n * When we receive a sync message for a document we haven't got in memory, we\n * register it with the repo and start synchronizing\n */\n async receiveMessage(message) {\n log(`onSyncMessage: ${message.senderId}, ${message.documentId}, ${\"data\" in message ? message.data.byteLength + \"bytes\" : \"\"}`);\n const documentId = message.documentId;\n if (!documentId) {\n throw new Error(\"received a message with an invalid documentId\");\n }\n if (this.#denylist.includes(documentId)) {\n this.emit(\"metrics\", {\n type: \"doc-denied\",\n documentId,\n });\n this.emit(\"message\", {\n type: \"doc-unavailable\",\n documentId,\n targetId: message.senderId,\n });\n return;\n }\n // Record the request so that even if access is denied now, we know that the\n // peer requested the document so that if the share policy changes we know\n // to begin syncing with this peer\n if (message.type === \"request\" || message.type === \"sync\") {\n if (!this.#hasRequested.has(documentId)) {\n this.#hasRequested.set(documentId, new Set());\n }\n this.#hasRequested.get(documentId)?.add(message.senderId);\n }\n const hasAccess = await this.repo.shareConfig.access(message.senderId, documentId);\n if (!hasAccess) {\n log(\"access denied\");\n this.emit(\"message\", {\n type: \"doc-unavailable\",\n documentId,\n targetId: message.senderId,\n });\n return;\n }\n this.#docSetUp[documentId] = true;\n const handle = await this.repo.find(documentId, {\n allowableStates: [\"ready\", \"unavailable\", \"requesting\"],\n });\n const docSynchronizer = this.#fetchDocSynchronizer(handle);\n docSynchronizer.receiveMessage(message);\n // Initiate sync with any new peers\n const peers = await this.#documentGenerousPeers(documentId);\n void docSynchronizer.beginSync(peers.filter(peerId => !docSynchronizer.hasPeer(peerId)));\n }\n /**\n * Starts synchronizing the given document with all peers that we share it generously with.\n */\n addDocument(handle) {\n // HACK: this is a hack to prevent us from adding the same document twice\n if (this.#docSetUp[handle.documentId]) {\n return;\n }\n this.#docSetUp[handle.documentId] = true;\n const docSynchronizer = this.#fetchDocSynchronizer(handle);\n void this.#documentGenerousPeers(handle.documentId).then(peers => {\n void docSynchronizer.beginSync(peers);\n });\n }\n /** Removes a document and stops synchronizing them */\n removeDocument(documentId) {\n log(`removing document ${documentId}`);\n const docSynchronizer = this.docSynchronizers[documentId];\n if (docSynchronizer !== undefined) {\n this.peers.forEach(peerId => docSynchronizer.endSync(peerId));\n }\n delete this.docSynchronizers[documentId];\n delete this.#docSetUp[documentId];\n }\n /** Adds a peer and maybe starts synchronizing with them */\n addPeer(peerId) {\n log(`adding ${peerId} & synchronizing with them`);\n if (this.#peers.has(peerId)) {\n return;\n }\n this.#peers.add(peerId);\n for (const docSynchronizer of Object.values(this.docSynchronizers)) {\n const { documentId } = docSynchronizer;\n void this.#shouldShare(peerId, documentId).then(okToShare => {\n if (okToShare)\n void docSynchronizer.beginSync([peerId]);\n });\n }\n }\n /** Removes a peer and stops synchronizing with them */\n removePeer(peerId) {\n log(`removing peer ${peerId}`);\n this.#peers.delete(peerId);\n for (const requested of this.#hasRequested.values()) {\n requested.delete(peerId);\n }\n for (const docSynchronizer of Object.values(this.docSynchronizers)) {\n docSynchronizer.endSync(peerId);\n }\n }\n /** Returns a list of all connected peer ids */\n get peers() {\n return Array.from(this.#peers);\n }\n /**\n * Re-evaluates share policy for a document and updates sync accordingly\n *\n * @remarks\n * This is called when the share policy for a document has changed. It re-evaluates\n * which peers should have access and starts/stops synchronization as needed.\n */\n async reevaluateDocumentShare() {\n const peers = Array.from(this.#peers);\n const docPromises = [];\n for (const docSynchronizer of Object.values(this.docSynchronizers)) {\n const documentId = docSynchronizer.documentId;\n docPromises.push((async () => {\n for (const peerId of peers) {\n const shouldShare = await this.#shouldShare(peerId, documentId);\n const isAlreadySyncing = docSynchronizer.hasPeer(peerId);\n log(`reevaluateDocumentShare: ${peerId} for ${documentId}, shouldShare: ${shouldShare}, isAlreadySyncing: ${isAlreadySyncing}`);\n if (shouldShare && !isAlreadySyncing) {\n log(`reevaluateDocumentShare: starting sync with ${peerId} for ${documentId}`);\n void docSynchronizer.beginSync([peerId]);\n }\n else if (!shouldShare && isAlreadySyncing) {\n log(`reevaluateDocumentShare: stopping sync with ${peerId} for ${documentId}`);\n docSynchronizer.endSync(peerId);\n }\n }\n })().catch(e => {\n console.log(`error reevaluating document share for ${documentId}: ${e}`);\n }));\n }\n await Promise.allSettled(docPromises);\n }\n metrics() {\n return Object.fromEntries(Object.entries(this.docSynchronizers).map(([documentId, synchronizer]) => {\n return [documentId, synchronizer.metrics()];\n }));\n }\n async #shouldShare(peerId, documentId) {\n const [announce, access] = await Promise.all([\n this.repo.shareConfig.announce(peerId, documentId),\n this.repo.shareConfig.access(peerId, documentId),\n ]);\n const hasRequested = this.#hasRequested.get(documentId)?.has(peerId) ?? false;\n return announce || (access && hasRequested);\n }\n}\n","export const DEFAULT_HEARTBEAT_INTERVAL_MS = 15_000;\nexport const DEFAULT_PEER_TTL_MS = 3 * DEFAULT_HEARTBEAT_INTERVAL_MS;\nexport const PRESENCE_MESSAGE_MARKER = \"__presence\";\n","/**\n * A grouped view of peer states.\n */\nexport class PeerStateView {\n value;\n constructor(value) {\n this.value = value;\n }\n /**\n * Get the presence state of all peers. By default, each peer is its own\n * group, but presence activity can be aggregated by arbitrary criteria.\n *\n * @param opts\n * @returns presence state for all groups\n */\n getStates(opts) {\n const groupingFn = opts?.groupingFn ?? peerIdentity;\n const summaryFn = opts?.summaryFn ??\n getLastActivePeer;\n const statesByKey = Object.values(this.value).reduce((byKey, curr) => {\n const key = groupingFn(curr);\n if (!(key in byKey)) {\n byKey[key] = [];\n }\n byKey[key].push(curr);\n return byKey;\n }, {});\n return Object.entries(statesByKey).reduce((result, [key, states]) => {\n result[key] = summaryFn(states);\n return result;\n }, {});\n }\n}\n/**\n * Get the peerId of this peer.\n *\n * @param peer\n * @returns peer id\n */\nexport function peerIdentity(peer) {\n return peer.peerId;\n}\n/**\n * Find the peer that most recently sent a state update.\n *\n * @param peers\n * @returns id of most recently active peer\n */\nexport function getLastActivePeer(peers) {\n let freshestLastActiveAt;\n return peers.reduce((freshest, curr) => {\n const lastActiveAt = curr.lastActiveAt;\n if (!lastActiveAt) {\n return freshest;\n }\n if (!freshest || lastActiveAt > freshestLastActiveAt) {\n freshestLastActiveAt = lastActiveAt;\n return curr;\n }\n return freshest;\n }, undefined);\n}\n/**\n * Find the peer that most recently sent a heartbeat.\n *\n * @param peers\n * @returns id of most recently seen peer\n */\nexport function getLastSeenPeer(peers) {\n let freshestLastSeenAt;\n return peers.reduce((freshest, curr) => {\n const lastSeenAt = curr.lastSeenAt;\n if (!lastSeenAt) {\n return freshest;\n }\n if (!freshest || lastSeenAt > freshestLastSeenAt) {\n freshestLastSeenAt = lastSeenAt;\n return curr;\n }\n return freshest;\n }, undefined);\n}\n","import { PeerStateView } from \"./PeerStateView.js\";\nexport class PeerPresenceInfo {\n ttl;\n #peerStates = new PeerStateView({});\n /**\n * Build a new peer presence state.\n *\n * @param ttl in milliseconds - peers with no activity within this timeframe\n * are forgotten when {@link prune} is called.\n */\n constructor(ttl) {\n this.ttl = ttl;\n }\n has(peerId) {\n return peerId in this.#peerStates.value;\n }\n /**\n * Record that we've seen the given peer recently.\n *\n * @param peerId\n */\n markSeen(peerId) {\n if (!(peerId in this.#peerStates.value)) {\n // Ignore heartbeats from peers we have not seen before: they will send a snapshot\n return;\n }\n this.#peerStates = new PeerStateView({\n ...this.#peerStates.value,\n [peerId]: {\n ...this.#peerStates.value[peerId],\n lastSeenAt: Date.now(),\n },\n });\n }\n /**\n * Record a state update for the given peer. Note that existing state is not\n * overwritten.\n *\n * @param peerId\n * @param value\n */\n update({ peerId, value }) {\n const peerState = this.#peerStates.value[peerId];\n const existingState = peerState?.value ?? {};\n const now = Date.now();\n this.#peerStates = new PeerStateView({\n ...this.#peerStates.value,\n [peerId]: {\n peerId,\n lastSeenAt: now,\n lastActiveAt: now,\n value: {\n ...existingState,\n ...value,\n },\n },\n });\n }\n /**\n * Forget the given peer.\n *\n * @param peerId\n */\n delete(peerId) {\n this.#peerStates = new PeerStateView(Object.fromEntries(Object.entries(this.#peerStates.value).filter(([existingId]) => {\n return existingId != peerId;\n })));\n }\n /**\n * Prune all peers that have not been seen since the configured ttl has\n * elapsed.\n */\n prune() {\n const threshold = Date.now() - this.ttl;\n const pruned = [];\n this.#peerStates = new PeerStateView(Object.fromEntries(Object.entries(this.#peerStates.value).filter(([id, state]) => {\n const keep = state.lastSeenAt >= threshold;\n if (!keep) {\n pruned.push(id);\n }\n return keep;\n })));\n return pruned;\n }\n /**\n * Get a snapshot of the current peer states\n */\n get states() {\n return this.#peerStates;\n }\n}\n","import { EventEmitter } from \"eventemitter3\";\nimport { DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_PEER_TTL_MS, PRESENCE_MESSAGE_MARKER, } from \"./constants.js\";\nimport { PeerPresenceInfo } from \"./PeerPresenceInfo.js\";\n/**\n * Presence encapsulates ephemeral state communication for a specific doc\n * handle. It tracks caller-provided local state and broadcasts that state to\n * all peers. It sends periodic heartbeats when there are no state updates.\n *\n * It also tracks ephemeral state broadcast by peers and emits events when peers\n * send ephemeral state updates (see {@link PresenceEvents}).\n *\n * Presence starts out in an inactive state. Call {@link start} and {@link stop}\n * to activate and deactivate it.\n */\nexport class Presence extends EventEmitter {\n #handle;\n #peers;\n #localState;\n #heartbeatMs;\n #handleEphemeralMessage;\n #heartbeatInterval;\n #pruningInterval;\n #hellos = [];\n #running = false;\n /**\n * Create a new Presence to share ephemeral state with peers.\n *\n * @param config see {@link PresenceConfig}\n * @returns\n */\n constructor({ handle }) {\n super();\n this.#handle = handle;\n this.#peers = new PeerPresenceInfo(DEFAULT_PEER_TTL_MS);\n this.#localState = {};\n }\n /**\n * Start listening to ephemeral messages on the handle, broadcast initial\n * state to peers, and start sending heartbeats.\n */\n start({ initialState, heartbeatMs, peerTtlMs }) {\n if (this.#running) {\n return;\n }\n this.#running = true;\n this.#heartbeatMs = heartbeatMs ?? DEFAULT_HEARTBEAT_INTERVAL_MS;\n this.#peers = new PeerPresenceInfo(peerTtlMs ?? DEFAULT_PEER_TTL_MS);\n this.#localState = initialState;\n // N.B.: We can't use a regular member function here since member functions\n // of two distinct objects are identical, and we need to be able to stop\n // listening to the handle for just this Presence instance in stop()\n this.#handleEphemeralMessage = (e) => {\n const peerId = e.senderId;\n const envelope = e.message;\n if (!(PRESENCE_MESSAGE_MARKER in envelope)) {\n return;\n }\n const message = envelope[PRESENCE_MESSAGE_MARKER];\n if (!this.#peers.has(peerId)) {\n this.announce();\n }\n switch (message.type) {\n case \"heartbeat\":\n this.#peers.markSeen(peerId);\n this.emit(\"heartbeat\", { type: \"heartbeat\", peerId });\n break;\n case \"goodbye\":\n this.#peers.delete(peerId);\n this.emit(\"goodbye\", { type: \"goodbye\", peerId });\n break;\n case \"update\":\n this.#peers.update({\n peerId,\n value: { [message.channel]: message.value },\n });\n this.emit(\"update\", {\n type: \"update\",\n peerId,\n channel: message.channel,\n value: message.value,\n });\n break;\n case \"snapshot\":\n this.#peers.update({\n peerId,\n value: message.state,\n });\n this.emit(\"snapshot\", {\n type: \"snapshot\",\n peerId,\n state: message.state,\n });\n break;\n }\n };\n this.#handle.on(\"ephemeral-message\", this.#handleEphemeralMessage);\n this.broadcastLocalState(); // also starts heartbeats\n this.startPruningPeers();\n }\n /**\n * Return a view of current peer states.\n */\n getPeerStates() {\n return this.#peers.states;\n }\n /**\n * Return a view of current local state.\n */\n getLocalState() {\n return this.#localState;\n }\n /**\n * Update state for the specific channel, and broadcast new state to all\n * peers.\n *\n * @param channel\n * @param value\n */\n broadcast(channel, value) {\n this.#localState = Object.assign({}, this.#localState, {\n [channel]: value,\n });\n this.broadcastChannelState(channel);\n }\n /**\n * Whether this Presence is currently active. See\n * {@link start} and {@link stop}.\n */\n get running() {\n return this.#running;\n }\n /**\n * Stop this Presence: broadcast a \"goodbye\" message (when received, other\n * peers will immediately forget the sender), stop sending heartbeats, and\n * stop listening to ephemeral-messages broadcast from peers.\n *\n * This can be used with browser events like\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Window/pagehide_event | \"pagehide\"}\n * or\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilitychange_event | \"visibilitychange\"}\n * to stop sending and receiving updates when not active.\n */\n stop() {\n if (!this.#running) {\n return;\n }\n this.#hellos.forEach(timeoutId => {\n clearTimeout(timeoutId);\n });\n this.#hellos = [];\n this.#handle.off(\"ephemeral-message\", this.#handleEphemeralMessage);\n this.stopHeartbeats();\n this.stopPruningPeers();\n this.send({ type: \"goodbye\" });\n this.#running = false;\n }\n announce() {\n // Broadcast our current state whenever we see new peers\n // TODO: We currently need to wait for the peer to be ready, but waiting\n // some arbitrary amount of time is brittle\n const helloId = setTimeout(() => {\n this.broadcastLocalState();\n this.#hellos = this.#hellos.filter(id => id !== helloId);\n }, 500);\n this.#hellos.push(helloId);\n }\n broadcastLocalState() {\n this.doBroadcast(\"snapshot\", { state: this.#localState });\n this.resetHeartbeats();\n }\n broadcastChannelState(channel) {\n const value = this.#localState[channel];\n this.doBroadcast(\"update\", { channel, value });\n this.resetHeartbeats();\n }\n resetHeartbeats() {\n // Reset heartbeats every time we broadcast a message to avoid sending\n // unnecessary heartbeats when there is plenty of actual update activity\n // happening.\n this.stopHeartbeats();\n this.startHeartbeats();\n }\n doBroadcast(type, extra) {\n this.send({\n type,\n ...extra,\n });\n }\n send(message) {\n if (!this.#running) {\n return;\n }\n this.#handle.broadcast({\n [PRESENCE_MESSAGE_MARKER]: message,\n });\n }\n startHeartbeats() {\n if (this.#heartbeatInterval !== undefined) {\n return;\n }\n this.#heartbeatInterval = setInterval(() => {\n this.send({ type: \"heartbeat\" });\n }, this.#heartbeatMs);\n }\n stopHeartbeats() {\n if (this.#heartbeatInterval === undefined) {\n return;\n }\n clearInterval(this.#heartbeatInterval);\n this.#heartbeatInterval = undefined;\n }\n startPruningPeers() {\n if (this.#pruningInterval !== undefined) {\n return;\n }\n // Pruning happens at the heartbeat frequency, not on a peer ttl frequency,\n // to minimize variance between peer expiration, since the heartbeat frequency\n // is expected to be several times higher.\n this.#pruningInterval = setInterval(() => {\n const pruned = this.#peers.prune();\n if (pruned.length > 0) {\n this.emit(\"pruning\", { pruned });\n }\n }, this.#heartbeatMs);\n }\n stopPruningPeers() {\n if (this.#pruningInterval === undefined) {\n return;\n }\n clearInterval(this.#pruningInterval);\n this.#pruningInterval = undefined;\n }\n}\n","import { useCallback, useEffect, useRef, useState } from \"react\"\n\nimport {\n Presence,\n PresenceConfig,\n DocHandle,\n PeerStateView,\n PresenceState,\n} from \"@automerge/automerge-repo/slim\"\n\nexport type UsePresenceConfig<State extends PresenceState> =\n PresenceConfig<State> & {\n handle: DocHandle<unknown>\n }\n\nexport type UsePresenceResult<State extends PresenceState> = {\n /**\n * Presence view of our peers.\n */\n peerStates: PeerStateView<State>\n /**\n * Our own presence state, as last set by `update` or the initial value.\n */\n localState: State | undefined\n /**\n * Update our presence state for the given channel and broadcast\n * it to our peers.\n *\n * @param channel\n * @param value\n */\n update: <Channel extends keyof State>(\n channel: Channel,\n value: State[Channel]\n ) => void\n /**\n * Resume presence broadcasting and listening to peer presence.\n *\n * Note that this only needs to be called after `stop` has been called:\n * usePresence starts running immediately.\n */\n start: (config?: Partial<PresenceConfig<State>>) => void\n /**\n * Stop broadcasting presence state and listening to peer presence.\n */\n stop: () => void\n}\n\n/**\n * This hook encapsulates ephemeral state communication for a specific doc\n * handle. It tracks caller-provided local state and broadcasts that state to\n * all peers. It sends periodic heartbeats when there are no state updates.\n *\n * It also tracks ephemeral state broadcast by peers and forces a re-render when\n * the state of a peer changes.\n *\n * It cleans up (stops sending heartbeats and processing ephemeral messages)\n * when it unmounts.\n *\n * It is implemented using {@link Presence}.\n *\n * @param config - see {@link UsePresenceConfig}. Note that initialState only\n * determines the initial value. Updates to this param will not trigger a\n * re-render of the hook.\n *\n * @returns see {@link UsePresenceResult}\n */\nexport function usePresence<State extends PresenceState>({\n handle,\n initialState,\n heartbeatMs,\n peerTtlMs,\n}: UsePresenceConfig<State>): UsePresenceResult<State> {\n const [localState, setLocalState] = useState<State>(initialState)\n const [peerStates, setPeerStates] = useState(new PeerStateView<State>({}))\n // Don't re-render based on changes to these: they are not expected to\n // change but may be passed in as object literals\n const firstOpts = useRef({\n heartbeatMs,\n peerTtlMs,\n })\n const firstInitialState = useRef(initialState)\n const [presence] = useState(() => new Presence<State>({ handle }))\n\n useEffect(() => {\n presence.start({\n initialState: firstInitialState.current,\n ...firstOpts.current,\n })\n presence.on(\"heartbeat\", () => setPeerStates(presence.getPeerStates()))\n presence.on(\"snapshot\", () => setPeerStates(presence.getPeerStates()))\n presence.on(\"update\", () => setPeerStates(presence.getPeerStates()))\n presence.on(\"goodbye\", () => setPeerStates(presence.getPeerStates()))\n presence.on(\"pruning\", () => setPeerStates(presence.getPeerStates()))\n\n return () => {\n presence.stop()\n }\n }, [presence, firstInitialState, firstOpts])\n\n const start = useCallback(\n (config?: Partial<PresenceConfig<State>>) => {\n // Fall back to the last state if not provided when restarting\n const initialState = config?.initialState ?? presence.getLocalState()\n const opts = {\n ...firstOpts.current,\n ...config,\n initialState,\n }\n presence.start(opts)\n },\n [presence, firstOpts]\n )\n const stop = useCallback(() => {\n presence.stop()\n }, [presence])\n\n const update = useCallback(\n <Channel extends keyof State>(channel: Channel, msg: State[Channel]) => {\n presence.broadcast(channel, msg)\n const updated = presence.getLocalState()\n setLocalState(updated)\n },\n [presence]\n )\n\n return {\n peerStates,\n localState,\n update,\n start,\n stop,\n }\n}\n"],"names":["require$$0","require$$1","require$$2","sha256","src","bs58check","Uuid.validate","Uuid.parse","handle","peerStates","heartbeats","this","position","bundledStrings","isLittleEndianMachine","Buffer","initialState"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,22,23,26,27,28,29,30,31,32,33,34,35,36,38]}
|