{"version":3,"sources":["../../src/utils/handleState.ts"],"names":["noop","WeakRef","_item","_value","_onValueChange","value","state","postBatchCallbacksPush","scheduleBatch"],"mappings":";;;;;;;;;AAIA,IAAM,uBAGF,OAAO,oBAAA,IAAwB,cAC/B,IAAI,oBAAA,CAAqB,CAAC,EAAO,KAAA;AAC/B,EAAG,EAAA,EAAA;AACL,CAAC,CAAA,GACD,EAAE,QAAA,EAAUA,qBAAK,EAAA;AAErB,IAAM,WACJ,OAAO,OAAA,IAAW,WACd,GAAA,OAAA,GACC,MAAMC,QAAQ,CAAA;AAAA,EAGb,YAAY,IAAW,EAAA;AACrB,IAAA,IAAA,CAAKC,CAAQ,GAAA,IAAA;AAAA;AACf,EAEA,KAAQ,GAAA;AACN,IAAA,OAAO,IAAKA,CAAAA,CAAAA;AAAA;AAEhB,CAAA;AAEN,IAAM,WAAc,GAAA,CAClB,KACA,EAAA,KAAA,EACA,kBACA,IACM,KAAA;AACN,EAAA,IAAI,gBAAkB,EAAA;AACpB,IAAA,MAAM,EAAE,GAAK,EAAA,GAAA,EAAK,OAAQ,EAAA,GAAI,iBAAiB,IAAI,CAAA;AAEnD,IAAA,MAAM,SAAS,GAAI,EAAA;AAEnB,IAAA,MAAM,aAAgB,GAAA,KAAA;AAEtB,IAAA,IAAI,WAAW,KAAW,CAAA,EAAA;AACxB,MAAQ,KAAA,GAAA,MAAA;AAAA,KACH,MAAA;AACL,MAAI,IAAA,OAAO,SAAS,UAAY,EAAA;AAC9B,QAAA,KAAA,GAAQ,MAAM,IAAI,CAAA;AAAA;AAGpB,MAAA,GAAA,CAAI,KAAK,CAAA;AAAA;AAGX,IAAA,KAAA,CAAMC,CAAS,GAAA,KAAA;AAEf,IAAA,IAAI,OAAS,EAAA;AACX,MAAI,IAAA,YAAA;AAEJ,MAAA,IAAI,MAAS,GAAA,IAAA;AAEb,MAAMC,KAAAA,CAAAA,CAAAA,CAAe,CAACC,MAAU,KAAA;AAC9B,QAAI,IAAA,MAAA,IAAUA,WAAU,YAAc,EAAA;AACpC,UAAA,GAAA,CAAIA,MAAK,CAAA;AAAA;AACX,OACD,CAAA;AAED,MAAM,MAAA,QAAA,GAAW,IAAI,QAAA,CAAS,KAAK,CAAA;AAEnC,MAAqB,oBAAA,CAAA,QAAA;AAAA,QACnB,KAAA;AAAA,QACA,OAAA,CAAQ,CAAC,QAAa,KAAA;AACpB,UAAMC,MAAAA,MAAAA,GAAQ,SAAS,KAAM,EAAA;AAE7B,UAAA,IAAIA,MAAO,EAAA;AACT,YAAA,IAAI,aAAa,KAAW,CAAA,EAAA;AAC1B,cAAA,QAAA,GACE,OAAO,aAAA,IAAiB,UACpB,GAAA,aAAA,CAAc,IAAI,CAClB,GAAA,aAAA;AAAA;AAGR,YAAS,MAAA,GAAA,KAAA;AAET,YAAe,YAAA,GAAA,QAAA;AAEf,YAAAC,wCAAA,CAAuB,MAAM;AAC3B,cAAS,MAAA,GAAA,IAAA;AAET,cAAe,YAAA,GAAA,KAAA,CAAA;AAAA,aAChB,CAAA;AAED,YAAcC,+BAAA,EAAA;AAEd,YAAAF,MAAAA,CAAM,IAAI,QAAQ,CAAA;AAAA;AACpB,SACD;AAAA,OACH;AAAA,KACK,MAAA;AACL,MAAA,KAAA,CAAMF,EAAe,GAAG,CAAA;AAAA;AAG1B,IAAO,OAAA,KAAA;AAAA;AAGT,EAAA,KAAA,CAAMD,IAAS,OAAO,KAAA,IAAS,UAAa,GAAA,KAAA,CAAM,IAAI,CAAI,GAAA,KAAA;AAE1D,EAAO,OAAA,KAAA;AACT,CAAA;AAEA,IAAO,mBAAQ,GAAA","file":"chunk-7MDJONRP.cjs","sourcesContent":["import noop from 'lodash.noop';\nimport type { AsyncState, State, StateInitializer } from '../types';\nimport { postBatchCallbacksPush, scheduleBatch } from './batching';\n\nconst finalizationRegistry: Pick<\n  FinalizationRegistry<() => void>,\n  'register'\n> = typeof FinalizationRegistry != 'undefined'\n  ? new FinalizationRegistry((cb) => {\n      cb();\n    })\n  : { register: noop };\n\nconst _WeakRef =\n  typeof WeakRef != 'undefined'\n    ? WeakRef\n    : (class WeakRef {\n        _item: any;\n\n        constructor(item: any) {\n          this._item = item;\n        }\n\n        deref() {\n          return this._item;\n        }\n      } as typeof WeakRef);\n\nconst handleState = <S extends State | AsyncState>(\n  state: Omit<S, symbol>,\n  value: unknown | (() => unknown) | undefined,\n  stateInitializer: StateInitializer | undefined,\n  keys: any[] | undefined\n): S => {\n  if (stateInitializer) {\n    const { get, set, observe } = stateInitializer(keys);\n\n    const _value = get();\n\n    const originalValue = value;\n\n    if (_value !== undefined) {\n      value = _value;\n    } else {\n      if (typeof value == 'function') {\n        value = value(keys);\n      }\n\n      set(value);\n    }\n\n    state._value = value;\n\n    if (observe) {\n      let storageValue: any;\n\n      let isSafe = true;\n\n      state._onValueChange((value) => {\n        if (isSafe || value !== storageValue) {\n          set(value);\n        }\n      });\n\n      const stateRef = new _WeakRef(state);\n\n      finalizationRegistry.register(\n        state,\n        observe((newValue) => {\n          const state = stateRef.deref();\n\n          if (state) {\n            if (newValue === undefined) {\n              newValue =\n                typeof originalValue == 'function'\n                  ? originalValue(keys)\n                  : originalValue;\n            }\n\n            isSafe = false;\n\n            storageValue = newValue;\n\n            postBatchCallbacksPush(() => {\n              isSafe = true;\n\n              storageValue = undefined;\n            });\n\n            scheduleBatch();\n\n            state.set(newValue);\n          }\n        })\n      );\n    } else {\n      state._onValueChange(set);\n    }\n\n    return state as any;\n  }\n\n  state._value = typeof value == 'function' ? value(keys) : value;\n\n  return state as any;\n};\n\nexport default handleState;\n"]}