✅ 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.
60 lines
1.6 KiB
JavaScript
60 lines
1.6 KiB
JavaScript
import { ProtoError } from "../../errors.js";
|
|
export function string(value) {
|
|
if (typeof value === "string") {
|
|
return value;
|
|
}
|
|
throw typeError(value, "string");
|
|
}
|
|
export function stringOpt(value) {
|
|
if (value === null || value === undefined) {
|
|
return undefined;
|
|
}
|
|
else if (typeof value === "string") {
|
|
return value;
|
|
}
|
|
throw typeError(value, "string or null");
|
|
}
|
|
export function number(value) {
|
|
if (typeof value === "number") {
|
|
return value;
|
|
}
|
|
throw typeError(value, "number");
|
|
}
|
|
export function boolean(value) {
|
|
if (typeof value === "boolean") {
|
|
return value;
|
|
}
|
|
throw typeError(value, "boolean");
|
|
}
|
|
export function array(value) {
|
|
if (Array.isArray(value)) {
|
|
return value;
|
|
}
|
|
throw typeError(value, "array");
|
|
}
|
|
export function object(value) {
|
|
if (value !== null && typeof value === "object" && !Array.isArray(value)) {
|
|
return value;
|
|
}
|
|
throw typeError(value, "object");
|
|
}
|
|
export function arrayObjectsMap(value, fun) {
|
|
return array(value).map((elemValue) => fun(object(elemValue)));
|
|
}
|
|
function typeError(value, expected) {
|
|
if (value === undefined) {
|
|
return new ProtoError(`Expected ${expected}, but the property was missing`);
|
|
}
|
|
let received = typeof value;
|
|
if (value === null) {
|
|
received = "null";
|
|
}
|
|
else if (Array.isArray(value)) {
|
|
received = "array";
|
|
}
|
|
return new ProtoError(`Expected ${expected}, received ${received}`);
|
|
}
|
|
export function readJsonObject(value, fun) {
|
|
return fun(object(value));
|
|
}
|