UNPKG

4.26 kBSource Map (JSON)View Raw
1{"version":3,"sources":["useSyncState.tsx"],"names":["UNINTIALIZED_STATE","useSyncState","initialState","stateRef","React","useRef","isSchedulingRef","isMountedRef","useEffect","current","trackingState","setTrackingState","useState","getState","useCallback","setState","state","scheduleUpdate","callback","flushUpdates","useDebugValue"],"mappings":";;;;;;;AAAA;;;;;;AAEA,MAAMA,kBAAkB,GAAG,EAA3B;AAEA;AACA;AACA;;AACe,SAASC,YAAT,CAAyBC,YAAzB,EAAuD;AACpE,QAAMC,QAAQ,GAAGC,KAAK,CAACC,MAAN,CAAgBL,kBAAhB,CAAjB;AACA,QAAMM,eAAe,GAAGF,KAAK,CAACC,MAAN,CAAa,KAAb,CAAxB;AACA,QAAME,YAAY,GAAGH,KAAK,CAACC,MAAN,CAAa,IAAb,CAArB;AAEAD,EAAAA,KAAK,CAACI,SAAN,CAAgB,MAAM;AACpBD,IAAAA,YAAY,CAACE,OAAb,GAAuB,IAAvB;AAEA,WAAO,MAAM;AACXF,MAAAA,YAAY,CAACE,OAAb,GAAuB,KAAvB;AACD,KAFD;AAGD,GAND,EAMG,EANH;;AAQA,MAAIN,QAAQ,CAACM,OAAT,KAAqBT,kBAAzB,EAA6C;AAC3CG,IAAAA,QAAQ,CAACM,OAAT,GACE;AACA,WAAOP,YAAP,KAAwB,UAAxB,GAAqCA,YAAY,EAAjD,GAAsDA,YAFxD;AAGD;;AAED,QAAM,CAACQ,aAAD,EAAgBC,gBAAhB,IAAoCP,KAAK,CAACQ,QAAN,CAAeT,QAAQ,CAACM,OAAxB,CAA1C;AAEA,QAAMI,QAAQ,GAAGT,KAAK,CAACU,WAAN,CAAkB,MAAMX,QAAQ,CAACM,OAAjC,EAA0C,EAA1C,CAAjB;AAEA,QAAMM,QAAQ,GAAGX,KAAK,CAACU,WAAN,CAAmBE,KAAD,IAAc;AAC/C,QAAIA,KAAK,KAAKb,QAAQ,CAACM,OAAnB,IAA8B,CAACF,YAAY,CAACE,OAAhD,EAAyD;AACvD;AACD;;AAEDN,IAAAA,QAAQ,CAACM,OAAT,GAAmBO,KAAnB;;AAEA,QAAI,CAACV,eAAe,CAACG,OAArB,EAA8B;AAC5BE,MAAAA,gBAAgB,CAACK,KAAD,CAAhB;AACD;AACF,GAVgB,EAUd,EAVc,CAAjB;AAYA,QAAMC,cAAc,GAAGb,KAAK,CAACU,WAAN,CAAmBI,QAAD,IAA0B;AACjEZ,IAAAA,eAAe,CAACG,OAAhB,GAA0B,IAA1B;;AAEA,QAAI;AACFS,MAAAA,QAAQ;AACT,KAFD,SAEU;AACRZ,MAAAA,eAAe,CAACG,OAAhB,GAA0B,KAA1B;AACD;AACF,GARsB,EAQpB,EARoB,CAAvB;AAUA,QAAMU,YAAY,GAAGf,KAAK,CAACU,WAAN,CAAkB,MAAM;AAC3C,QAAI,CAACP,YAAY,CAACE,OAAlB,EAA2B;AACzB;AACD,KAH0C,CAK3C;AACA;;;AACAE,IAAAA,gBAAgB,CAACR,QAAQ,CAACM,OAAV,CAAhB;AACD,GARoB,EAQlB,EARkB,CAArB,CA7CoE,CAuDpE;AACA;;AACA,MAAIC,aAAa,KAAKP,QAAQ,CAACM,OAA/B,EAAwC;AACtCE,IAAAA,gBAAgB,CAACR,QAAQ,CAACM,OAAV,CAAhB;AACD;;AAED,QAAMO,KAAK,GAAGb,QAAQ,CAACM,OAAvB;AAEAL,EAAAA,KAAK,CAACgB,aAAN,CAAoBJ,KAApB;AAEA,SAAO,CAACA,KAAD,EAAQH,QAAR,EAAkBE,QAAlB,EAA4BE,cAA5B,EAA4CE,YAA5C,CAAP;AACD","sourcesContent":["import * as React from 'react';\n\nconst UNINTIALIZED_STATE = {};\n\n/**\n * This is definitely not compatible with concurrent mode, but we don't have a solution for sync state yet.\n */\nexport default function useSyncState<T>(initialState?: (() => T) | T) {\n const stateRef = React.useRef<T>(UNINTIALIZED_STATE as any);\n const isSchedulingRef = React.useRef(false);\n const isMountedRef = React.useRef(true);\n\n React.useEffect(() => {\n isMountedRef.current = true;\n\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n if (stateRef.current === UNINTIALIZED_STATE) {\n stateRef.current =\n // @ts-expect-error: initialState is a function, but TypeScript doesn't think so\n typeof initialState === 'function' ? initialState() : initialState;\n }\n\n const [trackingState, setTrackingState] = React.useState(stateRef.current);\n\n const getState = React.useCallback(() => stateRef.current, []);\n\n const setState = React.useCallback((state: T) => {\n if (state === stateRef.current || !isMountedRef.current) {\n return;\n }\n\n stateRef.current = state;\n\n if (!isSchedulingRef.current) {\n setTrackingState(state);\n }\n }, []);\n\n const scheduleUpdate = React.useCallback((callback: () => void) => {\n isSchedulingRef.current = true;\n\n try {\n callback();\n } finally {\n isSchedulingRef.current = false;\n }\n }, []);\n\n const flushUpdates = React.useCallback(() => {\n if (!isMountedRef.current) {\n return;\n }\n\n // Make sure that the tracking state is up-to-date.\n // We call it unconditionally, but React should skip the update if state is unchanged.\n setTrackingState(stateRef.current);\n }, []);\n\n // If we're rendering and the tracking state is out of date, update it immediately\n // This will make sure that our updates are applied as early as possible.\n if (trackingState !== stateRef.current) {\n setTrackingState(stateRef.current);\n }\n\n const state = stateRef.current;\n\n React.useDebugValue(state);\n\n return [state, getState, setState, scheduleUpdate, flushUpdates] as const;\n}\n"]}
\No newline at end of file