@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/ops.cjs CHANGED
@@ -1,218 +1,52 @@
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
- function hasDebugHooks() {
9
- return activeDebugHooks !== null;
10
- }
11
- __name(hasDebugHooks, "hasDebugHooks");
12
- function invokeDebug(name, ...args) {
13
- return;
14
- }
15
- __name(invokeDebug, "invokeDebug");
16
-
17
- // packages/reactivity/src/owner.ts
18
- var currentOwner = null;
19
- var nextOwnerId = 1;
20
- var ownerNames = /* @__PURE__ */ new WeakMap();
21
- function createOwner() {
22
- const parent = currentOwner;
23
- let disposed = parent?.disposed ?? false;
24
- const children = [];
25
- const cleanups = [];
26
- const errorHandlers = /* @__PURE__ */ new Set();
27
- const owner = {
28
- id: `owner-${nextOwnerId++}`,
29
- parent,
30
- children,
31
- depth: (parent?.depth ?? -1) + 1,
32
- get disposed() {
33
- return disposed;
34
- },
35
- run(fn) {
36
- if (disposed) throw new Error("Vobs: \u5DF2\u9500\u6BC1\u7684 Owner \u4E0D\u80FD\u7EE7\u7EED\u8FD0\u884C");
37
- const previous = currentOwner;
38
- currentOwner = owner;
39
- try {
40
- return fn();
41
- } finally {
42
- currentOwner = previous;
43
- }
44
- },
45
- addCleanup(cleanup) {
46
- if (disposed) {
47
- cleanup();
48
- return;
49
- }
50
- cleanups.push(cleanup);
51
- },
52
- onDispose(cleanup) {
53
- owner.addCleanup(cleanup);
54
- },
55
- onError(handler) {
56
- errorHandlers.add(handler);
57
- const remove = /* @__PURE__ */ __name(() => errorHandlers.delete(handler), "remove");
58
- owner.addCleanup(remove);
59
- return remove;
60
- },
61
- handleError(error) {
62
- for (const handler of [...errorHandlers].reverse()) {
63
- try {
64
- handler(error);
65
- return true;
66
- } catch (handlerError) {
67
- return parent?.handleError(handlerError) ?? false;
68
- }
69
- }
70
- return parent?.handleError(error) ?? false;
71
- },
72
- dispose() {
73
- if (disposed) return;
74
- disposed = true;
75
- for (const child of [...children]) child.dispose();
76
- children.length = 0;
77
- let firstError;
78
- for (let index = cleanups.length - 1; index >= 0; index--) {
79
- try {
80
- cleanups[index]();
81
- } catch (error) {
82
- firstError ?? (firstError = error);
83
- }
84
- }
85
- cleanups.length = 0;
86
- if (parent) {
87
- const index = parent.children.indexOf(owner);
88
- if (index >= 0) parent.children.splice(index, 1);
89
- }
90
- if (firstError) throw firstError;
91
- }
92
- };
93
- if (parent && !parent.disposed) parent.children.push(owner);
94
- return owner;
95
- }
96
- __name(createOwner, "createOwner");
97
- function setOwnerDebugName(owner, name) {
98
- ownerNames.set(owner, name);
99
- }
100
- __name(setOwnerDebugName, "setOwnerDebugName");
101
- function getCurrentOwner() {
102
- return currentOwner;
103
- }
104
- __name(getCurrentOwner, "getCurrentOwner");
105
-
106
- // packages/reactivity/src/scheduler.ts
107
- var _Scheduler = class _Scheduler {
108
- constructor() {
109
- this.dirtyEffects = /* @__PURE__ */ new Set();
110
- this.lowPriorityEffects = /* @__PURE__ */ new Set();
111
- // flush 不可重入(flushing 标志保证),缓冲数组可在轮次间安全复用,避免每轮分配。
112
- this.normalBuffer = [];
113
- this.lowBuffer = [];
114
- this.flushing = false;
115
- this.scheduled = false;
116
- this.batchDepth = 0;
117
- }
118
- schedule(effect2) {
119
- if (effect2.disposed) return;
120
- this.dirtyEffects.add(effect2);
121
- this.lowPriorityEffects.delete(effect2);
122
- this.ensureScheduled();
123
- }
124
- /** Queue an effect behind normal updates while preserving deterministic order. */
125
- scheduleLow(effect2) {
126
- if (effect2.disposed) return;
127
- if (!this.dirtyEffects.has(effect2)) this.lowPriorityEffects.add(effect2);
128
- this.ensureScheduled();
129
- }
130
- ensureScheduled() {
131
- if (this.batchDepth === 0 && !this.flushing && !this.scheduled) {
132
- this.scheduled = true;
133
- queueMicrotask(() => {
134
- this.scheduled = false;
135
- this.flush();
136
- });
137
- }
138
- }
139
- remove(effect2) {
140
- this.dirtyEffects.delete(effect2);
141
- this.lowPriorityEffects.delete(effect2);
142
- }
143
- batch(fn) {
144
- this.batchDepth++;
145
- try {
146
- return fn();
147
- } finally {
148
- this.batchDepth--;
149
- if (this.batchDepth === 0) this.flush();
150
- }
151
- }
152
- flush() {
153
- if (this.flushing || this.batchDepth > 0) return;
154
- this.flushing = true;
155
- let rounds = 0;
156
- let firstError;
157
- let hasError = false;
158
- try {
159
- while (this.dirtyEffects.size > 0 || this.lowPriorityEffects.size > 0) {
160
- if (++rounds > 100) {
161
- this.dirtyEffects.clear();
162
- this.lowPriorityEffects.clear();
163
- throw new Error("Vobs: \u54CD\u5E94\u5F0F\u66F4\u65B0\u8D85\u8FC7 100 \u8F6E\uFF0C\u53EF\u80FD\u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56");
164
- }
165
- this.collectRunnable(this.dirtyEffects, this.normalBuffer);
166
- this.collectRunnable(this.lowPriorityEffects, this.lowBuffer);
167
- sortEffects(this.normalBuffer);
168
- sortEffects(this.lowBuffer);
169
- for (const effect2 of this.normalBuffer) {
170
- try {
171
- effect2.run();
172
- } catch (error) {
173
- if (!hasError) {
174
- firstError = error;
175
- hasError = true;
176
- }
177
- }
178
- }
179
- for (const effect2 of this.lowBuffer) {
180
- try {
181
- effect2.run();
182
- } catch (error) {
183
- if (!hasError) {
184
- firstError = error;
185
- hasError = true;
186
- }
187
- }
188
- }
189
- this.normalBuffer.length = 0;
190
- this.lowBuffer.length = 0;
191
- }
192
- } finally {
193
- this.normalBuffer.length = 0;
194
- this.lowBuffer.length = 0;
195
- this.flushing = false;
196
- }
197
- if (hasError) throw firstError;
198
- }
199
- /** 收集未 disposed 的 effect 并清空源集合;run() 期间新调度的 effect 留给下一轮。 */
200
- collectRunnable(source, target) {
201
- for (const effect2 of source) {
202
- if (!effect2.disposed) target.push(effect2);
203
- }
204
- source.clear();
205
- }
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
206
11
  };
207
- __name(_Scheduler, "Scheduler");
208
- function sortEffects(effects) {
209
- if (effects.length > 1) {
210
- 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 });
211
17
  }
212
- }
213
- __name(sortEffects, "sortEffects");
18
+ return to;
19
+ };
20
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
+
22
+ // packages/runtime/src/ops.ts
23
+ var ops_exports = {};
24
+ __export(ops_exports, {
25
+ addEventListener: () => addEventListener,
26
+ associateNodeOwner: () => associateNodeOwner,
27
+ clear: () => clear,
28
+ createBlock: () => createBlock,
29
+ createComment: () => createComment,
30
+ createComponent: () => createComponent,
31
+ createElement: () => createElement,
32
+ createText: () => createText,
33
+ disposeNodeOwner: () => disposeNodeOwner,
34
+ getRenderer: () => getRenderer,
35
+ insertBefore: () => insertBefore,
36
+ removeChild: () => removeChild,
37
+ removeEventListener: () => removeEventListener,
38
+ setAttribute: () => setAttribute,
39
+ setProperty: () => setProperty,
40
+ setRenderer: () => setRenderer,
41
+ setStaticProps: () => setStaticProps,
42
+ setTextContent: () => setTextContent,
43
+ spreadProps: () => spreadProps
44
+ });
45
+ module.exports = __toCommonJS(ops_exports);
46
+ var import_reactivity3 = require("@vobs/reactivity");
214
47
 
215
48
  // packages/runtime/src/fragment.ts
49
+ var import_reactivity = require("@vobs/reactivity");
216
50
  function isVobsFragment(value) {
217
51
  return Boolean(value) && typeof value === "object" && value.kind === "vobs-fragment";
218
52
  }
@@ -225,7 +59,12 @@ function getRuntimeDebugHooks() {
225
59
  }
226
60
  __name(getRuntimeDebugHooks, "getRuntimeDebugHooks");
227
61
  function invokeRuntimeDebug(name, ...args) {
228
- return;
62
+ const callback = activeRuntimeDebugHooks?.[name];
63
+ if (!callback) return;
64
+ try {
65
+ callback(...args);
66
+ } catch {
67
+ }
229
68
  }
230
69
  __name(invokeRuntimeDebug, "invokeRuntimeDebug");
231
70
  function readDebugValue(read) {
@@ -262,12 +101,12 @@ function markHmrInstanceMounted(node, parent) {
262
101
  }
263
102
  __name(markHmrInstanceMounted, "markHmrInstanceMounted");
264
103
  function getModule(moduleId) {
265
- let module = hmrGlobal.modules.get(moduleId);
266
- if (!module) {
267
- module = { components: /* @__PURE__ */ new Map(), state: /* @__PURE__ */ new Map(), instances: /* @__PURE__ */ new Set() };
268
- hmrGlobal.modules.set(moduleId, module);
104
+ let module2 = hmrGlobal.modules.get(moduleId);
105
+ if (!module2) {
106
+ module2 = { components: /* @__PURE__ */ new Map(), state: /* @__PURE__ */ new Map(), instances: /* @__PURE__ */ new Set() };
107
+ hmrGlobal.modules.set(moduleId, module2);
269
108
  }
270
- return module;
109
+ return module2;
271
110
  }
272
111
  __name(getModule, "getModule");
273
112
  var hmrInstances = /* @__PURE__ */ new WeakMap();
@@ -277,10 +116,11 @@ function associateHmrInstance(node, instance) {
277
116
  __name(associateHmrInstance, "associateHmrInstance");
278
117
 
279
118
  // packages/runtime/src/ref.ts
119
+ var import_reactivity2 = require("@vobs/reactivity");
280
120
  function setRef(node, target) {
281
121
  if (!isRefTarget(target)) return;
282
122
  if (isSSRNode(node)) return;
283
- const owner = getCurrentOwner();
123
+ const owner = (0, import_reactivity2.getCurrentOwner)();
284
124
  assignRef(target, node);
285
125
  owner?.onDispose(() => {
286
126
  if (isObjectRef(target) && target.current !== node) return;
@@ -344,6 +184,13 @@ function insertBefore(parent, child, anchor) {
344
184
  }
345
185
  getRenderer().insertBefore(parent, child, isVobsFragment(anchor) ? anchor.start : anchor);
346
186
  markHmrInstanceMounted(child, parent);
187
+ if (getRuntimeDebugHooks()) {
188
+ invokeRuntimeDebug("domMutation", {
189
+ operation: "insert",
190
+ target: describeDebugNode(child),
191
+ parent: describeDebugNode(parent)
192
+ });
193
+ }
347
194
  }
348
195
  __name(insertBefore, "insertBefore");
349
196
  function removeChild(parent, child) {
@@ -353,18 +200,54 @@ function removeChild(parent, child) {
353
200
  return;
354
201
  }
355
202
  getRenderer().removeChild(parent, child);
203
+ if (getRuntimeDebugHooks()) {
204
+ invokeRuntimeDebug("domMutation", {
205
+ operation: "remove",
206
+ target: describeDebugNode(child),
207
+ parent: describeDebugNode(parent)
208
+ });
209
+ }
356
210
  }
357
211
  __name(removeChild, "removeChild");
358
212
  function setTextContent(node, content) {
213
+ const previousValue = getRuntimeDebugHooks() ? readDebugValue(() => node.textContent) : void 0;
359
214
  getRenderer().setTextContent(node, content);
215
+ if (getRuntimeDebugHooks()) {
216
+ invokeRuntimeDebug("domMutation", {
217
+ operation: "text",
218
+ target: describeDebugNode(node),
219
+ previousValue,
220
+ nextValue: content
221
+ });
222
+ }
360
223
  }
361
224
  __name(setTextContent, "setTextContent");
362
225
  function setProperty(node, key, value) {
226
+ const previousValue = getRuntimeDebugHooks() ? readDebugValue(() => Reflect.get(node, key)) : void 0;
363
227
  getRenderer().setProperty(node, key, value);
228
+ if (getRuntimeDebugHooks()) {
229
+ invokeRuntimeDebug("domMutation", {
230
+ operation: "property",
231
+ target: describeDebugNode(node),
232
+ key,
233
+ previousValue,
234
+ nextValue: value
235
+ });
236
+ }
364
237
  }
365
238
  __name(setProperty, "setProperty");
366
239
  function setAttribute(node, key, value) {
240
+ const previousValue = getRuntimeDebugHooks() ? readDebugValue(() => typeof node.getAttribute === "function" ? node.getAttribute(key) : void 0) : void 0;
367
241
  getRenderer().setAttribute(node, key, value);
242
+ if (getRuntimeDebugHooks()) {
243
+ invokeRuntimeDebug("domMutation", {
244
+ operation: "attribute",
245
+ target: describeDebugNode(node),
246
+ key,
247
+ previousValue,
248
+ nextValue: value
249
+ });
250
+ }
368
251
  }
369
252
  __name(setAttribute, "setAttribute");
370
253
  function spreadProps(node, props) {
@@ -405,7 +288,7 @@ function formatStyle(value) {
405
288
  __name(formatStyle, "formatStyle");
406
289
  function addEventListener(node, event, handler) {
407
290
  const renderer = getRenderer();
408
- const owner = getCurrentOwner();
291
+ const owner = (0, import_reactivity3.getCurrentOwner)();
409
292
  let bindings = eventBindings.get(node);
410
293
  if (!bindings) {
411
294
  bindings = /* @__PURE__ */ new Map();
@@ -451,9 +334,9 @@ function clear(container) {
451
334
  }
452
335
  __name(clear, "clear");
453
336
  function createComponent(component, props, source) {
454
- const owner = createOwner();
337
+ const owner = (0, import_reactivity3.createOwner)();
455
338
  const componentName = component.displayName || component.name || "anonymous";
456
- setOwnerDebugName(owner, source ? `${componentName} (${source.file}:${source.line}:${source.column})` : componentName);
339
+ (0, import_reactivity3.setOwnerDebugName)(owner, source ? `${componentName} (${source.file}:${source.line}:${source.column})` : componentName);
457
340
  owner.onError((reason) => {
458
341
  attachSourceLocation(reason, source);
459
342
  attachComponentContext(reason, componentName, owner.id);
@@ -522,8 +405,8 @@ function attachComponentContext(reason, component, ownerId) {
522
405
  }
523
406
  __name(attachComponentContext, "attachComponentContext");
524
407
  function createBlock(factory) {
525
- const owner = createOwner();
526
- setOwnerDebugName(owner, "dynamic");
408
+ const owner = (0, import_reactivity3.createOwner)();
409
+ (0, import_reactivity3.setOwnerDebugName)(owner, "dynamic");
527
410
  let node;
528
411
  try {
529
412
  node = owner.run(factory);
@@ -550,25 +433,26 @@ function disposeNodeOwner(node) {
550
433
  owner.dispose();
551
434
  }
552
435
  __name(disposeNodeOwner, "disposeNodeOwner");
553
-
554
- exports.addEventListener = addEventListener;
555
- exports.associateNodeOwner = associateNodeOwner;
556
- exports.clear = clear;
557
- exports.createBlock = createBlock;
558
- exports.createComment = createComment;
559
- exports.createComponent = createComponent;
560
- exports.createElement = createElement;
561
- exports.createText = createText;
562
- exports.disposeNodeOwner = disposeNodeOwner;
563
- exports.getRenderer = getRenderer;
564
- exports.insertBefore = insertBefore;
565
- exports.removeChild = removeChild;
566
- exports.removeEventListener = removeEventListener;
567
- exports.setAttribute = setAttribute;
568
- exports.setProperty = setProperty;
569
- exports.setRenderer = setRenderer;
570
- exports.setStaticProps = setStaticProps;
571
- exports.setTextContent = setTextContent;
572
- exports.spreadProps = spreadProps;
573
- //# sourceMappingURL=ops.cjs.map
436
+ // Annotate the CommonJS export names for ESM import in node:
437
+ 0 && (module.exports = {
438
+ addEventListener,
439
+ associateNodeOwner,
440
+ clear,
441
+ createBlock,
442
+ createComment,
443
+ createComponent,
444
+ createElement,
445
+ createText,
446
+ disposeNodeOwner,
447
+ getRenderer,
448
+ insertBefore,
449
+ removeChild,
450
+ removeEventListener,
451
+ setAttribute,
452
+ setProperty,
453
+ setRenderer,
454
+ setStaticProps,
455
+ setTextContent,
456
+ spreadProps
457
+ });
574
458
  //# sourceMappingURL=ops.cjs.map