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