@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/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,72 @@ 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 (key === "value" && node.tagName === "SELECT") {
229
+ scheduleSelectValueSync(node, value);
230
+ }
231
+ if (getRuntimeDebugHooks()) {
232
+ invokeRuntimeDebug("domMutation", {
233
+ operation: "property",
234
+ target: describeDebugNode(node),
235
+ key,
236
+ previousValue,
237
+ nextValue: value
238
+ });
239
+ }
364
240
  }
365
241
  __name(setProperty, "setProperty");
242
+ var pendingSelectValues = /* @__PURE__ */ new WeakMap();
243
+ var selectSyncScheduled = /* @__PURE__ */ new WeakSet();
244
+ function scheduleSelectValueSync(node, value) {
245
+ pendingSelectValues.set(node, value);
246
+ if (selectSyncScheduled.has(node)) return;
247
+ selectSyncScheduled.add(node);
248
+ queueMicrotask(() => {
249
+ selectSyncScheduled.delete(node);
250
+ if (!pendingSelectValues.has(node)) return;
251
+ const pending = pendingSelectValues.get(node);
252
+ pendingSelectValues.delete(node);
253
+ getRenderer().setProperty(node, "value", pending);
254
+ });
255
+ }
256
+ __name(scheduleSelectValueSync, "scheduleSelectValueSync");
366
257
  function setAttribute(node, key, value) {
258
+ const previousValue = getRuntimeDebugHooks() ? readDebugValue(() => typeof node.getAttribute === "function" ? node.getAttribute(key) : void 0) : void 0;
367
259
  getRenderer().setAttribute(node, key, value);
260
+ if (getRuntimeDebugHooks()) {
261
+ invokeRuntimeDebug("domMutation", {
262
+ operation: "attribute",
263
+ target: describeDebugNode(node),
264
+ key,
265
+ previousValue,
266
+ nextValue: value
267
+ });
268
+ }
368
269
  }
369
270
  __name(setAttribute, "setAttribute");
370
271
  function spreadProps(node, props) {
@@ -405,7 +306,7 @@ function formatStyle(value) {
405
306
  __name(formatStyle, "formatStyle");
406
307
  function addEventListener(node, event, handler) {
407
308
  const renderer = getRenderer();
408
- const owner = getCurrentOwner();
309
+ const owner = (0, import_reactivity3.getCurrentOwner)();
409
310
  let bindings = eventBindings.get(node);
410
311
  if (!bindings) {
411
312
  bindings = /* @__PURE__ */ new Map();
@@ -415,6 +316,7 @@ function addEventListener(node, event, handler) {
415
316
  if (previous && previous.original === handler && previous.owner === owner) return;
416
317
  if (previous) renderer.removeEventListener(node, event, previous.handler);
417
318
  const listener = owner ? (reason) => {
319
+ if (owner.disposed) return;
418
320
  try {
419
321
  owner.run(() => handler(reason));
420
322
  } catch (error) {
@@ -451,9 +353,9 @@ function clear(container) {
451
353
  }
452
354
  __name(clear, "clear");
453
355
  function createComponent(component, props, source) {
454
- const owner = createOwner();
356
+ const owner = (0, import_reactivity3.createOwner)();
455
357
  const componentName = component.displayName || component.name || "anonymous";
456
- setOwnerDebugName(owner, source ? `${componentName} (${source.file}:${source.line}:${source.column})` : componentName);
358
+ (0, import_reactivity3.setOwnerDebugName)(owner, source ? `${componentName} (${source.file}:${source.line}:${source.column})` : componentName);
457
359
  owner.onError((reason) => {
458
360
  attachSourceLocation(reason, source);
459
361
  attachComponentContext(reason, componentName, owner.id);
@@ -461,7 +363,7 @@ function createComponent(component, props, source) {
461
363
  });
462
364
  let node;
463
365
  try {
464
- node = owner.run(() => component(props));
366
+ node = owner.run(() => (0, import_reactivity3.untrack)(() => component(props)));
465
367
  } catch (error) {
466
368
  owner.dispose();
467
369
  attachSourceLocation(error, source);
@@ -476,7 +378,7 @@ function createComponent(component, props, source) {
476
378
  parent: null,
477
379
  refresh() {
478
380
  const previous = instance.node;
479
- const next = owner.run(() => component(props));
381
+ const next = owner.run(() => (0, import_reactivity3.untrack)(() => component(props)));
480
382
  if (instance.parent && !isVobsFragment(previous) && !isVobsFragment(next)) {
481
383
  getRenderer().insertBefore(instance.parent, next, previous);
482
384
  getRenderer().removeChild(instance.parent, previous);
@@ -522,8 +424,8 @@ function attachComponentContext(reason, component, ownerId) {
522
424
  }
523
425
  __name(attachComponentContext, "attachComponentContext");
524
426
  function createBlock(factory) {
525
- const owner = createOwner();
526
- setOwnerDebugName(owner, "dynamic");
427
+ const owner = (0, import_reactivity3.createOwner)();
428
+ (0, import_reactivity3.setOwnerDebugName)(owner, "dynamic");
527
429
  let node;
528
430
  try {
529
431
  node = owner.run(factory);
@@ -550,25 +452,26 @@ function disposeNodeOwner(node) {
550
452
  owner.dispose();
551
453
  }
552
454
  __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
455
+ // Annotate the CommonJS export names for ESM import in node:
456
+ 0 && (module.exports = {
457
+ addEventListener,
458
+ associateNodeOwner,
459
+ clear,
460
+ createBlock,
461
+ createComment,
462
+ createComponent,
463
+ createElement,
464
+ createText,
465
+ disposeNodeOwner,
466
+ getRenderer,
467
+ insertBefore,
468
+ removeChild,
469
+ removeEventListener,
470
+ setAttribute,
471
+ setProperty,
472
+ setRenderer,
473
+ setStaticProps,
474
+ setTextContent,
475
+ spreadProps
476
+ });
574
477
  //# sourceMappingURL=ops.cjs.map