sia-reactor 0.0.48 → 0.0.49
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/adapters/react.cjs +6 -6
- package/dist/adapters/react.cjs.map +1 -1
- package/dist/adapters/react.js +3 -3
- package/dist/adapters/vanilla.cjs +6 -6
- package/dist/adapters/vanilla.cjs.map +1 -1
- package/dist/adapters/vanilla.js +3 -3
- package/dist/{chunk-U4SR3CZF.js → chunk-2EAHPVH6.js} +7 -7
- package/dist/chunk-2EAHPVH6.js.map +1 -0
- package/dist/{chunk-3IIYJ6B4.js → chunk-GC754LMW.js} +2 -2
- package/dist/{chunk-IYAWNLD2.js → chunk-ZTUAHMMN.js} +3 -3
- package/dist/modules.js +2 -2
- package/dist/super.d.ts +3 -1
- package/dist/super.global.js +6 -6
- package/dist/super.global.js.map +1 -1
- package/dist/utils.cjs +6 -6
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +3 -1
- package/dist/utils.d.ts +3 -1
- package/dist/utils.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-U4SR3CZF.js.map +0 -1
- /package/dist/{chunk-3IIYJ6B4.js.map → chunk-GC754LMW.js.map} +0 -0
- /package/dist/{chunk-IYAWNLD2.js.map → chunk-ZTUAHMMN.js.map} +0 -0
package/dist/super.global.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ts/super.ts","../src/ts/core/consts.ts","../src/ts/core/mixins.ts","../src/ts/modules/timeTravel/transaction.ts","../src/ts/utils/obj.ts","../src/ts/core/event.ts","../src/ts/core/reactor.ts","../src/ts/index.ts","../src/ts/utils.ts","../src/ts/utils/num.ts","../src/ts/utils/fn.ts","../src/ts/utils/methd.ts","../src/ts/utils/dom.ts","../src/ts/utils/keys.ts","../src/ts/modules.ts","../src/ts/modules/base/index.ts","../src/ts/modules/persist/storage/base/index.ts","../src/ts/modules/persist/storage/localStorage.ts","../src/ts/modules/persist/storage/sessionStorage.ts","../src/ts/modules/persist/storage/memory/index.ts","../src/ts/modules/persist/storage/cookie/build.ts","../src/ts/modules/persist/storage/cookie/index.ts","../src/ts/modules/persist/storage/indexedDB/build.ts","../src/ts/modules/persist/storage/indexedDB/index.ts","../src/ts/modules/persist/build.ts","../src/ts/modules/persist/index.ts","../src/ts/modules/timeTravel/build.ts","../src/ts/modules/timeTravel/index.ts","../src/ts/modules/timeTravel/silence.ts","../src/ts/modules/timeTravel/heuristics/text/index.ts","../src/ts/modules/timeTravel/heuristics/path.ts","../src/ts/modules/timeTravel/heuristics/index.ts","../src/ts/adapters/vanilla.ts","../src/ts/adapters/autotracker.ts","../src/ts/adapters/vanilla/effect.ts","../src/ts/adapters/vanilla/TimeTravelConsole.ts"],"sourcesContent":["export * from \"./index\";\n\nexport * as utils from \"./utils\";\n\nexport * as modules from \"./modules\";\n\nimport * as vanilla from \"./adapters/vanilla\";\n// import * as react from \"@adapters/react\";\nconst adapters = { vanilla };\nexport { adapters };\n","import { ReactorBuild, ReactorMeta } from \"@defs/reactor\";\r\nimport { Autotracker } from \"@adapters/autotracker\";\r\n\r\n// ===========================================================================\r\n// The S.I.A (State & Intent Architecture) Constants\r\n// ===========================================================================\r\n\r\n/** Marker to access underlying raw object from a proxy. */\r\nexport const RAW: unique symbol = Symbol.for(\"S.I.A_RAW\"); // \"Get Original Obj\" Marker\r\n/** Marker to opt an object out of reactor proxy handling. */\r\nexport const INERTIA: unique symbol = Symbol.for(\"S.I.A_INERTIA\"); // \"No Proxy\" Marker\r\n/** Marker to mark a branch as intent (rejectable). */\r\nexport const REJECTABLE: unique symbol = Symbol.for(\"S.I.A_REJECTABLE\"); // \"State Vs. Intent\" Marker\r\n/** Marker to enable indifference/non-equality semantics for a branch. */\r\nexport const INDIFFABLE: unique symbol = Symbol.for(\"S.I.A_INDIFFABLE\"); // \"Equality Tracking\" Marker\r\n/** Sentinel return value that terminates a mediated operation. */\r\nexport const TERMINATOR: unique symbol = Symbol.for(\"S.I.A_TERMINATOR\"); // \"Obj Operation Terminator\" Marker\r\n/** Internal mutation version marker. */\r\nexport const VERSION: unique symbol = Symbol.for(\"S.I.A_VERSION\"); // \"Obj Mutation Count\" Marker\r\n/** Internal snapshot version marker used by smart cloning. */\r\nexport const SSVERSION: unique symbol = Symbol.for(\"S.I.A_SNAPSHOT_VERSION\"); // \"Obj Snapshot Version\" Marker\r\n/** Default batching scheduler used by the reactor runtime. */\r\nexport const RTR_BATCH = \"undefined\" !== typeof window ? (\"undefined\" !== typeof queueMicrotask ? queueMicrotask : setTimeout).bind(window) : \"undefined\" !== typeof process && process.nextTick ? process.nextTick : setTimeout;\r\n/** Default reactor logger prefix function. */\r\nexport const RTR_LOG = console.log.bind(console, \"[S.I.A Reactor]\");\r\n/** Canonical option keys parsed for listener and mediator registrations. */\r\nexport const EVT_OPTS = { LISTENER: [\"capture\", \"depth\", \"once\", \"signal\", \"init\"], MEDIATOR: [\"lazy\", \"signal\", \"init\"] } as const;\r\n/** Frozen empty object used as a zero-allocation default options value. */\r\nexport const NIL = Object.freeze({}) as any; // empty obj to escape any optional chain overhead\r\n/** Shared no-operation function. */\r\nexport const NOOP = () => {}; // no operation function to escape optional chain overhead\r\n\r\nlet isDevEnv = false;\r\ntry {\r\n isDevEnv = process.env.NODE_ENV !== \"production\";\r\n} catch (e) {}\r\nconst CTX_BUILD = {\r\n /** Flag indicating whether the application is running in development mode. */\r\n isDevEnv,\r\n /** Flag indicating whether an operation is bypassing checks so reactors can allow all writes. */\r\n usingForce: false,\r\n /** Active `Autotracker` instance, override for automatic dependency collection on `Reactor` traps. */\r\n autotracker: null as Autotracker<any> | null,\r\n /** Extensible meta context for payloads and cross-cutting concerns. */\r\n meta: null as ReactorMeta | null,\r\n /** Default configuration for new `Reactor` instances and also fallback for utils that need and are called without these options. */\r\n defaults: {\r\n crossRealms: false,\r\n smartCloning: false,\r\n eventBubbling: true,\r\n eventCapturing: \"auto\",\r\n lineageTracing: false,\r\n preserveContext: false,\r\n equalityFunction: Object.is,\r\n batchingFunction: RTR_BATCH,\r\n } as Partial<ReactorBuild<any>>,\r\n};\r\n\r\n/** Global context object for sharing state across the reactor runtime. */\r\nexport const CTX: typeof CTX_BUILD = ((globalThis as any)[Symbol.for(\"S.I.A_CTX\")] ??= CTX_BUILD);\r\n","import { RAW, INERTIA, REJECTABLE, INDIFFABLE, VERSION, SSVERSION, NIL } from \"./consts\";\r\nimport { Reactor } from \"./reactor\";\r\nimport type { ReactorBuild, Inert, Intent, Live, State, Volatile, Stable } from \"@defs/reactor\";\r\n\r\n/** `Reactor` method names exposed on objects returned by `reactive()`. */\r\nexport const methods = [\"tick\", \"stall\", \"nostall\", \"get\", \"gonce\", \"noget\", \"set\", \"sonce\", \"noset\", \"delete\", \"donce\", \"nodelete\", \"watch\", \"wonce\", \"nowatch\", \"on\", \"once\", \"off\", \"snapshot\", \"use\", \"reset\", \"destroy\"] as const;\r\n\r\ntype Method = (typeof methods)[number];\r\ntype Prefix<P extends ReactivePreferences | undefined> = P extends { prefix?: infer X extends string } ? X : \"\";\r\ntype Suffix<P extends ReactivePreferences | undefined> = P extends { suffix?: infer X extends string } ? X : \"\";\r\ntype Whitelist<P extends ReactivePreferences | undefined> = P extends { whitelist?: infer W extends readonly Method[] } ? W[number] : never;\r\ntype ReactiveMethodMap<T extends object, P extends ReactivePreferences | undefined> = {\r\n [K in Method as [Prefix<P>, Suffix<P>] extends [\"\", \"\"] ? (P extends { whitelist: readonly Method[] } ? (K extends Whitelist<P> ? never : K) : K) : P extends { whitelist: readonly Method[] } ? (K extends Whitelist<P> ? `${Prefix<P>}${K}${Suffix<P>}` : K) : `${Prefix<P>}${K}${Suffix<P>}`]: Pick<Reactor<T>, Method>[K];\r\n};\r\n\r\n/** Exposed `Reactor` methods and `__Reactor__` of a `reactive()` object. */\r\nexport type APIKey<T extends object = any, P extends ReactivePreferences | undefined = undefined> = keyof ReactiveMethodMap<T, P> | \"__Reactor__\";\r\n/** Type representing a `reactive()` object with mapped `Reactor` methods and `__Reactor__`. */\r\nexport type Reactive<T extends object, P extends ReactivePreferences | undefined = undefined> = T & ReactiveMethodMap<T, P> & { __Reactor__: Reactor<T> };\r\n/** Object type with only the non-reactor props of a `reactive()` object, representing the runtime enumerable shape. */\r\nexport type Pure<T extends object, P extends ReactivePreferences | undefined = undefined> = {\r\n [K in keyof T as K extends APIKey<T, P> ? never : K]: T[K];\r\n};\r\nexport interface ReactivePreferences {\r\n /** Prefix applied to exposed `Reactor` methods. */\r\n prefix?: string;\r\n /** Suffix applied to exposed `Reactor` methods. */\r\n suffix?: string;\r\n /** Reactor methods that may collide with keys already existing in your state object.\r\n * - If an affix (prefix/suffix) is provided, ONLY these methods will receive the affix (others keep original names).\r\n * - If no affix is provided, these methods will be completely skipped and not attached.\r\n */\r\n whitelist?: readonly Method[]; // keys you're already using\r\n}\r\n\r\n/**\r\n * Attaches `Reactor` APIs to a state object and returns its reactive proxy from the reactor's core.\r\n * If an existing `reactive()` object is passed, it is re-returned ignoring change in preferences.\r\n * @param target Source state object or an existing Reactor instance.\r\n * @param build Reactor initial configuration.\r\n * @param preferences Method naming preferences for exposed APIs.\r\n * @returns Reactive object with mapped Reactor methods and `__Reactor__`.\r\n * @example\r\n * const state = reactive({ user: { name: \"Kosi\" } });\r\n * state.set(\"user.name\", (v) => v);\r\n * @example\r\n * // State already has a 'tick' that's a number so prefix the reactor's method to avoid collision.\r\n * const state = reactive({ tick: 0 }, { debug: true }, { prefix: \"$\", whitelist: [\"tick\"] });\r\n * state.$tick(); // reactor's 'tick' method is prefixed\r\n * state.set(\"tick\", (v) => v + 1); // 'set' keeps its original name\r\n * // Instead, don't prefix and just skip the 'tick' method entirely.\r\n * const state = reactive({ tick: 0 }, { debug: false }, { whitelist: [\"tick\"] });\r\n * state.tick; // number, not the reactor's method\r\n * // You could also rename the property on your State object, e.g. to \"clock\".\r\n */\r\nexport function reactive<T extends object, const P extends ReactivePreferences | undefined = undefined>(target: T, build?: ReactorBuild<T>, preferences: P = NIL): T extends Reactive<infer _O, infer _P> ? T : Reactive<T, P> {\r\n if (\"__Reactor__\" in target) return target as any;\r\n const descriptors: PropertyDescriptorMap = {},\r\n rtr = getReactor(target, true, build),\r\n locks = { enumerable: false, configurable: true, writable: false },\r\n hasAffix = !!(preferences.prefix || preferences.suffix);\r\n for (let i = 0, len = methods.length; i < len; i++) {\r\n let key = methods[i];\r\n if (hasAffix) (preferences.whitelist?.includes(key) ?? true) && (key = `${preferences.prefix || \"\"}${key}${preferences.suffix || \"\"}` as Method);\r\n else if (preferences.whitelist?.includes(key)) continue;\r\n descriptors[key] = { value: rtr[methods[i]].bind(rtr), ...locks };\r\n }\r\n descriptors[\"__Reactor__\"] = { value: rtr, ...locks };\r\n return Object.defineProperties(rtr.core, descriptors), rtr.core as any;\r\n}\r\n\r\n/**\r\n * Marks an object as intent (rejectable).\r\n * @param target Object to mark.\r\n * @returns The same object with intent typing.\r\n */\r\nexport function intent<T extends object>(target: T): Intent<T> {\r\n return (getRaw(target as any)[REJECTABLE] = true), target as Intent<T>;\r\n}\r\n/**\r\n * Removes intent (rejectable) behavior from an object.\r\n * @param target Object to unmark.\r\n * @returns The same object with state typing.\r\n */\r\nexport function state<T extends object>(target: T): State<T> {\r\n return delete getRaw(target as any)[REJECTABLE], target as State<T>;\r\n}\r\n/**\r\n * Checks whether an object is marked as intent.\r\n * @param target Object to test.\r\n * @returns `true` when marked as intent.\r\n */\r\nexport function isIntent<T extends object>(target: T = NIL): target is Intent<T> {\r\n return !!getRaw(target as any)[REJECTABLE];\r\n}\r\n\r\n/**\r\n * Marks an object as inert so it is skipped by proxy mediation.\r\n * @param target Object to mark.\r\n * @returns The same object with inert typing.\r\n */\r\nexport function inert<T extends object>(target: T): Inert<T> {\r\n return (getRaw(target as any)[INERTIA] = true), target as Inert<T>;\r\n}\r\n/**\r\n * Removes the inert marker from an object.\r\n * @param target Object to unmark.\r\n * @returns The same object with live typing.\r\n */\r\nexport function live<T extends object>(target: T): Live<T> {\r\n return delete getRaw(target as any)[INERTIA], target as Live<T>;\r\n}\r\n/**\r\n * Checks whether an object is marked as inert.\r\n * @param target Object to test.\r\n * @returns `true` when inert.\r\n */\r\nexport function isInert<T extends object>(target: T = NIL): target is Inert<T> {\r\n return !!getRaw(target as any)[INERTIA];\r\n}\r\n\r\n/**\r\n * Marks an object as volatile (indiffable enabled).\r\n * @param target Object to mark.\r\n * @returns The same object with volatile typing.\r\n */\r\nexport function volatile<T extends object>(target: T): Volatile<T> {\r\n return (getRaw(target as any)[INDIFFABLE] = true), target as Volatile<T>;\r\n}\r\n/**\r\n * Removes volatile behavior from an object.\r\n * @param target Object to unmark.\r\n * @returns The same object with stable typing.\r\n */\r\nexport function stable<T extends object>(target: T): Stable<T> {\r\n return delete getRaw(target as any)[INDIFFABLE], target as Stable<T>;\r\n}\r\n/**\r\n * Checks whether an object is marked as volatile.\r\n * @param target Object to test.\r\n * @returns `true` when marked as volatile.\r\n */\r\nexport function isVolatile<T extends object>(target: T = NIL): target is Volatile<T> {\r\n return !!getRaw(target as any)[INDIFFABLE];\r\n}\r\n\r\n/**\r\n * Gets the underlying `Reactor` instance associated with a `reactive()` object,\r\n * returns the `Reactor` itself if given, or optionally creates one for plain objects.\r\n * @param target Object to retrieve `Reactor` from.\r\n * @param create When `true`, creates a new `Reactor` for plain objects when none exists.\r\n * @param build Optional `Reactor` build options used only when `create` initializes a new instance.\r\n * @returns `Reactor` instance or `undefined` if not reactive and `create` is false.\r\n */\r\nexport function getReactor<T extends object>(target: Reactor<T>, create?: boolean, build?: ReactorBuild<T>): Reactor<T>;\r\nexport function getReactor<T extends object>(target: Reactive<T>, create?: boolean, build?: ReactorBuild<T>): Reactor<T>;\r\nexport function getReactor<T extends object>(target: T, create: true, build?: ReactorBuild<T>): Reactor<T>;\r\nexport function getReactor<T extends object>(target: T, create?: false, build?: ReactorBuild<T>): Reactor<T> | undefined;\r\nexport function getReactor<T extends object>(target: T | Reactor<T> | Reactive<T>, create: true, build?: ReactorBuild<T>): Reactor<T>;\r\nexport function getReactor<T extends object>(target: T | Reactor<T> | Reactive<T>, create?: false, build?: ReactorBuild<T>): Reactor<T> | undefined;\r\nexport function getReactor<T extends object>(target: T | Reactor<T> | Reactive<T>, create = false, build?: ReactorBuild<T>): Reactor<T> | undefined {\r\n return (target instanceof Reactor ? target : (target as Reactive<T>).__Reactor__) || (create ? new Reactor(target as T, build) : undefined);\r\n}\r\n\r\n/**\r\n * Gets the raw (unproxied) version of an object if it's proxied, otherwise returns the original object.\r\n * @param target Object to unwrap.\r\n * @returns Raw object if proxied, else the original object. Use `Reactor.snapshot(true)` for deep unwrapping.\r\n */\r\nexport function getRaw<T extends object>(target: T = NIL): T {\r\n return (target as any)[RAW] || target;\r\n}\r\n\r\n/**\r\n * Gets the current structural version of an object.\r\n * @param target Object to inspect.\r\n * @returns Version number.\r\n */\r\nexport function getVersion<T extends object>(target: T = NIL): number {\r\n return getRaw(target as any)[VERSION] || 0;\r\n}\r\n/**\r\n * Gets the current snapshot-cache version of an object.\r\n * @param target Object to inspect.\r\n * @returns Snapshot version number.\r\n */\r\nexport function getSnapshotVersion<T extends object>(target: T = NIL): number {\r\n return getRaw(target as any)[SSVERSION] || 0;\r\n}\r\n","import { CTX } from \"@core/consts\";\nimport { resetMeta } from \"@utils/obj\";\n\n/** Transaction object representing a unit of work in the reactor system. */\nexport interface Transaction {\n /** Unique identifier for the transaction, an auto-incrementing number. */\n id: number;\n /** Optional label for the transaction, useful for debugging and logging purposes. */\n label?: string;\n /** Reference to the parent transaction, allowing for nested transaction stacking. */\n parent: Transaction | null;\n}\n\n/** Global transaction ID counter, incremented with each new transaction. */\nexport let txId = 0;\n\n/**\n * Starts a new transaction with an optional label. Transactions are used to group related operations together,\n * allowing for better tracking and debugging of state changes within the reactor system.\n * @param label Optional label for the transaction, useful for debugging and logging purposes.\n * @returns The newly created transaction object.\n */\nexport function startTx(label = `Tx ${txId + 1}`): Transaction {\n const parent = CTX.meta?.tx ?? null,\n tx: Transaction = { id: ++txId, label, parent };\n CTX.meta ??= {};\n return (CTX.meta.tx = tx);\n}\n\n/**\n * Ends the given transaction, reverting the current transaction context to its parent. This should be called after the operations within the transaction are completed to ensure proper cleanup and state management.\n * @param tx The transaction to end.\n */\nexport function endTx(tx: Transaction) {\n if (CTX.meta?.tx === tx) {\n if (tx.parent) CTX.meta.tx = tx.parent;\n else resetMeta(\"tx\");\n };\n}\n\n/**\n * Executes a function within a new transaction context. This is a convenient way to ensure that all operations within the function are grouped together in a single transaction, allowing for better tracking and debugging of state changes.\n * @param fn The function to execute within the transaction context.\n * @param label Optional label for the transaction, useful for debugging and logging purposes.\n * @returns The result of the function execution.\n */\nexport function transaction<T>(fn: () => T, label?: string): T {\n const tx = startTx(label);\n try {\n return fn();\n } finally {\n endTx(tx);\n }\n}\n\ndeclare module \"@defs/reactor\" {\n interface ReactorMeta {\n /** Transaction context for this payload, `null` if outside of a transaction. */\n tx?: Transaction | null;\n }\n}\n","import { CTX, NIL, INERTIA } from \"@core/consts\";\r\nimport { ReactorEvent } from \"@core/event\";\r\nimport type { Pure } from \"@core/mixins\";\r\nimport { Payload, Reactor, ReactorMeta } from \"@defs/reactor\";\r\nimport { getReactor } from \"@core/mixins\";\r\nimport type { DeepMerge, Unflatten, WildPaths, PathValue, PathBranchValue, ChildPaths, MaxDepth, Paths, DeepPartial } from \"@defs/obj\";\r\nimport { transaction, txId } from \"@modules/timeTravel/transaction\";\r\n\r\nexport let arrRegex = /^([^\\[\\]]+)\\[(\\d+)\\]$/;\r\n\r\n// Type Guards\r\n\r\n/** Checks if a value type is an object for common use cases. */\r\nexport function isObj<T extends object = object>(obj: any, arraycheck = true): obj is T {\r\n return \"object\" === typeof obj && obj !== null && (arraycheck ? !Array.isArray(obj) : true);\r\n} // okay for common use cases but loose\r\n/** Checks if a value is a \"Plain Old Javascript Object\". */\r\nexport function isPOJO<T extends object = object>(obj: any, config: { crossRealms?: boolean } = CTX.defaults, typecheck = true): obj is T {\r\n return (typecheck ? isObj(obj, false) : true) && (config.crossRealms ? Object.prototype.toString.call(obj) === \"[object Object]\" : obj.constructor === Object);\r\n} // for strict own POJOs, handles cross-realm objects too\r\n\r\n/** Returns whether a value can be proxied by the reactor runtime. */\r\nexport function canHandle(obj: any, config: { crossRealms?: boolean; preserveContext?: boolean } = CTX.defaults, typecheck = true): boolean {\r\n if ((typecheck && !isObj(obj, false)) || (obj as any)[INERTIA]) return false;\r\n if (Array.isArray(obj) || (!config.preserveContext && isPOJO(obj, config, false))) return true;\r\n if (config.preserveContext) return !(obj instanceof String) && !(obj instanceof Number) && !(obj instanceof Function) && !(obj instanceof Date) && !(obj instanceof Error) && !(obj instanceof RegExp) && !(obj instanceof Promise) && !(obj instanceof Map) && !(obj instanceof WeakMap) && !(obj instanceof Set) && !(obj instanceof WeakSet) && !(obj instanceof EventTarget); // matching types\r\n return false;\r\n} // universal proxy gate for all reactive logic\r\n\r\n// Deep Manipulation\r\n\r\n/**\r\n * Gets a value by path.\r\n * @example\r\n * const state = { user: { profile: { name: \"Kosi\" } } };\r\n * const name = getPath(state, \"user.profile.name\");\r\n */\r\nexport function getPath<T extends object, const S extends string = \".\", P extends WildPaths<T, S> = WildPaths<T, S>>(source: T, key: P, separator: S = \".\" as S, keyFn?: (p: string) => string): PathValue<T, P, S> {\r\n if (key === \"*\") return source as any;\r\n const keys = key.split(separator);\r\n let currObj: any = source;\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keyFn ? keyFn(keys[i]) : keys[i],\r\n match = key.includes(\"[\") && key.match(arrRegex);\r\n if (match) {\r\n const [, key, iStr] = match;\r\n if (!Array.isArray(currObj[key]) || !(key in currObj)) return currObj[key];\r\n currObj = currObj[key][Number(iStr)];\r\n } else {\r\n if (!isObj<Record<string, any>>(currObj) || !(key in currObj)) return currObj[key];\r\n currObj = currObj[key];\r\n }\r\n }\r\n return currObj;\r\n}\r\n\r\n/**\r\n * Sets a value by path.\r\n * @example\r\n * const state = { user: { profile: { name: \"Kosi\" } } };\r\n * setPath(state, \"user.profile.name\", \"Grace\");\r\n * @example\r\n * const state = { users: [] as Array<{ name?: string }> };\r\n * setPath(state, \"users.0.name\", \"Kosi\"); // use `[n]` for arrays if uncertain so the indexes are not treated as object keys, i.e. { \"0\": { name: \"Kosi\" } } instead of { users: [ { name: \"Kosi\" } ] }\r\n */\r\nexport function setPath<T extends object, const S extends string = \".\", P extends WildPaths<T, S> = WildPaths<T, S>>(target: T, key: P, value: PathValue<T, P, S>, separator: S = \".\" as S, keyFn?: (p: string) => string): void {\r\n if (key === \"*\") return Object.assign(target, value);\r\n const keys = key.split(separator);\r\n for (let currObj: any = target, i = 0, len = keys.length; i < len; i++) {\r\n const key = keyFn ? keyFn(keys[i]) : keys[i],\r\n match = key.includes(\"[\") && key.match(arrRegex);\r\n if (match) {\r\n const [, key, iStr] = match;\r\n if (!Array.isArray(currObj[key])) currObj[key] = [];\r\n if (i === len - 1) currObj[key][Number(iStr)] = value;\r\n else (currObj[key][Number(iStr)] ||= {}), (currObj = currObj[key][Number(iStr)]);\r\n } else {\r\n if (i === len - 1) currObj[key] = value;\r\n else (currObj[key] ||= {}), (currObj = currObj[key]);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Deletes a value by path.\r\n * @example\r\n * const state = { user: { profile: { name: \"Kosi\" } } };\r\n * deletePath(state, \"user.profile.name\");\r\n */\r\nexport function deletePath<T extends object, const S extends string = \".\", P extends WildPaths<T, S> = WildPaths<T, S>>(target: T, key: P, separator: S = \".\" as S, keyFn?: (p: string) => string): void {\r\n if (key === \"*\") {\r\n const keys = Object.keys(target);\r\n for (let i = 0, len = keys.length; i < len; i++) delete (target as any)[keys[i]];\r\n return;\r\n }\r\n const keys = key.split(separator);\r\n for (let currObj: any = target, i = 0, len = keys.length; i < len; i++) {\r\n const key = keyFn ? keyFn(keys[i]) : keys[i],\r\n match = key.includes(\"[\") && key.match(arrRegex);\r\n if (match) {\r\n const [, key, iStr] = match;\r\n if (!Array.isArray(currObj[key]) || !(key in currObj)) return;\r\n if (i === len - 1) delete currObj[key][Number(iStr)];\r\n else currObj = currObj[key][Number(iStr)];\r\n } else {\r\n if (!isObj<Record<string, any>>(currObj) || !(key in currObj)) return;\r\n if (i === len - 1) delete currObj[key];\r\n else currObj = currObj[key];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Checks whether a path exists.\r\n * @example\r\n * const state = { user: { profile: { name: \"Kosi\" } } };\r\n * const ok = hasPath(state, \"user.profile.name\"); // default loose typing due to it's usecase\r\n */\r\nexport function hasPath<T extends object, const S extends string = \".\", P extends string = string>(source: T, key: P, separator: S = \".\" as S, keyFn?: (p: string) => string): boolean {\r\n if (key === \"*\") return true;\r\n const keys = key.split(separator);\r\n for (let currObj: any = source, i = 0, len = keys.length; i < len; i++) {\r\n const key = keyFn ? keyFn(keys[i]) : keys[i],\r\n match = key.includes(\"[\") && key.match(arrRegex);\r\n if (match) {\r\n const [, key, iStr] = match;\r\n if (!Array.isArray(currObj[key]) || !(key in currObj)) return false;\r\n if (i === len - 1) return true;\r\n currObj = currObj[key][Number(iStr)];\r\n } else {\r\n if (!isObj<Record<string, any>>(currObj) || !(key in currObj)) return false;\r\n if (i === len - 1) return true;\r\n currObj = currObj[key];\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Converts flattened keys into nested object structure.\r\n * @example\r\n * const flat = { \"user.name\": \"Kosi\", \"user.role\": \"admin\" };\r\n * const obj = parsePathObj(flat);\r\n */\r\nexport function parsePathObj<T extends Record<string, any>, const S extends string = \".\">(obj: T, separator: S = \".\" as S, keyFn = (p: string) => p, seen = new WeakSet()): Unflatten<T, S> {\r\n if (!isPOJO(obj) || seen.has(obj)) return obj as Unflatten<T, S>; // no circular references\r\n seen.add(obj);\r\n const result: any = {},\r\n keys = Object.keys(obj);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key: any = keys[i],\r\n val: any = obj[key];\r\n key === \"*\" || key.includes(separator) ? setPath(result, key, parsePathObj(val, separator, keyFn, seen), separator, keyFn) : (result[key] = isPOJO(val) ? parsePathObj(val, separator, keyFn, seen) : val);\r\n }\r\n return result as Unflatten<T, S>;\r\n}\r\n\r\n/** Fast array scanner. Checks if a target path exactly matches or is a child of any path in the provided array. */\r\nexport function matchPaths(paths: Array<string | RegExp>, target: string): boolean {\r\n for (let i = 0, len = paths.length; i < len; i++) {\r\n const p = paths[i];\r\n if (typeof p !== \"string\" ? p.test(target) : target === p || target.startsWith(p + \".\")) return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Counts the depth(number of dot(s)) in a path in the most optimized way possible. */\r\nexport function getDepth(path: string, depth = !path ? 0 : 1): number {\r\n for (let i = 0, len = path.length; i < len; i++) if (path.charCodeAt(i) === 46) depth++; // zero alloc; so when we say it's optmized, it's not cap :)\r\n return depth;\r\n}\r\n\r\n/** Normalizes boolean/object event options into a single options object. */\r\nexport function parseEvtOpts<T extends object, const K extends (keyof T)[] | readonly (keyof T)[], const O extends K[number] = K[0]>(options: T | boolean | undefined, opts: K, boolOpt: O = opts[0] as O, result = {} as T): T & { [P in O]-?: T[P] } {\r\n return Object.assign(result, \"boolean\" === typeof options ? { [boolOpt]: options } : options), result as T & { [P in O]-?: T[P] };\r\n}\r\n\r\n// Merging & Traversal\r\n\r\nexport interface FanoutOptionsTuple extends Partial<Record<(typeof fanoutOptsArr)[number], any>> {\r\n /** Whether to merge values before fanout, useful for patching usecases. @default `false`. */\r\n merge?: boolean;\r\n /** How many levels to fan out, set based on your listener paths max dots. `true` is `Infinity`. @default `1` for event cascading otherwise `Infinity`. */\r\n depth?: number | boolean;\r\n /** Whether to assign arrays as a whole and only touch `.length` for common cases. Only works with the `path` parameter overload or in nested levels.\r\n * Arrays can lead to unnecessary work as more often than not, you won't be watching index paths but waiting on the parent bubble instead.\r\n * If you happen to be watching, it might be more optimal to re-set it yourself if it's only a few indexes or just set this to `false`. @default `true` */\r\n atomic?: boolean;\r\n /** Whether to skip `undefined` values during fanout. @default `false`. */\r\n skipUndef?: boolean;\r\n /** Whether to clone before setting any final values, prevents unintended reference sharing across the state tree. @default `false`. */\r\n cloneSets?: boolean;\r\n /** A label for the transaction that will be started, useful for debugging and tracking. @default `Fanout -> \"${path}\"` : `Fanout`} (Tx ${CTX.txId})`. */\r\n txLabel?: string;\r\n}\r\n/**\r\n * Unified expansion utility.\r\n * Bridges Coarse (Immutable replacement) writes into Fine-grained (Reactive) writes by surgically\r\n * expanding a single object write into multiple granular child operations for deep optimal bubbling.\r\n * @example\r\n * // Event Mode (Cascading after-write)\r\n * rtr.on(\"user\", (e) => fanout(e, { depth: 1 })); // defaults to 1 level deep for events\r\n * @example\r\n * // Direct Mode (Patching before-write)\r\n * fanout(state.user, { session: { id: 1, name: \"Kosi\", role: \"admin\" } }, { depth: Infinity }); // default to `Infinity` here\r\n */\r\nexport function fanout<T extends object>(target: T, value?: Partial<T> | Partial<Pure<T>> | DeepPartial<T> | DeepPartial<Pure<T>>, options?: { crossRealms?: boolean } & FanoutOptionsTuple): void;\r\nexport function fanout<T extends object>(event: ReactorEvent<T> | Payload<T>, options?: { crossRealms?: boolean } & FanoutOptionsTuple): void;\r\nexport function fanout<T extends object, P extends WildPaths<T> = WildPaths<T>>(state: T, path: P, value: Partial<PathValue<T, P>> | DeepPartial<PathValue<T, P>>, options?: { crossRealms?: boolean } & FanoutOptionsTuple): void;\r\nexport function fanout(a: any, b?: any, c?: any, d?: any): void {\r\n const isEvPd = !!a?.target,\r\n isPath = !isEvPd && \"string\" === typeof b,\r\n [state, path, olds, news, opts, type] = isEvPd ? [a.root, a.currentTarget.path, a.currentTarget.oldValue, a.currentTarget.value, b || NIL, a.type] : isPath ? [a, b, getPath(a, b), c, d || NIL, undefined] : [undefined, undefined, a, b || a, c || NIL, undefined],\r\n target = isEvPd ? getPath(a.root, a.currentTarget.path) : isPath ? getPath(state, path) : olds; // to avoid stale refs during write-walk\r\n if ((isEvPd && type !== \"set\" && type !== \"delete\") || !target || !canHandle(news, opts)) return;\r\n const { merge = false, depth, atomic = true, skipUndef = false, cloneSets = false, txLabel } = opts;\r\n const func = () => {\r\n const walk = (target: any, obj: any, depth = isEvPd ? 1 : Infinity, keys = Object.keys(obj)) => {\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i],\r\n val = obj[key];\r\n try {\r\n if (atomic && Array.isArray(val)) (target[key] = cloneSets ? deepClone(val) : val), (target[key].length = target[key].length); // ping commoners\r\n else depth > 1 && canHandle(val, opts) ? walk((target[key] ||= Array.isArray(val) ? [] : {}), val, depth - 1) : (!skipUndef || val !== undefined) && (target[key] = cloneSets ? deepClone(val) : val);\r\n } catch (e) {\r\n if (e instanceof RangeError) throw e; // internals can skip, not users\r\n } // call a spade a spade and just skip, no descriptor gymanstics\r\n }\r\n };\r\n if (atomic && Array.isArray(news) && isPath) setPath(state, path, cloneSets ? deepClone(news) : news), (getPath(state, path).length = news.length); // ping commoners\r\n else walk(target, merge ? mergeObjs(olds, news, opts) : news, depth === true ? Infinity : depth);\r\n };\r\n force(() => transaction(func, txLabel ?? `${path ? `Fanout -> '${path}'` : `Fanout`} (Tx ${txId + 1})`), CTX.usingForce || isEvPd); // if event or payload, already written values can bypass equality checks\r\n}\r\nexport const fanoutOptsArr = [\"merge\", \"depth\", \"atomic\", \"skipUndef\"] as const;\r\n\r\n/**\r\n * Executes a task while forcing all reactive writes to bypass equality checks.\r\n * @param task The mutation logic to execute.\r\n * @param bool Override for ease of use in dynamic usecases, defaults to `true`\r\n * @returns The result of the task.\r\n */\r\nexport function force<T>(task: () => T, bool = true): T {\r\n const prev = CTX.usingForce;\r\n CTX.usingForce = bool;\r\n try {\r\n return task();\r\n } finally {\r\n CTX.usingForce = prev;\r\n }\r\n}\r\n\r\n/**\r\n * Deep-merges object-like values, does necessary checks so use without doubts. Only `o2` keys are checked when `skipUndef` is true.\r\n * @example\r\n * const next = mergeObjs({ user: { name: \"Kosi\" } }, { user: { role: \"admin\" } }); // { ...o1, ...o2 } // o2 over o1 and deep!\r\n */\r\nexport function mergeObjs<T1 extends object, T2 extends object>(o1?: T1 | null, o2?: T2 | null, config?: { crossRealms?: boolean; skipUndef?: boolean }, pojocheck?: boolean): DeepMerge<T1, T2>;\r\nexport function mergeObjs(o1?: any, o2?: any, config = NIL, pojocheck = true): any {\r\n if (pojocheck && (!isPOJO(o1 || NIL, config) || !isPOJO(o2 || NIL, config))) return o2;\r\n (o1 ||= {}), (o2 ||= {});\r\n const merged = config.skipUndef ? { ...o1 } : { ...o1, ...o2 };\r\n if (config.skipUndef) {\r\n const keys = Object.keys(o1);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i],\r\n val = o2[key];\r\n if (val !== undefined) merged[key] = val;\r\n }\r\n }\r\n const keys = Object.keys(merged);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i],\r\n o1V = o1[key],\r\n o2V = o2[key];\r\n if (isPOJO(o1V, config) && isPOJO(o2V, config)) merged[key] = mergeObjs(o1V, o2V, config, false); // fewer writes is less costly here\r\n }\r\n return merged;\r\n}\r\n\r\n/** Returns [path, parent, value] records from root to the target path. */\r\nexport function getTrailRecords<T extends object>(obj: T, path: WildPaths<T>, reverse = false): [WildPaths<T>, PathBranchValue<T, WildPaths<T>>, PathValue<T, WildPaths<T>>][] {\r\n const parts = path.split(\".\"),\r\n chain: ReturnType<typeof getTrailRecords<T>> = [[\"*\", obj, obj]];\r\n for (let acc = \"\", currObj: any = obj, i = 0, len = parts.length; i < len; i++) {\r\n const part = parts[i];\r\n chain.push([(acc += (i ? \".\" : \"\") + part) as WildPaths<T>, currObj, (currObj = currObj?.[part])]); // one iteration per depth, one-time storage over rcurrent derivation\r\n }\r\n return reverse ? chain.reverse() : chain;\r\n}\r\n\r\n// Cloning\r\n\r\n/**\r\n * Deep-clones supported object structures.\r\n * @example\r\n * const cloned = deepClone({ user: { name: \"Kosi\" } });\r\n */\r\nexport function deepClone<T>(obj: T, config: { crossRealms?: boolean; preserveContext?: boolean } = CTX.defaults, seen = new WeakMap()): T {\r\n if (!obj || \"object\" !== typeof obj) return obj;\r\n const cloned = seen.get(obj);\r\n if (cloned) return cloned;\r\n if (!canHandle(obj, config, false)) return obj; // no circular references\r\n const clone: any = config.preserveContext ? Object.create(Object.getPrototypeOf(obj)) : Array.isArray(obj) ? [] : {};\r\n seen.set(obj, clone);\r\n const keys = config.preserveContext ? Reflect.ownKeys(obj) : Object.keys(obj);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i];\r\n try {\r\n clone[key] = deepClone((obj as any)[key], config, seen);\r\n } catch (e) {\r\n if (e instanceof RangeError) throw e; // internals can skip, not users\r\n } // call a spade a spade and just skip, no descriptor gymanstics\r\n }\r\n return clone;\r\n} // POJO|Arr|Dynamic Deep cloner\r\n\r\n// Destruction\r\n\r\n/** Nulls all non-function instance properties across the prototype chain. */\r\nexport function nuke(target: any): void {\r\n const keys = Object.keys(target);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i];\r\n if (\"function\" !== typeof target[key]) target[key] = null;\r\n }\r\n}\r\n\r\n// Metadata Operations\r\n\r\n/**\r\n * Allows extending the context payload of a `Reactor` operation with custom meta properties for the duration of a function execution.\r\n * Temporarily merges provided meta into `CTX.meta` for the duration of `fn`. Restores the previous meta object after `fn` completes (even on `throw`).\r\n * @param props Meta properties to merge into the current context.\r\n */\r\nexport function withMeta<T>(props: ReactorMeta, fn: () => T): T {\r\n CTX.meta ??= {};\r\n const cache: Record<string, any> = {};\r\n for (const key of Object.keys(props)) {\r\n cache[key] = (CTX.meta as any)[key];\r\n (CTX.meta as any)[key] = (props as any)[key];\r\n }\r\n try {\r\n return fn();\r\n } finally {\r\n for (const key of Object.keys(cache)) {\r\n if (cache[key] === undefined) resetMeta(key as any);\r\n else (CTX.meta as any)![key] = cache[key];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Resets a specific property in the global context meta and nullifies it if empty to stay on the fast path.\r\n * @param key The key of the meta property to be deleted before nullifying.\r\n */\r\nexport function resetMeta(key: keyof ReactorMeta) {\r\n if (!CTX.meta) return;\r\n delete CTX.meta[key];\r\n for (const _ in CTX.meta) return;\r\n CTX.meta = null;\r\n}\r\n\r\n/** Checks if an object is empty (has no own enumerable properties). */\r\nexport const isEmpty = (value: Object, preserveContext = CTX.defaults.preserveContext) => {\r\n if (preserveContext) return Reflect.ownKeys(value).length === 0;\r\n for (const _ in value) return false;\r\n return true;\r\n};\r\n\r\n/**\r\n * The Master Path Engine: Single-pass, zero-allocation DFS tree extraction. Perfectly mirrors the TS `Paths` and `ChildPaths` generics.\r\n * - Root paths: `getPaths(store)`\r\n * - Child paths: `getPaths(store, \"settings.audio\")`\r\n * - Next words (typeahead): `getPaths(store, \"settings\", { depth: 1 })`\r\n */\r\nexport function getPaths<T extends object, const S extends string = \".\", P extends WildPaths<T, S> = \"*\", D extends number = MaxDepth, L extends boolean = false>(obj: T, path: P = \"*\" as P, config: { depth?: D; separator?: S; leavesOnly?: L; atomic?: boolean; preserveContext?: boolean } = CTX.defaults as any): (P extends \"*\" ? Paths<T, S, D, L> : ChildPaths<T, P, S, D, L>)[] {\r\n const target = path === \"*\" ? obj : getPath(obj, path as any, config.separator as S),\r\n result: string[] = [],\r\n seen = new Set<any>();\r\n if (!canHandle(target, config)) return result as any;\r\n const walk = (curr: any, currPath: string, depth: number) => {\r\n if (seen.has(curr) || depth >= (config.depth ?? 18)) return;\r\n seen.add(curr);\r\n const keys = config.preserveContext ? Reflect.ownKeys(curr) : Object.keys(curr);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = String(keys[i]),\r\n val = (curr as any)[key],\r\n newPath = currPath ? `${currPath}${config.separator || \".\"}${key}` : key,\r\n isArray = Array.isArray(val),\r\n isNode = canHandle(val, config) && !((config.atomic ?? true) && isArray),\r\n isEmptyNode = isNode && (isArray ? val.length === 0 : isEmpty(val, config.preserveContext));\r\n if (!config.leavesOnly || !isNode || isEmptyNode) result.push(newPath);\r\n try {\r\n isNode && !isEmptyNode && walk(val, newPath, depth + 1);\r\n } catch (e) {\r\n if (e instanceof RangeError) throw e;\r\n }\r\n }\r\n seen.delete(curr); // Backtrack: allow identical object refs across different branches\r\n }; // Inline closure maintains state; prepends the exact parent path during the first pass.\r\n return walk(target, path === \"*\" ? \"\" : path, 0), result as any; // If path is passed, it acts as the initial string prefix for the sub-tree walk.\r\n}\r\n\r\n/** Quick boolean check to see if a path resolves to a final/inert value (Command Execution Gate). */\r\nexport function isLeafPath<T extends object, const S extends string = \".\", P extends WildPaths<T, S> = WildPaths<T, S>>(obj: T, path: P, config: { separator?: S } & typeof CTX.defaults = CTX.defaults, value = getPath(obj, path, config.separator)): boolean {\r\n return path !== \"*\" && !canHandle(value, config);\r\n}\r\n\r\n/**\r\n * Creates a two-way, array-atomic, echo-proof sync bridge between two S.I.A Reactors. Uses a synchronous origin lock to prevent infinite echo loops.\r\n * On setup, `rA` hydrates `rB` at `prefixB` with a deep clone of its current state at `prefixA` (primary drives initial truth).\r\n * @param rA Primary reactor — source of truth. Its `prefixA` slice seeds `rB.prefixB` on setup.\r\n * @param rB Secondary reactor — the wider store (e.g. `ctlr.config`). Holds the primary at a named path.\r\n * @param prefixA Path prefix on `rA` to watch and translate. Use `\"\"` for root.\r\n * @param prefixB Path on `rB` that maps to `rA`. Defaults to `\"\"` (root).\r\n * @param signal Optional `AbortSignal` to tear down both watchers automatically.\r\n * @returns Cleanup function that removes both watchers.\r\n * @example\r\n * const unsync = createReactorSync(module.config, ctlr.config, \"\", \"settings.persist\", signal); // module.config root <-> ctlr.config.settings.persist\r\n * @example\r\n * const unsync = createReactorSync(timeline.config, ctlr.config, \"\", \"settings.controlPanel.timeline\"); // timeline.config root <-> ctlr.config.settings.controlPanel.timeline\r\n * unsync(); // or let signal do it\r\n */\r\nexport function createReactorSync(rA: Reactor<any> | object, rB: Reactor<any> | object, prefixA: string, prefixB = \"\", signal?: AbortSignal): () => void {\r\n const rtrA = getReactor(rA, true),\r\n rtrB = getReactor(rB, true);\r\n let origin: 0 | 1 | null = null; // 0 = A fired, 1 = B fired\r\n const sync = (src: 0 | 1, dest: any, srcP: string, destP: string) => (val: any, payload: Payload<any, \"*\">) => {\r\n if (origin === (src ^ 1)) return; // echo guard\r\n const { path, object: obj, key } = payload.target;\r\n if (srcP && path !== srcP && !path.startsWith(srcP + \".\")) return; // boundary check\r\n const isArr = Array.isArray(obj),\r\n origP = isArr ? path.slice(0, -((key as string).length + 1)) : path, // Array trap: forward the whole array instead of an index-keyed object\r\n syncP = origP === srcP ? \"\" : srcP ? origP.slice(srcP.length + 1) : origP;\r\n (origin = src), setPath(dest, (destP ? (syncP ? `${destP}.${syncP}` : destP) : syncP || \"*\") as any, isArr ? deepClone(obj) : val), (origin = null);\r\n };\r\n const initA = prefixA ? getPath(rtrA.core, prefixA as any) : rtrA.core; // primary hydrates secondary on setup\r\n if (initA !== undefined) fanout(rtrB.core, (prefixB || \"*\") as any, initA, { depth: 1, cloneSets: true, txLabel: `ReactorSync: ${prefixA}^ <-> ${prefixB}` });\r\n const clupA = rtrA.watch(\"*\", sync(0, rtrB.core, prefixA, prefixB), { signal }),\r\n clupB = rtrB.watch(\"*\", sync(1, rtrA.core, prefixB, prefixA), { signal });\r\n return () => (clupA(), clupB());\r\n}\r\n","import type { Payload } from \"@defs/reactor\";\r\nimport type { WildPaths } from \"@defs/obj\";\r\nimport { getTrailRecords } from \"@utils/obj\";\r\n\r\n// ===========================================================================\r\n// The S.I.A (State & Intent Architecture) `Event`\r\n// ===========================================================================\r\n\r\n/**\r\n * - Runtime event payload used by Reactor listener waves.\r\n * - Tracks phase and current path context during propagation, mimics native `Event` API.\r\n * Exposes intent controls (`resolve`/`reject`), propagation controls, and `composedPath()`.\r\n * @typeParam T Root state object type.\r\n * @typeParam P Target path type.\r\n */\r\nexport class ReactorEvent<T extends object, P extends WildPaths<T> = WildPaths<T>> {\r\n /** No active propagation phase. */\r\n public static readonly NONE = 0;\r\n /** Capture phase: root to target parent. */\r\n public static readonly CAPTURING_PHASE = 1;\r\n /** Target phase: target listeners run. */\r\n public static readonly AT_TARGET = 2;\r\n /** Bubble phase: target parent to root. */\r\n public static readonly BUBBLING_PHASE = 3;\r\n /** Current propagation phase for this event instance. */\r\n public eventPhase = ReactorEvent.NONE;\r\n /** Current event type for the active propagation path, use immediately if async */\r\n public type!: Payload<T, P>[\"type\"];\r\n\r\n public currentTarget!: Payload<T, P>[\"currentTarget\"]; /** Current target context for the active propagation path, use immediately if async. Also survives future shape changes from nesting for a path callback. */\r\n public readonly target!: Payload<T, P>[\"target\"]; /** Original event target context. */\r\n public readonly root!: Payload<T, P>[\"root\"]; /** Root reactive object for this event instance wave. */\r\n public readonly reactor!: Payload<T, P>[\"reactor\"]; /** The `Reactor` instance that dispatched this event instance. */\r\n /** Whether resolve/reject intent semantics are allowed for this event instance. */\r\n public readonly rejectable!: boolean;\r\n /** Original event type before propagation remapping. */\r\n public readonly staticType: Exclude<Payload<T, P>[\"type\"], \"update\">;\r\n public readonly path: Payload<T, P>[\"target\"][\"path\"]; /** Original target path for this event instance wave. */\r\n public readonly value: Payload<T, P>[\"target\"][\"value\"]; /** Current value at the event target path. */\r\n public readonly oldValue: Payload<T, P>[\"target\"][\"oldValue\"]; /** Previous value at the event target path. */\r\n /** Whether this event instance wave can bubble back up to ancestors or just capture down. */\r\n public readonly bubbles: boolean = false;\r\n /** Whether this event instance wave can capture down to descendants or just bubble up. */\r\n public readonly captures: boolean = false;\r\n /** `DOMHighResTimeStamp` for this event payload for native event parity, Enable `eventTimeStamps` config, then use this over custom timestamps for accuracy. */\r\n public readonly timestamp?: number;\r\n protected _resolved = \"\";\r\n protected _rejected = \"\";\r\n protected _propagationStopped = false;\r\n protected _immediatePropagationStopped = false;\r\n\r\n /**\r\n * @param payload Source payload for this event instance.\r\n * @param reactor The `Reactor` instance creating this event instance.\r\n */\r\n constructor(payload: Payload<T, P>) {\r\n Object.assign(this, payload);\r\n this.staticType = payload.type as ReactorEvent<T, P>[\"staticType\"];\r\n this.path = payload.target.path;\r\n this.value = payload.target.value;\r\n this.oldValue = payload.target.oldValue;\r\n if (this.reactor.config.eventBubbling) this.bubbles = true;\r\n if (this.reactor.config.eventCapturing === \"auto\" ? this.rejectable : this.reactor.config.eventCapturing) this.captures = true;\r\n if (this.reactor.config.eventTimeStamps) this.timestamp = performance.now();\r\n }\r\n\r\n /** Whether propagation has been stopped. */\r\n public get propagationStopped(): boolean {\r\n return this._propagationStopped;\r\n }\r\n /** Stops propagation to remaining listeners in later nodes/phases. */\r\n public stopPropagation(): void {\r\n this._propagationStopped = true;\r\n }\r\n /** Whether immediate propagation has been stopped. */\r\n public get immediatePropagationStopped(): boolean {\r\n return this._immediatePropagationStopped;\r\n }\r\n /** Stops propagation immediately, including remaining listeners on current path. */\r\n public stopImmediatePropagation(): void {\r\n this._propagationStopped = true;\r\n this._immediatePropagationStopped = true;\r\n }\r\n\r\n /** Resolution message for rejectable events. */\r\n public get resolved(): string {\r\n return this._resolved;\r\n }\r\n /**\r\n * Marks a rejectable event as resolved.\r\n * @param message Optional resolution message or identity.\r\n * @example e.resolve(\"html5Tech\"); // identity\r\n * @example e.resolve(\"API Load successful\"); // message\r\n */\r\n public resolve(message?: string): void {\r\n if (!this.rejectable) return this.reactor.log(`[ReactorEvent] Ignored \\`resolve()\\` call on a non-rejectable ${this.staticType} at \"${this.path}\"`);\r\n if (this.eventPhase !== ReactorEvent.CAPTURING_PHASE) this.reactor.log(`[ReactorEvent] Resolving an intent on ${this.staticType} at \"${this.path}\" outside of the capture phase is unadvised.`);\r\n if (this.rejectable) this.reactor.log(`[ReactorEvent] ${(this._resolved = message || `${this.staticType} intent resolved at \"${this.path}\"`)}`);\r\n }\r\n /** Rejection reason for rejectable events. */\r\n public get rejected(): string {\r\n return this._rejected;\r\n }\r\n /**\r\n * Marks a rejectable event as rejected.\r\n * @param reason Optional rejection reason or identity.\r\n * @example e.reject(\"html5Tech\"); // identity\r\n * @example e.reject(\"User is not logged in\"); // reason\r\n */\r\n public reject(reason?: string): void {\r\n if (!this.rejectable) return this.reactor.log(`[ReactorEvent] Ignored \\`reject()\\` call on a non-rejectable ${this.staticType} at \"${this.path}\"`);\r\n if (this.eventPhase !== ReactorEvent.CAPTURING_PHASE) this.reactor.log(`[ReactorEvent] Rejecting an intent on ${this.staticType} at \"${this.path}\" outside of the capture phase is unadvised.`);\r\n if (this.rejectable) this.reactor.log(`[ReactorEvent] ${(this._rejected = reason || `${this.staticType} intent rejected at \"${this.path}\"`)}`);\r\n }\r\n\r\n /** Returns event path values from target to root in bubbling order. */\r\n public composedPath() {\r\n return getTrailRecords<T>(this.root, this.path as WildPaths<T>, true).map((r) => r[2]); // values reversed to mimic bubbling\r\n }\r\n}\r\n","import { CTX, RAW, INERTIA, REJECTABLE, INDIFFABLE, TERMINATOR, VERSION, SSVERSION, NOOP, RTR_LOG, EVT_OPTS } from \"./consts\";\r\nimport { ReactorEvent } from \"./event\";\r\nimport type { REvent, Target, Payload, Getter, Setter, Deleter, Watcher, Listener, ListenerOptions, ListenerRecord, WatcherRecord, GetterRecord, SetterRecord, DeleterRecord, SyncOptions, ReactorBuild } from \"@defs/reactor\";\r\nimport type { PathBranchValue, Paths, PathKey, PathValue, WildPaths, MaxDepth } from \"@defs/obj\";\r\nimport { canHandle, getTrailRecords, parseEvtOpts, hasPath, getPath, setPath, deletePath, getDepth, force, nuke } from \"@utils/obj\";\r\nimport { BaseReactorModule as ReactorModule, ReactorModuleId } from \"@modules/base\";\r\n\r\n/*\r\n * ========= THE S.I.A (State & Intent Architecture) `Reactor` CODE PATTERN WATCHLIST =========\r\n * 1. non-stack loops & multiple optimizations, this is surgical work on the root of reactivity\r\n * 2. used cached loop lengths to optimize b4 JIT Compiler does for optimal speed throughput,\r\n * avoided myth of reverse while loops so new CPU's don't waste memory on a forward l1 Cache miss\r\n * 3. moved any logic involving `?.` or `??` outside repetitions to not accumulate the ~5x slowdown\r\n * 4. `?.` in cases where only other option was `&&` | `||` cuz `?.` benchmarks were a bit faster\r\n * 5. adopted nooping strategy since JIT compiler makes it up to 2x faster than other alternatives\r\n * 6. no unorthodox string deduplication or caching since string interning is now native to JS\r\n * 7. it's all progressive: light at creation then grows during the use of all desired features\r\n * 8. Reflect API was avoided, incurs an ~8x slowdown; mediation layer is even powerful enough\r\n * 9. Core's Class Syntax over global functional closures for instance's lighter memory footprint\r\n * 10. Avoided object pooling since V8 excels at generational GC for short-lived payloads so no\r\n * \"Stop the World\"s. Also no need for wasted recurrent logic, serialize or forget about payloads.\r\n * 11. Array slicing had to be used in listener loops since unsubscribing is also user-controlled.\r\n * * With all this, the right has now been earned to run on your hot path; sit back and relax :)\r\n */\r\n\r\n// ===========================================================================\r\n// The S.I.A (State & Intent Architecture) `Reactor`\r\n// ===========================================================================\r\n\r\n/**\r\n * - Core S.I.A runtime for path mediation, observation, and event propagation.\r\n * - Provides path-level mediators (`get|set|delete`), synchronous watchers (`watch`), and batched listeners (`on`).\r\n * Supports wildcard/path-based subscriptions, optional reference tracking, and module-based extensions.\r\n * @typeParam T Root state object type.\r\n */\r\nexport class Reactor<T extends object> {\r\n /** Logger function for this reactor instance, override if desired, `this.canLog = false` resets. */\r\n public log: (...args: any[]) => void = NOOP;\r\n /** The core state object for this reactor instance. */\r\n public core: T; // `?:`s | pay the ~800 byte price upfront for what u might never use\r\n /** The modules being used by this reactor. */\r\n public modules?: Set<ReactorModule<T>>;\r\n /** Configuration options for this reactor instance. */\r\n public config: Omit<ReactorBuild<T>, \"debug\">;\r\n /** Whether this reactor instance is currently batching updates, a window view into the engine timing */\r\n public isBatching = false; // Async Batching\r\n protected queue?: Set<() => void>; // Tasks to run after flush\r\n protected batch?: Map<Paths<T>, Payload<T>>; // Batched payloads to flush async\r\n protected lineage?: WeakMap<object, (object | string)[]>; // { parent, key }: uses maths to avoid extra allocations for pairs\r\n protected snapCache?: WeakMap<object, any>;\r\n protected proxyCache = new WeakMap<object, any>();\r\n protected getters?: Map<WildPaths<T>, Array<GetterRecord<T>>>;\r\n protected setters?: Map<WildPaths<T>, Array<SetterRecord<T>>>;\r\n protected deleters?: Map<WildPaths<T>, Array<DeleterRecord<T>>>;\r\n protected watchers?: Map<WildPaths<T>, Array<WatcherRecord<T>>>;\r\n protected listeners?: Map<WildPaths<T>, Array<ListenerRecord<T>>>;\r\n\r\n /**\r\n * Creates a new Reactor instance.\r\n * @param target Initial state target.\r\n * @param build Reactor bootstrap/build configuration.\r\n * @example\r\n * const rtr = new Reactor({ count: 0 });\r\n */\r\n constructor(target: T = {} as T, build?: ReactorBuild<T>) {\r\n (this as any)[INERTIA] = true;\r\n this.config = { ...CTX.defaults, ...build };\r\n this.core = this.proxied(target);\r\n if (build) this.canLog = !!build.debug;\r\n }\r\n\r\n public proxied<O extends object>(target: O, rejectable = false, indiffable = false, parent?: object, key?: string, path?: string): O {\r\n if (!target || \"object\" !== typeof target) return target;\r\n target = (target as any)[RAW] || target; // prevents nested proxies\r\n if (this.config.referenceTracking && parent && key && !this.link(target, parent, key, false)) return target; // already checked types above\r\n const cached = this.proxyCache.get(target);\r\n if (cached) return cached;\r\n if (!canHandle(target, this.config, false)) return target; // handles unless inert, // did light type check for `[Symbol]` so `false` to strictObj typecheck param\r\n rejectable ||= (target as any)[REJECTABLE];\r\n indiffable ||= (target as any)[INDIFFABLE];\r\n const proxy = new Proxy(target, {\r\n // Robust Proxy handler\r\n get: (object, key, receiver) => {\r\n if (key === RAW) return this.log(`👀 [\\`get\\` Trap] Peeked at ${object}`), object;\r\n let value = !this.config.preserveContext ? (object as any)[key] : Reflect.get(object, key, receiver);\r\n const keyStr = String(key),\r\n fullPath = (path ? path + \".\" + keyStr : keyStr) as Paths<T>,\r\n paths = this.config.lineageTracing ? this.trace(object, keyStr) : fullPath;\r\n this.log(`🔍 [\\`get\\` Trap] Initiated for \"${keyStr}\" on [${paths}]`), CTX.autotracker?.track(fullPath, this);\r\n if (this.config.get) value = this.config.get(object as PathBranchValue<T>, key as PathKey<T>, value, receiver, paths);\r\n if (this.getters) {\r\n const wildcords = this.getters.get(\"*\"); // wild cords\r\n for (let i = 0, len = this.config.lineageTracing ? paths.length : 1; i < len; i++) {\r\n const currPath = (this.config.lineageTracing ? paths[i] : fullPath) as Paths<T>,\r\n cords = this.getters.get(currPath);\r\n if (!cords && !wildcords) continue;\r\n const target: Target<T> = { path: currPath, value, key: keyStr as PathKey<T>, hadKey: true, object: receiver },\r\n payload = { type: \"get\", target, currentTarget: target, root: this.core, reactor: this, rejectable, ...CTX.meta } as Payload<T, Paths<T>>;\r\n if (cords) value = this.mediate(currPath, payload, \"get\", cords);\r\n if (!wildcords) continue;\r\n target.value = value;\r\n value = this.mediate(\"*\", payload, \"get\", wildcords);\r\n } // Mediators\r\n }\r\n return this.proxied(value, rejectable, indiffable, object, keyStr, fullPath);\r\n },\r\n set: (object, key, value, receiver) => {\r\n let unchanged,\r\n safeValue,\r\n safeOldValue,\r\n terminated = false;\r\n const keyStr = String(key),\r\n fullPath = (path ? path + \".\" + keyStr : keyStr) as Paths<T>,\r\n paths = this.config.lineageTracing ? this.trace(object, keyStr) : fullPath,\r\n loopLen = this.config.lineageTracing ? paths.length : 1,\r\n oldValue = !this.config.preserveContext ? (object as any)[key] : Reflect.get(object, key, receiver),\r\n hadKey = !this.config.preserveContext ? key in object : Reflect.has(object, key);\r\n this.log(`✏️ [\\`set\\` Trap] Initiated for \"${keyStr}\" on [${paths}]`), CTX.autotracker?.track(fullPath, this, true);\r\n if (this.config.referenceTracking || !indiffable) {\r\n safeOldValue = oldValue?.[RAW] || oldValue;\r\n safeValue = value?.[RAW] || value;\r\n unchanged = this.config.equalityFunction!(safeValue, safeOldValue);\r\n }\r\n if (!indiffable && unchanged && !CTX.usingForce && keyStr !== \"length\") return this.log(`🔄 [\\`set\\` Trap] Unchanged for \"${keyStr}\" on [${paths}]`), true; // Arrays silently update length before firing set trap, can't risk UI going blind\r\n if (this.config.set) terminated = (value = this.config.set(object as PathBranchValue<T>, key as PathKey<T>, value, oldValue, receiver, paths)) === TERMINATOR;\r\n if (this.setters) {\r\n const wildcords = this.setters.get(\"*\");\r\n for (let i = 0; i < loopLen; i++) {\r\n const currPath = (this.config.lineageTracing ? paths[i] : fullPath) as Paths<T>,\r\n cords = this.setters.get(currPath);\r\n if (!cords && !wildcords) continue;\r\n const target: Target<T> = { path: currPath, value, oldValue, key: keyStr as PathKey<T>, hadKey, object: receiver },\r\n payload = { type: \"set\", target, currentTarget: target, root: this.core, reactor: this, terminated, rejectable, ...CTX.meta } as Payload<T, Paths<T>>;\r\n if (cords) {\r\n const result = this.mediate(currPath, payload, \"set\", cords);\r\n if (!(terminated ||= payload.terminated!)) value = result;\r\n }\r\n if (!wildcords) continue;\r\n target.value = value;\r\n const result = this.mediate(\"*\", payload, \"set\", wildcords);\r\n if (!(terminated ||= payload.terminated!)) value = result;\r\n } // Mediators\r\n }\r\n if (terminated) return this.log(`🛡️ [\\`set\\` Trap] Terminated for \"${keyStr}\" on [${paths}]`), true; // soft rejection if terminated\r\n const success = !this.config.preserveContext ? (((object as any)[key] = value), true) : Reflect.set(object, key, value, receiver);\r\n if (!success) return this.log(`❌ [\\`set\\` Trap] Failed for \"${keyStr}\" on [${paths}]`), false; // hard rejection if failed\r\n if (this.config.referenceTracking && !unchanged) this.config.smartCloning && this.stamp(object), (this.unlink(safeOldValue, object, keyStr), this.link(safeValue, object, keyStr));\r\n if (this.watchers || this.listeners)\r\n for (let i = 0; i < loopLen; i++) {\r\n const currPath = (this.config.lineageTracing ? paths[i] : fullPath) as Paths<T>,\r\n target: Target<T> = { path: currPath, value, oldValue, key: keyStr as PathKey<T>, hadKey, object: receiver };\r\n this.notify(currPath, { type: \"set\", target, currentTarget: target, root: this.core, reactor: this, terminated, rejectable, ...CTX.meta } as Payload<T, Paths<T>>);\r\n } // Listeners\r\n return true;\r\n },\r\n deleteProperty: (object, key) => {\r\n let value: any,\r\n receiver = this.proxyCache.get(object),\r\n terminated = false;\r\n const keyStr = String(key),\r\n fullPath = (path ? path + \".\" + keyStr : keyStr) as Paths<T>,\r\n paths = this.config.lineageTracing ? this.trace(object, keyStr) : fullPath,\r\n loopLen = this.config.lineageTracing ? paths.length : 1,\r\n oldValue = !this.config.preserveContext ? (object as any)[key] : Reflect.get(object, key, receiver),\r\n hadKey = !this.config.preserveContext ? key in object : Reflect.has(object, key);\r\n this.log(`🗑️ [\\`deleteProperty\\` Trap] Initiated for \"${keyStr}\" on [${paths}]`), CTX.autotracker?.track(fullPath, this, true);\r\n if (this.config.deleteProperty) terminated = (value = this.config.deleteProperty(object as PathBranchValue<T>, key as PathKey<T>, oldValue, receiver, paths)) === TERMINATOR;\r\n if (this.deleters) {\r\n const wildcords = this.deleters.get(\"*\");\r\n for (let i = 0; i < loopLen; i++) {\r\n const currPath = (this.config.lineageTracing ? paths[i] : fullPath) as Paths<T>,\r\n cords = this.deleters.get(currPath);\r\n if (!cords && !wildcords) continue;\r\n const target: Target<T> = { path: currPath, value, oldValue, key: keyStr as PathKey<T>, hadKey, object: receiver },\r\n payload = { type: \"delete\", target, currentTarget: target, root: this.core, reactor: this, rejectable, ...CTX.meta } as Payload<T, Paths<T>>;\r\n if (cords) {\r\n const result = this.mediate(currPath, payload, \"delete\", cords);\r\n if (!(terminated ||= payload.terminated!)) value = result;\r\n }\r\n if (!wildcords) continue;\r\n const result = this.mediate(\"*\", payload, \"delete\", wildcords);\r\n if (!(terminated ||= payload.terminated!)) value = result;\r\n } // Mediators\r\n }\r\n if (terminated) return this.log(`🛡️ [\\`deleteProperty\\` Trap] Terminated for \"${keyStr}\" on [${paths}]`), true; // soft rejection if terminated\r\n const success = !this.config.preserveContext ? delete (object as any)[key] : Reflect.deleteProperty(object, key);\r\n if (!success) return this.log(`❌ [\\`deleteProperty\\` Trap] Failed for \"${keyStr}\" on [${paths}]`), false; // hard rejection if failed\r\n if (this.config.referenceTracking) this.config.smartCloning && this.stamp(object), this.unlink(oldValue?.[RAW] || oldValue, object, keyStr);\r\n if (this.watchers || this.listeners)\r\n for (let i = 0; i < loopLen; i++) {\r\n const currPath = (this.config.lineageTracing ? paths[i] : fullPath) as Paths<T>,\r\n target: Target<T> = { path: currPath, value, oldValue, key: keyStr as PathKey<T>, hadKey, object: receiver };\r\n this.notify(currPath, { type: \"delete\", target, currentTarget: target, root: this.core, reactor: this, rejectable, ...CTX.meta } as Payload<T, Paths<T>>);\r\n } // Listeners\r\n return true;\r\n },\r\n has: (object, key) => {\r\n let has = !this.config.preserveContext ? key in object : Reflect.has(object, key);\r\n const keyStr = String(key),\r\n fullPath = (path ? path + \".\" + keyStr : keyStr) as Paths<T>;\r\n this.log(`❓ [\\`has\\` Trap] Initiated for \"${keyStr}\" on '${fullPath}'`), CTX.autotracker?.track(fullPath, this);\r\n if (this.config.has) has = this.config.has(object as PathBranchValue<T>, key as PathKey<T>, has, this.proxyCache.get(object), fullPath);\r\n return has;\r\n },\r\n getOwnPropertyDescriptor: (object, key) => {\r\n let descriptor = !this.config.preserveContext ? Object.getOwnPropertyDescriptor(object, key) : Reflect.getOwnPropertyDescriptor(object, key);\r\n const keyStr = String(key),\r\n fullPath = (path ? path + \".\" + keyStr : keyStr) as Paths<T>;\r\n this.log(`📋 [\\`getOwnPropertyDescriptor\\` Trap] Initiated for \"${keyStr}\" on '${fullPath}'`), CTX.autotracker?.track(fullPath, this);\r\n if (this.config.getOwnPropertyDescriptor) descriptor = this.config.getOwnPropertyDescriptor(object as PathBranchValue<T>, key as PathKey<T>, descriptor, this.proxyCache.get(object), this.config.lineageTracing ? this.trace(object, keyStr) : fullPath);\r\n return descriptor;\r\n },\r\n ownKeys: (object) => {\r\n let ownKeys = Reflect.ownKeys(object); // no faster accurate way without Reflect API\r\n const safePath = (path || \"*\") as Paths<T>;\r\n this.log(`🔑 [\\`ownKeys\\` Trap] Initiated on \"${safePath}\"`), CTX.autotracker?.track(safePath, this);\r\n if (this.config.ownKeys) ownKeys = this.config.ownKeys(object as PathBranchValue<T>, ownKeys, this.proxyCache.get(object), safePath);\r\n return ownKeys;\r\n },\r\n });\r\n return this.proxyCache.set(target, proxy), proxy;\r\n }\r\n\r\n public trace(target: object, path: string, paths: string[] = [], seen = new WeakSet<object>()): Paths<T>[] {\r\n if (Object.is(target, (this.core as any)[RAW] || this.core)) return paths.push(path), paths as Paths<T>[];\r\n if (seen.has(target)) return paths as Paths<T>[]; // Stop infinite loops\r\n seen.add(target);\r\n const es = (this.lineage ??= new WeakMap()).get(target);\r\n if (!es) return paths as Paths<T>[];\r\n for (let i = 0, len = es.length; i < len; i += 2) {\r\n const prev = es[i + 1];\r\n this.trace(es[i] as object, prev ? prev + \".\" + path : path, paths, seen);\r\n }\r\n return paths as Paths<T>[];\r\n } // won't be called without `.config.referenceTracking` so internal guard avoided\r\n protected link(target: any, parent: object, key: string, typecheck = true, es?: (object | string)[]): boolean {\r\n if (!canHandle(target, this.config, typecheck)) return false;\r\n es = (this.lineage ??= new WeakMap()).get(target) ?? (this.lineage!.set(target, (es = [])), es);\r\n for (let i = 0, len = es.length; i < len; i += 2) if (Object.is(es[i], parent) && es[i + 1] === key) return true;\r\n return es.push(parent, key), true; // es used as a param: needed storage perk\r\n }\r\n protected unlink(target: any, parent: object, key: string): void {\r\n if (!canHandle(target, this.config)) return;\r\n const es = (this.lineage ??= new WeakMap()).get(target);\r\n if (es) for (let i = 0, len = es.length; i < len; i += 2) if (Object.is(es[i], parent) && es[i + 1] === key) return void es.splice(i, 2);\r\n }\r\n protected stamp(target: any, typecheck = true, seen = new WeakSet<object>()): void {\r\n if (typecheck && \"object\" !== typeof target) return;\r\n target = target[RAW] || target; // escape hatch from traps\r\n if (seen.has(target)) return; // Stop infinite loops\r\n seen.add(target);\r\n target[VERSION] = (target[VERSION] || 0) + 1;\r\n const es = (this.lineage ??= new WeakMap()).get(target);\r\n if (es) for (let i = 0, len = es.length; i < len; i += 2) this.stamp(es[i], false, seen); // walk up the tree; stamp parents\r\n }\r\n\r\n public mediate<P extends WildPaths<T>>(path: WildPaths<T>, payload: Payload<T, P>, type: \"get\", cords: GetterRecord<T>[]): PathValue<T, P>;\r\n public mediate<P extends WildPaths<T>>(path: WildPaths<T>, payload: Payload<T, P>, type: \"set\", cords: SetterRecord<T>[]): PathValue<T, P>;\r\n public mediate<P extends WildPaths<T>>(path: WildPaths<T>, payload: Payload<T, P>, type: \"delete\", cords: DeleterRecord<T>[]): PathValue<T, P>;\r\n public mediate<P extends WildPaths<T>>(path: WildPaths<T>, payload: Payload<T, P>, type: \"get\" | \"set\" | \"delete\", cords: Array<GetterRecord<T> | SetterRecord<T> | DeleterRecord<T>>) {\r\n let terminated = false,\r\n value = payload.target.value,\r\n killed = false; // mediator called when necessary & ready for the argument work, all facts (params) are brought to the table so no `?.`\r\n const isGet = type === \"get\",\r\n isSet = type === \"set\",\r\n mediators = isGet ? this.getters : isSet ? this.setters : this.deleters,\r\n scords = cords.slice();\r\n for (let slen = scords.length, i = !isGet ? 0 : slen - 1, len = !isGet ? slen : -1; i !== len; i += !isGet ? 1 : -1) {\r\n const cord = scords[i];\r\n if ((cord as any)._dead) continue;\r\n const response: any = isGet ? (cord as GetterRecord<T>).cb(value, payload as Payload<T>) : isSet ? (cord as SetterRecord<T>).cb(value, terminated, payload as Payload<T>) : (cord as DeleterRecord<T>).cb(terminated, payload as Payload<T>); // all will mediate\r\n if (isGet || !(terminated ||= payload.terminated = response === TERMINATOR)) value = response as PathValue<T, P>;\r\n if (cord.once) killed = (cord as any)._dead = true;\r\n }\r\n if (killed) for (let i = cords.length - 1; i >= 0; i--) if ((cords[i] as any)._dead) cords.splice(i, 1), !cords.length && mediators!.delete(path);\r\n return value; // set - FIFO, get - LIFO\r\n }\r\n\r\n public notify<P extends Paths<T>>(path: P, payload: Payload<T, P>): void {\r\n if (this.watchers) {\r\n const wildcords = this.watchers.get(\"*\") as Array<WatcherRecord<T, \"*\">> | undefined,\r\n wildscords = wildcords?.slice(),\r\n cords = this.watchers.get(path) as Array<WatcherRecord<T, P>> | undefined,\r\n scords = cords?.slice();\r\n if (cords) {\r\n let killed = false;\r\n for (let i = 0, len = scords!.length; i < len; i++) {\r\n const cord = scords![i];\r\n if ((cord as any)._dead) continue;\r\n cord.cb(payload.target.value as PathValue<T, P>, payload); // watchers do not terminate as they're after the OP\r\n if (cord.once) killed = (cord as any)._dead = true;\r\n }\r\n if (killed) for (let i = cords!.length - 1; i >= 0; i--) if ((cords![i] as any)._dead) cords!.splice(i, 1), !cords!.length && this.watchers!.delete(path);\r\n }\r\n if (wildcords) {\r\n let killed = false;\r\n for (let i = 0, len = wildscords!.length; i < len; i++) {\r\n const wildcord = wildscords![i];\r\n if ((wildcord as any)._dead) continue;\r\n wildcord.cb(payload.target.value, payload as Payload<T, \"*\">);\r\n if (wildcord.once) killed = (wildcord as any)._dead = true;\r\n }\r\n if (killed) for (let i = wildcords!.length - 1; i >= 0; i--) if ((wildcords![i] as any)._dead) wildcords!.splice(i, 1), !wildcords!.length && this.watchers!.delete(\"*\");\r\n }\r\n }\r\n this.listeners && this.schedule(path, payload); // batch is undefined till listeners are available\r\n }\r\n protected schedule<P extends Paths<T>>(path: P, payload: Payload<T, P>): void {\r\n this.batch ??= new Map();\r\n this.batch.set(path, payload as Payload<T>), !this.isBatching && this.initBatching();\r\n }\r\n protected initBatching(): void {\r\n (this.isBatching = true), this.config.batchingFunction!(() => this.flush()); // do the `!isBatching` check outisde so the func cost is only on first batch\r\n }\r\n protected flush(): void {\r\n (this.isBatching = false), this.batch && this.tick(this.batch.keys()); // not slowing dis down with a `?.size` since it's like always filled, rather pay the empty iterator cost once when empty\r\n if (this.queue?.size) for (const task of this.queue) task(), this.queue.delete(task); // you can still stall with an empty batch, slower `?.`, almost always empty; this or empty Iterator cost\r\n }\r\n\r\n public wave<P extends Paths<T>>(path: P, payload: Payload<T, P>): void {\r\n const e = new ReactorEvent<T>(payload as Payload<T>) as REvent<T>, // a wave is started forly when really necessary all things considered\r\n chain = getTrailRecords(this.core, path); // either build a large array of refs to climb back up or have to derive each step\r\n // 1: CAPTURE phase (core -> parent) - intent owners reject here, capture should preferably be used to reject\r\n if (e.captures) {\r\n e.eventPhase = ReactorEvent.CAPTURING_PHASE;\r\n for (let i = 0; i <= chain.length - 2; i++) {\r\n if (e.propagationStopped) break;\r\n this.fire(chain[i], e, true);\r\n }\r\n if (e.propagationStopped) return;\r\n }\r\n // 2: TARGET phase (leaf)\r\n e.eventPhase = ReactorEvent.AT_TARGET;\r\n this.fire(chain[chain.length - 1], e, true); // CAPTURE fires\r\n !e.immediatePropagationStopped && this.fire(chain[chain.length - 1], e, false); // BUBBLE fires\r\n // 3: BUBBLE phase (parent -> core) - listeners always see it, rejection is just a flag for smart optimists\r\n if (e.bubbles) {\r\n e.eventPhase = ReactorEvent.BUBBLING_PHASE;\r\n for (let i = chain.length - 2; i >= 0; i--) {\r\n if (e.propagationStopped) break;\r\n this.fire(chain[i], e, false);\r\n }\r\n // if (e.propagationStopped) return;\r\n }\r\n // if (e.rejected) return; // 4: DEFAULT phase if ever, whole architecture can be reimagined: `State vs Intent` is my view; reactor is still dumb\r\n }\r\n protected fire([path, object, value]: ReturnType<typeof getTrailRecords<T>>[number], e: REvent<T>, isCapture: boolean, cords = this.listeners!.get(path)): void {\r\n if (!cords) return; // not doing `.listeners?.` in param cuz this is called in a loop and internally, listeners are defined before this is touched\r\n e.type = path !== e.target.path ? \"update\" : e.staticType; // `update` for ancestors\r\n e.currentTarget = { path, value, oldValue: e.type !== \"update\" ? e.target.oldValue : undefined, key: (e.type !== \"update\" ? path : path.slice(path.lastIndexOf(\".\") + 1) || \"\") as PathKey<T>, hadKey: e.type !== \"update\" ? e.target.hadKey : true, object: object as PathBranchValue<T> };\r\n let killed = false;\r\n const scords = cords.slice();\r\n for (let i = 0, len = scords.length, tDepth; i < len; i++) {\r\n const cord = scords[i];\r\n if (e.immediatePropagationStopped) break;\r\n if (cord.capture !== isCapture || (cord as any)._dead) continue;\r\n if (cord.depth !== undefined) {\r\n tDepth ??= getDepth(e.target.path); // calc only if ever needed\r\n if (tDepth > cord.lDepth! + cord.depth!) continue;\r\n }\r\n cord.cb(e);\r\n if (cord.once) killed = (cord as any)._dead = true;\r\n }\r\n if (killed) for (let i = cords.length - 1; i >= 0; i--) if ((cords[i] as any)._dead) cords.splice(i, 1), !cords.length && this.listeners!.delete(path);\r\n }\r\n\r\n /**\r\n * Flushes queued listener payloads.\r\n * @param paths Optional path(s) to flush.\r\n * @example\r\n * rtr.tick(); // to flush all paths in batch or pass \"*\" wildcard\r\n * @example\r\n * rtr.tick(\"user.profile.name\");\r\n */\r\n public tick(paths?: WildPaths<T> | Iterable<Paths<T>>): void {\r\n if (!paths || paths === \"*\") return this.flush(); // we are sure listeners are defined before waving since batch depends on them\r\n if (\"string\" === typeof paths) {\r\n const payload = this.batch?.get(paths) as Payload<T, Paths<T>> | undefined;\r\n payload && (this.batch!.delete(paths), this.wave(paths, payload));\r\n } else\r\n for (const path of paths) {\r\n const payload = this.batch!.get(path) as Payload<T, Paths<T>> | undefined; // `!` cuz tick is only called inside the class with iterable paths when batch is defined\r\n payload && (this.batch!.delete(path), this.wave(path, payload));\r\n }\r\n }\r\n /**\r\n * Queues a task to run after the current flush cycle.\r\n * @param task Task callback.\r\n * @example\r\n * const task = () => console.log(\"after flush\");\r\n * rtr.stall(task);\r\n */\r\n public stall(task: () => any): void {\r\n (this.queue ??= new Set()).add(task), !this.isBatching && this.initBatching();\r\n }\r\n /**\r\n * Removes a queued post-flush task.\r\n * @param task Task callback.\r\n * @returns `undefined` when no queue, `false` when queue exist but callback is not found, `true` when removed.\r\n */\r\n public nostall(task: () => any): boolean | undefined {\r\n return this.queue?.delete(task);\r\n }\r\n\r\n public context<P extends WildPaths<T>>(path: P): Target<T, P> {\r\n const last = path.lastIndexOf(\".\"),\r\n key = (path.slice(last + 1) || \"\") as PathKey<T, P>,\r\n object = (last === -1 ? this.core : getPath(this.core, path.slice(0, last) as Paths<T>)) as PathBranchValue<T, P>;\r\n return { path, value: getPath(this.core, path), key, hadKey: !object || key in object, object };\r\n }\r\n protected binded<Cb>(cord: GetterRecord<T> | SetterRecord<T> | DeleterRecord<T> | WatcherRecord<T> | ListenerRecord<T>, sig?: AbortSignal): Cb {\r\n if (sig) sig.aborted ? cord.clup() : sig.addEventListener(\"abort\", cord.clup, { once: true }); // once incase spec changes, memory leaks too\r\n return (cord.sclup = !sig || sig.aborted ? NOOP : () => sig.removeEventListener(\"abort\", cord.clup)), cord.clup as Cb;\r\n }\r\n protected cloned<O>(target: O, raw: boolean, seen = new WeakMap()): O {\r\n if (!target || \"object\" !== typeof target) return target;\r\n const obj = (target as any)[RAW] || target, // escape hatch from traps\r\n cloned = seen.get(obj);\r\n if (cloned) return cloned;\r\n if (!canHandle(obj, this.config, false)) return obj; // no circular references\r\n const version = obj[VERSION] || 0,\r\n cached = !raw && this.config.smartCloning && (this.snapCache ??= new WeakMap()).get(obj);\r\n if (cached && obj[SSVERSION] === version) return cached;\r\n const clone = !raw ? (this.config.preserveContext ? Object.create(Object.getPrototypeOf(obj)) : Array.isArray(obj) ? [] : {}) : obj;\r\n seen.set(obj, clone);\r\n const keys = this.config.preserveContext ? Reflect.ownKeys(obj) : Object.keys(obj);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i];\r\n try {\r\n clone[key] = this.cloned(obj[key], raw, seen);\r\n } catch (e) {\r\n if (e instanceof RangeError) throw e; // internals can skip, not users\r\n } // call a spade a spade and just skip, no descriptor gymanstics\r\n }\r\n if (!raw && this.config.smartCloning) this.snapCache!.set(obj, clone), (obj[SSVERSION] = version);\r\n return clone;\r\n }\r\n\r\n protected onSync<P extends WildPaths<T>>(key: \"get\" | \"set\" | \"delete\" | \"watch\", path: P, cb: any, opts: SyncOptions | undefined, onInit: (type?: \"set\" | \"delete\") => void = NOOP): () => boolean | undefined {\r\n const { once = false, signal, lazy = false, init = false, initType } = parseEvtOpts(opts, EVT_OPTS.MEDIATOR),\r\n store = (this[`${key}${key.endsWith(\"t\") ? \"t\" : \"\"}ers` as \"getters\"] ??= new Map()) as Map<WildPaths<T>, Array<GetterRecord<T> | SetterRecord<T> | DeleterRecord<T> | WatcherRecord<T>>>;\r\n let cords = store.get(path),\r\n cord: GetterRecord<T> | SetterRecord<T> | DeleterRecord<T> | WatcherRecord<T> | undefined;\r\n if (cords)\r\n for (let i = 0, len = cords.length; i < len; i++) {\r\n const excord = cords[i];\r\n if (Object.is(excord.cb, cb)) {\r\n cord = excord;\r\n break;\r\n }\r\n }\r\n if (cord) return cord.clup;\r\n let task: () => void;\r\n cord = { cb, once, clup: () => (lazy && this.nostall(task), this[`no${key}` as \"noget\"](path, cb)) };\r\n task = () => (cords ?? (store.set(path, (cords = [])), cords)).push(cord);\r\n lazy ? this.stall(task) : task(), init && (init !== \"auto\" || hasPath(this.core, path)) && onInit(initType);\r\n return this.binded(cord!, signal);\r\n } // add synchronous\r\n protected offSync<P extends WildPaths<T>>(store: Map<WildPaths<T>, any[]> | undefined, path: P, cb: any): boolean | undefined {\r\n const cords = store?.get(path);\r\n if (!cords) return undefined;\r\n for (let i = 0, len = cords.length; i < len; i++) {\r\n const cord = cords[i];\r\n if (Object.is(cord.cb, cb)) return cord.sclup!(), cords.splice(i, 1), !cords.length && store!.delete(path), ((cord as any)._dead = true);\r\n }\r\n return false;\r\n } // remove synchronous\r\n\r\n /**\r\n * Registers a get mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback.\r\n * @param options Sync options.\r\n * @returns Cleanup function.\r\n * @example\r\n * const cleanup = rtr.get(\"user.name\", (value) => String(value).trim());\r\n */\r\n public get<P extends WildPaths<T>>(path: P, callback: Getter<T, P>, options?: SyncOptions): GetterRecord<T>[\"clup\"] {\r\n return this.onSync(\"get\", path, callback, options, () => getPath(this.core, path));\r\n }\r\n /** Registers a get mediator for a path that only triggers once. */\r\n public gonce<P extends WildPaths<T>>(path: P, callback: Getter<T, P>, options?: SyncOptions): GetterRecord<T>[\"clup\"] {\r\n return this.get<P>(path, callback, { ...parseEvtOpts(options, EVT_OPTS.MEDIATOR), once: true });\r\n }\r\n /**\r\n * Removes a get mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback to remove.\r\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\r\n */\r\n public noget<P extends WildPaths<T>>(path: P, callback: Getter<T, P>): boolean | undefined {\r\n return this.offSync(this.getters, path, callback);\r\n }\r\n\r\n /**\r\n * Registers a set mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback.\r\n * @param options Sync options.\r\n * @returns Cleanup function.\r\n * @example\r\n * rtr.set(\"user.name\", (value) => String(value).trim());\r\n */\r\n public set<P extends WildPaths<T>>(path: P, callback: Setter<T, P>, options?: SyncOptions): SetterRecord<T>[\"clup\"] {\r\n return this.onSync(\"set\", path, callback, options, () => (force(() => setPath(this.core, path, getPath(this.core, path))), this.tick(path)));\r\n }\r\n /** Registers a set mediator for a path that only triggers once. */\r\n public sonce<P extends WildPaths<T>>(path: P, callback: Setter<T, P>, options?: SyncOptions): SetterRecord<T>[\"clup\"] {\r\n return this.set<P>(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.MEDIATOR), { once: true }));\r\n }\r\n /**\r\n * Removes a set mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback to remove.\r\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\r\n */\r\n public noset<P extends WildPaths<T>>(path: P, callback: Setter<T, P>): boolean | undefined {\r\n return this.offSync(this.setters, path, callback);\r\n }\r\n\r\n /**\r\n * Registers a delete mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback.\r\n * @param options Sync options.\r\n * @returns Cleanup function.\r\n * @example\r\n * rtr.delete(\"cache.temp\", () => TERMINATOR);\r\n */\r\n public delete<P extends WildPaths<T>>(path: P, callback: Deleter<T, P>, options?: SyncOptions): DeleterRecord<T>[\"clup\"] {\r\n return this.onSync(\"delete\", path, callback, options, () => deletePath(this.core, path));\r\n }\r\n /** Registers a delete mediator for a path that only triggers once. */\r\n public donce<P extends WildPaths<T>>(path: P, callback: Deleter<T, P>, options?: SyncOptions): DeleterRecord<T>[\"clup\"] {\r\n return this.delete<P>(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.MEDIATOR), { once: true }));\r\n }\r\n /**\r\n * Removes a delete mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback to remove.\r\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\r\n */\r\n public nodelete<P extends WildPaths<T>>(path: P, callback: Deleter<T, P>): boolean | undefined {\r\n return this.offSync(this.deleters, path, callback);\r\n }\r\n\r\n /**\r\n * Registers a watcher for a path.\r\n * Watch callbacks run synchronously with the operation, use leaf paths for reliability as it sees exact sets; no bubbling here.\r\n * @param path Path or wildcard path.\r\n * @param callback Watch callback.\r\n * @param options Sync options.\r\n * @returns Cleanup function.\r\n * @example\r\n * const cleanup = rtr.watch(\"user.name\", (value) => console.log(value));\r\n */\r\n public watch<P extends WildPaths<T>>(path: P, callback: Watcher<T, P>, options?: SyncOptions): WatcherRecord<T>[\"clup\"] {\r\n return this.onSync(\"watch\", path, callback, options, (type) => (!type ? ((target) => callback(target.value, { type: \"init\", target, currentTarget: target, root: this.core, rejectable: false } as Payload<T, P>))(this.context(path)) : (force(() => (type === \"set\" ? setPath(this.core, path, getPath(this.core, path)) : deletePath(this.core, path))), this.tick(path)))); // no tick since sync\r\n }\r\n /** Registers a watcher for a path that only triggers once. */\r\n public wonce<P extends WildPaths<T>>(path: P, callback: Watcher<T, P>, options?: SyncOptions): WatcherRecord<T>[\"clup\"] {\r\n return this.watch<P>(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.MEDIATOR), { once: true }));\r\n }\r\n /**\r\n * Removes a watcher for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Watch callback to remove.\r\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\r\n */\r\n public nowatch<P extends WildPaths<T>>(path: P, callback: Watcher<T, P>): boolean | undefined {\r\n return this.offSync(this.watchers, path, callback);\r\n }\r\n\r\n /**\r\n * Registers an event listener for a path.\r\n * `on` listeners are batched and notified asynchronously by default e.g. `queueMicrotask()`.\r\n * @param path Path or wildcard path.\r\n * @param callback Listener callback.\r\n * @param options Listener options.\r\n * @returns Cleanup function.\r\n * @example\r\n * const cleanup = rtr.on(\"user.name\", (e) => console.log(e.type, e.path));\r\n */\r\n public on<P extends WildPaths<T>, const D extends number = MaxDepth>(path: P, callback: Listener<T, P, D>, options?: ListenerOptions<D>): ListenerRecord<T, P, D>[\"clup\"] {\r\n this.listeners ??= new Map();\r\n const { capture = false, once = false, signal, init = false, initType: type, depth } = parseEvtOpts(options, EVT_OPTS.LISTENER);\r\n let cords = this.listeners.get(path),\r\n cord: ListenerRecord<T> | undefined;\r\n if (cords)\r\n for (let i = 0, len = cords.length; i < len; i++) {\r\n const excord = cords[i];\r\n if (Object.is(excord.cb, callback) && capture === excord.capture) {\r\n cord = excord;\r\n break;\r\n }\r\n }\r\n if (cord) return cord.clup;\r\n cord = { cb: callback as Listener<T>, capture, depth: depth as MaxDepth, once, clup: () => this.off<P, D>(path, callback, options), lDepth: depth !== undefined ? getDepth(path) : depth };\r\n (cords ?? (this.listeners.set(path, (cords = [])), cords)).push(cord!);\r\n init && (init !== \"auto\" || hasPath(this.core, path)) && (!type ? ((target) => callback(new ReactorEvent<T, P>({ type: \"init\", target, currentTarget: target, root: this.core, reactor: this, rejectable: false }) as REvent<T, P, D>))(this.context(path)) : (force(() => (type === \"set\" ? setPath(this.core, path, getPath(this.core, path)) : deletePath(this.core, path))), this.tick(path))); // tick since async\r\n return this.binded(cord!, signal);\r\n }\r\n /** Registers an event listener for a path that only triggers once. */\r\n public once<P extends WildPaths<T>, const D extends number = MaxDepth>(path: P, callback: Listener<T, P, D>, options?: ListenerOptions<D>): ListenerRecord<T, P, D>[\"clup\"] {\r\n return this.on<P, D>(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.LISTENER), { once: true }));\r\n }\r\n /**\r\n * Removes an event listener for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Listener callback to remove.\r\n * @param options Listener options used during registration.\r\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\r\n * @example\r\n * const cb = (e: REvent<T>) => console.log(e.path);\r\n * rtr.on(\"user.name\", cb);\r\n * rtr.off(\"user.name\", cb);\r\n */\r\n public off<P extends WildPaths<T>, const D extends number = MaxDepth>(path: P, callback: Listener<T, P, D>, options?: ListenerOptions<D>): boolean | undefined {\r\n const cords = this.listeners?.get(path);\r\n if (!cords) return undefined;\r\n const { capture = false } = parseEvtOpts(options, EVT_OPTS.LISTENER);\r\n for (let i = 0, len = cords.length; i < len; i++) {\r\n const cord = cords[i];\r\n if (Object.is(cord.cb, callback) && cord.capture === capture) return cord.sclup!(), cords.splice(i, 1), !cords.length && this.listeners!.delete(path), ((cord as any)._dead = true);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Creates a snapshot; possibly clone of state (or a state branch).\r\n * You could alternatively use or serialize your proxied state \"as is\" except the environment demands no proxies or new references.\r\n * @param raw Use raw (deep unproxied & uncloned) version of branch, defaults to `true` if `config.smartCloning: false`.\r\n * @param branch Specific branch to clone.\r\n * @returns Snapshot deep or smart (structurally shared) clone.\r\n * @example\r\n * const snap = rtr.snapshot();\r\n * @example\r\n * const snap = rtr.snapshot(false, rtr.core.history.past);\r\n */\r\n public snapshot(raw?: boolean): T;\r\n public snapshot<B>(raw?: boolean, branch?: B): B;\r\n public snapshot(raw = !this.config.smartCloning, branch?: any) {\r\n return this.cloned(arguments.length < 2 ? this.core : branch, raw); // raw is true if not smart cloning(structural sharing) for better vanilla performace except explicitly changed\r\n }\r\n\r\n /**\r\n * Installs a module instance.\r\n * @param target Module instance.\r\n * @param id Optional identification tag for this instance in the module.\r\n * @returns Current `Reactor` instance for fluent chaining.\r\n */\r\n public use(target: ReactorModule<T>, id?: ReactorModuleId): this {\r\n return (this.modules ??= new Set()).add(target.setup(this, id)), this;\r\n }\r\n /** Resets this reactor instance to its initial state. */\r\n public reset(): void {\r\n this.getters?.clear(), this.setters?.clear(), this.deleters?.clear(), this.watchers?.clear(), this.listeners?.clear();\r\n this.batch?.clear(), this.queue?.clear(), (this.isBatching = false);\r\n }\r\n public destroy(): void {\r\n if (this.modules) for (const mdle of this.modules) mdle.destroy();\r\n this.reset(), nuke(this);\r\n }\r\n\r\n public get canLog(): boolean {\r\n return this.log !== NOOP;\r\n }\r\n public set canLog(value: boolean) {\r\n this.log = value ? RTR_LOG : NOOP;\r\n }\r\n public get canLineageTrace() {\r\n return this.config.lineageTracing && this.config.referenceTracking;\r\n }\r\n public get canSmartClone() {\r\n return this.config.smartCloning && this.config.referenceTracking;\r\n }\r\n}\r\n","import \"./types/global.d.ts\";\r\n\r\nglobalThis.sia ??= {}; // bundler will handle the rest\r\n\r\nexport { CTX, RAW, INERTIA, REJECTABLE, INDIFFABLE, TERMINATOR, VERSION, SSVERSION, RTR_BATCH, RTR_LOG, EVT_OPTS, NIL, NOOP } from \"@core/consts\";\r\n\r\nexport { Reactor } from \"@core/reactor\";\r\n\r\nexport { ReactorEvent } from \"@core/event\";\r\n\r\nexport { methods, reactive, inert, live, isInert, intent, state, isIntent, volatile, stable, isVolatile, getRaw, getVersion, getSnapshotVersion, getReactor } from \"@core/mixins\";\r\n\r\nexport type { Inert, Live, Intent, State, Volatile, Stable, Target, Payload, ReactorMeta, BasePayload, DirectPayload, UpdatePayload, REvent, Getter, Setter, Deleter, Watcher, Listener, GetterRecord, SetterRecord, DeleterRecord, WatcherRecord, ListenerRecord, SyncOptionsTuple, SyncOptions, ListenerOptionsTuple, ListenerOptions, EffectOptions, ReactorBuild } from \"@defs/reactor\";\r\n\r\nexport type { APIKey, Reactive, Pure, ReactivePreferences } from \"@core/mixins\";\r\n\r\nexport type { Primitive, NoTraverse, Paths, WildPaths, ChildPaths, PathKey, StrictPathKey, PathValue, PathBranchValue, Unflatten, PathDepth, PathLeaf, PathBranch, UnionToIntersection, AddDepth, SubtractDepth, DeepKeys, DeepMerge, DeepPartial, DeepRequired, DeepReadonly, DepthConfig, MaxDepth, PrevDepth, NextDepth } from \"@defs/obj\";\r\n","export { arrRegex, isObj, isPOJO, canHandle, setPath, getPath, deletePath, hasPath, parsePathObj, matchPaths, getDepth, parseEvtOpts, type FanoutOptionsTuple, fanout, fanoutOptsArr, force, mergeObjs, getTrailRecords, deepClone, nuke, withMeta, resetMeta, isEmpty, getPaths, isLeafPath, createReactorSync } from \"@utils/obj\";\r\n\r\nexport { clamp } from \"@utils/num\";\r\n\r\nexport { setTimeout, setInterval, requestAnimationFrame } from \"@utils/fn\";\r\n\r\nexport { onAllMethods, bindAllMethods, guardAllMethods, guardMethod } from \"@utils/methd\";\r\n\r\nexport { type KeysSettings, type KeyStruct, KEYS_BLOCKS, KEYS_MODS, KEYS_CMODS, KEYS_ALIAS, parseKeyCombo, stringifyKeyEvent, cleanKeyCombo, matchKeys, getTermsForKey, keyEventAllowed, formatKeyTooltip, formatKeyShortcutsTooltip, parseForARIAKS } from \"@utils/keys\";\r\n\r\nexport { createEl, assignEl, getActiveEl } from \"@utils/dom\";\r\n","// Validators\n\nexport function clamp(min = 0, val: number, max = Infinity) {\n return Math.min(Math.max(val, min), max);\n}","// ============ Timer Helpers ============\n\n// 3rd & 4th param are consumed if signal and window are used respectively\n/**\n * setTimeout wrapper with optional AbortSignal and Window overrides.\n * @param handler Timeout callback or handler string.\n * @param timeout Delay in milliseconds.\n * @param args Optional args, where first may be AbortSignal and second may be Window to be consumed for enhancements.\n * @returns Timer id, or -1 when signal is already aborted.\n */\nexport function setTimeout(handler: TimerHandler, timeout?: number, ...args: any[]) {\n const sig = args[0] instanceof AbortSignal ? args.shift() : undefined;\n if (sig?.aborted) return -1;\n const win: Window = args[0] instanceof Window ? args.shift() : window;\n if (!sig) return win.setTimeout(handler, timeout, ...args);\n const id = win.setTimeout(() => (sig.removeEventListener(\"abort\", kill), \"string\" === typeof handler ? new Function(handler) : handler(...args)), timeout),\n kill = () => win.clearTimeout(id);\n return sig.addEventListener(\"abort\", kill, { once: true }), id;\n}\n\n/**\n * setInterval wrapper with optional AbortSignal and Window overrides.\n * @param handler Interval callback or handler string.\n * @param timeout Interval delay in milliseconds.\n * @param args Optional args, where first may be AbortSignal and second may be Window to be consumed for enhancements.\n * @returns Interval id, or -1 when signal is already aborted.\n */\nexport function setInterval(handler: TimerHandler, timeout?: number, ...args: any[]) {\n const sig = args[0] instanceof AbortSignal ? args.shift() : undefined;\n if (sig?.aborted) return -1;\n const win: Window = args[0] instanceof Window ? args.shift() : window,\n id = win.setInterval(handler, timeout, ...args);\n return sig?.addEventListener(\"abort\", () => win.clearInterval(id), { once: true }), id;\n}\n\n/**\n * requestAnimationFrame wrapper with optional AbortSignal and Window overrides.\n * @param callback Frame callback.\n * @param sig Optional AbortSignal to cancel scheduled frame.\n * @param win Optional Window override.\n * @returns Frame request id, or -1 when signal is already aborted.\n */\nexport function requestAnimationFrame(callback: FrameRequestCallback, sig?: AbortSignal, win = window) {\n if (sig?.aborted) return -1;\n if (!sig) return win.requestAnimationFrame(callback);\n const id = win.requestAnimationFrame((t) => (sig.removeEventListener(\"abort\", kill), callback(t))),\n kill = () => win.cancelAnimationFrame(id);\n return sig.addEventListener(\"abort\", kill, { once: true }), id;\n}\n","// \"THE METHODIST\": A mixin method expert often used to manipulate or bind all methods of a class to an instance\n\n/**\n * Walks an instance and its prototype chain, invoking a callback for each callable method.\n * @param owner Instance whose methods are inspected.\n * @param callback Invoked for each method name found.\n * @param skipOwn Skips owner-level methods when traversing own or parent prototypes.\n * @param nested Internal traversal flag, Override to `true` to avoid skipping own methods when `skipOwn` is `true`.\n */\nexport function onAllMethods(owner: any, callback: (method: string, owner: any) => void, skipOwn = true, nested = false): void {\n let proto = owner;\n while (proto && proto !== Object.prototype) {\n for (const method of Object.getOwnPropertyNames(proto)) {\n if (method === \"constructor\") continue;\n if (nested && skipOwn && Object.prototype.hasOwnProperty.call(owner, method)) continue;\n if (\"function\" === typeof Object.getOwnPropertyDescriptor(proto, method)?.value) callback(method, owner);\n }\n (proto = Object.getPrototypeOf(proto)), (nested = true);\n }\n}\n\n/**\n * Binds all discovered methods on an owner to the owner instance.\n * @param owner Instance whose methods should be bound.\n */\nexport function bindAllMethods(owner: any): void {\n onAllMethods(owner, (method: string, owner: any) => {\n owner[method] = owner[method].bind(owner);\n });\n}\n\n/**\n * Wraps all discovered methods in a guard function, optionally binding before wrapping.\n * @param owner Instance whose methods should be wrapped.\n * @param guardFn Wrapper factory used for each method.\n * @param bound Binds methods to owner before wrapping when true.\n */\nexport function guardAllMethods(owner: any, guardFn: (fn: Function) => Function = guardMethod, bound = true): void {\n onAllMethods(owner, (method: string, owner: any) => {\n owner[method] = guardFn(bound ? owner[method].bind(owner) : owner[method]);\n });\n}\n\n/**\n * Wraps a function with try/catch and async rejection handling.\n * @template T Function type to preserve.\n * @param fn Function to wrap.\n * @param onError Error handler for sync throws and async rejections.\n * @returns Guarded function with the same call signature.\n */\nexport function guardMethod<T extends Function>(fn: T, onError: (e: any) => void = (e) => console.error(e)): T {\n return ((...args: any[]) => {\n try {\n const result = fn(...args);\n return result instanceof Promise ? result.catch((e) => onError(e)) : result;\n } catch (e) {\n onError(e);\n }\n }) as unknown as T;\n}\n","// Types\ntype Dataset = Record<string, string | number>;\ntype Style = Partial<CSSStyleDeclaration>;\n\n// Element Factory\n\n/**\n * Creates an HTML element with the specified tag and properties.\n * @param tag The tag name of the element to create.\n * @param props Optional properties to set on the element.\n * @param dataset Optional dataset attributes for the element.\n * @param styles Optional CSS styles for the element.\n * @returns The created HTML element.\n */\nexport function createEl<K extends keyof HTMLElementTagNameMap>(tag: K, props?: Partial<HTMLElementTagNameMap[K]>, dataset?: Dataset, styles?: Style): HTMLElementTagNameMap[K];\nexport function createEl(tag: string, props?: Partial<HTMLElement>, dataset?: Dataset, styles?: Style): HTMLElement | null;\nexport function createEl(tag: string, props?: Record<string, unknown>, dataset?: Dataset, styles?: Style, el = tag ? document?.createElement(tag) : null): HTMLElement | null {\n return assignEl(el, props, dataset, styles);\n}\n\n/**\n * Assigns properties, dataset attributes, and styles to an HTML element.\n * @param el The HTML element to assign properties to.\n * @param props Optional properties to set on the element.\n * @param dataset Optional dataset attributes for the element.\n * @param styles Optional CSS styles for the element.\n * @return The modified HTML element to allow signature swaps with `createEl()`.\n */\nexport function assignEl<El extends HTMLElement>(el?: El | null, props?: Partial<El>, dataset?: Dataset, styles?: Style, nodiff?: boolean): El | null;\nexport function assignEl<El extends HTMLElement>(el?: El | null, props?: Partial<El>, dataset?: Dataset, styles?: Style, nodiff?: boolean): El | null;\nexport function assignEl(el?: HTMLElement | null, props?: Record<string, unknown>, dataset?: Dataset, styles?: Style, nodiff = true): HTMLElement | null {\n if (!el) return null;\n if (props) for (const k of Object.keys(props)) if (props[k] !== undefined) if (nodiff || (el as any)[k] !== props[k]) (el as unknown as Record<string, unknown>)[k] = props[k];\n if (dataset) for (const k of Object.keys(dataset)) if (dataset[k] !== undefined) if (nodiff || (el.dataset as any)[k] !== dataset[k]) (el.dataset as DOMStringMap)[k] = String(dataset[k]);\n if (styles) for (const k of Object.keys(styles)) if (styles[k as keyof Style] !== undefined) if (nodiff || (el.style as any)[k] !== styles[k as any]) (el.style as unknown as Record<string, unknown>)[k] = styles[k as keyof Style];\n return el;\n}\n\n/** Get the currently active element, traversing into shadow roots if necessary.\n * @param root Root node to start searching from, defaults to the main document.\n * @param noBody If `true`, will return `null` if the active element is the body element.\n * @returns The active element or null if none found.\n */\nexport function getActiveEl(root?: Document | ShadowRoot | null, noBody = true): Element | null {\n const activeEl = (root ?? document).activeElement;\n return !activeEl || (noBody && activeEl === document.body) ? null : activeEl.shadowRoot ? getActiveEl(activeEl.shadowRoot) : activeEl;\n}\n","import { getActiveEl } from \"./dom\";\n\n/** Keyboard matching configuration used by utility helpers. */\nexport interface KeysSettings {\n /** Disables key handling when true. */\n disabled?: boolean;\n /** Combos that should call `preventDefault` when matched. */\n overrides?: string[];\n /** Action map from action id to combo or combo list. */\n shortcuts?: Record<string, string | string[]>;\n /** Combos that should be rejected immediately. */\n blocks?: string[];\n /** Enables exact combo matching instead of subset matching. */\n strictMatch?: boolean;\n /** Ranks shortcut matches by exactness before insertion order. Enabled by default. */\n rankedMatch?: boolean;\n /** Combos that are allowed as pass-through key actions. */\n whitelist?: string[];\n}\n\n/** Canonical key-combo structure used by parser and serializer helpers. */\nexport type KeyStruct = Record<\"ctrlKey\" | \"shiftKey\" | \"altKey\" | \"metaKey\", boolean> & { key: string };\n\n/**\n * Global registry of native browser hotkeys and shortcut combinations, pass as `.blocks` in `Settings` config for `keyEventAllowed()` for better UX.\n * Used by the system to prevent default browser behaviors (e.g., zooming, tab switching, refreshing, or opening dev tools) inside the listener context.\n */\n// prettier-ignore\nexport const KEYS_BLOCKS = [\"Ctrl+Tab\", \"Ctrl+Shift+Tab\", \"Ctrl+PageUp\", \"Ctrl+PageDown\", \"Cmd+Option+ArrowRight\", \"Cmd+Option+ArrowLeft\", \"Ctrl+1\", \"Ctrl+2\", \"Ctrl+3\", \"Ctrl+4\", \"Ctrl+5\", \"Ctrl+6\", \"Ctrl+7\", \"Ctrl+8\", \"Ctrl+9\", \"Cmd+1\", \"Cmd+2\", \"Cmd+3\", \"Cmd+4\", \"Cmd+5\", \"Cmd+6\", \"Cmd+7\", \"Cmd+8\", \"Cmd+9\", \"Alt+ArrowLeft\", \"Alt+ArrowRight\", \"Cmd+ArrowLeft\", \"Cmd+ArrowRight\", \"Ctrl+r\", \"Ctrl+Shift+r\", \"F5\", \"Shift+F5\", \"Cmd+r\", \"Cmd+Shift+r\", \"Ctrl+h\", \"Ctrl+j\", \"Ctrl+d\", \"Ctrl+f\", \"Cmd+y\", \"Cmd+Option+b\", \"Cmd+d\", \"Cmd+f\", \"Ctrl+Shift+i\", \"Ctrl+Shift+j\", \"Ctrl+Shift+c\", \"Ctrl+u\", \"F12\", \"Cmd+Option+i\", \"Cmd+Option+j\", \"Cmd+Option+c\", \"Cmd+Option+u\", \"Ctrl+=\", \"Ctrl+-\", \"Ctrl+0\", \"Cmd+=\", \"Cmd+-\", \"Cmd+0\", \"Ctrl+p\", \"Ctrl+s\", \"Ctrl+o\", \"Cmd+p\", \"Cmd+s\", \"Cmd+o\"], // JIT eats loops :)\n KEYS_MODS = [\"ctrl\", \"shift\", \"alt\", \"meta\"] as const,\n KEYS_CMODS = [\"ctrl\", \"alt\", \"meta\"] as const,\n KEYS_ALIAS: Record<string, string> = { cmd: \"meta\", space: \" \" };\n\n/**\n * Parses a combo string into modifier flags + terminal key.\n * @param combo Key combo string (for example: `\"ctrl+shift+z\"`).\n * @returns Parsed key structure with boolean modifier flags.\n * @example\n * parseKeyCombo(\"ctrl+shift+z\")\n * // => { ctrlKey: true, shiftKey: true, altKey: false, metaKey: false, key: \"z\" }\n */\nexport function parseKeyCombo(combo: string): KeyStruct {\n const parts = cleanKeyCombo(combo).toLowerCase().split(\"+\");\n return { ctrlKey: parts.includes(\"ctrl\"), shiftKey: parts.includes(\"shift\"), altKey: parts.includes(\"alt\"), metaKey: parts.includes(\"meta\") || parts.includes(\"cmd\"), key: parts.find((p) => !/^(ctrl|shift|alt|meta|cmd)$/.test(p)) || \"\" };\n}\n\n/**\n * Serializes a key structure or keyboard event into canonical combo form.\n * @param e KeyboardEvent-like object or parsed key structure.\n * @returns Canonical combo string (for example: `\"ctrl+shift+z\"`).\n */\nexport function stringifyKeyEvent(e: KeyStruct | KeyboardEvent): string {\n const parts: string[] = [];\n e.ctrlKey && parts.push(\"ctrl\"), e.altKey && parts.push(\"alt\"), e.shiftKey && parts.push(\"shift\"), e.metaKey && parts.push(\"meta\"), parts.push(e.key?.toLowerCase() ?? \"\");\n return parts.join(\"+\");\n}\n\n/**\n * Normalizes combo(s) by:\n * - lowercasing,\n * - aliasing `cmd -> meta`, `space -> \" \"`,\n * - preserving literal space/plus edge cases,\n * - sorting modifiers as `ctrl, alt, shift, meta`.\n * @param combo Raw combo or list of combos.\n * @param mods Optional list of modifier keys to sort and filter by (default: `[\"ctrl\", \"shift\", \"alt\", \"meta\"]`).\n * @returns Canonical combo string or list.\n * @example\n * cleanKeyCombo([\"Shift+Alt+Ctrl+Z\", \"cmd+y\"])\n * // => [\"ctrl+shift+alt+z\", \"meta+y\"]\n */\nexport function cleanKeyCombo(combo: string, mods?: string[]): string;\nexport function cleanKeyCombo(combo: string[], mods?: string[]): string[];\nexport function cleanKeyCombo(combo: string | string[], mods: string[] = KEYS_MODS as any): string | string[] {\n const clean = (combo: string): string => {\n if (combo === \" \" || combo === \"+\") return combo;\n combo = combo.replace(/\\+\\s*\\+$/, \"+plus\");\n const p = combo\n .toLowerCase()\n .split(\"+\")\n .filter((k) => k !== \"\")\n .map((k, _, __, tk = k.trim()) => KEYS_ALIAS[tk] || (tk === \"plus\" ? \"+\" : tk || \" \"));\n return [...p.filter((k) => mods.includes(k)).sort((a, b) => mods.indexOf(a) - mods.indexOf(b)), ...(p.filter((k) => !mods.includes(k)) || \"\")].join(\"+\");\n };\n return Array.isArray(combo) ? combo.map(clean) : clean(combo);\n}\n\n/**\n * Determines if actual combo satisfies required combo rule(s).\n * Non-strict mode performs subset matching (required keys must all be present).\n * Strict mode requires exact canonical equality.\n * @param required Required combo or combo list.\n * @param actual Actual combo string.\n * @param strict Whether to require exact match.\n * @param clean Whether to clean the actual combo.\n * @returns `true` when match succeeds.\n */\nexport function matchKeys(required: string | string[], actual: string, strict = false, clean = true): boolean {\n if (clean) actual = cleanKeyCombo(actual);\n const match = (req: string, actual: string): boolean => {\n req = cleanKeyCombo(req);\n if (strict) return req === actual;\n const reqs = req.split(\"+\"),\n reals = actual.split(\"+\");\n for (const mod of KEYS_CMODS) if (reals.includes(mod) && !reqs.includes(mod)) return false; // no unrequested heavy mods\n return reqs.every((k) => reals.includes(k));\n };\n return Array.isArray(required) ? required.some((req) => match(req, actual)) : match(required, actual);\n}\n\n/**\n * Resolves key-combo terms against settings:\n * - override, block, whitelist, and matched action id.\n * @param combo Canonical combo string.\n * @param settings Matching settings.\n * @returns Match resolution record.\n */\nexport function getTermsForKey(combo: string, settings: KeysSettings): { override: boolean; block: boolean; whitelisted: boolean; action: string | null } {\n const terms = { override: false, block: false, whitelisted: false, action: null as string | null },\n { overrides = [], shortcuts = {}, blocks = [], strictMatch: stm = false, rankedMatch: ram = true, whitelist = [] } = settings || {};\n combo = cleanKeyCombo(combo);\n if (matchKeys(overrides, combo, stm, false)) terms.override = true;\n if (matchKeys(blocks, combo, stm, false)) terms.block = true;\n if (matchKeys(whitelist, combo, false)) terms.whitelisted = true;\n if (!ram) return (terms.action = Object.keys(shortcuts).find((id) => shortcuts[id] && matchKeys(shortcuts[id], combo, stm, false)) || null), terms;\n // prettier-ignore\n let bestA: string | null = null, bestE = false, bestL = 0;\n for (const id of Object.keys(shortcuts))\n for (const c of Array.isArray(shortcuts[id]) ? shortcuts[id] : [shortcuts[id]]) {\n // prettier-ignore\n const req = c && cleanKeyCombo(c), isE = req === combo, len = req ? req.split(\"+\").length : 0;\n if (c && matchKeys(req, combo, stm, false) && (!bestA || (isE && !bestE) || (isE === bestE && len > bestL))) (bestA = id), (bestE = isE), (bestL = len);\n }\n return (terms.action = bestA), terms;\n}\n\n/**\n * Evaluates whether a keyboard event is allowed and maps it to an action id.\n * Behavior order:\n * 1. hard gate checks (`disabled`, focused editable, button-space/enter),\n * 2. blocked combos,\n * 3. override combos (`preventDefault`),\n * 4. shortcut action match,\n * 5. whitelist pass-through.\n * @param e Browser keyboard event.\n * @param settings Matching settings.\n * @returns Action id, pass-through key, or `false` when denied.\n */\nexport function keyEventAllowed<const S extends KeysSettings>(e: KeyboardEvent, settings: S): false | (S[\"shortcuts\"] extends object ? keyof S[\"shortcuts\"] : never) | (S[\"whitelist\"] extends readonly string[] ? (string[] extends S[\"whitelist\"] ? never : S[\"whitelist\"][number]) : never) {\n if (settings.disabled) return false;\n const activeEl = getActiveEl((e.target as Node)?.ownerDocument); // shadow DOM proof\n if ((e.key === \" \" || e.key === \"Enter\") && activeEl?.matches(\"button,input[type='button'],input[type='submit']\")) return false;\n if (e.currentTarget !== activeEl && activeEl?.matches(\"input,textarea,[contenteditable],[role]\") && !(e.key === \"Escape\" && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey)) return false;\n const combo = stringifyKeyEvent(e),\n { override, block, action, whitelisted } = getTermsForKey(combo, settings);\n if (block) return false;\n if (override) e.preventDefault();\n if (action) return action as any;\n if (whitelisted) return e.key.toLowerCase() as any;\n return false;\n}\n\n/**\n * Formats one or many combos for human-readable UI labels, prepends \" \" for fluid appending.\n * @param combo Combo or combo list.\n * @param keyFn Function to format each combo.\n * @returns Display label (for example: `\" (ctrl+z) or (meta+z)\"`).\n */\nexport const formatKeyTooltip = (combo: string | string[] = \"\", keyFn = (c = \"\") => cleanKeyCombo(c).replace(\" \", \"space\")): string => {\n const combined = combo?.length ? (Array.isArray(combo) ? combo.map(keyFn).join(\" or \") : keyFn(combo)) : \"\";\n return combined ? ` (${combined})` : \"\";\n};\n\n/**\n * Formats an action-shortcuts map for display labels.\n * @param keyShortcuts Action to combo(s) map.\n * @returns Action to display-label map.\n */\nexport function formatKeyShortcutsTooltip(keyShortcuts: Record<string, string | string[]> = {}, formatter = formatKeyTooltip): Record<string, string> {\n const shortcuts: Record<string, string> = {};\n for (const action of Object.keys(keyShortcuts)) shortcuts[action] = formatter(keyShortcuts[action]);\n return shortcuts;\n}\n\n/**\n * Converts combo text into WAI-ARIA `aria-keyshortcuts` format.\n * @param s Combo text or combo list.\n * @param format Whether to format to tooltip first.\n * @returns Normalized aria-keyshortcuts string.\n * @example\n * parseForARIAKS(\" (ctrl+z) or (meta+z)\")\n * // => \"Control+z Meta+z\"\n * @example\n * parseForARIAKS([\"ctrl+z\", \"meta+z\"], false)\n * // => \"Control+z Meta+z\"\n */\nexport function parseForARIAKS(s: string | string[] = \"\", format = true) {\n const m = { ctrl: \"Control\", cmd: \"Meta\", space: \"Space\", plus: \"+\" };\n return (!format && !Array.isArray(s) ? s : formatKeyTooltip(s))\n .toLowerCase()\n .replace(/[()]/g, \"\") // 1. Remove parens\n .replace(/\\bor\\b/g, \" \") // 2. Replace \"or\" with the REQUIRED space\n .replace(/\\w+/g, (k: any) => m[k as keyof typeof m] || k) // 3. Map keys (ctrl -> Control)\n .replace(/\\s+/g, \" \")\n .trim(); // 4. Cleanup extra spaces\n} // W3 ARIA Key Shortcut\n","export { type ReactorModuleId, type ModulePaths, type ReactorModuleConstructor, BaseReactorModule } from \"@modules/base\";\r\n\r\nexport { type PersistConfig, PersistModule, PERSIST_MODULE_BUILD } from \"@modules/persist\";\r\n\r\nexport { type JSONReplacer, type JSONReviver, type StorageAdapterConfig, type MemoryAdapterConfig, type IndexedDBAdapterConfig, type CookieOptions, type CookieAdapterConfig, type StorageAdapterConstructor, type AsyncStorageAdapterConstructor, BaseStorageAdapter, StorageAdapter, AsyncStorageAdapter, LocalStorageAdapter, SessionStorageAdapter, MemoryAdapter, CookieAdapter, IndexedDBAdapter, COOKIE_ADAPTER_BUILD, INDEXED_DB_ADAPTER_BUILD } from \"@modules/persist/storage\";\r\n\r\nexport { type HistoryEntry, type HistoryTransaction, type HistoryNode, type TimeTravelConfig, type TimeTravelState, TimeTravelModule, TIME_TRAVEL_MODULE_BUILD } from \"@modules/timeTravel\";\r\n\r\nexport { type Transaction, txId, startTx, endTx, transaction } from \"@modules/timeTravel/transaction\";\r\n\r\nexport { silence } from \"@src/ts/modules/timeTravel/silence\";\r\n\r\nexport { composeHeuristics } from \"@modules/timeTravel/heuristics\";\r\n\r\nexport { type TextBundlerOptions, createTextBundler, setValueWithCursor } from \"@modules/timeTravel/heuristics/text\";\r\n\r\nexport { createTxPathMerger } from \"@modules/timeTravel/heuristics/path\";\r\n","import type { Reactor } from \"@core/reactor\";\r\nimport { getReactor, type Reactive, reactive } from \"@core/mixins\";\r\nimport { isObj, matchPaths, getPath, setPath, nuke } from \"@utils/obj\";\r\nimport { guardMethod, guardAllMethods } from \"@utils/methd\";\r\nimport { ReactorModulePathConfig, ReactorModuleConstructor, ReactorModuleId, ModulePaths } from \"./types\";\r\n\r\n/**\r\n * Base class, extend to create custom reactor modules that can be used with a `Reactor` instance\r\n * Provides common functionalities like multi-reactor management, configuration handling, and error logging.\r\n * @typeParam T Root state object type of the reactors this module will manage.\r\n * @typeParam Config Configuration object type for the module.\r\n * @typeParam State Optional local state object type for the module.\r\n */\r\nexport abstract class BaseReactorModule<T extends object = any, Config extends Partial<ReactorModulePathConfig<T>> = any, State = any> {\r\n public static readonly moduleName: string;\r\n public get name() {\r\n return (this.constructor as ReactorModuleConstructor).moduleName;\r\n }\r\n protected readonly ac = new AbortController();\r\n protected readonly signal = this.ac.signal;\r\n public readonly deps = new Map<ReactorModuleId, Reactor<any>>();\r\n public readonly rids = new WeakMap<Reactor<any>, ReactorModuleId>(); // for quick 0(1) lookups over iteration\r\n public readonly evtOpts = { signal: this.signal };\r\n /** The reactive state object for the module, watch to see exposed lifecycle changes. */\r\n public readonly state!: State extends object ? Reactive<State> : State;\r\n /** The reactive configuration object for the module, manipulate to change behaviour. */\r\n public config!: Config extends object ? Reactive<Config> : Config;\r\n public wired = false;\r\n private readonly clups = new Map<ReactorModuleId, (() => void)[]>();\r\n\r\n constructor(config?: Config, rtr?: Reactor<T>, state?: State) {\r\n guardAllMethods(this, this.guard); // Modules can sacrifice memory footprint for error proofing and events devx\r\n this.config = (isObj(config) ? reactive(config) : config) as BaseReactorModule[\"config\"];\r\n this.state = (isObj(state) ? reactive(state) : state) as BaseReactorModule[\"state\"];\r\n rtr && this.attach(rtr); // User don't have to pass rtr at instantion except config options need type inference from `T`\r\n }\r\n\r\n /**\r\n * Connect to a `Reactor` instance, allows managing multiple reactors if needed.\r\n * @param target `Reactor` instance or `reactive()` object to connect to.\r\n * @param id Optional custom id for the reactor, prefer over default implicit index id when managing multiple reactors, supports paths to merge into a single tree.\r\n * @returns Current `ReactorModule` instance for fluent chaining.\r\n * @example\r\n * const mod = new MyModule().attach(state1).attach(state2); // implicit index-based ids by default, add a .setup() or `Reactor.use()` when ready for init.\r\n * @example\r\n * const persist = new PersistModule(config).attach(sessState, \"session\").attach(adminState, \"session.admin\"); // don't use \"*\", causes de-serialization issues.\r\n */\r\n public attach(target?: Reactor<any> | Reactive<any>, id: ReactorModuleId = this.deps.size) {\r\n const rtr = getReactor(target);\r\n if (!rtr || this.deps.has(id)) return this;\r\n return this.rids.set((this.deps.set(id, rtr), rtr), id), this.onAttach(rtr, id), this;\r\n }\r\n protected onAttach(_rtr: Reactor<any>, _rid?: ReactorModuleId): void {}\r\n protected attachPaths(rtr: Reactor<any>, rid: ReactorModuleId, paths = this.getPaths(rid)) {\r\n let clups = this.clups.get(rid);\r\n if (!clups) this.clups.set(rid, (clups = []));\r\n for (let i = 0, len = paths.length; i < len; i++) {\r\n const path = paths[i];\r\n !this.config.disabled ? clups.push(this.config.synchronous ? rtr.watch(path, this.handlePathSync, { signal: this.signal }) : rtr.on(path, this.handlePath, this.evtOpts)) : this.config.synchronous ? rtr.nowatch(path, this.handlePathSync) : rtr.off(path, this.handlePath, this.evtOpts);\r\n }\r\n }\r\n\r\n /**\r\n * Entry point called to initialize module wiring, calls `.attach(target, id)` first, `Reactor.use()` calls this internally.\r\n * Should run as last in `.attach()` chain or after all desired reactors if using multiple; so wiring is done safely after.\r\n * @param target `Reactor` instance or `reactive()` object to connect to.\r\n * @param id Optional id for the reactor, prefer over default implicit index id when managing multiple reactors.\r\n * @returns Current `ReactorModule` instance for fluent chaining.\r\n * @example\r\n * const mod = new MyModule().attach(state1).setup(state2); // if using multiple, this should run last; with same params as `.attach()` for a shorter chain\r\n */\r\n public setup(target?: Reactor<any> | Reactive<any>, id?: ReactorModuleId): this {\r\n return this.attach(target, id), !this.wired && (this.wire(), (this.wired = true)), this;\r\n }\r\n /** set up listeners/subscriptions and module runtime wiring. */\r\n public abstract wire(): void;\r\n\r\n public destroy(): void {\r\n if (this.ac) this.ac.abort(), this.onDestroy?.(), nuke(this); // only one rtr can kill; nuke is notorious\r\n }\r\n protected onDestroy?(): void;\r\n\r\n /**\r\n * Wraps a function with module-scoped error logging, every instance methods is already auto-wrapped with this.\r\n * Use this when creating functions dynamically (for example, before attaching an anonymous listener on the fly).\r\n * @example\r\n * window.addEventListener(\"resize\", this.guard(() => this.syncLayout(true)), { signal: this.signal });\r\n */\r\n protected guard = <Fn extends Function>(fn: Fn) => {\r\n return guardMethod(fn, (e) => this.deps.values().next().value?.log(`[Reactor \"${this.name}\" Module] Error: ${e}`)); // treated as seperate log identities\r\n }; // `()=>{}`: needs to be bounded even before initialization\r\n\r\n protected handleWhitelist({ currentTarget: { value: paths } }: any): void {\r\n for (const [rid, rtr] of this.deps) this.cleanup(rid), this.attachPaths(rtr, rid, this.getPaths(rid, paths));\r\n } // child wires when ready\r\n private handlePath(e: any, rid = this.rids.get(e.reactor)!): void {\r\n (!this.config.blacklist || !matchPaths(this.getPaths(rid, this.config.blacklist, true), e.path)) && this.onPath(e, rid);\r\n }\r\n private handlePathSync = (_: any, p: any) => this.handlePath(p);\r\n protected onPath(_e: any, _rid: ReactorModuleId): void {}\r\n\r\n protected handleSynchronous() {\r\n for (const [rid, rtr] of this.deps) this.cleanup(rid), this.attachPaths(rtr, rid);\r\n } // child wires when ready\r\n\r\n private cleanup(rid: ReactorModuleId): void {\r\n const clups = this.clups.get(rid);\r\n if (clups) for (let i = 0, len = clups.length; i < len; i++) clups[i]();\r\n clups && (clups.length = 0);\r\n }\r\n\r\n /**\r\n * Path resolution utility for modules, provides automatic reactor id resolution for multi-reactor setups.\r\n * @param target Reactor or reactor id to resolve paths for when using per-reactor path lists`.\r\n * @param paths Paths to filter by, supports same formats as `ModulePaths`, will be resolved with the module's reactor id if applicable.\r\n * @returns Resolved paths array, defaults to `[\"*\"]` if no paths are found using search criteria.\r\n */\r\n public getPaths<P extends string = string>(target?: Reactor<any> | ReactorModuleId, paths = this.config.whitelist as ModulePaths<P>, allowEmpty = paths !== this.config.whitelist): P[] {\r\n const rid = (target as any)?.core ? this.rids.get(target as Reactor<any>) : target;\r\n return ((paths && (Array.isArray(paths) ? paths : paths[String(rid)])) ?? (!allowEmpty ? wpArr : [])) as P[];\r\n }\r\n\r\n /**\r\n * Compute the serialized payload for all attached reactors.\r\n * If multiple reactors are attached, returns a merged object keyed by reactor id. Honors `whitelist`, `snapshot` and `mirrorWrites` configuration on each reactor.\r\n * @param target Optional target reactor or id to compute payload for, useful when using per-reactor path lists.\r\n * @returns The payload to persist (or `undefined` for empty single-reactor payload).\r\n */\r\n public getPayload(target?: Reactor<any> | ReactorModuleId, _rid?: ReactorModuleId, _nest = target ? false : this.deps.size > 1): any {\r\n const _rtr = (target as any)?.core ? (target as Reactor<any>) : this.deps.get(target as ReactorModuleId)!;\r\n let res: Record<string, any> | undefined = _nest ? {} : undefined;\r\n for (const [rid, rtr] of !target ? this.deps : [[_rid || target, _rtr] as const]) {\r\n const snap = this.config.snapshot ? (this.config.snapshot === true && (rtr.config.referenceTracking = rtr.config.smartCloning = true), rtr.snapshot()) : rtr.core,\r\n val: any = this.config.whitelist ? {} : snap;\r\n if (this.config.whitelist) {\r\n const paths = this.getPaths(rid);\r\n for (let i = 0, len = paths.length; i < len; i++) {\r\n const _path = paths[i],\r\n path = (!this.config.mirrorReads || !_path.includes(\"intent\") ? _path : _path.replace(\"intent\", \"state\")) as any;\r\n setPath(val, _path, getPath(snap, path));\r\n }\r\n }\r\n _nest ? setPath(res!, rid as any, val) : (res = val); // allows merging with path-like ids\r\n }\r\n return res;\r\n }\r\n}\r\n\r\nexport const wpArr = [\"*\"] as any;\r\nexport type * from \"./types\";\r\n","import { StorageAdapterConfig } from \"./types\";\n\n/**\n * Abstract base class for storage adapters, defines the interface and common functionality.\n * @typeParam Config Configuration object type for the adapter.\n */\nexport abstract class BaseStorageAdapter<Config extends StorageAdapterConfig = StorageAdapterConfig> {\n public readonly name: string = \"BaseStorageAdapter\";\n public config: Config;\n protected warn = (act = \"\", mssg = \"Support issue or Private Mode\", key = \"\", store = \"\") => this.config.debug && console.warn(`[${this.constructor.name} \\`${act}\\`] Failed${key ? ` for ${key}` : \"\"}${store ? ` on \"${store}\"` : \"\"}${(this.config as any).dbName ? ` at ${(this.config as any).dbName}` : \"\"} (${mssg})`);\n constructor(config?: Partial<Config>) {\n this.config = { debug: false, ...config } as Config;\n }\n}\n\n/**\n * Abstract base class for storage adapters, defines the interface and common functionality.\n * Extend this class to implement specific synchronous storage mechanisms (e.g., LocalStorage).\n * @typeParam Config Configuration object type for the adapter.\n */\nexport abstract class StorageAdapter<S = any, Config extends StorageAdapterConfig = StorageAdapterConfig> extends BaseStorageAdapter<Config> {\n public readonly name: string = \"StorageAdapter\";\n public abstract get<T = S>(key: string): T | undefined;\n public abstract set<T = S>(key: string, value: T): boolean;\n public abstract remove(key: string): boolean;\n public abstract clear(): boolean;\n}\n\n/**\n * Abstract base class for asynchronous storage adapters, defines the interface and common functionality.\n * Extend this class to implement specific asynchronous storage mechanisms (e.g., IndexedDB).\n * @typeParam Config Configuration object type for the adapter.\n */\nexport abstract class AsyncStorageAdapter<S = any, Config extends StorageAdapterConfig = StorageAdapterConfig> extends BaseStorageAdapter<Config> {\n public readonly name: string = \"AsyncStorageAdapter\";\n public abstract get<T = S>(key: string): Promise<T | undefined>;\n public abstract set<T = S>(key: string, value: T): Promise<boolean>;\n public abstract remove(key: string): Promise<boolean>;\n public abstract clear(): Promise<boolean>;\n}\n\nexport type * from \"./types\";\n","import { StorageAdapterConfig, StorageAdapter } from \"./base\";\n\n/**\n * - The LocalStorage Adapter (~5MB per origin, browser-dependent).\n * - Provides an implementation of the `StorageAdapter` interface using the browser's `localStorage`.\n * Handles JSON serialization and deserialization, and includes error handling for unsupported environments.\n */\nexport class LocalStorageAdapter<S = any, Config extends StorageAdapterConfig = StorageAdapterConfig> extends StorageAdapter<S, Config> {\n public readonly name: string = \"LocalStorage\";\n /**\n * Reads and parses a value from localStorage.\n * @param key Storage key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n public override get<T = S>(key = this.config.key, reviver = this.config.reviver): T | undefined {\n try {\n const v = localStorage.getItem(key);\n return v ? JSON.parse(v, reviver) : undefined;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return undefined;\n }\n }\n /**\n * Serializes and writes a value to localStorage.\n * @param key Storage key.\n * @param value Value to serialize.\n * @returns `true` when write succeeds, else `false`.\n */\n public override set<T = S>(key = this.config.key, value: T, replacer = this.config.replacer) {\n try {\n return localStorage.setItem(key, JSON.stringify(value, replacer as any)), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"setItem\", undefined, key), false;\n }\n }\n /**\n * Removes a single key from localStorage.\n * @param key Storage key.\n * @returns `true` when removal succeeds, else `false`.\n */\n public override remove(key = this.config.key) {\n try {\n return localStorage.removeItem(key), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"removeItem\", undefined, key), false;\n }\n }\n /**\n * Clears all localStorage entries for the current origin.\n * @returns `true` when clear succeeds, else `false`.\n */\n public override clear() {\n try {\n return localStorage.clear(), true; // Warning: This wipes the ENTIRE domain's LocalStorage\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\", undefined), false;\n }\n }\n}","import { StorageAdapterConfig, StorageAdapter } from \"./base\";\n\n/**\n * - The SessionStorage Adapter (~5MB per origin per tab, browser-dependent).\n * - Provides an implementation of the `StorageAdapter` interface using the browser's `sessionStorage`.\n * Handles JSON serialization and deserialization, and includes error handling for unsupported environments.\n */\nexport class SessionStorageAdapter<S = any, Config extends StorageAdapterConfig = StorageAdapterConfig> extends StorageAdapter<S, Config> {\n public readonly name: string = \"SessionStorage\";\n /**\n * Reads and parses a value from sessionStorage.\n * @param key Storage key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n public override get<T = S>(key = this.config.key, reviver = this.config.reviver): T | undefined {\n try {\n const v = sessionStorage.getItem(key);\n return v ? JSON.parse(v, reviver) : undefined;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return undefined;\n }\n }\n /**\n * Serializes and writes a value to sessionStorage.\n * @param key Storage key.\n * @param value Value to serialize.\n * @returns `true` when write succeeds, else `false`.\n */\n public override set<T = S>(key = this.config.key, value: T, replacer = this.config.replacer) {\n try {\n return sessionStorage.setItem(key, JSON.stringify(value, replacer as any)), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"setItem\", undefined, key), false;\n }\n }\n /**\n * Removes a single key from sessionStorage.\n * @param key Storage key.\n * @returns `true` when removal succeeds, else `false`.\n */\n public override remove(key = this.config.key) {\n try {\n return sessionStorage.removeItem(key), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"removeItem\", undefined, key), false;\n }\n }\n /**\n * Clears all sessionStorage entries for the current tab session.\n * @returns `true` when clear succeeds, else `false`.\n */\n public override clear() {\n try {\n return sessionStorage.clear(), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\", undefined), false;\n }\n }\n}","import { StorageAdapter } from \"../base\";\nimport { MemoryAdapterConfig } from \"./types\";\n\n/**\n * - The Memory Storage Adapter (RAM-bound; no fixed browser quota).\n * - Provides an implementation of the `StorageAdapter` interface using an in-memory `Map`.\n * Useful for testing or non-persistent storage needs, mimics the API and behavior of LocalStorage.\n */\nexport class MemoryAdapter<S = any, Config extends MemoryAdapterConfig = MemoryAdapterConfig> extends StorageAdapter<S, Config> {\n public readonly name: string = \"Memory\";\n constructor(build?: Partial<Config>) {\n super({ store: new Map(), ...build } as Config);\n }\n /**\n * Reads and parses a value from memory storage.\n * @param key Storage key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n public override get<T = S>(key = this.config.key, reviver = this.config.reviver): T | undefined {\n try {\n const v = this.config.store.get(key);\n return v ? JSON.parse(v, reviver) : undefined;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return undefined;\n }\n }\n /**\n * Serializes and writes a value to memory storage.\n * @param key Storage key.\n * @param value Value to serialize.\n * @returns `true` when write succeeds, else `false`.\n */\n public override set<T = S>(key = this.config.key, value: T, replacer = this.config.replacer) {\n try {\n return this.config.store.set(key, JSON.stringify(value, replacer as any)), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"set\", undefined, key), false;\n }\n }\n /**\n * Removes a single key from memory storage.\n * @param key Storage key.\n * @returns `true` when removal succeeds, else `false`.\n */\n public override remove(key = this.config.key) {\n try {\n return this.config.store.delete(key), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"remove\", undefined, key), false;\n }\n }\n /**\n * Clears all entries from memory storage.\n * @returns `true` when clear succeeds, else `false`.\n */\n public override clear() {\n try {\n return this.config.store.clear(), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\", undefined), false;\n }\n }\n}\n\nexport type * from \"./types\";\n","import { CookieAdapterConfig } from \".\";\n\nexport const COOKIE_ADAPTER_BUILD: Partial<CookieAdapterConfig> = {\n path: \"/\",\n sameSite: \"Lax\",\n domain: undefined,\n debug: false,\n};\n","import { NIL } from \"@core/consts\";\nimport { StorageAdapter } from \"../base\";\nimport { CookieAdapterConfig, CookieOptions } from \"./types\";\nimport { COOKIE_ADAPTER_BUILD } from \"./build\";\n\n/**\n * - The Cookie Storage Adapter (~4KB per cookie; practical total payload budget often ~30KB).\n * - Provides an implementation of the `StorageAdapter` interface using `document.cookie`.\n * Handles JSON serialization/deserialization and URL-safe key/value encoding.\n */\nexport class CookieAdapter<S = any, Config extends CookieAdapterConfig = CookieAdapterConfig> extends StorageAdapter<S, Config> {\n public readonly name: string = \"Cookie\";\n protected deets = (opts: Partial<CookieOptions> = NIL, _d = opts.domain ?? this.config.domain, _m = opts.maxAge ?? this.config.maxAge, _e = opts.expires ?? this.config.expires) => `Path=${opts.path ?? this.config.path}; SameSite=${opts.sameSite ?? this.config.sameSite}${_d ? `; Domain=${_d}` : \"\"}${opts.secure ?? this.config.secure ? \"; Secure\" : \"\"}${_m !== undefined ? `; Max-Age=${_m}` : \"\"}${_e !== undefined ? `; Expires=${_e instanceof Date ? _e.toUTCString() : _e}` : \"\"}`;\n constructor(build?: Partial<Config>) {\n super({ secure: \"undefined\" !== typeof window && location.protocol === \"https:\", ...COOKIE_ADAPTER_BUILD, ...build } as Config);\n }\n /**\n * Reads and parses a cookie visible to the current page scope.\n * @param key Cookie key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n public override get<T = S>(key = this.config.key, reviver = this.config.reviver): T | undefined {\n try {\n const k = encodeURIComponent(key) + \"=\";\n for (const pair of document.cookie ? document.cookie.split(\"; \") : []) {\n if (!pair.startsWith(k)) continue;\n return JSON.parse(decodeURIComponent(pair.slice(k.length)), reviver);\n }\n return undefined;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return undefined;\n }\n }\n /**\n * Writes a cookie with optional per-call scope/lifetime overrides.\n * @param key Cookie key.\n * @param value Value to serialize.\n * @param opts Optional per-call cookie options.\n * @returns `true` when write succeeds, else `false`.\n */\n public override set<T = S>(key = this.config.key, value: T, opts?: Partial<CookieOptions>, replacer = this.config.replacer) {\n try {\n return (document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(JSON.stringify(value, replacer as any))}; ${this.deets(opts)}`), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"set\", undefined, key), false;\n }\n }\n /**\n * Removes a cookie key using matching scope attributes.\n * @param key Cookie key.\n * @param opts Optional per-call scope overrides.\n * @returns `true` when removal succeeds, else `false`.\n */\n public override remove(key = this.config.key, opts?: Partial<CookieOptions>) {\n try {\n return (document.cookie = `${encodeURIComponent(key)}=; ${this.deets({ ...opts, maxAge: 0, expires: new Date(0) })}`), true; // standard deletion technique\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"remove\", undefined, key), false;\n }\n }\n /**\n * Attempts to remove all visible cookie keys for the given scope.\n * @param opts Optional per-call scope overrides.\n * @returns `true` when clear succeeds, else `false`.\n */\n public override clear(opts?: Partial<CookieOptions>) {\n try {\n for (const pair of document.cookie ? document.cookie.split(\"; \") : []) {\n const idx = pair.indexOf(\"=\");\n document.cookie = `${idx === -1 ? pair : pair.slice(0, idx)}=; ${this.deets({ ...opts, maxAge: 0, expires: new Date(0) })}`; // standard deletion technique\n }\n return true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\"), false;\n }\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n","import { IndexedDBAdapterConfig } from \"./types\";\nimport { NOOP } from \"@core/consts\";\n\nexport const INDEXED_DB_ADAPTER_BUILD: Partial<IndexedDBAdapterConfig> = {\n dbName: \"REACTOR_IDB\",\n stores: [\"VAULT\"],\n version: 1,\n onidb: NOOP,\n onupgradeneeded: NOOP,\n onversionchange: NOOP,\n onsuccess: NOOP,\n onerror: NOOP,\n onblocked: NOOP,\n};\n","import { AsyncStorageAdapter } from \"../base\";\nimport { IndexedDBAdapterConfig } from \"./types\";\nimport { INDEXED_DB_ADAPTER_BUILD } from \"./build\";\n\n/**\n * - The IndexedDB Adapter (quota-managed; typically tens of MB to GB).\n * - Provides an implementation of the `AsyncStorageAdapter` interface using the IndexedDB database.\n * Handles database connection management, object store setup, and includes error handling for unsupported environments and common issues, requires snapshots(non-proxies) for persistence.\n * *NOTE*: Doesn't support functions and every other structure that the `structuredClone` algorithm exempts as it is IndexedDB's internal serialization mechanism. Bump `version` if schema changes, e.g, adding a new store.\n */\nexport class IndexedDBAdapter<S = any, Config extends IndexedDBAdapterConfig = IndexedDBAdapterConfig> extends AsyncStorageAdapter<S, Config> {\n public readonly name: string = \"IndexedDB\";\n protected db?: IDBDatabase;\n constructor(build?: Partial<Config>) {\n super({ ...INDEXED_DB_ADAPTER_BUILD, ...build } as Config);\n }\n /**\n * Returns a connected IndexedDB instance, opening it when needed.\n * @returns Connected database handle.\n */\n public async idb(): Promise<IDBDatabase> {\n const idb = this.config.onidb();\n if (idb || this.db) return Promise.resolve(idb || this.db);\n return new Promise((res, rej) => {\n const req = indexedDB.open(this.config.dbName, this.config.version);\n req.onupgradeneeded = (e) => (this.config.onupgradeneeded(req.result, e), this.config.stores.forEach((s) => !req.result.objectStoreNames.contains(s) && req.result.createObjectStore(s)));\n req.onsuccess = (e) => (this.config.onsuccess(req.result, e), (req.result.onversionchange = (e) => (this.config.onversionchange(req.result, e), this.warn(\"update\", \"Updated in another tab\"), req.result.close())), res((this.db = req.result)));\n req.onerror = (e) => (this.config.onerror(req.error, e), this.warn(\"open\", \"Something went wrong\"), rej(req.error));\n req.onblocked = (e) => (this.config.onblocked(e), this.warn(\"open\", \"Close other tabs for updates\"));\n });\n }\n /**\n * Reads a value by key from an object store.\n * @param key Record key.\n * @param store Optional object-store override.\n * @returns Stored value, or `undefined` when missing/unreadable.\n */\n public override async get<T = S>(key = this.config.key, store = this.config.stores[0], options: Partial<IDBTransactionOptions> = this.config): Promise<T | undefined> {\n try {\n const req = (await this.idb()).transaction(store, \"readonly\", options).objectStore(store).get(key);\n return new Promise((res) => (req.onsuccess = () => res(req.result)));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"get\", undefined, store), undefined;\n }\n }\n /**\n * Writes a value by key into an object store.\n * @param key Record key.\n * @param value Value to store.\n * @param store Optional object-store override.\n * @returns `true` when write succeeds, else `false`.\n */\n public override async set<T = S>(key = this.config.key, value: T, store = this.config.stores[0], options: Partial<IDBTransactionOptions> = this.config): Promise<boolean> {\n try {\n const req = (await this.idb()).transaction(store, \"readwrite\", options).objectStore(store).put(value, key);\n return new Promise((res) => (req.onsuccess = () => res(true)));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"put\", undefined, store), false;\n }\n }\n /**\n * Deletes a value by key from an object store.\n * @param key Record key.\n * @param store Optional object-store override.\n * @returns `true` when delete succeeds, else `false`.\n */\n public override async remove(key = this.config.key, store = this.config.stores[0], options: Partial<IDBTransactionOptions> = this.config): Promise<boolean> {\n try {\n const req = (await this.idb()).transaction(store, \"readwrite\", options).objectStore(store).delete(key);\n return new Promise((res) => (req.onsuccess = () => res(true)));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"delete\", undefined, store), false;\n }\n }\n /**\n * Clears one or more object stores.\n * @param stores Store name or list of store names to clear.\n * @returns `true` when all clears succeed, else `false`.\n */\n public override async clear(stores: string | string[] = this.config.stores, options: Partial<IDBTransactionOptions> = this.config): Promise<boolean> {\n let success = true;\n for (const store of Array.isArray(stores) ? stores : [stores])\n try {\n const req = (await this.idb()).transaction(store, \"readwrite\", options).objectStore(store).clear();\n await new Promise((res) => (req.onsuccess = () => res(true)));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n this.warn(\"clear\", undefined, store), (success = false);\n }\n return success;\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n","import { PersistConfig } from \"./types\";\nimport { NOOP } from \"@core/consts\";\n\nexport const PERSIST_MODULE_BUILD: Partial<PersistConfig<any>> = {\n disabled: false,\n key: \"REACTOR_STORE\",\n throttle: 2500,\n snapshot: false,\n mirrorReads: true,\n mirrorWrites: true,\n onSave: NOOP,\n strict: true,\n};\n","import { BaseReactorModule, ReactorModuleId } from \"../base\";\r\nimport { StorageAdapter, LocalStorageAdapter, AsyncStorageAdapter, type StorageAdapterConstructor } from \"./storage\";\r\nimport { fanoutOptsArr, setPath, deletePath, getPath, fanout, mergeObjs, parseEvtOpts, hasPath } from \"@utils/obj\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { Reactor } from \"@core/reactor\";\r\nimport type { REvent } from \"@defs/reactor\";\r\nimport { NOOP } from \"@core/consts\";\r\nimport type { Paths } from \"@defs/obj\";\r\nimport { PersistConfig, PersistState } from \"./types\";\r\nimport { PERSIST_MODULE_BUILD } from \"./build\";\r\n\r\n/**\r\n * - The Storage Manager.\r\n * - Configurable storage adapters for maximum flexibility (localStorage, sessionStorage, IndexedDB, cookies, custom server persisters, etc.)\r\n * Path-based persistence for fine-grained control over what gets persisted across single or multiple reactors, merges into a single serialized state tree.\r\n * With async adapters, listen to `state.hydrated` (preferably `once`) before the `setup` of modules that should ignore hydration waves; hydrates lazy attachments too.\r\n */\r\nexport class PersistModule<T extends object = any, P extends Paths<T> = Paths<T>> extends BaseReactorModule<T, PersistConfig<T, P>, PersistState> {\r\n public static readonly moduleName: string = \"persist\";\r\n public adapter!: StorageAdapter<T> | AsyncStorageAdapter<T>;\r\n protected readonly tickMap = new Map<ReactorModuleId, Array<string>>();\r\n protected cache: any = null;\r\n protected hydrateSeq = 0;\r\n protected persistSeq = 0;\r\n protected saveTimeoutId = 0;\r\n\r\n constructor(config?: Partial<PersistConfig<T, P>>, rtr?: Reactor<T>) {\r\n super(mergeObjs(PERSIST_MODULE_BUILD, config, rtr?.config) as PersistConfig<T, P>, rtr, { hydrated: false });\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n \"undefined\" !== typeof window && window.addEventListener(\"pagehide\", this.onDestroy, { signal: this.signal });\r\n \"undefined\" !== typeof document && document.addEventListener(\"visibilitychange\", () => document.visibilityState === \"hidden\" && this.onDestroy(), { signal: this.signal });\r\n // Config Listeners\r\n this.config.on(\"adapter\", this.handleAdapter, { signal: this.signal, init: true });\r\n this.config.on(\"disabled\", this.handleDisabled, { signal: this.signal, init: true });\r\n this.config.on(\"whitelist\", this.handleWhitelist, { signal: this.signal, init: true });\r\n this.config.on(\"synchronous\", this.handleSynchronous, { signal: this.signal });\r\n }\r\n\r\n protected override onAttach(rtr: Reactor<any>, rid: ReactorModuleId): void {\r\n rtr.config.eventBubbling = true;\r\n this.attachPaths(rtr, rid);\r\n this.state.hydrated && this.cache && this.hydrate(this.deps.size > 1 ? getPath(this.cache, rid as any) : this.cache, rtr, rid);\r\n }\r\n\r\n protected override onPath(): void {\r\n if (this.state.hydrated) this.saveTimeoutId ||= setTimeout(this.persist, this.config.throttle, this.signal);\r\n }\r\n protected async persist(): Promise<void> {\r\n const seq = ++this.persistSeq;\r\n let payload: any = this.getPayload();\r\n if (this.config.beforeSave) {\r\n const res = this.config.beforeSave(payload);\r\n if (res === false) return; // blocking persist\r\n if (res && res !== true) payload = res;\r\n }\r\n this.saveTimeoutId = 0; // onto the next!\r\n if (this.config.onSave === NOOP) return void (await this.adapter.set(this.config.key, payload)); // always lazy, not the `MC`\r\n try {\r\n const bool = await this.adapter.set(this.config.key, payload);\r\n if (seq !== this.persistSeq) return; // you can show your loaders but we will not falter\r\n this.config.onSave(payload, bool ?? true); // base adapter returns bool and doesn't throw but \"We still don't trust you\"\r\n } catch (e) {\r\n this.config.onSave(payload, false, e); // `throwErrors: true` on adapter config or custom bypass?, here's your metadata\r\n }\r\n }\r\n\r\n protected async handleAdapter({ value = LocalStorageAdapter }: REvent<PersistConfig<T, P>, \"adapter\">) {\r\n const seq = ++this.hydrateSeq;\r\n if (this.adapter && value === this.adapter.constructor) return;\r\n this.state.hydrated = false;\r\n this.adapter?.remove(this.config.key); // Cleanup old adapter storage\r\n this.adapter = \"function\" === typeof value ? new (value as StorageAdapterConstructor)({ debug: !!this.deps.values().next().value?.canLog }) : ((value.config.debug = !!this.deps.values().next().value?.canLog), value); // dynamic, instance or not; pass am come :)\r\n try {\r\n let saved = this.adapter.get(this.config.key);\r\n const isAsync = saved instanceof Promise, // accuracy incase overriden methods are async\r\n opts = parseEvtOpts(this.config.fanout ?? isAsync, fanoutOptsArr, \"depth\");\r\n saved = (!isAsync ? saved : await saved) as T;\r\n if (this.config.beforeHydrate && saved) {\r\n const res = this.config.beforeHydrate(saved);\r\n if (res === false) return; // block hydration entirely\r\n if (res && res !== true) saved = res;\r\n }\r\n if (seq !== this.hydrateSeq || !saved) return;\r\n this.cache = this.config.cachePayload ? saved : null;\r\n for (const [rid, rtr] of this.deps) this.hydrate(this.deps.size > 1 ? getPath(saved, rid as any) : saved, rtr, rid, opts, false); // allows retrieving with path-like ids, ticking after full revival for data accuracy\r\n for (const [rid, rtr] of this.deps) rtr.tick(opts.depth || !this.config.whitelist ? \"*\" : this.tickMap.get(rid) || []);\r\n this.tickMap.clear(); // faster than sequential delete\r\n } finally {\r\n if (seq === this.hydrateSeq) this.state.hydrated = true;\r\n }\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<PersistConfig<T, P>, \"disabled\">) {\r\n for (const [rid, rtr] of this.deps) this.attachPaths(rtr, rid);\r\n value && this.adapter?.remove(this.config.key);\r\n }\r\n\r\n protected hydrate(entry: any, rtr: Reactor<any>, rid: ReactorModuleId = this.rids.get(rtr)!, { depth, merge = true, atomic, skipUndef } = parseEvtOpts(this.config.fanout, fanoutOptsArr, \"depth\"), tick = true): void {\r\n if (!entry) return;\r\n const whites = this.getPaths(rid),\r\n blacks = this.getPaths(rid, this.config.blacklist, true),\r\n set = (p: any, curr: any, prev: any) => (depth ? (fanout as any) : setPath)(rtr.core, p, merge ? mergeObjs(curr, prev, rtr.config) : prev, depth ? { depth, atomic, skipUndef, crossRealms: rtr.config.crossRealms } : undefined); // if sync, merge directly, else fanout for granularity\r\n let ticks = this.tickMap.get(rid);\r\n for (let i = 0, len = blacks.length; i < len; i++) deletePath(entry, blacks[i]);\r\n for (let i = 0, len = whites.length; i < len; i++) {\r\n let mirror: string | undefined;\r\n const _path = whites[i],\r\n path = (!this.config.mirrorWrites || !_path.includes(\"state\") || !hasPath(rtr.core, (mirror = _path.replace(\"state\", \"intent\"))) ? _path : mirror) as any,\r\n value = getPath(entry, _path);\r\n value !== undefined && (set(path, getPath(rtr.core, path), value), (ticks || (this.tickMap.set(rid, (ticks = [])), ticks)).push(path));\r\n }\r\n tick && (rtr.tick(depth || !this.config.whitelist ? \"*\" : ticks || []), this.tickMap.delete(rid));\r\n }\r\n\r\n /** Clears persisted payload for this module instance by removing the stored key from the adapter and drops any pending save. */\r\n public clear(): void {\r\n clearTimeout(this.saveTimeoutId);\r\n this.saveTimeoutId = -1; // ignore all writes until next microtask\r\n queueMicrotask(() => (this.saveTimeoutId = 0)); // hack to delay saves till next tick\r\n this.adapter?.remove(this.config.key);\r\n }\r\n /** Clears stored `cache` for this module instance, call after all attachments that use the cached hydration payload. */\r\n public clearCache(): void {\r\n this.cache = null;\r\n }\r\n\r\n protected onDestroy(): void {\r\n this.config.strict && this.state.hydrated && !this.config.disabled && this.adapter?.set(this.config.key, this.getPayload()); // One last save before the lights go out\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { TimeTravelConfig } from \"./types\";\nimport { NOOP } from \"@core/consts\";\n\nexport const TIME_TRAVEL_MODULE_BUILD: Partial<TimeTravelConfig<any>> = {\n limit: 1000000000,\n playbackRate: 1,\n maxPlaybackDelay: 2000,\n mirrorReads: true,\n mirrorWrites: true,\n onApply: NOOP,\n};\n","import { BaseReactorModule, ReactorModuleId } from \"../base\";\r\nimport { Reactor } from \"@core/reactor\";\r\nimport type { Payload, REvent } from \"@defs/reactor\";\r\nimport { setPath, deletePath, fanout, deepClone, getPath, hasPath, force } from \"@utils/obj\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { clamp } from \"@utils/num\";\r\nimport type { Paths } from \"@defs/obj\";\r\nimport { JSONReplacer, JSONReviver } from \"../persist/storage\";\r\nimport { TimeTravelConfig, TimeTravelState, HistoryTransaction, HistoryEntry, HistoryNode } from \"./types\";\r\nimport { TIME_TRAVEL_MODULE_BUILD } from \"./build\";\r\nimport { Transaction } from \"./transaction\";\r\n\r\n/**\r\n * - The Flight Recorder (Black Box).\r\n * - Implements S.I.A. logic to allow playback, teleportation, redos and undos.\r\n * Allows history from single or multiple reactors to be recorded and replayed in a synchronized manner, even if they have different shapes.\r\n * If paired with async persistence, `untrack()` then `track()` this module after hydration where applicable to avoid recording hydration waves.\r\n */\r\nexport class TimeTravelModule<T extends object = any, P extends Paths<T> = Paths<T>> extends BaseReactorModule<T, TimeTravelConfig<T, P>, TimeTravelState<T, P>> {\r\n public static readonly moduleName: string = \"timeTravel\";\r\n public readonly txMap = new WeakMap<Transaction, HistoryTransaction<T, P>>();\r\n public readonly evtOpts = { capture: true, signal: this.signal }; // capture for change immediacy devoid of UI lag\r\n public lastTimestamp = 0;\r\n protected playbackSeq = 0;\r\n protected _tracking?: boolean; // `untrack()` must `track()` in the same session to prevent hydration bugs\r\n\r\n constructor(config?: Partial<TimeTravelConfig<T, P>>, rtr?: Reactor<T>) {\r\n super({ ...TIME_TRAVEL_MODULE_BUILD, ...config } as TimeTravelConfig<T, P>, rtr, { initialState: {}, history: [], tracking: true, currentFrame: 0, paused: true, forward: true } as TimeTravelState<T, P>);\r\n }\r\n\r\n // ===========================================================================\r\n // THE FOUNDATION & WIRETAP (Passive Recording)\r\n // ===========================================================================\r\n public override wire(): void {\r\n // Variables Assignment\r\n this.lastTimestamp = performance.now();\r\n // Config Listeners\r\n this.config.on(\"whitelist\", this.handleWhitelist, { signal: this.signal, init: true });\r\n this.config.on(\"synchronous\", this.handleSynchronous, { signal: this.signal });\r\n // Post Wiring\r\n !this.state.paused && this.automove(this.state.forward); // will only succed with sync persist\r\n }\r\n\r\n protected override onAttach(rtr: Reactor<any>, rid: ReactorModuleId): void {\r\n rtr.config.eventCapturing = rtr.config.referenceTracking = rtr.config.smartCloning = rtr.config.eventTimeStamps = true;\r\n if (!this.state.history.length || !this.state.initialState[rid]) this.state.initialState[rid] = this.getPayload(rtr, rid);\r\n this.attachPaths(rtr, rid);\r\n }\r\n\r\n protected override onPath = this.record;\r\n /** Chronicling the lifecycle of the system, Captures the essence of every mutation wave that bubbles up. */\r\n protected record(e: REvent<any, P> | Payload<any, P>, rid = this.rids.get(e.reactor)!): void {\r\n if (!this.state.paused || !(this._tracking ?? this.state.tracking) || e.silent) return;\r\n if (this.state.currentFrame < this.state.history.length) this.state.history.length = this.state.currentFrame; // we must destroy the \"Alternate Future\" (the redo stack) before recording.\r\n const timestamp = (e as any).timestamp ?? performance.now(); // payloads dont allow timestamps since they're sync, but you asked for it\r\n let en = { path: e.target.path, to: e.reactor.snapshot(false, e.target.value), from: !this.config.mirrorReads || !e.target.path.includes(\"intent\") ? e.reactor.snapshot(false, e.target.oldValue) : getPath(e.reactor.core as any, e.target.path.replace(\"intent\", \"state\")), type: (e as any).staticType ?? e.type, rid, deltat: timestamp - this.lastTimestamp } as HistoryEntry<any, P>;\r\n !e.target.hadKey && (en.hadKey = false);\r\n if (this.config.beforeEntry) {\r\n const res = this.config.beforeEntry(en, this.state.history, e); // the power to edit history as it unfolds, or even block it entirely if you want to be a total control freak about it\r\n if (res === false) return; // blocking entry\r\n if (res && res !== true) en = res;\r\n }\r\n e.tx ? this.resolveTx(e.tx, timestamp, en.deltat).nodes.push(en) : this.state.history.push(en); // hybrid so no more space than necessary\r\n force(() => (this.state.currentFrame = this.state.history.length), !!e.tx); // Lock the playhead to the absolute present, re-trigger if tx\r\n while (this.state.history.length > this.config.limit) this.state.history.shift(), this.state.currentFrame--; // Drop the oldest memories if we exceed the limit, `>` since after entering\r\n this.lastTimestamp = timestamp; // Update the metronome with the timestamp of the latest event\r\n }\r\n /** Resolves and constructs the hierarchical ancestry for nested transactions as they bubble up from the depths. */\r\n protected resolveTx(tx: Transaction, timestamp: number, deltat: number): HistoryTransaction<T, P> {\r\n let px = this.txMap.get(tx); // previous tx\r\n if (px) return (px.end = timestamp), tx.parent && this.resolveTx(tx.parent, timestamp, deltat), px; // this is peak analytical metrics here\r\n this.txMap.set(tx, (px = { id: tx.id, label: tx.label, nodes: [], deltat: 0, start: timestamp, end: timestamp } as HistoryTransaction<T, P>)); // start and end unlike singular mutations\r\n return tx.parent ? this.resolveTx(tx.parent, timestamp, deltat).nodes.push(px) : ((px.deltat = deltat), this.state.history.push(px)), px;\r\n }\r\n\r\n /** Resumes the passive recording of state changes. */\r\n public track(): void {\r\n (this.state.tracking = this._tracking = true), !this.state.paused && this.automove(this.state.forward); // peak init assist :)\r\n }\r\n /**\r\n * Pauses the passive recording of state changes and returns `this`. Useful to call at creation time to avoid recording hydration waves.\r\n * @returns `this`\r\n */\r\n public untrack() {\r\n this.lastTimestamp = performance.now(); // Reset delta-t baseline\r\n return (this.state.tracking = this._tracking = false), this;\r\n }\r\n\r\n /** Clears timeline history and resets the playhead and initial snapshots to current reactor state. */\r\n public clear(): void {\r\n this.pause();\r\n this.state.history.length = this.state.currentFrame = 0;\r\n for (const [rid, rtr] of this.deps) this.state.initialState[rid] = this.getPayload(rtr, rid);\r\n this.lastTimestamp = performance.now();\r\n }\r\n\r\n // ===========================================================================\r\n // THE TIME MACHINE (Manual Controls)\r\n // ===========================================================================\r\n /**\r\n * Instant state reconstruction (teleport) to a given history frame index.\r\n * Applies recorded nodes forward or backward until the playhead reaches `index`.\r\n * @param index Target history frame index to jump to (clamped to bounds).\r\n * @param keepShield If true, keep the paused shield active after applying.\r\n */\r\n public jumpTo(index: number = 0, keepShield = false): void {\r\n this.state.paused = false;\r\n const target = clamp(0, index, this.state.history.length), // Ensure bounds\r\n forward = target > this.state.currentFrame;\r\n // Glide until the playhead locks exactly onto the target\r\n while (this.state.currentFrame !== target) {\r\n const frame = this.state.history[forward ? this.state.currentFrame : this.state.currentFrame - 1]; // Grab the correct frame (Current unapplied frame if going forward, previous applied frame if going backward)\r\n this.applyNode(frame, forward); // 2. Apply the frame's mutations to the reactor(s)\r\n forward ? this.state.currentFrame++ : this.state.currentFrame--; // 3. Move the playhead\r\n this.config.onApply(frame, forward); // here you go, dev!\r\n }\r\n for (const rtr of this.deps.values()) rtr.tick(); // Batch Flush: Flush ALL teleportation ripples before dropping the shield!\r\n if (!keepShield) this.state.paused = true;\r\n }\r\n /** Re-enacting a node that represents a point in time be it a transaction of transactions or a solitary mutation. */\r\n protected applyNode(node: HistoryNode<T, P>, forward = true): void {\r\n if (\"nodes\" in node) for (let len = node.nodes.length, i = forward ? 0 : len - 1; forward ? i < len : i >= 0; forward ? i++ : i--) this.applyNode(node.nodes[i], forward);\r\n else {\r\n let mirror: string | undefined;\r\n const rtr = this.deps.get(node.rid) || this.deps.values().next().value!, // owner of the node index for (single||multi)-reactor management\r\n path = (!this.config.mirrorWrites || !node.path.includes(\"state\") || !hasPath(rtr.core, (mirror = node.path.replace(\"state\", \"intent\"))) ? node.path : mirror) as any;\r\n if (forward) node.type === \"delete\" ? deletePath(rtr.core, path) : setPath(rtr.core, path, deepClone(node.to, rtr.config));\r\n else node.hadKey === false ? deletePath(rtr.core, path) : setPath(rtr.core, path, deepClone(node.from, rtr.config));\r\n }\r\n }\r\n\r\n /**\r\n * Step through time by a number of frames.\r\n * @param stride Number of frames to move the playhead by.\r\n * @param forward Direction: `true` for forward, `false` for backward.\r\n */\r\n public step(stride = 1, forward = true): void {\r\n if (forward ? this.state.currentFrame >= this.state.history.length : this.state.currentFrame <= 0) return; // Already at the edge of the timeline\r\n this.pause(), forward ? this.jumpTo(this.state.currentFrame + stride) : this.jumpTo(this.state.currentFrame - stride);\r\n }\r\n /** Returns `true` if there is history to step back into. */\r\n public get canUndo(): boolean {\r\n return this.state.currentFrame > 0;\r\n }\r\n /**\r\n * Step back in time (undo).\r\n * @param stride Optional `number` of frames to undo.\r\n */\r\n public undo(stride?: unknown): void {\r\n this.step(arguments.length && \"number\" === typeof stride ? stride : 1, false);\r\n }\r\n /** Returns `true` if there is a future to step forward into. */\r\n public get canRedo(): boolean {\r\n return this.state.currentFrame < this.state.history.length;\r\n }\r\n /**\r\n * Step forward in time (redo).\r\n * @param stride Optional `number` of frames to redo.\r\n */\r\n public redo(stride?: unknown): void {\r\n this.step(arguments.length && \"number\" === typeof stride ? stride : 1, true);\r\n }\r\n\r\n // ===========================================================================\r\n // THE VCR (Automated Playback)\r\n // ===========================================================================\r\n /**\r\n * Core automove engine. Replays or rewinds the recorded history honoring recorded time gaps.\r\n * @param forward Direction of playback: `true` to play forward, `false` to rewind.\r\n * @returns Promise<void> Resolves when playback completes or is paused/stopped.\r\n */\r\n public async automove(forward = true): Promise<void> {\r\n const seq = ++this.playbackSeq;\r\n this.state.paused = false;\r\n this.state.forward = forward;\r\n while (seq === this.playbackSeq && !this.state.paused && (forward ? this.state.currentFrame < this.state.history.length : this.state.currentFrame > 0)) {\r\n const dFrame = this.state.history[this.state.currentFrame + (forward ? 0 : -1)], // chronology\r\n delay = Math.min((\"nodes\" in dFrame ? dFrame.end - dFrame.start + dFrame.deltat : dFrame.deltat) / this.config.playbackRate, this.config.maxPlaybackDelay);\r\n if (delay > 0) await new Promise<void>((res) => setTimeout(res, delay, this.signal));\r\n if (!this.state.paused) this.jumpTo(this.state.currentFrame + (forward ? 1 : -1), true);\r\n }\r\n if (seq === this.playbackSeq) this.state.paused = true;\r\n }\r\n /**\r\n * Start chronological re-enactment of the session (play forward).\r\n * @returns Promise<void> Resolves when playback completes.\r\n */\r\n public play(): Promise<void> {\r\n return this.automove(true);\r\n }\r\n /**\r\n * Start reverse chronological re-enactment of the session (rewind).\r\n * @returns Promise<void> Resolves when rewind completes.\r\n */\r\n public rewind(): Promise<void> {\r\n return this.automove(false);\r\n }\r\n\r\n /** Pause any ongoing playback or rewinding. */\r\n public pause(): void {\r\n this.playbackSeq++, (this.state.paused = true);\r\n }\r\n\r\n // ===========================================================================\r\n // TELEMETRY & I/O (Session Import/Export)\r\n // ===========================================================================\r\n /**\r\n * Export the current time-travel session state as a JSON string.\r\n * @param replacer Optional replacer function used by `JSON.stringify`.\r\n * @param space Optional spacing parameter for pretty-printing.\r\n * @returns The serialized session JSON.\r\n */\r\n public export(replacer?: JSONReplacer, space?: string | number): string {\r\n return JSON.stringify(this.state, replacer as any, space);\r\n }\r\n /**\r\n * Import a serialized session JSON and reconstruct internal state and snapshots.\r\n * @param json The serialized session JSON produced by `export()`.\r\n * @param reviver Optional reviver function used by `JSON.parse`.\r\n */\r\n public import(json: string, reviver?: JSONReviver, start = this.state.currentFrame, resume = !this.state.paused, forward = this.state.forward): void {\r\n setPath(this.state, \"*\", JSON.parse(json, reviver) as TimeTravelState<T, P>);\r\n this.lastTimestamp = performance.now();\r\n this.state.paused = false; // Shield import reconstruction from being recorded into history\r\n for (const [rid, rtr] of this.deps) {\r\n const paths = this.getPaths(rid);\r\n for (let i = 0, len = paths.length; i < len; i++) {\r\n const path = paths[i];\r\n fanout(rtr.core, path, getPath(this.state.initialState[rid], path) as any);\r\n }\r\n } // ticking after full revival for data accuracy\r\n for (const [rid, rtr] of this.deps) rtr.tick(this.config.whitelist ? this.getPaths(rid) : \"*\"); // Flush the genesis wave to the UI\r\n (this.state.currentFrame = 0), this.jumpTo(start), resume && this.automove(forward); // Anchor at genesis before reconstructing target frame\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { withMeta } from \"@utils/obj\";\n\n/**\n * Executes `fn` with `silent: true` merged into all current `Reactor` payloads.\n * Use this to perform mutations you don't want recorded by `TimeTravelModule`.\n * @param fn Function to execute with `silent` meta.\n * @param bool Override for ease of use in dynamic usecases, defaults to `true`\n */\nexport function silence<T>(fn: () => T, bool = true): T {\n return withMeta({ silent: bool }, fn);\n}\n\ndeclare module \"@defs/reactor\" {\n interface ReactorMeta {\n /** Flag indicating whether the mutation was silenced and should not be recorded by the `TimeTravelModule`. */\n silent?: boolean;\n }\n}\n","import { NIL } from \"@core/consts\";\nimport type { TextBundlerOptions } from \"./types\";\nimport type { HistoryEntry, HistoryNode } from \"../../types\";\nimport { matchPaths } from \"@src/ts/utils\";\nimport { HeuristicFn } from \"..\";\n\n/**\n * Ultra-optimized intelligent text history bundler.\n *\n * Goals:\n * - Human-feeling undo steps\n * - Prevent keystroke spam\n * - Preserve semantic typing chunks\n * - Handle rapid typing/backspacing naturally\n * - Avoid pathological giant merges\n *\n * This is designed for editors, inputs, terminals, code editors, note apps, IDEs, etc.\n */\nexport function createTextBundler({ throttle = 700, boundaryRegex: rgx = /[\\s.,!?;:\\n()[\\]{}'\"`]/, maxGrowth = 48, bundleInserts = true, bundleDeletes = true, strictMerges = true, whitelist, blacklist, toString }: TextBundlerOptions = NIL): HeuristicFn {\n return (entry: HistoryEntry, history: HistoryNode[]) => {\n if ((whitelist?.length && !matchPaths(whitelist, entry.path)) || (blacklist?.length && matchPaths(blacklist, entry.path))) return entry;\n\n const to = toString ? toString(entry.to, entry) : entry.to,\n from = toString ? toString(entry.from, entry) : entry.from;\n if (\"string\" !== typeof to || \"string\" !== typeof from) return entry; // Only string diffs\n\n const last = history[history.length - 1];\n if (!last) return entry; // Empty history\n if (\"nodes\" in last) return entry; // Don't crack open transactions\n if (last.path !== entry.path) return entry; // Path mismatch\n\n const lastTo = toString ? toString(last.to, last) : last.to,\n lastFrom = toString ? toString(last.from, last) : last.from;\n if (\"string\" !== typeof lastTo || \"string\" !== typeof lastFrom) return entry; // String-only previous\n\n if (entry.deltat > throttle) return entry; // Time window exceeded\n\n const prevDelta = lastTo.length - lastFrom.length,\n nextDelta = to.length - from.length,\n op = nextDelta > 0 ? \"insert\" : nextDelta < 0 ? \"delete\" : from !== to ? \"replace\" : \"unknown\",\n lastOp = prevDelta > 0 ? \"insert\" : prevDelta < 0 ? \"delete\" : lastFrom !== lastTo ? \"replace\" : \"unknown\";\n if (strictMerges && op !== lastOp) return entry; // Prevent weird typing/delete hybrids\n if (Math.abs(to.length - lastFrom.length) > maxGrowth) return entry; // Prevent gigantic semantic blobs\n\n // INSERTION or DELETION MERGING\n const isInsert = op === \"insert\";\n if (isInsert || op === \"delete\") {\n const bundleOp = isInsert ? bundleInserts : bundleDeletes,\n lastChar = (isInsert ? lastTo : lastFrom).at(-1);\n if (!bundleOp && lastChar && rgx.test(lastChar)) return entry; // If NOT bundling across boundaries, respect em\n history.pop(); // Merge rapid typing\n return { ...entry, from: last.from, deltat: last.deltat + entry.deltat };\n }\n // REPLACEMENTS\n // Usually selection paste / autocomplete / editor transforms. Keep isolated.\n return entry;\n };\n}\n\n/**\n * Sets the value of a text input/area and attempts to preserve the cursor position as best as possible.\n * @param el The input/textarea element to update.\n * @param value The new `value` to set. @default an empty string.\n * @param selStart The start position of the selection.\n * @param selEnd The end position of the selection.\n * @param selDir The direction of the selection.\n */\nexport function setValueWithCursor(el?: HTMLInputElement | HTMLTextAreaElement | null, value = \"\", selStart = 0, selEnd = 0, selDir: HTMLInputElement[\"selectionDirection\"] = \"none\") {\n if (el) (el.value = value), el.setSelectionRange(Math.min(selStart ?? el.selectionStart, value.length), Math.min(selEnd ?? el.selectionEnd, value.length), selDir! ?? el.selectionDirection);\n}\n\nexport type * from \"./types\";\n","import { CTX } from \"@src/ts/super\";\nimport type { HistoryEntry } from \"../types\";\nimport { HeuristicFn } from \".\";\n\n/**\n * Compresses multiple identical path writes within a transaction into a single payload.\n *\n * Goals:\n * - Reduce redundant entries in transactions where the same path is updated multiple times.\n * - Preserve the chronological order of first-touch for each unique path.\n *\n * This is designed for any scenario where multiple updates to the same path may occur within a single transaction.\n */\nexport function createTxPathMerger(): HeuristicFn {\n const activeTxs = new WeakMap<object, Map<string, HistoryEntry>>();\n\n return (entry: HistoryEntry) => {\n const tx = CTX.meta?.tx;\n if (!tx) return entry;\n\n // 1. Get or create the isolated tracker for this specific transaction depth\n let txMap = activeTxs.get(tx);\n if (!txMap) activeTxs.set(tx, (txMap = new Map()));\n\n // 2. Intercept & Compress\n if (txMap.has(entry.path)) {\n const existing = txMap.get(entry.path)!;\n existing.to = entry.to;\n existing.deltat += entry.deltat;\n return false; // Drop duplicate\n }\n\n // 3. First Touch\n return txMap.set(entry.path, entry), entry;\n };\n}\n","import type { HistoryEntry, HistoryNode } from \"../types\";\n\nimport type { Payload, REvent } from \"@defs/reactor\";\n\nexport type HeuristicFn = (entry: HistoryEntry, history: HistoryNode[], event: REvent<any, any> | Payload<any, any>) => HistoryEntry | boolean;\n\n/** Pipes a history entry through multiple heuristics sequentially. If any heuristic returns `false`, the entry is immediately dropped. */\nexport function composeHeuristics(...heuristics: HeuristicFn[]): HeuristicFn {\n const fns = heuristics.filter(Boolean); // in case you dynamically pass them\n\n return (entry: HistoryEntry, history: HistoryNode[], event: REvent<any, any> | Payload<any, any>) => {\n let current: HistoryEntry | boolean = entry;\n for (let i = 0, len = fns.length; i < len; i++) if ((current = fns[i](current as HistoryEntry, history, event)) === false) return false;\n return current;\n };\n}\n\nexport * from \"./text\";\nexport * from \"./path\";\n","export { effect } from \"./vanilla/effect\";\r\n\r\nexport { Autotracker, withTracker } from \"./autotracker\";\r\n\r\nexport { type TimeTravelConsoleConfig, TimeTravelConsole } from \"./vanilla/TimeTravelConsole\";\r\n","import { CTX, NIL, RAW } from \"@core/consts\";\r\nimport { Reactor } from \"@core/reactor\";\r\nimport type { EffectOptions } from \"@defs/reactor\";\r\nimport type { WildPaths, DeepReadonly } from \"@defs/obj\";\r\nimport { canHandle, nuke } from \"@utils/obj\";\r\n\r\nexport let activeTracker: Autotracker<any> | null = null;\r\n\r\n// ===========================================================================\r\n// The S.I.A (State & Intent Architecture) `AutoTracker`\r\n// ===========================================================================\r\n\r\n/**\r\n * - Auto-dependency tracker used to subscribe only to accessed paths.\r\n * - `tracked(...)` wraps a snapshot in a read-tracking proxy, and `callback(...)`\r\n * binds subscriptions for collected paths using `watch` (sync) or `on` (batched).\r\n * @typeParam T Root state object type.\r\n */\r\nexport class Autotracker<T extends object> {\r\n public proxy!: T;\r\n public deps = new Map<Reactor<any>, Set<string>>();\r\n public isTracking = true;\r\n protected rtr?: Reactor<T>;\r\n /** only allows one reactor to autotrack when available */\r\n protected autortr?: Reactor<T>;\r\n protected clups: Array<() => void> = [];\r\n protected lastPath?: WildPaths<T>;\r\n protected proxyCache = new WeakMap<object, any>();\r\n\r\n /** @param rtr Reactor instance used for path subscriptions. */\r\n constructor(rtr?: Reactor<T>) {\r\n this.autortr = this.rtr = rtr;\r\n }\r\n\r\n /**\r\n * Starts a new tracking pass and returns a readonly tracking proxy for `target` if `this` was instantiated with a `Reactor`.\r\n * @param target Snapshot (or state branch) to track reads from.\r\n * @returns Read-tracking readonly proxy.\r\n * @example\r\n * const atrkr = new Autotracker(rtr);\r\n * const state = atrkr.tracked(rtr.snapshot());\r\n * const name = state.user.profile.name;\r\n */\r\n public tracked(target: T): DeepReadonly<T> {\r\n return this.unblock(), (this.proxy = this.proxied(target, \"\")) as DeepReadonly<T>;\r\n }\r\n protected proxied<O extends object>(obj: O, path: string): O {\r\n if (!this.rtr || !obj || \"object\" !== typeof obj) return obj;\r\n const cached = this.proxyCache.get(obj);\r\n if (cached) return cached;\r\n if (!canHandle(obj, this.rtr!.config, false)) return obj;\r\n const proxy = new Proxy(obj, {\r\n // Minimal Proxy Handler\r\n get: (object, key, receiver) => {\r\n if (key === RAW) return this.rtr!.log(`👀 [AutoTracker \\`get\\` Trap] Peeked at ${object}`), object;\r\n const keyStr = String(key),\r\n fullPath = (path ? `${path}.${keyStr}` : keyStr) as WildPaths<T>;\r\n return this.rtr!.log(`🔍 [AutoTracker \\`get\\` Trap] Initiated for \"${keyStr}\" on '${path}'`), this.track(fullPath), this.proxied(!this.rtr!.config.preserveContext ? (object as any)[key] : Reflect.get(object, key, receiver), fullPath);\r\n },\r\n has: (object, key) => {\r\n const keyStr = String(key),\r\n fullPath = (path ? `${path}.${keyStr}` : keyStr) as WildPaths<T>;\r\n return this.rtr!.log(`❓ [AutoTracker \\`has\\` Trap] Initiated for \"${keyStr}\" on '${path}'`), this.track(fullPath), !this.rtr!.config.preserveContext ? key in object : Reflect.has(object, key);\r\n },\r\n getOwnPropertyDescriptor: (object, key) => {\r\n const keyStr = String(key),\r\n fullPath = (path ? `${path}.${keyStr}` : keyStr) as WildPaths<T>;\r\n return this.rtr!.log(`📋 [AutoTracker \\`getOwnPropertyDescriptor\\` Trap] Initiated for \"${keyStr}\" on '${path}'`), this.track(fullPath), !this.rtr!.config.preserveContext ? Object.getOwnPropertyDescriptor(object, key) : Reflect.getOwnPropertyDescriptor(object, key);\r\n },\r\n ownKeys: (object) => {\r\n const safePath = (path || \"*\") as WildPaths<T>;\r\n return this.rtr!.log(`🔑 [AutoTracker \\`ownKeys\\` Trap] Initiated on \"${safePath}\"`), this.track(safePath), Reflect.ownKeys(object); // no faster accurate way without Reflect API\r\n },\r\n set: (_, key) => {\r\n throw new Error(`🛡️ [AutoTracker \\`set\\` Trap] Blocked for \"${String(key)}\" on '${path}'`); // semantic unlike proxy default error\r\n },\r\n deleteProperty: (_, key) => {\r\n throw new Error(`🛡️ [AutoTracker \\`deleteProperty\\` Trap] Blocked for \"${String(key)}\" on '${path}'`); // semantic unlike proxy default error\r\n },\r\n defineProperty: (_, key) => {\r\n throw new Error(`🛡️ [AutoTracker \\`defineProperty\\` Trap] Blocked for \"${String(key)}\" on '${path}'`); // semantic unlike proxy default error\r\n },\r\n setPrototypeOf: (_, key) => {\r\n throw new Error(`🛡️ [AutoTracker \\`setPrototypeOf\\` Trap] Blocked for \"${String(key)}\" on '${path}'`); // semantic unlike proxy default error\r\n },\r\n });\r\n return this.proxyCache.set(obj, proxy), proxy;\r\n }\r\n\r\n /** Adds a path to the tracking set. */\r\n public track<const P extends WildPaths<T>>(path: P, rtr: Reactor<any> = this.rtr!, prune = false, strict = false): P {\r\n if (!this.isTracking || !path || (this.autortr && this.autortr !== rtr)) return path;\r\n let paths = this.deps.get(rtr);\r\n if (!prune && !paths) paths = (this.deps.set(rtr, (paths = new Set())), paths);\r\n if (path.startsWith(this.lastPath + \".\")) {\r\n const child = path.slice(this.lastPath!.length + 1);\r\n (strict || (!child.includes(\"Symbol(\") && child !== \"length\" && !/^\\d+$/.test(child))) && paths!.delete(this.lastPath!); // #SENSITIVE\r\n }\r\n return !prune && paths!.add((this.lastPath = path)), path;\r\n }\r\n /** Removes a path from the tracking set. */\r\n public untrack(path: WildPaths<T>, rtr: Reactor<any> = this.rtr!): void {\r\n this.deps.get(rtr)?.delete(path);\r\n }\r\n /** Enables path tracking. */\r\n public unblock(rtr: Reactor<any> = this.rtr!): void {\r\n this.deps.clear();\r\n this.autortr = rtr;\r\n this.isTracking = true;\r\n this.lastPath = undefined;\r\n }\r\n /** Temporarily disables path tracking. */\r\n public block(): void {\r\n this.autortr = undefined;\r\n this.isTracking = false;\r\n }\r\n\r\n /**\r\n * Subscribes an effect to tracked paths.\r\n * Uses `watch` when `options.sync === true` (synchronous updates), otherwise\r\n * uses `on` (batched/asynchronous listener wave).\r\n * @param cb Effect callback.\r\n * @param options Effect options.\r\n * @returns Cleanup function for active subscriptions.\r\n * @example\r\n * const atrkr = new Autotracker(rtr);\r\n * const view = atrkr.tracked(rtr.snapshot()); // tracked works if `rtr` was passed at instantiation\r\n * view.user.name;\r\n * const stop = atrkr.callback(() => console.log(\"changed\")); // re-run after when \".user.name\" changes\r\n * @example Packaged Customization\r\n * const atrkr = new Autotracker(); // no reactor passed\r\n * withTracker(atrkr, () => state.user.name); // import `withTracker` too\r\n * const stop = atrkr.callback(() => console.log(\"sync\"), { sync: true }); // re-run immediately when \".user.name\" changes, works on any path used from any reactor state\r\n * @example Extensive Customization\r\n * atrkr.unblock();\r\n * const prev = CTX.autotracker;\r\n * CTX.autotracker = atrkr; // import CTX first\r\n * state.user.name;\r\n * CTX.autotracker = prev;\r\n */\r\n public callback(cb: () => void, options: EffectOptions = NIL): () => void {\r\n this.cleanup();\r\n const method = options.sync ? \"watch\" : \"on\";\r\n for (const [rtr, paths] of this.deps) {\r\n if (!paths.size || paths.has(\"*\")) rtr && this.clups.push(rtr[method as \"on\"](\"*\", cb, options));\r\n else for (const path of paths) this.clups.push(rtr[method as \"on\"](path, cb, options));\r\n }\r\n return () => this.cleanup();\r\n }\r\n\r\n /** Clears active subscriptions and blocks tracking. */\r\n public cleanup(): void {\r\n this.block();\r\n for (let i = 0, len = this.clups.length; i < len; i++) this.clups[i]();\r\n this.clups.length = 0;\r\n }\r\n public destroy(): void {\r\n this.deps.clear(), this.cleanup(), nuke(this);\r\n }\r\n}\r\n\r\n/**\r\n * Utility function to run a callback with a specific tracker context, restoring the previous context afterward.\r\n * @param tracker The Autotracker instance to set as the active tracker during the callback execution.\r\n * @param callback The callback function to execute with the specified tracker context.\r\n * @param rtr Optional Reactor instance to associate with the tracker during execution.\r\n * @returns The result of the callback function.\r\n */\r\nexport function withTracker<T>(tracker: Autotracker<any>, callback: () => T, rtr?: Reactor<any>): T {\r\n const prev = CTX.autotracker; // to survive nested trackers\r\n CTX.autotracker = tracker;\r\n try {\r\n return tracker.unblock(rtr), callback();\r\n } finally {\r\n CTX.autotracker = prev;\r\n }\r\n}\r\n","import { NIL } from \"@core/consts\";\r\nimport type { EffectOptions } from \"@defs/reactor\";\r\nimport { Autotracker, withTracker } from \"../autotracker\";\r\n\r\n/**\r\n * Runs a reactive side effect in vanilla JavaScript.\r\n * The callback executes immediately, tracks accessed state, and re-runs when\r\n * tracked dependencies change.\r\n * @param callback Effect callback.\r\n * @param options Listener options if `sync: false` else Watcher Options.\r\n * @returns Cleanup function that stops tracking and releases resources.\r\n * @example\r\n * const stop = effect(() => console.log(state.count));\r\n */\r\nexport function effect(callback: () => void, options: EffectOptions = NIL): () => void {\r\n const atrkr = new Autotracker();\r\n let destroyed = false;\r\n const cleanup = () => ((destroyed = true), atrkr.destroy());\r\n (function execute() {\r\n if (destroyed) return;\r\n withTracker(atrkr, callback);\r\n options.once ? cleanup() : atrkr.callback(execute, options);\r\n })();\r\n return cleanup;\r\n}\r\n","import { Reactive, reactive } from \"@core/mixins\";\r\nimport { CTX } from \"@core/consts\";\r\nimport { wpArr } from \"@modules/base\";\r\nimport { TimeTravelModule } from \"@modules/timeTravel\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { nuke } from \"@utils/obj\";\r\nimport { formatKeyTooltip as formatKFD, keyEventAllowed, KEYS_BLOCKS, parseForARIAKS } from \"@utils/keys\";\r\nimport { effect } from \"./effect\";\r\n\r\nconst keys = {\r\n blocks: KEYS_BLOCKS,\r\n overrides: [\"Ctrl+z\", \"Cmd+z\", \"Ctrl+y\", \"Cmd+y\", \"Ctrl+Shift+z\", \"Cmd+Shift+z\", \"Home\", \"End\", \"ArrowLeft\", \"ArrowRight\", \"Space\", \"Alt+Space\", \"Escape\", \"Delete\"],\r\n shortcuts: { undo: [\"Ctrl+z\", \"Cmd+z\"], redo: [\"Ctrl+y\", \"Cmd+y\", \"Ctrl+Shift+z\", \"Cmd+Shift+z\"], genesis: \"Home\", trackUntrack: \"t\", ending: \"End\", prevFrame: \",\", nextFrame: \".\", playPause: \"Space\", rewind: \"Alt+Space\", closeOverlay: \"Escape\", clrHistory: \"Delete\", export: \"e\", import: \"i\", clear: \"c\" },\r\n};\r\n\r\n/** Reactive options for the TimeTravel overlay instance. */\r\nexport interface TimeTravelConsoleConfig {\r\n /** Header text shown at the top of the overlay panel. */\r\n title: string;\r\n /** Accent color used to derive panel theme variables. */\r\n color: string;\r\n /** Shows the overlay only in development when true. */\r\n devOnly: boolean;\r\n /** Initial open state applied when the overlay is created. */\r\n startOpen: boolean;\r\n /** Container element that owns the overlay layer and dock. */\r\n container?: HTMLElement;\r\n}\r\n\r\n/**\r\n * - Vanilla overlay controller for visual time-travel controls and timeline I/O.\r\n * - Mounts a docked HUD into the configured container, syncs its UI with module state, and forwards keyboard/button actions to the TimeTravelModule.\r\n * Supports reactive `config` updates (title/color/container/devOnly) and maintains local overlay UI state (`open` and `import` payload text).\r\n */\r\nexport class TimeTravelConsole {\r\n public static count = 0;\r\n public index = TimeTravelConsole.count;\r\n public config: Reactive<TimeTravelConsoleConfig>;\r\n public readonly state = reactive({ open: false, import: \"\", stride: 1 });\r\n public readonly time: TimeTravelModule;\r\n public readonly host: HTMLElement;\r\n private clups: Array<() => void> = [];\r\n private keydown: (e: KeyboardEvent) => void;\r\n private keyup: (e: KeyboardEvent) => void;\r\n\r\n /** Creates a docked TimeTravel overlay bound to a module instance.\r\n * @param time TimeTravel module instance that owns timeline operations.\r\n * @param build Optional initial overlay config overrides.\r\n */\r\n constructor(time: TimeTravelModule, build: Partial<TimeTravelConsoleConfig> = { devOnly: true }) {\r\n this.time = time;\r\n this.config = reactive({ title: `Time Travel Console ${(this.index = ++TimeTravelConsole.count)}`, ...build } as TimeTravelConsoleConfig);\r\n this.state.open = !!this.config.startOpen;\r\n let wlLive = false,\r\n blLive = false;\r\n const s = this.time.state,\r\n host = (this.host = createEl(\"div\", { className: \"sia-tt-console-host\" })),\r\n toggle = createEl(\"button\", { className: \"sia-tt-console-toggle\", type: \"button\", onclick: () => (this.state.open = !this.state.open) }),\r\n panel = createEl(\"aside\", { className: \"sia-tt-console\", ariaLabel: \"time travel overlay\" }),\r\n title = createEl(\"div\", { className: \"title\" }),\r\n frame = createEl(\"span\", { className: \"muted\" }),\r\n clrHistory = createEl(\"button\", { textContent: `Clear History${formatKFD(keys.shortcuts!.clrHistory)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.clrHistory), onclick: () => (this.time.clear(), (this.state.import = \"\")) }),\r\n undo = createEl(\"button\", { textContent: `Undo${formatKFD(keys.shortcuts!.undo[0])}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.undo), onclick: () => this.time.undo(this.state.stride) }),\r\n redo = createEl(\"button\", { textContent: `Redo${formatKFD(keys.shortcuts!.redo[0])}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.redo), onclick: () => this.time.redo(this.state.stride) }),\r\n genesis = createEl(\"button\", { textContent: `Genesis${formatKFD(keys.shortcuts!.genesis)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.genesis), onclick: () => this.time.jumpTo(0) }),\r\n playPause = createEl(\"button\", { onclick: () => this.time[s.paused ? \"play\" : \"pause\"](), ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.playPause) }),\r\n rewind = createEl(\"button\", { textContent: `Rewind${formatKFD(keys.shortcuts!.rewind)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.rewind), onclick: this.time.rewind }),\r\n trackUntrack = createEl(\"button\", { onclick: () => this.time[s.tracking ? \"untrack\" : \"track\"](), ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.trackUntrack) }),\r\n range = createEl(\"input\", { type: \"range\", min: \"0\", title: \"time travel frame\", ariaLabel: \"time travel frame\", oninput: () => this.time.jumpTo(Number(range.value)) }),\r\n exp = createEl(\"button\", { textContent: `Export${formatKFD(keys.shortcuts!.export)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.export), onclick: () => (this.state.import = this.time.export(null, 2)) }),\r\n imp = createEl(\"button\", { textContent: `Import${formatKFD(keys.shortcuts!.import)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.import), onclick: () => this.state.import.trim().length && this.time.import(this.state.import) }),\r\n clr = createEl(\"button\", { textContent: `Clear${formatKFD(keys.shortcuts!.clear)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.clear), onclick: () => (this.state.import = \"\") }),\r\n payload = createEl(\"textarea\", { className: \"sia-tt-io\", readOnly: true, placeholder: \"current payload json\", title: \"Current History Entry\" }),\r\n io = createEl(\"textarea\", { className: \"sia-tt-io\", placeholder: \"timeline payload json\", title: \"Time History\", oninput: () => (this.state.import = io.value) }),\r\n foot = createEl(\"p\", { className: \"sia-tt-footnote\", innerHTML: \"<span>Try this in your app? </span>\" }),\r\n link = createEl(\"a\", { target: \"_blank\", rel: \"noreferrer noopener\", textContent: \"sia-reactor\", href: \"https://www.npmjs.com/package/sia-reactor\" }),\r\n box = createEl(\"div\", { className: \"sia-tt-status-box\" }),\r\n status = createEl(\"div\", { className: \"sia-tt-status-row\" }),\r\n filters = createEl(\"div\", { className: \"sia-tt-status-row\" }),\r\n filterBox = createEl(\"div\", { className: \"sia-tt-status-box\" }),\r\n whitelistLabel = createEl(\"span\", { className: \"muted\", textContent: \"Whitelist:\" }),\r\n blacklistLabel = createEl(\"span\", { className: \"muted\", textContent: \"Blacklist:\" }),\r\n whitelist = createEl(\"input\", { className: \"sia-tt-filter-input sia-tt-io\", placeholder: 'a.b, c.d or {\"0\":[\"a.b\"]}', title: \"Whitelist paths\", onfocus: () => (wlLive = true), onblur: () => ((wlLive = false), (whitelist.value = formatPaths(this.time.config.whitelist, \"*\"))), oninput: (_, parsed: any = parsePaths(whitelist.value)) => parsed !== null && (this.time.config.whitelist = parsed) }),\r\n blacklist = createEl(\"input\", { className: \"sia-tt-filter-input sia-tt-io\", placeholder: 'a.b, c.d or {\"0\":[\"a.b\"]}', title: \"Blacklist paths\", onfocus: () => (blLive = true), onblur: () => ((blLive = false), (blacklist.value = formatPaths(this.time.config.blacklist, \"\"))), oninput: (_, parsed: any = parsePaths(blacklist.value, true)) => parsed !== null && (this.time.config.blacklist = parsed) }),\r\n speed = createEl(\"select\", { className: \"sia-tt-speed\", title: \"Playback Speed\", onchange: () => (this.time.config.playbackRate = Number(speed.value)) }),\r\n stride = createEl(\"input\", { className: \"sia-tt-stride sia-tt-button sia-tt-mini-input\", type: \"number\", min: \"1\", title: \"Skip Stride i.e. how many steps count as one unit\", oninput: () => (this.state.stride = Math.max(1, Number(stride.value) || 1)) }),\r\n stats = createEl(\"span\", { className: \"sia-tt-stats\" }),\r\n limit = createEl(\"input\", { className: \"sia-tt-limit sia-tt-mini-input sia-tt-button\", type: \"number\", min: \"1\", title: \"Maximum number of history entries kept in memory before older entries are discarded.\", oninput: () => (this.time.config.limit = Math.max(1, Number(limit.value) || 1)) }),\r\n delay = createEl(\"input\", { className: \"sia-tt-delay sia-tt-mini-input sia-tt-button\", type: \"number\", min: \"0\", step: \"50\", title: \"Maximum playback delay between timeline frames in milliseconds.\", oninput: () => (this.time.config.maxPlaybackDelay = Math.max(0, Number(delay.value) || 0)) }),\r\n read = createEl(\"label\", { className: \"sia-tt-check\", title: \"When recording intent mutations, read previous values from the matching state path instead of the intent path. Useful for accurate undo reconstruction of intent-driven flows.\" }),\r\n readBox = createEl(\"input\", { type: \"checkbox\", checked: !!this.time.config.mirrorReads, onchange: () => (this.time.config.mirrorReads = readBox.checked) }),\r\n write = createEl(\"label\", { className: \"sia-tt-check\", title: \"During playback and teleportation, mirror state writes into matching intent paths to re-enact the recorded history. Useful for accurate reconstruction of the whole session.\" }),\r\n writeBox = createEl(\"input\", { type: \"checkbox\", checked: !!this.time.config.mirrorWrites, onchange: () => (this.time.config.mirrorWrites = writeBox.checked) }),\r\n filterRow1 = createEl(\"div\", { className: \"sia-tt-filter-row\" }),\r\n filterRow2 = createEl(\"div\", { className: \"sia-tt-filter-row\" }),\r\n row1 = createEl(\"div\", { className: \"sia-tt-row\" }),\r\n row2 = createEl(\"div\", { className: \"sia-tt-row\" }),\r\n row3 = createEl(\"div\", { className: \"sia-tt-row\" }),\r\n row4 = createEl(\"div\", { className: \"sia-tt-row\" }),\r\n row5 = createEl(\"div\", { className: \"sia-tt-row sia-tt-config-row\" });\r\n speed.append(...[0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 4, 8, 16, 32].map((v) => createEl(\"option\", { value: String(v), textContent: `${v}x` })));\r\n status.append((box.append(frame), box), clrHistory);\r\n filters.append((filterBox.append((filterRow1.append(whitelistLabel, whitelist), filterRow1), (filterRow2.append(blacklistLabel, blacklist), filterRow2)), filterBox));\r\n panel.append(title, status, (row1.append(playPause, rewind, genesis), row1), (row2.append(undo, redo, trackUntrack, stride), row2), payload, (row3.append(speed, range), row3), filters, (row4.append(exp, imp, clr), row4), io, (row5.append(delay, limit, (read.append(readBox, \" Read Mirror\"), read), (write.append(writeBox, \" Write Mirror\"), write)), row5), (foot.prepend(stats), foot.append(link), foot));\r\n this.host.append(toggle, panel);\r\n this.keydown = (e, can = this.state.open && (this.config.devOnly ? CTX.isDevEnv : true), a = can && keyEventAllowed(e, keys)) => (a && e.stopImmediatePropagation(), a === \"undo\" ? this.time.undo(this.state.stride) : a === \"redo\" ? this.time.redo(this.state.stride) : a === \"genesis\" ? this.time.jumpTo(0) : a === \"trackUntrack\" ? this.time[s.tracking ? \"untrack\" : \"track\"]() : a === \"ending\" ? this.time.jumpTo(s.history.length) : a === \"prevFrame\" ? this.time.step(this.state.stride, false) : a === \"nextFrame\" ? this.time.step(this.state.stride, true) : a === \"rewind\" ? this.time.rewind() : a === \"playPause\" ? this.time[s.paused ? \"play\" : \"pause\"]() : a === \"clrHistory\" ? this.time.clear() : a === \"closeOverlay\" ? (this.state.open = false) : a === \"export\" ? (this.state.import = this.time.export()) : a === \"import\" ? this.state.import.trim().length && this.time.import(this.state.import) : a === \"clear\" && (this.state.import = \"\"));\r\n this.keyup = (e, can = this.state.open && (this.config.devOnly ? CTX.isDevEnv : true), a = can && keyEventAllowed(e, keys)) => a && e.stopImmediatePropagation();\r\n window.addEventListener(\"keydown\", this.keydown), window.addEventListener(\"keyup\", this.keyup);\r\n const sync = [\r\n effect(() => (this.config.color ? host.style.setProperty(\"--sia-tt-color\", this.config.color) : host.style.removeProperty(\"--sia-tt-color\"))),\r\n effect(() => {\r\n if (this.config.devOnly && !CTX.isDevEnv) return void host.remove();\r\n const dock = getDock(this.config.container);\r\n if (host.parentNode !== dock) dock.appendChild(host);\r\n }),\r\n effect(() => (toggle.textContent = `${(panel.hidden = !this.state.open) ? \"Show\" : \"Hide\"} ${(title.textContent = this.config.title ?? \"\")}`)),\r\n effect(() => (playPause.textContent = `${s.paused ? \"Play\" : \"Pause\"}${formatKFD(keys.shortcuts!.playPause)}`)),\r\n effect(() => (trackUntrack.textContent = `${s.tracking ? \"Untrack\" : \"Track\"}${formatKFD(keys.shortcuts!.trackUntrack)}`)),\r\n effect((sets = 0, txs = 0) => {\r\n range.max = String(s.history.length);\r\n range.disabled = clrHistory.disabled = !s.history.length;\r\n for (let i = 0, len = s.history.length; i < len; i++) {\r\n const frame = s.history[i];\r\n \"nodes\" in frame ? txs++ : frame.type === \"set\" && sets++;\r\n }\r\n stats.textContent = `Sets: ${sets} | Deletes: ${s.history.length - sets - txs} | Txs: ${txs}`;\r\n }),\r\n effect(() => {\r\n frame.textContent = `Frame: ${s.currentFrame} / ${s.history.length}`;\r\n genesis.disabled = undo.disabled = !this.time.canUndo;\r\n rewind.disabled = !s.paused || !s.currentFrame;\r\n playPause.disabled = redo.disabled = !this.time.canRedo;\r\n range.value = String(Math.min(s.currentFrame, s.history.length));\r\n payload.value = JSON.stringify(s.currentFrame ? s.history[s.currentFrame - 1] : { genesis: true, value: s.initialState }, null, 2);\r\n }),\r\n effect(() => {\r\n clr.disabled = imp.disabled = !this.state.import.trim().length;\r\n io.value !== this.state.import && (io.value = this.state.import);\r\n }),\r\n effect((v = String(this.time.config.playbackRate)) => v !== speed.value && (speed.value = v)),\r\n effect((v = String(this.state.stride)) => v !== stride.value && (stride.value = v)),\r\n effect((v = String(this.time.config.limit)) => v !== limit.value && (limit.value = v)),\r\n effect((v = String(this.time.config.maxPlaybackDelay)) => v !== delay.value && (delay.value = v)),\r\n effect((v = !!this.time.config.mirrorReads) => v !== readBox.checked && (readBox.checked = v)),\r\n effect((v = !!this.time.config.mirrorWrites) => v !== writeBox.checked && (writeBox.checked = v)),\r\n effect(() => (!wlLive && (whitelist.value = formatPaths(this.time.config.whitelist, \"*\")), !blLive && (blacklist.value = formatPaths(this.time.config.blacklist, \"\")))),\r\n ];\r\n this.clups.push(...sync);\r\n }\r\n\r\n destroy() {\r\n for (const clup of this.clups) clup();\r\n window.removeEventListener(\"keydown\", this.keydown), window.removeEventListener(\"keyup\", this.keyup);\r\n this.host.remove(), nuke(this), --TimeTravelConsole.count;\r\n }\r\n}\r\n\r\nfunction getDock(container?: HTMLElement) {\r\n const host = container && container !== document.documentElement ? container : document.body;\r\n if (host !== document.body && getComputedStyle(host).position === \"static\") host.style.position = \"relative\";\r\n const layer = host.querySelector(\":scope > .sia-tt-console-layer\") || createEl(\"div\", { className: \"sia-tt-console-layer\" }, undefined, { position: host === document.body ? \"fixed\" : \"absolute\" });\r\n if (layer.parentElement !== host) host.appendChild(layer);\r\n const dock = layer.querySelector(\":scope > .sia-tt-console-dock\") || createEl(\"div\", { className: \"sia-tt-console-dock\" });\r\n return dock.parentElement !== layer && layer.appendChild(dock), dock;\r\n}\r\nfunction formatPaths(paths: unknown, emptyText: string): string {\r\n return !paths ? emptyText : Array.isArray(paths) ? (paths.length ? paths.join(\", \") : emptyText) : \"object\" === typeof paths ? JSON.stringify(paths) : String(paths);\r\n}\r\nfunction parsePaths(raw: string, allowEmpty = false): unknown {\r\n const text = raw.trim();\r\n if (!text) return allowEmpty ? undefined : wpArr;\r\n if (text[0] === \"{\")\r\n try {\r\n const parsed = JSON.parse(text);\r\n if (parsed && \"object\" === typeof parsed) return parsed;\r\n } catch {\r\n return null; // invalid JSON resets to last valid\r\n }\r\n // prettier-ignore\r\n const list = text.split(\",\").map((p) => p.trim()).filter(Boolean);\r\n return list.length ? list : allowEmpty ? undefined : wpArr;\r\n}\r\n"],"mappings":"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","names":["keys","key","state","target","depth","key","target","result","keys","setTimeout","setTimeout","owner","combo","actual","state","e","setTimeout","setTimeout","frame"]}
|
|
1
|
+
{"version":3,"sources":["../src/ts/super.ts","../src/ts/core/consts.ts","../src/ts/core/mixins.ts","../src/ts/modules/timeTravel/transaction.ts","../src/ts/utils/obj.ts","../src/ts/core/event.ts","../src/ts/core/reactor.ts","../src/ts/index.ts","../src/ts/utils.ts","../src/ts/utils/num.ts","../src/ts/utils/fn.ts","../src/ts/utils/methd.ts","../src/ts/utils/dom.ts","../src/ts/utils/keys.ts","../src/ts/modules.ts","../src/ts/modules/base/index.ts","../src/ts/modules/persist/storage/base/index.ts","../src/ts/modules/persist/storage/localStorage.ts","../src/ts/modules/persist/storage/sessionStorage.ts","../src/ts/modules/persist/storage/memory/index.ts","../src/ts/modules/persist/storage/cookie/build.ts","../src/ts/modules/persist/storage/cookie/index.ts","../src/ts/modules/persist/storage/indexedDB/build.ts","../src/ts/modules/persist/storage/indexedDB/index.ts","../src/ts/modules/persist/build.ts","../src/ts/modules/persist/index.ts","../src/ts/modules/timeTravel/build.ts","../src/ts/modules/timeTravel/index.ts","../src/ts/modules/timeTravel/silence.ts","../src/ts/modules/timeTravel/heuristics/text/index.ts","../src/ts/modules/timeTravel/heuristics/path.ts","../src/ts/modules/timeTravel/heuristics/index.ts","../src/ts/adapters/vanilla.ts","../src/ts/adapters/autotracker.ts","../src/ts/adapters/vanilla/effect.ts","../src/ts/adapters/vanilla/TimeTravelConsole.ts"],"sourcesContent":["export * from \"./index\";\n\nexport * as utils from \"./utils\";\n\nexport * as modules from \"./modules\";\n\nimport * as vanilla from \"./adapters/vanilla\";\n// import * as react from \"@adapters/react\";\nconst adapters = { vanilla };\nexport { adapters };\n","import { ReactorBuild, ReactorMeta } from \"@defs/reactor\";\r\nimport { Autotracker } from \"@adapters/autotracker\";\r\n\r\n// ===========================================================================\r\n// The S.I.A (State & Intent Architecture) Constants\r\n// ===========================================================================\r\n\r\n/** Marker to access underlying raw object from a proxy. */\r\nexport const RAW: unique symbol = Symbol.for(\"S.I.A_RAW\"); // \"Get Original Obj\" Marker\r\n/** Marker to opt an object out of reactor proxy handling. */\r\nexport const INERTIA: unique symbol = Symbol.for(\"S.I.A_INERTIA\"); // \"No Proxy\" Marker\r\n/** Marker to mark a branch as intent (rejectable). */\r\nexport const REJECTABLE: unique symbol = Symbol.for(\"S.I.A_REJECTABLE\"); // \"State Vs. Intent\" Marker\r\n/** Marker to enable indifference/non-equality semantics for a branch. */\r\nexport const INDIFFABLE: unique symbol = Symbol.for(\"S.I.A_INDIFFABLE\"); // \"Equality Tracking\" Marker\r\n/** Sentinel return value that terminates a mediated operation. */\r\nexport const TERMINATOR: unique symbol = Symbol.for(\"S.I.A_TERMINATOR\"); // \"Obj Operation Terminator\" Marker\r\n/** Internal mutation version marker. */\r\nexport const VERSION: unique symbol = Symbol.for(\"S.I.A_VERSION\"); // \"Obj Mutation Count\" Marker\r\n/** Internal snapshot version marker used by smart cloning. */\r\nexport const SSVERSION: unique symbol = Symbol.for(\"S.I.A_SNAPSHOT_VERSION\"); // \"Obj Snapshot Version\" Marker\r\n/** Default batching scheduler used by the reactor runtime. */\r\nexport const RTR_BATCH = \"undefined\" !== typeof window ? (\"undefined\" !== typeof queueMicrotask ? queueMicrotask : setTimeout).bind(window) : \"undefined\" !== typeof process && process.nextTick ? process.nextTick : setTimeout;\r\n/** Default reactor logger prefix function. */\r\nexport const RTR_LOG = console.log.bind(console, \"[S.I.A Reactor]\");\r\n/** Canonical option keys parsed for listener and mediator registrations. */\r\nexport const EVT_OPTS = { LISTENER: [\"capture\", \"depth\", \"once\", \"signal\", \"init\"], MEDIATOR: [\"lazy\", \"signal\", \"init\"] } as const;\r\n/** Frozen empty object used as a zero-allocation default options value. */\r\nexport const NIL = Object.freeze({}) as any; // empty obj to escape any optional chain overhead\r\n/** Shared no-operation function. */\r\nexport const NOOP = () => {}; // no operation function to escape optional chain overhead\r\n\r\nlet isDevEnv = false;\r\ntry {\r\n isDevEnv = process.env.NODE_ENV !== \"production\";\r\n} catch (e) {}\r\nconst CTX_BUILD = {\r\n /** Flag indicating whether the application is running in development mode. */\r\n isDevEnv,\r\n /** Flag indicating whether an operation is bypassing checks so reactors can allow all writes. */\r\n usingForce: false,\r\n /** Active `Autotracker` instance, override for automatic dependency collection on `Reactor` traps. */\r\n autotracker: null as Autotracker<any> | null,\r\n /** Extensible meta context for payloads and cross-cutting concerns. */\r\n meta: null as ReactorMeta | null,\r\n /** Default configuration for new `Reactor` instances and also fallback for utils that need and are called without these options. */\r\n defaults: {\r\n crossRealms: false,\r\n smartCloning: false,\r\n eventBubbling: true,\r\n eventCapturing: \"auto\",\r\n lineageTracing: false,\r\n preserveContext: false,\r\n equalityFunction: Object.is,\r\n batchingFunction: RTR_BATCH,\r\n } as Partial<ReactorBuild<any>>,\r\n};\r\n\r\n/** Global context object for sharing state across the reactor runtime. */\r\nexport const CTX: typeof CTX_BUILD = ((globalThis as any)[Symbol.for(\"S.I.A_CTX\")] ??= CTX_BUILD);\r\n","import { RAW, INERTIA, REJECTABLE, INDIFFABLE, VERSION, SSVERSION, NIL } from \"./consts\";\r\nimport { Reactor } from \"./reactor\";\r\nimport type { ReactorBuild, Inert, Intent, Live, State, Volatile, Stable } from \"@defs/reactor\";\r\n\r\n/** `Reactor` method names exposed on objects returned by `reactive()`. */\r\nexport const methods = [\"tick\", \"stall\", \"nostall\", \"get\", \"gonce\", \"noget\", \"set\", \"sonce\", \"noset\", \"delete\", \"donce\", \"nodelete\", \"watch\", \"wonce\", \"nowatch\", \"on\", \"once\", \"off\", \"snapshot\", \"use\", \"reset\", \"destroy\"] as const;\r\n\r\ntype Method = (typeof methods)[number];\r\ntype Prefix<P extends ReactivePreferences | undefined> = P extends { prefix?: infer X extends string } ? X : \"\";\r\ntype Suffix<P extends ReactivePreferences | undefined> = P extends { suffix?: infer X extends string } ? X : \"\";\r\ntype Whitelist<P extends ReactivePreferences | undefined> = P extends { whitelist?: infer W extends readonly Method[] } ? W[number] : never;\r\ntype ReactiveMethodMap<T extends object, P extends ReactivePreferences | undefined> = {\r\n [K in Method as [Prefix<P>, Suffix<P>] extends [\"\", \"\"] ? (P extends { whitelist: readonly Method[] } ? (K extends Whitelist<P> ? never : K) : K) : P extends { whitelist: readonly Method[] } ? (K extends Whitelist<P> ? `${Prefix<P>}${K}${Suffix<P>}` : K) : `${Prefix<P>}${K}${Suffix<P>}`]: Pick<Reactor<T>, Method>[K];\r\n};\r\n\r\n/** Exposed `Reactor` methods and `__Reactor__` of a `reactive()` object. */\r\nexport type APIKey<T extends object = any, P extends ReactivePreferences | undefined = undefined> = keyof ReactiveMethodMap<T, P> | \"__Reactor__\";\r\n/** Type representing a `reactive()` object with mapped `Reactor` methods and `__Reactor__`. */\r\nexport type Reactive<T extends object, P extends ReactivePreferences | undefined = undefined> = T & ReactiveMethodMap<T, P> & { __Reactor__: Reactor<T> };\r\n/** Object type with only the non-reactor props of a `reactive()` object, representing the runtime enumerable shape. */\r\nexport type Pure<T extends object, P extends ReactivePreferences | undefined = undefined> = {\r\n [K in keyof T as K extends APIKey<T, P> ? never : K]: T[K];\r\n};\r\nexport interface ReactivePreferences {\r\n /** Prefix applied to exposed `Reactor` methods. */\r\n prefix?: string;\r\n /** Suffix applied to exposed `Reactor` methods. */\r\n suffix?: string;\r\n /** Reactor methods that may collide with keys already existing in your state object.\r\n * - If an affix (prefix/suffix) is provided, ONLY these methods will receive the affix (others keep original names).\r\n * - If no affix is provided, these methods will be completely skipped and not attached.\r\n */\r\n whitelist?: readonly Method[]; // keys you're already using\r\n}\r\n\r\n/**\r\n * Attaches `Reactor` APIs to a state object and returns its reactive proxy from the reactor's core.\r\n * If an existing `reactive()` object is passed, it is re-returned ignoring change in preferences.\r\n * @param target Source state object or an existing Reactor instance.\r\n * @param build Reactor initial configuration.\r\n * @param preferences Method naming preferences for exposed APIs.\r\n * @returns Reactive object with mapped Reactor methods and `__Reactor__`.\r\n * @example\r\n * const state = reactive({ user: { name: \"Kosi\" } });\r\n * state.set(\"user.name\", (v) => v);\r\n * @example\r\n * // State already has a 'tick' that's a number so prefix the reactor's method to avoid collision.\r\n * const state = reactive({ tick: 0 }, { debug: true }, { prefix: \"$\", whitelist: [\"tick\"] });\r\n * state.$tick(); // reactor's 'tick' method is prefixed\r\n * state.set(\"tick\", (v) => v + 1); // 'set' keeps its original name\r\n * // Instead, don't prefix and just skip the 'tick' method entirely.\r\n * const state = reactive({ tick: 0 }, { debug: false }, { whitelist: [\"tick\"] });\r\n * state.tick; // number, not the reactor's method\r\n * // You could also rename the property on your State object, e.g. to \"clock\".\r\n */\r\nexport function reactive<T extends object, const P extends ReactivePreferences | undefined = undefined>(target: T, build?: ReactorBuild<T>, preferences: P = NIL): T extends Reactive<infer _O, infer _P> ? T : Reactive<T, P> {\r\n if (\"__Reactor__\" in target) return target as any;\r\n const descriptors: PropertyDescriptorMap = {},\r\n rtr = getReactor(target, true, build),\r\n locks = { enumerable: false, configurable: true, writable: false },\r\n hasAffix = !!(preferences.prefix || preferences.suffix);\r\n for (let i = 0, len = methods.length; i < len; i++) {\r\n let key = methods[i];\r\n if (hasAffix) (preferences.whitelist?.includes(key) ?? true) && (key = `${preferences.prefix || \"\"}${key}${preferences.suffix || \"\"}` as Method);\r\n else if (preferences.whitelist?.includes(key)) continue;\r\n descriptors[key] = { value: rtr[methods[i]].bind(rtr), ...locks };\r\n }\r\n descriptors[\"__Reactor__\"] = { value: rtr, ...locks };\r\n return Object.defineProperties(rtr.core, descriptors), rtr.core as any;\r\n}\r\n\r\n/**\r\n * Marks an object as intent (rejectable).\r\n * @param target Object to mark.\r\n * @returns The same object with intent typing.\r\n */\r\nexport function intent<T extends object>(target: T): Intent<T> {\r\n return (getRaw(target as any)[REJECTABLE] = true), target as Intent<T>;\r\n}\r\n/**\r\n * Removes intent (rejectable) behavior from an object.\r\n * @param target Object to unmark.\r\n * @returns The same object with state typing.\r\n */\r\nexport function state<T extends object>(target: T): State<T> {\r\n return delete getRaw(target as any)[REJECTABLE], target as State<T>;\r\n}\r\n/**\r\n * Checks whether an object is marked as intent.\r\n * @param target Object to test.\r\n * @returns `true` when marked as intent.\r\n */\r\nexport function isIntent<T extends object>(target: T = NIL): target is Intent<T> {\r\n return !!getRaw(target as any)[REJECTABLE];\r\n}\r\n\r\n/**\r\n * Marks an object as inert so it is skipped by proxy mediation.\r\n * @param target Object to mark.\r\n * @returns The same object with inert typing.\r\n */\r\nexport function inert<T extends object>(target: T): Inert<T> {\r\n return (getRaw(target as any)[INERTIA] = true), target as Inert<T>;\r\n}\r\n/**\r\n * Removes the inert marker from an object.\r\n * @param target Object to unmark.\r\n * @returns The same object with live typing.\r\n */\r\nexport function live<T extends object>(target: T): Live<T> {\r\n return delete getRaw(target as any)[INERTIA], target as Live<T>;\r\n}\r\n/**\r\n * Checks whether an object is marked as inert.\r\n * @param target Object to test.\r\n * @returns `true` when inert.\r\n */\r\nexport function isInert<T extends object>(target: T = NIL): target is Inert<T> {\r\n return !!getRaw(target as any)[INERTIA];\r\n}\r\n\r\n/**\r\n * Marks an object as volatile (indiffable enabled).\r\n * @param target Object to mark.\r\n * @returns The same object with volatile typing.\r\n */\r\nexport function volatile<T extends object>(target: T): Volatile<T> {\r\n return (getRaw(target as any)[INDIFFABLE] = true), target as Volatile<T>;\r\n}\r\n/**\r\n * Removes volatile behavior from an object.\r\n * @param target Object to unmark.\r\n * @returns The same object with stable typing.\r\n */\r\nexport function stable<T extends object>(target: T): Stable<T> {\r\n return delete getRaw(target as any)[INDIFFABLE], target as Stable<T>;\r\n}\r\n/**\r\n * Checks whether an object is marked as volatile.\r\n * @param target Object to test.\r\n * @returns `true` when marked as volatile.\r\n */\r\nexport function isVolatile<T extends object>(target: T = NIL): target is Volatile<T> {\r\n return !!getRaw(target as any)[INDIFFABLE];\r\n}\r\n\r\n/**\r\n * Gets the underlying `Reactor` instance associated with a `reactive()` object,\r\n * returns the `Reactor` itself if given, or optionally creates one for plain objects.\r\n * @param target Object to retrieve `Reactor` from.\r\n * @param create When `true`, creates a new `Reactor` for plain objects when none exists.\r\n * @param build Optional `Reactor` build options used only when `create` initializes a new instance.\r\n * @returns `Reactor` instance or `undefined` if not reactive and `create` is false.\r\n */\r\nexport function getReactor<T extends object>(target: Reactor<T>, create?: boolean, build?: ReactorBuild<T>): Reactor<T>;\r\nexport function getReactor<T extends object>(target: Reactive<T>, create?: boolean, build?: ReactorBuild<T>): Reactor<T>;\r\nexport function getReactor<T extends object>(target: T, create: true, build?: ReactorBuild<T>): Reactor<T>;\r\nexport function getReactor<T extends object>(target: T, create?: false, build?: ReactorBuild<T>): Reactor<T> | undefined;\r\nexport function getReactor<T extends object>(target: T | Reactor<T> | Reactive<T>, create: true, build?: ReactorBuild<T>): Reactor<T>;\r\nexport function getReactor<T extends object>(target: T | Reactor<T> | Reactive<T>, create?: false, build?: ReactorBuild<T>): Reactor<T> | undefined;\r\nexport function getReactor<T extends object>(target: T | Reactor<T> | Reactive<T>, create = false, build?: ReactorBuild<T>): Reactor<T> | undefined {\r\n return (target instanceof Reactor ? target : (target as Reactive<T>).__Reactor__) || (create ? new Reactor(target as T, build) : undefined);\r\n}\r\n\r\n/**\r\n * Gets the raw (unproxied) version of an object if it's proxied, otherwise returns the original object.\r\n * @param target Object to unwrap.\r\n * @returns Raw object if proxied, else the original object. Use `Reactor.snapshot(true)` for deep unwrapping.\r\n */\r\nexport function getRaw<T extends object>(target: T = NIL): T {\r\n return (target as any)[RAW] || target;\r\n}\r\n\r\n/**\r\n * Gets the current structural version of an object.\r\n * @param target Object to inspect.\r\n * @returns Version number.\r\n */\r\nexport function getVersion<T extends object>(target: T = NIL): number {\r\n return getRaw(target as any)[VERSION] || 0;\r\n}\r\n/**\r\n * Gets the current snapshot-cache version of an object.\r\n * @param target Object to inspect.\r\n * @returns Snapshot version number.\r\n */\r\nexport function getSnapshotVersion<T extends object>(target: T = NIL): number {\r\n return getRaw(target as any)[SSVERSION] || 0;\r\n}\r\n","import { CTX } from \"@core/consts\";\nimport { resetMeta } from \"@utils/obj\";\n\n/** Transaction object representing a unit of work in the reactor system. */\nexport interface Transaction {\n /** Unique identifier for the transaction, an auto-incrementing number. */\n id: number;\n /** Optional label for the transaction, useful for debugging and logging purposes. */\n label?: string;\n /** Reference to the parent transaction, allowing for nested transaction stacking. */\n parent: Transaction | null;\n}\n\n/** Global transaction ID counter, incremented with each new transaction. */\nexport let txId = 0;\n\n/**\n * Starts a new transaction with an optional label. Transactions are used to group related operations together,\n * allowing for better tracking and debugging of state changes within the reactor system.\n * @param label Optional label for the transaction, useful for debugging and logging purposes.\n * @returns The newly created transaction object.\n */\nexport function startTx(label = `Tx ${txId + 1}`): Transaction {\n const parent = CTX.meta?.tx ?? null,\n tx: Transaction = { id: ++txId, label, parent };\n CTX.meta ??= {};\n return (CTX.meta.tx = tx);\n}\n\n/**\n * Ends the given transaction, reverting the current transaction context to its parent. This should be called after the operations within the transaction are completed to ensure proper cleanup and state management.\n * @param tx The transaction to end.\n */\nexport function endTx(tx: Transaction) {\n if (CTX.meta?.tx === tx) {\n if (tx.parent) CTX.meta.tx = tx.parent;\n else resetMeta(\"tx\");\n };\n}\n\n/**\n * Executes a function within a new transaction context. This is a convenient way to ensure that all operations within the function are grouped together in a single transaction, allowing for better tracking and debugging of state changes.\n * @param fn The function to execute within the transaction context.\n * @param label Optional label for the transaction, useful for debugging and logging purposes.\n * @returns The result of the function execution.\n */\nexport function transaction<T>(fn: () => T, label?: string): T {\n const tx = startTx(label);\n try {\n return fn();\n } finally {\n endTx(tx);\n }\n}\n\ndeclare module \"@defs/reactor\" {\n interface ReactorMeta {\n /** Transaction context for this payload, `null` if outside of a transaction. */\n tx?: Transaction | null;\n }\n}\n","import { CTX, NIL, INERTIA } from \"@core/consts\";\r\nimport { ReactorEvent } from \"@core/event\";\r\nimport type { Pure } from \"@core/mixins\";\r\nimport { Payload, Reactor, ReactorMeta } from \"@defs/reactor\";\r\nimport { getReactor } from \"@core/mixins\";\r\nimport type { DeepMerge, Unflatten, WildPaths, PathValue, PathBranchValue, ChildPaths, MaxDepth, Paths, DeepPartial } from \"@defs/obj\";\r\nimport { transaction, txId } from \"@modules/timeTravel/transaction\";\r\n\r\nexport let arrRegex = /^([^\\[\\]]+)\\[(\\d+)\\]$/;\r\n\r\n// Type Guards\r\n\r\n/** Checks if a value type is an object for common use cases. */\r\nexport function isObj<T extends object = object>(obj: any, arraycheck = true): obj is T {\r\n return \"object\" === typeof obj && obj !== null && (arraycheck ? !Array.isArray(obj) : true);\r\n} // okay for common use cases but loose\r\n/** Checks if a value is a \"Plain Old Javascript Object\". */\r\nexport function isPOJO<T extends object = object>(obj: any, config: { crossRealms?: boolean } = CTX.defaults, typecheck = true): obj is T {\r\n return (typecheck ? isObj(obj, false) : true) && (config.crossRealms ? Object.prototype.toString.call(obj) === \"[object Object]\" : obj.constructor === Object);\r\n} // for strict own POJOs, handles cross-realm objects too\r\n\r\n/** Returns whether a value can be proxied by the reactor runtime. */\r\nexport function canHandle(obj: any, config: { crossRealms?: boolean; preserveContext?: boolean } = CTX.defaults, typecheck = true): boolean {\r\n if ((typecheck && !isObj(obj, false)) || (obj as any)[INERTIA]) return false;\r\n if (Array.isArray(obj) || (!config.preserveContext && isPOJO(obj, config, false))) return true;\r\n if (config.preserveContext) return !(obj instanceof String) && !(obj instanceof Number) && !(obj instanceof Function) && !(obj instanceof Date) && !(obj instanceof Error) && !(obj instanceof RegExp) && !(obj instanceof Promise) && !(obj instanceof Map) && !(obj instanceof WeakMap) && !(obj instanceof Set) && !(obj instanceof WeakSet) && !(obj instanceof EventTarget); // matching types\r\n return false;\r\n} // universal proxy gate for all reactive logic\r\n\r\n// Deep Manipulation\r\n\r\n/**\r\n * Gets a value by path.\r\n * @example\r\n * const state = { user: { profile: { name: \"Kosi\" } } };\r\n * const name = getPath(state, \"user.profile.name\");\r\n */\r\nexport function getPath<T extends object, const S extends string = \".\", P extends WildPaths<T, S> = WildPaths<T, S>>(source: T, key: P, separator: S = \".\" as S, keyFn?: (p: string) => string): PathValue<T, P, S> {\r\n if (key === \"*\") return source as any;\r\n const keys = key.split(separator);\r\n let currObj: any = source;\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keyFn ? keyFn(keys[i]) : keys[i],\r\n match = key.includes(\"[\") && key.match(arrRegex);\r\n if (match) {\r\n const [, key, iStr] = match;\r\n if (!Array.isArray(currObj[key]) || !(key in currObj)) return currObj[key];\r\n currObj = currObj[key][Number(iStr)];\r\n } else {\r\n if (!isObj<Record<string, any>>(currObj) || !(key in currObj)) return currObj[key];\r\n currObj = currObj[key];\r\n }\r\n }\r\n return currObj;\r\n}\r\n\r\n/**\r\n * Sets a value by path.\r\n * @example\r\n * const state = { user: { profile: { name: \"Kosi\" } } };\r\n * setPath(state, \"user.profile.name\", \"Grace\");\r\n * @example\r\n * const state = { users: [] as Array<{ name?: string }> };\r\n * setPath(state, \"users.0.name\", \"Kosi\"); // use `[n]` for arrays if uncertain so the indexes are not treated as object keys, i.e. { \"0\": { name: \"Kosi\" } } instead of { users: [ { name: \"Kosi\" } ] }\r\n */\r\nexport function setPath<T extends object, const S extends string = \".\", P extends WildPaths<T, S> = WildPaths<T, S>>(target: T, key: P, value: PathValue<T, P, S>, separator: S = \".\" as S, keyFn?: (p: string) => string): void {\r\n if (key === \"*\") return Object.assign(target, value);\r\n const keys = key.split(separator);\r\n for (let currObj: any = target, i = 0, len = keys.length; i < len; i++) {\r\n const key = keyFn ? keyFn(keys[i]) : keys[i],\r\n match = key.includes(\"[\") && key.match(arrRegex);\r\n if (match) {\r\n const [, key, iStr] = match;\r\n if (!Array.isArray(currObj[key])) currObj[key] = [];\r\n if (i === len - 1) currObj[key][Number(iStr)] = value;\r\n else (currObj[key][Number(iStr)] ||= {}), (currObj = currObj[key][Number(iStr)]);\r\n } else {\r\n if (i === len - 1) currObj[key] = value;\r\n else (currObj[key] ||= {}), (currObj = currObj[key]);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Deletes a value by path.\r\n * @example\r\n * const state = { user: { profile: { name: \"Kosi\" } } };\r\n * deletePath(state, \"user.profile.name\");\r\n */\r\nexport function deletePath<T extends object, const S extends string = \".\", P extends WildPaths<T, S> = WildPaths<T, S>>(target: T, key: P, separator: S = \".\" as S, keyFn?: (p: string) => string): void {\r\n if (key === \"*\") {\r\n const keys = Object.keys(target);\r\n for (let i = 0, len = keys.length; i < len; i++) delete (target as any)[keys[i]];\r\n return;\r\n }\r\n const keys = key.split(separator);\r\n for (let currObj: any = target, i = 0, len = keys.length; i < len; i++) {\r\n const key = keyFn ? keyFn(keys[i]) : keys[i],\r\n match = key.includes(\"[\") && key.match(arrRegex);\r\n if (match) {\r\n const [, key, iStr] = match;\r\n if (!Array.isArray(currObj[key]) || !(key in currObj)) return;\r\n if (i === len - 1) delete currObj[key][Number(iStr)];\r\n else currObj = currObj[key][Number(iStr)];\r\n } else {\r\n if (!isObj<Record<string, any>>(currObj) || !(key in currObj)) return;\r\n if (i === len - 1) delete currObj[key];\r\n else currObj = currObj[key];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Checks whether a path exists.\r\n * @example\r\n * const state = { user: { profile: { name: \"Kosi\" } } };\r\n * const ok = hasPath(state, \"user.profile.name\"); // default loose typing due to it's usecase\r\n */\r\nexport function hasPath<T extends object, const S extends string = \".\", P extends string = string>(source: T, key: P, separator: S = \".\" as S, keyFn?: (p: string) => string): boolean {\r\n if (key === \"*\") return true;\r\n const keys = key.split(separator);\r\n for (let currObj: any = source, i = 0, len = keys.length; i < len; i++) {\r\n const key = keyFn ? keyFn(keys[i]) : keys[i],\r\n match = key.includes(\"[\") && key.match(arrRegex);\r\n if (match) {\r\n const [, key, iStr] = match;\r\n if (!Array.isArray(currObj[key]) || !(key in currObj)) return false;\r\n if (i === len - 1) return true;\r\n currObj = currObj[key][Number(iStr)];\r\n } else {\r\n if (!isObj<Record<string, any>>(currObj) || !(key in currObj)) return false;\r\n if (i === len - 1) return true;\r\n currObj = currObj[key];\r\n }\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Converts flattened keys into nested object structure.\r\n * @example\r\n * const flat = { \"user.name\": \"Kosi\", \"user.role\": \"admin\" };\r\n * const obj = parsePathObj(flat);\r\n */\r\nexport function parsePathObj<T extends Record<string, any>, const S extends string = \".\">(obj: T, separator: S = \".\" as S, keyFn = (p: string) => p, seen = new WeakSet()): Unflatten<T, S> {\r\n if (!isPOJO(obj) || seen.has(obj)) return obj as Unflatten<T, S>; // no circular references\r\n seen.add(obj);\r\n const result: any = {},\r\n keys = Object.keys(obj);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key: any = keys[i],\r\n val: any = obj[key];\r\n key === \"*\" || key.includes(separator) ? setPath(result, key, parsePathObj(val, separator, keyFn, seen), separator, keyFn) : (result[key] = isPOJO(val) ? parsePathObj(val, separator, keyFn, seen) : val);\r\n }\r\n return result as Unflatten<T, S>;\r\n}\r\n\r\n/** Fast array scanner. Checks if a target path exactly matches or is a child of any path in the provided array. */\r\nexport function matchPaths(paths: Array<string | RegExp>, target: string): boolean {\r\n for (let i = 0, len = paths.length; i < len; i++) {\r\n const p = paths[i];\r\n if (typeof p !== \"string\" ? p.test(target) : target === p || target.startsWith(p + \".\")) return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Counts the depth(number of dot(s)) in a path in the most optimized way possible. */\r\nexport function getDepth(path: string, depth = !path ? 0 : 1): number {\r\n for (let i = 0, len = path.length; i < len; i++) if (path.charCodeAt(i) === 46) depth++; // zero alloc; so when we say it's optmized, it's not cap :)\r\n return depth;\r\n}\r\n\r\n/** Normalizes boolean/object event options into a single options object. */\r\nexport function parseEvtOpts<T extends object, const K extends (keyof T)[] | readonly (keyof T)[], const O extends K[number] = K[0]>(options: T | boolean | undefined, opts: K, boolOpt: O = opts[0] as O, result = {} as T): T & { [P in O]-?: T[P] } {\r\n return Object.assign(result, \"boolean\" === typeof options ? { [boolOpt]: options } : options), result as T & { [P in O]-?: T[P] };\r\n}\r\n\r\n// Merging & Traversal\r\n\r\nexport interface FanoutOptionsTuple extends Partial<Record<(typeof fanoutOptsArr)[number], any>> {\r\n /** Whether to merge values before fanout, useful for patching usecases. @default `false`. */\r\n merge?: boolean;\r\n /** How many levels to fan out, set based on your listener paths max dots. `true` is `Infinity`. @default `1` for event cascading otherwise `Infinity`. */\r\n depth?: number | boolean;\r\n /** Whether to assign arrays as a whole and only touch `.length` for common cases. Only works with the `path` parameter overload or in nested levels.\r\n * Arrays can lead to unnecessary work as more often than not, you won't be watching index paths but waiting on the parent bubble instead.\r\n * If you happen to be watching, it might be more optimal to re-set it yourself if it's only a few indexes or just set this to `false`. @default `true` */\r\n atomic?: boolean;\r\n /** Whether to skip `undefined` values during fanout. @default `false`. */\r\n skipUndef?: boolean;\r\n /** Whether to clone before setting any final values, prevents unintended reference sharing across the state tree. @default `false`. */\r\n cloneSets?: boolean;\r\n /** A label for the transaction that will be started, useful for debugging and tracking. @default `Fanout -> \"${path}\"` : `Fanout`} (Tx ${CTX.txId})`. */\r\n txLabel?: string;\r\n}\r\n/**\r\n * Unified expansion utility.\r\n * Bridges Coarse (Immutable replacement) writes into Fine-grained (Reactive) writes by surgically\r\n * expanding a single object write into multiple granular child operations for deep optimal bubbling.\r\n * @example\r\n * // Event Mode (Cascading after-write)\r\n * rtr.on(\"user\", (e) => fanout(e, { depth: 1 })); // defaults to 1 level deep for events\r\n * @example\r\n * // Direct Mode (Patching before-write)\r\n * fanout(state.user, { session: { id: 1, name: \"Kosi\", role: \"admin\" } }, { depth: Infinity }); // default to `Infinity` here\r\n */\r\nexport function fanout<T extends object>(target: T, value?: Partial<T> | Partial<Pure<T>> | DeepPartial<T> | DeepPartial<Pure<T>>, options?: { crossRealms?: boolean } & FanoutOptionsTuple): void;\r\nexport function fanout<T extends object>(event: ReactorEvent<T> | Payload<T>, options?: { crossRealms?: boolean } & FanoutOptionsTuple): void;\r\nexport function fanout<T extends object, P extends WildPaths<T> = WildPaths<T>>(state: T, path: P, value: Partial<PathValue<T, P>> | DeepPartial<PathValue<T, P>>, options?: { crossRealms?: boolean } & FanoutOptionsTuple): void;\r\nexport function fanout(a: any, b?: any, c?: any, d?: any): void {\r\n const isEvPd = !!a?.target,\r\n isPath = !isEvPd && \"string\" === typeof b,\r\n [state, path, olds, news, opts, type] = isEvPd ? [a.root, a.currentTarget.path, a.currentTarget.oldValue, a.currentTarget.value, b || NIL, a.type] : isPath ? [a, b, getPath(a, b), c, d || NIL, undefined] : [undefined, undefined, a, b || a, c || NIL, undefined],\r\n target = isEvPd ? getPath(a.root, a.currentTarget.path) : isPath ? getPath(state, path) : olds; // to avoid stale refs during write-walk\r\n if ((isEvPd && type !== \"set\" && type !== \"delete\") || !target || !canHandle(news, opts)) return;\r\n const { merge = false, depth, atomic = true, skipUndef = false, cloneSets = false, txLabel } = opts;\r\n const func = () => {\r\n const walk = (target: any, obj: any, depth = isEvPd ? 1 : Infinity, keys = Object.keys(obj)) => {\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i],\r\n val = obj[key];\r\n try {\r\n if (atomic && Array.isArray(val)) (target[key] = cloneSets ? deepClone(val) : val), (target[key].length = target[key].length); // ping commoners\r\n else depth > 1 && canHandle(val, opts) ? walk((target[key] ||= Array.isArray(val) ? [] : {}), val, depth - 1) : (!skipUndef || val !== undefined) && (target[key] = cloneSets ? deepClone(val) : val);\r\n } catch (e) {\r\n if (e instanceof RangeError) throw e; // internals can skip, not users\r\n } // call a spade a spade and just skip, no descriptor gymanstics\r\n }\r\n };\r\n if (atomic && Array.isArray(news) && isPath) setPath(state, path, cloneSets ? deepClone(news) : news), (getPath(state, path).length = news.length); // ping commoners\r\n else walk(target, merge ? mergeObjs(olds, news, opts) : news, depth === true ? Infinity : depth);\r\n };\r\n force(() => transaction(func, txLabel ?? `${path ? `Fanout -> '${path}'` : `Fanout`} (Tx ${txId + 1})`), CTX.usingForce || isEvPd); // if event or payload, already written values can bypass equality checks\r\n}\r\nexport const fanoutOptsArr = [\"merge\", \"depth\", \"atomic\", \"skipUndef\"] as const;\r\n\r\n/**\r\n * Executes a task while forcing all reactive writes to bypass equality checks.\r\n * @param task The mutation logic to execute.\r\n * @param bool Override for ease of use in dynamic usecases, defaults to `true`\r\n * @returns The result of the task.\r\n */\r\nexport function force<T>(task: () => T, bool = true): T {\r\n const prev = CTX.usingForce;\r\n CTX.usingForce = bool;\r\n try {\r\n return task();\r\n } finally {\r\n CTX.usingForce = prev;\r\n }\r\n}\r\n\r\n/**\r\n * Deep-merges object-like values, does necessary checks so use without doubts. Only `o2` keys are checked when `skipUndef` is true.\r\n * @example\r\n * const next = mergeObjs({ user: { name: \"Kosi\" } }, { user: { role: \"admin\" } }); // { ...o1, ...o2 } // o2 over o1 and deep!\r\n */\r\nexport function mergeObjs<T1 extends object, T2 extends object>(o1?: T1 | null, o2?: T2 | null, config?: { crossRealms?: boolean; skipUndef?: boolean }, pojocheck?: boolean): DeepMerge<T1, T2>;\r\nexport function mergeObjs(o1?: any, o2?: any, config = NIL, pojocheck = true): any {\r\n if (pojocheck && (!isPOJO(o1 || NIL, config) || !isPOJO(o2 || NIL, config))) return o2;\r\n (o1 ||= {}), (o2 ||= {});\r\n const merged = config.skipUndef ? { ...o1 } : { ...o1, ...o2 };\r\n if (config.skipUndef) {\r\n const keys = Object.keys(o1);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i],\r\n val = o2[key];\r\n if (val !== undefined) merged[key] = val;\r\n }\r\n }\r\n const keys = Object.keys(merged);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i],\r\n o1V = o1[key],\r\n o2V = o2[key];\r\n if (isPOJO(o1V, config) && isPOJO(o2V, config)) merged[key] = mergeObjs(o1V, o2V, config, false); // fewer writes is less costly here\r\n }\r\n return merged;\r\n}\r\n\r\n/** Returns [path, parent, value] records from root to the target path. */\r\nexport function getTrailRecords<T extends object>(obj: T, path: WildPaths<T>, reverse = false): [WildPaths<T>, PathBranchValue<T, WildPaths<T>>, PathValue<T, WildPaths<T>>][] {\r\n const parts = path.split(\".\"),\r\n chain: ReturnType<typeof getTrailRecords<T>> = [[\"*\", obj, obj]];\r\n for (let acc = \"\", currObj: any = obj, i = 0, len = parts.length; i < len; i++) {\r\n const part = parts[i];\r\n chain.push([(acc += (i ? \".\" : \"\") + part) as WildPaths<T>, currObj, (currObj = currObj?.[part])]); // one iteration per depth, one-time storage over rcurrent derivation\r\n }\r\n return reverse ? chain.reverse() : chain;\r\n}\r\n\r\n// Cloning\r\n\r\n/**\r\n * Deep-clones supported object structures.\r\n * @example\r\n * const cloned = deepClone({ user: { name: \"Kosi\" } });\r\n */\r\nexport function deepClone<T>(obj: T, config: { crossRealms?: boolean; preserveContext?: boolean } = CTX.defaults, seen = new WeakMap()): T {\r\n if (!obj || \"object\" !== typeof obj) return obj;\r\n const cloned = seen.get(obj);\r\n if (cloned) return cloned;\r\n if (!canHandle(obj, config, false)) return obj; // no circular references\r\n const clone: any = config.preserveContext ? Object.create(Object.getPrototypeOf(obj)) : Array.isArray(obj) ? [] : {};\r\n seen.set(obj, clone);\r\n const keys = config.preserveContext ? Reflect.ownKeys(obj) : Object.keys(obj);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i];\r\n try {\r\n clone[key] = deepClone((obj as any)[key], config, seen);\r\n } catch (e) {\r\n if (e instanceof RangeError) throw e; // internals can skip, not users\r\n } // call a spade a spade and just skip, no descriptor gymanstics\r\n }\r\n return clone;\r\n} // POJO|Arr|Dynamic Deep cloner\r\n\r\n// Destruction\r\n\r\n/** Nulls all non-function instance properties across the prototype chain. */\r\nexport function nuke(target: any): void {\r\n const keys = Object.keys(target);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i];\r\n if (\"function\" !== typeof target[key]) target[key] = null;\r\n }\r\n}\r\n\r\n// Metadata Operations\r\n\r\n/**\r\n * Allows extending the context payload of a `Reactor` operation with custom meta properties for the duration of a function execution.\r\n * Temporarily merges provided meta into `CTX.meta` for the duration of `fn`. Restores the previous meta object after `fn` completes (even on `throw`).\r\n * @param props Meta properties to merge into the current context.\r\n */\r\nexport function withMeta<T>(props: ReactorMeta, fn: () => T): T {\r\n CTX.meta ??= {};\r\n const cache: Record<string, any> = {};\r\n for (const key of Object.keys(props)) {\r\n cache[key] = (CTX.meta as any)[key];\r\n (CTX.meta as any)[key] = (props as any)[key];\r\n }\r\n try {\r\n return fn();\r\n } finally {\r\n for (const key of Object.keys(cache)) {\r\n if (cache[key] === undefined) resetMeta(key as any);\r\n else (CTX.meta as any)![key] = cache[key];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Resets a specific property in the global context meta and nullifies it if empty to stay on the fast path.\r\n * @param key The key of the meta property to be deleted before nullifying.\r\n */\r\nexport function resetMeta(key: keyof ReactorMeta) {\r\n if (!CTX.meta) return;\r\n delete CTX.meta[key];\r\n for (const _ in CTX.meta) return;\r\n CTX.meta = null;\r\n}\r\n\r\n/** Checks if an object is empty (has no own enumerable properties). */\r\nexport const isEmpty = (value: Object, preserveContext = CTX.defaults.preserveContext) => {\r\n if (preserveContext) return Reflect.ownKeys(value).length === 0;\r\n for (const _ in value) return false;\r\n return true;\r\n};\r\n\r\n/**\r\n * The Master Path Engine: Single-pass, zero-allocation DFS tree extraction. Perfectly mirrors the TS `Paths` and `ChildPaths` generics.\r\n * - Root paths: `getPaths(store)`\r\n * - Child paths: `getPaths(store, \"settings.audio\")`\r\n * - Next words (typeahead): `getPaths(store, \"settings\", { depth: 1 })`\r\n */\r\nexport function getPaths<T extends object, const S extends string = \".\", P extends WildPaths<T, S> = \"*\", D extends number = MaxDepth, L extends boolean = false>(obj: T, path: P = \"*\" as P, config: { depth?: D; separator?: S; leavesOnly?: L; atomic?: boolean; preserveContext?: boolean } = CTX.defaults as any): (P extends \"*\" ? Paths<T, S, D, L> : ChildPaths<T, P, S, D, L>)[] {\r\n const target = path === \"*\" ? obj : getPath(obj, path as any, config.separator as S),\r\n result: string[] = [],\r\n seen = new Set<any>();\r\n if (!canHandle(target, config)) return result as any;\r\n const walk = (curr: any, currPath: string, depth: number) => {\r\n if (seen.has(curr) || depth >= (config.depth ?? 18)) return;\r\n seen.add(curr);\r\n const keys = config.preserveContext ? Reflect.ownKeys(curr) : Object.keys(curr);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = String(keys[i]),\r\n val = (curr as any)[key],\r\n newPath = currPath ? `${currPath}${config.separator || \".\"}${key}` : key,\r\n isArray = Array.isArray(val),\r\n isNode = canHandle(val, config) && !((config.atomic ?? true) && isArray),\r\n isEmptyNode = isNode && (isArray ? val.length === 0 : isEmpty(val, config.preserveContext));\r\n if (!config.leavesOnly || !isNode || isEmptyNode) result.push(newPath);\r\n try {\r\n isNode && !isEmptyNode && walk(val, newPath, depth + 1);\r\n } catch (e) {\r\n if (e instanceof RangeError) throw e;\r\n }\r\n }\r\n seen.delete(curr); // Backtrack: allow identical object refs across different branches\r\n }; // Inline closure maintains state; prepends the exact parent path during the first pass.\r\n return walk(target, path === \"*\" ? \"\" : path, 0), result as any; // If path is passed, it acts as the initial string prefix for the sub-tree walk.\r\n}\r\n\r\n/** Quick boolean check to see if a path resolves to a final/inert value (Command Execution Gate). */\r\nexport function isLeafPath<T extends object, const S extends string = \".\", P extends WildPaths<T, S> = WildPaths<T, S>>(obj: T, path: P, config: { separator?: S } & typeof CTX.defaults = CTX.defaults, value = getPath(obj, path, config.separator)): boolean {\r\n return path !== \"*\" && !canHandle(value, config);\r\n}\r\n\r\n/**\r\n * Creates a two-way, array-atomic, echo-proof sync bridge between two S.I.A Reactors. Uses a synchronous origin lock to prevent infinite echo loops.\r\n * On setup, `rA` hydrates `rB` at `prefixB` with a deep clone of its current state at `prefixA` (primary drives initial truth).\r\n * @param rA Primary reactor — source of truth. Its `prefixA` slice seeds `rB.prefixB` on setup.\r\n * @param rB Secondary reactor — the wider store (e.g. `ctlr.config`). Holds the primary at a named path.\r\n * @param prefixA Path prefix on `rA` to watch and translate. Use `\"\"` for root.\r\n * @param prefixB Path on `rB` that maps to `rA`. Defaults to `\"\"` (root).\r\n * @param signal Optional `AbortSignal` to tear down both watchers automatically.\r\n * @returns Cleanup function that removes both watchers.\r\n * @example\r\n * const unsync = createReactorSync(module.config, ctlr.config, \"\", \"settings.persist\", signal); // module.config root <-> ctlr.config.settings.persist\r\n * @example\r\n * const unsync = createReactorSync(timeline.config, ctlr.config, \"\", \"settings.controlPanel.timeline\"); // timeline.config root <-> ctlr.config.settings.controlPanel.timeline\r\n * unsync(); // or let signal do it\r\n */\r\nexport function createReactorSync(rA: Reactor<any> | object, rB: Reactor<any> | object, prefixA: string, prefixB = \"\", signal?: AbortSignal): () => void {\r\n const rtrA = getReactor(rA, true),\r\n rtrB = getReactor(rB, true);\r\n let origin: 0 | 1 | null = null; // 0 = A fired, 1 = B fired\r\n const sync = (src: 0 | 1, dest: any, srcP: string, destP: string) => (val: any, payload: Payload<any, \"*\">) => {\r\n if (origin === (src ^ 1)) return; // echo guard\r\n const { path, object: obj, key } = payload.target;\r\n if (srcP && path !== srcP && !path.startsWith(srcP + \".\")) return; // boundary check\r\n const isArr = Array.isArray(obj),\r\n origP = isArr ? path.slice(0, -((key as string).length + 1)) : path, // Array trap: forward the whole array instead of an index-keyed object\r\n syncP = origP === srcP ? \"\" : srcP ? origP.slice(srcP.length + 1) : origP;\r\n (origin = src), setPath(dest, (destP ? (syncP ? `${destP}.${syncP}` : destP) : syncP || \"*\") as any, isArr ? deepClone(obj) : val), (origin = null);\r\n };\r\n const initA = prefixA ? getPath(rtrA.core, prefixA as any) : rtrA.core; // primary hydrates secondary on setup\r\n if (initA !== undefined) fanout(rtrB.core, (prefixB || \"*\") as any, initA, { depth: 1, cloneSets: true, txLabel: `ReactorSync: ${prefixA}^ <-> ${prefixB}` });\r\n const clupA = rtrA.watch(\"*\", sync(0, rtrB.core, prefixA, prefixB), { signal }),\r\n clupB = rtrB.watch(\"*\", sync(1, rtrA.core, prefixB, prefixA), { signal });\r\n return () => (clupA(), clupB());\r\n}\r\n","import type { Payload } from \"@defs/reactor\";\r\nimport type { WildPaths } from \"@defs/obj\";\r\nimport { getTrailRecords } from \"@utils/obj\";\r\n\r\n// ===========================================================================\r\n// The S.I.A (State & Intent Architecture) `Event`\r\n// ===========================================================================\r\n\r\n/**\r\n * - Runtime event payload used by Reactor listener waves.\r\n * - Tracks phase and current path context during propagation, mimics native `Event` API.\r\n * Exposes intent controls (`resolve`/`reject`), propagation controls, and `composedPath()`.\r\n * @typeParam T Root state object type.\r\n * @typeParam P Target path type.\r\n */\r\nexport class ReactorEvent<T extends object, P extends WildPaths<T> = WildPaths<T>> {\r\n /** No active propagation phase. */\r\n public static readonly NONE = 0;\r\n /** Capture phase: root to target parent. */\r\n public static readonly CAPTURING_PHASE = 1;\r\n /** Target phase: target listeners run. */\r\n public static readonly AT_TARGET = 2;\r\n /** Bubble phase: target parent to root. */\r\n public static readonly BUBBLING_PHASE = 3;\r\n /** Current propagation phase for this event instance. */\r\n public eventPhase = ReactorEvent.NONE;\r\n /** Current event type for the active propagation path, use immediately if async */\r\n public type!: Payload<T, P>[\"type\"];\r\n\r\n public currentTarget!: Payload<T, P>[\"currentTarget\"]; /** Current target context for the active propagation path, use immediately if async. Also survives future shape changes from nesting for a path callback. */\r\n public readonly target!: Payload<T, P>[\"target\"]; /** Original event target context. */\r\n public readonly root!: Payload<T, P>[\"root\"]; /** Root reactive object for this event instance wave. */\r\n public readonly reactor!: Payload<T, P>[\"reactor\"]; /** The `Reactor` instance that dispatched this event instance. */\r\n /** Whether resolve/reject intent semantics are allowed for this event instance. */\r\n public readonly rejectable!: boolean;\r\n /** Original event type before propagation remapping. */\r\n public readonly staticType: Exclude<Payload<T, P>[\"type\"], \"update\">;\r\n public readonly path: Payload<T, P>[\"target\"][\"path\"]; /** Original target path for this event instance wave. */\r\n public readonly value: Payload<T, P>[\"target\"][\"value\"]; /** Current value at the event target path. */\r\n public readonly oldValue: Payload<T, P>[\"target\"][\"oldValue\"]; /** Previous value at the event target path. */\r\n /** Whether this event instance wave can bubble back up to ancestors or just capture down. */\r\n public readonly bubbles: boolean = false;\r\n /** Whether this event instance wave can capture down to descendants or just bubble up. */\r\n public readonly captures: boolean = false;\r\n /** `DOMHighResTimeStamp` for this event payload for native event parity, Enable `eventTimeStamps` config, then use this over custom timestamps for accuracy. */\r\n public readonly timestamp?: number;\r\n protected _resolved = \"\";\r\n protected _rejected = \"\";\r\n protected _propagationStopped = false;\r\n protected _immediatePropagationStopped = false;\r\n\r\n /**\r\n * @param payload Source payload for this event instance.\r\n * @param reactor The `Reactor` instance creating this event instance.\r\n */\r\n constructor(payload: Payload<T, P>) {\r\n Object.assign(this, payload);\r\n this.staticType = payload.type as ReactorEvent<T, P>[\"staticType\"];\r\n this.path = payload.target.path;\r\n this.value = payload.target.value;\r\n this.oldValue = payload.target.oldValue;\r\n if (this.reactor.config.eventBubbling) this.bubbles = true;\r\n if (this.reactor.config.eventCapturing === \"auto\" ? this.rejectable : this.reactor.config.eventCapturing) this.captures = true;\r\n if (this.reactor.config.eventTimeStamps) this.timestamp = performance.now();\r\n }\r\n\r\n /** Whether propagation has been stopped. */\r\n public get propagationStopped(): boolean {\r\n return this._propagationStopped;\r\n }\r\n /** Stops propagation to remaining listeners in later nodes/phases. */\r\n public stopPropagation(): void {\r\n this._propagationStopped = true;\r\n }\r\n /** Whether immediate propagation has been stopped. */\r\n public get immediatePropagationStopped(): boolean {\r\n return this._immediatePropagationStopped;\r\n }\r\n /** Stops propagation immediately, including remaining listeners on current path. */\r\n public stopImmediatePropagation(): void {\r\n this._propagationStopped = true;\r\n this._immediatePropagationStopped = true;\r\n }\r\n\r\n /** Resolution message for rejectable events. */\r\n public get resolved(): string {\r\n return this._resolved;\r\n }\r\n /**\r\n * Marks a rejectable event as resolved.\r\n * @param message Optional resolution message or identity.\r\n * @example e.resolve(\"html5Tech\"); // identity\r\n * @example e.resolve(\"API Load successful\"); // message\r\n */\r\n public resolve(message?: string): void {\r\n if (!this.rejectable) return this.reactor.log(`[ReactorEvent] Ignored \\`resolve()\\` call on a non-rejectable ${this.staticType} at \"${this.path}\"`);\r\n if (this.eventPhase !== ReactorEvent.CAPTURING_PHASE) this.reactor.log(`[ReactorEvent] Resolving an intent on ${this.staticType} at \"${this.path}\" outside of the capture phase is unadvised.`);\r\n if (this.rejectable) this.reactor.log(`[ReactorEvent] ${(this._resolved = message || `${this.staticType} intent resolved at \"${this.path}\"`)}`);\r\n }\r\n /** Rejection reason for rejectable events. */\r\n public get rejected(): string {\r\n return this._rejected;\r\n }\r\n /**\r\n * Marks a rejectable event as rejected.\r\n * @param reason Optional rejection reason or identity.\r\n * @example e.reject(\"html5Tech\"); // identity\r\n * @example e.reject(\"User is not logged in\"); // reason\r\n */\r\n public reject(reason?: string): void {\r\n if (!this.rejectable) return this.reactor.log(`[ReactorEvent] Ignored \\`reject()\\` call on a non-rejectable ${this.staticType} at \"${this.path}\"`);\r\n if (this.eventPhase !== ReactorEvent.CAPTURING_PHASE) this.reactor.log(`[ReactorEvent] Rejecting an intent on ${this.staticType} at \"${this.path}\" outside of the capture phase is unadvised.`);\r\n if (this.rejectable) this.reactor.log(`[ReactorEvent] ${(this._rejected = reason || `${this.staticType} intent rejected at \"${this.path}\"`)}`);\r\n }\r\n\r\n /** Returns event path values from target to root in bubbling order. */\r\n public composedPath() {\r\n return getTrailRecords<T>(this.root, this.path as WildPaths<T>, true).map((r) => r[2]); // values reversed to mimic bubbling\r\n }\r\n}\r\n","import { CTX, RAW, INERTIA, REJECTABLE, INDIFFABLE, TERMINATOR, VERSION, SSVERSION, NOOP, RTR_LOG, EVT_OPTS } from \"./consts\";\r\nimport { ReactorEvent } from \"./event\";\r\nimport type { REvent, Target, Payload, Getter, Setter, Deleter, Watcher, Listener, ListenerOptions, ListenerRecord, WatcherRecord, GetterRecord, SetterRecord, DeleterRecord, SyncOptions, ReactorBuild } from \"@defs/reactor\";\r\nimport type { PathBranchValue, Paths, PathKey, PathValue, WildPaths, MaxDepth } from \"@defs/obj\";\r\nimport { canHandle, getTrailRecords, parseEvtOpts, hasPath, getPath, setPath, deletePath, getDepth, force, nuke } from \"@utils/obj\";\r\nimport { BaseReactorModule as ReactorModule, ReactorModuleId } from \"@modules/base\";\r\n\r\n/*\r\n * ========= THE S.I.A (State & Intent Architecture) `Reactor` CODE PATTERN WATCHLIST =========\r\n * 1. non-stack loops & multiple optimizations, this is surgical work on the root of reactivity\r\n * 2. used cached loop lengths to optimize b4 JIT Compiler does for optimal speed throughput,\r\n * avoided myth of reverse while loops so new CPU's don't waste memory on a forward l1 Cache miss\r\n * 3. moved any logic involving `?.` or `??` outside repetitions to not accumulate the ~5x slowdown\r\n * 4. `?.` in cases where only other option was `&&` | `||` cuz `?.` benchmarks were a bit faster\r\n * 5. adopted nooping strategy since JIT compiler makes it up to 2x faster than other alternatives\r\n * 6. no unorthodox string deduplication or caching since string interning is now native to JS\r\n * 7. it's all progressive: light at creation then grows during the use of all desired features\r\n * 8. Reflect API was avoided, incurs an ~8x slowdown; mediation layer is even powerful enough\r\n * 9. Core's Class Syntax over global functional closures for instance's lighter memory footprint\r\n * 10. Avoided object pooling since V8 excels at generational GC for short-lived payloads so no\r\n * \"Stop the World\"s. Also no need for wasted recurrent logic, serialize or forget about payloads.\r\n * 11. Array slicing had to be used in listener loops since unsubscribing is also user-controlled.\r\n * * With all this, the right has now been earned to run on your hot path; sit back and relax :)\r\n */\r\n\r\n// ===========================================================================\r\n// The S.I.A (State & Intent Architecture) `Reactor`\r\n// ===========================================================================\r\n\r\n/**\r\n * - Core S.I.A runtime for path mediation, observation, and event propagation.\r\n * - Provides path-level mediators (`get|set|delete`), synchronous watchers (`watch`), and batched listeners (`on`).\r\n * Supports wildcard/path-based subscriptions, optional reference tracking, and module-based extensions.\r\n * @typeParam T Root state object type.\r\n */\r\nexport class Reactor<T extends object> {\r\n /** Logger function for this reactor instance, override if desired, `this.canLog = false` resets. */\r\n public log: (...args: any[]) => void = NOOP;\r\n /** The core state object for this reactor instance. */\r\n public core: T; // `?:`s | pay the ~800 byte price upfront for what u might never use\r\n /** The modules being used by this reactor. */\r\n public modules?: Set<ReactorModule<T>>;\r\n /** Configuration options for this reactor instance. */\r\n public config: Omit<ReactorBuild<T>, \"debug\">;\r\n /** Whether this reactor instance is currently batching updates, a window view into the engine timing */\r\n public isBatching = false; // Async Batching\r\n protected queue?: Set<() => void>; // Tasks to run after flush\r\n protected batch?: Map<Paths<T>, Payload<T>>; // Batched payloads to flush async\r\n protected lineage?: WeakMap<object, (object | string)[]>; // { parent, key }: uses maths to avoid extra allocations for pairs\r\n protected snapCache?: WeakMap<object, any>;\r\n protected proxyCache = new WeakMap<object, any>();\r\n protected getters?: Map<WildPaths<T>, Array<GetterRecord<T>>>;\r\n protected setters?: Map<WildPaths<T>, Array<SetterRecord<T>>>;\r\n protected deleters?: Map<WildPaths<T>, Array<DeleterRecord<T>>>;\r\n protected watchers?: Map<WildPaths<T>, Array<WatcherRecord<T>>>;\r\n protected listeners?: Map<WildPaths<T>, Array<ListenerRecord<T>>>;\r\n\r\n /**\r\n * Creates a new Reactor instance.\r\n * @param target Initial state target.\r\n * @param build Reactor bootstrap/build configuration.\r\n * @example\r\n * const rtr = new Reactor({ count: 0 });\r\n */\r\n constructor(target: T = {} as T, build?: ReactorBuild<T>) {\r\n (this as any)[INERTIA] = true;\r\n this.config = { ...CTX.defaults, ...build };\r\n this.core = this.proxied(target);\r\n if (build) this.canLog = !!build.debug;\r\n }\r\n\r\n public proxied<O extends object>(target: O, rejectable = false, indiffable = false, parent?: object, key?: string, path?: string): O {\r\n if (!target || \"object\" !== typeof target) return target;\r\n target = (target as any)[RAW] || target; // prevents nested proxies\r\n if (this.config.referenceTracking && parent && key && !this.link(target, parent, key, false)) return target; // already checked types above\r\n const cached = this.proxyCache.get(target);\r\n if (cached) return cached;\r\n if (!canHandle(target, this.config, false)) return target; // handles unless inert, // did light type check for `[Symbol]` so `false` to strictObj typecheck param\r\n rejectable ||= (target as any)[REJECTABLE];\r\n indiffable ||= (target as any)[INDIFFABLE];\r\n const proxy = new Proxy(target, {\r\n // Robust Proxy handler\r\n get: (object, key, receiver) => {\r\n if (key === RAW) return this.log(`👀 [\\`get\\` Trap] Peeked at ${object}`), object;\r\n let value = !this.config.preserveContext ? (object as any)[key] : Reflect.get(object, key, receiver);\r\n const keyStr = String(key),\r\n fullPath = (path ? path + \".\" + keyStr : keyStr) as Paths<T>,\r\n paths = this.config.lineageTracing ? this.trace(object, keyStr) : fullPath;\r\n this.log(`🔍 [\\`get\\` Trap] Initiated for \"${keyStr}\" on [${paths}]`), CTX.autotracker?.track(fullPath, this);\r\n if (this.config.get) value = this.config.get(object as PathBranchValue<T>, key as PathKey<T>, value, receiver, paths);\r\n if (this.getters) {\r\n const wildcords = this.getters.get(\"*\"); // wild cords\r\n for (let i = 0, len = this.config.lineageTracing ? paths.length : 1; i < len; i++) {\r\n const currPath = (this.config.lineageTracing ? paths[i] : fullPath) as Paths<T>,\r\n cords = this.getters.get(currPath);\r\n if (!cords && !wildcords) continue;\r\n const target: Target<T> = { path: currPath, value, key: keyStr as PathKey<T>, hadKey: true, object: receiver },\r\n payload = { type: \"get\", target, currentTarget: target, root: this.core, reactor: this, rejectable, ...CTX.meta } as Payload<T, Paths<T>>;\r\n if (cords) value = this.mediate(currPath, payload, \"get\", cords);\r\n if (!wildcords) continue;\r\n target.value = value;\r\n value = this.mediate(\"*\", payload, \"get\", wildcords);\r\n } // Mediators\r\n }\r\n return this.proxied(value, rejectable, indiffable, object, keyStr, fullPath);\r\n },\r\n set: (object, key, value, receiver) => {\r\n let unchanged,\r\n safeValue,\r\n safeOldValue,\r\n terminated = false;\r\n const keyStr = String(key),\r\n fullPath = (path ? path + \".\" + keyStr : keyStr) as Paths<T>,\r\n paths = this.config.lineageTracing ? this.trace(object, keyStr) : fullPath,\r\n loopLen = this.config.lineageTracing ? paths.length : 1,\r\n oldValue = !this.config.preserveContext ? (object as any)[key] : Reflect.get(object, key, receiver),\r\n hadKey = !this.config.preserveContext ? key in object : Reflect.has(object, key);\r\n this.log(`✏️ [\\`set\\` Trap] Initiated for \"${keyStr}\" on [${paths}]`), CTX.autotracker?.track(fullPath, this, true);\r\n if (this.config.referenceTracking || !indiffable) {\r\n safeOldValue = oldValue?.[RAW] || oldValue;\r\n safeValue = value?.[RAW] || value;\r\n unchanged = this.config.equalityFunction!(safeValue, safeOldValue);\r\n }\r\n if (!indiffable && unchanged && !CTX.usingForce && keyStr !== \"length\") return this.log(`🔄 [\\`set\\` Trap] Unchanged for \"${keyStr}\" on [${paths}]`), true; // Arrays silently update length before firing set trap, can't risk UI going blind\r\n if (this.config.set) terminated = (value = this.config.set(object as PathBranchValue<T>, key as PathKey<T>, value, oldValue, receiver, paths)) === TERMINATOR;\r\n if (this.setters) {\r\n const wildcords = this.setters.get(\"*\");\r\n for (let i = 0; i < loopLen; i++) {\r\n const currPath = (this.config.lineageTracing ? paths[i] : fullPath) as Paths<T>,\r\n cords = this.setters.get(currPath);\r\n if (!cords && !wildcords) continue;\r\n const target: Target<T> = { path: currPath, value, oldValue, key: keyStr as PathKey<T>, hadKey, object: receiver },\r\n payload = { type: \"set\", target, currentTarget: target, root: this.core, reactor: this, terminated, rejectable, ...CTX.meta } as Payload<T, Paths<T>>;\r\n if (cords) {\r\n const result = this.mediate(currPath, payload, \"set\", cords);\r\n if (!(terminated ||= payload.terminated!)) value = result;\r\n }\r\n if (!wildcords) continue;\r\n target.value = value;\r\n const result = this.mediate(\"*\", payload, \"set\", wildcords);\r\n if (!(terminated ||= payload.terminated!)) value = result;\r\n } // Mediators\r\n }\r\n if (terminated) return this.log(`🛡️ [\\`set\\` Trap] Terminated for \"${keyStr}\" on [${paths}]`), true; // soft rejection if terminated\r\n const success = !this.config.preserveContext ? (((object as any)[key] = value), true) : Reflect.set(object, key, value, receiver);\r\n if (!success) return this.log(`❌ [\\`set\\` Trap] Failed for \"${keyStr}\" on [${paths}]`), false; // hard rejection if failed\r\n if (this.config.referenceTracking && !unchanged) this.config.smartCloning && this.stamp(object), (this.unlink(safeOldValue, object, keyStr), this.link(safeValue, object, keyStr));\r\n if (this.watchers || this.listeners)\r\n for (let i = 0; i < loopLen; i++) {\r\n const currPath = (this.config.lineageTracing ? paths[i] : fullPath) as Paths<T>,\r\n target: Target<T> = { path: currPath, value, oldValue, key: keyStr as PathKey<T>, hadKey, object: receiver };\r\n this.notify(currPath, { type: \"set\", target, currentTarget: target, root: this.core, reactor: this, terminated, rejectable, ...CTX.meta } as Payload<T, Paths<T>>);\r\n } // Listeners\r\n return true;\r\n },\r\n deleteProperty: (object, key) => {\r\n let value: any,\r\n receiver = this.proxyCache.get(object),\r\n terminated = false;\r\n const keyStr = String(key),\r\n fullPath = (path ? path + \".\" + keyStr : keyStr) as Paths<T>,\r\n paths = this.config.lineageTracing ? this.trace(object, keyStr) : fullPath,\r\n loopLen = this.config.lineageTracing ? paths.length : 1,\r\n oldValue = !this.config.preserveContext ? (object as any)[key] : Reflect.get(object, key, receiver),\r\n hadKey = !this.config.preserveContext ? key in object : Reflect.has(object, key);\r\n this.log(`🗑️ [\\`deleteProperty\\` Trap] Initiated for \"${keyStr}\" on [${paths}]`), CTX.autotracker?.track(fullPath, this, true);\r\n if (this.config.deleteProperty) terminated = (value = this.config.deleteProperty(object as PathBranchValue<T>, key as PathKey<T>, oldValue, receiver, paths)) === TERMINATOR;\r\n if (this.deleters) {\r\n const wildcords = this.deleters.get(\"*\");\r\n for (let i = 0; i < loopLen; i++) {\r\n const currPath = (this.config.lineageTracing ? paths[i] : fullPath) as Paths<T>,\r\n cords = this.deleters.get(currPath);\r\n if (!cords && !wildcords) continue;\r\n const target: Target<T> = { path: currPath, value, oldValue, key: keyStr as PathKey<T>, hadKey, object: receiver },\r\n payload = { type: \"delete\", target, currentTarget: target, root: this.core, reactor: this, rejectable, ...CTX.meta } as Payload<T, Paths<T>>;\r\n if (cords) {\r\n const result = this.mediate(currPath, payload, \"delete\", cords);\r\n if (!(terminated ||= payload.terminated!)) value = result;\r\n }\r\n if (!wildcords) continue;\r\n const result = this.mediate(\"*\", payload, \"delete\", wildcords);\r\n if (!(terminated ||= payload.terminated!)) value = result;\r\n } // Mediators\r\n }\r\n if (terminated) return this.log(`🛡️ [\\`deleteProperty\\` Trap] Terminated for \"${keyStr}\" on [${paths}]`), true; // soft rejection if terminated\r\n const success = !this.config.preserveContext ? delete (object as any)[key] : Reflect.deleteProperty(object, key);\r\n if (!success) return this.log(`❌ [\\`deleteProperty\\` Trap] Failed for \"${keyStr}\" on [${paths}]`), false; // hard rejection if failed\r\n if (this.config.referenceTracking) this.config.smartCloning && this.stamp(object), this.unlink(oldValue?.[RAW] || oldValue, object, keyStr);\r\n if (this.watchers || this.listeners)\r\n for (let i = 0; i < loopLen; i++) {\r\n const currPath = (this.config.lineageTracing ? paths[i] : fullPath) as Paths<T>,\r\n target: Target<T> = { path: currPath, value, oldValue, key: keyStr as PathKey<T>, hadKey, object: receiver };\r\n this.notify(currPath, { type: \"delete\", target, currentTarget: target, root: this.core, reactor: this, rejectable, ...CTX.meta } as Payload<T, Paths<T>>);\r\n } // Listeners\r\n return true;\r\n },\r\n has: (object, key) => {\r\n let has = !this.config.preserveContext ? key in object : Reflect.has(object, key);\r\n const keyStr = String(key),\r\n fullPath = (path ? path + \".\" + keyStr : keyStr) as Paths<T>;\r\n this.log(`❓ [\\`has\\` Trap] Initiated for \"${keyStr}\" on '${fullPath}'`), CTX.autotracker?.track(fullPath, this);\r\n if (this.config.has) has = this.config.has(object as PathBranchValue<T>, key as PathKey<T>, has, this.proxyCache.get(object), fullPath);\r\n return has;\r\n },\r\n getOwnPropertyDescriptor: (object, key) => {\r\n let descriptor = !this.config.preserveContext ? Object.getOwnPropertyDescriptor(object, key) : Reflect.getOwnPropertyDescriptor(object, key);\r\n const keyStr = String(key),\r\n fullPath = (path ? path + \".\" + keyStr : keyStr) as Paths<T>;\r\n this.log(`📋 [\\`getOwnPropertyDescriptor\\` Trap] Initiated for \"${keyStr}\" on '${fullPath}'`), CTX.autotracker?.track(fullPath, this);\r\n if (this.config.getOwnPropertyDescriptor) descriptor = this.config.getOwnPropertyDescriptor(object as PathBranchValue<T>, key as PathKey<T>, descriptor, this.proxyCache.get(object), this.config.lineageTracing ? this.trace(object, keyStr) : fullPath);\r\n return descriptor;\r\n },\r\n ownKeys: (object) => {\r\n let ownKeys = Reflect.ownKeys(object); // no faster accurate way without Reflect API\r\n const safePath = (path || \"*\") as Paths<T>;\r\n this.log(`🔑 [\\`ownKeys\\` Trap] Initiated on \"${safePath}\"`), CTX.autotracker?.track(safePath, this);\r\n if (this.config.ownKeys) ownKeys = this.config.ownKeys(object as PathBranchValue<T>, ownKeys, this.proxyCache.get(object), safePath);\r\n return ownKeys;\r\n },\r\n });\r\n return this.proxyCache.set(target, proxy), proxy;\r\n }\r\n\r\n public trace(target: object, path: string, paths: string[] = [], seen = new WeakSet<object>()): Paths<T>[] {\r\n if (Object.is(target, (this.core as any)[RAW] || this.core)) return paths.push(path), paths as Paths<T>[];\r\n if (seen.has(target)) return paths as Paths<T>[]; // Stop infinite loops\r\n seen.add(target);\r\n const es = (this.lineage ??= new WeakMap()).get(target);\r\n if (!es) return paths as Paths<T>[];\r\n for (let i = 0, len = es.length; i < len; i += 2) {\r\n const prev = es[i + 1];\r\n this.trace(es[i] as object, prev ? prev + \".\" + path : path, paths, seen);\r\n }\r\n return paths as Paths<T>[];\r\n } // won't be called without `.config.referenceTracking` so internal guard avoided\r\n protected link(target: any, parent: object, key: string, typecheck = true, es?: (object | string)[]): boolean {\r\n if (!canHandle(target, this.config, typecheck)) return false;\r\n es = (this.lineage ??= new WeakMap()).get(target) ?? (this.lineage!.set(target, (es = [])), es);\r\n for (let i = 0, len = es.length; i < len; i += 2) if (Object.is(es[i], parent) && es[i + 1] === key) return true;\r\n return es.push(parent, key), true; // es used as a param: needed storage perk\r\n }\r\n protected unlink(target: any, parent: object, key: string): void {\r\n if (!canHandle(target, this.config)) return;\r\n const es = (this.lineage ??= new WeakMap()).get(target);\r\n if (es) for (let i = 0, len = es.length; i < len; i += 2) if (Object.is(es[i], parent) && es[i + 1] === key) return void es.splice(i, 2);\r\n }\r\n protected stamp(target: any, typecheck = true, seen = new WeakSet<object>()): void {\r\n if (typecheck && \"object\" !== typeof target) return;\r\n target = target[RAW] || target; // escape hatch from traps\r\n if (seen.has(target)) return; // Stop infinite loops\r\n seen.add(target);\r\n target[VERSION] = (target[VERSION] || 0) + 1;\r\n const es = (this.lineage ??= new WeakMap()).get(target);\r\n if (es) for (let i = 0, len = es.length; i < len; i += 2) this.stamp(es[i], false, seen); // walk up the tree; stamp parents\r\n }\r\n\r\n public mediate<P extends WildPaths<T>>(path: WildPaths<T>, payload: Payload<T, P>, type: \"get\", cords: GetterRecord<T>[]): PathValue<T, P>;\r\n public mediate<P extends WildPaths<T>>(path: WildPaths<T>, payload: Payload<T, P>, type: \"set\", cords: SetterRecord<T>[]): PathValue<T, P>;\r\n public mediate<P extends WildPaths<T>>(path: WildPaths<T>, payload: Payload<T, P>, type: \"delete\", cords: DeleterRecord<T>[]): PathValue<T, P>;\r\n public mediate<P extends WildPaths<T>>(path: WildPaths<T>, payload: Payload<T, P>, type: \"get\" | \"set\" | \"delete\", cords: Array<GetterRecord<T> | SetterRecord<T> | DeleterRecord<T>>) {\r\n let terminated = false,\r\n value = payload.target.value,\r\n killed = false; // mediator called when necessary & ready for the argument work, all facts (params) are brought to the table so no `?.`\r\n const isGet = type === \"get\",\r\n isSet = type === \"set\",\r\n mediators = isGet ? this.getters : isSet ? this.setters : this.deleters,\r\n scords = cords.slice();\r\n for (let slen = scords.length, i = !isGet ? 0 : slen - 1, len = !isGet ? slen : -1; i !== len; i += !isGet ? 1 : -1) {\r\n const cord = scords[i];\r\n if ((cord as any)._dead) continue;\r\n const response: any = isGet ? (cord as GetterRecord<T>).cb(value, payload as Payload<T>) : isSet ? (cord as SetterRecord<T>).cb(value, terminated, payload as Payload<T>) : (cord as DeleterRecord<T>).cb(terminated, payload as Payload<T>); // all will mediate\r\n if (isGet || !(terminated ||= payload.terminated = response === TERMINATOR)) value = response as PathValue<T, P>;\r\n if (cord.once) killed = (cord as any)._dead = true;\r\n }\r\n if (killed) for (let i = cords.length - 1; i >= 0; i--) if ((cords[i] as any)._dead) cords.splice(i, 1), !cords.length && mediators!.delete(path);\r\n return value; // set - FIFO, get - LIFO\r\n }\r\n\r\n public notify<P extends Paths<T>>(path: P, payload: Payload<T, P>): void {\r\n if (this.watchers) {\r\n const wildcords = this.watchers.get(\"*\") as Array<WatcherRecord<T, \"*\">> | undefined,\r\n wildscords = wildcords?.slice(),\r\n cords = this.watchers.get(path) as Array<WatcherRecord<T, P>> | undefined,\r\n scords = cords?.slice();\r\n if (cords) {\r\n let killed = false;\r\n for (let i = 0, len = scords!.length; i < len; i++) {\r\n const cord = scords![i];\r\n if ((cord as any)._dead) continue;\r\n cord.cb(payload.target.value as PathValue<T, P>, payload); // watchers do not terminate as they're after the OP\r\n if (cord.once) killed = (cord as any)._dead = true;\r\n }\r\n if (killed) for (let i = cords!.length - 1; i >= 0; i--) if ((cords![i] as any)._dead) cords!.splice(i, 1), !cords!.length && this.watchers!.delete(path);\r\n }\r\n if (wildcords) {\r\n let killed = false;\r\n for (let i = 0, len = wildscords!.length; i < len; i++) {\r\n const wildcord = wildscords![i];\r\n if ((wildcord as any)._dead) continue;\r\n wildcord.cb(payload.target.value, payload as Payload<T, \"*\">);\r\n if (wildcord.once) killed = (wildcord as any)._dead = true;\r\n }\r\n if (killed) for (let i = wildcords!.length - 1; i >= 0; i--) if ((wildcords![i] as any)._dead) wildcords!.splice(i, 1), !wildcords!.length && this.watchers!.delete(\"*\");\r\n }\r\n }\r\n this.listeners && this.schedule(path, payload); // batch is undefined till listeners are available\r\n }\r\n protected schedule<P extends Paths<T>>(path: P, payload: Payload<T, P>): void {\r\n this.batch ??= new Map();\r\n this.batch.set(path, payload as Payload<T>), !this.isBatching && this.initBatching();\r\n }\r\n protected initBatching(): void {\r\n (this.isBatching = true), this.config.batchingFunction!(() => this.flush()); // do the `!isBatching` check outisde so the func cost is only on first batch\r\n }\r\n protected flush(): void {\r\n (this.isBatching = false), this.batch && this.tick(this.batch.keys()); // not slowing dis down with a `?.size` since it's like always filled, rather pay the empty iterator cost once when empty\r\n if (this.queue?.size) for (const task of this.queue) task(), this.queue.delete(task); // you can still stall with an empty batch, slower `?.`, almost always empty; this or empty Iterator cost\r\n }\r\n\r\n public wave<P extends Paths<T>>(path: P, payload: Payload<T, P>): void {\r\n const e = new ReactorEvent<T>(payload as Payload<T>) as REvent<T>, // a wave is started forly when really necessary all things considered\r\n chain = getTrailRecords(this.core, path); // either build a large array of refs to climb back up or have to derive each step\r\n // 1: CAPTURE phase (core -> parent) - intent owners reject here, capture should preferably be used to reject\r\n if (e.captures) {\r\n e.eventPhase = ReactorEvent.CAPTURING_PHASE;\r\n for (let i = 0; i <= chain.length - 2; i++) {\r\n if (e.propagationStopped) break;\r\n this.fire(chain[i], e, true);\r\n }\r\n if (e.propagationStopped) return;\r\n }\r\n // 2: TARGET phase (leaf)\r\n e.eventPhase = ReactorEvent.AT_TARGET;\r\n this.fire(chain[chain.length - 1], e, true); // CAPTURE fires\r\n !e.immediatePropagationStopped && this.fire(chain[chain.length - 1], e, false); // BUBBLE fires\r\n // 3: BUBBLE phase (parent -> core) - listeners always see it, rejection is just a flag for smart optimists\r\n if (e.bubbles) {\r\n e.eventPhase = ReactorEvent.BUBBLING_PHASE;\r\n for (let i = chain.length - 2; i >= 0; i--) {\r\n if (e.propagationStopped) break;\r\n this.fire(chain[i], e, false);\r\n }\r\n // if (e.propagationStopped) return;\r\n }\r\n // if (e.rejected) return; // 4: DEFAULT phase if ever, whole architecture can be reimagined: `State vs Intent` is my view; reactor is still dumb\r\n }\r\n protected fire([path, object, value]: ReturnType<typeof getTrailRecords<T>>[number], e: REvent<T>, isCapture: boolean, cords = this.listeners!.get(path)): void {\r\n if (!cords) return; // not doing `.listeners?.` in param cuz this is called in a loop and internally, listeners are defined before this is touched\r\n e.type = path !== e.target.path ? \"update\" : e.staticType; // `update` for ancestors\r\n e.currentTarget = { path, value, oldValue: e.type !== \"update\" ? e.target.oldValue : undefined, key: (e.type !== \"update\" ? path : path.slice(path.lastIndexOf(\".\") + 1) || \"\") as PathKey<T>, hadKey: e.type !== \"update\" ? e.target.hadKey : true, object: object as PathBranchValue<T> };\r\n let killed = false;\r\n const scords = cords.slice();\r\n for (let i = 0, len = scords.length, tDepth; i < len; i++) {\r\n const cord = scords[i];\r\n if (e.immediatePropagationStopped) break;\r\n if (cord.capture !== isCapture || (cord as any)._dead) continue;\r\n if (cord.depth !== undefined) {\r\n tDepth ??= getDepth(e.target.path); // calc only if ever needed\r\n if (tDepth > cord.lDepth! + cord.depth!) continue;\r\n }\r\n cord.cb(e);\r\n if (cord.once) killed = (cord as any)._dead = true;\r\n }\r\n if (killed) for (let i = cords.length - 1; i >= 0; i--) if ((cords[i] as any)._dead) cords.splice(i, 1), !cords.length && this.listeners!.delete(path);\r\n }\r\n\r\n /**\r\n * Flushes queued listener payloads.\r\n * @param paths Optional path(s) to flush.\r\n * @example\r\n * rtr.tick(); // to flush all paths in batch or pass \"*\" wildcard\r\n * @example\r\n * rtr.tick(\"user.profile.name\");\r\n */\r\n public tick(paths?: WildPaths<T> | Iterable<Paths<T>>): void {\r\n if (!paths || paths === \"*\") return this.flush(); // we are sure listeners are defined before waving since batch depends on them\r\n if (\"string\" === typeof paths) {\r\n const payload = this.batch?.get(paths) as Payload<T, Paths<T>> | undefined;\r\n payload && (this.batch!.delete(paths), this.wave(paths, payload));\r\n } else\r\n for (const path of paths) {\r\n const payload = this.batch!.get(path) as Payload<T, Paths<T>> | undefined; // `!` cuz tick is only called inside the class with iterable paths when batch is defined\r\n payload && (this.batch!.delete(path), this.wave(path, payload));\r\n }\r\n }\r\n /**\r\n * Queues a task to run after the current flush cycle.\r\n * @param task Task callback.\r\n * @example\r\n * const task = () => console.log(\"after flush\");\r\n * rtr.stall(task);\r\n */\r\n public stall(task: () => any): void {\r\n (this.queue ??= new Set()).add(task), !this.isBatching && this.initBatching();\r\n }\r\n /**\r\n * Removes a queued post-flush task.\r\n * @param task Task callback.\r\n * @returns `undefined` when no queue, `false` when queue exist but callback is not found, `true` when removed.\r\n */\r\n public nostall(task: () => any): boolean | undefined {\r\n return this.queue?.delete(task);\r\n }\r\n\r\n public context<P extends WildPaths<T>>(path: P): Target<T, P> {\r\n const last = path.lastIndexOf(\".\"),\r\n key = (path.slice(last + 1) || \"\") as PathKey<T, P>,\r\n object = (last === -1 ? this.core : getPath(this.core, path.slice(0, last) as Paths<T>)) as PathBranchValue<T, P>;\r\n return { path, value: getPath(this.core, path), key, hadKey: !object || key in object, object };\r\n }\r\n protected binded<Cb>(cord: GetterRecord<T> | SetterRecord<T> | DeleterRecord<T> | WatcherRecord<T> | ListenerRecord<T>, sig?: AbortSignal): Cb {\r\n if (sig) sig.aborted ? cord.clup() : sig.addEventListener(\"abort\", cord.clup, { once: true }); // once incase spec changes, memory leaks too\r\n return (cord.sclup = !sig || sig.aborted ? NOOP : () => sig.removeEventListener(\"abort\", cord.clup)), cord.clup as Cb;\r\n }\r\n protected cloned<O>(target: O, raw: boolean, seen = new WeakMap()): O {\r\n if (!target || \"object\" !== typeof target) return target;\r\n const obj = (target as any)[RAW] || target, // escape hatch from traps\r\n cloned = seen.get(obj);\r\n if (cloned) return cloned;\r\n if (!canHandle(obj, this.config, false)) return obj; // no circular references\r\n const version = obj[VERSION] || 0,\r\n cached = !raw && this.config.smartCloning && (this.snapCache ??= new WeakMap()).get(obj);\r\n if (cached && obj[SSVERSION] === version) return cached;\r\n const clone = !raw ? (this.config.preserveContext ? Object.create(Object.getPrototypeOf(obj)) : Array.isArray(obj) ? [] : {}) : obj;\r\n seen.set(obj, clone);\r\n const keys = this.config.preserveContext ? Reflect.ownKeys(obj) : Object.keys(obj);\r\n for (let i = 0, len = keys.length; i < len; i++) {\r\n const key = keys[i];\r\n try {\r\n clone[key] = this.cloned(obj[key], raw, seen);\r\n } catch (e) {\r\n if (e instanceof RangeError) throw e; // internals can skip, not users\r\n } // call a spade a spade and just skip, no descriptor gymanstics\r\n }\r\n if (!raw && this.config.smartCloning) this.snapCache!.set(obj, clone), (obj[SSVERSION] = version);\r\n return clone;\r\n }\r\n\r\n protected onSync<P extends WildPaths<T>>(key: \"get\" | \"set\" | \"delete\" | \"watch\", path: P, cb: any, opts: SyncOptions | undefined, onInit: (type?: \"set\" | \"delete\") => void = NOOP): () => boolean | undefined {\r\n const { once = false, signal, lazy = false, init = false, initType } = parseEvtOpts(opts, EVT_OPTS.MEDIATOR),\r\n store = (this[`${key}${key.endsWith(\"t\") ? \"t\" : \"\"}ers` as \"getters\"] ??= new Map()) as Map<WildPaths<T>, Array<GetterRecord<T> | SetterRecord<T> | DeleterRecord<T> | WatcherRecord<T>>>;\r\n let cords = store.get(path),\r\n cord: GetterRecord<T> | SetterRecord<T> | DeleterRecord<T> | WatcherRecord<T> | undefined;\r\n if (cords)\r\n for (let i = 0, len = cords.length; i < len; i++) {\r\n const excord = cords[i];\r\n if (Object.is(excord.cb, cb)) {\r\n cord = excord;\r\n break;\r\n }\r\n }\r\n if (cord) return cord.clup;\r\n let task: () => void;\r\n cord = { cb, once, clup: () => (lazy && this.nostall(task), this[`no${key}` as \"noget\"](path, cb)) };\r\n task = () => (cords ?? (store.set(path, (cords = [])), cords)).push(cord);\r\n lazy ? this.stall(task) : task(), init && (init !== \"auto\" || hasPath(this.core, path)) && onInit(initType);\r\n return this.binded(cord!, signal);\r\n } // add synchronous\r\n protected offSync<P extends WildPaths<T>>(store: Map<WildPaths<T>, any[]> | undefined, path: P, cb: any): boolean | undefined {\r\n const cords = store?.get(path);\r\n if (!cords) return undefined;\r\n for (let i = 0, len = cords.length; i < len; i++) {\r\n const cord = cords[i];\r\n if (Object.is(cord.cb, cb)) return cord.sclup!(), cords.splice(i, 1), !cords.length && store!.delete(path), ((cord as any)._dead = true);\r\n }\r\n return false;\r\n } // remove synchronous\r\n\r\n /**\r\n * Registers a get mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback.\r\n * @param options Sync options.\r\n * @returns Cleanup function.\r\n * @example\r\n * const cleanup = rtr.get(\"user.name\", (value) => String(value).trim());\r\n */\r\n public get<P extends WildPaths<T>>(path: P, callback: Getter<T, P>, options?: SyncOptions): GetterRecord<T>[\"clup\"] {\r\n return this.onSync(\"get\", path, callback, options, () => getPath(this.core, path));\r\n }\r\n /** Registers a get mediator for a path that only triggers once. */\r\n public gonce<P extends WildPaths<T>>(path: P, callback: Getter<T, P>, options?: SyncOptions): GetterRecord<T>[\"clup\"] {\r\n return this.get<P>(path, callback, { ...parseEvtOpts(options, EVT_OPTS.MEDIATOR), once: true });\r\n }\r\n /**\r\n * Removes a get mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback to remove.\r\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\r\n */\r\n public noget<P extends WildPaths<T>>(path: P, callback: Getter<T, P>): boolean | undefined {\r\n return this.offSync(this.getters, path, callback);\r\n }\r\n\r\n /**\r\n * Registers a set mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback.\r\n * @param options Sync options.\r\n * @returns Cleanup function.\r\n * @example\r\n * rtr.set(\"user.name\", (value) => String(value).trim());\r\n */\r\n public set<P extends WildPaths<T>>(path: P, callback: Setter<T, P>, options?: SyncOptions): SetterRecord<T>[\"clup\"] {\r\n return this.onSync(\"set\", path, callback, options, () => (force(() => setPath(this.core, path, getPath(this.core, path))), this.tick(path)));\r\n }\r\n /** Registers a set mediator for a path that only triggers once. */\r\n public sonce<P extends WildPaths<T>>(path: P, callback: Setter<T, P>, options?: SyncOptions): SetterRecord<T>[\"clup\"] {\r\n return this.set<P>(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.MEDIATOR), { once: true }));\r\n }\r\n /**\r\n * Removes a set mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback to remove.\r\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\r\n */\r\n public noset<P extends WildPaths<T>>(path: P, callback: Setter<T, P>): boolean | undefined {\r\n return this.offSync(this.setters, path, callback);\r\n }\r\n\r\n /**\r\n * Registers a delete mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback.\r\n * @param options Sync options.\r\n * @returns Cleanup function.\r\n * @example\r\n * rtr.delete(\"cache.temp\", () => TERMINATOR);\r\n */\r\n public delete<P extends WildPaths<T>>(path: P, callback: Deleter<T, P>, options?: SyncOptions): DeleterRecord<T>[\"clup\"] {\r\n return this.onSync(\"delete\", path, callback, options, () => deletePath(this.core, path));\r\n }\r\n /** Registers a delete mediator for a path that only triggers once. */\r\n public donce<P extends WildPaths<T>>(path: P, callback: Deleter<T, P>, options?: SyncOptions): DeleterRecord<T>[\"clup\"] {\r\n return this.delete<P>(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.MEDIATOR), { once: true }));\r\n }\r\n /**\r\n * Removes a delete mediator for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Mediator callback to remove.\r\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\r\n */\r\n public nodelete<P extends WildPaths<T>>(path: P, callback: Deleter<T, P>): boolean | undefined {\r\n return this.offSync(this.deleters, path, callback);\r\n }\r\n\r\n /**\r\n * Registers a watcher for a path.\r\n * Watch callbacks run synchronously with the operation, use leaf paths for reliability as it sees exact sets; no bubbling here.\r\n * @param path Path or wildcard path.\r\n * @param callback Watch callback.\r\n * @param options Sync options.\r\n * @returns Cleanup function.\r\n * @example\r\n * const cleanup = rtr.watch(\"user.name\", (value) => console.log(value));\r\n */\r\n public watch<P extends WildPaths<T>>(path: P, callback: Watcher<T, P>, options?: SyncOptions): WatcherRecord<T>[\"clup\"] {\r\n return this.onSync(\"watch\", path, callback, options, (type) => (!type ? ((target) => callback(target.value, { type: \"init\", target, currentTarget: target, root: this.core, rejectable: false } as Payload<T, P>))(this.context(path)) : (force(() => (type === \"set\" ? setPath(this.core, path, getPath(this.core, path)) : deletePath(this.core, path))), this.tick(path)))); // no tick since sync\r\n }\r\n /** Registers a watcher for a path that only triggers once. */\r\n public wonce<P extends WildPaths<T>>(path: P, callback: Watcher<T, P>, options?: SyncOptions): WatcherRecord<T>[\"clup\"] {\r\n return this.watch<P>(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.MEDIATOR), { once: true }));\r\n }\r\n /**\r\n * Removes a watcher for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Watch callback to remove.\r\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\r\n */\r\n public nowatch<P extends WildPaths<T>>(path: P, callback: Watcher<T, P>): boolean | undefined {\r\n return this.offSync(this.watchers, path, callback);\r\n }\r\n\r\n /**\r\n * Registers an event listener for a path.\r\n * `on` listeners are batched and notified asynchronously by default e.g. `queueMicrotask()`.\r\n * @param path Path or wildcard path.\r\n * @param callback Listener callback.\r\n * @param options Listener options.\r\n * @returns Cleanup function.\r\n * @example\r\n * const cleanup = rtr.on(\"user.name\", (e) => console.log(e.type, e.path));\r\n */\r\n public on<P extends WildPaths<T>, const D extends number = MaxDepth>(path: P, callback: Listener<T, P, D>, options?: ListenerOptions<D>): ListenerRecord<T, P, D>[\"clup\"] {\r\n this.listeners ??= new Map();\r\n const { capture = false, once = false, signal, init = false, initType: type, depth } = parseEvtOpts(options, EVT_OPTS.LISTENER);\r\n let cords = this.listeners.get(path),\r\n cord: ListenerRecord<T> | undefined;\r\n if (cords)\r\n for (let i = 0, len = cords.length; i < len; i++) {\r\n const excord = cords[i];\r\n if (Object.is(excord.cb, callback) && capture === excord.capture) {\r\n cord = excord;\r\n break;\r\n }\r\n }\r\n if (cord) return cord.clup;\r\n cord = { cb: callback as Listener<T>, capture, depth: depth as MaxDepth, once, clup: () => this.off<P, D>(path, callback, options), lDepth: depth !== undefined ? getDepth(path) : depth };\r\n (cords ?? (this.listeners.set(path, (cords = [])), cords)).push(cord!);\r\n init && (init !== \"auto\" || hasPath(this.core, path)) && (!type ? ((target) => callback(new ReactorEvent<T, P>({ type: \"init\", target, currentTarget: target, root: this.core, reactor: this, rejectable: false }) as REvent<T, P, D>))(this.context(path)) : (force(() => (type === \"set\" ? setPath(this.core, path, getPath(this.core, path)) : deletePath(this.core, path))), this.tick(path))); // tick since async\r\n return this.binded(cord!, signal);\r\n }\r\n /** Registers an event listener for a path that only triggers once. */\r\n public once<P extends WildPaths<T>, const D extends number = MaxDepth>(path: P, callback: Listener<T, P, D>, options?: ListenerOptions<D>): ListenerRecord<T, P, D>[\"clup\"] {\r\n return this.on<P, D>(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.LISTENER), { once: true }));\r\n }\r\n /**\r\n * Removes an event listener for a path.\r\n * @param path Path or wildcard path.\r\n * @param callback Listener callback to remove.\r\n * @param options Listener options used during registration.\r\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\r\n * @example\r\n * const cb = (e: REvent<T>) => console.log(e.path);\r\n * rtr.on(\"user.name\", cb);\r\n * rtr.off(\"user.name\", cb);\r\n */\r\n public off<P extends WildPaths<T>, const D extends number = MaxDepth>(path: P, callback: Listener<T, P, D>, options?: ListenerOptions<D>): boolean | undefined {\r\n const cords = this.listeners?.get(path);\r\n if (!cords) return undefined;\r\n const { capture = false } = parseEvtOpts(options, EVT_OPTS.LISTENER);\r\n for (let i = 0, len = cords.length; i < len; i++) {\r\n const cord = cords[i];\r\n if (Object.is(cord.cb, callback) && cord.capture === capture) return cord.sclup!(), cords.splice(i, 1), !cords.length && this.listeners!.delete(path), ((cord as any)._dead = true);\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Creates a snapshot; possibly clone of state (or a state branch).\r\n * You could alternatively use or serialize your proxied state \"as is\" except the environment demands no proxies or new references.\r\n * @param raw Use raw (deep unproxied & uncloned) version of branch, defaults to `true` if `config.smartCloning: false`.\r\n * @param branch Specific branch to clone.\r\n * @returns Snapshot deep or smart (structurally shared) clone.\r\n * @example\r\n * const snap = rtr.snapshot();\r\n * @example\r\n * const snap = rtr.snapshot(false, rtr.core.history.past);\r\n */\r\n public snapshot(raw?: boolean): T;\r\n public snapshot<B>(raw?: boolean, branch?: B): B;\r\n public snapshot(raw = !this.config.smartCloning, branch?: any) {\r\n return this.cloned(arguments.length < 2 ? this.core : branch, raw); // raw is true if not smart cloning(structural sharing) for better vanilla performace except explicitly changed\r\n }\r\n\r\n /**\r\n * Installs a module instance.\r\n * @param target Module instance.\r\n * @param id Optional identification tag for this instance in the module.\r\n * @returns Current `Reactor` instance for fluent chaining.\r\n */\r\n public use(target: ReactorModule<T>, id?: ReactorModuleId): this {\r\n return (this.modules ??= new Set()).add(target.setup(this, id)), this;\r\n }\r\n /** Resets this reactor instance to its initial state. */\r\n public reset(): void {\r\n this.getters?.clear(), this.setters?.clear(), this.deleters?.clear(), this.watchers?.clear(), this.listeners?.clear();\r\n this.batch?.clear(), this.queue?.clear(), (this.isBatching = false);\r\n }\r\n public destroy(): void {\r\n if (this.modules) for (const mdle of this.modules) mdle.destroy();\r\n this.reset(), nuke(this);\r\n }\r\n\r\n public get canLog(): boolean {\r\n return this.log !== NOOP;\r\n }\r\n public set canLog(value: boolean) {\r\n this.log = value ? RTR_LOG : NOOP;\r\n }\r\n public get canLineageTrace() {\r\n return this.config.lineageTracing && this.config.referenceTracking;\r\n }\r\n public get canSmartClone() {\r\n return this.config.smartCloning && this.config.referenceTracking;\r\n }\r\n}\r\n","import \"./types/global.d.ts\";\r\n\r\nglobalThis.sia ??= {}; // bundler will handle the rest\r\n\r\nexport { CTX, RAW, INERTIA, REJECTABLE, INDIFFABLE, TERMINATOR, VERSION, SSVERSION, RTR_BATCH, RTR_LOG, EVT_OPTS, NIL, NOOP } from \"@core/consts\";\r\n\r\nexport { Reactor } from \"@core/reactor\";\r\n\r\nexport { ReactorEvent } from \"@core/event\";\r\n\r\nexport { methods, reactive, inert, live, isInert, intent, state, isIntent, volatile, stable, isVolatile, getRaw, getVersion, getSnapshotVersion, getReactor } from \"@core/mixins\";\r\n\r\nexport type { Inert, Live, Intent, State, Volatile, Stable, Target, Payload, ReactorMeta, BasePayload, DirectPayload, UpdatePayload, REvent, Getter, Setter, Deleter, Watcher, Listener, GetterRecord, SetterRecord, DeleterRecord, WatcherRecord, ListenerRecord, SyncOptionsTuple, SyncOptions, ListenerOptionsTuple, ListenerOptions, EffectOptions, ReactorBuild } from \"@defs/reactor\";\r\n\r\nexport type { APIKey, Reactive, Pure, ReactivePreferences } from \"@core/mixins\";\r\n\r\nexport type { Primitive, NoTraverse, Paths, WildPaths, ChildPaths, PathKey, StrictPathKey, PathValue, PathBranchValue, Unflatten, PathDepth, PathLeaf, PathBranch, UnionToIntersection, AddDepth, SubtractDepth, DeepKeys, DeepMerge, DeepPartial, DeepRequired, DeepReadonly, DepthConfig, MaxDepth, PrevDepth, NextDepth } from \"@defs/obj\";\r\n","export { arrRegex, isObj, isPOJO, canHandle, setPath, getPath, deletePath, hasPath, parsePathObj, matchPaths, getDepth, parseEvtOpts, type FanoutOptionsTuple, fanout, fanoutOptsArr, force, mergeObjs, getTrailRecords, deepClone, nuke, withMeta, resetMeta, isEmpty, getPaths, isLeafPath, createReactorSync } from \"@utils/obj\";\r\n\r\nexport { clamp } from \"@utils/num\";\r\n\r\nexport { setTimeout, setInterval, requestAnimationFrame } from \"@utils/fn\";\r\n\r\nexport { onAllMethods, bindAllMethods, guardAllMethods, guardMethod } from \"@utils/methd\";\r\n\r\nexport { type KeysSettings, type KeyStruct, KEYS_BLOCKS, KEYS_MODS, KEYS_CMODS, KEYS_ALIAS, parseKeyCombo, stringifyKeyEvent, cleanKeyCombo, matchKeys, getTermsForKey, keyEventAllowed, formatKeyTooltip, formatKeyShortcutsTooltip, parseForARIAKS } from \"@utils/keys\";\r\n\r\nexport { createEl, assignEl, getActiveEl } from \"@utils/dom\";\r\n","// Validators\n\nexport function clamp(min = 0, val: number, max = Infinity) {\n return Math.min(Math.max(val, min), max);\n}","// ============ Timer Helpers ============\n\n// 3rd & 4th param are consumed if signal and window are used respectively\n/**\n * setTimeout wrapper with optional AbortSignal and Window overrides.\n * @param handler Timeout callback or handler string.\n * @param timeout Delay in milliseconds.\n * @param args Optional args, where first may be AbortSignal and second may be Window to be consumed for enhancements.\n * @returns Timer id, or -1 when signal is already aborted.\n */\nexport function setTimeout(handler: TimerHandler, timeout?: number, ...args: any[]) {\n const sig = args[0] instanceof AbortSignal ? args.shift() : undefined;\n if (sig?.aborted) return -1;\n const win: Window = args[0] instanceof Window ? args.shift() : window;\n if (!sig) return win.setTimeout(handler, timeout, ...args);\n const id = win.setTimeout(() => (sig.removeEventListener(\"abort\", kill), \"string\" === typeof handler ? new Function(handler) : handler(...args)), timeout),\n kill = () => win.clearTimeout(id);\n return sig.addEventListener(\"abort\", kill, { once: true }), id;\n}\n\n/**\n * setInterval wrapper with optional AbortSignal and Window overrides.\n * @param handler Interval callback or handler string.\n * @param timeout Interval delay in milliseconds.\n * @param args Optional args, where first may be AbortSignal and second may be Window to be consumed for enhancements.\n * @returns Interval id, or -1 when signal is already aborted.\n */\nexport function setInterval(handler: TimerHandler, timeout?: number, ...args: any[]) {\n const sig = args[0] instanceof AbortSignal ? args.shift() : undefined;\n if (sig?.aborted) return -1;\n const win: Window = args[0] instanceof Window ? args.shift() : window,\n id = win.setInterval(handler, timeout, ...args);\n return sig?.addEventListener(\"abort\", () => win.clearInterval(id), { once: true }), id;\n}\n\n/**\n * requestAnimationFrame wrapper with optional AbortSignal and Window overrides.\n * @param callback Frame callback.\n * @param sig Optional AbortSignal to cancel scheduled frame.\n * @param win Optional Window override.\n * @returns Frame request id, or -1 when signal is already aborted.\n */\nexport function requestAnimationFrame(callback: FrameRequestCallback, sig?: AbortSignal, win = window) {\n if (sig?.aborted) return -1;\n if (!sig) return win.requestAnimationFrame(callback);\n const id = win.requestAnimationFrame((t) => (sig.removeEventListener(\"abort\", kill), callback(t))),\n kill = () => win.cancelAnimationFrame(id);\n return sig.addEventListener(\"abort\", kill, { once: true }), id;\n}\n","// \"THE METHODIST\": A mixin method expert often used to manipulate or bind all methods of a class to an instance\n\n/**\n * Walks an instance and its prototype chain, invoking a callback for each callable method.\n * @param owner Instance whose methods are inspected.\n * @param callback Invoked for each method name found.\n * @param skipOwn Skips owner-level methods when traversing own or parent prototypes.\n * @param nested Internal traversal flag, Override to `true` to avoid skipping own methods when `skipOwn` is `true`.\n */\nexport function onAllMethods(owner: any, callback: (method: string, owner: any) => void, skipOwn = true, nested = false): void {\n let proto = owner;\n while (proto && proto !== Object.prototype) {\n for (const method of Object.getOwnPropertyNames(proto)) {\n if (method === \"constructor\") continue;\n if (nested && skipOwn && Object.prototype.hasOwnProperty.call(owner, method)) continue;\n if (\"function\" === typeof Object.getOwnPropertyDescriptor(proto, method)?.value) callback(method, owner);\n }\n (proto = Object.getPrototypeOf(proto)), (nested = true);\n }\n}\n\n/**\n * Binds all discovered methods on an owner to the owner instance.\n * @param owner Instance whose methods should be bound.\n */\nexport function bindAllMethods(owner: any): void {\n onAllMethods(owner, (method: string, owner: any) => {\n owner[method] = owner[method].bind(owner);\n });\n}\n\n/**\n * Wraps all discovered methods in a guard function, optionally binding before wrapping.\n * @param owner Instance whose methods should be wrapped.\n * @param guardFn Wrapper factory used for each method.\n * @param bound Binds methods to owner before wrapping when true.\n */\nexport function guardAllMethods(owner: any, guardFn: (fn: Function) => Function = guardMethod, bound = true): void {\n onAllMethods(owner, (method: string, owner: any) => {\n owner[method] = guardFn(bound ? owner[method].bind(owner) : owner[method]);\n });\n}\n\n/**\n * Wraps a function with try/catch and async rejection handling.\n * @template T Function type to preserve.\n * @param fn Function to wrap.\n * @param onError Error handler for sync throws and async rejections.\n * @returns Guarded function with the same call signature.\n */\nexport function guardMethod<T extends Function>(fn: T, onError: (e: any) => void = (e) => console.error(e)): T {\n return ((...args: any[]) => {\n try {\n const result = fn(...args);\n return result instanceof Promise ? result.catch((e) => onError(e)) : result;\n } catch (e) {\n onError(e);\n }\n }) as unknown as T;\n}\n","// Types\ntype Dataset = Record<string, string | number>;\ntype Style = Partial<CSSStyleDeclaration>;\n\n// Element Factory\n\n/**\n * Creates an HTML element with the specified tag and properties.\n * @param tag The tag name of the element to create.\n * @param props Optional properties to set on the element.\n * @param dataset Optional dataset attributes for the element.\n * @param styles Optional CSS styles for the element.\n * @returns The created HTML element.\n */\nexport function createEl<K extends keyof HTMLElementTagNameMap>(tag: K, props?: Partial<HTMLElementTagNameMap[K]>, dataset?: Dataset, styles?: Style): HTMLElementTagNameMap[K];\nexport function createEl(tag: string, props?: Partial<HTMLElement>, dataset?: Dataset, styles?: Style): HTMLElement | null;\nexport function createEl(tag: string, props?: Record<string, unknown>, dataset?: Dataset, styles?: Style, el = tag ? document?.createElement(tag) : null): HTMLElement | null {\n return assignEl(el, props, dataset, styles);\n}\n\n/**\n * Assigns properties, dataset attributes, and styles to an HTML element.\n * @param el The HTML element to assign properties to.\n * @param props Optional properties to set on the element.\n * @param dataset Optional dataset attributes for the element.\n * @param styles Optional CSS styles for the element.\n * @return The modified HTML element to allow signature swaps with `createEl()`.\n */\nexport function assignEl<El extends HTMLElement>(el?: El | null, props?: Partial<El>, dataset?: Dataset, styles?: Style, nodiff?: boolean): El | null;\nexport function assignEl<El extends HTMLElement>(el?: El | null, props?: Partial<El>, dataset?: Dataset, styles?: Style, nodiff?: boolean): El | null;\nexport function assignEl(el?: HTMLElement | null, props?: Record<string, unknown>, dataset?: Dataset, styles?: Style, nodiff = true): HTMLElement | null {\n if (!el) return null;\n if (props) for (const k of Object.keys(props)) if (props[k] !== undefined) if (nodiff || (el as any)[k] !== props[k]) (el as unknown as Record<string, unknown>)[k] = props[k];\n if (dataset) for (const k of Object.keys(dataset)) if (dataset[k] !== undefined) if (nodiff || (el.dataset as any)[k] !== dataset[k]) (el.dataset as DOMStringMap)[k] = String(dataset[k]);\n if (styles) for (const k of Object.keys(styles)) if (styles[k as keyof Style] !== undefined) if (nodiff || (el.style as any)[k] !== styles[k as any]) (el.style as unknown as Record<string, unknown>)[k] = styles[k as keyof Style];\n return el;\n}\n\n/** Get the currently active element, traversing into shadow roots if necessary.\n * @param root Root node to start searching from, defaults to the main document.\n * @param noBody If `true`, will return `null` if the active element is the body element.\n * @returns The active element or null if none found.\n */\nexport function getActiveEl(root?: Document | ShadowRoot | null, noBody = true): Element | null {\n const activeEl = (root ?? document).activeElement;\n return !activeEl || (noBody && activeEl === document.body) ? null : activeEl.shadowRoot ? getActiveEl(activeEl.shadowRoot) : activeEl;\n}\n","import { getActiveEl } from \"./dom\";\n\n/** Keyboard matching configuration used by utility helpers. */\nexport interface KeysSettings {\n /** Disables key handling when true. */\n disabled?: boolean;\n /** Combos that should call `preventDefault` when matched. */\n overrides?: string[];\n /** Action map from action id to combo or combo list. */\n shortcuts?: Record<string, string | string[]>;\n /** Combos that should be rejected immediately. */\n blocks?: string[];\n /** Enables exact combo matching instead of subset matching. */\n strictMatch?: boolean;\n /** Ranks shortcut matches by exactness before insertion order. Enabled by default. */\n rankedMatch?: boolean;\n /** Combos that are allowed as pass-through key actions. */\n whitelist?: string[];\n /** Actions permitted to match base keys even when heavy modifiers are held. */\n moddedlist?: string[];\n}\n\n/** Canonical key-combo structure used by parser and serializer helpers. */\nexport type KeyStruct = Record<\"ctrlKey\" | \"shiftKey\" | \"altKey\" | \"metaKey\", boolean> & { key: string };\n\n/**\n * Global registry of native browser hotkeys and shortcut combinations, pass as `.blocks` in `Settings` config for `keyEventAllowed()` for better UX.\n * Used by the system to prevent default browser behaviors (e.g., zooming, tab switching, refreshing, or opening dev tools) inside the listener context.\n */\n// prettier-ignore\nexport const KEYS_BLOCKS = [\"Ctrl+Tab\", \"Ctrl+Shift+Tab\", \"Ctrl+PageUp\", \"Ctrl+PageDown\", \"Cmd+Option+ArrowRight\", \"Cmd+Option+ArrowLeft\", \"Ctrl+1\", \"Ctrl+2\", \"Ctrl+3\", \"Ctrl+4\", \"Ctrl+5\", \"Ctrl+6\", \"Ctrl+7\", \"Ctrl+8\", \"Ctrl+9\", \"Cmd+1\", \"Cmd+2\", \"Cmd+3\", \"Cmd+4\", \"Cmd+5\", \"Cmd+6\", \"Cmd+7\", \"Cmd+8\", \"Cmd+9\", \"Alt+ArrowLeft\", \"Alt+ArrowRight\", \"Cmd+ArrowLeft\", \"Cmd+ArrowRight\", \"Ctrl+r\", \"Ctrl+Shift+r\", \"F5\", \"Shift+F5\", \"Cmd+r\", \"Cmd+Shift+r\", \"Ctrl+h\", \"Ctrl+j\", \"Ctrl+d\", \"Ctrl+f\", \"Cmd+y\", \"Cmd+Option+b\", \"Cmd+d\", \"Cmd+f\", \"Ctrl+Shift+i\", \"Ctrl+Shift+j\", \"Ctrl+Shift+c\", \"Ctrl+u\", \"F12\", \"Cmd+Option+i\", \"Cmd+Option+j\", \"Cmd+Option+c\", \"Cmd+Option+u\", \"Ctrl+=\", \"Ctrl+-\", \"Ctrl+0\", \"Cmd+=\", \"Cmd+-\", \"Cmd+0\", \"Ctrl+p\", \"Ctrl+s\", \"Ctrl+o\", \"Cmd+p\", \"Cmd+s\", \"Cmd+o\"], // JIT eats loops :)\n KEYS_MODS = [\"ctrl\", \"shift\", \"alt\", \"meta\"] as const,\n KEYS_CMODS = [\"ctrl\", \"alt\", \"meta\"] as const,\n KEYS_ALIAS: Record<string, string> = { cmd: \"meta\", space: \" \" };\n\n/**\n * Parses a combo string into modifier flags + terminal key.\n * @param combo Key combo string (for example: `\"ctrl+shift+z\"`).\n * @returns Parsed key structure with boolean modifier flags.\n * @example\n * parseKeyCombo(\"ctrl+shift+z\")\n * // => { ctrlKey: true, shiftKey: true, altKey: false, metaKey: false, key: \"z\" }\n */\nexport function parseKeyCombo(combo: string): KeyStruct {\n const parts = cleanKeyCombo(combo).toLowerCase().split(\"+\");\n return { ctrlKey: parts.includes(\"ctrl\"), shiftKey: parts.includes(\"shift\"), altKey: parts.includes(\"alt\"), metaKey: parts.includes(\"meta\") || parts.includes(\"cmd\"), key: parts.find((p) => !/^(ctrl|shift|alt|meta|cmd)$/.test(p)) || \"\" };\n}\n\n/**\n * Serializes a key structure or keyboard event into canonical combo form.\n * @param e KeyboardEvent-like object or parsed key structure.\n * @returns Canonical combo string (for example: `\"ctrl+shift+z\"`).\n */\nexport function stringifyKeyEvent(e: KeyStruct | KeyboardEvent): string {\n const parts: string[] = [];\n e.ctrlKey && parts.push(\"ctrl\"), e.altKey && parts.push(\"alt\"), e.shiftKey && parts.push(\"shift\"), e.metaKey && parts.push(\"meta\"), parts.push(e.key?.toLowerCase() ?? \"\");\n return parts.join(\"+\");\n}\n\n/**\n * Normalizes combo(s) by:\n * - lowercasing,\n * - aliasing `cmd -> meta`, `space -> \" \"`,\n * - preserving literal space/plus edge cases,\n * - sorting modifiers as `ctrl, alt, shift, meta`.\n * @param combo Raw combo or list of combos.\n * @param mods Optional list of modifier keys to sort and filter by (default: `[\"ctrl\", \"shift\", \"alt\", \"meta\"]`).\n * @returns Canonical combo string or list.\n * @example\n * cleanKeyCombo([\"Shift+Alt+Ctrl+Z\", \"cmd+y\"])\n * // => [\"ctrl+shift+alt+z\", \"meta+y\"]\n */\nexport function cleanKeyCombo(combo: string, mods?: string[]): string;\nexport function cleanKeyCombo(combo: string[], mods?: string[]): string[];\nexport function cleanKeyCombo(combo: string | string[], mods: string[] = KEYS_MODS as any): string | string[] {\n const clean = (combo: string): string => {\n if (combo === \" \" || combo === \"+\") return combo;\n combo = combo.replace(/\\+\\s*\\+$/, \"+plus\");\n const p = combo\n .toLowerCase()\n .split(\"+\")\n .filter((k) => k !== \"\")\n .map((k, _, __, tk = k.trim()) => KEYS_ALIAS[tk] || (tk === \"plus\" ? \"+\" : tk || \" \"));\n return [...p.filter((k) => mods.includes(k)).sort((a, b) => mods.indexOf(a) - mods.indexOf(b)), ...(p.filter((k) => !mods.includes(k)) || \"\")].join(\"+\");\n };\n return Array.isArray(combo) ? combo.map(clean) : clean(combo);\n}\n\n/**\n * Determines if actual combo satisfies required combo rule(s).\n * Non-strict mode performs subset matching (required keys must all be present).\n * Strict mode requires exact canonical equality.\n * @param required Required combo or combo list.\n * @param actual Actual combo string.\n * @param strict Whether to require exact match.\n * @param clean Whether to clean the actual combo.\n * @returns `true` when match succeeds.\n */\nexport function matchKeys(required: string | string[], actual: string, strict = false, clean = true, allowedMods?: string[] | readonly string[]): boolean {\n if (clean) actual = cleanKeyCombo(actual);\n const match = (req: string, actual: string): boolean => {\n req = cleanKeyCombo(req);\n if (strict) return req === actual;\n const reqs = req.split(\"+\"),\n reals = actual.split(\"+\");\n for (const mod of KEYS_CMODS) if (reals.includes(mod) && !reqs.includes(mod) && !allowedMods?.includes(mod)) return false; // no unrequested heavy mods\n return reqs.every((k) => reals.includes(k));\n };\n return Array.isArray(required) ? required.some((req) => match(req, actual)) : match(required, actual);\n}\n\n/**\n * Resolves key-combo terms against settings:\n * - override, block, whitelist, and matched action id.\n * @param combo Canonical combo string.\n * @param settings Matching settings.\n * @returns Match resolution record.\n */\nexport function getTermsForKey(combo: string, settings: KeysSettings): { override: boolean; block: boolean; whitelisted: boolean; action: string | null } {\n const terms = { override: false, block: false, whitelisted: false, action: null as string | null },\n { overrides = [], shortcuts = {}, blocks = [], strictMatch: stm = false, rankedMatch: ram = true, whitelist = [], moddedlist = [] } = settings || {};\n combo = cleanKeyCombo(combo);\n if (matchKeys(overrides, combo, stm, false)) terms.override = true;\n if (matchKeys(blocks, combo, stm, false)) terms.block = true;\n if (whitelist.some((w) => matchKeys(w, combo, false, true, moddedlist.includes(cleanKeyCombo(w)) ? KEYS_CMODS : undefined))) terms.whitelisted = true;\n if (!ram) return (terms.action = Object.keys(shortcuts).find((id) => shortcuts[id] && matchKeys(shortcuts[id], combo, stm, false, moddedlist.includes(id) ? KEYS_CMODS : undefined)) || null), terms;\n // prettier-ignore\n let bestA: string | null = null, bestE = false, bestL = 0;\n for (const id of Object.keys(shortcuts))\n for (const c of Array.isArray(shortcuts[id]) ? shortcuts[id] : [shortcuts[id]]) {\n // prettier-ignore\n const req = c && cleanKeyCombo(c), isE = req === combo, len = req ? req.split(\"+\").length : 0;\n if (c && matchKeys(req, combo, stm, false, moddedlist.includes(id) ? KEYS_CMODS : undefined) && (!bestA || (isE && !bestE) || (isE === bestE && len > bestL))) (bestA = id), (bestE = isE), (bestL = len);\n }\n return (terms.action = bestA), terms;\n}\n\n/**\n * Evaluates whether a keyboard event is allowed and maps it to an action id.\n * Behavior order:\n * 1. hard gate checks (`disabled`, focused editable, button-space/enter),\n * 2. blocked combos,\n * 3. override combos (`preventDefault`),\n * 4. shortcut action match,\n * 5. whitelist pass-through.\n * @param e Browser keyboard event.\n * @param settings Matching settings.\n * @returns Action id, pass-through key, or `false` when denied.\n */\nexport function keyEventAllowed<const S extends KeysSettings>(e: KeyboardEvent, settings: S): false | (S[\"shortcuts\"] extends object ? keyof S[\"shortcuts\"] : never) | (S[\"whitelist\"] extends readonly string[] ? (string[] extends S[\"whitelist\"] ? never : S[\"whitelist\"][number]) : never) {\n if (settings.disabled) return false;\n const activeEl = getActiveEl((e.target as Node)?.ownerDocument); // shadow DOM proof\n if ((e.key === \" \" || e.key === \"Enter\") && activeEl?.matches(\"button,input[type='button'],input[type='submit']\")) return false;\n if (e.currentTarget !== activeEl && activeEl?.matches(\"input,textarea,[contenteditable],[role]\") && !(e.key === \"Escape\" && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey)) return false;\n const combo = stringifyKeyEvent(e),\n { override, block, action, whitelisted } = getTermsForKey(combo, settings);\n if (block) return false;\n if (override) e.preventDefault();\n if (action) return action as any;\n if (whitelisted) return e.key.toLowerCase() as any;\n return false;\n}\n\n/**\n * Formats one or many combos for human-readable UI labels, prepends \" \" for fluid appending.\n * @param combo Combo or combo list.\n * @param keyFn Function to format each combo.\n * @returns Display label (for example: `\" (ctrl+z) or (meta+z)\"`).\n */\nexport const formatKeyTooltip = (combo: string | string[] = \"\", keyFn = (c = \"\") => cleanKeyCombo(c).replace(\" \", \"space\")): string => {\n const combined = combo?.length ? (Array.isArray(combo) ? combo.map(keyFn).join(\" or \") : keyFn(combo)) : \"\";\n return combined ? ` (${combined})` : \"\";\n};\n\n/**\n * Formats an action-shortcuts map for display labels.\n * @param keyShortcuts Action to combo(s) map.\n * @returns Action to display-label map.\n */\nexport function formatKeyShortcutsTooltip(keyShortcuts: Record<string, string | string[]> = {}, formatter = formatKeyTooltip): Record<string, string> {\n const shortcuts: Record<string, string> = {};\n for (const action of Object.keys(keyShortcuts)) shortcuts[action] = formatter(keyShortcuts[action]);\n return shortcuts;\n}\n\n/**\n * Converts combo text into WAI-ARIA `aria-keyshortcuts` format.\n * @param s Combo text or combo list.\n * @param format Whether to format to tooltip first.\n * @returns Normalized aria-keyshortcuts string.\n * @example\n * parseForARIAKS(\" (ctrl+z) or (meta+z)\")\n * // => \"Control+z Meta+z\"\n * @example\n * parseForARIAKS([\"ctrl+z\", \"meta+z\"], false)\n * // => \"Control+z Meta+z\"\n */\nexport function parseForARIAKS(s: string | string[] = \"\", format = true) {\n const m = { ctrl: \"Control\", cmd: \"Meta\", space: \"Space\", plus: \"+\" };\n return (!format && !Array.isArray(s) ? s : formatKeyTooltip(s))\n .toLowerCase()\n .replace(/[()]/g, \"\") // 1. Remove parens\n .replace(/\\bor\\b/g, \" \") // 2. Replace \"or\" with the REQUIRED space\n .replace(/\\w+/g, (k: any) => m[k as keyof typeof m] || k) // 3. Map keys (ctrl -> Control)\n .replace(/\\s+/g, \" \")\n .trim(); // 4. Cleanup extra spaces\n} // W3 ARIA Key Shortcut\n","export { type ReactorModuleId, type ModulePaths, type ReactorModuleConstructor, BaseReactorModule } from \"@modules/base\";\r\n\r\nexport { type PersistConfig, PersistModule, PERSIST_MODULE_BUILD } from \"@modules/persist\";\r\n\r\nexport { type JSONReplacer, type JSONReviver, type StorageAdapterConfig, type MemoryAdapterConfig, type IndexedDBAdapterConfig, type CookieOptions, type CookieAdapterConfig, type StorageAdapterConstructor, type AsyncStorageAdapterConstructor, BaseStorageAdapter, StorageAdapter, AsyncStorageAdapter, LocalStorageAdapter, SessionStorageAdapter, MemoryAdapter, CookieAdapter, IndexedDBAdapter, COOKIE_ADAPTER_BUILD, INDEXED_DB_ADAPTER_BUILD } from \"@modules/persist/storage\";\r\n\r\nexport { type HistoryEntry, type HistoryTransaction, type HistoryNode, type TimeTravelConfig, type TimeTravelState, TimeTravelModule, TIME_TRAVEL_MODULE_BUILD } from \"@modules/timeTravel\";\r\n\r\nexport { type Transaction, txId, startTx, endTx, transaction } from \"@modules/timeTravel/transaction\";\r\n\r\nexport { silence } from \"@src/ts/modules/timeTravel/silence\";\r\n\r\nexport { composeHeuristics } from \"@modules/timeTravel/heuristics\";\r\n\r\nexport { type TextBundlerOptions, createTextBundler, setValueWithCursor } from \"@modules/timeTravel/heuristics/text\";\r\n\r\nexport { createTxPathMerger } from \"@modules/timeTravel/heuristics/path\";\r\n","import type { Reactor } from \"@core/reactor\";\r\nimport { getReactor, type Reactive, reactive } from \"@core/mixins\";\r\nimport { isObj, matchPaths, getPath, setPath, nuke } from \"@utils/obj\";\r\nimport { guardMethod, guardAllMethods } from \"@utils/methd\";\r\nimport { ReactorModulePathConfig, ReactorModuleConstructor, ReactorModuleId, ModulePaths } from \"./types\";\r\n\r\n/**\r\n * Base class, extend to create custom reactor modules that can be used with a `Reactor` instance\r\n * Provides common functionalities like multi-reactor management, configuration handling, and error logging.\r\n * @typeParam T Root state object type of the reactors this module will manage.\r\n * @typeParam Config Configuration object type for the module.\r\n * @typeParam State Optional local state object type for the module.\r\n */\r\nexport abstract class BaseReactorModule<T extends object = any, Config extends Partial<ReactorModulePathConfig<T>> = any, State = any> {\r\n public static readonly moduleName: string;\r\n public get name() {\r\n return (this.constructor as ReactorModuleConstructor).moduleName;\r\n }\r\n protected readonly ac = new AbortController();\r\n protected readonly signal = this.ac.signal;\r\n public readonly deps = new Map<ReactorModuleId, Reactor<any>>();\r\n public readonly rids = new WeakMap<Reactor<any>, ReactorModuleId>(); // for quick 0(1) lookups over iteration\r\n public readonly evtOpts = { signal: this.signal };\r\n /** The reactive state object for the module, watch to see exposed lifecycle changes. */\r\n public readonly state!: State extends object ? Reactive<State> : State;\r\n /** The reactive configuration object for the module, manipulate to change behaviour. */\r\n public config!: Config extends object ? Reactive<Config> : Config;\r\n public wired = false;\r\n private readonly clups = new Map<ReactorModuleId, (() => void)[]>();\r\n\r\n constructor(config?: Config, rtr?: Reactor<T>, state?: State) {\r\n guardAllMethods(this, this.guard); // Modules can sacrifice memory footprint for error proofing and events devx\r\n this.config = (isObj(config) ? reactive(config) : config) as BaseReactorModule[\"config\"];\r\n this.state = (isObj(state) ? reactive(state) : state) as BaseReactorModule[\"state\"];\r\n rtr && this.attach(rtr); // User don't have to pass rtr at instantion except config options need type inference from `T`\r\n }\r\n\r\n /**\r\n * Connect to a `Reactor` instance, allows managing multiple reactors if needed.\r\n * @param target `Reactor` instance or `reactive()` object to connect to.\r\n * @param id Optional custom id for the reactor, prefer over default implicit index id when managing multiple reactors, supports paths to merge into a single tree.\r\n * @returns Current `ReactorModule` instance for fluent chaining.\r\n * @example\r\n * const mod = new MyModule().attach(state1).attach(state2); // implicit index-based ids by default, add a .setup() or `Reactor.use()` when ready for init.\r\n * @example\r\n * const persist = new PersistModule(config).attach(sessState, \"session\").attach(adminState, \"session.admin\"); // don't use \"*\", causes de-serialization issues.\r\n */\r\n public attach(target?: Reactor<any> | Reactive<any>, id: ReactorModuleId = this.deps.size) {\r\n const rtr = getReactor(target);\r\n if (!rtr || this.deps.has(id)) return this;\r\n return this.rids.set((this.deps.set(id, rtr), rtr), id), this.onAttach(rtr, id), this;\r\n }\r\n protected onAttach(_rtr: Reactor<any>, _rid?: ReactorModuleId): void {}\r\n protected attachPaths(rtr: Reactor<any>, rid: ReactorModuleId, paths = this.getPaths(rid)) {\r\n let clups = this.clups.get(rid);\r\n if (!clups) this.clups.set(rid, (clups = []));\r\n for (let i = 0, len = paths.length; i < len; i++) {\r\n const path = paths[i];\r\n !this.config.disabled ? clups.push(this.config.synchronous ? rtr.watch(path, this.handlePathSync, { signal: this.signal }) : rtr.on(path, this.handlePath, this.evtOpts)) : this.config.synchronous ? rtr.nowatch(path, this.handlePathSync) : rtr.off(path, this.handlePath, this.evtOpts);\r\n }\r\n }\r\n\r\n /**\r\n * Entry point called to initialize module wiring, calls `.attach(target, id)` first, `Reactor.use()` calls this internally.\r\n * Should run as last in `.attach()` chain or after all desired reactors if using multiple; so wiring is done safely after.\r\n * @param target `Reactor` instance or `reactive()` object to connect to.\r\n * @param id Optional id for the reactor, prefer over default implicit index id when managing multiple reactors.\r\n * @returns Current `ReactorModule` instance for fluent chaining.\r\n * @example\r\n * const mod = new MyModule().attach(state1).setup(state2); // if using multiple, this should run last; with same params as `.attach()` for a shorter chain\r\n */\r\n public setup(target?: Reactor<any> | Reactive<any>, id?: ReactorModuleId): this {\r\n return this.attach(target, id), !this.wired && (this.wire(), (this.wired = true)), this;\r\n }\r\n /** set up listeners/subscriptions and module runtime wiring. */\r\n public abstract wire(): void;\r\n\r\n public destroy(): void {\r\n if (this.ac) this.ac.abort(), this.onDestroy?.(), nuke(this); // only one rtr can kill; nuke is notorious\r\n }\r\n protected onDestroy?(): void;\r\n\r\n /**\r\n * Wraps a function with module-scoped error logging, every instance methods is already auto-wrapped with this.\r\n * Use this when creating functions dynamically (for example, before attaching an anonymous listener on the fly).\r\n * @example\r\n * window.addEventListener(\"resize\", this.guard(() => this.syncLayout(true)), { signal: this.signal });\r\n */\r\n protected guard = <Fn extends Function>(fn: Fn) => {\r\n return guardMethod(fn, (e) => this.deps.values().next().value?.log(`[Reactor \"${this.name}\" Module] Error: ${e}`)); // treated as seperate log identities\r\n }; // `()=>{}`: needs to be bounded even before initialization\r\n\r\n protected handleWhitelist({ currentTarget: { value: paths } }: any): void {\r\n for (const [rid, rtr] of this.deps) this.cleanup(rid), this.attachPaths(rtr, rid, this.getPaths(rid, paths));\r\n } // child wires when ready\r\n private handlePath(e: any, rid = this.rids.get(e.reactor)!): void {\r\n (!this.config.blacklist || !matchPaths(this.getPaths(rid, this.config.blacklist, true), e.path)) && this.onPath(e, rid);\r\n }\r\n private handlePathSync = (_: any, p: any) => this.handlePath(p);\r\n protected onPath(_e: any, _rid: ReactorModuleId): void {}\r\n\r\n protected handleSynchronous() {\r\n for (const [rid, rtr] of this.deps) this.cleanup(rid), this.attachPaths(rtr, rid);\r\n } // child wires when ready\r\n\r\n private cleanup(rid: ReactorModuleId): void {\r\n const clups = this.clups.get(rid);\r\n if (clups) for (let i = 0, len = clups.length; i < len; i++) clups[i]();\r\n clups && (clups.length = 0);\r\n }\r\n\r\n /**\r\n * Path resolution utility for modules, provides automatic reactor id resolution for multi-reactor setups.\r\n * @param target Reactor or reactor id to resolve paths for when using per-reactor path lists`.\r\n * @param paths Paths to filter by, supports same formats as `ModulePaths`, will be resolved with the module's reactor id if applicable.\r\n * @returns Resolved paths array, defaults to `[\"*\"]` if no paths are found using search criteria.\r\n */\r\n public getPaths<P extends string = string>(target?: Reactor<any> | ReactorModuleId, paths = this.config.whitelist as ModulePaths<P>, allowEmpty = paths !== this.config.whitelist): P[] {\r\n const rid = (target as any)?.core ? this.rids.get(target as Reactor<any>) : target;\r\n return ((paths && (Array.isArray(paths) ? paths : paths[String(rid)])) ?? (!allowEmpty ? wpArr : [])) as P[];\r\n }\r\n\r\n /**\r\n * Compute the serialized payload for all attached reactors.\r\n * If multiple reactors are attached, returns a merged object keyed by reactor id. Honors `whitelist`, `snapshot` and `mirrorWrites` configuration on each reactor.\r\n * @param target Optional target reactor or id to compute payload for, useful when using per-reactor path lists.\r\n * @returns The payload to persist (or `undefined` for empty single-reactor payload).\r\n */\r\n public getPayload(target?: Reactor<any> | ReactorModuleId, _rid?: ReactorModuleId, _nest = target ? false : this.deps.size > 1): any {\r\n const _rtr = (target as any)?.core ? (target as Reactor<any>) : this.deps.get(target as ReactorModuleId)!;\r\n let res: Record<string, any> | undefined = _nest ? {} : undefined;\r\n for (const [rid, rtr] of !target ? this.deps : [[_rid || target, _rtr] as const]) {\r\n const snap = this.config.snapshot ? (this.config.snapshot === true && (rtr.config.referenceTracking = rtr.config.smartCloning = true), rtr.snapshot()) : rtr.core,\r\n val: any = this.config.whitelist ? {} : snap;\r\n if (this.config.whitelist) {\r\n const paths = this.getPaths(rid);\r\n for (let i = 0, len = paths.length; i < len; i++) {\r\n const _path = paths[i],\r\n path = (!this.config.mirrorReads || !_path.includes(\"intent\") ? _path : _path.replace(\"intent\", \"state\")) as any;\r\n setPath(val, _path, getPath(snap, path));\r\n }\r\n }\r\n _nest ? setPath(res!, rid as any, val) : (res = val); // allows merging with path-like ids\r\n }\r\n return res;\r\n }\r\n}\r\n\r\nexport const wpArr = [\"*\"] as any;\r\nexport type * from \"./types\";\r\n","import { StorageAdapterConfig } from \"./types\";\n\n/**\n * Abstract base class for storage adapters, defines the interface and common functionality.\n * @typeParam Config Configuration object type for the adapter.\n */\nexport abstract class BaseStorageAdapter<Config extends StorageAdapterConfig = StorageAdapterConfig> {\n public readonly name: string = \"BaseStorageAdapter\";\n public config: Config;\n protected warn = (act = \"\", mssg = \"Support issue or Private Mode\", key = \"\", store = \"\") => this.config.debug && console.warn(`[${this.constructor.name} \\`${act}\\`] Failed${key ? ` for ${key}` : \"\"}${store ? ` on \"${store}\"` : \"\"}${(this.config as any).dbName ? ` at ${(this.config as any).dbName}` : \"\"} (${mssg})`);\n constructor(config?: Partial<Config>) {\n this.config = { debug: false, ...config } as Config;\n }\n}\n\n/**\n * Abstract base class for storage adapters, defines the interface and common functionality.\n * Extend this class to implement specific synchronous storage mechanisms (e.g., LocalStorage).\n * @typeParam Config Configuration object type for the adapter.\n */\nexport abstract class StorageAdapter<S = any, Config extends StorageAdapterConfig = StorageAdapterConfig> extends BaseStorageAdapter<Config> {\n public readonly name: string = \"StorageAdapter\";\n public abstract get<T = S>(key: string): T | undefined;\n public abstract set<T = S>(key: string, value: T): boolean;\n public abstract remove(key: string): boolean;\n public abstract clear(): boolean;\n}\n\n/**\n * Abstract base class for asynchronous storage adapters, defines the interface and common functionality.\n * Extend this class to implement specific asynchronous storage mechanisms (e.g., IndexedDB).\n * @typeParam Config Configuration object type for the adapter.\n */\nexport abstract class AsyncStorageAdapter<S = any, Config extends StorageAdapterConfig = StorageAdapterConfig> extends BaseStorageAdapter<Config> {\n public readonly name: string = \"AsyncStorageAdapter\";\n public abstract get<T = S>(key: string): Promise<T | undefined>;\n public abstract set<T = S>(key: string, value: T): Promise<boolean>;\n public abstract remove(key: string): Promise<boolean>;\n public abstract clear(): Promise<boolean>;\n}\n\nexport type * from \"./types\";\n","import { StorageAdapterConfig, StorageAdapter } from \"./base\";\n\n/**\n * - The LocalStorage Adapter (~5MB per origin, browser-dependent).\n * - Provides an implementation of the `StorageAdapter` interface using the browser's `localStorage`.\n * Handles JSON serialization and deserialization, and includes error handling for unsupported environments.\n */\nexport class LocalStorageAdapter<S = any, Config extends StorageAdapterConfig = StorageAdapterConfig> extends StorageAdapter<S, Config> {\n public readonly name: string = \"LocalStorage\";\n /**\n * Reads and parses a value from localStorage.\n * @param key Storage key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n public override get<T = S>(key = this.config.key, reviver = this.config.reviver): T | undefined {\n try {\n const v = localStorage.getItem(key);\n return v ? JSON.parse(v, reviver) : undefined;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return undefined;\n }\n }\n /**\n * Serializes and writes a value to localStorage.\n * @param key Storage key.\n * @param value Value to serialize.\n * @returns `true` when write succeeds, else `false`.\n */\n public override set<T = S>(key = this.config.key, value: T, replacer = this.config.replacer) {\n try {\n return localStorage.setItem(key, JSON.stringify(value, replacer as any)), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"setItem\", undefined, key), false;\n }\n }\n /**\n * Removes a single key from localStorage.\n * @param key Storage key.\n * @returns `true` when removal succeeds, else `false`.\n */\n public override remove(key = this.config.key) {\n try {\n return localStorage.removeItem(key), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"removeItem\", undefined, key), false;\n }\n }\n /**\n * Clears all localStorage entries for the current origin.\n * @returns `true` when clear succeeds, else `false`.\n */\n public override clear() {\n try {\n return localStorage.clear(), true; // Warning: This wipes the ENTIRE domain's LocalStorage\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\", undefined), false;\n }\n }\n}","import { StorageAdapterConfig, StorageAdapter } from \"./base\";\n\n/**\n * - The SessionStorage Adapter (~5MB per origin per tab, browser-dependent).\n * - Provides an implementation of the `StorageAdapter` interface using the browser's `sessionStorage`.\n * Handles JSON serialization and deserialization, and includes error handling for unsupported environments.\n */\nexport class SessionStorageAdapter<S = any, Config extends StorageAdapterConfig = StorageAdapterConfig> extends StorageAdapter<S, Config> {\n public readonly name: string = \"SessionStorage\";\n /**\n * Reads and parses a value from sessionStorage.\n * @param key Storage key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n public override get<T = S>(key = this.config.key, reviver = this.config.reviver): T | undefined {\n try {\n const v = sessionStorage.getItem(key);\n return v ? JSON.parse(v, reviver) : undefined;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return undefined;\n }\n }\n /**\n * Serializes and writes a value to sessionStorage.\n * @param key Storage key.\n * @param value Value to serialize.\n * @returns `true` when write succeeds, else `false`.\n */\n public override set<T = S>(key = this.config.key, value: T, replacer = this.config.replacer) {\n try {\n return sessionStorage.setItem(key, JSON.stringify(value, replacer as any)), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"setItem\", undefined, key), false;\n }\n }\n /**\n * Removes a single key from sessionStorage.\n * @param key Storage key.\n * @returns `true` when removal succeeds, else `false`.\n */\n public override remove(key = this.config.key) {\n try {\n return sessionStorage.removeItem(key), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"removeItem\", undefined, key), false;\n }\n }\n /**\n * Clears all sessionStorage entries for the current tab session.\n * @returns `true` when clear succeeds, else `false`.\n */\n public override clear() {\n try {\n return sessionStorage.clear(), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\", undefined), false;\n }\n }\n}","import { StorageAdapter } from \"../base\";\nimport { MemoryAdapterConfig } from \"./types\";\n\n/**\n * - The Memory Storage Adapter (RAM-bound; no fixed browser quota).\n * - Provides an implementation of the `StorageAdapter` interface using an in-memory `Map`.\n * Useful for testing or non-persistent storage needs, mimics the API and behavior of LocalStorage.\n */\nexport class MemoryAdapter<S = any, Config extends MemoryAdapterConfig = MemoryAdapterConfig> extends StorageAdapter<S, Config> {\n public readonly name: string = \"Memory\";\n constructor(build?: Partial<Config>) {\n super({ store: new Map(), ...build } as Config);\n }\n /**\n * Reads and parses a value from memory storage.\n * @param key Storage key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n public override get<T = S>(key = this.config.key, reviver = this.config.reviver): T | undefined {\n try {\n const v = this.config.store.get(key);\n return v ? JSON.parse(v, reviver) : undefined;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return undefined;\n }\n }\n /**\n * Serializes and writes a value to memory storage.\n * @param key Storage key.\n * @param value Value to serialize.\n * @returns `true` when write succeeds, else `false`.\n */\n public override set<T = S>(key = this.config.key, value: T, replacer = this.config.replacer) {\n try {\n return this.config.store.set(key, JSON.stringify(value, replacer as any)), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"set\", undefined, key), false;\n }\n }\n /**\n * Removes a single key from memory storage.\n * @param key Storage key.\n * @returns `true` when removal succeeds, else `false`.\n */\n public override remove(key = this.config.key) {\n try {\n return this.config.store.delete(key), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"remove\", undefined, key), false;\n }\n }\n /**\n * Clears all entries from memory storage.\n * @returns `true` when clear succeeds, else `false`.\n */\n public override clear() {\n try {\n return this.config.store.clear(), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\", undefined), false;\n }\n }\n}\n\nexport type * from \"./types\";\n","import { CookieAdapterConfig } from \".\";\n\nexport const COOKIE_ADAPTER_BUILD: Partial<CookieAdapterConfig> = {\n path: \"/\",\n sameSite: \"Lax\",\n domain: undefined,\n debug: false,\n};\n","import { NIL } from \"@core/consts\";\nimport { StorageAdapter } from \"../base\";\nimport { CookieAdapterConfig, CookieOptions } from \"./types\";\nimport { COOKIE_ADAPTER_BUILD } from \"./build\";\n\n/**\n * - The Cookie Storage Adapter (~4KB per cookie; practical total payload budget often ~30KB).\n * - Provides an implementation of the `StorageAdapter` interface using `document.cookie`.\n * Handles JSON serialization/deserialization and URL-safe key/value encoding.\n */\nexport class CookieAdapter<S = any, Config extends CookieAdapterConfig = CookieAdapterConfig> extends StorageAdapter<S, Config> {\n public readonly name: string = \"Cookie\";\n protected deets = (opts: Partial<CookieOptions> = NIL, _d = opts.domain ?? this.config.domain, _m = opts.maxAge ?? this.config.maxAge, _e = opts.expires ?? this.config.expires) => `Path=${opts.path ?? this.config.path}; SameSite=${opts.sameSite ?? this.config.sameSite}${_d ? `; Domain=${_d}` : \"\"}${opts.secure ?? this.config.secure ? \"; Secure\" : \"\"}${_m !== undefined ? `; Max-Age=${_m}` : \"\"}${_e !== undefined ? `; Expires=${_e instanceof Date ? _e.toUTCString() : _e}` : \"\"}`;\n constructor(build?: Partial<Config>) {\n super({ secure: \"undefined\" !== typeof window && location.protocol === \"https:\", ...COOKIE_ADAPTER_BUILD, ...build } as Config);\n }\n /**\n * Reads and parses a cookie visible to the current page scope.\n * @param key Cookie key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n public override get<T = S>(key = this.config.key, reviver = this.config.reviver): T | undefined {\n try {\n const k = encodeURIComponent(key) + \"=\";\n for (const pair of document.cookie ? document.cookie.split(\"; \") : []) {\n if (!pair.startsWith(k)) continue;\n return JSON.parse(decodeURIComponent(pair.slice(k.length)), reviver);\n }\n return undefined;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return undefined;\n }\n }\n /**\n * Writes a cookie with optional per-call scope/lifetime overrides.\n * @param key Cookie key.\n * @param value Value to serialize.\n * @param opts Optional per-call cookie options.\n * @returns `true` when write succeeds, else `false`.\n */\n public override set<T = S>(key = this.config.key, value: T, opts?: Partial<CookieOptions>, replacer = this.config.replacer) {\n try {\n return (document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(JSON.stringify(value, replacer as any))}; ${this.deets(opts)}`), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"set\", undefined, key), false;\n }\n }\n /**\n * Removes a cookie key using matching scope attributes.\n * @param key Cookie key.\n * @param opts Optional per-call scope overrides.\n * @returns `true` when removal succeeds, else `false`.\n */\n public override remove(key = this.config.key, opts?: Partial<CookieOptions>) {\n try {\n return (document.cookie = `${encodeURIComponent(key)}=; ${this.deets({ ...opts, maxAge: 0, expires: new Date(0) })}`), true; // standard deletion technique\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"remove\", undefined, key), false;\n }\n }\n /**\n * Attempts to remove all visible cookie keys for the given scope.\n * @param opts Optional per-call scope overrides.\n * @returns `true` when clear succeeds, else `false`.\n */\n public override clear(opts?: Partial<CookieOptions>) {\n try {\n for (const pair of document.cookie ? document.cookie.split(\"; \") : []) {\n const idx = pair.indexOf(\"=\");\n document.cookie = `${idx === -1 ? pair : pair.slice(0, idx)}=; ${this.deets({ ...opts, maxAge: 0, expires: new Date(0) })}`; // standard deletion technique\n }\n return true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\"), false;\n }\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n","import { IndexedDBAdapterConfig } from \"./types\";\nimport { NOOP } from \"@core/consts\";\n\nexport const INDEXED_DB_ADAPTER_BUILD: Partial<IndexedDBAdapterConfig> = {\n dbName: \"REACTOR_IDB\",\n stores: [\"VAULT\"],\n version: 1,\n onidb: NOOP,\n onupgradeneeded: NOOP,\n onversionchange: NOOP,\n onsuccess: NOOP,\n onerror: NOOP,\n onblocked: NOOP,\n};\n","import { AsyncStorageAdapter } from \"../base\";\nimport { IndexedDBAdapterConfig } from \"./types\";\nimport { INDEXED_DB_ADAPTER_BUILD } from \"./build\";\n\n/**\n * - The IndexedDB Adapter (quota-managed; typically tens of MB to GB).\n * - Provides an implementation of the `AsyncStorageAdapter` interface using the IndexedDB database.\n * Handles database connection management, object store setup, and includes error handling for unsupported environments and common issues, requires snapshots(non-proxies) for persistence.\n * *NOTE*: Doesn't support functions and every other structure that the `structuredClone` algorithm exempts as it is IndexedDB's internal serialization mechanism. Bump `version` if schema changes, e.g, adding a new store.\n */\nexport class IndexedDBAdapter<S = any, Config extends IndexedDBAdapterConfig = IndexedDBAdapterConfig> extends AsyncStorageAdapter<S, Config> {\n public readonly name: string = \"IndexedDB\";\n protected db?: IDBDatabase;\n constructor(build?: Partial<Config>) {\n super({ ...INDEXED_DB_ADAPTER_BUILD, ...build } as Config);\n }\n /**\n * Returns a connected IndexedDB instance, opening it when needed.\n * @returns Connected database handle.\n */\n public async idb(): Promise<IDBDatabase> {\n const idb = this.config.onidb();\n if (idb || this.db) return Promise.resolve(idb || this.db);\n return new Promise((res, rej) => {\n const req = indexedDB.open(this.config.dbName, this.config.version);\n req.onupgradeneeded = (e) => (this.config.onupgradeneeded(req.result, e), this.config.stores.forEach((s) => !req.result.objectStoreNames.contains(s) && req.result.createObjectStore(s)));\n req.onsuccess = (e) => (this.config.onsuccess(req.result, e), (req.result.onversionchange = (e) => (this.config.onversionchange(req.result, e), this.warn(\"update\", \"Updated in another tab\"), req.result.close())), res((this.db = req.result)));\n req.onerror = (e) => (this.config.onerror(req.error, e), this.warn(\"open\", \"Something went wrong\"), rej(req.error));\n req.onblocked = (e) => (this.config.onblocked(e), this.warn(\"open\", \"Close other tabs for updates\"));\n });\n }\n /**\n * Reads a value by key from an object store.\n * @param key Record key.\n * @param store Optional object-store override.\n * @returns Stored value, or `undefined` when missing/unreadable.\n */\n public override async get<T = S>(key = this.config.key, store = this.config.stores[0], options: Partial<IDBTransactionOptions> = this.config): Promise<T | undefined> {\n try {\n const req = (await this.idb()).transaction(store, \"readonly\", options).objectStore(store).get(key);\n return new Promise((res) => (req.onsuccess = () => res(req.result)));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"get\", undefined, store), undefined;\n }\n }\n /**\n * Writes a value by key into an object store.\n * @param key Record key.\n * @param value Value to store.\n * @param store Optional object-store override.\n * @returns `true` when write succeeds, else `false`.\n */\n public override async set<T = S>(key = this.config.key, value: T, store = this.config.stores[0], options: Partial<IDBTransactionOptions> = this.config): Promise<boolean> {\n try {\n const req = (await this.idb()).transaction(store, \"readwrite\", options).objectStore(store).put(value, key);\n return new Promise((res) => (req.onsuccess = () => res(true)));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"put\", undefined, store), false;\n }\n }\n /**\n * Deletes a value by key from an object store.\n * @param key Record key.\n * @param store Optional object-store override.\n * @returns `true` when delete succeeds, else `false`.\n */\n public override async remove(key = this.config.key, store = this.config.stores[0], options: Partial<IDBTransactionOptions> = this.config): Promise<boolean> {\n try {\n const req = (await this.idb()).transaction(store, \"readwrite\", options).objectStore(store).delete(key);\n return new Promise((res) => (req.onsuccess = () => res(true)));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"delete\", undefined, store), false;\n }\n }\n /**\n * Clears one or more object stores.\n * @param stores Store name or list of store names to clear.\n * @returns `true` when all clears succeed, else `false`.\n */\n public override async clear(stores: string | string[] = this.config.stores, options: Partial<IDBTransactionOptions> = this.config): Promise<boolean> {\n let success = true;\n for (const store of Array.isArray(stores) ? stores : [stores])\n try {\n const req = (await this.idb()).transaction(store, \"readwrite\", options).objectStore(store).clear();\n await new Promise((res) => (req.onsuccess = () => res(true)));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n this.warn(\"clear\", undefined, store), (success = false);\n }\n return success;\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n","import { PersistConfig } from \"./types\";\nimport { NOOP } from \"@core/consts\";\n\nexport const PERSIST_MODULE_BUILD: Partial<PersistConfig<any>> = {\n disabled: false,\n key: \"REACTOR_STORE\",\n throttle: 2500,\n snapshot: false,\n mirrorReads: true,\n mirrorWrites: true,\n onSave: NOOP,\n strict: true,\n};\n","import { BaseReactorModule, ReactorModuleId } from \"../base\";\r\nimport { StorageAdapter, LocalStorageAdapter, AsyncStorageAdapter, type StorageAdapterConstructor } from \"./storage\";\r\nimport { fanoutOptsArr, setPath, deletePath, getPath, fanout, mergeObjs, parseEvtOpts, hasPath } from \"@utils/obj\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { Reactor } from \"@core/reactor\";\r\nimport type { REvent } from \"@defs/reactor\";\r\nimport { NOOP } from \"@core/consts\";\r\nimport type { Paths } from \"@defs/obj\";\r\nimport { PersistConfig, PersistState } from \"./types\";\r\nimport { PERSIST_MODULE_BUILD } from \"./build\";\r\n\r\n/**\r\n * - The Storage Manager.\r\n * - Configurable storage adapters for maximum flexibility (localStorage, sessionStorage, IndexedDB, cookies, custom server persisters, etc.)\r\n * Path-based persistence for fine-grained control over what gets persisted across single or multiple reactors, merges into a single serialized state tree.\r\n * With async adapters, listen to `state.hydrated` (preferably `once`) before the `setup` of modules that should ignore hydration waves; hydrates lazy attachments too.\r\n */\r\nexport class PersistModule<T extends object = any, P extends Paths<T> = Paths<T>> extends BaseReactorModule<T, PersistConfig<T, P>, PersistState> {\r\n public static readonly moduleName: string = \"persist\";\r\n public adapter!: StorageAdapter<T> | AsyncStorageAdapter<T>;\r\n protected readonly tickMap = new Map<ReactorModuleId, Array<string>>();\r\n protected cache: any = null;\r\n protected hydrateSeq = 0;\r\n protected persistSeq = 0;\r\n protected saveTimeoutId = 0;\r\n\r\n constructor(config?: Partial<PersistConfig<T, P>>, rtr?: Reactor<T>) {\r\n super(mergeObjs(PERSIST_MODULE_BUILD, config, rtr?.config) as PersistConfig<T, P>, rtr, { hydrated: false });\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n \"undefined\" !== typeof window && window.addEventListener(\"pagehide\", this.onDestroy, { signal: this.signal });\r\n \"undefined\" !== typeof document && document.addEventListener(\"visibilitychange\", () => document.visibilityState === \"hidden\" && this.onDestroy(), { signal: this.signal });\r\n // Config Listeners\r\n this.config.on(\"adapter\", this.handleAdapter, { signal: this.signal, init: true });\r\n this.config.on(\"disabled\", this.handleDisabled, { signal: this.signal, init: true });\r\n this.config.on(\"whitelist\", this.handleWhitelist, { signal: this.signal, init: true });\r\n this.config.on(\"synchronous\", this.handleSynchronous, { signal: this.signal });\r\n }\r\n\r\n protected override onAttach(rtr: Reactor<any>, rid: ReactorModuleId): void {\r\n rtr.config.eventBubbling = true;\r\n this.attachPaths(rtr, rid);\r\n this.state.hydrated && this.cache && this.hydrate(this.deps.size > 1 ? getPath(this.cache, rid as any) : this.cache, rtr, rid);\r\n }\r\n\r\n protected override onPath(): void {\r\n if (this.state.hydrated) this.saveTimeoutId ||= setTimeout(this.persist, this.config.throttle, this.signal);\r\n }\r\n protected async persist(): Promise<void> {\r\n const seq = ++this.persistSeq;\r\n let payload: any = this.getPayload();\r\n if (this.config.beforeSave) {\r\n const res = this.config.beforeSave(payload);\r\n if (res === false) return; // blocking persist\r\n if (res && res !== true) payload = res;\r\n }\r\n this.saveTimeoutId = 0; // onto the next!\r\n if (this.config.onSave === NOOP) return void (await this.adapter.set(this.config.key, payload)); // always lazy, not the `MC`\r\n try {\r\n const bool = await this.adapter.set(this.config.key, payload);\r\n if (seq !== this.persistSeq) return; // you can show your loaders but we will not falter\r\n this.config.onSave(payload, bool ?? true); // base adapter returns bool and doesn't throw but \"We still don't trust you\"\r\n } catch (e) {\r\n this.config.onSave(payload, false, e); // `throwErrors: true` on adapter config or custom bypass?, here's your metadata\r\n }\r\n }\r\n\r\n protected async handleAdapter({ value = LocalStorageAdapter }: REvent<PersistConfig<T, P>, \"adapter\">) {\r\n const seq = ++this.hydrateSeq;\r\n if (this.adapter && value === this.adapter.constructor) return;\r\n this.state.hydrated = false;\r\n this.adapter?.remove(this.config.key); // Cleanup old adapter storage\r\n this.adapter = \"function\" === typeof value ? new (value as StorageAdapterConstructor)({ debug: !!this.deps.values().next().value?.canLog }) : ((value.config.debug = !!this.deps.values().next().value?.canLog), value); // dynamic, instance or not; pass am come :)\r\n try {\r\n let saved = this.adapter.get(this.config.key);\r\n const isAsync = saved instanceof Promise, // accuracy incase overriden methods are async\r\n opts = parseEvtOpts(this.config.fanout ?? isAsync, fanoutOptsArr, \"depth\");\r\n saved = (!isAsync ? saved : await saved) as T;\r\n if (this.config.beforeHydrate && saved) {\r\n const res = this.config.beforeHydrate(saved);\r\n if (res === false) return; // block hydration entirely\r\n if (res && res !== true) saved = res;\r\n }\r\n if (seq !== this.hydrateSeq || !saved) return;\r\n this.cache = this.config.cachePayload ? saved : null;\r\n for (const [rid, rtr] of this.deps) this.hydrate(this.deps.size > 1 ? getPath(saved, rid as any) : saved, rtr, rid, opts, false); // allows retrieving with path-like ids, ticking after full revival for data accuracy\r\n for (const [rid, rtr] of this.deps) rtr.tick(opts.depth || !this.config.whitelist ? \"*\" : this.tickMap.get(rid) || []);\r\n this.tickMap.clear(); // faster than sequential delete\r\n } finally {\r\n if (seq === this.hydrateSeq) this.state.hydrated = true;\r\n }\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<PersistConfig<T, P>, \"disabled\">) {\r\n for (const [rid, rtr] of this.deps) this.attachPaths(rtr, rid);\r\n value && this.adapter?.remove(this.config.key);\r\n }\r\n\r\n protected hydrate(entry: any, rtr: Reactor<any>, rid: ReactorModuleId = this.rids.get(rtr)!, { depth, merge = true, atomic, skipUndef } = parseEvtOpts(this.config.fanout, fanoutOptsArr, \"depth\"), tick = true): void {\r\n if (!entry) return;\r\n const whites = this.getPaths(rid),\r\n blacks = this.getPaths(rid, this.config.blacklist, true),\r\n set = (p: any, curr: any, prev: any) => (depth ? (fanout as any) : setPath)(rtr.core, p, merge ? mergeObjs(curr, prev, rtr.config) : prev, depth ? { depth, atomic, skipUndef, crossRealms: rtr.config.crossRealms } : undefined); // if sync, merge directly, else fanout for granularity\r\n let ticks = this.tickMap.get(rid);\r\n for (let i = 0, len = blacks.length; i < len; i++) deletePath(entry, blacks[i]);\r\n for (let i = 0, len = whites.length; i < len; i++) {\r\n let mirror: string | undefined;\r\n const _path = whites[i],\r\n path = (!this.config.mirrorWrites || !_path.includes(\"state\") || !hasPath(rtr.core, (mirror = _path.replace(\"state\", \"intent\"))) ? _path : mirror) as any,\r\n value = getPath(entry, _path);\r\n value !== undefined && (set(path, getPath(rtr.core, path), value), (ticks || (this.tickMap.set(rid, (ticks = [])), ticks)).push(path));\r\n }\r\n tick && (rtr.tick(depth || !this.config.whitelist ? \"*\" : ticks || []), this.tickMap.delete(rid));\r\n }\r\n\r\n /** Clears persisted payload for this module instance by removing the stored key from the adapter and drops any pending save. */\r\n public clear(): void {\r\n clearTimeout(this.saveTimeoutId);\r\n this.saveTimeoutId = -1; // ignore all writes until next microtask\r\n queueMicrotask(() => (this.saveTimeoutId = 0)); // hack to delay saves till next tick\r\n this.adapter?.remove(this.config.key);\r\n }\r\n /** Clears stored `cache` for this module instance, call after all attachments that use the cached hydration payload. */\r\n public clearCache(): void {\r\n this.cache = null;\r\n }\r\n\r\n protected onDestroy(): void {\r\n this.config.strict && this.state.hydrated && !this.config.disabled && this.adapter?.set(this.config.key, this.getPayload()); // One last save before the lights go out\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { TimeTravelConfig } from \"./types\";\nimport { NOOP } from \"@core/consts\";\n\nexport const TIME_TRAVEL_MODULE_BUILD: Partial<TimeTravelConfig<any>> = {\n limit: 1000000000,\n playbackRate: 1,\n maxPlaybackDelay: 2000,\n mirrorReads: true,\n mirrorWrites: true,\n onApply: NOOP,\n};\n","import { BaseReactorModule, ReactorModuleId } from \"../base\";\r\nimport { Reactor } from \"@core/reactor\";\r\nimport type { Payload, REvent } from \"@defs/reactor\";\r\nimport { setPath, deletePath, fanout, deepClone, getPath, hasPath, force } from \"@utils/obj\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { clamp } from \"@utils/num\";\r\nimport type { Paths } from \"@defs/obj\";\r\nimport { JSONReplacer, JSONReviver } from \"../persist/storage\";\r\nimport { TimeTravelConfig, TimeTravelState, HistoryTransaction, HistoryEntry, HistoryNode } from \"./types\";\r\nimport { TIME_TRAVEL_MODULE_BUILD } from \"./build\";\r\nimport { Transaction } from \"./transaction\";\r\n\r\n/**\r\n * - The Flight Recorder (Black Box).\r\n * - Implements S.I.A. logic to allow playback, teleportation, redos and undos.\r\n * Allows history from single or multiple reactors to be recorded and replayed in a synchronized manner, even if they have different shapes.\r\n * If paired with async persistence, `untrack()` then `track()` this module after hydration where applicable to avoid recording hydration waves.\r\n */\r\nexport class TimeTravelModule<T extends object = any, P extends Paths<T> = Paths<T>> extends BaseReactorModule<T, TimeTravelConfig<T, P>, TimeTravelState<T, P>> {\r\n public static readonly moduleName: string = \"timeTravel\";\r\n public readonly txMap = new WeakMap<Transaction, HistoryTransaction<T, P>>();\r\n public readonly evtOpts = { capture: true, signal: this.signal }; // capture for change immediacy devoid of UI lag\r\n public lastTimestamp = 0;\r\n protected playbackSeq = 0;\r\n protected _tracking?: boolean; // `untrack()` must `track()` in the same session to prevent hydration bugs\r\n\r\n constructor(config?: Partial<TimeTravelConfig<T, P>>, rtr?: Reactor<T>) {\r\n super({ ...TIME_TRAVEL_MODULE_BUILD, ...config } as TimeTravelConfig<T, P>, rtr, { initialState: {}, history: [], tracking: true, currentFrame: 0, paused: true, forward: true } as TimeTravelState<T, P>);\r\n }\r\n\r\n // ===========================================================================\r\n // THE FOUNDATION & WIRETAP (Passive Recording)\r\n // ===========================================================================\r\n public override wire(): void {\r\n // Variables Assignment\r\n this.lastTimestamp = performance.now();\r\n // Config Listeners\r\n this.config.on(\"whitelist\", this.handleWhitelist, { signal: this.signal, init: true });\r\n this.config.on(\"synchronous\", this.handleSynchronous, { signal: this.signal });\r\n // Post Wiring\r\n !this.state.paused && this.automove(this.state.forward); // will only succed with sync persist\r\n }\r\n\r\n protected override onAttach(rtr: Reactor<any>, rid: ReactorModuleId): void {\r\n rtr.config.eventCapturing = rtr.config.referenceTracking = rtr.config.smartCloning = rtr.config.eventTimeStamps = true;\r\n if (!this.state.history.length || !this.state.initialState[rid]) this.state.initialState[rid] = this.getPayload(rtr, rid);\r\n this.attachPaths(rtr, rid);\r\n }\r\n\r\n protected override onPath = this.record;\r\n /** Chronicling the lifecycle of the system, Captures the essence of every mutation wave that bubbles up. */\r\n protected record(e: REvent<any, P> | Payload<any, P>, rid = this.rids.get(e.reactor)!): void {\r\n if (!this.state.paused || !(this._tracking ?? this.state.tracking) || e.silent) return;\r\n if (this.state.currentFrame < this.state.history.length) this.state.history.length = this.state.currentFrame; // we must destroy the \"Alternate Future\" (the redo stack) before recording.\r\n const timestamp = (e as any).timestamp ?? performance.now(); // payloads dont allow timestamps since they're sync, but you asked for it\r\n let en = { path: e.target.path, to: e.reactor.snapshot(false, e.target.value), from: !this.config.mirrorReads || !e.target.path.includes(\"intent\") ? e.reactor.snapshot(false, e.target.oldValue) : getPath(e.reactor.core as any, e.target.path.replace(\"intent\", \"state\")), type: (e as any).staticType ?? e.type, rid, deltat: timestamp - this.lastTimestamp } as HistoryEntry<any, P>;\r\n !e.target.hadKey && (en.hadKey = false);\r\n if (this.config.beforeEntry) {\r\n const res = this.config.beforeEntry(en, this.state.history, e); // the power to edit history as it unfolds, or even block it entirely if you want to be a total control freak about it\r\n if (res === false) return; // blocking entry\r\n if (res && res !== true) en = res;\r\n }\r\n e.tx ? this.resolveTx(e.tx, timestamp, en.deltat).nodes.push(en) : this.state.history.push(en); // hybrid so no more space than necessary\r\n force(() => (this.state.currentFrame = this.state.history.length), !!e.tx); // Lock the playhead to the absolute present, re-trigger if tx\r\n while (this.state.history.length > this.config.limit) this.state.history.shift(), this.state.currentFrame--; // Drop the oldest memories if we exceed the limit, `>` since after entering\r\n this.lastTimestamp = timestamp; // Update the metronome with the timestamp of the latest event\r\n }\r\n /** Resolves and constructs the hierarchical ancestry for nested transactions as they bubble up from the depths. */\r\n protected resolveTx(tx: Transaction, timestamp: number, deltat: number): HistoryTransaction<T, P> {\r\n let px = this.txMap.get(tx); // previous tx\r\n if (px) return (px.end = timestamp), tx.parent && this.resolveTx(tx.parent, timestamp, deltat), px; // this is peak analytical metrics here\r\n this.txMap.set(tx, (px = { id: tx.id, label: tx.label, nodes: [], deltat: 0, start: timestamp, end: timestamp } as HistoryTransaction<T, P>)); // start and end unlike singular mutations\r\n return tx.parent ? this.resolveTx(tx.parent, timestamp, deltat).nodes.push(px) : ((px.deltat = deltat), this.state.history.push(px)), px;\r\n }\r\n\r\n /** Resumes the passive recording of state changes. */\r\n public track(): void {\r\n (this.state.tracking = this._tracking = true), !this.state.paused && this.automove(this.state.forward); // peak init assist :)\r\n }\r\n /**\r\n * Pauses the passive recording of state changes and returns `this`. Useful to call at creation time to avoid recording hydration waves.\r\n * @returns `this`\r\n */\r\n public untrack() {\r\n this.lastTimestamp = performance.now(); // Reset delta-t baseline\r\n return (this.state.tracking = this._tracking = false), this;\r\n }\r\n\r\n /** Clears timeline history and resets the playhead and initial snapshots to current reactor state. */\r\n public clear(): void {\r\n this.pause();\r\n this.state.history.length = this.state.currentFrame = 0;\r\n for (const [rid, rtr] of this.deps) this.state.initialState[rid] = this.getPayload(rtr, rid);\r\n this.lastTimestamp = performance.now();\r\n }\r\n\r\n // ===========================================================================\r\n // THE TIME MACHINE (Manual Controls)\r\n // ===========================================================================\r\n /**\r\n * Instant state reconstruction (teleport) to a given history frame index.\r\n * Applies recorded nodes forward or backward until the playhead reaches `index`.\r\n * @param index Target history frame index to jump to (clamped to bounds).\r\n * @param keepShield If true, keep the paused shield active after applying.\r\n */\r\n public jumpTo(index: number = 0, keepShield = false): void {\r\n this.state.paused = false;\r\n const target = clamp(0, index, this.state.history.length), // Ensure bounds\r\n forward = target > this.state.currentFrame;\r\n // Glide until the playhead locks exactly onto the target\r\n while (this.state.currentFrame !== target) {\r\n const frame = this.state.history[forward ? this.state.currentFrame : this.state.currentFrame - 1]; // Grab the correct frame (Current unapplied frame if going forward, previous applied frame if going backward)\r\n this.applyNode(frame, forward); // 2. Apply the frame's mutations to the reactor(s)\r\n forward ? this.state.currentFrame++ : this.state.currentFrame--; // 3. Move the playhead\r\n this.config.onApply(frame, forward); // here you go, dev!\r\n }\r\n for (const rtr of this.deps.values()) rtr.tick(); // Batch Flush: Flush ALL teleportation ripples before dropping the shield!\r\n if (!keepShield) this.state.paused = true;\r\n }\r\n /** Re-enacting a node that represents a point in time be it a transaction of transactions or a solitary mutation. */\r\n protected applyNode(node: HistoryNode<T, P>, forward = true): void {\r\n if (\"nodes\" in node) for (let len = node.nodes.length, i = forward ? 0 : len - 1; forward ? i < len : i >= 0; forward ? i++ : i--) this.applyNode(node.nodes[i], forward);\r\n else {\r\n let mirror: string | undefined;\r\n const rtr = this.deps.get(node.rid) || this.deps.values().next().value!, // owner of the node index for (single||multi)-reactor management\r\n path = (!this.config.mirrorWrites || !node.path.includes(\"state\") || !hasPath(rtr.core, (mirror = node.path.replace(\"state\", \"intent\"))) ? node.path : mirror) as any;\r\n if (forward) node.type === \"delete\" ? deletePath(rtr.core, path) : setPath(rtr.core, path, deepClone(node.to, rtr.config));\r\n else node.hadKey === false ? deletePath(rtr.core, path) : setPath(rtr.core, path, deepClone(node.from, rtr.config));\r\n }\r\n }\r\n\r\n /**\r\n * Step through time by a number of frames.\r\n * @param stride Number of frames to move the playhead by.\r\n * @param forward Direction: `true` for forward, `false` for backward.\r\n */\r\n public step(stride = 1, forward = true): void {\r\n if (forward ? this.state.currentFrame >= this.state.history.length : this.state.currentFrame <= 0) return; // Already at the edge of the timeline\r\n this.pause(), forward ? this.jumpTo(this.state.currentFrame + stride) : this.jumpTo(this.state.currentFrame - stride);\r\n }\r\n /** Returns `true` if there is history to step back into. */\r\n public get canUndo(): boolean {\r\n return this.state.currentFrame > 0;\r\n }\r\n /**\r\n * Step back in time (undo).\r\n * @param stride Optional `number` of frames to undo.\r\n */\r\n public undo(stride?: unknown): void {\r\n this.step(arguments.length && \"number\" === typeof stride ? stride : 1, false);\r\n }\r\n /** Returns `true` if there is a future to step forward into. */\r\n public get canRedo(): boolean {\r\n return this.state.currentFrame < this.state.history.length;\r\n }\r\n /**\r\n * Step forward in time (redo).\r\n * @param stride Optional `number` of frames to redo.\r\n */\r\n public redo(stride?: unknown): void {\r\n this.step(arguments.length && \"number\" === typeof stride ? stride : 1, true);\r\n }\r\n\r\n // ===========================================================================\r\n // THE VCR (Automated Playback)\r\n // ===========================================================================\r\n /**\r\n * Core automove engine. Replays or rewinds the recorded history honoring recorded time gaps.\r\n * @param forward Direction of playback: `true` to play forward, `false` to rewind.\r\n * @returns Promise<void> Resolves when playback completes or is paused/stopped.\r\n */\r\n public async automove(forward = true): Promise<void> {\r\n const seq = ++this.playbackSeq;\r\n this.state.paused = false;\r\n this.state.forward = forward;\r\n while (seq === this.playbackSeq && !this.state.paused && (forward ? this.state.currentFrame < this.state.history.length : this.state.currentFrame > 0)) {\r\n const dFrame = this.state.history[this.state.currentFrame + (forward ? 0 : -1)], // chronology\r\n delay = Math.min((\"nodes\" in dFrame ? dFrame.end - dFrame.start + dFrame.deltat : dFrame.deltat) / this.config.playbackRate, this.config.maxPlaybackDelay);\r\n if (delay > 0) await new Promise<void>((res) => setTimeout(res, delay, this.signal));\r\n if (!this.state.paused) this.jumpTo(this.state.currentFrame + (forward ? 1 : -1), true);\r\n }\r\n if (seq === this.playbackSeq) this.state.paused = true;\r\n }\r\n /**\r\n * Start chronological re-enactment of the session (play forward).\r\n * @returns Promise<void> Resolves when playback completes.\r\n */\r\n public play(): Promise<void> {\r\n return this.automove(true);\r\n }\r\n /**\r\n * Start reverse chronological re-enactment of the session (rewind).\r\n * @returns Promise<void> Resolves when rewind completes.\r\n */\r\n public rewind(): Promise<void> {\r\n return this.automove(false);\r\n }\r\n\r\n /** Pause any ongoing playback or rewinding. */\r\n public pause(): void {\r\n this.playbackSeq++, (this.state.paused = true);\r\n }\r\n\r\n // ===========================================================================\r\n // TELEMETRY & I/O (Session Import/Export)\r\n // ===========================================================================\r\n /**\r\n * Export the current time-travel session state as a JSON string.\r\n * @param replacer Optional replacer function used by `JSON.stringify`.\r\n * @param space Optional spacing parameter for pretty-printing.\r\n * @returns The serialized session JSON.\r\n */\r\n public export(replacer?: JSONReplacer, space?: string | number): string {\r\n return JSON.stringify(this.state, replacer as any, space);\r\n }\r\n /**\r\n * Import a serialized session JSON and reconstruct internal state and snapshots.\r\n * @param json The serialized session JSON produced by `export()`.\r\n * @param reviver Optional reviver function used by `JSON.parse`.\r\n */\r\n public import(json: string, reviver?: JSONReviver, start = this.state.currentFrame, resume = !this.state.paused, forward = this.state.forward): void {\r\n setPath(this.state, \"*\", JSON.parse(json, reviver) as TimeTravelState<T, P>);\r\n this.lastTimestamp = performance.now();\r\n this.state.paused = false; // Shield import reconstruction from being recorded into history\r\n for (const [rid, rtr] of this.deps) {\r\n const paths = this.getPaths(rid);\r\n for (let i = 0, len = paths.length; i < len; i++) {\r\n const path = paths[i];\r\n fanout(rtr.core, path, getPath(this.state.initialState[rid], path) as any);\r\n }\r\n } // ticking after full revival for data accuracy\r\n for (const [rid, rtr] of this.deps) rtr.tick(this.config.whitelist ? this.getPaths(rid) : \"*\"); // Flush the genesis wave to the UI\r\n (this.state.currentFrame = 0), this.jumpTo(start), resume && this.automove(forward); // Anchor at genesis before reconstructing target frame\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { withMeta } from \"@utils/obj\";\n\n/**\n * Executes `fn` with `silent: true` merged into all current `Reactor` payloads.\n * Use this to perform mutations you don't want recorded by `TimeTravelModule`.\n * @param fn Function to execute with `silent` meta.\n * @param bool Override for ease of use in dynamic usecases, defaults to `true`\n */\nexport function silence<T>(fn: () => T, bool = true): T {\n return withMeta({ silent: bool }, fn);\n}\n\ndeclare module \"@defs/reactor\" {\n interface ReactorMeta {\n /** Flag indicating whether the mutation was silenced and should not be recorded by the `TimeTravelModule`. */\n silent?: boolean;\n }\n}\n","import { NIL } from \"@core/consts\";\nimport type { TextBundlerOptions } from \"./types\";\nimport type { HistoryEntry, HistoryNode } from \"../../types\";\nimport { matchPaths } from \"@src/ts/utils\";\nimport { HeuristicFn } from \"..\";\n\n/**\n * Ultra-optimized intelligent text history bundler.\n *\n * Goals:\n * - Human-feeling undo steps\n * - Prevent keystroke spam\n * - Preserve semantic typing chunks\n * - Handle rapid typing/backspacing naturally\n * - Avoid pathological giant merges\n *\n * This is designed for editors, inputs, terminals, code editors, note apps, IDEs, etc.\n */\nexport function createTextBundler({ throttle = 700, boundaryRegex: rgx = /[\\s.,!?;:\\n()[\\]{}'\"`]/, maxGrowth = 48, bundleInserts = true, bundleDeletes = true, strictMerges = true, whitelist, blacklist, toString }: TextBundlerOptions = NIL): HeuristicFn {\n return (entry: HistoryEntry, history: HistoryNode[]) => {\n if ((whitelist?.length && !matchPaths(whitelist, entry.path)) || (blacklist?.length && matchPaths(blacklist, entry.path))) return entry;\n\n const to = toString ? toString(entry.to, entry) : entry.to,\n from = toString ? toString(entry.from, entry) : entry.from;\n if (\"string\" !== typeof to || \"string\" !== typeof from) return entry; // Only string diffs\n\n const last = history[history.length - 1];\n if (!last) return entry; // Empty history\n if (\"nodes\" in last) return entry; // Don't crack open transactions\n if (last.path !== entry.path) return entry; // Path mismatch\n\n const lastTo = toString ? toString(last.to, last) : last.to,\n lastFrom = toString ? toString(last.from, last) : last.from;\n if (\"string\" !== typeof lastTo || \"string\" !== typeof lastFrom) return entry; // String-only previous\n\n if (entry.deltat > throttle) return entry; // Time window exceeded\n\n const prevDelta = lastTo.length - lastFrom.length,\n nextDelta = to.length - from.length,\n op = nextDelta > 0 ? \"insert\" : nextDelta < 0 ? \"delete\" : from !== to ? \"replace\" : \"unknown\",\n lastOp = prevDelta > 0 ? \"insert\" : prevDelta < 0 ? \"delete\" : lastFrom !== lastTo ? \"replace\" : \"unknown\";\n if (strictMerges && op !== lastOp) return entry; // Prevent weird typing/delete hybrids\n if (Math.abs(to.length - lastFrom.length) > maxGrowth) return entry; // Prevent gigantic semantic blobs\n\n // INSERTION or DELETION MERGING\n const isInsert = op === \"insert\";\n if (isInsert || op === \"delete\") {\n const bundleOp = isInsert ? bundleInserts : bundleDeletes,\n lastChar = (isInsert ? lastTo : lastFrom).at(-1);\n if (!bundleOp && lastChar && rgx.test(lastChar)) return entry; // If NOT bundling across boundaries, respect em\n history.pop(); // Merge rapid typing\n return { ...entry, from: last.from, deltat: last.deltat + entry.deltat };\n }\n // REPLACEMENTS\n // Usually selection paste / autocomplete / editor transforms. Keep isolated.\n return entry;\n };\n}\n\n/**\n * Sets the value of a text input/area and attempts to preserve the cursor position as best as possible.\n * @param el The input/textarea element to update.\n * @param value The new `value` to set. @default an empty string.\n * @param selStart The start position of the selection.\n * @param selEnd The end position of the selection.\n * @param selDir The direction of the selection.\n */\nexport function setValueWithCursor(el?: HTMLInputElement | HTMLTextAreaElement | null, value = \"\", selStart = 0, selEnd = 0, selDir: HTMLInputElement[\"selectionDirection\"] = \"none\") {\n if (el) (el.value = value), el.setSelectionRange(Math.min(selStart ?? el.selectionStart, value.length), Math.min(selEnd ?? el.selectionEnd, value.length), selDir! ?? el.selectionDirection);\n}\n\nexport type * from \"./types\";\n","import { CTX } from \"@src/ts/super\";\nimport type { HistoryEntry } from \"../types\";\nimport { HeuristicFn } from \".\";\n\n/**\n * Compresses multiple identical path writes within a transaction into a single payload.\n *\n * Goals:\n * - Reduce redundant entries in transactions where the same path is updated multiple times.\n * - Preserve the chronological order of first-touch for each unique path.\n *\n * This is designed for any scenario where multiple updates to the same path may occur within a single transaction.\n */\nexport function createTxPathMerger(): HeuristicFn {\n const activeTxs = new WeakMap<object, Map<string, HistoryEntry>>();\n\n return (entry: HistoryEntry) => {\n const tx = CTX.meta?.tx;\n if (!tx) return entry;\n\n // 1. Get or create the isolated tracker for this specific transaction depth\n let txMap = activeTxs.get(tx);\n if (!txMap) activeTxs.set(tx, (txMap = new Map()));\n\n // 2. Intercept & Compress\n if (txMap.has(entry.path)) {\n const existing = txMap.get(entry.path)!;\n existing.to = entry.to;\n existing.deltat += entry.deltat;\n return false; // Drop duplicate\n }\n\n // 3. First Touch\n return txMap.set(entry.path, entry), entry;\n };\n}\n","import type { HistoryEntry, HistoryNode } from \"../types\";\n\nimport type { Payload, REvent } from \"@defs/reactor\";\n\nexport type HeuristicFn = (entry: HistoryEntry, history: HistoryNode[], event: REvent<any, any> | Payload<any, any>) => HistoryEntry | boolean;\n\n/** Pipes a history entry through multiple heuristics sequentially. If any heuristic returns `false`, the entry is immediately dropped. */\nexport function composeHeuristics(...heuristics: HeuristicFn[]): HeuristicFn {\n const fns = heuristics.filter(Boolean); // in case you dynamically pass them\n\n return (entry: HistoryEntry, history: HistoryNode[], event: REvent<any, any> | Payload<any, any>) => {\n let current: HistoryEntry | boolean = entry;\n for (let i = 0, len = fns.length; i < len; i++) if ((current = fns[i](current as HistoryEntry, history, event)) === false) return false;\n return current;\n };\n}\n\nexport * from \"./text\";\nexport * from \"./path\";\n","export { effect } from \"./vanilla/effect\";\r\n\r\nexport { Autotracker, withTracker } from \"./autotracker\";\r\n\r\nexport { type TimeTravelConsoleConfig, TimeTravelConsole } from \"./vanilla/TimeTravelConsole\";\r\n","import { CTX, NIL, RAW } from \"@core/consts\";\r\nimport { Reactor } from \"@core/reactor\";\r\nimport type { EffectOptions } from \"@defs/reactor\";\r\nimport type { WildPaths, DeepReadonly } from \"@defs/obj\";\r\nimport { canHandle, nuke } from \"@utils/obj\";\r\n\r\nexport let activeTracker: Autotracker<any> | null = null;\r\n\r\n// ===========================================================================\r\n// The S.I.A (State & Intent Architecture) `AutoTracker`\r\n// ===========================================================================\r\n\r\n/**\r\n * - Auto-dependency tracker used to subscribe only to accessed paths.\r\n * - `tracked(...)` wraps a snapshot in a read-tracking proxy, and `callback(...)`\r\n * binds subscriptions for collected paths using `watch` (sync) or `on` (batched).\r\n * @typeParam T Root state object type.\r\n */\r\nexport class Autotracker<T extends object> {\r\n public proxy!: T;\r\n public deps = new Map<Reactor<any>, Set<string>>();\r\n public isTracking = true;\r\n protected rtr?: Reactor<T>;\r\n /** only allows one reactor to autotrack when available */\r\n protected autortr?: Reactor<T>;\r\n protected clups: Array<() => void> = [];\r\n protected lastPath?: WildPaths<T>;\r\n protected proxyCache = new WeakMap<object, any>();\r\n\r\n /** @param rtr Reactor instance used for path subscriptions. */\r\n constructor(rtr?: Reactor<T>) {\r\n this.autortr = this.rtr = rtr;\r\n }\r\n\r\n /**\r\n * Starts a new tracking pass and returns a readonly tracking proxy for `target` if `this` was instantiated with a `Reactor`.\r\n * @param target Snapshot (or state branch) to track reads from.\r\n * @returns Read-tracking readonly proxy.\r\n * @example\r\n * const atrkr = new Autotracker(rtr);\r\n * const state = atrkr.tracked(rtr.snapshot());\r\n * const name = state.user.profile.name;\r\n */\r\n public tracked(target: T): DeepReadonly<T> {\r\n return this.unblock(), (this.proxy = this.proxied(target, \"\")) as DeepReadonly<T>;\r\n }\r\n protected proxied<O extends object>(obj: O, path: string): O {\r\n if (!this.rtr || !obj || \"object\" !== typeof obj) return obj;\r\n const cached = this.proxyCache.get(obj);\r\n if (cached) return cached;\r\n if (!canHandle(obj, this.rtr!.config, false)) return obj;\r\n const proxy = new Proxy(obj, {\r\n // Minimal Proxy Handler\r\n get: (object, key, receiver) => {\r\n if (key === RAW) return this.rtr!.log(`👀 [AutoTracker \\`get\\` Trap] Peeked at ${object}`), object;\r\n const keyStr = String(key),\r\n fullPath = (path ? `${path}.${keyStr}` : keyStr) as WildPaths<T>;\r\n return this.rtr!.log(`🔍 [AutoTracker \\`get\\` Trap] Initiated for \"${keyStr}\" on '${path}'`), this.track(fullPath), this.proxied(!this.rtr!.config.preserveContext ? (object as any)[key] : Reflect.get(object, key, receiver), fullPath);\r\n },\r\n has: (object, key) => {\r\n const keyStr = String(key),\r\n fullPath = (path ? `${path}.${keyStr}` : keyStr) as WildPaths<T>;\r\n return this.rtr!.log(`❓ [AutoTracker \\`has\\` Trap] Initiated for \"${keyStr}\" on '${path}'`), this.track(fullPath), !this.rtr!.config.preserveContext ? key in object : Reflect.has(object, key);\r\n },\r\n getOwnPropertyDescriptor: (object, key) => {\r\n const keyStr = String(key),\r\n fullPath = (path ? `${path}.${keyStr}` : keyStr) as WildPaths<T>;\r\n return this.rtr!.log(`📋 [AutoTracker \\`getOwnPropertyDescriptor\\` Trap] Initiated for \"${keyStr}\" on '${path}'`), this.track(fullPath), !this.rtr!.config.preserveContext ? Object.getOwnPropertyDescriptor(object, key) : Reflect.getOwnPropertyDescriptor(object, key);\r\n },\r\n ownKeys: (object) => {\r\n const safePath = (path || \"*\") as WildPaths<T>;\r\n return this.rtr!.log(`🔑 [AutoTracker \\`ownKeys\\` Trap] Initiated on \"${safePath}\"`), this.track(safePath), Reflect.ownKeys(object); // no faster accurate way without Reflect API\r\n },\r\n set: (_, key) => {\r\n throw new Error(`🛡️ [AutoTracker \\`set\\` Trap] Blocked for \"${String(key)}\" on '${path}'`); // semantic unlike proxy default error\r\n },\r\n deleteProperty: (_, key) => {\r\n throw new Error(`🛡️ [AutoTracker \\`deleteProperty\\` Trap] Blocked for \"${String(key)}\" on '${path}'`); // semantic unlike proxy default error\r\n },\r\n defineProperty: (_, key) => {\r\n throw new Error(`🛡️ [AutoTracker \\`defineProperty\\` Trap] Blocked for \"${String(key)}\" on '${path}'`); // semantic unlike proxy default error\r\n },\r\n setPrototypeOf: (_, key) => {\r\n throw new Error(`🛡️ [AutoTracker \\`setPrototypeOf\\` Trap] Blocked for \"${String(key)}\" on '${path}'`); // semantic unlike proxy default error\r\n },\r\n });\r\n return this.proxyCache.set(obj, proxy), proxy;\r\n }\r\n\r\n /** Adds a path to the tracking set. */\r\n public track<const P extends WildPaths<T>>(path: P, rtr: Reactor<any> = this.rtr!, prune = false, strict = false): P {\r\n if (!this.isTracking || !path || (this.autortr && this.autortr !== rtr)) return path;\r\n let paths = this.deps.get(rtr);\r\n if (!prune && !paths) paths = (this.deps.set(rtr, (paths = new Set())), paths);\r\n if (path.startsWith(this.lastPath + \".\")) {\r\n const child = path.slice(this.lastPath!.length + 1);\r\n (strict || (!child.includes(\"Symbol(\") && child !== \"length\" && !/^\\d+$/.test(child))) && paths!.delete(this.lastPath!); // #SENSITIVE\r\n }\r\n return !prune && paths!.add((this.lastPath = path)), path;\r\n }\r\n /** Removes a path from the tracking set. */\r\n public untrack(path: WildPaths<T>, rtr: Reactor<any> = this.rtr!): void {\r\n this.deps.get(rtr)?.delete(path);\r\n }\r\n /** Enables path tracking. */\r\n public unblock(rtr: Reactor<any> = this.rtr!): void {\r\n this.deps.clear();\r\n this.autortr = rtr;\r\n this.isTracking = true;\r\n this.lastPath = undefined;\r\n }\r\n /** Temporarily disables path tracking. */\r\n public block(): void {\r\n this.autortr = undefined;\r\n this.isTracking = false;\r\n }\r\n\r\n /**\r\n * Subscribes an effect to tracked paths.\r\n * Uses `watch` when `options.sync === true` (synchronous updates), otherwise\r\n * uses `on` (batched/asynchronous listener wave).\r\n * @param cb Effect callback.\r\n * @param options Effect options.\r\n * @returns Cleanup function for active subscriptions.\r\n * @example\r\n * const atrkr = new Autotracker(rtr);\r\n * const view = atrkr.tracked(rtr.snapshot()); // tracked works if `rtr` was passed at instantiation\r\n * view.user.name;\r\n * const stop = atrkr.callback(() => console.log(\"changed\")); // re-run after when \".user.name\" changes\r\n * @example Packaged Customization\r\n * const atrkr = new Autotracker(); // no reactor passed\r\n * withTracker(atrkr, () => state.user.name); // import `withTracker` too\r\n * const stop = atrkr.callback(() => console.log(\"sync\"), { sync: true }); // re-run immediately when \".user.name\" changes, works on any path used from any reactor state\r\n * @example Extensive Customization\r\n * atrkr.unblock();\r\n * const prev = CTX.autotracker;\r\n * CTX.autotracker = atrkr; // import CTX first\r\n * state.user.name;\r\n * CTX.autotracker = prev;\r\n */\r\n public callback(cb: () => void, options: EffectOptions = NIL): () => void {\r\n this.cleanup();\r\n const method = options.sync ? \"watch\" : \"on\";\r\n for (const [rtr, paths] of this.deps) {\r\n if (!paths.size || paths.has(\"*\")) rtr && this.clups.push(rtr[method as \"on\"](\"*\", cb, options));\r\n else for (const path of paths) this.clups.push(rtr[method as \"on\"](path, cb, options));\r\n }\r\n return () => this.cleanup();\r\n }\r\n\r\n /** Clears active subscriptions and blocks tracking. */\r\n public cleanup(): void {\r\n this.block();\r\n for (let i = 0, len = this.clups.length; i < len; i++) this.clups[i]();\r\n this.clups.length = 0;\r\n }\r\n public destroy(): void {\r\n this.deps.clear(), this.cleanup(), nuke(this);\r\n }\r\n}\r\n\r\n/**\r\n * Utility function to run a callback with a specific tracker context, restoring the previous context afterward.\r\n * @param tracker The Autotracker instance to set as the active tracker during the callback execution.\r\n * @param callback The callback function to execute with the specified tracker context.\r\n * @param rtr Optional Reactor instance to associate with the tracker during execution.\r\n * @returns The result of the callback function.\r\n */\r\nexport function withTracker<T>(tracker: Autotracker<any>, callback: () => T, rtr?: Reactor<any>): T {\r\n const prev = CTX.autotracker; // to survive nested trackers\r\n CTX.autotracker = tracker;\r\n try {\r\n return tracker.unblock(rtr), callback();\r\n } finally {\r\n CTX.autotracker = prev;\r\n }\r\n}\r\n","import { NIL } from \"@core/consts\";\r\nimport type { EffectOptions } from \"@defs/reactor\";\r\nimport { Autotracker, withTracker } from \"../autotracker\";\r\n\r\n/**\r\n * Runs a reactive side effect in vanilla JavaScript.\r\n * The callback executes immediately, tracks accessed state, and re-runs when\r\n * tracked dependencies change.\r\n * @param callback Effect callback.\r\n * @param options Listener options if `sync: false` else Watcher Options.\r\n * @returns Cleanup function that stops tracking and releases resources.\r\n * @example\r\n * const stop = effect(() => console.log(state.count));\r\n */\r\nexport function effect(callback: () => void, options: EffectOptions = NIL): () => void {\r\n const atrkr = new Autotracker();\r\n let destroyed = false;\r\n const cleanup = () => ((destroyed = true), atrkr.destroy());\r\n (function execute() {\r\n if (destroyed) return;\r\n withTracker(atrkr, callback);\r\n options.once ? cleanup() : atrkr.callback(execute, options);\r\n })();\r\n return cleanup;\r\n}\r\n","import { Reactive, reactive } from \"@core/mixins\";\r\nimport { CTX } from \"@core/consts\";\r\nimport { wpArr } from \"@modules/base\";\r\nimport { TimeTravelModule } from \"@modules/timeTravel\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { nuke } from \"@utils/obj\";\r\nimport { formatKeyTooltip as formatKFD, keyEventAllowed, KEYS_BLOCKS, parseForARIAKS } from \"@utils/keys\";\r\nimport { effect } from \"./effect\";\r\n\r\nconst keys = {\r\n blocks: KEYS_BLOCKS,\r\n overrides: [\"Ctrl+z\", \"Cmd+z\", \"Ctrl+y\", \"Cmd+y\", \"Ctrl+Shift+z\", \"Cmd+Shift+z\", \"Home\", \"End\", \"ArrowLeft\", \"ArrowRight\", \"Space\", \"Alt+Space\", \"Escape\", \"Delete\"],\r\n shortcuts: { undo: [\"Ctrl+z\", \"Cmd+z\"], redo: [\"Ctrl+y\", \"Cmd+y\", \"Ctrl+Shift+z\", \"Cmd+Shift+z\"], genesis: \"Home\", trackUntrack: \"t\", ending: \"End\", prevFrame: \",\", nextFrame: \".\", playPause: \"Space\", rewind: \"Alt+Space\", closeOverlay: \"Escape\", clrHistory: \"Delete\", export: \"e\", import: \"i\", clear: \"c\" },\r\n};\r\n\r\n/** Reactive options for the TimeTravel overlay instance. */\r\nexport interface TimeTravelConsoleConfig {\r\n /** Header text shown at the top of the overlay panel. */\r\n title: string;\r\n /** Accent color used to derive panel theme variables. */\r\n color: string;\r\n /** Shows the overlay only in development when true. */\r\n devOnly: boolean;\r\n /** Initial open state applied when the overlay is created. */\r\n startOpen: boolean;\r\n /** Container element that owns the overlay layer and dock. */\r\n container?: HTMLElement;\r\n}\r\n\r\n/**\r\n * - Vanilla overlay controller for visual time-travel controls and timeline I/O.\r\n * - Mounts a docked HUD into the configured container, syncs its UI with module state, and forwards keyboard/button actions to the TimeTravelModule.\r\n * Supports reactive `config` updates (title/color/container/devOnly) and maintains local overlay UI state (`open` and `import` payload text).\r\n */\r\nexport class TimeTravelConsole {\r\n public static count = 0;\r\n public index = TimeTravelConsole.count;\r\n public config: Reactive<TimeTravelConsoleConfig>;\r\n public readonly state = reactive({ open: false, import: \"\", stride: 1 });\r\n public readonly time: TimeTravelModule;\r\n public readonly host: HTMLElement;\r\n private clups: Array<() => void> = [];\r\n private keydown: (e: KeyboardEvent) => void;\r\n private keyup: (e: KeyboardEvent) => void;\r\n\r\n /** Creates a docked TimeTravel overlay bound to a module instance.\r\n * @param time TimeTravel module instance that owns timeline operations.\r\n * @param build Optional initial overlay config overrides.\r\n */\r\n constructor(time: TimeTravelModule, build: Partial<TimeTravelConsoleConfig> = { devOnly: true }) {\r\n this.time = time;\r\n this.config = reactive({ title: `Time Travel Console ${(this.index = ++TimeTravelConsole.count)}`, ...build } as TimeTravelConsoleConfig);\r\n this.state.open = !!this.config.startOpen;\r\n let wlLive = false,\r\n blLive = false;\r\n const s = this.time.state,\r\n host = (this.host = createEl(\"div\", { className: \"sia-tt-console-host\" })),\r\n toggle = createEl(\"button\", { className: \"sia-tt-console-toggle\", type: \"button\", onclick: () => (this.state.open = !this.state.open) }),\r\n panel = createEl(\"aside\", { className: \"sia-tt-console\", ariaLabel: \"time travel overlay\" }),\r\n title = createEl(\"div\", { className: \"title\" }),\r\n frame = createEl(\"span\", { className: \"muted\" }),\r\n clrHistory = createEl(\"button\", { textContent: `Clear History${formatKFD(keys.shortcuts!.clrHistory)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.clrHistory), onclick: () => (this.time.clear(), (this.state.import = \"\")) }),\r\n undo = createEl(\"button\", { textContent: `Undo${formatKFD(keys.shortcuts!.undo[0])}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.undo), onclick: () => this.time.undo(this.state.stride) }),\r\n redo = createEl(\"button\", { textContent: `Redo${formatKFD(keys.shortcuts!.redo[0])}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.redo), onclick: () => this.time.redo(this.state.stride) }),\r\n genesis = createEl(\"button\", { textContent: `Genesis${formatKFD(keys.shortcuts!.genesis)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.genesis), onclick: () => this.time.jumpTo(0) }),\r\n playPause = createEl(\"button\", { onclick: () => this.time[s.paused ? \"play\" : \"pause\"](), ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.playPause) }),\r\n rewind = createEl(\"button\", { textContent: `Rewind${formatKFD(keys.shortcuts!.rewind)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.rewind), onclick: this.time.rewind }),\r\n trackUntrack = createEl(\"button\", { onclick: () => this.time[s.tracking ? \"untrack\" : \"track\"](), ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.trackUntrack) }),\r\n range = createEl(\"input\", { type: \"range\", min: \"0\", title: \"time travel frame\", ariaLabel: \"time travel frame\", oninput: () => this.time.jumpTo(Number(range.value)) }),\r\n exp = createEl(\"button\", { textContent: `Export${formatKFD(keys.shortcuts!.export)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.export), onclick: () => (this.state.import = this.time.export(null, 2)) }),\r\n imp = createEl(\"button\", { textContent: `Import${formatKFD(keys.shortcuts!.import)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.import), onclick: () => this.state.import.trim().length && this.time.import(this.state.import) }),\r\n clr = createEl(\"button\", { textContent: `Clear${formatKFD(keys.shortcuts!.clear)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts!.clear), onclick: () => (this.state.import = \"\") }),\r\n payload = createEl(\"textarea\", { className: \"sia-tt-io\", readOnly: true, placeholder: \"current payload json\", title: \"Current History Entry\" }),\r\n io = createEl(\"textarea\", { className: \"sia-tt-io\", placeholder: \"timeline payload json\", title: \"Time History\", oninput: () => (this.state.import = io.value) }),\r\n foot = createEl(\"p\", { className: \"sia-tt-footnote\", innerHTML: \"<span>Try this in your app? </span>\" }),\r\n link = createEl(\"a\", { target: \"_blank\", rel: \"noreferrer noopener\", textContent: \"sia-reactor\", href: \"https://www.npmjs.com/package/sia-reactor\" }),\r\n box = createEl(\"div\", { className: \"sia-tt-status-box\" }),\r\n status = createEl(\"div\", { className: \"sia-tt-status-row\" }),\r\n filters = createEl(\"div\", { className: \"sia-tt-status-row\" }),\r\n filterBox = createEl(\"div\", { className: \"sia-tt-status-box\" }),\r\n whitelistLabel = createEl(\"span\", { className: \"muted\", textContent: \"Whitelist:\" }),\r\n blacklistLabel = createEl(\"span\", { className: \"muted\", textContent: \"Blacklist:\" }),\r\n whitelist = createEl(\"input\", { className: \"sia-tt-filter-input sia-tt-io\", placeholder: 'a.b, c.d or {\"0\":[\"a.b\"]}', title: \"Whitelist paths\", onfocus: () => (wlLive = true), onblur: () => ((wlLive = false), (whitelist.value = formatPaths(this.time.config.whitelist, \"*\"))), oninput: (_, parsed: any = parsePaths(whitelist.value)) => parsed !== null && (this.time.config.whitelist = parsed) }),\r\n blacklist = createEl(\"input\", { className: \"sia-tt-filter-input sia-tt-io\", placeholder: 'a.b, c.d or {\"0\":[\"a.b\"]}', title: \"Blacklist paths\", onfocus: () => (blLive = true), onblur: () => ((blLive = false), (blacklist.value = formatPaths(this.time.config.blacklist, \"\"))), oninput: (_, parsed: any = parsePaths(blacklist.value, true)) => parsed !== null && (this.time.config.blacklist = parsed) }),\r\n speed = createEl(\"select\", { className: \"sia-tt-speed\", title: \"Playback Speed\", onchange: () => (this.time.config.playbackRate = Number(speed.value)) }),\r\n stride = createEl(\"input\", { className: \"sia-tt-stride sia-tt-button sia-tt-mini-input\", type: \"number\", min: \"1\", title: \"Skip Stride i.e. how many steps count as one unit\", oninput: () => (this.state.stride = Math.max(1, Number(stride.value) || 1)) }),\r\n stats = createEl(\"span\", { className: \"sia-tt-stats\" }),\r\n limit = createEl(\"input\", { className: \"sia-tt-limit sia-tt-mini-input sia-tt-button\", type: \"number\", min: \"1\", title: \"Maximum number of history entries kept in memory before older entries are discarded.\", oninput: () => (this.time.config.limit = Math.max(1, Number(limit.value) || 1)) }),\r\n delay = createEl(\"input\", { className: \"sia-tt-delay sia-tt-mini-input sia-tt-button\", type: \"number\", min: \"0\", step: \"50\", title: \"Maximum playback delay between timeline frames in milliseconds.\", oninput: () => (this.time.config.maxPlaybackDelay = Math.max(0, Number(delay.value) || 0)) }),\r\n read = createEl(\"label\", { className: \"sia-tt-check\", title: \"When recording intent mutations, read previous values from the matching state path instead of the intent path. Useful for accurate undo reconstruction of intent-driven flows.\" }),\r\n readBox = createEl(\"input\", { type: \"checkbox\", checked: !!this.time.config.mirrorReads, onchange: () => (this.time.config.mirrorReads = readBox.checked) }),\r\n write = createEl(\"label\", { className: \"sia-tt-check\", title: \"During playback and teleportation, mirror state writes into matching intent paths to re-enact the recorded history. Useful for accurate reconstruction of the whole session.\" }),\r\n writeBox = createEl(\"input\", { type: \"checkbox\", checked: !!this.time.config.mirrorWrites, onchange: () => (this.time.config.mirrorWrites = writeBox.checked) }),\r\n filterRow1 = createEl(\"div\", { className: \"sia-tt-filter-row\" }),\r\n filterRow2 = createEl(\"div\", { className: \"sia-tt-filter-row\" }),\r\n row1 = createEl(\"div\", { className: \"sia-tt-row\" }),\r\n row2 = createEl(\"div\", { className: \"sia-tt-row\" }),\r\n row3 = createEl(\"div\", { className: \"sia-tt-row\" }),\r\n row4 = createEl(\"div\", { className: \"sia-tt-row\" }),\r\n row5 = createEl(\"div\", { className: \"sia-tt-row sia-tt-config-row\" });\r\n speed.append(...[0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 4, 8, 16, 32].map((v) => createEl(\"option\", { value: String(v), textContent: `${v}x` })));\r\n status.append((box.append(frame), box), clrHistory);\r\n filters.append((filterBox.append((filterRow1.append(whitelistLabel, whitelist), filterRow1), (filterRow2.append(blacklistLabel, blacklist), filterRow2)), filterBox));\r\n panel.append(title, status, (row1.append(playPause, rewind, genesis), row1), (row2.append(undo, redo, trackUntrack, stride), row2), payload, (row3.append(speed, range), row3), filters, (row4.append(exp, imp, clr), row4), io, (row5.append(delay, limit, (read.append(readBox, \" Read Mirror\"), read), (write.append(writeBox, \" Write Mirror\"), write)), row5), (foot.prepend(stats), foot.append(link), foot));\r\n this.host.append(toggle, panel);\r\n this.keydown = (e, can = this.state.open && (this.config.devOnly ? CTX.isDevEnv : true), a = can && keyEventAllowed(e, keys)) => (a && e.stopImmediatePropagation(), a === \"undo\" ? this.time.undo(this.state.stride) : a === \"redo\" ? this.time.redo(this.state.stride) : a === \"genesis\" ? this.time.jumpTo(0) : a === \"trackUntrack\" ? this.time[s.tracking ? \"untrack\" : \"track\"]() : a === \"ending\" ? this.time.jumpTo(s.history.length) : a === \"prevFrame\" ? this.time.step(this.state.stride, false) : a === \"nextFrame\" ? this.time.step(this.state.stride, true) : a === \"rewind\" ? this.time.rewind() : a === \"playPause\" ? this.time[s.paused ? \"play\" : \"pause\"]() : a === \"clrHistory\" ? this.time.clear() : a === \"closeOverlay\" ? (this.state.open = false) : a === \"export\" ? (this.state.import = this.time.export()) : a === \"import\" ? this.state.import.trim().length && this.time.import(this.state.import) : a === \"clear\" && (this.state.import = \"\"));\r\n this.keyup = (e, can = this.state.open && (this.config.devOnly ? CTX.isDevEnv : true), a = can && keyEventAllowed(e, keys)) => a && e.stopImmediatePropagation();\r\n window.addEventListener(\"keydown\", this.keydown), window.addEventListener(\"keyup\", this.keyup);\r\n const sync = [\r\n effect(() => (this.config.color ? host.style.setProperty(\"--sia-tt-color\", this.config.color) : host.style.removeProperty(\"--sia-tt-color\"))),\r\n effect(() => {\r\n if (this.config.devOnly && !CTX.isDevEnv) return void host.remove();\r\n const dock = getDock(this.config.container);\r\n if (host.parentNode !== dock) dock.appendChild(host);\r\n }),\r\n effect(() => (toggle.textContent = `${(panel.hidden = !this.state.open) ? \"Show\" : \"Hide\"} ${(title.textContent = this.config.title ?? \"\")}`)),\r\n effect(() => (playPause.textContent = `${s.paused ? \"Play\" : \"Pause\"}${formatKFD(keys.shortcuts!.playPause)}`)),\r\n effect(() => (trackUntrack.textContent = `${s.tracking ? \"Untrack\" : \"Track\"}${formatKFD(keys.shortcuts!.trackUntrack)}`)),\r\n effect((sets = 0, txs = 0) => {\r\n range.max = String(s.history.length);\r\n range.disabled = clrHistory.disabled = !s.history.length;\r\n for (let i = 0, len = s.history.length; i < len; i++) {\r\n const frame = s.history[i];\r\n \"nodes\" in frame ? txs++ : frame.type === \"set\" && sets++;\r\n }\r\n stats.textContent = `Sets: ${sets} | Deletes: ${s.history.length - sets - txs} | Txs: ${txs}`;\r\n }),\r\n effect(() => {\r\n frame.textContent = `Frame: ${s.currentFrame} / ${s.history.length}`;\r\n genesis.disabled = undo.disabled = !this.time.canUndo;\r\n rewind.disabled = !s.paused || !s.currentFrame;\r\n playPause.disabled = redo.disabled = !this.time.canRedo;\r\n range.value = String(Math.min(s.currentFrame, s.history.length));\r\n payload.value = JSON.stringify(s.currentFrame ? s.history[s.currentFrame - 1] : { genesis: true, value: s.initialState }, null, 2);\r\n }),\r\n effect(() => {\r\n clr.disabled = imp.disabled = !this.state.import.trim().length;\r\n io.value !== this.state.import && (io.value = this.state.import);\r\n }),\r\n effect((v = String(this.time.config.playbackRate)) => v !== speed.value && (speed.value = v)),\r\n effect((v = String(this.state.stride)) => v !== stride.value && (stride.value = v)),\r\n effect((v = String(this.time.config.limit)) => v !== limit.value && (limit.value = v)),\r\n effect((v = String(this.time.config.maxPlaybackDelay)) => v !== delay.value && (delay.value = v)),\r\n effect((v = !!this.time.config.mirrorReads) => v !== readBox.checked && (readBox.checked = v)),\r\n effect((v = !!this.time.config.mirrorWrites) => v !== writeBox.checked && (writeBox.checked = v)),\r\n effect(() => (!wlLive && (whitelist.value = formatPaths(this.time.config.whitelist, \"*\")), !blLive && (blacklist.value = formatPaths(this.time.config.blacklist, \"\")))),\r\n ];\r\n this.clups.push(...sync);\r\n }\r\n\r\n destroy() {\r\n for (const clup of this.clups) clup();\r\n window.removeEventListener(\"keydown\", this.keydown), window.removeEventListener(\"keyup\", this.keyup);\r\n this.host.remove(), nuke(this), --TimeTravelConsole.count;\r\n }\r\n}\r\n\r\nfunction getDock(container?: HTMLElement) {\r\n const host = container && container !== document.documentElement ? container : document.body;\r\n if (host !== document.body && getComputedStyle(host).position === \"static\") host.style.position = \"relative\";\r\n const layer = host.querySelector(\":scope > .sia-tt-console-layer\") || createEl(\"div\", { className: \"sia-tt-console-layer\" }, undefined, { position: host === document.body ? \"fixed\" : \"absolute\" });\r\n if (layer.parentElement !== host) host.appendChild(layer);\r\n const dock = layer.querySelector(\":scope > .sia-tt-console-dock\") || createEl(\"div\", { className: \"sia-tt-console-dock\" });\r\n return dock.parentElement !== layer && layer.appendChild(dock), dock;\r\n}\r\nfunction formatPaths(paths: unknown, emptyText: string): string {\r\n return !paths ? emptyText : Array.isArray(paths) ? (paths.length ? paths.join(\", \") : emptyText) : \"object\" === typeof paths ? JSON.stringify(paths) : String(paths);\r\n}\r\nfunction parsePaths(raw: string, allowEmpty = false): unknown {\r\n const text = raw.trim();\r\n if (!text) return allowEmpty ? undefined : wpArr;\r\n if (text[0] === \"{\")\r\n try {\r\n const parsed = JSON.parse(text);\r\n if (parsed && \"object\" === typeof parsed) return parsed;\r\n } catch {\r\n return null; // invalid JSON resets to last valid\r\n }\r\n // prettier-ignore\r\n const list = text.split(\",\").map((p) => p.trim()).filter(Boolean);\r\n return list.length ? list : allowEmpty ? undefined : wpArr;\r\n}\r\n"],"mappings":"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","names":["keys","key","state","target","depth","key","target","result","keys","setTimeout","setTimeout","owner","combo","actual","state","e","setTimeout","setTimeout","frame"]}
|