✅ 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.
51 lines
1.3 KiB
JavaScript
51 lines
1.3 KiB
JavaScript
import { isAbsolute } from "node:path";
|
|
import { AstroError, AstroErrorData } from "../../../core/errors/index.js";
|
|
class CachedFontFetcher {
|
|
#storage;
|
|
#fetch;
|
|
#readFile;
|
|
constructor({
|
|
storage,
|
|
fetch,
|
|
readFile
|
|
}) {
|
|
this.#storage = storage;
|
|
this.#fetch = fetch;
|
|
this.#readFile = readFile;
|
|
}
|
|
async #cache(storage, key, cb) {
|
|
const existing = await storage.getItemRaw(key);
|
|
if (existing) {
|
|
return existing;
|
|
}
|
|
const data = await cb();
|
|
await storage.setItemRaw(key, data);
|
|
return data;
|
|
}
|
|
async fetch({ id, url, init }) {
|
|
return await this.#cache(this.#storage, id, async () => {
|
|
try {
|
|
if (isAbsolute(url)) {
|
|
return await this.#readFile(url);
|
|
}
|
|
const response = await this.#fetch(url, init ?? void 0);
|
|
if (!response.ok) {
|
|
throw new Error(`Response was not successful, received status code ${response.status}`);
|
|
}
|
|
return Buffer.from(await response.arrayBuffer());
|
|
} catch (cause) {
|
|
throw new AstroError(
|
|
{
|
|
...AstroErrorData.CannotFetchFontFile,
|
|
message: AstroErrorData.CannotFetchFontFile.message(url)
|
|
},
|
|
{ cause }
|
|
);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
export {
|
|
CachedFontFetcher
|
|
};
|