@lunarhue/store 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -99,5 +99,5 @@ function useStoreSelector(builder, selector, compare) {
99
99
  }
100
100
 
101
101
  export { StoreProvider, useLocalStore, useSelector, useStore, useStoreSelector };
102
- //# sourceMappingURL=chunk-IP5Y4BHA.js.map
103
- //# sourceMappingURL=chunk-IP5Y4BHA.js.map
102
+ //# sourceMappingURL=chunk-ALACXQX3.js.map
103
+ //# sourceMappingURL=chunk-ALACXQX3.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react/context.ts","../src/react/provider.tsx","../src/react/use-local-store.ts","../src/react/use-selector.ts","../src/react/use-store.ts","../src/react/use-store-selector.ts"],"names":["useRef","useEffect","useTanStackStore"],"mappings":"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","file":"chunk-IP5Y4BHA.js","sourcesContent":["import { createContext, type Context } from 'react'\n\nimport type { Store, StoreBuilder } from '../core'\n\nexport type StoreContext<TState, TPlugins> = Context<\n Store<TState, TPlugins> | undefined\n>\n\nconst contextMap = new WeakMap<StoreBuilder<any, any>, StoreContext<any, any>>()\n\nexport function getStoreContext<TState, TPlugins>(\n builder: StoreBuilder<TState, TPlugins>,\n): StoreContext<TState, TPlugins> {\n let context = contextMap.get(builder)\n\n if (!context) {\n context = createContext<Store<TState, TPlugins> | undefined>(undefined)\n contextMap.set(builder, context)\n }\n\n return context\n}\n","import { useEffect, useRef, type ReactNode } from 'react'\n\nimport { getStoreBuilder } from '../core/builder-registry'\nimport { getStoreContext } from './context'\n\nimport type { Store, StoreBuilder } from '../core'\n\ntype StoreProviderChildren<TState, TPlugins> =\n | ReactNode\n | ((args: { store: Store<TState, TPlugins> }) => ReactNode)\n\ntype BuilderProviderProps<TState, TPlugins> = {\n builder: StoreBuilder<TState, TPlugins>\n children?: StoreProviderChildren<TState, TPlugins>\n store?: never\n}\n\ntype StoreProviderProps<TState, TPlugins> = {\n builder?: never\n children?: StoreProviderChildren<TState, TPlugins>\n store: Store<TState, TPlugins>\n}\n\nexport type ProviderProps<TState, TPlugins> =\n | BuilderProviderProps<TState, TPlugins>\n | StoreProviderProps<TState, TPlugins>\n\nexport function StoreProvider<TState, TPlugins>(\n props: ProviderProps<TState, TPlugins>,\n) {\n if (props.builder !== undefined) {\n return (\n <BuilderOwnedStoreProvider builder={props.builder}>\n {props.children}\n </BuilderOwnedStoreProvider>\n )\n }\n\n return (\n <ExternalStoreProvider store={props.store}>\n {props.children}\n </ExternalStoreProvider>\n )\n}\n\nfunction BuilderOwnedStoreProvider<TState, TPlugins>({\n builder,\n children,\n}: BuilderProviderProps<TState, TPlugins>) {\n const context = getStoreContext(builder)\n const builderRef = useRef<StoreBuilder<TState, TPlugins> | null>(null)\n const storeRef = useRef<Store<TState, TPlugins> | null>(null)\n\n if (!builderRef.current) {\n builderRef.current = builder\n } else if (builderRef.current !== builder) {\n throw new Error('StoreProvider builder prop must remain stable.')\n }\n\n if (!storeRef.current) {\n storeRef.current = builder.create()\n }\n\n useEffect(() => {\n const ownedStore = storeRef.current\n\n return () => {\n if (!ownedStore) {\n return\n }\n\n void ownedStore.dispose()\n }\n }, [])\n\n const content =\n typeof children === 'function'\n ? children({ store: storeRef.current })\n : children\n\n return <context.Provider value={storeRef.current}>{content}</context.Provider>\n}\n\nfunction ExternalStoreProvider<TState, TPlugins>({\n children,\n store,\n}: StoreProviderProps<TState, TPlugins>) {\n const builder = getStoreBuilder(store)\n\n if (!builder) {\n throw new Error(\n 'StoreProvider could not resolve a builder for the provided store. Pass a store created by @lunarhue/store.',\n )\n }\n\n const context = getStoreContext(builder)\n const content = typeof children === 'function' ? children({ store }) : children\n\n return <context.Provider value={store}>{content}</context.Provider>\n}\n","import { useEffect, useRef } from 'react'\n\nimport type { Store, StoreBuilder } from '../core'\n\nexport function useLocalStore<TState, TPlugins>(\n builder: StoreBuilder<TState, TPlugins>,\n): Store<TState, TPlugins> {\n const localStoreRef = useRef<Store<TState, TPlugins> | null>(null)\n\n if (!localStoreRef.current) {\n localStoreRef.current = builder.create()\n }\n\n useEffect(() => {\n const localStore = localStoreRef.current\n\n return () => {\n if (!localStore) {\n return\n }\n\n void localStore.dispose()\n }\n }, [])\n\n return localStoreRef.current\n}\n","import { useStore as useTanStackStore } from '@tanstack/react-store'\n\nimport type { AnyStore, StoreState, TanStackStore } from '../core'\n\nexport function useSelector<\n TStore extends AnyStore,\n TSelected,\n TState extends StoreState<TStore>,\n>(\n store: TStore,\n selector: (snapshot: TState) => TSelected,\n compare?: (a: TSelected, b: TSelected) => boolean,\n): TSelected {\n return useTanStackStore<TanStackStore<TState>, TSelected>(\n store as TanStackStore<TState>,\n selector,\n compare,\n )\n}\n","import { useContext } from 'react'\n\nimport { getStoreContext } from './context'\n\nimport type { Store, StoreBuilder } from '../core'\n\nexport function useStore<TState, TPlugins>(\n builder: StoreBuilder<TState, TPlugins>,\n): Store<TState, TPlugins> {\n const contextValue = useContext(getStoreContext(builder))\n\n if (!contextValue) {\n throw new Error(\n 'useStore(builder) requires a matching <StoreProvider builder={...}> or <StoreProvider store={...}> ancestor.',\n )\n }\n\n return contextValue\n}\n","import { useStore } from './use-store'\nimport { useSelector } from './use-selector'\n\nimport type { StoreBuilder, StoreState } from '../core'\n\nexport function useStoreSelector<\n TState,\n TPlugins,\n TSelected,\n TBuilder extends StoreBuilder<TState, TPlugins>,\n>(\n builder: TBuilder,\n selector: (snapshot: StoreState<ReturnType<TBuilder['create']>>) => TSelected,\n compare?: (a: TSelected, b: TSelected) => boolean,\n): TSelected {\n const store = useStore(builder)\n\n return useSelector(store, selector, compare)\n}\n"]}
1
+ {"version":3,"sources":["../src/react/context.ts","../src/react/provider.tsx","../src/react/use-local-store.ts","../src/react/use-selector.ts","../src/react/use-store.ts","../src/react/use-store-selector.ts"],"names":["useRef","useEffect","useTanStackStore"],"mappings":"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","file":"chunk-ALACXQX3.js","sourcesContent":["import { createContext, type Context } from 'react'\n\nimport type { Store, StoreBuilder } from '../core'\n\nexport type StoreContext<TState, TPlugins> = Context<\n Store<TState, TPlugins> | undefined\n>\n\nconst contextMap = new WeakMap<StoreBuilder<any, any>, StoreContext<any, any>>()\n\nexport function getStoreContext<TState, TPlugins>(\n builder: StoreBuilder<TState, TPlugins>,\n): StoreContext<TState, TPlugins> {\n let context = contextMap.get(builder)\n\n if (!context) {\n context = createContext<Store<TState, TPlugins> | undefined>(undefined)\n contextMap.set(builder, context)\n }\n\n return context\n}\n","import { useEffect, useRef, type ReactNode } from 'react'\n\nimport { getStoreBuilder } from '../core/builder-registry'\nimport { getStoreContext } from './context'\n\nimport type { Store, StoreBuilder } from '../core'\n\ntype StoreProviderChildren<TState, TPlugins> =\n | ReactNode\n | ((args: { store: Store<TState, TPlugins> }) => ReactNode)\n\ntype BuilderProviderProps<TState, TPlugins> = {\n builder: StoreBuilder<TState, TPlugins>\n children?: StoreProviderChildren<TState, TPlugins>\n store?: never\n}\n\ntype StoreProviderProps<TState, TPlugins> = {\n builder?: never\n children?: StoreProviderChildren<TState, TPlugins>\n store: Store<TState, TPlugins>\n}\n\nexport type ProviderProps<TState, TPlugins> =\n | BuilderProviderProps<TState, TPlugins>\n | StoreProviderProps<TState, TPlugins>\n\nexport function StoreProvider<TState, TPlugins>(\n props: ProviderProps<TState, TPlugins>,\n) {\n if (props.builder !== undefined) {\n return (\n <BuilderOwnedStoreProvider builder={props.builder}>\n {props.children}\n </BuilderOwnedStoreProvider>\n )\n }\n\n return (\n <ExternalStoreProvider store={props.store}>\n {props.children}\n </ExternalStoreProvider>\n )\n}\n\nfunction BuilderOwnedStoreProvider<TState, TPlugins>({\n builder,\n children,\n}: BuilderProviderProps<TState, TPlugins>) {\n const context = getStoreContext(builder)\n const builderRef = useRef<StoreBuilder<TState, TPlugins> | null>(null)\n const storeRef = useRef<Store<TState, TPlugins> | null>(null)\n\n if (!builderRef.current) {\n builderRef.current = builder\n } else if (builderRef.current !== builder) {\n throw new Error('StoreProvider builder prop must remain stable.')\n }\n\n if (!storeRef.current) {\n storeRef.current = builder.create()\n }\n\n useEffect(() => {\n const ownedStore = storeRef.current\n\n return () => {\n if (!ownedStore) {\n return\n }\n\n void ownedStore.dispose()\n }\n }, [])\n\n const content =\n typeof children === 'function'\n ? children({ store: storeRef.current })\n : children\n\n return <context.Provider value={storeRef.current}>{content}</context.Provider>\n}\n\nfunction ExternalStoreProvider<TState, TPlugins>({\n children,\n store,\n}: StoreProviderProps<TState, TPlugins>) {\n const builder = getStoreBuilder(store)\n\n if (!builder) {\n throw new Error(\n 'StoreProvider could not resolve a builder for the provided store. Pass a store created by @lunarhue/store.',\n )\n }\n\n const context = getStoreContext(builder)\n const content = typeof children === 'function' ? children({ store }) : children\n\n return <context.Provider value={store}>{content}</context.Provider>\n}\n","import { useEffect, useRef } from 'react'\n\nimport type { Store, StoreBuilder } from '../core'\n\nexport function useLocalStore<TState, TPlugins>(\n builder: StoreBuilder<TState, TPlugins>,\n): Store<TState, TPlugins> {\n const localStoreRef = useRef<Store<TState, TPlugins> | null>(null)\n\n if (!localStoreRef.current) {\n localStoreRef.current = builder.create()\n }\n\n useEffect(() => {\n const localStore = localStoreRef.current\n\n return () => {\n if (!localStore) {\n return\n }\n\n void localStore.dispose()\n }\n }, [])\n\n return localStoreRef.current\n}\n","import { useStore as useTanStackStore } from '@tanstack/react-store'\nimport type { Store as BaseStore } from '@tanstack/store'\n\nimport type { Store, StoreState } from '../core'\n\nexport function useSelector<\n TStore extends Store<any, any>,\n TSelected,\n TState extends StoreState<TStore>,\n>(\n store: TStore,\n selector: (snapshot: TState) => TSelected,\n compare?: (a: TSelected, b: TSelected) => boolean,\n): TSelected {\n return useTanStackStore<BaseStore<TState>, TSelected>(\n store as BaseStore<TState>,\n selector,\n compare,\n )\n}\n","import { useContext } from 'react'\n\nimport { getStoreContext } from './context'\n\nimport type { Store, StoreBuilder } from '../core'\n\nexport function useStore<TState, TPlugins>(\n builder: StoreBuilder<TState, TPlugins>,\n): Store<TState, TPlugins> {\n const contextValue = useContext(getStoreContext(builder))\n\n if (!contextValue) {\n throw new Error(\n 'useStore(builder) requires a matching <StoreProvider builder={...}> or <StoreProvider store={...}> ancestor.',\n )\n }\n\n return contextValue\n}\n","import { useStore } from './use-store'\nimport { useSelector } from './use-selector'\n\nimport type { StoreBuilder, StoreState } from '../core'\n\nexport function useStoreSelector<\n TState,\n TPlugins,\n TSelected,\n TBuilder extends StoreBuilder<TState, TPlugins>,\n>(\n builder: TBuilder,\n selector: (snapshot: StoreState<ReturnType<TBuilder['create']>>) => TSelected,\n compare?: (a: TSelected, b: TSelected) => boolean,\n): TSelected {\n const store = useStore(builder)\n\n return useSelector(store, selector, compare)\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { S as StoreBuilder } from '../types-ByMGdUb-.js';
2
- export { A as AnyStore, a as Store, b as StoreBrand, c as StoreCleanup, d as StorePlugin, e as StorePluginContext, f as StorePlugins, g as StoreState, T as TanStackStore } from '../types-ByMGdUb-.js';
1
+ import { S as StoreBuilder } from '../types-BfzW2j9T.js';
2
+ export { a as Store, b as StoreCleanup, c as StorePlugin, d as StorePluginContext, e as StoreState } from '../types-BfzW2j9T.js';
3
3
  import '@tanstack/store';
4
4
 
5
5
  declare function createStore<TState>(initialState: TState): StoreBuilder<TState>;
@@ -1,22 +1,17 @@
1
- import { b as StoreBrand, d as StorePlugin, a as Store } from '../../types-ByMGdUb-.js';
1
+ import { c as StorePlugin, a as Store } from '../../types-BfzW2j9T.js';
2
2
  import '@tanstack/store';
3
3
 
4
- declare const actionsBrand: unique symbol;
5
- declare const actionDefinitionBrand: unique symbol;
6
- declare const bindActionDefinition: unique symbol;
7
- type ActionsBrand = StoreBrand<typeof actionsBrand>;
8
- type ActionsPluginSurface<TState, TActions> = {
4
+ type ActionsStoreSurface<TState, TActions> = {
9
5
  readonly actions: BoundActions<TState, TActions>;
10
- } & ActionsBrand;
11
- type ActionsPlugin<TState, TActions> = StorePlugin<TState, any, ActionsPluginSurface<TState, TActions>>;
6
+ };
7
+ type ActionsPlugin<TState, TActions> = StorePlugin<TState, any, ActionsStoreSurface<TState, TActions>>;
12
8
  type ActionsBuilderHelpers<TState> = {
13
9
  getState: () => TState;
14
10
  setState: (updater: (prev: TState) => TState) => void;
15
11
  };
16
12
  type ActionCallback<TState, TArgs extends unknown[] = [], TReturn = void> = (helpers: ActionsBuilderHelpers<TState>, ...args: TArgs) => TReturn;
17
13
  type ActionDefinition<TState, TArgs extends unknown[] = [], TReturn = void> = {
18
- readonly [actionDefinitionBrand]: true;
19
- readonly [bindActionDefinition]: (helpers: ActionsBuilderHelpers<TState>) => (...args: TArgs) => TReturn;
14
+ readonly __actionDefinition: (helpers: ActionsBuilderHelpers<TState>, ...args: TArgs) => TReturn;
20
15
  };
21
16
  type BoundActions<TState, TActions> = {
22
17
  [TKey in keyof TActions]: TActions[TKey] extends ActionDefinition<TState, infer TArgs, infer TReturn> ? (...args: TArgs) => TReturn : TActions[TKey];
@@ -28,6 +23,6 @@ declare function actions<TState, TActions>(builder: (helpers: {
28
23
  setState: (updater: (prev: TState) => TState) => void;
29
24
  }) => TActions): ActionsPlugin<TState, TActions>;
30
25
 
31
- declare function useActions<TState, TActions>(store: Store<TState, ActionsPluginSurface<TState, TActions>>): ActionsPluginSurface<TState, TActions>['actions'];
26
+ declare function useActions<TState, TActions>(store: Store<TState, ActionsStoreSurface<TState, TActions>>): ActionsStoreSurface<TState, TActions>['actions'];
32
27
 
33
- export { type ActionCallback, type ActionDefinition, type ActionsBrand, type ActionsBuilderHelpers, type ActionsPluginSurface, type BoundActions, actionDefinitionBrand, actions, actionsBrand, createAction, useActions };
28
+ export { actions, createAction, useActions };
@@ -1,5 +1,4 @@
1
1
  // src/plugins/actions/types.ts
2
- var actionsBrand = /* @__PURE__ */ Symbol("lunarhue.store.actions");
3
2
  var actionDefinitionBrand = /* @__PURE__ */ Symbol("lunarhue.store.actionDefinition");
4
3
  var bindActionDefinition = /* @__PURE__ */ Symbol("lunarhue.store.bindActionDefinition");
5
4
 
@@ -30,7 +29,6 @@ function actions(builder) {
30
29
  setState: (updater) => store.setState(updater)
31
30
  };
32
31
  return {
33
- [actionsBrand]: true,
34
32
  actions: bindActions(builder(helpers), helpers)
35
33
  };
36
34
  };
@@ -41,6 +39,6 @@ function useActions(store) {
41
39
  return store.actions;
42
40
  }
43
41
 
44
- export { actionDefinitionBrand, actions, actionsBrand, createAction, useActions };
42
+ export { actions, createAction, useActions };
45
43
  //# sourceMappingURL=index.js.map
46
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/actions/types.ts","../../../src/plugins/actions/plugin.ts","../../../src/plugins/actions/react.tsx"],"names":[],"mappings":";AAEO,IAAM,YAAA,0BAAsB,wBAAwB;AACpD,IAAM,qBAAA,0BAA+B,iCAAiC;AACtE,IAAM,oBAAA,0BAA8B,qCAAqC,CAAA;;;ACUhF,SAAS,mBACP,KAAA,EACuD;AACvD,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,UAAU,IAAA,IACV,qBAAA,IAAyB,SACzB,oBAAA,IAAwB,KAAA;AAE5B;AAEA,SAAS,WAAA,CACP,iBACA,OAAA,EACgC;AAChC,EAAA,MAAM,eAAe,EAAC;AAEtB,EAAA,KAAA,MAAW,GAAA,IAAO,OAAA,CAAQ,OAAA,CAAQ,eAAyB,CAAA,EAExD;AACD,IAAA,MAAM,MAAA,GAAS,gBAAgB,GAAG,CAAA;AAElC,IAAA,YAAA,CAAa,GAAG,IACd,kBAAA,CAA2B,MAAM,IAC7B,MAAA,CAAO,oBAAoB,CAAA,CAAE,OAAO,CAAA,GACpC,MAAA;AAAA,EAER;AAEA,EAAA,OAAO,YAAA;AACT;AAEO,SAAS,aAKd,QAAA,EAC0C;AAC1C,EAAA,OAAO;AAAA,IACL,CAAC,qBAAqB,GAAG,IAAA;AAAA,IACzB,CAAC,oBAAoB,CAAA,CAAE,OAAA,EAAS;AAC9B,MAAA,OAAO,CAAA,GAAI,IAAA,KAAS,QAAA,CAAS,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,IAC/C;AAAA,GACF;AACF;AAEO,SAAS,QACd,OAAA,EAIiC;AACjC,EAAA,OAAO,CAAC,EAAE,KAAA,EAAM,KAAM;AACpB,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,QAAA,EAAU,MAAM,KAAA,CAAM,GAAA,EAAI;AAAA,MAC1B,QAAA,EAAU,CAAC,OAAA,KAAsC,KAAA,CAAM,SAAS,OAAO;AAAA,KACzE;AAEA,IAAA,OAAO;AAAA,MACL,CAAC,YAAY,GAAG,IAAA;AAAA,MAChB,OAAA,EAAS,WAAA,CAAY,OAAA,CAAQ,OAAO,GAAG,OAAO;AAAA,KAChD;AAAA,EACF,CAAA;AACF;;;AC1EO,SAAS,WACd,KAAA,EACmD;AACnD,EAAA,OAAO,KAAA,CAAM,OAAA;AACf","file":"index.js","sourcesContent":["import type { StoreBrand, StorePlugin } from '../../core'\n\nexport const actionsBrand = Symbol('lunarhue.store.actions')\nexport const actionDefinitionBrand = Symbol('lunarhue.store.actionDefinition')\nexport const bindActionDefinition = Symbol('lunarhue.store.bindActionDefinition')\n\nexport type ActionsBrand = StoreBrand<typeof actionsBrand>\n\nexport type ActionsPluginSurface<TState, TActions> = {\n readonly actions: BoundActions<TState, TActions>\n} & ActionsBrand\n\nexport type ActionsPlugin<TState, TActions> = StorePlugin<\n TState,\n any,\n ActionsPluginSurface<TState, TActions>\n>\n\nexport type ActionsBuilderHelpers<TState> = {\n getState: () => TState\n setState: (updater: (prev: TState) => TState) => void\n}\n\nexport type ActionCallback<\n TState,\n TArgs extends unknown[] = [],\n TReturn = void,\n> = (\n helpers: ActionsBuilderHelpers<TState>,\n ...args: TArgs\n) => TReturn\n\nexport type ActionDefinition<\n TState,\n TArgs extends unknown[] = [],\n TReturn = void,\n> = {\n readonly [actionDefinitionBrand]: true\n readonly [bindActionDefinition]: (\n helpers: ActionsBuilderHelpers<TState>,\n ) => (...args: TArgs) => TReturn\n}\n\nexport type BoundActions<TState, TActions> = {\n [TKey in keyof TActions]: TActions[TKey] extends ActionDefinition<\n TState,\n infer TArgs,\n infer TReturn\n >\n ? (...args: TArgs) => TReturn\n : TActions[TKey]\n}\n","import {\n actionDefinitionBrand,\n actionsBrand,\n bindActionDefinition,\n} from './types'\n\nimport type {\n ActionCallback,\n ActionDefinition,\n ActionsBuilderHelpers,\n ActionsPlugin,\n BoundActions,\n} from './types'\n\nfunction isActionDefinition<TState>(\n value: unknown,\n): value is ActionDefinition<TState, unknown[], unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n actionDefinitionBrand in value &&\n bindActionDefinition in value\n )\n}\n\nfunction bindActions<TState, TActions>(\n declaredActions: TActions,\n helpers: ActionsBuilderHelpers<TState>,\n): BoundActions<TState, TActions> {\n const boundActions = {} as BoundActions<TState, TActions>\n\n for (const key of Reflect.ownKeys(declaredActions as object) as Array<\n keyof TActions\n >) {\n const action = declaredActions[key]\n\n boundActions[key] = (\n isActionDefinition<TState>(action)\n ? action[bindActionDefinition](helpers)\n : action\n ) as BoundActions<TState, TActions>[typeof key]\n }\n\n return boundActions\n}\n\nexport function createAction<\n TState,\n TArgs extends unknown[] = [],\n TReturn = void,\n>(\n callback: ActionCallback<TState, TArgs, TReturn>,\n): ActionDefinition<TState, TArgs, TReturn> {\n return {\n [actionDefinitionBrand]: true,\n [bindActionDefinition](helpers) {\n return (...args) => callback(helpers, ...args)\n },\n }\n}\n\nexport function actions<TState, TActions>(\n builder: (helpers: {\n getState: () => TState\n setState: (updater: (prev: TState) => TState) => void\n }) => TActions,\n): ActionsPlugin<TState, TActions> {\n return ({ store }) => {\n const helpers = {\n getState: () => store.get(),\n setState: (updater: (prev: TState) => TState) => store.setState(updater),\n }\n\n return {\n [actionsBrand]: true,\n actions: bindActions(builder(helpers), helpers),\n }\n }\n}\n","import type { Store } from '../../core'\n\nimport type { ActionsPluginSurface } from './types'\n\nexport function useActions<TState, TActions>(\n store: Store<TState, ActionsPluginSurface<TState, TActions>>,\n): ActionsPluginSurface<TState, TActions>['actions'] {\n return store.actions\n}\n"]}
1
+ {"version":3,"sources":["../../../src/plugins/actions/types.ts","../../../src/plugins/actions/plugin.ts","../../../src/plugins/actions/react.tsx"],"names":[],"mappings":";AAEO,IAAM,qBAAA,0BAA+B,iCAAiC,CAAA;AACtE,IAAM,oBAAA,0BAA8B,qCAAqC,CAAA;;;ACWhF,SAAS,mBACP,KAAA,EAC+D;AAC/D,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,UAAU,IAAA,IACV,qBAAA,IAAyB,SACzB,oBAAA,IAAwB,KAAA;AAE5B;AAEA,SAAS,WAAA,CACP,iBACA,OAAA,EACgC;AAChC,EAAA,MAAM,eAAe,EAAC;AAEtB,EAAA,KAAA,MAAW,GAAA,IAAO,OAAA,CAAQ,OAAA,CAAQ,eAAyB,CAAA,EAExD;AACD,IAAA,MAAM,MAAA,GAAS,gBAAgB,GAAG,CAAA;AAElC,IAAA,YAAA,CAAa,GAAG,IACd,kBAAA,CAA2B,MAAM,IAC7B,MAAA,CAAO,oBAAoB,CAAA,CAAE,OAAO,CAAA,GACpC,MAAA;AAAA,EAER;AAEA,EAAA,OAAO,YAAA;AACT;AAEO,SAAS,aAKd,QAAA,EAC0C;AAC1C,EAAA,OAAO;AAAA,IACL,CAAC,qBAAqB,GAAG,IAAA;AAAA,IACzB,CAAC,oBAAoB,CAAA,CAAE,OAAA,EAAS;AAC9B,MAAA,OAAO,CAAA,GAAI,IAAA,KAAS,QAAA,CAAS,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,IAC/C;AAAA,GACF;AACF;AAEO,SAAS,QACd,OAAA,EAIiC;AACjC,EAAA,OAAO,CAAC,EAAE,KAAA,EAAM,KAAM;AACpB,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,QAAA,EAAU,MAAM,KAAA,CAAM,GAAA,EAAI;AAAA,MAC1B,QAAA,EAAU,CAAC,OAAA,KAAsC,KAAA,CAAM,SAAS,OAAO;AAAA,KACzE;AAEA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,WAAA,CAAY,OAAA,CAAQ,OAAO,GAAG,OAAO;AAAA,KAChD;AAAA,EACF,CAAA;AACF;;;ACzEO,SAAS,WACd,KAAA,EACkD;AAClD,EAAA,OAAO,KAAA,CAAM,OAAA;AACf","file":"index.js","sourcesContent":["import type { StorePlugin } from '../../core'\n\nexport const actionDefinitionBrand = Symbol('lunarhue.store.actionDefinition')\nexport const bindActionDefinition = Symbol('lunarhue.store.bindActionDefinition')\n\nexport type ActionsStoreSurface<TState, TActions> = {\n readonly actions: BoundActions<TState, TActions>\n}\n\nexport type ActionsPlugin<TState, TActions> = StorePlugin<\n TState,\n any,\n ActionsStoreSurface<TState, TActions>\n>\n\nexport type ActionsBuilderHelpers<TState> = {\n getState: () => TState\n setState: (updater: (prev: TState) => TState) => void\n}\n\nexport type ActionCallback<\n TState,\n TArgs extends unknown[] = [],\n TReturn = void,\n> = (\n helpers: ActionsBuilderHelpers<TState>,\n ...args: TArgs\n) => TReturn\n\nexport type ActionDefinition<\n TState,\n TArgs extends unknown[] = [],\n TReturn = void,\n> = {\n readonly __actionDefinition: (\n helpers: ActionsBuilderHelpers<TState>,\n ...args: TArgs\n ) => TReturn\n}\n\nexport type BoundActions<TState, TActions> = {\n [TKey in keyof TActions]: TActions[TKey] extends ActionDefinition<\n TState,\n infer TArgs,\n infer TReturn\n >\n ? (...args: TArgs) => TReturn\n : TActions[TKey]\n}\n\nexport type InternalActionDefinition<\n TState,\n TArgs extends unknown[] = [],\n TReturn = void,\n> = ActionDefinition<TState, TArgs, TReturn> & {\n readonly [actionDefinitionBrand]: true\n readonly [bindActionDefinition]: (\n helpers: ActionsBuilderHelpers<TState>,\n ) => (...args: TArgs) => TReturn\n}\n","import {\n actionDefinitionBrand,\n bindActionDefinition,\n} from './types'\n\nimport type {\n ActionCallback,\n ActionDefinition,\n ActionsBuilderHelpers,\n ActionsPlugin,\n BoundActions,\n InternalActionDefinition,\n} from './types'\n\nfunction isActionDefinition<TState>(\n value: unknown,\n): value is InternalActionDefinition<TState, unknown[], unknown> {\n return (\n typeof value === 'object' &&\n value !== null &&\n actionDefinitionBrand in value &&\n bindActionDefinition in value\n )\n}\n\nfunction bindActions<TState, TActions>(\n declaredActions: TActions,\n helpers: ActionsBuilderHelpers<TState>,\n): BoundActions<TState, TActions> {\n const boundActions = {} as BoundActions<TState, TActions>\n\n for (const key of Reflect.ownKeys(declaredActions as object) as Array<\n keyof TActions\n >) {\n const action = declaredActions[key]\n\n boundActions[key] = (\n isActionDefinition<TState>(action)\n ? action[bindActionDefinition](helpers)\n : action\n ) as BoundActions<TState, TActions>[typeof key]\n }\n\n return boundActions\n}\n\nexport function createAction<\n TState,\n TArgs extends unknown[] = [],\n TReturn = void,\n>(\n callback: ActionCallback<TState, TArgs, TReturn>,\n): ActionDefinition<TState, TArgs, TReturn> {\n return {\n [actionDefinitionBrand]: true,\n [bindActionDefinition](helpers) {\n return (...args) => callback(helpers, ...args)\n },\n } as InternalActionDefinition<TState, TArgs, TReturn>\n}\n\nexport function actions<TState, TActions>(\n builder: (helpers: {\n getState: () => TState\n setState: (updater: (prev: TState) => TState) => void\n }) => TActions,\n): ActionsPlugin<TState, TActions> {\n return ({ store }) => {\n const helpers = {\n getState: () => store.get(),\n setState: (updater: (prev: TState) => TState) => store.setState(updater),\n }\n\n return {\n actions: bindActions(builder(helpers), helpers),\n }\n }\n}\n","import type { Store } from '../../core'\n\nimport type { ActionsStoreSurface } from './types'\n\nexport function useActions<TState, TActions>(\n store: Store<TState, ActionsStoreSurface<TState, TActions>>,\n): ActionsStoreSurface<TState, TActions>['actions'] {\n return store.actions\n}\n"]}
@@ -1,11 +1,8 @@
1
- import { b as StoreBrand, a as Store, d as StorePlugin, S as StoreBuilder } from '../../types-ByMGdUb-.js';
1
+ import { a as Store, c as StorePlugin, S as StoreBuilder } from '../../types-BfzW2j9T.js';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  import { ReactNode } from 'react';
4
4
  import '@tanstack/store';
5
5
 
6
- declare const persistBrand: unique symbol;
7
- declare const persistControllerKey: unique symbol;
8
- type PersistBrand = StoreBrand<typeof persistBrand>;
9
6
  type PersistMeta = {
10
7
  isHydrated: boolean;
11
8
  pending: boolean;
@@ -34,23 +31,17 @@ type PersistPluginOptions<TState> = {
34
31
  hydratedOnCreate?: boolean;
35
32
  serializeState?: (state: TState) => TState;
36
33
  } & Omit<PersistRuntimeOptions<TState>, 'key'>;
37
- type PersistController<TState> = {
38
- meta: Store<PersistMeta>;
39
- connect(store: PersistedStore<TState>, options: PersistRuntimeOptions<TState>): () => void;
34
+ type PersistRuntimeSurface<TState> = {
40
35
  flush(): Promise<void>;
41
36
  hydrate(nextState: TState): Promise<void>;
37
+ meta: Store<PersistMeta>;
42
38
  };
43
- type PersistPluginSurface<TState> = PersistBrand & {
39
+ type PersistStoreSurface<TState> = {
44
40
  hydrate(nextState: TState): Promise<void>;
45
- persist: {
46
- flush(): Promise<void>;
47
- hydrate(nextState: TState): Promise<void>;
48
- meta: Store<PersistMeta>;
49
- [persistControllerKey]: PersistController<TState>;
50
- };
41
+ persist: PersistRuntimeSurface<TState>;
51
42
  };
52
- type PersistedStore<TState, TPlugins = {}> = Store<TState, TPlugins & PersistPluginSurface<TState>>;
53
- type PersistPlugin<TState> = StorePlugin<TState, any, PersistPluginSurface<TState>>;
43
+ type PersistedStore<TState, TPlugins = {}> = Store<TState, TPlugins & PersistStoreSurface<TState>>;
44
+ type PersistPlugin<TState> = StorePlugin<TState, any, PersistStoreSurface<TState>>;
54
45
 
55
46
  declare function persist<TState>(options?: PersistPluginOptions<TState>): PersistPlugin<TState>;
56
47
 
@@ -60,7 +51,7 @@ type PersistentStoreResult<TState, TPlugins = {}> = {
60
51
  };
61
52
  type PersistStoreProviderChildren<TState, TPlugins> = ReactNode | ((args: PersistentStoreResult<TState, TPlugins>) => ReactNode);
62
53
  type BuilderPersistStoreProviderProps<TState, TPlugins> = {
63
- builder: StoreBuilder<TState, TPlugins & PersistPluginSurface<TState>>;
54
+ builder: StoreBuilder<TState, TPlugins & PersistStoreSurface<TState>>;
64
55
  children?: PersistStoreProviderChildren<TState, TPlugins>;
65
56
  flushOnBackground?: boolean;
66
57
  flushOnPageHide?: boolean;
@@ -89,7 +80,7 @@ type PersistenceBoundaryProps<TState> = {
89
80
  flushOnBackground?: boolean;
90
81
  children?: ReactNode;
91
82
  };
92
- declare function usePersistentStore<TState, TPlugins>(builder: StoreBuilder<TState, TPlugins & PersistPluginSurface<TState>>): PersistentStoreResult<TState, TPlugins>;
83
+ declare function usePersistentStore<TState, TPlugins>(builder: StoreBuilder<TState, TPlugins & PersistStoreSurface<TState>>): PersistentStoreResult<TState, TPlugins>;
93
84
  declare function PersistStoreProvider<TState, TPlugins = {}>(props: PersistStoreProviderProps<TState, TPlugins>): react_jsx_runtime.JSX.Element;
94
85
  /**
95
86
  * @deprecated Prefer PersistStoreProvider flush options. This boundary remains
@@ -97,4 +88,4 @@ declare function PersistStoreProvider<TState, TPlugins = {}>(props: PersistStore
97
88
  */
98
89
  declare function PersistenceBoundary<TState>({ children, flushOnBackground, flushOnPageHide, flushOnUnmount, store, }: PersistenceBoundaryProps<TState>): react_jsx_runtime.JSX.Element;
99
90
 
100
- export { type PersistBrand, type PersistController, type PersistHydrateArgs, type PersistMeta, type PersistPersistArgs, type PersistPluginOptions, type PersistPluginSurface, type PersistRuntimeOptions, PersistStoreProvider, type PersistStoreProviderProps, type PersistedStore, PersistenceBoundary, type PersistenceBoundaryProps, type PersistentStoreResult, persist, persistBrand, usePersistentStore };
91
+ export { type PersistHydrateArgs, type PersistMeta, type PersistPersistArgs, type PersistPluginOptions, type PersistRuntimeOptions, PersistStoreProvider, type PersistStoreProviderProps, type PersistedStore, PersistenceBoundary, type PersistenceBoundaryProps, type PersistentStoreResult, persist, usePersistentStore };
@@ -1,5 +1,5 @@
1
1
  import { createStoreInstance } from '../../chunk-MIBJNMOV.js';
2
- import { StoreProvider } from '../../chunk-IP5Y4BHA.js';
2
+ import { StoreProvider } from '../../chunk-ALACXQX3.js';
3
3
  import { getStoreBuilder } from '../../chunk-PCSRXZL4.js';
4
4
  import { useContext, createContext, useEffect, useEffectEvent } from 'react';
5
5
  import { jsx, Fragment } from 'react/jsx-runtime';
@@ -216,7 +216,6 @@ function createPersistController(store, pluginOptions) {
216
216
  }
217
217
 
218
218
  // src/plugins/persist/types.ts
219
- var persistBrand = /* @__PURE__ */ Symbol("lunarhue.store.persist");
220
219
  var persistControllerKey = /* @__PURE__ */ Symbol("lunarhue.store.persist.controller");
221
220
 
222
221
  // src/plugins/persist/plugin.ts
@@ -229,7 +228,6 @@ function persist(options) {
229
228
  });
230
229
  }
231
230
  return {
232
- [persistBrand]: true,
233
231
  hydrate(nextState) {
234
232
  return controller.hydrate(nextState);
235
233
  },
@@ -403,6 +401,6 @@ function PersistenceBoundary({
403
401
  return /* @__PURE__ */ jsx(Fragment, { children });
404
402
  }
405
403
 
406
- export { PersistStoreProvider, PersistenceBoundary, persist, persistBrand, usePersistentStore };
404
+ export { PersistStoreProvider, PersistenceBoundary, persist, usePersistentStore };
407
405
  //# sourceMappingURL=index.js.map
408
406
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/persist/controller.ts","../../../src/plugins/persist/types.ts","../../../src/plugins/persist/plugin.ts","../../../src/plugins/persist/react.tsx"],"names":["persist"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n PersistController,\n PersistMeta,\n PersistPluginOptions,\n PersistRuntimeOptions,\n PersistedStore,\n} from './types'\nimport type { Store } from '../../core'\nimport { createStoreInstance } from '../../core/store-instance'\n\nconst DEFAULT_META: PersistMeta = {\n isHydrated: false,\n pending: false,\n persisting: false,\n lastPersistedAt: null,\n error: null,\n}\n\nlet nextGeneratedPersistKeyId = 0\n\nfunction getInitialMeta<TState>(\n options?: PersistPluginOptions<TState>,\n): PersistMeta {\n return {\n ...DEFAULT_META,\n isHydrated: options?.hydratedOnCreate ?? false,\n }\n}\n\ntype RuntimeOptions<TState> = Required<\n Omit<PersistRuntimeOptions<TState>, 'hydrate'>\n> & {\n hydrate?: PersistRuntimeOptions<TState>['hydrate']\n}\n\nexport function createPersistController<TState>(\n store: Store<TState>,\n pluginOptions?: PersistPluginOptions<TState>,\n): PersistController<TState> {\n const meta = createStoreInstance(getInitialMeta(pluginOptions)).store\n const fallbackKey = `persist:${++nextGeneratedPersistKeyId}`\n let runtimeOptions: RuntimeOptions<TState> | null = null\n let subscription: { unsubscribe(): void } | null = null\n let timer: ReturnType<typeof setTimeout> | null = null\n let queuedTransition: {\n previousState: TState\n nextState: TState\n } | null = null\n let lastObservedState = store.get()\n let currentKey: string | null = null\n let currentFlushPromise: Promise<void> | null = null\n let hydrating = false\n let isConnected = false\n let hasRequestedHydrationForKey = false\n\n const resolveKey = (key?: string) => key ?? fallbackKey\n\n const clearTimer = () => {\n if (!timer) {\n return\n }\n\n clearTimeout(timer)\n timer = null\n }\n\n const updateMeta = (updater: (prev: PersistMeta) => PersistMeta) => {\n meta.setState(updater)\n }\n\n const resolveRuntimeOptions = (\n options: PersistRuntimeOptions<TState>,\n ): RuntimeOptions<TState> => {\n const onPersist = options.onPersist ?? pluginOptions?.onPersist\n\n if (!onPersist) {\n throw new Error(\n 'Persist runtime requires onPersist to be provided either in persist(...) or at runtime.',\n )\n }\n\n return {\n key: resolveKey(options.key),\n enabled: options.enabled ?? pluginOptions?.enabled ?? true,\n delay: options.delay ?? pluginOptions?.delay ?? 0,\n hydrate: options.hydrate ?? pluginOptions?.hydrate,\n onPersist,\n }\n }\n\n const resetForKey = (key: string) => {\n currentKey = key\n queuedTransition = null\n clearTimer()\n hasRequestedHydrationForKey = false\n lastObservedState = store.get()\n meta.setState(() => getInitialMeta(pluginOptions))\n }\n\n const ensureSubscription = () => {\n if (subscription) {\n return\n }\n\n subscription = store.subscribe((nextState) => {\n const previousState = lastObservedState\n lastObservedState = nextState\n\n if (\n hydrating ||\n !isConnected ||\n !runtimeOptions?.enabled ||\n Object.is(previousState, nextState)\n ) {\n return\n }\n\n queuedTransition = queuedTransition\n ? {\n previousState: queuedTransition.previousState,\n nextState,\n }\n : {\n previousState,\n nextState,\n }\n\n updateMeta((prev) => ({\n ...prev,\n pending: true,\n error: null,\n }))\n\n clearTimer()\n timer = setTimeout(() => {\n void flush()\n }, runtimeOptions.delay)\n })\n }\n\n const maybeHydrate = async (\n runtimeStore: PersistedStore<TState>,\n options: RuntimeOptions<TState>,\n ) => {\n if (!options.enabled || hasRequestedHydrationForKey) {\n return\n }\n\n hasRequestedHydrationForKey = true\n\n if (!options.hydrate) {\n updateMeta((prev) => ({\n ...prev,\n isHydrated: true,\n error: null,\n }))\n return\n }\n\n try {\n await options.hydrate({\n key: options.key,\n store: runtimeStore,\n })\n } catch (error) {\n updateMeta((prev) => ({\n ...prev,\n error,\n }))\n throw error\n }\n }\n\n const flush = (): Promise<void> => {\n if (currentFlushPromise) {\n return currentFlushPromise\n }\n\n const runFlush = async () => {\n clearTimer()\n\n while (queuedTransition) {\n if (!runtimeOptions?.enabled) {\n return\n }\n\n const transition = queuedTransition\n queuedTransition = null\n\n updateMeta((prev) => ({\n ...prev,\n pending: false,\n persisting: true,\n error: null,\n }))\n\n try {\n const nextState = pluginOptions?.serializeState\n ? pluginOptions.serializeState(transition.nextState)\n : transition.nextState\n\n await runtimeOptions.onPersist({\n key: resolveKey(runtimeOptions.key),\n previousState: transition.previousState,\n nextState,\n })\n\n updateMeta((prev) => ({\n ...prev,\n persisting: false,\n lastPersistedAt: Date.now(),\n error: null,\n }))\n } catch (error) {\n queuedTransition = transition\n updateMeta((prev) => ({\n ...prev,\n pending: true,\n persisting: false,\n error,\n }))\n throw error\n }\n }\n }\n\n currentFlushPromise = runFlush().finally(() => {\n currentFlushPromise = null\n })\n\n return currentFlushPromise\n }\n\n return {\n meta,\n connect(runtimeStore, options) {\n const resolvedOptions = resolveRuntimeOptions(options)\n runtimeOptions = resolvedOptions\n\n if (currentKey !== resolvedOptions.key) {\n resetForKey(resolvedOptions.key)\n }\n\n isConnected = true\n ensureSubscription()\n void maybeHydrate(runtimeStore, resolvedOptions).catch(() => {})\n\n return () => {\n if (currentKey !== resolvedOptions.key) {\n return\n }\n\n isConnected = false\n clearTimer()\n updateMeta((prev) => ({\n ...prev,\n persisting: false,\n }))\n }\n },\n flush() {\n return flush()\n },\n async hydrate(nextState) {\n clearTimer()\n queuedTransition = null\n hydrating = true\n\n try {\n store.setState(() => nextState)\n lastObservedState = nextState\n updateMeta((prev) => ({\n ...prev,\n isHydrated: true,\n pending: false,\n error: null,\n }))\n } finally {\n hydrating = false\n }\n },\n }\n}\n","import type { Store, StoreBrand, StorePlugin } from '../../core'\n\nexport const persistBrand = Symbol('lunarhue.store.persist')\nexport const persistControllerKey = Symbol('lunarhue.store.persist.controller')\n\nexport type PersistBrand = StoreBrand<typeof persistBrand>\n\nexport type PersistMeta = {\n isHydrated: boolean\n pending: boolean\n persisting: boolean\n lastPersistedAt: number | null\n error: unknown | null\n}\n\nexport type PersistHydrateArgs<TState> = {\n key: string\n store: PersistedStore<TState>\n}\n\nexport type PersistPersistArgs<TState> = {\n key: string\n previousState: TState\n nextState: TState\n}\n\nexport type PersistRuntimeOptions<TState> = {\n key?: string\n enabled?: boolean\n delay?: number\n hydrate?: (args: PersistHydrateArgs<TState>) => Promise<void>\n onPersist?: (args: PersistPersistArgs<TState>) => Promise<void>\n}\n\nexport type PersistPluginOptions<TState> = {\n flushOnDispose?: boolean\n hydratedOnCreate?: boolean\n serializeState?: (state: TState) => TState\n} & Omit<PersistRuntimeOptions<TState>, 'key'>\n\nexport type PersistController<TState> = {\n meta: Store<PersistMeta>\n connect(\n store: PersistedStore<TState>,\n options: PersistRuntimeOptions<TState>,\n ): () => void\n flush(): Promise<void>\n hydrate(nextState: TState): Promise<void>\n}\n\nexport type PersistPluginSurface<TState> = PersistBrand & {\n hydrate(nextState: TState): Promise<void>\n persist: {\n flush(): Promise<void>\n hydrate(nextState: TState): Promise<void>\n meta: Store<PersistMeta>\n [persistControllerKey]: PersistController<TState>\n }\n}\n\nexport type PersistedStore<TState, TPlugins = {}> = Store<\n TState,\n TPlugins & PersistPluginSurface<TState>\n>\n\nexport type PersistPlugin<TState> = StorePlugin<\n TState,\n any,\n PersistPluginSurface<TState>\n>\n","import { createPersistController } from './controller'\nimport { persistBrand, persistControllerKey } from './types'\n\nimport type { PersistPlugin, PersistPluginOptions } from './types'\n\nexport function persist<TState>(\n options?: PersistPluginOptions<TState>,\n): PersistPlugin<TState> {\n return ({ onDispose, store }) => {\n const controller = createPersistController(store, options)\n\n if (options?.flushOnDispose) {\n onDispose(async () => {\n await controller.flush()\n })\n }\n\n return {\n [persistBrand]: true,\n hydrate(nextState: TState) {\n return controller.hydrate(nextState)\n },\n persist: {\n flush() {\n return controller.flush()\n },\n hydrate(nextState: TState) {\n return controller.hydrate(nextState)\n },\n meta: controller.meta,\n [persistControllerKey]: controller,\n },\n }\n }\n}\n","import {\n createContext,\n type Context,\n type ReactNode,\n useContext,\n useEffect,\n useEffectEvent,\n} from 'react'\n\nimport type { StoreBuilder } from '../../core'\nimport { getStoreBuilder } from '../../core/builder-registry'\nimport { StoreProvider, useSelector } from '../../react'\n\nimport {\n persistControllerKey,\n type PersistHydrateArgs,\n type PersistMeta,\n type PersistPersistArgs,\n type PersistPluginSurface,\n type PersistRuntimeOptions,\n type PersistedStore,\n} from './types'\n\nexport type PersistentStoreResult<TState, TPlugins = {}> = {\n store: PersistedStore<TState, TPlugins>\n flush(): Promise<void>\n}\n\ntype PersistStoreContext<TState, TPlugins> = Context<\n PersistentStoreResult<TState, TPlugins> | undefined\n>\n\nconst persistContextMap = new WeakMap<\n StoreBuilder<any, any>,\n PersistStoreContext<any, any>\n>()\n\ntype PersistStoreProviderChildren<TState, TPlugins> =\n | ReactNode\n | ((args: PersistentStoreResult<TState, TPlugins>) => ReactNode)\n\ntype BuilderPersistStoreProviderProps<TState, TPlugins> = {\n builder: StoreBuilder<TState, TPlugins & PersistPluginSurface<TState>>\n children?: PersistStoreProviderChildren<TState, TPlugins>\n flushOnBackground?: boolean\n flushOnPageHide?: boolean\n flushOnUnmount?: boolean\n persist?: PersistRuntimeOptions<TState>\n store?: never\n}\n\ntype ExternalPersistStoreProviderProps<TState, TPlugins> = {\n builder?: never\n children?: PersistStoreProviderChildren<TState, TPlugins>\n flushOnBackground?: boolean\n flushOnPageHide?: boolean\n flushOnUnmount?: boolean\n persist?: PersistRuntimeOptions<TState>\n store: PersistedStore<TState, TPlugins>\n}\n\nexport type PersistStoreProviderProps<TState, TPlugins = {}> =\n | BuilderPersistStoreProviderProps<TState, TPlugins>\n | ExternalPersistStoreProviderProps<TState, TPlugins>\n\n/**\n * @deprecated Prefer PersistStoreProvider flush options. This boundary remains\n * as a compatibility escape hatch for sub-tree flush behavior.\n */\nexport type PersistenceBoundaryProps<TState> = {\n store: PersistedStore<TState>\n flushOnUnmount?: boolean\n flushOnPageHide?: boolean\n flushOnBackground?: boolean\n children?: ReactNode\n}\n\ntype PersistenceBoundaryOptions = {\n flushOnBackground?: boolean\n flushOnPageHide?: boolean\n flushOnUnmount?: boolean\n}\n\nfunction getPersistStoreContext<TState, TPlugins>(\n builder: StoreBuilder<TState, TPlugins & PersistPluginSurface<TState>>,\n): PersistStoreContext<TState, TPlugins> {\n let context = persistContextMap.get(builder)\n\n if (!context) {\n context = createContext<\n PersistentStoreResult<TState, TPlugins> | undefined\n >(undefined)\n persistContextMap.set(builder, context)\n }\n\n return context\n}\n\nfunction usePersistentRuntime<TState, TPlugins = {}>(\n store: PersistedStore<TState, TPlugins>,\n options: PersistRuntimeOptions<TState>,\n): PersistentStoreResult<TState, TPlugins> {\n const onPersist = useEffectEvent(async (args: PersistPersistArgs<TState>) => {\n if (!options.onPersist) {\n return\n }\n\n await options.onPersist(args)\n })\n const hydrate = useEffectEvent(async (args: PersistHydrateArgs<TState>) => {\n if (!options.hydrate) {\n return\n }\n\n await options.hydrate(args)\n })\n\n useEffect(() => {\n return store.persist[persistControllerKey].connect(store, {\n key: options.key,\n enabled: options.enabled,\n delay: options.delay,\n onPersist: options.onPersist ? (args) => onPersist(args) : undefined,\n hydrate: options.hydrate ? (args) => hydrate(args) : undefined,\n })\n }, [\n options.delay,\n options.enabled,\n options.key,\n store,\n Boolean(options.hydrate),\n ])\n\n return {\n store,\n flush() {\n return store.persist.flush()\n },\n }\n}\n\nexport function usePersistentStore<TState, TPlugins>(\n builder: StoreBuilder<TState, TPlugins & PersistPluginSurface<TState>>,\n): PersistentStoreResult<TState, TPlugins> {\n const contextValue = useContext(\n getPersistStoreContext<TState, TPlugins>(builder),\n )\n\n if (!contextValue) {\n throw new Error(\n 'usePersistentStore(builder) requires a matching <PersistStoreProvider builder={...}> or <PersistStoreProvider store={...}> ancestor.',\n )\n }\n\n return contextValue\n}\n\nfunction usePersistenceBoundary<TState>(\n store: PersistedStore<TState>,\n {\n flushOnBackground,\n flushOnPageHide,\n flushOnUnmount,\n }: PersistenceBoundaryOptions,\n) {\n useEffect(() => {\n if (!flushOnUnmount) {\n return\n }\n\n return () => {\n void store.persist.flush()\n }\n }, [flushOnUnmount, store])\n\n useEffect(() => {\n if (!flushOnPageHide || typeof window === 'undefined') {\n return\n }\n\n const handlePageHide = () => {\n void store.persist.flush()\n }\n\n window.addEventListener('pagehide', handlePageHide)\n\n return () => {\n window.removeEventListener('pagehide', handlePageHide)\n }\n }, [flushOnPageHide, store])\n\n useEffect(() => {\n if (!flushOnBackground) {\n return\n }\n\n // Web has no app background lifecycle equivalent here yet.\n }, [flushOnBackground])\n}\n\ninterface PersistStoreProviderContentProps<TState, TPlugins> {\n builder: StoreBuilder<TState, TPlugins & PersistPluginSurface<TState>>\n children?: PersistStoreProviderChildren<TState, TPlugins>\n flushOnBackground?: boolean\n flushOnPageHide?: boolean\n flushOnUnmount?: boolean\n persist?: PersistRuntimeOptions<TState>\n store: PersistedStore<TState, TPlugins>\n}\n\nfunction PersistStoreProviderContent<TState, TPlugins>({\n builder,\n flushOnBackground,\n flushOnPageHide,\n flushOnUnmount,\n children,\n persist,\n store,\n}: PersistStoreProviderContentProps<TState, TPlugins>) {\n const persistentStore = usePersistentRuntime<TState, TPlugins>(\n store,\n persist ?? {},\n )\n const Context = getPersistStoreContext<TState, TPlugins>(builder)\n\n usePersistenceBoundary(store, {\n flushOnBackground,\n flushOnPageHide,\n flushOnUnmount,\n })\n\n const content =\n typeof children === 'function' ? children(persistentStore) : children\n\n return <Context.Provider value={persistentStore}>{content}</Context.Provider>\n}\n\nexport function PersistStoreProvider<TState, TPlugins = {}>(\n props: PersistStoreProviderProps<TState, TPlugins>,\n) {\n if (props.builder !== undefined) {\n return (\n <StoreProvider builder={props.builder}>\n {({ store }) => (\n <PersistStoreProviderContent\n builder={props.builder}\n store={store}\n persist={props.persist}\n flushOnUnmount={props.flushOnUnmount}\n flushOnPageHide={props.flushOnPageHide}\n flushOnBackground={props.flushOnBackground}\n >\n {props.children}\n </PersistStoreProviderContent>\n )}\n </StoreProvider>\n )\n }\n\n const builder = getStoreBuilder(props.store)\n\n if (!builder) {\n throw new Error(\n 'PersistStoreProvider could not resolve a builder for the provided store. Pass a persisted store created by @lunarhue/store.',\n )\n }\n\n return (\n <StoreProvider store={props.store}>\n {({ store }) => (\n <PersistStoreProviderContent\n builder={\n builder as StoreBuilder<\n TState,\n TPlugins & PersistPluginSurface<TState>\n >\n }\n store={store as PersistedStore<TState, TPlugins>}\n persist={props.persist}\n flushOnUnmount={props.flushOnUnmount}\n flushOnPageHide={props.flushOnPageHide}\n flushOnBackground={props.flushOnBackground}\n >\n {props.children}\n </PersistStoreProviderContent>\n )}\n </StoreProvider>\n )\n}\n\n/**\n * @deprecated Prefer PersistStoreProvider flush options. This boundary remains\n * as a compatibility escape hatch for sub-tree flush behavior.\n */\nexport function PersistenceBoundary<TState>({\n children,\n flushOnBackground,\n flushOnPageHide,\n flushOnUnmount,\n store,\n}: PersistenceBoundaryProps<TState>) {\n usePersistenceBoundary(store, {\n flushOnBackground,\n flushOnPageHide,\n flushOnUnmount,\n })\n\n return <>{children}</>\n}\n"]}
1
+ {"version":3,"sources":["../../../src/plugins/persist/controller.ts","../../../src/plugins/persist/types.ts","../../../src/plugins/persist/plugin.ts","../../../src/plugins/persist/react.tsx"],"names":["persist"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n PersistController,\n PersistMeta,\n PersistPluginOptions,\n PersistRuntimeOptions,\n PersistedStore,\n} from './types'\nimport type { Store } from '../../core'\nimport { createStoreInstance } from '../../core/store-instance'\n\nconst DEFAULT_META: PersistMeta = {\n isHydrated: false,\n pending: false,\n persisting: false,\n lastPersistedAt: null,\n error: null,\n}\n\nlet nextGeneratedPersistKeyId = 0\n\nfunction getInitialMeta<TState>(\n options?: PersistPluginOptions<TState>,\n): PersistMeta {\n return {\n ...DEFAULT_META,\n isHydrated: options?.hydratedOnCreate ?? false,\n }\n}\n\ntype RuntimeOptions<TState> = Required<\n Omit<PersistRuntimeOptions<TState>, 'hydrate'>\n> & {\n hydrate?: PersistRuntimeOptions<TState>['hydrate']\n}\n\nexport function createPersistController<TState>(\n store: Store<TState>,\n pluginOptions?: PersistPluginOptions<TState>,\n): PersistController<TState> {\n const meta = createStoreInstance(getInitialMeta(pluginOptions)).store\n const fallbackKey = `persist:${++nextGeneratedPersistKeyId}`\n let runtimeOptions: RuntimeOptions<TState> | null = null\n let subscription: { unsubscribe(): void } | null = null\n let timer: ReturnType<typeof setTimeout> | null = null\n let queuedTransition: {\n previousState: TState\n nextState: TState\n } | null = null\n let lastObservedState = store.get()\n let currentKey: string | null = null\n let currentFlushPromise: Promise<void> | null = null\n let hydrating = false\n let isConnected = false\n let hasRequestedHydrationForKey = false\n\n const resolveKey = (key?: string) => key ?? fallbackKey\n\n const clearTimer = () => {\n if (!timer) {\n return\n }\n\n clearTimeout(timer)\n timer = null\n }\n\n const updateMeta = (updater: (prev: PersistMeta) => PersistMeta) => {\n meta.setState(updater)\n }\n\n const resolveRuntimeOptions = (\n options: PersistRuntimeOptions<TState>,\n ): RuntimeOptions<TState> => {\n const onPersist = options.onPersist ?? pluginOptions?.onPersist\n\n if (!onPersist) {\n throw new Error(\n 'Persist runtime requires onPersist to be provided either in persist(...) or at runtime.',\n )\n }\n\n return {\n key: resolveKey(options.key),\n enabled: options.enabled ?? pluginOptions?.enabled ?? true,\n delay: options.delay ?? pluginOptions?.delay ?? 0,\n hydrate: options.hydrate ?? pluginOptions?.hydrate,\n onPersist,\n }\n }\n\n const resetForKey = (key: string) => {\n currentKey = key\n queuedTransition = null\n clearTimer()\n hasRequestedHydrationForKey = false\n lastObservedState = store.get()\n meta.setState(() => getInitialMeta(pluginOptions))\n }\n\n const ensureSubscription = () => {\n if (subscription) {\n return\n }\n\n subscription = store.subscribe((nextState) => {\n const previousState = lastObservedState\n lastObservedState = nextState\n\n if (\n hydrating ||\n !isConnected ||\n !runtimeOptions?.enabled ||\n Object.is(previousState, nextState)\n ) {\n return\n }\n\n queuedTransition = queuedTransition\n ? {\n previousState: queuedTransition.previousState,\n nextState,\n }\n : {\n previousState,\n nextState,\n }\n\n updateMeta((prev) => ({\n ...prev,\n pending: true,\n error: null,\n }))\n\n clearTimer()\n timer = setTimeout(() => {\n void flush()\n }, runtimeOptions.delay)\n })\n }\n\n const maybeHydrate = async (\n runtimeStore: PersistedStore<TState>,\n options: RuntimeOptions<TState>,\n ) => {\n if (!options.enabled || hasRequestedHydrationForKey) {\n return\n }\n\n hasRequestedHydrationForKey = true\n\n if (!options.hydrate) {\n updateMeta((prev) => ({\n ...prev,\n isHydrated: true,\n error: null,\n }))\n return\n }\n\n try {\n await options.hydrate({\n key: options.key,\n store: runtimeStore,\n })\n } catch (error) {\n updateMeta((prev) => ({\n ...prev,\n error,\n }))\n throw error\n }\n }\n\n const flush = (): Promise<void> => {\n if (currentFlushPromise) {\n return currentFlushPromise\n }\n\n const runFlush = async () => {\n clearTimer()\n\n while (queuedTransition) {\n if (!runtimeOptions?.enabled) {\n return\n }\n\n const transition = queuedTransition\n queuedTransition = null\n\n updateMeta((prev) => ({\n ...prev,\n pending: false,\n persisting: true,\n error: null,\n }))\n\n try {\n const nextState = pluginOptions?.serializeState\n ? pluginOptions.serializeState(transition.nextState)\n : transition.nextState\n\n await runtimeOptions.onPersist({\n key: resolveKey(runtimeOptions.key),\n previousState: transition.previousState,\n nextState,\n })\n\n updateMeta((prev) => ({\n ...prev,\n persisting: false,\n lastPersistedAt: Date.now(),\n error: null,\n }))\n } catch (error) {\n queuedTransition = transition\n updateMeta((prev) => ({\n ...prev,\n pending: true,\n persisting: false,\n error,\n }))\n throw error\n }\n }\n }\n\n currentFlushPromise = runFlush().finally(() => {\n currentFlushPromise = null\n })\n\n return currentFlushPromise\n }\n\n return {\n meta,\n connect(runtimeStore, options) {\n const resolvedOptions = resolveRuntimeOptions(options)\n runtimeOptions = resolvedOptions\n\n if (currentKey !== resolvedOptions.key) {\n resetForKey(resolvedOptions.key)\n }\n\n isConnected = true\n ensureSubscription()\n void maybeHydrate(runtimeStore, resolvedOptions).catch(() => {})\n\n return () => {\n if (currentKey !== resolvedOptions.key) {\n return\n }\n\n isConnected = false\n clearTimer()\n updateMeta((prev) => ({\n ...prev,\n persisting: false,\n }))\n }\n },\n flush() {\n return flush()\n },\n async hydrate(nextState) {\n clearTimer()\n queuedTransition = null\n hydrating = true\n\n try {\n store.setState(() => nextState)\n lastObservedState = nextState\n updateMeta((prev) => ({\n ...prev,\n isHydrated: true,\n pending: false,\n error: null,\n }))\n } finally {\n hydrating = false\n }\n },\n }\n}\n","import type { Store, StorePlugin } from '../../core'\n\nexport const persistControllerKey = Symbol('lunarhue.store.persist.controller')\n\nexport type PersistMeta = {\n isHydrated: boolean\n pending: boolean\n persisting: boolean\n lastPersistedAt: number | null\n error: unknown | null\n}\n\nexport type PersistHydrateArgs<TState> = {\n key: string\n store: PersistedStore<TState>\n}\n\nexport type PersistPersistArgs<TState> = {\n key: string\n previousState: TState\n nextState: TState\n}\n\nexport type PersistRuntimeOptions<TState> = {\n key?: string\n enabled?: boolean\n delay?: number\n hydrate?: (args: PersistHydrateArgs<TState>) => Promise<void>\n onPersist?: (args: PersistPersistArgs<TState>) => Promise<void>\n}\n\nexport type PersistPluginOptions<TState> = {\n flushOnDispose?: boolean\n hydratedOnCreate?: boolean\n serializeState?: (state: TState) => TState\n} & Omit<PersistRuntimeOptions<TState>, 'key'>\n\nexport type PersistRuntimeSurface<TState> = {\n flush(): Promise<void>\n hydrate(nextState: TState): Promise<void>\n meta: Store<PersistMeta>\n}\n\nexport type PersistStoreSurface<TState> = {\n hydrate(nextState: TState): Promise<void>\n persist: PersistRuntimeSurface<TState>\n}\n\nexport type PersistController<TState> = {\n meta: Store<PersistMeta>\n connect(\n store: PersistedStore<TState>,\n options: PersistRuntimeOptions<TState>,\n ): () => void\n flush(): Promise<void>\n hydrate(nextState: TState): Promise<void>\n}\n\nexport type InternalPersistStoreSurface<TState> = PersistStoreSurface<TState> & {\n persist: PersistRuntimeSurface<TState> & {\n [persistControllerKey]: PersistController<TState>\n }\n}\n\nexport type PersistedStore<TState, TPlugins = {}> = Store<\n TState,\n TPlugins & PersistStoreSurface<TState>\n>\n\nexport type InternalPersistedStore<TState, TPlugins = {}> = Store<\n TState,\n TPlugins & InternalPersistStoreSurface<TState>\n>\n\nexport type PersistPlugin<TState> = StorePlugin<\n TState,\n any,\n PersistStoreSurface<TState>\n>\n","import { createPersistController } from './controller'\nimport { persistControllerKey } from './types'\n\nimport type { PersistPlugin, PersistPluginOptions } from './types'\n\nexport function persist<TState>(\n options?: PersistPluginOptions<TState>,\n): PersistPlugin<TState> {\n return ({ onDispose, store }) => {\n const controller = createPersistController(store, options)\n\n if (options?.flushOnDispose) {\n onDispose(async () => {\n await controller.flush()\n })\n }\n\n return {\n hydrate(nextState: TState) {\n return controller.hydrate(nextState)\n },\n persist: {\n flush() {\n return controller.flush()\n },\n hydrate(nextState: TState) {\n return controller.hydrate(nextState)\n },\n meta: controller.meta,\n [persistControllerKey]: controller,\n },\n }\n }\n}\n","import {\n createContext,\n type Context,\n type ReactNode,\n useContext,\n useEffect,\n useEffectEvent,\n} from 'react'\n\nimport type { StoreBuilder } from '../../core'\nimport { getStoreBuilder } from '../../core/builder-registry'\nimport { StoreProvider, useSelector } from '../../react'\n\nimport {\n persistControllerKey,\n type InternalPersistedStore,\n type PersistHydrateArgs,\n type PersistMeta,\n type PersistPersistArgs,\n type PersistStoreSurface,\n type PersistRuntimeOptions,\n type PersistedStore,\n} from './types'\n\nexport type PersistentStoreResult<TState, TPlugins = {}> = {\n store: PersistedStore<TState, TPlugins>\n flush(): Promise<void>\n}\n\ntype PersistStoreContext<TState, TPlugins> = Context<\n PersistentStoreResult<TState, TPlugins> | undefined\n>\n\nconst persistContextMap = new WeakMap<\n StoreBuilder<any, any>,\n PersistStoreContext<any, any>\n>()\n\ntype PersistStoreProviderChildren<TState, TPlugins> =\n | ReactNode\n | ((args: PersistentStoreResult<TState, TPlugins>) => ReactNode)\n\ntype BuilderPersistStoreProviderProps<TState, TPlugins> = {\n builder: StoreBuilder<TState, TPlugins & PersistStoreSurface<TState>>\n children?: PersistStoreProviderChildren<TState, TPlugins>\n flushOnBackground?: boolean\n flushOnPageHide?: boolean\n flushOnUnmount?: boolean\n persist?: PersistRuntimeOptions<TState>\n store?: never\n}\n\ntype ExternalPersistStoreProviderProps<TState, TPlugins> = {\n builder?: never\n children?: PersistStoreProviderChildren<TState, TPlugins>\n flushOnBackground?: boolean\n flushOnPageHide?: boolean\n flushOnUnmount?: boolean\n persist?: PersistRuntimeOptions<TState>\n store: PersistedStore<TState, TPlugins>\n}\n\nexport type PersistStoreProviderProps<TState, TPlugins = {}> =\n | BuilderPersistStoreProviderProps<TState, TPlugins>\n | ExternalPersistStoreProviderProps<TState, TPlugins>\n\n/**\n * @deprecated Prefer PersistStoreProvider flush options. This boundary remains\n * as a compatibility escape hatch for sub-tree flush behavior.\n */\nexport type PersistenceBoundaryProps<TState> = {\n store: PersistedStore<TState>\n flushOnUnmount?: boolean\n flushOnPageHide?: boolean\n flushOnBackground?: boolean\n children?: ReactNode\n}\n\ntype PersistenceBoundaryOptions = {\n flushOnBackground?: boolean\n flushOnPageHide?: boolean\n flushOnUnmount?: boolean\n}\n\nfunction getPersistStoreContext<TState, TPlugins>(\n builder: StoreBuilder<TState, TPlugins & PersistStoreSurface<TState>>,\n): PersistStoreContext<TState, TPlugins> {\n let context = persistContextMap.get(builder)\n\n if (!context) {\n context = createContext<\n PersistentStoreResult<TState, TPlugins> | undefined\n >(undefined)\n persistContextMap.set(builder, context)\n }\n\n return context\n}\n\nfunction usePersistentRuntime<TState, TPlugins = {}>(\n store: InternalPersistedStore<TState, TPlugins>,\n options: PersistRuntimeOptions<TState>,\n): PersistentStoreResult<TState, TPlugins> {\n const onPersist = useEffectEvent(async (args: PersistPersistArgs<TState>) => {\n if (!options.onPersist) {\n return\n }\n\n await options.onPersist(args)\n })\n const hydrate = useEffectEvent(async (args: PersistHydrateArgs<TState>) => {\n if (!options.hydrate) {\n return\n }\n\n await options.hydrate(args)\n })\n\n useEffect(() => {\n return store.persist[persistControllerKey].connect(store, {\n key: options.key,\n enabled: options.enabled,\n delay: options.delay,\n onPersist: options.onPersist ? (args) => onPersist(args) : undefined,\n hydrate: options.hydrate ? (args) => hydrate(args) : undefined,\n })\n }, [\n options.delay,\n options.enabled,\n options.key,\n store,\n Boolean(options.hydrate),\n ])\n\n return {\n store,\n flush() {\n return store.persist.flush()\n },\n }\n}\n\nexport function usePersistentStore<TState, TPlugins>(\n builder: StoreBuilder<TState, TPlugins & PersistStoreSurface<TState>>,\n): PersistentStoreResult<TState, TPlugins> {\n const contextValue = useContext(\n getPersistStoreContext<TState, TPlugins>(builder),\n )\n\n if (!contextValue) {\n throw new Error(\n 'usePersistentStore(builder) requires a matching <PersistStoreProvider builder={...}> or <PersistStoreProvider store={...}> ancestor.',\n )\n }\n\n return contextValue\n}\n\nfunction usePersistenceBoundary<TState>(\n store: PersistedStore<TState>,\n {\n flushOnBackground,\n flushOnPageHide,\n flushOnUnmount,\n }: PersistenceBoundaryOptions,\n) {\n useEffect(() => {\n if (!flushOnUnmount) {\n return\n }\n\n return () => {\n void store.persist.flush()\n }\n }, [flushOnUnmount, store])\n\n useEffect(() => {\n if (!flushOnPageHide || typeof window === 'undefined') {\n return\n }\n\n const handlePageHide = () => {\n void store.persist.flush()\n }\n\n window.addEventListener('pagehide', handlePageHide)\n\n return () => {\n window.removeEventListener('pagehide', handlePageHide)\n }\n }, [flushOnPageHide, store])\n\n useEffect(() => {\n if (!flushOnBackground) {\n return\n }\n\n // Web has no app background lifecycle equivalent here yet.\n }, [flushOnBackground])\n}\n\ninterface PersistStoreProviderContentProps<TState, TPlugins> {\n builder: StoreBuilder<TState, TPlugins & PersistStoreSurface<TState>>\n children?: PersistStoreProviderChildren<TState, TPlugins>\n flushOnBackground?: boolean\n flushOnPageHide?: boolean\n flushOnUnmount?: boolean\n persist?: PersistRuntimeOptions<TState>\n store: InternalPersistedStore<TState, TPlugins>\n}\n\nfunction PersistStoreProviderContent<TState, TPlugins>({\n builder,\n flushOnBackground,\n flushOnPageHide,\n flushOnUnmount,\n children,\n persist,\n store,\n}: PersistStoreProviderContentProps<TState, TPlugins>) {\n const persistentStore = usePersistentRuntime<TState, TPlugins>(\n store,\n persist ?? {},\n )\n const Context = getPersistStoreContext<TState, TPlugins>(builder)\n\n usePersistenceBoundary(store, {\n flushOnBackground,\n flushOnPageHide,\n flushOnUnmount,\n })\n\n const content =\n typeof children === 'function' ? children(persistentStore) : children\n\n return <Context.Provider value={persistentStore}>{content}</Context.Provider>\n}\n\nexport function PersistStoreProvider<TState, TPlugins = {}>(\n props: PersistStoreProviderProps<TState, TPlugins>,\n) {\n if (props.builder !== undefined) {\n return (\n <StoreProvider builder={props.builder}>\n {({ store }) => (\n <PersistStoreProviderContent\n builder={props.builder}\n store={store as InternalPersistedStore<TState, TPlugins>}\n persist={props.persist}\n flushOnUnmount={props.flushOnUnmount}\n flushOnPageHide={props.flushOnPageHide}\n flushOnBackground={props.flushOnBackground}\n >\n {props.children}\n </PersistStoreProviderContent>\n )}\n </StoreProvider>\n )\n }\n\n const builder = getStoreBuilder(props.store)\n\n if (!builder) {\n throw new Error(\n 'PersistStoreProvider could not resolve a builder for the provided store. Pass a persisted store created by @lunarhue/store.',\n )\n }\n\n return (\n <StoreProvider store={props.store}>\n {({ store }) => (\n <PersistStoreProviderContent\n builder={\n builder as StoreBuilder<\n TState,\n TPlugins & PersistStoreSurface<TState>\n >\n }\n store={store as InternalPersistedStore<TState, TPlugins>}\n persist={props.persist}\n flushOnUnmount={props.flushOnUnmount}\n flushOnPageHide={props.flushOnPageHide}\n flushOnBackground={props.flushOnBackground}\n >\n {props.children}\n </PersistStoreProviderContent>\n )}\n </StoreProvider>\n )\n}\n\n/**\n * @deprecated Prefer PersistStoreProvider flush options. This boundary remains\n * as a compatibility escape hatch for sub-tree flush behavior.\n */\nexport function PersistenceBoundary<TState>({\n children,\n flushOnBackground,\n flushOnPageHide,\n flushOnUnmount,\n store,\n}: PersistenceBoundaryProps<TState>) {\n usePersistenceBoundary(store, {\n flushOnBackground,\n flushOnPageHide,\n flushOnUnmount,\n })\n\n return <>{children}</>\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { S as StoreBuilder, a as Store, A as AnyStore, g as StoreState } from '../types-ByMGdUb-.js';
3
+ import { S as StoreBuilder, a as Store, e as StoreState } from '../types-BfzW2j9T.js';
4
4
  import '@tanstack/store';
5
5
 
6
6
  type StoreProviderChildren<TState, TPlugins> = ReactNode | ((args: {
@@ -21,7 +21,7 @@ declare function StoreProvider<TState, TPlugins>(props: ProviderProps<TState, TP
21
21
 
22
22
  declare function useLocalStore<TState, TPlugins>(builder: StoreBuilder<TState, TPlugins>): Store<TState, TPlugins>;
23
23
 
24
- declare function useSelector<TStore extends AnyStore, TSelected, TState extends StoreState<TStore>>(store: TStore, selector: (snapshot: TState) => TSelected, compare?: (a: TSelected, b: TSelected) => boolean): TSelected;
24
+ declare function useSelector<TStore extends Store<any, any>, TSelected, TState extends StoreState<TStore>>(store: TStore, selector: (snapshot: TState) => TSelected, compare?: (a: TSelected, b: TSelected) => boolean): TSelected;
25
25
 
26
26
  declare function useStore<TState, TPlugins>(builder: StoreBuilder<TState, TPlugins>): Store<TState, TPlugins>;
27
27
 
@@ -1,4 +1,4 @@
1
- export { StoreProvider, useLocalStore, useSelector, useStore, useStoreSelector } from '../chunk-IP5Y4BHA.js';
1
+ export { StoreProvider, useLocalStore, useSelector, useStore, useStoreSelector } from '../chunk-ALACXQX3.js';
2
2
  import '../chunk-PCSRXZL4.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,18 +1,10 @@
1
1
  import { Store as Store$1 } from '@tanstack/store';
2
2
 
3
- type StoreBrand<TKey extends symbol> = {
4
- readonly [K in TKey]: true;
5
- };
6
3
  type StoreCleanup = () => void | Promise<void>;
7
- type TanStackStore<TState> = Store$1<TState>;
8
- type Store<TState, TPlugins = {}> = TanStackStore<TState> & {
4
+ type Store<TState, TPlugins = {}> = Store$1<TState> & {
9
5
  dispose(): Promise<void>;
10
6
  } & TPlugins;
11
- type AnyStore = Store<any, any>;
12
- type StorePlugins<TStore extends AnyStore> = TStore extends {
13
- [K in keyof TStore]: TStore[K] extends (...args: any[]) => any ? TStore[K] : never;
14
- } ? TStore : never;
15
- type StoreState<TStore extends AnyStore> = TStore extends {
7
+ type StoreState<TStore extends Store<any, any>> = TStore extends {
16
8
  get: () => infer TState;
17
9
  } ? TState : never;
18
10
  type StorePluginContext<TState, TPlugins> = {
@@ -25,4 +17,4 @@ type StoreBuilder<TState, TPlugins = {}> = {
25
17
  extend<TNextPlugins>(plugin: StorePlugin<TState, TPlugins, TNextPlugins>): StoreBuilder<TState, TPlugins & TNextPlugins>;
26
18
  };
27
19
 
28
- export type { AnyStore as A, StoreBuilder as S, TanStackStore as T, Store as a, StoreBrand as b, StoreCleanup as c, StorePlugin as d, StorePluginContext as e, StorePlugins as f, StoreState as g };
20
+ export type { StoreBuilder as S, Store as a, StoreCleanup as b, StorePlugin as c, StorePluginContext as d, StoreState as e };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lunarhue/store",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Framework-agnostic state built on top of @tanstack/store with typed plugins and React bindings.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/LunarHUE/store#readme",
@@ -21,7 +21,6 @@
21
21
  ],
22
22
  "type": "module",
23
23
  "sideEffects": false,
24
- "types": "./dist/core/index.d.ts",
25
24
  "files": [
26
25
  "dist"
27
26
  ],
@@ -48,9 +47,10 @@
48
47
  },
49
48
  "scripts": {
50
49
  "build": "tsup",
50
+ "contract": "bun run build && node ./scripts/check-package-contract.mjs",
51
51
  "test": "vitest run",
52
52
  "typecheck": "tsc --noEmit",
53
- "check": "bun run typecheck && bun run test"
53
+ "check": "bun run typecheck && bun run test && bun run contract"
54
54
  },
55
55
  "dependencies": {
56
56
  "@tanstack/react-store": "0.9.2",