UNPKG

vite-plugin-react-server

Version:
71 lines (68 loc) 2 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { readFile } from 'fs/promises'; import { basename } from 'path'; import postcss from 'postcss'; let cssLoaderPort; async function initialize(data) { cssLoaderPort = data.port; data.port.postMessage({ type: "INITIALIZED" }); data.port.unref(); } const cssFilesByPage = /* @__PURE__ */ new Map(); function setCurrentPage(page) { if (page && !cssFilesByPage.has(page)) { cssFilesByPage.set(page, /* @__PURE__ */ new Set()); } } function getCssFilesForPage(page) { return Array.from(cssFilesByPage.get(page) || []); } async function load(url, context, defaultLoad) { if (url.endsWith(".css")) { const source = await readFile(new URL(url), "utf-8"); const result = await postcss().process(source, { from: url, to: url, map: { inline: false, annotation: false } }); const moduleName = basename(url, ".css").replace(".", "_"); const classes = {}; result.root.walkRules((rule) => { const selector = rule.selector.replace(".", ""); const className = `${moduleName}_${selector}`; classes[selector] = className; rule.selector = `.${className}`; }); const transformedCss = result.root.toString(); if (cssLoaderPort) { cssLoaderPort.postMessage({ type: "CSS_FILE", id: url, cssFile: transformedCss }); } const moduleSource = ` const styles = ${JSON.stringify(classes)}; export default styles; export const css = ${JSON.stringify(transformedCss)}; `; return { format: "module", source: moduleSource, shortCircuit: true }; } return defaultLoad(url, context, defaultLoad); } function resolve(specifier, context, defaultResolve) { return defaultResolve(specifier, context, defaultResolve); } export { getCssFilesForPage, initialize, load, resolve, setCurrentPage }; //# sourceMappingURL=css-loader.js.map