atom.io 0.6.9 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/README.md +21 -2
  2. package/dist/index.d.mts +34 -421
  3. package/dist/index.d.ts +34 -421
  4. package/dist/index.js +248 -23
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.mjs +209 -4
  7. package/dist/index.mjs.map +1 -1
  8. package/internal/dist/index.d.mts +342 -0
  9. package/internal/dist/index.d.ts +342 -0
  10. package/internal/dist/index.js +1873 -0
  11. package/internal/dist/index.js.map +1 -0
  12. package/internal/dist/index.mjs +1798 -0
  13. package/internal/dist/index.mjs.map +1 -0
  14. package/internal/package.json +15 -0
  15. package/internal/src/atom/create-atom.ts +75 -0
  16. package/internal/src/atom/delete-atom.ts +10 -0
  17. package/internal/src/atom/index.ts +3 -0
  18. package/internal/src/atom/is-default.ts +37 -0
  19. package/internal/src/caching.ts +21 -0
  20. package/internal/src/families/create-atom-family.ts +59 -0
  21. package/internal/src/families/create-readonly-selector-family.ts +45 -0
  22. package/internal/src/families/create-selector-family.ts +67 -0
  23. package/internal/src/families/index.ts +3 -0
  24. package/internal/src/get-state-internal.ts +23 -0
  25. package/internal/src/index.ts +13 -0
  26. package/internal/src/mutable/create-mutable-atom-family.ts +25 -0
  27. package/internal/src/mutable/create-mutable-atom.ts +49 -0
  28. package/internal/src/mutable/get-json-token.ts +22 -0
  29. package/internal/src/mutable/get-update-token.ts +20 -0
  30. package/internal/src/mutable/index.ts +17 -0
  31. package/internal/src/mutable/is-atom-token-mutable.ts +7 -0
  32. package/internal/src/mutable/tracker-family.ts +61 -0
  33. package/internal/src/mutable/tracker.ts +164 -0
  34. package/internal/src/mutable/transceiver.ts +110 -0
  35. package/internal/src/operation.ts +68 -0
  36. package/internal/src/selector/create-read-write-selector.ts +65 -0
  37. package/internal/src/selector/create-readonly-selector.ts +49 -0
  38. package/internal/src/selector/create-selector.ts +65 -0
  39. package/internal/src/selector/index.ts +5 -0
  40. package/internal/src/selector/lookup-selector-sources.ts +20 -0
  41. package/internal/src/selector/register-selector.ts +61 -0
  42. package/internal/src/selector/trace-selector-atoms.ts +45 -0
  43. package/internal/src/selector/update-selector-atoms.ts +34 -0
  44. package/internal/src/set-state/become.ts +10 -0
  45. package/internal/src/set-state/copy-mutable-if-needed.ts +23 -0
  46. package/internal/src/set-state/copy-mutable-in-transaction.ts +59 -0
  47. package/internal/src/set-state/copy-mutable-into-new-store.ts +34 -0
  48. package/internal/src/set-state/emit-update.ts +23 -0
  49. package/internal/src/set-state/evict-downstream.ts +39 -0
  50. package/internal/src/set-state/index.ts +2 -0
  51. package/internal/src/set-state/set-atom-state.ts +38 -0
  52. package/internal/src/set-state/set-selector-state.ts +19 -0
  53. package/internal/src/set-state/set-state-internal.ts +18 -0
  54. package/internal/src/set-state/stow-update.ts +42 -0
  55. package/internal/src/store/deposit.ts +43 -0
  56. package/internal/src/store/index.ts +5 -0
  57. package/internal/src/store/lookup.ts +26 -0
  58. package/internal/src/store/store.ts +154 -0
  59. package/internal/src/store/withdraw-new-family-member.ts +53 -0
  60. package/internal/src/store/withdraw.ts +113 -0
  61. package/internal/src/subject.ts +21 -0
  62. package/internal/src/subscribe/index.ts +1 -0
  63. package/internal/src/subscribe/recall-state.ts +19 -0
  64. package/internal/src/subscribe/subscribe-to-root-atoms.ts +47 -0
  65. package/internal/src/timeline/add-atom-to-timeline.ts +189 -0
  66. package/internal/src/timeline/index.ts +3 -0
  67. package/internal/src/timeline/time-travel-internal.ts +91 -0
  68. package/internal/src/timeline/timeline-internal.ts +115 -0
  69. package/internal/src/transaction/abort-transaction.ts +12 -0
  70. package/internal/src/transaction/apply-transaction.ts +64 -0
  71. package/internal/src/transaction/build-transaction.ts +39 -0
  72. package/internal/src/transaction/index.ts +26 -0
  73. package/internal/src/transaction/redo-transaction.ts +22 -0
  74. package/internal/src/transaction/transaction-internal.ts +64 -0
  75. package/internal/src/transaction/undo-transaction.ts +22 -0
  76. package/introspection/dist/index.d.mts +3 -197
  77. package/introspection/dist/index.d.ts +3 -197
  78. package/introspection/dist/index.js +329 -4
  79. package/introspection/dist/index.js.map +1 -1
  80. package/introspection/dist/index.mjs +310 -4
  81. package/introspection/dist/index.mjs.map +1 -1
  82. package/introspection/src/attach-atom-index.ts +84 -0
  83. package/introspection/src/attach-introspection-states.ts +38 -0
  84. package/introspection/src/attach-selector-index.ts +90 -0
  85. package/introspection/src/attach-timeline-family.ts +59 -0
  86. package/introspection/src/attach-timeline-index.ts +38 -0
  87. package/introspection/src/attach-transaction-index.ts +40 -0
  88. package/introspection/src/attach-transaction-logs.ts +43 -0
  89. package/introspection/src/index.ts +20 -0
  90. package/json/dist/index.d.mts +10 -2
  91. package/json/dist/index.d.ts +10 -2
  92. package/json/dist/index.js +83 -26
  93. package/json/dist/index.js.map +1 -1
  94. package/json/dist/index.mjs +74 -3
  95. package/json/dist/index.mjs.map +1 -1
  96. package/json/src/index.ts +5 -0
  97. package/json/src/select-json-family.ts +35 -0
  98. package/json/src/select-json.ts +22 -0
  99. package/package.json +103 -63
  100. package/react/dist/index.d.mts +9 -17
  101. package/react/dist/index.d.ts +9 -17
  102. package/react/dist/index.js +44 -27
  103. package/react/dist/index.js.map +1 -1
  104. package/react/dist/index.mjs +24 -4
  105. package/react/dist/index.mjs.map +1 -1
  106. package/react/src/index.ts +2 -0
  107. package/react/src/store-context.tsx +12 -0
  108. package/react/src/store-hooks.ts +36 -0
  109. package/react-devtools/dist/index.css +50 -1
  110. package/react-devtools/dist/index.css.map +1 -1
  111. package/react-devtools/dist/index.d.mts +104 -71
  112. package/react-devtools/dist/index.d.ts +104 -71
  113. package/react-devtools/dist/index.js +2806 -44
  114. package/react-devtools/dist/index.js.map +1 -1
  115. package/react-devtools/dist/index.mjs +2775 -10
  116. package/react-devtools/dist/index.mjs.map +1 -1
  117. package/react-devtools/src/AtomIODevtools.tsx +109 -0
  118. package/react-devtools/src/Button.tsx +23 -0
  119. package/react-devtools/src/StateEditor.tsx +75 -0
  120. package/react-devtools/src/StateIndex.tsx +159 -0
  121. package/react-devtools/src/TimelineIndex.tsx +88 -0
  122. package/react-devtools/src/TransactionIndex.tsx +70 -0
  123. package/react-devtools/src/Updates.tsx +150 -0
  124. package/react-devtools/src/devtools.scss +310 -0
  125. package/react-devtools/src/index.ts +72 -0
  126. package/realtime-react/dist/index.d.mts +8 -22
  127. package/realtime-react/dist/index.d.ts +8 -22
  128. package/realtime-react/dist/index.js +87 -32
  129. package/realtime-react/dist/index.js.map +1 -1
  130. package/realtime-react/dist/index.mjs +62 -6
  131. package/realtime-react/dist/index.mjs.map +1 -1
  132. package/realtime-react/src/index.ts +7 -0
  133. package/realtime-react/src/realtime-context.tsx +29 -0
  134. package/realtime-react/src/use-pull-family-member.ts +15 -0
  135. package/realtime-react/src/use-pull-mutable-family-member.ts +20 -0
  136. package/realtime-react/src/use-pull-mutable.ts +17 -0
  137. package/realtime-react/src/use-pull.ts +15 -0
  138. package/realtime-react/src/use-push.ts +19 -0
  139. package/realtime-react/src/use-server-action.ts +18 -0
  140. package/realtime-testing/dist/index.d.mts +49 -0
  141. package/realtime-testing/dist/index.d.ts +49 -0
  142. package/realtime-testing/dist/index.js +147 -0
  143. package/realtime-testing/dist/index.js.map +1 -0
  144. package/realtime-testing/dist/index.mjs +116 -0
  145. package/realtime-testing/dist/index.mjs.map +1 -0
  146. package/realtime-testing/src/index.ts +1 -0
  147. package/realtime-testing/src/setup-realtime-test.tsx +161 -0
  148. package/src/atom.ts +64 -9
  149. package/src/index.ts +36 -32
  150. package/src/logger.ts +3 -3
  151. package/src/selector.ts +3 -3
  152. package/src/silo.ts +29 -20
  153. package/src/subscribe.ts +3 -3
  154. package/src/timeline.ts +2 -2
  155. package/transceivers/set-rtx/dist/index.d.mts +39 -0
  156. package/transceivers/set-rtx/dist/index.d.ts +39 -0
  157. package/transceivers/set-rtx/dist/index.js +213 -0
  158. package/transceivers/set-rtx/dist/index.js.map +1 -0
  159. package/transceivers/set-rtx/dist/index.mjs +211 -0
  160. package/transceivers/set-rtx/dist/index.mjs.map +1 -0
  161. package/{realtime → transceivers/set-rtx}/package.json +1 -1
  162. package/transceivers/set-rtx/src/index.ts +1 -0
  163. package/transceivers/set-rtx/src/set-rtx.ts +242 -0
  164. package/realtime/dist/index.d.mts +0 -23
  165. package/realtime/dist/index.d.ts +0 -23
  166. package/realtime/dist/index.js +0 -32
  167. package/realtime/dist/index.js.map +0 -1
  168. package/realtime/dist/index.mjs +0 -7
  169. package/realtime/dist/index.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,29 +1,254 @@
1
1
  'use strict';
2
2
 
3
- var string = require('fp-ts/string');
4
- var _function = require('fp-ts/function');
3
+ var IO = require('atom.io/internal');
5
4
 
6
- var we=Object.defineProperty,ze=Object.defineProperties;var Be=Object.getOwnPropertyDescriptors;var he=Object.getOwnPropertySymbols;var He=Object.prototype.hasOwnProperty,Ye=Object.prototype.propertyIsEnumerable;var Re=(o,e,t)=>e in o?we(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,d=(o,e)=>{for(var t in e||(e={}))He.call(e,t)&&Re(o,t,e[t]);if(he)for(var t of he(e))Ye.call(e,t)&&Re(o,t,e[t]);return o},h=(o,e)=>ze(o,Be(e));var Ge=(o,e)=>{for(var t in e)we(o,t,{get:e[t],enumerable:!0});};var Ve={};Ge(Ve,{IMPLICIT:()=>l,Store:()=>E,Subject:()=>T,TRANSACTION_PHASES:()=>ot,abortTransaction:()=>te,addAtomToTimeline:()=>j,applyTransaction:()=>oe,atomFamily__INTERNAL:()=>H,atom__INTERNAL:()=>K,buildTransaction:()=>ne,cacheValue:()=>_,clearStore:()=>rt,closeOperation:()=>le,deposit:()=>w,getState__INTERNAL:()=>I,isAtomDefault:()=>F,isDone:()=>ce,isSelectorDefault:()=>fe,isValueCached:()=>ae,lookup:()=>re,lookupSelectorSources:()=>P,markAtomAsDefault:()=>ye,markAtomAsNotDefault:()=>me,markDone:()=>N,openOperation:()=>se,readCachedValue:()=>ie,readonlySelectorFamily__INTERNAL:()=>de,redoTransactionUpdate:()=>et,redo__INTERNAL:()=>U,registerSelector:()=>B,selectorFamily__INTERNAL:()=>Y,selector__INTERNAL:()=>R,setState__INTERNAL:()=>D,subscribeToRootAtoms:()=>ue,target:()=>p,timeline__INTERNAL:()=>M,traceAllSelectorAtoms:()=>z,traceSelectorAtoms:()=>X,transaction__INTERNAL:()=>C,undoTransactionUpdate:()=>tt,undo__INTERNAL:()=>V,updateSelectorAtoms:()=>pe,withdraw:()=>S});var O=class{constructor(e,t){this.relations=new Map;this.contents=new Map;this.makeContentKey=(e,t)=>`${e}:${t}`;var n,r;if(this.a=e.between[0],this.b=e.between[1],this.cardinality=e.cardinality,this.relations=new Map((n=e.relations)==null?void 0:n.map(([i,a])=>[i,new Set(a)])),this.contents=new Map(e.contents),this.isContent=(r=t==null?void 0:t.isContent)!=null?r:null,t!=null&&t.makeContentKey&&(this.makeContentKey=t.makeContentKey),t!=null&&t.externalStore){let i=t.externalStore;this.has=(a,s)=>i.has(a,s),this.addRelation=(a,s)=>(i.addRelation(a,s),this),this.deleteRelation=(a,s)=>(i.deleteRelation(a,s),this),this.getRelatedKeys=a=>i.getRelatedKeys(a),i.getContent&&(this.getContentInternal=a=>i.getContent(a),this.setContent=(a,s)=>(i.setContent(a,s),this),this.deleteContent=a=>(i.deleteContent(a),this));}}getRelatedKeys(e){return this.relations.get(e)}addRelation(e,t){let n=this.relations.get(e),r=this.relations.get(t);n?n.add(t):this.relations.set(e,new Set([t])),r?r.add(e):this.relations.set(t,new Set([e]));}deleteRelation(e,t){let n=this.relations.get(e);if(n){n.delete(t),n.size===0&&this.relations.delete(e);let r=this.relations.get(t);r&&(r.delete(e),r.size===0&&this.relations.delete(t));}}getContentInternal(e){return this.contents.get(e)}setContent(e,t){this.contents.set(e,t);}deleteContent(e){this.contents.delete(e);}toJSON(){return {between:[this.a,this.b],cardinality:this.cardinality,relations:[...this.relations.entries()].map(([e,t])=>[e,[...t]]),contents:[...this.contents.entries()]}}set(e,...t){var i;let n=typeof t[0]=="string"?t[0]:e[this.b],r=((i=t[1])!=null?i:typeof t[0]=="string")?void 0:t[0];switch(e=typeof e=="string"?e:e[this.a],this.cardinality){case"1:1":{let a=this.getRelatedKey(e);a&&a!==n&&this.delete(a,e);}case"1:n":{let a=this.getRelatedKey(n);a&&a!==e&&this.delete(a,n);}}if(this.addRelation(e,n),r){let a=this.makeContentKey(e,n);this.setContent(a,r);}return this}delete(e,t){t=typeof t=="string"?t:e[this.b];let n=typeof e=="string"?e:e[this.a];if(n===void 0&&typeof t=="string"){let r=this.getRelatedKeys(t);r&&r.forEach(i=>this.delete(i,t));}if(typeof n=="string"&&t===void 0){let r=this.getRelatedKeys(n);r&&r.forEach(i=>{this.delete(n,i);});}if(typeof n=="string"&&typeof t=="string"){this.deleteRelation(n,t);let r=this.makeContentKey(n,t);this.deleteContent(r);}return this}getRelatedKey(e){let t=this.getRelatedKeys(e);if(t)return t.size>1&&console.warn(`Multiple related keys were found for key "${e}": (${[...t].map(n=>`"${n}"`).join(", ")}). Only one related key was expected.`),[...t][0]}getContent(e,t){let n=this.makeContentKey(e,t);return this.getContentInternal(n)}getRelationEntries(e){let t=e[this.a],n=e[this.b];if(t!==void 0&&n===void 0){let r=this.getRelatedKeys(t);if(r)return [...r].map(i=>{var a;return [i,(a=this.getContent(t,i))!=null?a:null]})}if(t===void 0&&n!==void 0){let r=this.getRelatedKeys(n);if(r)return [...r].map(i=>{var a;return [i,(a=this.getContent(i,n))!=null?a:null]})}return []}has(e,t){var n;if(t){let r=this.getRelatedKeys(e);return (n=r==null?void 0:r.has(t))!=null?n:!1}return this.relations.has(e)}};var $=()=>{},v=o=>e=>o instanceof Function?o(e instanceof Function?e():e):o;var Ae=(...o)=>e=>e(...o);var Ie=o=>e=>e.map(o);var Z=(o=Boolean)=>e=>e.every(o),Oe=Z(o=>o===!0);var _e=o=>e=>e!=null?e:o;var Ee=o=>Object.assign(e=>e[o],{in:e=>e[o]});var G=o=>Object.entries(o),Ne=o=>Object.fromEntries(o);var Xe=(o,e)=>_function.pipe(o,G,Ie(([t,n])=>[t,e(n,t)]),Ne),Ke=o=>e=>Xe(e,o);var qe=o=>typeof o=="object"&&o!==null,Qe=o=>qe(o)&&Object.getPrototypeOf(o)===Object.prototype;var Ze=(o,e={allowExtraProperties:!1})=>{let t=`{${G(o).map(([r,i])=>String(r)+":"+i.name).join(",")}}`;return {[t]:r=>Qe(r)&&_function.pipe(o,Object.entries,Z(([i,a])=>i in r||a(void 0)))&&_function.pipe(r,Ke((i,a)=>_function.pipe(o,Ee(a),_e(()=>e.allowExtraProperties),Ae(i))),Object.values,Oe)}[t]};var $e=o=>Ze(o,{allowExtraProperties:!1});var T=class{constructor(){this.subscribers=new Map;}subscribe(e,t){return this.subscribers.set(e,t),()=>this.unsubscribe(e)}unsubscribe(e){this.subscribers.delete(e);}next(e){for(let t of this.subscribers.values())t(e);}};function w(o){return d({key:o.key,type:o.type},"family"in o&&{family:o.family})}var te=o=>{var e,t;if(o.transactionStatus.phase==="idle"){(e=o.config.logger)==null||e.warn("abortTransaction called outside of a transaction. This is probably a bug.");return}o.transactionStatus={phase:"idle"},(t=o.config.logger)==null||t.info("\u{1FA82}","transaction fail");};var oe=(o,e)=>{var r,i,a,s,m;if(e.transactionStatus.phase!=="building"){(r=e.config.logger)==null||r.warn("abortTransaction called outside of a transaction. This is probably a bug.");return}e.transactionStatus.phase="applying",e.transactionStatus.output=o;let{atomUpdates:t}=e.transactionStatus;(i=e.config.logger)==null||i.info(`\u{1F6C3} applying transaction "${e.transactionStatus.key}" with ${t.length} updates.`),(a=e.config.logger)==null||a.info("\u{1F6C3} the updates are:",t);for(let{key:c,newValue:f}of t){let y={key:c,type:"atom"};if(!e.valueMap.has(y.key)){let g=e.transactionStatus.core.atoms.get(y.key);if(!g)throw new Error(`Absurd Error: Atom "${y.key}" not found while copying updates from transaction "${e.transactionStatus.key}" to store "${e.config.name}"`);e.atoms.set(g.key,g),e.valueMap.set(g.key,g.default),(s=e.config.logger)==null||s.info("\u{1F527}",`add atom "${g.key}"`);}k(y,f,e);}let n=S({key:e.transactionStatus.key,type:"transaction"},e);if(n===null)throw new Error(`Transaction "${e.transactionStatus.key}" not found. Absurd. How is this running?`);n.subject.next({key:e.transactionStatus.key,atomUpdates:t,output:o,params:e.transactionStatus.params}),e.transactionStatus={phase:"idle"},(m=e.config.logger)==null||m.info("\u{1F6EC}","transaction done");};var ne=(o,e,t)=>{var n;t.transactionStatus={key:o,phase:"building",time:Date.now(),core:{atoms:new Map(t.atoms),atomsThatAreDefault:new Set(t.atomsThatAreDefault),operation:{open:!1},readonlySelectors:new Map(t.readonlySelectors),timelines:new Map(t.timelines),timelineAtoms:new O(t.timelineAtoms.toJSON()),transactions:new Map(t.transactions),selectorAtoms:new O(t.selectorAtoms.toJSON()),selectorGraph:new O(t.selectorGraph.toJSON(),{makeContentKey:(...r)=>r.sort().join(":")}),selectors:new Map(t.selectors),valueMap:new Map(t.valueMap)},atomUpdates:[],params:e,output:void 0},(n=t.config.logger)==null||n.info("\u{1F6EB}",`transaction "${o}" started in store "${t.config.name}"`);};function C(o,e=l.STORE){let t={key:o.key,type:"transaction",run:(...i)=>{var a;ne(o.key,i,e);try{let s=o.do({get:m=>W(m,e),set:(m,c)=>k(m,c,e)},...i);return oe(s,e),s}catch(s){throw te(e),(a=e.config.logger)==null||a.error(`Transaction ${o.key} failed`,s),s}},install:i=>C(o,i),subject:new T};p(e).transactions.set(t.key,t);let r=w(t);return e.subject.transactionCreation.next(r),r}var p=(o=l.STORE)=>o.transactionStatus.phase==="building"?o.transactionStatus.core:o;var et=(o,e)=>{var t;(t=e.config.logger)==null||t.info(` \u23ED redo transaction "${o.key}" (redo)`);for(let{key:n,newValue:r}of o.atomUpdates){let i={key:n,type:"atom"},a=S(i,e);if(a===null)throw new Error(`State "${i.key}" not found in this store. This is surprising, because we are navigating the history of the store.`);k(a,r,e);}};var tt=(o,e)=>{var t;(t=e.config.logger)==null||t.info(` \u23EE undo transaction "${o.key}" (undo)`);for(let{key:n,oldValue:r}of o.atomUpdates){let i={key:n,type:"atom"},a=S(i,e);if(a===null)throw new Error(`State "${i.key}" not found in this store. This is surprising, because we are navigating the history of the store.`);k(a,r,e);}};var ot=["idle","building","applying"];function re(o,e){var r;let t=p(e),n=t.atoms.has(o)?"atom":t.selectors.has(o)?"selector":t.readonlySelectors.has(o)?"readonly_selector":"";if(!n){let i=Math.random().toString(36);n=`\u{1F6A8} This state could not be found by lookup! Check the console for "${i}"`,(r=e.config.logger)==null||r.error(`${i}: Key "${o}" does not exist in the store.`);}return {key:o,type:n}}var j=(o,e,t=l.STORE)=>{let n=S(o,t);if(n===null)throw new Error(`Cannot subscribe to atom "${o.key}" because it has not been initialized in store "${t.config.name}"`);n.subject.subscribe("timeline",r=>{var c,f,y,g,x;let i=t.operation.open&&t.operation.token.type==="selector"?t.operation.token.key:null,a=t.operation.open&&t.operation.token.type==="selector"?t.operation.time:null,s=t.transactionStatus.phase==="applying"?t.transactionStatus.key:null,m=t.transactionStatus.phase==="applying"?t.transactionStatus.time:null;if((c=t.config.logger)==null||c.info(`\u23F3 timeline "${e.key}" saw atom "${o.key}" go (`,r.oldValue,"->",r.newValue,s?`) in transaction "${s}"`:i?`) in selector "${i}"`:")"),e.timeTraveling===null){if(e.selectorTime&&e.selectorTime!==a&&e.history.at(-1)===void 0)throw new Error(`Timeline "${e.key}" has a selectorTime, but no history. This is most likely a bug in AtomIO.`);if(s&&t.transactionStatus.phase==="applying"){let u=S({key:s,type:"transaction"},t);if(u===null)throw new Error(`Transaction "${s}" not found in store "${t.config.name}". This is surprising, because we are in the application phase of "${s}".`);if(e.transactionKey!==s){e.transactionKey&&((f=t.config.logger)==null||f.error(`Timeline "${e.key}" was unable to resolve transaction "${e.transactionKey}. This is probably a bug.`)),e.transactionKey=s;let b=u.subject.subscribe(`timeline:${e.key}`,A=>{var L;if(b(),e.timeTraveling===null&&m){e.at!==e.history.length&&e.history.splice(e.at);let De=A.atomUpdates.filter(ge=>{let ke=p(t).timelineAtoms.getRelatedKeys(e.key);return ke?[...ke].some(be=>{var xe;return be===ge.key||be===((xe=ge.family)==null?void 0:xe.key)}):!1}),Se=h(d({type:"transaction_update",timestamp:m},A),{atomUpdates:De});e.history.push(Se),e.at=e.history.length,e.subject.next(Se);}e.transactionKey=null,(L=t.config.logger)==null||L.info(`\u231B timeline "${e.key}" got a transaction_update "${A.key}"`);});}}else if(i&&a){let u=e.history.at(-1);a!==e.selectorTime?(u={type:"selector_update",timestamp:a,key:i,atomUpdates:[]},u.atomUpdates.push(d({key:n.key,type:"atom_update"},r)),e.at!==e.history.length&&e.history.splice(e.at),e.history.push(u),(y=t.config.logger)==null||y.info(`\u231B timeline "${e.key}" got a selector_update "${i}" with`,u.atomUpdates.map(b=>b.key)),e.at=e.history.length,e.selectorTime=a):(u==null?void 0:u.type)==="selector_update"&&(u.atomUpdates.push(d({key:n.key,type:"atom_update"},r)),(g=t.config.logger)==null||g.info(` \u231B timeline "${e.key}" set selector_update "${i}" to`,u==null?void 0:u.atomUpdates.map(b=>b.key))),u&&e.subject.next(u);}else {let u=Date.now();e.selectorTime=null,e.at!==e.history.length&&e.history.splice(e.at);let b={type:"atom_update",timestamp:u,key:n.key,oldValue:r.oldValue,newValue:r.newValue};n.family&&(b.family=n.family),e.history.push(b),e.subject.next(b),(x=t.config.logger)==null||x.info(`\u231B timeline "${e.key}" got an atom_update to "${n.key}"`),e.at=e.history.length;}}});};var U=(o,e=l.STORE)=>{var r,i,a,s;(r=e.config.logger)==null||r.info(`\u23E9 redo "${o.key}"`);let t=e.timelines.get(o.key);if(!t){(i=e.config.logger)==null||i.error(`Failed to redo on timeline "${o.key}". This timeline has not been initialized.`);return}if(t.at===t.history.length){(a=e.config.logger)==null||a.warn(`Failed to redo at the end of timeline "${o.key}". There is nothing to redo.`);return}t.timeTraveling="into_future";let n=t.history[t.at];switch(n.type){case"atom_update":{let{key:m,newValue:c}=n;k({key:m,type:"atom"},c,e);break}case"selector_update":case"transaction_update":{for(let m of n.atomUpdates){let{key:c,newValue:f}=m;k({key:c,type:"atom"},f,e);}break}}++t.at,t.subject.next("redo"),t.timeTraveling=null,(s=e.config.logger)==null||s.info(`\u23F9\uFE0F "${o.key}" is now at ${t.at} / ${t.history.length}`);},V=(o,e=l.STORE)=>{var r,i,a,s;(r=e.config.logger)==null||r.info(`\u23EA undo "${o.key}"`);let t=e.timelines.get(o.key);if(!t){(i=e.config.logger)==null||i.error(`Failed to undo on timeline "${o.key}". This timeline has not been initialized.`);return}if(t.at===0){(a=e.config.logger)==null||a.warn(`Failed to undo at the beginning of timeline "${o.key}". There is nothing to undo.`);return}t.timeTraveling="into_past",--t.at;let n=t.history[t.at];switch(n.type){case"atom_update":{let{key:m,oldValue:c}=n;k({key:m,type:"atom"},c,e);break}case"selector_update":case"transaction_update":{for(let m of [...n.atomUpdates].reverse()){let{key:c,oldValue:f}=m;k({key:c,type:"atom"},f,e);}break}}t.subject.next("undo"),t.timeTraveling=null,(s=e.config.logger)==null||s.info(`\u23F9\uFE0F "${o.key}" is now at ${t.at} / ${t.history.length}`);};function M(o,e=l.STORE,t=null){var a,s,m;let n=h(d({type:"timeline",key:o.key,at:0,timeTraveling:null,selectorTime:null,transactionKey:null},t),{history:(a=t==null?void 0:t.history.map(c=>d({},c)))!=null?a:[],install:c=>M(o,c,n),subject:new T}),r=p(e);for(let c of o.atoms){let f=r.timelineAtoms.getRelatedKey(c.key);if(f){(s=e.config.logger)==null||s.error(`\u274C Failed to add atom "${c.key}" to timeline "${o.key}" because it belongs to timeline "${f}"`);continue}if(c.type==="atom_family")c.subject.subscribe(`timeline:${o.key}`,g=>{r.atoms.has(g.key)||j(g,n,e);});else {let y=c;if("family"in y&&y.family){let g=r.timelineAtoms.getRelatedKey(y.family.key);if(g){(m=e.config.logger)==null||m.error(`\u274C Failed to add atom "${y.key}" to timeline "${o.key}" because its family "${y.family.key}" belongs to timeline "${g}"`);continue}}j(y,n,e);}r.timelineAtoms=r.timelineAtoms.set({atomKey:c.key,timelineKey:o.key});}e.timelines.set(o.key,n);let i={key:o.key,type:"timeline"};return e.subject.timelineCreation.next(i),i}function S(o,e){var r,i,a,s,m,c,f,y,g,x;let t=p(e),n=(s=(a=(i=(r=t.atoms.get(o.key))!=null?r:t.selectors.get(o.key))!=null?i:t.readonlySelectors.get(o.key))!=null?a:t.transactions.get(o.key))!=null?s:t.timelines.get(o.key);if(n)return n;if(e.transactionStatus.phase==="applying"&&(t=e.transactionStatus.core,n=(y=(f=(c=(m=t.atoms.get(o.key))!=null?m:t.selectors.get(o.key))!=null?c:t.readonlySelectors.get(o.key))!=null?f:t.transactions.get(o.key))!=null?y:t.timelines.get(o.key),n)){switch((g=e.config.logger)==null||g.info(`\u{1F6E0}\uFE0F add ${o.type} "${o.key}"`),n.type){case"atom":{e.atoms.set(o.key,n),e.valueMap.set(o.key,n.default);let u=n.key,b=(x=n.family)==null?void 0:x.key,A=t.timelineAtoms.getRelatedKey(u);A===void 0&&typeof b=="string"&&(A=t.timelineAtoms.getRelatedKey(b));let L=typeof A=="string"?e.timelines.get(A):void 0;L&&j(n,L,e);break}case"selector":t.selectors.set(o.key,n);break;case"readonly_selector":t.readonlySelectors.set(o.key,n);break;case"transaction":t.transactions.set(o.key,n);break;case"timeline":t.timelines.set(o.key,n);break}return n}return null}var E=class{constructor(e,t=null){this.valueMap=new Map;this.atoms=new Map;this.selectors=new Map;this.readonlySelectors=new Map;this.timelines=new Map;this.transactions=new Map;this.atomsThatAreDefault=new Set;this.timelineAtoms=new O({between:["timelineKey","atomKey"],cardinality:"1:n"});this.selectorAtoms=new O({between:["selectorKey","atomKey"],cardinality:"n:n"});this.selectorGraph=new O({between:["upstreamSelectorKey","downstreamSelectorKey"],cardinality:"n:n"},{isContent:$e({source:string.isString}),makeContentKey:(...e)=>e.sort().join(":")});this.subject={atomCreation:new T,selectorCreation:new T,transactionCreation:new T,timelineCreation:new T,operationStatus:new T};this.operation={open:!1};this.transactionStatus={phase:"idle"};this.config={name:"DEFAULT",logger:h(d({},console),{info:$}),logger__INTERNAL:console};var n;t!==null&&(this.valueMap=new Map(t==null?void 0:t.valueMap),this.operation=d({},t==null?void 0:t.operation),this.transactionStatus=d({},t==null?void 0:t.transactionStatus),this.config=h(d({},t==null?void 0:t.config),{logger__INTERNAL:console,logger:d(h(d({},console),{info:$}),(n=t==null?void 0:t.config)==null?void 0:n.logger),name:e})),t==null||t.atoms.forEach(r=>{let i=h(d({},r),{subject:new T});this.atoms.set(r.key,i);}),t==null||t.readonlySelectors.forEach(r=>{r.install(this);}),t==null||t.selectors.forEach(r=>{r.install(this);}),t==null||t.transactions.forEach(r=>{r.install(this);}),t==null||t.timelines.forEach(r=>{r.install(this);});}},l={STORE_INTERNAL:void 0,get STORE(){var o;return (o=this.STORE_INTERNAL)!=null?o:this.STORE_INTERNAL=new E("DEFAULT")}},rt=(o=l.STORE)=>{let{config:e}=o;Object.assign(o,new E(e.name)),o.config=e;};var _=(o,e,t=l.STORE)=>{p(t).valueMap.set(o,e);},ie=(o,e=l.STORE)=>p(e).valueMap.get(o),ae=(o,e=l.STORE)=>p(e).valueMap.has(o);var P=(o,e)=>p(e).selectorGraph.getRelationEntries({downstreamSelectorKey:o}).filter(([n,{source:r}])=>r!==o).map(([n,{source:r}])=>re(r,e));var I=(o,e=l.STORE)=>{var t,n,r;return ae(o.key,e)?((t=e.config.logger)==null||t.info(`>> read "${o.key}"`),ie(o.key,e)):o.type!=="atom"?((n=e.config.logger)==null||n.info(`-> calc "${o.key}"`),o.get()):((r=e.config.logger)==null||r.error(`Attempted to get atom "${o.key}", which was never initialized in store "${e.config.name}".`),o.default)};var se=(o,e)=>{var n,r;let t=p(e);if(t.operation.open)throw (n=e.config.logger)==null||n.error(`\u274C failed to setState to "${o.key}" during a setState for "${t.operation.token.key}"`),Symbol("violation");t.operation={open:!0,done:new Set,prev:new Map(e.valueMap),time:Date.now(),token:o},(r=e.config.logger)==null||r.info(`\u2B55 operation start from "${o.key}" in store "${e.config.name}"${e.transactionStatus.phase==="idle"?"":` ${e.transactionStatus.phase} "${e.transactionStatus.key}"`}`);},le=o=>{var t;let e=p(o);e.operation={open:!1},(t=o.config.logger)==null||t.info("\u{1F534} operation done"),o.subject.operationStatus.next(e.operation);},ce=(o,e=l.STORE)=>{var n;let t=p(e);return t.operation.open?t.operation.done.has(o):((n=e.config.logger)==null||n.warn("isDone called outside of an operation. This is probably a bug."),!0)},N=(o,e=l.STORE)=>{var n;let t=p(e);if(!t.operation.open){(n=e.config.logger)==null||n.warn("markDone called outside of an operation. This is probably a bug.");return}t.operation.done.add(o);};var ve=(o,e,t)=>{let{key:n}=o,{logger:r}=t.config;r==null||r.info(`\u{1F4E2} ${o.type} "${n}" went (`,e.oldValue,"->",e.newValue,")"),o.subject.next(e);};var Ce=(o,e=l.STORE)=>{var r,i,a,s,m,c,f;let t=p(e),n=t.selectorAtoms.getRelatedKeys(o.key);if((i=e.config.logger)==null||i.info(` || ${(r=n==null?void 0:n.size)!=null?r:"none"} downstream:`,n),t.operation.open&&((a=e.config.logger)==null||a.info(" ||",[...t.operation.done],"already done")),n)for(let y of n){if(ce(y,e)){(s=e.config.logger)==null||s.info(` || ${y} already done`);continue}if(!((m=t.selectors.get(y))!=null?m:t.readonlySelectors.get(y))){(c=e.config.logger)==null||c.info(` || ${y} was not found in selectors or readonlySelectors`);return}t.valueMap.delete(y),(f=e.config.logger)==null||f.info(` xx evicted "${y}"`),N(y,e);}};var je=(o,e,t)=>{var a;let{key:n}=o,{logger:r}=t.config;if(t.transactionStatus.phase!=="building"){(a=t.config.logger)==null||a.warn("stowUpdate called outside of a transaction. This is probably a bug.");return}let i=d({key:n},e);o.family&&(i.family=o.family),t.transactionStatus.atomUpdates.push(i),r==null||r.info(`\u{1F4DD} ${n} stowed (`,e.oldValue,"->",e.newValue,")");};var Me=(o,e,t=l.STORE)=>{var a,s;let n=I(o,t),r=v(e)(n);(a=t.config.logger)==null||a.info(`<< setting atom "${o.key}" to`,r),_(o.key,r,t),F(o.key,t)&&me(o.key,t),N(o.key,t),(s=t.config.logger)==null||s.info(` || evicting caches downstream from "${o.key}"`),Ce(o,t);let i={oldValue:n,newValue:r};t.transactionStatus.phase!=="building"?ve(o,i,t):je(o,i,t);};var Fe=(o,e,t=l.STORE)=>{var i,a;let n=I(o,t),r=v(e)(n);(i=t.config.logger)==null||i.info(`<< setting selector "${o.key}" to`,r),(a=t.config.logger)==null||a.info(` || propagating change made to "${o.key}"`),o.set(r);};var D=(o,e,t=l.STORE)=>{"set"in o?Fe(o,e,t):Me(o,e,t);};var X=(o,e,t)=>{let n=[],r=P(e.key,t),i=0;for(;r.length>0;){let a=r.shift();if(++i,i>999)throw new Error(`Maximum selector dependency depth exceeded in selector "${o}".`);a.type!=="atom"?r.push(...P(a.key,t)):n.push(a);}return n},z=(o,e)=>P(o,e).flatMap(n=>n.type==="atom"?n:X(o,n,e));var pe=(o,e,t)=>{var i,a;let n=p(t);if(e.type==="atom"){n.selectorAtoms=n.selectorAtoms.set({selectorKey:o,atomKey:e.key}),(i=t.config.logger)==null||i.info(` || adding root for "${o}": ${e.key}`);return}let r=X(o,e,t);(a=t.config.logger)==null||a.info(` || adding roots for "${o}":`,r.map(s=>s.key));for(let s of r)n.selectorAtoms=n.selectorAtoms.set({selectorKey:o,atomKey:s.key});};var B=(o,e=l.STORE)=>({get:t=>{var s,m;let n=p(e),r=n.selectorGraph.getRelationEntries({downstreamSelectorKey:o}).some(([c,{source:f}])=>f===t.key),i=S(t,e);if(i===null)throw new Error(`State "${t.key}" not found in this store. Did you forget to initialize with the "atom" or "selector" function?`);let a=I(i,e);return r?(s=e.config.logger)==null||s.info(` || ${o} <- ${t.key} =`,a):((m=e.config.logger)==null||m.info(`\u{1F50C} registerSelector "${o}" <- ( "${t.key}" =`,a,")"),n.selectorGraph=n.selectorGraph.set({upstreamSelectorKey:t.key,downstreamSelectorKey:o},{source:t.key})),pe(o,t,e),a},set:(t,n)=>{let r=S(t,e);if(r===null)throw new Error(`State "${t.key}" not found in this store. Did you forget to initialize with the "atom" or "selector" function?`);D(r,n,e);}});var Je=(o,e,t,n)=>{var g;let r=new T,{get:i,set:a}=B(o.key,t),s=()=>{let x=o.get({get:i});return _(o.key,x,t),x},m=x=>{var A;let u=s();(A=t.config.logger)==null||A.info(` <- "${o.key}" went (`,u,"->",x,")");let b=v(x)(u);_(o.key,b,t),N(o.key,t),t.transactionStatus.phase==="idle"&&r.next({newValue:b,oldValue:u}),o.set({get:i,set:a},b);},c=d(h(d({},o),{subject:r,install:x=>R(o,e,x),get:s,set:m,type:"selector"}),e&&{family:e});n.selectors.set(o.key,c);let f=s();(g=t.config.logger)==null||g.info(` \u2728 "${o.key}" =`,f);let y={key:o.key,type:"selector"};return e&&(y.family=e),t.subject.selectorCreation.next(y),y};var Le=(o,e,t,n)=>{var f;let r=new T,{get:i}=B(o.key,t),a=()=>{let y=o.get({get:i});return _(o.key,y,t),y},s=d(h(d({},o),{subject:r,install:y=>R(o,e,y),get:a,type:"readonly_selector"}),e&&{family:e});n.readonlySelectors.set(o.key,s);let m=a();(f=t.config.logger)==null||f.info(` \u2728 "${o.key}" =`,m);let c={key:o.key,type:"readonly_selector"};return e&&(c.family=e),t.subject.selectorCreation.next(c),c};function R(o,e,t=l.STORE){var r;let n=p(t);return n.selectors.has(o.key)&&((r=t.config.logger)==null||r.error(`Key "${o.key}" already exists in the store.`)),"set"in o?Je(o,e,t,n):Le(o,e,t,n)}var F=(o,e=l.STORE)=>p(e).atomsThatAreDefault.has(o),ye=(o,e=l.STORE)=>{let t=p(e);t.atomsThatAreDefault=new Set(t.atomsThatAreDefault).add(o);},me=(o,e=l.STORE)=>{let t=p(e);t.atomsThatAreDefault=new Set(p(e).atomsThatAreDefault),t.atomsThatAreDefault.delete(o);},fe=(o,e=l.STORE)=>z(o,e).every(n=>F(n.key,e));function K(o,e,t=l.STORE){var c,f,y;let n=p(t),r=n.atoms.get(o.key);if(r)return (f=(c=t.config.logger)==null?void 0:c.info)==null||f.call(c,`Key "${o.key}" already exists in the store.`),w(r);let i=new T,a=d(h(d({},o),{subject:i,type:"atom"}),e&&{family:e}),s=o.default instanceof Function?o.default():o.default;n.atoms.set(a.key,a),ye(o.key,t),_(o.key,s,t);let m=w(a);return (y=o.effects)==null||y.forEach((g,x)=>g({setSelf:u=>k(m,u,t),onSet:u=>q(m,u,`effects[${x}]`,t)})),t.subject.atomCreation.next(m),m}var J=o=>JSON.stringify(o);function H(o,e=l.STORE){let t=new T;return Object.assign(n=>{let r=J(n),i={key:o.key,subKey:r},a=`${o.key}(${r})`,s=S({key:a,type:"atom"},e),m;if(s)m=w(s);else {let c={key:a,default:o.default instanceof Function?o.default(n):o.default};o.effects&&(c.effects=o.effects(n)),m=K(c,i,e),t.next(m);}return m},{key:o.key,type:"atom_family",subject:t})}function de(o,e){let t=p(e),n=new T;return Object.assign(r=>{let i=J(r),a={key:o.key,subKey:i},s=`${o.key}(${i})`,m=t.readonlySelectors.get(s);return m?w(m):R({key:s,get:o.get(r)},a,e)},{key:o.key,type:"readonly_selector_family",subject:n})}function Y(o,e=l.STORE){if(!("set"in o))return de(o,e);let n=p(e),r=new T;return Object.assign(i=>{let a=J(i),s={key:o.key,subKey:a},m=`${o.key}(${a})`,c=n.selectors.get(m);if(c)return w(c);let f=R({key:m,get:o.get(i),set:o.set(i)},s,e);return r.next(f),f},{key:o.key,type:"selector_family"})}var Ue=(o,e=l.STORE)=>{var n;let t=p(e);return t.operation.open?t.operation.prev.get(o.key):((n=e.config.logger)==null||n.warn("recall called outside of an operation. This is probably a bug."),t.valueMap.get(o.key))};var ue=(o,e)=>"default"in o?null:z(o.key,e).map(n=>{let r=S(n,e);if(r===null)throw new Error(`Atom "${n.key}", a dependency of selector "${o.key}", not found in store "${e.config.name}".`);return r.subject.subscribe(`${o.type}:${o.key}`,i=>{var m,c;(m=e.config.logger)==null||m.info(`\u{1F4E2} selector "${o.key}" saw root "${n.key}" go (`,i.oldValue,"->",i.newValue,")");let a=Ue(o,e),s=I(o,e);(c=e.config.logger)==null||c.info(` <- "${o.key}" went (`,a,"->",s,")"),o.subject.next({newValue:s,oldValue:a});})});var Te=o=>o[0].toUpperCase()+o.slice(1);function wi(o){return K(o)}function Ai(o){return H(o)}var Q=["info","warn","error"],it=(o,e=l.STORE)=>{let{logger__INTERNAL:t}=e.config;o===null?e.config.logger=null:(e.config.logger=d({},console),Q.forEach(n=>{Q.indexOf(n)<Q.indexOf(o)?e.config.logger[n]=$:e.config.logger[n]=t[n];}));},Ei=(o,e=l.STORE)=>{var n;let t=e.config.logger===null?null:(n=Q.find(r=>{var i;return ((i=e.config.logger)==null?void 0:i[r])!==$}))!=null?n:null;e.config.logger__INTERNAL=d({},o),it(t,e);};function vi(o){return R(o)}function Ci(o){return Y(o)}var Pe=class{constructor(e,t=null){let n=new E(e,t);this.store=n,this.atom=r=>K(r,void 0,n),this.atomFamily=r=>H(r,n),this.selector=r=>R(r,void 0,n),this.selectorFamily=r=>Y(r,n),this.transaction=r=>C(r,n),this.timeline=r=>M(r,n),this.getState=r=>W(r,n),this.setState=(r,i)=>k(r,i,n),this.subscribe=(r,i,a)=>q(r,i,a,n),this.undo=r=>V(r,n),this.redo=r=>U(r,n);}};var q=(o,e,t=Math.random().toString(36).slice(2),n=l.STORE)=>{var m;let r=S(o,n);if(r===null)throw new Error(`State "${o.key}" not found in this store. Did you forget to initialize with the "atom" or "selector" function?`);let i=r.subject.subscribe(t,e);(m=n.config.logger)==null||m.info(`\u{1F440} subscribe to "${r.key}"`);let a=r.type!=="atom"?ue(r,n):null;return a===null?()=>{var c;(c=n.config.logger)==null||c.info(`\u{1F648} unsubscribe from "${r.key}"`),i();}:()=>{var c;(c=n.config.logger)==null||c.info(`\u{1F648} unsubscribe from "${r.key}" and its dependencies`),i();for(let f of a)f();}},Ui=(o,e,t=Math.random().toString(36).slice(2),n=l.STORE)=>{var a;let r=S(o,n);if(r===null)throw new Error(`Cannot subscribe to transaction "${o.key}": transaction not found in store "${n.config.name}".`);(a=n.config.logger)==null||a.info(`\u{1F440} subscribe to transaction "${o.key}"`);let i=r.subject.subscribe(t,e);return ()=>{var s;(s=n.config.logger)==null||s.info(`\u{1F648} unsubscribe from transaction "${o.key}"`),i();}},Vi=(o,e,t=Math.random().toString(36).slice(2),n=l.STORE)=>{var a;let r=S(o,n);if(r===null)throw new Error(`Cannot subscribe to timeline "${o.key}": timeline not found in store "${n.config.name}".`);(a=n.config.logger)==null||a.info(`\u{1F440} subscribe to timeline "${o.key}"`);let i=r.subject.subscribe(t,e);return ()=>{var s;(s=n.config.logger)==null||s.info(`\u{1F648} unsubscribe from timeline "${o.key}"`),i();}};var Bi=o=>M(o),Hi=o=>{U(o,l.STORE);},Yi=o=>{V(o,l.STORE);};function Xi(o){return C(o)}var qi=(o,e=l.STORE)=>(...t)=>{let n=S(o,e);if(n)return n.run(...t);throw new Error(`Cannot run transaction "${o.key}": transaction not found in store "${e.config.name}".`)};var W=(o,e=l.STORE)=>{let t=S(o,e);if(t===null)throw new Error(`${Te(o.type)} "${o.key}" not found in store "${e.config.name}".`);return I(t,e)},k=(o,e,t=l.STORE)=>{try{se(o,t);}catch(r){if(typeof r!="symbol")throw r;return}let n=S(o,t);if(n===null)throw new Error(`${Te(o.type)} "${o.key}" not found in store "${t.config.name}".`);D(n,e,t),le(t);},ta=(o,e=l.STORE)=>o.type==="atom"?F(o.key,e):fe(o.key,e);
5
+ function _interopNamespace(e) {
6
+ if (e && e.__esModule) return e;
7
+ var n = Object.create(null);
8
+ if (e) {
9
+ Object.keys(e).forEach(function (k) {
10
+ if (k !== 'default') {
11
+ var d = Object.getOwnPropertyDescriptor(e, k);
12
+ Object.defineProperty(n, k, d.get ? d : {
13
+ enumerable: true,
14
+ get: function () { return e[k]; }
15
+ });
16
+ }
17
+ });
18
+ }
19
+ n.default = e;
20
+ return Object.freeze(n);
21
+ }
7
22
 
8
- exports.LOG_LEVELS = Q;
9
- exports.Silo = Pe;
10
- exports.__INTERNAL__ = Ve;
11
- exports.atom = wi;
12
- exports.atomFamily = Ai;
13
- exports.getState = W;
14
- exports.isDefault = ta;
15
- exports.redo = Hi;
16
- exports.runTransaction = qi;
17
- exports.selector = vi;
18
- exports.selectorFamily = Ci;
19
- exports.setLogLevel = it;
20
- exports.setState = k;
21
- exports.subscribe = q;
22
- exports.subscribeToTimeline = Vi;
23
- exports.subscribeToTransaction = Ui;
24
- exports.timeline = Bi;
25
- exports.transaction = Xi;
26
- exports.undo = Yi;
27
- exports.useLogger = Ei;
23
+ var IO__namespace = /*#__PURE__*/_interopNamespace(IO);
24
+
25
+ var __defProp = Object.defineProperty;
26
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
27
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
28
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
29
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
30
+ var __spreadValues = (a, b) => {
31
+ for (var prop in b || (b = {}))
32
+ if (__hasOwnProp.call(b, prop))
33
+ __defNormalProp(a, prop, b[prop]);
34
+ if (__getOwnPropSymbols)
35
+ for (var prop of __getOwnPropSymbols(b)) {
36
+ if (__propIsEnum.call(b, prop))
37
+ __defNormalProp(a, prop, b[prop]);
38
+ }
39
+ return a;
40
+ };
41
+ function atom(options) {
42
+ if (`mutable` in options) {
43
+ return IO.createMutableAtom(options);
44
+ }
45
+ return IO.createAtom(options);
46
+ }
47
+ function atomFamily(options) {
48
+ if (`mutable` in options) {
49
+ return IO.createMutableAtomFamily(options);
50
+ }
51
+ return IO.createAtomFamily(options);
52
+ }
53
+ var NO_OP = () => void 0;
54
+ var LOG_LEVELS = [
55
+ `info`,
56
+ `warn`,
57
+ `error`
58
+ ];
59
+ var setLogLevel = (preferredLevel, store = IO.IMPLICIT.STORE) => {
60
+ const { logger__INTERNAL } = store.config;
61
+ if (preferredLevel === null) {
62
+ store.config.logger = null;
63
+ } else {
64
+ store.config.logger = __spreadValues({}, console);
65
+ LOG_LEVELS.forEach((logLevel) => {
66
+ if (LOG_LEVELS.indexOf(logLevel) < LOG_LEVELS.indexOf(preferredLevel)) {
67
+ store.config.logger[logLevel] = NO_OP;
68
+ } else {
69
+ store.config.logger[logLevel] = logger__INTERNAL[logLevel];
70
+ }
71
+ });
72
+ }
73
+ };
74
+ var useLogger = (logger, store = IO.IMPLICIT.STORE) => {
75
+ var _a;
76
+ const currentLogLevel = store.config.logger === null ? null : (_a = LOG_LEVELS.find(
77
+ (logLevel) => {
78
+ var _a2;
79
+ return ((_a2 = store.config.logger) == null ? void 0 : _a2[logLevel]) !== NO_OP;
80
+ }
81
+ )) != null ? _a : null;
82
+ store.config.logger__INTERNAL = __spreadValues({}, logger);
83
+ setLogLevel(currentLogLevel, store);
84
+ };
85
+ function selector(options) {
86
+ return IO.createSelector(options);
87
+ }
88
+ function selectorFamily(options) {
89
+ return IO.createSelectorFamily(options);
90
+ }
91
+ var Silo = class {
92
+ constructor(name, fromStore = null) {
93
+ const s = new IO.Store(name, fromStore);
94
+ this.store = s;
95
+ this.atom = (options) => {
96
+ if (`mutable` in options) {
97
+ return IO.createMutableAtom(options, s);
98
+ }
99
+ return IO.createAtom(options, void 0, s);
100
+ };
101
+ this.atomFamily = (options) => {
102
+ if (`mutable` in options) {
103
+ return IO.createMutableAtomFamily(options, s);
104
+ }
105
+ return IO.createAtomFamily(options, s);
106
+ };
107
+ this.selector = (options) => IO.createSelector(options, void 0, s);
108
+ this.selectorFamily = (options) => IO.createSelectorFamily(options, s);
109
+ this.transaction = (options) => IO.transaction__INTERNAL(options, s);
110
+ this.timeline = (options) => IO.timeline__INTERNAL(options, s);
111
+ this.getState = (token) => getState(token, s);
112
+ this.setState = (token, newValue) => setState(token, newValue, s);
113
+ this.subscribe = (token, handler, key) => subscribe(token, handler, key, s);
114
+ this.undo = (token) => IO.undo__INTERNAL(token, s);
115
+ this.redo = (token) => IO.redo__INTERNAL(token, s);
116
+ }
117
+ };
118
+ function subscribe(token, handleUpdate, key = Math.random().toString(36).slice(2), store = IO.IMPLICIT.STORE) {
119
+ var _a;
120
+ const state = IO.withdraw(token, store);
121
+ if (state === null) {
122
+ throw new Error(
123
+ `State "${token.key}" not found in this store. Did you forget to initialize with the "atom" or "selector" function?`
124
+ );
125
+ }
126
+ const unsubFunction = state.subject.subscribe(key, handleUpdate);
127
+ (_a = store.config.logger) == null ? void 0 : _a.info(`\u{1F440} adding subscription "${key}" to "${state.key}"`);
128
+ const dependencyUnsubFunctions = state.type !== `atom` ? IO.subscribeToRootAtoms(state, store) : null;
129
+ const unsubscribe = dependencyUnsubFunctions === null ? () => {
130
+ var _a2;
131
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(`\u{1F648} unsubscribe from "${state.key}"`);
132
+ unsubFunction();
133
+ } : () => {
134
+ var _a2;
135
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(
136
+ `\u{1F648} unsubscribe from "${state.key}" and its dependencies`
137
+ );
138
+ unsubFunction();
139
+ for (const unsubFromDependency of dependencyUnsubFunctions) {
140
+ unsubFromDependency();
141
+ }
142
+ };
143
+ return unsubscribe;
144
+ }
145
+ var subscribeToTransaction = (token, handleUpdate, key = Math.random().toString(36).slice(2), store = IO.IMPLICIT.STORE) => {
146
+ var _a;
147
+ const tx = IO.withdraw(token, store);
148
+ if (tx === null) {
149
+ throw new Error(
150
+ `Cannot subscribe to transaction "${token.key}": transaction not found in store "${store.config.name}".`
151
+ );
152
+ }
153
+ (_a = store.config.logger) == null ? void 0 : _a.info(`\u{1F440} subscribe to transaction "${token.key}"`);
154
+ const unsubscribe = tx.subject.subscribe(key, handleUpdate);
155
+ return () => {
156
+ var _a2;
157
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(`\u{1F648} unsubscribe from transaction "${token.key}"`);
158
+ unsubscribe();
159
+ };
160
+ };
161
+ var subscribeToTimeline = (token, handleUpdate, key = Math.random().toString(36).slice(2), store = IO.IMPLICIT.STORE) => {
162
+ var _a;
163
+ const tl = IO.withdraw(token, store);
164
+ if (tl === null) {
165
+ throw new Error(
166
+ `Cannot subscribe to timeline "${token.key}": timeline not found in store "${store.config.name}".`
167
+ );
168
+ }
169
+ (_a = store.config.logger) == null ? void 0 : _a.info(`\u{1F440} subscribe to timeline "${token.key}"`);
170
+ const unsubscribe = tl.subject.subscribe(key, handleUpdate);
171
+ return () => {
172
+ var _a2;
173
+ (_a2 = store.config.logger) == null ? void 0 : _a2.info(`\u{1F648} unsubscribe from timeline "${token.key}"`);
174
+ unsubscribe();
175
+ };
176
+ };
177
+ var timeline = (options) => {
178
+ return IO.timeline__INTERNAL(options);
179
+ };
180
+ var redo = (token) => {
181
+ IO.redo__INTERNAL(token, IO.IMPLICIT.STORE);
182
+ };
183
+ var undo = (token) => {
184
+ IO.undo__INTERNAL(token, IO.IMPLICIT.STORE);
185
+ };
186
+ function transaction(options) {
187
+ return IO.transaction__INTERNAL(options);
188
+ }
189
+ var runTransaction = (token, store = IO.IMPLICIT.STORE) => (...parameters) => {
190
+ const tx = IO.withdraw(token, store);
191
+ if (tx) {
192
+ return tx.run(...parameters);
193
+ }
194
+ throw new Error(
195
+ `Cannot run transaction "${token.key}": transaction not found in store "${store.config.name}".`
196
+ );
197
+ };
198
+
199
+ // src/index.ts
200
+ var capitalize = (str) => str[0].toUpperCase() + str.slice(1);
201
+ var getState = (token, store = IO__namespace.IMPLICIT.STORE) => {
202
+ var _a;
203
+ const state = (_a = IO__namespace.withdraw(token, store)) != null ? _a : IO__namespace.withdrawNewFamilyMember(token, store);
204
+ if (state === null) {
205
+ throw new Error(
206
+ `${capitalize(token.type)} "${token.key}" not found in store "${store.config.name}".`
207
+ );
208
+ }
209
+ return IO__namespace.getState__INTERNAL(state, store);
210
+ };
211
+ var setState = (token, value, store = IO__namespace.IMPLICIT.STORE) => {
212
+ var _a;
213
+ try {
214
+ IO__namespace.openOperation(token, store);
215
+ } catch (thrown) {
216
+ if (!(typeof thrown === `symbol`)) {
217
+ throw thrown;
218
+ }
219
+ return;
220
+ }
221
+ const state = (_a = IO__namespace.withdraw(token, store)) != null ? _a : IO__namespace.withdrawNewFamilyMember(token, store);
222
+ if (state === null) {
223
+ throw new Error(
224
+ `${capitalize(token.type)} "${token.key}" not found in store "${store.config.name}".`
225
+ );
226
+ }
227
+ IO__namespace.setState__INTERNAL(state, value, store);
228
+ IO__namespace.closeOperation(store);
229
+ };
230
+ var isDefault = (token, store = IO__namespace.IMPLICIT.STORE) => token.type === `atom` ? IO__namespace.isAtomDefault(token.key, store) : IO__namespace.isSelectorDefault(token.key, store);
231
+
232
+ exports.LOG_LEVELS = LOG_LEVELS;
233
+ exports.NO_OP = NO_OP;
234
+ exports.Silo = Silo;
235
+ exports.atom = atom;
236
+ exports.atomFamily = atomFamily;
237
+ exports.capitalize = capitalize;
238
+ exports.getState = getState;
239
+ exports.isDefault = isDefault;
240
+ exports.redo = redo;
241
+ exports.runTransaction = runTransaction;
242
+ exports.selector = selector;
243
+ exports.selectorFamily = selectorFamily;
244
+ exports.setLogLevel = setLogLevel;
245
+ exports.setState = setState;
246
+ exports.subscribe = subscribe;
247
+ exports.subscribeToTimeline = subscribeToTimeline;
248
+ exports.subscribeToTransaction = subscribeToTransaction;
249
+ exports.timeline = timeline;
250
+ exports.transaction = transaction;
251
+ exports.undo = undo;
252
+ exports.useLogger = useLogger;
28
253
  //# sourceMappingURL=out.js.map
29
254
  //# sourceMappingURL=index.js.map