Description
Following the recent addition of pnpm support I was looking to move our monorepo to rewatch and noticed a couple of issues which I've reproduced in a thin repo.
Firstly, ppx binary resolution isn't working correctly when ppx dependency is from a child.
In this monorepo example (mind the branch!) we have dependencies set up as follows
@monorepo/root
has no rescript of its own, but is configured with@monorepo/main
as abs-dependency
@monorepo/main
depends on@monorepo/library
@monorepo/library
depends onrescript-logger
and uses"ppx-flags": ["rescript-logger/ppx"]
Actual outcome, running rewatch build
in root:
❯ rewatch build .
[1/7]📦 Building package tree...Could not read folder: test/intl...
[1/7] 📦 Built package tree in 0.00s
[2/7] 🕵️ Found source files in 0.00s
[3/7] 📝 Read compile state 0.01s
[4/7] 🧹 Cleaned 0/92 0.00s
[5/7] 🧱 Parsing... ⠁ 1/1
err: sh: /Users/tiago/src/tabazevedo/rewatch-pnpm-test/node_modules/rescript-logger/ppx: No such file or directory
We've found a bug for you!
/Users/tiago/src/tabazevedo/rewatch-pnpm-test/packages/library/src/Library.res
Error while running external preprocessor
Command line: /Users/tiago/src/tabazevedo/rewatch-pnpm-test/node_modules/rescript-logger/ppx '/var/folders/fl/k9vmqsxx3yl92r6_ch6rvc5w0000gn/T/ppx6b9ce9Library.res' '/var/folders/fl/k9vmqsxx3yl92r6_ch6rvc5w0000gn/T/ppx74d7b1Library.res'
[5/7] ️🛑 Error parsing source files in 0.01s
sh: /Users/tiago/src/tabazevedo/rewatch-pnpm-test/node_modules/rescript-logger/ppx: No such file or directory
We've found a bug for you!
/Users/tiago/src/tabazevedo/rewatch-pnpm-test/packages/library/src/Library.res
Error while running external preprocessor
Command line: /Users/tiago/src/tabazevedo/rewatch-pnpm-test/node_modules/rescript-logger/ppx '/var/folders/fl/k9vmqsxx3yl92r6_ch6rvc5w0000gn/T/ppx6b9ce9Library.res' '/var/folders/fl/k9vmqsxx3yl92r6_ch6rvc5w0000gn/T/ppx74d7b1Library.res'
️🛑 Could not parse Source Files
It's expecting the rescript-logger
library to be hoisted to the top-level and looking up the binary there:
PROJECT_ROOT/node_modules/rescript-logger/ppx
Expected outcome
Binary lookup path is non-hoisted variant:
PROJECT_ROOT/node_modules/@monorepo/main/node_modules/@monorepo/library/node_modules/rescript-logger/ppx
Let me know if I'm missing something, I'll raise a couple of other issues with similar findings in other scenarios.