use-abcd 1.6.1 → 1.6.2
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.map +1 -1
- package/dist/useCrudTree.d.ts +3 -3
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/mutative/dist/mutative.esm.mjs","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/_apply.js","../node_modules/lodash-es/_shortOut.js","../node_modules/lodash-es/constant.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_baseSetToString.js","../node_modules/lodash-es/_setToString.js","../node_modules/lodash-es/_arrayEach.js","../node_modules/lodash-es/_baseFindIndex.js","../node_modules/lodash-es/_baseAssignValue.js","../node_modules/lodash-es/_assignValue.js","../node_modules/lodash-es/_overRest.js","../node_modules/lodash-es/_baseRest.js","../node_modules/lodash-es/_isIterateeCall.js","../node_modules/lodash-es/_isFlattenable.js","../node_modules/lodash-es/_baseFlatten.js","../node_modules/lodash-es/_baseSlice.js","../node_modules/lodash-es/_hasUnicode.js","../node_modules/lodash-es/_baseClamp.js","../node_modules/lodash-es/clamp.js","../node_modules/lodash-es/_castFunction.js","../node_modules/lodash-es/forEach.js","../node_modules/lodash-es/_baseFilter.js","../node_modules/lodash-es/filter.js","../node_modules/lodash-es/_createFind.js","../node_modules/lodash-es/findIndex.js","../node_modules/lodash-es/find.js","../node_modules/lodash-es/head.js","../node_modules/lodash-es/_baseGt.js","../node_modules/lodash-es/isString.js","../node_modules/lodash-es/isEmpty.js","../node_modules/lodash-es/isEqual.js","../node_modules/lodash-es/join.js","../node_modules/lodash-es/_baseLt.js","../node_modules/lodash-es/_baseExtremum.js","../node_modules/lodash-es/maxBy.js","../node_modules/lodash-es/minBy.js","../node_modules/lodash-es/_baseSet.js","../node_modules/lodash-es/_baseSortBy.js","../node_modules/lodash-es/_compareAscending.js","../node_modules/lodash-es/_compareMultiple.js","../node_modules/lodash-es/_baseOrderBy.js","../node_modules/lodash-es/_asciiSize.js","../node_modules/lodash-es/_unicodeSize.js","../node_modules/lodash-es/_stringSize.js","../node_modules/lodash-es/set.js","../node_modules/lodash-es/size.js","../node_modules/lodash-es/sortBy.js","../node_modules/lodash-es/take.js","../src/sync-queue.ts","../src/cache.ts","../src/fetch-handler.ts","../src/item.ts","../src/node.ts","../src/collection.ts","../src/useCrud.ts","../src/useCrudTree.ts","../src/useItem.ts","../src/useNode.ts","../src/useSelectedNode.ts","../src/useSyncState.ts"],"sourcesContent":["const Operation = {\n Remove: 'remove',\n Replace: 'replace',\n Add: 'add',\n};\n\n// Don't use `Symbol()` just for 3rd party access the draft\nconst PROXY_DRAFT = Symbol.for('__MUTATIVE_PROXY_DRAFT__');\nconst RAW_RETURN_SYMBOL = Symbol('__MUTATIVE_RAW_RETURN_SYMBOL__');\nconst iteratorSymbol = Symbol.iterator;\nconst dataTypes = {\n mutable: 'mutable',\n immutable: 'immutable',\n};\n\nconst internal = {};\n\nfunction has(target, key) {\n return target instanceof Map\n ? target.has(key)\n : Object.prototype.hasOwnProperty.call(target, key);\n}\nfunction getDescriptor(target, key) {\n if (key in target) {\n let prototype = Reflect.getPrototypeOf(target);\n while (prototype) {\n const descriptor = Reflect.getOwnPropertyDescriptor(prototype, key);\n if (descriptor)\n return descriptor;\n prototype = Reflect.getPrototypeOf(prototype);\n }\n }\n return;\n}\nfunction isBaseSetInstance(obj) {\n return Object.getPrototypeOf(obj) === Set.prototype;\n}\nfunction isBaseMapInstance(obj) {\n return Object.getPrototypeOf(obj) === Map.prototype;\n}\n\nfunction latest(proxyDraft) {\n var _a;\n return (_a = proxyDraft.copy) !== null && _a !== void 0 ? _a : proxyDraft.original;\n}\n/**\n * Check if the value is a draft\n */\nfunction isDraft(target) {\n return !!getProxyDraft(target);\n}\nfunction getProxyDraft(value) {\n if (typeof value !== 'object')\n return null;\n return value === null || value === void 0 ? void 0 : value[PROXY_DRAFT];\n}\nfunction getValue(value) {\n var _a;\n const proxyDraft = getProxyDraft(value);\n return proxyDraft ? ((_a = proxyDraft.copy) !== null && _a !== void 0 ? _a : proxyDraft.original) : value;\n}\n/**\n * Check if a value is draftable\n */\nfunction isDraftable(value, options) {\n if (!value || typeof value !== 'object')\n return false;\n let markResult;\n return (Object.getPrototypeOf(value) === Object.prototype ||\n Array.isArray(value) ||\n value instanceof Map ||\n value instanceof Set ||\n (!!(options === null || options === void 0 ? void 0 : options.mark) &&\n ((markResult = options.mark(value, dataTypes)) === dataTypes.immutable ||\n typeof markResult === 'function')));\n}\nfunction getPath(target, path = []) {\n if (Object.hasOwnProperty.call(target, 'key')) {\n // check if the parent is a draft and the original value is not equal to the current value\n const parentCopy = target.parent.copy;\n const proxyDraft = getProxyDraft(get(parentCopy, target.key));\n if (proxyDraft !== null && (proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.original) !== target.original) {\n return null;\n }\n const isSet = target.parent.type === 3 /* DraftType.Set */;\n const key = isSet\n ? Array.from(target.parent.setMap.keys()).indexOf(target.key)\n : target.key;\n // check if the key is still in the next state parent\n if (!((isSet && parentCopy.size > key) || has(parentCopy, key)))\n return null;\n path.push(key);\n }\n if (target.parent) {\n return getPath(target.parent, path);\n }\n // `target` is root draft.\n path.reverse();\n try {\n // check if the path is valid\n resolvePath(target.copy, path);\n }\n catch (e) {\n return null;\n }\n return path;\n}\nfunction getType(target) {\n if (Array.isArray(target))\n return 1 /* DraftType.Array */;\n if (target instanceof Map)\n return 2 /* DraftType.Map */;\n if (target instanceof Set)\n return 3 /* DraftType.Set */;\n return 0 /* DraftType.Object */;\n}\nfunction get(target, key) {\n return getType(target) === 2 /* DraftType.Map */ ? target.get(key) : target[key];\n}\nfunction set(target, key, value) {\n const type = getType(target);\n if (type === 2 /* DraftType.Map */) {\n target.set(key, value);\n }\n else {\n target[key] = value;\n }\n}\nfunction peek(target, key) {\n const state = getProxyDraft(target);\n const source = state ? latest(state) : target;\n return source[key];\n}\nfunction isEqual(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n }\n else {\n return x !== x && y !== y;\n }\n}\nfunction revokeProxy(proxyDraft) {\n if (!proxyDraft)\n return;\n while (proxyDraft.finalities.revoke.length > 0) {\n const revoke = proxyDraft.finalities.revoke.pop();\n revoke();\n }\n}\n// handle JSON Pointer path with spec https://www.rfc-editor.org/rfc/rfc6901\nfunction escapePath(path, pathAsArray) {\n return pathAsArray\n ? path\n : ['']\n .concat(path)\n .map((_item) => {\n const item = `${_item}`;\n if (item.indexOf('/') === -1 && item.indexOf('~') === -1)\n return item;\n return item.replace(/~/g, '~0').replace(/\\//g, '~1');\n })\n .join('/');\n}\nfunction unescapePath(path) {\n if (Array.isArray(path))\n return path;\n return path\n .split('/')\n .map((_item) => _item.replace(/~1/g, '/').replace(/~0/g, '~'))\n .slice(1);\n}\nfunction resolvePath(base, path) {\n for (let index = 0; index < path.length - 1; index += 1) {\n const key = path[index];\n // use `index` in Set draft\n base = get(getType(base) === 3 /* DraftType.Set */ ? Array.from(base) : base, key);\n if (typeof base !== 'object') {\n throw new Error(`Cannot resolve patch at '${path.join('/')}'.`);\n }\n }\n return base;\n}\n\nfunction strictCopy(target) {\n const copy = Object.create(Object.getPrototypeOf(target));\n Reflect.ownKeys(target).forEach((key) => {\n let desc = Reflect.getOwnPropertyDescriptor(target, key);\n if (desc.enumerable && desc.configurable && desc.writable) {\n copy[key] = target[key];\n return;\n }\n // for freeze\n if (!desc.writable) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n desc = {\n configurable: true,\n writable: true,\n enumerable: desc.enumerable,\n value: target[key],\n };\n Reflect.defineProperty(copy, key, desc);\n });\n return copy;\n}\nconst propIsEnum = Object.prototype.propertyIsEnumerable;\nfunction shallowCopy(original, options) {\n let markResult;\n if (Array.isArray(original)) {\n return Array.prototype.concat.call(original);\n }\n else if (original instanceof Set) {\n if (!isBaseSetInstance(original)) {\n const SubClass = Object.getPrototypeOf(original).constructor;\n return new SubClass(original.values());\n }\n return Set.prototype.difference\n ? Set.prototype.difference.call(original, new Set())\n : new Set(original.values());\n }\n else if (original instanceof Map) {\n if (!isBaseMapInstance(original)) {\n const SubClass = Object.getPrototypeOf(original).constructor;\n return new SubClass(original);\n }\n return new Map(original);\n }\n else if ((options === null || options === void 0 ? void 0 : options.mark) &&\n ((markResult = options.mark(original, dataTypes)),\n markResult !== undefined) &&\n markResult !== dataTypes.mutable) {\n if (markResult === dataTypes.immutable) {\n return strictCopy(original);\n }\n else if (typeof markResult === 'function') {\n if ((options.enablePatches || options.enableAutoFreeze)) {\n throw new Error(`You can't use mark and patches or auto freeze together.`);\n }\n return markResult();\n }\n throw new Error(`Unsupported mark result: ${markResult}`);\n }\n else if (typeof original === 'object' &&\n Object.getPrototypeOf(original) === Object.prototype) {\n // For best performance with shallow copies,\n // don't use `Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));` by default.\n const copy = {};\n Object.keys(original).forEach((key) => {\n copy[key] = original[key];\n });\n Object.getOwnPropertySymbols(original).forEach((key) => {\n if (propIsEnum.call(original, key)) {\n copy[key] = original[key];\n }\n });\n return copy;\n }\n else {\n throw new Error(`Please check mark() to ensure that it is a stable marker draftable function.`);\n }\n}\nfunction ensureShallowCopy(target) {\n if (target.copy)\n return;\n target.copy = shallowCopy(target.original, target.options);\n}\nfunction deepClone(target) {\n if (!isDraftable(target))\n return getValue(target);\n if (Array.isArray(target))\n return target.map(deepClone);\n if (target instanceof Map) {\n const iterable = Array.from(target.entries()).map(([k, v]) => [\n k,\n deepClone(v),\n ]);\n if (!isBaseMapInstance(target)) {\n const SubClass = Object.getPrototypeOf(target).constructor;\n return new SubClass(iterable);\n }\n return new Map(iterable);\n }\n if (target instanceof Set) {\n const iterable = Array.from(target).map(deepClone);\n if (!isBaseSetInstance(target)) {\n const SubClass = Object.getPrototypeOf(target).constructor;\n return new SubClass(iterable);\n }\n return new Set(iterable);\n }\n const copy = Object.create(Object.getPrototypeOf(target));\n for (const key in target)\n copy[key] = deepClone(target[key]);\n return copy;\n}\nfunction cloneIfNeeded(target) {\n return isDraft(target) ? deepClone(target) : target;\n}\n\nfunction markChanged(proxyDraft) {\n var _a;\n proxyDraft.assignedMap = (_a = proxyDraft.assignedMap) !== null && _a !== void 0 ? _a : new Map();\n if (!proxyDraft.operated) {\n proxyDraft.operated = true;\n if (proxyDraft.parent) {\n markChanged(proxyDraft.parent);\n }\n }\n}\n\nfunction throwFrozenError() {\n throw new Error('Cannot modify frozen object');\n}\nfunction deepFreeze(target, subKey, updatedValues, stack, keys) {\n {\n updatedValues = updatedValues !== null && updatedValues !== void 0 ? updatedValues : new WeakMap();\n stack = stack !== null && stack !== void 0 ? stack : [];\n keys = keys !== null && keys !== void 0 ? keys : [];\n const value = updatedValues.has(target)\n ? updatedValues.get(target)\n : target;\n if (stack.length > 0) {\n const index = stack.indexOf(value);\n if (value && typeof value === 'object' && index !== -1) {\n if (stack[0] === value) {\n throw new Error(`Forbids circular reference`);\n }\n throw new Error(`Forbids circular reference: ~/${keys\n .slice(0, index)\n .map((key, index) => {\n if (typeof key === 'symbol')\n return `[${key.toString()}]`;\n const parent = stack[index];\n if (typeof key === 'object' &&\n (parent instanceof Map || parent instanceof Set))\n return Array.from(parent.keys()).indexOf(key);\n return key;\n })\n .join('/')}`);\n }\n stack.push(value);\n keys.push(subKey);\n }\n else {\n stack.push(value);\n }\n }\n if (Object.isFrozen(target) || isDraft(target)) {\n {\n stack.pop();\n keys.pop();\n }\n return;\n }\n const type = getType(target);\n switch (type) {\n case 2 /* DraftType.Map */:\n for (const [key, value] of target) {\n deepFreeze(key, key, updatedValues, stack, keys);\n deepFreeze(value, key, updatedValues, stack, keys);\n }\n target.set = target.clear = target.delete = throwFrozenError;\n break;\n case 3 /* DraftType.Set */:\n for (const value of target) {\n deepFreeze(value, value, updatedValues, stack, keys);\n }\n target.add = target.clear = target.delete = throwFrozenError;\n break;\n case 1 /* DraftType.Array */:\n Object.freeze(target);\n let index = 0;\n for (const value of target) {\n deepFreeze(value, index, updatedValues, stack, keys);\n index += 1;\n }\n break;\n default:\n Object.freeze(target);\n // ignore non-enumerable or symbol properties\n Object.keys(target).forEach((name) => {\n const value = target[name];\n deepFreeze(value, name, updatedValues, stack, keys);\n });\n }\n {\n stack.pop();\n keys.pop();\n }\n}\n\nfunction forEach(target, iter) {\n const type = getType(target);\n if (type === 0 /* DraftType.Object */) {\n Reflect.ownKeys(target).forEach((key) => {\n iter(key, target[key], target);\n });\n }\n else if (type === 1 /* DraftType.Array */) {\n let index = 0;\n for (const entry of target) {\n iter(index, entry, target);\n index += 1;\n }\n }\n else {\n target.forEach((entry, index) => iter(index, entry, target));\n }\n}\n\nfunction handleValue(target, handledSet, options) {\n if (isDraft(target) ||\n !isDraftable(target, options) ||\n handledSet.has(target) ||\n Object.isFrozen(target))\n return;\n const isSet = target instanceof Set;\n const setMap = isSet ? new Map() : undefined;\n handledSet.add(target);\n forEach(target, (key, value) => {\n var _a;\n if (isDraft(value)) {\n const proxyDraft = getProxyDraft(value);\n ensureShallowCopy(proxyDraft);\n // A draft where a child node has been changed, or assigned a value\n const updatedValue = ((_a = proxyDraft.assignedMap) === null || _a === void 0 ? void 0 : _a.size) || proxyDraft.operated\n ? proxyDraft.copy\n : proxyDraft.original;\n // final update value\n set(isSet ? setMap : target, key, updatedValue);\n }\n else {\n handleValue(value, handledSet, options);\n }\n });\n if (setMap) {\n const set = target;\n const values = Array.from(set);\n set.clear();\n values.forEach((value) => {\n set.add(setMap.has(value) ? setMap.get(value) : value);\n });\n }\n}\nfunction finalizeAssigned(proxyDraft, key) {\n // handle the draftable assigned values, and the value is not a draft\n const copy = proxyDraft.type === 3 /* DraftType.Set */ ? proxyDraft.setMap : proxyDraft.copy;\n if (proxyDraft.finalities.revoke.length > 1 &&\n proxyDraft.assignedMap.get(key) &&\n copy) {\n handleValue(get(copy, key), proxyDraft.finalities.handledSet, proxyDraft.options);\n }\n}\nfunction finalizeSetValue(target) {\n if (target.type === 3 /* DraftType.Set */ && target.copy) {\n target.copy.clear();\n target.setMap.forEach((value) => {\n target.copy.add(getValue(value));\n });\n }\n}\nfunction finalizePatches(target, generatePatches, patches, inversePatches) {\n const shouldFinalize = target.operated &&\n target.assignedMap &&\n target.assignedMap.size > 0 &&\n !target.finalized;\n if (shouldFinalize) {\n if (patches && inversePatches) {\n const basePath = getPath(target);\n if (basePath) {\n generatePatches(target, basePath, patches, inversePatches);\n }\n }\n target.finalized = true;\n }\n}\nfunction markFinalization(target, key, value, generatePatches) {\n const proxyDraft = getProxyDraft(value);\n if (proxyDraft) {\n // !case: assign the draft value\n if (!proxyDraft.callbacks) {\n proxyDraft.callbacks = [];\n }\n proxyDraft.callbacks.push((patches, inversePatches) => {\n var _a;\n const copy = target.type === 3 /* DraftType.Set */ ? target.setMap : target.copy;\n if (isEqual(get(copy, key), value)) {\n let updatedValue = proxyDraft.original;\n if (proxyDraft.copy) {\n updatedValue = proxyDraft.copy;\n }\n finalizeSetValue(target);\n finalizePatches(target, generatePatches, patches, inversePatches);\n if (target.options.enableAutoFreeze) {\n target.options.updatedValues =\n (_a = target.options.updatedValues) !== null && _a !== void 0 ? _a : new WeakMap();\n target.options.updatedValues.set(updatedValue, proxyDraft.original);\n }\n // final update value\n set(copy, key, updatedValue);\n }\n });\n if (target.options.enableAutoFreeze) {\n // !case: assign the draft value in cross draft tree\n if (proxyDraft.finalities !== target.finalities) {\n target.options.enableAutoFreeze = false;\n }\n }\n }\n if (isDraftable(value, target.options)) {\n // !case: assign the non-draft value\n target.finalities.draft.push(() => {\n const copy = target.type === 3 /* DraftType.Set */ ? target.setMap : target.copy;\n if (isEqual(get(copy, key), value)) {\n finalizeAssigned(target, key);\n }\n });\n }\n}\n\nfunction generateArrayPatches(proxyState, basePath, patches, inversePatches, pathAsArray) {\n let { original, assignedMap, options } = proxyState;\n let copy = proxyState.copy;\n if (copy.length < original.length) {\n [original, copy] = [copy, original];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let index = 0; index < original.length; index += 1) {\n if (assignedMap.get(index.toString()) && copy[index] !== original[index]) {\n const _path = basePath.concat([index]);\n const path = escapePath(_path, pathAsArray);\n patches.push({\n op: Operation.Replace,\n path,\n // If it is a draft, it needs to be deep cloned, and it may also be non-draft.\n value: cloneIfNeeded(copy[index]),\n });\n inversePatches.push({\n op: Operation.Replace,\n path,\n // If it is a draft, it needs to be deep cloned, and it may also be non-draft.\n value: cloneIfNeeded(original[index]),\n });\n }\n }\n for (let index = original.length; index < copy.length; index += 1) {\n const _path = basePath.concat([index]);\n const path = escapePath(_path, pathAsArray);\n patches.push({\n op: Operation.Add,\n path,\n // If it is a draft, it needs to be deep cloned, and it may also be non-draft.\n value: cloneIfNeeded(copy[index]),\n });\n }\n if (original.length < copy.length) {\n // https://www.rfc-editor.org/rfc/rfc6902#appendix-A.4\n // For performance, here we only generate an operation that replaces the length of the array,\n // which is inconsistent with JSON Patch specification\n const { arrayLengthAssignment = true } = options.enablePatches;\n if (arrayLengthAssignment) {\n const _path = basePath.concat(['length']);\n const path = escapePath(_path, pathAsArray);\n inversePatches.push({\n op: Operation.Replace,\n path,\n value: original.length,\n });\n }\n else {\n for (let index = copy.length; original.length < index; index -= 1) {\n const _path = basePath.concat([index - 1]);\n const path = escapePath(_path, pathAsArray);\n inversePatches.push({\n op: Operation.Remove,\n path,\n });\n }\n }\n }\n}\nfunction generatePatchesFromAssigned({ original, copy, assignedMap }, basePath, patches, inversePatches, pathAsArray) {\n assignedMap.forEach((assignedValue, key) => {\n const originalValue = get(original, key);\n const value = cloneIfNeeded(get(copy, key));\n const op = !assignedValue\n ? Operation.Remove\n : has(original, key)\n ? Operation.Replace\n : Operation.Add;\n if (isEqual(originalValue, value) && op === Operation.Replace)\n return;\n const _path = basePath.concat(key);\n const path = escapePath(_path, pathAsArray);\n patches.push(op === Operation.Remove ? { op, path } : { op, path, value });\n inversePatches.push(op === Operation.Add\n ? { op: Operation.Remove, path }\n : op === Operation.Remove\n ? { op: Operation.Add, path, value: originalValue }\n : { op: Operation.Replace, path, value: originalValue });\n });\n}\nfunction generateSetPatches({ original, copy }, basePath, patches, inversePatches, pathAsArray) {\n let index = 0;\n original.forEach((value) => {\n if (!copy.has(value)) {\n const _path = basePath.concat([index]);\n const path = escapePath(_path, pathAsArray);\n patches.push({\n op: Operation.Remove,\n path,\n value,\n });\n inversePatches.unshift({\n op: Operation.Add,\n path,\n value,\n });\n }\n index += 1;\n });\n index = 0;\n copy.forEach((value) => {\n if (!original.has(value)) {\n const _path = basePath.concat([index]);\n const path = escapePath(_path, pathAsArray);\n patches.push({\n op: Operation.Add,\n path,\n value,\n });\n inversePatches.unshift({\n op: Operation.Remove,\n path,\n value,\n });\n }\n index += 1;\n });\n}\nfunction generatePatches(proxyState, basePath, patches, inversePatches) {\n const { pathAsArray = true } = proxyState.options.enablePatches;\n switch (proxyState.type) {\n case 0 /* DraftType.Object */:\n case 2 /* DraftType.Map */:\n return generatePatchesFromAssigned(proxyState, basePath, patches, inversePatches, pathAsArray);\n case 1 /* DraftType.Array */:\n return generateArrayPatches(proxyState, basePath, patches, inversePatches, pathAsArray);\n case 3 /* DraftType.Set */:\n return generateSetPatches(proxyState, basePath, patches, inversePatches, pathAsArray);\n }\n}\n\nlet readable = false;\nconst checkReadable = (value, options, ignoreCheckDraftable = false) => {\n if (typeof value === 'object' &&\n value !== null &&\n (!isDraftable(value, options) || ignoreCheckDraftable) &&\n !readable) {\n throw new Error(`Strict mode: Mutable data cannot be accessed directly, please use 'unsafe(callback)' wrap.`);\n }\n};\n/**\n * `unsafe(callback)` to access mutable data directly in strict mode.\n *\n * ## Example\n *\n * ```ts\n * import { create, unsafe } from '../index';\n *\n * class Foobar {\n * bar = 1;\n * }\n *\n * const baseState = { foobar: new Foobar() };\n * const state = create(\n * baseState,\n * (draft) => {\n * unsafe(() => {\n * draft.foobar.bar = 2;\n * });\n * },\n * {\n * strict: true,\n * }\n * );\n *\n * expect(state).toBe(baseState);\n * expect(state.foobar).toBe(baseState.foobar);\n * expect(state.foobar.bar).toBe(2);\n * ```\n */\nfunction unsafe(callback) {\n readable = true;\n let result;\n try {\n result = callback();\n }\n finally {\n readable = false;\n }\n return result;\n}\n\nconst mapHandler = {\n get size() {\n const current = latest(getProxyDraft(this));\n return current.size;\n },\n has(key) {\n return latest(getProxyDraft(this)).has(key);\n },\n set(key, value) {\n const target = getProxyDraft(this);\n const source = latest(target);\n if (!source.has(key) || !isEqual(source.get(key), value)) {\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap.set(key, true);\n target.copy.set(key, value);\n markFinalization(target, key, value, generatePatches);\n }\n return this;\n },\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const target = getProxyDraft(this);\n ensureShallowCopy(target);\n markChanged(target);\n if (target.original.has(key)) {\n target.assignedMap.set(key, false);\n }\n else {\n target.assignedMap.delete(key);\n }\n target.copy.delete(key);\n return true;\n },\n clear() {\n const target = getProxyDraft(this);\n if (!this.size)\n return;\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap = new Map();\n for (const [key] of target.original) {\n target.assignedMap.set(key, false);\n }\n target.copy.clear();\n },\n forEach(callback, thisArg) {\n const target = getProxyDraft(this);\n latest(target).forEach((_value, _key) => {\n callback.call(thisArg, this.get(_key), _key, this);\n });\n },\n get(key) {\n var _a, _b;\n const target = getProxyDraft(this);\n const value = latest(target).get(key);\n const mutable = ((_b = (_a = target.options).mark) === null || _b === void 0 ? void 0 : _b.call(_a, value, dataTypes)) === dataTypes.mutable;\n if (target.options.strict) {\n checkReadable(value, target.options, mutable);\n }\n if (mutable) {\n return value;\n }\n if (target.finalized || !isDraftable(value, target.options)) {\n return value;\n }\n // drafted or reassigned\n if (value !== target.original.get(key)) {\n return value;\n }\n const draft = internal.createDraft({\n original: value,\n parentDraft: target,\n key,\n finalities: target.finalities,\n options: target.options,\n });\n ensureShallowCopy(target);\n target.copy.set(key, draft);\n return draft;\n },\n keys() {\n return latest(getProxyDraft(this)).keys();\n },\n values() {\n const iterator = this.keys();\n return {\n [iteratorSymbol]: () => this.values(),\n next: () => {\n const result = iterator.next();\n if (result.done)\n return result;\n const value = this.get(result.value);\n return {\n done: false,\n value,\n };\n },\n };\n },\n entries() {\n const iterator = this.keys();\n return {\n [iteratorSymbol]: () => this.entries(),\n next: () => {\n const result = iterator.next();\n if (result.done)\n return result;\n const value = this.get(result.value);\n return {\n done: false,\n value: [result.value, value],\n };\n },\n };\n },\n [iteratorSymbol]() {\n return this.entries();\n },\n};\nconst mapHandlerKeys = Reflect.ownKeys(mapHandler);\n\nconst getNextIterator = (target, iterator, { isValuesIterator }) => () => {\n var _a, _b;\n const result = iterator.next();\n if (result.done)\n return result;\n const key = result.value;\n let value = target.setMap.get(key);\n const currentDraft = getProxyDraft(value);\n const mutable = ((_b = (_a = target.options).mark) === null || _b === void 0 ? void 0 : _b.call(_a, value, dataTypes)) === dataTypes.mutable;\n if (target.options.strict) {\n checkReadable(key, target.options, mutable);\n }\n if (!mutable &&\n !currentDraft &&\n isDraftable(key, target.options) &&\n !target.finalized &&\n target.original.has(key)) {\n // draft a draftable original set item\n const proxy = internal.createDraft({\n original: key,\n parentDraft: target,\n key,\n finalities: target.finalities,\n options: target.options,\n });\n target.setMap.set(key, proxy);\n value = proxy;\n }\n else if (currentDraft) {\n // drafted\n value = currentDraft.proxy;\n }\n return {\n done: false,\n value: isValuesIterator ? value : [value, value],\n };\n};\nconst setHandler = {\n get size() {\n const target = getProxyDraft(this);\n return target.setMap.size;\n },\n has(value) {\n const target = getProxyDraft(this);\n // reassigned or non-draftable values\n if (target.setMap.has(value))\n return true;\n ensureShallowCopy(target);\n const valueProxyDraft = getProxyDraft(value);\n // drafted\n if (valueProxyDraft && target.setMap.has(valueProxyDraft.original))\n return true;\n return false;\n },\n add(value) {\n const target = getProxyDraft(this);\n if (!this.has(value)) {\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap.set(value, true);\n target.setMap.set(value, value);\n markFinalization(target, value, value, generatePatches);\n }\n return this;\n },\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const target = getProxyDraft(this);\n ensureShallowCopy(target);\n markChanged(target);\n const valueProxyDraft = getProxyDraft(value);\n if (valueProxyDraft && target.setMap.has(valueProxyDraft.original)) {\n // delete drafted\n target.assignedMap.set(valueProxyDraft.original, false);\n return target.setMap.delete(valueProxyDraft.original);\n }\n if (!valueProxyDraft && target.setMap.has(value)) {\n // non-draftable values\n target.assignedMap.set(value, false);\n }\n else {\n // reassigned\n target.assignedMap.delete(value);\n }\n // delete reassigned or non-draftable values\n return target.setMap.delete(value);\n },\n clear() {\n if (!this.size)\n return;\n const target = getProxyDraft(this);\n ensureShallowCopy(target);\n markChanged(target);\n for (const value of target.original) {\n target.assignedMap.set(value, false);\n }\n target.setMap.clear();\n },\n values() {\n const target = getProxyDraft(this);\n ensureShallowCopy(target);\n const iterator = target.setMap.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: getNextIterator(target, iterator, { isValuesIterator: true }),\n };\n },\n entries() {\n const target = getProxyDraft(this);\n ensureShallowCopy(target);\n const iterator = target.setMap.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: getNextIterator(target, iterator, {\n isValuesIterator: false,\n }),\n };\n },\n keys() {\n return this.values();\n },\n [iteratorSymbol]() {\n return this.values();\n },\n forEach(callback, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n },\n};\nif (Set.prototype.difference) {\n // for compatibility with new Set methods\n // https://github.com/tc39/proposal-set-methods\n // And `https://github.com/tc39/proposal-set-methods/blob/main/details.md#symbolspecies` has some details about the `@@species` symbol.\n // So we can't use SubSet instance constructor to get the constructor of the SubSet instance.\n Object.assign(setHandler, {\n intersection(other) {\n return Set.prototype.intersection.call(new Set(this.values()), other);\n },\n union(other) {\n return Set.prototype.union.call(new Set(this.values()), other);\n },\n difference(other) {\n return Set.prototype.difference.call(new Set(this.values()), other);\n },\n symmetricDifference(other) {\n return Set.prototype.symmetricDifference.call(new Set(this.values()), other);\n },\n isSubsetOf(other) {\n return Set.prototype.isSubsetOf.call(new Set(this.values()), other);\n },\n isSupersetOf(other) {\n return Set.prototype.isSupersetOf.call(new Set(this.values()), other);\n },\n isDisjointFrom(other) {\n return Set.prototype.isDisjointFrom.call(new Set(this.values()), other);\n },\n });\n}\nconst setHandlerKeys = Reflect.ownKeys(setHandler);\n\nconst proxyHandler = {\n get(target, key, receiver) {\n var _a, _b;\n const copy = (_a = target.copy) === null || _a === void 0 ? void 0 : _a[key];\n // Improve draft reading performance by caching the draft copy.\n if (copy && target.finalities.draftsCache.has(copy)) {\n return copy;\n }\n if (key === PROXY_DRAFT)\n return target;\n let markResult;\n if (target.options.mark) {\n // handle `Uncaught TypeError: Method get Map.prototype.size called on incompatible receiver #<Map>`\n // or `Uncaught TypeError: Method get Set.prototype.size called on incompatible receiver #<Set>`\n const value = key === 'size' &&\n (target.original instanceof Map || target.original instanceof Set)\n ? Reflect.get(target.original, key)\n : Reflect.get(target.original, key, receiver);\n markResult = target.options.mark(value, dataTypes);\n if (markResult === dataTypes.mutable) {\n if (target.options.strict) {\n checkReadable(value, target.options, true);\n }\n return value;\n }\n }\n const source = latest(target);\n if (source instanceof Map && mapHandlerKeys.includes(key)) {\n if (key === 'size') {\n return Object.getOwnPropertyDescriptor(mapHandler, 'size').get.call(target.proxy);\n }\n const handle = mapHandler[key];\n return handle.bind(target.proxy);\n }\n if (source instanceof Set && setHandlerKeys.includes(key)) {\n if (key === 'size') {\n return Object.getOwnPropertyDescriptor(setHandler, 'size').get.call(target.proxy);\n }\n const handle = setHandler[key];\n return handle.bind(target.proxy);\n }\n if (!has(source, key)) {\n const desc = getDescriptor(source, key);\n return desc\n ? `value` in desc\n ? desc.value\n : // !case: support for getter\n (_b = desc.get) === null || _b === void 0 ? void 0 : _b.call(target.proxy)\n : undefined;\n }\n const value = source[key];\n if (target.options.strict) {\n checkReadable(value, target.options);\n }\n if (target.finalized || !isDraftable(value, target.options)) {\n return value;\n }\n // Ensure that the assigned values are not drafted\n if (value === peek(target.original, key)) {\n ensureShallowCopy(target);\n target.copy[key] = createDraft({\n original: target.original[key],\n parentDraft: target,\n key: target.type === 1 /* DraftType.Array */ ? Number(key) : key,\n finalities: target.finalities,\n options: target.options,\n });\n // !case: support for custom shallow copy function\n if (typeof markResult === 'function') {\n const subProxyDraft = getProxyDraft(target.copy[key]);\n ensureShallowCopy(subProxyDraft);\n // Trigger a custom shallow copy to update to a new copy\n markChanged(subProxyDraft);\n return subProxyDraft.copy;\n }\n return target.copy[key];\n }\n if (isDraft(value)) {\n target.finalities.draftsCache.add(value);\n }\n return value;\n },\n set(target, key, value) {\n var _a;\n if (target.type === 3 /* DraftType.Set */ || target.type === 2 /* DraftType.Map */) {\n throw new Error(`Map/Set draft does not support any property assignment.`);\n }\n let _key;\n if (target.type === 1 /* DraftType.Array */ &&\n key !== 'length' &&\n !(Number.isInteger((_key = Number(key))) &&\n _key >= 0 &&\n (key === 0 || _key === 0 || String(_key) === String(key)))) {\n throw new Error(`Only supports setting array indices and the 'length' property.`);\n }\n const desc = getDescriptor(latest(target), key);\n if (desc === null || desc === void 0 ? void 0 : desc.set) {\n // !case: cover the case of setter\n desc.set.call(target.proxy, value);\n return true;\n }\n const current = peek(latest(target), key);\n const currentProxyDraft = getProxyDraft(current);\n if (currentProxyDraft && isEqual(currentProxyDraft.original, value)) {\n // !case: ignore the case of assigning the original draftable value to a draft\n target.copy[key] = value;\n target.assignedMap = (_a = target.assignedMap) !== null && _a !== void 0 ? _a : new Map();\n target.assignedMap.set(key, false);\n return true;\n }\n // !case: handle new props with value 'undefined'\n if (isEqual(value, current) &&\n (value !== undefined || has(target.original, key)))\n return true;\n ensureShallowCopy(target);\n markChanged(target);\n if (has(target.original, key) && isEqual(value, target.original[key])) {\n // !case: handle the case of assigning the original non-draftable value to a draft\n target.assignedMap.delete(key);\n }\n else {\n target.assignedMap.set(key, true);\n }\n target.copy[key] = value;\n markFinalization(target, key, value, generatePatches);\n return true;\n },\n has(target, key) {\n return key in latest(target);\n },\n ownKeys(target) {\n return Reflect.ownKeys(latest(target));\n },\n getOwnPropertyDescriptor(target, key) {\n const source = latest(target);\n const descriptor = Reflect.getOwnPropertyDescriptor(source, key);\n if (!descriptor)\n return descriptor;\n return {\n writable: true,\n configurable: target.type !== 1 /* DraftType.Array */ || key !== 'length',\n enumerable: descriptor.enumerable,\n value: source[key],\n };\n },\n getPrototypeOf(target) {\n return Reflect.getPrototypeOf(target.original);\n },\n setPrototypeOf() {\n throw new Error(`Cannot call 'setPrototypeOf()' on drafts`);\n },\n defineProperty() {\n throw new Error(`Cannot call 'defineProperty()' on drafts`);\n },\n deleteProperty(target, key) {\n var _a;\n if (target.type === 1 /* DraftType.Array */) {\n return proxyHandler.set.call(this, target, key, undefined, target.proxy);\n }\n if (peek(target.original, key) !== undefined || key in target.original) {\n // !case: delete an existing key\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap.set(key, false);\n }\n else {\n target.assignedMap = (_a = target.assignedMap) !== null && _a !== void 0 ? _a : new Map();\n // The original non-existent key has been deleted\n target.assignedMap.delete(key);\n }\n if (target.copy)\n delete target.copy[key];\n return true;\n },\n};\nfunction createDraft(createDraftOptions) {\n const { original, parentDraft, key, finalities, options } = createDraftOptions;\n const type = getType(original);\n const proxyDraft = {\n type,\n finalized: false,\n parent: parentDraft,\n original,\n copy: null,\n proxy: null,\n finalities,\n options,\n // Mapping of draft Set items to their corresponding draft values.\n setMap: type === 3 /* DraftType.Set */\n ? new Map(original.entries())\n : undefined,\n };\n // !case: undefined as a draft map key\n if (key || 'key' in createDraftOptions) {\n proxyDraft.key = key;\n }\n const { proxy, revoke } = Proxy.revocable(type === 1 /* DraftType.Array */ ? Object.assign([], proxyDraft) : proxyDraft, proxyHandler);\n finalities.revoke.push(revoke);\n proxyDraft.proxy = proxy;\n if (parentDraft) {\n const target = parentDraft;\n target.finalities.draft.push((patches, inversePatches) => {\n var _a, _b;\n const oldProxyDraft = getProxyDraft(proxy);\n // if target is a Set draft, `setMap` is the real Set copies proxy mapping.\n let copy = target.type === 3 /* DraftType.Set */ ? target.setMap : target.copy;\n const draft = get(copy, key);\n const proxyDraft = getProxyDraft(draft);\n if (proxyDraft) {\n // assign the updated value to the copy object\n let updatedValue = proxyDraft.original;\n if (proxyDraft.operated) {\n updatedValue = getValue(draft);\n }\n finalizeSetValue(proxyDraft);\n finalizePatches(proxyDraft, generatePatches, patches, inversePatches);\n if (target.options.enableAutoFreeze) {\n target.options.updatedValues =\n (_a = target.options.updatedValues) !== null && _a !== void 0 ? _a : new WeakMap();\n target.options.updatedValues.set(updatedValue, proxyDraft.original);\n }\n // final update value\n set(copy, key, updatedValue);\n }\n // !case: handle the deleted key\n (_b = oldProxyDraft.callbacks) === null || _b === void 0 ? void 0 : _b.forEach((callback) => {\n callback(patches, inversePatches);\n });\n });\n }\n else {\n // !case: handle the root draft\n const target = getProxyDraft(proxy);\n target.finalities.draft.push((patches, inversePatches) => {\n finalizeSetValue(target);\n finalizePatches(target, generatePatches, patches, inversePatches);\n });\n }\n return proxy;\n}\ninternal.createDraft = createDraft;\nfunction finalizeDraft(result, returnedValue, patches, inversePatches, enableAutoFreeze) {\n var _a;\n const proxyDraft = getProxyDraft(result);\n const original = (_a = proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.original) !== null && _a !== void 0 ? _a : result;\n const hasReturnedValue = !!returnedValue.length;\n if (proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.operated) {\n while (proxyDraft.finalities.draft.length > 0) {\n const finalize = proxyDraft.finalities.draft.pop();\n finalize(patches, inversePatches);\n }\n }\n const state = hasReturnedValue\n ? returnedValue[0]\n : proxyDraft\n ? proxyDraft.operated\n ? proxyDraft.copy\n : proxyDraft.original\n : result;\n if (proxyDraft)\n revokeProxy(proxyDraft);\n if (enableAutoFreeze) {\n deepFreeze(state, state, proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.options.updatedValues);\n }\n return [\n state,\n patches && hasReturnedValue\n ? [{ op: Operation.Replace, path: [], value: returnedValue[0] }]\n : patches,\n inversePatches && hasReturnedValue\n ? [{ op: Operation.Replace, path: [], value: original }]\n : inversePatches,\n ];\n}\n\nfunction draftify(baseState, options) {\n var _a;\n const finalities = {\n draft: [],\n revoke: [],\n handledSet: new WeakSet(),\n draftsCache: new WeakSet(),\n };\n let patches;\n let inversePatches;\n if (options.enablePatches) {\n patches = [];\n inversePatches = [];\n }\n const isMutable = ((_a = options.mark) === null || _a === void 0 ? void 0 : _a.call(options, baseState, dataTypes)) === dataTypes.mutable ||\n !isDraftable(baseState, options);\n const draft = isMutable\n ? baseState\n : createDraft({\n original: baseState,\n parentDraft: null,\n finalities,\n options,\n });\n return [\n draft,\n (returnedValue = []) => {\n const [finalizedState, finalizedPatches, finalizedInversePatches] = finalizeDraft(draft, returnedValue, patches, inversePatches, options.enableAutoFreeze);\n return (options.enablePatches\n ? [finalizedState, finalizedPatches, finalizedInversePatches]\n : finalizedState);\n },\n ];\n}\n\nfunction handleReturnValue(options) {\n const { rootDraft, value, useRawReturn = false, isRoot = true } = options;\n forEach(value, (key, item, source) => {\n const proxyDraft = getProxyDraft(item);\n // just handle the draft which is created by the same rootDraft\n if (proxyDraft &&\n rootDraft &&\n proxyDraft.finalities === rootDraft.finalities) {\n options.isContainDraft = true;\n const currentValue = proxyDraft.original;\n // final update value, but just handle return value\n if (source instanceof Set) {\n const arr = Array.from(source);\n source.clear();\n arr.forEach((_item) => source.add(key === _item ? currentValue : _item));\n }\n else {\n set(source, key, currentValue);\n }\n }\n else if (typeof item === 'object' && item !== null) {\n options.value = item;\n options.isRoot = false;\n handleReturnValue(options);\n }\n });\n if (isRoot) {\n if (!options.isContainDraft)\n console.warn(`The return value does not contain any draft, please use 'rawReturn()' to wrap the return value to improve performance.`);\n if (useRawReturn) {\n console.warn(`The return value contains drafts, please don't use 'rawReturn()' to wrap the return value.`);\n }\n }\n}\nfunction getCurrent(target) {\n var _a;\n const proxyDraft = getProxyDraft(target);\n if (!isDraftable(target, proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.options))\n return target;\n const type = getType(target);\n if (proxyDraft && !proxyDraft.operated)\n return proxyDraft.original;\n let currentValue;\n function ensureShallowCopy() {\n currentValue =\n type === 2 /* DraftType.Map */\n ? !isBaseMapInstance(target)\n ? new (Object.getPrototypeOf(target).constructor)(target)\n : new Map(target)\n : type === 3 /* DraftType.Set */\n ? Array.from(proxyDraft.setMap.values())\n : shallowCopy(target, proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.options);\n }\n if (proxyDraft) {\n // It's a proxy draft, let's create a shallow copy eagerly\n proxyDraft.finalized = true;\n try {\n ensureShallowCopy();\n }\n finally {\n proxyDraft.finalized = false;\n }\n }\n else {\n // It's not a proxy draft, let's use the target directly and let's see\n // lazily if we need to create a shallow copy\n currentValue = target;\n }\n forEach(currentValue, (key, value) => {\n if (proxyDraft && isEqual(get(proxyDraft.original, key), value))\n return;\n const newValue = getCurrent(value);\n if (newValue !== value) {\n if (currentValue === target)\n ensureShallowCopy();\n set(currentValue, key, newValue);\n }\n });\n if (type === 3 /* DraftType.Set */) {\n const value = (_a = proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.original) !== null && _a !== void 0 ? _a : currentValue;\n return !isBaseSetInstance(value)\n ? new (Object.getPrototypeOf(value).constructor)(currentValue)\n : new Set(currentValue);\n }\n return currentValue;\n}\nfunction current(target) {\n if (!isDraft(target)) {\n throw new Error(`current() is only used for Draft, parameter: ${target}`);\n }\n return getCurrent(target);\n}\n\n/**\n * `makeCreator(options)` to make a creator function.\n *\n * ## Example\n *\n * ```ts\n * import { makeCreator } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const create = makeCreator({ enableAutoFreeze: true });\n * const state = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * },\n * );\n *\n * expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });\n * expect(state).not.toBe(baseState);\n * expect(state.foo).not.toBe(baseState.foo);\n * expect(state.arr).toBe(baseState.arr);\n * expect(Object.isFrozen(state)).toBeTruthy();\n * ```\n */\nconst makeCreator = (arg) => {\n if (arg !== undefined &&\n Object.prototype.toString.call(arg) !== '[object Object]') {\n throw new Error(`Invalid options: ${String(arg)}, 'options' should be an object.`);\n }\n return function create(arg0, arg1, arg2) {\n var _a, _b, _c;\n if (typeof arg0 === 'function' && typeof arg1 !== 'function') {\n return function (base, ...args) {\n return create(base, (draft) => arg0.call(this, draft, ...args), arg1);\n };\n }\n const base = arg0;\n const mutate = arg1;\n let options = arg2;\n if (typeof arg1 !== 'function') {\n options = arg1;\n }\n if (options !== undefined &&\n Object.prototype.toString.call(options) !== '[object Object]') {\n throw new Error(`Invalid options: ${options}, 'options' should be an object.`);\n }\n options = Object.assign(Object.assign({}, arg), options);\n const state = isDraft(base) ? current(base) : base;\n const mark = Array.isArray(options.mark)\n ? ((value, types) => {\n for (const mark of options.mark) {\n if (typeof mark !== 'function') {\n throw new Error(`Invalid mark: ${mark}, 'mark' should be a function.`);\n }\n const result = mark(value, types);\n if (result) {\n return result;\n }\n }\n return;\n })\n : options.mark;\n const enablePatches = (_a = options.enablePatches) !== null && _a !== void 0 ? _a : false;\n const strict = (_b = options.strict) !== null && _b !== void 0 ? _b : false;\n const enableAutoFreeze = (_c = options.enableAutoFreeze) !== null && _c !== void 0 ? _c : false;\n const _options = {\n enableAutoFreeze,\n mark,\n strict,\n enablePatches,\n };\n if (!isDraftable(state, _options) &&\n typeof state === 'object' &&\n state !== null) {\n throw new Error(`Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.`);\n }\n const [draft, finalize] = draftify(state, _options);\n if (typeof arg1 !== 'function') {\n if (!isDraftable(state, _options)) {\n throw new Error(`Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.`);\n }\n return [draft, finalize];\n }\n let result;\n try {\n result = mutate(draft);\n }\n catch (error) {\n revokeProxy(getProxyDraft(draft));\n throw error;\n }\n const returnValue = (value) => {\n const proxyDraft = getProxyDraft(draft);\n if (!isDraft(value)) {\n if (value !== undefined &&\n !isEqual(value, draft) &&\n (proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.operated)) {\n throw new Error(`Either the value is returned as a new non-draft value, or only the draft is modified without returning any value.`);\n }\n const rawReturnValue = value === null || value === void 0 ? void 0 : value[RAW_RETURN_SYMBOL];\n if (rawReturnValue) {\n const _value = rawReturnValue[0];\n if (_options.strict && typeof value === 'object' && value !== null) {\n handleReturnValue({\n rootDraft: proxyDraft,\n value,\n useRawReturn: true,\n });\n }\n return finalize([_value]);\n }\n if (value !== undefined) {\n if (typeof value === 'object' && value !== null) {\n handleReturnValue({ rootDraft: proxyDraft, value });\n }\n return finalize([value]);\n }\n }\n if (value === draft || value === undefined) {\n return finalize([]);\n }\n const returnedProxyDraft = getProxyDraft(value);\n if (_options === returnedProxyDraft.options) {\n if (returnedProxyDraft.operated) {\n throw new Error(`Cannot return a modified child draft.`);\n }\n return finalize([current(value)]);\n }\n return finalize([value]);\n };\n if (result instanceof Promise) {\n return result.then(returnValue, (error) => {\n revokeProxy(getProxyDraft(draft));\n throw error;\n });\n }\n return returnValue(result);\n };\n};\n\n/**\n * `create(baseState, callback, options)` to create the next state\n *\n * ## Example\n *\n * ```ts\n * import { create } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const state = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * },\n * );\n *\n * expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });\n * expect(state).not.toBe(baseState);\n * expect(state.foo).not.toBe(baseState.foo);\n * expect(state.arr).toBe(baseState.arr);\n * ```\n */\nconst create = makeCreator();\n\n/**\n * `apply(state, patches)` to apply patches to state\n *\n * ## Example\n *\n * ```ts\n * import { create, apply } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const [state, patches] = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * },\n * { enablePatches: true }\n * );\n * expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });\n * expect(patches).toEqual([{ op: 'replace', path: ['foo', 'bar'], value: 'str2' }]);\n * expect(state).toEqual(apply(baseState, patches));\n * ```\n */\nfunction apply(state, patches, applyOptions) {\n let i;\n for (i = patches.length - 1; i >= 0; i -= 1) {\n const { value, op, path } = patches[i];\n if ((!path.length && op === Operation.Replace) ||\n (path === '' && op === Operation.Add)) {\n state = value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const mutate = (draft) => {\n patches.forEach((patch) => {\n const { path: _path, op } = patch;\n const path = unescapePath(_path);\n let base = draft;\n for (let index = 0; index < path.length - 1; index += 1) {\n const parentType = getType(base);\n let key = path[index];\n if (typeof key !== 'string' && typeof key !== 'number') {\n key = String(key);\n }\n if (((parentType === 0 /* DraftType.Object */ ||\n parentType === 1 /* DraftType.Array */) &&\n (key === '__proto__' || key === 'constructor')) ||\n (typeof base === 'function' && key === 'prototype')) {\n throw new Error(`Patching reserved attributes like __proto__ and constructor is not allowed.`);\n }\n // use `index` in Set draft\n base = get(parentType === 3 /* DraftType.Set */ ? Array.from(base) : base, key);\n if (typeof base !== 'object') {\n throw new Error(`Cannot apply patch at '${path.join('/')}'.`);\n }\n }\n const type = getType(base);\n // ensure the original patch is not modified.\n const value = deepClone(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case Operation.Replace:\n switch (type) {\n case 2 /* DraftType.Map */:\n return base.set(key, value);\n case 3 /* DraftType.Set */:\n throw new Error(`Cannot apply replace patch to set.`);\n default:\n return (base[key] = value);\n }\n case Operation.Add:\n switch (type) {\n case 1 /* DraftType.Array */:\n // If the \"-\" character is used to\n // index the end of the array (see [RFC6901](https://datatracker.ietf.org/doc/html/rfc6902)),\n // this has the effect of appending the value to the array.\n return key === '-'\n ? base.push(value)\n : base.splice(key, 0, value);\n case 2 /* DraftType.Map */:\n return base.set(key, value);\n case 3 /* DraftType.Set */:\n return base.add(value);\n default:\n return (base[key] = value);\n }\n case Operation.Remove:\n switch (type) {\n case 1 /* DraftType.Array */:\n return base.splice(key, 1);\n case 2 /* DraftType.Map */:\n return base.delete(key);\n case 3 /* DraftType.Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n throw new Error(`Unsupported patch operation: ${op}.`);\n }\n });\n };\n if (applyOptions === null || applyOptions === void 0 ? void 0 : applyOptions.mutable) {\n {\n if (Object.keys(applyOptions).filter((key) => key !== 'mutable').length) {\n console.warn('The \"mutable\" option is not allowed to be used with other options.');\n }\n }\n mutate(state);\n return undefined;\n }\n if (isDraft(state)) {\n if (applyOptions !== undefined) {\n throw new Error(`Cannot apply patches with options to a draft.`);\n }\n mutate(state);\n return state;\n }\n return create(state, mutate, Object.assign(Object.assign({}, applyOptions), { enablePatches: false }));\n}\n\n/**\n * `original(draft)` to get original state in the draft mutation function.\n *\n * ## Example\n *\n * ```ts\n * import { create, original } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const state = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * expect(original(draft.foo)).toEqual({ bar: 'str' });\n * }\n * );\n * ```\n */\nfunction original(target) {\n const proxyDraft = getProxyDraft(target);\n if (!proxyDraft) {\n throw new Error(`original() is only used for a draft, parameter: ${target}`);\n }\n return proxyDraft.original;\n}\n\n/**\n * Use rawReturn() to wrap the return value to skip the draft check and thus improve performance.\n *\n * ## Example\n *\n * ```ts\n * import { create, rawReturn } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const state = create(\n * baseState,\n * (draft) => {\n * return rawReturn(baseState);\n * },\n * );\n * expect(state).toBe(baseState);\n * ```\n */\nfunction rawReturn(value) {\n if (arguments.length === 0) {\n throw new Error('rawReturn() must be called with a value.');\n }\n if (arguments.length > 1) {\n throw new Error('rawReturn() must be called with one argument.');\n }\n if (value !== undefined &&\n (typeof value !== 'object' || value === null)) {\n console.warn('rawReturn() must be called with an object(including plain object, arrays, Set, Map, etc.) or `undefined`, other types do not need to be returned via rawReturn().');\n }\n return {\n [RAW_RETURN_SYMBOL]: [value],\n };\n}\n\nconst constructorString = Object.prototype.constructor.toString();\n/**\n * Check if the value is a simple object(No prototype chain object or iframe same-origin object),\n * support case: https://github.com/unadlib/mutative/issues/17\n */\nconst isSimpleObject = (value) => {\n if (!value || typeof value !== 'object')\n return false;\n const prototype = Object.getPrototypeOf(value);\n if (prototype === null) {\n return true;\n }\n const constructor = Object.hasOwnProperty.call(prototype, 'constructor') &&\n prototype.constructor;\n if (constructor === Object)\n return true;\n return (typeof constructor === 'function' &&\n Function.toString.call(constructor) === constructorString);\n};\nconst markSimpleObject = (value) => {\n if (isSimpleObject(value)) {\n return dataTypes.immutable;\n }\n return;\n};\n\n/**\n * Cast a value to an Draft type value.\n */\nfunction castDraft(value) {\n return value;\n}\n/**\n * Cast a value to an Immutable type value.\n */\nfunction castImmutable(value) {\n return value;\n}\n/**\n * Cast a value to an Mutable type value.\n */\nfunction castMutable(draft) {\n return draft;\n}\n\nexport { apply, castDraft, castImmutable, castMutable, create, current, isDraft, isDraftable, makeCreator, markSimpleObject, original, rawReturn, unsafe };\n//# sourceMappingURL=mutative.esm.mjs.map\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nexport default baseFilter;\n","import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default filter;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nexport default createFind;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nexport default find;\n","/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n return (array && array.length) ? array[0] : undefined;\n}\n\nexport default head;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nexport default baseGt;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeJoin = arrayProto.join;\n\n/**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\nfunction join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n}\n\nexport default join;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nfunction maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseGt)\n : undefined;\n}\n\nexport default maxBy;\n","import baseExtremum from './_baseExtremum.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseLt from './_baseLt.js';\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n : undefined;\n}\n\nexport default minBy;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nexport default baseSortBy;\n","import isSymbol from './isSymbol.js';\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nexport default compareAscending;\n","import compareAscending from './_compareAscending.js';\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nexport default compareMultiple;\n","import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nexport default baseOrderBy;\n","import baseProperty from './_baseProperty.js';\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nexport default asciiSize;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n}\n\nexport default unicodeSize;\n","import asciiSize from './_asciiSize.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeSize from './_unicodeSize.js';\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n}\n\nexport default stringSize;\n","import baseSet from './_baseSet.js';\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nexport default set;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport stringSize from './_stringSize.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n}\n\nexport default size;\n","import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nexport default sortBy;\n","import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\nfunction take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n}\n\nexport default take;\n","import { create, type Draft } from \"mutative\";\nimport { size, isEmpty, get, take } from \"lodash-es\";\nimport type { Change, SyncQueueState, SyncResponse } from \"./types\";\n\nexport type SyncQueueConfig<T, C = unknown> = {\n debounce: number;\n maxRetries: number;\n batchSize?: number;\n getContext?: () => C;\n onSync: (changes: Change<T>[], context: C, signal: AbortSignal) => Promise<SyncResponse<T>>;\n onServerItems?: (items: T[]) => void;\n};\n\n/**\n * Coalesce two operations on the same item into a single operation.\n *\n * Rules:\n * - create + delete = null (net zero)\n * - create + update = create (with new data)\n * - update + update = update (with new data)\n * - update + delete = delete\n * - any other = replace with new\n */\nconst coalesce = <T>(existing: Change<T> | undefined, next: Change<T>): Change<T> | null => {\n if (!existing) return next;\n\n if (existing.type === \"create\" && next.type === \"delete\") return null;\n if (existing.type === \"create\" && next.type === \"update\") return { ...existing, data: next.data };\n if (existing.type === \"update\" && next.type === \"update\") return next;\n if (existing.type === \"update\" && next.type === \"delete\") return next;\n\n return next;\n};\n\nexport class SyncQueue<T extends { id: string }, C = unknown> {\n private _config: SyncQueueConfig<T, C>;\n private _state: SyncQueueState<T>;\n private _subscribers = new Set<() => void>();\n private _debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private _abortController: AbortController | null = null;\n\n constructor(config: SyncQueueConfig<T, C>) {\n this._config = config;\n this._state = {\n queue: new Map(),\n inFlight: new Map(),\n errors: new Map(),\n isPaused: false,\n isSyncing: false,\n };\n }\n\n enqueue(change: Change<T>): void {\n this._updateState((draft) => {\n const existing = draft.queue.get(change.id) as Change<T> | undefined;\n const coalesced = coalesce(existing, change);\n\n if (coalesced) {\n draft.queue.set(change.id, coalesced as Draft<Change<T>>);\n } else {\n draft.queue.delete(change.id);\n }\n draft.errors.delete(change.id);\n });\n this._scheduleFlush();\n }\n\n pause(): void {\n this._updateState((draft) => {\n draft.isPaused = true;\n });\n this._clearTimer();\n }\n\n resume(): void {\n this._updateState((draft) => {\n draft.isPaused = false;\n });\n if (this._state.queue.size > 0) this._scheduleFlush();\n }\n\n retryAll(): void {\n const errors = this._state.errors;\n if (errors.size === 0) return;\n\n this._updateState((draft) => {\n for (const [id, errorInfo] of errors) {\n if (!draft.queue.has(id)) {\n draft.queue.set(id, errorInfo.operation as Draft<Change<T>>);\n }\n }\n draft.errors.clear();\n });\n this._scheduleFlush();\n }\n\n retry(id: string): void {\n const errorInfo = this._state.errors.get(id);\n if (!errorInfo) return;\n\n this._updateState((draft) => {\n if (!draft.queue.has(id)) {\n draft.queue.set(id, errorInfo.operation as Draft<Change<T>>);\n }\n draft.errors.delete(id);\n });\n this._scheduleFlush();\n }\n\n resetRetries(id: string): void {\n if (!this._state.errors.has(id)) return;\n this._updateState((draft) => {\n const error = draft.errors.get(id);\n if (error) error.retries = 0;\n });\n }\n\n destroy(): void {\n this._clearTimer();\n this._abortController?.abort(\"SyncQueue destroyed\");\n this._abortController = null;\n this._subscribers.clear();\n this._state = {\n queue: new Map(),\n inFlight: new Map(),\n errors: new Map(),\n isPaused: false,\n isSyncing: false,\n };\n }\n\n getState(): SyncQueueState<T> {\n return this._state;\n }\n\n subscribe(callback: () => void): () => void {\n this._subscribers.add(callback);\n return () => this._subscribers.delete(callback);\n }\n\n private _updateState(mutator: (draft: Draft<SyncQueueState<T>>) => void): void {\n this._state = create(this._state, mutator);\n this._subscribers.forEach((cb) => cb());\n }\n\n private _scheduleFlush(): void {\n if (this._state.isPaused || this._state.isSyncing) return;\n this._clearTimer();\n this._debounceTimer = setTimeout(() => this._flush(), this._config.debounce);\n }\n\n private _clearTimer(): void {\n if (this._debounceTimer) {\n clearTimeout(this._debounceTimer);\n this._debounceTimer = null;\n }\n }\n\n private async _flush(): Promise<void> {\n const { isPaused, isSyncing, queue } = this._state;\n if (isPaused || isSyncing || isEmpty(queue)) return;\n\n const batchSize = get(this._config, \"batchSize\", Infinity);\n const queueEntries = [...queue.entries()];\n const entriesToProcess = take(queueEntries, batchSize);\n const remainingEntries = queueEntries.slice(size(entriesToProcess));\n\n this._updateState((draft) => {\n draft.inFlight = new Map(entriesToProcess) as Draft<Map<string, Change<T>>>;\n draft.queue = new Map(remainingEntries) as Draft<Map<string, Change<T>>>;\n draft.isSyncing = true;\n });\n\n const changes = [...this._state.inFlight.values()];\n const context = this._config.getContext?.() as C;\n this._abortController = new AbortController();\n\n try {\n const response = await this._config.onSync(changes, context, this._abortController.signal);\n this._processResponse(response);\n } catch (error) {\n this._handleError(error);\n }\n\n this._abortController = null;\n\n if (size(this._state.queue) > 0 && !this._state.isPaused) this._scheduleFlush();\n }\n\n private _processResponse(response: SyncResponse<T>): void {\n const inFlight = this._state.inFlight;\n const resultMap = new Map((response.syncResults ?? []).map((r) => [r.id, r] as const));\n\n this._updateState((draft) => {\n for (const [id, op] of inFlight) {\n const result = resultMap.get(id);\n\n if (result?.status === \"success\") {\n draft.errors.delete(id);\n } else {\n const retries = (draft.errors.get(id)?.retries ?? 0) + 1;\n if (retries < this._config.maxRetries && !draft.queue.has(id)) {\n draft.queue.set(id, op as Draft<Change<T>>);\n }\n draft.errors.set(id, {\n error: result?.error ?? \"Unknown error\",\n retries,\n operation: op as Draft<Change<T>>,\n });\n }\n }\n draft.inFlight = new Map();\n draft.isSyncing = false;\n });\n\n // Notify about extra server items (not in the change list)\n if (this._config.onServerItems && size(response.items) > 0) {\n const changeIds = new Set((response.syncResults ?? []).map((r) => r.id));\n const extraItems = (response.items ?? []).filter(\n (item: unknown) => !changeIds.has((item as T).id),\n );\n if (size(extraItems) > 0) {\n this._config.onServerItems(extraItems);\n }\n }\n }\n\n private _handleError(error: unknown): void {\n const inFlight = this._state.inFlight;\n const isAborted = get(this._abortController, \"signal.aborted\", false);\n const errorMsg = error instanceof Error ? error.message : String(error);\n\n this._updateState((draft) => {\n for (const [id, op] of inFlight) {\n if (isAborted) {\n if (!draft.queue.has(id)) draft.queue.set(id, op as Draft<Change<T>>);\n } else {\n const retries = (draft.errors.get(id)?.retries ?? 0) + 1;\n if (retries < this._config.maxRetries && !draft.queue.has(id)) {\n draft.queue.set(id, op as Draft<Change<T>>);\n }\n draft.errors.set(id, {\n error: errorMsg,\n retries,\n operation: op as Draft<Change<T>>,\n });\n }\n }\n draft.inFlight = new Map();\n draft.isSyncing = false;\n });\n }\n}\n","type CacheEntry<T> = { data: T; ts: number };\n\nexport class Cache<T> {\n private _cache = new Map<string, CacheEntry<T>>();\n private _capacity: number;\n private _ttl: number;\n\n constructor(capacity: number, ttl: number) {\n this._capacity = capacity;\n this._ttl = ttl;\n }\n\n get(key: string): T | null {\n const entry = this._cache.get(key);\n if (!entry) return null;\n\n if (Date.now() - entry.ts > this._ttl) {\n this._cache.delete(key);\n return null;\n }\n\n // Move to end (most recently used) for LRU\n this._cache.delete(key);\n this._cache.set(key, entry);\n return entry.data;\n }\n\n set(key: string, value: T): void {\n if (this._cache.has(key)) {\n this._cache.delete(key);\n } else if (this._cache.size >= this._capacity) {\n const firstKey = this._cache.keys().next().value;\n if (firstKey !== undefined) this._cache.delete(firstKey);\n }\n\n this._cache.set(key, { data: value, ts: Date.now() });\n }\n\n invalidate(key: string): void {\n this._cache.delete(key);\n }\n\n clear(): void {\n this._cache.clear();\n }\n\n has(key: string): boolean {\n return this.get(key) !== null;\n }\n\n get size(): number {\n return this._cache.size;\n }\n}\n","import { create } from \"mutative\";\nimport { Cache } from \"./cache\";\nimport type { FetchState } from \"./types\";\n\nexport type FetchHandlerConfig<T, C> = {\n id: string;\n cacheCapacity: number;\n cacheTtl: number;\n retries?: number;\n onFetch: (context: C, signal: AbortSignal) => Promise<T[]>;\n};\n\nexport type FetchHandlerState<T> = {\n status: FetchState;\n items: T[];\n error?: string;\n retryCount?: number;\n};\n\nexport class FetchHandler<T, C> {\n private _config: FetchHandlerConfig<T, C>;\n private _cache: Cache<T[]>;\n private _state: FetchHandlerState<T> = { status: \"idle\", items: [] };\n private _subscribers = new Set<() => void>();\n private _abortController: AbortController | null = null;\n private _currentContext: C | null = null;\n\n constructor(config: FetchHandlerConfig<T, C>) {\n this._config = { retries: 0, ...config };\n this._cache = new Cache<T[]>(config.cacheCapacity, config.cacheTtl);\n }\n\n private _getCacheKey = (context: C): string => JSON.stringify([this._config.id, context]);\n\n private _setState(patch: Partial<FetchHandlerState<T>>): void {\n this._state = create(this._state, (draft) => {\n Object.assign(draft, patch);\n });\n this._subscribers.forEach((cb) => cb());\n }\n\n private async _fetchWithRetry(context: C, signal: AbortSignal): Promise<T[]> {\n const maxRetries = this._config.retries!;\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n if (signal.aborted) throw new DOMException(\"Aborted\", \"AbortError\");\n\n try {\n if (attempt > 0) this._setState({ retryCount: attempt });\n return await this._config.onFetch(context, signal);\n } catch (error) {\n lastError = error;\n if (signal.aborted || attempt === maxRetries) throw error;\n }\n }\n\n throw lastError;\n }\n\n async fetch(context: C): Promise<T[]> {\n const cacheKey = this._getCacheKey(context);\n const cached = this._cache.get(cacheKey);\n\n if (cached !== null) {\n this._currentContext = context;\n this._setState({ status: \"idle\", items: cached, error: undefined, retryCount: undefined });\n return cached;\n }\n\n this._abortController?.abort(\"New fetch request started\");\n const abortController = new AbortController();\n this._abortController = abortController;\n this._currentContext = context;\n this._setState({ status: \"fetching\", error: undefined, retryCount: undefined });\n\n try {\n const items = await this._fetchWithRetry(context, abortController.signal);\n this._cache.set(cacheKey, items);\n this._abortController = null;\n this._setState({ status: \"idle\", items, error: undefined, retryCount: undefined });\n return items;\n } catch (error) {\n // If this request was aborted, return current items silently\n if (abortController.signal.aborted) return this._state.items;\n\n this._abortController = null;\n this._setState({\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n }\n\n async refresh(context?: C): Promise<T[]> {\n const ctx = context ?? this._currentContext;\n if (!ctx) throw new Error(\"No context provided for refresh\");\n\n this._cache.invalidate(this._getCacheKey(ctx));\n return this.fetch(ctx);\n }\n\n invalidateCache(): void {\n this._cache.clear();\n }\n\n invalidateCacheForContext(context: C): void {\n this._cache.invalidate(this._getCacheKey(context));\n }\n\n destroy(): void {\n this._abortController?.abort(\"FetchHandler destroyed\");\n this._abortController = null;\n this._cache.clear();\n this._subscribers.clear();\n this._currentContext = null;\n this._state = { status: \"idle\", items: [] };\n }\n\n getState = (): FetchHandlerState<T> => this._state;\n getContext = (): C | null => this._currentContext;\n isFetching = (): boolean => this._state.status === \"fetching\";\n\n subscribe(callback: () => void): () => void {\n this._subscribers.add(callback);\n return () => {\n this._subscribers.delete(callback);\n };\n }\n}\n","import { isEqual } from \"lodash-es\";\nimport type { Draft } from \"mutative\";\nimport type { Collection } from \"./collection\";\nimport type { ItemStatus } from \"./types\";\n\nexport class Item<T extends { id: string }, C = unknown> {\n private _collection: Collection<T, C>;\n private _id: string;\n private _cachedStatus: ItemStatus = null;\n\n constructor(collection: Collection<T, C>, id: string) {\n this._collection = collection;\n this._id = id;\n }\n\n get id(): string {\n return this._id;\n }\n\n get data(): T | undefined {\n return this._collection.getState().items.get(this._id);\n }\n\n update(mutate: (draft: Draft<T>) => void): void {\n this._collection.update(this._id, mutate);\n }\n\n remove(): void {\n this._collection.remove(this._id);\n }\n\n getStatus(): ItemStatus {\n const newStatus = this._collection.getItemStatus(this._id);\n if (!isEqual(this._cachedStatus, newStatus)) {\n this._cachedStatus = newStatus;\n }\n return this._cachedStatus;\n }\n\n exists(): boolean {\n return this._collection.getState().items.has(this._id);\n }\n\n get collection(): Collection<T, C> {\n return this._collection;\n }\n}\n","import {\n sortBy,\n map,\n isEqual,\n join,\n get,\n head,\n find,\n findIndex,\n filter,\n maxBy,\n minBy,\n forEach,\n size,\n clamp,\n} from \"lodash-es\";\nimport type { Draft } from \"mutative\";\nimport type { Collection } from \"./collection\";\nimport type { ItemStatus } from \"./types\";\nimport { getIdFromTime } from \"./utils\";\n\nconst DEFAULT_SEPARATOR = \".\";\n\nfunction getParentId(nodeId: string, separator: string): string | null {\n const idx = nodeId.lastIndexOf(separator);\n return idx === -1 ? null : nodeId.slice(0, idx);\n}\n\nfunction isDirectChild(nodeId: string, parentId: string, separator: string): boolean {\n if (!nodeId.startsWith(parentId + separator)) return false;\n return !nodeId.slice(parentId.length + 1).includes(separator);\n}\n\nfunction isDescendant(nodeId: string, ancestorId: string, separator: string): boolean {\n return nodeId.startsWith(ancestorId + separator);\n}\n\nfunction getDepth(nodeId: string, separator: string): number {\n // Zero-based: \"root\" = 0, \"root.child\" = 1, \"root.child.grandchild\" = 2\n return nodeId.split(separator).length - 1;\n}\n\nexport type TreeNode<T, NodeType = string> = {\n id: string;\n position: number;\n value: T;\n type: NodeType;\n clientUpdatedAt?: number;\n};\n\nexport class Node<T extends object, C = unknown, NodeType = string> {\n private _id: string;\n private _collection: Collection<TreeNode<T, NodeType>, C>;\n private _cachedStatus: ItemStatus = null;\n\n constructor(collection: Collection<TreeNode<T, NodeType>, C>, id: string) {\n this._collection = collection;\n this._id = id;\n }\n\n private get _separator(): string {\n return this._collection.config.nodeSeparator ?? DEFAULT_SEPARATOR;\n }\n\n get id(): string {\n return this._id;\n }\n\n get data(): TreeNode<T, NodeType> | undefined {\n return this._collection.getState().items.get(this._id);\n }\n\n get collection(): Collection<TreeNode<T, NodeType>, C> {\n return this._collection;\n }\n\n get depth(): number {\n return getDepth(this._id, this._separator);\n }\n\n exists(): boolean {\n return this._collection.getState().items.has(this._id);\n }\n\n getStatus(): ItemStatus {\n const newStatus = this._collection.getItemStatus(this._id);\n if (!isEqual(this._cachedStatus, newStatus)) {\n this._cachedStatus = newStatus;\n }\n return this._cachedStatus;\n }\n\n private _touch(id: string): void {\n if (this._collection.items.has(id)) {\n this._collection.update(id, (draft) => {\n draft.clientUpdatedAt = Date.now();\n });\n }\n }\n\n getParent(): Node<T, C, NodeType> | null {\n const parentId = getParentId(this._id, this._separator);\n return parentId ? this._collection.getNode<T, NodeType>(parentId) : null;\n }\n\n getChildren(): Node<T, C, NodeType>[] {\n const items = [...this._collection.items.entries()];\n const childEntries = map(\n filter(items, ([id]) => isDirectChild(id, this._id, this._separator)),\n ([id, data]) => ({ id, position: (data as TreeNode<T, NodeType>).position }),\n );\n\n const sorted = sortBy(childEntries, \"position\");\n return map(sorted, (entry) => this._collection.getNode<T, NodeType>(entry.id));\n }\n\n private _generateChildId(): string {\n const { getNodeId } = this._collection.config;\n const nodeId = getNodeId ? getNodeId() : getIdFromTime();\n return join([this._id, nodeId], this._separator);\n }\n\n moveUp(): void {\n const nodeData = this.data;\n if (!nodeData) return;\n\n const parentId = getParentId(this._id, this._separator);\n if (!parentId) return;\n\n const parentNode = this._collection.getNode<T, NodeType>(parentId);\n const siblings = parentNode.getChildren();\n const idx = findIndex(siblings, (s) => s.id === this._id);\n\n if (idx <= 0) return;\n\n const prevSibling = siblings[idx - 1];\n const prevData = prevSibling.data;\n if (!prevData) return;\n\n const currentPosition = nodeData.position;\n this._collection.batch(() => {\n this._collection.update(prevSibling.id, (draft) => {\n draft.position = currentPosition;\n });\n this._collection.update(this._id, (draft) => {\n draft.position = prevData.position;\n });\n this._touch(parentId);\n });\n }\n\n moveDown(): void {\n const nodeData = this.data;\n if (!nodeData) return;\n\n const parentId = getParentId(this._id, this._separator);\n if (!parentId) return;\n\n const parentNode = this._collection.getNode<T, NodeType>(parentId);\n const siblings = parentNode.getChildren();\n const idx = findIndex(siblings, (s) => s.id === this._id);\n\n if (idx === -1 || idx >= size(siblings) - 1) return;\n\n const nextSibling = siblings[idx + 1];\n const nextData = nextSibling.data;\n if (!nextData) return;\n\n const currentPosition = nodeData.position;\n this._collection.batch(() => {\n this._collection.update(nextSibling.id, (draft) => {\n draft.position = currentPosition;\n });\n this._collection.update(this._id, (draft) => {\n draft.position = nextData.position;\n });\n this._touch(parentId);\n });\n }\n\n setPosition(targetIndex: number): void {\n const nodeData = this.data;\n if (!nodeData) return;\n\n const parentId = getParentId(this._id, this._separator);\n if (!parentId) return;\n\n const parentNode = this._collection.getNode<T, NodeType>(parentId);\n const siblings = parentNode.getChildren();\n const currentIndex = findIndex(siblings, (s) => s.id === this._id);\n\n if (currentIndex === -1) return;\n\n const clampedIndex = clamp(targetIndex, 0, size(siblings) - 1);\n if (clampedIndex === currentIndex) return;\n\n // Remove from current position, insert at target, reassign positions\n const reordered = [...siblings];\n const [removed] = reordered.splice(currentIndex, 1);\n reordered.splice(clampedIndex, 0, removed);\n\n this._collection.batch(() => {\n forEach(reordered, (sibling, index) => {\n const siblingData = sibling.data;\n if (siblingData && siblingData.position !== index) {\n this._collection.update(sibling.id, (draft) => {\n draft.position = index;\n });\n }\n });\n this._touch(parentId);\n });\n }\n\n append(value: T, type: NodeType = \"object\" as NodeType): string {\n const children = this.getChildren();\n const maxChild = maxBy(children, (c) => get(c, \"data.position\", 0));\n const maxPosition = maxChild ? get(maxChild, \"data.position\", 0) : -1;\n const position = maxPosition + 1;\n const newId = this._generateChildId();\n\n const newNode: TreeNode<T, NodeType> = { id: newId, position, value, type };\n this._collection.batch(() => {\n this._collection.create(newNode);\n this._touch(this._id);\n });\n return newId;\n }\n\n prepend(value: T, type: NodeType = \"object\" as NodeType): string {\n const children = this.getChildren();\n const minChild = minBy(children, (c) => get(c, \"data.position\", 0));\n const minPosition = minChild ? get(minChild, \"data.position\", 0) : 1;\n const position = minPosition - 1;\n const newId = this._generateChildId();\n\n const newNode: TreeNode<T, NodeType> = { id: newId, position, value, type };\n this._collection.batch(() => {\n this._collection.create(newNode);\n this._touch(this._id);\n });\n return newId;\n }\n\n /**\n * Move node to a new position within the same parent (reordering)\n * or to a different parent (reparenting).\n *\n * @param targetPosition - The target position among siblings\n * @param targetParent - Optional target parent node. If not provided, moves within current parent.\n */\n move(targetPosition: number, targetParent?: Node<T, C, NodeType>): void {\n const nodeData = this.data;\n if (!nodeData) return;\n\n const currentParentId = getParentId(this._id, this._separator);\n if (!currentParentId) return; // Can't move root\n\n // If no target parent, move within current parent (reordering)\n if (!targetParent) {\n const currentPosition = nodeData.position;\n if (currentPosition === targetPosition) return;\n\n const parentNode = this._collection.getNode<T, NodeType>(currentParentId);\n const siblings = parentNode.getChildren();\n const targetSibling = find(siblings, (s) => get(s, \"data.position\") === targetPosition);\n\n this._collection.batch(() => {\n if (targetSibling) {\n this._collection.update(targetSibling.id, (draft) => {\n draft.position = currentPosition;\n });\n }\n this._collection.update(this._id, (draft) => {\n draft.position = targetPosition;\n });\n this._touch(currentParentId);\n });\n return;\n }\n\n // Reparenting: clone to new parent and remove original\n if (targetParent.id === currentParentId) {\n // Same parent - just reorder\n this.move(targetPosition);\n return;\n }\n\n // Prevent moving a node into itself or its descendants\n if (targetParent.id === this._id || isDescendant(targetParent.id, this._id, this._separator)) {\n return;\n }\n\n // Clone this subtree with new IDs under target parent\n const clonedSubset = this.clone();\n\n this._collection.batch(() => {\n // Add cloned nodes under target parent\n targetParent._mergeClonedSubset(clonedSubset, targetPosition);\n\n // Remove original nodes\n this.remove();\n });\n }\n\n /**\n * Clone this node and all its descendants into a Map with remapped IDs.\n * The root of the clone has a temporary ID that will be remapped when merged.\n * @returns Map of cloned nodes keyed by their relative path from clone root\n */\n clone(): Map<string, TreeNode<T, NodeType>> {\n const nodeData = this.data;\n if (!nodeData) return new Map();\n\n const { getNodeId } = this._collection.config;\n const cloneRootId = getNodeId ? getNodeId() : getIdFromTime();\n const result = new Map<string, TreeNode<T, NodeType>>();\n\n // Clone self\n result.set(cloneRootId, {\n id: cloneRootId,\n position: nodeData.position,\n value: nodeData.value,\n type: nodeData.type,\n });\n\n // Clone all descendants with remapped IDs\n const descendants = filter([...this._collection.items.entries()], ([id]) =>\n isDescendant(id, this._id, this._separator),\n );\n\n forEach(descendants, ([id, data]) => {\n // Calculate relative path from this node\n const relativePath = id.slice(this._id.length + 1);\n const newId = join([cloneRootId, relativePath], this._separator);\n\n const treeData = data as TreeNode<T, NodeType>;\n result.set(newId, {\n id: newId,\n position: treeData.position,\n value: treeData.value,\n type: treeData.type,\n });\n });\n\n return result;\n }\n\n /**\n * Internal method to merge a cloned subset under this node.\n * The cloned nodes will have their IDs prefixed with this node's ID.\n */\n _mergeClonedSubset(\n clonedSubset: Map<string, TreeNode<T, NodeType>>,\n position?: number,\n ): string | undefined {\n if (clonedSubset.size === 0) return undefined;\n\n const keys = [...clonedSubset.keys()];\n\n // Find the root of the clone (should be a single top-level entry)\n // The root is the one with no separator in its key (just the generated ID)\n let cloneRootKey = find(keys, (key) => !key.includes(this._separator));\n\n if (!cloneRootKey) {\n // Fallback: find the shortest key\n cloneRootKey = head(sortBy(keys, (k) => k.length));\n }\n\n if (!cloneRootKey) return undefined;\n\n // Generate new ID for the merged root\n const newRootId = this._generateChildId();\n\n // Calculate position\n let targetPosition: number;\n if (position !== undefined) {\n targetPosition = position;\n } else {\n const children = this.getChildren();\n const maxChild = maxBy(children, (c) => get(c, \"data.position\", 0));\n const maxPosition = maxChild ? get(maxChild, \"data.position\", 0) : -1;\n targetPosition = maxPosition + 1;\n }\n\n // Add all cloned nodes with new IDs\n forEach([...clonedSubset.entries()], ([cloneId, cloneData]) => {\n let newId: string;\n if (cloneId === cloneRootKey) {\n newId = newRootId;\n } else {\n // Replace the clone root prefix with the new root ID\n const suffix = cloneId.slice(cloneRootKey.length);\n newId = join([newRootId, suffix.slice(this._separator.length)], this._separator);\n }\n\n const newNode: TreeNode<T, NodeType> = {\n id: newId,\n position: cloneId === cloneRootKey ? targetPosition : cloneData.position,\n value: cloneData.value,\n type: cloneData.type,\n };\n this._collection.create(newNode);\n });\n\n this._touch(this._id);\n return newRootId;\n }\n\n updateProp(mutate: (draft: Draft<T>) => void): void {\n this._collection.update(this._id, (draft) => {\n mutate(draft.value);\n });\n }\n\n remove(): void {\n const parentId = getParentId(this._id, this._separator);\n const items = [...this._collection.items.keys()];\n const descendantIds = map(\n filter(items, (id) => isDescendant(id, this._id, this._separator)),\n (id) => id,\n );\n const toRemove = [this._id, ...descendantIds];\n\n this._collection.batch(() => {\n const sorted = sortBy(toRemove, (id) => -getDepth(id, this._separator));\n forEach(sorted, (id) => this._collection.remove(id));\n if (parentId) this._touch(parentId);\n });\n }\n\n select(): void {\n this._collection.selectNode(this._id);\n }\n}\n","import { create, type Draft } from \"mutative\";\nimport { map, set } from \"lodash-es\";\nimport { SyncQueue } from \"./sync-queue\";\nimport { FetchHandler } from \"./fetch-handler\";\nimport { Item } from \"./item\";\nimport { Node, type TreeNode } from \"./node\";\nimport type {\n Config,\n SyncState,\n Mutator,\n ItemStatus,\n SyncQueueState,\n FetchState,\n Change,\n} from \"./types\";\n\nexport type CollectionState<T, C> = {\n context: C;\n items: Map<string, T>;\n syncState: SyncState;\n loading: boolean;\n syncing: boolean;\n syncQueue: SyncQueueState<T>;\n fetchStatus: FetchState;\n fetchError?: string;\n};\n\nexport function buildServerSnapshot<T extends { id: string }, C>(\n config: Config<T, C>,\n): CollectionState<T, C> {\n const items = new Map<string, T>();\n if (config.serverItems) {\n for (const item of config.serverItems) {\n items.set(item.id, item);\n }\n }\n return {\n context: config.initialContext,\n items,\n syncState: \"idle\",\n loading: false,\n syncing: false,\n syncQueue: {\n queue: new Map(),\n inFlight: new Map(),\n errors: new Map(),\n isSyncing: false,\n isPaused: false,\n },\n fetchStatus: \"idle\",\n fetchError: undefined,\n };\n}\n\nexport class Collection<T extends { id: string }, C> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _cache = new Map<string, Collection<any, any>>();\n\n static get<T extends { id: string }, C>(config: Config<T, C>): Collection<T, C> {\n const existing = Collection._cache.get(config.id);\n if (existing) return existing as Collection<T, C>;\n const collection = new Collection(config);\n Collection._cache.set(config.id, collection);\n return collection;\n }\n\n static clear(id: string): void {\n Collection._cache.get(id)?.destroy();\n }\n\n static clearAll(): void {\n Collection._cache.forEach((c) => c.destroy());\n }\n\n static getById<T extends { id: string }, C>(id: string): Collection<T, C> | undefined {\n return Collection._cache.get(id) as Collection<T, C> | undefined;\n }\n\n readonly id: string;\n readonly config: Config<T, C>;\n\n private _state: CollectionState<T, C>;\n private _syncQueue: SyncQueue<T, C>;\n private _fetchHandler: FetchHandler<T, C>;\n private _itemCache: WeakMap<T & object, Item<T, C>> = new WeakMap();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _nodeCache: WeakMap<TreeNode<any, any> & object, Node<any, C, any>> = new WeakMap();\n private _selectedNodeId: string | null = null;\n private _subscribers: Set<() => void> = new Set();\n private _hasInitialized = false;\n private _batchMode = false;\n\n constructor(config: Config<T, C>) {\n this.id = config.id;\n this.config = config;\n\n // Derive fetch/sync from unified handler\n const fetchFn = config.handler\n ? (ctx: C, signal: AbortSignal) =>\n config.handler!({ query: ctx }, signal).then((r) => r.items ?? [])\n : async () => [] as T[];\n\n const syncFn = config.handler\n ? (changes: Change<T>[], _ctx: C, signal: AbortSignal) => config.handler!({ changes }, signal)\n : async (changes: Change<T>[]) => ({\n syncResults: map(changes, (c) => ({\n status: \"success\" as const,\n id: c.id,\n type: c.type,\n serverSyncedAt: \"\",\n })),\n serverSyncedAt: \"\",\n });\n\n this._syncQueue = new SyncQueue<T, C>({\n debounce: config.syncDebounce ?? 300,\n maxRetries: config.syncRetries ?? 3,\n getContext: () => this._state.context,\n onSync: syncFn,\n });\n\n this._fetchHandler = new FetchHandler<T, C>({\n id: config.id,\n cacheCapacity: config.cacheCapacity ?? 10,\n cacheTtl: config.cacheTtl ?? 60000,\n retries: config.fetchRetries ?? 0,\n onFetch: fetchFn,\n });\n\n // Initialize state\n const syncQueueState = this._syncQueue.getState();\n const fetchState = this._fetchHandler.getState();\n this._state = {\n context: config.initialContext,\n items: new Map(),\n syncState: \"idle\",\n loading: false,\n syncing: false,\n syncQueue: syncQueueState,\n fetchStatus: fetchState.status,\n fetchError: fetchState.error,\n };\n\n this._syncQueue.subscribe(() => this._onSyncQueueChange());\n this._fetchHandler.subscribe(() => this._onFetchChange());\n this._initialFetch();\n }\n\n get context(): C {\n return this._state.context;\n }\n\n get items(): Map<string, T> {\n return this._state.items;\n }\n\n get loading(): boolean {\n return this._state.loading;\n }\n\n get syncing(): boolean {\n return this._state.syncing;\n }\n\n get syncQueue(): SyncQueueState<T> {\n return this._state.syncQueue;\n }\n\n subscribe(callback: () => void): () => void {\n this._subscribers.add(callback);\n return () => this._subscribers.delete(callback);\n }\n\n getState(): CollectionState<T, C> {\n return this._state;\n }\n\n getItemStatus(id: string): ItemStatus {\n const { queue, inFlight, errors } = this._state.syncQueue;\n\n const inFlightChange = inFlight.get(id);\n if (inFlightChange) {\n return {\n type: inFlightChange.type,\n status: \"syncing\",\n retries: errors.get(id)?.retries ?? 0,\n };\n }\n\n const queuedChange = queue.get(id);\n if (queuedChange) {\n const errorInfo = errors.get(id);\n return {\n type: queuedChange.type,\n status: errorInfo ? \"error\" : \"pending\",\n retries: errorInfo?.retries ?? 0,\n error: errorInfo?.error,\n };\n }\n\n const errorInfo = errors.get(id);\n if (errorInfo) {\n return {\n type: \"update\",\n status: \"error\",\n retries: errorInfo.retries,\n error: errorInfo.error,\n };\n }\n\n return null;\n }\n\n create(item: T): string {\n const { id } = item;\n\n this._state = create(this._state, (draft) => {\n draft.items.set(id, item as Draft<T>);\n });\n\n this._fetchHandler.invalidateCache();\n this._notifySubscribers();\n this._syncQueue.enqueue({ id, type: \"create\", data: item });\n return id;\n }\n\n update(id: string, mutate: (draft: Draft<T>) => void): void {\n const currentItem = this._state.items.get(id);\n if (!currentItem) return;\n\n const newItem = create(currentItem, mutate);\n\n this._state = create(this._state, (draft) => {\n set(newItem, \"id\", id); // ensure id is not changed\n draft.items.set(id, newItem as Draft<T>);\n });\n\n this._fetchHandler.invalidateCache();\n this._notifySubscribers();\n this._syncQueue.enqueue({ id, type: \"update\", data: newItem });\n }\n\n remove(id: string): void {\n const item = this._state.items.get(id);\n if (!item) return;\n\n this._state = create(this._state, (draft) => {\n draft.items.delete(id);\n });\n\n this._fetchHandler.invalidateCache();\n this._notifySubscribers();\n this._syncQueue.enqueue({ id, type: \"delete\", data: item });\n }\n\n getItem(id: string): Item<T, C> {\n const data = this._state.items.get(id);\n if (!data) return new Item(this, id);\n\n const dataAsObject = data as T & object;\n let item = this._itemCache.get(dataAsObject);\n if (!item) {\n item = new Item(this, id);\n this._itemCache.set(dataAsObject, item);\n }\n return item;\n }\n\n getNode<V extends object, NodeType = string>(id: string): Node<V, C, NodeType> {\n const data = this._state.items.get(id) as unknown as TreeNode<V, NodeType> | undefined;\n if (!data) {\n return new Node(this as unknown as Collection<TreeNode<V, NodeType>, C>, id);\n }\n\n const dataAsObject = data as TreeNode<V, NodeType> & object;\n let node = this._nodeCache.get(dataAsObject) as Node<V, C, NodeType> | undefined;\n if (!node) {\n node = new Node(this as unknown as Collection<TreeNode<V, NodeType>, C>, id);\n this._nodeCache.set(dataAsObject, node);\n }\n return node;\n }\n\n batch(fn: () => void): void {\n const wasBatching = this._batchMode;\n this._batchMode = true;\n try {\n fn();\n } finally {\n this._batchMode = wasBatching;\n if (!wasBatching) this._notifySubscribers();\n }\n }\n\n selectNode(id: string): void {\n if (this._selectedNodeId !== id) {\n this._selectedNodeId = id;\n this._notifySubscribers();\n }\n }\n\n deselectNode(): void {\n if (this._selectedNodeId !== null) {\n this._selectedNodeId = null;\n this._notifySubscribers();\n }\n }\n\n get selectedNodeId(): string | null {\n return this._selectedNodeId;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get selectedNode(): Node<any, C> | null {\n return this._selectedNodeId ? this.getNode(this._selectedNodeId) : null;\n }\n\n setContext(patchContext: Mutator<C>): void {\n const oldContext = this._state.context;\n const newContext = create(oldContext, patchContext);\n\n if (oldContext !== newContext) {\n this._state = create(this._state, (draft) => {\n draft.context = newContext as Draft<C>;\n });\n\n this._fetchHandler.fetch(newContext);\n this._notifySubscribers();\n }\n }\n\n async refresh(): Promise<void> {\n this._fetchHandler.invalidateCache();\n await this._fetchHandler.fetch(this._state.context);\n }\n\n pauseSync(): void {\n this._syncQueue.pause();\n }\n\n resumeSync(): void {\n this._syncQueue.resume();\n this._fetchHandler.invalidateCache();\n this._fetchHandler.fetch(this._state.context);\n }\n\n retrySync(id?: string): void {\n if (id) {\n this._syncQueue.retry(id);\n } else {\n this._syncQueue.retryAll();\n }\n }\n\n destroy(): void {\n this._syncQueue.destroy();\n this._fetchHandler.destroy();\n this._subscribers.clear();\n Collection._cache.delete(this.id);\n }\n\n private async _initialFetch(): Promise<void> {\n if (this._hasInitialized) return;\n this._hasInitialized = true;\n\n if (this.config.serverItems) {\n this._state = create(this._state, (draft) => {\n for (const item of this.config.serverItems!) {\n draft.items.set(item.id, item as Draft<T>);\n }\n });\n this._notifySubscribers();\n return;\n }\n\n if (typeof window === \"undefined\") return;\n\n await this._fetchHandler.fetch(this._state.context);\n }\n\n private _onSyncQueueChange(): void {\n this._updateSyncState(this._syncQueue.getState());\n }\n\n private _onFetchChange(): void {\n const fetchState = this._fetchHandler.getState();\n\n this._state = create(this._state, (draft) => {\n draft.fetchStatus = fetchState.status;\n draft.fetchError = fetchState.error;\n draft.loading = fetchState.status === \"fetching\";\n draft.syncState = this._computeSyncState(fetchState.status, draft.syncQueue.isSyncing);\n\n const newItems = new Map<string, Draft<T>>();\n\n for (const item of fetchState.items) {\n newItems.set(item.id, item as Draft<T>);\n }\n\n draft.items = newItems;\n });\n\n this._notifySubscribers();\n }\n\n private _updateSyncState(syncQueueState: SyncQueueState<T>): void {\n this._state = create(this._state, (draft) => {\n draft.syncQueue = syncQueueState as Draft<SyncQueueState<T>>;\n draft.syncing = syncQueueState.isSyncing;\n draft.syncState = this._computeSyncState(draft.fetchStatus, syncQueueState.isSyncing);\n });\n\n this._notifySubscribers();\n }\n\n private _computeSyncState(fetchStatus: FetchState, isSyncing: boolean): SyncState {\n if (fetchStatus === \"fetching\") return \"fetching\";\n if (isSyncing) return \"syncing\";\n return \"idle\";\n }\n\n private _notifySubscribers(): void {\n if (this._batchMode) return;\n for (const callback of this._subscribers) {\n callback();\n }\n }\n}\n","import { useMemo, useSyncExternalStore } from \"react\";\nimport type { Draft } from \"mutative\";\nimport { Collection, buildServerSnapshot } from \"./collection\";\nimport type { Config, Mutator } from \"./types\";\nimport { getIdFromTime } from \"./utils\";\n\nexport type {\n Config,\n CrudHandler,\n Change,\n Result,\n ItemStatus,\n SyncQueueState,\n SyncState,\n ChangeType,\n ItemSyncStatus,\n FetchState,\n} from \"./types\";\n\nexport function useCrud<T extends { id: string }, C>(config: Config<T, C>) {\n const collection = Collection.get(config);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const serverSnapshot = useMemo(() => buildServerSnapshot(config), [config.id]);\n\n const state = useSyncExternalStore(\n (callback) => collection.subscribe(callback),\n () => collection.getState(),\n () => serverSnapshot,\n );\n\n return {\n // State\n items: state.items,\n context: state.context,\n syncState: state.syncState,\n syncQueue: state.syncQueue,\n loading: state.loading,\n syncing: state.syncing,\n fetchStatus: state.fetchStatus,\n fetchError: state.fetchError,\n\n // Item operations\n create: (item: Omit<T, \"id\">) => collection.create({ ...item, id: getIdFromTime() } as T),\n update: (id: string, mutate: (draft: Draft<T>) => void) => collection.update(id, mutate),\n remove: (id: string) => collection.remove(id),\n getItem: (id: string) => collection.getItem(id),\n getItemStatus: (id: string) => collection.getItemStatus(id),\n\n // Context & refresh\n setContext: (patchContext: Mutator<C>) => collection.setContext(patchContext),\n refresh: () => collection.refresh(),\n\n // Sync controls\n pauseSync: () => collection.pauseSync(),\n resumeSync: () => collection.resumeSync(),\n retrySync: (id?: string) => collection.retrySync(id),\n };\n}\n","import { useSyncExternalStore, useCallback, useMemo } from \"react\";\nimport { sortBy, map, filter } from \"lodash-es\";\nimport { Collection, buildServerSnapshot } from \"./collection\";\nimport type { Node, TreeNode } from \"./node\";\nimport type { Config, Mutator } from \"./types\";\n\n/**\n * Config for useCrudTree - same as Config but with rootId required\n */\nexport type TreeConfig<T extends object, C, NodeType = string> = Omit<\n Config<TreeNode<T, NodeType>, C>,\n \"rootId\"\n> & {\n rootId: string; // Required for tree collections\n};\n\n/**\n * Hook for tree-based CRUD operations.\n * This is a replacement for useCrud when working with tree structures.\n * It requires rootId in the config and returns the root node along with\n * all the standard useCrud properties.\n *\n * @param config - Tree collection configuration with required rootId\n * @returns Object with crud operations, state, and the root node\n */\nexport function useCrudTree<T extends object, C, NodeType = string>(\n config: TreeConfig<T, C, NodeType>,\n) {\n const fullConfig = config as Config<TreeNode<T, NodeType>, C>;\n const collection = Collection.get(fullConfig);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const serverSnapshot = useMemo(() => buildServerSnapshot(fullConfig), [config.id]);\n\n const state = useSyncExternalStore(\n (callback) => collection.subscribe(callback),\n () => collection.getState(),\n () => serverSnapshot,\n );\n\n const rootNode = useSyncExternalStore(\n (cb) => collection.subscribe(cb),\n () => {\n const rootData = collection.items.get(config.rootId);\n return rootData\n ? (collection.getNode<T, NodeType>(config.rootId) as Node<T, C, NodeType>)\n : null;\n },\n () => null,\n );\n\n const selectedNodeId = useSyncExternalStore(\n (cb) => collection.subscribe(cb),\n () => collection.selectedNodeId,\n () => null,\n );\n\n const selectedNode = useSyncExternalStore(\n (cb) => collection.subscribe(cb),\n () => collection.selectedNode as Node<T, C, NodeType> | null,\n () => null,\n );\n\n const toJson = useCallback(() => {\n const separator = config.nodeSeparator ?? \".\";\n\n // Helper to check if nodeId is a direct child of parentId\n const isDirectChild = (nodeId: string, parentId: string): boolean => {\n if (!nodeId.startsWith(parentId + separator)) return false;\n return !nodeId.slice(parentId.length + 1).includes(separator);\n };\n\n // Recursively build JSON tree structure\n const buildJsonTree = (nodeId: string): object | null => {\n const nodeData = state.items.get(nodeId) as TreeNode<T, NodeType> | undefined;\n if (!nodeData) return null;\n\n const childEntries = map(\n filter([...state.items.entries()], ([id]) => isDirectChild(id, nodeId)),\n ([id, data]) => ({ id, position: (data as TreeNode<T, NodeType>).position }),\n );\n const sortedChildren = sortBy(childEntries, \"position\");\n const children = map(sortedChildren, (entry) => buildJsonTree(entry.id)).filter(Boolean);\n\n return {\n id: nodeData.id,\n type: nodeData.type,\n value: nodeData.value,\n ...(children.length > 0 ? { children } : {}),\n };\n };\n\n return buildJsonTree(config.rootId);\n }, [state.items, config.rootId, config.nodeSeparator]);\n\n return {\n // Root node for tree operations\n rootNode,\n\n // State (all from single immutable state object)\n items: state.items,\n context: state.context,\n syncState: state.syncState,\n syncQueue: state.syncQueue,\n loading: state.loading,\n syncing: state.syncing,\n fetchStatus: state.fetchStatus,\n fetchError: state.fetchError,\n\n // Node operations\n getNode: (id: string) => collection.getNode<T, NodeType>(id) as Node<T, C, NodeType>,\n getNodeStatus: (id: string) => collection.getItemStatus(id),\n\n // Context & refresh\n setContext: (patchContext: Mutator<C>) => collection.setContext(patchContext),\n refresh: () => collection.refresh(),\n\n // Sync controls\n pauseSync: () => collection.pauseSync(),\n resumeSync: () => collection.resumeSync(),\n retrySync: (id?: string) => collection.retrySync(id),\n\n // Selection\n selectNode: (id: string) => collection.selectNode(id),\n deselectNode: () => collection.deselectNode(),\n selectedNodeId,\n selectedNode,\n\n // Serialization\n toJson,\n };\n}\n","import { useSyncExternalStore, useCallback } from \"react\";\nimport type { Draft } from \"mutative\";\nimport type { Item } from \"./item\";\nimport type { ItemStatus } from \"./types\";\n\nexport type UseItemResult<T> = {\n data: T | undefined;\n status: ItemStatus;\n update: (mutate: (draft: Draft<T>) => void) => void;\n remove: () => void;\n exists: boolean;\n};\n\nexport function useItem<T extends { id: string }, C>(item: Item<T, C>): UseItemResult<T> {\n // Note: Item cache is now managed by Collection.setContext()\n // Cache is automatically cleared when context changes\n\n const data = useSyncExternalStore(\n (callback) => item.collection.subscribe(callback),\n () => item.data,\n () => item.data,\n );\n\n const status = useSyncExternalStore(\n (callback) => item.collection.subscribe(callback),\n () => item.getStatus(),\n () => item.getStatus(),\n );\n\n const exists = useSyncExternalStore(\n (callback) => item.collection.subscribe(callback),\n () => item.exists(),\n () => item.exists(),\n );\n\n const update = useCallback((mutate: (draft: Draft<T>) => void) => item.update(mutate), [item]);\n\n const remove = useCallback(() => item.remove(), [item]);\n\n return { data, status, update, remove, exists };\n}\n","import { useSyncExternalStore, useCallback, useMemo } from \"react\";\nimport type { Draft } from \"mutative\";\nimport type { Node, TreeNode } from \"./node\";\nimport type { ItemStatus } from \"./types\";\n\n/**\n * Result type for useNode hook - contains all node data and operations\n */\nexport type UseNodeResult<T extends object, C, NodeType = string> = {\n isPresent: boolean;\n data: TreeNode<T, NodeType> | undefined;\n status: ItemStatus;\n exists: boolean;\n isSelected: boolean;\n depth: number;\n getParent: () => Node<T, C, NodeType> | null;\n children: Node<T, C, NodeType>[];\n append: (value: T, type?: NodeType) => string;\n prepend: (value: T, type?: NodeType) => string;\n move: (targetPosition: number, targetParent?: Node<T, C, NodeType>) => void;\n moveUp: () => void;\n moveDown: () => void;\n setPosition: (targetIndex: number) => void;\n clone: () => Map<string, TreeNode<T, NodeType>>;\n updateProp: (mutate: (draft: Draft<T>) => void) => void;\n remove: () => void;\n select: () => void;\n deselect: () => void;\n};\n\nexport function useNode<T extends object, C, NodeType = string>(\n node: Node<T, C, NodeType>,\n): UseNodeResult<T, C, NodeType> {\n const subscribe = useCallback((cb: () => void) => node.collection.subscribe(cb), [node]);\n\n const data = useSyncExternalStore(\n subscribe,\n () => node.data,\n () => node.data,\n );\n\n const status = useSyncExternalStore(\n subscribe,\n () => node.getStatus(),\n () => node.getStatus(),\n );\n\n const exists = useSyncExternalStore(\n subscribe,\n () => node.exists(),\n () => node.exists(),\n );\n\n const isSelected = useSyncExternalStore(\n subscribe,\n () => node.collection.selectedNodeId === node.id,\n () => node.collection.selectedNodeId === node.id,\n );\n\n // Recompute children only when the node's data reference changes.\n // Mutations that affect children (append, remove, reorder) bump\n // clientUpdatedAt on the parent, producing a new data reference.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const children = useMemo(() => node.getChildren(), [data, node]);\n\n const getParent = useCallback(() => node.getParent(), [node]);\n const append = useCallback((value: T, type?: NodeType) => node.append(value, type), [node]);\n const prepend = useCallback((value: T, type?: NodeType) => node.prepend(value, type), [node]);\n const move = useCallback(\n (pos: number, targetParent?: Node<T, C, NodeType>) => node.move(pos, targetParent),\n [node],\n );\n const moveUp = useCallback(() => node.moveUp(), [node]);\n const moveDown = useCallback(() => node.moveDown(), [node]);\n const setPosition = useCallback((targetIndex: number) => node.setPosition(targetIndex), [node]);\n const clone = useCallback(() => node.clone(), [node]);\n const updateProp = useCallback(\n (mutate: (draft: Draft<T>) => void) => node.updateProp(mutate),\n [node],\n );\n const remove = useCallback(() => node.remove(), [node]);\n const select = useCallback(() => node.select(), [node]);\n const deselect = useCallback(() => node.collection.deselectNode(), [node]);\n\n return {\n isPresent: true,\n data,\n status,\n exists,\n isSelected,\n depth: node.depth,\n getParent,\n children,\n append,\n prepend,\n move,\n moveUp,\n moveDown,\n setPosition,\n clone,\n updateProp,\n remove,\n select,\n deselect,\n };\n}\n","import { useSyncExternalStore, useMemo } from \"react\";\nimport { Collection } from \"./collection\";\nimport type { Node, TreeNode } from \"./node\";\nimport { useNode, type UseNodeResult } from \"./useNode\";\n\n// Stable empty result for when no node is selected\nconst EMPTY_RESULT = {\n isPresent: false,\n data: undefined,\n status: null,\n exists: false,\n isSelected: false,\n depth: 0,\n getParent: () => null,\n children: [],\n append: () => \"\",\n prepend: () => \"\",\n move: () => {},\n moveUp: () => {},\n moveDown: () => {},\n setPosition: () => {},\n clone: () => new Map(),\n updateProp: () => {},\n remove: () => {},\n select: () => {},\n deselect: () => {},\n};\n\n/**\n * Hook for accessing and operating on the currently selected node in a collection.\n *\n * This is a wrapper around useNode that automatically tracks the selected node.\n * Use this in components that need to operate on whatever node is currently selected\n * (e.g., toolbars, property panels, context menus).\n *\n * @param collectionId - The ID of the collection to get the selected node from\n * @returns UseNodeResult with isPresent=true when a node is selected, or isPresent=false with empty data\n */\nexport function useSelectedNode<T extends object, C, NodeType = string>(\n collectionId: string,\n): UseNodeResult<T, C, NodeType> {\n const collection = Collection.getById<TreeNode<T, NodeType>, C>(collectionId);\n if (!collection) {\n throw new Error(\n `Collection with id \"${collectionId}\" not found. Make sure useCrud is called first.`,\n );\n }\n\n const selectedNode = useSyncExternalStore(\n (cb) => collection.subscribe(cb),\n () => collection.selectedNode as Node<T, C, NodeType> | null,\n () => collection.selectedNode as Node<T, C, NodeType> | null,\n );\n\n // Always call useNode to maintain hooks order - use dummy node when nothing selected\n const dummyNode = useMemo(() => collection.getNode<T, NodeType>(\"__dummy__\"), [collection]);\n const nodeResult = useNode(selectedNode ?? dummyNode);\n\n // Return empty result when no node is selected, otherwise return the useNode result\n return selectedNode ? nodeResult : (EMPTY_RESULT as unknown as UseNodeResult<T, C, NodeType>);\n}\n","import { useSyncExternalStore } from \"react\";\nimport { Collection } from \"./collection\";\nimport type { SyncState, Change, SyncError } from \"./types\";\n\nexport type UseSyncStateResult<T = unknown> = {\n syncState: SyncState;\n syncing: boolean;\n queue: Map<string, Change<T>>;\n inFlight: Map<string, Change<T>>;\n errors: Map<string, SyncError<T>>;\n isPaused: boolean;\n isSyncing: boolean;\n};\n\n/**\n * Hook for accessing the sync state of a collection by ID.\n *\n * Use this when you need to display sync status in a component that\n * doesn't have access to the full useCrud hook.\n *\n * @param collectionId - The ID of the collection\n * @returns Flat object with syncState and all syncQueue properties\n */\nexport function useSyncState<T = unknown>(collectionId: string): UseSyncStateResult<T> {\n const collection = Collection.getById(collectionId);\n if (!collection) {\n throw new Error(\n `Collection with id \"${collectionId}\" not found. Make sure useCrud is called first.`,\n );\n }\n\n const state = useSyncExternalStore(\n (cb) => collection.subscribe(cb),\n () => collection.getState(),\n () => collection.getState(),\n );\n\n return {\n syncState: state.syncState,\n syncing: state.syncing,\n queue: state.syncQueue.queue as Map<string, Change<T>>,\n inFlight: state.syncQueue.inFlight as Map<string, Change<T>>,\n errors: state.syncQueue.errors as Map<string, SyncError<T>>,\n isPaused: state.syncQueue.isPaused,\n isSyncing: state.syncQueue.isSyncing,\n };\n}\n"],"names":["Operation","PROXY_DRAFT","RAW_RETURN_SYMBOL","iteratorSymbol","dataTypes","internal","has","target","key","getDescriptor","prototype","descriptor","isBaseSetInstance","obj","isBaseMapInstance","latest","proxyDraft","_a","isDraft","getProxyDraft","value","getValue","isDraftable","options","markResult","getPath","path","parentCopy","get","isSet","resolvePath","getType","set","peek","state","isEqual","x","y","revokeProxy","escapePath","pathAsArray","_item","item","base","index","strictCopy","copy","desc","propIsEnum","shallowCopy","original","SubClass","ensureShallowCopy","deepClone","iterable","k","v","cloneIfNeeded","markChanged","throwFrozenError","deepFreeze","subKey","updatedValues","stack","keys","parent","name","forEach","iter","type","entry","handleValue","handledSet","setMap","updatedValue","values","finalizeAssigned","finalizeSetValue","finalizePatches","generatePatches","patches","inversePatches","basePath","markFinalization","generateArrayPatches","proxyState","assignedMap","_path","arrayLengthAssignment","generatePatchesFromAssigned","assignedValue","originalValue","op","generateSetPatches","checkReadable","ignoreCheckDraftable","mapHandler","source","callback","thisArg","_value","_key","_b","mutable","draft","iterator","result","mapHandlerKeys","getNextIterator","isValuesIterator","currentDraft","proxy","setHandler","valueProxyDraft","other","setHandlerKeys","proxyHandler","receiver","createDraft","subProxyDraft","current","currentProxyDraft","createDraftOptions","parentDraft","finalities","revoke","oldProxyDraft","finalizeDraft","returnedValue","enableAutoFreeze","hasReturnedValue","draftify","baseState","finalizedState","finalizedPatches","finalizedInversePatches","handleReturnValue","rootDraft","useRawReturn","isRoot","currentValue","arr","getCurrent","newValue","makeCreator","arg","create","arg0","arg1","arg2","_c","args","mutate","mark","types","enablePatches","strict","_options","finalize","error","returnValue","rawReturnValue","returnedProxyDraft","reWhitespace","trimmedEndIndex","string","reTrimStart","baseTrim","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isSymbol","isObject","isBinary","INFINITY","MAX_INTEGER","toFinite","sign","toInteger","remainder","apply","func","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","constant","defineProperty","getNative","baseSetToString","identity","setToString","arrayEach","array","iteratee","length","baseFindIndex","predicate","fromIndex","fromRight","baseAssignValue","object","objectProto","hasOwnProperty","assignValue","objValue","eq","nativeMax","overRest","start","transform","otherArgs","baseRest","isIterateeCall","isArrayLike","isIndex","spreadableSymbol","Symbol","isFlattenable","isArray","isArguments","baseFlatten","depth","isStrict","arrayPush","baseSlice","end","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","reHasUnicode","hasUnicode","baseClamp","number","lower","upper","clamp","castFunction","collection","baseEach","baseFilter","filter","arrayFilter","baseIteratee","createFind","findIndexFunc","findIndex","find","head","baseGt","stringTag","isString","isObjectLike","baseGetTag","mapTag","setTag","isEmpty","isBuffer","isTypedArray","tag","getTag","isPrototype","baseKeys","baseIsEqual","arrayProto","nativeJoin","join","separator","baseLt","baseExtremum","comparator","computed","maxBy","minBy","baseSet","customizer","castPath","lastIndex","nested","toKey","baseSortBy","comparer","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareMultiple","orders","objCriteria","othCriteria","ordersLength","order","baseOrderBy","iteratees","arrayMap","baseGet","baseUnary","baseMap","criteria","asciiSize","baseProperty","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","reUnicode","unicodeSize","stringSize","size","sortBy","take","n","guard","coalesce","existing","next","SyncQueue","config","change","coalesced","errors","id","errorInfo","mutator","cb","isPaused","isSyncing","queue","batchSize","queueEntries","entriesToProcess","remainingEntries","changes","context","response","inFlight","resultMap","r","retries","changeIds","extraItems","isAborted","errorMsg","Cache","capacity","ttl","firstKey","FetchHandler","patch","signal","maxRetries","lastError","attempt","cacheKey","cached","abortController","items","ctx","Item","newStatus","DEFAULT_SEPARATOR","getParentId","nodeId","idx","isDirectChild","parentId","isDescendant","ancestorId","getDepth","Node","childEntries","map","data","sorted","getNodeId","getIdFromTime","nodeData","siblings","s","prevSibling","prevData","currentPosition","nextSibling","nextData","targetIndex","currentIndex","clampedIndex","reordered","removed","sibling","siblingData","children","maxChild","c","position","newId","newNode","minChild","targetPosition","targetParent","currentParentId","targetSibling","clonedSubset","cloneRootId","descendants","relativePath","treeData","cloneRootKey","newRootId","cloneId","cloneData","suffix","descendantIds","toRemove","buildServerSnapshot","Collection","fetchFn","syncFn","_ctx","syncQueueState","fetchState","inFlightChange","queuedChange","currentItem","newItem","dataAsObject","node","fn","wasBatching","patchContext","oldContext","newContext","newItems","fetchStatus","useCrud","serverSnapshot","useMemo","useSyncExternalStore","useCrudTree","fullConfig","rootNode","selectedNodeId","selectedNode","toJson","useCallback","buildJsonTree","sortedChildren","useItem","status","exists","update","remove","useNode","subscribe","isSelected","getParent","append","prepend","move","pos","moveUp","moveDown","setPosition","clone","updateProp","select","deselect","EMPTY_RESULT","useSelectedNode","collectionId","dummyNode","nodeResult","useSyncState"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/mutative/dist/mutative.esm.mjs","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/_apply.js","../node_modules/lodash-es/_shortOut.js","../node_modules/lodash-es/constant.js","../node_modules/lodash-es/_defineProperty.js","../node_modules/lodash-es/_baseSetToString.js","../node_modules/lodash-es/_setToString.js","../node_modules/lodash-es/_arrayEach.js","../node_modules/lodash-es/_baseFindIndex.js","../node_modules/lodash-es/_baseAssignValue.js","../node_modules/lodash-es/_assignValue.js","../node_modules/lodash-es/_overRest.js","../node_modules/lodash-es/_baseRest.js","../node_modules/lodash-es/_isIterateeCall.js","../node_modules/lodash-es/_isFlattenable.js","../node_modules/lodash-es/_baseFlatten.js","../node_modules/lodash-es/_baseSlice.js","../node_modules/lodash-es/_hasUnicode.js","../node_modules/lodash-es/_baseClamp.js","../node_modules/lodash-es/clamp.js","../node_modules/lodash-es/_castFunction.js","../node_modules/lodash-es/forEach.js","../node_modules/lodash-es/_baseFilter.js","../node_modules/lodash-es/filter.js","../node_modules/lodash-es/_createFind.js","../node_modules/lodash-es/findIndex.js","../node_modules/lodash-es/find.js","../node_modules/lodash-es/head.js","../node_modules/lodash-es/_baseGt.js","../node_modules/lodash-es/isString.js","../node_modules/lodash-es/isEmpty.js","../node_modules/lodash-es/isEqual.js","../node_modules/lodash-es/join.js","../node_modules/lodash-es/_baseLt.js","../node_modules/lodash-es/_baseExtremum.js","../node_modules/lodash-es/maxBy.js","../node_modules/lodash-es/minBy.js","../node_modules/lodash-es/_baseSet.js","../node_modules/lodash-es/_baseSortBy.js","../node_modules/lodash-es/_compareAscending.js","../node_modules/lodash-es/_compareMultiple.js","../node_modules/lodash-es/_baseOrderBy.js","../node_modules/lodash-es/_asciiSize.js","../node_modules/lodash-es/_unicodeSize.js","../node_modules/lodash-es/_stringSize.js","../node_modules/lodash-es/set.js","../node_modules/lodash-es/size.js","../node_modules/lodash-es/sortBy.js","../node_modules/lodash-es/take.js","../src/sync-queue.ts","../src/cache.ts","../src/fetch-handler.ts","../src/item.ts","../src/node.ts","../src/collection.ts","../src/useCrud.ts","../src/useCrudTree.ts","../src/useItem.ts","../src/useNode.ts","../src/useSelectedNode.ts","../src/useSyncState.ts"],"sourcesContent":["const Operation = {\n Remove: 'remove',\n Replace: 'replace',\n Add: 'add',\n};\n\n// Don't use `Symbol()` just for 3rd party access the draft\nconst PROXY_DRAFT = Symbol.for('__MUTATIVE_PROXY_DRAFT__');\nconst RAW_RETURN_SYMBOL = Symbol('__MUTATIVE_RAW_RETURN_SYMBOL__');\nconst iteratorSymbol = Symbol.iterator;\nconst dataTypes = {\n mutable: 'mutable',\n immutable: 'immutable',\n};\n\nconst internal = {};\n\nfunction has(target, key) {\n return target instanceof Map\n ? target.has(key)\n : Object.prototype.hasOwnProperty.call(target, key);\n}\nfunction getDescriptor(target, key) {\n if (key in target) {\n let prototype = Reflect.getPrototypeOf(target);\n while (prototype) {\n const descriptor = Reflect.getOwnPropertyDescriptor(prototype, key);\n if (descriptor)\n return descriptor;\n prototype = Reflect.getPrototypeOf(prototype);\n }\n }\n return;\n}\nfunction isBaseSetInstance(obj) {\n return Object.getPrototypeOf(obj) === Set.prototype;\n}\nfunction isBaseMapInstance(obj) {\n return Object.getPrototypeOf(obj) === Map.prototype;\n}\n\nfunction latest(proxyDraft) {\n var _a;\n return (_a = proxyDraft.copy) !== null && _a !== void 0 ? _a : proxyDraft.original;\n}\n/**\n * Check if the value is a draft\n */\nfunction isDraft(target) {\n return !!getProxyDraft(target);\n}\nfunction getProxyDraft(value) {\n if (typeof value !== 'object')\n return null;\n return value === null || value === void 0 ? void 0 : value[PROXY_DRAFT];\n}\nfunction getValue(value) {\n var _a;\n const proxyDraft = getProxyDraft(value);\n return proxyDraft ? ((_a = proxyDraft.copy) !== null && _a !== void 0 ? _a : proxyDraft.original) : value;\n}\n/**\n * Check if a value is draftable\n */\nfunction isDraftable(value, options) {\n if (!value || typeof value !== 'object')\n return false;\n let markResult;\n return (Object.getPrototypeOf(value) === Object.prototype ||\n Array.isArray(value) ||\n value instanceof Map ||\n value instanceof Set ||\n (!!(options === null || options === void 0 ? void 0 : options.mark) &&\n ((markResult = options.mark(value, dataTypes)) === dataTypes.immutable ||\n typeof markResult === 'function')));\n}\nfunction getPath(target, path = []) {\n if (Object.hasOwnProperty.call(target, 'key')) {\n // check if the parent is a draft and the original value is not equal to the current value\n const parentCopy = target.parent.copy;\n const proxyDraft = getProxyDraft(get(parentCopy, target.key));\n if (proxyDraft !== null && (proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.original) !== target.original) {\n return null;\n }\n const isSet = target.parent.type === 3 /* DraftType.Set */;\n const key = isSet\n ? Array.from(target.parent.setMap.keys()).indexOf(target.key)\n : target.key;\n // check if the key is still in the next state parent\n if (!((isSet && parentCopy.size > key) || has(parentCopy, key)))\n return null;\n path.push(key);\n }\n if (target.parent) {\n return getPath(target.parent, path);\n }\n // `target` is root draft.\n path.reverse();\n try {\n // check if the path is valid\n resolvePath(target.copy, path);\n }\n catch (e) {\n return null;\n }\n return path;\n}\nfunction getType(target) {\n if (Array.isArray(target))\n return 1 /* DraftType.Array */;\n if (target instanceof Map)\n return 2 /* DraftType.Map */;\n if (target instanceof Set)\n return 3 /* DraftType.Set */;\n return 0 /* DraftType.Object */;\n}\nfunction get(target, key) {\n return getType(target) === 2 /* DraftType.Map */ ? target.get(key) : target[key];\n}\nfunction set(target, key, value) {\n const type = getType(target);\n if (type === 2 /* DraftType.Map */) {\n target.set(key, value);\n }\n else {\n target[key] = value;\n }\n}\nfunction peek(target, key) {\n const state = getProxyDraft(target);\n const source = state ? latest(state) : target;\n return source[key];\n}\nfunction isEqual(x, y) {\n if (x === y) {\n return x !== 0 || 1 / x === 1 / y;\n }\n else {\n return x !== x && y !== y;\n }\n}\nfunction revokeProxy(proxyDraft) {\n if (!proxyDraft)\n return;\n while (proxyDraft.finalities.revoke.length > 0) {\n const revoke = proxyDraft.finalities.revoke.pop();\n revoke();\n }\n}\n// handle JSON Pointer path with spec https://www.rfc-editor.org/rfc/rfc6901\nfunction escapePath(path, pathAsArray) {\n return pathAsArray\n ? path\n : ['']\n .concat(path)\n .map((_item) => {\n const item = `${_item}`;\n if (item.indexOf('/') === -1 && item.indexOf('~') === -1)\n return item;\n return item.replace(/~/g, '~0').replace(/\\//g, '~1');\n })\n .join('/');\n}\nfunction unescapePath(path) {\n if (Array.isArray(path))\n return path;\n return path\n .split('/')\n .map((_item) => _item.replace(/~1/g, '/').replace(/~0/g, '~'))\n .slice(1);\n}\nfunction resolvePath(base, path) {\n for (let index = 0; index < path.length - 1; index += 1) {\n const key = path[index];\n // use `index` in Set draft\n base = get(getType(base) === 3 /* DraftType.Set */ ? Array.from(base) : base, key);\n if (typeof base !== 'object') {\n throw new Error(`Cannot resolve patch at '${path.join('/')}'.`);\n }\n }\n return base;\n}\n\nfunction strictCopy(target) {\n const copy = Object.create(Object.getPrototypeOf(target));\n Reflect.ownKeys(target).forEach((key) => {\n let desc = Reflect.getOwnPropertyDescriptor(target, key);\n if (desc.enumerable && desc.configurable && desc.writable) {\n copy[key] = target[key];\n return;\n }\n // for freeze\n if (!desc.writable) {\n desc.writable = true;\n desc.configurable = true;\n }\n if (desc.get || desc.set)\n desc = {\n configurable: true,\n writable: true,\n enumerable: desc.enumerable,\n value: target[key],\n };\n Reflect.defineProperty(copy, key, desc);\n });\n return copy;\n}\nconst propIsEnum = Object.prototype.propertyIsEnumerable;\nfunction shallowCopy(original, options) {\n let markResult;\n if (Array.isArray(original)) {\n return Array.prototype.concat.call(original);\n }\n else if (original instanceof Set) {\n if (!isBaseSetInstance(original)) {\n const SubClass = Object.getPrototypeOf(original).constructor;\n return new SubClass(original.values());\n }\n return Set.prototype.difference\n ? Set.prototype.difference.call(original, new Set())\n : new Set(original.values());\n }\n else if (original instanceof Map) {\n if (!isBaseMapInstance(original)) {\n const SubClass = Object.getPrototypeOf(original).constructor;\n return new SubClass(original);\n }\n return new Map(original);\n }\n else if ((options === null || options === void 0 ? void 0 : options.mark) &&\n ((markResult = options.mark(original, dataTypes)),\n markResult !== undefined) &&\n markResult !== dataTypes.mutable) {\n if (markResult === dataTypes.immutable) {\n return strictCopy(original);\n }\n else if (typeof markResult === 'function') {\n if ((options.enablePatches || options.enableAutoFreeze)) {\n throw new Error(`You can't use mark and patches or auto freeze together.`);\n }\n return markResult();\n }\n throw new Error(`Unsupported mark result: ${markResult}`);\n }\n else if (typeof original === 'object' &&\n Object.getPrototypeOf(original) === Object.prototype) {\n // For best performance with shallow copies,\n // don't use `Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));` by default.\n const copy = {};\n Object.keys(original).forEach((key) => {\n copy[key] = original[key];\n });\n Object.getOwnPropertySymbols(original).forEach((key) => {\n if (propIsEnum.call(original, key)) {\n copy[key] = original[key];\n }\n });\n return copy;\n }\n else {\n throw new Error(`Please check mark() to ensure that it is a stable marker draftable function.`);\n }\n}\nfunction ensureShallowCopy(target) {\n if (target.copy)\n return;\n target.copy = shallowCopy(target.original, target.options);\n}\nfunction deepClone(target) {\n if (!isDraftable(target))\n return getValue(target);\n if (Array.isArray(target))\n return target.map(deepClone);\n if (target instanceof Map) {\n const iterable = Array.from(target.entries()).map(([k, v]) => [\n k,\n deepClone(v),\n ]);\n if (!isBaseMapInstance(target)) {\n const SubClass = Object.getPrototypeOf(target).constructor;\n return new SubClass(iterable);\n }\n return new Map(iterable);\n }\n if (target instanceof Set) {\n const iterable = Array.from(target).map(deepClone);\n if (!isBaseSetInstance(target)) {\n const SubClass = Object.getPrototypeOf(target).constructor;\n return new SubClass(iterable);\n }\n return new Set(iterable);\n }\n const copy = Object.create(Object.getPrototypeOf(target));\n for (const key in target)\n copy[key] = deepClone(target[key]);\n return copy;\n}\nfunction cloneIfNeeded(target) {\n return isDraft(target) ? deepClone(target) : target;\n}\n\nfunction markChanged(proxyDraft) {\n var _a;\n proxyDraft.assignedMap = (_a = proxyDraft.assignedMap) !== null && _a !== void 0 ? _a : new Map();\n if (!proxyDraft.operated) {\n proxyDraft.operated = true;\n if (proxyDraft.parent) {\n markChanged(proxyDraft.parent);\n }\n }\n}\n\nfunction throwFrozenError() {\n throw new Error('Cannot modify frozen object');\n}\nfunction deepFreeze(target, subKey, updatedValues, stack, keys) {\n {\n updatedValues = updatedValues !== null && updatedValues !== void 0 ? updatedValues : new WeakMap();\n stack = stack !== null && stack !== void 0 ? stack : [];\n keys = keys !== null && keys !== void 0 ? keys : [];\n const value = updatedValues.has(target)\n ? updatedValues.get(target)\n : target;\n if (stack.length > 0) {\n const index = stack.indexOf(value);\n if (value && typeof value === 'object' && index !== -1) {\n if (stack[0] === value) {\n throw new Error(`Forbids circular reference`);\n }\n throw new Error(`Forbids circular reference: ~/${keys\n .slice(0, index)\n .map((key, index) => {\n if (typeof key === 'symbol')\n return `[${key.toString()}]`;\n const parent = stack[index];\n if (typeof key === 'object' &&\n (parent instanceof Map || parent instanceof Set))\n return Array.from(parent.keys()).indexOf(key);\n return key;\n })\n .join('/')}`);\n }\n stack.push(value);\n keys.push(subKey);\n }\n else {\n stack.push(value);\n }\n }\n if (Object.isFrozen(target) || isDraft(target)) {\n {\n stack.pop();\n keys.pop();\n }\n return;\n }\n const type = getType(target);\n switch (type) {\n case 2 /* DraftType.Map */:\n for (const [key, value] of target) {\n deepFreeze(key, key, updatedValues, stack, keys);\n deepFreeze(value, key, updatedValues, stack, keys);\n }\n target.set = target.clear = target.delete = throwFrozenError;\n break;\n case 3 /* DraftType.Set */:\n for (const value of target) {\n deepFreeze(value, value, updatedValues, stack, keys);\n }\n target.add = target.clear = target.delete = throwFrozenError;\n break;\n case 1 /* DraftType.Array */:\n Object.freeze(target);\n let index = 0;\n for (const value of target) {\n deepFreeze(value, index, updatedValues, stack, keys);\n index += 1;\n }\n break;\n default:\n Object.freeze(target);\n // ignore non-enumerable or symbol properties\n Object.keys(target).forEach((name) => {\n const value = target[name];\n deepFreeze(value, name, updatedValues, stack, keys);\n });\n }\n {\n stack.pop();\n keys.pop();\n }\n}\n\nfunction forEach(target, iter) {\n const type = getType(target);\n if (type === 0 /* DraftType.Object */) {\n Reflect.ownKeys(target).forEach((key) => {\n iter(key, target[key], target);\n });\n }\n else if (type === 1 /* DraftType.Array */) {\n let index = 0;\n for (const entry of target) {\n iter(index, entry, target);\n index += 1;\n }\n }\n else {\n target.forEach((entry, index) => iter(index, entry, target));\n }\n}\n\nfunction handleValue(target, handledSet, options) {\n if (isDraft(target) ||\n !isDraftable(target, options) ||\n handledSet.has(target) ||\n Object.isFrozen(target))\n return;\n const isSet = target instanceof Set;\n const setMap = isSet ? new Map() : undefined;\n handledSet.add(target);\n forEach(target, (key, value) => {\n var _a;\n if (isDraft(value)) {\n const proxyDraft = getProxyDraft(value);\n ensureShallowCopy(proxyDraft);\n // A draft where a child node has been changed, or assigned a value\n const updatedValue = ((_a = proxyDraft.assignedMap) === null || _a === void 0 ? void 0 : _a.size) || proxyDraft.operated\n ? proxyDraft.copy\n : proxyDraft.original;\n // final update value\n set(isSet ? setMap : target, key, updatedValue);\n }\n else {\n handleValue(value, handledSet, options);\n }\n });\n if (setMap) {\n const set = target;\n const values = Array.from(set);\n set.clear();\n values.forEach((value) => {\n set.add(setMap.has(value) ? setMap.get(value) : value);\n });\n }\n}\nfunction finalizeAssigned(proxyDraft, key) {\n // handle the draftable assigned values, and the value is not a draft\n const copy = proxyDraft.type === 3 /* DraftType.Set */ ? proxyDraft.setMap : proxyDraft.copy;\n if (proxyDraft.finalities.revoke.length > 1 &&\n proxyDraft.assignedMap.get(key) &&\n copy) {\n handleValue(get(copy, key), proxyDraft.finalities.handledSet, proxyDraft.options);\n }\n}\nfunction finalizeSetValue(target) {\n if (target.type === 3 /* DraftType.Set */ && target.copy) {\n target.copy.clear();\n target.setMap.forEach((value) => {\n target.copy.add(getValue(value));\n });\n }\n}\nfunction finalizePatches(target, generatePatches, patches, inversePatches) {\n const shouldFinalize = target.operated &&\n target.assignedMap &&\n target.assignedMap.size > 0 &&\n !target.finalized;\n if (shouldFinalize) {\n if (patches && inversePatches) {\n const basePath = getPath(target);\n if (basePath) {\n generatePatches(target, basePath, patches, inversePatches);\n }\n }\n target.finalized = true;\n }\n}\nfunction markFinalization(target, key, value, generatePatches) {\n const proxyDraft = getProxyDraft(value);\n if (proxyDraft) {\n // !case: assign the draft value\n if (!proxyDraft.callbacks) {\n proxyDraft.callbacks = [];\n }\n proxyDraft.callbacks.push((patches, inversePatches) => {\n var _a;\n const copy = target.type === 3 /* DraftType.Set */ ? target.setMap : target.copy;\n if (isEqual(get(copy, key), value)) {\n let updatedValue = proxyDraft.original;\n if (proxyDraft.copy) {\n updatedValue = proxyDraft.copy;\n }\n finalizeSetValue(target);\n finalizePatches(target, generatePatches, patches, inversePatches);\n if (target.options.enableAutoFreeze) {\n target.options.updatedValues =\n (_a = target.options.updatedValues) !== null && _a !== void 0 ? _a : new WeakMap();\n target.options.updatedValues.set(updatedValue, proxyDraft.original);\n }\n // final update value\n set(copy, key, updatedValue);\n }\n });\n if (target.options.enableAutoFreeze) {\n // !case: assign the draft value in cross draft tree\n if (proxyDraft.finalities !== target.finalities) {\n target.options.enableAutoFreeze = false;\n }\n }\n }\n if (isDraftable(value, target.options)) {\n // !case: assign the non-draft value\n target.finalities.draft.push(() => {\n const copy = target.type === 3 /* DraftType.Set */ ? target.setMap : target.copy;\n if (isEqual(get(copy, key), value)) {\n finalizeAssigned(target, key);\n }\n });\n }\n}\n\nfunction generateArrayPatches(proxyState, basePath, patches, inversePatches, pathAsArray) {\n let { original, assignedMap, options } = proxyState;\n let copy = proxyState.copy;\n if (copy.length < original.length) {\n [original, copy] = [copy, original];\n [patches, inversePatches] = [inversePatches, patches];\n }\n for (let index = 0; index < original.length; index += 1) {\n if (assignedMap.get(index.toString()) && copy[index] !== original[index]) {\n const _path = basePath.concat([index]);\n const path = escapePath(_path, pathAsArray);\n patches.push({\n op: Operation.Replace,\n path,\n // If it is a draft, it needs to be deep cloned, and it may also be non-draft.\n value: cloneIfNeeded(copy[index]),\n });\n inversePatches.push({\n op: Operation.Replace,\n path,\n // If it is a draft, it needs to be deep cloned, and it may also be non-draft.\n value: cloneIfNeeded(original[index]),\n });\n }\n }\n for (let index = original.length; index < copy.length; index += 1) {\n const _path = basePath.concat([index]);\n const path = escapePath(_path, pathAsArray);\n patches.push({\n op: Operation.Add,\n path,\n // If it is a draft, it needs to be deep cloned, and it may also be non-draft.\n value: cloneIfNeeded(copy[index]),\n });\n }\n if (original.length < copy.length) {\n // https://www.rfc-editor.org/rfc/rfc6902#appendix-A.4\n // For performance, here we only generate an operation that replaces the length of the array,\n // which is inconsistent with JSON Patch specification\n const { arrayLengthAssignment = true } = options.enablePatches;\n if (arrayLengthAssignment) {\n const _path = basePath.concat(['length']);\n const path = escapePath(_path, pathAsArray);\n inversePatches.push({\n op: Operation.Replace,\n path,\n value: original.length,\n });\n }\n else {\n for (let index = copy.length; original.length < index; index -= 1) {\n const _path = basePath.concat([index - 1]);\n const path = escapePath(_path, pathAsArray);\n inversePatches.push({\n op: Operation.Remove,\n path,\n });\n }\n }\n }\n}\nfunction generatePatchesFromAssigned({ original, copy, assignedMap }, basePath, patches, inversePatches, pathAsArray) {\n assignedMap.forEach((assignedValue, key) => {\n const originalValue = get(original, key);\n const value = cloneIfNeeded(get(copy, key));\n const op = !assignedValue\n ? Operation.Remove\n : has(original, key)\n ? Operation.Replace\n : Operation.Add;\n if (isEqual(originalValue, value) && op === Operation.Replace)\n return;\n const _path = basePath.concat(key);\n const path = escapePath(_path, pathAsArray);\n patches.push(op === Operation.Remove ? { op, path } : { op, path, value });\n inversePatches.push(op === Operation.Add\n ? { op: Operation.Remove, path }\n : op === Operation.Remove\n ? { op: Operation.Add, path, value: originalValue }\n : { op: Operation.Replace, path, value: originalValue });\n });\n}\nfunction generateSetPatches({ original, copy }, basePath, patches, inversePatches, pathAsArray) {\n let index = 0;\n original.forEach((value) => {\n if (!copy.has(value)) {\n const _path = basePath.concat([index]);\n const path = escapePath(_path, pathAsArray);\n patches.push({\n op: Operation.Remove,\n path,\n value,\n });\n inversePatches.unshift({\n op: Operation.Add,\n path,\n value,\n });\n }\n index += 1;\n });\n index = 0;\n copy.forEach((value) => {\n if (!original.has(value)) {\n const _path = basePath.concat([index]);\n const path = escapePath(_path, pathAsArray);\n patches.push({\n op: Operation.Add,\n path,\n value,\n });\n inversePatches.unshift({\n op: Operation.Remove,\n path,\n value,\n });\n }\n index += 1;\n });\n}\nfunction generatePatches(proxyState, basePath, patches, inversePatches) {\n const { pathAsArray = true } = proxyState.options.enablePatches;\n switch (proxyState.type) {\n case 0 /* DraftType.Object */:\n case 2 /* DraftType.Map */:\n return generatePatchesFromAssigned(proxyState, basePath, patches, inversePatches, pathAsArray);\n case 1 /* DraftType.Array */:\n return generateArrayPatches(proxyState, basePath, patches, inversePatches, pathAsArray);\n case 3 /* DraftType.Set */:\n return generateSetPatches(proxyState, basePath, patches, inversePatches, pathAsArray);\n }\n}\n\nlet readable = false;\nconst checkReadable = (value, options, ignoreCheckDraftable = false) => {\n if (typeof value === 'object' &&\n value !== null &&\n (!isDraftable(value, options) || ignoreCheckDraftable) &&\n !readable) {\n throw new Error(`Strict mode: Mutable data cannot be accessed directly, please use 'unsafe(callback)' wrap.`);\n }\n};\n/**\n * `unsafe(callback)` to access mutable data directly in strict mode.\n *\n * ## Example\n *\n * ```ts\n * import { create, unsafe } from '../index';\n *\n * class Foobar {\n * bar = 1;\n * }\n *\n * const baseState = { foobar: new Foobar() };\n * const state = create(\n * baseState,\n * (draft) => {\n * unsafe(() => {\n * draft.foobar.bar = 2;\n * });\n * },\n * {\n * strict: true,\n * }\n * );\n *\n * expect(state).toBe(baseState);\n * expect(state.foobar).toBe(baseState.foobar);\n * expect(state.foobar.bar).toBe(2);\n * ```\n */\nfunction unsafe(callback) {\n readable = true;\n let result;\n try {\n result = callback();\n }\n finally {\n readable = false;\n }\n return result;\n}\n\nconst mapHandler = {\n get size() {\n const current = latest(getProxyDraft(this));\n return current.size;\n },\n has(key) {\n return latest(getProxyDraft(this)).has(key);\n },\n set(key, value) {\n const target = getProxyDraft(this);\n const source = latest(target);\n if (!source.has(key) || !isEqual(source.get(key), value)) {\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap.set(key, true);\n target.copy.set(key, value);\n markFinalization(target, key, value, generatePatches);\n }\n return this;\n },\n delete(key) {\n if (!this.has(key)) {\n return false;\n }\n const target = getProxyDraft(this);\n ensureShallowCopy(target);\n markChanged(target);\n if (target.original.has(key)) {\n target.assignedMap.set(key, false);\n }\n else {\n target.assignedMap.delete(key);\n }\n target.copy.delete(key);\n return true;\n },\n clear() {\n const target = getProxyDraft(this);\n if (!this.size)\n return;\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap = new Map();\n for (const [key] of target.original) {\n target.assignedMap.set(key, false);\n }\n target.copy.clear();\n },\n forEach(callback, thisArg) {\n const target = getProxyDraft(this);\n latest(target).forEach((_value, _key) => {\n callback.call(thisArg, this.get(_key), _key, this);\n });\n },\n get(key) {\n var _a, _b;\n const target = getProxyDraft(this);\n const value = latest(target).get(key);\n const mutable = ((_b = (_a = target.options).mark) === null || _b === void 0 ? void 0 : _b.call(_a, value, dataTypes)) === dataTypes.mutable;\n if (target.options.strict) {\n checkReadable(value, target.options, mutable);\n }\n if (mutable) {\n return value;\n }\n if (target.finalized || !isDraftable(value, target.options)) {\n return value;\n }\n // drafted or reassigned\n if (value !== target.original.get(key)) {\n return value;\n }\n const draft = internal.createDraft({\n original: value,\n parentDraft: target,\n key,\n finalities: target.finalities,\n options: target.options,\n });\n ensureShallowCopy(target);\n target.copy.set(key, draft);\n return draft;\n },\n keys() {\n return latest(getProxyDraft(this)).keys();\n },\n values() {\n const iterator = this.keys();\n return {\n [iteratorSymbol]: () => this.values(),\n next: () => {\n const result = iterator.next();\n if (result.done)\n return result;\n const value = this.get(result.value);\n return {\n done: false,\n value,\n };\n },\n };\n },\n entries() {\n const iterator = this.keys();\n return {\n [iteratorSymbol]: () => this.entries(),\n next: () => {\n const result = iterator.next();\n if (result.done)\n return result;\n const value = this.get(result.value);\n return {\n done: false,\n value: [result.value, value],\n };\n },\n };\n },\n [iteratorSymbol]() {\n return this.entries();\n },\n};\nconst mapHandlerKeys = Reflect.ownKeys(mapHandler);\n\nconst getNextIterator = (target, iterator, { isValuesIterator }) => () => {\n var _a, _b;\n const result = iterator.next();\n if (result.done)\n return result;\n const key = result.value;\n let value = target.setMap.get(key);\n const currentDraft = getProxyDraft(value);\n const mutable = ((_b = (_a = target.options).mark) === null || _b === void 0 ? void 0 : _b.call(_a, value, dataTypes)) === dataTypes.mutable;\n if (target.options.strict) {\n checkReadable(key, target.options, mutable);\n }\n if (!mutable &&\n !currentDraft &&\n isDraftable(key, target.options) &&\n !target.finalized &&\n target.original.has(key)) {\n // draft a draftable original set item\n const proxy = internal.createDraft({\n original: key,\n parentDraft: target,\n key,\n finalities: target.finalities,\n options: target.options,\n });\n target.setMap.set(key, proxy);\n value = proxy;\n }\n else if (currentDraft) {\n // drafted\n value = currentDraft.proxy;\n }\n return {\n done: false,\n value: isValuesIterator ? value : [value, value],\n };\n};\nconst setHandler = {\n get size() {\n const target = getProxyDraft(this);\n return target.setMap.size;\n },\n has(value) {\n const target = getProxyDraft(this);\n // reassigned or non-draftable values\n if (target.setMap.has(value))\n return true;\n ensureShallowCopy(target);\n const valueProxyDraft = getProxyDraft(value);\n // drafted\n if (valueProxyDraft && target.setMap.has(valueProxyDraft.original))\n return true;\n return false;\n },\n add(value) {\n const target = getProxyDraft(this);\n if (!this.has(value)) {\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap.set(value, true);\n target.setMap.set(value, value);\n markFinalization(target, value, value, generatePatches);\n }\n return this;\n },\n delete(value) {\n if (!this.has(value)) {\n return false;\n }\n const target = getProxyDraft(this);\n ensureShallowCopy(target);\n markChanged(target);\n const valueProxyDraft = getProxyDraft(value);\n if (valueProxyDraft && target.setMap.has(valueProxyDraft.original)) {\n // delete drafted\n target.assignedMap.set(valueProxyDraft.original, false);\n return target.setMap.delete(valueProxyDraft.original);\n }\n if (!valueProxyDraft && target.setMap.has(value)) {\n // non-draftable values\n target.assignedMap.set(value, false);\n }\n else {\n // reassigned\n target.assignedMap.delete(value);\n }\n // delete reassigned or non-draftable values\n return target.setMap.delete(value);\n },\n clear() {\n if (!this.size)\n return;\n const target = getProxyDraft(this);\n ensureShallowCopy(target);\n markChanged(target);\n for (const value of target.original) {\n target.assignedMap.set(value, false);\n }\n target.setMap.clear();\n },\n values() {\n const target = getProxyDraft(this);\n ensureShallowCopy(target);\n const iterator = target.setMap.keys();\n return {\n [Symbol.iterator]: () => this.values(),\n next: getNextIterator(target, iterator, { isValuesIterator: true }),\n };\n },\n entries() {\n const target = getProxyDraft(this);\n ensureShallowCopy(target);\n const iterator = target.setMap.keys();\n return {\n [Symbol.iterator]: () => this.entries(),\n next: getNextIterator(target, iterator, {\n isValuesIterator: false,\n }),\n };\n },\n keys() {\n return this.values();\n },\n [iteratorSymbol]() {\n return this.values();\n },\n forEach(callback, thisArg) {\n const iterator = this.values();\n let result = iterator.next();\n while (!result.done) {\n callback.call(thisArg, result.value, result.value, this);\n result = iterator.next();\n }\n },\n};\nif (Set.prototype.difference) {\n // for compatibility with new Set methods\n // https://github.com/tc39/proposal-set-methods\n // And `https://github.com/tc39/proposal-set-methods/blob/main/details.md#symbolspecies` has some details about the `@@species` symbol.\n // So we can't use SubSet instance constructor to get the constructor of the SubSet instance.\n Object.assign(setHandler, {\n intersection(other) {\n return Set.prototype.intersection.call(new Set(this.values()), other);\n },\n union(other) {\n return Set.prototype.union.call(new Set(this.values()), other);\n },\n difference(other) {\n return Set.prototype.difference.call(new Set(this.values()), other);\n },\n symmetricDifference(other) {\n return Set.prototype.symmetricDifference.call(new Set(this.values()), other);\n },\n isSubsetOf(other) {\n return Set.prototype.isSubsetOf.call(new Set(this.values()), other);\n },\n isSupersetOf(other) {\n return Set.prototype.isSupersetOf.call(new Set(this.values()), other);\n },\n isDisjointFrom(other) {\n return Set.prototype.isDisjointFrom.call(new Set(this.values()), other);\n },\n });\n}\nconst setHandlerKeys = Reflect.ownKeys(setHandler);\n\nconst proxyHandler = {\n get(target, key, receiver) {\n var _a, _b;\n const copy = (_a = target.copy) === null || _a === void 0 ? void 0 : _a[key];\n // Improve draft reading performance by caching the draft copy.\n if (copy && target.finalities.draftsCache.has(copy)) {\n return copy;\n }\n if (key === PROXY_DRAFT)\n return target;\n let markResult;\n if (target.options.mark) {\n // handle `Uncaught TypeError: Method get Map.prototype.size called on incompatible receiver #<Map>`\n // or `Uncaught TypeError: Method get Set.prototype.size called on incompatible receiver #<Set>`\n const value = key === 'size' &&\n (target.original instanceof Map || target.original instanceof Set)\n ? Reflect.get(target.original, key)\n : Reflect.get(target.original, key, receiver);\n markResult = target.options.mark(value, dataTypes);\n if (markResult === dataTypes.mutable) {\n if (target.options.strict) {\n checkReadable(value, target.options, true);\n }\n return value;\n }\n }\n const source = latest(target);\n if (source instanceof Map && mapHandlerKeys.includes(key)) {\n if (key === 'size') {\n return Object.getOwnPropertyDescriptor(mapHandler, 'size').get.call(target.proxy);\n }\n const handle = mapHandler[key];\n return handle.bind(target.proxy);\n }\n if (source instanceof Set && setHandlerKeys.includes(key)) {\n if (key === 'size') {\n return Object.getOwnPropertyDescriptor(setHandler, 'size').get.call(target.proxy);\n }\n const handle = setHandler[key];\n return handle.bind(target.proxy);\n }\n if (!has(source, key)) {\n const desc = getDescriptor(source, key);\n return desc\n ? `value` in desc\n ? desc.value\n : // !case: support for getter\n (_b = desc.get) === null || _b === void 0 ? void 0 : _b.call(target.proxy)\n : undefined;\n }\n const value = source[key];\n if (target.options.strict) {\n checkReadable(value, target.options);\n }\n if (target.finalized || !isDraftable(value, target.options)) {\n return value;\n }\n // Ensure that the assigned values are not drafted\n if (value === peek(target.original, key)) {\n ensureShallowCopy(target);\n target.copy[key] = createDraft({\n original: target.original[key],\n parentDraft: target,\n key: target.type === 1 /* DraftType.Array */ ? Number(key) : key,\n finalities: target.finalities,\n options: target.options,\n });\n // !case: support for custom shallow copy function\n if (typeof markResult === 'function') {\n const subProxyDraft = getProxyDraft(target.copy[key]);\n ensureShallowCopy(subProxyDraft);\n // Trigger a custom shallow copy to update to a new copy\n markChanged(subProxyDraft);\n return subProxyDraft.copy;\n }\n return target.copy[key];\n }\n if (isDraft(value)) {\n target.finalities.draftsCache.add(value);\n }\n return value;\n },\n set(target, key, value) {\n var _a;\n if (target.type === 3 /* DraftType.Set */ || target.type === 2 /* DraftType.Map */) {\n throw new Error(`Map/Set draft does not support any property assignment.`);\n }\n let _key;\n if (target.type === 1 /* DraftType.Array */ &&\n key !== 'length' &&\n !(Number.isInteger((_key = Number(key))) &&\n _key >= 0 &&\n (key === 0 || _key === 0 || String(_key) === String(key)))) {\n throw new Error(`Only supports setting array indices and the 'length' property.`);\n }\n const desc = getDescriptor(latest(target), key);\n if (desc === null || desc === void 0 ? void 0 : desc.set) {\n // !case: cover the case of setter\n desc.set.call(target.proxy, value);\n return true;\n }\n const current = peek(latest(target), key);\n const currentProxyDraft = getProxyDraft(current);\n if (currentProxyDraft && isEqual(currentProxyDraft.original, value)) {\n // !case: ignore the case of assigning the original draftable value to a draft\n target.copy[key] = value;\n target.assignedMap = (_a = target.assignedMap) !== null && _a !== void 0 ? _a : new Map();\n target.assignedMap.set(key, false);\n return true;\n }\n // !case: handle new props with value 'undefined'\n if (isEqual(value, current) &&\n (value !== undefined || has(target.original, key)))\n return true;\n ensureShallowCopy(target);\n markChanged(target);\n if (has(target.original, key) && isEqual(value, target.original[key])) {\n // !case: handle the case of assigning the original non-draftable value to a draft\n target.assignedMap.delete(key);\n }\n else {\n target.assignedMap.set(key, true);\n }\n target.copy[key] = value;\n markFinalization(target, key, value, generatePatches);\n return true;\n },\n has(target, key) {\n return key in latest(target);\n },\n ownKeys(target) {\n return Reflect.ownKeys(latest(target));\n },\n getOwnPropertyDescriptor(target, key) {\n const source = latest(target);\n const descriptor = Reflect.getOwnPropertyDescriptor(source, key);\n if (!descriptor)\n return descriptor;\n return {\n writable: true,\n configurable: target.type !== 1 /* DraftType.Array */ || key !== 'length',\n enumerable: descriptor.enumerable,\n value: source[key],\n };\n },\n getPrototypeOf(target) {\n return Reflect.getPrototypeOf(target.original);\n },\n setPrototypeOf() {\n throw new Error(`Cannot call 'setPrototypeOf()' on drafts`);\n },\n defineProperty() {\n throw new Error(`Cannot call 'defineProperty()' on drafts`);\n },\n deleteProperty(target, key) {\n var _a;\n if (target.type === 1 /* DraftType.Array */) {\n return proxyHandler.set.call(this, target, key, undefined, target.proxy);\n }\n if (peek(target.original, key) !== undefined || key in target.original) {\n // !case: delete an existing key\n ensureShallowCopy(target);\n markChanged(target);\n target.assignedMap.set(key, false);\n }\n else {\n target.assignedMap = (_a = target.assignedMap) !== null && _a !== void 0 ? _a : new Map();\n // The original non-existent key has been deleted\n target.assignedMap.delete(key);\n }\n if (target.copy)\n delete target.copy[key];\n return true;\n },\n};\nfunction createDraft(createDraftOptions) {\n const { original, parentDraft, key, finalities, options } = createDraftOptions;\n const type = getType(original);\n const proxyDraft = {\n type,\n finalized: false,\n parent: parentDraft,\n original,\n copy: null,\n proxy: null,\n finalities,\n options,\n // Mapping of draft Set items to their corresponding draft values.\n setMap: type === 3 /* DraftType.Set */\n ? new Map(original.entries())\n : undefined,\n };\n // !case: undefined as a draft map key\n if (key || 'key' in createDraftOptions) {\n proxyDraft.key = key;\n }\n const { proxy, revoke } = Proxy.revocable(type === 1 /* DraftType.Array */ ? Object.assign([], proxyDraft) : proxyDraft, proxyHandler);\n finalities.revoke.push(revoke);\n proxyDraft.proxy = proxy;\n if (parentDraft) {\n const target = parentDraft;\n target.finalities.draft.push((patches, inversePatches) => {\n var _a, _b;\n const oldProxyDraft = getProxyDraft(proxy);\n // if target is a Set draft, `setMap` is the real Set copies proxy mapping.\n let copy = target.type === 3 /* DraftType.Set */ ? target.setMap : target.copy;\n const draft = get(copy, key);\n const proxyDraft = getProxyDraft(draft);\n if (proxyDraft) {\n // assign the updated value to the copy object\n let updatedValue = proxyDraft.original;\n if (proxyDraft.operated) {\n updatedValue = getValue(draft);\n }\n finalizeSetValue(proxyDraft);\n finalizePatches(proxyDraft, generatePatches, patches, inversePatches);\n if (target.options.enableAutoFreeze) {\n target.options.updatedValues =\n (_a = target.options.updatedValues) !== null && _a !== void 0 ? _a : new WeakMap();\n target.options.updatedValues.set(updatedValue, proxyDraft.original);\n }\n // final update value\n set(copy, key, updatedValue);\n }\n // !case: handle the deleted key\n (_b = oldProxyDraft.callbacks) === null || _b === void 0 ? void 0 : _b.forEach((callback) => {\n callback(patches, inversePatches);\n });\n });\n }\n else {\n // !case: handle the root draft\n const target = getProxyDraft(proxy);\n target.finalities.draft.push((patches, inversePatches) => {\n finalizeSetValue(target);\n finalizePatches(target, generatePatches, patches, inversePatches);\n });\n }\n return proxy;\n}\ninternal.createDraft = createDraft;\nfunction finalizeDraft(result, returnedValue, patches, inversePatches, enableAutoFreeze) {\n var _a;\n const proxyDraft = getProxyDraft(result);\n const original = (_a = proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.original) !== null && _a !== void 0 ? _a : result;\n const hasReturnedValue = !!returnedValue.length;\n if (proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.operated) {\n while (proxyDraft.finalities.draft.length > 0) {\n const finalize = proxyDraft.finalities.draft.pop();\n finalize(patches, inversePatches);\n }\n }\n const state = hasReturnedValue\n ? returnedValue[0]\n : proxyDraft\n ? proxyDraft.operated\n ? proxyDraft.copy\n : proxyDraft.original\n : result;\n if (proxyDraft)\n revokeProxy(proxyDraft);\n if (enableAutoFreeze) {\n deepFreeze(state, state, proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.options.updatedValues);\n }\n return [\n state,\n patches && hasReturnedValue\n ? [{ op: Operation.Replace, path: [], value: returnedValue[0] }]\n : patches,\n inversePatches && hasReturnedValue\n ? [{ op: Operation.Replace, path: [], value: original }]\n : inversePatches,\n ];\n}\n\nfunction draftify(baseState, options) {\n var _a;\n const finalities = {\n draft: [],\n revoke: [],\n handledSet: new WeakSet(),\n draftsCache: new WeakSet(),\n };\n let patches;\n let inversePatches;\n if (options.enablePatches) {\n patches = [];\n inversePatches = [];\n }\n const isMutable = ((_a = options.mark) === null || _a === void 0 ? void 0 : _a.call(options, baseState, dataTypes)) === dataTypes.mutable ||\n !isDraftable(baseState, options);\n const draft = isMutable\n ? baseState\n : createDraft({\n original: baseState,\n parentDraft: null,\n finalities,\n options,\n });\n return [\n draft,\n (returnedValue = []) => {\n const [finalizedState, finalizedPatches, finalizedInversePatches] = finalizeDraft(draft, returnedValue, patches, inversePatches, options.enableAutoFreeze);\n return (options.enablePatches\n ? [finalizedState, finalizedPatches, finalizedInversePatches]\n : finalizedState);\n },\n ];\n}\n\nfunction handleReturnValue(options) {\n const { rootDraft, value, useRawReturn = false, isRoot = true } = options;\n forEach(value, (key, item, source) => {\n const proxyDraft = getProxyDraft(item);\n // just handle the draft which is created by the same rootDraft\n if (proxyDraft &&\n rootDraft &&\n proxyDraft.finalities === rootDraft.finalities) {\n options.isContainDraft = true;\n const currentValue = proxyDraft.original;\n // final update value, but just handle return value\n if (source instanceof Set) {\n const arr = Array.from(source);\n source.clear();\n arr.forEach((_item) => source.add(key === _item ? currentValue : _item));\n }\n else {\n set(source, key, currentValue);\n }\n }\n else if (typeof item === 'object' && item !== null) {\n options.value = item;\n options.isRoot = false;\n handleReturnValue(options);\n }\n });\n if (isRoot) {\n if (!options.isContainDraft)\n console.warn(`The return value does not contain any draft, please use 'rawReturn()' to wrap the return value to improve performance.`);\n if (useRawReturn) {\n console.warn(`The return value contains drafts, please don't use 'rawReturn()' to wrap the return value.`);\n }\n }\n}\nfunction getCurrent(target) {\n var _a;\n const proxyDraft = getProxyDraft(target);\n if (!isDraftable(target, proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.options))\n return target;\n const type = getType(target);\n if (proxyDraft && !proxyDraft.operated)\n return proxyDraft.original;\n let currentValue;\n function ensureShallowCopy() {\n currentValue =\n type === 2 /* DraftType.Map */\n ? !isBaseMapInstance(target)\n ? new (Object.getPrototypeOf(target).constructor)(target)\n : new Map(target)\n : type === 3 /* DraftType.Set */\n ? Array.from(proxyDraft.setMap.values())\n : shallowCopy(target, proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.options);\n }\n if (proxyDraft) {\n // It's a proxy draft, let's create a shallow copy eagerly\n proxyDraft.finalized = true;\n try {\n ensureShallowCopy();\n }\n finally {\n proxyDraft.finalized = false;\n }\n }\n else {\n // It's not a proxy draft, let's use the target directly and let's see\n // lazily if we need to create a shallow copy\n currentValue = target;\n }\n forEach(currentValue, (key, value) => {\n if (proxyDraft && isEqual(get(proxyDraft.original, key), value))\n return;\n const newValue = getCurrent(value);\n if (newValue !== value) {\n if (currentValue === target)\n ensureShallowCopy();\n set(currentValue, key, newValue);\n }\n });\n if (type === 3 /* DraftType.Set */) {\n const value = (_a = proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.original) !== null && _a !== void 0 ? _a : currentValue;\n return !isBaseSetInstance(value)\n ? new (Object.getPrototypeOf(value).constructor)(currentValue)\n : new Set(currentValue);\n }\n return currentValue;\n}\nfunction current(target) {\n if (!isDraft(target)) {\n throw new Error(`current() is only used for Draft, parameter: ${target}`);\n }\n return getCurrent(target);\n}\n\n/**\n * `makeCreator(options)` to make a creator function.\n *\n * ## Example\n *\n * ```ts\n * import { makeCreator } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const create = makeCreator({ enableAutoFreeze: true });\n * const state = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * },\n * );\n *\n * expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });\n * expect(state).not.toBe(baseState);\n * expect(state.foo).not.toBe(baseState.foo);\n * expect(state.arr).toBe(baseState.arr);\n * expect(Object.isFrozen(state)).toBeTruthy();\n * ```\n */\nconst makeCreator = (arg) => {\n if (arg !== undefined &&\n Object.prototype.toString.call(arg) !== '[object Object]') {\n throw new Error(`Invalid options: ${String(arg)}, 'options' should be an object.`);\n }\n return function create(arg0, arg1, arg2) {\n var _a, _b, _c;\n if (typeof arg0 === 'function' && typeof arg1 !== 'function') {\n return function (base, ...args) {\n return create(base, (draft) => arg0.call(this, draft, ...args), arg1);\n };\n }\n const base = arg0;\n const mutate = arg1;\n let options = arg2;\n if (typeof arg1 !== 'function') {\n options = arg1;\n }\n if (options !== undefined &&\n Object.prototype.toString.call(options) !== '[object Object]') {\n throw new Error(`Invalid options: ${options}, 'options' should be an object.`);\n }\n options = Object.assign(Object.assign({}, arg), options);\n const state = isDraft(base) ? current(base) : base;\n const mark = Array.isArray(options.mark)\n ? ((value, types) => {\n for (const mark of options.mark) {\n if (typeof mark !== 'function') {\n throw new Error(`Invalid mark: ${mark}, 'mark' should be a function.`);\n }\n const result = mark(value, types);\n if (result) {\n return result;\n }\n }\n return;\n })\n : options.mark;\n const enablePatches = (_a = options.enablePatches) !== null && _a !== void 0 ? _a : false;\n const strict = (_b = options.strict) !== null && _b !== void 0 ? _b : false;\n const enableAutoFreeze = (_c = options.enableAutoFreeze) !== null && _c !== void 0 ? _c : false;\n const _options = {\n enableAutoFreeze,\n mark,\n strict,\n enablePatches,\n };\n if (!isDraftable(state, _options) &&\n typeof state === 'object' &&\n state !== null) {\n throw new Error(`Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.`);\n }\n const [draft, finalize] = draftify(state, _options);\n if (typeof arg1 !== 'function') {\n if (!isDraftable(state, _options)) {\n throw new Error(`Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.`);\n }\n return [draft, finalize];\n }\n let result;\n try {\n result = mutate(draft);\n }\n catch (error) {\n revokeProxy(getProxyDraft(draft));\n throw error;\n }\n const returnValue = (value) => {\n const proxyDraft = getProxyDraft(draft);\n if (!isDraft(value)) {\n if (value !== undefined &&\n !isEqual(value, draft) &&\n (proxyDraft === null || proxyDraft === void 0 ? void 0 : proxyDraft.operated)) {\n throw new Error(`Either the value is returned as a new non-draft value, or only the draft is modified without returning any value.`);\n }\n const rawReturnValue = value === null || value === void 0 ? void 0 : value[RAW_RETURN_SYMBOL];\n if (rawReturnValue) {\n const _value = rawReturnValue[0];\n if (_options.strict && typeof value === 'object' && value !== null) {\n handleReturnValue({\n rootDraft: proxyDraft,\n value,\n useRawReturn: true,\n });\n }\n return finalize([_value]);\n }\n if (value !== undefined) {\n if (typeof value === 'object' && value !== null) {\n handleReturnValue({ rootDraft: proxyDraft, value });\n }\n return finalize([value]);\n }\n }\n if (value === draft || value === undefined) {\n return finalize([]);\n }\n const returnedProxyDraft = getProxyDraft(value);\n if (_options === returnedProxyDraft.options) {\n if (returnedProxyDraft.operated) {\n throw new Error(`Cannot return a modified child draft.`);\n }\n return finalize([current(value)]);\n }\n return finalize([value]);\n };\n if (result instanceof Promise) {\n return result.then(returnValue, (error) => {\n revokeProxy(getProxyDraft(draft));\n throw error;\n });\n }\n return returnValue(result);\n };\n};\n\n/**\n * `create(baseState, callback, options)` to create the next state\n *\n * ## Example\n *\n * ```ts\n * import { create } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const state = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * },\n * );\n *\n * expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });\n * expect(state).not.toBe(baseState);\n * expect(state.foo).not.toBe(baseState.foo);\n * expect(state.arr).toBe(baseState.arr);\n * ```\n */\nconst create = makeCreator();\n\n/**\n * `apply(state, patches)` to apply patches to state\n *\n * ## Example\n *\n * ```ts\n * import { create, apply } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const [state, patches] = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * },\n * { enablePatches: true }\n * );\n * expect(state).toEqual({ foo: { bar: 'str2' }, arr: [] });\n * expect(patches).toEqual([{ op: 'replace', path: ['foo', 'bar'], value: 'str2' }]);\n * expect(state).toEqual(apply(baseState, patches));\n * ```\n */\nfunction apply(state, patches, applyOptions) {\n let i;\n for (i = patches.length - 1; i >= 0; i -= 1) {\n const { value, op, path } = patches[i];\n if ((!path.length && op === Operation.Replace) ||\n (path === '' && op === Operation.Add)) {\n state = value;\n break;\n }\n }\n if (i > -1) {\n patches = patches.slice(i + 1);\n }\n const mutate = (draft) => {\n patches.forEach((patch) => {\n const { path: _path, op } = patch;\n const path = unescapePath(_path);\n let base = draft;\n for (let index = 0; index < path.length - 1; index += 1) {\n const parentType = getType(base);\n let key = path[index];\n if (typeof key !== 'string' && typeof key !== 'number') {\n key = String(key);\n }\n if (((parentType === 0 /* DraftType.Object */ ||\n parentType === 1 /* DraftType.Array */) &&\n (key === '__proto__' || key === 'constructor')) ||\n (typeof base === 'function' && key === 'prototype')) {\n throw new Error(`Patching reserved attributes like __proto__ and constructor is not allowed.`);\n }\n // use `index` in Set draft\n base = get(parentType === 3 /* DraftType.Set */ ? Array.from(base) : base, key);\n if (typeof base !== 'object') {\n throw new Error(`Cannot apply patch at '${path.join('/')}'.`);\n }\n }\n const type = getType(base);\n // ensure the original patch is not modified.\n const value = deepClone(patch.value);\n const key = path[path.length - 1];\n switch (op) {\n case Operation.Replace:\n switch (type) {\n case 2 /* DraftType.Map */:\n return base.set(key, value);\n case 3 /* DraftType.Set */:\n throw new Error(`Cannot apply replace patch to set.`);\n default:\n return (base[key] = value);\n }\n case Operation.Add:\n switch (type) {\n case 1 /* DraftType.Array */:\n // If the \"-\" character is used to\n // index the end of the array (see [RFC6901](https://datatracker.ietf.org/doc/html/rfc6902)),\n // this has the effect of appending the value to the array.\n return key === '-'\n ? base.push(value)\n : base.splice(key, 0, value);\n case 2 /* DraftType.Map */:\n return base.set(key, value);\n case 3 /* DraftType.Set */:\n return base.add(value);\n default:\n return (base[key] = value);\n }\n case Operation.Remove:\n switch (type) {\n case 1 /* DraftType.Array */:\n return base.splice(key, 1);\n case 2 /* DraftType.Map */:\n return base.delete(key);\n case 3 /* DraftType.Set */:\n return base.delete(patch.value);\n default:\n return delete base[key];\n }\n default:\n throw new Error(`Unsupported patch operation: ${op}.`);\n }\n });\n };\n if (applyOptions === null || applyOptions === void 0 ? void 0 : applyOptions.mutable) {\n {\n if (Object.keys(applyOptions).filter((key) => key !== 'mutable').length) {\n console.warn('The \"mutable\" option is not allowed to be used with other options.');\n }\n }\n mutate(state);\n return undefined;\n }\n if (isDraft(state)) {\n if (applyOptions !== undefined) {\n throw new Error(`Cannot apply patches with options to a draft.`);\n }\n mutate(state);\n return state;\n }\n return create(state, mutate, Object.assign(Object.assign({}, applyOptions), { enablePatches: false }));\n}\n\n/**\n * `original(draft)` to get original state in the draft mutation function.\n *\n * ## Example\n *\n * ```ts\n * import { create, original } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const state = create(\n * baseState,\n * (draft) => {\n * draft.foo.bar = 'str2';\n * expect(original(draft.foo)).toEqual({ bar: 'str' });\n * }\n * );\n * ```\n */\nfunction original(target) {\n const proxyDraft = getProxyDraft(target);\n if (!proxyDraft) {\n throw new Error(`original() is only used for a draft, parameter: ${target}`);\n }\n return proxyDraft.original;\n}\n\n/**\n * Use rawReturn() to wrap the return value to skip the draft check and thus improve performance.\n *\n * ## Example\n *\n * ```ts\n * import { create, rawReturn } from '../index';\n *\n * const baseState = { foo: { bar: 'str' }, arr: [] };\n * const state = create(\n * baseState,\n * (draft) => {\n * return rawReturn(baseState);\n * },\n * );\n * expect(state).toBe(baseState);\n * ```\n */\nfunction rawReturn(value) {\n if (arguments.length === 0) {\n throw new Error('rawReturn() must be called with a value.');\n }\n if (arguments.length > 1) {\n throw new Error('rawReturn() must be called with one argument.');\n }\n if (value !== undefined &&\n (typeof value !== 'object' || value === null)) {\n console.warn('rawReturn() must be called with an object(including plain object, arrays, Set, Map, etc.) or `undefined`, other types do not need to be returned via rawReturn().');\n }\n return {\n [RAW_RETURN_SYMBOL]: [value],\n };\n}\n\nconst constructorString = Object.prototype.constructor.toString();\n/**\n * Check if the value is a simple object(No prototype chain object or iframe same-origin object),\n * support case: https://github.com/unadlib/mutative/issues/17\n */\nconst isSimpleObject = (value) => {\n if (!value || typeof value !== 'object')\n return false;\n const prototype = Object.getPrototypeOf(value);\n if (prototype === null) {\n return true;\n }\n const constructor = Object.hasOwnProperty.call(prototype, 'constructor') &&\n prototype.constructor;\n if (constructor === Object)\n return true;\n return (typeof constructor === 'function' &&\n Function.toString.call(constructor) === constructorString);\n};\nconst markSimpleObject = (value) => {\n if (isSimpleObject(value)) {\n return dataTypes.immutable;\n }\n return;\n};\n\n/**\n * Cast a value to an Draft type value.\n */\nfunction castDraft(value) {\n return value;\n}\n/**\n * Cast a value to an Immutable type value.\n */\nfunction castImmutable(value) {\n return value;\n}\n/**\n * Cast a value to an Mutable type value.\n */\nfunction castMutable(draft) {\n return draft;\n}\n\nexport { apply, castDraft, castImmutable, castMutable, create, current, isDraft, isDraftable, makeCreator, markSimpleObject, original, rawReturn, unsafe };\n//# sourceMappingURL=mutative.esm.mjs.map\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nexport default toFinite;\n","import toFinite from './toFinite.js';\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n}\n\nexport default apply;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n}\n\nexport default shortOut;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n};\n\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nexport default arrayEach;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","import defineProperty from './_defineProperty.js';\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nexport default assignValue;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n}\n\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nexport default isIterateeCall;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n}\n\nexport default baseFlatten;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\nfunction baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n}\n\nexport default baseClamp;\n","import baseClamp from './_baseClamp.js';\nimport toNumber from './toNumber.js';\n\n/**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\nfunction clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n}\n\nexport default clamp;\n","import identity from './identity.js';\n\n/**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","import baseEach from './_baseEach.js';\n\n/**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n}\n\nexport default baseFilter;\n","import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\n\n/**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default filter;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\n\n/**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n}\n\nexport default createFind;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\nfunction findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\n\n/**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\nvar find = createFind(findIndex);\n\nexport default find;\n","/**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\nfunction head(array) {\n return (array && array.length) ? array[0] : undefined;\n}\n\nexport default head;\n","/**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nexport default baseGt;\n","import baseGetTag from './_baseGetTag.js';\nimport isArray from './isArray.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n}\n\nexport default isString;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLike from './isArrayLike.js';\nimport isBuffer from './isBuffer.js';\nimport isPrototype from './_isPrototype.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n}\n\nexport default isEmpty;\n","import baseIsEqual from './_baseIsEqual.js';\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nexport default isEqual;\n","/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeJoin = arrayProto.join;\n\n/**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\nfunction join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n}\n\nexport default join;\n","/**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n","import isSymbol from './isSymbol.js';\n\n/**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\nfunction baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n}\n\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport baseIteratee from './_baseIteratee.js';\n\n/**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\nfunction maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseGt)\n : undefined;\n}\n\nexport default maxBy;\n","import baseExtremum from './_baseExtremum.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseLt from './_baseLt.js';\n\n/**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\nfunction minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n : undefined;\n}\n\nexport default minBy;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\n\nexport default baseSet;\n","/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n}\n\nexport default baseSortBy;\n","import isSymbol from './isSymbol.js';\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n}\n\nexport default compareAscending;\n","import compareAscending from './_compareAscending.js';\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n}\n\nexport default compareMultiple;\n","import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n}\n\nexport default baseOrderBy;\n","import baseProperty from './_baseProperty.js';\n\n/**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nvar asciiSize = baseProperty('length');\n\nexport default asciiSize;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\nfunction unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n}\n\nexport default unicodeSize;\n","import asciiSize from './_asciiSize.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeSize from './_unicodeSize.js';\n\n/**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\nfunction stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n}\n\nexport default stringSize;\n","import baseSet from './_baseSet.js';\n\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nexport default set;\n","import baseKeys from './_baseKeys.js';\nimport getTag from './_getTag.js';\nimport isArrayLike from './isArrayLike.js';\nimport isString from './isString.js';\nimport stringSize from './_stringSize.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n setTag = '[object Set]';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\nfunction size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n}\n\nexport default size;\n","import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\nexport default sortBy;\n","import baseSlice from './_baseSlice.js';\nimport toInteger from './toInteger.js';\n\n/**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\nfunction take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n}\n\nexport default take;\n","import { create, type Draft } from \"mutative\";\nimport { size, isEmpty, get, take } from \"lodash-es\";\nimport type { Change, SyncQueueState, SyncResponse } from \"./types\";\n\nexport type SyncQueueConfig<T, C = unknown> = {\n debounce: number;\n maxRetries: number;\n batchSize?: number;\n getContext?: () => C;\n onSync: (changes: Change<T>[], context: C, signal: AbortSignal) => Promise<SyncResponse<T>>;\n onServerItems?: (items: T[]) => void;\n};\n\n/**\n * Coalesce two operations on the same item into a single operation.\n *\n * Rules:\n * - create + delete = null (net zero)\n * - create + update = create (with new data)\n * - update + update = update (with new data)\n * - update + delete = delete\n * - any other = replace with new\n */\nconst coalesce = <T>(existing: Change<T> | undefined, next: Change<T>): Change<T> | null => {\n if (!existing) return next;\n\n if (existing.type === \"create\" && next.type === \"delete\") return null;\n if (existing.type === \"create\" && next.type === \"update\") return { ...existing, data: next.data };\n if (existing.type === \"update\" && next.type === \"update\") return next;\n if (existing.type === \"update\" && next.type === \"delete\") return next;\n\n return next;\n};\n\nexport class SyncQueue<T extends { id: string }, C = unknown> {\n private _config: SyncQueueConfig<T, C>;\n private _state: SyncQueueState<T>;\n private _subscribers = new Set<() => void>();\n private _debounceTimer: ReturnType<typeof setTimeout> | null = null;\n private _abortController: AbortController | null = null;\n\n constructor(config: SyncQueueConfig<T, C>) {\n this._config = config;\n this._state = {\n queue: new Map(),\n inFlight: new Map(),\n errors: new Map(),\n isPaused: false,\n isSyncing: false,\n };\n }\n\n enqueue(change: Change<T>): void {\n this._updateState((draft) => {\n const existing = draft.queue.get(change.id) as Change<T> | undefined;\n const coalesced = coalesce(existing, change);\n\n if (coalesced) {\n draft.queue.set(change.id, coalesced as Draft<Change<T>>);\n } else {\n draft.queue.delete(change.id);\n }\n draft.errors.delete(change.id);\n });\n this._scheduleFlush();\n }\n\n pause(): void {\n this._updateState((draft) => {\n draft.isPaused = true;\n });\n this._clearTimer();\n }\n\n resume(): void {\n this._updateState((draft) => {\n draft.isPaused = false;\n });\n if (this._state.queue.size > 0) this._scheduleFlush();\n }\n\n retryAll(): void {\n const errors = this._state.errors;\n if (errors.size === 0) return;\n\n this._updateState((draft) => {\n for (const [id, errorInfo] of errors) {\n if (!draft.queue.has(id)) {\n draft.queue.set(id, errorInfo.operation as Draft<Change<T>>);\n }\n }\n draft.errors.clear();\n });\n this._scheduleFlush();\n }\n\n retry(id: string): void {\n const errorInfo = this._state.errors.get(id);\n if (!errorInfo) return;\n\n this._updateState((draft) => {\n if (!draft.queue.has(id)) {\n draft.queue.set(id, errorInfo.operation as Draft<Change<T>>);\n }\n draft.errors.delete(id);\n });\n this._scheduleFlush();\n }\n\n resetRetries(id: string): void {\n if (!this._state.errors.has(id)) return;\n this._updateState((draft) => {\n const error = draft.errors.get(id);\n if (error) error.retries = 0;\n });\n }\n\n destroy(): void {\n this._clearTimer();\n this._abortController?.abort(\"SyncQueue destroyed\");\n this._abortController = null;\n this._subscribers.clear();\n this._state = {\n queue: new Map(),\n inFlight: new Map(),\n errors: new Map(),\n isPaused: false,\n isSyncing: false,\n };\n }\n\n getState(): SyncQueueState<T> {\n return this._state;\n }\n\n subscribe(callback: () => void): () => void {\n this._subscribers.add(callback);\n return () => this._subscribers.delete(callback);\n }\n\n private _updateState(mutator: (draft: Draft<SyncQueueState<T>>) => void): void {\n this._state = create(this._state, mutator);\n this._subscribers.forEach((cb) => cb());\n }\n\n private _scheduleFlush(): void {\n if (this._state.isPaused || this._state.isSyncing) return;\n this._clearTimer();\n this._debounceTimer = setTimeout(() => this._flush(), this._config.debounce);\n }\n\n private _clearTimer(): void {\n if (this._debounceTimer) {\n clearTimeout(this._debounceTimer);\n this._debounceTimer = null;\n }\n }\n\n private async _flush(): Promise<void> {\n const { isPaused, isSyncing, queue } = this._state;\n if (isPaused || isSyncing || isEmpty(queue)) return;\n\n const batchSize = get(this._config, \"batchSize\", Infinity);\n const queueEntries = [...queue.entries()];\n const entriesToProcess = take(queueEntries, batchSize);\n const remainingEntries = queueEntries.slice(size(entriesToProcess));\n\n this._updateState((draft) => {\n draft.inFlight = new Map(entriesToProcess) as Draft<Map<string, Change<T>>>;\n draft.queue = new Map(remainingEntries) as Draft<Map<string, Change<T>>>;\n draft.isSyncing = true;\n });\n\n const changes = [...this._state.inFlight.values()];\n const context = this._config.getContext?.() as C;\n this._abortController = new AbortController();\n\n try {\n const response = await this._config.onSync(changes, context, this._abortController.signal);\n this._processResponse(response);\n } catch (error) {\n this._handleError(error);\n }\n\n this._abortController = null;\n\n if (size(this._state.queue) > 0 && !this._state.isPaused) this._scheduleFlush();\n }\n\n private _processResponse(response: SyncResponse<T>): void {\n const inFlight = this._state.inFlight;\n const resultMap = new Map((response.syncResults ?? []).map((r) => [r.id, r] as const));\n\n this._updateState((draft) => {\n for (const [id, op] of inFlight) {\n const result = resultMap.get(id);\n\n if (result?.status === \"success\") {\n draft.errors.delete(id);\n } else {\n const retries = (draft.errors.get(id)?.retries ?? 0) + 1;\n if (retries < this._config.maxRetries && !draft.queue.has(id)) {\n draft.queue.set(id, op as Draft<Change<T>>);\n }\n draft.errors.set(id, {\n error: result?.error ?? \"Unknown error\",\n retries,\n operation: op as Draft<Change<T>>,\n });\n }\n }\n draft.inFlight = new Map();\n draft.isSyncing = false;\n });\n\n // Notify about extra server items (not in the change list)\n if (this._config.onServerItems && size(response.items) > 0) {\n const changeIds = new Set((response.syncResults ?? []).map((r) => r.id));\n const extraItems = (response.items ?? []).filter(\n (item: unknown) => !changeIds.has((item as T).id),\n );\n if (size(extraItems) > 0) {\n this._config.onServerItems(extraItems);\n }\n }\n }\n\n private _handleError(error: unknown): void {\n const inFlight = this._state.inFlight;\n const isAborted = get(this._abortController, \"signal.aborted\", false);\n const errorMsg = error instanceof Error ? error.message : String(error);\n\n this._updateState((draft) => {\n for (const [id, op] of inFlight) {\n if (isAborted) {\n if (!draft.queue.has(id)) draft.queue.set(id, op as Draft<Change<T>>);\n } else {\n const retries = (draft.errors.get(id)?.retries ?? 0) + 1;\n if (retries < this._config.maxRetries && !draft.queue.has(id)) {\n draft.queue.set(id, op as Draft<Change<T>>);\n }\n draft.errors.set(id, {\n error: errorMsg,\n retries,\n operation: op as Draft<Change<T>>,\n });\n }\n }\n draft.inFlight = new Map();\n draft.isSyncing = false;\n });\n }\n}\n","type CacheEntry<T> = { data: T; ts: number };\n\nexport class Cache<T> {\n private _cache = new Map<string, CacheEntry<T>>();\n private _capacity: number;\n private _ttl: number;\n\n constructor(capacity: number, ttl: number) {\n this._capacity = capacity;\n this._ttl = ttl;\n }\n\n get(key: string): T | null {\n const entry = this._cache.get(key);\n if (!entry) return null;\n\n if (Date.now() - entry.ts > this._ttl) {\n this._cache.delete(key);\n return null;\n }\n\n // Move to end (most recently used) for LRU\n this._cache.delete(key);\n this._cache.set(key, entry);\n return entry.data;\n }\n\n set(key: string, value: T): void {\n if (this._cache.has(key)) {\n this._cache.delete(key);\n } else if (this._cache.size >= this._capacity) {\n const firstKey = this._cache.keys().next().value;\n if (firstKey !== undefined) this._cache.delete(firstKey);\n }\n\n this._cache.set(key, { data: value, ts: Date.now() });\n }\n\n invalidate(key: string): void {\n this._cache.delete(key);\n }\n\n clear(): void {\n this._cache.clear();\n }\n\n has(key: string): boolean {\n return this.get(key) !== null;\n }\n\n get size(): number {\n return this._cache.size;\n }\n}\n","import { create } from \"mutative\";\nimport { Cache } from \"./cache\";\nimport type { FetchState } from \"./types\";\n\nexport type FetchHandlerConfig<T, C> = {\n id: string;\n cacheCapacity: number;\n cacheTtl: number;\n retries?: number;\n onFetch: (context: C, signal: AbortSignal) => Promise<T[]>;\n};\n\nexport type FetchHandlerState<T> = {\n status: FetchState;\n items: T[];\n error?: string;\n retryCount?: number;\n};\n\nexport class FetchHandler<T, C> {\n private _config: FetchHandlerConfig<T, C>;\n private _cache: Cache<T[]>;\n private _state: FetchHandlerState<T> = { status: \"idle\", items: [] };\n private _subscribers = new Set<() => void>();\n private _abortController: AbortController | null = null;\n private _currentContext: C | null = null;\n\n constructor(config: FetchHandlerConfig<T, C>) {\n this._config = { retries: 0, ...config };\n this._cache = new Cache<T[]>(config.cacheCapacity, config.cacheTtl);\n }\n\n private _getCacheKey = (context: C): string => JSON.stringify([this._config.id, context]);\n\n private _setState(patch: Partial<FetchHandlerState<T>>): void {\n this._state = create(this._state, (draft) => {\n Object.assign(draft, patch);\n });\n this._subscribers.forEach((cb) => cb());\n }\n\n private async _fetchWithRetry(context: C, signal: AbortSignal): Promise<T[]> {\n const maxRetries = this._config.retries!;\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n if (signal.aborted) throw new DOMException(\"Aborted\", \"AbortError\");\n\n try {\n if (attempt > 0) this._setState({ retryCount: attempt });\n return await this._config.onFetch(context, signal);\n } catch (error) {\n lastError = error;\n if (signal.aborted || attempt === maxRetries) throw error;\n }\n }\n\n throw lastError;\n }\n\n async fetch(context: C): Promise<T[]> {\n const cacheKey = this._getCacheKey(context);\n const cached = this._cache.get(cacheKey);\n\n if (cached !== null) {\n this._currentContext = context;\n this._setState({ status: \"idle\", items: cached, error: undefined, retryCount: undefined });\n return cached;\n }\n\n this._abortController?.abort(\"New fetch request started\");\n const abortController = new AbortController();\n this._abortController = abortController;\n this._currentContext = context;\n this._setState({ status: \"fetching\", error: undefined, retryCount: undefined });\n\n try {\n const items = await this._fetchWithRetry(context, abortController.signal);\n this._cache.set(cacheKey, items);\n this._abortController = null;\n this._setState({ status: \"idle\", items, error: undefined, retryCount: undefined });\n return items;\n } catch (error) {\n // If this request was aborted, return current items silently\n if (abortController.signal.aborted) return this._state.items;\n\n this._abortController = null;\n this._setState({\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n }\n\n async refresh(context?: C): Promise<T[]> {\n const ctx = context ?? this._currentContext;\n if (!ctx) throw new Error(\"No context provided for refresh\");\n\n this._cache.invalidate(this._getCacheKey(ctx));\n return this.fetch(ctx);\n }\n\n invalidateCache(): void {\n this._cache.clear();\n }\n\n invalidateCacheForContext(context: C): void {\n this._cache.invalidate(this._getCacheKey(context));\n }\n\n destroy(): void {\n this._abortController?.abort(\"FetchHandler destroyed\");\n this._abortController = null;\n this._cache.clear();\n this._subscribers.clear();\n this._currentContext = null;\n this._state = { status: \"idle\", items: [] };\n }\n\n getState = (): FetchHandlerState<T> => this._state;\n getContext = (): C | null => this._currentContext;\n isFetching = (): boolean => this._state.status === \"fetching\";\n\n subscribe(callback: () => void): () => void {\n this._subscribers.add(callback);\n return () => {\n this._subscribers.delete(callback);\n };\n }\n}\n","import { isEqual } from \"lodash-es\";\nimport type { Draft } from \"mutative\";\nimport type { Collection } from \"./collection\";\nimport type { ItemStatus } from \"./types\";\n\nexport class Item<T extends { id: string }, C = unknown> {\n private _collection: Collection<T, C>;\n private _id: string;\n private _cachedStatus: ItemStatus = null;\n\n constructor(collection: Collection<T, C>, id: string) {\n this._collection = collection;\n this._id = id;\n }\n\n get id(): string {\n return this._id;\n }\n\n get data(): T | undefined {\n return this._collection.getState().items.get(this._id);\n }\n\n update(mutate: (draft: Draft<T>) => void): void {\n this._collection.update(this._id, mutate);\n }\n\n remove(): void {\n this._collection.remove(this._id);\n }\n\n getStatus(): ItemStatus {\n const newStatus = this._collection.getItemStatus(this._id);\n if (!isEqual(this._cachedStatus, newStatus)) {\n this._cachedStatus = newStatus;\n }\n return this._cachedStatus;\n }\n\n exists(): boolean {\n return this._collection.getState().items.has(this._id);\n }\n\n get collection(): Collection<T, C> {\n return this._collection;\n }\n}\n","import {\n sortBy,\n map,\n isEqual,\n join,\n get,\n head,\n find,\n findIndex,\n filter,\n maxBy,\n minBy,\n forEach,\n size,\n clamp,\n} from \"lodash-es\";\nimport type { Draft } from \"mutative\";\nimport type { Collection } from \"./collection\";\nimport type { ItemStatus } from \"./types\";\nimport { getIdFromTime } from \"./utils\";\n\nconst DEFAULT_SEPARATOR = \".\";\n\nfunction getParentId(nodeId: string, separator: string): string | null {\n const idx = nodeId.lastIndexOf(separator);\n return idx === -1 ? null : nodeId.slice(0, idx);\n}\n\nfunction isDirectChild(nodeId: string, parentId: string, separator: string): boolean {\n if (!nodeId.startsWith(parentId + separator)) return false;\n return !nodeId.slice(parentId.length + 1).includes(separator);\n}\n\nfunction isDescendant(nodeId: string, ancestorId: string, separator: string): boolean {\n return nodeId.startsWith(ancestorId + separator);\n}\n\nfunction getDepth(nodeId: string, separator: string): number {\n // Zero-based: \"root\" = 0, \"root.child\" = 1, \"root.child.grandchild\" = 2\n return nodeId.split(separator).length - 1;\n}\n\nexport type TreeNode<T, NodeType = string> = {\n id: string;\n position: number;\n value: T;\n type: NodeType;\n clientUpdatedAt?: number;\n};\n\nexport class Node<T extends object, C = unknown, NodeType = string> {\n private _id: string;\n private _collection: Collection<TreeNode<T, NodeType>, C>;\n private _cachedStatus: ItemStatus = null;\n\n constructor(collection: Collection<TreeNode<T, NodeType>, C>, id: string) {\n this._collection = collection;\n this._id = id;\n }\n\n private get _separator(): string {\n return this._collection.config.nodeSeparator ?? DEFAULT_SEPARATOR;\n }\n\n get id(): string {\n return this._id;\n }\n\n get data(): TreeNode<T, NodeType> | undefined {\n return this._collection.getState().items.get(this._id);\n }\n\n get collection(): Collection<TreeNode<T, NodeType>, C> {\n return this._collection;\n }\n\n get depth(): number {\n return getDepth(this._id, this._separator);\n }\n\n exists(): boolean {\n return this._collection.getState().items.has(this._id);\n }\n\n getStatus(): ItemStatus {\n const newStatus = this._collection.getItemStatus(this._id);\n if (!isEqual(this._cachedStatus, newStatus)) {\n this._cachedStatus = newStatus;\n }\n return this._cachedStatus;\n }\n\n private _touch(id: string): void {\n if (this._collection.items.has(id)) {\n this._collection.update(id, (draft) => {\n draft.clientUpdatedAt = Date.now();\n });\n }\n }\n\n getParent(): Node<T, C, NodeType> | null {\n const parentId = getParentId(this._id, this._separator);\n return parentId ? this._collection.getNode<T, NodeType>(parentId) : null;\n }\n\n getChildren(): Node<T, C, NodeType>[] {\n const items = [...this._collection.items.entries()];\n const childEntries = map(\n filter(items, ([id]) => isDirectChild(id, this._id, this._separator)),\n ([id, data]) => ({ id, position: (data as TreeNode<T, NodeType>).position }),\n );\n\n const sorted = sortBy(childEntries, \"position\");\n return map(sorted, (entry) => this._collection.getNode<T, NodeType>(entry.id));\n }\n\n private _generateChildId(): string {\n const { getNodeId } = this._collection.config;\n const nodeId = getNodeId ? getNodeId() : getIdFromTime();\n return join([this._id, nodeId], this._separator);\n }\n\n moveUp(): void {\n const nodeData = this.data;\n if (!nodeData) return;\n\n const parentId = getParentId(this._id, this._separator);\n if (!parentId) return;\n\n const parentNode = this._collection.getNode<T, NodeType>(parentId);\n const siblings = parentNode.getChildren();\n const idx = findIndex(siblings, (s) => s.id === this._id);\n\n if (idx <= 0) return;\n\n const prevSibling = siblings[idx - 1];\n const prevData = prevSibling.data;\n if (!prevData) return;\n\n const currentPosition = nodeData.position;\n this._collection.batch(() => {\n this._collection.update(prevSibling.id, (draft) => {\n draft.position = currentPosition;\n });\n this._collection.update(this._id, (draft) => {\n draft.position = prevData.position;\n });\n this._touch(parentId);\n });\n }\n\n moveDown(): void {\n const nodeData = this.data;\n if (!nodeData) return;\n\n const parentId = getParentId(this._id, this._separator);\n if (!parentId) return;\n\n const parentNode = this._collection.getNode<T, NodeType>(parentId);\n const siblings = parentNode.getChildren();\n const idx = findIndex(siblings, (s) => s.id === this._id);\n\n if (idx === -1 || idx >= size(siblings) - 1) return;\n\n const nextSibling = siblings[idx + 1];\n const nextData = nextSibling.data;\n if (!nextData) return;\n\n const currentPosition = nodeData.position;\n this._collection.batch(() => {\n this._collection.update(nextSibling.id, (draft) => {\n draft.position = currentPosition;\n });\n this._collection.update(this._id, (draft) => {\n draft.position = nextData.position;\n });\n this._touch(parentId);\n });\n }\n\n setPosition(targetIndex: number): void {\n const nodeData = this.data;\n if (!nodeData) return;\n\n const parentId = getParentId(this._id, this._separator);\n if (!parentId) return;\n\n const parentNode = this._collection.getNode<T, NodeType>(parentId);\n const siblings = parentNode.getChildren();\n const currentIndex = findIndex(siblings, (s) => s.id === this._id);\n\n if (currentIndex === -1) return;\n\n const clampedIndex = clamp(targetIndex, 0, size(siblings) - 1);\n if (clampedIndex === currentIndex) return;\n\n // Remove from current position, insert at target, reassign positions\n const reordered = [...siblings];\n const [removed] = reordered.splice(currentIndex, 1);\n reordered.splice(clampedIndex, 0, removed);\n\n this._collection.batch(() => {\n forEach(reordered, (sibling, index) => {\n const siblingData = sibling.data;\n if (siblingData && siblingData.position !== index) {\n this._collection.update(sibling.id, (draft) => {\n draft.position = index;\n });\n }\n });\n this._touch(parentId);\n });\n }\n\n append(value: T, type: NodeType = \"object\" as NodeType): string {\n const children = this.getChildren();\n const maxChild = maxBy(children, (c) => get(c, \"data.position\", 0));\n const maxPosition = maxChild ? get(maxChild, \"data.position\", 0) : -1;\n const position = maxPosition + 1;\n const newId = this._generateChildId();\n\n const newNode: TreeNode<T, NodeType> = { id: newId, position, value, type };\n this._collection.batch(() => {\n this._collection.create(newNode);\n this._touch(this._id);\n });\n return newId;\n }\n\n prepend(value: T, type: NodeType = \"object\" as NodeType): string {\n const children = this.getChildren();\n const minChild = minBy(children, (c) => get(c, \"data.position\", 0));\n const minPosition = minChild ? get(minChild, \"data.position\", 0) : 1;\n const position = minPosition - 1;\n const newId = this._generateChildId();\n\n const newNode: TreeNode<T, NodeType> = { id: newId, position, value, type };\n this._collection.batch(() => {\n this._collection.create(newNode);\n this._touch(this._id);\n });\n return newId;\n }\n\n /**\n * Move node to a new position within the same parent (reordering)\n * or to a different parent (reparenting).\n *\n * @param targetPosition - The target position among siblings\n * @param targetParent - Optional target parent node. If not provided, moves within current parent.\n */\n move(targetPosition: number, targetParent?: Node<T, C, NodeType>): void {\n const nodeData = this.data;\n if (!nodeData) return;\n\n const currentParentId = getParentId(this._id, this._separator);\n if (!currentParentId) return; // Can't move root\n\n // If no target parent, move within current parent (reordering)\n if (!targetParent) {\n const currentPosition = nodeData.position;\n if (currentPosition === targetPosition) return;\n\n const parentNode = this._collection.getNode<T, NodeType>(currentParentId);\n const siblings = parentNode.getChildren();\n const targetSibling = find(siblings, (s) => get(s, \"data.position\") === targetPosition);\n\n this._collection.batch(() => {\n if (targetSibling) {\n this._collection.update(targetSibling.id, (draft) => {\n draft.position = currentPosition;\n });\n }\n this._collection.update(this._id, (draft) => {\n draft.position = targetPosition;\n });\n this._touch(currentParentId);\n });\n return;\n }\n\n // Reparenting: clone to new parent and remove original\n if (targetParent.id === currentParentId) {\n // Same parent - just reorder\n this.move(targetPosition);\n return;\n }\n\n // Prevent moving a node into itself or its descendants\n if (targetParent.id === this._id || isDescendant(targetParent.id, this._id, this._separator)) {\n return;\n }\n\n // Clone this subtree with new IDs under target parent\n const clonedSubset = this.clone();\n\n this._collection.batch(() => {\n // Add cloned nodes under target parent\n targetParent._mergeClonedSubset(clonedSubset, targetPosition);\n\n // Remove original nodes\n this.remove();\n });\n }\n\n /**\n * Clone this node and all its descendants into a Map with remapped IDs.\n * The root of the clone has a temporary ID that will be remapped when merged.\n * @returns Map of cloned nodes keyed by their relative path from clone root\n */\n clone(): Map<string, TreeNode<T, NodeType>> {\n const nodeData = this.data;\n if (!nodeData) return new Map();\n\n const { getNodeId } = this._collection.config;\n const cloneRootId = getNodeId ? getNodeId() : getIdFromTime();\n const result = new Map<string, TreeNode<T, NodeType>>();\n\n // Clone self\n result.set(cloneRootId, {\n id: cloneRootId,\n position: nodeData.position,\n value: nodeData.value,\n type: nodeData.type,\n });\n\n // Clone all descendants with remapped IDs\n const descendants = filter([...this._collection.items.entries()], ([id]) =>\n isDescendant(id, this._id, this._separator),\n );\n\n forEach(descendants, ([id, data]) => {\n // Calculate relative path from this node\n const relativePath = id.slice(this._id.length + 1);\n const newId = join([cloneRootId, relativePath], this._separator);\n\n const treeData = data as TreeNode<T, NodeType>;\n result.set(newId, {\n id: newId,\n position: treeData.position,\n value: treeData.value,\n type: treeData.type,\n });\n });\n\n return result;\n }\n\n /**\n * Internal method to merge a cloned subset under this node.\n * The cloned nodes will have their IDs prefixed with this node's ID.\n */\n _mergeClonedSubset(\n clonedSubset: Map<string, TreeNode<T, NodeType>>,\n position?: number,\n ): string | undefined {\n if (clonedSubset.size === 0) return undefined;\n\n const keys = [...clonedSubset.keys()];\n\n // Find the root of the clone (should be a single top-level entry)\n // The root is the one with no separator in its key (just the generated ID)\n let cloneRootKey = find(keys, (key) => !key.includes(this._separator));\n\n if (!cloneRootKey) {\n // Fallback: find the shortest key\n cloneRootKey = head(sortBy(keys, (k) => k.length));\n }\n\n if (!cloneRootKey) return undefined;\n\n // Generate new ID for the merged root\n const newRootId = this._generateChildId();\n\n // Calculate position\n let targetPosition: number;\n if (position !== undefined) {\n targetPosition = position;\n } else {\n const children = this.getChildren();\n const maxChild = maxBy(children, (c) => get(c, \"data.position\", 0));\n const maxPosition = maxChild ? get(maxChild, \"data.position\", 0) : -1;\n targetPosition = maxPosition + 1;\n }\n\n // Add all cloned nodes with new IDs\n forEach([...clonedSubset.entries()], ([cloneId, cloneData]) => {\n let newId: string;\n if (cloneId === cloneRootKey) {\n newId = newRootId;\n } else {\n // Replace the clone root prefix with the new root ID\n const suffix = cloneId.slice(cloneRootKey.length);\n newId = join([newRootId, suffix.slice(this._separator.length)], this._separator);\n }\n\n const newNode: TreeNode<T, NodeType> = {\n id: newId,\n position: cloneId === cloneRootKey ? targetPosition : cloneData.position,\n value: cloneData.value,\n type: cloneData.type,\n };\n this._collection.create(newNode);\n });\n\n this._touch(this._id);\n return newRootId;\n }\n\n updateProp(mutate: (draft: Draft<T>) => void): void {\n this._collection.update(this._id, (draft) => {\n mutate(draft.value);\n });\n }\n\n remove(): void {\n const parentId = getParentId(this._id, this._separator);\n const items = [...this._collection.items.keys()];\n const descendantIds = map(\n filter(items, (id) => isDescendant(id, this._id, this._separator)),\n (id) => id,\n );\n const toRemove = [this._id, ...descendantIds];\n\n this._collection.batch(() => {\n const sorted = sortBy(toRemove, (id) => -getDepth(id, this._separator));\n forEach(sorted, (id) => this._collection.remove(id));\n if (parentId) this._touch(parentId);\n });\n }\n\n select(): void {\n this._collection.selectNode(this._id);\n }\n}\n","import { create, type Draft } from \"mutative\";\nimport { map, set } from \"lodash-es\";\nimport { SyncQueue } from \"./sync-queue\";\nimport { FetchHandler } from \"./fetch-handler\";\nimport { Item } from \"./item\";\nimport { Node, type TreeNode } from \"./node\";\nimport type {\n Config,\n SyncState,\n Mutator,\n ItemStatus,\n SyncQueueState,\n FetchState,\n Change,\n} from \"./types\";\n\nexport type CollectionState<T, C> = {\n context: C;\n items: Map<string, T>;\n syncState: SyncState;\n loading: boolean;\n syncing: boolean;\n syncQueue: SyncQueueState<T>;\n fetchStatus: FetchState;\n fetchError?: string;\n};\n\nexport function buildServerSnapshot<T extends { id: string }, C>(\n config: Config<T, C>,\n): CollectionState<T, C> {\n const items = new Map<string, T>();\n if (config.serverItems) {\n for (const item of config.serverItems) {\n items.set(item.id, item);\n }\n }\n return {\n context: config.initialContext,\n items,\n syncState: \"idle\",\n loading: false,\n syncing: false,\n syncQueue: {\n queue: new Map(),\n inFlight: new Map(),\n errors: new Map(),\n isSyncing: false,\n isPaused: false,\n },\n fetchStatus: \"idle\",\n fetchError: undefined,\n };\n}\n\nexport class Collection<T extends { id: string }, C> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _cache = new Map<string, Collection<any, any>>();\n\n static get<T extends { id: string }, C>(config: Config<T, C>): Collection<T, C> {\n const existing = Collection._cache.get(config.id);\n if (existing) return existing as Collection<T, C>;\n const collection = new Collection(config);\n Collection._cache.set(config.id, collection);\n return collection;\n }\n\n static clear(id: string): void {\n Collection._cache.get(id)?.destroy();\n }\n\n static clearAll(): void {\n Collection._cache.forEach((c) => c.destroy());\n }\n\n static getById<T extends { id: string }, C>(id: string): Collection<T, C> | undefined {\n return Collection._cache.get(id) as Collection<T, C> | undefined;\n }\n\n readonly id: string;\n readonly config: Config<T, C>;\n\n private _state: CollectionState<T, C>;\n private _syncQueue: SyncQueue<T, C>;\n private _fetchHandler: FetchHandler<T, C>;\n private _itemCache: WeakMap<T & object, Item<T, C>> = new WeakMap();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _nodeCache: WeakMap<TreeNode<any, any> & object, Node<any, C, any>> = new WeakMap();\n private _selectedNodeId: string | null = null;\n private _subscribers: Set<() => void> = new Set();\n private _hasInitialized = false;\n private _batchMode = false;\n\n constructor(config: Config<T, C>) {\n this.id = config.id;\n this.config = config;\n\n // Derive fetch/sync from unified handler\n const fetchFn = config.handler\n ? (ctx: C, signal: AbortSignal) =>\n config.handler!({ query: ctx }, signal).then((r) => r.items ?? [])\n : async () => [] as T[];\n\n const syncFn = config.handler\n ? (changes: Change<T>[], _ctx: C, signal: AbortSignal) => config.handler!({ changes }, signal)\n : async (changes: Change<T>[]) => ({\n syncResults: map(changes, (c) => ({\n status: \"success\" as const,\n id: c.id,\n type: c.type,\n serverSyncedAt: \"\",\n })),\n serverSyncedAt: \"\",\n });\n\n this._syncQueue = new SyncQueue<T, C>({\n debounce: config.syncDebounce ?? 300,\n maxRetries: config.syncRetries ?? 3,\n getContext: () => this._state.context,\n onSync: syncFn,\n });\n\n this._fetchHandler = new FetchHandler<T, C>({\n id: config.id,\n cacheCapacity: config.cacheCapacity ?? 10,\n cacheTtl: config.cacheTtl ?? 60000,\n retries: config.fetchRetries ?? 0,\n onFetch: fetchFn,\n });\n\n // Initialize state\n const syncQueueState = this._syncQueue.getState();\n const fetchState = this._fetchHandler.getState();\n this._state = {\n context: config.initialContext,\n items: new Map(),\n syncState: \"idle\",\n loading: false,\n syncing: false,\n syncQueue: syncQueueState,\n fetchStatus: fetchState.status,\n fetchError: fetchState.error,\n };\n\n this._syncQueue.subscribe(() => this._onSyncQueueChange());\n this._fetchHandler.subscribe(() => this._onFetchChange());\n this._initialFetch();\n }\n\n get context(): C {\n return this._state.context;\n }\n\n get items(): Map<string, T> {\n return this._state.items;\n }\n\n get loading(): boolean {\n return this._state.loading;\n }\n\n get syncing(): boolean {\n return this._state.syncing;\n }\n\n get syncQueue(): SyncQueueState<T> {\n return this._state.syncQueue;\n }\n\n subscribe(callback: () => void): () => void {\n this._subscribers.add(callback);\n return () => this._subscribers.delete(callback);\n }\n\n getState(): CollectionState<T, C> {\n return this._state;\n }\n\n getItemStatus(id: string): ItemStatus {\n const { queue, inFlight, errors } = this._state.syncQueue;\n\n const inFlightChange = inFlight.get(id);\n if (inFlightChange) {\n return {\n type: inFlightChange.type,\n status: \"syncing\",\n retries: errors.get(id)?.retries ?? 0,\n };\n }\n\n const queuedChange = queue.get(id);\n if (queuedChange) {\n const errorInfo = errors.get(id);\n return {\n type: queuedChange.type,\n status: errorInfo ? \"error\" : \"pending\",\n retries: errorInfo?.retries ?? 0,\n error: errorInfo?.error,\n };\n }\n\n const errorInfo = errors.get(id);\n if (errorInfo) {\n return {\n type: \"update\",\n status: \"error\",\n retries: errorInfo.retries,\n error: errorInfo.error,\n };\n }\n\n return null;\n }\n\n create(item: T): string {\n const { id } = item;\n\n this._state = create(this._state, (draft) => {\n draft.items.set(id, item as Draft<T>);\n });\n\n this._fetchHandler.invalidateCache();\n this._notifySubscribers();\n this._syncQueue.enqueue({ id, type: \"create\", data: item });\n return id;\n }\n\n update(id: string, mutate: (draft: Draft<T>) => void): void {\n const currentItem = this._state.items.get(id);\n if (!currentItem) return;\n\n const newItem = create(currentItem, mutate);\n\n this._state = create(this._state, (draft) => {\n set(newItem, \"id\", id); // ensure id is not changed\n draft.items.set(id, newItem as Draft<T>);\n });\n\n this._fetchHandler.invalidateCache();\n this._notifySubscribers();\n this._syncQueue.enqueue({ id, type: \"update\", data: newItem });\n }\n\n remove(id: string): void {\n const item = this._state.items.get(id);\n if (!item) return;\n\n this._state = create(this._state, (draft) => {\n draft.items.delete(id);\n });\n\n this._fetchHandler.invalidateCache();\n this._notifySubscribers();\n this._syncQueue.enqueue({ id, type: \"delete\", data: item });\n }\n\n getItem(id: string): Item<T, C> {\n const data = this._state.items.get(id);\n if (!data) return new Item(this, id);\n\n const dataAsObject = data as T & object;\n let item = this._itemCache.get(dataAsObject);\n if (!item) {\n item = new Item(this, id);\n this._itemCache.set(dataAsObject, item);\n }\n return item;\n }\n\n getNode<V extends object, NodeType = string>(id: string): Node<V, C, NodeType> {\n const data = this._state.items.get(id) as unknown as TreeNode<V, NodeType> | undefined;\n if (!data) {\n return new Node(this as unknown as Collection<TreeNode<V, NodeType>, C>, id);\n }\n\n const dataAsObject = data as TreeNode<V, NodeType> & object;\n let node = this._nodeCache.get(dataAsObject) as Node<V, C, NodeType> | undefined;\n if (!node) {\n node = new Node(this as unknown as Collection<TreeNode<V, NodeType>, C>, id);\n this._nodeCache.set(dataAsObject, node);\n }\n return node;\n }\n\n batch(fn: () => void): void {\n const wasBatching = this._batchMode;\n this._batchMode = true;\n try {\n fn();\n } finally {\n this._batchMode = wasBatching;\n if (!wasBatching) this._notifySubscribers();\n }\n }\n\n selectNode(id: string): void {\n if (this._selectedNodeId !== id) {\n this._selectedNodeId = id;\n this._notifySubscribers();\n }\n }\n\n deselectNode(): void {\n if (this._selectedNodeId !== null) {\n this._selectedNodeId = null;\n this._notifySubscribers();\n }\n }\n\n get selectedNodeId(): string | null {\n return this._selectedNodeId;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get selectedNode(): Node<any, C> | null {\n return this._selectedNodeId ? this.getNode(this._selectedNodeId) : null;\n }\n\n setContext(patchContext: Mutator<C>): void {\n const oldContext = this._state.context;\n const newContext = create(oldContext, patchContext);\n\n if (oldContext !== newContext) {\n this._state = create(this._state, (draft) => {\n draft.context = newContext as Draft<C>;\n });\n\n this._fetchHandler.fetch(newContext);\n this._notifySubscribers();\n }\n }\n\n async refresh(): Promise<void> {\n this._fetchHandler.invalidateCache();\n await this._fetchHandler.fetch(this._state.context);\n }\n\n pauseSync(): void {\n this._syncQueue.pause();\n }\n\n resumeSync(): void {\n this._syncQueue.resume();\n this._fetchHandler.invalidateCache();\n this._fetchHandler.fetch(this._state.context);\n }\n\n retrySync(id?: string): void {\n if (id) {\n this._syncQueue.retry(id);\n } else {\n this._syncQueue.retryAll();\n }\n }\n\n destroy(): void {\n this._syncQueue.destroy();\n this._fetchHandler.destroy();\n this._subscribers.clear();\n Collection._cache.delete(this.id);\n }\n\n private async _initialFetch(): Promise<void> {\n if (this._hasInitialized) return;\n this._hasInitialized = true;\n\n if (this.config.serverItems) {\n this._state = create(this._state, (draft) => {\n for (const item of this.config.serverItems!) {\n draft.items.set(item.id, item as Draft<T>);\n }\n });\n this._notifySubscribers();\n return;\n }\n\n if (typeof window === \"undefined\") return;\n\n await this._fetchHandler.fetch(this._state.context);\n }\n\n private _onSyncQueueChange(): void {\n this._updateSyncState(this._syncQueue.getState());\n }\n\n private _onFetchChange(): void {\n const fetchState = this._fetchHandler.getState();\n\n this._state = create(this._state, (draft) => {\n draft.fetchStatus = fetchState.status;\n draft.fetchError = fetchState.error;\n draft.loading = fetchState.status === \"fetching\";\n draft.syncState = this._computeSyncState(fetchState.status, draft.syncQueue.isSyncing);\n\n const newItems = new Map<string, Draft<T>>();\n\n for (const item of fetchState.items) {\n newItems.set(item.id, item as Draft<T>);\n }\n\n draft.items = newItems;\n });\n\n this._notifySubscribers();\n }\n\n private _updateSyncState(syncQueueState: SyncQueueState<T>): void {\n this._state = create(this._state, (draft) => {\n draft.syncQueue = syncQueueState as Draft<SyncQueueState<T>>;\n draft.syncing = syncQueueState.isSyncing;\n draft.syncState = this._computeSyncState(draft.fetchStatus, syncQueueState.isSyncing);\n });\n\n this._notifySubscribers();\n }\n\n private _computeSyncState(fetchStatus: FetchState, isSyncing: boolean): SyncState {\n if (fetchStatus === \"fetching\") return \"fetching\";\n if (isSyncing) return \"syncing\";\n return \"idle\";\n }\n\n private _notifySubscribers(): void {\n if (this._batchMode) return;\n for (const callback of this._subscribers) {\n callback();\n }\n }\n}\n","import { useMemo, useSyncExternalStore } from \"react\";\nimport type { Draft } from \"mutative\";\nimport { Collection, buildServerSnapshot, type CollectionState } from \"./collection\";\nimport type { Config, Mutator } from \"./types\";\nimport { getIdFromTime } from \"./utils\";\n\nexport type {\n Config,\n CrudHandler,\n Change,\n Result,\n ItemStatus,\n SyncQueueState,\n SyncState,\n ChangeType,\n ItemSyncStatus,\n FetchState,\n} from \"./types\";\n\nexport function useCrud<T extends { id: string }, C>(config: Config<T, C>) {\n const collection = Collection.get(config);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const serverSnapshot = useMemo(() => buildServerSnapshot(config), [config.id]);\n\n const state = useSyncExternalStore<CollectionState<T, C>>(\n (callback) => collection.subscribe(callback),\n () => collection.getState(),\n () => serverSnapshot,\n );\n\n return {\n // State\n items: state.items,\n context: state.context,\n syncState: state.syncState,\n syncQueue: state.syncQueue,\n loading: state.loading,\n syncing: state.syncing,\n fetchStatus: state.fetchStatus,\n fetchError: state.fetchError,\n\n // Item operations\n create: (item: Omit<T, \"id\">) => collection.create({ ...item, id: getIdFromTime() } as T),\n update: (id: string, mutate: (draft: Draft<T>) => void) => collection.update(id, mutate),\n remove: (id: string) => collection.remove(id),\n getItem: (id: string) => collection.getItem(id),\n getItemStatus: (id: string) => collection.getItemStatus(id),\n\n // Context & refresh\n setContext: (patchContext: Mutator<C>) => collection.setContext(patchContext),\n refresh: () => collection.refresh(),\n\n // Sync controls\n pauseSync: () => collection.pauseSync(),\n resumeSync: () => collection.resumeSync(),\n retrySync: (id?: string) => collection.retrySync(id),\n };\n}\n","import { useSyncExternalStore, useCallback, useMemo } from \"react\";\nimport { sortBy, map, filter } from \"lodash-es\";\nimport { Collection, buildServerSnapshot, type CollectionState } from \"./collection\";\nimport type { Node, TreeNode } from \"./node\";\nimport type { Config, Mutator } from \"./types\";\n\n/**\n * Config for useCrudTree - same as Config but with rootId required\n */\nexport type TreeConfig<T extends object, C, NodeType = string> = Omit<\n Config<TreeNode<T, NodeType>, C>,\n \"rootId\"\n> & {\n rootId: string; // Required for tree collections\n};\n\n/**\n * Hook for tree-based CRUD operations.\n * This is a replacement for useCrud when working with tree structures.\n * It requires rootId in the config and returns the root node along with\n * all the standard useCrud properties.\n *\n * @param config - Tree collection configuration with required rootId\n * @returns Object with crud operations, state, and the root node\n */\nexport function useCrudTree<T extends object, C, NodeType = string>(\n config: TreeConfig<T, C, NodeType>,\n) {\n const fullConfig = config as Config<TreeNode<T, NodeType>, C>;\n const collection = Collection.get(fullConfig);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const serverSnapshot = useMemo(() => buildServerSnapshot(fullConfig), [config.id]);\n\n const state = useSyncExternalStore<CollectionState<TreeNode<T, NodeType>, C>>(\n (callback) => collection.subscribe(callback),\n () => collection.getState(),\n () => serverSnapshot,\n );\n\n const rootNode = useSyncExternalStore<Node<T, C, NodeType> | null>(\n (cb) => collection.subscribe(cb),\n () => {\n const rootData = collection.items.get(config.rootId);\n return rootData\n ? (collection.getNode<T, NodeType>(config.rootId) as Node<T, C, NodeType>)\n : null;\n },\n () => null,\n );\n\n const selectedNodeId = useSyncExternalStore<string | null>(\n (cb) => collection.subscribe(cb),\n () => collection.selectedNodeId,\n () => null,\n );\n\n const selectedNode = useSyncExternalStore<Node<T, C, NodeType> | null>(\n (cb) => collection.subscribe(cb),\n () => collection.selectedNode as Node<T, C, NodeType> | null,\n () => null,\n );\n\n const toJson = useCallback(() => {\n const separator = config.nodeSeparator ?? \".\";\n\n // Helper to check if nodeId is a direct child of parentId\n const isDirectChild = (nodeId: string, parentId: string): boolean => {\n if (!nodeId.startsWith(parentId + separator)) return false;\n return !nodeId.slice(parentId.length + 1).includes(separator);\n };\n\n // Recursively build JSON tree structure\n const buildJsonTree = (nodeId: string): object | null => {\n const nodeData = state.items.get(nodeId) as TreeNode<T, NodeType> | undefined;\n if (!nodeData) return null;\n\n const childEntries = map(\n filter([...state.items.entries()], ([id]) => isDirectChild(id, nodeId)),\n ([id, data]) => ({ id, position: (data as TreeNode<T, NodeType>).position }),\n );\n const sortedChildren = sortBy(childEntries, \"position\");\n const children = map(sortedChildren, (entry) => buildJsonTree(entry.id)).filter(Boolean);\n\n return {\n id: nodeData.id,\n type: nodeData.type,\n value: nodeData.value,\n ...(children.length > 0 ? { children } : {}),\n };\n };\n\n return buildJsonTree(config.rootId);\n }, [state.items, config.rootId, config.nodeSeparator]);\n\n return {\n // Root node for tree operations\n rootNode,\n\n // State (all from single immutable state object)\n items: state.items,\n context: state.context,\n syncState: state.syncState,\n syncQueue: state.syncQueue,\n loading: state.loading,\n syncing: state.syncing,\n fetchStatus: state.fetchStatus,\n fetchError: state.fetchError,\n\n // Node operations\n getNode: (id: string) => collection.getNode<T, NodeType>(id) as Node<T, C, NodeType>,\n getNodeStatus: (id: string) => collection.getItemStatus(id),\n\n // Context & refresh\n setContext: (patchContext: Mutator<C>) => collection.setContext(patchContext),\n refresh: () => collection.refresh(),\n\n // Sync controls\n pauseSync: () => collection.pauseSync(),\n resumeSync: () => collection.resumeSync(),\n retrySync: (id?: string) => collection.retrySync(id),\n\n // Selection\n selectNode: (id: string) => collection.selectNode(id),\n deselectNode: () => collection.deselectNode(),\n selectedNodeId,\n selectedNode,\n\n // Serialization\n toJson,\n };\n}\n","import { useSyncExternalStore, useCallback } from \"react\";\nimport type { Draft } from \"mutative\";\nimport type { Item } from \"./item\";\nimport type { ItemStatus } from \"./types\";\n\nexport type UseItemResult<T> = {\n data: T | undefined;\n status: ItemStatus;\n update: (mutate: (draft: Draft<T>) => void) => void;\n remove: () => void;\n exists: boolean;\n};\n\nexport function useItem<T extends { id: string }, C>(item: Item<T, C>): UseItemResult<T> {\n // Note: Item cache is now managed by Collection.setContext()\n // Cache is automatically cleared when context changes\n\n const data = useSyncExternalStore<T | undefined>(\n (callback) => item.collection.subscribe(callback),\n () => item.data,\n () => item.data,\n );\n\n const status = useSyncExternalStore<ItemStatus>(\n (callback) => item.collection.subscribe(callback),\n () => item.getStatus(),\n () => item.getStatus(),\n );\n\n const exists = useSyncExternalStore<boolean>(\n (callback) => item.collection.subscribe(callback),\n () => item.exists(),\n () => item.exists(),\n );\n\n const update = useCallback((mutate: (draft: Draft<T>) => void) => item.update(mutate), [item]);\n\n const remove = useCallback(() => item.remove(), [item]);\n\n return { data, status, update, remove, exists };\n}\n","import { useSyncExternalStore, useCallback, useMemo } from \"react\";\nimport type { Draft } from \"mutative\";\nimport type { Node, TreeNode } from \"./node\";\nimport type { ItemStatus } from \"./types\";\n\n/**\n * Result type for useNode hook - contains all node data and operations\n */\nexport type UseNodeResult<T extends object, C, NodeType = string> = {\n isPresent: boolean;\n data: TreeNode<T, NodeType> | undefined;\n status: ItemStatus;\n exists: boolean;\n isSelected: boolean;\n depth: number;\n getParent: () => Node<T, C, NodeType> | null;\n children: Node<T, C, NodeType>[];\n append: (value: T, type?: NodeType) => string;\n prepend: (value: T, type?: NodeType) => string;\n move: (targetPosition: number, targetParent?: Node<T, C, NodeType>) => void;\n moveUp: () => void;\n moveDown: () => void;\n setPosition: (targetIndex: number) => void;\n clone: () => Map<string, TreeNode<T, NodeType>>;\n updateProp: (mutate: (draft: Draft<T>) => void) => void;\n remove: () => void;\n select: () => void;\n deselect: () => void;\n};\n\nexport function useNode<T extends object, C, NodeType = string>(\n node: Node<T, C, NodeType>,\n): UseNodeResult<T, C, NodeType> {\n const subscribe = useCallback((cb: () => void) => node.collection.subscribe(cb), [node]);\n\n const data = useSyncExternalStore<TreeNode<T, NodeType> | undefined>(\n subscribe,\n () => node.data,\n () => node.data,\n );\n\n const status = useSyncExternalStore<ItemStatus>(\n subscribe,\n () => node.getStatus(),\n () => node.getStatus(),\n );\n\n const exists = useSyncExternalStore<boolean>(\n subscribe,\n () => node.exists(),\n () => node.exists(),\n );\n\n const isSelected = useSyncExternalStore<boolean>(\n subscribe,\n () => node.collection.selectedNodeId === node.id,\n () => node.collection.selectedNodeId === node.id,\n );\n\n // Recompute children only when the node's data reference changes.\n // Mutations that affect children (append, remove, reorder) bump\n // clientUpdatedAt on the parent, producing a new data reference.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const children = useMemo(() => node.getChildren(), [data, node]);\n\n const getParent = useCallback(() => node.getParent(), [node]);\n const append = useCallback((value: T, type?: NodeType) => node.append(value, type), [node]);\n const prepend = useCallback((value: T, type?: NodeType) => node.prepend(value, type), [node]);\n const move = useCallback(\n (pos: number, targetParent?: Node<T, C, NodeType>) => node.move(pos, targetParent),\n [node],\n );\n const moveUp = useCallback(() => node.moveUp(), [node]);\n const moveDown = useCallback(() => node.moveDown(), [node]);\n const setPosition = useCallback((targetIndex: number) => node.setPosition(targetIndex), [node]);\n const clone = useCallback(() => node.clone(), [node]);\n const updateProp = useCallback(\n (mutate: (draft: Draft<T>) => void) => node.updateProp(mutate),\n [node],\n );\n const remove = useCallback(() => node.remove(), [node]);\n const select = useCallback(() => node.select(), [node]);\n const deselect = useCallback(() => node.collection.deselectNode(), [node]);\n\n return {\n isPresent: true,\n data,\n status,\n exists,\n isSelected,\n depth: node.depth,\n getParent,\n children,\n append,\n prepend,\n move,\n moveUp,\n moveDown,\n setPosition,\n clone,\n updateProp,\n remove,\n select,\n deselect,\n };\n}\n","import { useSyncExternalStore, useMemo } from \"react\";\nimport { Collection } from \"./collection\";\nimport type { Node, TreeNode } from \"./node\";\nimport { useNode, type UseNodeResult } from \"./useNode\";\n\n// Stable empty result for when no node is selected\nconst EMPTY_RESULT = {\n isPresent: false,\n data: undefined,\n status: null,\n exists: false,\n isSelected: false,\n depth: 0,\n getParent: () => null,\n children: [],\n append: () => \"\",\n prepend: () => \"\",\n move: () => {},\n moveUp: () => {},\n moveDown: () => {},\n setPosition: () => {},\n clone: () => new Map(),\n updateProp: () => {},\n remove: () => {},\n select: () => {},\n deselect: () => {},\n};\n\n/**\n * Hook for accessing and operating on the currently selected node in a collection.\n *\n * This is a wrapper around useNode that automatically tracks the selected node.\n * Use this in components that need to operate on whatever node is currently selected\n * (e.g., toolbars, property panels, context menus).\n *\n * @param collectionId - The ID of the collection to get the selected node from\n * @returns UseNodeResult with isPresent=true when a node is selected, or isPresent=false with empty data\n */\nexport function useSelectedNode<T extends object, C, NodeType = string>(\n collectionId: string,\n): UseNodeResult<T, C, NodeType> {\n const collection = Collection.getById<TreeNode<T, NodeType>, C>(collectionId);\n if (!collection) {\n throw new Error(\n `Collection with id \"${collectionId}\" not found. Make sure useCrud is called first.`,\n );\n }\n\n const selectedNode = useSyncExternalStore<Node<T, C, NodeType> | null>(\n (cb) => collection.subscribe(cb),\n () => collection.selectedNode as Node<T, C, NodeType> | null,\n () => collection.selectedNode as Node<T, C, NodeType> | null,\n );\n\n // Always call useNode to maintain hooks order - use dummy node when nothing selected\n const dummyNode = useMemo(() => collection.getNode<T, NodeType>(\"__dummy__\"), [collection]);\n const nodeResult = useNode(selectedNode ?? dummyNode);\n\n // Return empty result when no node is selected, otherwise return the useNode result\n return selectedNode ? nodeResult : (EMPTY_RESULT as unknown as UseNodeResult<T, C, NodeType>);\n}\n","import { useSyncExternalStore } from \"react\";\nimport { Collection, type CollectionState } from \"./collection\";\nimport type { SyncState, Change, SyncError } from \"./types\";\n\nexport type UseSyncStateResult<T = unknown> = {\n syncState: SyncState;\n syncing: boolean;\n queue: Map<string, Change<T>>;\n inFlight: Map<string, Change<T>>;\n errors: Map<string, SyncError<T>>;\n isPaused: boolean;\n isSyncing: boolean;\n};\n\n/**\n * Hook for accessing the sync state of a collection by ID.\n *\n * Use this when you need to display sync status in a component that\n * doesn't have access to the full useCrud hook.\n *\n * @param collectionId - The ID of the collection\n * @returns Flat object with syncState and all syncQueue properties\n */\nexport function useSyncState<T = unknown>(collectionId: string): UseSyncStateResult<T> {\n const collection = Collection.getById(collectionId);\n if (!collection) {\n throw new Error(\n `Collection with id \"${collectionId}\" not found. Make sure useCrud is called first.`,\n );\n }\n\n const state = useSyncExternalStore<CollectionState<{ id: string }, unknown>>(\n (cb) => collection.subscribe(cb),\n () => collection.getState(),\n () => collection.getState(),\n );\n\n return {\n syncState: state.syncState,\n syncing: state.syncing,\n queue: state.syncQueue.queue as Map<string, Change<T>>,\n inFlight: state.syncQueue.inFlight as Map<string, Change<T>>,\n errors: state.syncQueue.errors as Map<string, SyncError<T>>,\n isPaused: state.syncQueue.isPaused,\n isSyncing: state.syncQueue.isSyncing,\n };\n}\n"],"names":["Operation","PROXY_DRAFT","RAW_RETURN_SYMBOL","iteratorSymbol","dataTypes","internal","has","target","key","getDescriptor","prototype","descriptor","isBaseSetInstance","obj","isBaseMapInstance","latest","proxyDraft","_a","isDraft","getProxyDraft","value","getValue","isDraftable","options","markResult","getPath","path","parentCopy","get","isSet","resolvePath","getType","set","peek","state","isEqual","x","y","revokeProxy","escapePath","pathAsArray","_item","item","base","index","strictCopy","copy","desc","propIsEnum","shallowCopy","original","SubClass","ensureShallowCopy","deepClone","iterable","k","v","cloneIfNeeded","markChanged","throwFrozenError","deepFreeze","subKey","updatedValues","stack","keys","parent","name","forEach","iter","type","entry","handleValue","handledSet","setMap","updatedValue","values","finalizeAssigned","finalizeSetValue","finalizePatches","generatePatches","patches","inversePatches","basePath","markFinalization","generateArrayPatches","proxyState","assignedMap","_path","arrayLengthAssignment","generatePatchesFromAssigned","assignedValue","originalValue","op","generateSetPatches","checkReadable","ignoreCheckDraftable","mapHandler","source","callback","thisArg","_value","_key","_b","mutable","draft","iterator","result","mapHandlerKeys","getNextIterator","isValuesIterator","currentDraft","proxy","setHandler","valueProxyDraft","other","setHandlerKeys","proxyHandler","receiver","createDraft","subProxyDraft","current","currentProxyDraft","createDraftOptions","parentDraft","finalities","revoke","oldProxyDraft","finalizeDraft","returnedValue","enableAutoFreeze","hasReturnedValue","draftify","baseState","finalizedState","finalizedPatches","finalizedInversePatches","handleReturnValue","rootDraft","useRawReturn","isRoot","currentValue","arr","getCurrent","newValue","makeCreator","arg","create","arg0","arg1","arg2","_c","args","mutate","mark","types","enablePatches","strict","_options","finalize","error","returnValue","rawReturnValue","returnedProxyDraft","reWhitespace","trimmedEndIndex","string","reTrimStart","baseTrim","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isSymbol","isObject","isBinary","INFINITY","MAX_INTEGER","toFinite","sign","toInteger","remainder","apply","func","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","constant","defineProperty","getNative","baseSetToString","identity","setToString","arrayEach","array","iteratee","length","baseFindIndex","predicate","fromIndex","fromRight","baseAssignValue","object","objectProto","hasOwnProperty","assignValue","objValue","eq","nativeMax","overRest","start","transform","otherArgs","baseRest","isIterateeCall","isArrayLike","isIndex","spreadableSymbol","Symbol","isFlattenable","isArray","isArguments","baseFlatten","depth","isStrict","arrayPush","baseSlice","end","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","reHasUnicode","hasUnicode","baseClamp","number","lower","upper","clamp","castFunction","collection","baseEach","baseFilter","filter","arrayFilter","baseIteratee","createFind","findIndexFunc","findIndex","find","head","baseGt","stringTag","isString","isObjectLike","baseGetTag","mapTag","setTag","isEmpty","isBuffer","isTypedArray","tag","getTag","isPrototype","baseKeys","baseIsEqual","arrayProto","nativeJoin","join","separator","baseLt","baseExtremum","comparator","computed","maxBy","minBy","baseSet","customizer","castPath","lastIndex","nested","toKey","baseSortBy","comparer","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareMultiple","orders","objCriteria","othCriteria","ordersLength","order","baseOrderBy","iteratees","arrayMap","baseGet","baseUnary","baseMap","criteria","asciiSize","baseProperty","rsAstral","rsCombo","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsOptVar","rsOptJoin","rsSeq","rsSymbol","reUnicode","unicodeSize","stringSize","size","sortBy","take","n","guard","coalesce","existing","next","SyncQueue","config","change","coalesced","errors","id","errorInfo","mutator","cb","isPaused","isSyncing","queue","batchSize","queueEntries","entriesToProcess","remainingEntries","changes","context","response","inFlight","resultMap","r","retries","changeIds","extraItems","isAborted","errorMsg","Cache","capacity","ttl","firstKey","FetchHandler","patch","signal","maxRetries","lastError","attempt","cacheKey","cached","abortController","items","ctx","Item","newStatus","DEFAULT_SEPARATOR","getParentId","nodeId","idx","isDirectChild","parentId","isDescendant","ancestorId","getDepth","Node","childEntries","map","data","sorted","getNodeId","getIdFromTime","nodeData","siblings","s","prevSibling","prevData","currentPosition","nextSibling","nextData","targetIndex","currentIndex","clampedIndex","reordered","removed","sibling","siblingData","children","maxChild","c","position","newId","newNode","minChild","targetPosition","targetParent","currentParentId","targetSibling","clonedSubset","cloneRootId","descendants","relativePath","treeData","cloneRootKey","newRootId","cloneId","cloneData","suffix","descendantIds","toRemove","buildServerSnapshot","Collection","fetchFn","syncFn","_ctx","syncQueueState","fetchState","inFlightChange","queuedChange","currentItem","newItem","dataAsObject","node","fn","wasBatching","patchContext","oldContext","newContext","newItems","fetchStatus","useCrud","serverSnapshot","useMemo","useSyncExternalStore","useCrudTree","fullConfig","rootNode","selectedNodeId","selectedNode","toJson","useCallback","buildJsonTree","sortedChildren","useItem","status","exists","update","remove","useNode","subscribe","isSelected","getParent","append","prepend","move","pos","moveUp","moveDown","setPosition","clone","updateProp","select","deselect","EMPTY_RESULT","useSelectedNode","collectionId","dummyNode","nodeResult","useSyncState"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53]}
|