{"version":3,"file":"store-BgOPuxuQ.cjs","names":[],"sources":["../src/store.ts"],"sourcesContent":["/**\n * @fileoverview Deep reactive store implementation for Fict.\n *\n * `$store` creates a deeply reactive proxy that tracks property access at the path level.\n * It is the only user-facing deep store API. Runtime `createStore` remains an\n * internal compiler/resume helper; application code should import `$store`.\n *\n * @example\n * ```typescript\n * const user = $store({ name: 'Alice', address: { city: 'London' } })\n * user.address.city = 'Paris' // Fine-grained reactive update\n * ```\n */\n\nimport { createSignal, type Signal } from '@fictjs/runtime/advanced'\n\n/** Function type for bound methods */\ntype AnyFn = (...args: unknown[]) => unknown\n\n/** Cache entry for bound methods to preserve identity */\ninterface BoundMethodEntry {\n  ref: AnyFn\n  bound: AnyFn\n}\n\n/** Type for objects with indexable properties */\ntype IndexableObject = Record<string | symbol, unknown>\n\n/** Symbol to mark proxies and prevent double-wrapping */\nconst IS_STORE_PROXY = Symbol('fict-store-proxy')\n\n/** WeakSet to track raw objects that have been proxied (for reverse lookup) */\nconst RAW_TO_PROXY = new WeakMap<object, object>()\n\n/** Cache of proxied objects to avoid duplicate proxies */\nconst PROXY_CACHE = new WeakMap<object, unknown>()\n\n/** Dev mode detection */\nconst isDev =\n  typeof __DEV__ !== 'undefined'\n    ? __DEV__\n    : typeof process === 'undefined' || process.env?.NODE_ENV !== 'production'\n\n/** Track if we've warned about direct mutation for a target object */\nconst MUTATION_WARNED = new WeakSet<object>()\n\n/** Properties to skip for direct mutation warning (built-in/internal properties) */\nconst SKIP_MUTATION_WARNING_PROPS: (string | symbol)[] = [\n  'constructor',\n  'prototype',\n  '__proto__',\n  'toString',\n  'valueOf',\n  'toLocaleString',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  Symbol.toStringTag,\n  Symbol.iterator,\n  Symbol.toPrimitive,\n]\n\ntype SignalBucket = Record<string | symbol, Signal<unknown>>\ntype PresenceSignalBucket = Record<string | symbol, Signal<boolean>>\ninterface DescriptorSignalEntry {\n  signal: Signal<number>\n  version: number\n}\n\ntype DescriptorSignalBucket = Record<string | symbol, DescriptorSignalEntry>\n\n/** Cache of signals per object property */\nconst SIGNAL_CACHE = new WeakMap<object, SignalBucket>()\n\n/** Cache of property-presence signals used by the `in` operator. */\nconst PRESENCE_SIGNAL_CACHE = new WeakMap<object, PresenceSignalBucket>()\n\n/** Cache of descriptor-version signals used by reflection APIs. */\nconst DESCRIPTOR_SIGNAL_CACHE = new WeakMap<object, DescriptorSignalBucket>()\n\n/** Cache of bound methods to preserve function identity across reads */\nconst BOUND_METHOD_CACHE = new WeakMap<object, Map<string | symbol, BoundMethodEntry>>()\n\n/** Suppress defineProperty notifications caused by the set trap's Reflect.set receiver path. */\nconst DEFINE_NOTIFICATION_SUPPRESSIONS = new WeakMap<object, Set<string | symbol>>()\n\n/** Special key for tracking iteration (Object.keys, for-in, etc.) */\nconst ITERATE_KEY = Symbol('iterate')\n\n/** Tokens used to invalidate a value signal without evaluating an accessor. */\nconst ACCESSOR_INVALIDATIONS = new WeakSet<object>()\n\nfunction createAccessorInvalidation(): object {\n  const token = {}\n  ACCESSOR_INVALIDATIONS.add(token)\n  return token\n}\n\nfunction isAccessorInvalidation(value: unknown): boolean {\n  return typeof value === 'object' && value !== null && ACCESSOR_INVALIDATIONS.has(value)\n}\n\n/**\n * Get or create a signal for a specific property on a target object.\n * @internal\n */\nfunction getSignal(\n  target: object,\n  prop: string | symbol,\n  initialValue?: unknown,\n  useProvidedInitial = false,\n): Signal<unknown> {\n  let signals = SIGNAL_CACHE.get(target)\n  if (!signals) {\n    signals = Object.create(null) as SignalBucket\n    SIGNAL_CACHE.set(target, signals)\n  }\n  if (!Object.prototype.hasOwnProperty.call(signals, prop)) {\n    const initial =\n      prop === ITERATE_KEY\n        ? 0\n        : useProvidedInitial\n          ? initialValue\n          : (target as IndexableObject)[prop]\n    signals[prop] = createSignal(initial)\n  }\n  return signals[prop]!\n}\n\nfunction getCachedSignal(\n  signals: SignalBucket | undefined,\n  prop: string | symbol,\n): Signal<unknown> | undefined {\n  if (!signals || !Object.prototype.hasOwnProperty.call(signals, prop)) return undefined\n  return signals[prop]!\n}\n\n/**\n * Get or create a signal that tracks whether a property exists on a target.\n * Presence must be tracked separately from value so an own `undefined` key can\n * be distinguished from a missing key.\n * @internal\n */\nfunction getPresenceSignal(target: object, prop: string | symbol): Signal<boolean> {\n  let signals = PRESENCE_SIGNAL_CACHE.get(target)\n  if (!signals) {\n    signals = Object.create(null) as PresenceSignalBucket\n    PRESENCE_SIGNAL_CACHE.set(target, signals)\n  }\n  if (!Object.prototype.hasOwnProperty.call(signals, prop)) {\n    signals[prop] = createSignal(Reflect.has(target, prop))\n  }\n  return signals[prop]!\n}\n\n/** Notify `in` subscribers when a property's presence changes. */\nfunction triggerPresence(target: object, prop: string | symbol): void {\n  const signals = PRESENCE_SIGNAL_CACHE.get(target)\n  if (!signals || !Object.prototype.hasOwnProperty.call(signals, prop)) return\n  signals[prop]!(Reflect.has(target, prop))\n}\n\n/** Get or create a version signal for an own-property descriptor. */\nfunction getDescriptorSignal(target: object, prop: string | symbol): Signal<number> {\n  let signals = DESCRIPTOR_SIGNAL_CACHE.get(target)\n  if (!signals) {\n    signals = Object.create(null) as DescriptorSignalBucket\n    DESCRIPTOR_SIGNAL_CACHE.set(target, signals)\n  }\n  if (!Object.prototype.hasOwnProperty.call(signals, prop)) {\n    signals[prop] = { signal: createSignal(0), version: 0 }\n  }\n  return signals[prop]!.signal\n}\n\n/** Notify descriptor consumers without reading the property's value. */\nfunction triggerDescriptor(target: object, prop: string | symbol): void {\n  const signals = DESCRIPTOR_SIGNAL_CACHE.get(target)\n  if (!signals || !Object.prototype.hasOwnProperty.call(signals, prop)) return\n  const entry = signals[prop]!\n  entry.version += 1\n  entry.signal(entry.version)\n}\n\n/**\n * Trigger iteration signal to notify consumers that keys have changed.\n * @internal\n */\nfunction triggerIteration(target: object): void {\n  const signals = SIGNAL_CACHE.get(target)\n  const signal = getCachedSignal(signals, ITERATE_KEY)\n  if (signal) {\n    const current = signal() as number\n    signal(current + 1)\n  }\n}\n\nfunction getPropertyDescriptor(\n  target: object,\n  prop: string | symbol,\n): PropertyDescriptor | undefined {\n  let current: object | null = target\n  while (current) {\n    const descriptor = Object.getOwnPropertyDescriptor(current, prop)\n    if (descriptor) return descriptor\n    current = Object.getPrototypeOf(current)\n  }\n  return undefined\n}\n\nfunction canSkipSameValueSet(\n  target: object,\n  prop: string | symbol,\n  descriptor: PropertyDescriptor | undefined,\n): boolean {\n  return (\n    !!descriptor &&\n    Object.prototype.hasOwnProperty.call(target, prop) &&\n    'value' in descriptor &&\n    descriptor.writable === true\n  )\n}\n\nfunction mustReturnExactDataValue(target: object, prop: string | symbol): boolean {\n  const descriptor = Object.getOwnPropertyDescriptor(target, prop)\n  return !!descriptor && 'value' in descriptor && !descriptor.configurable && !descriptor.writable\n}\n\nfunction suppressDefineNotification(target: object, prop: string | symbol): () => void {\n  let suppressions = DEFINE_NOTIFICATION_SUPPRESSIONS.get(target)\n  if (!suppressions) {\n    suppressions = new Set()\n    DEFINE_NOTIFICATION_SUPPRESSIONS.set(target, suppressions)\n  }\n  suppressions.add(prop)\n  return () => {\n    const current = DEFINE_NOTIFICATION_SUPPRESSIONS.get(target)\n    if (!current) return\n    current.delete(prop)\n    if (current.size === 0) {\n      DEFINE_NOTIFICATION_SUPPRESSIONS.delete(target)\n    }\n  }\n}\n\nfunction isDefineNotificationSuppressed(target: object, prop: string | symbol): boolean {\n  return DEFINE_NOTIFICATION_SUPPRESSIONS.get(target)?.has(prop) ?? false\n}\n\nfunction descriptorShapeChanged(\n  before: PropertyDescriptor | undefined,\n  after: PropertyDescriptor | undefined,\n): boolean {\n  if (!before || !after) return before !== after\n  if (before.enumerable !== after.enumerable || before.configurable !== after.configurable) {\n    return true\n  }\n\n  const beforeIsData = 'value' in before\n  const afterIsData = 'value' in after\n  if (beforeIsData !== afterIsData) return true\n  if (beforeIsData && afterIsData) return before.writable !== after.writable\n  return before.get !== after.get || before.set !== after.set\n}\n\nfunction descriptorContentChanged(\n  before: PropertyDescriptor | undefined,\n  after: PropertyDescriptor | undefined,\n): boolean {\n  if (descriptorShapeChanged(before, after)) return true\n  if (!before || !after) return false\n  if ('value' in before && 'value' in after) return before.value !== after.value\n  return false\n}\n\n/**\n * Only arrays and plain records support transparent deep proxying. Branded\n * platform objects and class instances rely on their original receiver for\n * internal slots/private fields and are therefore treated as opaque values.\n */\nfunction isWrappableStoreObject(value: object): boolean {\n  if (Array.isArray(value)) return true\n  const prototype = Object.getPrototypeOf(value)\n  if (prototype === null || prototype === Object.prototype) return true\n\n  const constructor = Object.getOwnPropertyDescriptor(prototype, 'constructor')\n  return !constructor || constructor.value === Object\n}\n\n/**\n * Create a deep reactive store using Proxy.\n *\n * Unlike `$state` (which is shallow and compiler-transformed), `$store` provides:\n * - **Deep reactivity**: Nested objects are automatically wrapped in proxies\n * - **Direct mutation**: Modify properties directly without spread operators\n * - **Path-level tracking**: Only components reading changed paths re-render\n *\n * @param initialValue - The initial object to make reactive\n * @returns A reactive proxy of the object\n *\n * @example\n * ```tsx\n * import { $store } from 'fict'\n *\n * const form = $store({\n *   user: { name: '', email: '' },\n *   settings: { theme: 'light' }\n * })\n *\n * // Direct mutation works\n * form.user.name = 'Alice'\n *\n * // In JSX - only updates when form.user.name changes\n * <input value={form.user.name} />\n * ```\n *\n * @public\n */\nexport function $store<T extends object>(initialValue: T): T {\n  if (typeof initialValue !== 'object' || initialValue === null) {\n    return initialValue\n  }\n\n  // Prevent double-wrapping - if already a store proxy, return as-is\n  if ((initialValue as IndexableObject)[IS_STORE_PROXY]) {\n    return initialValue\n  }\n\n  if (!isWrappableStoreObject(initialValue)) {\n    return initialValue\n  }\n\n  // Check if this object was already wrapped (reverse lookup)\n  if (RAW_TO_PROXY.has(initialValue)) {\n    return RAW_TO_PROXY.get(initialValue) as T\n  }\n\n  if (PROXY_CACHE.has(initialValue)) {\n    return PROXY_CACHE.get(initialValue) as T\n  }\n\n  const proxy = new Proxy(initialValue, {\n    get(target, prop, receiver) {\n      // Return true for IS_STORE_PROXY to identify this as a store proxy\n      if (prop === IS_STORE_PROXY) {\n        return true\n      }\n\n      const currentValue = Reflect.get(target, prop, receiver ?? proxy)\n      // Always touch the signal so reference changes to this property are tracked,\n      // even if the value is an object we proxy further.\n      const signal = getSignal(target, prop, currentValue, true)\n      const trackedValue = signal()\n\n      // Remove \"read-time write\" - direct mutation is now undefined behavior\n      // In dev mode, warn once per object if we detect the underlying object was mutated directly\n      if (\n        isDev &&\n        currentValue !== trackedValue &&\n        !isAccessorInvalidation(trackedValue) &&\n        !SKIP_MUTATION_WARNING_PROPS.includes(prop) &&\n        !MUTATION_WARNED.has(target)\n      ) {\n        MUTATION_WARNED.add(target)\n        console.warn(`[fict] Use $store for ${String(prop)}.`)\n      }\n\n      if (typeof currentValue === 'function') {\n        if (mustReturnExactDataValue(target, prop)) {\n          return currentValue\n        }\n\n        let boundMethods = BOUND_METHOD_CACHE.get(target)\n        if (!boundMethods) {\n          boundMethods = new Map()\n          BOUND_METHOD_CACHE.set(target, boundMethods)\n        }\n        const cached = boundMethods.get(prop)\n        if (cached && cached.ref === currentValue) {\n          return cached.bound\n        }\n\n        const bound = (currentValue as AnyFn).bind(receiver ?? proxy)\n        boundMethods.set(prop, { ref: currentValue as AnyFn, bound })\n        return bound\n      }\n      {\n        const boundMethods = BOUND_METHOD_CACHE.get(target)\n        if (boundMethods && boundMethods.has(prop)) {\n          boundMethods.delete(prop)\n          if (boundMethods.size === 0) {\n            BOUND_METHOD_CACHE.delete(target)\n          }\n        }\n      }\n\n      // If the value is an object/array, we recursively wrap it in a store\n      if (typeof currentValue === 'object' && currentValue !== null) {\n        if (mustReturnExactDataValue(target, prop)) {\n          return currentValue\n        }\n\n        return $store(currentValue as Record<string, unknown>)\n      }\n\n      // For primitives (and functions), we return the signal value (which tracks the read)\n      return currentValue\n    },\n\n    set(target, prop, newValue, receiver) {\n      const oldLength = Array.isArray(target) ? target.length : undefined\n      const hadKey = Object.prototype.hasOwnProperty.call(target, prop)\n      const oldOwnDescriptor = Reflect.getOwnPropertyDescriptor(target, prop)\n      const descriptor = getPropertyDescriptor(target, prop)\n\n      // Same-value assignment is only inert for own writable data properties.\n      if (canSkipSameValueSet(target, prop, descriptor)) {\n        const oldValue = Reflect.get(target, prop, receiver)\n        if (oldValue === newValue && hadKey) {\n          return true\n        }\n      }\n\n      const releaseDefineSuppression = suppressDefineNotification(target, prop)\n      let result: boolean\n      try {\n        result = Reflect.set(target, prop, newValue, receiver)\n      } finally {\n        releaseDefineSuppression()\n      }\n      if (!result) {\n        return false\n      }\n\n      // IMPORTANT: Clear bound method cache BEFORE updating the signal\n      const boundMethods = BOUND_METHOD_CACHE.get(target)\n      if (boundMethods && boundMethods.has(prop)) {\n        boundMethods.delete(prop)\n        if (boundMethods.size === 0) {\n          BOUND_METHOD_CACHE.delete(target)\n        }\n      }\n\n      // Update the signal if it exists\n      const signals = SIGNAL_CACHE.get(target)\n      const signal = getCachedSignal(signals, prop)\n      if (signal) {\n        let nextValue = newValue\n        if (descriptor && !('value' in descriptor)) {\n          try {\n            nextValue = Reflect.get(target, prop, receiver)\n          } catch {\n            nextValue = newValue\n          }\n        }\n        signal(nextValue)\n      }\n      triggerPresence(target, prop)\n      const nextOwnDescriptor = Reflect.getOwnPropertyDescriptor(target, prop)\n      if (descriptorContentChanged(oldOwnDescriptor, nextOwnDescriptor)) {\n        triggerDescriptor(target, prop)\n      }\n\n      // If new property, trigger iteration update\n      if (!hadKey) {\n        triggerIteration(target)\n      }\n\n      // Ensure array length subscribers are notified even if the native push/pop\n      // doesn't trigger a separate set trap for \"length\" (defensive).\n      if (Array.isArray(target) && prop !== 'length') {\n        const lengthSignal = getCachedSignal(signals, 'length')\n        if (lengthSignal) {\n          lengthSignal(target.length)\n        }\n        if (target.length !== oldLength) {\n          triggerDescriptor(target, 'length')\n        }\n      }\n\n      // If it's an array and length changed implicitly, we might need to handle it.\n      if (Array.isArray(target) && prop === 'length') {\n        const nextLength = target.length\n        if (typeof oldLength === 'number' && nextLength < oldLength) {\n          for (let i = nextLength; i < oldLength; i += 1) {\n            const key = String(i)\n            const signal = getCachedSignal(signals, key)\n            if (signal) {\n              signal(undefined)\n            }\n            triggerPresence(target, key)\n            triggerDescriptor(target, key)\n          }\n        }\n        triggerIteration(target)\n      }\n\n      return result\n    },\n\n    deleteProperty(target, prop) {\n      const hadKey = Object.prototype.hasOwnProperty.call(target, prop)\n      const result = Reflect.deleteProperty(target, prop)\n\n      if (result) {\n        triggerPresence(target, prop)\n        if (hadKey) {\n          triggerDescriptor(target, prop)\n        }\n      }\n\n      if (result && hadKey) {\n        const signals = SIGNAL_CACHE.get(target)\n        const signal = getCachedSignal(signals, prop)\n        if (signal) {\n          signal(undefined)\n        }\n\n        // Clear bound method cache\n        const boundMethods = BOUND_METHOD_CACHE.get(target)\n        if (boundMethods && boundMethods.has(prop)) {\n          boundMethods.delete(prop)\n          if (boundMethods.size === 0) {\n            BOUND_METHOD_CACHE.delete(target)\n          }\n        }\n\n        triggerIteration(target)\n      }\n\n      return result\n    },\n\n    ownKeys(target) {\n      getSignal(target, ITERATE_KEY)()\n      return Reflect.ownKeys(target)\n    },\n\n    has(target, prop) {\n      getPresenceSignal(target, prop)()\n      return Reflect.has(target, prop)\n    },\n\n    getOwnPropertyDescriptor(target, prop) {\n      getDescriptorSignal(target, prop)()\n      getSignal(target, ITERATE_KEY)()\n      return Reflect.getOwnPropertyDescriptor(target, prop)\n    },\n\n    defineProperty(target, prop, descriptor) {\n      const hadKey = Object.prototype.hasOwnProperty.call(target, prop)\n      const oldLength = Array.isArray(target) ? target.length : undefined\n      const oldDescriptor = Reflect.getOwnPropertyDescriptor(target, prop)\n      const result = Reflect.defineProperty(target, prop, descriptor)\n\n      if (!result || isDefineNotificationSuppressed(target, prop)) {\n        return result\n      }\n\n      const nextDescriptor = Reflect.getOwnPropertyDescriptor(target, prop)\n      const hasKey = Object.prototype.hasOwnProperty.call(target, prop)\n      const signals = SIGNAL_CACHE.get(target)\n      const signal = getCachedSignal(signals, prop)\n      if (signal) {\n        const nextValue =\n          nextDescriptor && 'value' in nextDescriptor\n            ? nextDescriptor.value\n            : createAccessorInvalidation()\n        signal(nextValue)\n      }\n      triggerPresence(target, prop)\n\n      const shapeChanged = descriptorShapeChanged(oldDescriptor, nextDescriptor)\n      if (descriptorContentChanged(oldDescriptor, nextDescriptor)) {\n        triggerDescriptor(target, prop)\n      }\n      if (hadKey !== hasKey || shapeChanged) {\n        triggerIteration(target)\n      }\n\n      if (Array.isArray(target)) {\n        const lengthSignal = getCachedSignal(signals, 'length')\n        if (target.length !== oldLength) {\n          if (lengthSignal) {\n            lengthSignal(target.length)\n          }\n          triggerDescriptor(target, 'length')\n        }\n\n        if (prop === 'length' && typeof oldLength === 'number' && target.length < oldLength) {\n          for (let i = target.length; i < oldLength; i += 1) {\n            const indexSignal = getCachedSignal(signals, String(i))\n            if (indexSignal) {\n              indexSignal(undefined)\n            }\n            triggerPresence(target, String(i))\n            triggerDescriptor(target, String(i))\n          }\n          triggerIteration(target)\n        }\n      }\n\n      const boundMethods = BOUND_METHOD_CACHE.get(target)\n      if (boundMethods && boundMethods.has(prop)) {\n        boundMethods.delete(prop)\n        if (boundMethods.size === 0) {\n          BOUND_METHOD_CACHE.delete(target)\n        }\n      }\n\n      return result\n    },\n  })\n\n  PROXY_CACHE.set(initialValue, proxy)\n  // Register reverse lookup for double-wrap prevention\n  RAW_TO_PROXY.set(initialValue, proxy)\n  return proxy\n}\n"],"mappings":"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"}