@tanstack/store 0.0.1-beta.81 → 0.0.1-beta.85

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.
@@ -44,54 +44,13 @@ class Store {
44
44
  this.queue = [];
45
45
  };
46
46
  batch = cb => {
47
+ if (this.batching) return cb();
47
48
  this.batching = true;
48
49
  cb();
49
50
  this.batching = false;
50
51
  this.#flush();
51
52
  };
52
53
  }
53
- function shallow(objA, objB) {
54
- if (Object.is(objA, objB)) {
55
- return true;
56
- }
57
- if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
58
- return false;
59
- }
60
-
61
- // if (objA instanceof Map && objB instanceof Map) {
62
- // if (objA.size !== objB.size) return false
63
-
64
- // for (const [key, value] of objA) {
65
- // if (!Object.is(value, objB.get(key))) {
66
- // return false
67
- // }
68
- // }
69
- // return true
70
- // }
71
-
72
- // if (objA instanceof Set && objB instanceof Set) {
73
- // if (objA.size !== objB.size) return false
74
-
75
- // for (const value of objA) {
76
- // if (!objB.has(value)) {
77
- // return false
78
- // }
79
- // }
80
- // return true
81
- // }
82
-
83
- const keysA = Object.keys(objA);
84
- if (keysA.length !== Object.keys(objB).length) {
85
- return false;
86
- }
87
- for (let i = 0; i < keysA.length; i++) {
88
- if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
89
- return false;
90
- }
91
- }
92
- return true;
93
- }
94
54
 
95
55
  exports.Store = Store;
96
- exports.shallow = shallow;
97
56
  //# sourceMappingURL=index.js.map
@@ -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 queue: ((...args: any[]) => void)[] = []\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.queue.push(() => {\n this.listeners.forEach((listener) => listener(this.state, previous))\n })\n this.#flush()\n }\n\n #flush = () => {\n if (this.batching) return\n this.queue.forEach((cb) => cb())\n this.queue = []\n }\n\n batch = (cb: () => void) => {\n this.batching = true\n cb()\n this.batching = false\n this.#flush()\n }\n}\n\n\nexport function shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n // if (objA instanceof Map && objB instanceof Map) {\n // if (objA.size !== objB.size) return false\n\n // for (const [key, value] of objA) {\n // if (!Object.is(value, objB.get(key))) {\n // return false\n // }\n // }\n // return true\n // }\n\n // if (objA instanceof Set && objB instanceof Set) {\n // if (objA.size !== objB.size) return false\n\n // for (const value of objA) {\n // if (!objB.has(value)) {\n // return false\n // }\n // }\n // return true\n // }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n\n"],"names":["Store","listeners","Set","batching","queue","constructor","initialState","options","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","push","forEach","cb","batch","shallow","objA","objB","Object","is","keysA","keys","length","i","prototype","hasOwnProperty","call"],"mappings":";;;;;;;;;;;;;;AAgBO,MAAMA,KAAK,CAGhB;EACAC,SAAS,GAAG,IAAIC,GAAG,EAAoB,CAAA;AAGvCC,EAAAA,QAAQ,GAAG,KAAK,CAAA;AAChBC,EAAAA,KAAK,GAAiC,EAAE,CAAA;AAExCC,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,CAACT,SAAS,CAACU,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,CAACT,SAAS,CAACa,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,CAACb,KAAK,CAACgB,IAAI,CAAC,MAAM;AACpB,MAAA,IAAI,CAACnB,SAAS,CAACoB,OAAO,CAAEX,QAAQ,IAAKA,QAAQ,CAAC,IAAI,CAACF,KAAK,EAAES,QAAQ,CAAC,CAAC,CAAA;AACtE,KAAC,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,EAAE,CAAA;GACd,CAAA;EAED,MAAM,GAAG,MAAM;IACb,IAAI,IAAI,CAACd,QAAQ,EAAE,OAAA;IACnB,IAAI,CAACC,KAAK,CAACiB,OAAO,CAAEC,EAAE,IAAKA,EAAE,EAAE,CAAC,CAAA;IAChC,IAAI,CAAClB,KAAK,GAAG,EAAE,CAAA;GAChB,CAAA;EAEDmB,KAAK,GAAID,EAAc,IAAK;IAC1B,IAAI,CAACnB,QAAQ,GAAG,IAAI,CAAA;AACpBmB,IAAAA,EAAE,EAAE,CAAA;IACJ,IAAI,CAACnB,QAAQ,GAAG,KAAK,CAAA;IACrB,IAAI,CAAC,MAAM,EAAE,CAAA;GACd,CAAA;AACH,CAAA;AAGO,SAASqB,OAAO,CAAIC,IAAO,EAAEC,IAAO,EAAE;EAC3C,IAAIC,MAAM,CAACC,EAAE,CAACH,IAAI,EAAEC,IAAI,CAAC,EAAE;AACzB,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;AAEA,EAAA,IACE,OAAOD,IAAI,KAAK,QAAQ,IACxBA,IAAI,KAAK,IAAI,IACb,OAAOC,IAAI,KAAK,QAAQ,IACxBA,IAAI,KAAK,IAAI,EACb;AACA,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAA,MAAMG,KAAK,GAAGF,MAAM,CAACG,IAAI,CAACL,IAAI,CAAC,CAAA;AAC/B,EAAA,IAAII,KAAK,CAACE,MAAM,KAAKJ,MAAM,CAACG,IAAI,CAACJ,IAAI,CAAC,CAACK,MAAM,EAAE;AAC7C,IAAA,OAAO,KAAK,CAAA;AACd,GAAA;AAEA,EAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,KAAK,CAACE,MAAM,EAAEC,CAAC,EAAE,EAAE;AACrC,IAAA,IACE,CAACL,MAAM,CAACM,SAAS,CAACC,cAAc,CAACC,IAAI,CAACT,IAAI,EAAEG,KAAK,CAACG,CAAC,CAAC,CAAW,IAC/D,CAACL,MAAM,CAACC,EAAE,CAACH,IAAI,CAACI,KAAK,CAACG,CAAC,CAAC,CAAY,EAAEN,IAAI,CAACG,KAAK,CAACG,CAAC,CAAC,CAAY,CAAC,EAChE;AACA,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AACF,GAAA;AACA,EAAA,OAAO,IAAI,CAAA;AACb;;;;;"}
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 queue: ((...args: any[]) => void)[] = []\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.queue.push(() => {\n this.listeners.forEach((listener) => listener(this.state, previous))\n })\n this.#flush()\n }\n\n #flush = () => {\n if (this.batching) return\n this.queue.forEach((cb) => cb())\n this.queue = []\n }\n\n batch = (cb: () => void) => {\n if (this.batching) return cb()\n this.batching = true\n cb()\n this.batching = false\n this.#flush()\n }\n}\n"],"names":["Store","listeners","Set","batching","queue","constructor","initialState","options","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","push","forEach","cb","batch"],"mappings":";;;;;;;;;;;;;;AAgBO,MAAMA,KAAK,CAGhB;EACAC,SAAS,GAAG,IAAIC,GAAG,EAAoB,CAAA;AAGvCC,EAAAA,QAAQ,GAAG,KAAK,CAAA;AAChBC,EAAAA,KAAK,GAAiC,EAAE,CAAA;AAExCC,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,CAACT,SAAS,CAACU,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,CAACT,SAAS,CAACa,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,CAACb,KAAK,CAACgB,IAAI,CAAC,MAAM;AACpB,MAAA,IAAI,CAACnB,SAAS,CAACoB,OAAO,CAAEX,QAAQ,IAAKA,QAAQ,CAAC,IAAI,CAACF,KAAK,EAAES,QAAQ,CAAC,CAAC,CAAA;AACtE,KAAC,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,EAAE,CAAA;GACd,CAAA;EAED,MAAM,GAAG,MAAM;IACb,IAAI,IAAI,CAACd,QAAQ,EAAE,OAAA;IACnB,IAAI,CAACC,KAAK,CAACiB,OAAO,CAAEC,EAAE,IAAKA,EAAE,EAAE,CAAC,CAAA;IAChC,IAAI,CAAClB,KAAK,GAAG,EAAE,CAAA;GAChB,CAAA;EAEDmB,KAAK,GAAID,EAAc,IAAK;AAC1B,IAAA,IAAI,IAAI,CAACnB,QAAQ,EAAE,OAAOmB,EAAE,EAAE,CAAA;IAC9B,IAAI,CAACnB,QAAQ,GAAG,IAAI,CAAA;AACpBmB,IAAAA,EAAE,EAAE,CAAA;IACJ,IAAI,CAACnB,QAAQ,GAAG,KAAK,CAAA;IACrB,IAAI,CAAC,MAAM,EAAE,CAAA;GACd,CAAA;AACH;;;;"}
@@ -40,53 +40,13 @@ class Store {
40
40
  this.queue = [];
41
41
  };
42
42
  batch = cb => {
43
+ if (this.batching) return cb();
43
44
  this.batching = true;
44
45
  cb();
45
46
  this.batching = false;
46
47
  this.#flush();
47
48
  };
48
49
  }
49
- function shallow(objA, objB) {
50
- if (Object.is(objA, objB)) {
51
- return true;
52
- }
53
- if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
54
- return false;
55
- }
56
-
57
- // if (objA instanceof Map && objB instanceof Map) {
58
- // if (objA.size !== objB.size) return false
59
-
60
- // for (const [key, value] of objA) {
61
- // if (!Object.is(value, objB.get(key))) {
62
- // return false
63
- // }
64
- // }
65
- // return true
66
- // }
67
-
68
- // if (objA instanceof Set && objB instanceof Set) {
69
- // if (objA.size !== objB.size) return false
70
-
71
- // for (const value of objA) {
72
- // if (!objB.has(value)) {
73
- // return false
74
- // }
75
- // }
76
- // return true
77
- // }
78
-
79
- const keysA = Object.keys(objA);
80
- if (keysA.length !== Object.keys(objB).length) {
81
- return false;
82
- }
83
- for (let i = 0; i < keysA.length; i++) {
84
- if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
85
- return false;
86
- }
87
- }
88
- return true;
89
- }
90
50
 
91
- export { Store, shallow };
51
+ export { Store };
92
52
  //# sourceMappingURL=index.js.map
@@ -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 queue: ((...args: any[]) => void)[] = []\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.queue.push(() => {\n this.listeners.forEach((listener) => listener(this.state, previous))\n })\n this.#flush()\n }\n\n #flush = () => {\n if (this.batching) return\n this.queue.forEach((cb) => cb())\n this.queue = []\n }\n\n batch = (cb: () => void) => {\n this.batching = true\n cb()\n this.batching = false\n this.#flush()\n }\n}\n\n\nexport function shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n // if (objA instanceof Map && objB instanceof Map) {\n // if (objA.size !== objB.size) return false\n\n // for (const [key, value] of objA) {\n // if (!Object.is(value, objB.get(key))) {\n // return false\n // }\n // }\n // return true\n // }\n\n // if (objA instanceof Set && objB instanceof Set) {\n // if (objA.size !== objB.size) return false\n\n // for (const value of objA) {\n // if (!objB.has(value)) {\n // return false\n // }\n // }\n // return true\n // }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n\n"],"names":["Store","listeners","Set","batching","queue","constructor","initialState","options","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","push","forEach","cb","batch","shallow","objA","objB","Object","is","keysA","keys","length","i","prototype","hasOwnProperty","call"],"mappings":"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"}
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 queue: ((...args: any[]) => void)[] = []\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.queue.push(() => {\n this.listeners.forEach((listener) => listener(this.state, previous))\n })\n this.#flush()\n }\n\n #flush = () => {\n if (this.batching) return\n this.queue.forEach((cb) => cb())\n this.queue = []\n }\n\n batch = (cb: () => void) => {\n if (this.batching) return cb()\n this.batching = true\n cb()\n this.batching = false\n this.#flush()\n }\n}\n"],"names":["Store","listeners","Set","batching","queue","constructor","initialState","options","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","push","forEach","cb","batch"],"mappings":";;;;;;;;;;AAgBO,MAAMA,KAAK,CAGhB;EACAC,SAAS,GAAG,IAAIC,GAAG,EAAoB,CAAA;AAGvCC,EAAAA,QAAQ,GAAG,KAAK,CAAA;AAChBC,EAAAA,KAAK,GAAiC,EAAE,CAAA;AAExCC,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,CAACT,SAAS,CAACU,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,CAACT,SAAS,CAACa,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,CAACb,KAAK,CAACgB,IAAI,CAAC,MAAM;AACpB,MAAA,IAAI,CAACnB,SAAS,CAACoB,OAAO,CAAEX,QAAQ,IAAKA,QAAQ,CAAC,IAAI,CAACF,KAAK,EAAES,QAAQ,CAAC,CAAC,CAAA;AACtE,KAAC,CAAC,CAAA;IACF,IAAI,CAAC,MAAM,EAAE,CAAA;GACd,CAAA;EAED,MAAM,GAAG,MAAM;IACb,IAAI,IAAI,CAACd,QAAQ,EAAE,OAAA;IACnB,IAAI,CAACC,KAAK,CAACiB,OAAO,CAAEC,EAAE,IAAKA,EAAE,EAAE,CAAC,CAAA;IAChC,IAAI,CAAClB,KAAK,GAAG,EAAE,CAAA;GAChB,CAAA;EAEDmB,KAAK,GAAID,EAAc,IAAK;AAC1B,IAAA,IAAI,IAAI,CAACnB,QAAQ,EAAE,OAAOmB,EAAE,EAAE,CAAA;IAC9B,IAAI,CAACnB,QAAQ,GAAG,IAAI,CAAA;AACpBmB,IAAAA,EAAE,EAAE,CAAA;IACJ,IAAI,CAACnB,QAAQ,GAAG,KAAK,CAAA;IACrB,IAAI,CAAC,MAAM,EAAE,CAAA;GACd,CAAA;AACH;;;;"}
@@ -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":"298b-1"}]}],"isRoot":true},"nodeParts":{"298b-1":{"renderedLength":2165,"gzipLength":696,"brotliLength":0,"mainUid":"298b-0"}},"nodeMetas":{"298b-0":{"id":"/packages/store/src/index.ts","moduleParts":{"index.production.js":"298b-1"},"imported":[],"importedBy":[],"isEntry":true}},"env":{"rollup":"2.79.1"},"options":{"gzip":true,"brotli":false,"sourcemap":false}};
4027
+ const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.production.js","children":[{"name":"packages/store/src/index.ts","uid":"7e12-1"}]}],"isRoot":true},"nodeParts":{"7e12-1":{"renderedLength":1109,"gzipLength":384,"brotliLength":0,"mainUid":"7e12-0"}},"nodeMetas":{"7e12-0":{"id":"/packages/store/src/index.ts","moduleParts":{"index.production.js":"7e12-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;
@@ -8,7 +8,7 @@
8
8
  "children": [
9
9
  {
10
10
  "name": "packages/store/src/index.ts",
11
- "uid": "298b-3"
11
+ "uid": "7e12-3"
12
12
  }
13
13
  ]
14
14
  }
@@ -16,18 +16,18 @@
16
16
  "isRoot": true
17
17
  },
18
18
  "nodeParts": {
19
- "298b-3": {
20
- "renderedLength": 2165,
21
- "gzipLength": 696,
19
+ "7e12-3": {
20
+ "renderedLength": 1109,
21
+ "gzipLength": 384,
22
22
  "brotliLength": 0,
23
- "mainUid": "298b-2"
23
+ "mainUid": "7e12-2"
24
24
  }
25
25
  },
26
26
  "nodeMetas": {
27
- "298b-2": {
27
+ "7e12-2": {
28
28
  "id": "/packages/store/src/index.ts",
29
29
  "moduleParts": {
30
- "index.production.js": "298b-3"
30
+ "index.production.js": "7e12-3"
31
31
  },
32
32
  "imported": [],
33
33
  "importedBy": [],
@@ -27,6 +27,5 @@ declare class Store<TState, TUpdater extends AnyUpdater = (cb: TState) => TState
27
27
  setState: (updater: TUpdater) => void;
28
28
  batch: (cb: () => void) => void;
29
29
  }
30
- declare function shallow<T>(objA: T, objB: T): boolean;
31
30
 
32
- export { AnyUpdater, Listener, Store, shallow };
31
+ export { AnyUpdater, Listener, Store };
@@ -46,56 +46,15 @@
46
46
  this.queue = [];
47
47
  };
48
48
  batch = cb => {
49
+ if (this.batching) return cb();
49
50
  this.batching = true;
50
51
  cb();
51
52
  this.batching = false;
52
53
  this.#flush();
53
54
  };
54
55
  }
55
- function shallow(objA, objB) {
56
- if (Object.is(objA, objB)) {
57
- return true;
58
- }
59
- if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
60
- return false;
61
- }
62
-
63
- // if (objA instanceof Map && objB instanceof Map) {
64
- // if (objA.size !== objB.size) return false
65
-
66
- // for (const [key, value] of objA) {
67
- // if (!Object.is(value, objB.get(key))) {
68
- // return false
69
- // }
70
- // }
71
- // return true
72
- // }
73
-
74
- // if (objA instanceof Set && objB instanceof Set) {
75
- // if (objA.size !== objB.size) return false
76
-
77
- // for (const value of objA) {
78
- // if (!objB.has(value)) {
79
- // return false
80
- // }
81
- // }
82
- // return true
83
- // }
84
-
85
- const keysA = Object.keys(objA);
86
- if (keysA.length !== Object.keys(objB).length) {
87
- return false;
88
- }
89
- for (let i = 0; i < keysA.length; i++) {
90
- if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
91
- return false;
92
- }
93
- }
94
- return true;
95
- }
96
56
 
97
57
  exports.Store = Store;
98
- exports.shallow = shallow;
99
58
 
100
59
  Object.defineProperty(exports, '__esModule', { value: true });
101
60
 
@@ -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 queue: ((...args: any[]) => void)[] = []\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.queue.push(() => {\n this.listeners.forEach((listener) => listener(this.state, previous))\n })\n this.#flush()\n }\n\n #flush = () => {\n if (this.batching) return\n this.queue.forEach((cb) => cb())\n this.queue = []\n }\n\n batch = (cb: () => void) => {\n this.batching = true\n cb()\n this.batching = false\n this.#flush()\n }\n}\n\n\nexport function shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n // if (objA instanceof Map && objB instanceof Map) {\n // if (objA.size !== objB.size) return false\n\n // for (const [key, value] of objA) {\n // if (!Object.is(value, objB.get(key))) {\n // return false\n // }\n // }\n // return true\n // }\n\n // if (objA instanceof Set && objB instanceof Set) {\n // if (objA.size !== objB.size) return false\n\n // for (const value of objA) {\n // if (!objB.has(value)) {\n // return false\n // }\n // }\n // return true\n // }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n\n"],"names":["Store","listeners","Set","batching","queue","constructor","initialState","options","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","push","forEach","cb","batch","shallow","objA","objB","Object","is","keysA","keys","length","i","prototype","hasOwnProperty","call"],"mappings":"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"}
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 queue: ((...args: any[]) => void)[] = []\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.queue.push(() => {\n this.listeners.forEach((listener) => listener(this.state, previous))\n })\n this.#flush()\n }\n\n #flush = () => {\n if (this.batching) return\n this.queue.forEach((cb) => cb())\n this.queue = []\n }\n\n batch = (cb: () => void) => {\n if (this.batching) return cb()\n this.batching = true\n cb()\n this.batching = false\n this.#flush()\n }\n}\n"],"names":["Store","listeners","Set","batching","queue","constructor","initialState","options","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","push","forEach","cb","batch"],"mappings":";;;;;;;;;;;;;;;;EAgBO,MAAMA,KAAK,CAGhB;IACAC,SAAS,GAAG,IAAIC,GAAG,EAAoB,CAAA;EAGvCC,EAAAA,QAAQ,GAAG,KAAK,CAAA;EAChBC,EAAAA,KAAK,GAAiC,EAAE,CAAA;EAExCC,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,CAACT,SAAS,CAACU,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,CAACT,SAAS,CAACa,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,CAACb,KAAK,CAACgB,IAAI,CAAC,MAAM;EACpB,MAAA,IAAI,CAACnB,SAAS,CAACoB,OAAO,CAAEX,QAAQ,IAAKA,QAAQ,CAAC,IAAI,CAACF,KAAK,EAAES,QAAQ,CAAC,CAAC,CAAA;EACtE,KAAC,CAAC,CAAA;MACF,IAAI,CAAC,MAAM,EAAE,CAAA;KACd,CAAA;IAED,MAAM,GAAG,MAAM;MACb,IAAI,IAAI,CAACd,QAAQ,EAAE,OAAA;MACnB,IAAI,CAACC,KAAK,CAACiB,OAAO,CAAEC,EAAE,IAAKA,EAAE,EAAE,CAAC,CAAA;MAChC,IAAI,CAAClB,KAAK,GAAG,EAAE,CAAA;KAChB,CAAA;IAEDmB,KAAK,GAAID,EAAc,IAAK;EAC1B,IAAA,IAAI,IAAI,CAACnB,QAAQ,EAAE,OAAOmB,EAAE,EAAE,CAAA;MAC9B,IAAI,CAACnB,QAAQ,GAAG,IAAI,CAAA;EACpBmB,IAAAA,EAAE,EAAE,CAAA;MACJ,IAAI,CAACnB,QAAQ,GAAG,KAAK,CAAA;MACrB,IAAI,CAAC,MAAM,EAAE,CAAA;KACd,CAAA;EACH;;;;;;;;;;"}
@@ -8,5 +8,5 @@
8
8
  *
9
9
  * @license MIT
10
10
  */
11
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Store={})}(this,(function(t){"use strict";t.Store=class{listeners=new Set;batching=!1;queue=[];constructor(t,e){this.state=t,this.options=e}subscribe=t=>{this.listeners.add(t);const e=this.options?.onSubscribe?.(t,this);return()=>{this.listeners.delete(t),e?.()}};setState=t=>{const e=this.state;this.state=this.options?.updateFn?this.options.updateFn(e)(t):t(e),this.state!==e&&(this.options?.onUpdate?.(this.state,e),this.queue.push((()=>{this.listeners.forEach((t=>t(this.state,e)))})),this.#t())};#t=()=>{this.batching||(this.queue.forEach((t=>t())),this.queue=[])};batch=t=>{this.batching=!0,t(),this.batching=!1,this.#t()}},t.shallow=function(t,e){if(Object.is(t,e))return!0;if("object"!=typeof t||null===t||"object"!=typeof e||null===e)return!1;const s=Object.keys(t);if(s.length!==Object.keys(e).length)return!1;for(let i=0;i<s.length;i++)if(!Object.prototype.hasOwnProperty.call(e,s[i])||!Object.is(t[s[i]],e[s[i]]))return!1;return!0},Object.defineProperty(t,"__esModule",{value:!0})}));
11
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Store={})}(this,(function(t){"use strict";t.Store=class{listeners=new Set;batching=!1;queue=[];constructor(t,e){this.state=t,this.options=e}subscribe=t=>{this.listeners.add(t);const e=this.options?.onSubscribe?.(t,this);return()=>{this.listeners.delete(t),e?.()}};setState=t=>{const e=this.state;this.state=this.options?.updateFn?this.options.updateFn(e)(t):t(e),this.state!==e&&(this.options?.onUpdate?.(this.state,e),this.queue.push((()=>{this.listeners.forEach((t=>t(this.state,e)))})),this.#t())};#t=()=>{this.batching||(this.queue.forEach((t=>t())),this.queue=[])};batch=t=>{if(this.batching)return t();this.batching=!0,t(),this.batching=!1,this.#t()}},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 queue: ((...args: any[]) => void)[] = []\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.queue.push(() => {\n this.listeners.forEach((listener) => listener(this.state, previous))\n })\n this.#flush()\n }\n\n #flush = () => {\n if (this.batching) return\n this.queue.forEach((cb) => cb())\n this.queue = []\n }\n\n batch = (cb: () => void) => {\n this.batching = true\n cb()\n this.batching = false\n this.#flush()\n }\n}\n\n\nexport function shallow<T>(objA: T, objB: T) {\n if (Object.is(objA, objB)) {\n return true\n }\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return false\n }\n\n // if (objA instanceof Map && objB instanceof Map) {\n // if (objA.size !== objB.size) return false\n\n // for (const [key, value] of objA) {\n // if (!Object.is(value, objB.get(key))) {\n // return false\n // }\n // }\n // return true\n // }\n\n // if (objA instanceof Set && objB instanceof Set) {\n // if (objA.size !== objB.size) return false\n\n // for (const value of objA) {\n // if (!objB.has(value)) {\n // return false\n // }\n // }\n // return true\n // }\n\n const keysA = Object.keys(objA)\n if (keysA.length !== Object.keys(objB).length) {\n return false\n }\n\n for (let i = 0; i < keysA.length; i++) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||\n !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])\n ) {\n return false\n }\n }\n return true\n}\n\n"],"names":["listeners","Set","batching","queue","constructor","initialState","options","this","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","push","forEach","flush","cb","batch","objA","objB","Object","is","keysA","keys","length","i","prototype","hasOwnProperty","call"],"mappings":";;;;;;;;;;qPAgBO,MAILA,UAAY,IAAIC,IAGhBC,UAAW,EACXC,MAAsC,GAEtCC,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,KAAKJ,MAAMiB,MAAK,KACdb,KAAKP,UAAUqB,SAASX,GAAaA,EAASH,KAAKC,MAAOS,IAAU,IAEtEV,MAAKe,IAAQ,EAGfA,GAAS,KACHf,KAAKL,WACTK,KAAKJ,MAAMkB,SAASE,GAAOA,MAC3BhB,KAAKJ,MAAQ,GAAE,EAGjBqB,MAASD,IACPhB,KAAKL,UAAW,EAChBqB,IACAhB,KAAKL,UAAW,EAChBK,MAAKe,GAAQ,aAKV,SAAoBG,EAASC,GAClC,GAAIC,OAAOC,GAAGH,EAAMC,GAClB,OAAO,EAGT,GACkB,iBAATD,GACE,OAATA,GACgB,iBAATC,GACE,OAATA,EAEA,OAAO,EAyBT,MAAMG,EAAQF,OAAOG,KAAKL,GAC1B,GAAII,EAAME,SAAWJ,OAAOG,KAAKJ,GAAMK,OACrC,OAAO,EAGT,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAAME,OAAQC,IAChC,IACGL,OAAOM,UAAUC,eAAeC,KAAKT,EAAMG,EAAMG,MACjDL,OAAOC,GAAGH,EAAKI,EAAMG,IAAgBN,EAAKG,EAAMG,KAEjD,OAAO,EAGX,OAAO,CACT"}
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 queue: ((...args: any[]) => void)[] = []\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.queue.push(() => {\n this.listeners.forEach((listener) => listener(this.state, previous))\n })\n this.#flush()\n }\n\n #flush = () => {\n if (this.batching) return\n this.queue.forEach((cb) => cb())\n this.queue = []\n }\n\n batch = (cb: () => void) => {\n if (this.batching) return cb()\n this.batching = true\n cb()\n this.batching = false\n this.#flush()\n }\n}\n"],"names":["listeners","Set","batching","queue","constructor","initialState","options","this","state","subscribe","listener","add","unsub","onSubscribe","delete","setState","updater","previous","updateFn","onUpdate","push","forEach","flush","cb","batch"],"mappings":";;;;;;;;;;qPAgBO,MAILA,UAAY,IAAIC,IAGhBC,UAAW,EACXC,MAAsC,GAEtCC,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,KAAKJ,MAAMiB,MAAK,KACdb,KAAKP,UAAUqB,SAASX,GAAaA,EAASH,KAAKC,MAAOS,IAAU,IAEtEV,MAAKe,IAAQ,EAGfA,GAAS,KACHf,KAAKL,WACTK,KAAKJ,MAAMkB,SAASE,GAAOA,MAC3BhB,KAAKJ,MAAQ,GAAE,EAGjBqB,MAASD,IACP,GAAIhB,KAAKL,SAAU,OAAOqB,IAC1BhB,KAAKL,UAAW,EAChBqB,IACAhB,KAAKL,UAAW,EAChBK,MAAKe,GAAQ"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tanstack/store",
3
3
  "author": "Tanner Linsley",
4
- "version": "0.0.1-beta.81",
4
+ "version": "0.0.1-beta.85",
5
5
  "license": "MIT",
6
6
  "repository": "tanstack/store",
7
7
  "homepage": "https://tanstack.com/store",
@@ -28,5 +28,8 @@
28
28
  "build/**",
29
29
  "src"
30
30
  ],
31
- "sideEffects": false
31
+ "sideEffects": false,
32
+ "scripts": {
33
+ "build": "rollup --config rollup.config.js"
34
+ }
32
35
  }
package/src/index.ts CHANGED
@@ -61,63 +61,10 @@ export class Store<
61
61
  }
62
62
 
63
63
  batch = (cb: () => void) => {
64
+ if (this.batching) return cb()
64
65
  this.batching = true
65
66
  cb()
66
67
  this.batching = false
67
68
  this.#flush()
68
69
  }
69
70
  }
70
-
71
-
72
- export function shallow<T>(objA: T, objB: T) {
73
- if (Object.is(objA, objB)) {
74
- return true
75
- }
76
-
77
- if (
78
- typeof objA !== 'object' ||
79
- objA === null ||
80
- typeof objB !== 'object' ||
81
- objB === null
82
- ) {
83
- return false
84
- }
85
-
86
- // if (objA instanceof Map && objB instanceof Map) {
87
- // if (objA.size !== objB.size) return false
88
-
89
- // for (const [key, value] of objA) {
90
- // if (!Object.is(value, objB.get(key))) {
91
- // return false
92
- // }
93
- // }
94
- // return true
95
- // }
96
-
97
- // if (objA instanceof Set && objB instanceof Set) {
98
- // if (objA.size !== objB.size) return false
99
-
100
- // for (const value of objA) {
101
- // if (!objB.has(value)) {
102
- // return false
103
- // }
104
- // }
105
- // return true
106
- // }
107
-
108
- const keysA = Object.keys(objA)
109
- if (keysA.length !== Object.keys(objB).length) {
110
- return false
111
- }
112
-
113
- for (let i = 0; i < keysA.length; i++) {
114
- if (
115
- !Object.prototype.hasOwnProperty.call(objB, keysA[i] as string) ||
116
- !Object.is(objA[keysA[i] as keyof T], objB[keysA[i] as keyof T])
117
- ) {
118
- return false
119
- }
120
- }
121
- return true
122
- }
123
-