]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
Merge remote-tracking branch 'upstream/minor'
authorRizumu Ayaka <rizumu@ayaka.moe>
Fri, 29 Dec 2023 13:03:21 +0000 (21:03 +0800)
committerRizumu Ayaka <rizumu@ayaka.moe>
Fri, 29 Dec 2023 13:03:21 +0000 (21:03 +0800)
44 files changed:
1  2 
package.json
packages/compiler-core/package.json
packages/compiler-core/src/ast.ts
packages/compiler-core/src/codegen.ts
packages/compiler-core/src/index.ts
packages/compiler-core/src/options.ts
packages/compiler-core/src/utils.ts
packages/compiler-dom/package.json
packages/compiler-dom/src/errors.ts
packages/compiler-dom/src/index.ts
packages/compiler-dom/src/transforms/vOn.ts
packages/compiler-sfc/package.json
packages/compiler-sfc/src/compileScript.ts
packages/compiler-ssr/package.json
packages/reactivity/package.json
packages/runtime-core/__tests__/vnode.spec.ts
packages/runtime-core/package.json
packages/runtime-core/src/apiCreateApp.ts
packages/runtime-core/src/compat/props.ts
packages/runtime-core/src/compat/renderFn.ts
packages/runtime-core/src/component.ts
packages/runtime-core/src/componentOptions.ts
packages/runtime-core/src/componentProps.ts
packages/runtime-core/src/componentPublicInstance.ts
packages/runtime-core/src/componentRenderUtils.ts
packages/runtime-core/src/directives.ts
packages/runtime-core/src/helpers/renderSlot.ts
packages/runtime-core/src/index.ts
packages/runtime-core/src/renderer.ts
packages/runtime-core/src/vnode.ts
packages/runtime-core/src/warning.ts
packages/runtime-dom/package.json
packages/server-renderer/package.json
packages/shared/package.json
packages/template-explorer/src/index.ts
packages/template-explorer/src/options.ts
packages/vue-compat/package.json
packages/vue/package.json
pnpm-lock.yaml
rollup.config.js
scripts/dev.js
scripts/prepare-cjs.js
scripts/usage-size.ts
vitest.config.ts

diff --cc package.json
index 8f46270d0fcac779e38fa765a7a19e5f6934f3b2,b50b1c58e2d1c768b3aa728a1ab4bd86f223bb56..62ddb7d7aa7a336f8cc210ff09b786c669982378
@@@ -9,13 -9,13 +9,13 @@@
      "build-dts": "tsc -p tsconfig.build.json && rollup -c rollup.dts.config.js",
      "clean": "rimraf packages/*/dist temp .eslintcache",
      "size": "run-s \"size-*\" && tsx scripts/usage-size.ts",
 -    "size-global": "node scripts/build.js vue runtime-dom -f global -p --size",
 -    "size-esm-runtime": "node scripts/build.js vue -f esm-bundler-runtime",
 -    "size-esm": "node scripts/build.js runtime-dom runtime-core reactivity shared -f esm-bundler",
 +    "size-global": "node scripts/build.js vue vue-vapor runtime-dom runtime-vapor -f global -p --size",
 +    "size-esm-runtime": "node scripts/build.js vue vue-vapor -f esm-bundler-runtime",
 +    "size-esm": "node scripts/build.js runtime-dom runtime-vapor runtime-core reactivity shared -f esm-bundler",
      "check": "tsc --incremental --noEmit",
-     "lint": "eslint --cache --ext .ts packages/*/{src,__tests__}/**.ts",
-     "format": "prettier --write --cache \"**/*.[tj]s?(x)\"",
-     "format-check": "prettier --check --cache \"**/*.[tj]s?(x)\"",
+     "lint": "eslint --cache --ext .js,.ts,.tsx . --ignore-path .gitignore",
+     "format": "prettier --write --cache .",
+     "format-check": "prettier --check --cache .",
      "test": "vitest",
      "test-unit": "vitest -c vitest.unit.config.ts",
      "test-e2e": "node scripts/build.js vue -f global -d && vitest -c vitest.e2e.config.ts",
Simple merge
Simple merge
index 765b20b553e0d31d1c3c6f37375f56462d869a43,4447e67aafad145e088d1aeba61b59f610ba2b29..821c85d4cf2e29d018d50184fe595e2e5f16aaaf
@@@ -69,15 -69,11 +69,15 @@@ export interface CodegenResult 
    map?: RawSourceMap
  }
  
 -enum NewlineType {
 +export enum NewlineType {
 +  /** Start with `\n` */
    Start = 0,
 +  /** Ends with `\n` */
    End = -1,
 +  /** No `\n` included */
    None = -2,
-   Unknown = -3
 +  /** Don't know, calc it */
+   Unknown = -3,
  }
  
  export interface CodegenContext
index d4f2f3d12bfea50c4597a76714fd249fa0fe6c43,ef4e54cf2d7175c5d680c38a112a25bb91ed163c..4fdcd4052c0249423492cf323b218b71a31bcfb6
@@@ -19,22 -19,15 +19,22 @@@ export 
    createStructuralDirectiveTransform,
    type NodeTransform,
    type StructuralDirectiveTransform,
-   type DirectiveTransform
+   type DirectiveTransform,
  } from './transform'
 -export { generate, type CodegenContext, type CodegenResult } from './codegen'
 +export {
 +  generate,
 +  NewlineType,
 +  type CodegenContext,
-   type CodegenResult
++  type CodegenResult,
 +} from './codegen'
  export {
    ErrorCodes,
    errorMessages,
    createCompilerError,
 +  defaultOnError,
 +  defaultOnWarn,
    type CoreCompilerError,
-   type CompilerError
+   type CompilerError,
  } from './errors'
  
  export * from './ast'
@@@ -76,5 -69,4 +76,5 @@@ export 
    checkCompatEnabled,
    warnDeprecation,
    CompilerDeprecationTypes,
-   type CompilerCompatOptions
++  type CompilerCompatOptions,
  } from './compat/compatConfig'
Simple merge
index cb4067c4d005b1ddbcca060abd1ba54f95b7b937,99a2c5b61a89974b730a90922483b3f382d608f6..77708a4105383d18bcb12fd38dbe3b2b85d78600
@@@ -153,17 -153,11 +153,17 @@@ export const isMemberExpressionBrowser 
  }
  
  export const isMemberExpressionNode = __BROWSER__
 -  ? (NOOP as any as (path: string, context: TransformContext) => boolean)
 -  : (path: string, context: TransformContext): boolean => {
 +  ? (NOOP as any as (
 +      path: string,
-       options: Pick<TransformContext, 'expressionPlugins'>
++      options: Pick<TransformContext, 'expressionPlugins'>,
 +    ) => boolean)
 +  : (
 +      path: string,
-       options: Pick<TransformContext, 'expressionPlugins'>
++      options: Pick<TransformContext, 'expressionPlugins'>,
 +    ): boolean => {
        try {
          let ret: Expression = parseExpression(path, {
-           plugins: options.expressionPlugins
 -          plugins: context.expressionPlugins,
++          plugins: options.expressionPlugins,
          })
          ret = unwrapTSNode(ret) as Expression
          return (
Simple merge
index 8fb7e36ed6d7dfbf04a415b12e7a0705a0871c92,b47624840abe1e34b0619ff1c04d661394ef7bd3..15641e531af717fd3a0c6238d74162c2055ea176
@@@ -60,7 -60,4 +60,7 @@@ export const DOMErrorMessages: Record<D
    [DOMErrorCodes.X_V_SHOW_NO_EXPRESSION]: `v-show is missing expression.`,
    [DOMErrorCodes.X_TRANSITION_INVALID_CHILDREN]: `<Transition> expects exactly one child element or component.`,
    [DOMErrorCodes.X_IGNORED_SIDE_EFFECT_TAG]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`,
-   [DOMErrorCodes.__EXTEND_POINT__]: ``
 +
 +  // just to fulfill types
++  [DOMErrorCodes.__EXTEND_POINT__]: ``,
  }
index c2505ca5e1b51ff24fcdd021dd179988c67ca8b9,a3a738a8fb13fa2338a8c3413db73ecaf7203559..01d3eebe9da7d9f89916b55d502cd0e69e254bf9
@@@ -71,7 -71,6 +71,7 @@@ export { transformStyle } from './trans
  export {
    createDOMCompilerError,
    DOMErrorCodes,
-   DOMErrorMessages
+   DOMErrorMessages,
  } from './errors'
 +export { resolveModifiers } from './transforms/vOn'
  export * from '@vue/compiler-core'
index 8fec0c91b1d6aba9188791aac78cbde589547541,88d2c5db74113e63bb1585df5107588ca3b104f7..8a77ee0d2fe24c9851d216f6ea406e82b4016545
@@@ -1,20 -1,21 +1,20 @@@
  import {
 -  type SimpleExpressionNode,
+   CompilerDeprecationTypes,
+   type DirectiveTransform,
+   type ExpressionNode,
+   NodeTypes,
+   type SourceLocation,
+   type TransformContext,
    transformOn as baseTransform,
-   DirectiveTransform,
-   createObjectProperty,
+   checkCompatEnabled,
    createCallExpression,
-   createSimpleExpression,
-   NodeTypes,
    createCompoundExpression,
-   ExpressionNode,
+   createObjectProperty,
+   createSimpleExpression,
    isStaticExp,
-   CompilerDeprecationTypes,
-   TransformContext,
-   SourceLocation,
-   checkCompatEnabled
  } from '@vue/compiler-core'
- import { V_ON_WITH_MODIFIERS, V_ON_WITH_KEYS } from '../runtimeHelpers'
- import { makeMap, capitalize, isString } from '@vue/shared'
+ import { V_ON_WITH_KEYS, V_ON_WITH_MODIFIERS } from '../runtimeHelpers'
 -import { capitalize, makeMap } from '@vue/shared'
++import { capitalize, isString, makeMap } from '@vue/shared'
  
  const isEventOptionModifier = /*#__PURE__*/ makeMap(`passive,once,capture`)
  const isNonKeyModifier = /*#__PURE__*/ makeMap(
  const maybeKeyModifier = /*#__PURE__*/ makeMap('left,right')
  const isKeyboardEvent = /*#__PURE__*/ makeMap(
    `onkeyup,onkeydown,onkeypress`,
-   true
+   true,
  )
  
 -const resolveModifiers = (
 -  key: ExpressionNode,
 +export const resolveModifiers = (
 +  key: ExpressionNode | string,
    modifiers: string[],
 -  context: TransformContext,
 +  context: TransformContext | null,
-   loc: SourceLocation
+   loc: SourceLocation,
  ) => {
    const keyModifiers = []
    const nonKeyModifiers = []
Simple merge
Simple merge
Simple merge
index 78429b40401db3187dee9df814b23cd41d20b8a1,653613ddb2ef58bf345f562f382452bff7fe8f30..525a449d8a37f75e2d6d39a791ad2c7029217881
@@@ -6,13 -3,17 +3,16 @@@ import 
    Fragment,
    Text,
    cloneVNode,
+   createBlock,
+   createVNode,
+   isBlockTreeEnabled,
    mergeProps,
    normalizeVNode,
+   openBlock,
    transformVNodeArgs,
-   isBlockTreeEnabled
  } from '../src/vnode'
- import { ShapeFlags, PatchFlags, Data } from '@vue/shared'
- import { h, reactive, isReactive, setBlockTracking, ref, withCtx } from '../src'
 -import type { Data } from '../src/component'
 -import { PatchFlags, ShapeFlags } from '@vue/shared'
++import { type Data, PatchFlags, ShapeFlags } from '@vue/shared'
+ import { h, isReactive, reactive, ref, setBlockTracking, withCtx } from '../src'
  import { createApp, nodeOps, serializeInner } from '@vue/runtime-test'
  import { setCurrentRenderingInstance } from '../src/componentRenderContext'
  
Simple merge
index d888e40ec3430669f912a12264e9155931290ee5,b99d06e01ff5465b311869ae53e6db74345df6e1..7da2bfb132145ff47bd8214b109b68851b083d0a
@@@ -1,32 -1,33 +1,32 @@@
  import {
-   ConcreteComponent,
+   type Component,
+   type ComponentInternalInstance,
+   type ConcreteComponent,
 -  type Data,
+   getExposeProxy,
    validateComponentName,
-   Component,
-   ComponentInternalInstance,
-   getExposeProxy
  } from './component'
- import {
+ import type {
    ComponentOptions,
    MergedComponentOptions,
-   RuntimeCompilerOptions
+   RuntimeCompilerOptions,
  } from './componentOptions'
- import {
+ import type {
    ComponentCustomProperties,
-   ComponentPublicInstance
+   ComponentPublicInstance,
  } from './componentPublicInstance'
- import { Directive, validateDirectiveName } from './directives'
- import { ElementNamespace, RootRenderFunction } from './renderer'
- import { InjectionKey } from './apiInject'
+ import { type Directive, validateDirectiveName } from './directives'
+ import type { ElementNamespace, RootRenderFunction } from './renderer'
+ import type { InjectionKey } from './apiInject'
  import { warn } from './warning'
- import { createVNode, cloneVNode, VNode } from './vnode'
- import { RootHydrateFunction } from './hydration'
+ import { type VNode, cloneVNode, createVNode } from './vnode'
+ import type { RootHydrateFunction } from './hydration'
  import { devtoolsInitApp, devtoolsUnmountApp } from './devtools'
- import { isFunction, NO, isObject, extend, Data } from '@vue/shared'
 -import { NO, extend, isFunction, isObject } from '@vue/shared'
++import { type Data, NO, extend, isFunction, isObject } from '@vue/shared'
  import { version } from '.'
  import { installAppCompatProperties } from './compat/global'
- import { NormalizedPropsOptions } from './componentProps'
- import { ObjectEmitsOptions } from './componentEmits'
- import { DefineComponent } from './apiDefineComponent'
+ import type { NormalizedPropsOptions } from './componentProps'
+ import type { ObjectEmitsOptions } from './componentEmits'
+ import type { DefineComponent } from './apiDefineComponent'
  
  export interface App<HostElement = any> {
    version: string
index b0167c233113a020772cc9047731f172fe75af74,0330e33aa1592873aa14ecc84406fd115c1e8580..78dad9d32e5c8f28c139325a82815942a42b1e76
@@@ -1,7 -1,10 +1,10 @@@
- import { isArray, Data } from '@vue/shared'
 -import { isArray } from '@vue/shared'
++import { type Data, isArray } from '@vue/shared'
  import { inject } from '../apiInject'
- import { ComponentInternalInstance } from '../component'
- import { ComponentOptions, resolveMergedOptions } from '../componentOptions'
 -import type { ComponentInternalInstance, Data } from '../component'
++import type { ComponentInternalInstance } from '../component'
+ import {
+   type ComponentOptions,
+   resolveMergedOptions,
+ } from '../componentOptions'
  import { DeprecationTypes, warnDeprecation } from './compatConfig'
  
  export function createPropsDefaultThis(
index e1745cf294668dbc69fbaa5556cfff7c5db26b28,52a19d08f8e9f9d4620111c58e03b6b179458af7..3b98b690867da22150453e6a70ff2704dfb7582b
@@@ -1,4 -1,5 +1,6 @@@
  import {
++  type Data,
+   ShapeFlags,
    extend,
    hyphenate,
    isArray,
@@@ -15,13 -14,14 +15,13 @@@ import type 
    Component,
    ComponentInternalInstance,
    ComponentOptions,
-   InternalRenderFunction
 -  Data,
+   InternalRenderFunction,
  } from '../component'
  import { currentRenderingInstance } from '../componentRenderContext'
- import { DirectiveArguments, withDirectives } from '../directives'
+ import { type DirectiveArguments, withDirectives } from '../directives'
  import {
    resolveDirective,
-   resolveDynamicComponent
+   resolveDynamicComponent,
  } from '../helpers/resolveAssets'
  import {
    Comment,
index 7ceeaf39094ad203d721de628dfc1b156b19f19a,6595df8fd5547daa32b2ed25fe4e7e736e5375b6..527965c0807933848e848c07a79e276c0f43b9e9
@@@ -32,57 -36,58 +36,57 @@@ import 
  } from './componentSlots'
  import { warn } from './warning'
  import { ErrorCodes, callWithErrorHandling, handleError } from './errorHandling'
- import { AppContext, createAppContext, AppConfig } from './apiCreateApp'
- import { Directive, validateDirectiveName } from './directives'
  import {
+   type AppConfig,
+   type AppContext,
+   createAppContext,
+ } from './apiCreateApp'
+ import { type Directive, validateDirectiveName } from './directives'
+ import {
+   type ComponentOptions,
+   type ComputedOptions,
+   type MethodOptions,
    applyOptions,
-   ComponentOptions,
-   ComputedOptions,
-   MethodOptions,
-   resolveMergedOptions
+   resolveMergedOptions,
  } from './componentOptions'
  import {
-   EmitsOptions,
-   ObjectEmitsOptions,
-   EmitFn,
+   type EmitFn,
+   type EmitsOptions,
+   type EmitsToProps,
+   type ObjectEmitsOptions,
+   type ShortEmitsToObject,
    emit,
    normalizeEmitsOptions,
-   EmitsToProps,
-   ShortEmitsToObject
  } from './componentEmits'
  import {
++  type Data,
    EMPTY_OBJ,
-   isArray,
-   isFunction,
-   NOOP,
-   isObject,
+   type IfAny,
    NO,
-   makeMap,
-   isPromise,
+   NOOP,
    ShapeFlags,
    extend,
    getGlobalThis,
-   IfAny,
-   Data
+   isArray,
+   isFunction,
+   isObject,
+   isPromise,
+   makeMap,
  } from '@vue/shared'
- import { SuspenseBoundary } from './components/Suspense'
- import { CompilerOptions } from '@vue/compiler-core'
+ import type { SuspenseBoundary } from './components/Suspense'
+ import type { CompilerOptions } from '@vue/compiler-core'
  import { markAttrsAccessed } from './componentRenderUtils'
  import { currentRenderingInstance } from './componentRenderContext'
- import { startMeasure, endMeasure } from './profiling'
+ import { endMeasure, startMeasure } from './profiling'
  import { convertLegacyRenderFn } from './compat/renderFn'
  import {
-   CompatConfig,
+   type CompatConfig,
    globalCompatConfig,
-   validateCompatConfig
+   validateCompatConfig,
  } from './compat/compatConfig'
- import { SchedulerJob } from './scheduler'
- import { LifecycleHooks } from './enums'
+ import type { SchedulerJob } from './scheduler'
+ import type { LifecycleHooks } from './enums'
  
 -export type Data = Record<string, unknown>
 -
  /**
   * Public utility type for extracting the instance type of a component.
   * Works with all valid component definition types. This is intended to replace
index 4e9829091403c572f7a3a4f70668c3c26b33820c,65b952b0b51ea84c9dc6739b2edb086e684b840a..0827c1cbb1eb019881868563868a7e1392f1c300
@@@ -1,70 -1,70 +1,70 @@@
- import {
+ import type {
+   Component,
    ComponentInternalInstance,
-   SetupContext,
    ComponentInternalOptions,
-   Component,
    ConcreteComponent,
-   InternalRenderFunction
 -  Data,
+   InternalRenderFunction,
+   SetupContext,
  } from './component'
  import {
-   isFunction,
++  type Data,
+   type LooseRequired,
+   NOOP,
+   type Prettify,
    extend,
-   isString,
-   isObject,
    isArray,
-   NOOP,
+   isFunction,
+   isObject,
    isPromise,
-   LooseRequired,
-   Prettify,
-   Data
+   isString,
  } from '@vue/shared'
- import { isRef, Ref } from '@vue/reactivity'
+ import { type Ref, isRef } from '@vue/reactivity'
  import { computed } from './apiComputed'
  import {
+   type WatchCallback,
+   type WatchOptions,
+   createPathGetter,
    watch,
-   WatchOptions,
-   WatchCallback,
-   createPathGetter
  } from './apiWatch'
- import { provide, inject } from './apiInject'
+ import { inject, provide } from './apiInject'
  import {
+   type DebuggerHook,
+   type ErrorCapturedHook,
+   onActivated,
    onBeforeMount,
-   onMounted,
+   onBeforeUnmount,
    onBeforeUpdate,
-   onUpdated,
+   onDeactivated,
    onErrorCaptured,
+   onMounted,
    onRenderTracked,
-   onBeforeUnmount,
-   onUnmounted,
-   onActivated,
-   onDeactivated,
    onRenderTriggered,
-   DebuggerHook,
-   ErrorCapturedHook,
-   onServerPrefetch
+   onServerPrefetch,
+   onUnmounted,
+   onUpdated,
  } from './apiLifecycle'
  import {
+   type ComputedGetter,
+   type WritableComputedOptions,
    reactive,
-   ComputedGetter,
-   WritableComputedOptions
  } from '@vue/reactivity'
- import {
+ import type {
    ComponentObjectPropsOptions,
-   ExtractPropTypes,
+   ComponentPropsOptions,
    ExtractDefaultPropTypes,
-   ComponentPropsOptions
+   ExtractPropTypes,
  } from './componentProps'
- import { EmitsOptions, EmitsToProps } from './componentEmits'
- import { Directive } from './directives'
+ import type { EmitsOptions, EmitsToProps } from './componentEmits'
+ import type { Directive } from './directives'
  import {
-   CreateComponentPublicInstance,
-   ComponentPublicInstance,
+   type ComponentPublicInstance,
+   type CreateComponentPublicInstance,
+   type IntersectionMixin,
+   type UnwrapMixinsType,
    isReservedPrefix,
-   IntersectionMixin,
-   UnwrapMixinsType
  } from './componentPublicInstance'
  import { warn } from './warning'
- import { VNodeChild } from './vnode'
+ import type { VNodeChild } from './vnode'
  import { callWithAsyncErrorHandling } from './errorHandling'
  import { deepMergeData } from './compat/data'
  import { DeprecationTypes } from './compat/compatConfig'
index c0dbc2d76a6868023e2cbf345f2ed2e8f33d31d3,2124853f1238f305957071c95437c04e81e94ef1..e49bf0dcdbb1d85b684ba0e322cde238498713d5
@@@ -1,38 -1,38 +1,38 @@@
  import {
-   toRaw,
+   TriggerOpTypes,
    shallowReactive,
+   shallowReadonly,
+   toRaw,
    trigger,
-   TriggerOpTypes,
-   shallowReadonly
  } from '@vue/reactivity'
  import {
++  type Data,
+   EMPTY_ARR,
    EMPTY_OBJ,
+   type IfAny,
+   PatchFlags,
    camelize,
-   hyphenate,
    capitalize,
-   isString,
-   isFunction,
-   isArray,
-   isObject,
-   hasOwn,
-   toRawType,
-   PatchFlags,
-   makeMap,
-   isReservedProp,
-   EMPTY_ARR,
    def,
    extend,
+   hasOwn,
+   hyphenate,
+   isArray,
+   isFunction,
+   isObject,
    isOn,
-   IfAny,
-   Data
+   isReservedProp,
+   isString,
+   makeMap,
+   toRawType,
  } from '@vue/shared'
  import { warn } from './warning'
  import {
-   ComponentInternalInstance,
-   ComponentOptions,
-   ConcreteComponent,
+   type ComponentInternalInstance,
+   type ComponentOptions,
+   type ConcreteComponent,
 -  type Data,
    setCurrentInstance,
-   unsetCurrentInstance
+   unsetCurrentInstance,
  } from './component'
  import { isEmitListener } from './componentEmits'
  import { InternalObjectKey } from './vnode'
index 77c42ff6ab586f2689a25164fd2c86d488336fe8,8cefecc7aea0352f7f3e87b24efa1173a739bc8a..c190810c6987e19fbcf44f38f54e1155b747e17c
@@@ -1,47 -1,51 +1,51 @@@
  import {
-   ComponentInternalInstance,
+   type ComponentInternalInstance,
 -  type Data,
    getExposeProxy,
-   isStatefulComponent
+   isStatefulComponent,
  } from './component'
  import { nextTick, queueJob } from './scheduler'
- import { instanceWatch, WatchOptions, WatchStopHandle } from './apiWatch'
  import {
+   type WatchOptions,
+   type WatchStopHandle,
+   instanceWatch,
+ } from './apiWatch'
+ import {
++  type Data,
    EMPTY_OBJ,
-   hasOwn,
-   isGloballyAllowed,
+   type IfAny,
    NOOP,
+   type Prettify,
+   type UnionToIntersection,
    extend,
-   isString,
+   hasOwn,
    isFunction,
-   UnionToIntersection,
-   Prettify,
-   IfAny,
-   Data
+   isGloballyAllowed,
+   isString,
  } from '@vue/shared'
  import {
-   toRaw,
+   type ShallowUnwrapRef,
+   TrackOpTypes,
+   type UnwrapNestedRefs,
    shallowReadonly,
+   toRaw,
    track,
-   TrackOpTypes,
-   ShallowUnwrapRef,
-   UnwrapNestedRefs
  } from '@vue/reactivity'
  import {
-   ExtractComputedReturns,
-   ComponentOptionsBase,
-   ComputedOptions,
-   MethodOptions,
-   ComponentOptionsMixin,
-   OptionTypesType,
-   OptionTypesKeys,
+   type ComponentInjectOptions,
+   type ComponentOptionsBase,
+   type ComponentOptionsMixin,
+   type ComputedOptions,
+   type ExtractComputedReturns,
+   type InjectToObject,
+   type MergedComponentOptionsOverride,
+   type MethodOptions,
+   type OptionTypesKeys,
+   type OptionTypesType,
    resolveMergedOptions,
    shouldCacheAccess,
-   MergedComponentOptionsOverride,
-   InjectToObject,
-   ComponentInjectOptions
  } from './componentOptions'
- import { EmitsOptions, EmitFn } from './componentEmits'
- import { SlotsType, UnwrapSlotsType } from './componentSlots'
+ import type { EmitFn, EmitsOptions } from './componentEmits'
+ import type { SlotsType, UnwrapSlotsType } from './componentSlots'
  import { markAttrsAccessed } from './componentRenderUtils'
  import { currentRenderingInstance } from './componentRenderContext'
  import { warn } from './warning'
index 675f1590652ee6049b54e07a85e4626bc6d866ea,e07a31ee2023430f7e01211cddd986931016e96f..90c95f68280606269839ddda15f5919120985084
@@@ -1,29 -1,24 +1,29 @@@
  import {
-   ComponentInternalInstance,
-   FunctionalComponent,
-   getComponentName
+   type ComponentInternalInstance,
 -  type Data,
+   type FunctionalComponent,
+   getComponentName,
  } from './component'
  import {
-   VNode,
-   normalizeVNode,
-   createVNode,
    Comment,
+   type VNode,
+   type VNodeArrayChildren,
+   blockStack,
    cloneVNode,
-   VNodeArrayChildren,
+   createVNode,
    isVNode,
-   blockStack
+   normalizeVNode,
  } from './vnode'
- import { handleError, ErrorCodes } from './errorHandling'
+ import { ErrorCodes, handleError } from './errorHandling'
 -import { PatchFlags, ShapeFlags, isModelListener, isOn } from '@vue/shared'
 +import {
++  type Data,
 +  PatchFlags,
 +  ShapeFlags,
-   isOn,
 +  isModelListener,
-   Data
++  isOn,
 +} from '@vue/shared'
  import { warn } from './warning'
  import { isHmrUpdating } from './hmr'
- import { NormalizedProps } from './componentProps'
+ import type { NormalizedProps } from './componentProps'
  import { isEmitListener } from './componentEmits'
  import { setCurrentRenderingInstance } from './componentRenderContext'
  import {
index 496b558503daf3e690b85f454adff0473d383228,a3b44d4c8faf6a659ce7153ed62f93bde531d28b..2bd457aae577086c3c8d2e0b63854191c174dd39
@@@ -11,13 -11,17 +11,18 @@@ return withDirectives(h(comp), 
  ])
  */
  
- import { VNode } from './vnode'
- import { isFunction, EMPTY_OBJ, isBuiltInDirective, Data } from '@vue/shared'
+ import type { VNode } from './vnode'
 -import { EMPTY_OBJ, isBuiltInDirective, isFunction } from '@vue/shared'
 -import { warn } from './warning'
+ import {
 -  type ComponentInternalInstance,
+   type Data,
 -  getExposeProxy,
 -} from './component'
++  EMPTY_OBJ,
++  isBuiltInDirective,
++  isFunction,
++} from '@vue/shared'
 +import { warn } from './warning'
- import { ComponentInternalInstance, getExposeProxy } from './component'
++import { type ComponentInternalInstance, getExposeProxy } from './component'
  import { currentRenderingInstance } from './componentRenderContext'
- import { callWithAsyncErrorHandling, ErrorCodes } from './errorHandling'
- import { ComponentPublicInstance } from './componentPublicInstance'
+ import { ErrorCodes, callWithAsyncErrorHandling } from './errorHandling'
+ import type { ComponentPublicInstance } from './componentPublicInstance'
  import { mapCompatDirectiveHook } from './compat/customDirective'
  import { pauseTracking, resetTracking } from '@vue/reactivity'
  import { traverse } from './apiWatch'
index 1d8618800d0ca946fc266a6987387c75e0c62184,8a7608219d9d1dbdf05b54d0ca15de089ab1572f..49a92aa1b9b40d627ffb0d2b61bbe89d9c3189b5
@@@ -1,18 -1,19 +1,18 @@@
- import { Slots, RawSlots } from '../componentSlots'
 -import type { Data } from '../component'
+ import type { RawSlots, Slots } from '../componentSlots'
  import {
-   ContextualRenderFn,
-   currentRenderingInstance
+   type ContextualRenderFn,
+   currentRenderingInstance,
  } from '../componentRenderContext'
  import {
    Comment,
+   Fragment,
+   type VNode,
+   type VNodeArrayChildren,
+   createBlock,
    isVNode,
-   VNodeArrayChildren,
    openBlock,
-   createBlock,
-   Fragment,
-   VNode
  } from '../vnode'
- import { PatchFlags, SlotFlags, Data } from '@vue/shared'
 -import { PatchFlags, SlotFlags } from '@vue/shared'
++import { type Data, PatchFlags, SlotFlags } from '@vue/shared'
  import { warn } from '../warning'
  import { createVNode } from '@vue/runtime-core'
  import { isAsyncWrapper } from '../apiAsyncComponent'
index 98d1fe849b0116810b72e4847d3458127d7bf21d,8e49771d3c1a1cc14d403b734d872d9bd14f129f..f67b557278b79c61e44e51ccba06c853f9163ea3
@@@ -297,7 -299,6 +299,7 @@@ export type 
    ObjectDirective,
    FunctionDirective,
    DirectiveArguments,
-   DirectiveModifiers
++  DirectiveModifiers,
  } from './directives'
  export type { SuspenseBoundary } from './components/Suspense'
  export type {
index c2bf0dbac376783e343d6663ca3b7b1b4347778a,fa1f08c3c9c8a03ee5cbea6ca67e40f92bd1d0a3..0d79e7645486de27ed5e7081eeaa418abdb0eaa7
@@@ -1,67 -1,67 +1,67 @@@
  import {
-   Text,
-   Fragment,
    Comment,
+   Fragment,
+   Static,
+   Text,
+   type VNode,
+   type VNodeArrayChildren,
+   type VNodeHook,
+   type VNodeProps,
    cloneIfMounted,
-   normalizeVNode,
-   VNode,
-   VNodeArrayChildren,
    createVNode,
+   invokeVNodeHook,
    isSameVNodeType,
-   Static,
-   VNodeHook,
-   VNodeProps,
-   invokeVNodeHook
+   normalizeVNode,
  } from './vnode'
  import {
-   ComponentInternalInstance,
-   ComponentOptions,
+   type ComponentInternalInstance,
+   type ComponentOptions,
 -  type Data,
    createComponentInstance,
-   setupComponent
+   setupComponent,
  } from './component'
  import {
    filterSingleRoot,
    renderComponentRoot,
    shouldUpdateComponent,
-   updateHOCHostEl
+   updateHOCHostEl,
  } from './componentRenderUtils'
  import {
-   EMPTY_OBJ,
++  type Data,
    EMPTY_ARR,
-   isReservedProp,
+   EMPTY_OBJ,
+   NOOP,
    PatchFlags,
    ShapeFlags,
-   NOOP,
+   getGlobalThis,
    invokeArrayFns,
    isArray,
-   getGlobalThis,
-   Data
+   isReservedProp,
  } from '@vue/shared'
  import {
-   queueJob,
-   queuePostFlushCb,
+   type SchedulerJob,
    flushPostFlushCbs,
-   invalidateJob,
    flushPreFlushCbs,
-   SchedulerJob
+   invalidateJob,
+   queueJob,
+   queuePostFlushCb,
  } from './scheduler'
- import { pauseTracking, resetTracking, ReactiveEffect } from '@vue/reactivity'
+ import { ReactiveEffect, pauseTracking, resetTracking } from '@vue/reactivity'
  import { updateProps } from './componentProps'
  import { updateSlots } from './componentSlots'
- import { pushWarningContext, popWarningContext, warn } from './warning'
- import { createAppAPI, CreateAppFunction } from './apiCreateApp'
+ import { popWarningContext, pushWarningContext, warn } from './warning'
+ import { type CreateAppFunction, createAppAPI } from './apiCreateApp'
  import { setRef } from './rendererTemplateRef'
  import {
-   SuspenseBoundary,
+   type SuspenseBoundary,
+   type SuspenseImpl,
    queueEffectWithSuspense,
-   SuspenseImpl
  } from './components/Suspense'
- import { TeleportImpl, TeleportVNode } from './components/Teleport'
- import { isKeepAlive, KeepAliveContext } from './components/KeepAlive'
- import { registerHMR, unregisterHMR, isHmrUpdating } from './hmr'
- import { createHydrationFunctions, RootHydrateFunction } from './hydration'
+ import type { TeleportImpl, TeleportVNode } from './components/Teleport'
+ import { type KeepAliveContext, isKeepAlive } from './components/KeepAlive'
+ import { isHmrUpdating, registerHMR, unregisterHMR } from './hmr'
+ import { type RootHydrateFunction, createHydrationFunctions } from './hydration'
  import { invokeDirectiveHook } from './directives'
- import { startMeasure, endMeasure } from './profiling'
+ import { endMeasure, startMeasure } from './profiling'
  import {
    devtoolsComponentAdded,
    devtoolsComponentRemoved,
index 533fb600b1d6f99b8ebbab9d638ee543334e6a29,178ceec41bd1f28cec11a0da3d61f7544da869e2..a8aa50ced933781add6090c29f84052bea3d6c41
@@@ -1,43 -1,53 +1,53 @@@
  import {
-   isArray,
-   isFunction,
-   isString,
-   isObject,
++  type Data,
    EMPTY_ARR,
-   extend,
-   normalizeClass,
-   normalizeStyle,
    PatchFlags,
    ShapeFlags,
    SlotFlags,
+   extend,
+   isArray,
+   isFunction,
+   isObject,
    isOn,
-   Data
+   isString,
+   normalizeClass,
+   normalizeStyle,
  } from '@vue/shared'
  import {
-   ComponentInternalInstance,
-   ConcreteComponent,
-   ClassComponent,
-   Component,
-   isClassComponent
+   type ClassComponent,
+   type Component,
+   type ComponentInternalInstance,
+   type ConcreteComponent,
 -  type Data,
+   isClassComponent,
  } from './component'
- import { RawSlots } from './componentSlots'
- import { isProxy, Ref, toRaw, ReactiveFlags, isRef } from '@vue/reactivity'
- import { AppContext } from './apiCreateApp'
+ import type { RawSlots } from './componentSlots'
  import {
-   Suspense,
-   SuspenseImpl,
+   type ReactiveFlags,
+   type Ref,
+   isProxy,
+   isRef,
+   toRaw,
+ } from '@vue/reactivity'
+ import type { AppContext } from './apiCreateApp'
+ import {
+   type Suspense,
+   type SuspenseBoundary,
+   type SuspenseImpl,
    isSuspense,
-   SuspenseBoundary
  } from './components/Suspense'
- import { DirectiveBinding } from './directives'
- import { TransitionHooks } from './components/BaseTransition'
+ import type { DirectiveBinding } from './directives'
+ import type { TransitionHooks } from './components/BaseTransition'
  import { warn } from './warning'
- import { Teleport, TeleportImpl, isTeleport } from './components/Teleport'
+ import {
+   type Teleport,
+   type TeleportImpl,
+   isTeleport,
+ } from './components/Teleport'
  import {
    currentRenderingInstance,
-   currentScopeId
+   currentScopeId,
  } from './componentRenderContext'
- import { RendererNode, RendererElement } from './renderer'
+ import type { RendererElement, RendererNode } from './renderer'
  import { NULL_DYNAMIC_COMPONENT } from './helpers/resolveAssets'
  import { hmrDirtyComponents } from './hmr'
  import { convertLegacyComponent } from './compat/component'
index 9007da2a78c0115b2cd4ce7d19a3789295e71de6,16928387dfb290a6be74740bd7f18dd45c7c9a57..14f1b020a40828070ddc64c6779054c2b8714e0d
@@@ -1,12 -1,13 +1,12 @@@
- import { VNode } from './vnode'
+ import type { VNode } from './vnode'
  import {
-   ComponentInternalInstance,
-   ConcreteComponent,
-   formatComponentName
+   type ComponentInternalInstance,
+   type ConcreteComponent,
 -  type Data,
+   formatComponentName,
  } from './component'
- import { isString, isFunction, Data } from '@vue/shared'
- import { toRaw, isRef, pauseTracking, resetTracking } from '@vue/reactivity'
- import { callWithErrorHandling, ErrorCodes } from './errorHandling'
 -import { isFunction, isString } from '@vue/shared'
++import { type Data, isFunction, isString } from '@vue/shared'
+ import { isRef, pauseTracking, resetTracking, toRaw } from '@vue/reactivity'
+ import { ErrorCodes, callWithErrorHandling } from './errorHandling'
  
  type ComponentVNode = VNode & {
    type: ConcreteComponent
Simple merge
Simple merge
Simple merge
index 90c030bfd926712c613adccfe55b5d6ab477ba5f,988712d623ca076144afcce0c4bc55c686d3c399..fb16a9bf4f89b31b953acaa2b33efa7ee37bab2b
@@@ -1,12 -1,15 +1,13 @@@
- import * as m from 'monaco-editor'
- import { CompilerError } from '@vue/compiler-dom'
- import { compile, CompilerOptions } from '@vue/compiler-vapor'
+ import type * as m from 'monaco-editor'
 -import {
 -  type CompilerError,
 -  type CompilerOptions,
 -  compile,
 -} from '@vue/compiler-dom'
 -import { compile as ssrCompile } from '@vue/compiler-ssr'
++import type { CompilerError } from '@vue/compiler-dom'
++import { type CompilerOptions, compile } from '@vue/compiler-vapor'
 +// import { compile as ssrCompile } from '@vue/compiler-ssr'
++
  import {
-   defaultOptions,
    compilerOptions,
+   defaultOptions,
    initOptions,
-   ssrMode
+   ssrMode,
  } from './options'
  import { toRaw, watchEffect } from '@vue/runtime-dom'
  import { SourceMapConsumer } from 'source-map-js'
index 46c0d9263d3479f78bc2fabd3a47409c742dd007,e3cc6173a8a3fc95860116a011aa7ed7d76c7a45..84fdce7cd660c0f66900fc8884304f4035621198
@@@ -1,5 -1,5 +1,5 @@@
- import { h, reactive, createApp, ref } from 'vue'
- import { CompilerOptions } from '@vue/compiler-vapor'
+ import { createApp, h, reactive, ref } from 'vue'
 -import type { CompilerOptions } from '@vue/compiler-dom'
++import type { CompilerOptions } from '@vue/compiler-vapor'
  import { BindingTypes } from '@vue/compiler-core'
  
  export const ssrMode = ref(false)
Simple merge
Simple merge
diff --cc pnpm-lock.yaml
index 9c84fbf77dd678b74db8e4f94976333ae33559e9,b74310a8e607548bb472db3a110dfd87a7ce0e46..9acf0841f6e6aab2f7d5144d733944f93335d0e4
@@@ -46,10 -46,13 +46,13 @@@ importers
          version: 20.10.5
        '@types/semver':
          specifier: ^7.5.5
 -        version: 7.5.5
 +        version: 7.5.6
+       '@typescript-eslint/eslint-plugin':
+         specifier: ^6.16.0
 -        version: 6.16.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.2.2)
++        version: 6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.2.2)
        '@typescript-eslint/parser':
          specifier: ^6.15.0
 -        version: 6.15.0(eslint@8.56.0)(typescript@5.2.2)
 +        version: 6.16.0(eslint@8.56.0)(typescript@5.2.2)
        '@vitest/coverage-istanbul':
          specifier: ^1.1.0
          version: 1.1.0(vitest@1.1.0)
        eslint-define-config:
          specifier: ^1.24.1
          version: 1.24.1
 -        version: /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)
+       eslint-plugin-import:
+         specifier: npm:eslint-plugin-i@^2.29.1
++        version: /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)
        eslint-plugin-jest:
          specifier: ^27.6.0
-         version: 27.6.0(eslint@8.56.0)(typescript@5.2.2)
+         version: 27.6.0(@typescript-eslint/eslint-plugin@6.16.0)(eslint@8.56.0)(typescript@5.2.2)
        estree-walker:
          specifier: ^2.0.2
          version: 2.0.2
@@@ -1634,8 -1592,37 +1640,37 @@@ packages
      dev: true
      optional: true
  
 -  /@typescript-eslint/eslint-plugin@6.16.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.2.2):
++  /@typescript-eslint/eslint-plugin@6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.2.2):
+     resolution: {integrity: sha512-O5f7Kv5o4dLWQtPX4ywPPa+v9G+1q1x8mz0Kr0pXUtKsevo+gIJHLkGc8RxaZWtP8RrhwhSNIWThnW42K9/0rQ==}
+     engines: {node: ^16.0.0 || >=18.0.0}
+     peerDependencies:
+       '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
+       eslint: ^7.0.0 || ^8.0.0
+       typescript: '*'
+     peerDependenciesMeta:
+       typescript:
+         optional: true
+     dependencies:
+       '@eslint-community/regexpp': 4.9.1
 -      '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.2.2)
++      '@typescript-eslint/parser': 6.16.0(eslint@8.56.0)(typescript@5.2.2)
+       '@typescript-eslint/scope-manager': 6.16.0
+       '@typescript-eslint/type-utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2)
+       '@typescript-eslint/utils': 6.16.0(eslint@8.56.0)(typescript@5.2.2)
+       '@typescript-eslint/visitor-keys': 6.16.0
+       debug: 4.3.4
+       eslint: 8.56.0
+       graphemer: 1.4.0
+       ignore: 5.2.4
+       natural-compare: 1.4.0
+       semver: 7.5.4
+       ts-api-utils: 1.0.3(typescript@5.2.2)
+       typescript: 5.2.2
+     transitivePeerDependencies:
+       - supports-color
+     dev: true
 -  /@typescript-eslint/parser@6.15.0(eslint@8.56.0)(typescript@5.2.2):
 -    resolution: {integrity: sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==}
 +  /@typescript-eslint/parser@6.16.0(eslint@8.56.0)(typescript@5.2.2):
 +    resolution: {integrity: sha512-H2GM3eUo12HpKZU9njig3DF5zJ58ja6ahj1GoHEHOgQvYxzoFJJEvC1MQ7T2l9Ha+69ZSOn7RTxOdpC/y3ikMw==}
      engines: {node: ^16.0.0 || >=18.0.0}
      peerDependencies:
        eslint: ^7.0.0 || ^8.0.0
        - typescript
      dev: true
  
 -      '@types/semver': 7.5.5
+   /@typescript-eslint/utils@6.16.0(eslint@8.56.0)(typescript@5.2.2):
+     resolution: {integrity: sha512-T83QPKrBm6n//q9mv7oiSvy/Xq/7Hyw9SzSEhMHJwznEmQayfBM87+oAlkNAMEO7/MjIwKyOHgBJbxB0s7gx2A==}
+     engines: {node: ^16.0.0 || >=18.0.0}
+     peerDependencies:
+       eslint: ^7.0.0 || ^8.0.0
+     dependencies:
+       '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
+       '@types/json-schema': 7.0.14
++      '@types/semver': 7.5.6
+       '@typescript-eslint/scope-manager': 6.16.0
+       '@typescript-eslint/types': 6.16.0
+       '@typescript-eslint/typescript-estree': 6.16.0(typescript@5.2.2)
+       eslint: 8.56.0
+       semver: 7.5.4
+     transitivePeerDependencies:
+       - supports-color
+       - typescript
+     dev: true
    /@typescript-eslint/visitor-keys@5.62.0:
      resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
      engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
      engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>= 8.6.0'}
      dev: true
  
-   /eslint-plugin-jest@27.6.0(eslint@8.56.0)(typescript@5.2.2):
+   /eslint-import-resolver-node@0.3.9:
+     resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+     dependencies:
+       debug: 3.2.7
 -      is-core-module: 2.13.1
++      is-core-module: 2.13.0
+       resolve: 1.22.8
+     transitivePeerDependencies:
+       - supports-color
+     dev: true
 -  /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0):
++  /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.16.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0):
+     resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
+     engines: {node: '>=4'}
+     peerDependencies:
+       '@typescript-eslint/parser': '*'
+       eslint: '*'
+       eslint-import-resolver-node: '*'
+       eslint-import-resolver-typescript: '*'
+       eslint-import-resolver-webpack: '*'
+     peerDependenciesMeta:
+       '@typescript-eslint/parser':
+         optional: true
+       eslint:
+         optional: true
+       eslint-import-resolver-node:
+         optional: true
+       eslint-import-resolver-typescript:
+         optional: true
+       eslint-import-resolver-webpack:
+         optional: true
+     dependencies:
 -      '@typescript-eslint/parser': 6.15.0(eslint@8.56.0)(typescript@5.2.2)
++      '@typescript-eslint/parser': 6.16.0(eslint@8.56.0)(typescript@5.2.2)
+       debug: 3.2.7
+       eslint: 8.56.0
+       eslint-import-resolver-node: 0.3.9
+     transitivePeerDependencies:
+       - supports-color
+     dev: true
 -  /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.15.0)(eslint@8.56.0):
++  /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.16.0)(eslint@8.56.0):
+     resolution: {integrity: sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==}
+     engines: {node: '>=12'}
+     peerDependencies:
+       eslint: ^7.2.0 || ^8
+     dependencies:
+       debug: 4.3.4
+       doctrine: 3.0.0
+       eslint: 8.56.0
+       eslint-import-resolver-node: 0.3.9
 -      eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.15.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0)
++      eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.16.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0)
+       get-tsconfig: 4.7.2
+       is-glob: 4.0.3
+       minimatch: 3.1.2
+       semver: 7.5.4
+     transitivePeerDependencies:
+       - '@typescript-eslint/parser'
+       - eslint-import-resolver-typescript
+       - eslint-import-resolver-webpack
+       - supports-color
+     dev: true
+   /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.16.0)(eslint@8.56.0)(typescript@5.2.2):
      resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==}
      engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
      peerDependencies:
        jest:
          optional: true
      dependencies:
 -      '@typescript-eslint/eslint-plugin': 6.16.0(@typescript-eslint/parser@6.15.0)(eslint@8.56.0)(typescript@5.2.2)
++      '@typescript-eslint/eslint-plugin': 6.16.0(@typescript-eslint/parser@6.16.0)(eslint@8.56.0)(typescript@5.2.2)
        '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.2.2)
        eslint: 8.56.0
      transitivePeerDependencies:
index a8fd4170534d73fd5870d17b250dfc8978e5a70e,29fd844b96099568fd3242281572afd878c55ed7..5c898035e2ca07bf7447732376719cebc9844fa3
@@@ -148,43 -148,9 +148,43 @@@ function createConfig(format, output, p
    // Rollup to complain for non-ESM targets, so we use separate entries for
    // esm vs. non-esm builds.
    if (isCompatPackage && (isBrowserESMBuild || isBundlerESMBuild)) {
 -    entryFile = /runtime$/.test(format)
 -      ? `src/esm-runtime.ts`
 -      : `src/esm-index.ts`
 +    entryFile = `esm-${entryFile}`
 +  }
 +  entryFile = 'src/' + entryFile
 +
 +  return {
 +    input: resolve(entryFile),
 +    // Global and Browser ESM builds inlines everything so that they can be
 +    // used alone.
 +    external: resolveExternal(),
 +    plugins: [
 +      json({
-         namedExports: false
++        namedExports: false,
 +      }),
 +      alias({
-         entries
++        entries,
 +      }),
 +      enumPlugin,
 +      ...resolveReplace(),
 +      esbuild({
 +        tsconfig: path.resolve(__dirname, 'tsconfig.json'),
 +        sourceMap: output.sourcemap,
 +        minify: false,
 +        target: isServerRenderer || isNodeBuild ? 'es2019' : 'es2015',
-         define: resolveDefine()
++        define: resolveDefine(),
 +      }),
 +      ...resolveNodePlugins(),
-       ...plugins
++      ...plugins,
 +    ],
 +    output,
 +    onwarn(msg, warn) {
 +      if (msg.code !== 'CIRCULAR_DEPENDENCY') {
 +        warn(msg)
 +      }
 +    },
 +    treeshake: {
-       moduleSideEffects: false
-     }
++      moduleSideEffects: false,
++    },
    }
  
    function resolveDefine() {
  
  function createProductionConfig(/** @type {PackageFormat} */ format) {
    return createConfig(format, {
-     file: resolve(`dist/${name}.${format}.prod.js`)
 +    ...outputConfigs[format],
 -    format: outputConfigs[format].format,
+     file: resolve(`dist/${name}.${format}.prod.js`),
    })
  }
  
@@@ -351,8 -352,8 +351,8 @@@ function createMinifiedConfig(/** @typ
    return createConfig(
      format,
      {
-       file: outputConfigs[format].file.replace(/\.js$/, '.prod.js')
 +      ...outputConfigs[format],
 -      format: outputConfigs[format].format,
+       file: outputConfigs[format].file.replace(/\.js$/, '.prod.js'),
      },
      [
        terser({
diff --cc scripts/dev.js
index 4b4e73a1f3682486bd213c5773debc2a0231fb9f,2c3cdaf95e2e7f8957e7f36f36b0f4c978357354..abc7e048ed5b2193d46b8f4a51654ab96dd67fae
@@@ -30,104 -31,101 +30,104 @@@ const postfix = format.endsWith('-runti
    ? `runtime.${format.replace(/-runtime$/, '')}`
    : format
  
 -const outfile = resolve(
 -  __dirname,
 -  `../packages/${target}/dist/${
 -    target === 'vue-compat' ? `vue` : target
 -  }.${postfix}.${prod ? `prod.` : ``}js`,
 -)
 -const relativeOutfile = relative(process.cwd(), outfile)
 +for (const target of targets) {
 +  const pkg = require(`../packages/${target}/package.json`)
 +  const outfile = resolve(
 +    __dirname,
 +    `../packages/${target}/dist/${
 +      target === 'vue-compat' ? `vue` : target
-     }.${postfix}.${prod ? `prod.` : ``}js`
++    }.${postfix}.${prod ? `prod.` : ``}js`,
 +  )
 +  const relativeOutfile = relative(process.cwd(), outfile)
  
 -// resolve externals
 -// TODO this logic is largely duplicated from rollup.config.js
 -/** @type {string[]} */
 -let external = []
 -if (!inlineDeps) {
 -  // cjs & esm-bundler: external all deps
 -  if (format === 'cjs' || format.includes('esm-bundler')) {
 -    external = [
 -      ...external,
 -      ...Object.keys(pkg.dependencies || {}),
 -      ...Object.keys(pkg.peerDependencies || {}),
 -      // for @vue/compiler-sfc / server-renderer
 -      'path',
 -      'url',
 -      'stream',
 -    ]
 -  }
 +  // resolve externals
 +  // TODO this logic is largely duplicated from rollup.config.js
 +  /** @type {string[]} */
 +  let external = []
 +  if (!inlineDeps) {
 +    // cjs & esm-bundler: external all deps
 +    if (format === 'cjs' || format.includes('esm-bundler')) {
 +      external = [
 +        ...external,
 +        ...Object.keys(pkg.dependencies || {}),
 +        ...Object.keys(pkg.peerDependencies || {}),
 +        // for @vue/compiler-sfc / server-renderer
 +        'path',
 +        'url',
-         'stream'
++        'stream',
 +      ]
 +    }
  
 -  if (target === 'compiler-sfc') {
 -    const consolidatePkgPath = require.resolve(
 -      '@vue/consolidate/package.json',
 -      {
 -        paths: [resolve(__dirname, `../packages/${target}/`)],
 -      },
 -    )
 -    const consolidateDeps = Object.keys(
 -      require(consolidatePkgPath).devDependencies,
 -    )
 -    external = [
 -      ...external,
 -      ...consolidateDeps,
 -      'fs',
 -      'vm',
 -      'crypto',
 -      'react-dom/server',
 -      'teacup/lib/express',
 -      'arc-templates/dist/es5',
 -      'then-pug',
 -      'then-jade',
 -    ]
 +    if (target === 'compiler-sfc') {
 +      const consolidatePkgPath = require.resolve(
 +        '@vue/consolidate/package.json',
 +        {
-           paths: [resolve(__dirname, `../packages/${target}/`)]
-         }
++          paths: [resolve(__dirname, `../packages/${target}/`)],
++        },
 +      )
 +      const consolidateDeps = Object.keys(
-         require(consolidatePkgPath).devDependencies
++        require(consolidatePkgPath).devDependencies,
 +      )
 +      external = [
 +        ...external,
 +        ...consolidateDeps,
 +        'fs',
 +        'vm',
 +        'crypto',
 +        'react-dom/server',
 +        'teacup/lib/express',
 +        'arc-templates/dist/es5',
 +        'then-pug',
-         'then-jade'
++        'then-jade',
 +      ]
 +    }
    }
 -}
 -/** @type {Array<import('esbuild').Plugin>} */
 -const plugins = [
 -  {
 -    name: 'log-rebuild',
 -    setup(build) {
 -      build.onEnd(() => {
 -        console.log(`built: ${relativeOutfile}`)
 -      })
 +  /** @type {Array<import('esbuild').Plugin>} */
 +  const plugins = [
 +    {
 +      name: 'log-rebuild',
 +      setup(build) {
 +        build.onEnd(() => {
 +          console.log(`built: ${relativeOutfile}`)
 +        })
-       }
-     }
++      },
+     },
 -  },
 -]
 +  ]
  
 -if (format !== 'cjs' && pkg.buildOptions?.enableNonBrowserBranches) {
 -  plugins.push(polyfillNode())
 -}
 +  if (format !== 'cjs' && pkg.buildOptions?.enableNonBrowserBranches) {
 +    plugins.push(polyfillNode())
 +  }
  
 -esbuild
 -  .context({
 -    entryPoints: [resolve(__dirname, `../packages/${target}/src/index.ts`)],
 -    outfile,
 -    bundle: true,
 -    external,
 -    sourcemap: true,
 -    format: outputFormat,
 -    globalName: pkg.buildOptions?.name,
 -    platform: format === 'cjs' ? 'node' : 'browser',
 -    plugins,
 -    define: {
 -      __COMMIT__: `"dev"`,
 -      __VERSION__: `"${pkg.version}"`,
 -      __DEV__: prod ? `false` : `true`,
 -      __TEST__: `false`,
 -      __BROWSER__: String(
 -        format !== 'cjs' && !pkg.buildOptions?.enableNonBrowserBranches,
 -      ),
 -      __GLOBAL__: String(format === 'global'),
 -      __ESM_BUNDLER__: String(format.includes('esm-bundler')),
 -      __ESM_BROWSER__: String(format.includes('esm-browser')),
 -      __NODE_JS__: String(format === 'cjs'),
 -      __SSR__: String(format === 'cjs' || format.includes('esm-bundler')),
 -      __COMPAT__: String(target === 'vue-compat'),
 -      __FEATURE_SUSPENSE__: `true`,
 -      __FEATURE_OPTIONS_API__: `true`,
 -      __FEATURE_PROD_DEVTOOLS__: `false`,
 -      __FEATURE_PROD_HYDRATION_MISMATCH_DETAILS__: `false`,
 -    },
 -  })
 -  .then(ctx => ctx.watch())
 +  esbuild
 +    .context({
 +      entryPoints: [resolve(__dirname, `../packages/${target}/src/index.ts`)],
 +      outfile,
 +      bundle: true,
 +      external,
 +      sourcemap: true,
 +      format: outputFormat,
 +      globalName: pkg.buildOptions?.name,
 +      platform: format === 'cjs' ? 'node' : 'browser',
 +      plugins,
 +      define: {
 +        __COMMIT__: `"dev"`,
 +        __VERSION__: `"${pkg.version}"`,
 +        __DEV__: prod ? `false` : `true`,
 +        __TEST__: `false`,
 +        __BROWSER__: String(
-           format !== 'cjs' && !pkg.buildOptions?.enableNonBrowserBranches
++          format !== 'cjs' && !pkg.buildOptions?.enableNonBrowserBranches,
 +        ),
 +        __GLOBAL__: String(format === 'global'),
 +        __ESM_BUNDLER__: String(format.includes('esm-bundler')),
 +        __ESM_BROWSER__: String(format.includes('esm-browser')),
 +        __NODE_JS__: String(format === 'cjs'),
 +        __SSR__: String(format === 'cjs' || format.includes('esm-bundler')),
 +        __COMPAT__: String(target === 'vue-compat'),
 +        __FEATURE_SUSPENSE__: `true`,
 +        __FEATURE_OPTIONS_API__: `true`,
 +        __FEATURE_PROD_DEVTOOLS__: `false`,
-         __FEATURE_PROD_HYDRATION_MISMATCH_DETAILS__: `false`
-       }
++        __FEATURE_PROD_HYDRATION_MISMATCH_DETAILS__: `false`,
++      },
 +    })
 +    .then(ctx => ctx.watch())
 +}
index 736bb8bed06b59d6c86130a16e24cf110ef90537,b28705f3464a4a0bf0985ff1aedf7e6d9a8840c7..3e427e2b77f1b06d68f8ab6fd1071cb7734a0ffa
@@@ -6,8 -6,7 +6,8 @@@ const packagesToCheck = 
    'compiler-core',
    'compiler-dom',
    'compiler-ssr',
-   'shared'
 +  'compiler-vapor',
+   'shared',
  ]
  
  let allFilesPresent = true
index a25cfb430095f6b99fa781b0c874b5616cc65930,7eddbeb6696421f68640c8ca35da405aad53daf8..95c08175c97fceafaf9d5c02c497d86d306f3352
@@@ -7,10 -7,7 +7,10 @@@ import replace from '@rollup/plugin-rep
  import { brotliCompressSync, gzipSync } from 'node:zlib'
  
  const sizeDir = path.resolve('temp/size')
 -const entry = path.resolve('./packages/vue/dist/vue.runtime.esm-bundler.js')
 +const vue = path.resolve('./packages/vue/dist/vue.runtime.esm-bundler.js')
 +const vapor = path.resolve(
-   './packages/vue-vapor/dist/vue-vapor.runtime.esm-bundler.js'
++  './packages/vue-vapor/dist/vue-vapor.runtime.esm-bundler.js',
 +)
  
  interface Preset {
    name: string
  }
  
  const presets: Preset[] = [
 -  { name: 'createApp', imports: ['createApp'] },
 -  { name: 'createSSRApp', imports: ['createSSRApp'] },
 -  { name: 'defineCustomElement', imports: ['defineCustomElement'] },
 +  { name: 'createApp', imports: ['createApp'], from: vue },
 +  { name: 'createSSRApp', imports: ['createSSRApp'], from: vue },
 +  {
 +    name: 'defineCustomElement',
 +    imports: ['defineCustomElement'],
-     from: vue
++    from: vue,
 +  },
 +  { name: 'vapor', imports: '*', from: vapor },
    {
      name: 'overall',
      imports: [
        'watch',
        'Transition',
        'KeepAlive',
-       'Suspense'
+       'Suspense',
      ],
-     from: vue
-   }
++    from: vue,
+   },
  ]
  
  main()
index b15b2a9d8c7fee59e6929e2c5b5bb9192534c753,6b5b93a45f9f80fc3536f92e08b5f9d0f2734377..d9c4aa08424c2d63a2aa6f2a3e86ab78e464d650
@@@ -27,10 -27,10 +27,10 @@@ export default defineConfig(
      globals: true,
      setupFiles: 'scripts/setup-vitest.ts',
      environmentMatchGlobs: [
-       ['packages/{vue,vue-compat,runtime-dom,runtime-vapor}/**', 'jsdom']
 -      ['packages/{vue,vue-compat,runtime-dom}/**', 'jsdom'],
++      ['packages/{vue,vue-compat,runtime-dom,runtime-vapor}/**', 'jsdom'],
      ],
      sequence: {
-       hooks: 'list'
+       hooks: 'list',
      },
      coverage: {
        provider: 'istanbul',