From 01aa16f64875e4e01b92a334d24ff15c74f80978 Mon Sep 17 00:00:00 2001 From: Perryvw Date: Sat, 4 Jun 2022 15:49:30 +0200 Subject: [PATCH 1/2] Resolve the correct lualib_bundles for node_modules dependencies --- src/transpilation/resolve.ts | 4 ++-- test/transpile/module-resolution.spec.ts | 17 ++++++++++++++--- .../dependency1-ts/index.ts | 5 +++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/transpilation/resolve.ts b/src/transpilation/resolve.ts index d786c79cf..56b0354bd 100644 --- a/src/transpilation/resolve.ts +++ b/src/transpilation/resolve.ts @@ -138,8 +138,8 @@ function resolveFileDependencies(file: ProcessedFile, context: ResolutionContext const diagnostics: ts.Diagnostic[] = []; for (const required of findRequiredPaths(file.code)) { - // Do no resolve lualib - if (required === "lualib_bundle") { + // Do no resolve lualib, unless it is included from node_modules + if (required === "lualib_bundle" && !isNodeModulesFile(file.fileName)) { dependencies.push({ fileName: "lualib_bundle", code: "" }); continue; } diff --git a/test/transpile/module-resolution.spec.ts b/test/transpile/module-resolution.spec.ts index 83836f6b7..2943f3602 100644 --- a/test/transpile/module-resolution.spec.ts +++ b/test/transpile/module-resolution.spec.ts @@ -246,11 +246,22 @@ describe("module resolution project with dependencies built by tstl library mode dependency2OtherFileResult: "Dependency 2 func: my string argument", }; - test("can resolve lua dependencies", () => { - util.testProject(path.join(projectPath, "tsconfig.json")) + test.only("can resolve lua dependencies", () => { + const transpileResult = util + .testProject(path.join(projectPath, "tsconfig.json")) .setMainFileName(path.join(projectPath, "main.ts")) .setOptions({ outDir: "tstl-out" }) - .expectToEqual(expectedResult); + .expectToEqual(expectedResult) + .getLuaResult(); + + // Assert lualib_bundle from node_module is include + const expectedLualibBundle = path.join("lua_modules", "dependency1", "lualib_bundle.lua"); + expect(transpileResult.transpiledFiles.some(f => f.outPath.endsWith(expectedLualibBundle))).toBe(true); + // Assert node_modules file requires the correct lualib_bundle + const requiringLuaFile = path.join("lua_modules", "dependency1", "index.lua"); + const lualibRequiringFile = transpileResult.transpiledFiles.find(f => f.outPath.endsWith(requiringLuaFile)); + expect(lualibRequiringFile).toBeDefined(); + expect(lualibRequiringFile?.lua).toContain('require("lua_modules.dependency1.lualib_bundle")'); }); test("can resolve dependencies and bundle", () => { diff --git a/test/transpile/module-resolution/project-with-tstl-library-modules/dependency1-ts/index.ts b/test/transpile/module-resolution/project-with-tstl-library-modules/dependency1-ts/index.ts index fc1cdddec..03cff47c5 100644 --- a/test/transpile/module-resolution/project-with-tstl-library-modules/dependency1-ts/index.ts +++ b/test/transpile/module-resolution/project-with-tstl-library-modules/dependency1-ts/index.ts @@ -3,3 +3,8 @@ import { dependency1OtherFileFunc } from "./d1otherfile"; export function dependency1IndexFunc() { return "function in dependency 1 index: " + dependency1OtherFileFunc(); } + +export function squares(nums: number[]) { + // Require lualib functionality + return nums.map(n => n * n); +} From 677e7d3ab9690600202df7e2e9fcb0ab0fc1eb03 Mon Sep 17 00:00:00 2001 From: Perryvw Date: Sat, 4 Jun 2022 15:58:30 +0200 Subject: [PATCH 2/2] Unfocus test --- test/transpile/module-resolution.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/transpile/module-resolution.spec.ts b/test/transpile/module-resolution.spec.ts index 2943f3602..dec970cf0 100644 --- a/test/transpile/module-resolution.spec.ts +++ b/test/transpile/module-resolution.spec.ts @@ -246,7 +246,7 @@ describe("module resolution project with dependencies built by tstl library mode dependency2OtherFileResult: "Dependency 2 func: my string argument", }; - test.only("can resolve lua dependencies", () => { + test("can resolve lua dependencies", () => { const transpileResult = util .testProject(path.join(projectPath, "tsconfig.json")) .setMainFileName(path.join(projectPath, "main.ts"))