Skip to content

Commit

Permalink
Extract multi-file transpileString input to transpileVirtualProgram
Browse files Browse the repository at this point in the history
  • Loading branch information
ark120202 committed Apr 6, 2019
1 parent e87c8ee commit 8b8eaca
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 14 deletions.
33 changes: 22 additions & 11 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,25 +91,36 @@ export function createVirtualProgram(
return ts.createProgram(Object.keys(input), options, compilerHost);
}

export interface TranspileStringResult {
export interface VirtualProgramResult {
file: TranspiledFile;
diagnostics: ts.Diagnostic[];
}

export function transpileString(
input: string | Record<string, string>,
content: string,
options: CompilerOptions = {}
): TranspileStringResult {
const programFiles = typeof input === "object" ? input : { "main.ts": input };
const mainFileName =
typeof input === "string"
? "main.ts"
: Object.keys(input).find(x => /\bmain\.[a-z]+$/.test(x));
if (mainFileName === undefined) throw new Error('Input should have a file named "main"');

const program = createVirtualProgram(programFiles, options);
): VirtualProgramResult {
const program = createVirtualProgram({ "main.ts": content }, options);
const { diagnostics, transpiledFiles } = getTranspileOutput({ program, options });
const allDiagnostics = ts.sortAndDeduplicateDiagnostics([
...ts.getPreEmitDiagnostics(program),
...diagnostics,
]);

return { file: transpiledFiles.get("main.ts"), diagnostics: [...allDiagnostics] };
}

export function transpileVirtualProgram(
files: Record<string, string>,
options: CompilerOptions = {}
): VirtualProgramResult {
const mainFileName = Object.keys(files).find(x => /\bmain\.[a-z]+$/.test(x));
if (mainFileName === undefined) {
throw new Error('Virtual program should have a file named "main"');
}

const program = createVirtualProgram(files, options);
const { diagnostics, transpiledFiles } = getTranspileOutput({ program, options });
const allDiagnostics = ts.sortAndDeduplicateDiagnostics([
...ts.getPreEmitDiagnostics(program),
...diagnostics,
Expand Down
10 changes: 7 additions & 3 deletions test/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,8 @@ export function transpileString(
export function transpileStringResult(
input: string | { [filename: string]: string },
options: tstl.CompilerOptions = {},
): tstl.TranspileStringResult {
return tstl.transpileString(input, {
): tstl.VirtualProgramResult {
const optionsWithDefaults = {
luaLibImport: tstl.LuaLibImportKind.Inline,
luaTarget: tstl.LuaTarget.Lua53,
noHeader: true,
Expand All @@ -77,7 +77,11 @@ export function transpileStringResult(
"lib.esnext.d.ts",
],
...options,
});
};

return typeof input === "string"
? tstl.transpileString(input, optionsWithDefaults)
: tstl.transpileVirtualProgram(input, optionsWithDefaults);
}

const lualibContent = fs.readFileSync(
Expand Down

0 comments on commit 8b8eaca

Please sign in to comment.