@shopbb/helium 0.6.0 → 0.6.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.
@@ -1 +1 @@
1
- {"version":3,"file":"useOptimisticCart.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useOptimisticCart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;IACnD,MAAM,EAAE,GAAG,CAAC;CACb;AAyBD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,IAAI,CAGxE;AAMD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,cAAc,CAAC,KAAK,GAAG,GAAG;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACrD,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7E,UAAU,EAAE,KAAK,GAAG,IAAI,GACvB,KAAK,GAAG,IAAI,CAmFd"}
1
+ {"version":3,"file":"useOptimisticCart.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useOptimisticCart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;IACnD,MAAM,EAAE,GAAG,CAAC;CACb;AAmCD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,IAAI,CAGxE;AAMD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,cAAc,CAAC,KAAK,GAAG,GAAG;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACrD,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7E,UAAU,EAAE,KAAK,GAAG,IAAI,GACvB,KAAK,GAAG,IAAI,CAmFd"}
@@ -20,19 +20,27 @@
20
20
  */
21
21
  import * as React from 'react';
22
22
  import { useCartOptional } from '../CartProvider';
23
+ // 关键:snapshot 必须是稳定引用,否则 useSyncExternalStore 每次比对都觉得变了 →
24
+ // 无限 re-render(React #185)+ hydration mismatch(#418/#423)
25
+ const EMPTY_SNAPSHOT = [];
23
26
  const pendingStore = {
24
27
  items: new Map(),
25
28
  listeners: new Set(),
29
+ cachedSnapshot: EMPTY_SNAPSHOT,
26
30
  add(m) {
27
31
  this.items.set(m.id, m);
32
+ this.cachedSnapshot = Array.from(this.items.values());
28
33
  this.notify();
29
34
  },
30
35
  remove(id) {
31
- if (this.items.delete(id))
36
+ if (this.items.delete(id)) {
37
+ this.cachedSnapshot = this.items.size === 0 ? EMPTY_SNAPSHOT : Array.from(this.items.values());
32
38
  this.notify();
39
+ }
33
40
  },
34
41
  list() {
35
- return Array.from(this.items.values());
42
+ // 返回稳定引用(只在 add/remove 时改变)— 满足 useSyncExternalStore 契约
43
+ return this.cachedSnapshot;
36
44
  },
37
45
  subscribe(fn) {
38
46
  this.listeners.add(fn);
@@ -1 +1 @@
1
- {"version":3,"file":"useOptimisticCart.js","sourceRoot":"","sources":["../../../src/components/hooks/useOptimisticCart.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useOptimisticCart.js","sourceRoot":"","sources":["../../../src/components/hooks/useOptimisticCart.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopbb/helium",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "shopbb storefront framework — components, React SSR, GraphQL client, cart handler, cache for Cloudflare Workers",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -32,19 +32,29 @@ export interface PendingMutation {
32
32
  inputs: any;
33
33
  }
34
34
 
35
+ // 关键:snapshot 必须是稳定引用,否则 useSyncExternalStore 每次比对都觉得变了 →
36
+ // 无限 re-render(React #185)+ hydration mismatch(#418/#423)
37
+ const EMPTY_SNAPSHOT: PendingMutation[] = [];
38
+
35
39
  const pendingStore = {
36
40
  items: new Map<string, PendingMutation>(),
37
41
  listeners: new Set<() => void>(),
42
+ cachedSnapshot: EMPTY_SNAPSHOT as PendingMutation[],
38
43
 
39
44
  add(m: PendingMutation) {
40
45
  this.items.set(m.id, m);
46
+ this.cachedSnapshot = Array.from(this.items.values());
41
47
  this.notify();
42
48
  },
43
49
  remove(id: string) {
44
- if (this.items.delete(id)) this.notify();
50
+ if (this.items.delete(id)) {
51
+ this.cachedSnapshot = this.items.size === 0 ? EMPTY_SNAPSHOT : Array.from(this.items.values());
52
+ this.notify();
53
+ }
45
54
  },
46
55
  list(): PendingMutation[] {
47
- return Array.from(this.items.values());
56
+ // 返回稳定引用(只在 add/remove 时改变)— 满足 useSyncExternalStore 契约
57
+ return this.cachedSnapshot;
48
58
  },
49
59
  subscribe(fn: () => void): () => void {
50
60
  this.listeners.add(fn);