✅ 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.
33 lines
1.2 KiB
JavaScript
33 lines
1.2 KiB
JavaScript
import { basename, dirname, extname } from "node:path";
|
|
import { deterministicString } from "deterministic-object-hash";
|
|
import { removeQueryString } from "../../core/path.js";
|
|
import { shorthash } from "../../runtime/server/shorthash.js";
|
|
import { isESMImportedImage } from "./imageKind.js";
|
|
const INVALID_CHAR_REGEX = /[\u0000-\u001F"#$%&*+,:;<=>?[\]^`{|}\u007F]/g;
|
|
function propsToFilename(filePath, transform, hash) {
|
|
let filename = decodeURIComponent(removeQueryString(filePath));
|
|
const ext = extname(filename);
|
|
if (filePath.startsWith("data:")) {
|
|
filename = shorthash(filePath);
|
|
} else {
|
|
filename = basename(filename, ext).replace(INVALID_CHAR_REGEX, "_");
|
|
}
|
|
const prefixDirname = isESMImportedImage(transform.src) ? dirname(filePath) : "";
|
|
let outputExt = transform.format ? `.${transform.format}` : ext;
|
|
return `${prefixDirname}/${filename}_${hash}${outputExt}`;
|
|
}
|
|
function hashTransform(transform, imageService, propertiesToHash) {
|
|
const hashFields = propertiesToHash.reduce(
|
|
(acc, prop) => {
|
|
acc[prop] = transform[prop];
|
|
return acc;
|
|
},
|
|
{ imageService }
|
|
);
|
|
return shorthash(deterministicString(hashFields));
|
|
}
|
|
export {
|
|
hashTransform,
|
|
propsToFilename
|
|
};
|