IOweb/node_modules/astro/dist/vite-plugin-html/transform/slots.js
2026-07-03 15:07:38 -05:00

24 lines
829 B
JavaScript

import { ELEMENT_NODE, parse, walkSync } from "ultrahtml";
import { escapeTemplateLiteralCharacters } from "./utils.js";
const SLOT_PREFIX = `___SLOTS___`;
function collectSlots(code) {
const slots = [];
walkSync(parse(code), (node) => {
if (node.type !== ELEMENT_NODE || node.name !== "slot") return;
if ("is:inline" in node.attributes) return;
const [open, close] = node.loc;
if (!close) return;
const name = node.attributes.name ?? "default";
const fallback = open.end < close.start ? code.slice(open.end, close.start) : code.slice(open.start, close.end);
slots.push({
start: open.start,
end: close.end,
value: `\${${SLOT_PREFIX}["${name}"] ?? \`${escapeTemplateLiteralCharacters(fallback).trim()}\`}`
});
});
return slots;
}
export {
SLOT_PREFIX,
collectSlots
};