Skip to content

Commit 8b8eaca

Browse files
committed
Extract multi-file transpileString input to transpileVirtualProgram
1 parent e87c8ee commit 8b8eaca

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

src/index.ts

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -91,25 +91,36 @@ export function createVirtualProgram(
9191
return ts.createProgram(Object.keys(input), options, compilerHost);
9292
}
9393

94-
export interface TranspileStringResult {
94+
export interface VirtualProgramResult {
9595
file: TranspiledFile;
9696
diagnostics: ts.Diagnostic[];
9797
}
9898

9999
export function transpileString(
100-
input: string | Record<string, string>,
100+
content: string,
101101
options: CompilerOptions = {}
102-
): TranspileStringResult {
103-
const programFiles = typeof input === "object" ? input : { "main.ts": input };
104-
const mainFileName =
105-
typeof input === "string"
106-
? "main.ts"
107-
: Object.keys(input).find(x => /\bmain\.[a-z]+$/.test(x));
108-
if (mainFileName === undefined) throw new Error('Input should have a file named "main"');
109-
110-
const program = createVirtualProgram(programFiles, options);
102+
): VirtualProgramResult {
103+
const program = createVirtualProgram({ "main.ts": content }, options);
111104
const { diagnostics, transpiledFiles } = getTranspileOutput({ program, options });
105+
const allDiagnostics = ts.sortAndDeduplicateDiagnostics([
106+
...ts.getPreEmitDiagnostics(program),
107+
...diagnostics,
108+
]);
109+
110+
return { file: transpiledFiles.get("main.ts"), diagnostics: [...allDiagnostics] };
111+
}
112112

113+
export function transpileVirtualProgram(
114+
files: Record<string, string>,
115+
options: CompilerOptions = {}
116+
): VirtualProgramResult {
117+
const mainFileName = Object.keys(files).find(x => /\bmain\.[a-z]+$/.test(x));
118+
if (mainFileName === undefined) {
119+
throw new Error('Virtual program should have a file named "main"');
120+
}
121+
122+
const program = createVirtualProgram(files, options);
123+
const { diagnostics, transpiledFiles } = getTranspileOutput({ program, options });
113124
const allDiagnostics = ts.sortAndDeduplicateDiagnostics([
114125
...ts.getPreEmitDiagnostics(program),
115126
...diagnostics,

test/util.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ export function transpileString(
6262
export function transpileStringResult(
6363
input: string | { [filename: string]: string },
6464
options: tstl.CompilerOptions = {},
65-
): tstl.TranspileStringResult {
66-
return tstl.transpileString(input, {
65+
): tstl.VirtualProgramResult {
66+
const optionsWithDefaults = {
6767
luaLibImport: tstl.LuaLibImportKind.Inline,
6868
luaTarget: tstl.LuaTarget.Lua53,
6969
noHeader: true,
@@ -77,7 +77,11 @@ export function transpileStringResult(
7777
"lib.esnext.d.ts",
7878
],
7979
...options,
80-
});
80+
};
81+
82+
return typeof input === "string"
83+
? tstl.transpileString(input, optionsWithDefaults)
84+
: tstl.transpileVirtualProgram(input, optionsWithDefaults);
8185
}
8286

8387
const lualibContent = fs.readFileSync(

0 commit comments

Comments
 (0)