@vue/compat 3.4.5 → 3.4.7

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.
package/dist/vue.cjs.js CHANGED
@@ -1940,7 +1940,9 @@ function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) {
1940
1940
  }
1941
1941
  function flushPostFlushCbs(seen) {
1942
1942
  if (pendingPostFlushCbs.length) {
1943
- const deduped = [...new Set(pendingPostFlushCbs)];
1943
+ const deduped = [...new Set(pendingPostFlushCbs)].sort(
1944
+ (a, b) => getId(a) - getId(b)
1945
+ );
1944
1946
  pendingPostFlushCbs.length = 0;
1945
1947
  if (activePostFlushCbs) {
1946
1948
  activePostFlushCbs.push(...deduped);
@@ -1950,7 +1952,6 @@ function flushPostFlushCbs(seen) {
1950
1952
  {
1951
1953
  seen = seen || /* @__PURE__ */ new Map();
1952
1954
  }
1953
- activePostFlushCbs.sort((a, b) => getId(a) - getId(b));
1954
1955
  for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {
1955
1956
  if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {
1956
1957
  continue;
@@ -3564,6 +3565,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
3564
3565
  {
3565
3566
  assertNumber(timeout, `Suspense timeout`);
3566
3567
  }
3568
+ const initialAnchor = anchor;
3567
3569
  const suspense = {
3568
3570
  vnode,
3569
3571
  parent: parentSuspense,
@@ -3571,7 +3573,6 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
3571
3573
  namespace,
3572
3574
  container,
3573
3575
  hiddenContainer,
3574
- anchor,
3575
3576
  deps: 0,
3576
3577
  pendingId: suspenseId++,
3577
3578
  timeout: typeof timeout === "number" ? timeout : -1,
@@ -3614,20 +3615,21 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
3614
3615
  move(
3615
3616
  pendingBranch,
3616
3617
  container2,
3617
- next(activeBranch),
3618
+ anchor === initialAnchor ? next(activeBranch) : anchor,
3618
3619
  0
3619
3620
  );
3620
3621
  queuePostFlushCb(effects);
3621
3622
  }
3622
3623
  };
3623
3624
  }
3624
- let { anchor: anchor2 } = suspense;
3625
3625
  if (activeBranch) {
3626
- anchor2 = next(activeBranch);
3626
+ if (parentNode(activeBranch.el) !== suspense.hiddenContainer) {
3627
+ anchor = next(activeBranch);
3628
+ }
3627
3629
  unmount(activeBranch, parentComponent2, suspense, true);
3628
3630
  }
3629
3631
  if (!delayEnter) {
3630
- move(pendingBranch, container2, anchor2, 0);
3632
+ move(pendingBranch, container2, anchor, 0);
3631
3633
  }
3632
3634
  }
3633
3635
  setActiveBranch(suspense, pendingBranch);
@@ -4149,14 +4151,9 @@ function instanceWatch(source, value, options) {
4149
4151
  cb = value.handler;
4150
4152
  options = value;
4151
4153
  }
4152
- const cur = currentInstance;
4153
- setCurrentInstance(this);
4154
+ const reset = setCurrentInstance(this);
4154
4155
  const res = doWatch(getter, cb.bind(publicThis), options);
4155
- if (cur) {
4156
- setCurrentInstance(cur);
4157
- } else {
4158
- unsetCurrentInstance();
4159
- }
4156
+ reset();
4160
4157
  return res;
4161
4158
  }
4162
4159
  function createPathGetter(ctx, path) {
@@ -4208,12 +4205,11 @@ function validateDirectiveName(name) {
4208
4205
  }
4209
4206
  }
4210
4207
  function withDirectives(vnode, directives) {
4211
- const internalInstance = currentRenderingInstance;
4212
- if (internalInstance === null) {
4208
+ if (currentRenderingInstance === null) {
4213
4209
  warn$1(`withDirectives can only be used inside render functions.`);
4214
4210
  return vnode;
4215
4211
  }
4216
- const instance = getExposeProxy(internalInstance) || internalInstance.proxy;
4212
+ const instance = getExposeProxy(currentRenderingInstance) || currentRenderingInstance.proxy;
4217
4213
  const bindings = vnode.dirs || (vnode.dirs = []);
4218
4214
  for (let i = 0; i < directives.length; i++) {
4219
4215
  let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
@@ -5008,9 +5004,9 @@ function injectHook(type, hook, target = currentInstance, prepend = false) {
5008
5004
  return;
5009
5005
  }
5010
5006
  pauseTracking();
5011
- setCurrentInstance(target);
5007
+ const reset = setCurrentInstance(target);
5012
5008
  const res = callWithAsyncErrorHandling(hook, target, type, args);
5013
- unsetCurrentInstance();
5009
+ reset();
5014
5010
  resetTracking();
5015
5011
  return res;
5016
5012
  });
@@ -6602,7 +6598,7 @@ function createCompatVue$1(createApp, createSingletonApp) {
6602
6598
  return vm;
6603
6599
  }
6604
6600
  }
6605
- Vue.version = `2.6.14-compat:${"3.4.5"}`;
6601
+ Vue.version = `2.6.14-compat:${"3.4.7"}`;
6606
6602
  Vue.config = singletonApp.config;
6607
6603
  Vue.use = (p, ...options) => {
6608
6604
  if (p && isFunction(p.install)) {
@@ -7442,12 +7438,12 @@ function resolvePropValue(options, props, key, value, instance, isAbsent) {
7442
7438
  if (key in propsDefaults) {
7443
7439
  value = propsDefaults[key];
7444
7440
  } else {
7445
- setCurrentInstance(instance);
7441
+ const reset = setCurrentInstance(instance);
7446
7442
  value = propsDefaults[key] = defaultValue.call(
7447
7443
  isCompatEnabled$1("PROPS_DEFAULT_THIS", instance) ? createPropsDefaultThis(instance, props, key) : null,
7448
7444
  props
7449
7445
  );
7450
- unsetCurrentInstance();
7446
+ reset();
7451
7447
  }
7452
7448
  } else {
7453
7449
  value = defaultValue;
@@ -8147,7 +8143,7 @@ Server rendered element contains more child nodes than client vdom.`
8147
8143
  if (props) {
8148
8144
  {
8149
8145
  for (const key in props) {
8150
- if (propHasMismatch(el, key, props[key])) {
8146
+ if (propHasMismatch(el, key, props[key], vnode)) {
8151
8147
  hasMismatch = true;
8152
8148
  }
8153
8149
  if (forcePatch && (key.endsWith("value") || key === "indeterminate") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers
@@ -8322,7 +8318,7 @@ Server rendered element contains fewer child nodes than client vdom.`
8322
8318
  };
8323
8319
  return [hydrate, hydrateNode];
8324
8320
  }
8325
- function propHasMismatch(el, key, clientValue) {
8321
+ function propHasMismatch(el, key, clientValue, vnode) {
8326
8322
  let mismatchType;
8327
8323
  let mismatchKey;
8328
8324
  let actual;
@@ -8334,14 +8330,23 @@ function propHasMismatch(el, key, clientValue) {
8334
8330
  mismatchType = mismatchKey = `class`;
8335
8331
  }
8336
8332
  } else if (key === "style") {
8337
- actual = el.getAttribute("style");
8338
- expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue));
8339
- if (actual !== expected) {
8333
+ actual = toStyleMap(el.getAttribute("style") || "");
8334
+ expected = toStyleMap(
8335
+ isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue))
8336
+ );
8337
+ if (vnode.dirs) {
8338
+ for (const { dir, value } of vnode.dirs) {
8339
+ if (dir.name === "show" && !value) {
8340
+ expected.set("display", "none");
8341
+ }
8342
+ }
8343
+ }
8344
+ if (!isMapEqual(actual, expected)) {
8340
8345
  mismatchType = mismatchKey = "style";
8341
8346
  }
8342
8347
  } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) {
8343
- actual = el.hasAttribute(key) && el.getAttribute(key);
8344
- expected = isBooleanAttr(key) ? includeBooleanAttr(clientValue) ? "" : false : clientValue == null ? false : String(clientValue);
8348
+ actual = el.hasAttribute(key) ? el.getAttribute(key) : key in el ? el[key] : "";
8349
+ expected = isBooleanAttr(key) ? includeBooleanAttr(clientValue) ? "" : false : clientValue == null ? "" : String(clientValue);
8345
8350
  if (actual !== expected) {
8346
8351
  mismatchType = `attribute`;
8347
8352
  mismatchKey = key;
@@ -8376,6 +8381,29 @@ function isSetEqual(a, b) {
8376
8381
  }
8377
8382
  return true;
8378
8383
  }
8384
+ function toStyleMap(str) {
8385
+ const styleMap = /* @__PURE__ */ new Map();
8386
+ for (const item of str.split(";")) {
8387
+ let [key, value] = item.split(":");
8388
+ key = key == null ? void 0 : key.trim();
8389
+ value = value == null ? void 0 : value.trim();
8390
+ if (key && value) {
8391
+ styleMap.set(key, value);
8392
+ }
8393
+ }
8394
+ return styleMap;
8395
+ }
8396
+ function isMapEqual(a, b) {
8397
+ if (a.size !== b.size) {
8398
+ return false;
8399
+ }
8400
+ for (const [key, value] of a) {
8401
+ if (value !== b.get(key)) {
8402
+ return false;
8403
+ }
8404
+ }
8405
+ return true;
8406
+ }
8379
8407
 
8380
8408
  let supported;
8381
8409
  let perf;
@@ -8964,7 +8992,11 @@ function baseCreateRenderer(options, createHydrationFns) {
8964
8992
  hostInsert(fragmentStartAnchor, container, anchor);
8965
8993
  hostInsert(fragmentEndAnchor, container, anchor);
8966
8994
  mountChildren(
8967
- n2.children,
8995
+ // #10007
8996
+ // such fragment like `<></>` will be compiled into
8997
+ // a fragment which doesn't have a children.
8998
+ // In this case fallback to an empty array
8999
+ n2.children || [],
8968
9000
  container,
8969
9001
  fragmentEndAnchor,
8970
9002
  parentComponent,
@@ -9832,6 +9864,7 @@ function baseCreateRenderer(options, createHydrationFns) {
9832
9864
  }
9833
9865
  return hostNextSibling(vnode.anchor || vnode.el);
9834
9866
  };
9867
+ let isFlushing = false;
9835
9868
  const render = (vnode, container, namespace) => {
9836
9869
  if (vnode == null) {
9837
9870
  if (container._vnode) {
@@ -9848,8 +9881,12 @@ function baseCreateRenderer(options, createHydrationFns) {
9848
9881
  namespace
9849
9882
  );
9850
9883
  }
9851
- flushPreFlushCbs();
9852
- flushPostFlushCbs();
9884
+ if (!isFlushing) {
9885
+ isFlushing = true;
9886
+ flushPreFlushCbs();
9887
+ flushPostFlushCbs();
9888
+ isFlushing = false;
9889
+ }
9853
9890
  container._vnode = vnode;
9854
9891
  };
9855
9892
  const internals = {
@@ -10780,8 +10817,13 @@ let setInSSRSetupState;
10780
10817
  );
10781
10818
  }
10782
10819
  const setCurrentInstance = (instance) => {
10820
+ const prev = currentInstance;
10783
10821
  internalSetCurrentInstance(instance);
10784
10822
  instance.scope.on();
10823
+ return () => {
10824
+ instance.scope.off();
10825
+ internalSetCurrentInstance(prev);
10826
+ };
10785
10827
  };
10786
10828
  const unsetCurrentInstance = () => {
10787
10829
  currentInstance && currentInstance.scope.off();
@@ -10843,7 +10885,7 @@ function setupStatefulComponent(instance, isSSR) {
10843
10885
  const { setup } = Component;
10844
10886
  if (setup) {
10845
10887
  const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;
10846
- setCurrentInstance(instance);
10888
+ const reset = setCurrentInstance(instance);
10847
10889
  pauseTracking();
10848
10890
  const setupResult = callWithErrorHandling(
10849
10891
  setup,
@@ -10855,7 +10897,7 @@ function setupStatefulComponent(instance, isSSR) {
10855
10897
  ]
10856
10898
  );
10857
10899
  resetTracking();
10858
- unsetCurrentInstance();
10900
+ reset();
10859
10901
  if (isPromise(setupResult)) {
10860
10902
  setupResult.then(unsetCurrentInstance, unsetCurrentInstance);
10861
10903
  if (isSSR) {
@@ -10963,13 +11005,13 @@ function finishComponentSetup(instance, isSSR, skipOptions) {
10963
11005
  }
10964
11006
  }
10965
11007
  if (!skipOptions) {
10966
- setCurrentInstance(instance);
11008
+ const reset = setCurrentInstance(instance);
10967
11009
  pauseTracking();
10968
11010
  try {
10969
11011
  applyOptions(instance);
10970
11012
  } finally {
10971
11013
  resetTracking();
10972
- unsetCurrentInstance();
11014
+ reset();
10973
11015
  }
10974
11016
  }
10975
11017
  if (!Component.render && instance.render === NOOP && !isSSR) {
@@ -11322,7 +11364,7 @@ function isMemoSame(cached, memo) {
11322
11364
  return true;
11323
11365
  }
11324
11366
 
11325
- const version = "3.4.5";
11367
+ const version = "3.4.7";
11326
11368
  const warn = warn$1 ;
11327
11369
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
11328
11370
  const devtools = devtools$1 ;
@@ -11771,6 +11813,9 @@ const vShow = {
11771
11813
  setDisplay(el, value);
11772
11814
  }
11773
11815
  };
11816
+ {
11817
+ vShow.name = "show";
11818
+ }
11774
11819
  function setDisplay(el, value) {
11775
11820
  el.style.display = value ? el[vShowOldKey] : "none";
11776
11821
  }
@@ -15433,7 +15478,7 @@ function onCloseTag(el, end, isImplied = false) {
15433
15478
  }
15434
15479
  }
15435
15480
  }
15436
- if (isCompatEnabled(
15481
+ if (!tokenizer.inSFCRoot && isCompatEnabled(
15437
15482
  "COMPILER_NATIVE_TEMPLATE",
15438
15483
  currentOptions
15439
15484
  ) && el.tag === "template" && !isFragmentTemplate(el)) {
@@ -16068,8 +16113,7 @@ function createTransformContext(root, {
16068
16113
  }
16069
16114
  context.parent.children.splice(removalIndex, 1);
16070
16115
  },
16071
- onNodeRemoved: () => {
16072
- },
16116
+ onNodeRemoved: NOOP,
16073
16117
  addIdentifiers(exp) {
16074
16118
  {
16075
16119
  if (isString(exp)) {
@@ -1657,14 +1657,15 @@ function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) {
1657
1657
  }
1658
1658
  function flushPostFlushCbs(seen) {
1659
1659
  if (pendingPostFlushCbs.length) {
1660
- const deduped = [...new Set(pendingPostFlushCbs)];
1660
+ const deduped = [...new Set(pendingPostFlushCbs)].sort(
1661
+ (a, b) => getId(a) - getId(b)
1662
+ );
1661
1663
  pendingPostFlushCbs.length = 0;
1662
1664
  if (activePostFlushCbs) {
1663
1665
  activePostFlushCbs.push(...deduped);
1664
1666
  return;
1665
1667
  }
1666
1668
  activePostFlushCbs = deduped;
1667
- activePostFlushCbs.sort((a, b) => getId(a) - getId(b));
1668
1669
  for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {
1669
1670
  activePostFlushCbs[postFlushIndex]();
1670
1671
  }
@@ -2617,6 +2618,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
2617
2618
  }
2618
2619
  }
2619
2620
  const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0;
2621
+ const initialAnchor = anchor;
2620
2622
  const suspense = {
2621
2623
  vnode,
2622
2624
  parent: parentSuspense,
@@ -2624,7 +2626,6 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
2624
2626
  namespace,
2625
2627
  container,
2626
2628
  hiddenContainer,
2627
- anchor,
2628
2629
  deps: 0,
2629
2630
  pendingId: suspenseId++,
2630
2631
  timeout: typeof timeout === "number" ? timeout : -1,
@@ -2655,20 +2656,21 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
2655
2656
  move(
2656
2657
  pendingBranch,
2657
2658
  container2,
2658
- next(activeBranch),
2659
+ anchor === initialAnchor ? next(activeBranch) : anchor,
2659
2660
  0
2660
2661
  );
2661
2662
  queuePostFlushCb(effects);
2662
2663
  }
2663
2664
  };
2664
2665
  }
2665
- let { anchor: anchor2 } = suspense;
2666
2666
  if (activeBranch) {
2667
- anchor2 = next(activeBranch);
2667
+ if (parentNode(activeBranch.el) !== suspense.hiddenContainer) {
2668
+ anchor = next(activeBranch);
2669
+ }
2668
2670
  unmount(activeBranch, parentComponent2, suspense, true);
2669
2671
  }
2670
2672
  if (!delayEnter) {
2671
- move(pendingBranch, container2, anchor2, 0);
2673
+ move(pendingBranch, container2, anchor, 0);
2672
2674
  }
2673
2675
  }
2674
2676
  setActiveBranch(suspense, pendingBranch);
@@ -3135,14 +3137,9 @@ function instanceWatch(source, value, options) {
3135
3137
  cb = value.handler;
3136
3138
  options = value;
3137
3139
  }
3138
- const cur = currentInstance;
3139
- setCurrentInstance(this);
3140
+ const reset = setCurrentInstance(this);
3140
3141
  const res = doWatch(getter, cb.bind(publicThis), options);
3141
- if (cur) {
3142
- setCurrentInstance(cur);
3143
- } else {
3144
- unsetCurrentInstance();
3145
- }
3142
+ reset();
3146
3143
  return res;
3147
3144
  }
3148
3145
  function createPathGetter(ctx, path) {
@@ -3189,11 +3186,10 @@ function traverse(value, depth, currentDepth = 0, seen) {
3189
3186
  }
3190
3187
 
3191
3188
  function withDirectives(vnode, directives) {
3192
- const internalInstance = currentRenderingInstance;
3193
- if (internalInstance === null) {
3189
+ if (currentRenderingInstance === null) {
3194
3190
  return vnode;
3195
3191
  }
3196
- const instance = getExposeProxy(internalInstance) || internalInstance.proxy;
3192
+ const instance = getExposeProxy(currentRenderingInstance) || currentRenderingInstance.proxy;
3197
3193
  const bindings = vnode.dirs || (vnode.dirs = []);
3198
3194
  for (let i = 0; i < directives.length; i++) {
3199
3195
  let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
@@ -3958,9 +3954,9 @@ function injectHook(type, hook, target = currentInstance, prepend = false) {
3958
3954
  return;
3959
3955
  }
3960
3956
  pauseTracking();
3961
- setCurrentInstance(target);
3957
+ const reset = setCurrentInstance(target);
3962
3958
  const res = callWithAsyncErrorHandling(hook, target, type, args);
3963
- unsetCurrentInstance();
3959
+ reset();
3964
3960
  resetTracking();
3965
3961
  return res;
3966
3962
  });
@@ -5283,7 +5279,7 @@ function createCompatVue$1(createApp, createSingletonApp) {
5283
5279
  return vm;
5284
5280
  }
5285
5281
  }
5286
- Vue.version = `2.6.14-compat:${"3.4.5"}`;
5282
+ Vue.version = `2.6.14-compat:${"3.4.7"}`;
5287
5283
  Vue.config = singletonApp.config;
5288
5284
  Vue.use = (p, ...options) => {
5289
5285
  if (p && isFunction(p.install)) {
@@ -6000,12 +5996,12 @@ function resolvePropValue(options, props, key, value, instance, isAbsent) {
6000
5996
  if (key in propsDefaults) {
6001
5997
  value = propsDefaults[key];
6002
5998
  } else {
6003
- setCurrentInstance(instance);
5999
+ const reset = setCurrentInstance(instance);
6004
6000
  value = propsDefaults[key] = defaultValue.call(
6005
6001
  isCompatEnabled$1("PROPS_DEFAULT_THIS", instance) ? createPropsDefaultThis(instance, props) : null,
6006
6002
  props
6007
6003
  );
6008
- unsetCurrentInstance();
6004
+ reset();
6009
6005
  }
6010
6006
  } else {
6011
6007
  value = defaultValue;
@@ -7180,7 +7176,11 @@ function baseCreateRenderer(options, createHydrationFns) {
7180
7176
  hostInsert(fragmentStartAnchor, container, anchor);
7181
7177
  hostInsert(fragmentEndAnchor, container, anchor);
7182
7178
  mountChildren(
7183
- n2.children,
7179
+ // #10007
7180
+ // such fragment like `<></>` will be compiled into
7181
+ // a fragment which doesn't have a children.
7182
+ // In this case fallback to an empty array
7183
+ n2.children || [],
7184
7184
  container,
7185
7185
  fragmentEndAnchor,
7186
7186
  parentComponent,
@@ -7962,6 +7962,7 @@ function baseCreateRenderer(options, createHydrationFns) {
7962
7962
  }
7963
7963
  return hostNextSibling(vnode.anchor || vnode.el);
7964
7964
  };
7965
+ let isFlushing = false;
7965
7966
  const render = (vnode, container, namespace) => {
7966
7967
  if (vnode == null) {
7967
7968
  if (container._vnode) {
@@ -7978,8 +7979,12 @@ function baseCreateRenderer(options, createHydrationFns) {
7978
7979
  namespace
7979
7980
  );
7980
7981
  }
7981
- flushPreFlushCbs();
7982
- flushPostFlushCbs();
7982
+ if (!isFlushing) {
7983
+ isFlushing = true;
7984
+ flushPreFlushCbs();
7985
+ flushPostFlushCbs();
7986
+ isFlushing = false;
7987
+ }
7983
7988
  container._vnode = vnode;
7984
7989
  };
7985
7990
  const internals = {
@@ -8850,8 +8855,13 @@ let setInSSRSetupState;
8850
8855
  );
8851
8856
  }
8852
8857
  const setCurrentInstance = (instance) => {
8858
+ const prev = currentInstance;
8853
8859
  internalSetCurrentInstance(instance);
8854
8860
  instance.scope.on();
8861
+ return () => {
8862
+ instance.scope.off();
8863
+ internalSetCurrentInstance(prev);
8864
+ };
8855
8865
  };
8856
8866
  const unsetCurrentInstance = () => {
8857
8867
  currentInstance && currentInstance.scope.off();
@@ -8878,7 +8888,7 @@ function setupStatefulComponent(instance, isSSR) {
8878
8888
  const { setup } = Component;
8879
8889
  if (setup) {
8880
8890
  const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;
8881
- setCurrentInstance(instance);
8891
+ const reset = setCurrentInstance(instance);
8882
8892
  pauseTracking();
8883
8893
  const setupResult = callWithErrorHandling(
8884
8894
  setup,
@@ -8890,7 +8900,7 @@ function setupStatefulComponent(instance, isSSR) {
8890
8900
  ]
8891
8901
  );
8892
8902
  resetTracking();
8893
- unsetCurrentInstance();
8903
+ reset();
8894
8904
  if (isPromise(setupResult)) {
8895
8905
  setupResult.then(unsetCurrentInstance, unsetCurrentInstance);
8896
8906
  if (isSSR) {
@@ -8968,13 +8978,13 @@ function finishComponentSetup(instance, isSSR, skipOptions) {
8968
8978
  }
8969
8979
  }
8970
8980
  if (!skipOptions) {
8971
- setCurrentInstance(instance);
8981
+ const reset = setCurrentInstance(instance);
8972
8982
  pauseTracking();
8973
8983
  try {
8974
8984
  applyOptions(instance);
8975
8985
  } finally {
8976
8986
  resetTracking();
8977
- unsetCurrentInstance();
8987
+ reset();
8978
8988
  }
8979
8989
  }
8980
8990
  }
@@ -9083,7 +9093,7 @@ function isMemoSame(cached, memo) {
9083
9093
  return true;
9084
9094
  }
9085
9095
 
9086
- const version = "3.4.5";
9096
+ const version = "3.4.7";
9087
9097
  const warn$1 = NOOP;
9088
9098
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
9089
9099
  const devtools = void 0;
@@ -12993,7 +13003,7 @@ function onCloseTag(el, end, isImplied = false) {
12993
13003
  }
12994
13004
  {
12995
13005
  const props = el.props;
12996
- if (isCompatEnabled(
13006
+ if (!tokenizer.inSFCRoot && isCompatEnabled(
12997
13007
  "COMPILER_NATIVE_TEMPLATE",
12998
13008
  currentOptions
12999
13009
  ) && el.tag === "template" && !isFragmentTemplate(el)) {
@@ -13602,8 +13612,7 @@ function createTransformContext(root, {
13602
13612
  }
13603
13613
  context.parent.children.splice(removalIndex, 1);
13604
13614
  },
13605
- onNodeRemoved: () => {
13606
- },
13615
+ onNodeRemoved: NOOP,
13607
13616
  addIdentifiers(exp) {
13608
13617
  {
13609
13618
  if (isString(exp)) {