UNPKG

vite-plugin-react-server

Version:
99 lines (97 loc) 14 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ const CSS_EXT = /\.(css|scss|sass|less|styl|stylus|pcss|postcss)(\?|$)/; async function collectRunnerCss(server, pagePath, projectRoot, logger, verbose = false) { const env = server.environments?.["server"]; if (!env) { if (verbose) logger.warn(`[collectRunnerCss] no server environment`); return []; } const moduleGraph = env.moduleGraph; const candidates = [ pagePath, pagePath.startsWith("/") ? pagePath : `/${pagePath}`, pagePath.startsWith(projectRoot) ? pagePath : `${projectRoot}/${pagePath}` ]; let pageModule; for (const url of candidates) { pageModule = await moduleGraph.getModuleByUrl(url); if (pageModule) break; } if (!pageModule) { const idMap = moduleGraph.idToModuleMap; if (idMap) { for (const [id, node] of idMap.entries()) { if (id.endsWith(pagePath) || id.endsWith(`/${pagePath}`)) { pageModule = node; break; } } } } if (!pageModule) { if (verbose) { logger.warn( `[collectRunnerCss] no module for pagePath: ${pagePath} (tried: ${candidates.join(", ")}; graph size: ${moduleGraph.idToModuleMap?.size ?? "?"})` ); } return []; } if (verbose) { logger.info(`[collectRunnerCss] resolved page module: ${pageModule.id}`); } const seen = /* @__PURE__ */ new Set(); const out = []; const walk = async (mod) => { if (!mod?.id || seen.has(mod.id)) return; seen.add(mod.id); if (CSS_EXT.test(mod.id)) { try { const transformed = await env.transformRequest(`${mod.id}?inline`); if (transformed?.code) { const code = transformed.code; const exportMatch = code.match(/__vite_ssr_export_default__\s*=\s*("(?:\\.|[^"\\])*")/) ?? code.match(/export\s+default\s+("(?:\\.|[^"\\])*")/) ?? code.match(/__vite__cssModules\.default\s*=\s*("(?:\\.|[^"\\])*")/); if (exportMatch) { const raw = JSON.parse(exportMatch[1]); if (typeof raw === "string" && raw.length > 0) { out.push({ id: mod.id, code: raw }); } else if (verbose) { logger.warn(`[collectRunnerCss] inline default empty for ${mod.id}`); } } else if (verbose) { logger.warn( `[collectRunnerCss] could not find inline export in transform for ${mod.id} (codeLen=${code.length})` ); } } else if (verbose) { logger.warn(`[collectRunnerCss] no transformed code for ${mod.id}?inline`); } } catch (err) { if (verbose) { logger.warn( `[collectRunnerCss] failed to inline ${mod.id}: ${String(err)}` ); } } } if (mod.importedModules) { for (const imported of mod.importedModules) { if (imported && typeof imported === "object" && "id" in imported) { await walk(imported); } } } }; await walk(pageModule); if (verbose) { logger.info( `[collectRunnerCss] collected ${out.length} CSS file(s) for ${pagePath}` ); } return out; } export { collectRunnerCss }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdFJ1bm5lckNzcy5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvY29sbGVjdFJ1bm5lckNzcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIEVudmlyb25tZW50TW9kdWxlR3JhcGgsXG4gIEVudmlyb25tZW50TW9kdWxlTm9kZSxcbiAgTW9kdWxlTm9kZSxcbiAgVml0ZURldlNlcnZlcixcbiAgTG9nZ2VyLFxufSBmcm9tIFwidml0ZVwiO1xuXG5jb25zdCBDU1NfRVhUID0gL1xcLihjc3N8c2Nzc3xzYXNzfGxlc3N8c3R5bHxzdHlsdXN8cGNzc3xwb3N0Y3NzKShcXD98JCkvO1xuXG5leHBvcnQgdHlwZSBDb2xsZWN0ZWRDc3MgPSB7IGlkOiBzdHJpbmc7IGNvZGU6IHN0cmluZyB9O1xuXG4vKipcbiAqIFdhbGtzIHRoZSBWaXRlIHNlcnZlciBlbnZpcm9ubWVudCdzIG1vZHVsZSBncmFwaCBmcm9tIGBwYWdlUGF0aGAgYW5kXG4gKiByZXR1cm5zIHRoZSByYXcgQ1NTIGNvZGUgb2YgZXZlcnkgQ1NTIG1vZHVsZSByZWFjaGFibGUgZnJvbSBpdC5cbiAqXG4gKiBSZXBsYWNlcyB0aGUgcnNjLXdvcmtlcidzIE5vZGUgRVNNIENTUyBsb2FkZXIgZm9yIHJ1bm5lciBtb2RlOiB0aGVcbiAqIHJ1bm5lciBieXBhc3NlcyBOb2RlJ3MgaW1wb3J0IHJlc29sdmVyLCBzbyB0aGUgbG9hZGVyIG5ldmVyIGZpcmVzLlxuICogVGhlIG1haW4gdGhyZWFkIGhhcyB2aXNpYmlsaXR5IGludG8gdGhlIHNhbWUgbW9kdWxlIGdyYXBoIGFuZCBjYW5cbiAqIGNvbGxlY3QgQ1NTIGRldGVybWluaXN0aWNhbGx5IG9uY2UgYHJ1bm5lci5pbXBvcnQocGFnZVBhdGgpYCBoYXNcbiAqIGNhdXNlZCBWaXRlIHRvIHRyYW5zZm9ybSB0aGUgcGFnZSBhbmQgaXRzIGRlcHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb2xsZWN0UnVubmVyQ3NzKFxuICBzZXJ2ZXI6IFZpdGVEZXZTZXJ2ZXIsXG4gIHBhZ2VQYXRoOiBzdHJpbmcsXG4gIHByb2plY3RSb290OiBzdHJpbmcsXG4gIGxvZ2dlcjogTG9nZ2VyLFxuICB2ZXJib3NlID0gZmFsc2Vcbik6IFByb21pc2U8Q29sbGVjdGVkQ3NzW10+IHtcbiAgY29uc3QgZW52ID0gc2VydmVyLmVudmlyb25tZW50cz8uW1wic2VydmVyXCJdO1xuICBpZiAoIWVudikge1xuICAgIGlmICh2ZXJib3NlKSBsb2dnZXIud2FybihgW2NvbGxlY3RSdW5uZXJDc3NdIG5vIHNlcnZlciBlbnZpcm9ubWVudGApO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IG1vZHVsZUdyYXBoOiBFbnZpcm9ubWVudE1vZHVsZUdyYXBoID0gZW52Lm1vZHVsZUdyYXBoO1xuICBjb25zdCBjYW5kaWRhdGVzID0gW1xuICAgIHBhZ2VQYXRoLFxuICAgIHBhZ2VQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gcGFnZVBhdGggOiBgLyR7cGFnZVBhdGh9YCxcbiAgICBwYWdlUGF0aC5zdGFydHNXaXRoKHByb2plY3RSb290KSA/IHBhZ2VQYXRoIDogYCR7cHJvamVjdFJvb3R9LyR7cGFnZVBhdGh9YCxcbiAgXTtcblxuICBsZXQgcGFnZU1vZHVsZTogRW52aXJvbm1lbnRNb2R1bGVOb2RlIHwgTW9kdWxlTm9kZSB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCB1cmwgb2YgY2FuZGlkYXRlcykge1xuICAgIHBhZ2VNb2R1bGUgPSBhd2FpdCBtb2R1bGVHcmFwaC5nZXRNb2R1bGVCeVVybCh1cmwpO1xuICAgIGlmIChwYWdlTW9kdWxlKSBicmVhaztcbiAgfVxuXG4gIC8vIEZhbGxiYWNrOiBzY2FuIGlkVG9Nb2R1bGVNYXAgZm9yIGFuIGVudHJ5IHdob3NlIGlkIGVuZHNXaXRoIHRoZSBwYWdlUGF0aC5cbiAgLy8gVml0ZSBrZXlzIHNlcnZlci1lbnYgbW9kdWxlcyBieSBmdWxsIGFic29sdXRlIHBhdGggd2l0aCBvcHRpb25hbCBxdWVyeS5cbiAgaWYgKCFwYWdlTW9kdWxlKSB7XG4gICAgY29uc3QgaWRNYXAgPSAobW9kdWxlR3JhcGggYXMgYW55KS5pZFRvTW9kdWxlTWFwIGFzXG4gICAgICB8IE1hcDxzdHJpbmcsIEVudmlyb25tZW50TW9kdWxlTm9kZT5cbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGlmIChpZE1hcCkge1xuICAgICAgZm9yIChjb25zdCBbaWQsIG5vZGVdIG9mIGlkTWFwLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoaWQuZW5kc1dpdGgocGFnZVBhdGgpIHx8IGlkLmVuZHNXaXRoKGAvJHtwYWdlUGF0aH1gKSkge1xuICAgICAgICAgIHBhZ2VNb2R1bGUgPSBub2RlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwYWdlTW9kdWxlKSB7XG4gICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgW2NvbGxlY3RSdW5uZXJDc3NdIG5vIG1vZHVsZSBmb3IgcGFnZVBhdGg6ICR7cGFnZVBhdGh9ICh0cmllZDogJHtjYW5kaWRhdGVzLmpvaW4oXCIsIFwiKX07IGdyYXBoIHNpemU6ICR7XG4gICAgICAgICAgKG1vZHVsZUdyYXBoIGFzIGFueSkuaWRUb01vZHVsZU1hcD8uc2l6ZSA/PyBcIj9cIlxuICAgICAgICB9KWBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAodmVyYm9zZSkge1xuICAgIGxvZ2dlci5pbmZvKGBbY29sbGVjdFJ1bm5lckNzc10gcmVzb2x2ZWQgcGFnZSBtb2R1bGU6ICR7cGFnZU1vZHVsZS5pZH1gKTtcbiAgfVxuXG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgb3V0OiBDb2xsZWN0ZWRDc3NbXSA9IFtdO1xuXG4gIGNvbnN0IHdhbGsgPSBhc3luYyAobW9kOiBFbnZpcm9ubWVudE1vZHVsZU5vZGUgfCBNb2R1bGVOb2RlKSA9PiB7XG4gICAgaWYgKCFtb2Q/LmlkIHx8IHNlZW4uaGFzKG1vZC5pZCkpIHJldHVybjtcbiAgICBzZWVuLmFkZChtb2QuaWQpO1xuXG4gICAgaWYgKENTU19FWFQudGVzdChtb2QuaWQpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IGF3YWl0IGVudi50cmFuc2Zvcm1SZXF1ZXN0KGAke21vZC5pZH0/aW5saW5lYCk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZD8uY29kZSkge1xuICAgICAgICAgIGNvbnN0IGNvZGUgPSB0cmFuc2Zvcm1lZC5jb2RlO1xuICAgICAgICAgIC8vIFZpdGUgdHJhbnNmb3JtcyBgLmNzcz9pbmxpbmVgIG1vZHVsZXMgd2l0aCBkaWZmZXJlbnQgZnJhbWluZ3M6XG4gICAgICAgICAgLy8gLSBTU1IgcnVubmVyIG91dHB1dDogYGNvbnN0IF9fdml0ZV9zc3JfZXhwb3J0X2RlZmF1bHRfXyA9IFwiLi4uXCI7YFxuICAgICAgICAgIC8vIC0gcGxhaW4gRVNNIG91dHB1dDogIGBleHBvcnQgZGVmYXVsdCBcIi4uLlwiO2BcbiAgICAgICAgICAvLyAtIGxlZ2FjeSBtb2R1bGUgQVBJOiBgX192aXRlX19jc3NNb2R1bGVzLmRlZmF1bHQgPSBcIi4uLlwiO2BcbiAgICAgICAgICBjb25zdCBleHBvcnRNYXRjaCA9XG4gICAgICAgICAgICBjb2RlLm1hdGNoKC9fX3ZpdGVfc3NyX2V4cG9ydF9kZWZhdWx0X19cXHMqPVxccyooXCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwiKS8pID8/XG4gICAgICAgICAgICBjb2RlLm1hdGNoKC9leHBvcnRcXHMrZGVmYXVsdFxccysoXCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwiKS8pID8/XG4gICAgICAgICAgICBjb2RlLm1hdGNoKC9fX3ZpdGVfX2Nzc01vZHVsZXNcXC5kZWZhdWx0XFxzKj1cXHMqKFwiKD86XFxcXC58W15cIlxcXFxdKSpcIikvKTtcbiAgICAgICAgICBpZiAoZXhwb3J0TWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhdyA9IEpTT04ucGFyc2UoZXhwb3J0TWF0Y2hbMV0pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByYXcgPT09IFwic3RyaW5nXCIgJiYgcmF3Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgb3V0LnB1c2goeyBpZDogbW9kLmlkLCBjb2RlOiByYXcgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oYFtjb2xsZWN0UnVubmVyQ3NzXSBpbmxpbmUgZGVmYXVsdCBlbXB0eSBmb3IgJHttb2QuaWR9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgICAgYFtjb2xsZWN0UnVubmVyQ3NzXSBjb3VsZCBub3QgZmluZCBpbmxpbmUgZXhwb3J0IGluIHRyYW5zZm9ybSBmb3IgJHttb2QuaWR9IChjb2RlTGVuPSR7Y29kZS5sZW5ndGh9KWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgW2NvbGxlY3RSdW5uZXJDc3NdIG5vIHRyYW5zZm9ybWVkIGNvZGUgZm9yICR7bW9kLmlkfT9pbmxpbmVgKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgW2NvbGxlY3RSdW5uZXJDc3NdIGZhaWxlZCB0byBpbmxpbmUgJHttb2QuaWR9OiAke1N0cmluZyhlcnIpfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZC5pbXBvcnRlZE1vZHVsZXMpIHtcbiAgICAgIGZvciAoY29uc3QgaW1wb3J0ZWQgb2YgbW9kLmltcG9ydGVkTW9kdWxlcyBhcyBJdGVyYWJsZTxcbiAgICAgICAgRW52aXJvbm1lbnRNb2R1bGVOb2RlIHwgTW9kdWxlTm9kZVxuICAgICAgPikge1xuICAgICAgICBpZiAoaW1wb3J0ZWQgJiYgdHlwZW9mIGltcG9ydGVkID09PSBcIm9iamVjdFwiICYmIFwiaWRcIiBpbiBpbXBvcnRlZCkge1xuICAgICAgICAgIGF3YWl0IHdhbGsoaW1wb3J0ZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGF3YWl0IHdhbGsocGFnZU1vZHVsZSk7XG5cbiAgaWYgKHZlcmJvc2UpIHtcbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBbY29sbGVjdFJ1bm5lckNzc10gY29sbGVjdGVkICR7b3V0Lmxlbmd0aH0gQ1NTIGZpbGUocykgZm9yICR7cGFnZVBhdGh9YFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVFBLE1BQU0sT0FBVSxHQUFBLHVEQUFBO0FBY2hCLGVBQXNCLGlCQUNwQixNQUNBLEVBQUEsUUFBQSxFQUNBLFdBQ0EsRUFBQSxNQUFBLEVBQ0EsVUFBVSxLQUNlLEVBQUE7QUFDekIsRUFBTSxNQUFBLEdBQUEsR0FBTSxNQUFPLENBQUEsWUFBQSxHQUFlLFFBQVEsQ0FBQTtBQUMxQyxFQUFBLElBQUksQ0FBQyxHQUFLLEVBQUE7QUFDUixJQUFJLElBQUEsT0FBQSxFQUFnQixNQUFBLENBQUEsSUFBQSxDQUFLLENBQTBDLHdDQUFBLENBQUEsQ0FBQTtBQUNuRSxJQUFBLE9BQU8sRUFBQztBQUFBO0FBR1YsRUFBQSxNQUFNLGNBQXNDLEdBQUksQ0FBQSxXQUFBO0FBQ2hELEVBQUEsTUFBTSxVQUFhLEdBQUE7QUFBQSxJQUNqQixRQUFBO0FBQUEsSUFDQSxTQUFTLFVBQVcsQ0FBQSxHQUFHLENBQUksR0FBQSxRQUFBLEdBQVcsSUFBSSxRQUFRLENBQUEsQ0FBQTtBQUFBLElBQ2xELFFBQUEsQ0FB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