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({
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