diff --git a/packages/vue/compiler-sfc/index.d.mts b/packages/vue/compiler-sfc/index.d.mts new file mode 100644 index 00000000000..3c30abc8ccf --- /dev/null +++ b/packages/vue/compiler-sfc/index.d.mts @@ -0,0 +1 @@ +export * from '@vue/compiler-sfc' diff --git a/packages/vue/compiler-sfc/package.json b/packages/vue/compiler-sfc/package.json index 778c7ebf51c..4cf44a46cb3 100644 --- a/packages/vue/compiler-sfc/package.json +++ b/packages/vue/compiler-sfc/package.json @@ -1,5 +1,4 @@ { "main": "index.js", - "module": "index.mjs", - "types": "index.d.ts" + "module": "index.mjs" } diff --git a/packages/vue/package.json b/packages/vue/package.json index a47f6cc16c2..8687b74fa22 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -21,22 +21,35 @@ ], "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", diff --git a/packages/vue/server-renderer/index.d.mts b/packages/vue/server-renderer/index.d.mts new file mode 100644 index 00000000000..ac614729c75 --- /dev/null +++ b/packages/vue/server-renderer/index.d.mts @@ -0,0 +1 @@ +export * from '@vue/server-renderer' diff --git a/packages/vue/server-renderer/package.json b/packages/vue/server-renderer/package.json index 1b15fb844ac..4cf44a46cb3 100644 --- a/packages/vue/server-renderer/package.json +++ b/packages/vue/server-renderer/package.json @@ -1,5 +1,4 @@ { "main": "index.js", - "module": "index.mjs", - "types": "index.d.ts" -} \ No newline at end of file + "module": "index.mjs" +} diff --git a/rollup.dts.config.js b/rollup.dts.config.js index bb146c46279..961e8ee2a94 100644 --- a/rollup.dts.config.js +++ b/rollup.dts.config.js @@ -1,6 +1,6 @@ // @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' @@ -25,7 +25,7 @@ export default targetPackages.map(pkg => { 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 ( @@ -232,3 +232,24 @@ function patchTypes(pkg) { } } } + +/** + * 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 + ) + } + } +}