],
"exports": {
".": {
- "types": "./dist/vue.d.ts",
"import": {
+ "types": "./dist/vue.d.mts",
"node": "./index.mjs",
"default": "./dist/vue.runtime.esm-bundler.js"
},
- "require": "./index.js"
+ "require": {
+ "types": "./dist/vue.d.ts",
+ "default": "./index.js"
+ }
},
"./server-renderer": {
- "types": "./server-renderer/index.d.ts",
- "import": "./server-renderer/index.mjs",
- "require": "./server-renderer/index.js"
+ "import": {
+ "types": "./server-renderer/index.d.mts",
+ "default": "./server-renderer/index.mjs"
+ },
+ "require": {
+ "types": "./server-renderer/index.d.ts",
+ "default": "./server-renderer/index.js"
+ }
},
"./compiler-sfc": {
- "types": "./compiler-sfc/index.d.ts",
- "import": "./compiler-sfc/index.mjs",
- "require": "./compiler-sfc/index.js"
+ "import": {
+ "types": "./compiler-sfc/index.d.mts",
+ "default": "./compiler-sfc/index.mjs"
+ },
+ "require": {
+ "types": "./compiler-sfc/index.d.ts",
+ "default": "./compiler-sfc/index.js"
+ }
},
"./jsx-runtime": {
"types": "./jsx-runtime/index.d.ts",
// @ts-check
import { parse } from '@babel/parser'
-import { existsSync, readdirSync, readFileSync } from 'fs'
+import { existsSync, readdirSync, readFileSync, writeFileSync } from 'fs'
import MagicString from 'magic-string'
import dts from 'rollup-plugin-dts'
import { walk } from 'estree-walker'
file: `packages/${pkg}/dist/${pkg}.d.ts`,
format: 'es'
},
- plugins: [dts(), patchTypes(pkg)],
+ plugins: [dts(), patchTypes(pkg), ...(pkg === 'vue' ? [copyMts()] : [])],
onwarn(warning, warn) {
// during dts rollup, everything is externalized by default
if (
}
}
}
+
+/**
+ * According to https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-7.html#packagejson-exports-imports-and-self-referencing
+ * the only way to correct provide types for both Node ESM and CJS is to have
+ * two separate declaration files, so we need to copy vue.d.ts to vue.d.mts
+ * upon build.
+ *
+ * @returns {import('rollup').Plugin}
+ */
+function copyMts() {
+ return {
+ name: 'copy-vue-mts',
+ writeBundle(_, bundle) {
+ writeFileSync(
+ 'packages/vue/dist/vue.d.mts',
+ // @ts-ignore
+ bundle['vue.d.ts'].code
+ )
+ }
+ }
+}