fix(ivy): add missing directoryExists() method to shim CompilerHost (#27470)
The method `ts.CompilerHost.directoryExists` is optional, and was not previously handled by our ts.CompilerHost wrapper for factory and summary shims (GeneratedShimsHostWrapper). TypeScript checks for the existence of this method and silently ignores things like typeRoots if it's not found. This commit adds proper handling of directoryExists() to the shim. A test is also added which verifies typeRoots behavior works when shims are enabled. PR Close #27470
This commit is contained in:
parent
345bdd3db0
commit
0d8ab323a7
|
@ -39,11 +39,16 @@ export class GeneratedShimsHostWrapper implements ts.CompilerHost {
|
|||
(delegate.resolveTypeReferenceDirectives as ts3ResolveTypeReferenceDirectives) !(
|
||||
names, containingFile);
|
||||
}
|
||||
if (delegate.directoryExists !== undefined) {
|
||||
this.directoryExists = (directoryName: string) => delegate.directoryExists !(directoryName);
|
||||
}
|
||||
}
|
||||
|
||||
resolveTypeReferenceDirectives?:
|
||||
(names: string[], containingFile: string) => ts.ResolvedTypeReferenceDirective[];
|
||||
|
||||
directoryExists?: (directoryName: string) => boolean;
|
||||
|
||||
getSourceFile(
|
||||
fileName: string, languageVersion: ts.ScriptTarget,
|
||||
onError?: ((message: string) => void)|undefined,
|
||||
|
|
|
@ -57,7 +57,6 @@ export class NgtscTestEnvironment {
|
|||
"skipLibCheck": true,
|
||||
"noImplicitAny": true,
|
||||
"strictNullChecks": true,
|
||||
"types": [],
|
||||
"outDir": "built",
|
||||
"rootDir": ".",
|
||||
"baseUrl": ".",
|
||||
|
|
|
@ -1046,4 +1046,36 @@ describe('ngtsc behavioral tests', () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should compile programs with typeRoots', () => {
|
||||
// Write out a custom tsconfig.json that includes 'typeRoots' and 'files'. 'files' is necessary
|
||||
// because otherwise TS picks up the testTypeRoot/test/index.d.ts file into the program
|
||||
// automatically. Shims are also turned on (via allowEmptyCodegenFiles) because the shim
|
||||
// ts.CompilerHost wrapper can break typeRoot functionality (which this test is meant to
|
||||
// detect).
|
||||
env.write('tsconfig.json', `{
|
||||
"extends": "./tsconfig-base.json",
|
||||
"angularCompilerOptions": {
|
||||
"allowEmptyCodegenFiles": true
|
||||
},
|
||||
"compilerOptions": {
|
||||
"typeRoots": ["./testTypeRoot"],
|
||||
},
|
||||
"files": ["./test.ts"]
|
||||
}`);
|
||||
env.write('test.ts', `
|
||||
import {Test} from 'ambient';
|
||||
console.log(Test);
|
||||
`);
|
||||
env.write('testTypeRoot/.exists', '');
|
||||
env.write('testTypeRoot/test/index.d.ts', `
|
||||
declare module 'ambient' {
|
||||
export const Test = 'This is a test';
|
||||
}
|
||||
`);
|
||||
|
||||
env.driveMain();
|
||||
|
||||
// Success is enough to indicate that this passes.
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue