UNPKG

@redwoodjs/sdk

Version:

Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime

34 lines (33 loc) 1.09 kB
import MagicString from "magic-string"; import { virtualPlugin } from "./virtualPlugin.mjs"; import { $ } from "../lib/$.mjs"; export const findFilesContainingUseClient = async ({ rootDir, containingPath, }) => { const result = await $({ cwd: rootDir, // context(justinvdm, 2024-12-05): Empty grep results will cause non-zero exit code reject: false, }) `grep -rl --include=*.ts --include=*.tsx -e ${'"use client"'} -e ${"'use client'"} ${containingPath}`; return (result.stdout ?.split("\n") .map((line) => line.trim().slice(1)) .filter(Boolean) ?? []); }; export const useClientLookupPlugin = ({ rootDir, containingPath, }) => virtualPlugin("use-client-lookup", async () => { const files = await findFilesContainingUseClient({ rootDir, containingPath, }); const s = new MagicString(` export const useClientLookup = { ${files .map((file) => ` "${file}": () => import("${file}"), `) .join("")} }; `); return { code: s.toString(), map: s.generateMap(), }; });