INIT
CI / build (push) Has been skipped
CI / deploy (push) Successful in 1m11s

This commit is contained in:
eewing
2026-02-18 15:17:47 -06:00
parent e74c106f85
commit ec317eb17c
11532 changed files with 1631690 additions and 1 deletions
+31
View File
@@ -0,0 +1,31 @@
export class SharedState {
#factory;
#subscribers = 0;
#state = $state();
#scope;
constructor(factory) {
this.#factory = factory;
}
#dispose() {
this.#subscribers -= 1;
if (this.#scope && this.#subscribers <= 0) {
this.#scope();
this.#state = undefined;
this.#scope = undefined;
}
}
get(...args) {
this.#subscribers += 1;
if (this.#state === undefined) {
this.#scope = $effect.root(() => {
this.#state = this.#factory(...args);
});
}
$effect(() => {
return () => {
this.#dispose();
};
});
return this.#state;
}
}