@praxisjs/core 2.2.0 → 2.3.0

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 (116) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/component/internals.d.ts +12 -2
  3. package/dist/component/internals.d.ts.map +1 -1
  4. package/dist/component/internals.js +25 -7
  5. package/dist/component/internals.js.map +1 -1
  6. package/dist/internal.d.ts +3 -2
  7. package/dist/internal.d.ts.map +1 -1
  8. package/dist/internal.js +3 -2
  9. package/dist/internal.js.map +1 -1
  10. package/dist/signal/batch.d.ts +1 -3
  11. package/dist/signal/batch.d.ts.map +1 -1
  12. package/dist/signal/batch.js +4 -30
  13. package/dist/signal/batch.js.map +1 -1
  14. package/dist/signal/computed.d.ts.map +1 -1
  15. package/dist/signal/computed.js +13 -66
  16. package/dist/signal/computed.js.map +1 -1
  17. package/dist/signal/effect.d.ts +6 -14
  18. package/dist/signal/effect.d.ts.map +1 -1
  19. package/dist/signal/effect.js +11 -83
  20. package/dist/signal/effect.js.map +1 -1
  21. package/dist/signal/graph.d.ts +111 -0
  22. package/dist/signal/graph.d.ts.map +1 -0
  23. package/dist/signal/graph.js +513 -0
  24. package/dist/signal/graph.js.map +1 -0
  25. package/dist/signal/index.d.ts +1 -0
  26. package/dist/signal/index.d.ts.map +1 -1
  27. package/dist/signal/index.js +1 -0
  28. package/dist/signal/index.js.map +1 -1
  29. package/dist/signal/peek.d.ts.map +1 -1
  30. package/dist/signal/peek.js +2 -9
  31. package/dist/signal/peek.js.map +1 -1
  32. package/dist/signal/selector.d.ts +5 -0
  33. package/dist/signal/selector.d.ts.map +1 -0
  34. package/dist/signal/selector.js +128 -0
  35. package/dist/signal/selector.js.map +1 -0
  36. package/dist/signal/signal.d.ts +0 -5
  37. package/dist/signal/signal.d.ts.map +1 -1
  38. package/dist/signal/signal.js +11 -70
  39. package/dist/signal/signal.js.map +1 -1
  40. package/package.json +13 -4
  41. package/src/component/internals.ts +35 -10
  42. package/src/internal.ts +26 -0
  43. package/src/signal/batch.ts +5 -33
  44. package/src/signal/computed.ts +13 -66
  45. package/src/signal/effect.ts +12 -92
  46. package/src/signal/graph.ts +562 -0
  47. package/src/signal/index.ts +1 -0
  48. package/src/signal/peek.ts +2 -8
  49. package/src/signal/selector.ts +140 -0
  50. package/src/signal/signal.ts +11 -74
  51. package/dist/__tests__/batch.test.d.ts +0 -2
  52. package/dist/__tests__/batch.test.d.ts.map +0 -1
  53. package/dist/__tests__/batch.test.js +0 -124
  54. package/dist/__tests__/batch.test.js.map +0 -1
  55. package/dist/__tests__/component.test.d.ts +0 -2
  56. package/dist/__tests__/component.test.d.ts.map +0 -1
  57. package/dist/__tests__/component.test.js +0 -124
  58. package/dist/__tests__/component.test.js.map +0 -1
  59. package/dist/__tests__/computed.test.d.ts +0 -2
  60. package/dist/__tests__/computed.test.d.ts.map +0 -1
  61. package/dist/__tests__/computed.test.js +0 -289
  62. package/dist/__tests__/computed.test.js.map +0 -1
  63. package/dist/__tests__/effect.test.d.ts +0 -2
  64. package/dist/__tests__/effect.test.d.ts.map +0 -1
  65. package/dist/__tests__/effect.test.js +0 -200
  66. package/dist/__tests__/effect.test.js.map +0 -1
  67. package/dist/__tests__/peek.test.d.ts +0 -2
  68. package/dist/__tests__/peek.test.d.ts.map +0 -1
  69. package/dist/__tests__/peek.test.js +0 -26
  70. package/dist/__tests__/peek.test.js.map +0 -1
  71. package/dist/__tests__/persisted-signal.test.d.ts +0 -2
  72. package/dist/__tests__/persisted-signal.test.d.ts.map +0 -1
  73. package/dist/__tests__/persisted-signal.test.js +0 -252
  74. package/dist/__tests__/persisted-signal.test.js.map +0 -1
  75. package/dist/__tests__/reactive.test.d.ts +0 -2
  76. package/dist/__tests__/reactive.test.d.ts.map +0 -1
  77. package/dist/__tests__/reactive.test.js +0 -299
  78. package/dist/__tests__/reactive.test.js.map +0 -1
  79. package/dist/__tests__/resource-focus.test.d.ts +0 -2
  80. package/dist/__tests__/resource-focus.test.d.ts.map +0 -1
  81. package/dist/__tests__/resource-focus.test.js +0 -50
  82. package/dist/__tests__/resource-focus.test.js.map +0 -1
  83. package/dist/__tests__/resource-server-pass.test.d.ts +0 -2
  84. package/dist/__tests__/resource-server-pass.test.d.ts.map +0 -1
  85. package/dist/__tests__/resource-server-pass.test.js +0 -78
  86. package/dist/__tests__/resource-server-pass.test.js.map +0 -1
  87. package/dist/__tests__/resource.test.d.ts +0 -2
  88. package/dist/__tests__/resource.test.d.ts.map +0 -1
  89. package/dist/__tests__/resource.test.js +0 -336
  90. package/dist/__tests__/resource.test.js.map +0 -1
  91. package/dist/__tests__/signal.test.d.ts +0 -2
  92. package/dist/__tests__/signal.test.d.ts.map +0 -1
  93. package/dist/__tests__/signal.test.js +0 -254
  94. package/dist/__tests__/signal.test.js.map +0 -1
  95. package/dist/__tests__/synced.test.d.ts +0 -2
  96. package/dist/__tests__/synced.test.d.ts.map +0 -1
  97. package/dist/__tests__/synced.test.js +0 -142
  98. package/dist/__tests__/synced.test.js.map +0 -1
  99. package/dist/__tests__/track.test.d.ts +0 -2
  100. package/dist/__tests__/track.test.d.ts.map +0 -1
  101. package/dist/__tests__/track.test.js +0 -54
  102. package/dist/__tests__/track.test.js.map +0 -1
  103. package/src/__tests__/batch.test.ts +0 -138
  104. package/src/__tests__/component.test.ts +0 -165
  105. package/src/__tests__/computed.test.ts +0 -333
  106. package/src/__tests__/effect.test.ts +0 -241
  107. package/src/__tests__/peek.test.ts +0 -31
  108. package/src/__tests__/persisted-signal.test.ts +0 -305
  109. package/src/__tests__/reactive.test.ts +0 -343
  110. package/src/__tests__/resource-focus.test.ts +0 -61
  111. package/src/__tests__/resource-server-pass.test.ts +0 -90
  112. package/src/__tests__/resource.test.ts +0 -421
  113. package/src/__tests__/signal.test.ts +0 -291
  114. package/src/__tests__/synced.test.ts +0 -173
  115. package/src/__tests__/track.test.ts +0 -61
  116. package/tsconfig.json +0 -8
@@ -0,0 +1,111 @@
1
+ export declare const DIRTY = 1;
2
+ export declare const PENDING = 2;
3
+ export declare const QUEUED = 4;
4
+ export declare const RUNNING = 8;
5
+ export declare const DISPOSED = 16;
6
+ export declare const COMPUTED = 32;
7
+ export declare const EFFECT = 64;
8
+ export declare const HAS_ERROR = 128;
9
+ /** The node is a WatchedNode: it wants to know when its last subscriber goes away. */
10
+ export declare const WATCHED = 256;
11
+ /** An effect waiting for the deferred pass (see `defer`). */
12
+ export declare const DEFERRED = 512;
13
+ export declare class Link {
14
+ dep: ReactiveNode;
15
+ sub: ReactiveNode;
16
+ version: number;
17
+ nextDep: Link | undefined;
18
+ prevSub: Link | undefined;
19
+ nextSub: Link | undefined;
20
+ constructor(dep: ReactiveNode, sub: ReactiveNode, nextDep: Link | undefined, prevSub: Link | undefined);
21
+ }
22
+ export declare class ReactiveNode {
23
+ flags: number;
24
+ version: number;
25
+ subs: Link | undefined;
26
+ subsTail: Link | undefined;
27
+ deps: Link | undefined;
28
+ depsTail: Link | undefined;
29
+ constructor(flags: number);
30
+ }
31
+ export declare abstract class WatchedNode extends ReactiveNode {
32
+ constructor();
33
+ abstract unwatched(): void;
34
+ }
35
+ export declare class SignalNode<T = unknown> extends ReactiveNode {
36
+ value: T;
37
+ constructor(value: T);
38
+ }
39
+ export declare class ComputedNode<T = unknown> extends ReactiveNode {
40
+ value: T | undefined;
41
+ error: unknown;
42
+ getter: () => T;
43
+ constructor(getter: () => T);
44
+ }
45
+ export type EffectCleanup = (() => void) | void;
46
+ type EffectFn<Ctx> = {
47
+ run(this: EffectNode<Ctx>): EffectCleanup;
48
+ }["run"];
49
+ export declare class EffectNode<Ctx = unknown> extends ReactiveNode {
50
+ /** Called as a method, so `this` is the node: a function shared by many effects reads `ctx`. */
51
+ fn: EffectFn<Ctx>;
52
+ cleanup: EffectCleanup;
53
+ /** What was rendering when the effect was created (see setCurrentOwner), for tooling. */
54
+ owner: object | undefined;
55
+ /** State of an effect whose `fn` is shared, kept here instead of in a closure per effect. */
56
+ ctx: Ctx;
57
+ constructor(fn: EffectFn<Ctx>, owner?: object, ctx?: Ctx);
58
+ }
59
+ export declare let activeSub: ReactiveNode | undefined;
60
+ /**
61
+ * Receives what the graph does, for tooling (devtools profiling). While none is set the graph pays
62
+ * one flag check per write, computed run and effect run, and production bundles of an app that
63
+ * never sets one none at all.
64
+ */
65
+ export interface ReactiveObserver {
66
+ /** A signal (or selector bucket) was written and its subscribers marked. */
67
+ write?(node: ReactiveNode): void;
68
+ /** A computed recomputed, taking `ms`. */
69
+ compute?(node: ComputedNode, ms: number): void;
70
+ /** An effect ran, taking `ms`; `owner` is what was rendering when it was created, if known. */
71
+ effect?(node: EffectNode, ms: number, owner: object | undefined): void;
72
+ }
73
+ /** Installs an observer (null removes it) and returns the previous one. */
74
+ export declare function setReactiveObserver(next: ReactiveObserver | null): ReactiveObserver | null;
75
+ /**
76
+ * Marks what is being rendered, so effects created meanwhile are attributed to it, whether or not
77
+ * an observer is installed yet. Returns the previous owner, to restore afterwards.
78
+ */
79
+ export declare function setCurrentOwner(owner: object | undefined): object | undefined;
80
+ export declare function getEffectOwner(node: EffectNode): object | undefined;
81
+ export declare function setActiveSub(sub: ReactiveNode | undefined): ReactiveNode | undefined;
82
+ /** Stops dependency tracking until `resumeTracking(prev)`; the closure-free form of untrack(). */
83
+ export declare function pauseTracking(): ReactiveNode | undefined;
84
+ export declare function resumeTracking(prev: ReactiveNode | undefined): void;
85
+ export declare function track(dep: ReactiveNode): void;
86
+ export declare function startTracking(sub: ReactiveNode): ReactiveNode | undefined;
87
+ export declare function endTracking(sub: ReactiveNode, prev: ReactiveNode | undefined): void;
88
+ /** Removes every dependency of `sub`. */
89
+ export declare function unlinkDeps(sub: ReactiveNode): void;
90
+ export declare function isBatching(): boolean;
91
+ export declare function startBatch(): void;
92
+ export declare function endBatch(): void;
93
+ /** Marks the direct subscribers of a changed source and runs the effects that became stale. */
94
+ export declare function notify(dep: ReactiveNode): void;
95
+ export declare function flush(): void;
96
+ /** Whether a subscriber has to re-run: DIRTY, or PENDING with a source that really changed. */
97
+ export declare function isStale(node: ReactiveNode): boolean;
98
+ export declare function refreshComputed(node: ComputedNode): void;
99
+ export declare function readComputed<T>(node: ComputedNode<T>): T;
100
+ export declare function runEffect(node: EffectNode): void;
101
+ export declare function disposeEffect(node: EffectNode): void;
102
+ export declare function createEffect(fn: () => EffectCleanup): EffectNode;
103
+ /**
104
+ * Creates and runs an effect whose `fn` reads its state from `this.ctx`: one function can serve
105
+ * every effect of a kind (each DOM binding of a render), and each effect allocates no closure.
106
+ */
107
+ export declare function createContextEffect<Ctx>(fn: (this: EffectNode<Ctx>) => EffectCleanup, ctx: Ctx): EffectNode<Ctx>;
108
+ export declare function readSignal<T>(node: SignalNode<T>): T;
109
+ export declare function writeSignal<T>(node: SignalNode<T>, value: T): void;
110
+ export {};
111
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/signal/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,513 @@
1
+ // Push-pull reactive graph. Sources (signals, computeds, selector buckets) keep a doubly linked
2
+ // list of subscriber links, subscribers (computeds, effects) keep a singly linked list of the
3
+ // same links in read order. A re-run walks its previous links in order and reuses every link
4
+ // whose source is read again in the same position, so a binding that reads the same sources on
5
+ // every run allocates nothing and never unsubscribes. Writes push DIRTY to direct subscribers
6
+ // and PENDING further down; reads pull, recomputing a computed only when one of its sources
7
+ // actually changed (tracked with per-node versions).
8
+ export const DIRTY = 1;
9
+ export const PENDING = 2;
10
+ export const QUEUED = 4;
11
+ export const RUNNING = 8;
12
+ export const DISPOSED = 16;
13
+ export const COMPUTED = 32;
14
+ export const EFFECT = 64;
15
+ export const HAS_ERROR = 128;
16
+ /** The node is a WatchedNode: it wants to know when its last subscriber goes away. */
17
+ export const WATCHED = 256;
18
+ /** An effect waiting for the deferred pass (see `defer`). */
19
+ export const DEFERRED = 512;
20
+ // Fields are declared with `declare` and assigned in the constructors: class field initializers
21
+ // define each property one by one, which makes these objects (created by the thousand per render)
22
+ // about twice as slow to allocate.
23
+ export class Link {
24
+ constructor(dep, sub, nextDep, prevSub) {
25
+ this.dep = dep;
26
+ this.sub = sub;
27
+ this.version = dep.version;
28
+ this.nextDep = nextDep;
29
+ this.prevSub = prevSub;
30
+ this.nextSub = undefined;
31
+ }
32
+ }
33
+ export class ReactiveNode {
34
+ constructor(flags) {
35
+ this.flags = flags;
36
+ this.version = 0;
37
+ this.subs = undefined;
38
+ this.subsTail = undefined;
39
+ this.deps = undefined;
40
+ this.depsTail = undefined;
41
+ }
42
+ }
43
+ export class WatchedNode extends ReactiveNode {
44
+ constructor() {
45
+ super(WATCHED);
46
+ }
47
+ }
48
+ export class SignalNode extends ReactiveNode {
49
+ constructor(value) {
50
+ super(0);
51
+ this.value = value;
52
+ }
53
+ }
54
+ export class ComputedNode extends ReactiveNode {
55
+ constructor(getter) {
56
+ super(COMPUTED | DIRTY);
57
+ this.value = undefined;
58
+ this.error = undefined;
59
+ this.getter = getter;
60
+ }
61
+ }
62
+ export class EffectNode extends ReactiveNode {
63
+ constructor(fn, owner, ctx) {
64
+ super(EFFECT);
65
+ this.fn = fn;
66
+ this.cleanup = undefined;
67
+ this.owner = owner;
68
+ this.ctx = ctx;
69
+ }
70
+ }
71
+ // ── Shape keepers ───────────────────────────────────────────────────────────
72
+ // V8 holds map transitions weakly: once every instance of a class is collected (a list cleared
73
+ // right before a full GC), the hidden class its constructor builds dies with them, and the
74
+ // optimized code and inline caches that embedded it are thrown away, so the next render runs cold.
75
+ // One inert instance of each hot class, never linked into a graph, keeps those shapes alive. Its
76
+ // fields get the same assignments, in the same order, as real instances; values a user may supply
77
+ // start as undefined, which no later value forces off the shared map (a number would, for one).
78
+ // Stored with Object.defineProperty because bundlers drop a module-level instance nothing reads.
79
+ function noop() {
80
+ // The keepers never run: their functions only fill the field.
81
+ }
82
+ const signalKeeper = new SignalNode(undefined);
83
+ const effectKeeper = new EffectNode(noop);
84
+ Object.defineProperty(SignalNode, "shapeKeeper", { value: signalKeeper });
85
+ Object.defineProperty(ComputedNode, "shapeKeeper", { value: new ComputedNode(noop) });
86
+ Object.defineProperty(EffectNode, "shapeKeeper", { value: effectKeeper });
87
+ Object.defineProperty(Link, "shapeKeeper", { value: new Link(signalKeeper, effectKeeper, undefined, undefined) });
88
+ export let activeSub = undefined;
89
+ let observer = null;
90
+ // The checks read this flag, not `observer`: minifiers fold a boolean that nothing ever sets to true
91
+ // (no observer is installed in an app without devtools), which drops the instrumentation from
92
+ // production bundles. A null check is not folded.
93
+ let observing = false;
94
+ let currentOwner = undefined;
95
+ /** Installs an observer (null removes it) and returns the previous one. */
96
+ export function setReactiveObserver(next) {
97
+ const prev = observer;
98
+ observer = next;
99
+ observing = next !== null;
100
+ return prev;
101
+ }
102
+ /**
103
+ * Marks what is being rendered, so effects created meanwhile are attributed to it, whether or not
104
+ * an observer is installed yet. Returns the previous owner, to restore afterwards.
105
+ */
106
+ export function setCurrentOwner(owner) {
107
+ const prev = currentOwner;
108
+ currentOwner = owner;
109
+ return prev;
110
+ }
111
+ export function getEffectOwner(node) {
112
+ return node.owner;
113
+ }
114
+ export function setActiveSub(sub) {
115
+ const prev = activeSub;
116
+ activeSub = sub;
117
+ return prev;
118
+ }
119
+ /** Stops dependency tracking until `resumeTracking(prev)`; the closure-free form of untrack(). */
120
+ export function pauseTracking() {
121
+ return setActiveSub(undefined);
122
+ }
123
+ export function resumeTracking(prev) {
124
+ activeSub = prev;
125
+ }
126
+ // ── Tracking ────────────────────────────────────────────────────────────────
127
+ export function track(dep) {
128
+ const sub = activeSub;
129
+ if (sub === undefined)
130
+ return;
131
+ const prevDep = sub.depsTail;
132
+ if (prevDep?.dep === dep) {
133
+ prevDep.version = dep.version;
134
+ return;
135
+ }
136
+ const nextDep = prevDep !== undefined ? prevDep.nextDep : sub.deps;
137
+ if (nextDep?.dep === dep) {
138
+ nextDep.version = dep.version;
139
+ sub.depsTail = nextDep;
140
+ return;
141
+ }
142
+ // Read again out of order within the same run: the link already exists among the ones kept
143
+ // so far, so another one would only notify the subscriber twice.
144
+ const depsTail = dep.subsTail;
145
+ if (depsTail?.sub === sub && isTrackedLink(depsTail, sub)) {
146
+ depsTail.version = dep.version;
147
+ return;
148
+ }
149
+ const link = new Link(dep, sub, nextDep, dep.subsTail);
150
+ if (prevDep !== undefined)
151
+ prevDep.nextDep = link;
152
+ else
153
+ sub.deps = link;
154
+ sub.depsTail = link;
155
+ if (dep.subsTail !== undefined)
156
+ dep.subsTail.nextSub = link;
157
+ else
158
+ dep.subs = link;
159
+ dep.subsTail = link;
160
+ }
161
+ // Whether `link` is among the ones `sub` has read so far in its current run (deps up to depsTail).
162
+ function isTrackedLink(link, sub) {
163
+ const tail = sub.depsTail;
164
+ if (tail === undefined)
165
+ return false;
166
+ let current = sub.deps;
167
+ for (;;) {
168
+ if (current === link)
169
+ return true;
170
+ if (current === tail)
171
+ return false;
172
+ current = current.nextDep;
173
+ }
174
+ }
175
+ export function startTracking(sub) {
176
+ sub.depsTail = undefined;
177
+ sub.flags = (sub.flags & ~(DIRTY | PENDING)) | RUNNING;
178
+ return setActiveSub(sub);
179
+ }
180
+ export function endTracking(sub, prev) {
181
+ activeSub = prev;
182
+ sub.flags &= ~RUNNING;
183
+ // Disposed during its own run (its scope went away): whatever it read after that must not keep it.
184
+ if ((sub.flags & DISPOSED) !== 0) {
185
+ unlinkDeps(sub);
186
+ return;
187
+ }
188
+ const tail = sub.depsTail;
189
+ let stale = tail !== undefined ? tail.nextDep : sub.deps;
190
+ if (stale !== undefined) {
191
+ if (tail !== undefined)
192
+ tail.nextDep = undefined;
193
+ else
194
+ sub.deps = undefined;
195
+ while (stale !== undefined)
196
+ stale = unlink(stale);
197
+ }
198
+ }
199
+ /** Removes every dependency of `sub`. */
200
+ export function unlinkDeps(sub) {
201
+ let link = sub.deps;
202
+ sub.deps = undefined;
203
+ sub.depsTail = undefined;
204
+ while (link !== undefined)
205
+ link = unlink(link);
206
+ }
207
+ function unlink(link) {
208
+ const dep = link.dep;
209
+ const next = link.nextDep;
210
+ const prevSub = link.prevSub;
211
+ const nextSub = link.nextSub;
212
+ if (prevSub !== undefined)
213
+ prevSub.nextSub = nextSub;
214
+ else
215
+ dep.subs = nextSub;
216
+ if (nextSub !== undefined)
217
+ nextSub.prevSub = prevSub;
218
+ else
219
+ dep.subsTail = prevSub;
220
+ if (dep.subs === undefined && (dep.flags & WATCHED) !== 0)
221
+ dep.unwatched();
222
+ return next;
223
+ }
224
+ // ── Propagation ─────────────────────────────────────────────────────────────
225
+ let batchDepth = 0;
226
+ let flushing = false;
227
+ const queue = [];
228
+ let queueIndex = 0;
229
+ export function isBatching() {
230
+ return batchDepth > 0;
231
+ }
232
+ export function startBatch() {
233
+ batchDepth++;
234
+ }
235
+ export function endBatch() {
236
+ if (--batchDepth === 0)
237
+ flush();
238
+ }
239
+ /** Marks the direct subscribers of a changed source and runs the effects that became stale. */
240
+ export function notify(dep) {
241
+ let link = dep.subs;
242
+ if (link === undefined)
243
+ return;
244
+ do {
245
+ mark(link, DIRTY);
246
+ link = link.nextSub;
247
+ } while (link !== undefined);
248
+ if (batchDepth === 0)
249
+ flush();
250
+ }
251
+ function mark(link, flag) {
252
+ const node = link.sub;
253
+ const flags = node.flags;
254
+ // A subscriber that is running only depends on what it has read so far in this run: a write to
255
+ // a source it has not read again yet does not make the run stale.
256
+ if ((flags & RUNNING) !== 0 && !isTrackedLink(link, node))
257
+ return;
258
+ if ((flags & (DIRTY | PENDING)) !== 0) {
259
+ // Already stale: only an upgrade from PENDING to DIRTY changes anything, and its
260
+ // subscribers were marked when it first went stale. An effect upgraded this way read a signal
261
+ // that changed, so it joins the synchronous pass instead of waiting for the deferred one.
262
+ if (flag === DIRTY) {
263
+ node.flags = flags | DIRTY;
264
+ if ((flags & EFFECT) !== 0 && (flags & (QUEUED | RUNNING)) === 0)
265
+ enqueue(node);
266
+ }
267
+ return;
268
+ }
269
+ node.flags = flags | flag;
270
+ if ((flags & EFFECT) !== 0) {
271
+ // A running effect that invalidates itself is queued again once it finishes.
272
+ if ((flags & (QUEUED | RUNNING)) !== 0)
273
+ return;
274
+ if (flag === DIRTY)
275
+ enqueue(node);
276
+ else
277
+ defer(node);
278
+ return;
279
+ }
280
+ let sub = node.subs;
281
+ while (sub !== undefined) {
282
+ mark(sub, PENDING);
283
+ sub = sub.nextSub;
284
+ }
285
+ }
286
+ function enqueue(node) {
287
+ node.flags |= QUEUED;
288
+ queue.push(node);
289
+ }
290
+ // Effects that only depend on a change through a computed run in a microtask, so every write of the
291
+ // same synchronous block reaches them as one update with the final values. They pull fresh values
292
+ // when they run, and one that already re-ran for a direct change in the meantime is skipped.
293
+ const deferred = [];
294
+ let deferredScheduled = false;
295
+ function defer(node) {
296
+ if ((node.flags & DEFERRED) !== 0)
297
+ return;
298
+ node.flags |= DEFERRED;
299
+ deferred.push(node);
300
+ if (deferredScheduled)
301
+ return;
302
+ deferredScheduled = true;
303
+ queueMicrotask(flushDeferred);
304
+ }
305
+ function flushDeferred() {
306
+ deferredScheduled = false;
307
+ // The synchronous queue always drains before a microtask, so none of these is queued already.
308
+ for (const node of deferred) {
309
+ node.flags &= ~DEFERRED;
310
+ enqueue(node);
311
+ }
312
+ deferred.length = 0;
313
+ flush();
314
+ }
315
+ export function flush() {
316
+ if (flushing)
317
+ return;
318
+ flushing = true;
319
+ let error;
320
+ let hasError = false;
321
+ try {
322
+ while (queueIndex < queue.length) {
323
+ const node = queue[queueIndex++];
324
+ node.flags &= ~QUEUED;
325
+ try {
326
+ if (isStale(node))
327
+ runEffect(node);
328
+ }
329
+ catch (e) {
330
+ error = e;
331
+ hasError = true;
332
+ }
333
+ }
334
+ }
335
+ finally {
336
+ queue.length = 0;
337
+ queueIndex = 0;
338
+ flushing = false;
339
+ }
340
+ if (hasError)
341
+ throw error;
342
+ }
343
+ // ── Pull ────────────────────────────────────────────────────────────────────
344
+ /** Whether a subscriber has to re-run: DIRTY, or PENDING with a source that really changed. */
345
+ export function isStale(node) {
346
+ const flags = node.flags;
347
+ if ((flags & DISPOSED) !== 0)
348
+ return false;
349
+ if ((flags & (DIRTY | HAS_ERROR)) !== 0)
350
+ return true;
351
+ if ((flags & PENDING) === 0)
352
+ return false;
353
+ let link = node.deps;
354
+ while (link !== undefined) {
355
+ const dep = link.dep;
356
+ if ((dep.flags & COMPUTED) !== 0)
357
+ refreshComputed(dep);
358
+ if (link.version !== dep.version) {
359
+ node.flags |= DIRTY;
360
+ return true;
361
+ }
362
+ link = link.nextDep;
363
+ }
364
+ node.flags &= ~PENDING;
365
+ return false;
366
+ }
367
+ export function refreshComputed(node) {
368
+ if ((node.flags & RUNNING) !== 0)
369
+ throw new Error("[PraxisJS] Cycle detected while computing a value");
370
+ if (!isStale(node))
371
+ return;
372
+ const prev = startTracking(node);
373
+ let value;
374
+ let threw = false;
375
+ const start = observing ? performance.now() : 0;
376
+ try {
377
+ value = node.getter();
378
+ }
379
+ catch (e) {
380
+ value = e;
381
+ threw = true;
382
+ }
383
+ finally {
384
+ endTracking(node, prev);
385
+ if (observing)
386
+ observer.compute?.(node, performance.now() - start);
387
+ }
388
+ if (threw) {
389
+ // HAS_ERROR keeps it stale so the next read retries, without the DIRTY flag that would stop
390
+ // later source changes from reaching its subscribers. The error is rethrown to every reader.
391
+ node.flags |= HAS_ERROR;
392
+ node.error = value;
393
+ node.version++;
394
+ return;
395
+ }
396
+ const hadError = (node.flags & HAS_ERROR) !== 0;
397
+ node.flags &= ~HAS_ERROR;
398
+ node.error = undefined;
399
+ if (hadError || node.version === 0 || !Object.is(node.value, value)) {
400
+ node.value = value;
401
+ node.version++;
402
+ }
403
+ }
404
+ export function readComputed(node) {
405
+ refreshComputed(node);
406
+ track(node);
407
+ if ((node.flags & HAS_ERROR) !== 0)
408
+ throw node.error;
409
+ return node.value;
410
+ }
411
+ // ── Effects ─────────────────────────────────────────────────────────────────
412
+ export function runEffect(node) {
413
+ const cleanup = node.cleanup;
414
+ if (cleanup !== undefined) {
415
+ node.cleanup = undefined;
416
+ const prevSub = setActiveSub(undefined);
417
+ try {
418
+ cleanup();
419
+ }
420
+ finally {
421
+ activeSub = prevSub;
422
+ }
423
+ }
424
+ const prev = startTracking(node);
425
+ // Effects created while this one runs (a reactive child rendering its content) inherit its owner.
426
+ const prevOwner = currentOwner;
427
+ if (node.owner !== undefined)
428
+ currentOwner = node.owner;
429
+ try {
430
+ if (!observing)
431
+ node.cleanup = node.fn();
432
+ else
433
+ runObserved(node);
434
+ }
435
+ finally {
436
+ currentOwner = prevOwner;
437
+ endTracking(node, prev);
438
+ // Invalidated while it ran: run again with the pass its invalidation calls for.
439
+ const flags = node.flags;
440
+ if ((flags & (DISPOSED | QUEUED)) === 0) {
441
+ if ((flags & DIRTY) !== 0) {
442
+ enqueue(node);
443
+ if (batchDepth === 0)
444
+ flush();
445
+ }
446
+ else if ((flags & PENDING) !== 0) {
447
+ defer(node);
448
+ }
449
+ }
450
+ }
451
+ }
452
+ function runObserved(node) {
453
+ const start = performance.now();
454
+ try {
455
+ node.cleanup = node.fn();
456
+ }
457
+ finally {
458
+ observer.effect?.(node, performance.now() - start, node.owner);
459
+ }
460
+ }
461
+ export function disposeEffect(node) {
462
+ if ((node.flags & DISPOSED) !== 0)
463
+ return;
464
+ node.flags |= DISPOSED;
465
+ unlinkDeps(node);
466
+ const cleanup = node.cleanup;
467
+ node.cleanup = undefined;
468
+ if (cleanup !== undefined) {
469
+ const prevSub = setActiveSub(undefined);
470
+ try {
471
+ cleanup();
472
+ }
473
+ finally {
474
+ activeSub = prevSub;
475
+ }
476
+ }
477
+ }
478
+ export function createEffect(fn) {
479
+ const node = new EffectNode(fn, currentOwner);
480
+ runEffect(node);
481
+ return node;
482
+ }
483
+ /**
484
+ * Creates and runs an effect whose `fn` reads its state from `this.ctx`: one function can serve
485
+ * every effect of a kind (each DOM binding of a render), and each effect allocates no closure.
486
+ */
487
+ export function createContextEffect(fn, ctx) {
488
+ const node = new EffectNode(fn, currentOwner, ctx);
489
+ runEffect(node);
490
+ return node;
491
+ }
492
+ // ── Signals ─────────────────────────────────────────────────────────────────
493
+ export function readSignal(node) {
494
+ if (activeSub !== undefined)
495
+ track(node);
496
+ return node.value;
497
+ }
498
+ export function writeSignal(node, value) {
499
+ const prev = node.value;
500
+ // Object.is, inline: writes are hot and often run before the graph code is optimized, where a
501
+ // builtin call costs more than these comparisons.
502
+ if (prev === value ? value !== 0 || 1 / value === 1 / prev : value !== value && prev !== prev) {
503
+ return;
504
+ }
505
+ node.value = value;
506
+ node.version++;
507
+ if (observing)
508
+ observer.write?.(node);
509
+ // A signal nothing reads yet (a model being built) needs no notification pass.
510
+ if (node.subs !== undefined)
511
+ notify(node);
512
+ }
513
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/signal/graph.ts"],"names":[],"mappings":"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"}
@@ -5,4 +5,5 @@ export { computed, writableComputed } from "./computed";
5
5
  export { type PersistedSignalOptions, type PersistedSignal, persistedSignal } from "./persisted";
6
6
  export { type SyncedSignal, syncedSignal } from "./synced";
7
7
  export { effect, untrack } from "./effect";
8
+ export { type Selector, type SelectorEquals, selector } from "./selector";
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,KAAK,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,KAAK,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -5,4 +5,5 @@ export { computed, writableComputed } from "./computed";
5
5
  export { persistedSignal } from "./persisted";
6
6
  export { syncedSignal } from "./synced";
7
7
  export { effect, untrack } from "./effect";
8
+ export { selector } from "./selector";
8
9
  //# sourceMappingURL=index.js.map