@vobs/runtime 1.2.1 → 1.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 (74) hide show
  1. package/dist/async-boundary.cjs +73 -374
  2. package/dist/async-boundary.cjs.map +1 -1
  3. package/dist/async-boundary.js +44 -367
  4. package/dist/async-boundary.js.map +1 -1
  5. package/dist/bind.cjs +101 -234
  6. package/dist/bind.cjs.map +1 -1
  7. package/dist/bind.js +72 -227
  8. package/dist/bind.js.map +1 -1
  9. package/dist/boundary.cjs +67 -369
  10. package/dist/boundary.cjs.map +1 -1
  11. package/dist/boundary.js +42 -366
  12. package/dist/boundary.js.map +1 -1
  13. package/dist/debug.cjs +41 -12
  14. package/dist/debug.cjs.map +1 -1
  15. package/dist/debug.js +10 -3
  16. package/dist/debug.js.map +1 -1
  17. package/dist/dynamic.cjs +76 -378
  18. package/dist/dynamic.cjs.map +1 -1
  19. package/dist/dynamic.js +43 -367
  20. package/dist/dynamic.js.map +1 -1
  21. package/dist/error-boundary.cjs +77 -372
  22. package/dist/error-boundary.cjs.map +1 -1
  23. package/dist/error-boundary.d.cts +7 -3
  24. package/dist/error-boundary.d.ts +7 -3
  25. package/dist/error-boundary.js +48 -367
  26. package/dist/error-boundary.js.map +1 -1
  27. package/dist/error.cjs +35 -9
  28. package/dist/error.cjs.map +1 -1
  29. package/dist/error.js +7 -3
  30. package/dist/error.js.map +1 -1
  31. package/dist/fragment.cjs +44 -133
  32. package/dist/fragment.cjs.map +1 -1
  33. package/dist/fragment.js +19 -130
  34. package/dist/fragment.js.map +1 -1
  35. package/dist/hmr.cjs +61 -22
  36. package/dist/hmr.cjs.map +1 -1
  37. package/dist/hmr.d.cts +7 -1
  38. package/dist/hmr.d.ts +7 -1
  39. package/dist/hmr.js +19 -3
  40. package/dist/hmr.js.map +1 -1
  41. package/dist/index.cjs +230 -465
  42. package/dist/index.cjs.map +1 -1
  43. package/dist/index.d.cts +1 -1
  44. package/dist/index.d.ts +1 -1
  45. package/dist/index.js +128 -388
  46. package/dist/index.js.map +1 -1
  47. package/dist/ops.cjs +147 -244
  48. package/dist/ops.cjs.map +1 -1
  49. package/dist/ops.js +97 -216
  50. package/dist/ops.js.map +1 -1
  51. package/dist/profiler.cjs +69 -320
  52. package/dist/profiler.cjs.map +1 -1
  53. package/dist/profiler.js +40 -315
  54. package/dist/profiler.js.map +1 -1
  55. package/dist/ref.cjs +33 -131
  56. package/dist/ref.cjs.map +1 -1
  57. package/dist/ref.js +10 -130
  58. package/dist/ref.js.map +1 -1
  59. package/dist/renderer.cjs +18 -2
  60. package/dist/renderer.cjs.map +1 -1
  61. package/dist/renderer.js +0 -2
  62. package/dist/renderer.js.map +1 -1
  63. package/dist/template.cjs +29 -6
  64. package/dist/template.cjs.map +1 -1
  65. package/dist/template.js +4 -3
  66. package/dist/template.js.map +1 -1
  67. package/package.json +2 -2
  68. package/src/dynamic.test.ts +65 -1
  69. package/src/error-boundary.ts +13 -3
  70. package/src/hmr.test.ts +17 -0
  71. package/src/hmr.ts +14 -0
  72. package/src/index.ts +1 -0
  73. package/src/ops.ts +38 -3
  74. package/src/props.test.ts +32 -1
package/dist/index.cjs CHANGED
@@ -1,7 +1,86 @@
1
- 'use strict';
2
-
1
+ var __VOBS_CJS_FILE_URL = require("url").pathToFileURL(__filename).href;
2
+ "use strict";
3
3
  var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
7
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+
22
+ // packages/runtime/src/index.ts
23
+ var src_exports = {};
24
+ __export(src_exports, {
25
+ AsyncBoundary: () => AsyncBoundary,
26
+ ErrorBoundary: () => ErrorBoundary,
27
+ Profiler: () => Profiler,
28
+ VobsError: () => VobsError,
29
+ addEventListener: () => addEventListener,
30
+ bindAttribute: () => bindAttribute,
31
+ bindProperty: () => bindProperty,
32
+ bindText: () => bindText,
33
+ clear: () => clear,
34
+ cloneTemplate: () => cloneTemplate,
35
+ createBlock: () => createBlock,
36
+ createComment: () => createComment,
37
+ createComponent: () => createComponent,
38
+ createElement: () => createElement,
39
+ createFragment: () => createFragment,
40
+ createHmrStateStore: () => createHmrStateStore,
41
+ createTemplate: () => createTemplate,
42
+ createText: () => createText,
43
+ createVobsError: () => createVobsError,
44
+ describeDebugNode: () => describeDebugNode,
45
+ disposeHmrModule: () => disposeHmrModule,
46
+ disposeNodeOwner: () => disposeNodeOwner,
47
+ formatVobsError: () => formatVobsError,
48
+ getRenderer: () => getRenderer,
49
+ getRuntimeDebugContext: () => getRuntimeDebugContext,
50
+ getRuntimeDebugHooks: () => getRuntimeDebugHooks,
51
+ hmrStateRef: () => hmrStateRef,
52
+ insertAsyncBoundary: () => insertAsyncBoundary,
53
+ insertBefore: () => insertBefore,
54
+ insertBoundary: () => insertBoundary,
55
+ insertDynamic: () => insertDynamic,
56
+ insertDynamicValue: () => insertDynamicValue,
57
+ insertErrorBoundary: () => insertErrorBoundary,
58
+ insertList: () => insertList,
59
+ insertProfiler: () => insertProfiler,
60
+ invokeRuntimeDebug: () => invokeRuntimeDebug,
61
+ isVobsError: () => isVobsError,
62
+ isVobsFragment: () => isVobsFragment,
63
+ markHmrInstanceMounted: () => markHmrInstanceMounted,
64
+ normalizeDynamicChild: () => normalizeDynamicChild,
65
+ normalizeVobsError: () => normalizeVobsError,
66
+ pushRuntimeDebugContext: () => pushRuntimeDebugContext,
67
+ ref: () => ref,
68
+ registerHmrInstance: () => registerHmrInstance,
69
+ removeChild: () => removeChild,
70
+ removeEventListener: () => removeEventListener,
71
+ resolveComponent: () => resolveComponent,
72
+ runWithRuntimeDebugContext: () => runWithRuntimeDebugContext,
73
+ setAttribute: () => setAttribute,
74
+ setProperty: () => setProperty,
75
+ setRef: () => setRef,
76
+ setRenderer: () => setRenderer,
77
+ setRuntimeDebugHooks: () => setRuntimeDebugHooks,
78
+ setStaticProps: () => setStaticProps,
79
+ setTextContent: () => setTextContent,
80
+ spreadProps: () => spreadProps,
81
+ updateHmrModule: () => updateHmrModule
82
+ });
83
+ module.exports = __toCommonJS(src_exports);
5
84
 
6
85
  // packages/runtime/src/debug.ts
7
86
  var activeRuntimeDebugHooks = null;
@@ -82,373 +161,19 @@ function describeDebugNode(node) {
82
161
  }
83
162
  __name(describeDebugNode, "describeDebugNode");
84
163
 
85
- // packages/reactivity/src/debug.ts
86
- var activeDebugHooks = null;
87
- var signalNames = /* @__PURE__ */ new WeakMap();
88
- function hasDebugHooks() {
89
- return activeDebugHooks !== null;
90
- }
91
- __name(hasDebugHooks, "hasDebugHooks");
92
- function setSignalDebugName(signal, name) {
93
- signalNames.set(signal, name);
94
- invokeDebug("signalNamed", signal, name);
95
- }
96
- __name(setSignalDebugName, "setSignalDebugName");
97
- function invokeDebug(name, ...args) {
98
- return;
99
- }
100
- __name(invokeDebug, "invokeDebug");
101
-
102
- // packages/reactivity/src/owner.ts
103
- var currentOwner = null;
104
- var nextOwnerId = 1;
105
- var ownerNames = /* @__PURE__ */ new WeakMap();
106
- function createOwner() {
107
- const parent = currentOwner;
108
- let disposed = parent?.disposed ?? false;
109
- const children = [];
110
- const cleanups = [];
111
- const errorHandlers = /* @__PURE__ */ new Set();
112
- const owner = {
113
- id: `owner-${nextOwnerId++}`,
114
- parent,
115
- children,
116
- depth: (parent?.depth ?? -1) + 1,
117
- get disposed() {
118
- return disposed;
119
- },
120
- run(fn) {
121
- if (disposed) throw new Error("Vobs: \u5DF2\u9500\u6BC1\u7684 Owner \u4E0D\u80FD\u7EE7\u7EED\u8FD0\u884C");
122
- const previous = currentOwner;
123
- currentOwner = owner;
124
- try {
125
- return fn();
126
- } finally {
127
- currentOwner = previous;
128
- }
129
- },
130
- addCleanup(cleanup) {
131
- if (disposed) {
132
- cleanup();
133
- return;
134
- }
135
- cleanups.push(cleanup);
136
- },
137
- onDispose(cleanup) {
138
- owner.addCleanup(cleanup);
139
- },
140
- onError(handler) {
141
- errorHandlers.add(handler);
142
- const remove = /* @__PURE__ */ __name(() => errorHandlers.delete(handler), "remove");
143
- owner.addCleanup(remove);
144
- return remove;
145
- },
146
- handleError(error) {
147
- for (const handler of [...errorHandlers].reverse()) {
148
- try {
149
- handler(error);
150
- return true;
151
- } catch (handlerError) {
152
- return parent?.handleError(handlerError) ?? false;
153
- }
154
- }
155
- return parent?.handleError(error) ?? false;
156
- },
157
- dispose() {
158
- if (disposed) return;
159
- disposed = true;
160
- for (const child of [...children]) child.dispose();
161
- children.length = 0;
162
- let firstError;
163
- for (let index = cleanups.length - 1; index >= 0; index--) {
164
- try {
165
- cleanups[index]();
166
- } catch (error) {
167
- firstError ?? (firstError = error);
168
- }
169
- }
170
- cleanups.length = 0;
171
- if (parent) {
172
- const index = parent.children.indexOf(owner);
173
- if (index >= 0) parent.children.splice(index, 1);
174
- }
175
- if (firstError) throw firstError;
176
- }
177
- };
178
- if (parent && !parent.disposed) parent.children.push(owner);
179
- return owner;
180
- }
181
- __name(createOwner, "createOwner");
182
- function setOwnerDebugName(owner, name) {
183
- ownerNames.set(owner, name);
184
- }
185
- __name(setOwnerDebugName, "setOwnerDebugName");
186
- function getCurrentOwner() {
187
- return currentOwner;
188
- }
189
- __name(getCurrentOwner, "getCurrentOwner");
190
-
191
- // packages/reactivity/src/signal.ts
192
- var currentSubscriber = null;
193
- function getCurrentSubscriber() {
194
- return currentSubscriber;
195
- }
196
- __name(getCurrentSubscriber, "getCurrentSubscriber");
197
- function setCurrentSubscriber(subscriber) {
198
- currentSubscriber = subscriber;
199
- }
200
- __name(setCurrentSubscriber, "setCurrentSubscriber");
201
- function trackDependency(dependency) {
202
- if (!currentSubscriber || currentSubscriber.disposed) return;
203
- !currentSubscriber.dependencies.has(dependency);
204
- currentSubscriber.dependencies.add(dependency);
205
- }
206
- __name(trackDependency, "trackDependency");
207
- function state(initialValue, debugName) {
208
- let value = initialValue;
209
- let disposed = false;
210
- const subscribers = /* @__PURE__ */ new Set();
211
- const signalInstance = {
212
- get value() {
213
- const subscriber = getCurrentSubscriber();
214
- if (subscriber && !subscriber.disposed) {
215
- subscribers.add(subscriber);
216
- trackDependency(signalInstance);
217
- }
218
- return value;
219
- },
220
- set value(nextValue) {
221
- if (disposed || Object.is(value, nextValue)) return;
222
- value = nextValue;
223
- for (const subscriber of [...subscribers]) subscriber.notify();
224
- },
225
- unsubscribe(subscriber) {
226
- subscribers.delete(subscriber);
227
- },
228
- // 与 `.value =` 赋值同一条路径:判等短路、debug hook、notify 全部一致。
229
- // 以闭包实现,可安全地作为回调直接传递(无 this 绑定问题)。
230
- set(next) {
231
- signalInstance.value = next;
232
- },
233
- dispose() {
234
- if (disposed) return;
235
- disposed = true;
236
- subscribers.clear();
237
- }
238
- };
239
- const owner = getCurrentOwner();
240
- owner?.addCleanup(signalInstance.dispose);
241
- if (debugName?.trim()) setSignalDebugName(signalInstance, debugName.trim());
242
- return signalInstance;
243
- }
244
- __name(state, "state");
245
-
246
- // packages/reactivity/src/scheduler.ts
247
- var _Scheduler = class _Scheduler {
248
- constructor() {
249
- this.dirtyEffects = /* @__PURE__ */ new Set();
250
- this.lowPriorityEffects = /* @__PURE__ */ new Set();
251
- // flush 不可重入(flushing 标志保证),缓冲数组可在轮次间安全复用,避免每轮分配。
252
- this.normalBuffer = [];
253
- this.lowBuffer = [];
254
- this.flushing = false;
255
- this.scheduled = false;
256
- this.batchDepth = 0;
257
- }
258
- schedule(effect2) {
259
- if (effect2.disposed) return;
260
- this.dirtyEffects.add(effect2);
261
- this.lowPriorityEffects.delete(effect2);
262
- this.ensureScheduled();
263
- }
264
- /** Queue an effect behind normal updates while preserving deterministic order. */
265
- scheduleLow(effect2) {
266
- if (effect2.disposed) return;
267
- if (!this.dirtyEffects.has(effect2)) this.lowPriorityEffects.add(effect2);
268
- this.ensureScheduled();
269
- }
270
- ensureScheduled() {
271
- if (this.batchDepth === 0 && !this.flushing && !this.scheduled) {
272
- this.scheduled = true;
273
- queueMicrotask(() => {
274
- this.scheduled = false;
275
- this.flush();
276
- });
277
- }
278
- }
279
- remove(effect2) {
280
- this.dirtyEffects.delete(effect2);
281
- this.lowPriorityEffects.delete(effect2);
282
- }
283
- batch(fn) {
284
- this.batchDepth++;
285
- try {
286
- return fn();
287
- } finally {
288
- this.batchDepth--;
289
- if (this.batchDepth === 0) this.flush();
290
- }
291
- }
292
- flush() {
293
- if (this.flushing || this.batchDepth > 0) return;
294
- this.flushing = true;
295
- let rounds = 0;
296
- let firstError;
297
- let hasError = false;
298
- try {
299
- while (this.dirtyEffects.size > 0 || this.lowPriorityEffects.size > 0) {
300
- if (++rounds > 100) {
301
- this.dirtyEffects.clear();
302
- this.lowPriorityEffects.clear();
303
- throw new Error("Vobs: \u54CD\u5E94\u5F0F\u66F4\u65B0\u8D85\u8FC7 100 \u8F6E\uFF0C\u53EF\u80FD\u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56");
304
- }
305
- this.collectRunnable(this.dirtyEffects, this.normalBuffer);
306
- this.collectRunnable(this.lowPriorityEffects, this.lowBuffer);
307
- sortEffects(this.normalBuffer);
308
- sortEffects(this.lowBuffer);
309
- for (const effect2 of this.normalBuffer) {
310
- try {
311
- effect2.run();
312
- } catch (error) {
313
- if (!hasError) {
314
- firstError = error;
315
- hasError = true;
316
- }
317
- }
318
- }
319
- for (const effect2 of this.lowBuffer) {
320
- try {
321
- effect2.run();
322
- } catch (error) {
323
- if (!hasError) {
324
- firstError = error;
325
- hasError = true;
326
- }
327
- }
328
- }
329
- this.normalBuffer.length = 0;
330
- this.lowBuffer.length = 0;
331
- }
332
- } finally {
333
- this.normalBuffer.length = 0;
334
- this.lowBuffer.length = 0;
335
- this.flushing = false;
336
- }
337
- if (hasError) throw firstError;
338
- }
339
- /** 收集未 disposed 的 effect 并清空源集合;run() 期间新调度的 effect 留给下一轮。 */
340
- collectRunnable(source, target) {
341
- for (const effect2 of source) {
342
- if (!effect2.disposed) target.push(effect2);
343
- }
344
- source.clear();
345
- }
346
- };
347
- __name(_Scheduler, "Scheduler");
348
- var Scheduler = _Scheduler;
349
- function sortEffects(effects) {
350
- if (effects.length > 1) {
351
- effects.sort((a, b) => b.depth - a.depth || a.order - b.order);
352
- }
353
- }
354
- __name(sortEffects, "sortEffects");
355
- var scheduler = new Scheduler();
164
+ // packages/runtime/src/fragment.ts
165
+ var import_reactivity3 = require("@vobs/reactivity");
356
166
 
357
- // packages/reactivity/src/effect.ts
358
- var nextEffectOrder = 1;
359
- function cleanupDependencies(subscriber) {
360
- for (const dependency of subscriber.dependencies) {
361
- dependency.unsubscribe(subscriber);
362
- }
363
- subscriber.dependencies.clear();
364
- }
365
- __name(cleanupDependencies, "cleanupDependencies");
366
- function effect(callback) {
367
- const owner = getCurrentOwner();
368
- let cleanup;
369
- let dirty = true;
370
- let disposed = false;
371
- const eff = {
372
- order: nextEffectOrder++,
373
- depth: owner?.depth ?? 0,
374
- dependencies: /* @__PURE__ */ new Set(),
375
- get disposed() {
376
- return disposed;
377
- },
378
- notify() {
379
- if (disposed || dirty) return;
380
- dirty = true;
381
- scheduler.schedule(eff);
382
- },
383
- run() {
384
- if (disposed || !dirty) return;
385
- dirty = false;
386
- const previousCleanup = cleanup;
387
- cleanup = void 0;
388
- let cleanupError;
389
- if (previousCleanup) {
390
- try {
391
- previousCleanup();
392
- } catch (error) {
393
- const handled2 = owner?.handleError(error) ?? false;
394
- if (!handled2) cleanupError = error;
395
- }
396
- }
397
- cleanupDependencies(eff);
398
- const previous = getCurrentSubscriber();
399
- setCurrentSubscriber(eff);
400
- let thrown;
401
- let handled = false;
402
- try {
403
- const result = owner ? owner.run(callback) : callback();
404
- cleanup = typeof result === "function" ? result : void 0;
405
- } catch (error) {
406
- thrown = error;
407
- handled = owner?.handleError(error) ?? false;
408
- if (!handled) throw error;
409
- } finally {
410
- setCurrentSubscriber(previous);
411
- }
412
- if (cleanupError && !thrown) throw cleanupError;
413
- },
414
- scheduleLow() {
415
- if (disposed || dirty) return;
416
- dirty = true;
417
- scheduler.scheduleLow(eff);
418
- },
419
- dispose() {
420
- if (disposed) return;
421
- disposed = true;
422
- dirty = false;
423
- scheduler.remove(eff);
424
- const previousCleanup = cleanup;
425
- cleanup = void 0;
426
- let cleanupError;
427
- if (previousCleanup) {
428
- try {
429
- previousCleanup();
430
- } catch (error) {
431
- const handled = owner?.handleError(error) ?? false;
432
- if (!handled) cleanupError = error;
433
- }
434
- }
435
- cleanupDependencies(eff);
436
- if (cleanupError) throw cleanupError;
437
- }
438
- };
439
- owner?.addCleanup(eff.dispose);
440
- eff.run();
441
- return eff;
442
- }
443
- __name(effect, "effect");
167
+ // packages/runtime/src/ops.ts
168
+ var import_reactivity2 = require("@vobs/reactivity");
444
169
 
445
170
  // packages/runtime/src/hmr.ts
446
171
  var globalTarget = globalThis;
447
172
  var hmrGlobal = globalTarget.__VOBS_HMR__ ?? { modules: /* @__PURE__ */ new Map() };
448
173
  globalTarget.__VOBS_HMR__ = hmrGlobal;
449
174
  function resolveComponent(component, moduleId, exportName) {
450
- const module = getModule(moduleId);
451
- const existing = module.components.get(exportName);
175
+ const module2 = getModule(moduleId);
176
+ const existing = module2.components.get(exportName);
452
177
  if (existing) return existing;
453
178
  const proxy = /* @__PURE__ */ __name(((props) => {
454
179
  const current = proxy.current;
@@ -459,15 +184,15 @@ function resolveComponent(component, moduleId, exportName) {
459
184
  displayName: { configurable: true, value: component.name || exportName },
460
185
  hmrKey: { configurable: false, value: `${moduleId}:${exportName}` }
461
186
  });
462
- module.components.set(exportName, proxy);
187
+ module2.components.set(exportName, proxy);
463
188
  return proxy;
464
189
  }
465
190
  __name(resolveComponent, "resolveComponent");
466
191
  function updateHmrModule(_moduleId, nextModule) {
467
192
  const modules = [...hmrGlobal.modules.values()];
468
- for (const module of modules) {
193
+ for (const module2 of modules) {
469
194
  let changed = false;
470
- for (const [name, proxy] of module.components) {
195
+ for (const [name, proxy] of module2.components) {
471
196
  const next = nextModule[name];
472
197
  if (typeof next !== "function") continue;
473
198
  const hmrProxy = proxy;
@@ -476,7 +201,7 @@ function updateHmrModule(_moduleId, nextModule) {
476
201
  changed = true;
477
202
  }
478
203
  if (!changed) continue;
479
- for (const instance of module.instances) {
204
+ for (const instance of module2.instances) {
480
205
  try {
481
206
  instance.refresh();
482
207
  } catch {
@@ -489,25 +214,34 @@ function disposeHmrModule(_moduleId) {
489
214
  }
490
215
  __name(disposeHmrModule, "disposeHmrModule");
491
216
  function createHmrStateStore(moduleId) {
492
- const state2 = getModule(moduleId).state;
217
+ const state4 = getModule(moduleId).state;
493
218
  return {
494
219
  get(key, initial) {
495
- if (!state2.has(key)) state2.set(key, typeof initial === "function" ? initial() : initial);
496
- return state2.get(key);
220
+ if (!state4.has(key)) state4.set(key, typeof initial === "function" ? initial() : initial);
221
+ return state4.get(key);
497
222
  },
498
223
  set(key, value) {
499
- state2.set(key, value);
224
+ state4.set(key, value);
500
225
  },
501
- has: /* @__PURE__ */ __name((key) => state2.has(key), "has"),
226
+ has: /* @__PURE__ */ __name((key) => state4.has(key), "has"),
502
227
  delete: /* @__PURE__ */ __name((key) => {
503
- state2.delete(key);
228
+ state4.delete(key);
504
229
  }, "delete"),
505
230
  clear: /* @__PURE__ */ __name(() => {
506
- state2.clear();
231
+ state4.clear();
507
232
  }, "clear")
508
233
  };
509
234
  }
510
235
  __name(createHmrStateStore, "createHmrStateStore");
236
+ function hmrStateRef(moduleId, key, create) {
237
+ const state4 = getModule(moduleId).state;
238
+ const registryKey = `#state:${key}`;
239
+ if (state4.has(registryKey)) return state4.get(registryKey);
240
+ const value = create();
241
+ state4.set(registryKey, value);
242
+ return value;
243
+ }
244
+ __name(hmrStateRef, "hmrStateRef");
511
245
  function registerHmrInstance(moduleId, instance) {
512
246
  const instances = getModule(moduleId).instances;
513
247
  instances.add(instance);
@@ -520,12 +254,12 @@ function markHmrInstanceMounted(node, parent) {
520
254
  }
521
255
  __name(markHmrInstanceMounted, "markHmrInstanceMounted");
522
256
  function getModule(moduleId) {
523
- let module = hmrGlobal.modules.get(moduleId);
524
- if (!module) {
525
- module = { components: /* @__PURE__ */ new Map(), state: /* @__PURE__ */ new Map(), instances: /* @__PURE__ */ new Set() };
526
- hmrGlobal.modules.set(moduleId, module);
257
+ let module2 = hmrGlobal.modules.get(moduleId);
258
+ if (!module2) {
259
+ module2 = { components: /* @__PURE__ */ new Map(), state: /* @__PURE__ */ new Map(), instances: /* @__PURE__ */ new Set() };
260
+ hmrGlobal.modules.set(moduleId, module2);
527
261
  }
528
- return module;
262
+ return module2;
529
263
  }
530
264
  __name(getModule, "getModule");
531
265
  var hmrInstances = /* @__PURE__ */ new WeakMap();
@@ -535,6 +269,7 @@ function associateHmrInstance(node, instance) {
535
269
  __name(associateHmrInstance, "associateHmrInstance");
536
270
 
537
271
  // packages/runtime/src/ref.ts
272
+ var import_reactivity = require("@vobs/reactivity");
538
273
  function ref(initialValue = null) {
539
274
  return { current: initialValue };
540
275
  }
@@ -542,7 +277,7 @@ __name(ref, "ref");
542
277
  function setRef(node, target) {
543
278
  if (!isRefTarget(target)) return;
544
279
  if (isSSRNode(node)) return;
545
- const owner = getCurrentOwner();
280
+ const owner = (0, import_reactivity.getCurrentOwner)();
546
281
  assignRef(target, node);
547
282
  owner?.onDispose(() => {
548
283
  if (isObjectRef(target) && target.current !== node) return;
@@ -647,6 +382,9 @@ __name(setTextContent, "setTextContent");
647
382
  function setProperty(node, key, value) {
648
383
  const previousValue = getRuntimeDebugHooks() ? readDebugValue(() => Reflect.get(node, key)) : void 0;
649
384
  getRenderer().setProperty(node, key, value);
385
+ if (key === "value" && node.tagName === "SELECT") {
386
+ scheduleSelectValueSync(node, value);
387
+ }
650
388
  if (getRuntimeDebugHooks()) {
651
389
  invokeRuntimeDebug("domMutation", {
652
390
  operation: "property",
@@ -658,6 +396,21 @@ function setProperty(node, key, value) {
658
396
  }
659
397
  }
660
398
  __name(setProperty, "setProperty");
399
+ var pendingSelectValues = /* @__PURE__ */ new WeakMap();
400
+ var selectSyncScheduled = /* @__PURE__ */ new WeakSet();
401
+ function scheduleSelectValueSync(node, value) {
402
+ pendingSelectValues.set(node, value);
403
+ if (selectSyncScheduled.has(node)) return;
404
+ selectSyncScheduled.add(node);
405
+ queueMicrotask(() => {
406
+ selectSyncScheduled.delete(node);
407
+ if (!pendingSelectValues.has(node)) return;
408
+ const pending = pendingSelectValues.get(node);
409
+ pendingSelectValues.delete(node);
410
+ getRenderer().setProperty(node, "value", pending);
411
+ });
412
+ }
413
+ __name(scheduleSelectValueSync, "scheduleSelectValueSync");
661
414
  function setAttribute(node, key, value) {
662
415
  const previousValue = getRuntimeDebugHooks() ? readDebugValue(() => typeof node.getAttribute === "function" ? node.getAttribute(key) : void 0) : void 0;
663
416
  getRenderer().setAttribute(node, key, value);
@@ -710,7 +463,7 @@ function formatStyle(value) {
710
463
  __name(formatStyle, "formatStyle");
711
464
  function addEventListener(node, event, handler) {
712
465
  const renderer = getRenderer();
713
- const owner = getCurrentOwner();
466
+ const owner = (0, import_reactivity2.getCurrentOwner)();
714
467
  let bindings = eventBindings.get(node);
715
468
  if (!bindings) {
716
469
  bindings = /* @__PURE__ */ new Map();
@@ -720,6 +473,7 @@ function addEventListener(node, event, handler) {
720
473
  if (previous && previous.original === handler && previous.owner === owner) return;
721
474
  if (previous) renderer.removeEventListener(node, event, previous.handler);
722
475
  const listener = owner ? (reason) => {
476
+ if (owner.disposed) return;
723
477
  try {
724
478
  owner.run(() => handler(reason));
725
479
  } catch (error) {
@@ -756,9 +510,9 @@ function clear(container) {
756
510
  }
757
511
  __name(clear, "clear");
758
512
  function createComponent(component, props, source) {
759
- const owner = createOwner();
513
+ const owner = (0, import_reactivity2.createOwner)();
760
514
  const componentName = component.displayName || component.name || "anonymous";
761
- setOwnerDebugName(owner, source ? `${componentName} (${source.file}:${source.line}:${source.column})` : componentName);
515
+ (0, import_reactivity2.setOwnerDebugName)(owner, source ? `${componentName} (${source.file}:${source.line}:${source.column})` : componentName);
762
516
  owner.onError((reason) => {
763
517
  attachSourceLocation(reason, source);
764
518
  attachComponentContext(reason, componentName, owner.id);
@@ -766,7 +520,7 @@ function createComponent(component, props, source) {
766
520
  });
767
521
  let node;
768
522
  try {
769
- node = owner.run(() => component(props));
523
+ node = owner.run(() => (0, import_reactivity2.untrack)(() => component(props)));
770
524
  } catch (error) {
771
525
  owner.dispose();
772
526
  attachSourceLocation(error, source);
@@ -781,7 +535,7 @@ function createComponent(component, props, source) {
781
535
  parent: null,
782
536
  refresh() {
783
537
  const previous = instance.node;
784
- const next = owner.run(() => component(props));
538
+ const next = owner.run(() => (0, import_reactivity2.untrack)(() => component(props)));
785
539
  if (instance.parent && !isVobsFragment(previous) && !isVobsFragment(next)) {
786
540
  getRenderer().insertBefore(instance.parent, next, previous);
787
541
  getRenderer().removeChild(instance.parent, previous);
@@ -827,8 +581,8 @@ function attachComponentContext(reason, component, ownerId) {
827
581
  }
828
582
  __name(attachComponentContext, "attachComponentContext");
829
583
  function createBlock(factory) {
830
- const owner = createOwner();
831
- setOwnerDebugName(owner, "dynamic");
584
+ const owner = (0, import_reactivity2.createOwner)();
585
+ (0, import_reactivity2.setOwnerDebugName)(owner, "dynamic");
832
586
  let node;
833
587
  try {
834
588
  node = owner.run(factory);
@@ -862,7 +616,7 @@ function createFragment(factory) {
862
616
  const end = createComment("vobs:fragment:end");
863
617
  let parent = null;
864
618
  let initialized = false;
865
- const owner = getCurrentOwner();
619
+ const owner = (0, import_reactivity3.getCurrentOwner)();
866
620
  const fragment = {
867
621
  kind: "vobs-fragment",
868
622
  start,
@@ -924,37 +678,39 @@ function moveRange(parent, start, end, anchor) {
924
678
  __name(moveRange, "moveRange");
925
679
 
926
680
  // packages/runtime/src/bind.ts
681
+ var import_reactivity4 = require("@vobs/reactivity");
927
682
  function readSource(source) {
928
683
  return typeof source === "function" ? source() : source.value;
929
684
  }
930
685
  __name(readSource, "readSource");
931
686
  function bindText(node, source) {
932
- effect(() => {
687
+ (0, import_reactivity4.effect)(() => {
933
688
  const value = readSource(source);
934
689
  setTextContent(node, value === null || value === void 0 || typeof value === "boolean" ? "" : String(value));
935
690
  });
936
691
  }
937
692
  __name(bindText, "bindText");
938
693
  function bindAttribute(node, key, source) {
939
- effect(() => {
694
+ (0, import_reactivity4.effect)(() => {
940
695
  const value = readSource(source);
941
696
  setAttribute(node, key, key === "style" && value && typeof value === "object" && !Array.isArray(value) ? Object.entries(value).filter(([, entry]) => entry !== null && entry !== void 0 && entry !== false).map(([name, entry]) => `${name.replace(/[A-Z]/gu, (match) => `-${match.toLowerCase()}`)}:${String(entry)}`).join(";") : String(value));
942
697
  });
943
698
  }
944
699
  __name(bindAttribute, "bindAttribute");
945
700
  function bindProperty(node, key, source) {
946
- effect(() => {
701
+ (0, import_reactivity4.effect)(() => {
947
702
  setProperty(node, key, readSource(source));
948
703
  });
949
704
  }
950
705
  __name(bindProperty, "bindProperty");
951
706
 
952
707
  // packages/runtime/src/dynamic.ts
708
+ var import_reactivity5 = require("@vobs/reactivity");
953
709
  function insertDynamic(parent, anchor, factory) {
954
710
  const marker = createComment("vobs:dynamic");
955
711
  insertBefore(parent, marker, anchor);
956
712
  let current = null;
957
- effect(() => {
713
+ (0, import_reactivity5.effect)(() => {
958
714
  const next = createBlock(factory);
959
715
  if (next === current) return;
960
716
  if (current) removeChild(parent, current);
@@ -968,8 +724,8 @@ function insertDynamicValue(parent, anchor, factory) {
968
724
  insertBefore(parent, marker, anchor);
969
725
  let current = null;
970
726
  let scope = null;
971
- effect(() => {
972
- const nextScope = createOwner();
727
+ (0, import_reactivity5.effect)(() => {
728
+ const nextScope = (0, import_reactivity5.createOwner)();
973
729
  const next = nextScope.run(() => normalizeDynamicChild(factory()));
974
730
  if (next === current) {
975
731
  nextScope.dispose();
@@ -1009,7 +765,7 @@ function insertList(parent, anchor, source, renderItem, keyOf) {
1009
765
  insertBefore(parent, marker, anchor);
1010
766
  let entries = [];
1011
767
  const tracksIndex = renderItem.length >= 2;
1012
- effect(() => {
768
+ (0, import_reactivity5.effect)(() => {
1013
769
  const items = source();
1014
770
  let keys = null;
1015
771
  if (keyOf) {
@@ -1165,13 +921,13 @@ function isPrimitiveItem(item) {
1165
921
  }
1166
922
  __name(isPrimitiveItem, "isPrimitiveItem");
1167
923
  function createListEntry(item, index, key, renderItem) {
1168
- const owner = createOwner();
924
+ const owner = (0, import_reactivity5.createOwner)();
1169
925
  let itemSignal;
1170
926
  let viewOwner;
1171
927
  let node;
1172
928
  owner.run(() => {
1173
- itemSignal = state(item);
1174
- viewOwner = createOwner();
929
+ itemSignal = (0, import_reactivity5.state)(item);
930
+ viewOwner = (0, import_reactivity5.createOwner)();
1175
931
  node = viewOwner.run(() => renderItem(toReactiveItem(itemSignal, item), index));
1176
932
  });
1177
933
  associateNodeOwner(node, viewOwner);
@@ -1183,7 +939,7 @@ function refreshListEntry(parent, entry, index, renderItem) {
1183
939
  entry.index = index;
1184
940
  const previousView = entry.viewOwner;
1185
941
  entry.owner.run(() => {
1186
- entry.viewOwner = createOwner();
942
+ entry.viewOwner = (0, import_reactivity5.createOwner)();
1187
943
  entry.node = entry.viewOwner.run(() => renderItem(
1188
944
  toReactiveItem(entry.item, entry.value),
1189
945
  index
@@ -1344,10 +1100,11 @@ function capitalize(value) {
1344
1100
  __name(capitalize, "capitalize");
1345
1101
 
1346
1102
  // packages/runtime/src/boundary.ts
1103
+ var import_reactivity6 = require("@vobs/reactivity");
1347
1104
  function insertBoundary(parent, anchor, options) {
1348
- const boundary = createOwner();
1105
+ const boundary = (0, import_reactivity6.createOwner)();
1349
1106
  boundary.run(() => {
1350
- const error = state(null);
1107
+ const error = (0, import_reactivity6.state)(null);
1351
1108
  let fallbackActive = false;
1352
1109
  let lastError = null;
1353
1110
  let initialized = false;
@@ -1412,8 +1169,12 @@ function insertBoundary(parent, anchor, options) {
1412
1169
  __name(insertBoundary, "insertBoundary");
1413
1170
 
1414
1171
  // packages/runtime/src/error-boundary.ts
1172
+ function resolveBoundaryChildren(children) {
1173
+ return typeof children === "function" ? children : () => children;
1174
+ }
1175
+ __name(resolveBoundaryChildren, "resolveBoundaryChildren");
1415
1176
  function insertErrorBoundary(parent, anchor, options) {
1416
- insertBoundary(parent, anchor, options);
1177
+ insertBoundary(parent, anchor, { ...options, children: resolveBoundaryChildren(options.children) });
1417
1178
  }
1418
1179
  __name(insertErrorBoundary, "insertErrorBoundary");
1419
1180
  function ErrorBoundary(props) {
@@ -1422,13 +1183,14 @@ function ErrorBoundary(props) {
1422
1183
  __name(ErrorBoundary, "ErrorBoundary");
1423
1184
 
1424
1185
  // packages/runtime/src/async-boundary.ts
1186
+ var import_reactivity7 = require("@vobs/reactivity");
1425
1187
  function insertAsyncBoundary(parent, anchor, options) {
1426
- const boundary = createOwner();
1188
+ const boundary = (0, import_reactivity7.createOwner)();
1427
1189
  boundary.run(() => {
1428
- const loading = state(true);
1429
- const data = state(void 0);
1430
- const resolved = state(false);
1431
- const error = state(null);
1190
+ const loading = (0, import_reactivity7.state)(true);
1191
+ const data = (0, import_reactivity7.state)(void 0);
1192
+ const resolved = (0, import_reactivity7.state)(false);
1193
+ const error = (0, import_reactivity7.state)(null);
1432
1194
  let token = 0;
1433
1195
  let previousKey;
1434
1196
  let initialized = false;
@@ -1505,8 +1267,9 @@ function normalizeError(reason) {
1505
1267
  __name(normalizeError, "normalizeError");
1506
1268
 
1507
1269
  // packages/runtime/src/profiler.ts
1270
+ var import_reactivity8 = require("@vobs/reactivity");
1508
1271
  function insertProfiler(parent, anchor, options) {
1509
- const profiler = createOwner();
1272
+ const profiler = (0, import_reactivity8.createOwner)();
1510
1273
  let mounted = false;
1511
1274
  profiler.run(() => {
1512
1275
  insertDynamic(parent, anchor, () => {
@@ -1536,62 +1299,64 @@ function now() {
1536
1299
  return typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
1537
1300
  }
1538
1301
  __name(now, "now");
1539
-
1540
- exports.AsyncBoundary = AsyncBoundary;
1541
- exports.ErrorBoundary = ErrorBoundary;
1542
- exports.Profiler = Profiler;
1543
- exports.VobsError = VobsError;
1544
- exports.addEventListener = addEventListener;
1545
- exports.bindAttribute = bindAttribute;
1546
- exports.bindProperty = bindProperty;
1547
- exports.bindText = bindText;
1548
- exports.clear = clear;
1549
- exports.cloneTemplate = cloneTemplate;
1550
- exports.createBlock = createBlock;
1551
- exports.createComment = createComment;
1552
- exports.createComponent = createComponent;
1553
- exports.createElement = createElement;
1554
- exports.createFragment = createFragment;
1555
- exports.createHmrStateStore = createHmrStateStore;
1556
- exports.createTemplate = createTemplate;
1557
- exports.createText = createText;
1558
- exports.createVobsError = createVobsError;
1559
- exports.describeDebugNode = describeDebugNode;
1560
- exports.disposeHmrModule = disposeHmrModule;
1561
- exports.disposeNodeOwner = disposeNodeOwner;
1562
- exports.formatVobsError = formatVobsError;
1563
- exports.getRenderer = getRenderer;
1564
- exports.getRuntimeDebugContext = getRuntimeDebugContext;
1565
- exports.getRuntimeDebugHooks = getRuntimeDebugHooks;
1566
- exports.insertAsyncBoundary = insertAsyncBoundary;
1567
- exports.insertBefore = insertBefore;
1568
- exports.insertBoundary = insertBoundary;
1569
- exports.insertDynamic = insertDynamic;
1570
- exports.insertDynamicValue = insertDynamicValue;
1571
- exports.insertErrorBoundary = insertErrorBoundary;
1572
- exports.insertList = insertList;
1573
- exports.insertProfiler = insertProfiler;
1574
- exports.invokeRuntimeDebug = invokeRuntimeDebug;
1575
- exports.isVobsError = isVobsError;
1576
- exports.isVobsFragment = isVobsFragment;
1577
- exports.markHmrInstanceMounted = markHmrInstanceMounted;
1578
- exports.normalizeDynamicChild = normalizeDynamicChild;
1579
- exports.normalizeVobsError = normalizeVobsError;
1580
- exports.pushRuntimeDebugContext = pushRuntimeDebugContext;
1581
- exports.ref = ref;
1582
- exports.registerHmrInstance = registerHmrInstance;
1583
- exports.removeChild = removeChild;
1584
- exports.removeEventListener = removeEventListener;
1585
- exports.resolveComponent = resolveComponent;
1586
- exports.runWithRuntimeDebugContext = runWithRuntimeDebugContext;
1587
- exports.setAttribute = setAttribute;
1588
- exports.setProperty = setProperty;
1589
- exports.setRef = setRef;
1590
- exports.setRenderer = setRenderer;
1591
- exports.setRuntimeDebugHooks = setRuntimeDebugHooks;
1592
- exports.setStaticProps = setStaticProps;
1593
- exports.setTextContent = setTextContent;
1594
- exports.spreadProps = spreadProps;
1595
- exports.updateHmrModule = updateHmrModule;
1596
- //# sourceMappingURL=index.cjs.map
1302
+ // Annotate the CommonJS export names for ESM import in node:
1303
+ 0 && (module.exports = {
1304
+ AsyncBoundary,
1305
+ ErrorBoundary,
1306
+ Profiler,
1307
+ VobsError,
1308
+ addEventListener,
1309
+ bindAttribute,
1310
+ bindProperty,
1311
+ bindText,
1312
+ clear,
1313
+ cloneTemplate,
1314
+ createBlock,
1315
+ createComment,
1316
+ createComponent,
1317
+ createElement,
1318
+ createFragment,
1319
+ createHmrStateStore,
1320
+ createTemplate,
1321
+ createText,
1322
+ createVobsError,
1323
+ describeDebugNode,
1324
+ disposeHmrModule,
1325
+ disposeNodeOwner,
1326
+ formatVobsError,
1327
+ getRenderer,
1328
+ getRuntimeDebugContext,
1329
+ getRuntimeDebugHooks,
1330
+ hmrStateRef,
1331
+ insertAsyncBoundary,
1332
+ insertBefore,
1333
+ insertBoundary,
1334
+ insertDynamic,
1335
+ insertDynamicValue,
1336
+ insertErrorBoundary,
1337
+ insertList,
1338
+ insertProfiler,
1339
+ invokeRuntimeDebug,
1340
+ isVobsError,
1341
+ isVobsFragment,
1342
+ markHmrInstanceMounted,
1343
+ normalizeDynamicChild,
1344
+ normalizeVobsError,
1345
+ pushRuntimeDebugContext,
1346
+ ref,
1347
+ registerHmrInstance,
1348
+ removeChild,
1349
+ removeEventListener,
1350
+ resolveComponent,
1351
+ runWithRuntimeDebugContext,
1352
+ setAttribute,
1353
+ setProperty,
1354
+ setRef,
1355
+ setRenderer,
1356
+ setRuntimeDebugHooks,
1357
+ setStaticProps,
1358
+ setTextContent,
1359
+ spreadProps,
1360
+ updateHmrModule
1361
+ });
1597
1362
  //# sourceMappingURL=index.cjs.map