]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(build): ensure correct typing for node esm
authorEvan You <yyx990803@gmail.com>
Thu, 18 May 2023 05:53:51 +0000 (13:53 +0800)
committerEvan You <yyx990803@gmail.com>
Thu, 18 May 2023 05:53:51 +0000 (13:53 +0800)
packages/vue/compiler-sfc/index.d.mts [new file with mode: 0644]
packages/vue/compiler-sfc/package.json
packages/vue/package.json
packages/vue/server-renderer/index.d.mts [new file with mode: 0644]
packages/vue/server-renderer/package.json
rollup.dts.config.js

diff --git a/packages/vue/compiler-sfc/index.d.mts b/packages/vue/compiler-sfc/index.d.mts
new file mode 100644 (file)
index 0000000..3c30abc
--- /dev/null
@@ -0,0 +1 @@
+export * from '@vue/compiler-sfc'
index 778c7ebf51c78c2c3cedb5c629d7fe4b03f10db2..4cf44a46cb30d23fdb4f04557a745910e4d35f57 100644 (file)
@@ -1,5 +1,4 @@
 {
   "main": "index.js",
-  "module": "index.mjs",
-  "types": "index.d.ts"
+  "module": "index.mjs"
 }
index a47f6cc16c2c8872e082f73c185fecf0e1af25aa..8687b74fa2238ebbdc3b8e0388b92c5aacf5846e 100644 (file)
   ],
   "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 (file)
index 0000000..ac61472
--- /dev/null
@@ -0,0 +1 @@
+export * from '@vue/server-renderer'
index 1b15fb844ac53504e3131068f07a74734f30e35a..4cf44a46cb30d23fdb4f04557a745910e4d35f57 100644 (file)
@@ -1,5 +1,4 @@
 {
   "main": "index.js",
-  "module": "index.mjs",
-  "types": "index.d.ts"
-}
\ No newline at end of file
+  "module": "index.mjs"
+}
index bb146c46279c5a72e4cc38f4a9f27fe300f7c5a2..961e8ee2a940e39710db697da9af994edb303e42 100644 (file)
@@ -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
+      )
+    }
+  }
+}