@harlem/core
Version:
Powerfully simple global state management for Vue 3
2 lines (1 loc) • 6.45 kB
JavaScript
;var K=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var ot=Object.getOwnPropertyNames;var st=Object.prototype.hasOwnProperty;var at=(e,c)=>{for(var u in c)K(e,u,{get:c[u],enumerable:!0})},it=(e,c,u,v)=>{if(c&&typeof c=="object"||typeof c=="function")for(let E of ot(c))!st.call(e,E)&&E!==u&&K(e,E,{get:()=>c[E],enumerable:!(v=nt(c,E))||v.enumerable});return e};var ct=e=>it(K({},"__esModule",{value:!0}),e);var Tt={};at(Tt,{EVENTS:()=>r,INTERNAL:()=>et,PRODUCERS:()=>U,createInstance:()=>Z,createStore:()=>pt,createVuePlugin:()=>ft,off:()=>lt,on:()=>ut,once:()=>dt});module.exports=ct(Tt);function Q(){let e=new Map;function c(l,d){let f=e.get(l)||new Set;return f.add(d),e.set(l,f),{dispose:()=>u(l,d)}}function u(l,d){let f=e.get(l);f&&(f.delete(d),f.size||e.delete(l))}function v(l,d){let f=h=>{d(h),u(l,f)};return c(l,f)}function E(l,d){let f=e.get(l);f&&f.forEach(h=>h(d))}return{on:c,off:u,once:v,emit:E}}var tt=require("@harlem/utilities"),m="core",r={core:{installed:"core:installed"},store:{created:"store:created",ready:"store:ready",destroyed:"store:destroyed"},mutation:{before:"mutation:before",after:"mutation:after",success:"mutation:success",error:"mutation:error"},action:{before:"action:before",after:"action:after",success:"action:success",error:"action:error"},ssr:{initServer:"ssr:init:server",initClient:"ssr:init:client"},devtools:{update:"devtools:update",reset:"devtools:reset"}},X={snapshot:"core:snapshot",reset:"core:reset"},U={read:e=>e,write:e=>e,payload:e=>(0,tt.objectClone)(e)},et={prefix:"$harlem:",pattern:/^\$harlem:/};var A=require("vue"),y=require("@harlem/utilities");function rt(e,c){return u=>{u&&u.store===e&&c(u)}}function Y(e,c,u,v){var _;let{allowsOverwrite:E,producers:l}={allowsOverwrite:!0,...v,producers:{...U,...v==null?void 0:v.producers}},d={},f=new Map,h=(0,A.effectScope)(),a=new Set,i=!1,T=(0,A.reactive)(c),w=(0,A.readonly)(T),P;function M(t,n,s){if(!h.active||i)return;let p={data:s,sender:n,store:e};u.emit(t,p)}function o(t,n){return u.on(t,rt(e,n))}function C(t,n){return u.once(t,rt(e,n))}function R(t){return h.run(t)}function k(t,n){var s;return!!((s=d[t])!=null&&s.has(n))}function F(t,n){var s;return(s=d[t])==null?void 0:s.get(n)}function H(t,n,s,p="other"){if(!n)throw new Error("Registration name cannot be empty");if(t in d||(d[t]=new Map),!E&&k(t,n))throw new Error(`A ${t} named ${n} has already been registered on this store`);d[t].set(n,{type:p,producer:s})}function G(t,n){var s;(s=d[t])==null||s.delete(n)}function V(t){i=!0;try{return t()}finally{i=!1}}function L(t,n){let s=R(()=>(0,A.computed)(()=>n(w)));return H("getters",t,()=>s.value,"computed"),s}function j(t,n,s,p){var x,I;if(!h.active)throw new Error("The current store has been destroyed. Mutations can no longer take place.");if(a.has(t))throw new Error("Circular mutation reference detected. Avoid calling mutations inside other mutations to prevent circular references.");a.add(t);let g,b=S=>M(S,n,{name:t,payload:p,result:g});b(r.mutation.before);try{let S=(x=l.write(T))!=null?x:T,J=(I=l.payload(p))!=null?I:p;g=s(S,J),b(r.mutation.success)}catch(S){throw b(r.mutation.error),S}finally{a.delete(t),b(r.mutation.after)}return g}function W(t,n){let s=p=>j(t,m,n,p);return H("mutations",t,()=>s),s}function z(t,n){let s=g=>N(t,m,g),p=async g=>{var I;let b,x=S=>M(S,m,{name:t,payload:g,result:b});x(r.action.before);try{let S=(I=l.payload(g))!=null?I:g;b=await n(S,s),x(r.action.success)}catch(S){throw x(r.action.error),S}finally{x(r.action.after)}return b};return H("actions",t,()=>p),p}function $(){let t=(0,y.objectClone)(c),{value:n,getNodes:s,resetNodes:p}=(0,y.objectTrace)();return{apply:(b=y.functionIdentity,x=X.snapshot)=>{N(x,m,I=>{if(!t)return console.warn("Couldn't find snapshot for this operation!");p(),b(n);let S=s(),J=(0,y.objectFromPath)(t,S);(0,y.objectSet)(I,S,(0,y.objectClone)(J))})},get state(){return(0,y.objectClone)(t)}}}function O(t=y.functionIdentity){P==null||P.apply(t,X.reset)}function N(t,n,s,p){let g=()=>j(t,n,s,void 0);return p?V(g):g()}function q(){h.stop()}C(r.store.ready,()=>P=$()),o(r.devtools.reset,()=>O());let D=(_=l.read(w))!=null?_:w;return{name:e,allowsOverwrite:E,flags:f,producers:l,registrations:d,on:o,once:C,emit:M,state:D,getter:L,mutation:W,action:z,write:N,snapshot:$,reset:O,register:H,unregister:G,hasRegistration:k,getRegistration:F,track:R,suppress:V,destroy:q}}var B=require("@harlem/utilities");function Z(){let e=Q(),c=new Map,u=!1;function v(a){let i=c.get(a);if(i&&!i.allowsOverwrite)throw new Error(`A store named ${a} has already been registered.`)}function E(a,i){let T=()=>{a.emit(r.ssr.initClient,m,i),a.emit(r.store.created,m,i),a.emit(r.ssr.initServer,m,i),a.emit(r.store.ready,m,i),a.emit(r.devtools.update,m,i)};if(u)return T();e.once(r.core.installed,T)}function l(a,i){return i.reduce((T,w)=>{let P={};try{P=w(a)||{}}catch(M){P={}}return{...T,...P}},{})}function d(a,i){if(!(0,B.typeIsFunction)(a))return;let T=(0,B.objectLock)(c,["set","delete","clear"]);try{a(i,e,T)}catch(w){console.warn("Failed to install Harlem plugin. Skipping.")}}function f(a,i,T){let{allowsOverwrite:w,producers:P,extensions:M}={allowsOverwrite:!0,extensions:[],...T};v(a);let o=Y(a,i,e,{allowsOverwrite:w,producers:P}),C=()=>{c.delete(a),o.destroy(),o.emit(r.store.destroyed,m,i),o.emit(r.devtools.update,m,i)},R=$=>(O,N)=>{let q=(0,B.matchGetFilter)((0,B.typeIsMatchable)(O)?O:{include:O});return o.on($,D=>{D&&q(D.data.name)&&N(D.data)})},k=R(r.mutation.before),F=R(r.mutation.after),H=R(r.mutation.success),G=R(r.mutation.error),V=R(r.action.before),L=R(r.action.after),j=R(r.action.success),W=R(r.action.error),z=l(o,M);return c.set(a,o),E(o,i),{destroy:C,onBeforeMutation:k,onAfterMutation:F,onMutationSuccess:H,onMutationError:G,onBeforeAction:V,onAfterAction:L,onActionSuccess:j,onActionError:W,state:o.state,getter:o.getter.bind(o),mutation:o.mutation.bind(o),action:o.action.bind(o),snapshot:o.snapshot.bind(o),reset:o.reset.bind(o),suppress:o.suppress.bind(o),on:o.on.bind(o),once:o.once.bind(o),...z}}function h(a){return{install(i){let{plugins:T}={plugins:[],...a};T&&T.forEach(w=>d(w,i)),u=!0,e.emit(r.core.installed)}}}return{createVuePlugin:h,createStore:f,on:e.on,once:e.once,off:e.off}}var{on:ut,off:lt,once:dt,createVuePlugin:ft,createStore:pt}=Z();typeof window!="undefined"&&(window.$harlem={createInstance:Z});0&&(module.exports={EVENTS,INTERNAL,PRODUCERS,createInstance,createStore,createVuePlugin,off,on,once});