{"mappings":"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","sources":["src/index.ts","src/useStorage/index.ts","src/useStorage/useStorage.ts","src/utils/index.ts","src/utils/isFunction.ts","src/utils/isInBrowser.ts","src/useStorage/defaultStorage.ts","src/useStorage/createMemoryStorage.ts","src/useIsMounted/useIsMounted.ts","src/useRefresh/useRefresh.ts","src/useInstance/useInstance.ts","src/useInstance/makeProxy.ts","src/usePrevious/usePrevious.ts"],"sourcesContent":["export * from './useStorage'\nexport * from './useRefresh/useRefresh'\nexport * from './useInstance/useInstance'\nexport * from './usePrevious/usePrevious'\nexport * from './useIsMounted/useIsMounted'\n","export * from './useStorage'\nexport * from './defaultStorage'\nexport * from './createMemoryStorage'\n","import React from 'react'\nimport {isFunction, isInBrowser} from '../utils'\nimport {getDefaultStorage} from './defaultStorage'\nimport {createMemoryStorage} from './createMemoryStorage'\nimport {useIsMounted} from '../useIsMounted/useIsMounted'\n\ntype Value<T> = T | null | ((x: T | null) => T | null)\n\nexport function useStorage<T>(key: string, defaultValue: T | null = null, getStorage = getDefaultStorage()) {\n  const isMounted = useIsMounted()\n  const storage = React.useMemo<Storage>(() => {\n    if (!isInBrowser()) return createMemoryStorage()\n    if (isFunction(getStorage)) return (getStorage as any)()\n    return getStorage\n  }, [getStorage])\n  const initialValue = React.useMemo(() => {\n    const storedString = storage.getItem(key)\n    return storedString === null ? defaultValue : JSON.parse(storedString)\n  }, [storage, key, defaultValue])\n\n  const [value, setValue] = React.useState<T | null>(initialValue)\n\n  React.useEffect(() => {\n    storage.setItem(key, JSON.stringify(initialValue))\n  }, [key, initialValue])\n\n  const setItem = React.useCallback(\n    (newValue: Value<T>) => {\n      if (isFunction(newValue)) {\n        newValue = (newValue as any)(value)\n      }\n      if (newValue === null) {\n        storage.removeItem(key)\n      } else {\n        storage.setItem(key, JSON.stringify(newValue))\n      }\n      if (isMounted()) {\n        setValue(newValue)\n      }\n    },\n    [storage, key, value]\n  )\n\n  return [value, setItem] as [T | null, typeof setItem]\n}\n","export * from './isFunction'\nexport * from './isInBrowser'\n","export function isFunction<T>(x: T): T extends Function ? true : false\nexport function isFunction(x: any) {\n  return !!x && {}.toString.call(x) === '[object Function]'\n}\n","export function isInBrowser() {\n  return typeof window === 'object' && typeof document === 'object'\n}\n","import {isInBrowser} from '../utils'\nimport {createMemoryStorage} from './createMemoryStorage'\n\ntype LazyStorage = Storage | (() => Storage)\n\nlet defaultStorage: LazyStorage\nif (isInBrowser()) {\n  defaultStorage = window.localStorage\n} else {\n  defaultStorage = createMemoryStorage()\n}\n\nexport function getDefaultStorage() {\n  return defaultStorage\n}\nexport function setDefaultStorage(storage: LazyStorage) {\n  defaultStorage = storage\n}\n","export const createMemoryStorage = (): Storage => {\n  return new MemoryStorage()\n}\n\nclass MemoryStorage implements Storage {\n  protected memory: {[key: string]: string} = {}\n\n  public get length() {\n    return Object.keys(this.memory).length\n  }\n\n  public getItem(key: string) {\n    return this.memory[key] || null\n  }\n\n  public setItem(key: string, value: string) {\n    this.memory[key] = value\n  }\n\n  public removeItem(key: string) {\n    delete this.memory[key]\n  }\n\n  public key(index: number) {\n    const keys = Object.keys(this.memory)\n    return keys[index] || null\n  }\n\n  public clear() {\n    this.memory = {}\n  }\n}\n","import React from 'react'\n\nexport function useIsMounted() {\n  const ref = React.useRef(true)\n  React.useEffect(() => {\n    return () => {\n      ref.current = false\n    }\n  }, [])\n  return React.useCallback(() => ref.current, [])\n}\n","import React from 'react'\nimport {useIsMounted} from '../useIsMounted/useIsMounted'\n\nexport function useRefresh() {\n  const [, setVersion] = React.useState(0)\n  const isMounted = useIsMounted()\n  return () => {\n    if (isMounted()) {\n      setVersion((x) => x + 1)\n    }\n  }\n}\n","import React from 'react'\nimport {makeProxy} from './makeProxy'\nimport {useRefresh} from '../useRefresh/useRefresh'\n\ntype ClassType<T, Args extends any[]> = {\n  new (...args: Args): T\n}\n\nexport function useInstance<T, Args extends any[]>(Class: ClassType<T, Args>, ...args: Args) {\n  const refresh = useRefresh()\n  const instance = React.useMemo<T>(() => makeProxy(new Class(...args), refresh), args)\n  React.useEffect(() => {\n    const currentInstance = instance as any\n    return () => currentInstance.cleanup && currentInstance.cleanup()\n  }, args)\n  return instance\n}\n","const proxySymbol = Symbol()\n\nexport function makeProxy<T>(target: T, notify: () => void): T {\n  if ((target as any)[proxySymbol] === true) {\n    return target\n  }\n  return new Proxy(target, {\n    get: makeTrap('get', notify),\n    defineProperty: makeTrap('defineProperty', notify),\n    deleteProperty: makeTrap('deleteProperty', notify),\n  })\n}\n\nfunction makeTrap(trap: keyof typeof Reflect, notify: () => void) {\n  return (...args: any[]) => {\n    if (trap === 'get' && args[1] === proxySymbol) {\n      return true\n    }\n    const original = Reflect[trap] as any\n    let result = original(...args)\n    if (trap === 'get' && typeof result === 'object' && result !== null) {\n      result = makeProxy(result, notify)\n    }\n    if (trap !== 'get') {\n      notify()\n    }\n    return result\n  }\n}\n","import React from 'react'\n\nexport function usePrevious<T>(value: T, count = 1) {\n  const [history, setHistory] = React.useState<T[]>([])\n  React.useEffect(() => {\n    if (history.length > count) {\n      history.pop()\n    }\n    setHistory([value, ...history])\n  }, [value])\n  return history.slice(1)\n}\n"],"names":[],"version":3,"file":"react-tidy.mjs.map"}