octane 0.14.1 → 0.14.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 (39) hide show
  1. package/dist/cjs/runtime/actions.cjs +57 -4
  2. package/dist/cjs/runtime/commit.cjs +1 -0
  3. package/dist/cjs/runtime/component-slots.cjs +6 -4
  4. package/dist/cjs/runtime/context.cjs +12 -5
  5. package/dist/cjs/runtime/portals.cjs +6 -1
  6. package/dist/cjs/runtime/render.cjs +32 -3
  7. package/dist/cjs/runtime/suspense.cjs +28 -4
  8. package/dist/cjs/signals/graph.cjs +3 -0
  9. package/dist/cjs/version.cjs +1 -1
  10. package/dist/compiler/compile.js +173 -52
  11. package/dist/compiler/dom-binding-program.js +16 -7
  12. package/dist/node/runtime/actions.js +57 -4
  13. package/dist/node/runtime/commit.js +1 -0
  14. package/dist/node/runtime/component-slots.js +6 -4
  15. package/dist/node/runtime/context.js +12 -5
  16. package/dist/node/runtime/portals.js +6 -1
  17. package/dist/node/runtime/render.js +32 -3
  18. package/dist/node/runtime/suspense.js +28 -4
  19. package/dist/node/signals/graph.js +2 -0
  20. package/dist/node/signals/hydration-query-input.js +119 -0
  21. package/dist/node/version.js +1 -1
  22. package/dist/runtime/actions.js +57 -4
  23. package/dist/runtime/block.d.ts +2 -2
  24. package/dist/runtime/commit.js +1 -0
  25. package/dist/runtime/component-slots.js +6 -4
  26. package/dist/runtime/context.d.ts +5 -0
  27. package/dist/runtime/context.js +12 -5
  28. package/dist/runtime/portals.js +6 -1
  29. package/dist/runtime/render.d.ts +2 -2
  30. package/dist/runtime/render.js +32 -3
  31. package/dist/runtime/suspense.d.ts +10 -1
  32. package/dist/runtime/suspense.js +28 -4
  33. package/dist/runtime/types.d.ts +3 -3
  34. package/dist/signals/graph.d.ts +1 -0
  35. package/dist/signals/graph.js +2 -0
  36. package/dist/signals/hydration-query-input.d.ts +4 -0
  37. package/dist/signals/hydration-query-input.js +119 -0
  38. package/dist/version.js +1 -1
  39. package/package.json +6 -1
@@ -290,12 +290,65 @@ function useActionState(action, initialState, permalinkOrSlot, slot) {
290
290
  s.action = action;
291
291
  return [s.state, s.dispatch, s.isPending];
292
292
  }
293
- function findAncestorForm(block) {
293
+ function findPortalAncestor(block) {
294
+ while (block !== null && block.kind !== "portal") block = block.parentBlock;
295
+ return block;
296
+ }
297
+ function findAncestorFormInBlocks(block) {
298
+ while (block !== null) {
299
+ const root = block.startMarker;
300
+ if (root?.nodeName === "FORM") return root;
301
+ let n = block.parentNode;
302
+ let portal = findPortalAncestor(block);
303
+ while (n !== null) {
304
+ if (portal !== null && n === portal.parentNode) {
305
+ const host = portal.startMarker?.$$portalParent;
306
+ n = host ?? n.parentNode;
307
+ portal = findPortalAncestor(portal.parentBlock);
308
+ continue;
309
+ }
310
+ if (n.nodeName === "FORM") return n;
311
+ const parent = n.parentNode;
312
+ n = parent ?? (n.nodeType === 11 ? n.$$next?.parent ?? null : null);
313
+ }
314
+ block = block.parentBlock;
315
+ }
316
+ return null;
317
+ }
318
+ function findAncestorFormInDetachedHost(node, block) {
319
+ let portal = findPortalAncestor(block);
320
+ let n = node;
321
+ while (n !== null) {
322
+ if (portal !== null && n === portal.parentNode) {
323
+ const host = portal.startMarker?.$$portalParent;
324
+ n = host ?? n.parentNode;
325
+ portal = findPortalAncestor(portal.parentBlock);
326
+ continue;
327
+ }
328
+ if (n.nodeName === "FORM") return n;
329
+ n = n.parentNode;
330
+ }
331
+ return null;
332
+ }
333
+ function findAncestorForm(block, portal) {
294
334
  const start = block.startMarker;
295
335
  let n = start ? start.parentNode : block.parentNode ?? null;
296
336
  while (n) {
337
+ if (portal !== null && n === portal.parentNode) {
338
+ const host = portal.startMarker?.$$portalParent;
339
+ if (host !== void 0 && !host.isConnected) {
340
+ const localForm = findAncestorFormInDetachedHost(host, portal.parentBlock);
341
+ if (localForm !== null) return localForm;
342
+ const form = findAncestorFormInBlocks(portal.parentBlock);
343
+ if (form !== null) return form;
344
+ }
345
+ n = host ?? n.parentNode;
346
+ portal = findPortalAncestor(portal.parentBlock);
347
+ continue;
348
+ }
297
349
  if (n.nodeName === "FORM") return n;
298
- n = n.parentNode;
350
+ const parent = n.parentNode;
351
+ n = parent ?? (n.nodeType === 11 ? n.$$next?.parent ?? null : null);
299
352
  }
300
353
  return null;
301
354
  }
@@ -306,7 +359,7 @@ function useFormStatus(slot) {
306
359
  const block = import_render.CURRENT_BLOCK;
307
360
  let s = scope.hooks?.get(slot);
308
361
  if (s === void 0) {
309
- s = { form: null, listener: null };
362
+ s = { form: null, listener: null, portal: findPortalAncestor(scope.block) };
310
363
  const slotRef = s;
311
364
  (0, import_hooks.ensureHooks)(scope).set(slot, slotRef);
312
365
  (0, import_hooks.registerHookCleanup)(scope, () => {
@@ -314,7 +367,7 @@ function useFormStatus(slot) {
314
367
  FORM_STATUS_LISTENERS.get(slotRef.form)?.delete(slotRef.listener);
315
368
  });
316
369
  }
317
- const form = findAncestorForm(scope.block);
370
+ const form = findAncestorForm(scope.block, s.portal);
318
371
  if (form !== s.form) {
319
372
  if (s.form && s.listener) FORM_STATUS_LISTENERS.get(s.form)?.delete(s.listener);
320
373
  s.form = form;
@@ -284,6 +284,7 @@ function rehomeSlot(member, frag, parent) {
284
284
  }
285
285
  if (member.host !== frag) return;
286
286
  member.host = parent;
287
+ if (member.start.$$portalParent === frag) member.start.$$portalParent = parent;
287
288
  for (let n = (0, import_templates.getNextSibling)(member.start); n !== null && n !== member.end; n = (0, import_templates.getNextSibling)(n))
288
289
  if (n.$$portalParent === frag) n.$$portalParent = parent;
289
290
  }
@@ -1037,7 +1037,8 @@ function ctxDepsChanged(block) {
1037
1037
  function ctxDirectChanged(block) {
1038
1038
  const direct = block.$$ctxDirect;
1039
1039
  if (direct === null) return false;
1040
- for (const [ctx, read] of direct) {
1040
+ for (let entry = direct; entry !== null; entry = entry.next) {
1041
+ const { context: ctx, read } = entry;
1041
1042
  const version = typeof read === "number" ? read : read.version;
1042
1043
  if (ctx.$$version === version) continue;
1043
1044
  if (typeof read === "number" || ctx.$$providerVersion !== ctx.$$version || !Object.is(read.owner.$$ctxValues?.get(ctx), read.value))
@@ -1093,7 +1094,7 @@ function restampCtxDeps(block) {
1093
1094
  const reads = block.$$ctxReads;
1094
1095
  const direct = block.$$ctxDirect;
1095
1096
  const hasReads = reads !== null && reads.size > 0;
1096
- const hasDirect = direct !== null && direct.size > 0;
1097
+ const hasDirect = direct !== null;
1097
1098
  if (!hasReads && !hasDirect) return;
1098
1099
  for (let b = block.parentBlock; b !== null; b = b.parentBlock) {
1099
1100
  if (b.body?.__memo !== true && b.$$implicitBail !== true) continue;
@@ -1111,7 +1112,8 @@ function restampCtxDeps(block) {
1111
1112
  }
1112
1113
  }
1113
1114
  if (hasDirect) {
1114
- for (const [ctx, read] of direct) {
1115
+ for (let entry = direct; entry !== null; entry = entry.next) {
1116
+ const { context: ctx, read } = entry;
1115
1117
  const v = typeof read === "number" ? read : read.version;
1116
1118
  const cur = m.get(ctx);
1117
1119
  if (cur !== v) {
@@ -1132,7 +1134,7 @@ function restampCachedContextScope(scope) {
1132
1134
  restampCtxDeps(block);
1133
1135
  return;
1134
1136
  }
1135
- if (block.$$ctxDirect !== null && block.$$ctxDirect.size !== 0) {
1137
+ if (block.$$ctxDirect !== null) {
1136
1138
  restampCtxDeps(block);
1137
1139
  }
1138
1140
  }
@@ -372,12 +372,18 @@ function promoteMemoAncestry(scope) {
372
372
  block.memoInChain = true;
373
373
  (0, import_activity.forEachSubtreeChild)(scope, promoteMemoAncestry);
374
374
  }
375
+ function findDirectContextRead(direct, context) {
376
+ while (direct !== null && direct.context !== context) direct = direct.next;
377
+ return direct;
378
+ }
375
379
  function recordContextDependency(block, context) {
376
380
  if (block === null || !block.memoInChain) return;
377
381
  SKIPPED_ROW_REFRESH = import_lists.refreshSkippedRows;
378
- const direct = block.$$ctxDirect ??= /* @__PURE__ */ new Map();
379
- const previous = direct.get(context);
380
- direct.set(context, context.$$version);
382
+ const direct = findDirectContextRead(block.$$ctxDirect, context);
383
+ const previous = direct?.read;
384
+ if (direct === null) {
385
+ block.$$ctxDirect = { context, read: context.$$version, next: block.$$ctxDirect };
386
+ } else direct.read = context.$$version;
381
387
  for (let current = block; current !== null; current = current.parentBlock) {
382
388
  if (current.body?.__memo === true || current.$$implicitBail === true) {
383
389
  (current.$$ctxReads ??= /* @__PURE__ */ new Map()).set(context, context.$$version);
@@ -391,12 +397,13 @@ function recordLocalContextValue(reader, block, context, value, previous) {
391
397
  const cache = reader.$$ctxCache;
392
398
  const owner = cache === context ? reader.$$ctxCacheOwner : cache !== null && reader.$$ctxCacheOwner === null ? cache.get(context) : void 0;
393
399
  if (owner === null || owner === void 0 || owner === DEFAULT_CTX) return;
400
+ const direct = findDirectContextRead(block.$$ctxDirect, context);
394
401
  if (previous !== void 0) {
395
402
  if (previous.owner !== owner || !Object.is(previous.value, value)) return;
396
403
  previous.version = context.$$version;
397
- block.$$ctxDirect.set(context, previous);
404
+ direct.read = previous;
398
405
  } else {
399
- block.$$ctxDirect.set(context, { version: context.$$version, owner, value });
406
+ direct.read = { version: context.$$version, owner, value };
400
407
  }
401
408
  }
402
409
  let SCOPED_READ_TRACKING = false;
@@ -280,6 +280,7 @@ function renderPortalState(prev, parentBlock, target, rawBody, rawProps, host, e
280
280
  const start = document.createComment("portal");
281
281
  const end = document.createComment("/portal");
282
282
  start.$$portalEnd = end;
283
+ start.$$portalParent = host;
283
284
  const transaction = import_render.ROOT_RENDER_TRANSACTION;
284
285
  const into = transaction !== null && !transaction.aborted && !import_engine.ROOT_RENDER_ROLLBACK ? (0, import_commit.queueFrontier)(parentBlock, target, null) : target;
285
286
  into.appendChild(start);
@@ -323,7 +324,11 @@ function renderPortalState(prev, parentBlock, target, rawBody, rawProps, host, e
323
324
  }
324
325
  (0, import_signal_owners.renderBlock)(block);
325
326
  } else {
326
- if (state.host !== host) (0, import_engine.journalRootProperty)(state, "host", state.host);
327
+ if (state.host !== host) {
328
+ (0, import_engine.journalRootProperty)(state, "host", state.host);
329
+ (0, import_engine.journalRootProperty)(state.start, "$$portalParent", state.start.$$portalParent);
330
+ state.start.$$portalParent = host;
331
+ }
327
332
  state.host = host;
328
333
  if (state.block.body !== norm.body)
329
334
  (0, import_engine.journalRootProperty)(state.block, "body", state.block.body);
@@ -427,7 +427,7 @@ function renderBlockInner(block) {
427
427
  if (state?.__kind === "hydrateBlockSlot" && state.parentBlock === block && !state.independent && !state.hydrated) {
428
428
  state.contextChanged = block.$$ctxDepsEpoch !== import_context_epoch.EPOCH_CELL.value && (0, import_component_slots.ctxDirectChanged)(block);
429
429
  }
430
- block.$$ctxDirect.clear();
430
+ block.$$ctxDirect = null;
431
431
  }
432
432
  block.$$ctxDepsEpoch = import_context_epoch.EPOCH_CELL.value;
433
433
  block.currentRenderMode = keepsTransition !== null ? "urgent" : block.pendingMode ?? prevBlock?.currentRenderMode ?? "urgent";
@@ -1104,7 +1104,24 @@ function renderVisibleTry(state, source) {
1104
1104
  disarmTransitionJournal(journalCheckpoint);
1105
1105
  }
1106
1106
  }
1107
- function renderInitialSuspenseHydration(state, initial, updated = false) {
1107
+ function acceptInitialHydrationQuery(state, initial, query) {
1108
+ if (query.refined || initial.query !== query || state.pendingThenable !== query.waiting || import_suspense.initialSuspenseHydrations?.get(state) !== initial)
1109
+ return;
1110
+ (0, import_engine.journalRootProperty)(query, "refined", void 0);
1111
+ query.refined = true;
1112
+ }
1113
+ function renderInitialSuspenseHydration(state, initial, updated = false, queryCapture, refineQuery) {
1114
+ if (refineQuery !== void 0) {
1115
+ if (!refineQuery.refined) {
1116
+ if (WIP_CAPTURE === null) acceptInitialHydrationQuery(state, initial, refineQuery);
1117
+ else
1118
+ (WIP_CAPTURE.renderCleanups ??= []).push((discarded) => {
1119
+ if (!discarded) acceptInitialHydrationQuery(state, initial, refineQuery);
1120
+ });
1121
+ }
1122
+ if (import_hydration.HYDRATION_PASS !== null) import_hydration.HYDRATION_PASS.node = (0, import_templates.getNextSibling)(state.end);
1123
+ return;
1124
+ }
1108
1125
  if (state.pendingThenable !== null && ROOT_RENDER_TRANSACTION?.rootRequest === true)
1109
1126
  (0, import_commit.journalObjectOnce)(state);
1110
1127
  state.pendingThenable = null;
@@ -1118,11 +1135,14 @@ function renderInitialSuspenseHydration(state, initial, updated = false) {
1118
1135
  return;
1119
1136
  }
1120
1137
  if (initial.waits !== void 0) {
1138
+ queryCapture ??= initial.queryCapture;
1139
+ if (queryCapture !== void 0) initial.queryCapture = queryCapture;
1121
1140
  const taken = (0, import_suspense.waitForStreamedArm)(state, initial);
1122
1141
  if (taken === null) return;
1123
1142
  initial = taken;
1124
1143
  }
1125
1144
  state.idState.next = initial.idStart;
1145
+ const firstAttempt = state.branch === -1;
1126
1146
  const block = import_suspense.TRY_OPS.createBody(state, initial.start, initial.end);
1127
1147
  state.block = block;
1128
1148
  import_suspense.TRY_OPS.setBranch(state, 1);
@@ -1145,6 +1165,7 @@ function renderInitialSuspenseHydration(state, initial, updated = false) {
1145
1165
  const previousNative = (0, import_read_protocol.setNativeAdoptionResolver)(null);
1146
1166
  const diagnostics = (0, import_hydration.holdDiagnostics)();
1147
1167
  let suspended = null;
1168
+ let finishQuery = void 0;
1148
1169
  let failed = false;
1149
1170
  let failure;
1150
1171
  try {
@@ -1152,6 +1173,7 @@ function renderInitialSuspenseHydration(state, initial, updated = false) {
1152
1173
  hydration.nativeAdoption = (0, import_engine.ownNativeAdoption)(block, initial.nativeRaw);
1153
1174
  (0, import_read_protocol.setNativeAdoptionResolver)(hydration.nativeAdoption.resolve);
1154
1175
  }
1176
+ finishQuery = firstAttempt && state.env !== void 0 ? queryCapture?.(state.env) : void 0;
1155
1177
  (0, import_signal_owners.renderBlock)(block);
1156
1178
  if (hydration.deferred !== null) (0, import_hydration.claimDeferred)(hydration);
1157
1179
  (0, import_engine.drainHydrationRenderPhaseUpdates)(block, true);
@@ -1161,7 +1183,13 @@ function renderInitialSuspenseHydration(state, initial, updated = false) {
1161
1183
  } catch (error) {
1162
1184
  failed = true;
1163
1185
  failure = (0, import_hydration.hydrationFailure)(hydration, error);
1164
- if ((0, import_use.isSuspenseException)(error)) suspended = error.thenable;
1186
+ const finish = finishQuery;
1187
+ finishQuery = void 0;
1188
+ if ((0, import_use.isSuspenseException)(error)) {
1189
+ suspended = error.thenable;
1190
+ const retains = finish?.(suspended);
1191
+ if (retains !== void 0) initial.query = { waiting: suspended, retains };
1192
+ } else finish?.();
1165
1193
  if (typeof __OCTANE_PROFILE_ENABLED__ !== "undefined" && __OCTANE_PROFILE_ENABLED__)
1166
1194
  (0, import_profiling.__profileCount)(import_profiling.ProfileCounter.ROLLBACK_HYDRATION);
1167
1195
  if (transaction !== null) (0, import_commit.dropRootOps)(transaction, opsMark, retiredMark);
@@ -1185,6 +1213,7 @@ function renderInitialSuspenseHydration(state, initial, updated = false) {
1185
1213
  state.tryBlock = null;
1186
1214
  (0, import_component_slots.discardOffscreenCapture)(capture);
1187
1215
  } finally {
1216
+ finishQuery?.();
1188
1217
  (0, import_hydration.releaseDiagnostics)(diagnostics, failed && !(failure instanceof import_hydration.HydrationMismatch));
1189
1218
  if (failure instanceof import_hydration.HydrationMismatch || failure === import_hydration_input_control.INITIAL_ADOPTION_INPUT_CHANGED || suspended !== null)
1190
1219
  (0, import_hydration.discardSeeds)(hydration);
@@ -914,6 +914,7 @@ function tryBlock(parentScope, slotKey, domParent, tryBody, catchBody, pendingBo
914
914
  let supersedesInputs = false;
915
915
  let initial = state === void 0 || !import_hydration_flag.hydrationStarted ? void 0 : initialSuspenseHydrations?.get(state);
916
916
  let updated = false;
917
+ let refineQuery;
917
918
  if (state === void 0) {
918
919
  let start;
919
920
  let end;
@@ -983,9 +984,23 @@ function tryBlock(parentScope, slotKey, domParent, tryBody, catchBody, pendingBo
983
984
  if (domParent.nodeType === 11) (0, import_commit.noteFrontierMember)(domParent, newState);
984
985
  state = newState;
985
986
  } else {
986
- const unchangedCapture = initial !== void 0 && (preserveHydrationCapture === 2 || preserveHydrationCapture === 1 && initial.waits !== void 0) && hydrationInputsEqual !== void 0 && state.tryBody === tryBody && state.env !== env && !(0, import_hooks.depsChanged)(state.env, env);
987
+ const unchangedCapture = initial !== void 0 && (preserveHydrationCapture === 2 || typeof preserveHydrationCapture === "function" || preserveHydrationCapture === 1 && initial.waits !== void 0) && hydrationInputsEqual !== void 0 && state.tryBody === tryBody && state.env !== env && !(0, import_hooks.depsChanged)(state.env, env);
987
988
  const retains = state.branch === 2 || state.retrySignalOwners !== void 0;
988
- const changed = (retains || initial !== void 0) && (state.tryBody !== tryBody || state.env !== env && (initial !== void 0 && hydrationInputsEqual && state.env && env ? !(unchangedCapture && preserveHydrationCapture === 1) && !hydrationInputsEqual(state.env, env) : (0, import_hooks.depsChanged)(state.env, env)));
989
+ let changed = false;
990
+ if (retains || initial !== void 0) {
991
+ changed = state.tryBody !== tryBody;
992
+ if (!changed && state.env !== env) {
993
+ if (initial !== void 0 && hydrationInputsEqual && state.env && env) {
994
+ const equal = unchangedCapture && preserveHydrationCapture === 1 ? true : hydrationInputsEqual(state.env, env);
995
+ if (equal === 2) {
996
+ const query = initial.query;
997
+ if (query !== void 0 && state.pendingThenable === query.waiting && query.retains())
998
+ refineQuery = query;
999
+ else changed = true;
1000
+ } else changed = !equal;
1001
+ } else changed = (0, import_hooks.depsChanged)(state.env, env);
1002
+ }
1003
+ }
989
1004
  if (unchangedCapture && !changed) env = state.env;
990
1005
  supersedesInputs = retains && changed;
991
1006
  updated = initial !== void 0 && changed;
@@ -1009,7 +1024,13 @@ function tryBlock(parentScope, slotKey, domParent, tryBody, catchBody, pendingBo
1009
1024
  if (initial !== void 0) registerInitialSuspenseHydration(s, initial);
1010
1025
  }
1011
1026
  if (initial !== void 0) {
1012
- (0, import_hydration.initialSuspenseHydrationRenderer)(s, initial, updated);
1027
+ (0, import_hydration.initialSuspenseHydrationRenderer)(
1028
+ s,
1029
+ initial,
1030
+ updated,
1031
+ typeof preserveHydrationCapture === "function" ? preserveHydrationCapture : void 0,
1032
+ refineQuery
1033
+ );
1013
1034
  } else if (s.passthrough) {
1014
1035
  renderPassthroughTry(s);
1015
1036
  return s.reset;
@@ -1318,7 +1339,10 @@ function clientRenderDehydratedTry(state, outer) {
1318
1339
  function retryInitialSuspenseHydration(state, initial) {
1319
1340
  const hiddenActivity = TRY_OPS.hiddenActivity(state.parentBlock);
1320
1341
  try {
1321
- (0, import_render.renderInitialSuspenseHydration)(state, initial);
1342
+ const query = initial.query;
1343
+ const updated = query?.refined === true && state.pendingThenable === query.waiting && !query.retains();
1344
+ if (updated) (0, import_signal_owners.supersedeSignalRetryOwners)(state);
1345
+ (0, import_render.renderInitialSuspenseHydration)(state, initial, updated);
1322
1346
  } catch (error) {
1323
1347
  TRY_OPS.resumeError(state.parentBlock, error);
1324
1348
  } finally {
@@ -42,6 +42,7 @@ __export(graph_exports, {
42
42
  isThenable: () => isThenable,
43
43
  linkReads: () => linkReads,
44
44
  originalScopedNodeGet: () => originalScopedNodeGet,
45
+ originalScopedNodeStateGetter: () => originalScopedNodeStateGetter,
45
46
  pendingState: () => pendingState,
46
47
  presentDuringFlush: () => presentDuringFlush,
47
48
  promoteDeclarationView: () => promoteDeclarationView,
@@ -715,6 +716,7 @@ class ScopedNode {
715
716
  }
716
717
  const hasScopedNodeBrand = /* @__PURE__ */ (() => ScopedNode.hasNativeBrand)();
717
718
  const originalScopedNodeGet = /* @__PURE__ */ (() => ScopedNode.prototype.get)();
719
+ const originalScopedNodeStateGetter = /* @__PURE__ */ (() => Object.getOwnPropertyDescriptor(ScopedNode.prototype, "state").get)();
718
720
  function inspectNativeNode(node, read) {
719
721
  const dependencies = [];
720
722
  for (let link = node.deps; link; link = link.nextDep) {
@@ -1402,6 +1404,7 @@ function retireGraph(owner, nodes) {
1402
1404
  isThenable,
1403
1405
  linkReads,
1404
1406
  originalScopedNodeGet,
1407
+ originalScopedNodeStateGetter,
1405
1408
  pendingState,
1406
1409
  presentDuringFlush,
1407
1410
  promoteDeclarationView,
@@ -21,7 +21,7 @@ __export(version_exports, {
21
21
  version: () => version
22
22
  });
23
23
  module.exports = __toCommonJS(version_exports);
24
- const version = "0.14.1";
24
+ const version = "0.14.2";
25
25
  // Annotate the CommonJS export names for ESM import in node:
26
26
  0 && (module.exports = {
27
27
  version