Skip to content

Commit 6ea99c3

Browse files
committed
Added luaLibName option to control lualib_bundle
1 parent fb39ea9 commit 6ea99c3

File tree

10 files changed

+25
-12
lines changed

10 files changed

+25
-12
lines changed

src/CompilerOptions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export interface TypeScriptToLuaOptions {
3838
tstlVerbose?: boolean;
3939
lua51AllowTryCatchInAsyncAwait?: boolean;
4040
measurePerformance?: boolean;
41+
luaLibName?: string;
4142
}
4243

4344
export type CompilerOptions = OmitIndexSignature<ts.CompilerOptions> &

src/LuaLib.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,15 @@ export function loadInlineLualibFeatures(
187187
export function loadImportedLualibFeatures(
188188
features: Iterable<LuaLibFeature>,
189189
luaTarget: LuaTarget,
190-
emitHost: EmitHost
190+
emitHost: EmitHost,
191+
luaLibName: string
191192
): lua.Statement[] {
192193
const luaLibModuleInfo = getLuaLibModulesInfo(luaTarget, emitHost);
193194

194195
const imports = Array.from(features).flatMap(feature => luaLibModuleInfo[feature].exports);
195196

196197
const requireCall = lua.createCallExpression(lua.createIdentifier("require"), [
197-
lua.createStringLiteral("lualib_bundle"),
198+
lua.createStringLiteral(luaLibName),
198199
]);
199200
if (imports.length === 0) {
200201
return [];

src/LuaPrinter.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,10 +235,11 @@ export class LuaPrinter {
235235

236236
const luaTarget = this.options.luaTarget ?? LuaTarget.Universal;
237237
const luaLibImport = this.options.luaLibImport ?? LuaLibImportKind.Require;
238+
const luaLibName = this.options.luaLibName ?? "lualib_bundle";
238239
if (luaLibImport === LuaLibImportKind.Require && file.luaLibFeatures.size > 0) {
239240
// Import lualib features
240241
sourceChunks = this.printStatementArray(
241-
loadImportedLualibFeatures(file.luaLibFeatures, luaTarget, this.emitHost)
242+
loadImportedLualibFeatures(file.luaLibFeatures, luaTarget, this.emitHost, luaLibName)
242243
);
243244
} else if (luaLibImport === LuaLibImportKind.Inline && file.luaLibFeatures.size > 0) {
244245
// Inline lualib features

src/cli/parse.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ export const optionDeclarations: CommandLineOption[] = [
5151
type: "enum",
5252
choices: Object.values(LuaLibImportKind),
5353
},
54+
{
55+
name: "luaLibName",
56+
description: "The name of the file to store Lua library features in.",
57+
type: "string",
58+
},
5459
{
5560
name: "luaTarget",
5661
aliases: ["lt"],

src/lualib-build/plugin.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class LuaLibPlugin implements tstl.Plugin {
6464
let lualibBundle = orderedFeatures.map(f => exportedLualibFeatures.get(LuaLibFeature[f])).join("\n");
6565
const exports = allFeatures.flatMap(feature => luaLibModuleInfo[feature].exports);
6666
lualibBundle += `\nreturn {\n${exports.map(exportName => ` ${exportName} = ${exportName}`).join(",\n")}\n}\n`;
67-
result.push({ fileName: "lualib_bundle.lua", code: lualibBundle });
67+
result.push({ fileName: (options.luaLibName ?? "lualib_bundle") + ".lua", code: lualibBundle });
6868

6969
return diagnostics;
7070
}

src/transpilation/bundle.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ export function getBundleResult(program: ts.Program, files: ProcessedFile[]): [t
113113
const footers: string[] = [];
114114
if (options.sourceMapTraceback) {
115115
// Generates SourceMapTraceback for the entire file
116-
footers.push('local __TS__SourceMapTraceBack = require("lualib_bundle").__TS__SourceMapTraceBack\n');
116+
footers.push(`local __TS__SourceMapTraceBack = require("${options.luaLibName ?? "lualib_bundle"}").__TS__SourceMapTraceBack\n`);
117117
footers.push(`${sourceMapTracebackBundlePlaceholder}\n`);
118118
}
119119

src/transpilation/resolve.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ class ResolutionContext {
6060

6161
public resolveImport(file: ProcessedFile, required: string): void {
6262
// Do no resolve lualib - always use the lualib of the application entry point, not the lualib from external packages
63-
if (required === "lualib_bundle") {
64-
this.resolvedFiles.set("lualib_bundle", { fileName: "lualib_bundle", code: "" });
63+
if (required === (this.options.luaLibName ?? "lualib_bundle")) {
64+
this.resolvedFiles.set(this.options.luaLibName ?? "lualib_bundle", { fileName: this.options.luaLibName ?? "lualib_bundle", code: "" });
6565
return;
6666
}
6767

src/transpilation/transpiler.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,17 +115,17 @@ export class Transpiler {
115115
const resolutionResult = resolveDependencies(program, files, this.emitHost);
116116
diagnostics.push(...resolutionResult.diagnostics);
117117

118-
const lualibRequired = resolutionResult.resolvedFiles.some(f => f.fileName === "lualib_bundle");
118+
const lualibRequired = resolutionResult.resolvedFiles.some(f => f.fileName === (options.luaLibName ?? "lualib_bundle"));
119119
if (lualibRequired) {
120120
// Remove lualib placeholders from resolution result
121-
resolutionResult.resolvedFiles = resolutionResult.resolvedFiles.filter(f => f.fileName !== "lualib_bundle");
121+
resolutionResult.resolvedFiles = resolutionResult.resolvedFiles.filter(f => f.fileName !== (options.luaLibName ?? "lualib_bundle"));
122122

123123
if (options.tstlVerbose) {
124124
console.log("Including lualib bundle");
125125
}
126126

127127
// Add lualib bundle to source dir 'virtually', will be moved to correct output dir in emitPlan
128-
const fileName = normalizeSlashes(path.resolve(getSourceDir(program), "lualib_bundle.lua"));
128+
const fileName = normalizeSlashes(path.resolve(getSourceDir(program), (options.luaLibName ?? "lualib_bundle") + ".lua"));
129129
const luaTarget = options.luaTarget ?? LuaTarget.Universal;
130130
resolutionResult.resolvedFiles.unshift({ fileName, code: getLuaLibBundle(luaTarget, this.emitHost) });
131131
}

test/util.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -427,9 +427,9 @@ export abstract class TestBuilder {
427427
// Lua lib
428428
if (
429429
this.options.luaLibImport === tstl.LuaLibImportKind.Require ||
430-
mainFile.includes('require("lualib_bundle")')
430+
mainFile.includes(`require("${(this.options.luaLibName ?? "lualib_bundle")}")`)
431431
) {
432-
this.injectLuaFile(L, lua, lauxlib, "lualib_bundle", readLuaLib(luaTarget));
432+
this.injectLuaFile(L, lua, lauxlib, (this.options.luaLibName ?? "lualib_bundle"), readLuaLib(luaTarget));
433433
}
434434

435435
// Load all transpiled files into Lua's package cache

tsconfig-schema.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@
4646
"default": "require",
4747
"enum": ["none", "inline", "require"]
4848
},
49+
"luaLibName": {
50+
"description": "The name of the file to store Lua library features in.",
51+
"type": "string",
52+
"default": "lualib_bundle"
53+
},
4954
"luaTarget": {
5055
"description": "Specifies the Lua version you want to generate code for.",
5156
"type": "string",

0 commit comments

Comments
 (0)