@vobs/runtime 1.2.1 → 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 +2 -2
package/dist/profiler.js CHANGED
@@ -1,315 +1,11 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
- // packages/reactivity/src/debug.ts
5
- var activeDebugHooks = null;
6
- function hasDebugHooks() {
7
- return activeDebugHooks !== null;
8
- }
9
- __name(hasDebugHooks, "hasDebugHooks");
10
- function invokeDebug(name, ...args) {
11
- return;
12
- }
13
- __name(invokeDebug, "invokeDebug");
14
-
15
- // packages/reactivity/src/owner.ts
16
- var currentOwner = null;
17
- var nextOwnerId = 1;
18
- var ownerNames = /* @__PURE__ */ new WeakMap();
19
- function createOwner() {
20
- const parent = currentOwner;
21
- let disposed = parent?.disposed ?? false;
22
- const children = [];
23
- const cleanups = [];
24
- const errorHandlers = /* @__PURE__ */ new Set();
25
- const owner = {
26
- id: `owner-${nextOwnerId++}`,
27
- parent,
28
- children,
29
- depth: (parent?.depth ?? -1) + 1,
30
- get disposed() {
31
- return disposed;
32
- },
33
- run(fn) {
34
- if (disposed) throw new Error("Vobs: \u5DF2\u9500\u6BC1\u7684 Owner \u4E0D\u80FD\u7EE7\u7EED\u8FD0\u884C");
35
- const previous = currentOwner;
36
- currentOwner = owner;
37
- try {
38
- return fn();
39
- } finally {
40
- currentOwner = previous;
41
- }
42
- },
43
- addCleanup(cleanup) {
44
- if (disposed) {
45
- cleanup();
46
- return;
47
- }
48
- cleanups.push(cleanup);
49
- },
50
- onDispose(cleanup) {
51
- owner.addCleanup(cleanup);
52
- },
53
- onError(handler) {
54
- errorHandlers.add(handler);
55
- const remove = /* @__PURE__ */ __name(() => errorHandlers.delete(handler), "remove");
56
- owner.addCleanup(remove);
57
- return remove;
58
- },
59
- handleError(error) {
60
- for (const handler of [...errorHandlers].reverse()) {
61
- try {
62
- handler(error);
63
- return true;
64
- } catch (handlerError) {
65
- return parent?.handleError(handlerError) ?? false;
66
- }
67
- }
68
- return parent?.handleError(error) ?? false;
69
- },
70
- dispose() {
71
- if (disposed) return;
72
- disposed = true;
73
- for (const child of [...children]) child.dispose();
74
- children.length = 0;
75
- let firstError;
76
- for (let index = cleanups.length - 1; index >= 0; index--) {
77
- try {
78
- cleanups[index]();
79
- } catch (error) {
80
- firstError ?? (firstError = error);
81
- }
82
- }
83
- cleanups.length = 0;
84
- if (parent) {
85
- const index = parent.children.indexOf(owner);
86
- if (index >= 0) parent.children.splice(index, 1);
87
- }
88
- if (firstError) throw firstError;
89
- }
90
- };
91
- if (parent && !parent.disposed) parent.children.push(owner);
92
- return owner;
93
- }
94
- __name(createOwner, "createOwner");
95
- function setOwnerDebugName(owner, name) {
96
- ownerNames.set(owner, name);
97
- }
98
- __name(setOwnerDebugName, "setOwnerDebugName");
99
- function getCurrentOwner() {
100
- return currentOwner;
101
- }
102
- __name(getCurrentOwner, "getCurrentOwner");
103
-
104
- // packages/reactivity/src/signal.ts
105
- var currentSubscriber = null;
106
- function getCurrentSubscriber() {
107
- return currentSubscriber;
108
- }
109
- __name(getCurrentSubscriber, "getCurrentSubscriber");
110
- function setCurrentSubscriber(subscriber) {
111
- currentSubscriber = subscriber;
112
- }
113
- __name(setCurrentSubscriber, "setCurrentSubscriber");
114
-
115
- // packages/reactivity/src/scheduler.ts
116
- var _Scheduler = class _Scheduler {
117
- constructor() {
118
- this.dirtyEffects = /* @__PURE__ */ new Set();
119
- this.lowPriorityEffects = /* @__PURE__ */ new Set();
120
- // flush 不可重入(flushing 标志保证),缓冲数组可在轮次间安全复用,避免每轮分配。
121
- this.normalBuffer = [];
122
- this.lowBuffer = [];
123
- this.flushing = false;
124
- this.scheduled = false;
125
- this.batchDepth = 0;
126
- }
127
- schedule(effect2) {
128
- if (effect2.disposed) return;
129
- this.dirtyEffects.add(effect2);
130
- this.lowPriorityEffects.delete(effect2);
131
- this.ensureScheduled();
132
- }
133
- /** Queue an effect behind normal updates while preserving deterministic order. */
134
- scheduleLow(effect2) {
135
- if (effect2.disposed) return;
136
- if (!this.dirtyEffects.has(effect2)) this.lowPriorityEffects.add(effect2);
137
- this.ensureScheduled();
138
- }
139
- ensureScheduled() {
140
- if (this.batchDepth === 0 && !this.flushing && !this.scheduled) {
141
- this.scheduled = true;
142
- queueMicrotask(() => {
143
- this.scheduled = false;
144
- this.flush();
145
- });
146
- }
147
- }
148
- remove(effect2) {
149
- this.dirtyEffects.delete(effect2);
150
- this.lowPriorityEffects.delete(effect2);
151
- }
152
- batch(fn) {
153
- this.batchDepth++;
154
- try {
155
- return fn();
156
- } finally {
157
- this.batchDepth--;
158
- if (this.batchDepth === 0) this.flush();
159
- }
160
- }
161
- flush() {
162
- if (this.flushing || this.batchDepth > 0) return;
163
- this.flushing = true;
164
- let rounds = 0;
165
- let firstError;
166
- let hasError = false;
167
- try {
168
- while (this.dirtyEffects.size > 0 || this.lowPriorityEffects.size > 0) {
169
- if (++rounds > 100) {
170
- this.dirtyEffects.clear();
171
- this.lowPriorityEffects.clear();
172
- throw new Error("Vobs: \u54CD\u5E94\u5F0F\u66F4\u65B0\u8D85\u8FC7 100 \u8F6E\uFF0C\u53EF\u80FD\u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56");
173
- }
174
- this.collectRunnable(this.dirtyEffects, this.normalBuffer);
175
- this.collectRunnable(this.lowPriorityEffects, this.lowBuffer);
176
- sortEffects(this.normalBuffer);
177
- sortEffects(this.lowBuffer);
178
- for (const effect2 of this.normalBuffer) {
179
- try {
180
- effect2.run();
181
- } catch (error) {
182
- if (!hasError) {
183
- firstError = error;
184
- hasError = true;
185
- }
186
- }
187
- }
188
- for (const effect2 of this.lowBuffer) {
189
- try {
190
- effect2.run();
191
- } catch (error) {
192
- if (!hasError) {
193
- firstError = error;
194
- hasError = true;
195
- }
196
- }
197
- }
198
- this.normalBuffer.length = 0;
199
- this.lowBuffer.length = 0;
200
- }
201
- } finally {
202
- this.normalBuffer.length = 0;
203
- this.lowBuffer.length = 0;
204
- this.flushing = false;
205
- }
206
- if (hasError) throw firstError;
207
- }
208
- /** 收集未 disposed 的 effect 并清空源集合;run() 期间新调度的 effect 留给下一轮。 */
209
- collectRunnable(source, target) {
210
- for (const effect2 of source) {
211
- if (!effect2.disposed) target.push(effect2);
212
- }
213
- source.clear();
214
- }
215
- };
216
- __name(_Scheduler, "Scheduler");
217
- var Scheduler = _Scheduler;
218
- function sortEffects(effects) {
219
- if (effects.length > 1) {
220
- effects.sort((a, b) => b.depth - a.depth || a.order - b.order);
221
- }
222
- }
223
- __name(sortEffects, "sortEffects");
224
- var scheduler = new Scheduler();
4
+ // packages/runtime/src/fragment.ts
5
+ import { getCurrentOwner as getCurrentOwner3 } from "@vobs/reactivity";
225
6
 
226
- // packages/reactivity/src/effect.ts
227
- var nextEffectOrder = 1;
228
- function cleanupDependencies(subscriber) {
229
- for (const dependency of subscriber.dependencies) {
230
- dependency.unsubscribe(subscriber);
231
- }
232
- subscriber.dependencies.clear();
233
- }
234
- __name(cleanupDependencies, "cleanupDependencies");
235
- function effect(callback) {
236
- const owner = getCurrentOwner();
237
- let cleanup;
238
- let dirty = true;
239
- let disposed = false;
240
- const eff = {
241
- order: nextEffectOrder++,
242
- depth: owner?.depth ?? 0,
243
- dependencies: /* @__PURE__ */ new Set(),
244
- get disposed() {
245
- return disposed;
246
- },
247
- notify() {
248
- if (disposed || dirty) return;
249
- dirty = true;
250
- scheduler.schedule(eff);
251
- },
252
- run() {
253
- if (disposed || !dirty) return;
254
- dirty = false;
255
- const previousCleanup = cleanup;
256
- cleanup = void 0;
257
- let cleanupError;
258
- if (previousCleanup) {
259
- try {
260
- previousCleanup();
261
- } catch (error) {
262
- const handled2 = owner?.handleError(error) ?? false;
263
- if (!handled2) cleanupError = error;
264
- }
265
- }
266
- cleanupDependencies(eff);
267
- const previous = getCurrentSubscriber();
268
- setCurrentSubscriber(eff);
269
- let thrown;
270
- let handled = false;
271
- try {
272
- const result = owner ? owner.run(callback) : callback();
273
- cleanup = typeof result === "function" ? result : void 0;
274
- } catch (error) {
275
- thrown = error;
276
- handled = owner?.handleError(error) ?? false;
277
- if (!handled) throw error;
278
- } finally {
279
- setCurrentSubscriber(previous);
280
- }
281
- if (cleanupError && !thrown) throw cleanupError;
282
- },
283
- scheduleLow() {
284
- if (disposed || dirty) return;
285
- dirty = true;
286
- scheduler.scheduleLow(eff);
287
- },
288
- dispose() {
289
- if (disposed) return;
290
- disposed = true;
291
- dirty = false;
292
- scheduler.remove(eff);
293
- const previousCleanup = cleanup;
294
- cleanup = void 0;
295
- let cleanupError;
296
- if (previousCleanup) {
297
- try {
298
- previousCleanup();
299
- } catch (error) {
300
- const handled = owner?.handleError(error) ?? false;
301
- if (!handled) cleanupError = error;
302
- }
303
- }
304
- cleanupDependencies(eff);
305
- if (cleanupError) throw cleanupError;
306
- }
307
- };
308
- owner?.addCleanup(eff.dispose);
309
- eff.run();
310
- return eff;
311
- }
312
- __name(effect, "effect");
7
+ // packages/runtime/src/ops.ts
8
+ import { createOwner, getCurrentOwner as getCurrentOwner2, setOwnerDebugName } from "@vobs/reactivity";
313
9
 
314
10
  // packages/runtime/src/debug.ts
315
11
  var activeRuntimeDebugHooks = null;
@@ -318,7 +14,12 @@ function getRuntimeDebugHooks() {
318
14
  }
319
15
  __name(getRuntimeDebugHooks, "getRuntimeDebugHooks");
320
16
  function invokeRuntimeDebug(name, ...args) {
321
- return;
17
+ const callback = activeRuntimeDebugHooks?.[name];
18
+ if (!callback) return;
19
+ try {
20
+ callback(...args);
21
+ } catch {
22
+ }
322
23
  }
323
24
  __name(invokeRuntimeDebug, "invokeRuntimeDebug");
324
25
  function describeDebugNode(node) {
@@ -341,11 +42,18 @@ function markHmrInstanceMounted(node, parent) {
341
42
  }
342
43
  __name(markHmrInstanceMounted, "markHmrInstanceMounted");
343
44
  var hmrInstances = /* @__PURE__ */ new WeakMap();
45
+
46
+ // packages/runtime/src/ref.ts
47
+ import { getCurrentOwner } from "@vobs/reactivity";
48
+
49
+ // packages/runtime/src/ops.ts
50
+ var currentRenderer = null;
344
51
  var nodeOwners = /* @__PURE__ */ new WeakMap();
345
52
  function getRenderer() {
346
- {
53
+ if (!currentRenderer) {
347
54
  throw new Error("\u6E32\u67D3\u5668\u672A\u521D\u59CB\u5316");
348
55
  }
56
+ return currentRenderer;
349
57
  }
350
58
  __name(getRenderer, "getRenderer");
351
59
  function createComment(content) {
@@ -359,6 +67,13 @@ function insertBefore(parent, child, anchor) {
359
67
  }
360
68
  getRenderer().insertBefore(parent, child, isVobsFragment(anchor) ? anchor.start : anchor);
361
69
  markHmrInstanceMounted(child, parent);
70
+ if (getRuntimeDebugHooks()) {
71
+ invokeRuntimeDebug("domMutation", {
72
+ operation: "insert",
73
+ target: describeDebugNode(child),
74
+ parent: describeDebugNode(parent)
75
+ });
76
+ }
362
77
  }
363
78
  __name(insertBefore, "insertBefore");
364
79
  function removeChild(parent, child) {
@@ -368,6 +83,13 @@ function removeChild(parent, child) {
368
83
  return;
369
84
  }
370
85
  getRenderer().removeChild(parent, child);
86
+ if (getRuntimeDebugHooks()) {
87
+ invokeRuntimeDebug("domMutation", {
88
+ operation: "remove",
89
+ target: describeDebugNode(child),
90
+ parent: describeDebugNode(parent)
91
+ });
92
+ }
371
93
  }
372
94
  __name(removeChild, "removeChild");
373
95
  function createBlock(factory) {
@@ -406,7 +128,7 @@ function createFragment(factory) {
406
128
  const end = createComment("vobs:fragment:end");
407
129
  let parent = null;
408
130
  let initialized = false;
409
- const owner = getCurrentOwner();
131
+ const owner = getCurrentOwner3();
410
132
  const fragment = {
411
133
  kind: "vobs-fragment",
412
134
  start,
@@ -468,6 +190,7 @@ function moveRange(parent, start, end, anchor) {
468
190
  __name(moveRange, "moveRange");
469
191
 
470
192
  // packages/runtime/src/dynamic.ts
193
+ import { createOwner as createOwner2, effect, state } from "@vobs/reactivity";
471
194
  function insertDynamic(parent, anchor, factory) {
472
195
  const marker = createComment("vobs:dynamic");
473
196
  insertBefore(parent, marker, anchor);
@@ -483,8 +206,9 @@ function insertDynamic(parent, anchor, factory) {
483
206
  __name(insertDynamic, "insertDynamic");
484
207
 
485
208
  // packages/runtime/src/profiler.ts
209
+ import { createOwner as createOwner3 } from "@vobs/reactivity";
486
210
  function insertProfiler(parent, anchor, options) {
487
- const profiler = createOwner();
211
+ const profiler = createOwner3();
488
212
  let mounted = false;
489
213
  profiler.run(() => {
490
214
  insertDynamic(parent, anchor, () => {
@@ -514,7 +238,8 @@ function now() {
514
238
  return typeof performance !== "undefined" && typeof performance.now === "function" ? performance.now() : Date.now();
515
239
  }
516
240
  __name(now, "now");
517
-
518
- export { Profiler, insertProfiler };
519
- //# sourceMappingURL=profiler.js.map
241
+ export {
242
+ Profiler,
243
+ insertProfiler
244
+ };
520
245
  //# sourceMappingURL=profiler.js.map