diff options
Diffstat (limited to 'compiler.ts')
| -rw-r--r-- | compiler.ts | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/compiler.ts b/compiler.ts index fdd9dc997..7f889b30c 100644 --- a/compiler.ts +++ b/compiler.ts @@ -1,23 +1,32 @@ import * as ts from "typescript"; import { assert, globalEval } from "./util"; -import { readFileSync } from "./fs"; +import { exit, readFileSync } from "./os"; +import * as path from "path"; export function compile(cwd: string, inputFn: string): void { const options: ts.CompilerOptions = { - "allowJs": true, - "outFile": "out.js", + allowJs: true, + outFile: "out.js" }; const host = new CompilerHost(cwd); - let program = ts.createProgram([inputFn], options, host); + const inputExt = path.extname(inputFn); + if (!EXTENSIONS.includes(inputExt)) { + console.error(`Bad file name extension for input "${inputFn}"`); + exit(1); + } + + const program = ts.createProgram([inputFn], options, host); //let sourceFiles = program.getSourceFiles(); //console.log("rootFileNames", program.getRootFileNames()); - let emitResult = program.emit(); + const emitResult = program.emit(); assert(!emitResult.emitSkipped); //console.log("emitResult", emitResult); } +const EXTENSIONS = [".ts", ".js"]; + export class CompilerHost { constructor(public cwd: string) {} @@ -101,9 +110,24 @@ export class CompilerHost { moduleNames: string[], containingFile: string, reusedNames?: string[] - ): (ts.ResolvedModule | undefined)[] { - console.log("resolveModuleNames", moduleNames); - return []; + ): Array<ts.ResolvedModule | undefined> { + console.log("resolveModuleNames", { moduleNames, reusedNames }); + return moduleNames.map((name: string) => { + if ( + name.startsWith("/") || + name.startsWith("http://") || + name.startsWith("https://") + ) { + throw Error("Non-relative imports not yet supported."); + } else { + // Relative import. + console.log("relative import", { containingFile, name }); + const containingDir = path.dirname(containingFile); + const resolvedFileName = path.join(containingDir, name); + const isExternalLibraryImport = false; + return { resolvedFileName, isExternalLibraryImport }; + } + }); } fileExists(fileName: string): boolean { |
