Skip to content

Commit 9392c7e

Browse files
authored
Fix require resolve (#1346)
* Fixed missed require patterns for module resolution * fix bug with mixed quotes
1 parent 9446f6b commit 9392c7e

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

src/transpilation/resolve.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,11 +304,11 @@ function isBuildModeLibrary(program: ts.Program) {
304304
function findRequiredPaths(code: string): string[] {
305305
// Find all require("<path>") paths in a lua code string
306306
const paths: string[] = [];
307-
const pattern = /(^|\s|;|=|\()require\("(.+?)"\)/g;
307+
const pattern = /(^|\s|;|=|\()require\s*\(?(["|'])(.+?)\2\)?/g;
308308
// eslint-disable-next-line @typescript-eslint/ban-types
309309
let match: RegExpExecArray | null;
310310
while ((match = pattern.exec(code))) {
311-
paths.push(match[2]);
311+
paths.push(match[3]);
312312
}
313313

314314
return paths;
@@ -321,7 +321,7 @@ function replaceRequireInCode(file: ProcessedFile, originalRequire: string, newR
321321
const escapedRequire = originalRequire.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
322322

323323
file.code = file.code.replace(
324-
new RegExp(`(^|\\s|;|=|\\()require\\("${escapedRequire}"\\)`),
324+
new RegExp(`(^|\\s|;|=|\\()require\\s*\\(?["|']${escapedRequire}["|']\\)?`),
325325
`$1require("${requirePath}")`
326326
);
327327
}

test/unit/modules/resolution.spec.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,37 @@ test("doesn't resolve paths out of root dir", () => {
8787
.expectDiagnosticsToMatchSnapshot([couldNotResolveRequire.code]);
8888
});
8989

90+
test("resolves non-standard requires", () => {
91+
const { transpiledFiles } = util.testModule`
92+
export * from "./externalLua";
93+
`
94+
.addExtraFile("externalLua.d.ts", "export const foo = 3;")
95+
.addExtraFile(
96+
"externalLua.lua",
97+
`
98+
require("requiredLuaFile1") -- standard
99+
require('requiredLuaFile2') -- single quote
100+
require'requiredLuaFile3' -- no parentheses
101+
require"requiredLuaFile4" -- no parentheses double quote
102+
require "requiredLuaFile5" -- no parentheses and space
103+
require "requiredLua'File6" -- no parentheses and space
104+
require 'requiredLua"File7' -- no parentheses and space
105+
`
106+
)
107+
.addExtraFile("requiredLuaFile1.lua", "")
108+
.addExtraFile("requiredLuaFile2.lua", "")
109+
.addExtraFile("requiredLuaFile3.lua", "")
110+
.addExtraFile("requiredLuaFile4.lua", "")
111+
.addExtraFile("requiredLuaFile5.lua", "")
112+
.addExtraFile("requiredLua'File6.lua", "")
113+
.addExtraFile('requiredLua"File7.lua', "")
114+
.expectToHaveNoDiagnostics()
115+
.getLuaResult();
116+
117+
// Expect main.lua, externalLua.lua and all 7 required lua files in there
118+
expect(transpiledFiles.map(f => f.outPath)).toHaveLength(9);
119+
});
120+
90121
test.each([
91122
{
92123
declarationStatement: `

0 commit comments

Comments
 (0)