astro-seo-schema
Version:
Easily insert valid Schema.org JSON-LD in your Astro apps.
44 lines (43 loc) • 963 B
JavaScript
function JsonLd(item, space) {
return JSON.stringify(item, safeJsonLdReplacer, space);
}
const ESCAPE_ENTITIES = Object.freeze({
"&": "&",
"<": "<",
">": ">",
'"': """,
"'": "'"
});
const ESCAPE_REGEX = new RegExp(
`[${Object.keys(ESCAPE_ENTITIES).join("")}]`,
"g"
);
const ESCAPE_REPLACER = (t) => ESCAPE_ENTITIES[t];
const safeJsonLdReplacer = /* @__PURE__ */ (() => {
return (_, value) => {
switch (typeof value) {
case "object":
if (value === null) {
return void 0;
}
return value;
// JSON.stringify will recursively call replacer.
case "number":
case "boolean":
case "bigint":
return value;
// These values are not risky.
case "string":
return value.replace(ESCAPE_REGEX, ESCAPE_REPLACER);
default: {
isNever(value);
return void 0;
}
}
};
})();
function isNever(_) {
}
export {
JsonLd
};