@automerge/automerge-repo-solid-primitives 2.5.0 → 2.5.1
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 +1426 -859
- package/dist/index.js.map +1 -0
- package/package.json +3 -3
- package/vite.config.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../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/internal_state.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/apply_patches.js","../../../node_modules/.pnpm/@automerge+automerge@3.0.0/node_modules/@automerge/automerge/dist/mjs/implementation.js","../src/autoproduce.ts","../src/makeDocumentProjection.ts","../src/createDocumentProjection.ts","../src/context.ts","../src/useDocHandle.ts","../src/useDocument.ts","../src/useRepo.ts"],"sourcesContent":["// 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","import { CLEAR_CACHE, IS_PROXY, OBJECT_ID, STATE, TRACE } from \"./constants.js\";\nexport function _state(doc, checkroot = true) {\n if (typeof doc !== \"object\") {\n throw new RangeError(\"must be the document root\");\n }\n const state = Reflect.get(doc, STATE);\n if (state === undefined ||\n state == null ||\n (checkroot && _obj(doc) !== \"_root\")) {\n throw new RangeError(\"must be the document root\");\n }\n return state;\n}\nexport function _clear_cache(doc) {\n Reflect.set(doc, CLEAR_CACHE, true);\n}\nexport function _trace(doc) {\n return Reflect.get(doc, TRACE);\n}\nexport function _obj(doc) {\n if (!(typeof doc === \"object\") || doc === null) {\n return null;\n }\n return Reflect.get(doc, OBJECT_ID);\n}\nexport function _is_proxy(doc) {\n return !!Reflect.get(doc, IS_PROXY);\n}\n","import { isAutomerge, isCounter, mark, splice, unmark, } from \"./implementation.js\";\nexport function applyPatch(doc, patch) {\n let path = resolvePath(doc, patch.path);\n if (patch.action === \"put\") {\n applyPutPatch(doc, path, patch);\n }\n else if (patch.action === \"insert\") {\n applyInsertPatch(doc, path, patch);\n }\n else if (patch.action === \"del\") {\n applyDelPatch(doc, path, patch);\n }\n else if (patch.action === \"splice\") {\n applySplicePatch(doc, path, patch);\n }\n else if (patch.action === \"inc\") {\n applyIncPatch(doc, path, patch);\n }\n else if (patch.action === \"mark\") {\n applyMarkPatch(doc, path, patch);\n }\n else if (patch.action === \"unmark\") {\n applyUnmarkPatch(doc, path, patch);\n }\n else if (patch.action === \"conflict\") {\n // Ignore conflict patches\n }\n else {\n throw new RangeError(`unsupported patch: ${patch}`);\n }\n}\nfunction applyPutPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n parent[prop] = patch.value;\n}\nfunction applyInsertPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n if (!Array.isArray(parent)) {\n throw new RangeError(`target is not an array for patch`);\n }\n if (!(typeof prop === \"number\")) {\n throw new RangeError(`index is not a number for patch`);\n }\n parent.splice(prop, 0, ...patch.values);\n}\nfunction applyDelPatch(doc, path, patch) {\n let { obj: parent, prop, parentPath } = pathElemAt(path, -1);\n if (!(typeof prop === \"number\")) {\n throw new RangeError(`index is not a number for patch`);\n }\n if (Array.isArray(parent)) {\n parent.splice(prop, patch.length || 1);\n }\n else if (typeof parent === \"string\") {\n if (isAutomerge(doc)) {\n splice(doc, parentPath, prop, patch.length || 1);\n }\n else {\n let { obj: grandParent, prop: grandParentProp } = pathElemAt(path, -2);\n if (typeof prop !== \"number\") {\n throw new RangeError(`index is not a number for patch`);\n }\n let target = grandParent[grandParentProp];\n if (target == null || typeof target !== \"string\") {\n throw new RangeError(`target is not a string for patch`);\n }\n let newString = target.slice(0, prop) + target.slice(prop + (patch.length || 1));\n grandParent[grandParentProp] = newString;\n }\n }\n else {\n throw new RangeError(`target is not an array or string for patch`);\n }\n}\nfunction applySplicePatch(doc, path, patch) {\n if (isAutomerge(doc)) {\n let { obj: parent, prop, parentPath } = pathElemAt(path, -1);\n if (!(typeof prop === \"number\")) {\n throw new RangeError(`index is not a number for patch`);\n }\n splice(doc, parentPath, prop, 0, patch.value);\n }\n else {\n let { obj: parent, prop } = pathElemAt(path, -1);\n let { obj: grandParent, prop: grandParentProp } = pathElemAt(path, -2);\n if (typeof prop !== \"number\") {\n throw new RangeError(`index is not a number for patch`);\n }\n let target = grandParent[grandParentProp];\n if (target == null || typeof target !== \"string\") {\n throw new RangeError(`target is not a string for patch`);\n }\n let newString = target.slice(0, prop) + patch.value + target.slice(prop);\n grandParent[grandParentProp] = newString;\n }\n}\nfunction applyIncPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n const counter = parent[prop];\n if (isAutomerge(doc)) {\n if (!isCounter(counter)) {\n throw new RangeError(`target is not a counter for patch`);\n }\n counter.increment(patch.value);\n }\n else {\n if (!(typeof counter === \"number\")) {\n throw new RangeError(`target is not a number for patch`);\n }\n parent[prop] = counter + patch.value;\n }\n}\nfunction applyMarkPatch(doc, path, patch) {\n let { obj: parent, prop } = pathElemAt(path, -1);\n if (!isAutomerge(doc)) {\n return;\n }\n for (const markSpec of patch.marks) {\n mark(doc, patch.path, \n // TODO: add mark expansion to patches. This will require emitting\n // the expand values in patches.\n { start: markSpec.start, end: markSpec.end, expand: \"none\" }, markSpec.name, markSpec.value);\n }\n}\nfunction applyUnmarkPatch(doc, path, patch) {\n if (!isAutomerge(doc)) {\n return;\n }\n unmark(doc, patch.path, { start: patch.start, end: patch.end, expand: \"none\" }, patch.name);\n}\nexport function applyPatches(doc, patches) {\n for (const patch of patches) {\n applyPatch(doc, patch);\n }\n}\n/**\n * Walk through a path with an object and for each element in the path return a resolved path element.\n *\n * A resolved path element looks like this:\n *\n * ```typescript\n * {\n * obj: any, // The object that this element in the path is a property of\n * prop: Prop, // The property within `obj` that this path element points at\n * parentPath: Prop[] // The path to `obj` within the original `doc` passed to `resolvePath`\n * }\n * ````\n *\n * For example, given an object like this:\n *\n * ```typescript\n * {\n * todos: [{ task: \"remember the milk\"}]\n * }\n * ```\n *\n * Then `resolvePath(doc, [\"todos\", 0, \"task\"])` would return:\n *\n * ```typescript\n * [\n * { obj: { todos: [{ task: \"remember the milk\"}] }, prop: \"todos\", parentPath: [] },\n * { obj: [{ task: \"remember the milk\"}], prop: 0, parentPath: [\"todos\"] },\n * { obj: { task: \"remember the milk\" }, prop: \"task\", parentPath: [\"todos\", 0] }\n * ]\n * ```\n */\nfunction resolvePath(doc, path) {\n const result = [];\n let current = doc;\n let currentPath = [];\n for (const [index, prop] of path.entries()) {\n result.push({ obj: current, prop, parentPath: currentPath.slice() });\n currentPath.push(prop);\n if (index !== path.length - 1) {\n if (current == null || typeof current != \"object\") {\n // If we're not the last item in the path then we need the current\n // object to be an object so we can access it in the next iteration\n throw new Error(`Invalid path: ${path}`);\n }\n current = current[prop];\n }\n else {\n break;\n }\n }\n return result;\n}\n/**\n * Get an element from a resolved path, throwing an exception if the element does not exist\n *\n * @param resolved - The path to lookup in\n * @param index - The index of the element to lookup, negative indices search backwards\n */\nfunction pathElemAt(resolved, index) {\n let result = resolved.at(index);\n if (result == undefined) {\n throw new Error(\"invalid path\");\n }\n return result;\n}\nfunction reversed(array) {\n return array.slice().reverse();\n}\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","import type { DocHandleChangePayload } from \"@automerge/automerge-repo/slim\"\nimport { applyPatches } from \"@automerge/automerge/slim\"\n\n/**\n * convert automerge patches to solid producer operations\n * @param payload the\n * [DocHandleChangePayload](https://automerge.org/automerge-repo/interfaces/_automerge_automerge_repo.DocHandleChangePayload.html)\n * from the handle.on(\"change\n * @returns a callback for an immer-like function. e.g.\n * [produce](https://docs.solidjs.com/reference/store-utilities/produce) for\n * [Solid\n * Stores](https://docs.solidjs.com/reference/store-utilities/create-store)\n */\nexport default function autoproduce<T>(\n payload: DocHandleChangePayload<T>\n): (doc: T) => void {\n return (doc: T) => applyPatches(doc, payload.patches)\n}\n","import { onCleanup } from \"solid-js\"\nimport type {\n Doc,\n DocHandle,\n DocHandleChangePayload,\n} from \"@automerge/automerge-repo/slim\"\nimport autoproduce from \"./autoproduce.js\"\nimport { createStore, produce, reconcile, type Store } from \"solid-js/store\"\nimport { applyPatches, diff, getHeads } from \"@automerge/automerge/slim\"\n\nconst cache = new WeakMap<\n DocHandle<unknown>,\n {\n refs: number\n store: Store<Doc<unknown>>\n cleanup(): void\n }\n>()\n\nfunction initial<T>(handle: DocHandle<T>): T {\n const template = {} as T\n applyPatches(template, diff(handle.doc(), [], getHeads(handle.doc())))\n return template\n}\n\n/**\n * make a fine-grained live view of a document from its handle.\n * @param handle an Automerge\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n */\nexport default function makeDocumentProjection<T extends object>(\n handle: DocHandle<T>\n): Doc<T> {\n onCleanup(() => {\n const item = cache.get(handle)!\n if (!item) return\n if (!item.refs--) {\n item.cleanup()\n }\n })\n\n if (cache.has(handle)) {\n const item = cache.get(handle)!\n item.refs++\n return item.store as T\n }\n\n const [doc, set] = createStore<T>(initial(handle))\n\n cache.set(handle, {\n refs: 0,\n store: doc,\n cleanup() {\n handle.off(\"change\", patch)\n handle.off(\"delete\", ondelete)\n // https://github.com/chee/solid-automerge/pull/5\n cache.delete(handle)\n },\n })\n\n function patch(payload: DocHandleChangePayload<T>) {\n set(produce(autoproduce(payload)))\n }\n\n function ondelete() {\n set(reconcile({} as T))\n }\n\n handle.on(\"change\", patch)\n handle.on(\"delete\", ondelete)\n\n return doc\n}\n","import { createMemo, type Accessor } from \"solid-js\"\nimport { type DocHandle, type Doc } from \"@automerge/automerge-repo/slim\"\nimport makeDocumentProjection from \"./makeDocumentProjection.js\"\n\n/**\n * get a fine-grained live view of a document from a handle. works with\n * {@link useDocHandle}.\n * @param handle an accessor (signal/resource) of a\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n */\nexport default function createDocumentProjection<T extends object>(\n handle: Accessor<DocHandle<T> | undefined>\n): Accessor<Doc<T> | undefined> {\n const projection = createMemo<Doc<T> | undefined>(() => {\n const unwrappedHandle = typeof handle == \"function\" ? handle() : handle\n return unwrappedHandle && makeDocumentProjection<T>(unwrappedHandle)\n })\n return projection\n}\n","import type { Repo } from \"@automerge/automerge-repo/slim\"\nimport { createContext, type Context } from \"solid-js\"\n\n/**\n * a [context](https://docs.solidjs.com/concepts/context) that provides access\n * to an Automerge Repo. you don't need this, you can pass the repo in the\n * second arg to the functions that need it.\n */\nexport const RepoContext: Context<Repo | null> = createContext<Repo | null>(\n null\n)\n","import type {\n AutomergeUrl,\n DocHandle,\n DocumentId,\n HandleState,\n} from \"@automerge/automerge-repo/slim\"\nimport {\n createEffect,\n createResource,\n useContext,\n type Resource,\n} from \"solid-js\"\nimport { RepoContext } from \"./context.js\"\nimport type { MaybeAccessor, UseDocHandleOptions } from \"./types.js\"\nconst readyStates = [\"ready\", \"deleted\", \"unavailable\"] as HandleState[]\nconst badStates = [\"deleted\", \"unavailable\"] as HandleState[]\n\n/**\n * get a\n * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)\n * from an\n * [AutomergeUrl](https://automerge.org/automerge-repo/types/_automerge_automerge_repo.AutomergeUrl.html)\n * as a\n * [Resource](https://docs.solidjs.com/reference/basic-reactivity/create-resource).\n * Waits for the handle to be\n * [ready](https://automerge.org/automerge-repo/variables/_automerge_automerge_repo.HandleState-1.html).\n */\nexport default function useDocHandle<T>(\n url: MaybeAccessor<AutomergeUrl | undefined>,\n options?: UseDocHandleOptions\n): Resource<DocHandle<T> | undefined> {\n const contextRepo = useContext(RepoContext)\n\n if (!options?.repo && !contextRepo) {\n throw new Error(\"use outside <RepoContext> requires options.repo\")\n }\n\n const repo = (options?.repo || contextRepo)!\n\n function getExistingHandle() {\n if (options?.[\"~skipInitialValue\"]) return undefined\n const unwrappedURL = typeof url == \"function\" ? url() : url\n if (!unwrappedURL) return undefined\n try {\n const documentId = new URL(unwrappedURL).pathname as DocumentId\n const existingHandle = repo.handles[documentId]\n if (existingHandle?.isReady()) {\n return existingHandle as DocHandle<T>\n }\n } catch (error) {\n console.error(\"Error parsing URL:\", error)\n }\n }\n\n const [handle, { mutate }] = createResource(\n url,\n async url => {\n const handle = await repo.find<T>(url, {\n allowableStates: readyStates,\n })\n const reject = (state: HandleState) =>\n Promise.reject(new Error(`document not available: [${state}]`))\n\n if (handle.isReady()) {\n return handle\n } else if (handle.inState(badStates)) {\n return reject(handle.state)\n }\n\n return handle.whenReady(readyStates).then(() => {\n if (handle.isReady()) {\n return handle\n }\n return reject(handle.state)\n })\n },\n {\n initialValue: getExistingHandle(),\n }\n )\n\n createEffect(() => {\n const unwrappedURL = typeof url == \"function\" ? url() : url\n if (!unwrappedURL) {\n mutate()\n }\n })\n\n return handle\n}\n","import type {\n AutomergeUrl,\n Doc,\n DocHandle,\n} from \"@automerge/automerge-repo/slim\"\nimport createDocumentProjection from \"./createDocumentProjection.js\"\nimport useDocHandle from \"./useDocHandle.js\"\nimport type { MaybeAccessor, UseDocHandleOptions } from \"./types.js\"\nimport type { Accessor, Resource } from \"solid-js\"\n\n/**\n * get a fine-grained live view of a document, and its handle, from a URL.\n * @param url a function that returns a url\n */\nexport default function useDocument<T extends object>(\n url: MaybeAccessor<AutomergeUrl | undefined>,\n options?: UseDocHandleOptions\n): [Accessor<Doc<T> | undefined>, Resource<DocHandle<T> | undefined>] {\n const handle = useDocHandle<T>(url, options)\n return [createDocumentProjection<T>(handle), handle] as const\n}\n","import type { Repo } from \"@automerge/automerge-repo/slim\"\nimport { RepoContext } from \"./context.js\"\nimport { useContext } from \"solid-js\"\n\n/** grab the repo from the {@link RepoContext} */\nexport default function useRepo(): Repo {\n const repo = useContext(RepoContext)\n if (!repo) throw new Error(\"Please wrap me in a <RepoContext value={repo}>\")\n return repo\n}\n"],"names":["this","url","handle"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@automerge/automerge-repo-solid-primitives",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "Access Automerge Repo in your SolidJS application",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@automerge/automerge": "3.0.0",
|
|
17
|
-
"@automerge/automerge-repo": "2.5.
|
|
17
|
+
"@automerge/automerge-repo": "2.5.1",
|
|
18
18
|
"@solidjs/testing-library": "^0.8.9",
|
|
19
19
|
"@testing-library/jest-dom": "^6.6.3",
|
|
20
20
|
"@testing-library/user-event": "^14.5.2",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
]
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "66b8457234d04468e653b85d5cf58a9a3cd4c691"
|
|
47
47
|
}
|