@solidjs/signals 2.0.0-rc.6 → 2.0.0-rc.8

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.
Files changed (131) hide show
  1. package/dist/dev-shared.js +5243 -0
  2. package/dist/dev.attribution.js +2333 -0
  3. package/dist/dev.js +1758 -6621
  4. package/dist/observe/affects.js +127 -0
  5. package/dist/observe/attribution.js +1 -0
  6. package/dist/observe/boundaries.js +586 -0
  7. package/dist/observe/core/action.js +167 -0
  8. package/dist/observe/core/async.js +736 -0
  9. package/dist/observe/core/attribution-hooks.js +60 -0
  10. package/dist/observe/core/attribution.js +2318 -0
  11. package/dist/{types-cjs/core/constants.d.cts → observe/core/constants.js} +135 -71
  12. package/dist/{types-cjs/core/context.d.cts → observe/core/context.js} +37 -12
  13. package/dist/observe/core/core.js +1289 -0
  14. package/dist/observe/core/dev.js +232 -0
  15. package/dist/observe/core/effect.js +179 -0
  16. package/dist/observe/core/error.js +80 -0
  17. package/dist/observe/core/external.js +98 -0
  18. package/dist/observe/core/graph.js +155 -0
  19. package/dist/observe/core/heap.js +147 -0
  20. package/dist/observe/core/invariants.js +43 -0
  21. package/dist/observe/core/lanes.js +168 -0
  22. package/dist/observe/core/optimistic.js +438 -0
  23. package/dist/observe/core/owner.js +308 -0
  24. package/dist/observe/core/scheduler.js +1190 -0
  25. package/dist/observe/core/verdict.js +551 -0
  26. package/dist/observe/index.js +55 -0
  27. package/dist/observe/map.js +482 -0
  28. package/dist/{types-cjs/signals.d.cts → observe/signals.js} +305 -317
  29. package/dist/observe/store/index.js +38 -0
  30. package/dist/observe/store/next/optimistic.js +651 -0
  31. package/dist/observe/store/next/projection.js +242 -0
  32. package/dist/observe/store/next/reconcile.js +373 -0
  33. package/dist/observe/store/next/store.js +2213 -0
  34. package/dist/observe/store/next/target.js +51 -0
  35. package/dist/observe/store/store.js +323 -0
  36. package/dist/observe/store/storePath.js +103 -0
  37. package/dist/observe/store/utils.js +210 -0
  38. package/dist/prod/attribution.js +32 -0
  39. package/dist/prod/boundaries.js +3 -1
  40. package/dist/prod/core/action.js +52 -32
  41. package/dist/prod/core/async.js +177 -128
  42. package/dist/prod/core/attribution-hooks.js +3 -0
  43. package/dist/prod/core/constants.js +32 -1
  44. package/dist/prod/core/context.js +10 -16
  45. package/dist/prod/core/core.js +505 -286
  46. package/dist/prod/core/dev.js +2 -0
  47. package/dist/prod/core/effect.js +72 -43
  48. package/dist/prod/core/external.js +2 -2
  49. package/dist/prod/core/graph.js +40 -36
  50. package/dist/prod/core/heap.js +50 -51
  51. package/dist/prod/core/lanes.js +43 -22
  52. package/dist/prod/core/optimistic.js +224 -80
  53. package/dist/prod/core/owner.js +43 -39
  54. package/dist/prod/core/scheduler.js +347 -232
  55. package/dist/prod/core/verdict.js +71 -74
  56. package/dist/prod/index.js +9 -5
  57. package/dist/prod/map.js +311 -150
  58. package/dist/prod/signals.js +52 -38
  59. package/dist/prod/store/next/optimistic.js +127 -131
  60. package/dist/prod/store/next/projection.js +3 -3
  61. package/dist/prod/store/next/reconcile.js +149 -294
  62. package/dist/prod/store/next/store.js +694 -380
  63. package/dist/prod/store/next/target.js +32 -10
  64. package/dist/prod/store/store.js +12 -14
  65. package/dist/prod/store/utils.js +36 -27
  66. package/dist/types/attribution.d.ts +15 -0
  67. package/dist/types/attribution.prod.d.ts +13 -0
  68. package/dist/types/core/async.d.ts +1 -1
  69. package/dist/types/core/attribution-hooks.d.ts +183 -6
  70. package/dist/types/core/attribution.d.ts +435 -24
  71. package/dist/types/core/constants.d.ts +31 -0
  72. package/dist/types/core/core.d.ts +19 -3
  73. package/dist/types/core/dev.d.ts +165 -26
  74. package/dist/types/core/effect.d.ts +8 -1
  75. package/dist/types/core/heap.d.ts +5 -3
  76. package/dist/types/core/index.d.ts +2 -1
  77. package/dist/types/core/invariants.d.ts +1 -1
  78. package/dist/types/core/lanes.d.ts +17 -0
  79. package/dist/types/core/scheduler.d.ts +69 -4
  80. package/dist/types/core/types.d.ts +29 -9
  81. package/dist/types/index.d.ts +9 -2
  82. package/dist/types/map.d.ts +2 -0
  83. package/dist/types/signals.d.ts +10 -0
  84. package/dist/types/store/index.d.ts +4 -6
  85. package/dist/types/store/next/optimistic.d.ts +4 -2
  86. package/dist/types/store/next/reconcile.d.ts +5 -12
  87. package/dist/types/store/next/store.d.ts +8 -9
  88. package/dist/types/store/next/target.d.ts +56 -55
  89. package/dist/types/store/store.d.ts +14 -9
  90. package/dist/types/store/utils.d.ts +7 -0
  91. package/package.json +21 -16
  92. package/dist/node.cjs +0 -11121
  93. package/dist/prod/store/next/patch-hooks.js +0 -13
  94. package/dist/prod/store/next/patch.js +0 -614
  95. package/dist/types/store/next/patch-hooks.d.ts +0 -41
  96. package/dist/types/store/next/patch.d.ts +0 -91
  97. package/dist/types-cjs/affects.d.cts +0 -47
  98. package/dist/types-cjs/boundaries.d.cts +0 -175
  99. package/dist/types-cjs/core/action.d.cts +0 -64
  100. package/dist/types-cjs/core/async.d.cts +0 -23
  101. package/dist/types-cjs/core/attribution-hooks.d.cts +0 -63
  102. package/dist/types-cjs/core/attribution.d.cts +0 -239
  103. package/dist/types-cjs/core/core.d.cts +0 -176
  104. package/dist/types-cjs/core/dev.d.cts +0 -95
  105. package/dist/types-cjs/core/effect.d.cts +0 -30
  106. package/dist/types-cjs/core/error.d.cts +0 -56
  107. package/dist/types-cjs/core/external.d.cts +0 -15
  108. package/dist/types-cjs/core/graph.d.cts +0 -28
  109. package/dist/types-cjs/core/heap.d.cts +0 -22
  110. package/dist/types-cjs/core/index.d.cts +0 -13
  111. package/dist/types-cjs/core/invariants.d.cts +0 -59
  112. package/dist/types-cjs/core/lanes.d.cts +0 -44
  113. package/dist/types-cjs/core/optimistic.d.cts +0 -6
  114. package/dist/types-cjs/core/owner.d.cts +0 -124
  115. package/dist/types-cjs/core/scheduler.d.cts +0 -231
  116. package/dist/types-cjs/core/types.d.cts +0 -204
  117. package/dist/types-cjs/core/verdict.d.cts +0 -2
  118. package/dist/types-cjs/index.d.cts +0 -10
  119. package/dist/types-cjs/map.d.cts +0 -69
  120. package/dist/types-cjs/package.json +0 -3
  121. package/dist/types-cjs/store/index.d.cts +0 -21
  122. package/dist/types-cjs/store/next/optimistic.d.cts +0 -23
  123. package/dist/types-cjs/store/next/patch-hooks.d.cts +0 -41
  124. package/dist/types-cjs/store/next/patch.d.cts +0 -91
  125. package/dist/types-cjs/store/next/projection.d.cts +0 -8
  126. package/dist/types-cjs/store/next/reconcile.d.cts +0 -17
  127. package/dist/types-cjs/store/next/store.d.cts +0 -127
  128. package/dist/types-cjs/store/next/target.d.cts +0 -192
  129. package/dist/types-cjs/store/store.d.cts +0 -138
  130. package/dist/types-cjs/store/storePath.d.cts +0 -58
  131. package/dist/types-cjs/store/utils.d.cts +0 -74
@@ -0,0 +1,32 @@
1
+ const EMPTY = Object.freeze([]);
2
+
3
+ const noop = () => {};
4
+
5
+ const attribution = {
6
+ enable: noop,
7
+ disable: noop,
8
+ subscribe: () => noop,
9
+ history: () => EMPTY,
10
+ why: () => [],
11
+ subscriptions: () => [],
12
+ costs: () => ({
13
+ scopes: [],
14
+ writes: []
15
+ }),
16
+ waterfalls: () => EMPTY,
17
+ holds: () => EMPTY,
18
+ navigations: () => EMPTY,
19
+ interactions: () => EMPTY,
20
+ feedback: () => ({
21
+ sources: [],
22
+ interactions: [],
23
+ navigations: [],
24
+ flights: [],
25
+ fallbacks: []
26
+ }),
27
+ markFlight: noop,
28
+ format: () => "",
29
+ formatOrigin: () => ""
30
+ };
31
+
32
+ export { attribution };
@@ -291,7 +291,9 @@ class CollectionQueue extends Queue {
291
291
  if (t) {
292
292
  const e = this.v.size === 0;
293
293
  this.v.add(t);
294
- if (e) setSignal(this.D, true);
294
+ if (e) {
295
+ setSignal(this.D, true);
296
+ }
295
297
  if (this.ee & STATUS_ERROR) {
296
298
  setSignal(this._, unwrapStatusError(t.o?._));
297
299
  }
@@ -1,14 +1,25 @@
1
- import { globalQueue, activeTransition, currentTransition, schedule, flush } from "./scheduler.js";
1
+ import { setOrigin, globalQueue, activeTransition, currentTransition, schedule, actionStepDepth, flush, enterActionStep, exitActionStep } from "./scheduler.js";
2
2
 
3
3
  import { isThenable } from "./async.js";
4
4
 
5
5
  import "./core.js";
6
6
 
7
- function restoreTransition(e, r) {
8
- globalQueue.initTransition(e);
9
- const t = r();
10
- flush();
11
- return t;
7
+ /** Invocation order across all actions — the provenance every slice of an
8
+ * action runs under (scheduler `origin`): the flights and overrides its
9
+ * ambient windows issue are stamped with it, so a later action's override
10
+ * can tell this action's late answer from its own (#3331). */ let actionSeq = 0;
11
+
12
+ function restoreTransition(e, t, n) {
13
+ const r = setOrigin(e);
14
+ globalQueue.initTransition(t);
15
+ const i = n();
16
+ // A nested action resuming synchronously (its body yielded a non-thenable)
17
+ // runs this inside the OUTER action's slice: draining here would park the
18
+ // shared transaction and detach the outer body's remaining writes (the
19
+ // flush() rule, scheduler.ts). The outer step's own return drains.
20
+ if (actionStepDepth === 0) flush();
21
+ setOrigin(r);
22
+ return i;
12
23
  }
13
24
 
14
25
  /**
@@ -74,36 +85,45 @@ function restoreTransition(e, r) {
74
85
  * await addTodo("buy milk");
75
86
  * ```
76
87
  */ function action(e) {
77
- return (...r) => new Promise((t, n) => {
78
- const i = e(...r);
88
+ return (...t) => new Promise((n, r) => {
89
+ const i = e(...t);
90
+ const o = ++actionSeq;
91
+ // The first slice's window runs to the scheduled flush, which clears
92
+ // the provenance with the window — no restore here.
93
+ setOrigin(o);
79
94
  globalQueue.initTransition();
80
- let o = activeTransition;
81
- o.ue.push(i);
82
- const done = (e, r, u = false) => {
83
- o = currentTransition(o);
84
- const s = o.ue.indexOf(i);
85
- if (s >= 0) o.ue.splice(s, 1);
95
+ let s = activeTransition;
96
+ s.ue.push(i);
97
+ const done = (e, t, o = false) => {
98
+ s = currentTransition(s);
99
+ const u = s.ue.indexOf(i);
100
+ if (u >= 0) s.ue.splice(u, 1);
86
101
  // Re-adopt through initTransition like every other resumption site:
87
102
  // a bare setActiveTransition leaves globalQueue._batch as a detached
88
103
  // ambient batch, and anything registered before the scheduled flush
89
104
  // (held writes on a merging transition, optimistic overrides,
90
105
  // affects() marks) lands there with nothing to ever finalize it.
91
- globalQueue.initTransition(o);
106
+ globalQueue.initTransition(s);
92
107
  schedule();
93
- u ? n(r) : t(e);
108
+ o ? r(t) : n(e);
94
109
  };
95
- const step = (e, r) => {
96
- let t;
110
+ const step = (e, t) => {
111
+ let n;
112
+ // The body is on the stack between these brackets: flush() is
113
+ // refused inside (FLUSH_IN_ACTION, scheduler.ts).
114
+ enterActionStep();
97
115
  try {
98
- t = r ? i.throw(e) : i.next(e);
116
+ n = t ? i.throw(e) : i.next(e);
99
117
  } catch (e) {
118
+ exitActionStep();
100
119
  return done(undefined, e, true);
101
120
  }
121
+ exitActionStep();
102
122
  // A rejected iterator result (async generators) means the error already
103
123
  // escaped the generator body — it is completed, and throwing back in
104
124
  // would just reject again forever. Settle instead.
105
- if (isThenable(t)) return void t.then(run, e => done(undefined, e, true));
106
- run(t);
125
+ if (isThenable(n)) return void n.then(run, e => done(undefined, e, true));
126
+ run(n);
107
127
  };
108
128
  const run = e => {
109
129
  if (e.done) return done(e.value);
@@ -114,23 +134,23 @@ function restoreTransition(e, r) {
114
134
  // the action so its iterator never leaks in the transition. The
115
135
  // settled flag implements A+ 2.3.3.3.4.1: a throw after the thenable
116
136
  // already called a callback is ignored.
117
- let r = false;
137
+ let t = false;
118
138
  try {
119
139
  if (isThenable(e.value)) return void e.value.then(e => {
120
- if (r) return;
121
- r = true;
122
- restoreTransition(o, () => step(e));
140
+ if (t) return;
141
+ t = true;
142
+ restoreTransition(o, s, () => step(e));
123
143
  }, e => {
124
- if (r) return;
125
- r = true;
126
- restoreTransition(o, () => step(e, true));
144
+ if (t) return;
145
+ t = true;
146
+ restoreTransition(o, s, () => step(e, true));
127
147
  });
128
148
  } catch (e) {
129
- if (r) return;
130
- r = true;
131
- return void restoreTransition(o, () => step(e, true));
149
+ if (t) return;
150
+ t = true;
151
+ return void restoreTransition(o, s, () => step(e, true));
132
152
  }
133
- restoreTransition(o, () => step(e.value));
153
+ restoreTransition(o, s, () => step(e.value));
134
154
  };
135
155
  step();
136
156
  });