-
-
Notifications
You must be signed in to change notification settings - Fork 184
Description
Bug Report
Description
When using luaBundle in a pnpm (or yarn) workspace monorepo, the same package gets bundled multiple times under different module keys if it's referenced both directly and transitively through symlinked dependencies.
Reproduction
Setup: pnpm workspace monorepo with three packages:
pkg-a— base library (buildMode: "library")pkg-b— depends onpkg-a(buildMode: "library")pkg-c— depends onpkg-aandpkg-b(luaBundle entry point)
pnpm symlink layout:
packages/pkg-c/node_modules/pkg-a -> ../../pkg-a (real path: packages/pkg-a)
packages/pkg-c/node_modules/pkg-b -> ../../pkg-b
packages/pkg-b/node_modules/pkg-a -> ../../pkg-a (same real path!)
Result: bundle.lua contains pkg-a twice:
____modules = {
["lua_modules.pkg-a.dist.index"] = function(...) -- direct dep from pkg-c
-- ... pkg-a code ...
end,
["lua_modules.pkg-b.node_modules.pkg-a.dist.index"] = function(...) -- transitive dep via pkg-b
-- ... identical pkg-a code ...
end,
}Expected: pkg-a should appear only once in the bundle.
Root Cause
In src/transpilation/resolve.ts, the enhanced-resolve resolver is configured with symlinks: false (to preserve node_modules path detection). The deduplication in resolvedFiles and processedDependencies uses string-based path comparison. Since pnpm symlinks create different filesystem paths for the same physical file, the same module passes deduplication checks and gets bundled multiple times.
Environment
- typescript-to-lua: 1.33.2
- pnpm: 10.28.0
- OS: Linux (WSL2)