@tanstack/store 0.0.1-beta.85 → 0.0.1-beta.86
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/build/cjs/index.js +15 -14
- package/build/cjs/index.js.map +1 -1
- package/build/esm/index.js +15 -14
- package/build/esm/index.js.map +1 -1
- package/build/stats-html.html +1 -1
- package/build/stats-react.json +7 -7
- package/build/types/index.d.ts +0 -2
- package/build/umd/index.development.js +15 -14
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +15 -14
package/build/cjs/index.js
CHANGED
|
@@ -14,8 +14,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
14
14
|
|
|
15
15
|
class Store {
|
|
16
16
|
listeners = new Set();
|
|
17
|
-
batching = false;
|
|
18
|
-
|
|
17
|
+
#batching = false;
|
|
18
|
+
#flushing = 0;
|
|
19
19
|
constructor(initialState, options) {
|
|
20
20
|
this.state = initialState;
|
|
21
21
|
this.options = options;
|
|
@@ -33,22 +33,23 @@ class Store {
|
|
|
33
33
|
this.state = this.options?.updateFn ? this.options.updateFn(previous)(updater) : updater(previous);
|
|
34
34
|
if (this.state === previous) return;
|
|
35
35
|
this.options?.onUpdate?.(this.state, previous);
|
|
36
|
-
this
|
|
37
|
-
this.listeners.forEach(listener => listener(this.state, previous));
|
|
38
|
-
});
|
|
39
|
-
this.#flush();
|
|
36
|
+
this.#flush(previous);
|
|
40
37
|
};
|
|
41
|
-
#flush =
|
|
42
|
-
if (this
|
|
43
|
-
|
|
44
|
-
this.
|
|
38
|
+
#flush = previous => {
|
|
39
|
+
if (this.#batching) return;
|
|
40
|
+
const flushId = ++this.#flushing;
|
|
41
|
+
this.listeners.forEach(listener => {
|
|
42
|
+
if (this.#flushing !== flushId) return;
|
|
43
|
+
listener(this.state, previous);
|
|
44
|
+
});
|
|
45
45
|
};
|
|
46
46
|
batch = cb => {
|
|
47
|
-
if (this
|
|
48
|
-
|
|
47
|
+
if (this.#batching) return cb();
|
|
48
|
+
const previous = this.state;
|
|
49
|
+
this.#batching = true;
|
|
49
50
|
cb();
|
|
50
|
-
this
|
|
51
|
-
this.#flush();
|
|
51
|
+
this.#batching = false;
|
|
52
|
+
this.#flush(previous);
|
|
52
53
|
};
|
|
53
54
|
}
|
|
54
55
|
|
package/build/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["export type AnyUpdater = (...args: any[]) => any\n\nexport type Listener<TState> = (next: TState, prev: TState) => void\n\ninterface StoreOptions<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n updateFn?: (previous: TState) => (updater: TUpdater) => TState\n onSubscribe?: (\n listener: Listener<TState>,\n store: Store<TState, TUpdater>,\n ) => () => void\n onUpdate?: (next: TState, prev: TState) => void\n}\n\nexport class Store<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n listeners = new Set<Listener<TState>>()\n state: TState\n options?: StoreOptions<TState, TUpdater>\n batching = false\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["export type AnyUpdater = (...args: any[]) => any\n\nexport type Listener<TState> = (next: TState, prev: TState) => void\n\ninterface StoreOptions<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n updateFn?: (previous: TState) => (updater: TUpdater) => TState\n onSubscribe?: (\n listener: Listener<TState>,\n store: Store<TState, TUpdater>,\n ) => () => void\n onUpdate?: (next: TState, prev: TState) => void\n}\n\nexport class Store<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n listeners = new Set<Listener<TState>>()\n state: TState\n options?: StoreOptions<TState, TUpdater>\n #batching = false\n #flushing = 0\n\n constructor(initialState: TState, options?: StoreOptions<TState, TUpdater>) {\n this.state = initialState\n this.options = options\n }\n\n subscribe = (listener: Listener<TState>) => {\n this.listeners.add(listener)\n const unsub = this.options?.onSubscribe?.(listener, this)\n return () => {\n this.listeners.delete(listener)\n unsub?.()\n }\n }\n\n setState = (updater: TUpdater) => {\n const previous = this.state\n this.state = this.options?.updateFn\n ? this.options.updateFn(previous)(updater)\n : (updater as any)(previous)\n\n if (this.state === previous) return\n\n this.options?.onUpdate?.(this.state, previous)\n\n this.#flush(previous)\n }\n\n #flush = (previous: TState) => {\n if (this.#batching) return\n const flushId = ++this.#flushing\n this.listeners.forEach((listener) => {\n if (this.#flushing !== flushId) return\n listener(this.state, previous)\n })\n }\n\n batch = (cb: () => void) => {\n if (this.#batching) return cb()\n const previous = this.state\n this.#batching = true\n cb()\n this.#batching = false\n this.#flush(previous)\n }\n}\n"],"names":["Store","listeners","Set","constructor","initialState","options","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","flushId","forEach","batch","cb"],"mappings":";;;;;;;;;;;;;;AAgBO,MAAMA,KAAK,CAGhB;EACAC,SAAS,GAAG,IAAIC,GAAG,EAAoB,CAAA;EAGvC,SAAS,GAAG,KAAK,CAAA;EACjB,SAAS,GAAG,CAAC,CAAA;AAEbC,EAAAA,WAAW,CAACC,YAAoB,EAAEC,OAAwC,EAAE;IAC1E,IAAI,CAACC,KAAK,GAAGF,YAAY,CAAA;IACzB,IAAI,CAACC,OAAO,GAAGA,OAAO,CAAA;AACxB,GAAA;EAEAE,SAAS,GAAIC,QAA0B,IAAK;AAC1C,IAAA,IAAI,CAACP,SAAS,CAACQ,GAAG,CAACD,QAAQ,CAAC,CAAA;IAC5B,MAAME,KAAK,GAAG,IAAI,CAACL,OAAO,EAAEM,WAAW,GAAGH,QAAQ,EAAE,IAAI,CAAC,CAAA;AACzD,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAACP,SAAS,CAACW,MAAM,CAACJ,QAAQ,CAAC,CAAA;AAC/BE,MAAAA,KAAK,IAAI,CAAA;KACV,CAAA;GACF,CAAA;EAEDG,QAAQ,GAAIC,OAAiB,IAAK;AAChC,IAAA,MAAMC,QAAQ,GAAG,IAAI,CAACT,KAAK,CAAA;IAC3B,IAAI,CAACA,KAAK,GAAG,IAAI,CAACD,OAAO,EAAEW,QAAQ,GAC/B,IAAI,CAACX,OAAO,CAACW,QAAQ,CAACD,QAAQ,CAAC,CAACD,OAAO,CAAC,GACvCA,OAAO,CAASC,QAAQ,CAAC,CAAA;AAE9B,IAAA,IAAI,IAAI,CAACT,KAAK,KAAKS,QAAQ,EAAE,OAAA;IAE7B,IAAI,CAACV,OAAO,EAAEY,QAAQ,GAAG,IAAI,CAACX,KAAK,EAAES,QAAQ,CAAC,CAAA;AAE9C,IAAA,IAAI,CAAC,MAAM,CAACA,QAAQ,CAAC,CAAA;GACtB,CAAA;EAED,MAAM,GAAIA,QAAgB,IAAK;AAC7B,IAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAA;AACpB,IAAA,MAAMG,OAAO,GAAG,EAAE,IAAI,CAAC,SAAS,CAAA;AAChC,IAAA,IAAI,CAACjB,SAAS,CAACkB,OAAO,CAAEX,QAAQ,IAAK;AACnC,MAAA,IAAI,IAAI,CAAC,SAAS,KAAKU,OAAO,EAAE,OAAA;AAChCV,MAAAA,QAAQ,CAAC,IAAI,CAACF,KAAK,EAAES,QAAQ,CAAC,CAAA;AAChC,KAAC,CAAC,CAAA;GACH,CAAA;EAEDK,KAAK,GAAIC,EAAc,IAAK;AAC1B,IAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAOA,EAAE,EAAE,CAAA;AAC/B,IAAA,MAAMN,QAAQ,GAAG,IAAI,CAACT,KAAK,CAAA;AAC3B,IAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;AACrBe,IAAAA,EAAE,EAAE,CAAA;AACJ,IAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;AACtB,IAAA,IAAI,CAAC,MAAM,CAACN,QAAQ,CAAC,CAAA;GACtB,CAAA;AACH;;;;"}
|
package/build/esm/index.js
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
class Store {
|
|
12
12
|
listeners = new Set();
|
|
13
|
-
batching = false;
|
|
14
|
-
|
|
13
|
+
#batching = false;
|
|
14
|
+
#flushing = 0;
|
|
15
15
|
constructor(initialState, options) {
|
|
16
16
|
this.state = initialState;
|
|
17
17
|
this.options = options;
|
|
@@ -29,22 +29,23 @@ class Store {
|
|
|
29
29
|
this.state = this.options?.updateFn ? this.options.updateFn(previous)(updater) : updater(previous);
|
|
30
30
|
if (this.state === previous) return;
|
|
31
31
|
this.options?.onUpdate?.(this.state, previous);
|
|
32
|
-
this
|
|
33
|
-
this.listeners.forEach(listener => listener(this.state, previous));
|
|
34
|
-
});
|
|
35
|
-
this.#flush();
|
|
32
|
+
this.#flush(previous);
|
|
36
33
|
};
|
|
37
|
-
#flush =
|
|
38
|
-
if (this
|
|
39
|
-
|
|
40
|
-
this.
|
|
34
|
+
#flush = previous => {
|
|
35
|
+
if (this.#batching) return;
|
|
36
|
+
const flushId = ++this.#flushing;
|
|
37
|
+
this.listeners.forEach(listener => {
|
|
38
|
+
if (this.#flushing !== flushId) return;
|
|
39
|
+
listener(this.state, previous);
|
|
40
|
+
});
|
|
41
41
|
};
|
|
42
42
|
batch = cb => {
|
|
43
|
-
if (this
|
|
44
|
-
|
|
43
|
+
if (this.#batching) return cb();
|
|
44
|
+
const previous = this.state;
|
|
45
|
+
this.#batching = true;
|
|
45
46
|
cb();
|
|
46
|
-
this
|
|
47
|
-
this.#flush();
|
|
47
|
+
this.#batching = false;
|
|
48
|
+
this.#flush(previous);
|
|
48
49
|
};
|
|
49
50
|
}
|
|
50
51
|
|
package/build/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["export type AnyUpdater = (...args: any[]) => any\n\nexport type Listener<TState> = (next: TState, prev: TState) => void\n\ninterface StoreOptions<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n updateFn?: (previous: TState) => (updater: TUpdater) => TState\n onSubscribe?: (\n listener: Listener<TState>,\n store: Store<TState, TUpdater>,\n ) => () => void\n onUpdate?: (next: TState, prev: TState) => void\n}\n\nexport class Store<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n listeners = new Set<Listener<TState>>()\n state: TState\n options?: StoreOptions<TState, TUpdater>\n batching = false\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["export type AnyUpdater = (...args: any[]) => any\n\nexport type Listener<TState> = (next: TState, prev: TState) => void\n\ninterface StoreOptions<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n updateFn?: (previous: TState) => (updater: TUpdater) => TState\n onSubscribe?: (\n listener: Listener<TState>,\n store: Store<TState, TUpdater>,\n ) => () => void\n onUpdate?: (next: TState, prev: TState) => void\n}\n\nexport class Store<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n listeners = new Set<Listener<TState>>()\n state: TState\n options?: StoreOptions<TState, TUpdater>\n #batching = false\n #flushing = 0\n\n constructor(initialState: TState, options?: StoreOptions<TState, TUpdater>) {\n this.state = initialState\n this.options = options\n }\n\n subscribe = (listener: Listener<TState>) => {\n this.listeners.add(listener)\n const unsub = this.options?.onSubscribe?.(listener, this)\n return () => {\n this.listeners.delete(listener)\n unsub?.()\n }\n }\n\n setState = (updater: TUpdater) => {\n const previous = this.state\n this.state = this.options?.updateFn\n ? this.options.updateFn(previous)(updater)\n : (updater as any)(previous)\n\n if (this.state === previous) return\n\n this.options?.onUpdate?.(this.state, previous)\n\n this.#flush(previous)\n }\n\n #flush = (previous: TState) => {\n if (this.#batching) return\n const flushId = ++this.#flushing\n this.listeners.forEach((listener) => {\n if (this.#flushing !== flushId) return\n listener(this.state, previous)\n })\n }\n\n batch = (cb: () => void) => {\n if (this.#batching) return cb()\n const previous = this.state\n this.#batching = true\n cb()\n this.#batching = false\n this.#flush(previous)\n }\n}\n"],"names":["Store","listeners","Set","constructor","initialState","options","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","flushId","forEach","batch","cb"],"mappings":";;;;;;;;;;AAgBO,MAAMA,KAAK,CAGhB;EACAC,SAAS,GAAG,IAAIC,GAAG,EAAoB,CAAA;EAGvC,SAAS,GAAG,KAAK,CAAA;EACjB,SAAS,GAAG,CAAC,CAAA;AAEbC,EAAAA,WAAW,CAACC,YAAoB,EAAEC,OAAwC,EAAE;IAC1E,IAAI,CAACC,KAAK,GAAGF,YAAY,CAAA;IACzB,IAAI,CAACC,OAAO,GAAGA,OAAO,CAAA;AACxB,GAAA;EAEAE,SAAS,GAAIC,QAA0B,IAAK;AAC1C,IAAA,IAAI,CAACP,SAAS,CAACQ,GAAG,CAACD,QAAQ,CAAC,CAAA;IAC5B,MAAME,KAAK,GAAG,IAAI,CAACL,OAAO,EAAEM,WAAW,GAAGH,QAAQ,EAAE,IAAI,CAAC,CAAA;AACzD,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAACP,SAAS,CAACW,MAAM,CAACJ,QAAQ,CAAC,CAAA;AAC/BE,MAAAA,KAAK,IAAI,CAAA;KACV,CAAA;GACF,CAAA;EAEDG,QAAQ,GAAIC,OAAiB,IAAK;AAChC,IAAA,MAAMC,QAAQ,GAAG,IAAI,CAACT,KAAK,CAAA;IAC3B,IAAI,CAACA,KAAK,GAAG,IAAI,CAACD,OAAO,EAAEW,QAAQ,GAC/B,IAAI,CAACX,OAAO,CAACW,QAAQ,CAACD,QAAQ,CAAC,CAACD,OAAO,CAAC,GACvCA,OAAO,CAASC,QAAQ,CAAC,CAAA;AAE9B,IAAA,IAAI,IAAI,CAACT,KAAK,KAAKS,QAAQ,EAAE,OAAA;IAE7B,IAAI,CAACV,OAAO,EAAEY,QAAQ,GAAG,IAAI,CAACX,KAAK,EAAES,QAAQ,CAAC,CAAA;AAE9C,IAAA,IAAI,CAAC,MAAM,CAACA,QAAQ,CAAC,CAAA;GACtB,CAAA;EAED,MAAM,GAAIA,QAAgB,IAAK;AAC7B,IAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAA;AACpB,IAAA,MAAMG,OAAO,GAAG,EAAE,IAAI,CAAC,SAAS,CAAA;AAChC,IAAA,IAAI,CAACjB,SAAS,CAACkB,OAAO,CAAEX,QAAQ,IAAK;AACnC,MAAA,IAAI,IAAI,CAAC,SAAS,KAAKU,OAAO,EAAE,OAAA;AAChCV,MAAAA,QAAQ,CAAC,IAAI,CAACF,KAAK,EAAES,QAAQ,CAAC,CAAA;AAChC,KAAC,CAAC,CAAA;GACH,CAAA;EAEDK,KAAK,GAAIC,EAAc,IAAK;AAC1B,IAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAOA,EAAE,EAAE,CAAA;AAC/B,IAAA,MAAMN,QAAQ,GAAG,IAAI,CAACT,KAAK,CAAA;AAC3B,IAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;AACrBe,IAAAA,EAAE,EAAE,CAAA;AACJ,IAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;AACtB,IAAA,IAAI,CAAC,MAAM,CAACN,QAAQ,CAAC,CAAA;GACtB,CAAA;AACH;;;;"}
|
package/build/stats-html.html
CHANGED
|
@@ -4024,7 +4024,7 @@ var drawChart = (function (exports) {
|
|
|
4024
4024
|
</script>
|
|
4025
4025
|
<script>
|
|
4026
4026
|
/*<!--*/
|
|
4027
|
-
const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.production.js","children":[{"name":"packages/store/src/index.ts","uid":"
|
|
4027
|
+
const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.production.js","children":[{"name":"packages/store/src/index.ts","uid":"1628-1"}]}],"isRoot":true},"nodeParts":{"1628-1":{"renderedLength":1178,"gzipLength":392,"brotliLength":0,"mainUid":"1628-0"}},"nodeMetas":{"1628-0":{"id":"/packages/store/src/index.ts","moduleParts":{"index.production.js":"1628-1"},"imported":[],"importedBy":[],"isEntry":true}},"env":{"rollup":"2.79.1"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
|
|
4028
4028
|
|
|
4029
4029
|
const run = () => {
|
|
4030
4030
|
const width = window.innerWidth;
|
package/build/stats-react.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"children": [
|
|
9
9
|
{
|
|
10
10
|
"name": "packages/store/src/index.ts",
|
|
11
|
-
"uid": "
|
|
11
|
+
"uid": "1628-3"
|
|
12
12
|
}
|
|
13
13
|
]
|
|
14
14
|
}
|
|
@@ -16,18 +16,18 @@
|
|
|
16
16
|
"isRoot": true
|
|
17
17
|
},
|
|
18
18
|
"nodeParts": {
|
|
19
|
-
"
|
|
20
|
-
"renderedLength":
|
|
21
|
-
"gzipLength":
|
|
19
|
+
"1628-3": {
|
|
20
|
+
"renderedLength": 1178,
|
|
21
|
+
"gzipLength": 392,
|
|
22
22
|
"brotliLength": 0,
|
|
23
|
-
"mainUid": "
|
|
23
|
+
"mainUid": "1628-2"
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
"nodeMetas": {
|
|
27
|
-
"
|
|
27
|
+
"1628-2": {
|
|
28
28
|
"id": "/packages/store/src/index.ts",
|
|
29
29
|
"moduleParts": {
|
|
30
|
-
"index.production.js": "
|
|
30
|
+
"index.production.js": "1628-3"
|
|
31
31
|
},
|
|
32
32
|
"imported": [],
|
|
33
33
|
"importedBy": [],
|
package/build/types/index.d.ts
CHANGED
|
@@ -20,8 +20,6 @@ declare class Store<TState, TUpdater extends AnyUpdater = (cb: TState) => TState
|
|
|
20
20
|
listeners: Set<Listener<TState>>;
|
|
21
21
|
state: TState;
|
|
22
22
|
options?: StoreOptions<TState, TUpdater>;
|
|
23
|
-
batching: boolean;
|
|
24
|
-
queue: ((...args: any[]) => void)[];
|
|
25
23
|
constructor(initialState: TState, options?: StoreOptions<TState, TUpdater>);
|
|
26
24
|
subscribe: (listener: Listener<TState>) => () => void;
|
|
27
25
|
setState: (updater: TUpdater) => void;
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
class Store {
|
|
18
18
|
listeners = new Set();
|
|
19
|
-
batching = false;
|
|
20
|
-
|
|
19
|
+
#batching = false;
|
|
20
|
+
#flushing = 0;
|
|
21
21
|
constructor(initialState, options) {
|
|
22
22
|
this.state = initialState;
|
|
23
23
|
this.options = options;
|
|
@@ -35,22 +35,23 @@
|
|
|
35
35
|
this.state = this.options?.updateFn ? this.options.updateFn(previous)(updater) : updater(previous);
|
|
36
36
|
if (this.state === previous) return;
|
|
37
37
|
this.options?.onUpdate?.(this.state, previous);
|
|
38
|
-
this
|
|
39
|
-
this.listeners.forEach(listener => listener(this.state, previous));
|
|
40
|
-
});
|
|
41
|
-
this.#flush();
|
|
38
|
+
this.#flush(previous);
|
|
42
39
|
};
|
|
43
|
-
#flush =
|
|
44
|
-
if (this
|
|
45
|
-
|
|
46
|
-
this.
|
|
40
|
+
#flush = previous => {
|
|
41
|
+
if (this.#batching) return;
|
|
42
|
+
const flushId = ++this.#flushing;
|
|
43
|
+
this.listeners.forEach(listener => {
|
|
44
|
+
if (this.#flushing !== flushId) return;
|
|
45
|
+
listener(this.state, previous);
|
|
46
|
+
});
|
|
47
47
|
};
|
|
48
48
|
batch = cb => {
|
|
49
|
-
if (this
|
|
50
|
-
|
|
49
|
+
if (this.#batching) return cb();
|
|
50
|
+
const previous = this.state;
|
|
51
|
+
this.#batching = true;
|
|
51
52
|
cb();
|
|
52
|
-
this
|
|
53
|
-
this.#flush();
|
|
53
|
+
this.#batching = false;
|
|
54
|
+
this.#flush(previous);
|
|
54
55
|
};
|
|
55
56
|
}
|
|
56
57
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.development.js","sources":["../../src/index.ts"],"sourcesContent":["export type AnyUpdater = (...args: any[]) => any\n\nexport type Listener<TState> = (next: TState, prev: TState) => void\n\ninterface StoreOptions<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n updateFn?: (previous: TState) => (updater: TUpdater) => TState\n onSubscribe?: (\n listener: Listener<TState>,\n store: Store<TState, TUpdater>,\n ) => () => void\n onUpdate?: (next: TState, prev: TState) => void\n}\n\nexport class Store<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n listeners = new Set<Listener<TState>>()\n state: TState\n options?: StoreOptions<TState, TUpdater>\n batching = false\n
|
|
1
|
+
{"version":3,"file":"index.development.js","sources":["../../src/index.ts"],"sourcesContent":["export type AnyUpdater = (...args: any[]) => any\n\nexport type Listener<TState> = (next: TState, prev: TState) => void\n\ninterface StoreOptions<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n updateFn?: (previous: TState) => (updater: TUpdater) => TState\n onSubscribe?: (\n listener: Listener<TState>,\n store: Store<TState, TUpdater>,\n ) => () => void\n onUpdate?: (next: TState, prev: TState) => void\n}\n\nexport class Store<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n listeners = new Set<Listener<TState>>()\n state: TState\n options?: StoreOptions<TState, TUpdater>\n #batching = false\n #flushing = 0\n\n constructor(initialState: TState, options?: StoreOptions<TState, TUpdater>) {\n this.state = initialState\n this.options = options\n }\n\n subscribe = (listener: Listener<TState>) => {\n this.listeners.add(listener)\n const unsub = this.options?.onSubscribe?.(listener, this)\n return () => {\n this.listeners.delete(listener)\n unsub?.()\n }\n }\n\n setState = (updater: TUpdater) => {\n const previous = this.state\n this.state = this.options?.updateFn\n ? this.options.updateFn(previous)(updater)\n : (updater as any)(previous)\n\n if (this.state === previous) return\n\n this.options?.onUpdate?.(this.state, previous)\n\n this.#flush(previous)\n }\n\n #flush = (previous: TState) => {\n if (this.#batching) return\n const flushId = ++this.#flushing\n this.listeners.forEach((listener) => {\n if (this.#flushing !== flushId) return\n listener(this.state, previous)\n })\n }\n\n batch = (cb: () => void) => {\n if (this.#batching) return cb()\n const previous = this.state\n this.#batching = true\n cb()\n this.#batching = false\n this.#flush(previous)\n }\n}\n"],"names":["Store","listeners","Set","constructor","initialState","options","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","flushId","forEach","batch","cb"],"mappings":";;;;;;;;;;;;;;;;EAgBO,MAAMA,KAAK,CAGhB;IACAC,SAAS,GAAG,IAAIC,GAAG,EAAoB,CAAA;IAGvC,SAAS,GAAG,KAAK,CAAA;IACjB,SAAS,GAAG,CAAC,CAAA;EAEbC,EAAAA,WAAW,CAACC,YAAoB,EAAEC,OAAwC,EAAE;MAC1E,IAAI,CAACC,KAAK,GAAGF,YAAY,CAAA;MACzB,IAAI,CAACC,OAAO,GAAGA,OAAO,CAAA;EACxB,GAAA;IAEAE,SAAS,GAAIC,QAA0B,IAAK;EAC1C,IAAA,IAAI,CAACP,SAAS,CAACQ,GAAG,CAACD,QAAQ,CAAC,CAAA;MAC5B,MAAME,KAAK,GAAG,IAAI,CAACL,OAAO,EAAEM,WAAW,GAAGH,QAAQ,EAAE,IAAI,CAAC,CAAA;EACzD,IAAA,OAAO,MAAM;EACX,MAAA,IAAI,CAACP,SAAS,CAACW,MAAM,CAACJ,QAAQ,CAAC,CAAA;EAC/BE,MAAAA,KAAK,IAAI,CAAA;OACV,CAAA;KACF,CAAA;IAEDG,QAAQ,GAAIC,OAAiB,IAAK;EAChC,IAAA,MAAMC,QAAQ,GAAG,IAAI,CAACT,KAAK,CAAA;MAC3B,IAAI,CAACA,KAAK,GAAG,IAAI,CAACD,OAAO,EAAEW,QAAQ,GAC/B,IAAI,CAACX,OAAO,CAACW,QAAQ,CAACD,QAAQ,CAAC,CAACD,OAAO,CAAC,GACvCA,OAAO,CAASC,QAAQ,CAAC,CAAA;EAE9B,IAAA,IAAI,IAAI,CAACT,KAAK,KAAKS,QAAQ,EAAE,OAAA;MAE7B,IAAI,CAACV,OAAO,EAAEY,QAAQ,GAAG,IAAI,CAACX,KAAK,EAAES,QAAQ,CAAC,CAAA;EAE9C,IAAA,IAAI,CAAC,MAAM,CAACA,QAAQ,CAAC,CAAA;KACtB,CAAA;IAED,MAAM,GAAIA,QAAgB,IAAK;EAC7B,IAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAA;EACpB,IAAA,MAAMG,OAAO,GAAG,EAAE,IAAI,CAAC,SAAS,CAAA;EAChC,IAAA,IAAI,CAACjB,SAAS,CAACkB,OAAO,CAAEX,QAAQ,IAAK;EACnC,MAAA,IAAI,IAAI,CAAC,SAAS,KAAKU,OAAO,EAAE,OAAA;EAChCV,MAAAA,QAAQ,CAAC,IAAI,CAACF,KAAK,EAAES,QAAQ,CAAC,CAAA;EAChC,KAAC,CAAC,CAAA;KACH,CAAA;IAEDK,KAAK,GAAIC,EAAc,IAAK;EAC1B,IAAA,IAAI,IAAI,CAAC,SAAS,EAAE,OAAOA,EAAE,EAAE,CAAA;EAC/B,IAAA,MAAMN,QAAQ,GAAG,IAAI,CAACT,KAAK,CAAA;EAC3B,IAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;EACrBe,IAAAA,EAAE,EAAE,CAAA;EACJ,IAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;EACtB,IAAA,IAAI,CAAC,MAAM,CAACN,QAAQ,CAAC,CAAA;KACtB,CAAA;EACH;;;;;;;;;;"}
|
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @license MIT
|
|
10
10
|
*/
|
|
11
|
-
!function(t,
|
|
11
|
+
!function(t,s){"object"==typeof exports&&"undefined"!=typeof module?s(exports):"function"==typeof define&&define.amd?define(["exports"],s):s((t="undefined"!=typeof globalThis?globalThis:t||self).Store={})}(this,(function(t){"use strict";t.Store=class{listeners=new Set;#t=!1;#s=0;constructor(t,s){this.state=t,this.options=s}subscribe=t=>{this.listeners.add(t);const s=this.options?.onSubscribe?.(t,this);return()=>{this.listeners.delete(t),s?.()}};setState=t=>{const s=this.state;this.state=this.options?.updateFn?this.options.updateFn(s)(t):t(s),this.state!==s&&(this.options?.onUpdate?.(this.state,s),this.#e(s))};#e=t=>{if(this.#t)return;const s=++this.#s;this.listeners.forEach((e=>{this.#s===s&&e(this.state,t)}))};batch=t=>{if(this.#t)return t();const s=this.state;this.#t=!0,t(),this.#t=!1,this.#e(s)}},Object.defineProperty(t,"__esModule",{value:!0})}));
|
|
12
12
|
//# sourceMappingURL=index.production.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.production.js","sources":["../../src/index.ts"],"sourcesContent":["export type AnyUpdater = (...args: any[]) => any\n\nexport type Listener<TState> = (next: TState, prev: TState) => void\n\ninterface StoreOptions<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n updateFn?: (previous: TState) => (updater: TUpdater) => TState\n onSubscribe?: (\n listener: Listener<TState>,\n store: Store<TState, TUpdater>,\n ) => () => void\n onUpdate?: (next: TState, prev: TState) => void\n}\n\nexport class Store<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n listeners = new Set<Listener<TState>>()\n state: TState\n options?: StoreOptions<TState, TUpdater>\n batching = false\n
|
|
1
|
+
{"version":3,"file":"index.production.js","sources":["../../src/index.ts"],"sourcesContent":["export type AnyUpdater = (...args: any[]) => any\n\nexport type Listener<TState> = (next: TState, prev: TState) => void\n\ninterface StoreOptions<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n updateFn?: (previous: TState) => (updater: TUpdater) => TState\n onSubscribe?: (\n listener: Listener<TState>,\n store: Store<TState, TUpdater>,\n ) => () => void\n onUpdate?: (next: TState, prev: TState) => void\n}\n\nexport class Store<\n TState,\n TUpdater extends AnyUpdater = (cb: TState) => TState,\n> {\n listeners = new Set<Listener<TState>>()\n state: TState\n options?: StoreOptions<TState, TUpdater>\n #batching = false\n #flushing = 0\n\n constructor(initialState: TState, options?: StoreOptions<TState, TUpdater>) {\n this.state = initialState\n this.options = options\n }\n\n subscribe = (listener: Listener<TState>) => {\n this.listeners.add(listener)\n const unsub = this.options?.onSubscribe?.(listener, this)\n return () => {\n this.listeners.delete(listener)\n unsub?.()\n }\n }\n\n setState = (updater: TUpdater) => {\n const previous = this.state\n this.state = this.options?.updateFn\n ? this.options.updateFn(previous)(updater)\n : (updater as any)(previous)\n\n if (this.state === previous) return\n\n this.options?.onUpdate?.(this.state, previous)\n\n this.#flush(previous)\n }\n\n #flush = (previous: TState) => {\n if (this.#batching) return\n const flushId = ++this.#flushing\n this.listeners.forEach((listener) => {\n if (this.#flushing !== flushId) return\n listener(this.state, previous)\n })\n }\n\n batch = (cb: () => void) => {\n if (this.#batching) return cb()\n const previous = this.state\n this.#batching = true\n cb()\n this.#batching = false\n this.#flush(previous)\n }\n}\n"],"names":["listeners","Set","batching","flushing","constructor","initialState","options","this","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","flush","flushId","forEach","batch","cb"],"mappings":";;;;;;;;;;qPAgBO,MAILA,UAAY,IAAIC,IAGhBC,IAAY,EACZC,GAAY,EAEZC,YAAYC,EAAsBC,GAChCC,KAAKC,MAAQH,EACbE,KAAKD,QAAUA,CACjB,CAEAG,UAAaC,IACXH,KAAKP,UAAUW,IAAID,GACnB,MAAME,EAAQL,KAAKD,SAASO,cAAcH,EAAUH,MACpD,MAAO,KACLA,KAAKP,UAAUc,OAAOJ,GACtBE,KAAS,CACV,EAGHG,SAAYC,IACV,MAAMC,EAAWV,KAAKC,MACtBD,KAAKC,MAAQD,KAAKD,SAASY,SACvBX,KAAKD,QAAQY,SAASD,EAAtBV,CAAgCS,GAC/BA,EAAgBC,GAEjBV,KAAKC,QAAUS,IAEnBV,KAAKD,SAASa,WAAWZ,KAAKC,MAAOS,GAErCV,MAAKa,EAAOH,GAAS,EAGvBG,GAAUH,IACR,GAAIV,MAAKL,EAAW,OACpB,MAAMmB,IAAYd,MAAKJ,EACvBI,KAAKP,UAAUsB,SAASZ,IAClBH,MAAKJ,IAAckB,GACvBX,EAASH,KAAKC,MAAOS,EAAS,GAC9B,EAGJM,MAASC,IACP,GAAIjB,MAAKL,EAAW,OAAOsB,IAC3B,MAAMP,EAAWV,KAAKC,MACtBD,MAAKL,GAAY,EACjBsB,IACAjB,MAAKL,GAAY,EACjBK,MAAKa,EAAOH,EAAS"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -21,8 +21,8 @@ export class Store<
|
|
|
21
21
|
listeners = new Set<Listener<TState>>()
|
|
22
22
|
state: TState
|
|
23
23
|
options?: StoreOptions<TState, TUpdater>
|
|
24
|
-
batching = false
|
|
25
|
-
|
|
24
|
+
#batching = false
|
|
25
|
+
#flushing = 0
|
|
26
26
|
|
|
27
27
|
constructor(initialState: TState, options?: StoreOptions<TState, TUpdater>) {
|
|
28
28
|
this.state = initialState
|
|
@@ -48,23 +48,24 @@ export class Store<
|
|
|
48
48
|
|
|
49
49
|
this.options?.onUpdate?.(this.state, previous)
|
|
50
50
|
|
|
51
|
-
this
|
|
52
|
-
this.listeners.forEach((listener) => listener(this.state, previous))
|
|
53
|
-
})
|
|
54
|
-
this.#flush()
|
|
51
|
+
this.#flush(previous)
|
|
55
52
|
}
|
|
56
53
|
|
|
57
|
-
#flush = () => {
|
|
58
|
-
if (this
|
|
59
|
-
|
|
60
|
-
this.
|
|
54
|
+
#flush = (previous: TState) => {
|
|
55
|
+
if (this.#batching) return
|
|
56
|
+
const flushId = ++this.#flushing
|
|
57
|
+
this.listeners.forEach((listener) => {
|
|
58
|
+
if (this.#flushing !== flushId) return
|
|
59
|
+
listener(this.state, previous)
|
|
60
|
+
})
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
batch = (cb: () => void) => {
|
|
64
|
-
if (this
|
|
65
|
-
|
|
64
|
+
if (this.#batching) return cb()
|
|
65
|
+
const previous = this.state
|
|
66
|
+
this.#batching = true
|
|
66
67
|
cb()
|
|
67
|
-
this
|
|
68
|
-
this.#flush()
|
|
68
|
+
this.#batching = false
|
|
69
|
+
this.#flush(previous)
|
|
69
70
|
}
|
|
70
71
|
}
|