@tanstack/store 0.8.1 → 0.9.1
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.
- package/dist/cjs/alien.cjs +345 -0
- package/dist/cjs/alien.cjs.map +1 -0
- package/dist/cjs/alien.d.cts +57 -0
- package/dist/cjs/atom.cjs +222 -0
- package/dist/cjs/atom.cjs.map +1 -0
- package/dist/cjs/atom.d.cts +16 -0
- package/dist/cjs/batch.cjs +15 -0
- package/dist/cjs/batch.cjs.map +1 -0
- package/dist/cjs/batch.d.cts +1 -0
- package/dist/cjs/index.cjs +9 -12
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +3 -4
- package/dist/cjs/store.cjs +39 -29
- package/dist/cjs/store.cjs.map +1 -1
- package/dist/cjs/store.d.cts +18 -29
- package/dist/cjs/types.d.cts +47 -20
- package/dist/esm/alien.d.ts +57 -0
- package/dist/esm/alien.js +345 -0
- package/dist/esm/alien.js.map +1 -0
- package/dist/esm/atom.d.ts +16 -0
- package/dist/esm/atom.js +222 -0
- package/dist/esm/atom.js.map +1 -0
- package/dist/esm/batch.d.ts +1 -0
- package/dist/esm/batch.js +15 -0
- package/dist/esm/batch.js.map +1 -0
- package/dist/esm/index.d.ts +3 -4
- package/dist/esm/index.js +9 -12
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/store.d.ts +18 -29
- package/dist/esm/store.js +40 -30
- package/dist/esm/store.js.map +1 -1
- package/dist/esm/types.d.ts +47 -20
- package/package.json +6 -7
- package/src/alien.ts +654 -0
- package/src/atom.ts +298 -0
- package/src/batch.ts +12 -0
- package/src/index.ts +3 -4
- package/src/store.ts +58 -69
- package/src/types.ts +60 -24
- package/dist/cjs/derived.cjs +0 -117
- package/dist/cjs/derived.cjs.map +0 -1
- package/dist/cjs/derived.d.cts +0 -50
- package/dist/cjs/effect.cjs +0 -24
- package/dist/cjs/effect.cjs.map +0 -1
- package/dist/cjs/effect.d.cts +0 -18
- package/dist/cjs/scheduler.cjs +0 -109
- package/dist/cjs/scheduler.cjs.map +0 -1
- package/dist/cjs/scheduler.d.cts +0 -27
- package/dist/cjs/types.cjs +0 -7
- package/dist/cjs/types.cjs.map +0 -1
- package/dist/esm/derived.d.ts +0 -50
- package/dist/esm/derived.js +0 -117
- package/dist/esm/derived.js.map +0 -1
- package/dist/esm/effect.d.ts +0 -18
- package/dist/esm/effect.js +0 -24
- package/dist/esm/effect.js.map +0 -1
- package/dist/esm/scheduler.d.ts +0 -27
- package/dist/esm/scheduler.js +0 -109
- package/dist/esm/scheduler.js.map +0 -1
- package/dist/esm/types.js +0 -7
- package/dist/esm/types.js.map +0 -1
- package/src/derived.ts +0 -203
- package/src/effect.ts +0 -42
- package/src/scheduler.ts +0 -155
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { isUpdaterFunction } from "./types.js";
|
|
5
|
-
import { __depsThatHaveWrittenThisTick, __derivedToStore, __flush, __storeToDerived, batch } from "./scheduler.js";
|
|
1
|
+
import { createAsyncAtom, createAtom, flush, toObserver } from "./atom.js";
|
|
2
|
+
import { ReadonlyStore, Store, createStore } from "./store.js";
|
|
3
|
+
import { batch } from "./batch.js";
|
|
6
4
|
export {
|
|
7
|
-
|
|
8
|
-
Effect,
|
|
5
|
+
ReadonlyStore,
|
|
9
6
|
Store,
|
|
10
|
-
__depsThatHaveWrittenThisTick,
|
|
11
|
-
__derivedToStore,
|
|
12
|
-
__flush,
|
|
13
|
-
__storeToDerived,
|
|
14
7
|
batch,
|
|
15
|
-
|
|
8
|
+
createAsyncAtom,
|
|
9
|
+
createAtom,
|
|
10
|
+
createStore,
|
|
11
|
+
flush,
|
|
12
|
+
toObserver
|
|
16
13
|
};
|
|
17
14
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
package/dist/esm/store.d.ts
CHANGED
|
@@ -1,31 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* @return a function to unsubscribe the listener
|
|
11
|
-
*/
|
|
12
|
-
onSubscribe?: (listener: Listener<TState>, store: Store<TState, TUpdater>) => () => void;
|
|
13
|
-
/**
|
|
14
|
-
* Called after the state has been updated, used to derive other state.
|
|
15
|
-
*/
|
|
16
|
-
onUpdate?: () => void;
|
|
1
|
+
import { Observer, Subscription } from './types.js';
|
|
2
|
+
export declare class Store<T> {
|
|
3
|
+
private atom;
|
|
4
|
+
constructor(getValue: (prev?: NoInfer<T>) => T);
|
|
5
|
+
constructor(initialValue: T);
|
|
6
|
+
setState(updater: (prev: T) => T): void;
|
|
7
|
+
get state(): T;
|
|
8
|
+
get(): T;
|
|
9
|
+
subscribe(observerOrFn: Observer<T> | ((value: T) => void)): Subscription;
|
|
17
10
|
}
|
|
18
|
-
export declare class
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
subscribe
|
|
25
|
-
/**
|
|
26
|
-
* Update the store state safely with improved type checking
|
|
27
|
-
*/
|
|
28
|
-
setState(updater: (prevState: TState) => TState): void;
|
|
29
|
-
setState(updater: TState): void;
|
|
30
|
-
setState(updater: TUpdater): void;
|
|
11
|
+
export declare class ReadonlyStore<T> implements Omit<Store<T>, 'setState'> {
|
|
12
|
+
private atom;
|
|
13
|
+
constructor(getValue: (prev?: NoInfer<T>) => T);
|
|
14
|
+
constructor(initialValue: T);
|
|
15
|
+
get state(): T;
|
|
16
|
+
get(): T;
|
|
17
|
+
subscribe(observerOrFn: Observer<T> | ((value: T) => void)): Subscription;
|
|
31
18
|
}
|
|
19
|
+
export declare function createStore<T>(getValue: (prev?: NoInfer<T>) => T): ReadonlyStore<T>;
|
|
20
|
+
export declare function createStore<T>(initialValue: T): Store<T>;
|
package/dist/esm/store.js
CHANGED
|
@@ -1,38 +1,48 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isUpdaterFunction } from "./types.js";
|
|
1
|
+
import { createAtom, toObserver } from "./atom.js";
|
|
3
2
|
class Store {
|
|
4
|
-
constructor(
|
|
5
|
-
this.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
this.listeners.add(listener);
|
|
9
|
-
const unsub = (_b = (_a = this.options) == null ? void 0 : _a.onSubscribe) == null ? void 0 : _b.call(_a, listener, this);
|
|
10
|
-
return () => {
|
|
11
|
-
this.listeners.delete(listener);
|
|
12
|
-
unsub == null ? void 0 : unsub();
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
this.prevState = initialState;
|
|
16
|
-
this.state = initialState;
|
|
17
|
-
this.options = options;
|
|
3
|
+
constructor(valueOrFn) {
|
|
4
|
+
this.atom = createAtom(
|
|
5
|
+
valueOrFn
|
|
6
|
+
);
|
|
18
7
|
}
|
|
19
8
|
setState(updater) {
|
|
20
|
-
|
|
21
|
-
this.prevState = this.state;
|
|
22
|
-
if ((_a = this.options) == null ? void 0 : _a.updateFn) {
|
|
23
|
-
this.state = this.options.updateFn(this.prevState)(updater);
|
|
24
|
-
} else {
|
|
25
|
-
if (isUpdaterFunction(updater)) {
|
|
26
|
-
this.state = updater(this.prevState);
|
|
27
|
-
} else {
|
|
28
|
-
this.state = updater;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
(_c = (_b = this.options) == null ? void 0 : _b.onUpdate) == null ? void 0 : _c.call(_b);
|
|
32
|
-
__flush(this);
|
|
9
|
+
this.atom.set(updater);
|
|
33
10
|
}
|
|
11
|
+
get state() {
|
|
12
|
+
return this.atom.get();
|
|
13
|
+
}
|
|
14
|
+
get() {
|
|
15
|
+
return this.state;
|
|
16
|
+
}
|
|
17
|
+
subscribe(observerOrFn) {
|
|
18
|
+
return this.atom.subscribe(toObserver(observerOrFn));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
class ReadonlyStore {
|
|
22
|
+
constructor(valueOrFn) {
|
|
23
|
+
this.atom = createAtom(
|
|
24
|
+
valueOrFn
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
get state() {
|
|
28
|
+
return this.atom.get();
|
|
29
|
+
}
|
|
30
|
+
get() {
|
|
31
|
+
return this.state;
|
|
32
|
+
}
|
|
33
|
+
subscribe(observerOrFn) {
|
|
34
|
+
return this.atom.subscribe(toObserver(observerOrFn));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function createStore(valueOrFn) {
|
|
38
|
+
if (typeof valueOrFn === "function") {
|
|
39
|
+
return new ReadonlyStore(valueOrFn);
|
|
40
|
+
}
|
|
41
|
+
return new Store(valueOrFn);
|
|
34
42
|
}
|
|
35
43
|
export {
|
|
36
|
-
|
|
44
|
+
ReadonlyStore,
|
|
45
|
+
Store,
|
|
46
|
+
createStore
|
|
37
47
|
};
|
|
38
48
|
//# sourceMappingURL=store.js.map
|
package/dist/esm/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sources":["../../src/store.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"store.js","sources":["../../src/store.ts"],"sourcesContent":["import { createAtom, toObserver } from './atom'\nimport type { Atom, Observer, Subscription } from './types'\n\nexport class Store<T> {\n private atom: Atom<T>\n constructor(getValue: (prev?: NoInfer<T>) => T)\n constructor(initialValue: T)\n constructor(valueOrFn: T | ((prev?: T) => T)) {\n // createAtom has overloads that return ReadonlyAtom<T> for functions and Atom<T> for values\n // Store always needs Atom<T> for setState, so we assert the return type\n this.atom = createAtom(\n valueOrFn as T | ((prev?: NoInfer<T>) => T),\n ) as Atom<T>\n }\n public setState(updater: (prev: T) => T) {\n this.atom.set(updater)\n }\n public get state() {\n return this.atom.get()\n }\n public get() {\n return this.state\n }\n public subscribe(\n observerOrFn: Observer<T> | ((value: T) => void),\n ): Subscription {\n return this.atom.subscribe(toObserver(observerOrFn))\n }\n}\n\nexport class ReadonlyStore<T> implements Omit<Store<T>, 'setState'> {\n private atom: Atom<T>\n constructor(getValue: (prev?: NoInfer<T>) => T)\n constructor(initialValue: T)\n constructor(valueOrFn: T | ((prev?: T) => T)) {\n // createAtom has overloads that return ReadonlyAtom<T> for functions and Atom<T> for values\n // Store always needs Atom<T> for setState, so we assert the return type\n this.atom = createAtom(\n valueOrFn as T | ((prev?: NoInfer<T>) => T),\n ) as Atom<T>\n }\n public get state() {\n return this.atom.get()\n }\n public get() {\n return this.state\n }\n public subscribe(\n observerOrFn: Observer<T> | ((value: T) => void),\n ): Subscription {\n return this.atom.subscribe(toObserver(observerOrFn))\n }\n}\n\nexport function createStore<T>(\n getValue: (prev?: NoInfer<T>) => T,\n): ReadonlyStore<T>\nexport function createStore<T>(initialValue: T): Store<T>\nexport function createStore<T>(\n valueOrFn: T | ((prev?: T) => T),\n): Store<T> | ReadonlyStore<T> {\n if (typeof valueOrFn === 'function') {\n return new ReadonlyStore(valueOrFn as (prev?: NoInfer<T>) => T)\n }\n return new Store(valueOrFn)\n}\n"],"names":[],"mappings":";AAGO,MAAM,MAAS;AAAA,EAIpB,YAAY,WAAkC;AAG5C,SAAK,OAAO;AAAA,MACV;AAAA,IAAA;AAAA,EAEJ;AAAA,EACO,SAAS,SAAyB;AACvC,SAAK,KAAK,IAAI,OAAO;AAAA,EACvB;AAAA,EACA,IAAW,QAAQ;AACjB,WAAO,KAAK,KAAK,IAAA;AAAA,EACnB;AAAA,EACO,MAAM;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EACO,UACL,cACc;AACd,WAAO,KAAK,KAAK,UAAU,WAAW,YAAY,CAAC;AAAA,EACrD;AACF;AAEO,MAAM,cAAuD;AAAA,EAIlE,YAAY,WAAkC;AAG5C,SAAK,OAAO;AAAA,MACV;AAAA,IAAA;AAAA,EAEJ;AAAA,EACA,IAAW,QAAQ;AACjB,WAAO,KAAK,KAAK,IAAA;AAAA,EACnB;AAAA,EACO,MAAM;AACX,WAAO,KAAK;AAAA,EACd;AAAA,EACO,UACL,cACc;AACd,WAAO,KAAK,KAAK,UAAU,WAAW,YAAY,CAAC;AAAA,EACrD;AACF;AAMO,SAAS,YACd,WAC6B;AAC7B,MAAI,OAAO,cAAc,YAAY;AACnC,WAAO,IAAI,cAAc,SAAqC;AAAA,EAChE;AACA,SAAO,IAAI,MAAM,SAAS;AAC5B;"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,23 +1,50 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import { ReactiveNode } from './alien.js';
|
|
2
|
+
export type Selection<TSelected> = Readable<TSelected>;
|
|
3
|
+
export interface InteropSubscribable<T> {
|
|
4
|
+
subscribe: (observer: Observer<T>) => Subscription;
|
|
5
|
+
}
|
|
6
|
+
export type Observer<T> = {
|
|
7
|
+
next?: (value: T) => void;
|
|
8
|
+
error?: (err: unknown) => void;
|
|
9
|
+
complete?: () => void;
|
|
10
|
+
};
|
|
11
|
+
export interface Subscription {
|
|
12
|
+
unsubscribe: () => void;
|
|
13
|
+
}
|
|
14
|
+
export interface Subscribable<T> extends InteropSubscribable<T> {
|
|
15
|
+
subscribe: ((observer: Observer<T>) => Subscription) & ((next: (value: T) => void, error?: (error: any) => void, complete?: () => void) => Subscription);
|
|
16
|
+
}
|
|
17
|
+
export interface Readable<T> extends Subscribable<T> {
|
|
18
|
+
get: () => T;
|
|
19
|
+
}
|
|
20
|
+
export interface BaseAtom<T> extends Subscribable<T>, Readable<T> {
|
|
21
|
+
}
|
|
22
|
+
export interface InternalBaseAtom<T> extends Subscribable<T>, Readable<T> {
|
|
23
|
+
/** @internal */
|
|
24
|
+
_snapshot: T;
|
|
25
|
+
/** @internal */
|
|
26
|
+
_update: (getValue?: T | ((snapshot: T) => T)) => boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface Atom<T> extends BaseAtom<T> {
|
|
29
|
+
/** Sets the value of the atom using a function. */
|
|
30
|
+
set: ((fn: (prevVal: T) => T) => void) & ((value: T) => void);
|
|
31
|
+
}
|
|
32
|
+
export interface AtomOptions<T> {
|
|
33
|
+
compare?: (prev: T, next: T) => boolean;
|
|
34
|
+
}
|
|
35
|
+
export type AnyAtom = BaseAtom<any>;
|
|
36
|
+
export interface InternalReadonlyAtom<T> extends InternalBaseAtom<T>, ReactiveNode {
|
|
15
37
|
}
|
|
16
38
|
/**
|
|
17
|
-
*
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
*
|
|
39
|
+
* An atom that is read-only and cannot be set.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
*
|
|
43
|
+
* ```ts
|
|
44
|
+
* const atom = createAtom(() => 42);
|
|
45
|
+
* // @ts-expect-error - Cannot set a readonly atom
|
|
46
|
+
* atom.set(43);
|
|
47
|
+
* ```
|
|
22
48
|
*/
|
|
23
|
-
export
|
|
49
|
+
export interface ReadonlyAtom<T> extends BaseAtom<T> {
|
|
50
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/store",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.1",
|
|
4
4
|
"description": "Framework agnostic type-safe store w/ reactive framework adapters",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"src"
|
|
42
42
|
],
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@angular/core": "^
|
|
44
|
+
"@angular/core": "^21.1.2",
|
|
45
45
|
"@preact/signals": "^1.3.2",
|
|
46
46
|
"solid-js": "^1.9.9",
|
|
47
47
|
"vue": "^3.5.22"
|
|
@@ -50,11 +50,10 @@
|
|
|
50
50
|
"clean": "premove ./dist ./coverage",
|
|
51
51
|
"test:eslint": "eslint ./src ./tests",
|
|
52
52
|
"test:types": "pnpm run \"/^test:types:ts[0-9]{2}$/\"",
|
|
53
|
-
"test:types:
|
|
54
|
-
"test:types:
|
|
55
|
-
"test:types:
|
|
56
|
-
"test:types:
|
|
57
|
-
"test:types:ts54": "tsc",
|
|
53
|
+
"test:types:ts56": "node ../../node_modules/typescript56/lib/tsc.js",
|
|
54
|
+
"test:types:ts57": "node ../../node_modules/typescript57/lib/tsc.js",
|
|
55
|
+
"test:types:ts58": "node ../../node_modules/typescript58/lib/tsc.js",
|
|
56
|
+
"test:types:ts59": "tsc",
|
|
58
57
|
"test:lib": "vitest",
|
|
59
58
|
"test:bench": "vitest bench",
|
|
60
59
|
"test:lib:dev": "pnpm run test:lib --watch",
|