From d85ec385f79e9edebc1dbca7fb4142b28c86231e Mon Sep 17 00:00:00 2001 From: Roman Axelrod Date: Fri, 1 May 2026 10:04:34 -0600 Subject: [PATCH] Add CSS manifest aliases for SCSS entries --- src/vite-config.js | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/vite-config.js b/src/vite-config.js index 296fb05..ff66ee4 100644 --- a/src/vite-config.js +++ b/src/vite-config.js @@ -1,8 +1,42 @@ import { defineConfig } from 'vite'; -import { cpSync, mkdirSync } from 'node:fs'; +import { cpSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'; import { basename, dirname, extname, join, relative, resolve } from 'node:path'; import { collectEntries, normalizePath, shouldCopyFile, walkFiles } from './file-rules.js'; +const addScssManifestAliases = (outDir) => { + const manifestPath = join(outDir, 'manifest.json'); + + if (!existsSync(manifestPath)) { + return; + } + + const manifest = JSON.parse(readFileSync(manifestPath, 'utf8')); + let changed = false; + + for (const [key, entry] of Object.entries(manifest)) { + if (!key.endsWith('.scss')) { + continue; + } + + const cssKey = `${key.slice(0, -'.scss'.length)}.css`; + if (manifest[cssKey]) { + continue; + } + + manifest[cssKey] = { + ...entry, + src: cssKey, + name: cssKey, + names: Array.isArray(entry.names) ? Array.from(new Set([cssKey, ...entry.names])) : [cssKey] + }; + changed = true; + } + + if (changed) { + writeFileSync(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`); + } +}; + const copyServerFilesPlugin = ({ sourceDir, outDir }) => ({ name: 'copy-bridgeable-server-files', buildStart() { @@ -25,6 +59,8 @@ const copyServerFilesPlugin = ({ sourceDir, outDir }) => ({ mkdirSync(dirname(destination), { recursive: true }); cpSync(absolutePath, destination); }); + + addScssManifestAliases(outDir); } });