Skip to content

Commit 0f3721c

Browse files
committed
Bundle lualib in correct order
1 parent d1275a4 commit 0f3721c

2 files changed

Lines changed: 24 additions & 9 deletions

File tree

src/LuaLib.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,10 @@ export function readLuaLibFeature(feature: LuaLibFeature, emitHost: EmitHost): s
130130
return luaLibFeature;
131131
}
132132

133-
export function loadInlineLualibFeatures(features: Iterable<LuaLibFeature>, emitHost: EmitHost): string {
134-
let result = "";
135-
133+
export function resolveRecursiveLualibFeatures(features: Iterable<LuaLibFeature>, emitHost: EmitHost): LuaLibFeature[] {
136134
const luaLibModulesInfo = getLuaLibModulesInfo(emitHost);
137135
const loadedFeatures = new Set<LuaLibFeature>();
136+
const result: LuaLibFeature[] = [];
138137

139138
function load(feature: LuaLibFeature): void {
140139
if (loadedFeatures.has(feature)) return;
@@ -144,8 +143,8 @@ export function loadInlineLualibFeatures(features: Iterable<LuaLibFeature>, emit
144143
if (dependencies) {
145144
dependencies.forEach(load);
146145
}
147-
const luaLibFeature = readLuaLibFeature(feature, emitHost);
148-
result += luaLibFeature + "\n";
146+
147+
result.push(feature);
149148
}
150149

151150
for (const feature of features) {
@@ -155,6 +154,17 @@ export function loadInlineLualibFeatures(features: Iterable<LuaLibFeature>, emit
155154
return result;
156155
}
157156

157+
export function loadInlineLualibFeatures(features: Iterable<LuaLibFeature>, emitHost: EmitHost): string {
158+
let result = "";
159+
160+
for (const feature of resolveRecursiveLualibFeatures(features, emitHost)) {
161+
const luaLibFeature = readLuaLibFeature(feature, emitHost);
162+
result += luaLibFeature + "\n";
163+
}
164+
165+
return result;
166+
}
167+
158168
export function loadImportedLualibFeatures(
159169
features: Iterable<LuaLibFeature>,
160170
emitHost: EmitHost,

src/lualib-build/plugin.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import * as ts from "typescript";
33
import * as tstl from "..";
44
import * as path from "path";
55
import { getUsedLuaLibFeatures } from "../transformation/utils/lualib";
6-
import { LuaLibFeature, LuaLibModulesInfo, luaLibModulesInfoFileName } from "../LuaLib";
6+
import { LuaLibFeature, LuaLibModulesInfo, luaLibModulesInfoFileName, resolveRecursiveLualibFeatures } from "../LuaLib";
77
import { EmitHost, ProcessedFile } from "../transpilation/utils";
88
import {
99
isExportAlias,
@@ -43,10 +43,15 @@ class LuaLibPlugin implements tstl.Plugin {
4343
emitBOM
4444
);
4545

46-
// Create lualib bundle by inlining all lualib features into one file
47-
const exportedLualibFeatures = result.filter(f => path.basename(f.fileName).split(".")[0] in LuaLibFeature);
46+
// Create map of result files keyed by their 'lualib name'
47+
const exportedLualibFeatures = new Map(result.map(f => [path.basename(f.fileName).split(".")[0], f.code]));
48+
49+
// Figure out the order required in the bundle by recursively resolving all dependency features
4850
const allFeatures = Object.values(LuaLibFeature) as LuaLibFeature[];
49-
let lualibBundle = exportedLualibFeatures.map(f => f.code).join("\n");
51+
const orderedFeatures = resolveRecursiveLualibFeatures(allFeatures, emitHost);
52+
53+
// Concatenate lualib files into bundle with exports table and add lualib_bundle.lua to results
54+
let lualibBundle = orderedFeatures.map(f => exportedLualibFeatures.get(LuaLibFeature[f])).join("\n");
5055
const exports = allFeatures.flatMap(feature => luaLibModuleInfo[feature].exports);
5156
lualibBundle += `\nreturn {\n${exports.map(exportName => ` ${exportName} = ${exportName}`).join(",\n")}\n}\n`;
5257
result.push({ fileName: "lualib_bundle.lua", code: lualibBundle });

0 commit comments

Comments
 (0)