]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(compiler-sfc): handle ts files with relative imports with .js extension
authorEvan You <yyx990803@gmail.com>
Wed, 17 May 2023 02:14:44 +0000 (10:14 +0800)
committerEvan You <yyx990803@gmail.com>
Wed, 17 May 2023 02:14:44 +0000 (10:14 +0800)
close #8339

packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts
packages/compiler-sfc/src/script/resolveType.ts

index dd47ae269c6ff0cfd961995c38a2a888a3b993d7..3d2387481998fc353f2090c0a2aaf59a710ab762 100644 (file)
@@ -592,6 +592,26 @@ describe('resolveType', () => {
       expect(deps && [...deps]).toStrictEqual(Object.keys(files))
     })
 
+    // #8339
+    test('relative, .js import', () => {
+      const files = {
+        '/foo.d.ts':
+          'import { PP } from "./bar.js"; export type P = { foo: PP }',
+        '/bar.d.ts': 'export type PP = "foo" | "bar"'
+      }
+      const { props, deps } = resolve(
+        `
+        import { P } from './foo'
+        defineProps<P>()
+      `,
+        files
+      )
+      expect(props).toStrictEqual({
+        foo: ['String']
+      })
+      expect(deps && [...deps]).toStrictEqual(Object.keys(files))
+    })
+
     test('ts module resolve', () => {
       const files = {
         '/node_modules/foo/package.json': JSON.stringify({
index e79d21f8419607f2de6fdc9ecf5bc60294aee800..35a80e1b18611c9ab4468fa8708cc5a98f81948b 100644 (file)
@@ -785,6 +785,8 @@ function importSourceToScope(
 }
 
 function resolveExt(filename: string, fs: FS) {
+  // #8339 ts may import .js but we should resolve to corresponding ts or d.ts
+  filename = filename.replace(/\.js$/, '')
   const tryResolve = (filename: string) => {
     if (fs.fileExists(filename)) return filename
   }