{"version":3,"sources":["jsdelivr-header.js","/npm/react-native-safe-async-storage-af@1.0.0/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACLA,oBAGE,iBACK,sBAEA,OAAQ,yBACR,SAAU,aACV,UAAW,UAElB,MAAM,SAAW,GAAG,sBAAwB,QACtC,YAAc,IAEpB,IAAI,gBAAkB,GAAG,MAAM,UAY/B,SAAS,iBACP,IAAI,EAAY,IAEhB,MAAO,CACL,QAoBF,SAAkB,GAChB,OAAO,EAAS,CAAC,IACd,MAAK,IACJ,MAAM,EAAM,EAAM,GAAK,EAAM,GAAG,GAAK,KACrC,GAAW,MAAP,EAAa,MAAM,IAAI,MAAM,YAEjC,OAAO,IAEb,EA3BE,QAWF,SAAkB,GAChB,OAAO,EAAS,CAAC,GACnB,EAZE,WAcF,SAAqB,GACnB,OAAO,EAAY,CAAC,GACtB,EAfE,MA2BF,WACE,OAAO,QAAQ,IAAI,CACjB,aAAa,QACb,EAAU,SAEd,EA/BE,WACA,WACA,cACA,UAAW,eACX,WAAY,eACZ,WAAY,aAAa,YA4B3B,SAAS,EAAa,GACpB,OAAO,QAAQ,IACb,aAAa,YAAY,GACzB,EAAU,YAAY,GAE1B,CAEA,SAAS,EAAU,GACjB,OAAO,aAAa,SAAS,GAC1B,MAAK,IACJ,MAAM,EAAO,EAAM,QAAO,EAAE,EAAG,KAjEnB,MAiE0B,IACnC,KAAI,GAAQ,EAAK,KAEpB,OAAO,EAAK,OAIlB,SAA6B,EAAO,GAElC,OAAO,EAAU,SAAS,GACvB,MAAK,GACG,EAAM,KAAI,GA5EL,MA6EH,EAAK,GACR,CAAC,EAAK,GAAI,EAAK,SACf,KAGZ,CAd2B,CAAmB,EAAO,GAAQ,IAE7D,CAcA,SAAS,EAAU,GACjB,EAAQ,EAAM,QACd,MAAM,EAAe,GACrB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,OAAQ,IAAK,CACrC,MAAM,EAAO,EAAM,GACf,EAAY,KACd,EAAa,KAAK,EAAK,SACvB,EAAK,GA3FO,IA6FhB,CAEA,OAAO,QAAQ,IAAI,CACjB,aAAa,SAAS,GACtB,EAAU,SAAS,IAEvB,CAEA,SAAS,IACP,OAAO,MAAM,gBAAgB,CAC3B,MAAO,EACP,YAAa,EACb,SAAU,EACV,SAAU,GACT,gBACL,CAEA,SAAS,IAGP,OAFA,gBAAkB,GAAG,OAAO,UAAU,MAAK,IAAM,GAAG,MAAM,YAC1D,EAAY,IACL,eACT,CAEA,SAAS,EAAe,GACtB,OAAO,MAAM,WAAW,MAAM,KAAI,EAAE,EAAK,KAAS,GAAG,OAAO,EAAQ,GAAM,KAC5E,CAEA,SAAS,EAAY,GACnB,OAAO,QAAQ,IAAI,EAAM,KAAI,EAAE,EAAK,KAAS,GAAG,UAAU,EAAQ,GAAM,KAC1E,CAEA,SAAS,EAAY,GACnB,OAAO,MAAM,WAAW,EAAK,KAAI,GAAK,GAAG,SAAS,EAAQ,MAC5D,CAEA,SAAS,EAAS,GAChB,MAAO,GAAG,YAAY,KAAK,IAC7B,CAEA,SAAS,GAAc,EAAK,IAC1B,OAAO,EAAM,OAAS,QAAQ,cAChC,CACF,CAEA,SAAS,iBACP,MAAM,IAAI,MAAM,kBAClB,CAvIA,OAAO,QAAU,iBACjB,QAAQ,eAAiB","file":"/npm/react-native-safe-async-storage-af@1.0.0/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/react-native-safe-async-storage-af@1.0.0/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\n'use strict'\n\nimport {\n  AsyncStorage\n} from 'react-native'\n\nimport fs from 'react-native-fs'\nimport hash from 'md5'\nimport utils from './utils'\n\nconst ROOT_DIR = fs.DocumentDirectoryPath + '/fsas'\nconst PLACEHOLDER = '~'\n\nlet CREATE_ROOT_DIR = fs.mkdir(ROOT_DIR)\n\nmodule.exports = createInstance()\nexports.THRESHOLD_SIZE = 1000\n\n/**\n * get singleton with AsyncStorage API, which uses\n *   AsyncStorage for small values\n *   react-native-fs for large ones\n *\n * @return {instance}\n */\nfunction createInstance () {\n  let fsStorage = getFSStorage()\n\n  return {\n    getItem,\n    setItem,\n    removeItem,\n    clear,\n    multiGet,\n    multiSet,\n    multiRemove,\n    mergeItem: notImplemented,\n    multiMerge: notImplemented,\n    getAllKeys: AsyncStorage.getAllKeys,\n  }\n\n  function setItem (key) {\n    return multiSet([key])\n  }\n\n  function removeItem (key) {\n    return multiRemove([key])\n  }\n\n  function getItem (key) {\n    return multiGet([key])\n      .then(pairs => {\n        const val = pairs[0] ? pairs[0][1] : null\n        if (val == null) throw new Error('NotFound')\n\n        return val\n      })\n  }\n\n  function clear () {\n    return Promise.all([\n      AsyncStorage.clear(),\n      fsStorage.clear()\n    ])\n  }\n\n  function multiRemove (keys) {\n    return Promise.all(\n      AsyncStorage.multiRemove(keys),\n      fsStorage.multiRemove(keys)\n    )\n  }\n\n  function multiGet (keys) {\n    return AsyncStorage.multiGet(keys)\n      .then(pairs => {\n        const inFS = pairs.filter(([k, v]) => v === PLACEHOLDER)\n          .map(pair => pair[0])\n\n        return inFS.length ? lookupInFSAndMerge(pairs, inFS) : pairs\n      })\n  }\n\n  function lookupInFSAndMerge (pairs, inFS) {\n    // return fsStorage.multiGet(pairs.map(pair => pair[0]))\n    return fsStorage.multiGet(inFS)\n      .then(vals => {\n        return pairs.map(pair => {\n          return pair[1] === PLACEHOLDER\n            ? [pair[0], vals.shift()]\n            : pair\n        })\n      })\n  }\n\n  function multiSet (pairs) {\n    pairs = pairs.slice()\n    const inFileSystem = []\n    for (var i = 0; i < pairs.length; i++) {\n      const pair = pairs[i]\n      if (willPutInFS(pair)) {\n        inFileSystem.push(pair.slice())\n        pair[1] = PLACEHOLDER\n      }\n    }\n\n    return Promise.all([\n      AsyncStorage.multiSet(pairs),\n      fsStorage.multiSet(inFileSystem)\n    ])\n  }\n\n  function getFSStorage () {\n    return utils.postponeMethods({\n      clear: fsClear,\n      multiRemove: fsMultiRemove,\n      multiGet: fsMultiGet,\n      multiSet: fsMultiSet\n    }, CREATE_ROOT_DIR)\n  }\n\n  function fsClear () {\n    CREATE_ROOT_DIR = fs.unlink(ROOT_DIR).then(() => fs.mkdir(ROOT_DIR))\n    fsStorage = getFSStorage()\n    return CREATE_ROOT_DIR\n  }\n\n  function fsMultiRemove (keys) {\n    return utils.allSettled(pairs.map(([key, val]) => fs.unlink(toFSKey(key), val)))\n  }\n\n  function fsMultiSet (pairs) {\n    return Promise.all(pairs.map(([key, val]) => fs.writeFile(toFSKey(key), val)))\n  }\n\n  function fsMultiGet (keys) {\n    return utils.allSettled(keys.map(k => fs.readFile(toFSKey(k))))\n  }\n\n  function toFSKey (key) {\n    return `${ROOT_DIR}/${hash(key)}`\n  }\n\n  function willPutInFS ([key, value]) {\n    return value.length > exports.THRESHOLD_SIZE\n  }\n}\n\nfunction notImplemented () {\n  throw new Error('not implemented')\n}\n"]}