UNPKG

vite-plugin-react-server

Version:
90 lines (87 loc) 12.9 kB
/** * vite-plugin-react-server * Copyright (c) Nico Brinkkemper * MIT License */ import { createCssProps } from './createCssProps.js'; import { readFileSync } from 'node:fs'; import { join } from 'node:path'; function processCssFromStaticBuild(cssInputs, options) { const { userOptions, logger, verbose, staticOutDir, staticManifest } = options; const cssMap = /* @__PURE__ */ new Map(); for (const [key] of Object.entries(cssInputs)) { if (verbose) { logger?.info(`[unified-css] Loading CSS content for ${key}`); } let cssContent = ""; if (staticManifest && staticOutDir) { const cssFilePath = join(staticOutDir, key); try { cssContent = readFileSync(cssFilePath, "utf-8"); if (verbose) { logger?.info(`[unified-css] Got CSS from static build file: ${cssFilePath}`); } } catch (error) { if (verbose) { logger?.info(`[unified-css] Failed to read CSS file: ${cssFilePath} - ${error}`); } } } else { if (verbose) { logger?.info(`[unified-css] No static manifest available for CSS file: ${key}`); } } if (verbose) { logger?.info( `[unified-css] CSS content for ${key}: ${typeof cssContent}, length: ${cssContent?.length}, preview: ${cssContent?.substring(0, 100)}` ); } if (typeof cssContent !== "string" || cssContent === "undefined" || !cssContent) { if (verbose) { logger?.info(`[unified-css] Skipping CSS file ${key} - invalid content`); } continue; } if (cssContent) { cssMap.set( key, createCssProps({ id: key, code: cssContent, userOptions }) ); if (verbose) { logger?.info(`[unified-css] Added CSS file ${key} to map`); } } } return cssMap; } function combineCssFiles(...sources) { const combined = /* @__PURE__ */ new Map(); for (const source of sources) { if (source) { for (const [key, value] of source.entries()) { combined.set(key, value); } } } return combined; } function processInlineCssForState(cssFiles, addCssFileContent, userOptions) { for (const [id, cssContent] of cssFiles.entries()) { if (cssContent.children && typeof cssContent.children === "string") { addCssFileContent(id, cssContent.children, userOptions); } } } function createUnifiedCssProcessor(options) { return { processCssFromStaticBuild: (cssInputs) => processCssFromStaticBuild(cssInputs, options), combineCssFiles, processInlineCssForState }; } export { combineCssFiles, createUnifiedCssProcessor, processCssFromStaticBuild, processInlineCssForState }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVW5pZmllZENzc1Byb2Nlc3Nvci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2hlbHBlcnMvY3JlYXRlVW5pZmllZENzc1Byb2Nlc3Nvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENzc0NvbnRlbnQsIFJlc29sdmVkVXNlck9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IGNyZWF0ZUNzc1Byb3BzIH0gZnJvbSBcIi4vY3JlYXRlQ3NzUHJvcHMuanNcIjtcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuXG4vKipcbiAqIFVuaWZpZWQgQ1NTIFByb2Nlc3NvclxuICogXG4gKiBQVVJQT1NFOiBDb25zb2xpZGF0ZSBDU1MgcHJvY2Vzc2luZyBsb2dpYyB1c2VkIGFjcm9zczpcbiAqIC0gcHJvY2Vzc0Nzc0ZpbGVzRm9yUGFnZXMgKHBsdWdpbi5zZXJ2ZXIudHMsIHBsdWdpbi5jbGllbnQudHMpXG4gKiAtIFJTQyB3b3JrZXIgbWVzc2FnZSBoYW5kbGVyIChtZXNzYWdlSGFuZGxlci50c3gpXG4gKiAtIEhUTUwgd29ya2VyIG1lc3NhZ2UgaGFuZGxlclxuICogXG4gKiBUaGlzIGhlbHBlciBwcm92aWRlcyBjb25zaXN0ZW50IENTUyBwcm9jZXNzaW5nIGJlaGF2aW9yIGFjcm9zcyBhbGwgZW52aXJvbm1lbnRzXG4gKiBhbmQgcmVkdWNlcyBjb2RlIGR1cGxpY2F0aW9uLlxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pZmllZENzc1Byb2Nlc3Nvck9wdGlvbnMge1xuICAvKiogVXNlciBvcHRpb25zIGZvciBDU1MgcHJvY2Vzc2luZyAqL1xuICB1c2VyT3B0aW9uczogUmVzb2x2ZWRVc2VyT3B0aW9ucztcbiAgLyoqIExvZ2dlciBmb3IgdmVyYm9zZSBvdXRwdXQgKi9cbiAgbG9nZ2VyPzogTG9nZ2VyO1xuICAvKiogV2hldGhlciB0byBlbmFibGUgdmVyYm9zZSBsb2dnaW5nICovXG4gIHZlcmJvc2U/OiBib29sZWFuO1xuICAvKiogU3RhdGljIGJ1aWxkIG91dHB1dCBkaXJlY3RvcnkgKi9cbiAgc3RhdGljT3V0RGlyPzogc3RyaW5nO1xuICAvKiogU3RhdGljIG1hbmlmZXN0IGZvciBDU1MgZmlsZSByZXNvbHV0aW9uICovXG4gIHN0YXRpY01hbmlmZXN0PzogYW55O1xuICAvKiogQnVuZGxlIGNvbnRhaW5pbmcgQ1NTIGZpbGVzICovXG4gIGJ1bmRsZT86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDc3NQcm9jZXNzaW5nUmVzdWx0IHtcbiAgLyoqIENTUyBmaWxlcyBvcmdhbml6ZWQgYnkgcGFnZS9yb3V0ZSAqL1xuICBjc3NGaWxlc0J5UGFnZTogTWFwPHN0cmluZywgTWFwPHN0cmluZywgQ3NzQ29udGVudD4+O1xuICAvKiogR2xvYmFsIENTUyBmaWxlcyAqL1xuICBnbG9iYWxDc3M6IE1hcDxzdHJpbmcsIENzc0NvbnRlbnQ+O1xuICAvKiogQ29tYmluZWQgQ1NTIGZpbGVzIGZvciBhIHNwZWNpZmljIHJvdXRlICovXG4gIGNvbWJpbmVkQ3NzRmlsZXM6IE1hcDxzdHJpbmcsIENzc0NvbnRlbnQ+O1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBDU1MgZmlsZXMgZnJvbSBzdGF0aWMgYnVpbGQgb3V0cHV0XG4gKiBcbiAqIEBwYXJhbSBjc3NJbnB1dHMgLSBDU1MgZmlsZSBpbnB1dHMgZnJvbSBtYW5pZmVzdFxuICogQHBhcmFtIG9wdGlvbnMgLSBQcm9jZXNzaW5nIG9wdGlvbnNcbiAqIEByZXR1cm5zIFByb2Nlc3NlZCBDU1MgY29udGVudCBtYXBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDc3NGcm9tU3RhdGljQnVpbGQoXG4gIGNzc0lucHV0czogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgb3B0aW9uczogVW5pZmllZENzc1Byb2Nlc3Nvck9wdGlvbnNcbik6IE1hcDxzdHJpbmcsIENzc0NvbnRlbnQ+IHtcbiAgY29uc3QgeyB1c2VyT3B0aW9ucywgbG9nZ2VyLCB2ZXJib3NlLCBzdGF0aWNPdXREaXIsIHN0YXRpY01hbmlmZXN0IH0gPSBvcHRpb25zO1xuICBjb25zdCBjc3NNYXAgPSBuZXcgTWFwPHN0cmluZywgQ3NzQ29udGVudD4oKTtcblxuICBmb3IgKGNvbnN0IFtrZXldIG9mIE9iamVjdC5lbnRyaWVzKGNzc0lucHV0cykpIHtcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKGBbdW5pZmllZC1jc3NdIExvYWRpbmcgQ1NTIGNvbnRlbnQgZm9yICR7a2V5fWApO1xuICAgIH1cblxuICAgIC8vIEdldCBDU1MgY29udGVudCBmcm9tIHN0YXRpYyBidWlsZCBvdXRwdXQgZmlsZXNcbiAgICBsZXQgY3NzQ29udGVudCA9IFwiXCI7XG5cbiAgICAvLyBUcnkgdG8gZ2V0IENTUyBmcm9tIHN0YXRpYyBidWlsZCBvdXRwdXQgZGlyZWN0b3J5XG4gICAgaWYgKHN0YXRpY01hbmlmZXN0ICYmIHN0YXRpY091dERpcikge1xuICAgICAgY29uc3QgY3NzRmlsZVBhdGggPSBqb2luKHN0YXRpY091dERpciwga2V5KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNzc0NvbnRlbnQgPSByZWFkRmlsZVN5bmMoY3NzRmlsZVBhdGgsICd1dGYtOCcpO1xuICAgICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICAgIGxvZ2dlcj8uaW5mbyhgW3VuaWZpZWQtY3NzXSBHb3QgQ1NTIGZyb20gc3RhdGljIGJ1aWxkIGZpbGU6ICR7Y3NzRmlsZVBhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgICAgbG9nZ2VyPy5pbmZvKGBbdW5pZmllZC1jc3NdIEZhaWxlZCB0byByZWFkIENTUyBmaWxlOiAke2Nzc0ZpbGVQYXRofSAtICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgbG9nZ2VyPy5pbmZvKGBbdW5pZmllZC1jc3NdIE5vIHN0YXRpYyBtYW5pZmVzdCBhdmFpbGFibGUgZm9yIENTUyBmaWxlOiAke2tleX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgbG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3VuaWZpZWQtY3NzXSBDU1MgY29udGVudCBmb3IgJHtrZXl9OiAke3R5cGVvZiBjc3NDb250ZW50fSwgbGVuZ3RoOiAke1xuICAgICAgICAgIGNzc0NvbnRlbnQ/Lmxlbmd0aFxuICAgICAgICB9LCBwcmV2aWV3OiAke2Nzc0NvbnRlbnQ/LnN1YnN0cmluZygwLCAxMDApfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZW9mIGNzc0NvbnRlbnQgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgIGNzc0NvbnRlbnQgPT09IFwidW5kZWZpbmVkXCIgfHxcbiAgICAgICFjc3NDb250ZW50XG4gICAgKSB7XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oYFt1bmlmaWVkLWNzc10gU2tpcHBpbmcgQ1NTIGZpbGUgJHtrZXl9IC0gaW52YWxpZCBjb250ZW50YCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY3NzQ29udGVudCkge1xuICAgICAgY3NzTWFwLnNldChcbiAgICAgICAga2V5LFxuICAgICAgICBjcmVhdGVDc3NQcm9wcyh7XG4gICAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgICBjb2RlOiBjc3NDb250ZW50LFxuICAgICAgICAgIHVzZXJPcHRpb25zOiB1c2VyT3B0aW9ucyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBpZiAodmVyYm9zZSkge1xuICAgICAgICBsb2dnZXI/LmluZm8oYFt1bmlmaWVkLWNzc10gQWRkZWQgQ1NTIGZpbGUgJHtrZXl9IHRvIG1hcGApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjc3NNYXA7XG59XG5cbi8qKlxuICogQ29tYmluZXMgQ1NTIGZpbGVzIGZyb20gbXVsdGlwbGUgc291cmNlc1xuICogXG4gKiBAcGFyYW0gc291cmNlcyAtIEFycmF5IG9mIENTUyBmaWxlIG1hcHMgdG8gY29tYmluZVxuICogQHJldHVybnMgQ29tYmluZWQgQ1NTIGZpbGUgbWFwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lQ3NzRmlsZXMoXG4gIC4uLnNvdXJjZXM6IEFycmF5PE1hcDxzdHJpbmcsIENzc0NvbnRlbnQ+IHwgdW5kZWZpbmVkPlxuKTogTWFwPHN0cmluZywgQ3NzQ29udGVudD4ge1xuICBjb25zdCBjb21iaW5lZCA9IG5ldyBNYXA8c3RyaW5nLCBDc3NDb250ZW50PigpO1xuICBcbiAgZm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuICAgIGlmIChzb3VyY2UpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHNvdXJjZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29tYmluZWQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIGNvbWJpbmVkO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyBpbmxpbmUgQ1NTIGNvbnRlbnQgZm9yIHN0YXRlZnVsIHN5c3RlbXNcbiAqIFxuICogQHBhcmFtIGNzc0ZpbGVzIC0gQ1NTIGZpbGVzIG1hcFxuICogQHBhcmFtIGFkZENzc0ZpbGVDb250ZW50IC0gRnVuY3Rpb24gdG8gYWRkIENTUyBjb250ZW50IHRvIHN0YXRlXG4gKiBAcGFyYW0gdXNlck9wdGlvbnMgLSBVc2VyIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NJbmxpbmVDc3NGb3JTdGF0ZShcbiAgY3NzRmlsZXM6IE1hcDxzdHJpbmcsIENzc0NvbnRlbnQ+LFxuICBhZGRDc3NGaWxlQ29udGVudDogKGlkOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgdXNlck9wdGlvbnM6IFJlc29sdmVkVXNlck9wdGlvbnMpID0+IHZvaWQsXG4gIHVzZXJPcHRpb25zOiBSZXNvbHZlZFVzZXJPcHRpb25zXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbaWQsIGNzc0NvbnRlbnRdIG9mIGNzc0ZpbGVzLmVudHJpZXMoKSkge1xuICAgIGlmIChjc3NDb250ZW50LmNoaWxkcmVuICYmIHR5cGVvZiBjc3NDb250ZW50LmNoaWxkcmVuID09PSAnc3RyaW5nJykge1xuICAgICAgYWRkQ3NzRmlsZUNvbnRlbnQoaWQsIGNzc0NvbnRlbnQuY2hpbGRyZW4sIHVzZXJPcHRpb25zKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdW5pZmllZCBDU1MgcHJvY2Vzc29yIGluc3RhbmNlXG4gKiBcbiAqIEBwYXJhbSBvcHRpb25zIC0gUHJvY2Vzc2luZyBvcHRpb25zXG4gKiBAcmV0dXJucyBDU1MgcHJvY2Vzc29yIGZ1bmN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5pZmllZENzc1Byb2Nlc3NvcihvcHRpb25zOiBVbmlmaWVkQ3NzUHJvY2Vzc29yT3B0aW9ucykge1xuICByZXR1cm4ge1xuICAgIHByb2Nlc3NDc3NGcm9tU3RhdGljQnVpbGQ6IChjc3NJbnB1dHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IFxuICAgICAgcHJvY2Vzc0Nzc0Zyb21TdGF0aWNCdWlsZChjc3NJbnB1dHMsIG9wdGlvbnMpLFxuICAgIGNvbWJpbmVDc3NGaWxlcyxcbiAgICBwcm9jZXNzSW5saW5lQ3NzRm9yU3RhdGUsXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBaURPLFNBQVMseUJBQUEsQ0FDZCxXQUNBLE9BQ3lCLEVBQUE7QUFDekIsRUFBQSxNQUFNLEVBQUUsV0FBYSxFQUFBLE1BQUEs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