From a9d9b763ebc7a416358094fa768ea8548e21bd7e Mon Sep 17 00:00:00 2001 From: AJ Caldwell Date: Sun, 1 Sep 2024 22:08:38 -0700 Subject: [PATCH] Add enableSvelteStore --- src/config/enableSvelteStore.ts | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/config/enableSvelteStore.ts diff --git a/src/config/enableSvelteStore.ts b/src/config/enableSvelteStore.ts new file mode 100644 index 00000000..0a509cec --- /dev/null +++ b/src/config/enableSvelteStore.ts @@ -0,0 +1,33 @@ +import { internal, NodeInfo } from '@legendapp/state'; +import { configureLegendState } from '@legendapp/state/config'; + +type Subscriber = (value: T) => void; +type Unsubscriber = () => void; +type Updater = (value: T) => T; + +export function enableSvelteStore() { + configureLegendState({ + observableFunctions: { + subscribe: (node: NodeInfo, run: Subscriber): Unsubscriber => { + const proxy = internal.getProxy(node); + run(proxy.get()); + return proxy.onChange(({ value }) => run(value)); + }, + update: (node: NodeInfo, updater: Updater) => { + internal.getProxy(node).set(updater); + }, + }, + }); +} + +// Types: + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import type { ImmutableObservableBase } from '@legendapp/state'; + +declare module '@legendapp/state' { + interface ImmutableObservableBase { + subscribe(this: void, run: Subscriber): Unsubscriber; + update(this: void, updater: Updater): void; + } +}