openalgo-charts
Version:
From-scratch, dependency-free canvas charting engine for OpenAlgo: professional-grade interactive rendering, advanced on-chart trading, and a one-call widget tier that adds the toolbar, drawing rail, dialogs and shortcuts.
3 lines (2 loc) • 3.78 kB
JavaScript
import"./openalgo-charts.draw.mjs";import{defaultStorage as e,D as t,STORAGE_PREFIX as n}from"./openalgo-charts.widget.mjs";import"./openalgo-charts.mjs";const r="entries",o="copied:",s="oac-widget-store:";function l(t,n,l){const i=void 0===l.journal?e():l.journal,g=void 0===l.migrateFrom?a():l.migrateFrom;let d=null,h=!1;const m=new Set;let p=null;const f=(e,t)=>{for(const n of[...m])try{n(e,t)}catch{}},y=(e,t)=>{f(e,t);const r=u();if(null!==r)try{if(null!==p)return void p.postMessage({key:e,value:t});const o=new r(s+n);o.postMessage({key:e,value:t}),o.close()}catch{}},w=()=>{null!==p&&(p.onmessage=null,p.close(),p=null)},v=async(e,o)=>{const s=await(()=>{if(h)return Promise.reject(new Error("The widget storage is closed"));if(null!==d)return d;const e=new Promise((o,s)=>{const l=t.open(n,1);l.onupgradeneeded=()=>{l.result.objectStoreNames.contains(r)||l.result.createObjectStore(r)},l.onblocked=()=>s(new Error("The widget storage is held open by another tab")),l.onerror=()=>s(l.error??new Error("The widget storage could not be opened")),l.onsuccess=()=>{const t=l.result;if(h)return t.close(),void s(new Error("The widget storage is closed"));t.onversionchange=()=>{t.close(),d===e&&(d=null)},t.onclose=()=>{d===e&&(d=null)},o(t)}}).catch(t=>{throw d===e&&(d=null),t});return d=e,e})();return new Promise((t,n)=>{const l=s.transaction(r,e);let u;l.oncomplete=()=>t(u),l.onabort=()=>n(l.error??new Error("The widget storage transaction was aborted")),o(l.objectStore(r),e=>{u=e})})};return{journal:i,entries:e=>v("readwrite",(t,n)=>{const r=[];n(r);const s=function(e){const t=globalThis.IDBKeyRange;try{return void 0===t?null:t.bound(e,e+"")}catch{return null}}(e),l=null===s?t.openCursor():t.openCursor(s);l.onsuccess=()=>{const n=l.result;if(null!==n)return"string"==typeof n.key&&n.key.startsWith(e)&&"string"==typeof n.value&&r.push([n.key,n.value]),void n.continue();if(r.length>0||null===g)return;const s=t.get(o+e);s.onsuccess=()=>{if(void 0!==s.result)return;const n=c(g,e);if(0!==n.length){for(const[e,o]of n)t.put(o,e),r.push([e,o]);t.put((new Date).toISOString(),o+e)}}}}),setItem:(e,t)=>v("readwrite",n=>{n.put(t,e)}).then(()=>y(e,t)),removeItem:e=>v("readwrite",t=>{t.delete(e)}).then(()=>y(e,null)),subscribe:e=>(m.add(e),(()=>{const e=u();if(null===p&&null!==e&&!h)try{p=new e(s+n),p.onmessage=e=>{const t=e.data;"string"!=typeof t?.key||"string"!=typeof t.value&&null!==t.value||f(t.key,t.value)}}catch{p=null}})(),()=>{m.delete(e),0===m.size&&w()}),close:()=>{h=!0,m.clear(),w();const e=d;d=null,e?.then(e=>e.close(),()=>{})}}}function u(){const e=globalThis.BroadcastChannel;return"function"==typeof e?e:null}function c(e,t){const n=[];try{for(let r=0;r<e.length;r++){const o=e.key(r);if(null===o||!o.startsWith(t))continue;const s=e.getItem(o);null!==s&&n.push([o,s])}}catch{return[]}return n}function a(){const t=e();return null!==t&&"function"==typeof t.key&&"number"==typeof t.length?t:null}function i(e){return function(e){const t=a();if(null===t)return e;let r=null;const o=e=>{try{return e(),Promise.resolve()}catch(e){return Promise.reject(e)}};return{journal:e.journal,subscribe:o=>{const s=e.subscribe((e,t)=>{"page"!==r&&o(e,t)}),l=globalThis,u=e=>{"page"===r&&e.storageArea===t&&!0===e.key?.startsWith(n)&&o(e.key,e.newValue)};try{l.addEventListener?.("storage",u)}catch{}return()=>{s();try{l.removeEventListener?.("storage",u)}catch{}}},entries:n=>"page"===r?Promise.resolve(c(t,n)):e.entries(n).then(e=>(r="idb",e),e=>{if("idb"===r)throw e;return r="page",c(t,n)}),setItem:(n,s)=>"page"===r?o(()=>t.setItem(n,s)):e.setItem(n,s),removeItem:n=>"page"===r?o(()=>t.removeItem(n)):e.removeItem(n)}}(l(e,t,{}))}export{l as openIndexedDbStore,i as openPageDefault};
//# sourceMappingURL=openalgo-charts.widget.storage-idb-WH_o01Wj.mjs.map