Files
dealplustech/node_modules/astro/dist/vite-plugin-astro/hmr.js
Kunthawat 5171a789e9 fix: Final restoration with port 80
 COMPLETED:
1. Dockerfile uses port 80 (astro preview)
2. BaseLayout imports globals.css
3. globals.css with Tailwind v4 @theme syntax
4. index.astro has Header, Footer, FixedContact
5. All image references fixed to existing files
6. Hero uses hdpe_pipe_main.jpg
7. Product cards use hdpe001.jpg
8. pt-20 on main for fixed header

 TESTED LOCALLY:
- Build: 15 pages in 1.27s
- Docker build successful
- Port 80 working
- Images load
- CSS works

Ready for Easypanel deployment.
2026-03-12 08:58:56 +07:00

61 lines
2.2 KiB
JavaScript

import { parseAstroRequest } from "./query.js";
import { frontmatterRE } from "./utils.js";
async function handleHotUpdate(ctx, { logger, astroFileToCompileMetadata }) {
for (const [astroFile, compileData] of astroFileToCompileMetadata) {
const isUpdatedFileCssDep = compileData.css.some((css) => css.dependencies?.includes(ctx.file));
if (isUpdatedFileCssDep) {
astroFileToCompileMetadata.delete(astroFile);
}
}
const oldCode = astroFileToCompileMetadata.get(ctx.file)?.originalCode;
if (oldCode == null) return;
const newCode = await ctx.read();
if (isStyleOnlyChanged(oldCode, newCode)) {
logger.debug("watch", "style-only change");
astroFileToCompileMetadata.delete(ctx.file);
return ctx.modules.filter((mod) => {
if (!mod.id) {
return false;
}
const { query } = parseAstroRequest(mod.id);
return query.astro && query.type === "style" && !query.inline;
});
}
}
const scriptRE = /<script(?:\s.*?)?>.*?<\/script>/gs;
const styleRE = /<style(?:\s.*?)?>.*?<\/style>/gs;
function isStyleOnlyChanged(oldCode, newCode) {
if (oldCode === newCode) return false;
let oldFrontmatter = "";
let newFrontmatter = "";
oldCode = oldCode.replace(frontmatterRE, (m) => (oldFrontmatter = m, ""));
newCode = newCode.replace(frontmatterRE, (m) => (newFrontmatter = m, ""));
if (oldFrontmatter !== newFrontmatter) return false;
const oldScripts = [];
const newScripts = [];
oldCode = oldCode.replace(scriptRE, (m) => (oldScripts.push(m), ""));
newCode = newCode.replace(scriptRE, (m) => (newScripts.push(m), ""));
if (!isArrayEqual(oldScripts, newScripts)) return false;
const oldStyles = [];
const newStyles = [];
oldCode = oldCode.replace(styleRE, (m) => (oldStyles.push(m), ""));
newCode = newCode.replace(styleRE, (m) => (newStyles.push(m), ""));
if (oldCode !== newCode) return false;
return oldStyles.length === newStyles.length && !isArrayEqual(oldStyles, newStyles);
}
function isArrayEqual(a, b) {
if (a.length !== b.length) {
return false;
}
for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i]) {
return false;
}
}
return true;
}
export {
handleHotUpdate,
isStyleOnlyChanged
};