@vobs/runtime 1.2.0 → 1.2.2

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 (61) 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 +83 -234
  6. package/dist/bind.cjs.map +1 -1
  7. package/dist/bind.js +54 -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 +72 -371
  22. package/dist/error-boundary.cjs.map +1 -1
  23. package/dist/error-boundary.js +43 -366
  24. package/dist/error-boundary.js.map +1 -1
  25. package/dist/error.cjs +35 -9
  26. package/dist/error.cjs.map +1 -1
  27. package/dist/error.js +7 -3
  28. package/dist/error.js.map +1 -1
  29. package/dist/fragment.cjs +44 -133
  30. package/dist/fragment.cjs.map +1 -1
  31. package/dist/fragment.js +19 -130
  32. package/dist/fragment.js.map +1 -1
  33. package/dist/hmr.cjs +50 -22
  34. package/dist/hmr.cjs.map +1 -1
  35. package/dist/hmr.js +9 -3
  36. package/dist/hmr.js.map +1 -1
  37. package/dist/index.cjs +193 -462
  38. package/dist/index.cjs.map +1 -1
  39. package/dist/index.js +92 -385
  40. package/dist/index.js.map +1 -1
  41. package/dist/ops.cjs +126 -242
  42. package/dist/ops.cjs.map +1 -1
  43. package/dist/ops.js +76 -214
  44. package/dist/ops.js.map +1 -1
  45. package/dist/profiler.cjs +69 -320
  46. package/dist/profiler.cjs.map +1 -1
  47. package/dist/profiler.js +40 -315
  48. package/dist/profiler.js.map +1 -1
  49. package/dist/ref.cjs +33 -131
  50. package/dist/ref.cjs.map +1 -1
  51. package/dist/ref.js +10 -130
  52. package/dist/ref.js.map +1 -1
  53. package/dist/renderer.cjs +18 -2
  54. package/dist/renderer.cjs.map +1 -1
  55. package/dist/renderer.js +0 -2
  56. package/dist/renderer.js.map +1 -1
  57. package/dist/template.cjs +29 -6
  58. package/dist/template.cjs.map +1 -1
  59. package/dist/template.js +4 -3
  60. package/dist/template.js.map +1 -1
  61. package/package.json +6 -2
package/dist/dynamic.cjs CHANGED
@@ -1,375 +1,46 @@
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 });
5
-
6
- // packages/reactivity/src/debug.ts
7
- var activeDebugHooks = null;
8
- var signalNames = /* @__PURE__ */ new WeakMap();
9
- function hasDebugHooks() {
10
- return activeDebugHooks !== null;
11
- }
12
- __name(hasDebugHooks, "hasDebugHooks");
13
- function setSignalDebugName(signal, name) {
14
- signalNames.set(signal, name);
15
- invokeDebug("signalNamed", signal, name);
16
- }
17
- __name(setSignalDebugName, "setSignalDebugName");
18
- function invokeDebug(name, ...args) {
19
- return;
20
- }
21
- __name(invokeDebug, "invokeDebug");
22
-
23
- // packages/reactivity/src/owner.ts
24
- var currentOwner = null;
25
- var nextOwnerId = 1;
26
- var ownerNames = /* @__PURE__ */ new WeakMap();
27
- function createOwner() {
28
- const parent = currentOwner;
29
- let disposed = parent?.disposed ?? false;
30
- const children = [];
31
- const cleanups = [];
32
- const errorHandlers = /* @__PURE__ */ new Set();
33
- const owner = {
34
- id: `owner-${nextOwnerId++}`,
35
- parent,
36
- children,
37
- depth: (parent?.depth ?? -1) + 1,
38
- get disposed() {
39
- return disposed;
40
- },
41
- run(fn) {
42
- if (disposed) throw new Error("Vobs: \u5DF2\u9500\u6BC1\u7684 Owner \u4E0D\u80FD\u7EE7\u7EED\u8FD0\u884C");
43
- const previous = currentOwner;
44
- currentOwner = owner;
45
- try {
46
- return fn();
47
- } finally {
48
- currentOwner = previous;
49
- }
50
- },
51
- addCleanup(cleanup) {
52
- if (disposed) {
53
- cleanup();
54
- return;
55
- }
56
- cleanups.push(cleanup);
57
- },
58
- onDispose(cleanup) {
59
- owner.addCleanup(cleanup);
60
- },
61
- onError(handler) {
62
- errorHandlers.add(handler);
63
- const remove = /* @__PURE__ */ __name(() => errorHandlers.delete(handler), "remove");
64
- owner.addCleanup(remove);
65
- return remove;
66
- },
67
- handleError(error) {
68
- for (const handler of [...errorHandlers].reverse()) {
69
- try {
70
- handler(error);
71
- return true;
72
- } catch (handlerError) {
73
- return parent?.handleError(handlerError) ?? false;
74
- }
75
- }
76
- return parent?.handleError(error) ?? false;
77
- },
78
- dispose() {
79
- if (disposed) return;
80
- disposed = true;
81
- for (const child of [...children]) child.dispose();
82
- children.length = 0;
83
- let firstError;
84
- for (let index = cleanups.length - 1; index >= 0; index--) {
85
- try {
86
- cleanups[index]();
87
- } catch (error) {
88
- firstError ?? (firstError = error);
89
- }
90
- }
91
- cleanups.length = 0;
92
- if (parent) {
93
- const index = parent.children.indexOf(owner);
94
- if (index >= 0) parent.children.splice(index, 1);
95
- }
96
- if (firstError) throw firstError;
97
- }
98
- };
99
- if (parent && !parent.disposed) parent.children.push(owner);
100
- return owner;
101
- }
102
- __name(createOwner, "createOwner");
103
- function setOwnerDebugName(owner, name) {
104
- ownerNames.set(owner, name);
105
- }
106
- __name(setOwnerDebugName, "setOwnerDebugName");
107
- function getCurrentOwner() {
108
- return currentOwner;
109
- }
110
- __name(getCurrentOwner, "getCurrentOwner");
111
-
112
- // packages/reactivity/src/signal.ts
113
- var currentSubscriber = null;
114
- function getCurrentSubscriber() {
115
- return currentSubscriber;
116
- }
117
- __name(getCurrentSubscriber, "getCurrentSubscriber");
118
- function setCurrentSubscriber(subscriber) {
119
- currentSubscriber = subscriber;
120
- }
121
- __name(setCurrentSubscriber, "setCurrentSubscriber");
122
- function trackDependency(dependency) {
123
- if (!currentSubscriber || currentSubscriber.disposed) return;
124
- !currentSubscriber.dependencies.has(dependency);
125
- currentSubscriber.dependencies.add(dependency);
126
- }
127
- __name(trackDependency, "trackDependency");
128
- function state(initialValue, debugName) {
129
- let value = initialValue;
130
- let disposed = false;
131
- const subscribers = /* @__PURE__ */ new Set();
132
- const signalInstance = {
133
- get value() {
134
- const subscriber = getCurrentSubscriber();
135
- if (subscriber && !subscriber.disposed) {
136
- subscribers.add(subscriber);
137
- trackDependency(signalInstance);
138
- }
139
- return value;
140
- },
141
- set value(nextValue) {
142
- if (disposed || Object.is(value, nextValue)) return;
143
- value = nextValue;
144
- for (const subscriber of [...subscribers]) subscriber.notify();
145
- },
146
- unsubscribe(subscriber) {
147
- subscribers.delete(subscriber);
148
- },
149
- // 与 `.value =` 赋值同一条路径:判等短路、debug hook、notify 全部一致。
150
- // 以闭包实现,可安全地作为回调直接传递(无 this 绑定问题)。
151
- set(next) {
152
- signalInstance.value = next;
153
- },
154
- dispose() {
155
- if (disposed) return;
156
- disposed = true;
157
- subscribers.clear();
158
- }
159
- };
160
- const owner = getCurrentOwner();
161
- owner?.addCleanup(signalInstance.dispose);
162
- if (debugName?.trim()) setSignalDebugName(signalInstance, debugName.trim());
163
- return signalInstance;
164
- }
165
- __name(state, "state");
166
-
167
- // packages/reactivity/src/scheduler.ts
168
- var _Scheduler = class _Scheduler {
169
- constructor() {
170
- this.dirtyEffects = /* @__PURE__ */ new Set();
171
- this.lowPriorityEffects = /* @__PURE__ */ new Set();
172
- // flush 不可重入(flushing 标志保证),缓冲数组可在轮次间安全复用,避免每轮分配。
173
- this.normalBuffer = [];
174
- this.lowBuffer = [];
175
- this.flushing = false;
176
- this.scheduled = false;
177
- this.batchDepth = 0;
178
- }
179
- schedule(effect2) {
180
- if (effect2.disposed) return;
181
- this.dirtyEffects.add(effect2);
182
- this.lowPriorityEffects.delete(effect2);
183
- this.ensureScheduled();
184
- }
185
- /** Queue an effect behind normal updates while preserving deterministic order. */
186
- scheduleLow(effect2) {
187
- if (effect2.disposed) return;
188
- if (!this.dirtyEffects.has(effect2)) this.lowPriorityEffects.add(effect2);
189
- this.ensureScheduled();
190
- }
191
- ensureScheduled() {
192
- if (this.batchDepth === 0 && !this.flushing && !this.scheduled) {
193
- this.scheduled = true;
194
- queueMicrotask(() => {
195
- this.scheduled = false;
196
- this.flush();
197
- });
198
- }
199
- }
200
- remove(effect2) {
201
- this.dirtyEffects.delete(effect2);
202
- this.lowPriorityEffects.delete(effect2);
203
- }
204
- batch(fn) {
205
- this.batchDepth++;
206
- try {
207
- return fn();
208
- } finally {
209
- this.batchDepth--;
210
- if (this.batchDepth === 0) this.flush();
211
- }
212
- }
213
- flush() {
214
- if (this.flushing || this.batchDepth > 0) return;
215
- this.flushing = true;
216
- let rounds = 0;
217
- let firstError;
218
- let hasError = false;
219
- try {
220
- while (this.dirtyEffects.size > 0 || this.lowPriorityEffects.size > 0) {
221
- if (++rounds > 100) {
222
- this.dirtyEffects.clear();
223
- this.lowPriorityEffects.clear();
224
- throw new Error("Vobs: \u54CD\u5E94\u5F0F\u66F4\u65B0\u8D85\u8FC7 100 \u8F6E\uFF0C\u53EF\u80FD\u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56");
225
- }
226
- this.collectRunnable(this.dirtyEffects, this.normalBuffer);
227
- this.collectRunnable(this.lowPriorityEffects, this.lowBuffer);
228
- sortEffects(this.normalBuffer);
229
- sortEffects(this.lowBuffer);
230
- for (const effect2 of this.normalBuffer) {
231
- try {
232
- effect2.run();
233
- } catch (error) {
234
- if (!hasError) {
235
- firstError = error;
236
- hasError = true;
237
- }
238
- }
239
- }
240
- for (const effect2 of this.lowBuffer) {
241
- try {
242
- effect2.run();
243
- } catch (error) {
244
- if (!hasError) {
245
- firstError = error;
246
- hasError = true;
247
- }
248
- }
249
- }
250
- this.normalBuffer.length = 0;
251
- this.lowBuffer.length = 0;
252
- }
253
- } finally {
254
- this.normalBuffer.length = 0;
255
- this.lowBuffer.length = 0;
256
- this.flushing = false;
257
- }
258
- if (hasError) throw firstError;
259
- }
260
- /** 收集未 disposed 的 effect 并清空源集合;run() 期间新调度的 effect 留给下一轮。 */
261
- collectRunnable(source, target) {
262
- for (const effect2 of source) {
263
- if (!effect2.disposed) target.push(effect2);
264
- }
265
- source.clear();
266
- }
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
267
11
  };
268
- __name(_Scheduler, "Scheduler");
269
- var Scheduler = _Scheduler;
270
- function sortEffects(effects) {
271
- if (effects.length > 1) {
272
- effects.sort((a, b) => b.depth - a.depth || a.order - b.order);
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 });
273
17
  }
274
- }
275
- __name(sortEffects, "sortEffects");
276
- var scheduler = new Scheduler();
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
277
21
 
278
- // packages/reactivity/src/effect.ts
279
- var nextEffectOrder = 1;
280
- function cleanupDependencies(subscriber) {
281
- for (const dependency of subscriber.dependencies) {
282
- dependency.unsubscribe(subscriber);
283
- }
284
- subscriber.dependencies.clear();
285
- }
286
- __name(cleanupDependencies, "cleanupDependencies");
287
- function effect(callback) {
288
- const owner = getCurrentOwner();
289
- let cleanup;
290
- let dirty = true;
291
- let disposed = false;
292
- const eff = {
293
- order: nextEffectOrder++,
294
- depth: owner?.depth ?? 0,
295
- dependencies: /* @__PURE__ */ new Set(),
296
- get disposed() {
297
- return disposed;
298
- },
299
- notify() {
300
- if (disposed || dirty) return;
301
- dirty = true;
302
- scheduler.schedule(eff);
303
- },
304
- run() {
305
- if (disposed || !dirty) return;
306
- dirty = false;
307
- const previousCleanup = cleanup;
308
- cleanup = void 0;
309
- let cleanupError;
310
- if (previousCleanup) {
311
- try {
312
- previousCleanup();
313
- } catch (error) {
314
- const handled2 = owner?.handleError(error) ?? false;
315
- if (!handled2) cleanupError = error;
316
- }
317
- }
318
- cleanupDependencies(eff);
319
- const previous = getCurrentSubscriber();
320
- setCurrentSubscriber(eff);
321
- let thrown;
322
- let handled = false;
323
- try {
324
- const result = owner ? owner.run(callback) : callback();
325
- cleanup = typeof result === "function" ? result : void 0;
326
- } catch (error) {
327
- thrown = error;
328
- handled = owner?.handleError(error) ?? false;
329
- if (!handled) throw error;
330
- } finally {
331
- setCurrentSubscriber(previous);
332
- }
333
- if (cleanupError && !thrown) throw cleanupError;
334
- },
335
- scheduleLow() {
336
- if (disposed || dirty) return;
337
- dirty = true;
338
- scheduler.scheduleLow(eff);
339
- },
340
- dispose() {
341
- if (disposed) return;
342
- disposed = true;
343
- dirty = false;
344
- scheduler.remove(eff);
345
- const previousCleanup = cleanup;
346
- cleanup = void 0;
347
- let cleanupError;
348
- if (previousCleanup) {
349
- try {
350
- previousCleanup();
351
- } catch (error) {
352
- const handled = owner?.handleError(error) ?? false;
353
- if (!handled) cleanupError = error;
354
- }
355
- }
356
- cleanupDependencies(eff);
357
- if (cleanupError) throw cleanupError;
358
- }
359
- };
360
- owner?.addCleanup(eff.dispose);
361
- eff.run();
362
- return eff;
363
- }
364
- __name(effect, "effect");
22
+ // packages/runtime/src/dynamic.ts
23
+ var dynamic_exports = {};
24
+ __export(dynamic_exports, {
25
+ insertDynamic: () => insertDynamic,
26
+ insertDynamicValue: () => insertDynamicValue,
27
+ insertList: () => insertList,
28
+ normalizeDynamicChild: () => normalizeDynamicChild
29
+ });
30
+ module.exports = __toCommonJS(dynamic_exports);
31
+ var import_reactivity4 = require("@vobs/reactivity");
32
+
33
+ // packages/runtime/src/ops.ts
34
+ var import_reactivity3 = require("@vobs/reactivity");
365
35
 
366
36
  // packages/runtime/src/fragment.ts
37
+ var import_reactivity = require("@vobs/reactivity");
367
38
  function createFragment(factory) {
368
39
  const start = createComment("vobs:fragment:start");
369
40
  const end = createComment("vobs:fragment:end");
370
41
  let parent = null;
371
42
  let initialized = false;
372
- const owner = getCurrentOwner();
43
+ const owner = (0, import_reactivity.getCurrentOwner)();
373
44
  const fragment = {
374
45
  kind: "vobs-fragment",
375
46
  start,
@@ -437,7 +108,12 @@ function getRuntimeDebugHooks() {
437
108
  }
438
109
  __name(getRuntimeDebugHooks, "getRuntimeDebugHooks");
439
110
  function invokeRuntimeDebug(name, ...args) {
440
- return;
111
+ const callback = activeRuntimeDebugHooks?.[name];
112
+ if (!callback) return;
113
+ try {
114
+ callback(...args);
115
+ } catch {
116
+ }
441
117
  }
442
118
  __name(invokeRuntimeDebug, "invokeRuntimeDebug");
443
119
  function describeDebugNode(node) {
@@ -460,11 +136,18 @@ function markHmrInstanceMounted(node, parent) {
460
136
  }
461
137
  __name(markHmrInstanceMounted, "markHmrInstanceMounted");
462
138
  var hmrInstances = /* @__PURE__ */ new WeakMap();
139
+
140
+ // packages/runtime/src/ref.ts
141
+ var import_reactivity2 = require("@vobs/reactivity");
142
+
143
+ // packages/runtime/src/ops.ts
144
+ var currentRenderer = null;
463
145
  var nodeOwners = /* @__PURE__ */ new WeakMap();
464
146
  function getRenderer() {
465
- {
147
+ if (!currentRenderer) {
466
148
  throw new Error("\u6E32\u67D3\u5668\u672A\u521D\u59CB\u5316");
467
149
  }
150
+ return currentRenderer;
468
151
  }
469
152
  __name(getRenderer, "getRenderer");
470
153
  function createText(content) {
@@ -482,6 +165,13 @@ function insertBefore(parent, child, anchor) {
482
165
  }
483
166
  getRenderer().insertBefore(parent, child, isVobsFragment(anchor) ? anchor.start : anchor);
484
167
  markHmrInstanceMounted(child, parent);
168
+ if (getRuntimeDebugHooks()) {
169
+ invokeRuntimeDebug("domMutation", {
170
+ operation: "insert",
171
+ target: describeDebugNode(child),
172
+ parent: describeDebugNode(parent)
173
+ });
174
+ }
485
175
  }
486
176
  __name(insertBefore, "insertBefore");
487
177
  function removeChild(parent, child) {
@@ -491,11 +181,18 @@ function removeChild(parent, child) {
491
181
  return;
492
182
  }
493
183
  getRenderer().removeChild(parent, child);
184
+ if (getRuntimeDebugHooks()) {
185
+ invokeRuntimeDebug("domMutation", {
186
+ operation: "remove",
187
+ target: describeDebugNode(child),
188
+ parent: describeDebugNode(parent)
189
+ });
190
+ }
494
191
  }
495
192
  __name(removeChild, "removeChild");
496
193
  function createBlock(factory) {
497
- const owner = createOwner();
498
- setOwnerDebugName(owner, "dynamic");
194
+ const owner = (0, import_reactivity3.createOwner)();
195
+ (0, import_reactivity3.setOwnerDebugName)(owner, "dynamic");
499
196
  let node;
500
197
  try {
501
198
  node = owner.run(factory);
@@ -528,7 +225,7 @@ function insertDynamic(parent, anchor, factory) {
528
225
  const marker = createComment("vobs:dynamic");
529
226
  insertBefore(parent, marker, anchor);
530
227
  let current = null;
531
- effect(() => {
228
+ (0, import_reactivity4.effect)(() => {
532
229
  const next = createBlock(factory);
533
230
  if (next === current) return;
534
231
  if (current) removeChild(parent, current);
@@ -542,8 +239,8 @@ function insertDynamicValue(parent, anchor, factory) {
542
239
  insertBefore(parent, marker, anchor);
543
240
  let current = null;
544
241
  let scope = null;
545
- effect(() => {
546
- const nextScope = createOwner();
242
+ (0, import_reactivity4.effect)(() => {
243
+ const nextScope = (0, import_reactivity4.createOwner)();
547
244
  const next = nextScope.run(() => normalizeDynamicChild(factory()));
548
245
  if (next === current) {
549
246
  nextScope.dispose();
@@ -583,7 +280,7 @@ function insertList(parent, anchor, source, renderItem, keyOf) {
583
280
  insertBefore(parent, marker, anchor);
584
281
  let entries = [];
585
282
  const tracksIndex = renderItem.length >= 2;
586
- effect(() => {
283
+ (0, import_reactivity4.effect)(() => {
587
284
  const items = source();
588
285
  let keys = null;
589
286
  if (keyOf) {
@@ -739,13 +436,13 @@ function isPrimitiveItem(item) {
739
436
  }
740
437
  __name(isPrimitiveItem, "isPrimitiveItem");
741
438
  function createListEntry(item, index, key, renderItem) {
742
- const owner = createOwner();
439
+ const owner = (0, import_reactivity4.createOwner)();
743
440
  let itemSignal;
744
441
  let viewOwner;
745
442
  let node;
746
443
  owner.run(() => {
747
- itemSignal = state(item);
748
- viewOwner = createOwner();
444
+ itemSignal = (0, import_reactivity4.state)(item);
445
+ viewOwner = (0, import_reactivity4.createOwner)();
749
446
  node = viewOwner.run(() => renderItem(toReactiveItem(itemSignal, item), index));
750
447
  });
751
448
  associateNodeOwner(node, viewOwner);
@@ -757,7 +454,7 @@ function refreshListEntry(parent, entry, index, renderItem) {
757
454
  entry.index = index;
758
455
  const previousView = entry.viewOwner;
759
456
  entry.owner.run(() => {
760
- entry.viewOwner = createOwner();
457
+ entry.viewOwner = (0, import_reactivity4.createOwner)();
761
458
  entry.node = entry.viewOwner.run(() => renderItem(
762
459
  toReactiveItem(entry.item, entry.value),
763
460
  index
@@ -792,10 +489,11 @@ function disposeEntry(parent, entry) {
792
489
  entry.owner.dispose();
793
490
  }
794
491
  __name(disposeEntry, "disposeEntry");
795
-
796
- exports.insertDynamic = insertDynamic;
797
- exports.insertDynamicValue = insertDynamicValue;
798
- exports.insertList = insertList;
799
- exports.normalizeDynamicChild = normalizeDynamicChild;
800
- //# sourceMappingURL=dynamic.cjs.map
492
+ // Annotate the CommonJS export names for ESM import in node:
493
+ 0 && (module.exports = {
494
+ insertDynamic,
495
+ insertDynamicValue,
496
+ insertList,
497
+ normalizeDynamicChild
498
+ });
801
499
  //# sourceMappingURL=dynamic.cjs.map