mirror of https://github.com/vuejs/core.git
fix(compile-sfc): Support project reference with folder, (#10908)
close #10907
This commit is contained in:
parent
d6990dc587
commit
bdeac377c7
|
@ -1022,6 +1022,53 @@ describe('resolveType', () => {
|
|||
expect(deps && [...deps]).toStrictEqual(['/user.ts'])
|
||||
})
|
||||
|
||||
test('ts module resolve w/ project reference folder', () => {
|
||||
const files = {
|
||||
'/tsconfig.json': JSON.stringify({
|
||||
references: [
|
||||
{
|
||||
path: './web',
|
||||
},
|
||||
{
|
||||
path: './empty',
|
||||
},
|
||||
{
|
||||
path: './noexists-should-ignore',
|
||||
},
|
||||
],
|
||||
}),
|
||||
'/web/tsconfig.json': JSON.stringify({
|
||||
include: ['../**/*.ts', '../**/*.vue'],
|
||||
compilerOptions: {
|
||||
composite: true,
|
||||
paths: {
|
||||
bar: ['../user.ts'],
|
||||
},
|
||||
},
|
||||
}),
|
||||
// tsconfig with no include / paths defined, should match nothing
|
||||
'/empty/tsconfig.json': JSON.stringify({
|
||||
compilerOptions: {
|
||||
composite: true,
|
||||
},
|
||||
}),
|
||||
'/user.ts': 'export type User = { bar: string }',
|
||||
}
|
||||
|
||||
const { props, deps } = resolve(
|
||||
`
|
||||
import { User } from 'bar'
|
||||
defineProps<User>()
|
||||
`,
|
||||
files,
|
||||
)
|
||||
|
||||
expect(props).toStrictEqual({
|
||||
bar: ['String'],
|
||||
})
|
||||
expect(deps && [...deps]).toStrictEqual(['/user.ts'])
|
||||
})
|
||||
|
||||
test('ts module resolve w/ path aliased vue file', () => {
|
||||
const files = {
|
||||
'/tsconfig.json': JSON.stringify({
|
||||
|
|
|
@ -1014,11 +1014,11 @@ function resolveWithTS(
|
|||
(c.config.options.pathsBasePath as string) ||
|
||||
dirname(c.config.options.configFilePath as string),
|
||||
)
|
||||
const included: string[] = c.config.raw?.include
|
||||
const excluded: string[] = c.config.raw?.exclude
|
||||
const included: string[] | undefined = c.config.raw?.include
|
||||
const excluded: string[] | undefined = c.config.raw?.exclude
|
||||
if (
|
||||
(!included && (!base || containingFile.startsWith(base))) ||
|
||||
included.some(p => isMatch(containingFile, joinPaths(base, p)))
|
||||
included?.some(p => isMatch(containingFile, joinPaths(base, p)))
|
||||
) {
|
||||
if (
|
||||
excluded &&
|
||||
|
@ -1089,8 +1089,12 @@ function loadTSConfig(
|
|||
const res = [config]
|
||||
if (config.projectReferences) {
|
||||
for (const ref of config.projectReferences) {
|
||||
tsConfigRefMap.set(ref.path, configPath)
|
||||
res.unshift(...loadTSConfig(ref.path, ts, fs))
|
||||
const refPath = ts.resolveProjectReferencePath(ref)
|
||||
if (!fs.fileExists(refPath)) {
|
||||
continue
|
||||
}
|
||||
tsConfigRefMap.set(refPath, configPath)
|
||||
res.unshift(...loadTSConfig(refPath, ts, fs))
|
||||
}
|
||||
}
|
||||
return res
|
||||
|
|
Loading…
Reference in New Issue