Provide compiled JSON to TypeScript compiler. (#4404)

Fixes #4101

Previously, we would just provide the raw JSON to the TypeScript
compiler worker, but TypeScript does not transform JSON.  This caused
a problem when emitting a bundle, that the JSON would just be "inlined"
into the output, instead of being transformed into a module.

This fixes this problem by providing the compiled JSON to the TypeScript
compiler, so TypeScript just sees JSON as a "normal" TypeScript module.
This commit is contained in:
Kitson Kelly 2020-03-19 03:39:53 +11:00 committed by GitHub
parent 83f4916195
commit da8cb408c8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 60 additions and 7 deletions

View file

@ -242,8 +242,16 @@ export class Host implements ts.CompilerHost {
assert(sourceFile != null);
if (!sourceFile.tsSourceFile) {
assert(sourceFile.sourceCode != null);
// even though we assert the extension for JSON modules to the compiler
// is TypeScript, TypeScript internally analyses the filename for its
// extension and tries to parse it as JSON instead of TS. We have to
// change the filename to the TypeScript file.
sourceFile.tsSourceFile = ts.createSourceFile(
fileName.startsWith(ASSETS) ? sourceFile.filename : fileName,
fileName.startsWith(ASSETS)
? sourceFile.filename
: fileName.toLowerCase().endsWith(".json")
? `${fileName}.ts`
: fileName,
sourceFile.sourceCode,
languageVersion
);