]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
test: add test
authordaiwei <daiwei521@126.com>
Wed, 18 Jun 2025 06:38:59 +0000 (14:38 +0800)
committerdaiwei <daiwei521@126.com>
Wed, 18 Jun 2025 06:38:59 +0000 (14:38 +0800)
packages/compiler-sfc/__tests__/compileScript/resolveType.spec.ts
packages/compiler-sfc/src/script/resolveType.ts

index 68fc5cc3159731e2cbd2b84b9c16a356bd6b6374..6b4770ecb7db0af6f0681e96fd04ede0f321f5d2 100644 (file)
@@ -1155,6 +1155,45 @@ describe('resolveType', () => {
       expect(deps && [...deps]).toStrictEqual(['/user.ts'])
     })
 
+    // #13484
+    test('ts module resolve w/ project reference & extends & ${configDir}', () => {
+      const files = {
+        '/tsconfig.json': JSON.stringify({
+          files: [],
+          references: [{ path: './tsconfig.app.json' }],
+        }),
+        '/tsconfig.app.json': JSON.stringify({
+          extends: ['./tsconfigs/base.json'],
+        }),
+        '/tsconfigs/base.json': JSON.stringify({
+          compilerOptions: {
+            paths: {
+              '@/*': ['${configDir}/src/*'],
+            },
+          },
+          include: ['${configDir}/src/**/*.ts', '${configDir}/src/**/*.vue'],
+        }),
+        '/src/types.ts':
+          'export type BaseProps = { foo?: string, bar?: string }',
+      }
+
+      const { props, deps } = resolve(
+        `
+        import { BaseProps } from '@/types.ts';
+        defineProps<BaseProps>()
+        `,
+        files,
+        {},
+        '/src/components/Foo.vue',
+      )
+
+      expect(props).toStrictEqual({
+        foo: ['String'],
+        bar: ['String'],
+      })
+      expect(deps && [...deps]).toStrictEqual(['/src/types.ts'])
+    })
+
     test('ts module resolve w/ project reference folder', () => {
       const files = {
         '/tsconfig.json': JSON.stringify({
index 60b23ca8a63613c9871ef475c5ce639b57f8cade..9e518418b4dad28d32ebb8e933e8750ea6779ec6 100644 (file)
@@ -1033,7 +1033,7 @@ function resolveWithTS(
       function getPattern(base: string, p: string): string {
         return p.startsWith('${configDir}') && major >= 5 && minor >= 5
           ? // ts 5.5+ supports ${configDir} in paths
-            p.replace('${configDir}', dirname(configPath!))
+            normalizePath(p.replace('${configDir}', dirname(configPath!)))
           : joinPaths(base, p)
       }
       // resolve which config matches the current file