@nextwebwg/html-next 1.0.0-alpha.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.
Files changed (196) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -0
  3. package/dist/ast.d.ts +7 -0
  4. package/dist/ast.d.ts.map +1 -0
  5. package/dist/ast.js +2 -0
  6. package/dist/ast.js.map +1 -0
  7. package/dist/browser-loader.bundle.js +9 -0
  8. package/dist/browser-loader.d.ts +35 -0
  9. package/dist/browser-loader.d.ts.map +1 -0
  10. package/dist/browser-loader.js +83 -0
  11. package/dist/browser-loader.js.map +1 -0
  12. package/dist/browser-source.d.ts +10 -0
  13. package/dist/browser-source.d.ts.map +1 -0
  14. package/dist/browser-source.js +97 -0
  15. package/dist/browser-source.js.map +1 -0
  16. package/dist/browser.d.ts +5 -0
  17. package/dist/browser.d.ts.map +1 -0
  18. package/dist/browser.js +9 -0
  19. package/dist/browser.js.map +1 -0
  20. package/dist/cli.d.ts +31 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +138 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/component-styles-build.d.ts +11 -0
  25. package/dist/component-styles-build.d.ts.map +1 -0
  26. package/dist/component-styles-build.js +74 -0
  27. package/dist/component-styles-build.js.map +1 -0
  28. package/dist/component-styles.d.ts +37 -0
  29. package/dist/component-styles.d.ts.map +1 -0
  30. package/dist/component-styles.js +236 -0
  31. package/dist/component-styles.js.map +1 -0
  32. package/dist/contract-platform.d.ts +5 -0
  33. package/dist/contract-platform.d.ts.map +1 -0
  34. package/dist/contract-platform.js +8 -0
  35. package/dist/contract-platform.js.map +1 -0
  36. package/dist/contract.d.ts +14 -0
  37. package/dist/contract.d.ts.map +1 -0
  38. package/dist/contract.js +234 -0
  39. package/dist/contract.js.map +1 -0
  40. package/dist/controller-files.d.ts +10 -0
  41. package/dist/controller-files.d.ts.map +1 -0
  42. package/dist/controller-files.js +54 -0
  43. package/dist/controller-files.js.map +1 -0
  44. package/dist/controller.d.ts +15 -0
  45. package/dist/controller.d.ts.map +1 -0
  46. package/dist/controller.js +33 -0
  47. package/dist/controller.js.map +1 -0
  48. package/dist/data.d.ts +28 -0
  49. package/dist/data.d.ts.map +1 -0
  50. package/dist/data.js +100 -0
  51. package/dist/data.js.map +1 -0
  52. package/dist/diagnostics.d.ts +11 -0
  53. package/dist/diagnostics.d.ts.map +1 -0
  54. package/dist/diagnostics.js +13 -0
  55. package/dist/diagnostics.js.map +1 -0
  56. package/dist/expression.d.ts +80 -0
  57. package/dist/expression.d.ts.map +1 -0
  58. package/dist/expression.js +474 -0
  59. package/dist/expression.js.map +1 -0
  60. package/dist/freeze.d.ts +2 -0
  61. package/dist/freeze.d.ts.map +1 -0
  62. package/dist/freeze.js +8 -0
  63. package/dist/freeze.js.map +1 -0
  64. package/dist/generate.d.ts +11 -0
  65. package/dist/generate.d.ts.map +1 -0
  66. package/dist/generate.js +41 -0
  67. package/dist/generate.js.map +1 -0
  68. package/dist/generated/dom-properties.d.ts +8 -0
  69. package/dist/generated/dom-properties.d.ts.map +1 -0
  70. package/dist/generated/dom-properties.js +1410 -0
  71. package/dist/generated/dom-properties.js.map +1 -0
  72. package/dist/generated-runtime.d.ts +42 -0
  73. package/dist/generated-runtime.d.ts.map +1 -0
  74. package/dist/generated-runtime.js +266 -0
  75. package/dist/generated-runtime.js.map +1 -0
  76. package/dist/graph.d.ts +37 -0
  77. package/dist/graph.d.ts.map +1 -0
  78. package/dist/graph.js +81 -0
  79. package/dist/graph.js.map +1 -0
  80. package/dist/index.d.ts +29 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +23 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/language.d.ts +7 -0
  85. package/dist/language.d.ts.map +1 -0
  86. package/dist/language.js +43 -0
  87. package/dist/language.js.map +1 -0
  88. package/dist/names.d.ts +4 -0
  89. package/dist/names.d.ts.map +1 -0
  90. package/dist/names.js +19 -0
  91. package/dist/names.js.map +1 -0
  92. package/dist/node-loader.d.ts +22 -0
  93. package/dist/node-loader.d.ts.map +1 -0
  94. package/dist/node-loader.js +109 -0
  95. package/dist/node-loader.js.map +1 -0
  96. package/dist/package-config.d.ts +22 -0
  97. package/dist/package-config.d.ts.map +1 -0
  98. package/dist/package-config.js +2 -0
  99. package/dist/package-config.js.map +1 -0
  100. package/dist/package.d.ts +9 -0
  101. package/dist/package.d.ts.map +1 -0
  102. package/dist/package.js +208 -0
  103. package/dist/package.js.map +1 -0
  104. package/dist/parser.d.ts +11 -0
  105. package/dist/parser.d.ts.map +1 -0
  106. package/dist/parser.js +938 -0
  107. package/dist/parser.js.map +1 -0
  108. package/dist/platform.d.ts +3 -0
  109. package/dist/platform.d.ts.map +1 -0
  110. package/dist/platform.js +26 -0
  111. package/dist/platform.js.map +1 -0
  112. package/dist/reactivity.d.ts +88 -0
  113. package/dist/reactivity.d.ts.map +1 -0
  114. package/dist/reactivity.js +594 -0
  115. package/dist/reactivity.js.map +1 -0
  116. package/dist/registry.d.ts +14 -0
  117. package/dist/registry.d.ts.map +1 -0
  118. package/dist/registry.js +39 -0
  119. package/dist/registry.js.map +1 -0
  120. package/dist/resolve.d.ts +24 -0
  121. package/dist/resolve.d.ts.map +1 -0
  122. package/dist/resolve.js +65 -0
  123. package/dist/resolve.js.map +1 -0
  124. package/dist/runtime.d.ts +110 -0
  125. package/dist/runtime.d.ts.map +1 -0
  126. package/dist/runtime.js +1926 -0
  127. package/dist/runtime.js.map +1 -0
  128. package/dist/sanitize.d.ts +8 -0
  129. package/dist/sanitize.d.ts.map +1 -0
  130. package/dist/sanitize.js +38 -0
  131. package/dist/sanitize.js.map +1 -0
  132. package/dist/source-graph.d.ts +5 -0
  133. package/dist/source-graph.d.ts.map +1 -0
  134. package/dist/source-graph.js +60 -0
  135. package/dist/source-graph.js.map +1 -0
  136. package/dist/source-parser.d.ts +4 -0
  137. package/dist/source-parser.d.ts.map +1 -0
  138. package/dist/source-parser.js +38 -0
  139. package/dist/source-parser.js.map +1 -0
  140. package/dist/source.d.ts +4 -0
  141. package/dist/source.d.ts.map +1 -0
  142. package/dist/source.js +6 -0
  143. package/dist/source.js.map +1 -0
  144. package/dist/targets/backend.d.ts +28 -0
  145. package/dist/targets/backend.d.ts.map +1 -0
  146. package/dist/targets/backend.js +42 -0
  147. package/dist/targets/backend.js.map +1 -0
  148. package/dist/targets/docs.d.ts +3 -0
  149. package/dist/targets/docs.d.ts.map +1 -0
  150. package/dist/targets/docs.js +85 -0
  151. package/dist/targets/docs.js.map +1 -0
  152. package/dist/targets/native-reactive.d.ts +41 -0
  153. package/dist/targets/native-reactive.d.ts.map +1 -0
  154. package/dist/targets/native-reactive.js +169 -0
  155. package/dist/targets/native-reactive.js.map +1 -0
  156. package/dist/targets/shared.d.ts +15 -0
  157. package/dist/targets/shared.d.ts.map +1 -0
  158. package/dist/targets/shared.js +122 -0
  159. package/dist/targets/shared.js.map +1 -0
  160. package/dist/targets/vanilla.d.ts +6 -0
  161. package/dist/targets/vanilla.d.ts.map +1 -0
  162. package/dist/targets/vanilla.js +442 -0
  163. package/dist/targets/vanilla.js.map +1 -0
  164. package/dist/targets/vue.d.ts +3 -0
  165. package/dist/targets/vue.d.ts.map +1 -0
  166. package/dist/targets/vue.js +577 -0
  167. package/dist/targets/vue.js.map +1 -0
  168. package/dist/template.d.ts +172 -0
  169. package/dist/template.d.ts.map +1 -0
  170. package/dist/template.js +2 -0
  171. package/dist/template.js.map +1 -0
  172. package/dist/type-system.d.ts +80 -0
  173. package/dist/type-system.d.ts.map +1 -0
  174. package/dist/type-system.js +414 -0
  175. package/dist/type-system.js.map +1 -0
  176. package/dist/types.d.ts +51 -0
  177. package/dist/types.d.ts.map +1 -0
  178. package/dist/types.js +2 -0
  179. package/dist/types.js.map +1 -0
  180. package/dist/validate.d.ts +38 -0
  181. package/dist/validate.d.ts.map +1 -0
  182. package/dist/validate.js +297 -0
  183. package/dist/validate.js.map +1 -0
  184. package/dist/validation.d.ts +6 -0
  185. package/dist/validation.d.ts.map +1 -0
  186. package/dist/validation.js +6 -0
  187. package/dist/validation.js.map +1 -0
  188. package/dist/validity-css.d.ts +6 -0
  189. package/dist/validity-css.d.ts.map +1 -0
  190. package/dist/validity-css.js +11 -0
  191. package/dist/validity-css.js.map +1 -0
  192. package/dist/validity.d.ts +45 -0
  193. package/dist/validity.d.ts.map +1 -0
  194. package/dist/validity.js +445 -0
  195. package/dist/validity.js.map +1 -0
  196. package/package.json +124 -0
@@ -0,0 +1,594 @@
1
+ import { fail } from "./diagnostics.js";
2
+ let activeEffect;
3
+ let nextEffectId = 0;
4
+ const maximumExecutionsPerFlush = 100;
5
+ const proxyCache = new WeakMap();
6
+ const objectSubscribers = new WeakMap();
7
+ function unsubscribe(subscription) {
8
+ const { dependency, previousSubscriber, nextSubscriber } = subscription;
9
+ if (previousSubscriber === undefined)
10
+ dependency.first = nextSubscriber;
11
+ else
12
+ previousSubscriber.nextSubscriber = nextSubscriber;
13
+ if (nextSubscriber === undefined)
14
+ dependency.last = previousSubscriber;
15
+ else
16
+ nextSubscriber.previousSubscriber = previousSubscriber;
17
+ }
18
+ /**
19
+ * Returns a finished batch emptied for reuse. Most flushes carry a few effects, and popping them is
20
+ * much cheaper than allocating a new queue (and far cheaper than `length = 0`, which V8 handles in
21
+ * the runtime). Wide batches pop more than a fresh array costs, so they are dropped instead.
22
+ */
23
+ function emptied(batch) {
24
+ if (batch.length > 8)
25
+ return [];
26
+ while (batch.length > 0)
27
+ batch.pop();
28
+ return batch;
29
+ }
30
+ export class ReactiveScheduler {
31
+ #pending = [];
32
+ // A drained batch, emptied in place, becomes the next pending queue so flushing allocates nothing.
33
+ #spare = [];
34
+ #scheduled = false;
35
+ #flushing = false;
36
+ enqueue(effect) {
37
+ if (effect.stopped || effect.queued)
38
+ return;
39
+ effect.queued = true;
40
+ this.#pending.push(effect);
41
+ if (!this.#scheduled && !this.#flushing) {
42
+ this.#scheduled = true;
43
+ queueMicrotask(() => {
44
+ this.#scheduled = false;
45
+ this.flush();
46
+ });
47
+ }
48
+ }
49
+ enqueueDependency(dependency) {
50
+ if (this.#flushing || this.#pending.length > 0)
51
+ return false;
52
+ for (let subscription = dependency.first; subscription !== undefined; subscription = subscription.nextSubscriber) {
53
+ const effect = subscription.effect;
54
+ if (effect.scheduler !== this) {
55
+ // Entry requires an empty queue and scheduling starts only after this loop, so the
56
+ // partially collected batch is private and can be discarded before the safe fallback.
57
+ for (const pending of this.#pending)
58
+ pending.queued = false;
59
+ this.#pending = [];
60
+ return false;
61
+ }
62
+ if (!effect.queued) {
63
+ effect.queued = true;
64
+ this.#pending.push(effect);
65
+ }
66
+ }
67
+ if (!this.#scheduled) {
68
+ this.#scheduled = true;
69
+ queueMicrotask(() => {
70
+ this.#scheduled = false;
71
+ this.flush();
72
+ });
73
+ }
74
+ return true;
75
+ }
76
+ flush() {
77
+ if (this.#flushing || this.#pending.length === 0)
78
+ return;
79
+ this.#drain();
80
+ }
81
+ /** Drains dependency-ordered work after the empty-queue fast path has been ruled out. */
82
+ #drain() {
83
+ this.#flushing = true;
84
+ let rounds = 0;
85
+ let effects;
86
+ let index = 0;
87
+ try {
88
+ while (this.#pending.length > 0) {
89
+ rounds += 1;
90
+ if (rounds > maximumExecutionsPerFlush) {
91
+ for (const pending of this.#pending)
92
+ pending.queued = false;
93
+ this.#pending = [];
94
+ fail("HR006", "A reactive flush exceeded the propagation-depth limit.");
95
+ }
96
+ effects = this.#pending;
97
+ if (effects.length > 1) {
98
+ let index = 1;
99
+ let previous = effects[0];
100
+ while (index < effects.length) {
101
+ const current = effects[index];
102
+ if (previous.priority > current.priority ||
103
+ (previous.priority === current.priority && previous.id > current.id))
104
+ break;
105
+ previous = current;
106
+ index += 1;
107
+ }
108
+ if (index < effects.length) {
109
+ effects.sort((left, right) => left.priority - right.priority || left.id - right.id);
110
+ }
111
+ }
112
+ this.#pending = this.#spare;
113
+ index = 0;
114
+ do {
115
+ const effect = effects[index];
116
+ effect.queued = false;
117
+ index += 1;
118
+ if (effect.computed === undefined)
119
+ effect.execute();
120
+ else
121
+ effect.computed.refresh();
122
+ // With no remaining owner and one ordinary pending effect, the next sortable round is
123
+ // already known. Adopt it in place, but still advance the round count so HR006 retains
124
+ // exactly the same propagation-depth bound as the generic outer loop.
125
+ if (this.#pending.length === 1 && index === effects.length &&
126
+ this.#pending[0].computed === undefined) {
127
+ rounds += 1;
128
+ if (rounds > maximumExecutionsPerFlush) {
129
+ this.#pending[0].queued = false;
130
+ this.#pending = [];
131
+ fail("HR006", "A reactive flush exceeded the propagation-depth limit.");
132
+ }
133
+ const next = this.#pending;
134
+ this.#pending = emptied(effects);
135
+ effects = next;
136
+ index = 0;
137
+ }
138
+ else if (this.#pending.length > 0) {
139
+ this.#deferConsumersBehindComputeds(effects, index);
140
+ }
141
+ } while (index < effects.length);
142
+ this.#spare = emptied(effects);
143
+ effects = undefined;
144
+ }
145
+ }
146
+ finally {
147
+ if (effects !== undefined) {
148
+ while (index < effects.length)
149
+ effects[index++].queued = false;
150
+ this.#spare = [];
151
+ }
152
+ if (this.#pending.length > 0) {
153
+ for (const pending of this.#pending)
154
+ pending.queued = false;
155
+ this.#pending = [];
156
+ }
157
+ this.#flushing = false;
158
+ }
159
+ }
160
+ /**
161
+ * Any owner may reveal dirty computed work that was not in the current batch: computed refreshes
162
+ * can expose a descendant, while an ordinary effect can write an upstream source. No remaining
163
+ * ordinary effect may run ahead of that work, because it could demand the dirty value and then
164
+ * be queued a second time when the computed settles. Move only ordinary owners into the next
165
+ * sortable round; already-queued computeds may continue in dependency order.
166
+ */
167
+ #deferConsumersBehindComputeds(effects, start) {
168
+ if (!this.#pending.some((effect) => effect.computed !== undefined))
169
+ return;
170
+ for (let index = effects.length - 1; index >= start; index -= 1) {
171
+ const effect = effects[index];
172
+ if (effect.computed !== undefined)
173
+ continue;
174
+ effects.splice(index, 1);
175
+ this.#pending.push(effect);
176
+ }
177
+ }
178
+ }
179
+ export class ReactiveEffect {
180
+ scheduler;
181
+ run;
182
+ priority;
183
+ computed;
184
+ id = nextEffectId++;
185
+ dependencies = undefined;
186
+ stopped = false;
187
+ paused = false;
188
+ queued = false;
189
+ #cleanup = undefined;
190
+ #dependencyTail = undefined;
191
+ constructor(scheduler, run, priority, computed) {
192
+ this.scheduler = scheduler;
193
+ this.run = run;
194
+ this.priority = priority;
195
+ this.computed = computed;
196
+ }
197
+ execute() {
198
+ if (this.stopped || this.paused)
199
+ return;
200
+ this.#dependencyTail = undefined;
201
+ if (this.#cleanup !== undefined) {
202
+ const cleanup = this.#cleanup;
203
+ this.#cleanup = undefined;
204
+ cleanup();
205
+ }
206
+ const previous = activeEffect;
207
+ // oxlint-disable-next-line typescript/no-this-alias
208
+ activeEffect = this;
209
+ try {
210
+ const cleanup = this.run();
211
+ if (cleanup !== undefined)
212
+ this.#cleanup = cleanup;
213
+ }
214
+ finally {
215
+ activeEffect = previous;
216
+ const tail = this.#dependencyTail;
217
+ let subscription = tail === undefined ? this.dependencies : tail.nextDependency;
218
+ if (tail === undefined)
219
+ this.dependencies = undefined;
220
+ else
221
+ tail.nextDependency = undefined;
222
+ while (subscription !== undefined) {
223
+ const next = subscription.nextDependency;
224
+ unsubscribe(subscription);
225
+ subscription = next;
226
+ }
227
+ }
228
+ }
229
+ track(dependency) {
230
+ const next = this.#dependencyTail === undefined
231
+ ? this.dependencies
232
+ : this.#dependencyTail.nextDependency;
233
+ if (next?.dependency === dependency) {
234
+ this.#dependencyTail = next;
235
+ return;
236
+ }
237
+ for (let current = this.dependencies; current !== next; current = current?.nextDependency) {
238
+ if (current?.dependency === dependency)
239
+ return;
240
+ }
241
+ const subscription = {
242
+ dependency,
243
+ effect: this,
244
+ nextDependency: next,
245
+ previousSubscriber: undefined,
246
+ nextSubscriber: undefined,
247
+ };
248
+ if (this.#dependencyTail === undefined)
249
+ this.dependencies = subscription;
250
+ else
251
+ this.#dependencyTail.nextDependency = subscription;
252
+ this.#dependencyTail = subscription;
253
+ const first = dependency.first;
254
+ // Computeds lead the subscriber list so invalidation can dirty the derived graph before an
255
+ // ordinary effect observes it. Priority-zero data effects still use normal scheduler ordering.
256
+ if (this.computed !== undefined && first !== undefined) {
257
+ subscription.nextSubscriber = first;
258
+ first.previousSubscriber = subscription;
259
+ dependency.first = subscription;
260
+ }
261
+ else {
262
+ const last = dependency.last;
263
+ subscription.previousSubscriber = last;
264
+ if (last === undefined)
265
+ dependency.first = subscription;
266
+ else
267
+ last.nextSubscriber = subscription;
268
+ dependency.last = subscription;
269
+ }
270
+ }
271
+ schedule() {
272
+ if (this.computed !== undefined) {
273
+ this.computed.invalidate();
274
+ return;
275
+ }
276
+ if (!this.paused)
277
+ this.scheduler.enqueue(this);
278
+ }
279
+ pause() {
280
+ if (this.stopped || this.paused)
281
+ return;
282
+ this.paused = true;
283
+ this.#unsubscribe();
284
+ this.#cleanup?.();
285
+ this.#cleanup = undefined;
286
+ }
287
+ resume() {
288
+ if (this.stopped || !this.paused)
289
+ return;
290
+ this.paused = false;
291
+ this.execute();
292
+ }
293
+ stop() {
294
+ if (this.stopped)
295
+ return;
296
+ this.stopped = true;
297
+ this.#unsubscribe();
298
+ this.#cleanup?.();
299
+ this.#cleanup = undefined;
300
+ }
301
+ #unsubscribe() {
302
+ let subscription = this.dependencies;
303
+ while (subscription !== undefined) {
304
+ const next = subscription.nextDependency;
305
+ unsubscribe(subscription);
306
+ subscription = next;
307
+ }
308
+ this.dependencies = undefined;
309
+ this.#dependencyTail = undefined;
310
+ }
311
+ }
312
+ /** A writable controller-local value that participates in the same dependency graph as scopes. */
313
+ export class ReactiveSignal {
314
+ #dependency = { first: undefined, last: undefined };
315
+ #value;
316
+ constructor(value) {
317
+ this.#value = value;
318
+ }
319
+ get() {
320
+ if (activeEffect !== undefined)
321
+ activeEffect.track(this.#dependency);
322
+ return this.#value;
323
+ }
324
+ set(value) {
325
+ if (Object.is(this.#value, value))
326
+ return;
327
+ this.#value = value;
328
+ trigger(this.#dependency);
329
+ }
330
+ update(update) {
331
+ this.set(update(this.#value));
332
+ }
333
+ }
334
+ /**
335
+ * A cached derived value. Invalidations stay lazy unless a live effect consumes the value; in that
336
+ * case the computed refreshes after the whole upstream change has been marked dirty, so equality
337
+ * can stop downstream work without evaluating abandoned branches.
338
+ */
339
+ export class ReactiveComputed {
340
+ #dependency;
341
+ #compute;
342
+ #effect;
343
+ #value;
344
+ #initialized = false;
345
+ #dirty = true;
346
+ #evaluating = false;
347
+ #changed = false;
348
+ constructor(scheduler, compute, dependency = { first: undefined, last: undefined }) {
349
+ this.#dependency = dependency;
350
+ this.#compute = compute;
351
+ this.#effect = new ReactiveEffect(scheduler, () => this.#evaluate(), 0, this);
352
+ }
353
+ get() {
354
+ if (this.#effect.paused || this.#effect.stopped)
355
+ return this.#readDetached();
356
+ this.#refresh();
357
+ if (activeEffect !== undefined)
358
+ activeEffect.track(this.#dependency);
359
+ return this.#value;
360
+ }
361
+ invalidate() {
362
+ if (this.#effect.stopped || this.#dirty)
363
+ return;
364
+ this.#dirty = true;
365
+ for (let subscription = this.#dependency.first; subscription !== undefined; subscription = subscription.nextSubscriber) {
366
+ if (subscription.effect.computed === undefined) {
367
+ this.#effect.scheduler.enqueue(this.#effect);
368
+ return;
369
+ }
370
+ }
371
+ trigger(this.#dependency);
372
+ }
373
+ refresh() {
374
+ this.#refresh();
375
+ }
376
+ pause() {
377
+ if (this.#effect.stopped || this.#effect.paused)
378
+ return;
379
+ this.#dirty = true;
380
+ this.#effect.pause();
381
+ }
382
+ resume() {
383
+ if (this.#effect.stopped || !this.#effect.paused)
384
+ return;
385
+ this.#effect.paused = false;
386
+ }
387
+ stop() {
388
+ this.#effect.stop();
389
+ }
390
+ #refresh() {
391
+ if (this.#evaluating)
392
+ fail("HR006", "A reactive computed value depends on itself.");
393
+ if (!this.#dirty || this.#effect.stopped || this.#effect.paused)
394
+ return;
395
+ const initialized = this.#initialized;
396
+ this.#effect.execute();
397
+ if (initialized && this.#changed) {
398
+ trigger(this.#dependency, activeEffect?.computed === undefined ? undefined : activeEffect);
399
+ }
400
+ }
401
+ #readDetached() {
402
+ if (this.#evaluating)
403
+ fail("HR006", "A reactive computed value depends on itself.");
404
+ const previous = activeEffect;
405
+ this.#evaluating = true;
406
+ activeEffect = undefined;
407
+ try {
408
+ return this.#compute();
409
+ }
410
+ finally {
411
+ activeEffect = previous;
412
+ this.#evaluating = false;
413
+ }
414
+ }
415
+ #evaluate() {
416
+ this.#evaluating = true;
417
+ this.#dirty = false;
418
+ try {
419
+ const value = this.#compute();
420
+ this.#changed = !this.#initialized || !Object.is(this.#value, value);
421
+ this.#value = value;
422
+ this.#initialized = true;
423
+ }
424
+ catch (error) {
425
+ this.#dirty = true;
426
+ throw error;
427
+ }
428
+ finally {
429
+ this.#evaluating = false;
430
+ }
431
+ }
432
+ }
433
+ function trigger(dependency, skip) {
434
+ const first = dependency?.first;
435
+ if (first === undefined)
436
+ return;
437
+ const multiple = first !== dependency.last;
438
+ // A singleton computed's generic schedule path can only invalidate this same owner.
439
+ if (!multiple && first.effect.computed !== undefined) {
440
+ if (first.effect !== skip)
441
+ first.effect.computed.invalidate();
442
+ return;
443
+ }
444
+ if (first.effect.computed === undefined) {
445
+ if (skip === undefined && multiple && first.effect.scheduler.enqueueDependency(dependency))
446
+ return;
447
+ for (let subscription = first; subscription !== undefined;) {
448
+ const next = subscription.nextSubscriber;
449
+ if (subscription.effect !== skip)
450
+ subscription.effect.schedule();
451
+ subscription = next;
452
+ }
453
+ return;
454
+ }
455
+ for (let subscription = first; subscription !== undefined;) {
456
+ const next = subscription.nextSubscriber;
457
+ if (subscription.effect !== skip)
458
+ subscription.effect.schedule();
459
+ subscription = next;
460
+ }
461
+ }
462
+ export function createSignal(initialValue) {
463
+ return new ReactiveSignal(initialValue);
464
+ }
465
+ export function createComputed(scheduler, compute) {
466
+ return new ReactiveComputed(scheduler, compute);
467
+ }
468
+ export function createEffect(scheduler, run, priority = 1, active = true) {
469
+ const effect = new ReactiveEffect(scheduler, run, priority);
470
+ if (active)
471
+ effect.execute();
472
+ else
473
+ effect.paused = true;
474
+ return effect;
475
+ }
476
+ /** A scope layer whose root reads and nested object/array paths are dependency tracked. */
477
+ export class ReactiveScope {
478
+ scheduler;
479
+ parent;
480
+ #cells = new Map();
481
+ #cachedName;
482
+ #cachedCell;
483
+ constructor(values = [], scheduler = new ReactiveScheduler(), parent) {
484
+ this.scheduler = scheduler;
485
+ this.parent = parent;
486
+ for (const [name, value] of values)
487
+ this.set(name, value);
488
+ }
489
+ has(name) {
490
+ return this.#local(name) !== undefined || this.parent?.has(name) === true;
491
+ }
492
+ get(name) {
493
+ const cell = this.#local(name);
494
+ if (cell === undefined)
495
+ return this.parent?.get(name);
496
+ if (activeEffect !== undefined)
497
+ activeEffect.track(cell);
498
+ return cell.value;
499
+ }
500
+ set(name, value) {
501
+ const wrapped = this.#wrap(value);
502
+ let cell = this.#local(name);
503
+ if (cell === undefined) {
504
+ cell = { value: wrapped, first: undefined, last: undefined };
505
+ this.#cells.set(name, cell);
506
+ this.#cachedCell = cell;
507
+ return;
508
+ }
509
+ if (Object.is(cell.value, wrapped))
510
+ return;
511
+ cell.value = wrapped;
512
+ trigger(cell);
513
+ }
514
+ /** Defines a named derived scope value without evaluating it until a consumer reads it. */
515
+ defineComputed(name, compute) {
516
+ let cell = this.#local(name);
517
+ if (cell === undefined) {
518
+ cell = { value: null, first: undefined, last: undefined };
519
+ this.#cells.set(name, cell);
520
+ this.#cachedCell = cell;
521
+ }
522
+ const computed = new ReactiveComputed(this.scheduler, () => this.#wrap(compute()), cell);
523
+ cell.computed = computed;
524
+ // Most scopes contain only writable values. Install the extra computed lookup only on scopes
525
+ // that need it so ordinary state reads retain the minimal hot path.
526
+ if (!Object.hasOwn(this, "get"))
527
+ this.get = this.#getWithComputed;
528
+ return computed;
529
+ }
530
+ fork(values = []) {
531
+ return new ReactiveScope(values, this.scheduler, this);
532
+ }
533
+ #local(name) {
534
+ if (name !== this.#cachedName) {
535
+ this.#cachedName = name;
536
+ this.#cachedCell = this.#cells.get(name);
537
+ }
538
+ return this.#cachedCell;
539
+ }
540
+ #getWithComputed(name) {
541
+ const cell = this.#local(name);
542
+ if (cell === undefined)
543
+ return this.parent?.get(name);
544
+ if (cell.computed !== undefined)
545
+ return cell.computed.get();
546
+ if (activeEffect !== undefined)
547
+ activeEffect.track(cell);
548
+ return cell.value;
549
+ }
550
+ #wrap(value) {
551
+ if (value === null || typeof value !== "object")
552
+ return value;
553
+ const cached = proxyCache.get(value);
554
+ if (cached !== undefined)
555
+ return cached;
556
+ const proxy = new Proxy(value, {
557
+ get: (target, key, receiver) => {
558
+ if (activeEffect !== undefined) {
559
+ let properties = objectSubscribers.get(target);
560
+ if (properties === undefined) {
561
+ properties = new Map();
562
+ objectSubscribers.set(target, properties);
563
+ }
564
+ let subscribers = properties.get(key);
565
+ if (subscribers === undefined) {
566
+ subscribers = { first: undefined, last: undefined };
567
+ properties.set(key, subscribers);
568
+ }
569
+ activeEffect.track(subscribers);
570
+ }
571
+ return this.#wrap(Reflect.get(target, key, receiver));
572
+ },
573
+ set: (target, key, next, receiver) => {
574
+ const previous = Reflect.get(target, key, receiver);
575
+ const wrapped = this.#wrap(next);
576
+ const result = Reflect.set(target, key, wrapped, receiver);
577
+ if (!Object.is(previous, wrapped))
578
+ trigger(objectSubscribers.get(target)?.get(key));
579
+ return result;
580
+ },
581
+ deleteProperty: (target, key) => {
582
+ const had = Reflect.has(target, key);
583
+ const result = Reflect.deleteProperty(target, key);
584
+ if (had)
585
+ trigger(objectSubscribers.get(target)?.get(key));
586
+ return result;
587
+ },
588
+ });
589
+ proxyCache.set(value, proxy);
590
+ proxyCache.set(proxy, proxy);
591
+ return proxy;
592
+ }
593
+ }
594
+ //# sourceMappingURL=reactivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactivity.js","sourceRoot":"","sources":["../src/reactivity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ComponentGraph, ComponentGraphNode } from "./graph.js";
2
+ export interface ComponentRegistryEntry {
3
+ readonly node: ComponentGraphNode;
4
+ readonly loadController?: () => Promise<unknown>;
5
+ }
6
+ /** A deterministic, customElements-shaped registry for validated graph entries. */
7
+ export declare class ComponentRegistry {
8
+ #private;
9
+ define(tag: string, entry: ComponentRegistryEntry): void;
10
+ get(tag: string): ComponentRegistryEntry | undefined;
11
+ whenDefined(tag: string): Promise<void>;
12
+ addGraph(graph: ComponentGraph, controllerLoader?: (node: ComponentGraphNode) => Promise<unknown>): void;
13
+ }
14
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD;AAED,mFAAmF;AACnF,qBAAa,iBAAiB;;IAI5B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,GAAG,IAAI,CAKvD;IAED,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAEnD;IAED,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtC;IAED,QAAQ,CACN,KAAK,EAAE,cAAc,EACrB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,GAChE,IAAI,CAUN;CACF"}
@@ -0,0 +1,39 @@
1
+ import { fail } from "./diagnostics.js";
2
+ /** A deterministic, customElements-shaped registry for validated graph entries. */
3
+ export class ComponentRegistry {
4
+ #entries = new Map();
5
+ #waiters = new Map();
6
+ define(tag, entry) {
7
+ if (this.#entries.has(tag))
8
+ fail("HR001", `More than one definition declares <${tag}>.`);
9
+ this.#entries.set(tag, Object.freeze(entry));
10
+ for (const resolve of this.#waiters.get(tag) ?? [])
11
+ resolve();
12
+ this.#waiters.delete(tag);
13
+ }
14
+ get(tag) {
15
+ return this.#entries.get(tag);
16
+ }
17
+ whenDefined(tag) {
18
+ if (this.#entries.has(tag))
19
+ return Promise.resolve();
20
+ return new Promise((resolve) => {
21
+ const waiters = this.#waiters.get(tag) ?? [];
22
+ waiters.push(resolve);
23
+ this.#waiters.set(tag, waiters);
24
+ });
25
+ }
26
+ addGraph(graph, controllerLoader) {
27
+ for (const node of graph.nodes.values()) {
28
+ if (node.shadowedByCustomElement)
29
+ continue;
30
+ this.define(node.definition.contract.tag, {
31
+ node,
32
+ ...(node.controller === undefined || controllerLoader === undefined
33
+ ? {}
34
+ : { loadController: () => controllerLoader(node) }),
35
+ });
36
+ }
37
+ }
38
+ }
39
+ //# sourceMappingURL=registry.js.map