The server actions transform, which handles the `'use cache'` directive,
was not being applied to `node_modules` when imported from route
handlers. This caused `'use cache'` functions from dependencies to fail
with errors like `"cacheLife() can only be called inside a 'use cache'
function"``.
The issue was that the `AppRoute` context used `internal_custom_rules`
for its foreign code module options, which did not include the server
actions transform. This is inconsistent with `AppRSC` (App Router
pages), which correctly uses `foreign_next_server_rules` that includes
the transform.
The fix extends `foreign_next_server_rules` with `internal_custom_rules`
and uses it for the foreign code context in `AppRoute`, matching the
pattern used by `AppRSC`.
Turbopack applies the "use cache" transform in node_modules, but Webpack
wasn't doing that. This is due to a sneaky little regex that controls
whether files in node_modules are passed to SWC for transforming or not
-- `use client` and `use server` were included there, but `use cache`
wasn't. This PR fixes that.
(I don't really expect NPM packages to use `"use cache"` because it's
pretty application-specific, but it might be relevant in a monorepo
situation where shared utils that use the directive can live in a
separate package)
---------
Co-authored-by: Hendrik Liebau <mail@hendrik-liebau.de>