react-hooks-global-states 16.0.1 → 16.0.2

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 (46) hide show
  1. package/GlobalStore.cjs +1 -0
  2. package/GlobalStore.d.ts +160 -0
  3. package/GlobalStore.debugProps.cjs +1 -0
  4. package/GlobalStore.debugProps.d.ts +5 -0
  5. package/GlobalStore.debugProps.js +1 -0
  6. package/GlobalStore.debugProps.mjs +1 -0
  7. package/GlobalStore.js +1 -0
  8. package/GlobalStore.mjs +1 -0
  9. package/actions.cjs +1 -0
  10. package/actions.d.ts +32 -0
  11. package/actions.js +1 -0
  12. package/actions.mjs +1 -0
  13. package/bundle.cjs +1 -0
  14. package/bundle.js +1 -0
  15. package/bundle.mjs +1 -0
  16. package/createContext.cjs +1 -0
  17. package/createContext.d.ts +15 -0
  18. package/createContext.js +1 -0
  19. package/createContext.mjs +1 -0
  20. package/createGlobalState.cjs +1 -0
  21. package/createGlobalState.d.ts +7 -0
  22. package/createGlobalState.js +1 -0
  23. package/createGlobalState.mjs +1 -0
  24. package/index.d.ts +9 -0
  25. package/isRecord.cjs +1 -0
  26. package/isRecord.d.ts +2 -0
  27. package/isRecord.js +1 -0
  28. package/isRecord.mjs +1 -0
  29. package/package.json +1 -51
  30. package/shallowCompare.cjs +1 -0
  31. package/shallowCompare.d.ts +52 -0
  32. package/shallowCompare.js +1 -0
  33. package/shallowCompare.mjs +1 -0
  34. package/throwWrongKeyOnActionCollectionConfig.cjs +12 -0
  35. package/throwWrongKeyOnActionCollectionConfig.d.ts +2 -0
  36. package/throwWrongKeyOnActionCollectionConfig.js +12 -0
  37. package/throwWrongKeyOnActionCollectionConfig.mjs +12 -0
  38. package/types.cjs +1 -0
  39. package/types.d.ts +1268 -0
  40. package/types.js +1 -0
  41. package/types.mjs +0 -0
  42. package/uniqueId.cjs +1 -0
  43. package/uniqueId.d.ts +7 -0
  44. package/uniqueId.js +1 -0
  45. package/uniqueId.mjs +1 -0
  46. package/jest.config.js +0 -50
@@ -0,0 +1 @@
1
+ "use strict";var V=Object.create;var m=Object.defineProperty,W=Object.defineProperties,B=Object.getOwnPropertyDescriptor,I=Object.getOwnPropertyDescriptors,L=Object.getOwnPropertyNames,w=Object.getOwnPropertySymbols,G=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable;var F=(i,t,e)=>t in i?m(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,k=(i,t)=>{for(var e in t||(t={}))E.call(t,e)&&F(i,e,t[e]);if(w)for(var e of w(t))z.call(t,e)&&F(i,e,t[e]);return i},x=(i,t)=>W(i,I(t));var D=(i,t)=>{for(var e in t)m(i,e,{get:t[e],enumerable:!0})},H=(i,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of L(t))!E.call(i,s)&&s!==e&&m(i,s,{get:()=>t[s],enumerable:!(a=B(t,s))||a.enumerable});return i};var g=(i,t,e)=>(e=i!=null?V(G(i)):{},H(t||!i||!i.__esModule?m(e,"default",{value:i,enumerable:!0}):e,i)),K=i=>H(m({},"__esModule",{value:!0}),i);var $={};D($,{GlobalStore:()=>M,createObservable:()=>y,createSelectorHook:()=>R,default:()=>N});module.exports=K($);var f=require("react"),p=g(require("json-storage-formatter/isFunction")),_=g(require("./isRecord.cjs")),A=g(require("./shallowCompare.cjs")),U=g(require("./throwWrongKeyOnActionCollectionConfig.cjs")),v=g(require("./uniqueId.cjs")),O=g(require("./GlobalStore.debugProps.cjs"));var M=class i{constructor(t,e={metadata:{}}){this.cleanupFunctions=[];this.actionsConfig=null;this.callbacks=null;this.actions=null;this.subscribers=new Set;this.createSelectorHook=R;this.createObservable=y;var l,o,u;let{metadata:a,callbacks:s,actions:c,name:r}=e;if((0,p.default)(t)&&(this.stateCallback=t),(0,p.default)(a)&&(this.metadataCallback=a),this._name=r!=null?r:(0,v.default)("gs:"),this.state=this.stateCallback?this.stateCallback():t,this.metadata=this.metadataCallback?this.metadataCallback():a!=null?a:{},this.callbacks=s!=null?s:null,this.actionsConfig=c!=null?c:null,O.default.isDevToolsPresent){let b=(l=new Error().stack)!=null?l:"";(u=(o=O.default).REACT_GLOBAL_STATE_HOOK_DEBUG)==null||u.call(o,this,e,b)}this.constructor===i&&this.initialize()}async initialize(){var l,o,u,b,d,S,h,C;let t=(o=(l=this.__devtools_initialize_getStoreActionsMapWrapped)==null?void 0:l.call(this))!=null?o:this.getStoreActionsMap(),{actions:e,storeTools:a}=t;this.actions=e,this.storeTools=a,this.use=this.getMainHook();let s=(b=(u=this.onInit)==null?void 0:u.call(this))!=null?b:null;(0,p.default)(s)&&this.cleanupFunctions.push(s);let{onInit:c}=(d=this.callbacks)!=null?d:{};if(!c)return;let r=(h=(S=this.__devtools_getLifeCycleStoreToolsWrapper)==null?void 0:S.call(this,"config/onInit/"))!=null?h:a,n=(C=c==null?void 0:c(r))!=null?C:null;(0,p.default)(n)&&this.cleanupFunctions.push(n)}executeSetStateForSubscriber(t,e){let{selector:a,onStoreChange:s,currentState:c,isEqualRoot:r=(o,u)=>o===u,isEqual:n=(o,u)=>o===u}=t;if(!e.forceUpdate&&r(e.currentState,e.newState))return{didUpdate:!1};let l=a?a(e.newState):e.newState;return!e.forceUpdate&&n(c,l)?{didUpdate:!1}:(this.partialUpdateSubscription(t,{currentState:l}),s({state:l},{identifier:e.identifier}),{didUpdate:!0})}setActualStateWithoutValidations(t,{forceUpdate:e,identifier:a}){let s=this.state;if(!(e||s!==t))return;this.state=t;let r=this.subscribers.values(),n={forceUpdate:e,newState:t,currentState:s,identifier:a};for(let l of r)this.executeSetStateForSubscriber(l,n)}setMetadata(t){let e=(0,p.default)(t)?t(this.metadata):t;this.metadata=e}getMetadata(){return this.metadata}getState(){return this.state}subscribe(...[t,e,a]){var u;let s=(0,p.default)(e),c=s?t:void 0,r=s?e:t,n=(u=s?a:e)!=null?u:void 0,l=c?c(this.state):this.state;n!=null&&n.skipFirst||r(l);let o=k({selector:c,currentState:l,onStoreChange:({state:b})=>r(b)},n);return this.subscribeCallback(o),()=>{this.subscribers.delete(o)}}subscribeCallback(t){var e,a;return(a=(e=this.callbacks)==null?void 0:e.onSubscribed)==null||a.call(e,this.storeTools,t),this.subscribers.add(t),()=>{this.subscribers.delete(t)}}partialUpdateSubscription(t,e){Object.assign(t,e)}getMainHook(){let t=`globalHook:${this._name}`,e=(r,n=[])=>{(0,f.useDebugValue)(t);let l=(0,A.isArray)(n)?{dependencies:n}:n!=null?n:{},o=(0,f.useRef)(null),u=P=>(0,p.default)(r)?r(P):P;o.current=o.current?o.current:k({selector:u,currentState:u(this.state),onStoreChange:()=>{throw new Error("Callback not set")}},l);let b=o.current.dependencies,d=l==null?void 0:l.dependencies,S=x(k({},l),{selector:u,dependencies:d});this.partialUpdateSubscription(o.current,S);let{subscribe:h,getSnapshot:C,getServerSnapshot:q}=(0,f.useMemo)(()=>{let P=j=>(o.current.onStoreChange=j,this.subscribeCallback(o.current)),T=()=>o.current.currentState;return{subscribe:P,getSnapshot:T,getServerSnapshot:T}},[]);return this.reselectIfDependenciesChanged({subscription:o.current,newDependencies:d,currentDependencies:b}),[(0,f.useSyncExternalStore)(h,C,q),this.getStateOrchestrator(),this.metadata]},a=this,s=this.getMetadata.bind(this),c={actions:this.actions,createObservable:this.createObservable.bind(a),createSelectorHook:this.createSelectorHook.bind(a),dispose:this.dispose.bind(this),metadata:void 0,getMetadata:s,getState:this.getState.bind(this),reset:this.reset.bind(this),setMetadata:this.setMetadata.bind(this),setState:this.setState.bind(this),subscribe:this.subscribe.bind(this),subscribers:this.subscribers,use:e,select:(...r)=>e(...r)[0]};return Object.assign(e,c),Object.defineProperty(e,"metadata",{configurable:!0,enumerable:!0,get:s}),e}reselectIfDependenciesChanged({subscription:t,newDependencies:e,currentDependencies:a}){!t.selector||a===e||(a==null?void 0:a.length)===(e==null?void 0:e.length)&&(0,A.default)(a,e)||this.partialUpdateSubscription(t,{currentState:t.selector(this.state)})}getStateOrchestrator(){return this.actions?this.actions:this.setState.bind(this)}setState(t,{forceUpdate:e,identifier:a}={}){var o,u,b,d,S,h;let s=this.state,c=(0,p.default)(t)?t(s):t;if(!e&&this.state===c)return;let r=this.setActualStateWithoutValidations,n={previousState:s,state:c,identifier:a},l=x(k(k({},this.storeTools),n),{setState:r});Object.defineProperty(l,"metadata",{configurable:!0,enumerable:!0,get:l.getMetadata}),!((o=this.callbacks)!=null&&o.computePreventStateChange&&((b=(u=this.callbacks)==null?void 0:u.computePreventStateChange)!=null&&b.call(u,l)))&&(this.setActualStateWithoutValidations(c,{forceUpdate:e,identifier:a}),(d=this.onStateChanged)==null||d.call(this,l),(h=(S=this.callbacks)==null?void 0:S.onStateChanged)==null||h.call(S,l))}getStoreActionsMap(){let t=this.getMetadata.bind(this),e={setMetadata:this.setMetadata.bind(this),get metadata(){return t()},getMetadata:t,getState:this.getState.bind(this),setState:this.setState.bind(this),subscribe:this.subscribe.bind(this),actions:null};if(!(0,_.default)(this.actionsConfig))return{actions:null,storeTools:e};let a=this.actionsConfig,s={};e.actions=s;let c=Object.keys(a);for(let r of c)Object.assign(s,{[r](...n){let o=a[r].apply(s,n);return typeof o!="function"&&(0,U.default)(r),o.call(s,e)}});return{actions:s,storeTools:e}}removeSubscriptions(){this.subscribers.clear()}executeCleanupTasks(){this.cleanupFunctions.forEach(t=>{t==null||t()}),this.cleanupFunctions.length=0}dispose(){this.removeSubscriptions(),this.executeCleanupTasks()}reset(...t){var o,u,b,d,S,h;this.executeCleanupTasks();let e=t.length>0,a=e?t[0]:this.stateCallback?this.stateCallback():this.state,s=e?t[1]:this.metadataCallback?this.metadataCallback():this.metadata;this.setActualStateWithoutValidations(a,{forceUpdate:!0}),this.setMetadata(s);let c=(u=(o=this.onInit)==null?void 0:o.call(this))!=null?u:null;(0,p.default)(c)&&this.cleanupFunctions.push(c);let{onInit:r}=(b=this.callbacks)!=null?b:{};if(!r)return;let n=(S=(d=this.__devtools_getLifeCycleStoreToolsWrapper)==null?void 0:d.call(this,"config/onInit/"))!=null?S:this.storeTools,l=(h=r==null?void 0:r(n))!=null?h:null;(0,p.default)(l)&&this.cleanupFunctions.push(l)}};function y(i,t){let e=t==null?void 0:t.name,a=t==null?void 0:t.isEqualRoot,s=t==null?void 0:t.isEqual,c=this.getState(),r=(i!=null?i:b=>b)(c),n=new M(r,{name:e!=null?e:(0,v.default)("sh:")}),l=this.subscribe(b=>{if((a!=null?a:Object.is)(c,b))return;c=b;let S=i(b);(s!=null?s:Object.is)(r,S)||(r=S,n.setState(S))},{skipFirst:!0}),o=n.subscribe.bind(n),u={getState:n.getState.bind(n),subscribe:n.subscribe.bind(n),createSelectorHook:R.bind(o),createObservable:y.bind(o),dispose:()=>{l(),n.dispose()},subscribers:n.subscribers};return Object.assign(o,u),o}function R(i,t){let e=t==null?void 0:t.name,a=t==null?void 0:t.isEqualRoot,s=t==null?void 0:t.isEqual,c=this.getState(),r=(i!=null?i:b=>b)(c),n=new M(r,{name:e!=null?e:(0,v.default)("sh:")}),l=this.subscribe(b=>{if((a!=null?a:Object.is)(c,b))return;c=b;let S=i(b);(s!=null?s:Object.is)(r,S)||(r=S,n.setState(S))},{skipFirst:!0}),o=(...b)=>{let[d]=n.use(...b);return d},u={getState:()=>n.getState(),subscribe:n.subscribe.bind(n),createSelectorHook:R.bind(o),createObservable:y.bind(o),dispose:()=>{l(),n.dispose()},subscribers:n.subscribers};return Object.assign(o,u),o}var N=M;
@@ -0,0 +1,160 @@
1
+ import type { ActionCollectionConfig, GlobalStoreCallbacks, ActionCollectionResult, MetadataSetter, SubscribeCallbackConfig, SubscribeCallback, SelectorCallback, SubscriberParameters, StateHook, BaseMetadata, StateChanges, StoreTools, ObservableFragment, UnsubscribeCallback, AnyFunction, ReadonlyHook, ReadonlyStateApi, CleanupFunction } from './types';
2
+ /**
3
+ * The GlobalStore class is the main class of the library and it is used to create a GlobalStore instances
4
+ * */
5
+ export declare class GlobalStore<State, Metadata extends BaseMetadata, ActionsConfig extends ActionCollectionConfig<State, Metadata> | undefined | unknown, PublicStateMutator = keyof ActionsConfig extends never | undefined ? React.Dispatch<React.SetStateAction<State>> : ActionCollectionResult<State, Metadata, NonNullable<ActionsConfig>>> {
6
+ protected cleanupFunctions: CleanupFunction[];
7
+ protected _name: string;
8
+ actionsConfig: ActionsConfig | null;
9
+ callbacks: GlobalStoreCallbacks<State, PublicStateMutator, Metadata> | null;
10
+ metadata: Metadata;
11
+ /**
12
+ * @description If the actionsConfig is defined, this will be a map of actions that can be used to modify or interact with the state
13
+ * */
14
+ actions: PublicStateMutator extends AnyFunction ? null : PublicStateMutator;
15
+ storeTools: StoreTools<State, PublicStateMutator, Metadata>;
16
+ /**
17
+ * @description The main hook that will be used to interact with the global state
18
+ */
19
+ use: StateHook<State, PublicStateMutator, Metadata>;
20
+ /**
21
+ * @deprecated
22
+ * @description Set of subscribers that are listening to state changes
23
+ * Useful for debugging purposes... You'll probably not need to use this in your application
24
+ */
25
+ subscribers: Set<SubscriberParameters>;
26
+ state: State;
27
+ protected stateCallback?: () => State;
28
+ protected metadataCallback?: () => Metadata;
29
+ constructor(state: State | (() => State));
30
+ constructor(state: State | (() => State), args: {
31
+ metadata?: Metadata | (() => Metadata);
32
+ callbacks?: GlobalStoreCallbacks<State, PublicStateMutator, Metadata>;
33
+ actions?: ActionsConfig;
34
+ name?: string;
35
+ });
36
+ /**
37
+ * This method is meant to be overridden by the extended classes
38
+ */
39
+ protected onInit?: () => void | CleanupFunction;
40
+ /**
41
+ * This method is meant to be overridden by the extended classes
42
+ */
43
+ protected onStateChanged?: (args: StateChanges<State>) => void;
44
+ /**
45
+ * @description
46
+ * Initializes the global store, setting up the main hook and actions map if applicable,
47
+ */
48
+ protected initialize(): Promise<void>;
49
+ /**
50
+ * set the state for a single subscriber
51
+ * validate if the state should be updated by comparing the previous state and the new state
52
+ */
53
+ protected executeSetStateForSubscriber(subscription: SubscriberParameters, args: {
54
+ forceUpdate: boolean | undefined;
55
+ newState: State;
56
+ currentState: State;
57
+ identifier: string | undefined;
58
+ }): {
59
+ didUpdate: boolean;
60
+ };
61
+ /**
62
+ * set the state and update all the subscribers
63
+ * @param {State} newState - The new state to set
64
+ * @param {object} options - The options for setting the state
65
+ * @param {boolean} [options.forceUpdate] - Whether to force the update even if the state is the same
66
+ * @param {string} [options.identifier] - An optional identifier for the state change
67
+ * */
68
+ setActualStateWithoutValidations(newState: State, { forceUpdate, identifier }: {
69
+ forceUpdate?: boolean;
70
+ identifier?: string;
71
+ }): void;
72
+ /**
73
+ * Set the value of the metadata property, this is no reactive and will not trigger a re-render
74
+ * @param {MetadataSetter<Metadata>} setter - The setter function or the value to set
75
+ * */
76
+ setMetadata(setter: Parameters<MetadataSetter<Metadata>>[0]): void;
77
+ /**
78
+ * Returns the metadata [non-reactive additional information associated with the global state]
79
+ */
80
+ getMetadata(): Metadata;
81
+ /**
82
+ * Get the current value of the state
83
+ */
84
+ getState(): State;
85
+ /**
86
+ * Subscribe an individual callback to state changes
87
+ */
88
+ subscribe<TDerivate>(...[param1, param2, param3]: [
89
+ SubscribeCallback<State> | SelectorCallback<State, TDerivate>,
90
+ (SubscribeCallbackConfig<State> | SubscribeCallback<TDerivate>)?,
91
+ SubscribeCallbackConfig<State | TDerivate>?
92
+ ]): UnsubscribeCallback;
93
+ /**
94
+ * Adds a subscription object to the subscribers set and returns the unsubscribe function
95
+ */
96
+ protected subscribeCallback(subscription: SubscriberParameters): () => void;
97
+ partialUpdateSubscription(subscription: SubscriberParameters, values: Partial<SubscriberParameters>): void;
98
+ /**
99
+ * Returns a custom hook that allows to handle a global state
100
+ * @returns {[State, StateMutator, Metadata]} - The state, the state setter or the actions map, the metadata
101
+ * */
102
+ getMainHook(): StateHook<State, PublicStateMutator, Metadata>;
103
+ protected reselectIfDependenciesChanged({ subscription, newDependencies, currentDependencies, }: {
104
+ subscription: SubscriberParameters;
105
+ newDependencies: unknown[] | undefined;
106
+ currentDependencies: unknown[] | undefined;
107
+ }): void;
108
+ createSelectorHook: typeof createSelectorHook;
109
+ createObservable: typeof createObservable;
110
+ /**
111
+ * Returns the state setter or the actions map
112
+ * @returns {StateMutator} - The state setter or the actions map
113
+ * */
114
+ protected getStateOrchestrator(): PublicStateMutator;
115
+ /**
116
+ * This is the only setState function that should be exposed outside the class
117
+ * This is responsible for defining whenever or not the state change should be allowed or prevented
118
+ * the function also execute the functions:
119
+ * - onStateChanged (if defined) - this function is executed after the state change
120
+ * - computePreventStateChange (if defined) - this function is executed before the state change and it should return a boolean value that will be used to determine if the state change should be prevented or not
121
+ */
122
+ setState(setter: Parameters<React.Dispatch<React.SetStateAction<State>>>[0], { forceUpdate, identifier, }?: {
123
+ forceUpdate?: boolean;
124
+ identifier?: string;
125
+ }): void;
126
+ /**
127
+ * This creates storeTools and actions map if applicable
128
+ * */
129
+ getStoreActionsMap(): {
130
+ actions: PublicStateMutator extends AnyFunction ? null : PublicStateMutator;
131
+ storeTools: StoreTools<State, PublicStateMutator, Metadata>;
132
+ };
133
+ protected removeSubscriptions(): void;
134
+ protected executeCleanupTasks(): void;
135
+ dispose(): void;
136
+ reset(): void;
137
+ reset(state: State, metadata: Metadata): void;
138
+ __devtools_getLifeCycleStoreToolsWrapper?: (logsPrefix: string) => StoreTools<State, PublicStateMutator, Metadata>;
139
+ __devtools_initialize_getStoreActionsMapWrapped?: () => {
140
+ actions: PublicStateMutator extends AnyFunction ? null : PublicStateMutator;
141
+ storeTools: StoreTools<State, PublicStateMutator, Metadata>;
142
+ };
143
+ }
144
+ export declare function createObservable<RootState, PublicStateMutator, Metadata extends BaseMetadata, Selected>(this: Pick<ReadonlyStateApi<RootState, PublicStateMutator, Metadata>, 'getState' | 'subscribe'>, selector: (state: RootState) => Selected, options?: {
145
+ isEqual?: (current: Selected, next: Selected) => boolean;
146
+ isEqualRoot?: (current: RootState, next: RootState) => boolean;
147
+ name?: string;
148
+ }): ObservableFragment<Selected, PublicStateMutator, Metadata>;
149
+ /**
150
+ * @description
151
+ * Creates a derived hook bound to a selected fragment of the root state.
152
+ * The derived hook re-renders only when the selected value changes and
153
+ * exposes the same API as the parent state hook.
154
+ */
155
+ export declare function createSelectorHook<RootState, PublicStateMutator, Metadata extends BaseMetadata, Selected>(this: Pick<ReadonlyStateApi<RootState, PublicStateMutator, Metadata>, 'getState' | 'subscribe'>, selector: (state: RootState) => Selected, options?: {
156
+ isEqual?: (current: Selected, next: Selected) => boolean;
157
+ isEqualRoot?: (current: RootState, next: RootState) => boolean;
158
+ name?: string;
159
+ }): ReadonlyHook<Selected, PublicStateMutator, Metadata>;
160
+ export default GlobalStore;
@@ -0,0 +1 @@
1
+ "use strict";var T=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var t=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var r=(e,o)=>{for(var n in o)T(e,n,{get:o[n],enumerable:!0})},A=(e,o,n,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let s of t(o))!_.call(e,s)&&s!==n&&T(e,s,{get:()=>o[s],enumerable:!(i=l(o,s))||i.enumerable});return e};var E=e=>A(T({},"__esModule",{value:!0}),e);var d={};r(d,{default:()=>O});module.exports=E(d);var a=globalThis;a.isDevToolsPresent=!!a.REACT_GLOBAL_STATE_HOOK_DEBUG;var O=a;
@@ -0,0 +1,5 @@
1
+ declare const debugProps: typeof globalThis & {
2
+ REACT_GLOBAL_STATE_HOOK_DEBUG?: ($this: unknown, args: undefined | {}, invokerStackHash: string) => void;
3
+ isDevToolsPresent: boolean;
4
+ };
5
+ export default debugProps;
@@ -0,0 +1 @@
1
+ "use strict";var T=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var t=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var r=(e,o)=>{for(var n in o)T(e,n,{get:o[n],enumerable:!0})},A=(e,o,n,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let s of t(o))!_.call(e,s)&&s!==n&&T(e,s,{get:()=>o[s],enumerable:!(i=l(o,s))||i.enumerable});return e};var E=e=>A(T({},"__esModule",{value:!0}),e);var d={};r(d,{default:()=>O});module.exports=E(d);var a=globalThis;a.isDevToolsPresent=!!a.REACT_GLOBAL_STATE_HOOK_DEBUG;var O=a;
@@ -0,0 +1 @@
1
+ var o=globalThis;o.isDevToolsPresent=!!o.REACT_GLOBAL_STATE_HOOK_DEBUG;var e=o;export{e as default};
package/GlobalStore.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var V=Object.create;var m=Object.defineProperty,W=Object.defineProperties,B=Object.getOwnPropertyDescriptor,I=Object.getOwnPropertyDescriptors,L=Object.getOwnPropertyNames,w=Object.getOwnPropertySymbols,G=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable;var F=(i,t,e)=>t in i?m(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,k=(i,t)=>{for(var e in t||(t={}))E.call(t,e)&&F(i,e,t[e]);if(w)for(var e of w(t))z.call(t,e)&&F(i,e,t[e]);return i},x=(i,t)=>W(i,I(t));var D=(i,t)=>{for(var e in t)m(i,e,{get:t[e],enumerable:!0})},H=(i,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of L(t))!E.call(i,s)&&s!==e&&m(i,s,{get:()=>t[s],enumerable:!(a=B(t,s))||a.enumerable});return i};var g=(i,t,e)=>(e=i!=null?V(G(i)):{},H(t||!i||!i.__esModule?m(e,"default",{value:i,enumerable:!0}):e,i)),K=i=>H(m({},"__esModule",{value:!0}),i);var $={};D($,{GlobalStore:()=>M,createObservable:()=>y,createSelectorHook:()=>R,default:()=>N});module.exports=K($);var f=require("react"),p=g(require("json-storage-formatter/isFunction")),_=g(require("./isRecord.js")),A=g(require("./shallowCompare.js")),U=g(require("./throwWrongKeyOnActionCollectionConfig.js")),v=g(require("./uniqueId.js")),O=g(require("./GlobalStore.debugProps.js"));var M=class i{constructor(t,e={metadata:{}}){this.cleanupFunctions=[];this.actionsConfig=null;this.callbacks=null;this.actions=null;this.subscribers=new Set;this.createSelectorHook=R;this.createObservable=y;var l,o,u;let{metadata:a,callbacks:s,actions:c,name:r}=e;if((0,p.default)(t)&&(this.stateCallback=t),(0,p.default)(a)&&(this.metadataCallback=a),this._name=r!=null?r:(0,v.default)("gs:"),this.state=this.stateCallback?this.stateCallback():t,this.metadata=this.metadataCallback?this.metadataCallback():a!=null?a:{},this.callbacks=s!=null?s:null,this.actionsConfig=c!=null?c:null,O.default.isDevToolsPresent){let b=(l=new Error().stack)!=null?l:"";(u=(o=O.default).REACT_GLOBAL_STATE_HOOK_DEBUG)==null||u.call(o,this,e,b)}this.constructor===i&&this.initialize()}async initialize(){var l,o,u,b,d,S,h,C;let t=(o=(l=this.__devtools_initialize_getStoreActionsMapWrapped)==null?void 0:l.call(this))!=null?o:this.getStoreActionsMap(),{actions:e,storeTools:a}=t;this.actions=e,this.storeTools=a,this.use=this.getMainHook();let s=(b=(u=this.onInit)==null?void 0:u.call(this))!=null?b:null;(0,p.default)(s)&&this.cleanupFunctions.push(s);let{onInit:c}=(d=this.callbacks)!=null?d:{};if(!c)return;let r=(h=(S=this.__devtools_getLifeCycleStoreToolsWrapper)==null?void 0:S.call(this,"config/onInit/"))!=null?h:a,n=(C=c==null?void 0:c(r))!=null?C:null;(0,p.default)(n)&&this.cleanupFunctions.push(n)}executeSetStateForSubscriber(t,e){let{selector:a,onStoreChange:s,currentState:c,isEqualRoot:r=(o,u)=>o===u,isEqual:n=(o,u)=>o===u}=t;if(!e.forceUpdate&&r(e.currentState,e.newState))return{didUpdate:!1};let l=a?a(e.newState):e.newState;return!e.forceUpdate&&n(c,l)?{didUpdate:!1}:(this.partialUpdateSubscription(t,{currentState:l}),s({state:l},{identifier:e.identifier}),{didUpdate:!0})}setActualStateWithoutValidations(t,{forceUpdate:e,identifier:a}){let s=this.state;if(!(e||s!==t))return;this.state=t;let r=this.subscribers.values(),n={forceUpdate:e,newState:t,currentState:s,identifier:a};for(let l of r)this.executeSetStateForSubscriber(l,n)}setMetadata(t){let e=(0,p.default)(t)?t(this.metadata):t;this.metadata=e}getMetadata(){return this.metadata}getState(){return this.state}subscribe(...[t,e,a]){var u;let s=(0,p.default)(e),c=s?t:void 0,r=s?e:t,n=(u=s?a:e)!=null?u:void 0,l=c?c(this.state):this.state;n!=null&&n.skipFirst||r(l);let o=k({selector:c,currentState:l,onStoreChange:({state:b})=>r(b)},n);return this.subscribeCallback(o),()=>{this.subscribers.delete(o)}}subscribeCallback(t){var e,a;return(a=(e=this.callbacks)==null?void 0:e.onSubscribed)==null||a.call(e,this.storeTools,t),this.subscribers.add(t),()=>{this.subscribers.delete(t)}}partialUpdateSubscription(t,e){Object.assign(t,e)}getMainHook(){let t=`globalHook:${this._name}`,e=(r,n=[])=>{(0,f.useDebugValue)(t);let l=(0,A.isArray)(n)?{dependencies:n}:n!=null?n:{},o=(0,f.useRef)(null),u=P=>(0,p.default)(r)?r(P):P;o.current=o.current?o.current:k({selector:u,currentState:u(this.state),onStoreChange:()=>{throw new Error("Callback not set")}},l);let b=o.current.dependencies,d=l==null?void 0:l.dependencies,S=x(k({},l),{selector:u,dependencies:d});this.partialUpdateSubscription(o.current,S);let{subscribe:h,getSnapshot:C,getServerSnapshot:q}=(0,f.useMemo)(()=>{let P=j=>(o.current.onStoreChange=j,this.subscribeCallback(o.current)),T=()=>o.current.currentState;return{subscribe:P,getSnapshot:T,getServerSnapshot:T}},[]);return this.reselectIfDependenciesChanged({subscription:o.current,newDependencies:d,currentDependencies:b}),[(0,f.useSyncExternalStore)(h,C,q),this.getStateOrchestrator(),this.metadata]},a=this,s=this.getMetadata.bind(this),c={actions:this.actions,createObservable:this.createObservable.bind(a),createSelectorHook:this.createSelectorHook.bind(a),dispose:this.dispose.bind(this),metadata:void 0,getMetadata:s,getState:this.getState.bind(this),reset:this.reset.bind(this),setMetadata:this.setMetadata.bind(this),setState:this.setState.bind(this),subscribe:this.subscribe.bind(this),subscribers:this.subscribers,use:e,select:(...r)=>e(...r)[0]};return Object.assign(e,c),Object.defineProperty(e,"metadata",{configurable:!0,enumerable:!0,get:s}),e}reselectIfDependenciesChanged({subscription:t,newDependencies:e,currentDependencies:a}){!t.selector||a===e||(a==null?void 0:a.length)===(e==null?void 0:e.length)&&(0,A.default)(a,e)||this.partialUpdateSubscription(t,{currentState:t.selector(this.state)})}getStateOrchestrator(){return this.actions?this.actions:this.setState.bind(this)}setState(t,{forceUpdate:e,identifier:a}={}){var o,u,b,d,S,h;let s=this.state,c=(0,p.default)(t)?t(s):t;if(!e&&this.state===c)return;let r=this.setActualStateWithoutValidations,n={previousState:s,state:c,identifier:a},l=x(k(k({},this.storeTools),n),{setState:r});Object.defineProperty(l,"metadata",{configurable:!0,enumerable:!0,get:l.getMetadata}),!((o=this.callbacks)!=null&&o.computePreventStateChange&&((b=(u=this.callbacks)==null?void 0:u.computePreventStateChange)!=null&&b.call(u,l)))&&(this.setActualStateWithoutValidations(c,{forceUpdate:e,identifier:a}),(d=this.onStateChanged)==null||d.call(this,l),(h=(S=this.callbacks)==null?void 0:S.onStateChanged)==null||h.call(S,l))}getStoreActionsMap(){let t=this.getMetadata.bind(this),e={setMetadata:this.setMetadata.bind(this),get metadata(){return t()},getMetadata:t,getState:this.getState.bind(this),setState:this.setState.bind(this),subscribe:this.subscribe.bind(this),actions:null};if(!(0,_.default)(this.actionsConfig))return{actions:null,storeTools:e};let a=this.actionsConfig,s={};e.actions=s;let c=Object.keys(a);for(let r of c)Object.assign(s,{[r](...n){let o=a[r].apply(s,n);return typeof o!="function"&&(0,U.default)(r),o.call(s,e)}});return{actions:s,storeTools:e}}removeSubscriptions(){this.subscribers.clear()}executeCleanupTasks(){this.cleanupFunctions.forEach(t=>{t==null||t()}),this.cleanupFunctions.length=0}dispose(){this.removeSubscriptions(),this.executeCleanupTasks()}reset(...t){var o,u,b,d,S,h;this.executeCleanupTasks();let e=t.length>0,a=e?t[0]:this.stateCallback?this.stateCallback():this.state,s=e?t[1]:this.metadataCallback?this.metadataCallback():this.metadata;this.setActualStateWithoutValidations(a,{forceUpdate:!0}),this.setMetadata(s);let c=(u=(o=this.onInit)==null?void 0:o.call(this))!=null?u:null;(0,p.default)(c)&&this.cleanupFunctions.push(c);let{onInit:r}=(b=this.callbacks)!=null?b:{};if(!r)return;let n=(S=(d=this.__devtools_getLifeCycleStoreToolsWrapper)==null?void 0:d.call(this,"config/onInit/"))!=null?S:this.storeTools,l=(h=r==null?void 0:r(n))!=null?h:null;(0,p.default)(l)&&this.cleanupFunctions.push(l)}};function y(i,t){let e=t==null?void 0:t.name,a=t==null?void 0:t.isEqualRoot,s=t==null?void 0:t.isEqual,c=this.getState(),r=(i!=null?i:b=>b)(c),n=new M(r,{name:e!=null?e:(0,v.default)("sh:")}),l=this.subscribe(b=>{if((a!=null?a:Object.is)(c,b))return;c=b;let S=i(b);(s!=null?s:Object.is)(r,S)||(r=S,n.setState(S))},{skipFirst:!0}),o=n.subscribe.bind(n),u={getState:n.getState.bind(n),subscribe:n.subscribe.bind(n),createSelectorHook:R.bind(o),createObservable:y.bind(o),dispose:()=>{l(),n.dispose()},subscribers:n.subscribers};return Object.assign(o,u),o}function R(i,t){let e=t==null?void 0:t.name,a=t==null?void 0:t.isEqualRoot,s=t==null?void 0:t.isEqual,c=this.getState(),r=(i!=null?i:b=>b)(c),n=new M(r,{name:e!=null?e:(0,v.default)("sh:")}),l=this.subscribe(b=>{if((a!=null?a:Object.is)(c,b))return;c=b;let S=i(b);(s!=null?s:Object.is)(r,S)||(r=S,n.setState(S))},{skipFirst:!0}),o=(...b)=>{let[d]=n.use(...b);return d},u={getState:()=>n.getState(),subscribe:n.subscribe.bind(n),createSelectorHook:R.bind(o),createObservable:y.bind(o),dispose:()=>{l(),n.dispose()},subscribers:n.subscribers};return Object.assign(o,u),o}var N=M;
@@ -0,0 +1 @@
1
+ var w=Object.defineProperty,F=Object.defineProperties;var E=Object.getOwnPropertyDescriptors;var y=Object.getOwnPropertySymbols;var H=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable;var R=(b,t,e)=>t in b?w(b,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):b[t]=e,f=(b,t)=>{for(var e in t||(t={}))H.call(t,e)&&R(b,e,t[e]);if(y)for(var e of y(t))_.call(t,e)&&R(b,e,t[e]);return b},C=(b,t)=>F(b,E(t));import{useDebugValue as U,useMemo as q,useRef as j,useSyncExternalStore as V}from"react";import p from"json-storage-formatter/isFunction";import W from"./isRecord.mjs";import B,{isArray as I}from"./shallowCompare.mjs";import L from"./throwWrongKeyOnActionCollectionConfig.mjs";import m from"./uniqueId.mjs";import x from"./GlobalStore.debugProps.mjs";var g=class b{constructor(t,e={metadata:{}}){this.cleanupFunctions=[];this.actionsConfig=null;this.callbacks=null;this.actions=null;this.subscribers=new Set;this.createSelectorHook=A;this.createObservable=P;var c,n,l;let{metadata:a,callbacks:o,actions:r,name:i}=e;if(p(t)&&(this.stateCallback=t),p(a)&&(this.metadataCallback=a),this._name=i!=null?i:m("gs:"),this.state=this.stateCallback?this.stateCallback():t,this.metadata=this.metadataCallback?this.metadataCallback():a!=null?a:{},this.callbacks=o!=null?o:null,this.actionsConfig=r!=null?r:null,x.isDevToolsPresent){let u=(c=new Error().stack)!=null?c:"";(l=(n=x).REACT_GLOBAL_STATE_HOOK_DEBUG)==null||l.call(n,this,e,u)}this.constructor===b&&this.initialize()}async initialize(){var c,n,l,u,d,S,h,k;let t=(n=(c=this.__devtools_initialize_getStoreActionsMapWrapped)==null?void 0:c.call(this))!=null?n:this.getStoreActionsMap(),{actions:e,storeTools:a}=t;this.actions=e,this.storeTools=a,this.use=this.getMainHook();let o=(u=(l=this.onInit)==null?void 0:l.call(this))!=null?u:null;p(o)&&this.cleanupFunctions.push(o);let{onInit:r}=(d=this.callbacks)!=null?d:{};if(!r)return;let i=(h=(S=this.__devtools_getLifeCycleStoreToolsWrapper)==null?void 0:S.call(this,"config/onInit/"))!=null?h:a,s=(k=r==null?void 0:r(i))!=null?k:null;p(s)&&this.cleanupFunctions.push(s)}executeSetStateForSubscriber(t,e){let{selector:a,onStoreChange:o,currentState:r,isEqualRoot:i=(n,l)=>n===l,isEqual:s=(n,l)=>n===l}=t;if(!e.forceUpdate&&i(e.currentState,e.newState))return{didUpdate:!1};let c=a?a(e.newState):e.newState;return!e.forceUpdate&&s(r,c)?{didUpdate:!1}:(this.partialUpdateSubscription(t,{currentState:c}),o({state:c},{identifier:e.identifier}),{didUpdate:!0})}setActualStateWithoutValidations(t,{forceUpdate:e,identifier:a}){let o=this.state;if(!(e||o!==t))return;this.state=t;let i=this.subscribers.values(),s={forceUpdate:e,newState:t,currentState:o,identifier:a};for(let c of i)this.executeSetStateForSubscriber(c,s)}setMetadata(t){let e=p(t)?t(this.metadata):t;this.metadata=e}getMetadata(){return this.metadata}getState(){return this.state}subscribe(...[t,e,a]){var l;let o=p(e),r=o?t:void 0,i=o?e:t,s=(l=o?a:e)!=null?l:void 0,c=r?r(this.state):this.state;s!=null&&s.skipFirst||i(c);let n=f({selector:r,currentState:c,onStoreChange:({state:u})=>i(u)},s);return this.subscribeCallback(n),()=>{this.subscribers.delete(n)}}subscribeCallback(t){var e,a;return(a=(e=this.callbacks)==null?void 0:e.onSubscribed)==null||a.call(e,this.storeTools,t),this.subscribers.add(t),()=>{this.subscribers.delete(t)}}partialUpdateSubscription(t,e){Object.assign(t,e)}getMainHook(){let t=`globalHook:${this._name}`,e=(i,s=[])=>{U(t);let c=I(s)?{dependencies:s}:s!=null?s:{},n=j(null),l=M=>p(i)?i(M):M;n.current=n.current?n.current:f({selector:l,currentState:l(this.state),onStoreChange:()=>{throw new Error("Callback not set")}},c);let u=n.current.dependencies,d=c==null?void 0:c.dependencies,S=C(f({},c),{selector:l,dependencies:d});this.partialUpdateSubscription(n.current,S);let{subscribe:h,getSnapshot:k,getServerSnapshot:O}=q(()=>{let M=T=>(n.current.onStoreChange=T,this.subscribeCallback(n.current)),v=()=>n.current.currentState;return{subscribe:M,getSnapshot:v,getServerSnapshot:v}},[]);return this.reselectIfDependenciesChanged({subscription:n.current,newDependencies:d,currentDependencies:u}),[V(h,k,O),this.getStateOrchestrator(),this.metadata]},a=this,o=this.getMetadata.bind(this),r={actions:this.actions,createObservable:this.createObservable.bind(a),createSelectorHook:this.createSelectorHook.bind(a),dispose:this.dispose.bind(this),metadata:void 0,getMetadata:o,getState:this.getState.bind(this),reset:this.reset.bind(this),setMetadata:this.setMetadata.bind(this),setState:this.setState.bind(this),subscribe:this.subscribe.bind(this),subscribers:this.subscribers,use:e,select:(...i)=>e(...i)[0]};return Object.assign(e,r),Object.defineProperty(e,"metadata",{configurable:!0,enumerable:!0,get:o}),e}reselectIfDependenciesChanged({subscription:t,newDependencies:e,currentDependencies:a}){!t.selector||a===e||(a==null?void 0:a.length)===(e==null?void 0:e.length)&&B(a,e)||this.partialUpdateSubscription(t,{currentState:t.selector(this.state)})}getStateOrchestrator(){return this.actions?this.actions:this.setState.bind(this)}setState(t,{forceUpdate:e,identifier:a}={}){var n,l,u,d,S,h;let o=this.state,r=p(t)?t(o):t;if(!e&&this.state===r)return;let i=this.setActualStateWithoutValidations,s={previousState:o,state:r,identifier:a},c=C(f(f({},this.storeTools),s),{setState:i});Object.defineProperty(c,"metadata",{configurable:!0,enumerable:!0,get:c.getMetadata}),!((n=this.callbacks)!=null&&n.computePreventStateChange&&((u=(l=this.callbacks)==null?void 0:l.computePreventStateChange)!=null&&u.call(l,c)))&&(this.setActualStateWithoutValidations(r,{forceUpdate:e,identifier:a}),(d=this.onStateChanged)==null||d.call(this,c),(h=(S=this.callbacks)==null?void 0:S.onStateChanged)==null||h.call(S,c))}getStoreActionsMap(){let t=this.getMetadata.bind(this),e={setMetadata:this.setMetadata.bind(this),get metadata(){return t()},getMetadata:t,getState:this.getState.bind(this),setState:this.setState.bind(this),subscribe:this.subscribe.bind(this),actions:null};if(!W(this.actionsConfig))return{actions:null,storeTools:e};let a=this.actionsConfig,o={};e.actions=o;let r=Object.keys(a);for(let i of r)Object.assign(o,{[i](...s){let n=a[i].apply(o,s);return typeof n!="function"&&L(i),n.call(o,e)}});return{actions:o,storeTools:e}}removeSubscriptions(){this.subscribers.clear()}executeCleanupTasks(){this.cleanupFunctions.forEach(t=>{t==null||t()}),this.cleanupFunctions.length=0}dispose(){this.removeSubscriptions(),this.executeCleanupTasks()}reset(...t){var n,l,u,d,S,h;this.executeCleanupTasks();let e=t.length>0,a=e?t[0]:this.stateCallback?this.stateCallback():this.state,o=e?t[1]:this.metadataCallback?this.metadataCallback():this.metadata;this.setActualStateWithoutValidations(a,{forceUpdate:!0}),this.setMetadata(o);let r=(l=(n=this.onInit)==null?void 0:n.call(this))!=null?l:null;p(r)&&this.cleanupFunctions.push(r);let{onInit:i}=(u=this.callbacks)!=null?u:{};if(!i)return;let s=(S=(d=this.__devtools_getLifeCycleStoreToolsWrapper)==null?void 0:d.call(this,"config/onInit/"))!=null?S:this.storeTools,c=(h=i==null?void 0:i(s))!=null?h:null;p(c)&&this.cleanupFunctions.push(c)}};function P(b,t){let e=t==null?void 0:t.name,a=t==null?void 0:t.isEqualRoot,o=t==null?void 0:t.isEqual,r=this.getState(),i=(b!=null?b:u=>u)(r),s=new g(i,{name:e!=null?e:m("sh:")}),c=this.subscribe(u=>{if((a!=null?a:Object.is)(r,u))return;r=u;let S=b(u);(o!=null?o:Object.is)(i,S)||(i=S,s.setState(S))},{skipFirst:!0}),n=s.subscribe.bind(s),l={getState:s.getState.bind(s),subscribe:s.subscribe.bind(s),createSelectorHook:A.bind(n),createObservable:P.bind(n),dispose:()=>{c(),s.dispose()},subscribers:s.subscribers};return Object.assign(n,l),n}function A(b,t){let e=t==null?void 0:t.name,a=t==null?void 0:t.isEqualRoot,o=t==null?void 0:t.isEqual,r=this.getState(),i=(b!=null?b:u=>u)(r),s=new g(i,{name:e!=null?e:m("sh:")}),c=this.subscribe(u=>{if((a!=null?a:Object.is)(r,u))return;r=u;let S=b(u);(o!=null?o:Object.is)(i,S)||(i=S,s.setState(S))},{skipFirst:!0}),n=(...u)=>{let[d]=s.use(...u);return d},l={getState:()=>s.getState(),subscribe:s.subscribe.bind(s),createSelectorHook:A.bind(n),createObservable:P.bind(n),dispose:()=>{c(),s.dispose()},subscribers:s.subscribers};return Object.assign(n,l),n}var Y=g;export{g as GlobalStore,P as createObservable,A as createSelectorHook,Y as default};
package/actions.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";var y=Object.create;var A=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var T=(t,e)=>{for(var o in e)A(t,o,{get:e[o],enumerable:!0})},a=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of g(e))!f.call(t,i)&&i!==o&&A(t,i,{get:()=>e[i],enumerable:!(n=l(e,i))||n.enumerable});return t};var M=(t,e,o)=>(o=t!=null?y(S(t)):{},a(e||!t||!t.__esModule?A(o,"default",{value:t,enumerable:!0}):o,t)),x=t=>a(A({},"__esModule",{value:!0}),t);var C={};T(C,{actions:()=>c,default:()=>R});module.exports=x(C);var r=M(require("./GlobalStore.cjs"));function c(t,e){let o=(n,i)=>{let p={setMetadata:(...s)=>n.setMetadata(...s),get metadata(){return n.getMetadata()},getMetadata:()=>n.getMetadata(),getState:()=>n.getState(),setState:(...s)=>n.setState(...s),subscribe:(...s)=>n.subscribe(...s),actionsConfig:i,actions:null},{storeTools:u,actions:d}=r.default.prototype.getStoreActionsMap.call(p);return u.actions=n.actions,d};return t&&e?o(t,e):n=>i=>o(i,n)}var R=c;
package/actions.d.ts ADDED
@@ -0,0 +1,32 @@
1
+ import type { Any, DerivedActionsBuilder, DerivedActionsConfig, StoreTools } from './types';
2
+ /**
3
+ * Creates a reusable action template builder.
4
+ *
5
+ * @example
6
+ * const makeUserActions = actions<API>()({
7
+ * syncUser(id) {
8
+ * return (store) => {...}
9
+ * }
10
+ * });
11
+ *
12
+ * const { syncUser } = makeUserActions(api);
13
+ */
14
+ export declare function actions<Api extends StoreTools<Any, Any, Any>>(): DerivedActionsBuilder<Api>;
15
+ /**
16
+ * Creates and action group from a config and binds it the provided store
17
+ *
18
+ * @example
19
+ * const userActions = actions(api, {
20
+ * syncUser(id) {
21
+ * return (store) => {...}
22
+ * }
23
+ * });
24
+ *
25
+ * const { syncUser } = userActions;
26
+ */
27
+ export declare function actions<Api extends StoreTools<Any, Any, Any>, Actions extends DerivedActionsConfig<Api>>(api: Api, actions: Actions): {
28
+ [key in keyof Actions]: {
29
+ (...params: Parameters<Actions[key]>): ReturnType<ReturnType<Actions[key]>>;
30
+ };
31
+ };
32
+ export default actions;
package/actions.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var y=Object.create;var A=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var T=(t,e)=>{for(var o in e)A(t,o,{get:e[o],enumerable:!0})},a=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of g(e))!f.call(t,i)&&i!==o&&A(t,i,{get:()=>e[i],enumerable:!(n=l(e,i))||n.enumerable});return t};var M=(t,e,o)=>(o=t!=null?y(S(t)):{},a(e||!t||!t.__esModule?A(o,"default",{value:t,enumerable:!0}):o,t)),x=t=>a(A({},"__esModule",{value:!0}),t);var C={};T(C,{actions:()=>c,default:()=>R});module.exports=x(C);var r=M(require("./GlobalStore.js"));function c(t,e){let o=(n,i)=>{let p={setMetadata:(...s)=>n.setMetadata(...s),get metadata(){return n.getMetadata()},getMetadata:()=>n.getMetadata(),getState:()=>n.getState(),setState:(...s)=>n.setState(...s),subscribe:(...s)=>n.subscribe(...s),actionsConfig:i,actions:null},{storeTools:u,actions:d}=r.default.prototype.getStoreActionsMap.call(p);return u.actions=n.actions,d};return t&&e?o(t,e):n=>i=>o(i,n)}var R=c;
package/actions.mjs ADDED
@@ -0,0 +1 @@
1
+ import c from"./GlobalStore.mjs";function p(o,i){let s=(t,n)=>{let A={setMetadata:(...e)=>t.setMetadata(...e),get metadata(){return t.getMetadata()},getMetadata:()=>t.getMetadata(),getState:()=>t.getState(),setState:(...e)=>t.setState(...e),subscribe:(...e)=>t.subscribe(...e),actionsConfig:n,actions:null},{storeTools:a,actions:r}=c.prototype.getStoreActionsMap.call(A);return a.actions=t.actions,r};return o&&i?s(o,i):t=>n=>s(n,t)}var d=p;export{p as actions,d as default};
package/bundle.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";var n=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var u=(t,o)=>{for(var a in o)n(t,a,{get:o[a],enumerable:!0})},d=(t,o,a,l)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of f(o))!A.call(t,e)&&e!==a&&n(t,e,{get:()=>o[e],enumerable:!(l=p(o,e))||l.enumerable});return t};var k=t=>d(n({},"__esModule",{value:!0}),t);var m={};u(m,{GlobalStore:()=>r.GlobalStore,actions:()=>x.actions,createContext:()=>S.createContext,createGlobalState:()=>i.createGlobalState,isRecord:()=>b.isRecord,shallowCompare:()=>C.shallowCompare,throwWrongKeyOnActionCollectionConfig:()=>s.throwWrongKeyOnActionCollectionConfig,uniqueId:()=>c.uniqueId});module.exports=k(m);var r=require("./GlobalStore.cjs"),i=require("./createGlobalState.cjs"),C=require("./shallowCompare.cjs"),c=require("./uniqueId.cjs"),s=require("./throwWrongKeyOnActionCollectionConfig.cjs"),b=require("./isRecord.cjs"),x=require("./actions.cjs"),S=require("./createContext.cjs");
package/bundle.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var n=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var u=(t,o)=>{for(var a in o)n(t,a,{get:o[a],enumerable:!0})},d=(t,o,a,l)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of f(o))!A.call(t,e)&&e!==a&&n(t,e,{get:()=>o[e],enumerable:!(l=p(o,e))||l.enumerable});return t};var k=t=>d(n({},"__esModule",{value:!0}),t);var m={};u(m,{GlobalStore:()=>r.GlobalStore,actions:()=>x.actions,createContext:()=>S.createContext,createGlobalState:()=>i.createGlobalState,isRecord:()=>b.isRecord,shallowCompare:()=>C.shallowCompare,throwWrongKeyOnActionCollectionConfig:()=>s.throwWrongKeyOnActionCollectionConfig,uniqueId:()=>c.uniqueId});module.exports=k(m);var r=require("./GlobalStore.js"),i=require("./createGlobalState.js"),C=require("./shallowCompare.js"),c=require("./uniqueId.js"),s=require("./throwWrongKeyOnActionCollectionConfig.js"),b=require("./isRecord.js"),x=require("./actions.js"),S=require("./createContext.js");
package/bundle.mjs ADDED
@@ -0,0 +1 @@
1
+ import{GlobalStore as e}from"./GlobalStore.mjs";import{createGlobalState as n}from"./createGlobalState.mjs";import{shallowCompare as r}from"./shallowCompare.mjs";import{uniqueId as C}from"./uniqueId.mjs";import{throwWrongKeyOnActionCollectionConfig as s}from"./throwWrongKeyOnActionCollectionConfig.mjs";import{isRecord as x}from"./isRecord.mjs";import{actions as p}from"./actions.mjs";import{createContext as A}from"./createContext.mjs";export{e as GlobalStore,p as actions,A as createContext,n as createGlobalState,x as isRecord,r as shallowCompare,s as throwWrongKeyOnActionCollectionConfig,C as uniqueId};
@@ -0,0 +1 @@
1
+ "use strict";var G=Object.create;var M=Object.defineProperty,O=Object.defineProperties,F=Object.getOwnPropertyDescriptor,D=Object.getOwnPropertyDescriptors,L=Object.getOwnPropertyNames,H=Object.getOwnPropertySymbols,g=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty,$=Object.prototype.propertyIsEnumerable;var _=(t,e,o)=>e in t?M(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,P=(t,e)=>{for(var o in e||(e={}))h.call(e,o)&&_(t,o,e[o]);if(H)for(var o of H(e))$.call(e,o)&&_(t,o,e[o]);return t},p=(t,e)=>O(t,D(e));var q=(t,e)=>{var o={};for(var s in t)h.call(t,s)&&e.indexOf(s)<0&&(o[s]=t[s]);if(t!=null&&H)for(var s of H(t))e.indexOf(s)<0&&$.call(t,s)&&(o[s]=t[s]);return o};var z=(t,e)=>{for(var o in e)M(t,o,{get:e[o],enumerable:!0})},N=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let C of L(e))!h.call(t,C)&&C!==o&&M(t,C,{get:()=>e[C],enumerable:!(s=F(e,C))||s.enumerable});return t};var U=(t,e,o)=>(o=t!=null?G(g(t)):{},N(e||!t||!t.__esModule?M(o,"default",{value:t,enumerable:!0}):o,t)),J=t=>N(M({},"__esModule",{value:!0}),t);var Q={};z(Q,{createContext:()=>I,default:()=>K});module.exports=J(Q);var a=require("react"),v=require("./GlobalStore.cjs"),B=U(require("json-storage-formatter/isFunction")),T=U(require("./uniqueId.cjs"));var I=(t,e={})=>{var A;let o=(0,a.createContext)(null),s=(A=e.name)!=null?A:(0,T.default)("ctx:"),C=()=>(0,B.default)(t)?t():t,f=n=>Object.prototype.hasOwnProperty.call(n,"value"),E=n=>{var d;(0,a.useDebugValue)(`${s}:Provider`);let[r]=(0,a.useState)(()=>{var u,l,S,m;let b=f(n)?(0,B.default)(n.value)?n.value(C()):n.value:C(),k={__devtools_isContextStore:!0},i=new v.GlobalStore(b,P(p(P({},e),{metadata:(u=(0,B.default)(e.metadata)?e.metadata():e.metadata)!=null?u:{}}),k)),c={use:y};return Object.assign(i.storeTools,c),(S=(l=e.callbacks)==null?void 0:l.onCreated)==null||S.call(l,i.storeTools,i),(m=n.onCreated)==null||m.call(n,i.storeTools,i),i});return(0,a.useLayoutEffect)(()=>{f(n)&&!(0,B.default)(n.value)&&r.setState(n.value)},[r,n.value]),(0,a.useEffect)(()=>{var k,i,c;let b=[(i=(k=e.callbacks)==null?void 0:k.onMounted)==null?void 0:i.call(k,r.storeTools,r),(c=n.onMounted)==null?void 0:c.call(n,r.storeTools,r)].filter(Boolean);return()=>{var u,l,S;(l=(u=r.callbacks)==null?void 0:u.onUnMount)==null||l.call(u,r),b.forEach(m=>m==null?void 0:m()),(S=r.__onUnMountContext)==null||S.call(r,r)}},[r]),(d=n.onRender)==null||d.call(n,r.storeTools,r),r},w=n=>{let r=E(n);return(0,a.createElement)(o.Provider,{value:r.use},n.children)};w.displayName=`${s}:Provider`,o.displayName=`${s}`;let x={makeProviderWrapper:n=>{let r={current:void 0,instance:void 0};return{wrapper:i=>{var c=i,{children:b}=c,k=q(c,["children"]);return(0,a.createElement)(w,p(P(P({},n),k),{onCreated:(u,l)=>{var S;r.current=u,r.instance=l,(S=n==null?void 0:n.onCreated)==null||S.call(n,u,l)}}),b)},context:r}}},y=(...n)=>{(0,a.useDebugValue)(`${s}:use`);let r=(0,a.useContext)(o);if(!r)throw new Error("use hook must be used within a ContextProvider");return r(...n)},R=()=>{(0,a.useDebugValue)(`${s}:api`);let n=(0,a.useContext)(o);if(!n)throw new Error("api hook must be used within a ContextProvider");return n},V=(...n)=>{(0,a.useDebugValue)(`${s}:observable`);let r=R(),d=(0,a.useRef)(n);return d.current=n,(0,a.useMemo)(()=>{var b,k,i;return r.createObservable(c=>{let u=d.current[0];return u(c)},{isEqualRoot:(b=d.current[1])!=null&&b.isEqualRoot?(c,u)=>{let l=d.current[1].isEqualRoot;return!!l(c,u)}:void 0,isEqual:(k=d.current[1])!=null&&k.isEqual?(c,u)=>{let l=d.current[1].isEqual;return!!l(c,u)}:void 0,name:(i=d.current[1])==null?void 0:i.name})},[r])},W={displayName:o.displayName,createSelectorHook:j.bind(y),api:R,select:(...n)=>y(...n)[0],observable:V,actions:()=>R().actions};return Object.assign(w,x),Object.assign(y,W),{use:y,Provider:w,Context:o}};function j(t,e){var E;let o=(E=e==null?void 0:e.name)!=null?E:(0,T.default)("sh:"),s=(...w)=>{let x=this.api();return(0,a.useDebugValue)(`${this.displayName}:selector`),(0,a.useDebugValue)(`${o}:use`),(0,a.useMemo)(()=>x.createSelectorHook(t,e),[x])(...w)},C=()=>{(0,a.useDebugValue)(`${this.displayName}:selector`),(0,a.useDebugValue)(`${o}:api`);let w=this.api();return(0,a.useMemo)(()=>{let x=w.createObservable(t,e);return p(P({},w),{getState:()=>x.getState(),subscribe:x.subscribe.bind(x),createSelectorHook:v.createSelectorHook.bind(x),createObservable:v.createObservable.bind(x)})},[w])},f={displayName:this.displayName,createSelectorHook:j.bind(s),api:C};return Object.assign(s,f),s}var K=I;
@@ -0,0 +1,15 @@
1
+ import type { CreateContext } from './types';
2
+ /**
3
+ * @description Creates a highly granular React context with its associated provider and state hook.
4
+ * Unlike the native `React.createContext`, this version provides fine-grained reactivity and supports
5
+ * state selection, metadata handling, and optional custom actions for controlled mutations.
6
+ *
7
+ * Components using the generated hook only re-render when the selected part of the state changes,
8
+ * making it efficient for large or deeply nested state trees.
9
+ */
10
+ export declare const createContext: CreateContext;
11
+ export default createContext;
12
+ /**
13
+ * Temporary re-export types for backwards compatibility
14
+ */
15
+ export type { GlobalStoreContextCallbacks, GlobalStoreCallbacks, ContextActionCollectionResult, ContextActionCollectionConfig, ContextStoreToolsExtensions, ContextStoreTools, ContextProviderExtensions, ContextProvider, ReadonlyContextHook, ContextHook, ContextPublicApi, ReadonlyContextPublicApi, CreateContext, InferContextApi, InferStateApi, } from './types';
@@ -0,0 +1 @@
1
+ "use strict";var G=Object.create;var M=Object.defineProperty,O=Object.defineProperties,F=Object.getOwnPropertyDescriptor,D=Object.getOwnPropertyDescriptors,L=Object.getOwnPropertyNames,H=Object.getOwnPropertySymbols,g=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty,$=Object.prototype.propertyIsEnumerable;var _=(t,e,o)=>e in t?M(t,e,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[e]=o,P=(t,e)=>{for(var o in e||(e={}))h.call(e,o)&&_(t,o,e[o]);if(H)for(var o of H(e))$.call(e,o)&&_(t,o,e[o]);return t},p=(t,e)=>O(t,D(e));var q=(t,e)=>{var o={};for(var s in t)h.call(t,s)&&e.indexOf(s)<0&&(o[s]=t[s]);if(t!=null&&H)for(var s of H(t))e.indexOf(s)<0&&$.call(t,s)&&(o[s]=t[s]);return o};var z=(t,e)=>{for(var o in e)M(t,o,{get:e[o],enumerable:!0})},N=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let C of L(e))!h.call(t,C)&&C!==o&&M(t,C,{get:()=>e[C],enumerable:!(s=F(e,C))||s.enumerable});return t};var U=(t,e,o)=>(o=t!=null?G(g(t)):{},N(e||!t||!t.__esModule?M(o,"default",{value:t,enumerable:!0}):o,t)),J=t=>N(M({},"__esModule",{value:!0}),t);var Q={};z(Q,{createContext:()=>I,default:()=>K});module.exports=J(Q);var a=require("react"),v=require("./GlobalStore.js"),B=U(require("json-storage-formatter/isFunction")),T=U(require("./uniqueId.js"));var I=(t,e={})=>{var A;let o=(0,a.createContext)(null),s=(A=e.name)!=null?A:(0,T.default)("ctx:"),C=()=>(0,B.default)(t)?t():t,f=n=>Object.prototype.hasOwnProperty.call(n,"value"),E=n=>{var d;(0,a.useDebugValue)(`${s}:Provider`);let[r]=(0,a.useState)(()=>{var u,l,S,m;let b=f(n)?(0,B.default)(n.value)?n.value(C()):n.value:C(),k={__devtools_isContextStore:!0},i=new v.GlobalStore(b,P(p(P({},e),{metadata:(u=(0,B.default)(e.metadata)?e.metadata():e.metadata)!=null?u:{}}),k)),c={use:y};return Object.assign(i.storeTools,c),(S=(l=e.callbacks)==null?void 0:l.onCreated)==null||S.call(l,i.storeTools,i),(m=n.onCreated)==null||m.call(n,i.storeTools,i),i});return(0,a.useLayoutEffect)(()=>{f(n)&&!(0,B.default)(n.value)&&r.setState(n.value)},[r,n.value]),(0,a.useEffect)(()=>{var k,i,c;let b=[(i=(k=e.callbacks)==null?void 0:k.onMounted)==null?void 0:i.call(k,r.storeTools,r),(c=n.onMounted)==null?void 0:c.call(n,r.storeTools,r)].filter(Boolean);return()=>{var u,l,S;(l=(u=r.callbacks)==null?void 0:u.onUnMount)==null||l.call(u,r),b.forEach(m=>m==null?void 0:m()),(S=r.__onUnMountContext)==null||S.call(r,r)}},[r]),(d=n.onRender)==null||d.call(n,r.storeTools,r),r},w=n=>{let r=E(n);return(0,a.createElement)(o.Provider,{value:r.use},n.children)};w.displayName=`${s}:Provider`,o.displayName=`${s}`;let x={makeProviderWrapper:n=>{let r={current:void 0,instance:void 0};return{wrapper:i=>{var c=i,{children:b}=c,k=q(c,["children"]);return(0,a.createElement)(w,p(P(P({},n),k),{onCreated:(u,l)=>{var S;r.current=u,r.instance=l,(S=n==null?void 0:n.onCreated)==null||S.call(n,u,l)}}),b)},context:r}}},y=(...n)=>{(0,a.useDebugValue)(`${s}:use`);let r=(0,a.useContext)(o);if(!r)throw new Error("use hook must be used within a ContextProvider");return r(...n)},R=()=>{(0,a.useDebugValue)(`${s}:api`);let n=(0,a.useContext)(o);if(!n)throw new Error("api hook must be used within a ContextProvider");return n},V=(...n)=>{(0,a.useDebugValue)(`${s}:observable`);let r=R(),d=(0,a.useRef)(n);return d.current=n,(0,a.useMemo)(()=>{var b,k,i;return r.createObservable(c=>{let u=d.current[0];return u(c)},{isEqualRoot:(b=d.current[1])!=null&&b.isEqualRoot?(c,u)=>{let l=d.current[1].isEqualRoot;return!!l(c,u)}:void 0,isEqual:(k=d.current[1])!=null&&k.isEqual?(c,u)=>{let l=d.current[1].isEqual;return!!l(c,u)}:void 0,name:(i=d.current[1])==null?void 0:i.name})},[r])},W={displayName:o.displayName,createSelectorHook:j.bind(y),api:R,select:(...n)=>y(...n)[0],observable:V,actions:()=>R().actions};return Object.assign(w,x),Object.assign(y,W),{use:y,Provider:w,Context:o}};function j(t,e){var E;let o=(E=e==null?void 0:e.name)!=null?E:(0,T.default)("sh:"),s=(...w)=>{let x=this.api();return(0,a.useDebugValue)(`${this.displayName}:selector`),(0,a.useDebugValue)(`${o}:use`),(0,a.useMemo)(()=>x.createSelectorHook(t,e),[x])(...w)},C=()=>{(0,a.useDebugValue)(`${this.displayName}:selector`),(0,a.useDebugValue)(`${o}:api`);let w=this.api();return(0,a.useMemo)(()=>{let x=w.createObservable(t,e);return p(P({},w),{getState:()=>x.getState(),subscribe:x.subscribe.bind(x),createSelectorHook:v.createSelectorHook.bind(x),createObservable:v.createObservable.bind(x)})},[w])},f={displayName:this.displayName,createSelectorHook:j.bind(s),api:C};return Object.assign(s,f),s}var K=I;
@@ -0,0 +1 @@
1
+ var V=Object.defineProperty,W=Object.defineProperties;var G=Object.getOwnPropertyDescriptors;var B=Object.getOwnPropertySymbols;var T=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable;var h=(o,t,a)=>t in o?V(o,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):o[t]=a,m=(o,t)=>{for(var a in t||(t={}))T.call(t,a)&&h(o,a,t[a]);if(B)for(var a of B(t))A.call(t,a)&&h(o,a,t[a]);return o},f=(o,t)=>W(o,G(t));var _=(o,t)=>{var a={};for(var r in o)T.call(o,r)&&t.indexOf(r)<0&&(a[r]=o[r]);if(o!=null&&B)for(var r of B(o))t.indexOf(r)<0&&A.call(o,r)&&(a[r]=o[r]);return a};import{createContext as O,useContext as $,createElement as q,useMemo as p,useEffect as F,useRef as D,useDebugValue as b,useLayoutEffect as L,useState as g}from"react";import{createObservable as z,createSelectorHook as J,GlobalStore as K}from"./GlobalStore.mjs";import E from"json-storage-formatter/isFunction";import N from"./uniqueId.mjs";var Q=(o,t={})=>{var R;let a=O(null),r=(R=t.name)!=null?R:N("ctx:"),v=()=>E(o)?o():o,y=e=>Object.prototype.hasOwnProperty.call(e,"value"),M=e=>{var c;b(`${r}:Provider`);let[n]=g(()=>{var s,u,x,S;let w=y(e)?E(e.value)?e.value(v()):e.value:v(),d={__devtools_isContextStore:!0},l=new K(w,m(f(m({},t),{metadata:(s=E(t.metadata)?t.metadata():t.metadata)!=null?s:{}}),d)),i={use:P};return Object.assign(l.storeTools,i),(x=(u=t.callbacks)==null?void 0:u.onCreated)==null||x.call(u,l.storeTools,l),(S=e.onCreated)==null||S.call(e,l.storeTools,l),l});return L(()=>{y(e)&&!E(e.value)&&n.setState(e.value)},[n,e.value]),F(()=>{var d,l,i;let w=[(l=(d=t.callbacks)==null?void 0:d.onMounted)==null?void 0:l.call(d,n.storeTools,n),(i=e.onMounted)==null?void 0:i.call(e,n.storeTools,n)].filter(Boolean);return()=>{var s,u,x;(u=(s=n.callbacks)==null?void 0:s.onUnMount)==null||u.call(s,n),w.forEach(S=>S==null?void 0:S()),(x=n.__onUnMountContext)==null||x.call(n,n)}},[n]),(c=e.onRender)==null||c.call(e,n.storeTools,n),n},k=e=>{let n=M(e);return q(a.Provider,{value:n.use},e.children)};k.displayName=`${r}:Provider`,a.displayName=`${r}`;let C={makeProviderWrapper:e=>{let n={current:void 0,instance:void 0};return{wrapper:l=>{var i=l,{children:w}=i,d=_(i,["children"]);return q(k,f(m(m({},e),d),{onCreated:(s,u)=>{var x;n.current=s,n.instance=u,(x=e==null?void 0:e.onCreated)==null||x.call(e,s,u)}}),w)},context:n}}},P=(...e)=>{b(`${r}:use`);let n=$(a);if(!n)throw new Error("use hook must be used within a ContextProvider");return n(...e)},H=()=>{b(`${r}:api`);let e=$(a);if(!e)throw new Error("api hook must be used within a ContextProvider");return e},I=(...e)=>{b(`${r}:observable`);let n=H(),c=D(e);return c.current=e,p(()=>{var w,d,l;return n.createObservable(i=>{let s=c.current[0];return s(i)},{isEqualRoot:(w=c.current[1])!=null&&w.isEqualRoot?(i,s)=>{let u=c.current[1].isEqualRoot;return!!u(i,s)}:void 0,isEqual:(d=c.current[1])!=null&&d.isEqual?(i,s)=>{let u=c.current[1].isEqual;return!!u(i,s)}:void 0,name:(l=c.current[1])==null?void 0:l.name})},[n])},j={displayName:a.displayName,createSelectorHook:U.bind(P),api:H,select:(...e)=>P(...e)[0],observable:I,actions:()=>H().actions};return Object.assign(k,C),Object.assign(P,j),{use:P,Provider:k,Context:a}};function U(o,t){var M;let a=(M=t==null?void 0:t.name)!=null?M:N("sh:"),r=(...k)=>{let C=this.api();return b(`${this.displayName}:selector`),b(`${a}:use`),p(()=>C.createSelectorHook(o,t),[C])(...k)},v=()=>{b(`${this.displayName}:selector`),b(`${a}:api`);let k=this.api();return p(()=>{let C=k.createObservable(o,t);return f(m({},k),{getState:()=>C.getState(),subscribe:C.subscribe.bind(C),createSelectorHook:J.bind(C),createObservable:z.bind(C)})},[k])},y={displayName:this.displayName,createSelectorHook:U.bind(r),api:v};return Object.assign(r,y),r}var oe=Q;export{Q as createContext,oe as default};
@@ -0,0 +1 @@
1
+ "use strict";var a=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var m=(e,t)=>{for(var r in t)a(e,r,{get:t[r],enumerable:!0})},S=(e,t,r,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of f(t))!y.call(e,o)&&o!==r&&a(e,o,{get:()=>t[o],enumerable:!(p=n(t,o))||p.enumerable});return e};var b=e=>S(a({},"__esModule",{value:!0}),e);var i={};m(i,{createGlobalState:()=>s,default:()=>c});module.exports=b(i);var l=require("./GlobalStore.cjs"),s=(...[e,t])=>new l.GlobalStore(e,t).use,c=s;
@@ -0,0 +1,7 @@
1
+ import type { CreateGlobalState } from './types';
2
+ /**
3
+ * Creates a global state hook
4
+ */
5
+ export declare const createGlobalState: CreateGlobalState;
6
+ export default createGlobalState;
7
+ export type { InferActionsType, InferStateApi, AnyActions } from './types';
@@ -0,0 +1 @@
1
+ "use strict";var a=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var m=(e,t)=>{for(var r in t)a(e,r,{get:t[r],enumerable:!0})},S=(e,t,r,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of f(t))!y.call(e,o)&&o!==r&&a(e,o,{get:()=>t[o],enumerable:!(p=n(t,o))||p.enumerable});return e};var b=e=>S(a({},"__esModule",{value:!0}),e);var i={};m(i,{createGlobalState:()=>s,default:()=>c});module.exports=b(i);var l=require("./GlobalStore.js"),s=(...[e,t])=>new l.GlobalStore(e,t).use,c=s;
@@ -0,0 +1 @@
1
+ import{GlobalStore as o}from"./GlobalStore.mjs";var r=(...[t,e])=>new o(t,e).use,p=r;export{r as createGlobalState,p as default};
package/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export type { ActionCollectionConfig, ActionCollectionResult, AnyActions, AnyFunction, BaseMetadata, BrandedId, CleanupFunction, ContextActionCollectionConfig, ContextActionCollectionResult, ContextHook, ContextProvider, ContextProviderExtensions, ContextPublicApi, ContextStoreTools, ContextStoreToolsExtensions, CreateContext, CreateGlobalState, GlobalStoreCallbacks as GlobalStoreCallbacksForContext, GlobalStoreCallbacks, GlobalStoreContextCallbacks, InferAPI, InferActionsType, InferContextApi, InferStateApi, MetadataGetter, MetadataSetter, ObservableFragment, ReadonlyContextHook, ReadonlyContextPublicApi, ReadonlyHook, ReadonlyStateApi, SelectHook, SelectorCallback, StateApi, StateChanges, StateHook, StoreTools, SubscribeCallback, SubscribeCallbackConfig, SubscribeToState, SubscriberParameters, SubscriptionCallback, UniqueId, UnsubscribeCallback, UseHookOptions, Any, } from './types';
2
+ export { GlobalStore } from './GlobalStore';
3
+ export { createGlobalState } from './createGlobalState';
4
+ export { shallowCompare } from './shallowCompare';
5
+ export { uniqueId } from './uniqueId';
6
+ export { throwWrongKeyOnActionCollectionConfig } from './throwWrongKeyOnActionCollectionConfig';
7
+ export { isRecord } from './isRecord';
8
+ export { actions } from './actions';
9
+ export { createContext } from './createContext';
package/isRecord.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";var c=Object.create;var f=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty;var y=(r,e)=>{for(var n in e)f(r,n,{get:e[n],enumerable:!0})},o=(r,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of p(e))!l.call(r,t)&&t!==n&&f(r,t,{get:()=>e[t],enumerable:!(i=u(e,t))||i.enumerable});return r};var k=(r,e,n)=>(n=r!=null?c(d(r)):{},o(e||!r||!r.__esModule?f(n,"default",{value:r,enumerable:!0}):n,r)),m=r=>o(f({},"__esModule",{value:!0}),r);var x={};y(x,{default:()=>w,isRecord:()=>a});module.exports=m(x);var s=k(require("json-storage-formatter/isNil")),a=r=>!((0,s.default)(r)||typeof r!="object"||Array.isArray(r)||r instanceof Map||r instanceof Set||r instanceof Date),w=a;
package/isRecord.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
2
+ export default isRecord;
package/isRecord.js ADDED
@@ -0,0 +1 @@
1
+ "use strict";var c=Object.create;var f=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var d=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty;var y=(r,e)=>{for(var n in e)f(r,n,{get:e[n],enumerable:!0})},o=(r,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of p(e))!l.call(r,t)&&t!==n&&f(r,t,{get:()=>e[t],enumerable:!(i=u(e,t))||i.enumerable});return r};var k=(r,e,n)=>(n=r!=null?c(d(r)):{},o(e||!r||!r.__esModule?f(n,"default",{value:r,enumerable:!0}):n,r)),m=r=>o(f({},"__esModule",{value:!0}),r);var x={};y(x,{default:()=>w,isRecord:()=>a});module.exports=m(x);var s=k(require("json-storage-formatter/isNil")),a=r=>!((0,s.default)(r)||typeof r!="object"||Array.isArray(r)||r instanceof Map||r instanceof Set||r instanceof Date),w=a;
package/isRecord.mjs ADDED
@@ -0,0 +1 @@
1
+ import e from"json-storage-formatter/isNil";var n=r=>!(e(r)||typeof r!="object"||Array.isArray(r)||r instanceof Map||r instanceof Set||r instanceof Date),f=n;export{f as default,n as isRecord};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-hooks-global-states",
3
- "version": "16.0.1",
3
+ "version": "16.0.2",
4
4
  "description": "A package to easily handle global state across your React components using hooks.",
5
5
  "main": "./bundle.cjs",
6
6
  "module": "./bundle.mjs",
@@ -65,27 +65,6 @@
65
65
  "*.mjs",
66
66
  "*.d.ts"
67
67
  ],
68
- "scripts": {
69
- "format": "prettier --write . --log-level silent && yarn lint:fix",
70
- "test": "yarn build && yarn ts-check:tests && yarn jest",
71
- "test:logs": "sh -c 'yarn build && yarn jest \"$@\" 2>&1 | grep -i \"console\" -A 2' --",
72
- "test:debug:no-watch": "node --inspect-brk node_modules/.bin/jest --no-watchman --runInBand",
73
- "test:debug": "node --inspect-brk node_modules/.bin/jest --watch --runInBand",
74
- "test:quick": "yarn ts-check:tests && yarn test --no-coverage --maxWorkers=4 -c --no-watchman -u",
75
- "test:coverage": "yarn test --maxWorkers=4 -c --colors --no-watchman --verbose --coverage",
76
- "test:interop": "yarn build && tsx scripts/test-interop.ts",
77
- "build": "yarn ts-check && yarn clean && tsc -p tsconfig.build.json && tsx esbuild.config.ts && tsx scripts/prepare-dist.ts",
78
- "prepare": "yarn format && npm run build && yarn test:quick",
79
- "version": "npm run format && yarn build && yarn jest && git add -A",
80
- "postversion": "git push && git push --tags",
81
- "publish:pkg": "yarn build && cd dist && npm publish --tag latest --registry https://registry.npmjs.org/",
82
- "publish:beta": "yarn build && cd dist && npm publish --tag beta --registry https://registry.npmjs.org/",
83
- "lint": "eslint . --max-warnings=0",
84
- "lint:fix": "eslint . --fix --max-warnings=0",
85
- "clean": "rm -rf dist coverage",
86
- "ts-check": "tsc -p tsconfig.json --noEmit",
87
- "ts-check:tests": "tsc -p __test__/tsconfig.json --noEmit"
88
- },
89
68
  "repository": {
90
69
  "type": "git",
91
70
  "url": "git+https://github.com/johnny-quesada-developer/react-hooks-global-states.git"
@@ -108,35 +87,6 @@
108
87
  "url": "https://github.com/johnny-quesada-developer/react-hooks-global-states/issues"
109
88
  },
110
89
  "homepage": "https://github.com/johnny-quesada-developer/react-hooks-global-states#readme",
111
- "devDependencies": {
112
- "@eslint/js": "^9.39.1",
113
- "@testing-library/dom": "^10.4.0",
114
- "@testing-library/react": "^16.3.0",
115
- "@types/jest": "^29.5.11",
116
- "@types/react": "^18.2.45",
117
- "@types/react-dom": "^18.2.18",
118
- "@typescript-eslint/eslint-plugin": "^4.9.1",
119
- "@typescript-eslint/parser": "^4.9.1",
120
- "easy-cancelable-promise": "^1.0.1",
121
- "esbuild": "^0.24.0",
122
- "eslint": "^9.39.1",
123
- "eslint-config-airbnb": "^18.2.1",
124
- "eslint-plugin-import": "^2.22.1",
125
- "eslint-plugin-jsx-a11y": "^6.4.1",
126
- "eslint-plugin-react": "^7.37.5",
127
- "eslint-plugin-react-hooks": "^4.2.0",
128
- "jest": "^29.7.0",
129
- "jest-environment-jsdom": "^30.0.4",
130
- "jiti": "^2.6.1",
131
- "prettier": "^3.6.2",
132
- "react": "^18.2.0",
133
- "react-dom": "^18.2.0",
134
- "ts-jest": "^29.1.1",
135
- "tslib": "^2.6.2",
136
- "tsx": "^4.19.0",
137
- "typescript": "^5.8.2",
138
- "typescript-eslint": "^8.46.3"
139
- },
140
90
  "dependencies": {
141
91
  "json-storage-formatter": "^4.0.0"
142
92
  },
@@ -0,0 +1 @@
1
+ "use strict";var q=Object.create;var s=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var O=(t,n)=>{for(var r in n)s(t,r,{get:n[r],enumerable:!0})},a=(t,n,r,e)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of M(n))!j.call(t,o)&&o!==r&&s(t,o,{get:()=>n[o],enumerable:!(e=E(n,o))||e.enumerable});return t};var i=(t,n,r)=>(r=t!=null?q(V(t)):{},a(n||!t||!t.__esModule?s(r,"default",{value:t,enumerable:!0}):r,t)),d=t=>a(s({},"__esModule",{value:!0}),t);var A={};O(A,{canCheckSimpleEquality:()=>x,default:()=>z,isArray:()=>k,isEqualArray:()=>m,isEqualMap:()=>h,isEqualObject:()=>S,isEqualSet:()=>l,isMap:()=>T,isSet:()=>y,shallowCompare:()=>w});module.exports=d(A);var f=i(require("json-storage-formatter/isPrimitive")),c=i(require("json-storage-formatter/isDate")),p=i(require("json-storage-formatter/isNil")),u=i(require("./isRecord.cjs")),w=(t,n)=>t===n?!0:x(t,n)?t===n:k(t)&&k(n)?m(t,n):T(t)&&T(n)?h(t,n):y(t)&&y(n)?l(t,n):!(0,u.default)(t)||!(0,u.default)(n)?t===n:S(t,n),k=t=>Array.isArray(t),T=t=>t instanceof Map,y=t=>t instanceof Set,x=(t,n)=>{let r=typeof t,e=typeof n;return r!==e?!0:(0,p.default)(t)||(0,p.default)(n)||(0,f.default)(t)&&(0,f.default)(n)||(0,c.default)(t)&&(0,c.default)(n)||r==="function"&&e==="function"},m=(t,n)=>{if(t.length!==n.length)return!1;for(let r=0;r<t.length;r+=1){let e=t[r],o=n[r];if(e!==o)return!1}return!0},h=(t,n)=>{if(t.size!==n.size)return!1;for(let[r,e]of t){let o=n.get(r);if(e!==o)return!1}return!0},l=(t,n)=>{if(t.size!==n.size)return!1;for(let r of t)if(!n.has(r))return!1;return!0},S=(t,n)=>{let r=Object.keys(t),e=Object.keys(n);if(r.length!==e.length)return!1;for(let o of r){let b=t[o],g=n[o];if(b!==g)return!1}return!0},z=w;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @description It performs a shallow comparison of the values.
3
+ * @param value1 - The first value to compare.
4
+ * @param value2 - The second value to compare.
5
+ * @returns True if the values are equal, false otherwise.
6
+ */
7
+ export declare const shallowCompare: <T>(value1: T, value2: T) => boolean;
8
+ export declare const isArray: (value: unknown) => value is unknown[];
9
+ export declare const isMap: (value: unknown) => value is Map<unknown, unknown>;
10
+ export declare const isSet: (value: unknown) => value is Set<unknown>;
11
+ /**
12
+ * @description Determines whether a simple equality check (using `===`) is sufficient
13
+ * to compare the provided values. This helps decide when a deep equality check
14
+ * is unnecessary or inefficient.
15
+ *
16
+ * Simple equality checks are considered valid when:
17
+ * - The values have different types (comparison will trivially return false)
18
+ * - Either value is null or undefined
19
+ * - Both values are primitive types (string, number, boolean, symbol, bigint)
20
+ * - Both values are Date objects
21
+ * - Both values are functions
22
+ *
23
+ * @param value1 - The first value to compare.
24
+ * @param value2 - The second value to compare.
25
+ * @returns `true` if a simple `===` check is sufficient, `false` if a deep comparison may be required.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * canCheckSimpleEquality(42, 42); // true (primitive numbers)
30
+ * canCheckSimpleEquality({ a: 1 }, { a: 1 }); // false (objects)
31
+ * canCheckSimpleEquality([1, 2], [1, 2]); // false (arrays)
32
+ * canCheckSimpleEquality('a', 1); // true (different types, shallow check enough)
33
+ * ```
34
+ */
35
+ export declare const canCheckSimpleEquality: (value1: unknown, value2: unknown) => boolean;
36
+ /**
37
+ * @description Performs a shallow comparison between two arrays.
38
+ */
39
+ export declare const isEqualArray: <T>(array1: T[], array2: T[]) => array1 is T[];
40
+ /**
41
+ * @description Performs a shallow comparison between two maps.
42
+ */
43
+ export declare const isEqualMap: <K, V>(map1: Map<K, V>, map2: Map<K, V>) => map1 is Map<K, V>;
44
+ /**
45
+ * @description Performs a shallow comparison between two sets.
46
+ */
47
+ export declare const isEqualSet: <T>(set1: Set<T>, set2: Set<T>) => set1 is Set<T>;
48
+ /**
49
+ * @description Performs a shallow comparison between two objects.
50
+ */
51
+ export declare const isEqualObject: <T extends Record<string, unknown>>(value1: T, value2: T) => boolean;
52
+ export default shallowCompare;
@@ -0,0 +1 @@
1
+ "use strict";var q=Object.create;var s=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var V=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var O=(t,n)=>{for(var r in n)s(t,r,{get:n[r],enumerable:!0})},a=(t,n,r,e)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of M(n))!j.call(t,o)&&o!==r&&s(t,o,{get:()=>n[o],enumerable:!(e=E(n,o))||e.enumerable});return t};var i=(t,n,r)=>(r=t!=null?q(V(t)):{},a(n||!t||!t.__esModule?s(r,"default",{value:t,enumerable:!0}):r,t)),d=t=>a(s({},"__esModule",{value:!0}),t);var A={};O(A,{canCheckSimpleEquality:()=>x,default:()=>z,isArray:()=>k,isEqualArray:()=>m,isEqualMap:()=>h,isEqualObject:()=>S,isEqualSet:()=>l,isMap:()=>T,isSet:()=>y,shallowCompare:()=>w});module.exports=d(A);var f=i(require("json-storage-formatter/isPrimitive")),c=i(require("json-storage-formatter/isDate")),p=i(require("json-storage-formatter/isNil")),u=i(require("./isRecord.js")),w=(t,n)=>t===n?!0:x(t,n)?t===n:k(t)&&k(n)?m(t,n):T(t)&&T(n)?h(t,n):y(t)&&y(n)?l(t,n):!(0,u.default)(t)||!(0,u.default)(n)?t===n:S(t,n),k=t=>Array.isArray(t),T=t=>t instanceof Map,y=t=>t instanceof Set,x=(t,n)=>{let r=typeof t,e=typeof n;return r!==e?!0:(0,p.default)(t)||(0,p.default)(n)||(0,f.default)(t)&&(0,f.default)(n)||(0,c.default)(t)&&(0,c.default)(n)||r==="function"&&e==="function"},m=(t,n)=>{if(t.length!==n.length)return!1;for(let r=0;r<t.length;r+=1){let e=t[r],o=n[r];if(e!==o)return!1}return!0},h=(t,n)=>{if(t.size!==n.size)return!1;for(let[r,e]of t){let o=n.get(r);if(e!==o)return!1}return!0},l=(t,n)=>{if(t.size!==n.size)return!1;for(let r of t)if(!n.has(r))return!1;return!0},S=(t,n)=>{let r=Object.keys(t),e=Object.keys(n);if(r.length!==e.length)return!1;for(let o of r){let b=t[o],g=n[o];if(b!==g)return!1}return!0},z=w;
@@ -0,0 +1 @@
1
+ import s from"json-storage-formatter/isPrimitive";import i from"json-storage-formatter/isDate";import f from"json-storage-formatter/isNil";import c from"./isRecord.mjs";var a=(t,n)=>t===n?!0:w(t,n)?t===n:p(t)&&p(n)?x(t,n):u(t)&&u(n)?m(t,n):k(t)&&k(n)?h(t,n):!c(t)||!c(n)?t===n:l(t,n),p=t=>Array.isArray(t),u=t=>t instanceof Map,k=t=>t instanceof Set,w=(t,n)=>{let r=typeof t,o=typeof n;return r!==o?!0:f(t)||f(n)||s(t)&&s(n)||i(t)&&i(n)||r==="function"&&o==="function"},x=(t,n)=>{if(t.length!==n.length)return!1;for(let r=0;r<t.length;r+=1){let o=t[r],e=n[r];if(o!==e)return!1}return!0},m=(t,n)=>{if(t.size!==n.size)return!1;for(let[r,o]of t){let e=n.get(r);if(o!==e)return!1}return!0},h=(t,n)=>{if(t.size!==n.size)return!1;for(let r of t)if(!n.has(r))return!1;return!0},l=(t,n)=>{let r=Object.keys(t),o=Object.keys(n);if(r.length!==o.length)return!1;for(let e of r){let T=t[e],y=n[e];if(T!==y)return!1}return!0},E=a;export{w as canCheckSimpleEquality,E as default,p as isArray,x as isEqualArray,m as isEqualMap,l as isEqualObject,h as isEqualSet,u as isMap,k as isSet,a as shallowCompare};
@@ -0,0 +1,12 @@
1
+ "use strict";var o=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var c=(t,e)=>{for(var a in e)o(t,a,{get:e[a],enumerable:!0})},d=(t,e,a,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of g(e))!h.call(t,n)&&n!==a&&o(t,n,{get:()=>e[n],enumerable:!(r=s(e,n))||r.enumerable});return t};var f=t=>d(o({},"__esModule",{value:!0}),t);var l={};c(l,{default:()=>u,throwWrongKeyOnActionCollectionConfig:()=>i});module.exports=f(l);var i=t=>{throw new Error(`[WRONG CONFIGURATION!]: Every key inside the storeActionsConfig must be a higher order function that returns a function
2
+ [${t}]: key is not a valid function, try something like this:
3
+ {
4
+
5
+ ${t}: (param) => ({ setState, getState, setMetadata, getMetadata, actions }) => {
6
+
7
+ setState((state) => ({ ...state, ...param }))
8
+
9
+ }
10
+
11
+ }
12
+ `)},u=i;
@@ -0,0 +1,2 @@
1
+ export declare const throwWrongKeyOnActionCollectionConfig: (action_key: string) => never;
2
+ export default throwWrongKeyOnActionCollectionConfig;
@@ -0,0 +1,12 @@
1
+ "use strict";var o=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var c=(t,e)=>{for(var a in e)o(t,a,{get:e[a],enumerable:!0})},d=(t,e,a,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of g(e))!h.call(t,n)&&n!==a&&o(t,n,{get:()=>e[n],enumerable:!(r=s(e,n))||r.enumerable});return t};var f=t=>d(o({},"__esModule",{value:!0}),t);var l={};c(l,{default:()=>u,throwWrongKeyOnActionCollectionConfig:()=>i});module.exports=f(l);var i=t=>{throw new Error(`[WRONG CONFIGURATION!]: Every key inside the storeActionsConfig must be a higher order function that returns a function
2
+ [${t}]: key is not a valid function, try something like this:
3
+ {
4
+
5
+ ${t}: (param) => ({ setState, getState, setMetadata, getMetadata, actions }) => {
6
+
7
+ setState((state) => ({ ...state, ...param }))
8
+
9
+ }
10
+
11
+ }
12
+ `)},u=i;
@@ -0,0 +1,12 @@
1
+ var e=t=>{throw new Error(`[WRONG CONFIGURATION!]: Every key inside the storeActionsConfig must be a higher order function that returns a function
2
+ [${t}]: key is not a valid function, try something like this:
3
+ {
4
+
5
+ ${t}: (param) => ({ setState, getState, setMetadata, getMetadata, actions }) => {
6
+
7
+ setState((state) => ({ ...state, ...param }))
8
+
9
+ }
10
+
11
+ }
12
+ `)},n=e;export{n as default,e as throwWrongKeyOnActionCollectionConfig};
package/types.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";var n=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var d=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of i(t))!S.call(e,a)&&a!==r&&n(e,a,{get:()=>t[a],enumerable:!(o=s(t,a))||o.enumerable});return e};var l=e=>d(n({},"__esModule",{value:!0}),e);var c={};module.exports=l(c);