✅ 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.
39 lines
903 B
JavaScript
39 lines
903 B
JavaScript
/**
|
||
* @typedef {import('nlcst').Nodes} Nodes
|
||
*/
|
||
|
||
/** @type {Readonly<Array<Nodes>>} */
|
||
const emptyNodes = []
|
||
|
||
/**
|
||
* Get the text content of a node or list of nodes.
|
||
*
|
||
* Prefers the node’s plain-text fields, otherwise serializes its children, and
|
||
* if the given value is an array, serialize the nodes in it.
|
||
*
|
||
* @param {Array<Nodes> | Nodes} value
|
||
* Node or list of nodes to serialize.
|
||
* @returns {string}
|
||
* Result.
|
||
*/
|
||
export function toString(value) {
|
||
let index = -1
|
||
|
||
if (!value || (!Array.isArray(value) && !value.type)) {
|
||
throw new Error('Expected node, not `' + value + '`')
|
||
}
|
||
|
||
if ('value' in value) return value.value
|
||
|
||
const children = (Array.isArray(value) ? value : value.children) || emptyNodes
|
||
|
||
/** @type {Array<string>} */
|
||
const values = []
|
||
|
||
while (++index < children.length) {
|
||
values[index] = toString(children[index])
|
||
}
|
||
|
||
return values.join('')
|
||
}
|