@vegajs/vortex
Version:
🌀 A next-gen, lightweight state management library for JavaScript and TypeScript.
1 lines • 4.32 kB
JavaScript
"use strict";let __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,t)=>{for(var s in t)__webpack_require__.o(t,s)&&!__webpack_require__.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{defineLazyStore:()=>defineLazyStore,defineStore:()=>defineStore});let external_constants_js_namespaceObject=require("../../constants.js"),index_js_namespaceObject=require("../../utils/index.js"),external_reactive_index_js_namespaceObject=require("../reactive/index.js"),external_devtools_connection_js_namespaceObject=require("./devtools-connection.js");class Store{listeners=new Map;listenerCounter=0;state;reactiveUnits;prevState;stateKeys=[];name;isPersist=!1;constructor(e,t={}){let{plugins:s=[],name:r=`unknown_${Date.now()}`}=t;this.name=r,this.state=e({reactive:external_reactive_index_js_namespaceObject.reactive,computed:external_reactive_index_js_namespaceObject.computed,effect:external_reactive_index_js_namespaceObject.effect,query:this.createQuery.bind(this),mutation:this.createMutation.bind(this),batch:external_reactive_index_js_namespaceObject.batch});let n=(0,index_js_namespaceObject.toObjectKeys)(this.state);for(let e of(this.stateKeys=n,this.reactiveUnits=n.filter(e=>(0,index_js_namespaceObject.isReactiveUnit)(this.state[e])||(0,index_js_namespaceObject.isMutation)(this.state[e])),this.prevState=this.getSnapshot(),this.cleanupAll=this.observeReactivity(),s))e(this.getStore()),e.pluginName===external_constants_js_namespaceObject.PERSIST_NAME&&(this.isPersist=!0);Promise.resolve().then(()=>{(0,external_devtools_connection_js_namespaceObject.initDevtoolsStore)(this.name,this.prevState)})}createQuery(e,t){return new external_reactive_index_js_namespaceObject.QueryHandler(e,t)}createMutation(e,t){return new external_reactive_index_js_namespaceObject.MutationHandler(e,t)}getSnapshot(){let e={};for(let t=0;t<this.stateKeys.length;t++){let s=this.stateKeys[t],r=this.state[s];e[s]=(0,index_js_namespaceObject.isReactiveUnit)(r)?r.value:r,(0,index_js_namespaceObject.isMutation)(r)&&(e[s]={...r.state,runSync:r.runSync,runAsync:r.runAsync,reset:r.reset})}return e}triggerWatchers(e,t){this.listeners.forEach(s=>s(e,t)),Promise.resolve().then(()=>(0,external_devtools_connection_js_namespaceObject.observeStore)(e,t,this.name))}isBatchScheduled=!1;observeReactivity(){let e=[],t=null,s=()=>{this.isBatchScheduled||(this.isBatchScheduled=!0,Promise.resolve().then(()=>{t&&(this.triggerWatchers(t,this.prevState),this.prevState=t,t=null),this.isBatchScheduled=!1}))};for(let r=0;r<this.reactiveUnits.length;r++){let n=this.reactiveUnits[r],i=this.state[n].subscribe(e=>{t||(t={...this.prevState}),(0,index_js_namespaceObject.isMutation)(this.state[n])?t[n]={...e||{},runSync:this.state[n].runSync,runAsync:this.state[n].runAsync,reset:this.state[n].reset}:t[n]=e,s()});e.push(i)}return()=>{for(let t=0;t<e.length;t++)e[t]()}}action(e){e(this.state)}subscribe(e){let t=this.listenerCounter++;return this.listeners.set(t,e),()=>{this.listeners.delete(t)}}cleanupAll(){this.listenerCounter=0,this.listeners.clear()}getStore(){return{state:this.state,getSnapshot:this.getSnapshot.bind(this),action:this.action.bind(this),subscribe:this.subscribe.bind(this),cleanupAll:this.cleanupAll.bind(this)}}}function getLazy(e){let t=null;return()=>(null===t&&(t=e()),t)}function defineStore(e,t){return new Store(e,t).getStore()}function defineLazyStore(e,t){let s;return getLazy(()=>t?.singleton?(s||(s=new Store(e,t).getStore()),s):new Store(e,t).getStore())}var __webpack_export_target__=exports;for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__]=__webpack_exports__[__webpack_i__];__webpack_exports__.__esModule&&Object.defineProperty(__webpack_export_target__,"__esModule",{value:!0});