]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
Merge remote-tracking branch 'upstream/minor'
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Sat, 16 Dec 2023 08:12:55 +0000 (16:12 +0800)
committer三咲智子 Kevin Deng <sxzz@sxzz.moe>
Sat, 16 Dec 2023 08:12:55 +0000 (16:12 +0800)
26 files changed:
1  2 
.github/workflows/ci.yml
package.json
packages/compiler-core/package.json
packages/compiler-core/src/utils.ts
packages/compiler-dom/package.json
packages/compiler-sfc/package.json
packages/compiler-sfc/src/compileScript.ts
packages/compiler-ssr/package.json
packages/reactivity/package.json
packages/runtime-core/package.json
packages/runtime-core/src/apiCreateApp.ts
packages/runtime-core/src/component.ts
packages/runtime-core/src/componentRenderUtils.ts
packages/runtime-core/src/index.ts
packages/runtime-core/src/renderer.ts
packages/runtime-dom/package.json
packages/server-renderer/package.json
packages/shared/package.json
packages/template-explorer/package.json
packages/vue-compat/package.json
packages/vue/package.json
pnpm-lock.yaml
rollup.config.js
scripts/dev.js
scripts/usage-size.ts
vitest.config.ts

Simple merge
diff --cc package.json
index 03e063ae6afb30fa8bbc111cd015d333ec2cd307,9fe772494ff56d64c0f1cfe3e9064ffbc167f253..5fc184a4d6e1c2df928f917fe20b48cf214c0f50
@@@ -1,10 -1,10 +1,10 @@@
  {
    "private": true,
 -  "version": "3.4.0-beta.3",
 +  "version": "0.0.0-vapor",
-   "packageManager": "pnpm@8.11.0",
+   "packageManager": "pnpm@8.12.0",
    "type": "module",
    "scripts": {
 -    "dev": "node scripts/dev.js",
 +    "dev": "node scripts/dev.js vue vue-vapor",
      "build": "node scripts/build.js",
      "build-dts": "tsc -p tsconfig.build.json && rollup -c rollup.dts.config.js",
      "clean": "rimraf packages/*/dist temp .eslintcache",
Simple merge
index 93b990dbbce63c4b35044ff4c4d6f9c43c510722,adc5c19476bff45541d80152ddae24e23926e3f0..09185bdca4f395a7160bb7ff03105aa6b0a94f02
@@@ -152,21 -153,13 +153,19 @@@ 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'>
 +    ) => boolean)
 +  : (
 +      path: string,
 +      options: Pick<TransformContext, 'expressionPlugins'>
 +    ): boolean => {
        try {
          let ret: Expression = parseExpression(path, {
 -          plugins: context.expressionPlugins
 +          plugins: options.expressionPlugins
          })
-         if (ret.type === 'TSAsExpression' || ret.type === 'TSTypeAssertion') {
-           ret = ret.expression
-         }
+         ret = unwrapTSNode(ret) as Expression
          return (
            ret.type === 'MemberExpression' ||
            ret.type === 'OptionalMemberExpression' ||
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 6843bb26fe55514a5aa156879de4a1ba104ffdb7,8e82c74c5f1e49b884477748caad127cb9ddca94..7ceeaf39094ad203d721de628dfc1b156b19f19a
@@@ -82,6 -82,41 +83,39 @@@ import 
  import { SchedulerJob } from './scheduler'
  import { 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
+  * the usage of `InstanceType<typeof Comp>` which only works for
+  * constructor-based component definition types.
+  *
+  * Exmaple:
+  * ```ts
+  * const MyComp = { ... }
+  * declare const instance: ComponentInstance<typeof MyComp>
+  * ```
+  */
+ export type ComponentInstance<T> = T extends { new (): ComponentPublicInstance }
+   ? InstanceType<T>
+   : T extends FunctionalComponent<infer Props, infer Emits>
+     ? ComponentPublicInstance<Props, {}, {}, {}, {}, ShortEmitsToObject<Emits>>
+     : T extends Component<
+           infer Props,
+           infer RawBindings,
+           infer D,
+           infer C,
+           infer M
+         >
+       ? // NOTE we override Props/RawBindings/D to make sure is not `unknown`
+         ComponentPublicInstance<
+           unknown extends Props ? {} : Props,
+           unknown extends RawBindings ? {} : RawBindings,
+           unknown extends D ? {} : D,
+           C,
+           M
+         >
+       : never // not a vue Component
  /**
   * For extending allowed non-declared props on components in TSX
   */
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 6387306fd738dfeaab21248533bdac1d44a84590,ec3ad73ac4cdf64e6d6745ce1bb0ab6ad2220e7f..cf89cbe223da843e06ccc64e2e68964800a3e4b1
@@@ -11,8 -11,7 +11,8 @@@
      "enableNonBrowserBranches": true
    },
    "dependencies": {
-     "monaco-editor": "^0.44.0",
 +    "@vue/compiler-vapor": "workspace:^",
+     "monaco-editor": "^0.45.0",
      "source-map-js": "^1.0.2"
    }
  }
Simple merge
Simple merge
diff --cc pnpm-lock.yaml
index c1cb8d7a0bdd52e1db7e3172ab05c2befda9ebc4,b432c5bef9976c45480d5053b3092c76b4f918b4..f332c84e873d98ecf2ee8aaff50c81188b782d99
@@@ -14,6 -14,9 +14,9 @@@ importers
        '@babel/types':
          specifier: ^7.23.5
          version: 7.23.5
 -        version: 2.3.1(vite@5.0.7)(vitest@1.0.4)
+       '@codspeed/vitest-plugin':
+         specifier: ^2.3.1
++        version: 2.3.1(vite@5.0.10)(vitest@1.0.4)
        '@rollup/plugin-alias':
          specifier: ^5.0.1
          version: 5.0.1(rollup@4.1.4)
          specifier: ^1.2.5
          version: 1.2.5
        '@types/node':
-         specifier: ^20.10.3
-         version: 20.10.3
+         specifier: ^20.10.4
+         version: 20.10.4
        '@types/semver':
          specifier: ^7.5.5
 -        version: 7.5.5
 +        version: 7.5.6
        '@typescript-eslint/parser':
-         specifier: ^6.13.0
-         version: 6.13.1(eslint@8.54.0)(typescript@5.2.2)
+         specifier: ^6.13.2
 -        version: 6.13.2(eslint@8.55.0)(typescript@5.2.2)
++        version: 6.14.0(eslint@8.56.0)(typescript@5.2.2)
        '@vitest/coverage-istanbul':
-         specifier: ^0.34.6
-         version: 0.34.6(vitest@1.0.1)
+         specifier: ^1.0.4
+         version: 1.0.4(vitest@1.0.4)
        '@vue/consolidate':
          specifier: 0.17.3
          version: 0.17.3
          specifier: ^0.3.0
          version: 0.3.0(esbuild@0.19.5)
        eslint:
-         specifier: ^8.54.0
-         version: 8.54.0
+         specifier: ^8.55.0
 -        version: 8.55.0
++        version: 8.56.0
        eslint-define-config:
          specifier: ^1.24.1
          version: 1.24.1
        eslint-plugin-jest:
          specifier: ^27.6.0
-         version: 27.6.0(eslint@8.54.0)(typescript@5.2.2)
 -        version: 27.6.0(eslint@8.55.0)(typescript@5.2.2)
++        version: 27.6.0(eslint@8.56.0)(typescript@5.2.2)
        estree-walker:
          specifier: ^2.0.2
          version: 2.0.2
@@@ -96,8 -99,8 +99,8 @@@
          specifier: ^3.0.3
          version: 3.0.3
        marked:
-         specifier: ^9.1.6
-         version: 9.1.6
+         specifier: ^11.0.1
 -        version: 11.0.1
++        version: 11.1.0
        minimist:
          specifier: ^1.2.8
          version: 1.2.8
          specifier: ^3.0.2
          version: 3.0.2
        puppeteer:
-         specifier: ~21.5.2
-         version: 21.5.2(typescript@5.2.2)
+         specifier: ~21.6.0
 -        version: 21.6.0(typescript@5.2.2)
++        version: 21.6.1(typescript@5.2.2)
        rimraf:
          specifier: ^5.0.5
          version: 5.0.5
          specifier: ^5.2.2
          version: 5.2.2
        vite:
-         specifier: ^5.0.0
-         version: 5.0.0(@types/node@20.10.3)(terser@5.22.0)
+         specifier: ^5.0.5
 -        version: 5.0.7(@types/node@20.10.4)(terser@5.22.0)
++        version: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
        vitest:
-         specifier: ^1.0.0
-         version: 1.0.1(@types/node@20.10.3)(jsdom@22.1.0)(terser@5.22.0)
+         specifier: ^1.0.4
+         version: 1.0.4(@types/node@20.10.4)(jsdom@23.0.1)(terser@5.22.0)
  
    packages/compiler-core:
      dependencies:
      devDependencies:
        '@vitejs/plugin-vue':
          specifier: ^4.4.0
-         version: 4.4.0(vite@5.0.0)(vue@packages+vue)
 -        version: 4.4.0(vite@5.0.7)(vue@packages+vue)
++        version: 4.4.0(vite@5.0.10)(vue@packages+vue)
        vite:
-         specifier: ^5.0.0
-         version: 5.0.0(@types/node@20.10.3)(terser@5.22.0)
+         specifier: ^5.0.5
 -        version: 5.0.7(@types/node@20.10.4)(terser@5.22.0)
++        version: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
  
    packages/shared: {}
  
    packages/template-explorer:
      dependencies:
 +      '@vue/compiler-vapor':
 +        specifier: workspace:^
 +        version: link:../compiler-vapor
        monaco-editor:
-         specifier: ^0.44.0
-         version: 0.44.0
+         specifier: ^0.45.0
+         version: 0.45.0
        source-map-js:
          specifier: ^1.0.2
          version: 1.0.2
          specifier: workspace:*
          version: link:../vue
  
-         version: 5.0.2(@types/node@20.10.3)(terser@5.22.0)
 +  packages/vue-vapor:
 +    dependencies:
 +      '@vue/compiler-vapor':
 +        specifier: workspace:*
 +        version: link:../compiler-vapor
 +      '@vue/runtime-vapor':
 +        specifier: workspace:*
 +        version: link:../runtime-vapor
 +
 +  playground:
 +    dependencies:
 +      vue:
 +        specifier: workspace:*
 +        version: link:../packages/vue
 +    devDependencies:
 +      '@vitejs/plugin-vue':
 +        specifier: ^4.5.0
 +        version: 4.5.0(vite@5.0.2)(vue@packages+vue)
 +      vite:
 +        specifier: ^5.0.2
-         version: 0.1.1(@types/node@20.10.3)(terser@5.22.0)(vite@5.0.2)
++        version: 5.0.2(@types/node@20.10.4)(terser@5.22.0)
 +      vite-hyper-config:
 +        specifier: ^0.1.1
-         version: 0.34.6(@types/node@20.10.3)(terser@5.22.0)
++        version: 0.1.1(@types/node@20.10.4)(terser@5.22.0)(vite@5.0.2)
 +      vite-node:
 +        specifier: ^0.34.6
++        version: 0.34.6(@types/node@20.10.4)(terser@5.22.0)
 +      vite-plugin-inspect:
 +        specifier: ^0.7.42
 +        version: 0.7.42(rollup@4.1.4)(vite@5.0.2)
 +
  packages:
  
    /@aashutoshrathi/word-wrap@1.2.6:
        '@babel/helper-validator-identifier': 7.22.20
        to-fast-properties: 2.0.0
  
 -  /@codspeed/vitest-plugin@2.3.1(vite@5.0.7)(vitest@1.0.4):
+   /@codspeed/core@2.3.1:
+     resolution: {integrity: sha512-7KRwBX4iXK33gEQwh8jPWBF9srGIjewm3oc+A/66caiG/aOyHmxJCapjAZxT2f2vIVYqR7CghzqlxY2ik0DNBg==}
+     dependencies:
+       find-up: 6.3.0
+       node-gyp-build: 4.7.1
+     dev: true
 -      vite: 5.0.7(@types/node@20.10.4)(terser@5.22.0)
++  /@codspeed/vitest-plugin@2.3.1(vite@5.0.10)(vitest@1.0.4):
+     resolution: {integrity: sha512-/e4G2B/onX/hG/EjUU/NpDxnIryeTDamVRTBeWfgQDoex3g7GDzTwoQktaU5l/Asw3ZjEErQg+oQVToQ6jYZlA==}
+     peerDependencies:
+       vite: ^4.2.0 || ^5.0.0
+       vitest: '>=1.0.0-beta.4 || >=1'
+     dependencies:
+       '@codspeed/core': 2.3.1
++      vite: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
+       vitest: 1.0.4(@types/node@20.10.4)(jsdom@23.0.1)(terser@5.22.0)
+     dev: true
    /@esbuild/android-arm64@0.18.20:
      resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
      engines: {node: '>=12'}
      dev: true
      optional: true
  
-   /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0):
 -  /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0):
++  /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0):
      resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
      engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
      peerDependencies:
        eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
      dependencies:
-       eslint: 8.54.0
 -      eslint: 8.55.0
++      eslint: 8.56.0
        eslint-visitor-keys: 3.4.3
      dev: true
  
        - supports-color
      dev: true
  
-   /@eslint/js@8.54.0:
-     resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==}
 -  /@eslint/js@8.55.0:
 -    resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==}
++  /@eslint/js@8.56.0:
++    resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==}
      engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
      dev: true
  
      dev: true
      optional: true
  
-   /@puppeteer/browsers@1.8.0:
-     resolution: {integrity: sha512-TkRHIV6k2D8OlUe8RtG+5jgOF/H98Myx0M6AOafC8DdNVOFiBSFa5cpRDtpm8LXOa9sVwe0+e6Q3FC56X/DZfg==}
 +  /@polka/url@1.0.0-next.23:
 +    resolution: {integrity: sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==}
 +    dev: true
 +
+   /@puppeteer/browsers@1.9.0:
+     resolution: {integrity: sha512-QwguOLy44YBGC8vuPP2nmpX4MUN2FzWbsnvZJtiCzecU3lHmVZkaC1tq6rToi9a200m8RzlVtDyxCS0UIDrxUg==}
      engines: {node: '>=16.3.0'}
      hasBin: true
      dependencies:
      dev: true
      optional: true
  
-   /@typescript-eslint/parser@6.13.1(eslint@8.54.0)(typescript@5.2.2):
-     resolution: {integrity: sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==}
 -  /@typescript-eslint/parser@6.13.2(eslint@8.55.0)(typescript@5.2.2):
 -    resolution: {integrity: sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==}
++  /@typescript-eslint/parser@6.14.0(eslint@8.56.0)(typescript@5.2.2):
++    resolution: {integrity: sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==}
      engines: {node: ^16.0.0 || >=18.0.0}
      peerDependencies:
        eslint: ^7.0.0 || ^8.0.0
        typescript:
          optional: true
      dependencies:
-       '@typescript-eslint/scope-manager': 6.13.1
-       '@typescript-eslint/types': 6.13.1
-       '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.2.2)
-       '@typescript-eslint/visitor-keys': 6.13.1
 -      '@typescript-eslint/scope-manager': 6.13.2
 -      '@typescript-eslint/types': 6.13.2
 -      '@typescript-eslint/typescript-estree': 6.13.2(typescript@5.2.2)
 -      '@typescript-eslint/visitor-keys': 6.13.2
++      '@typescript-eslint/scope-manager': 6.14.0
++      '@typescript-eslint/types': 6.14.0
++      '@typescript-eslint/typescript-estree': 6.14.0(typescript@5.2.2)
++      '@typescript-eslint/visitor-keys': 6.14.0
        debug: 4.3.4
-       eslint: 8.54.0
 -      eslint: 8.55.0
++      eslint: 8.56.0
        typescript: 5.2.2
      transitivePeerDependencies:
        - supports-color
        '@typescript-eslint/visitor-keys': 5.62.0
      dev: true
  
-   /@typescript-eslint/scope-manager@6.13.1:
-     resolution: {integrity: sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==}
 -  /@typescript-eslint/scope-manager@6.13.2:
 -    resolution: {integrity: sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==}
++  /@typescript-eslint/scope-manager@6.14.0:
++    resolution: {integrity: sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==}
      engines: {node: ^16.0.0 || >=18.0.0}
      dependencies:
-       '@typescript-eslint/types': 6.13.1
-       '@typescript-eslint/visitor-keys': 6.13.1
 -      '@typescript-eslint/types': 6.13.2
 -      '@typescript-eslint/visitor-keys': 6.13.2
++      '@typescript-eslint/types': 6.14.0
++      '@typescript-eslint/visitor-keys': 6.14.0
      dev: true
  
    /@typescript-eslint/types@5.62.0:
      engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
      dev: true
  
-   /@typescript-eslint/types@6.13.1:
-     resolution: {integrity: sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==}
 -  /@typescript-eslint/types@6.13.2:
 -    resolution: {integrity: sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==}
++  /@typescript-eslint/types@6.14.0:
++    resolution: {integrity: sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==}
      engines: {node: ^16.0.0 || >=18.0.0}
      dev: true
  
        - supports-color
      dev: true
  
-   /@typescript-eslint/typescript-estree@6.13.1(typescript@5.2.2):
-     resolution: {integrity: sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==}
 -  /@typescript-eslint/typescript-estree@6.13.2(typescript@5.2.2):
 -    resolution: {integrity: sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==}
++  /@typescript-eslint/typescript-estree@6.14.0(typescript@5.2.2):
++    resolution: {integrity: sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==}
      engines: {node: ^16.0.0 || >=18.0.0}
      peerDependencies:
        typescript: '*'
        typescript:
          optional: true
      dependencies:
-       '@typescript-eslint/types': 6.13.1
-       '@typescript-eslint/visitor-keys': 6.13.1
 -      '@typescript-eslint/types': 6.13.2
 -      '@typescript-eslint/visitor-keys': 6.13.2
++      '@typescript-eslint/types': 6.14.0
++      '@typescript-eslint/visitor-keys': 6.14.0
        debug: 4.3.4
        globby: 11.1.0
        is-glob: 4.0.3
        - supports-color
      dev: true
  
-   /@typescript-eslint/utils@5.62.0(eslint@8.54.0)(typescript@5.2.2):
 -  /@typescript-eslint/utils@5.62.0(eslint@8.55.0)(typescript@5.2.2):
++  /@typescript-eslint/utils@5.62.0(eslint@8.56.0)(typescript@5.2.2):
      resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
      engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
      peerDependencies:
        eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
      dependencies:
-       '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0)
 -      '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0)
++      '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
        '@types/json-schema': 7.0.14
 -      '@types/semver': 7.5.5
 +      '@types/semver': 7.5.6
        '@typescript-eslint/scope-manager': 5.62.0
        '@typescript-eslint/types': 5.62.0
        '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2)
-       eslint: 8.54.0
 -      eslint: 8.55.0
++      eslint: 8.56.0
        eslint-scope: 5.1.1
        semver: 7.5.4
      transitivePeerDependencies:
        eslint-visitor-keys: 3.4.3
      dev: true
  
-   /@typescript-eslint/visitor-keys@6.13.1:
-     resolution: {integrity: sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==}
 -  /@typescript-eslint/visitor-keys@6.13.2:
 -    resolution: {integrity: sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==}
++  /@typescript-eslint/visitor-keys@6.14.0:
++    resolution: {integrity: sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==}
      engines: {node: ^16.0.0 || >=18.0.0}
      dependencies:
-       '@typescript-eslint/types': 6.13.1
 -      '@typescript-eslint/types': 6.13.2
++      '@typescript-eslint/types': 6.14.0
        eslint-visitor-keys: 3.4.3
      dev: true
  
      resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
      dev: true
  
-   /@vitejs/plugin-vue@4.4.0(vite@5.0.0)(vue@packages+vue):
 -  /@vitejs/plugin-vue@4.4.0(vite@5.0.7)(vue@packages+vue):
++  /@vitejs/plugin-vue@4.4.0(vite@5.0.10)(vue@packages+vue):
      resolution: {integrity: sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==}
      engines: {node: ^14.18.0 || >=16.0.0}
      peerDependencies:
        vite: ^4.0.0
        vue: ^3.2.25
      dependencies:
-       vite: 5.0.0(@types/node@20.10.3)(terser@5.22.0)
 -      vite: 5.0.7(@types/node@20.10.4)(terser@5.22.0)
++      vite: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
 +      vue: link:packages/vue
 +    dev: true
 +
 +  /@vitejs/plugin-vue@4.5.0(vite@5.0.2)(vue@packages+vue):
 +    resolution: {integrity: sha512-a2WSpP8X8HTEww/U00bU4mX1QpLINNuz/2KMNpLsdu3BzOpak3AGI1CJYBTXcc4SPhaD0eNRUp7IyQK405L5dQ==}
 +    engines: {node: ^14.18.0 || >=16.0.0}
 +    peerDependencies:
 +      vite: ^4.0.0 || ^5.0.0
 +      vue: ^3.2.25
 +    dependencies:
-       vite: 5.0.2(@types/node@20.10.3)(terser@5.22.0)
++      vite: 5.0.2(@types/node@20.10.4)(terser@5.22.0)
        vue: link:packages/vue
      dev: true
  
      engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>= 8.6.0'}
      dev: true
  
-   /eslint-plugin-jest@27.6.0(eslint@8.54.0)(typescript@5.2.2):
 -  /eslint-plugin-jest@27.6.0(eslint@8.55.0)(typescript@5.2.2):
++  /eslint-plugin-jest@27.6.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/utils': 5.62.0(eslint@8.54.0)(typescript@5.2.2)
-       eslint: 8.54.0
 -      '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.2.2)
 -      eslint: 8.55.0
++      '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.2.2)
++      eslint: 8.56.0
      transitivePeerDependencies:
        - supports-color
        - typescript
      engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
      dev: true
  
-   /eslint@8.54.0:
-     resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==}
 -  /eslint@8.55.0:
 -    resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==}
++  /eslint@8.56.0:
++    resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==}
      engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
      hasBin: true
      dependencies:
-       '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0)
 -      '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0)
++      '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
        '@eslint-community/regexpp': 4.9.1
-       '@eslint/eslintrc': 2.1.3
-       '@eslint/js': 8.54.0
+       '@eslint/eslintrc': 2.1.4
 -      '@eslint/js': 8.55.0
++      '@eslint/js': 8.56.0
        '@humanwhocodes/config-array': 0.11.13
        '@humanwhocodes/module-importer': 1.0.1
        '@nodelib/fs.walk': 1.2.8
      resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==}
      engines: {node: '>=10'}
      dependencies:
 -      '@babel/core': 7.23.5
 +      '@babel/core': 7.23.3
        '@babel/parser': 7.23.5
        '@istanbuljs/schema': 0.1.3
-       istanbul-lib-coverage: 3.2.0
+       istanbul-lib-coverage: 3.2.2
        semver: 7.5.4
      transitivePeerDependencies:
        - supports-color
      resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
      dev: true
  
-   /marked@9.1.6:
-     resolution: {integrity: sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==}
-     engines: {node: '>= 16'}
 -  /marked@11.0.1:
 -    resolution: {integrity: sha512-P4kDhFEMlvLePBPRwOcMOv6+lYUbhfbSxJFs3Jb4Qx7v6K7l+k8Dxh9CEGfRvK71tL+qIFz5y7Pe4uzt4+/A3A==}
++  /marked@11.1.0:
++    resolution: {integrity: sha512-fvKJWAPEafVj1dwGwcPI5mBB/0pvViL6NlCbNDG1HOIRwwAU/jeMoFxfbRLuirO1wRH7m4yPvBqD/O1wyWvayw==}
+     engines: {node: '>= 18'}
      hasBin: true
      dev: true
  
        ufo: 1.3.1
      dev: true
  
-   /monaco-editor@0.44.0:
-     resolution: {integrity: sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q==}
+   /monaco-editor@0.45.0:
+     resolution: {integrity: sha512-mjv1G1ZzfEE3k9HZN0dQ2olMdwIfaeAAjFiwNprLfYNRSz7ctv9XuCT7gPtBGrMUeV1/iZzYKj17Khu1hxoHOA==}
      dev: false
  
 +  /mrmime@1.0.1:
 +    resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
 +    engines: {node: '>=10'}
 +    dev: true
 +
    /ms@2.0.0:
      resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
      dev: true
      engines: {node: '>=6'}
      dev: true
  
-   /puppeteer-core@21.5.2:
-     resolution: {integrity: sha512-v4T0cWnujSKs+iEfmb8ccd7u4/x8oblEyKqplqKnJ582Kw8PewYAWvkH4qUWhitN3O2q9RF7dzkvjyK5HbzjLA==}
+   /punycode@2.3.1:
+     resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+     engines: {node: '>=6'}
+     dev: true
 -  /puppeteer-core@21.6.0:
 -    resolution: {integrity: sha512-1vrzbp2E1JpBwtIIrriWkN+A0afUxkqRuFTC3uASc5ql6iuK9ppOdIU/CPGKwOyB4YFIQ16mRbK0PK19mbXnaQ==}
++  /puppeteer-core@21.6.1:
++    resolution: {integrity: sha512-0chaaK/RL9S1U3bsyR4fUeUfoj51vNnjWvXgG6DcsyMjwYNpLcAThv187i1rZCo7QhJP0wZN8plQkjNyrq2h+A==}
      engines: {node: '>=16.13.2'}
      dependencies:
-       '@puppeteer/browsers': 1.8.0
-       chromium-bidi: 0.4.33(devtools-protocol@0.0.1203626)
+       '@puppeteer/browsers': 1.9.0
+       chromium-bidi: 0.5.1(devtools-protocol@0.0.1203626)
        cross-fetch: 4.0.0
        debug: 4.3.4
        devtools-protocol: 0.0.1203626
--      ws: 8.14.2
++      ws: 8.15.1
      transitivePeerDependencies:
        - bufferutil
        - encoding
        - utf-8-validate
      dev: true
  
-   /puppeteer@21.5.2(typescript@5.2.2):
-     resolution: {integrity: sha512-BaAGJOq8Fl6/cck6obmwaNLksuY0Bg/lIahCLhJPGXBFUD2mCffypa4A592MaWnDcye7eaHmSK9yot0pxctY8A==}
 -  /puppeteer@21.6.0(typescript@5.2.2):
 -    resolution: {integrity: sha512-u6JhSF7xaPYZ2gd3tvhYI8MwVAjLc3Cazj7UWvMV95A07/y7cIjBwYUiMU9/jm4z0FSUORriLX/RZRaiASNWPw==}
++  /puppeteer@21.6.1(typescript@5.2.2):
++    resolution: {integrity: sha512-O+pbc61oj8ln6m8EJKncrsQFmytgRyFYERtk190PeLbJn5JKpmmynn2p1PiFrlhCitAQXLJ0MOy7F0TeyCRqBg==}
      engines: {node: '>=16.13.2'}
+     hasBin: true
      requiresBuild: true
      dependencies:
-       '@puppeteer/browsers': 1.8.0
+       '@puppeteer/browsers': 1.9.0
        cosmiconfig: 8.3.6(typescript@5.2.2)
-       puppeteer-core: 21.5.2
 -      puppeteer-core: 21.6.0
++      puppeteer-core: 21.6.1
      transitivePeerDependencies:
        - bufferutil
        - encoding
      engines: {node: '>= 0.8'}
      dev: true
  
-   /vite-hyper-config@0.1.1(@types/node@20.10.3)(terser@5.22.0)(vite@5.0.2):
++  /vite-hyper-config@0.1.1(@types/node@20.10.4)(terser@5.22.0)(vite@5.0.2):
 +    resolution: {integrity: sha512-Sc9WuuLImezPUG6JUnBU/L0KHZDHRyvLKEU1fEPCR6gBsC9QTnmnX78doRQpKt6P/rRcawlytbA2xt9Qb/kaVQ==}
 +    engines: {node: '>=18.0.0'}
 +    peerDependencies:
 +      vite: ^4.0.0 || ^5.0.0
 +    dependencies:
 +      cac: 6.7.14
 +      picocolors: 1.0.0
-       vite: 5.0.2(@types/node@20.10.3)(terser@5.22.0)
-       vite-node: 0.34.6(@types/node@20.10.3)(terser@5.22.0)
++      vite: 5.0.2(@types/node@20.10.4)(terser@5.22.0)
++      vite-node: 0.34.6(@types/node@20.10.4)(terser@5.22.0)
 +    transitivePeerDependencies:
 +      - '@types/node'
 +      - less
 +      - lightningcss
 +      - sass
 +      - stylus
 +      - sugarss
 +      - supports-color
 +      - terser
 +    dev: true
 +
-   /vite-node@0.34.6(@types/node@20.10.3)(terser@5.22.0):
++  /vite-node@0.34.6(@types/node@20.10.4)(terser@5.22.0):
 +    resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==}
 +    engines: {node: '>=v14.18.0'}
 +    hasBin: true
 +    dependencies:
 +      cac: 6.7.14
 +      debug: 4.3.4
 +      mlly: 1.4.2
 +      pathe: 1.1.1
 +      picocolors: 1.0.0
-       vite: 5.0.2(@types/node@20.10.3)(terser@5.22.0)
++      vite: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
 +    transitivePeerDependencies:
 +      - '@types/node'
 +      - less
 +      - lightningcss
 +      - sass
 +      - stylus
 +      - sugarss
 +      - supports-color
 +      - terser
 +    dev: true
 +
-   /vite-node@1.0.1(@types/node@20.10.3)(terser@5.22.0):
-     resolution: {integrity: sha512-Y2Jnz4cr2azsOMMYuVPrQkp3KMnS/0WV8ezZjCy4hU7O5mUHCAVOnFmoEvs1nvix/4mYm74Len8bYRWZJMNP6g==}
+   /vite-node@1.0.4(@types/node@20.10.4)(terser@5.22.0):
+     resolution: {integrity: sha512-9xQQtHdsz5Qn8hqbV7UKqkm8YkJhzT/zr41Dmt5N7AlD8hJXw/Z7y0QiD5I8lnTthV9Rvcvi0QW7PI0Fq83ZPg==}
      engines: {node: ^18.0.0 || >=20.0.0}
      hasBin: true
      dependencies:
        debug: 4.3.4
        pathe: 1.1.1
        picocolors: 1.0.0
-       vite: 5.0.2(@types/node@20.10.3)(terser@5.22.0)
 -      vite: 5.0.7(@types/node@20.10.4)(terser@5.22.0)
++      vite: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
      transitivePeerDependencies:
        - '@types/node'
        - less
        - terser
      dev: true
  
 -  /vite@5.0.7(@types/node@20.10.4)(terser@5.22.0):
 -    resolution: {integrity: sha512-B4T4rJCDPihrQo2B+h1MbeGL/k/GMAHzhQ8S0LjQ142s6/+l3hHTT095ORvsshj4QCkoWu3Xtmob5mazvakaOw==}
 +  /vite-plugin-inspect@0.7.42(rollup@4.1.4)(vite@5.0.2):
 +    resolution: {integrity: sha512-JCyX86wr3siQc+p9Kd0t8VkFHAJag0RaQVIpdFGSv5FEaePEVB6+V/RGtz2dQkkGSXQzRWrPs4cU3dRKg32bXw==}
 +    engines: {node: '>=14'}
 +    peerDependencies:
 +      '@nuxt/kit': '*'
 +      vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0
 +    peerDependenciesMeta:
 +      '@nuxt/kit':
 +        optional: true
 +    dependencies:
 +      '@antfu/utils': 0.7.6
 +      '@rollup/pluginutils': 5.0.5(rollup@4.1.4)
 +      debug: 4.3.4
 +      error-stack-parser-es: 0.1.1
 +      fs-extra: 11.1.1
 +      open: 9.1.0
 +      picocolors: 1.0.0
 +      sirv: 2.0.3
-       vite: 5.0.2(@types/node@20.10.3)(terser@5.22.0)
++      vite: 5.0.2(@types/node@20.10.4)(terser@5.22.0)
 +    transitivePeerDependencies:
 +      - rollup
 +      - supports-color
 +    dev: true
 +
-   /vite@5.0.0(@types/node@20.10.3)(terser@5.22.0):
-     resolution: {integrity: sha512-ESJVM59mdyGpsiNAeHQOR/0fqNoOyWPYesFto8FFZugfmhdHx8Fzd8sF3Q/xkVhZsyOxHfdM7ieiVAorI9RjFw==}
++  /vite@5.0.10(@types/node@20.10.4)(terser@5.22.0):
++    resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
 +    engines: {node: ^18.0.0 || >=20.0.0}
 +    hasBin: true
 +    peerDependencies:
 +      '@types/node': ^18.0.0 || >=20.0.0
 +      less: '*'
 +      lightningcss: ^1.21.0
 +      sass: '*'
 +      stylus: '*'
 +      sugarss: '*'
 +      terser: ^5.4.0
 +    peerDependenciesMeta:
 +      '@types/node':
 +        optional: true
 +      less:
 +        optional: true
 +      lightningcss:
 +        optional: true
 +      sass:
 +        optional: true
 +      stylus:
 +        optional: true
 +      sugarss:
 +        optional: true
 +      terser:
 +        optional: true
 +    dependencies:
-       '@types/node': 20.10.3
++      '@types/node': 20.10.4
 +      esbuild: 0.19.5
-       postcss: 8.4.31
++      postcss: 8.4.32
 +      rollup: 4.4.1
 +      terser: 5.22.0
 +    optionalDependencies:
 +      fsevents: 2.3.3
 +    dev: true
 +
-   /vite@5.0.2(@types/node@20.10.3)(terser@5.22.0):
++  /vite@5.0.2(@types/node@20.10.4)(terser@5.22.0):
 +    resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==}
      engines: {node: ^18.0.0 || >=20.0.0}
      hasBin: true
      peerDependencies:
        jsdom:
          optional: true
      dependencies:
-       '@types/node': 20.10.3
-       '@vitest/expect': 1.0.1
-       '@vitest/runner': 1.0.1
-       '@vitest/snapshot': 1.0.1
-       '@vitest/spy': 1.0.1
-       '@vitest/utils': 1.0.1
+       '@types/node': 20.10.4
+       '@vitest/expect': 1.0.4
+       '@vitest/runner': 1.0.4
+       '@vitest/snapshot': 1.0.4
+       '@vitest/spy': 1.0.4
+       '@vitest/utils': 1.0.4
 -      acorn-walk: 8.3.0
 +      acorn-walk: 8.3.1
        cac: 6.7.14
        chai: 4.3.10
        debug: 4.3.4
        strip-literal: 1.3.0
        tinybench: 2.5.1
        tinypool: 0.8.1
-       vite: 5.0.2(@types/node@20.10.3)(terser@5.22.0)
-       vite-node: 1.0.1(@types/node@20.10.3)(terser@5.22.0)
 -      vite: 5.0.7(@types/node@20.10.4)(terser@5.22.0)
++      vite: 5.0.10(@types/node@20.10.4)(terser@5.22.0)
+       vite-node: 1.0.4(@types/node@20.10.4)(terser@5.22.0)
        why-is-node-running: 2.2.2
      transitivePeerDependencies:
        - less
          optional: true
      dev: true
  
-   /xml-name-validator@4.0.0:
-     resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
-     engines: {node: '>=12'}
++  /ws@8.15.1:
++    resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==}
++    engines: {node: '>=10.0.0'}
++    peerDependencies:
++      bufferutil: ^4.0.1
++      utf-8-validate: '>=5.0.2'
++    peerDependenciesMeta:
++      bufferutil:
++        optional: true
++      utf-8-validate:
++        optional: true
++    dev: true
++
+   /xml-name-validator@5.0.0:
+     resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
+     engines: {node: '>=18'}
      dev: true
  
    /xmlchars@2.2.0:
Simple merge
diff --cc scripts/dev.js
index 4618cee22431a2a6ad67c05ce755edca6b6f4ef0,5f996a29831b874d925f7a1682d81b80c33bba5b..4b4e73a1f3682486bd213c5773debc2a0231fb9f
@@@ -30,103 -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`
 +  )
 +  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'
 +      ]
 +    }
  
 -  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}/`)]
 +        }
 +      )
 +      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'
 +      ]
 +    }
    }
 -}
 -/** @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_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
 -      ),
 -      __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())
Simple merge
index fc5f18832cb38718f0303ff1699ebea5d0df6852,53842ae327ac2a0b97104ac85451cf75ea4d2196..9b83c11071abd6840295b2c01ddbfdc7535009d2
@@@ -20,13 -22,12 +22,12 @@@ export default defineConfig(
    resolve: {
      alias: entries
    },
+   plugins: [codspeedPlugin()],
    test: {
      globals: true,
-     // disable threads on GH actions to speed it up
-     threads: !process.env.GITHUB_ACTIONS,
      setupFiles: 'scripts/setupVitest.ts',
      environmentMatchGlobs: [
 -      ['packages/{vue,vue-compat,runtime-dom}/**', 'jsdom']
 +      ['packages/{vue,vue-compat,runtime-dom,runtime-vapor}/**', 'jsdom']
      ],
      sequence: {
        hooks: 'list'