@tanstack/store 0.9.0 → 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.
@@ -7,6 +7,7 @@ exports.createAsyncAtom = atom.createAsyncAtom;
7
7
  exports.createAtom = atom.createAtom;
8
8
  exports.flush = atom.flush;
9
9
  exports.toObserver = atom.toObserver;
10
+ exports.ReadonlyStore = store.ReadonlyStore;
10
11
  exports.Store = store.Store;
11
12
  exports.createStore = store.createStore;
12
13
  exports.batch = batch.batch;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
@@ -20,12 +20,29 @@ class Store {
20
20
  return this.atom.subscribe(atom.toObserver(observerOrFn));
21
21
  }
22
22
  }
23
+ class ReadonlyStore {
24
+ constructor(valueOrFn) {
25
+ this.atom = atom.createAtom(
26
+ valueOrFn
27
+ );
28
+ }
29
+ get state() {
30
+ return this.atom.get();
31
+ }
32
+ get() {
33
+ return this.state;
34
+ }
35
+ subscribe(observerOrFn) {
36
+ return this.atom.subscribe(atom.toObserver(observerOrFn));
37
+ }
38
+ }
23
39
  function createStore(valueOrFn) {
24
40
  if (typeof valueOrFn === "function") {
25
- return new Store(valueOrFn);
41
+ return new ReadonlyStore(valueOrFn);
26
42
  }
27
43
  return new Store(valueOrFn);
28
44
  }
45
+ exports.ReadonlyStore = ReadonlyStore;
29
46
  exports.Store = Store;
30
47
  exports.createStore = createStore;
31
48
  //# sourceMappingURL=store.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.cjs","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 function createStore<T>(getValue: (prev?: NoInfer<T>) => T): Store<T>\nexport function createStore<T>(initialValue: T): Store<T>\nexport function createStore<T>(valueOrFn: T | ((prev?: T) => T)): Store<T> {\n if (typeof valueOrFn === 'function') {\n return new Store(valueOrFn as (prev?: NoInfer<T>) => T)\n }\n return new Store(valueOrFn)\n}\n"],"names":["createAtom","toObserver"],"mappings":";;;AAGO,MAAM,MAAS;AAAA,EAIpB,YAAY,WAAkC;AAG5C,SAAK,OAAOA,KAAAA;AAAAA,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,UAAUC,KAAAA,WAAW,YAAY,CAAC;AAAA,EACrD;AACF;AAIO,SAAS,YAAe,WAA4C;AACzE,MAAI,OAAO,cAAc,YAAY;AACnC,WAAO,IAAI,MAAM,SAAqC;AAAA,EACxD;AACA,SAAO,IAAI,MAAM,SAAS;AAC5B;;;"}
1
+ {"version":3,"file":"store.cjs","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":["createAtom","toObserver"],"mappings":";;;AAGO,MAAM,MAAS;AAAA,EAIpB,YAAY,WAAkC;AAG5C,SAAK,OAAOA,KAAAA;AAAAA,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,UAAUC,KAAAA,WAAW,YAAY,CAAC;AAAA,EACrD;AACF;AAEO,MAAM,cAAuD;AAAA,EAIlE,YAAY,WAAkC;AAG5C,SAAK,OAAOD,KAAAA;AAAAA,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,UAAUC,KAAAA,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;;;;"}
@@ -8,5 +8,13 @@ export declare class Store<T> {
8
8
  get(): T;
9
9
  subscribe(observerOrFn: Observer<T> | ((value: T) => void)): Subscription;
10
10
  }
11
- export declare function createStore<T>(getValue: (prev?: NoInfer<T>) => T): Store<T>;
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;
18
+ }
19
+ export declare function createStore<T>(getValue: (prev?: NoInfer<T>) => T): ReadonlyStore<T>;
12
20
  export declare function createStore<T>(initialValue: T): Store<T>;
package/dist/esm/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { createAsyncAtom, createAtom, flush, toObserver } from "./atom.js";
2
- import { Store, createStore } from "./store.js";
2
+ import { ReadonlyStore, Store, createStore } from "./store.js";
3
3
  import { batch } from "./batch.js";
4
4
  export {
5
+ ReadonlyStore,
5
6
  Store,
6
7
  batch,
7
8
  createAsyncAtom,
@@ -8,5 +8,13 @@ export declare class Store<T> {
8
8
  get(): T;
9
9
  subscribe(observerOrFn: Observer<T> | ((value: T) => void)): Subscription;
10
10
  }
11
- export declare function createStore<T>(getValue: (prev?: NoInfer<T>) => T): Store<T>;
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;
18
+ }
19
+ export declare function createStore<T>(getValue: (prev?: NoInfer<T>) => T): ReadonlyStore<T>;
12
20
  export declare function createStore<T>(initialValue: T): Store<T>;
package/dist/esm/store.js CHANGED
@@ -18,13 +18,30 @@ class Store {
18
18
  return this.atom.subscribe(toObserver(observerOrFn));
19
19
  }
20
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
+ }
21
37
  function createStore(valueOrFn) {
22
38
  if (typeof valueOrFn === "function") {
23
- return new Store(valueOrFn);
39
+ return new ReadonlyStore(valueOrFn);
24
40
  }
25
41
  return new Store(valueOrFn);
26
42
  }
27
43
  export {
44
+ ReadonlyStore,
28
45
  Store,
29
46
  createStore
30
47
  };
@@ -1 +1 @@
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 function createStore<T>(getValue: (prev?: NoInfer<T>) => T): Store<T>\nexport function createStore<T>(initialValue: T): Store<T>\nexport function createStore<T>(valueOrFn: T | ((prev?: T) => T)): Store<T> {\n if (typeof valueOrFn === 'function') {\n return new Store(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;AAIO,SAAS,YAAe,WAA4C;AACzE,MAAI,OAAO,cAAc,YAAY;AACnC,WAAO,IAAI,MAAM,SAAqC;AAAA,EACxD;AACA,SAAO,IAAI,MAAM,SAAS;AAC5B;"}
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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/store",
3
- "version": "0.9.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",
package/src/store.ts CHANGED
@@ -28,11 +28,39 @@ export class Store<T> {
28
28
  }
29
29
  }
30
30
 
31
- export function createStore<T>(getValue: (prev?: NoInfer<T>) => T): Store<T>
31
+ export class ReadonlyStore<T> implements Omit<Store<T>, 'setState'> {
32
+ private atom: Atom<T>
33
+ constructor(getValue: (prev?: NoInfer<T>) => T)
34
+ constructor(initialValue: T)
35
+ constructor(valueOrFn: T | ((prev?: T) => T)) {
36
+ // createAtom has overloads that return ReadonlyAtom<T> for functions and Atom<T> for values
37
+ // Store always needs Atom<T> for setState, so we assert the return type
38
+ this.atom = createAtom(
39
+ valueOrFn as T | ((prev?: NoInfer<T>) => T),
40
+ ) as Atom<T>
41
+ }
42
+ public get state() {
43
+ return this.atom.get()
44
+ }
45
+ public get() {
46
+ return this.state
47
+ }
48
+ public subscribe(
49
+ observerOrFn: Observer<T> | ((value: T) => void),
50
+ ): Subscription {
51
+ return this.atom.subscribe(toObserver(observerOrFn))
52
+ }
53
+ }
54
+
55
+ export function createStore<T>(
56
+ getValue: (prev?: NoInfer<T>) => T,
57
+ ): ReadonlyStore<T>
32
58
  export function createStore<T>(initialValue: T): Store<T>
33
- export function createStore<T>(valueOrFn: T | ((prev?: T) => T)): Store<T> {
59
+ export function createStore<T>(
60
+ valueOrFn: T | ((prev?: T) => T),
61
+ ): Store<T> | ReadonlyStore<T> {
34
62
  if (typeof valueOrFn === 'function') {
35
- return new Store(valueOrFn as (prev?: NoInfer<T>) => T)
63
+ return new ReadonlyStore(valueOrFn as (prev?: NoInfer<T>) => T)
36
64
  }
37
65
  return new Store(valueOrFn)
38
66
  }