@absolutejs/absolute 0.19.0-beta.337 → 0.19.0-beta.338

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.
@@ -1,17 +1,19 @@
1
- import { type StoreApi } from 'zustand/vanilla';
1
+ import { type StateCreator, type StoreApi } from 'zustand/vanilla';
2
2
  export type IslandStoreState = Record<string, unknown>;
3
3
  export type IslandStateSnapshot = Record<string, IslandStoreState>;
4
- export type IslandStoreSetState<T extends IslandStoreState> = (update: Partial<T> | ((state: T) => Partial<T>)) => void;
5
- export type IslandStoreInitializer<T extends IslandStoreState> = (set: IslandStoreSetState<T>, get: () => T, store: StoreApi<T>) => T;
6
4
  type AnyIslandStore = StoreApi<IslandStoreState>;
5
+ type IslandStoreInstance = {
6
+ applyExternalSnapshot: (snapshot: IslandStoreState) => void;
7
+ store: AnyIslandStore;
8
+ };
7
9
  declare const ABSOLUTE_ISLAND_STATE = "__ABS_ISLAND_STATE__";
8
10
  declare const ABSOLUTE_ISLAND_STORES = "__ABS_ISLAND_STORES__";
9
11
  declare global {
10
12
  var __ABS_ISLAND_STATE__: IslandStateSnapshot | undefined;
11
- var __ABS_ISLAND_STORES__: Map<string, AnyIslandStore> | undefined;
13
+ var __ABS_ISLAND_STORES__: Map<string, Set<IslandStoreInstance>> | undefined;
12
14
  }
13
15
  export declare const initializeIslandStores: (state: IslandStateSnapshot) => void;
14
- export declare const createIslandStore: (storeId: string) => <T extends IslandStoreState>(createState: IslandStoreInitializer<T>) => StoreApi<T>;
16
+ export declare const createIslandStore: <T extends IslandStoreState>(storeId: string, createState: StateCreator<T, [], []>) => StoreApi<T>;
15
17
  export declare const readIslandStore: <TState extends IslandStoreState, TSelected>(store: StoreApi<TState>, selector: (state: TState) => TSelected) => TSelected;
16
18
  export declare const subscribeIslandStore: <TState extends IslandStoreState, TSelected>(store: StoreApi<TState>, selector: (state: TState) => TSelected, listener: (value: TSelected) => void) => () => void;
17
19
  export declare const getIslandStoreServerSnapshot: <TState extends IslandStoreState, TSelected>(store: StoreApi<TState>, selector: (state: TState) => TSelected) => TSelected;
@@ -223,31 +223,45 @@ var initializeIslandStores = (state) => {
223
223
  };
224
224
  globalThis.__ABS_ISLAND_STATE__ = nextSnapshot;
225
225
  for (const [storeId, store] of getIslandStores()) {
226
- applySnapshot(store, nextSnapshot[storeId]);
226
+ for (const instance of store) {
227
+ instance.applyExternalSnapshot(nextSnapshot[storeId] ?? {});
228
+ }
227
229
  }
228
230
  };
229
- var createIslandStore = (storeId) => (createState) => {
231
+ var createIslandStore = (storeId, createState) => {
232
+ const store = createStore(createState);
230
233
  const stores = getIslandStores();
231
- const existingStore = stores.get(storeId);
232
- if (existingStore) {
233
- return existingStore;
234
- }
235
- const store = createStore()((set, get, api) => createState((update) => {
236
- set((state) => {
237
- const nextPartial = typeof update === "function" ? update(state) : update;
238
- return {
239
- ...state,
240
- ...nextPartial
241
- };
242
- });
243
- }, get, api));
234
+ const storeInstances = stores.get(storeId) ?? new Set;
244
235
  const initialSnapshot = getIslandStoreSnapshot()[storeId];
245
236
  applySnapshot(store, initialSnapshot);
246
- getIslandStoreSnapshot()[storeId] = toSerializableState(store.getState());
237
+ let isApplyingExternalSnapshot = false;
238
+ const applyExternalSnapshot = (snapshot) => {
239
+ isApplyingExternalSnapshot = true;
240
+ applySnapshot(store, snapshot);
241
+ };
242
+ const syncSnapshot = (state) => {
243
+ const nextSnapshot = toSerializableState(state);
244
+ getIslandStoreSnapshot()[storeId] = nextSnapshot;
245
+ for (const peerStore of storeInstances) {
246
+ if (peerStore.store === store) {
247
+ continue;
248
+ }
249
+ peerStore.applyExternalSnapshot(nextSnapshot);
250
+ }
251
+ };
252
+ storeInstances.add({
253
+ applyExternalSnapshot,
254
+ store
255
+ });
256
+ stores.set(storeId, storeInstances);
257
+ syncSnapshot(store.getState());
247
258
  store.subscribe((state) => {
248
- getIslandStoreSnapshot()[storeId] = toSerializableState(state);
259
+ if (isApplyingExternalSnapshot) {
260
+ isApplyingExternalSnapshot = false;
261
+ return;
262
+ }
263
+ syncSnapshot(state);
249
264
  });
250
- stores.set(storeId, store);
251
265
  return store;
252
266
  };
253
267
  var readIslandStore = (store, selector) => selector(store.getState());
@@ -284,5 +298,5 @@ export {
284
298
  Island_default as Island
285
299
  };
286
300
 
287
- //# debugId=4C2134235918146964756E2164756E21
301
+ //# debugId=9FC43098F735C99364756E2164756E21
288
302
  //# sourceMappingURL=browser.js.map
@@ -8,11 +8,11 @@
8
8
  "import type {\n\tIslandRegistry,\n\tIslandRegistryInput,\n\tTypedIslandRenderProps\n} from '../../types/island';\nimport {\n\tgetIslandMarkerAttributes,\n\tserializeIslandAttributes\n} from '../core/islandMarkupAttributes';\n\nexport const createTypedIsland = <T extends IslandRegistryInput>(\n\t_registry: IslandRegistry<T>\n) => {\n\treturn (props: TypedIslandRenderProps<T>) => {\n\t\tconst attributes = getIslandMarkerAttributes(props);\n\t\treturn `<div ${serializeIslandAttributes(attributes)}></div>`;\n\t};\n};\n",
9
9
  "import type { RuntimeIslandRenderProps } from '../../types/island';\nimport {\n\tgetIslandMarkerAttributes,\n\tserializeIslandAttributes\n} from '../core/islandMarkupAttributes';\n\nconst getIslandSnapshot = (slotId: string) => {\n\tif (typeof window === 'undefined') {\n\t\treturn null;\n\t}\n\n\tconst snapshot = window.__ABS_SVELTE_ISLAND_HTML__;\n\tif (!snapshot || typeof snapshot !== 'object') {\n\t\treturn null;\n\t}\n\n\tconst value = snapshot[slotId];\n\treturn typeof value === 'string' ? value : null;\n};\n\nconst buildFallbackMarkup = (props: RuntimeIslandRenderProps) =>\n\t`<div ${serializeIslandAttributes(getIslandMarkerAttributes(props))}></div>`;\n\nexport const resolveIslandHtml = (\n\tslotId: string,\n\tprops: RuntimeIslandRenderProps\n) => {\n\tconst snapshot = getIslandSnapshot(slotId);\n\tif (snapshot !== null) {\n\t\treturn snapshot;\n\t}\n\n\tif (typeof document === 'undefined') {\n\t\treturn buildFallbackMarkup(props);\n\t}\n\n\tconst slot = document.querySelector<HTMLElement>(\n\t\t`[data-absolute-island-slot=\"${slotId}\"]`\n\t);\n\n\treturn slot?.innerHTML ?? buildFallbackMarkup(props);\n};\n",
10
10
  "const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\nexport { createStore };\n",
11
- "import {\n\tcreateStore,\n\ttype StoreApi\n} from 'zustand/vanilla';\n\nexport type IslandStoreState = Record<string, unknown>;\nexport type IslandStateSnapshot = Record<string, IslandStoreState>;\nexport type IslandStoreSetState<T extends IslandStoreState> = (\n\tupdate:\n\t\t| Partial<T>\n\t\t| ((state: T) => Partial<T>)\n) => void;\nexport type IslandStoreInitializer<T extends IslandStoreState> = (\n\tset: IslandStoreSetState<T>,\n\tget: () => T,\n\tstore: StoreApi<T>\n) => T;\ntype AnyIslandStore = StoreApi<IslandStoreState>;\n\nconst ABSOLUTE_ISLAND_STATE = '__ABS_ISLAND_STATE__';\nconst ABSOLUTE_ISLAND_STORES = '__ABS_ISLAND_STORES__';\n\ndeclare global {\n\tvar __ABS_ISLAND_STATE__: IslandStateSnapshot | undefined;\n\tvar __ABS_ISLAND_STORES__: Map<string, AnyIslandStore> | undefined;\n}\n\nconst getIslandStoreSnapshot = () => {\n\tglobalThis.__ABS_ISLAND_STATE__ ??= {};\n\treturn globalThis.__ABS_ISLAND_STATE__;\n};\n\nconst getIslandStores = () => {\n\tglobalThis.__ABS_ISLAND_STORES__ ??= new Map();\n\treturn globalThis.__ABS_ISLAND_STORES__;\n};\n\nconst isSerializableValue = (value: unknown) =>\n\ttypeof value !== 'function' && value !== undefined;\n\nconst toSerializableState = <T extends IslandStoreState>(state: T) =>\n\tObject.fromEntries(\n\t\tObject.entries(state).filter(([, value]) => isSerializableValue(value))\n\t);\n\nconst applySnapshot = <T extends IslandStoreState>(\n\tstore: StoreApi<T>,\n\tsnapshot: IslandStoreState | undefined\n) => {\n\tif (!snapshot) {\n\t\treturn;\n\t}\n\n\tstore.setState({\n\t\t...store.getState(),\n\t\t...snapshot\n\t});\n};\n\nexport const initializeIslandStores = (state: IslandStateSnapshot) => {\n\tconst currentSnapshot = getIslandStoreSnapshot();\n\tconst nextSnapshot = {\n\t\t...state,\n\t\t...currentSnapshot\n\t};\n\n\tglobalThis.__ABS_ISLAND_STATE__ = nextSnapshot;\n\n\tfor (const [storeId, store] of getIslandStores()) {\n\t\tapplySnapshot(store, nextSnapshot[storeId]);\n\t}\n};\n\nexport const createIslandStore =\n\t(storeId: string) =>\n\t<T extends IslandStoreState>(\n\t\tcreateState: IslandStoreInitializer<T>\n\t) => {\n\t\tconst stores = getIslandStores();\n\t\tconst existingStore = stores.get(storeId);\n\t\tif (existingStore) {\n\t\t\treturn existingStore as StoreApi<T>;\n\t\t}\n\n\t\tconst store = createStore<T>()((set, get, api) =>\n\t\t\tcreateState(\n\t\t\t\t(update) => {\n\t\t\t\t\tset((state) => {\n\t\t\t\t\t\tconst nextPartial =\n\t\t\t\t\t\t\ttypeof update === 'function' ? update(state) : update;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...state,\n\t\t\t\t\t\t\t...nextPartial\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tget,\n\t\t\t\tapi\n\t\t\t)\n\t\t);\n\t\tconst initialSnapshot = getIslandStoreSnapshot()[storeId];\n\t\tapplySnapshot(store, initialSnapshot);\n\n\t\tgetIslandStoreSnapshot()[storeId] = toSerializableState(\n\t\t\tstore.getState()\n\t\t);\n\t\tstore.subscribe((state) => {\n\t\t\tgetIslandStoreSnapshot()[storeId] = toSerializableState(state);\n\t\t});\n\n\t\tstores.set(storeId, store as AnyIslandStore);\n\t\treturn store;\n\t};\n\nexport const readIslandStore = <\n\tTState extends IslandStoreState,\n\tTSelected\n>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected\n) => selector(store.getState());\n\nexport const subscribeIslandStore = <\n\tTState extends IslandStoreState,\n\tTSelected\n>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected,\n\tlistener: (value: TSelected) => void\n) => {\n\tlet currentSelection = selector(store.getState());\n\n\treturn store.subscribe((state) => {\n\t\tconst nextSelection = selector(state);\n\t\tif (Object.is(nextSelection, currentSelection)) {\n\t\t\treturn;\n\t\t}\n\n\t\tcurrentSelection = nextSelection;\n\t\tlistener(nextSelection);\n\t});\n};\n\nexport const getIslandStoreServerSnapshot = <\n\tTState extends IslandStoreState,\n\tTSelected\n>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected\n) => selector(store.getInitialState());\n\nexport const resetIslandStoreForTesting = () => {\n\tdelete globalThis.__ABS_ISLAND_STATE__;\n\tdelete globalThis.__ABS_ISLAND_STORES__;\n};\n\nexport { ABSOLUTE_ISLAND_STATE, ABSOLUTE_ISLAND_STORES };\n",
11
+ "import {\n\tcreateStore,\n\ttype StateCreator,\n\ttype StoreApi\n} from 'zustand/vanilla';\n\nexport type IslandStoreState = Record<string, unknown>;\nexport type IslandStateSnapshot = Record<string, IslandStoreState>;\ntype AnyIslandStore = StoreApi<IslandStoreState>;\ntype IslandStoreInstance = {\n\tapplyExternalSnapshot: (snapshot: IslandStoreState) => void;\n\tstore: AnyIslandStore;\n};\n\nconst ABSOLUTE_ISLAND_STATE = '__ABS_ISLAND_STATE__';\nconst ABSOLUTE_ISLAND_STORES = '__ABS_ISLAND_STORES__';\n\ndeclare global {\n\tvar __ABS_ISLAND_STATE__: IslandStateSnapshot | undefined;\n\tvar __ABS_ISLAND_STORES__:\n\t\t| Map<string, Set<IslandStoreInstance>>\n\t\t| undefined;\n}\n\nconst getIslandStoreSnapshot = () => {\n\tglobalThis.__ABS_ISLAND_STATE__ ??= {};\n\treturn globalThis.__ABS_ISLAND_STATE__;\n};\n\nconst getIslandStores = () => {\n\tglobalThis.__ABS_ISLAND_STORES__ ??= new Map();\n\treturn globalThis.__ABS_ISLAND_STORES__;\n};\n\nconst isSerializableValue = (value: unknown) =>\n\ttypeof value !== 'function' && value !== undefined;\n\nconst toSerializableState = <T extends IslandStoreState>(state: T) =>\n\tObject.fromEntries(\n\t\tObject.entries(state).filter(([, value]) => isSerializableValue(value))\n\t);\n\nconst applySnapshot = <T extends IslandStoreState>(\n\tstore: StoreApi<T>,\n\tsnapshot: IslandStoreState | undefined\n) => {\n\tif (!snapshot) {\n\t\treturn;\n\t}\n\n\tstore.setState({\n\t\t...store.getState(),\n\t\t...snapshot\n\t});\n};\n\nexport const initializeIslandStores = (state: IslandStateSnapshot) => {\n\tconst currentSnapshot = getIslandStoreSnapshot();\n\tconst nextSnapshot = {\n\t\t...state,\n\t\t...currentSnapshot\n\t};\n\n\tglobalThis.__ABS_ISLAND_STATE__ = nextSnapshot;\n\n\tfor (const [storeId, store] of getIslandStores()) {\n\t\tfor (const instance of store) {\n\t\t\tinstance.applyExternalSnapshot(nextSnapshot[storeId] ?? {});\n\t\t}\n\t}\n};\n\nexport const createIslandStore = <T extends IslandStoreState>(\n\tstoreId: string,\n\tcreateState: StateCreator<T, [], []>\n) => {\n\tconst store = createStore<T>(createState);\n\tconst stores = getIslandStores();\n\tconst storeInstances = stores.get(storeId) ?? new Set<IslandStoreInstance>();\n\tconst initialSnapshot = getIslandStoreSnapshot()[storeId];\n\tapplySnapshot(store, initialSnapshot);\n\tlet isApplyingExternalSnapshot = false;\n\n\tconst applyExternalSnapshot = (snapshot: IslandStoreState) => {\n\t\tisApplyingExternalSnapshot = true;\n\t\tapplySnapshot(store, snapshot);\n\t};\n\n\tconst syncSnapshot = (state: T) => {\n\t\tconst nextSnapshot = toSerializableState(state);\n\t\tgetIslandStoreSnapshot()[storeId] = nextSnapshot;\n\n\t\tfor (const peerStore of storeInstances) {\n\t\t\tif (peerStore.store === store) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpeerStore.applyExternalSnapshot(nextSnapshot);\n\t\t}\n\t};\n\n\tstoreInstances.add({\n\t\tapplyExternalSnapshot,\n\t\tstore\n\t});\n\tstores.set(storeId, storeInstances);\n\n\tsyncSnapshot(store.getState());\n\tstore.subscribe((state) => {\n\t\tif (isApplyingExternalSnapshot) {\n\t\t\tisApplyingExternalSnapshot = false;\n\t\t\treturn;\n\t\t}\n\n\t\tsyncSnapshot(state);\n\t});\n\n\treturn store;\n};\n\nexport const readIslandStore = <\n\tTState extends IslandStoreState,\n\tTSelected\n>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected\n) => selector(store.getState());\n\nexport const subscribeIslandStore = <\n\tTState extends IslandStoreState,\n\tTSelected\n>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected,\n\tlistener: (value: TSelected) => void\n) => {\n\tlet currentSelection = selector(store.getState());\n\n\treturn store.subscribe((state) => {\n\t\tconst nextSelection = selector(state);\n\t\tif (Object.is(nextSelection, currentSelection)) {\n\t\t\treturn;\n\t\t}\n\n\t\tcurrentSelection = nextSelection;\n\t\tlistener(nextSelection);\n\t});\n};\n\nexport const getIslandStoreServerSnapshot = <\n\tTState extends IslandStoreState,\n\tTSelected\n>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected\n) => selector(store.getInitialState());\n\nexport const resetIslandStoreForTesting = () => {\n\tdelete globalThis.__ABS_ISLAND_STATE__;\n\tdelete globalThis.__ABS_ISLAND_STORES__;\n};\n\nexport { ABSOLUTE_ISLAND_STATE, ABSOLUTE_ISLAND_STORES };\n",
12
12
  "import type { StoreApi } from 'zustand/vanilla';\nimport {\n\treadIslandStore,\n\tsubscribeIslandStore,\n\ttype IslandStoreState\n} from '../client/islandStore';\n\nexport const useIslandStore = <\n\tTState extends IslandStoreState,\n\tTSelected\n>(\n\tstore: StoreApi<TState>,\n\tselector: (state: TState) => TSelected\n) => ({\n\tsubscribe(listener: (value: TSelected) => void) {\n\t\tlistener(readIslandStore(store, selector));\n\t\treturn subscribeIslandStore(store, selector, listener);\n\t}\n});\n",
13
13
  "export { default as Island } from './components/Island.svelte';\nexport { createTypedIsland } from './createIsland.browser';\nexport { resolveIslandHtml } from './resolveIslandHtml.browser';\nexport { useIslandStore } from './islandStore';\n\nexport const renderIsland = async () => {\n\tthrow new Error(\n\t\t'renderIsland is server-only. Use it during SSR, not in the browser.'\n\t);\n};\n"
14
14
  ],
15
- "mappings": "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",
16
- "debugId": "4C2134235918146964756E2164756E21",
15
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEM,2BAA2B,CAAC,cACjC,UAAU,IAAI,YAAY,IAAI,UAAU,MAAM,CAAC,GAEnC,uBAAuB,CACnC,WACA,cACI,SAAS,yBAAyB,SAAS,IAAI,aAEvC,2BAA2B,CAAC,aAAqC;AAAA,EAC7E,MAAM,UACL,CAAC;AAAA,EACF,MAAM,aAAgC,CAAC,SAAS,UAAU,OAAO,SAAS;AAAA,EAE1E,WAAW,aAAa,YAAY;AAAA,IACnC,MAAM,SAAS,SAAS,yBAAyB,SAAS;AAAA,IAC1D,YAAY,KAAK,UAAU,OAAO,QAAQ,QAAQ,GAAG;AAAA,MACpD,IAAI,CAAC,IAAI,WAAW,MAAM;AAAA,QAAG;AAAA,MAE7B,MAAM,YAAY,IAAI,MAAM,OAAO,MAAM;AAAA,MACzC,IAAI,CAAC;AAAA,QAAW;AAAA,MAEhB,MAAM,mBAAmB,QAAQ,cAAc,CAAC;AAAA,MAChD,iBAAiB,aAAa;AAAA,MAC9B,QAAQ,aAAa;AAAA,IACtB;AAAA,EACD;AAAA,EAEA,OAAO;AAAA;;;ACQD,SAAS,kBAA6B,CAC5C,WACC;AAAA,EACD,IAAI,4BAA4B,SAAS,GAAG;AAAA,IAC3C,OAAO,UAAU;AAAA,EAClB;AAAA,EAEA,OAAO;AAAA;AAAA,IAtCK,uBAAuB,CACnC,aACI,UAEQ,wBAAwB,CACpC,WACA,aAI2C;AAAA,EAC3C;AAAA,EACA,QAAQ,QAAQ;AAAA,EAChB,QAAQ,QAAQ;AACjB,IAEM,WAAW,CAAC,UACjB,OAAO,UAAU,YAAY,UAAU,MAE3B,8BAA8B,CAC1C,UAEA,SAAS,KAAK,MACd,eAAe,WACf,YAAY,UACZ,OAAO,MAAM,WAAW,UAgBZ,0BAA0B,CACtC,cACI;AAAA,EACJ,IAAI,CAAC,4BAA4B,SAAS;AAAA,IAAG,OAAO;AAAA,EAEpD,OAAO;AAAA,IACN,QAAQ,UAAU;AAAA,IAClB,QAAQ,UAAU;AAAA,EACnB;AAAA,GAGY,uBAAuB,CAAC,UACpC,KAAK,UAAU,SAAS,CAAC,CAAC,GAEd,mBAAmB,CAAC,aAA4B;AAAA,EAC5D,IAAI,CAAC;AAAA,IAAU,OAAO,CAAC;AAAA,EAEvB,OAAO,KAAK,MAAM,QAAQ;AAAA;AAAA;;;ICpDd,4BAA4B,CACxC,OACA,cAC6B;AAAA,EAC7B,kBAAkB,MAAM;AAAA,EACxB,kBAAkB,MAAM;AAAA,EACxB,gBAAgB,MAAM,WAAW;AAAA,EACjC,eAAe;AAAA,KACX,WAAW,EAAE,kBAAkB,SAAS,IAAI,CAAC;AAAA,EACjD,cAAc,qBAAqB,MAAM,KAAK;AAC/C,IAEM,sBAAsB,CAAC,UAC5B,MACE,WAAW,KAAK,OAAO,EACvB,WAAW,KAAK,QAAQ,EACxB,WAAW,KAAK,MAAM,EACtB,WAAW,KAAK,MAAM,GAEZ,4BAA4B,CAAC,eACzC,OAAO,QAAQ,UAAU,EACvB,IAAI,EAAE,KAAK,WAAW,GAAG,QAAQ,oBAAoB,KAAK,IAAI,EAC9D,KAAK,GAAG;AAAA;AAAA,EAjCX;AAAA;;;;;ACIA;AAKO,IAAM,oBAAoB,CAChC,cACI;AAAA,EACJ,OAAO,CAAC,UAAqC;AAAA,IAC5C,MAAM,aAAa,0BAA0B,KAAK;AAAA,IAClD,OAAO,QAAQ,0BAA0B,UAAU;AAAA;AAAA;;ACdrD;AAKA,IAAM,oBAAoB,CAAC,WAAmB;AAAA,EAC7C,IAAI,OAAO,WAAW,aAAa;AAAA,IAClC,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,WAAW,OAAO;AAAA,EACxB,IAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAAA,IAC9C,OAAO;AAAA,EACR;AAAA,EAEA,MAAM,QAAQ,SAAS;AAAA,EACvB,OAAO,OAAO,UAAU,WAAW,QAAQ;AAAA;AAG5C,IAAM,sBAAsB,CAAC,UAC5B,QAAQ,0BAA0B,0BAA0B,KAAK,CAAC;AAE5D,IAAM,oBAAoB,CAChC,QACA,UACI;AAAA,EACJ,MAAM,WAAW,kBAAkB,MAAM;AAAA,EACzC,IAAI,aAAa,MAAM;AAAA,IACtB,OAAO;AAAA,EACR;AAAA,EAEA,IAAI,OAAO,aAAa,aAAa;AAAA,IACpC,OAAO,oBAAoB,KAAK;AAAA,EACjC;AAAA,EAEA,MAAM,OAAO,SAAS,cACrB,+BAA+B,UAChC;AAAA,EAEA,OAAO,MAAM,aAAa,oBAAoB,KAAK;AAAA;;ACxCpD,IAAM,kBAAkB,CAAC,gBAAgB;AAAA,EACvC,IAAI;AAAA,EACJ,MAAM,4BAA4B,IAAI;AAAA,EACtC,MAAM,WAAW,CAAC,SAAS,YAAY;AAAA,IACrC,MAAM,YAAY,OAAO,YAAY,aAAa,QAAQ,KAAK,IAAI;AAAA,IACnE,IAAI,CAAC,OAAO,GAAG,WAAW,KAAK,GAAG;AAAA,MAChC,MAAM,gBAAgB;AAAA,MACtB,SAAS,WAAW,OAAO,UAAU,OAAO,cAAc,YAAY,cAAc,QAAQ,YAAY,OAAO,OAAO,CAAC,GAAG,OAAO,SAAS;AAAA,MAC1I,UAAU,QAAQ,CAAC,aAAa,SAAS,OAAO,aAAa,CAAC;AAAA,IAChE;AAAA;AAAA,EAEF,MAAM,WAAW,MAAM;AAAA,EACvB,MAAM,kBAAkB,MAAM;AAAA,EAC9B,MAAM,YAAY,CAAC,aAAa;AAAA,IAC9B,UAAU,IAAI,QAAQ;AAAA,IACtB,OAAO,MAAM,UAAU,OAAO,QAAQ;AAAA;AAAA,EAExC,MAAM,MAAM,EAAE,UAAU,UAAU,iBAAiB,UAAU;AAAA,EAC7D,MAAM,eAAe,QAAQ,YAAY,UAAU,UAAU,GAAG;AAAA,EAChE,OAAO;AAAA;AAET,IAAM,cAAe,CAAC,gBAAgB,cAAc,gBAAgB,WAAW,IAAI;;;ACGnF,IAAM,yBAAyB,MAAM;AAAA,EACpC,WAAW,yBAAyB,CAAC;AAAA,EACrC,OAAO,WAAW;AAAA;AAGnB,IAAM,kBAAkB,MAAM;AAAA,EAC7B,WAAW,0BAA0B,IAAI;AAAA,EACzC,OAAO,WAAW;AAAA;AAGnB,IAAM,sBAAsB,CAAC,UAC5B,OAAO,UAAU,cAAc,UAAU;AAE1C,IAAM,sBAAsB,CAA6B,UACxD,OAAO,YACN,OAAO,QAAQ,KAAK,EAAE,OAAO,IAAI,WAAW,oBAAoB,KAAK,CAAC,CACvE;AAED,IAAM,gBAAgB,CACrB,OACA,aACI;AAAA,EACJ,IAAI,CAAC,UAAU;AAAA,IACd;AAAA,EACD;AAAA,EAEA,MAAM,SAAS;AAAA,OACX,MAAM,SAAS;AAAA,OACf;AAAA,EACJ,CAAC;AAAA;AAGK,IAAM,yBAAyB,CAAC,UAA+B;AAAA,EACrE,MAAM,kBAAkB,uBAAuB;AAAA,EAC/C,MAAM,eAAe;AAAA,OACjB;AAAA,OACA;AAAA,EACJ;AAAA,EAEA,WAAW,uBAAuB;AAAA,EAElC,YAAY,SAAS,UAAU,gBAAgB,GAAG;AAAA,IACjD,WAAW,YAAY,OAAO;AAAA,MAC7B,SAAS,sBAAsB,aAAa,YAAY,CAAC,CAAC;AAAA,IAC3D;AAAA,EACD;AAAA;AAGM,IAAM,oBAAoB,CAChC,SACA,gBACI;AAAA,EACJ,MAAM,QAAQ,YAAe,WAAW;AAAA,EACxC,MAAM,SAAS,gBAAgB;AAAA,EAC/B,MAAM,iBAAiB,OAAO,IAAI,OAAO,KAAK,IAAI;AAAA,EAClD,MAAM,kBAAkB,uBAAuB,EAAE;AAAA,EACjD,cAAc,OAAO,eAAe;AAAA,EACpC,IAAI,6BAA6B;AAAA,EAEjC,MAAM,wBAAwB,CAAC,aAA+B;AAAA,IAC7D,6BAA6B;AAAA,IAC7B,cAAc,OAAO,QAAQ;AAAA;AAAA,EAG9B,MAAM,eAAe,CAAC,UAAa;AAAA,IAClC,MAAM,eAAe,oBAAoB,KAAK;AAAA,IAC9C,uBAAuB,EAAE,WAAW;AAAA,IAEpC,WAAW,aAAa,gBAAgB;AAAA,MACvC,IAAI,UAAU,UAAU,OAAO;AAAA,QAC9B;AAAA,MACD;AAAA,MAEA,UAAU,sBAAsB,YAAY;AAAA,IAC7C;AAAA;AAAA,EAGD,eAAe,IAAI;AAAA,IAClB;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,OAAO,IAAI,SAAS,cAAc;AAAA,EAElC,aAAa,MAAM,SAAS,CAAC;AAAA,EAC7B,MAAM,UAAU,CAAC,UAAU;AAAA,IAC1B,IAAI,4BAA4B;AAAA,MAC/B,6BAA6B;AAAA,MAC7B;AAAA,IACD;AAAA,IAEA,aAAa,KAAK;AAAA,GAClB;AAAA,EAED,OAAO;AAAA;AAGD,IAAM,kBAAkB,CAI9B,OACA,aACI,SAAS,MAAM,SAAS,CAAC;AAEvB,IAAM,uBAAuB,CAInC,OACA,UACA,aACI;AAAA,EACJ,IAAI,mBAAmB,SAAS,MAAM,SAAS,CAAC;AAAA,EAEhD,OAAO,MAAM,UAAU,CAAC,UAAU;AAAA,IACjC,MAAM,gBAAgB,SAAS,KAAK;AAAA,IACpC,IAAI,OAAO,GAAG,eAAe,gBAAgB,GAAG;AAAA,MAC/C;AAAA,IACD;AAAA,IAEA,mBAAmB;AAAA,IACnB,SAAS,aAAa;AAAA,GACtB;AAAA;AAGK,IAAM,+BAA+B,CAI3C,OACA,aACI,SAAS,MAAM,gBAAgB,CAAC;;;ACpJ9B,IAAM,iBAAiB,CAI7B,OACA,cACK;AAAA,EACL,SAAS,CAAC,UAAsC;AAAA,IAC/C,SAAS,gBAAgB,OAAO,QAAQ,CAAC;AAAA,IACzC,OAAO,qBAAqB,OAAO,UAAU,QAAQ;AAAA;AAEvD;;;ACbO,IAAM,eAAe,YAAY;AAAA,EACvC,MAAM,IAAI,MACT,qEACD;AAAA;",
16
+ "debugId": "9FC43098F735C99364756E2164756E21",
17
17
  "names": []
18
18
  }
@@ -30719,31 +30719,45 @@ var initializeIslandStores = (state) => {
30719
30719
  };
30720
30720
  globalThis.__ABS_ISLAND_STATE__ = nextSnapshot;
30721
30721
  for (const [storeId, store] of getIslandStores()) {
30722
- applySnapshot(store, nextSnapshot[storeId]);
30722
+ for (const instance of store) {
30723
+ instance.applyExternalSnapshot(nextSnapshot[storeId] ?? {});
30724
+ }
30723
30725
  }
30724
30726
  };
30725
- var createIslandStore = (storeId) => (createState) => {
30727
+ var createIslandStore = (storeId, createState) => {
30728
+ const store = createStore(createState);
30726
30729
  const stores = getIslandStores();
30727
- const existingStore = stores.get(storeId);
30728
- if (existingStore) {
30729
- return existingStore;
30730
- }
30731
- const store = createStore()((set, get, api) => createState((update) => {
30732
- set((state) => {
30733
- const nextPartial = typeof update === "function" ? update(state) : update;
30734
- return {
30735
- ...state,
30736
- ...nextPartial
30737
- };
30738
- });
30739
- }, get, api));
30730
+ const storeInstances = stores.get(storeId) ?? new Set;
30740
30731
  const initialSnapshot = getIslandStoreSnapshot()[storeId];
30741
30732
  applySnapshot(store, initialSnapshot);
30742
- getIslandStoreSnapshot()[storeId] = toSerializableState(store.getState());
30733
+ let isApplyingExternalSnapshot = false;
30734
+ const applyExternalSnapshot = (snapshot) => {
30735
+ isApplyingExternalSnapshot = true;
30736
+ applySnapshot(store, snapshot);
30737
+ };
30738
+ const syncSnapshot = (state) => {
30739
+ const nextSnapshot = toSerializableState(state);
30740
+ getIslandStoreSnapshot()[storeId] = nextSnapshot;
30741
+ for (const peerStore of storeInstances) {
30742
+ if (peerStore.store === store) {
30743
+ continue;
30744
+ }
30745
+ peerStore.applyExternalSnapshot(nextSnapshot);
30746
+ }
30747
+ };
30748
+ storeInstances.add({
30749
+ applyExternalSnapshot,
30750
+ store
30751
+ });
30752
+ stores.set(storeId, storeInstances);
30753
+ syncSnapshot(store.getState());
30743
30754
  store.subscribe((state) => {
30744
- getIslandStoreSnapshot()[storeId] = toSerializableState(state);
30755
+ if (isApplyingExternalSnapshot) {
30756
+ isApplyingExternalSnapshot = false;
30757
+ return;
30758
+ }
30759
+ syncSnapshot(state);
30745
30760
  });
30746
- stores.set(storeId, store);
30747
30761
  return store;
30748
30762
  };
30749
30763
  var readIslandStore = (store, selector) => selector(store.getState());
@@ -30788,5 +30802,5 @@ export {
30788
30802
  Island_default as Island
30789
30803
  };
30790
30804
 
30791
- //# debugId=66661F45A07049C964756E2164756E21
30805
+ //# debugId=9CFC1F9433B3007E64756E2164756E21
30792
30806
  //# sourceMappingURL=index.js.map