Skip to content

Commit c93505e

Browse files
committed
Fix strict issues
1 parent 503cc68 commit c93505e

File tree

6 files changed

+49
-51
lines changed

6 files changed

+49
-51
lines changed

src/CommandLineParser.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -224,16 +224,17 @@ function getArgumentValue(
224224
}
225225

226226
function readValue(value: string | boolean, type: CommandLineOption["type"]): string | boolean {
227-
if (type === "boolean") {
228-
return value === true || value === "true" || value === "t";
229-
} else if (type === "enum") {
230-
return value.toString().toLowerCase();
227+
switch (type) {
228+
case "boolean":
229+
return value === true || value === "true" || value === "t";
230+
case "enum":
231+
return value.toString().toLowerCase();
231232
}
232233
}
233234

234235
export function parseConfigFileWithSystem(
235236
configFileName: string,
236-
commandLineOptions: CompilerOptions,
237+
commandLineOptions?: CompilerOptions,
237238
system = ts.sys
238239
): ParsedCommandLine {
239240
const { config, error } = ts.readConfigFile(configFileName, system.readFile);

src/Emit.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ export function emitTranspiledFiles(
1616
options: CompilerOptions,
1717
transpiledFiles: Map<string, TranspiledFile>
1818
): OutputFile[] {
19-
const { rootDir, outDir, outFile, luaLibImport } = options;
19+
// TODO:
20+
const { rootDir = "", outDir = "", outFile, luaLibImport } = options;
2021

2122
const files: OutputFile[] = [];
2223
for (const [fileName, { lua, sourceMap, declaration, declarationMap }] of transpiledFiles) {
@@ -32,7 +33,7 @@ export function emitTranspiledFiles(
3233
outPath = outFile;
3334
} else {
3435
// append to workingDir or outDir
35-
outPath = path.resolve(options.outDir, outFile);
36+
outPath = path.resolve(outDir, outFile);
3637
}
3738
} else {
3839
outPath = trimExt(outPath) + ".lua";

src/index.ts

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const libCache: { [key: string]: ts.SourceFile } = {};
4343
/** @internal */
4444
export function createVirtualProgram(
4545
input: Record<string, string>,
46-
options?: CompilerOptions
46+
options: CompilerOptions = {}
4747
): ts.Program {
4848
const compilerHost: ts.CompilerHost = {
4949
fileExists: () => true,
@@ -86,40 +86,29 @@ export function createVirtualProgram(
8686
return ts.createProgram(Object.keys(input), options, compilerHost);
8787
}
8888

89-
export interface VirtualProgramResult {
90-
file: TranspiledFile;
89+
export interface TranspileStringResult {
9190
diagnostics: ts.Diagnostic[];
91+
file?: TranspiledFile;
9292
}
9393

9494
export function transpileString(
95-
content: string,
95+
main: string,
9696
options: CompilerOptions = {}
97-
): VirtualProgramResult {
98-
const program = createVirtualProgram({ "main.ts": content }, options);
99-
const { diagnostics, transpiledFiles } = getTranspileOutput({ program, options });
100-
const allDiagnostics = ts.sortAndDeduplicateDiagnostics([
101-
...ts.getPreEmitDiagnostics(program),
102-
...diagnostics,
103-
]);
104-
105-
return { file: transpiledFiles.get("main.ts"), diagnostics: [...allDiagnostics] };
97+
): TranspileStringResult {
98+
const { diagnostics, transpiledFiles } = transpileVirtualProgram({ "main.ts": main }, options);
99+
return { diagnostics, file: transpiledFiles.get("main.ts") };
106100
}
107101

108102
export function transpileVirtualProgram(
109103
files: Record<string, string>,
110104
options: CompilerOptions = {}
111-
): VirtualProgramResult {
112-
const mainFileName = Object.keys(files).find(x => /\bmain\.[a-z]+$/.test(x));
113-
if (mainFileName === undefined) {
114-
throw new Error('Virtual program should have a file named "main"');
115-
}
116-
105+
): TranspilationResult {
117106
const program = createVirtualProgram(files, options);
118-
const { diagnostics, transpiledFiles } = getTranspileOutput({ program, options });
107+
const transpileOutput = getTranspileOutput({ program, options });
119108
const allDiagnostics = ts.sortAndDeduplicateDiagnostics([
120109
...ts.getPreEmitDiagnostics(program),
121-
...diagnostics,
110+
...transpileOutput.diagnostics,
122111
]);
123112

124-
return { file: transpiledFiles.get(mainFileName), diagnostics: [...allDiagnostics] };
113+
return { ...transpileOutput, diagnostics: [...allDiagnostics] };
125114
}

src/tstl.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ function updateWatchCompilationHost(
283283
// do a full recompile after an error
284284
fullRecompile = errors.length > 0;
285285

286-
host.onWatchStatusChange(
286+
host.onWatchStatusChange!(
287287
cliDiagnostics.watchErrorSummary(errors.length),
288288
host.getNewLine(),
289289
compilerOptions

test/unit/sourcemaps.spec.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,14 @@ test.each([
4747
},
4848
])("Source map has correct mapping (%p)", async ({ typeScriptSource, assertPatterns }) => {
4949
// Act
50-
const {
51-
file: { lua, sourceMap },
52-
} = util.transpileStringResult(typeScriptSource);
50+
const { file } = util.transpileStringResult(typeScriptSource);
5351

5452
// Assert
55-
const consumer = await new SourceMapConsumer(sourceMap);
53+
if (!util.expectToBeDefined(file.lua) || !util.expectToBeDefined(file.sourceMap)) return;
5654

55+
const consumer = await new SourceMapConsumer(file.sourceMap);
5756
for (const { luaPattern, typeScriptPattern } of assertPatterns) {
58-
const luaPosition = lineAndColumnOf(lua, luaPattern);
57+
const luaPosition = lineAndColumnOf(file.lua, luaPattern);
5958
const mappedPosition = consumer.originalPositionFor(luaPosition);
6059

6160
const typescriptPosition = lineAndColumnOf(typeScriptSource, typeScriptPattern);
@@ -125,17 +124,18 @@ test("Inline sourcemaps", () => {
125124
inlineSourceMap: true,
126125
};
127126

128-
const { lua, sourceMap } = util.transpileStringResult(typeScriptSource, compilerOptions);
127+
const { file } = util.transpileStringResult(typeScriptSource, compilerOptions);
128+
if (!util.expectToBeDefined(file.lua)) return;
129129

130-
const inlineSourceMapMatch = lua.match(
130+
const inlineSourceMapMatch = file.lua.match(
131131
/--# sourceMappingURL=data:application\/json;base64,([A-Za-z0-9+/=]+)/,
132132
);
133133

134134
if (util.expectToBeDefined(inlineSourceMapMatch)) {
135135
const inlineSourceMap = Buffer.from(inlineSourceMapMatch[1], "base64").toString();
136-
expect(sourceMap).toBe(inlineSourceMap);
136+
expect(file.sourceMap).toBe(inlineSourceMap);
137137

138-
expect(util.executeLua(lua)).toBe("foo");
138+
expect(util.executeLua(file.lua)).toBe("foo");
139139
}
140140
});
141141

test/util.ts

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@ expect.extend({
3131
}
3232

3333
// TODO:
34-
expect(executionError).toBeDefined();
35-
expect(executionError.message).toContain(error.message);
34+
if (expectToBeDefined(executionError)) {
35+
expect(executionError.message).toContain(error.message);
36+
}
3637

3738
return { pass: true, message: () => "" };
3839
},
@@ -43,10 +44,8 @@ export function transpileString(
4344
options: tstl.CompilerOptions = {},
4445
ignoreDiagnostics = true,
4546
): string {
46-
const {
47-
diagnostics,
48-
file: { lua },
49-
} = transpileStringResult(str, options);
47+
const { diagnostics, file } = transpileStringResult(str, options);
48+
if (!expectToBeDefined(file) || !expectToBeDefined(file.lua)) return "";
5049

5150
const errors = diagnostics
5251
.filter(d => d.category === ts.DiagnosticCategory.Error)
@@ -56,13 +55,13 @@ export function transpileString(
5655
throw new Error(errors.map(d => d.messageText).join("\n"));
5756
}
5857

59-
return lua.trim();
58+
return file.lua.trim();
6059
}
6160

6261
export function transpileStringResult(
63-
input: string | { [filename: string]: string },
62+
input: string | Record<string, string>,
6463
options: tstl.CompilerOptions = {},
65-
): tstl.VirtualProgramResult {
64+
): Required<tstl.TranspileStringResult> {
6665
const optionsWithDefaults = {
6766
luaTarget: tstl.LuaTarget.Lua53,
6867
noHeader: true,
@@ -78,9 +77,17 @@ export function transpileStringResult(
7877
...options,
7978
};
8079

81-
return typeof input === "string"
82-
? tstl.transpileString(input, optionsWithDefaults)
83-
: tstl.transpileVirtualProgram(input, optionsWithDefaults);
80+
const { diagnostics, transpiledFiles } = tstl.transpileVirtualProgram(
81+
typeof input === "string" ? { "main.ts": input } : input,
82+
optionsWithDefaults,
83+
);
84+
85+
const mainFileName = [...transpiledFiles.keys()].find(x => /\bmain\.[a-z]+$/.test(x));
86+
if (mainFileName === undefined) {
87+
throw new Error('Program should have a file named "main"');
88+
}
89+
90+
return { diagnostics, file: transpiledFiles.get(mainFileName)! };
8491
}
8592

8693
const lualibContent = fs.readFileSync(

0 commit comments

Comments
 (0)