{"version":3,"file":"index.min.mjs","sources":["../src/index.js"],"sourcesContent":["import { writable, derived, get } from 'svelte/store';\n\nexport function asyncable(getter, setter = () => {}, stores = []) {\n\tlet resolve;\n\tconst initial = new Promise((res) => (resolve = res));\n\n\tconst derived$ = derived(stores, (values) => values);\n\n\tconst store$ = writable(initial, (set) => {\n\t\treturn derived$.subscribe(async (values = []) => {\n\t\t\tlet value = getter(...values);\n\t\t\tif (value === undefined) return;\n\t\t\tvalue = Promise.resolve(value);\n\t\t\tset(value);\n\t\t\tresolve(value);\n\t\t});\n\t});\n\n\tasync function set(newValue, oldValue) {\n\t\tif (newValue === oldValue) return;\n\t\tstore$.set(Promise.resolve(newValue));\n\t\ttry {\n\t\t\tawait setter(newValue, oldValue);\n\t\t} catch (err) {\n\t\t\tstore$.set(Promise.resolve(oldValue));\n\t\t\tthrow err;\n\t\t}\n\t}\n\n\treturn {\n\t\tsubscribe: store$.subscribe,\n\t\tasync update(reducer) {\n\t\t\tif (!setter) return;\n\t\t\tlet oldValue;\n\t\t\tlet newValue;\n\t\t\ttry {\n\t\t\t\toldValue = await get(store$);\n\t\t\t\tnewValue = await reducer(shallowCopy(oldValue));\n\t\t\t} finally {\n\t\t\t\tawait set(newValue, oldValue);\n\t\t\t}\n\t\t},\n\t\tasync set(newValue) {\n\t\t\tif (!setter) return;\n\t\t\tlet oldValue;\n\t\t\ttry {\n\t\t\t\toldValue = await get(store$);\n\t\t\t\tnewValue = await newValue;\n\t\t\t} finally {\n\t\t\t\tawait set(newValue, oldValue);\n\t\t\t}\n\t\t},\n\t\tget() {\n\t\t\treturn get(store$);\n\t\t},\n\t};\n}\n\nexport function syncable(stores, initialValue) {\n\treturn derived(\n\t\tstores,\n\t\t($values, set) =>\n\t\t\t(Array.isArray(stores) ? Promise.allSettled : Promise.resolve)\n\t\t\t\t.call(Promise, $values)\n\t\t\t\t.then(set),\n\t\tinitialValue\n\t);\n}\n\nfunction shallowCopy(value) {\n\tif (typeof value !== 'object' || value === null) return value;\n\treturn Array.isArray(value) ? [...value] : { ...value };\n}\n"],"names":["asyncable","getter","setter","stores","resolve","initial","Promise","res","derived$","derived","values","store$","writable","set","subscribe","async","value","undefined","newValue","oldValue","err","reducer","get","Array","isArray","syncable","initialValue","$values","allSettled","call","then"],"mappings":"8DAEO,SAASA,EAAUC,EAAQC,EAAS,SAAUC,EAAS,IAC7D,IAAIC,EACJ,MAAMC,EAAU,IAAIC,SAASC,GAASH,EAAUG,IAE1CC,EAAWC,EAAQN,GAASO,GAAWA,IAEvCC,EAASC,EAASP,GAAUQ,GAC1BL,EAASM,WAAUC,MAAOL,EAAS,MACzC,IAAIM,EAAQf,KAAUS,QACRO,IAAVD,IACJA,EAAQV,QAAQF,QAAQY,GACxBH,EAAIG,GACJZ,EAAQY,GAAM,MAIhBD,eAAeF,EAAIK,EAAUC,GAC5B,GAAID,IAAaC,EAAjB,CACAR,EAAOE,IAAIP,QAAQF,QAAQc,IAC3B,UACOhB,EAAOgB,EAAUC,GACtB,MAAOC,GAER,MADAT,EAAOE,IAAIP,QAAQF,QAAQe,IACrBC,IAIR,MAAO,CACNN,UAAWH,EAAOG,UAClBC,aAAaM,GACZ,IAAKnB,EAAQ,OACb,IAAIiB,EACAD,EACJ,IACCC,QAAiBG,EAAIX,GACrBO,QAAiBG,GAgCAL,EAhCoBG,EAiCnB,iBAAVH,GAAgC,OAAVA,EAAuBA,EACjDO,MAAMC,QAAQR,GAAS,IAAIA,GAAS,IAAKA,mBAhCvCH,EAAIK,EAAUC,GA8BxB,IAAqBH,GA3BnBD,UAAUG,GACT,IAAKhB,EAAQ,OACb,IAAIiB,EACJ,IACCA,QAAiBG,EAAIX,GACrBO,QAAiBA,gBAEXL,EAAIK,EAAUC,KAGtBG,IAAG,IACKA,EAAIX,GAGd,CAEO,SAASc,EAAStB,EAAQuB,GAChC,OAAOjB,EACNN,GACA,CAACwB,EAASd,KACRU,MAAMC,QAAQrB,GAAUG,QAAQsB,WAAatB,QAAQF,SACpDyB,KAAKvB,QAASqB,GACdG,KAAKjB,IACRa,EAEF"}