UNPKG

@vegajs/vortex

Version:

🌀 A next-gen, lightweight state management library for JavaScript and TypeScript.

1 lines • 8.14 kB
"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__,{effect:()=>effect,query:()=>query,computed:()=>computed,QueryHandler:()=>QueryHandler,reactive:()=>reactive,batch:()=>batch,Effect:()=>Effect,Computed:()=>Computed,mutation:()=>mutation,MutationHandler:()=>MutationHandler,Reactive:()=>Reactive,deepReactive:()=>deepReactive});let external_alien_signals_namespaceObject=require("alien-signals"),index_js_namespaceObject=require("../../utils/index.js");class Effect{fn;stopFn;constructor(e){this.fn=e}run(){let e=(0,external_alien_signals_namespaceObject.getCurrentSub)();(0,external_alien_signals_namespaceObject.setCurrentSub)(this);try{return this.fn()}finally{(0,external_alien_signals_namespaceObject.setCurrentSub)(e)}}start(){return this.stopFn=(0,external_alien_signals_namespaceObject.effect)(()=>this.fn()),this.run()}stop(){this.stopFn&&(this.stopFn(),this.stopFn=void 0)}}class Reactive{currentValue;type;signal;setter;constructor(e){this.currentValue=e,this.type="$$reactive";let t=(0,external_alien_signals_namespaceObject.signal)(e);this.signal=t,this.setter=t}get value(){return this.signal()}set value(e){this.setter(e),this.currentValue=e}subscribe(e){return(0,external_alien_signals_namespaceObject.effect)(()=>e(this.value))}}class Computed{getter;type;computed;constructor(e){this.getter=e,this.type="$$computed",this.computed=(0,external_alien_signals_namespaceObject.computed)(this.getter)}get value(){return this.computed()}subscribe(e){return(0,external_alien_signals_namespaceObject.effect)(()=>e(this.value))}}let createInitial=()=>({isLoading:!1,isSuccess:!1,isError:!1,error:null,data:void 0,isIdle:!1});function isDataUpdater(e){return"function"==typeof e}class QueryHandler{asyncFn;options;type;#e;#t;pollingTimer;unifiedPromise;#s;#i;#r;constructor(e,t){this.asyncFn=e,this.options=t,this.type="$$query",this.#t=!0,this.pollingTimer=null,this.subscribe=e=>this.#r.subscribe(e),this.run=async e=>{if(this.unifiedPromise)return this.unifiedPromise;this.#e=e,this.setLoading();let t=()=>this.asyncFn(e),s=this.options?.retry?()=>(0,index_js_namespaceObject.retry)(t,this.options?.retry):t;return this.unifiedPromise=s().then(e=>(this.setSuccess(e),this.#i?.(e),this.unifiedPromise=void 0,e)).catch(e=>{throw this.setError(e),this.#s?.(e),this.unifiedPromise=void 0,this.options?.stopPollingOnError&&this.stopPolling(),e}),this.unifiedPromise},this.reset=()=>{this.#r.value=createInitial(),this.#e=void 0,this.unifiedPromise=void 0,this.stopPolling(),this.#t=!0},this.update=e=>{this.#r.value={...this.#r.value,data:isDataUpdater(e)?e(this.#r.value.data):e}},this.refetch=()=>this.run(this.#e),this.setLoading=()=>{this.#r.value={...this.#r.value,isLoading:!0,isSuccess:!1,isError:!1,error:null,isIdle:!0}},this.setSuccess=e=>{this.#r.value={...this.#r.value,isLoading:!1,isSuccess:!0,data:e}},this.setError=e=>{this.#r.value={...this.#r.value,data:this.options?.keepDataOnError?this.#r.value.data:void 0,isLoading:!1,isError:!0,error:e}},this.#r=new Reactive(createInitial()),this.#e=void 0,this.#s=this.options?.onError,this.#i=this.options?.onSuccess}get value(){return this.#t&&this.options?.isAutorun&&("function"!=typeof this.options.enable||this.options?.enable?.())&&(this.#t=!1,this.run(void 0)),this.#r.value}set value(e){this.#r.value=e}subscribe;run;reset;update;refetch;startPolling(e,t=!1){!this.pollingTimer&&(t&&this.refetch(),this.pollingTimer=setInterval(()=>{this.refetch()},e))}stopPolling(){this.pollingTimer&&(clearInterval(this.pollingTimer),this.pollingTimer=null)}setLoading;setSuccess;setError}let createMutationInitial=()=>({isLoading:!1,isSuccess:!1,isError:!1,error:null,isIdle:!1});class MutationHandler{asyncFn;options;type;#s;#i;#r;constructor(e,t){this.asyncFn=e,this.options=t,this.type="$$mutation",this.subscribe=e=>this.#r.subscribe(e),this.runSync=e=>{this.runAsync(e)},this.runAsync=async e=>{this.setLoading();try{let t=await this.asyncFn(e);return this.setSuccess(),this.#i?.(t,e),t}catch(t){this.setError(t),this.#s?.(t,e)}},this.reset=()=>{this.#r.value=createMutationInitial()},this.setLoading=()=>{this.#r.value={...this.#r.value,isLoading:!0,isSuccess:!1,isError:!1,error:null,isIdle:!0}},this.setSuccess=()=>{this.#r.value={...this.#r.value,isLoading:!1,isSuccess:!0}},this.setError=e=>{this.#r.value={...this.#r.value,isLoading:!1,isError:!0,error:e}},this.#r=new Reactive(createMutationInitial()),this.#s=this.options?.onError,this.#i=this.options?.onSuccess}get state(){return this.#r.value}get value(){return this.#r.value}subscribe;runSync;runAsync;reset;setLoading;setSuccess;setError}let arrayMethodsToPatch=["push","pop","shift","unshift","splice","sort","reverse"],updateArrayMethods=["push","unshift"],spliceArrayMethods="splice";class ReactiveArray{makeReactive;updateCallback;reactiveArray;constructor(e,t,s){this.makeReactive=t,this.updateCallback=s,this.reactiveArray=e.map(t),this.makeReactive=t,this.updateCallback=s}createReactive(){let e=this;return new Proxy(this.reactiveArray,{get(t,s,i){let r=Reflect.get(t,s,i);return"function"==typeof r&&arrayMethodsToPatch.includes(s)?(...i)=>{let a=r.apply(t,i);if(updateArrayMethods.includes(s))i.forEach((s,r)=>{t[t.length-i.length+r]=e.makeReactive(s)});else if("splice"===s&&i.length>2)for(let t=2;t<i.length;t++)i[t]=e.makeReactive(i[t]);return e.updateCallback(),a}:r},set(t,s,i,r){let a=Number(s),n=i;Number.isNaN(a)||(n=e.makeReactive(i));let c=Reflect.set(t,s,n,r);return e.updateCallback(),c},deleteProperty(t,s){let i=Reflect.deleteProperty(t,s);return e.updateCallback(),i}})}}class DeepReactive{type="$$reactive";reactive;reactiveCache=new WeakMap;constructor(e){this.reactive=new Reactive({inner:this.makeReactive(e)})}makeReactive(e){if(this.isPrimitive(e))return e;if(this.reactiveCache.has(e))return this.reactiveCache.get(e);let t=Array.isArray(e)?new ReactiveArray(e,this.makeReactive.bind(this),this.update.bind(this)).createReactive():this.defineReactiveObject(e);return this.reactiveCache.set(e,t),t}isPrimitive(e){return"object"!=typeof e||null===e}defineReactiveObject(e){let t=new Proxy(e,{set:(e,t,s)=>{let i=!(t in e);return e[t]=s,i&&this.makeReactiveProperty(e,t),this.update(),!0},deleteProperty:(e,t)=>(t in e&&(delete e[t],this.update()),!0)});return Object.keys(e).forEach(t=>this.makeReactiveProperty(e,t)),t}makeReactiveProperty(e,t){let s=this.makeReactive(e[t]);Object.defineProperty(e,t,{get:()=>s,set:e=>{e!==s&&(s=this.makeReactive(e))},configurable:!0,enumerable:!0})}update(){this.reactive.value={inner:this.reactive.value.inner}}get value(){return this.reactive.value.inner}set value(e){this.reactive.value={inner:this.makeReactive(e)}}subscribe(e){return this.reactive.subscribe(({inner:t})=>e(t))}}function computed(e){return new Computed(e)}function batch(e){(0,external_alien_signals_namespaceObject.startBatch)();try{e()}finally{(0,external_alien_signals_namespaceObject.endBatch)()}}function reactive(e){return new Reactive(e)}function effect(e){return(0,external_alien_signals_namespaceObject.effect)(e)}function deepReactive(e){return new DeepReactive(e)}function query(e,t){return new QueryHandler(e,t)}function mutation(e,t){return new MutationHandler(e,t)}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});