livemark 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { config } from "livemark:virtual";
2
3
  import { Link, useLocation } from "@tanstack/react-router";
3
4
  import { Clock, List, Rss, Tag } from "lucide-react";
4
5
  import { currentSection, sectionFlatArticles, sortedArticles, } from "../content/article.js";
@@ -36,10 +37,9 @@ export function SidebarPosts() {
36
37
  _splat: post.path.replace(/^\/|\/$/g, ""),
37
38
  } }), children: _jsx("span", { children: post.title }) }) }, post.path));
38
39
  }) })
39
- ] }), _jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { className: "opacity-75", children: [
40
+ ] }), config.site && (_jsx(SidebarMenuItem, { children: _jsxs(SidebarMenuButton, { className: "opacity-75", render: _jsx("a", { href: `/${sectionPath}/rss.xml` }), children: [
40
41
  _jsx(Rss, { className: "size-4" }), _jsx("span", { children: "RSS Feed" })
41
- ] }) })
42
- ] }) })
42
+ ] }) }))] }) })
43
43
  ] }), tags.length > 0 && (_jsxs(SidebarGroup, { children: [
44
44
  _jsx(SidebarGroupLabel, { className: "uppercase font-mono text-xs tracking-widest", children: "Tags" }), _jsx(SidebarGroupContent, { children: _jsx(SidebarMenu, { children: tags.map(tag => {
45
45
  const tagPath = `${sectionPath}/tags/${tag}`;
@@ -50,4 +50,4 @@ export function SidebarPosts() {
50
50
  }) }) })
51
51
  ] }))] }));
52
52
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhclBvc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhclBvc3RzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3BELE9BQU8sRUFDTCxjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLGNBQWMsR0FDZixNQUFNLHVCQUF1QixDQUFBO0FBQzlCLE9BQU8sRUFDTCxZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGtCQUFrQixHQUNuQixNQUFNLHdCQUF5QixDQUFBO0FBRWhDLGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsWUFBWTtJQUMxQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUV6RCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUMzRSxNQUFNLEtBQUssR0FBRyxJQUFJO1NBQ2YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDaEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFBO0lBQy9CLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBRXJDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUE7SUFDakMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUM7WUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUVoQyxNQUFNLFVBQVUsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUE7SUFDMUQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQy9ELE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sSUFBSSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBRXpFLE9BQU8sQ0FDTDtZQUNFLE1BQUMsWUFBWTtvQkFDWCxLQUFDLGlCQUFpQixJQUFDLFNBQVMsRUFBQyw2Q0FBNkMsc0JBRXRELEVBQ3BCLEtBQUMsbUJBQW1CLGNBQ2xCLE1BQUMsV0FBVztnQ0FDVixLQUFDLGVBQWUsY0FDZCxNQUFDLGlCQUFpQixJQUNoQixRQUFRLEVBQUUsT0FBTyxFQUNqQixTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFDdEMsTUFBTSxFQUFFLEtBQUMsSUFBSSxJQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFJOzRDQUV6RCxLQUFDLElBQUksSUFBQyxTQUFTLEVBQUMsUUFBUSxHQUFHLEVBQzNCLHVDQUFzQjs0Q0FDSixHQUNKLEVBQ2xCLE1BQUMsZUFBZTt3Q0FDZCxNQUFDLGlCQUFpQixJQUFDLFNBQVMsRUFBQyxZQUFZO2dEQUN2QyxLQUFDLEtBQUssSUFBQyxTQUFTLEVBQUMsUUFBUSxHQUFHLEVBQzVCLDBDQUF5QjtnREFDUCxFQUNwQixLQUFDLGNBQWMsY0FDWixXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dEQUN0QixNQUFNLE1BQU0sR0FBRyxVQUFVLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQTtnREFDdkMsT0FBTyxDQUNMLEtBQUMsa0JBQWtCLGNBQ2pCLEtBQUMsb0JBQW9CLElBQ25CLFFBQVEsRUFBRSxNQUFNLEVBQ2hCLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUNyQyxNQUFNLEVBQ0osS0FBQyxJQUFJLElBQ0gsRUFBRSxFQUFDLElBQUksRUFDUCxNQUFNLEVBQUU7Z0VBQ04sTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7NkRBQzFDLEdBQ0QsWUFHSix5QkFBTyxJQUFJLENBQUMsS0FBSyxHQUFRLEdBQ0osSUFkQSxJQUFJLENBQUMsSUFBSSxDQWViLENBQ3RCLENBQUE7NENBQ0gsQ0FBQyxDQUFDLEdBQ2E7d0NBQ0QsRUFDbEIsS0FBQyxlQUFlLGNBQ2QsTUFBQyxpQkFBaUIsSUFBQyxTQUFTLEVBQUMsWUFBWTs0Q0FDdkMsS0FBQyxHQUFHLElBQUMsU0FBUyxFQUFDLFFBQVEsR0FBRyxFQUMxQixzQ0FBcUI7NENBQ0gsR0FDSjtnQ0FDTixHQUNNO29CQUNULEVBRWQsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FDbEIsTUFBQyxZQUFZO29CQUNYLEtBQUMsaUJBQWlCLElBQUMsU0FBUyxFQUFDLDZDQUE2QyxxQkFFdEQsRUFDcEIsS0FBQyxtQkFBbUIsY0FDbEIsS0FBQyxXQUFXLGNBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQ0FDZCxNQUFNLE9BQU8sR0FBRyxHQUFHLFdBQVcsU0FBUyxHQUFHLEVBQUUsQ0FBQTtnQ0FDNUMsTUFBTSxTQUFTLEdBQUcsVUFBVSxLQUFLLElBQUksT0FBTyxHQUFHLENBQUE7Z0NBQy9DLE9BQU8sQ0FDTCxLQUFDLGVBQWUsY0FDZCxNQUFDLGlCQUFpQixJQUNoQixRQUFRLEVBQUUsU0FBUyxFQUNuQixTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFDeEMsTUFBTSxFQUFFLEtBQUMsSUFBSSxJQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFJOzRDQUVyRCxLQUFDLEdBQUcsSUFBQyxTQUFTLEVBQUMsVUFBVSxHQUFHLEVBQzVCLHlCQUFPLEdBQUcsR0FBUTs0Q0FDQSxJQVJBLEdBQUcsQ0FTUCxDQUNuQixDQUFBOzRCQUNILENBQUMsQ0FBQyxHQUNVLEdBQ007b0JBQ1QsQ0FDaEIsSUFDQSxDQUNKLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGluaywgdXNlTG9jYXRpb24gfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiXG5pbXBvcnQgeyBDbG9jaywgTGlzdCwgUnNzLCBUYWcgfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcbmltcG9ydCB7XG4gIGN1cnJlbnRTZWN0aW9uLFxuICBzZWN0aW9uRmxhdEFydGljbGVzLFxuICBzb3J0ZWRBcnRpY2xlcyxcbn0gZnJvbSBcIi4uL2NvbnRlbnQvYXJ0aWNsZS50c1wiXG5pbXBvcnQge1xuICBTaWRlYmFyR3JvdXAsXG4gIFNpZGViYXJHcm91cENvbnRlbnQsXG4gIFNpZGViYXJHcm91cExhYmVsLFxuICBTaWRlYmFyTWVudSxcbiAgU2lkZWJhck1lbnVCdXR0b24sXG4gIFNpZGViYXJNZW51SXRlbSxcbiAgU2lkZWJhck1lbnVTdWIsXG4gIFNpZGViYXJNZW51U3ViQnV0dG9uLFxuICBTaWRlYmFyTWVudVN1Ykl0ZW0sXG59IGZyb20gXCIuLi9lbGVtZW50cy9zaWRlYmFyLnRzeFwiXG5cbi8qKiBCbG9nIGJvZHkgc2xvdCBmb3IgdGhlIFNpZGViYXIgc2hlbGw6IEFsbCBQb3N0cyAvIFJlY2VudCBQb3N0cyAvIFJTUyAvIFRhZ3MgKi9cbmV4cG9ydCBmdW5jdGlvbiBTaWRlYmFyUG9zdHMoKSB7XG4gIGNvbnN0IHBhdGhuYW1lID0gdXNlTG9jYXRpb24oeyBzZWxlY3Q6IGwgPT4gbC5wYXRobmFtZSB9KVxuXG4gIGNvbnN0IHNlY3Rpb24gPSBjdXJyZW50U2VjdGlvbihgLyR7cGF0aG5hbWUucmVwbGFjZSgvXlxcL3xcXC8kL2csIFwiXCIpfS9gKVxuICBjb25zdCBmbGF0ID0gc2VjdGlvbiA/IChzZWN0aW9uRmxhdEFydGljbGVzLmdldChzZWN0aW9uLnByZWZpeCkgPz8gW10pIDogW11cbiAgY29uc3QgcG9zdHMgPSBmbGF0XG4gICAgLm1hcChwID0+IHNvcnRlZEFydGljbGVzLmZpbmQoYSA9PiBhLnBhdGggPT09IHApKVxuICAgIC5maWx0ZXIoYSA9PiBhICE9PSB1bmRlZmluZWQpXG4gIGNvbnN0IHJlY2VudFBvc3RzID0gcG9zdHMuc2xpY2UoMCwgNSlcblxuICBjb25zdCBhbGxUYWdzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBwb3N0IG9mIHBvc3RzKSB7XG4gICAgZm9yIChjb25zdCB0YWcgb2YgcG9zdC50YWdzID8/IFtdKSB7XG4gICAgICBhbGxUYWdzLmFkZCh0YWcpXG4gICAgfVxuICB9XG4gIGNvbnN0IHRhZ3MgPSBbLi4uYWxsVGFnc10uc29ydCgpXG5cbiAgY29uc3Qgbm9ybWFsaXplZCA9IGAvJHtwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIil9L2BcbiAgY29uc3QgaXNJbmRleCA9IHNlY3Rpb24gPyBub3JtYWxpemVkID09PSBzZWN0aW9uLnByZWZpeCA6IGZhbHNlXG4gIGNvbnN0IHNlY3Rpb25QYXRoID0gKHNlY3Rpb24/LnByZWZpeCA/PyBcIi9ibG9nL1wiKS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIilcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U2lkZWJhckdyb3VwPlxuICAgICAgICA8U2lkZWJhckdyb3VwTGFiZWwgY2xhc3NOYW1lPVwidXBwZXJjYXNlIGZvbnQtbW9ubyB0ZXh0LXhzIHRyYWNraW5nLXdpZGVzdFwiPlxuICAgICAgICAgIFBvc3RzXG4gICAgICAgIDwvU2lkZWJhckdyb3VwTGFiZWw+XG4gICAgICAgIDxTaWRlYmFyR3JvdXBDb250ZW50PlxuICAgICAgICAgIDxTaWRlYmFyTWVudT5cbiAgICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW0+XG4gICAgICAgICAgICAgIDxTaWRlYmFyTWVudUJ1dHRvblxuICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtpc0luZGV4fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17aXNJbmRleCA/IFwiXCIgOiBcIm9wYWNpdHktNzVcIn1cbiAgICAgICAgICAgICAgICByZW5kZXI9ezxMaW5rIHRvPVwiLyRcIiBwYXJhbXM9e3sgX3NwbGF0OiBzZWN0aW9uUGF0aCB9fSAvPn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxMaXN0IGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4+QWxsIFBvc3RzPC9zcGFuPlxuICAgICAgICAgICAgICA8L1NpZGViYXJNZW51QnV0dG9uPlxuICAgICAgICAgICAgPC9TaWRlYmFyTWVudUl0ZW0+XG4gICAgICAgICAgICA8U2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgICA8U2lkZWJhck1lbnVCdXR0b24gY2xhc3NOYW1lPVwib3BhY2l0eS03NVwiPlxuICAgICAgICAgICAgICAgIDxDbG9jayBjbGFzc05hbWU9XCJzaXplLTRcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuPlJlY2VudCBQb3N0czwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudUJ1dHRvbj5cbiAgICAgICAgICAgICAgPFNpZGViYXJNZW51U3ViPlxuICAgICAgICAgICAgICAgIHtyZWNlbnRQb3N0cy5tYXAocG9zdCA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBub3JtYWxpemVkID09PSBwb3N0LnBhdGhcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudVN1Ykl0ZW0ga2V5PXtwb3N0LnBhdGh9PlxuICAgICAgICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudVN1YkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU9e2FjdGl2ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YWN0aXZlID8gXCJcIiA6IFwib3BhY2l0eS03NVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bz1cIi8kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zcGxhdDogcG9zdC5wYXRoLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPntwb3N0LnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NpZGViYXJNZW51U3ViQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1NpZGViYXJNZW51U3ViSXRlbT5cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudVN1Yj5cbiAgICAgICAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgPFNpZGViYXJNZW51SXRlbT5cbiAgICAgICAgICAgICAgPFNpZGViYXJNZW51QnV0dG9uIGNsYXNzTmFtZT1cIm9wYWNpdHktNzVcIj5cbiAgICAgICAgICAgICAgICA8UnNzIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4+UlNTIEZlZWQ8L3NwYW4+XG4gICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVCdXR0b24+XG4gICAgICAgICAgICA8L1NpZGViYXJNZW51SXRlbT5cbiAgICAgICAgICA8L1NpZGViYXJNZW51PlxuICAgICAgICA8L1NpZGViYXJHcm91cENvbnRlbnQ+XG4gICAgICA8L1NpZGViYXJHcm91cD5cblxuICAgICAge3RhZ3MubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxTaWRlYmFyR3JvdXA+XG4gICAgICAgICAgPFNpZGViYXJHcm91cExhYmVsIGNsYXNzTmFtZT1cInVwcGVyY2FzZSBmb250LW1vbm8gdGV4dC14cyB0cmFja2luZy13aWRlc3RcIj5cbiAgICAgICAgICAgIFRhZ3NcbiAgICAgICAgICA8L1NpZGViYXJHcm91cExhYmVsPlxuICAgICAgICAgIDxTaWRlYmFyR3JvdXBDb250ZW50PlxuICAgICAgICAgICAgPFNpZGViYXJNZW51PlxuICAgICAgICAgICAgICB7dGFncy5tYXAodGFnID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWdQYXRoID0gYCR7c2VjdGlvblBhdGh9L3RhZ3MvJHt0YWd9YFxuICAgICAgICAgICAgICAgIGNvbnN0IHRhZ0FjdGl2ZSA9IG5vcm1hbGl6ZWQgPT09IGAvJHt0YWdQYXRofS9gXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW0ga2V5PXt0YWd9PlxuICAgICAgICAgICAgICAgICAgICA8U2lkZWJhck1lbnVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17dGFnQWN0aXZlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGFnQWN0aXZlID8gXCJcIiA6IFwib3BhY2l0eS03NVwifVxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17PExpbmsgdG89XCIvJFwiIHBhcmFtcz17eyBfc3BsYXQ6IHRhZ1BhdGggfX0gLz59XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFnIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57dGFnfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L1NpZGViYXJNZW51PlxuICAgICAgICAgIDwvU2lkZWJhckdyb3VwQ29udGVudD5cbiAgICAgICAgPC9TaWRlYmFyR3JvdXA+XG4gICAgICApfVxuICAgIDwvPlxuICApXG59XG4iXX0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lkZWJhclBvc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvU2lkZWJhclBvc3RzLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUNwRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixjQUFjLEdBQ2YsTUFBTSx1QkFBdUIsQ0FBQTtBQUM5QixPQUFPLEVBQ0wsWUFBWSxFQUNaLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixrQkFBa0IsR0FDbkIsTUFBTSx3QkFBeUIsQ0FBQTtBQUVoQyxrRkFBa0Y7QUFDbEYsTUFBTSxVQUFVLFlBQVk7SUFDMUIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFFekQsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDM0UsTUFBTSxLQUFLLEdBQUcsSUFBSTtTQUNmLEdBQUcsQ0FBQyxDQUFDLENB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QixNQUFNLEVBQUUsWUFBRyxJQUFJLEVBQUUsSUFBSSxXQUFXLFVBQVUsR0FBSTs0Q0FFOUMsS0FBQyxHQUFHLElBQUMsU0FBUyxFQUFDLFFBQVEsR0FBRyxFQUMxQixzQ0FBcUI7NENBQ0gsR0FDSixDQUNuQixJQUNXLEdBQ007b0JBQ1QsRUFFZCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUNsQixNQUFDLFlBQVk7b0JBQ1gsS0FBQyxpQkFBaUIsSUFBQyxTQUFTLEVBQUMsNkNBQTZDLHFCQUV0RCxFQUNwQixLQUFDLG1CQUFtQixjQUNsQixLQUFDLFdBQVcsY0FDVCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dDQUNkLE1BQU0sT0FBTyxHQUFHLEdBQUcsV0FBVyxTQUFTLEdBQUcsRUFBRSxDQUFBO2dDQUM1QyxNQUFNLFNBQVMsR0FBRyxVQUFVLEtBQUssSUFBSSxPQUFPLEdBQUcsQ0FBQTtnQ0FDL0MsT0FBTyxDQUNMLEtBQUMsZUFBZSxjQUNkLE1BQUMsaUJBQWlCLElBQ2hCLFFBQVEsRUFBRSxTQUFTLEVBQ25CLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUN4QyxNQUFNLEVBQUUsS0FBQyxJQUFJLElBQUMsRUFBRSxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUk7NENBRXJELEtBQUMsR0FBRyxJQUFDLFNBQVMsRUFBQyxVQUFVLEdBQUcsRUFDNUIseUJBQU8sR0FBRyxHQUFROzRDQUNBLElBUkEsR0FBRyxDQVNQLENBQ25CLENBQUE7NEJBQ0gsQ0FBQyxDQUFDLEdBQ1UsR0FDTTtvQkFDVCxDQUNoQixJQUNBLENBQ0osQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb25maWcgfSBmcm9tIFwibGl2ZW1hcms6dmlydHVhbFwiXG5pbXBvcnQgeyBMaW5rLCB1c2VMb2NhdGlvbiB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCJcbmltcG9ydCB7IENsb2NrLCBMaXN0LCBSc3MsIFRhZyB9IGZyb20gXCJsdWNpZGUtcmVhY3RcIlxuaW1wb3J0IHtcbiAgY3VycmVudFNlY3Rpb24sXG4gIHNlY3Rpb25GbGF0QXJ0aWNsZXMsXG4gIHNvcnRlZEFydGljbGVzLFxufSBmcm9tIFwiLi4vY29udGVudC9hcnRpY2xlLnRzXCJcbmltcG9ydCB7XG4gIFNpZGViYXJHcm91cCxcbiAgU2lkZWJhckdyb3VwQ29udGVudCxcbiAgU2lkZWJhckdyb3VwTGFiZWwsXG4gIFNpZGViYXJNZW51LFxuICBTaWRlYmFyTWVudUJ1dHRvbixcbiAgU2lkZWJhck1lbnVJdGVtLFxuICBTaWRlYmFyTWVudVN1YixcbiAgU2lkZWJhck1lbnVTdWJCdXR0b24sXG4gIFNpZGViYXJNZW51U3ViSXRlbSxcbn0gZnJvbSBcIi4uL2VsZW1lbnRzL3NpZGViYXIudHN4XCJcblxuLyoqIEJsb2cgYm9keSBzbG90IGZvciB0aGUgU2lkZWJhciBzaGVsbDogQWxsIFBvc3RzIC8gUmVjZW50IFBvc3RzIC8gUlNTIC8gVGFncyAqL1xuZXhwb3J0IGZ1bmN0aW9uIFNpZGViYXJQb3N0cygpIHtcbiAgY29uc3QgcGF0aG5hbWUgPSB1c2VMb2NhdGlvbih7IHNlbGVjdDogbCA9PiBsLnBhdGhuYW1lIH0pXG5cbiAgY29uc3Qgc2VjdGlvbiA9IGN1cnJlbnRTZWN0aW9uKGAvJHtwYXRobmFtZS5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIil9L2ApXG4gIGNvbnN0IGZsYXQgPSBzZWN0aW9uID8gKHNlY3Rpb25GbGF0QXJ0aWNsZXMuZ2V0KHNlY3Rpb24ucHJlZml4KSA/PyBbXSkgOiBbXVxuICBjb25zdCBwb3N0cyA9IGZsYXRcbiAgICAubWFwKHAgPT4gc29ydGVkQXJ0aWNsZXMuZmluZChhID0+IGEucGF0aCA9PT0gcCkpXG4gICAgLmZpbHRlcihhID0+IGEgIT09IHVuZGVmaW5lZClcbiAgY29uc3QgcmVjZW50UG9zdHMgPSBwb3N0cy5zbGljZSgwLCA1KVxuXG4gIGNvbnN0IGFsbFRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBmb3IgKGNvbnN0IHBvc3Qgb2YgcG9zdHMpIHtcbiAgICBmb3IgKGNvbnN0IHRhZyBvZiBwb3N0LnRhZ3MgPz8gW10pIHtcbiAgICAgIGFsbFRhZ3MuYWRkKHRhZylcbiAgICB9XG4gIH1cbiAgY29uc3QgdGFncyA9IFsuLi5hbGxUYWdzXS5zb3J0KClcblxuICBjb25zdCBub3JtYWxpemVkID0gYC8ke3BhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYFxuICBjb25zdCBpc0luZGV4ID0gc2VjdGlvbiA/IG5vcm1hbGl6ZWQgPT09IHNlY3Rpb24ucHJlZml4IDogZmFsc2VcbiAgY29uc3Qgc2VjdGlvblBhdGggPSAoc2VjdGlvbj8ucHJlZml4ID8/IFwiL2Jsb2cvXCIpLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTaWRlYmFyR3JvdXA+XG4gICAgICAgIDxTaWRlYmFyR3JvdXBMYWJlbCBjbGFzc05hbWU9XCJ1cHBlcmNhc2UgZm9udC1tb25vIHRleHQteHMgdHJhY2tpbmctd2lkZXN0XCI+XG4gICAgICAgICAgUG9zdHNcbiAgICAgICAgPC9TaWRlYmFyR3JvdXBMYWJlbD5cbiAgICAgICAgPFNpZGViYXJHcm91cENvbnRlbnQ+XG4gICAgICAgICAgPFNpZGViYXJNZW51PlxuICAgICAgICAgICAgPFNpZGViYXJNZW51SXRlbT5cbiAgICAgICAgICAgICAgPFNpZGViYXJNZW51QnV0dG9uXG4gICAgICAgICAgICAgICAgaXNBY3RpdmU9e2lzSW5kZXh9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtpc0luZGV4ID8gXCJcIiA6IFwib3BhY2l0eS03NVwifVxuICAgICAgICAgICAgICAgIHJlbmRlcj17PExpbmsgdG89XCIvJFwiIHBhcmFtcz17eyBfc3BsYXQ6IHNlY3Rpb25QYXRoIH19IC8+fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPExpc3QgY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj5BbGwgUG9zdHM8L3NwYW4+XG4gICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVCdXR0b24+XG4gICAgICAgICAgICA8L1NpZGViYXJNZW51SXRlbT5cbiAgICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW0+XG4gICAgICAgICAgICAgIDxTaWRlYmFyTWVudUJ1dHRvbiBjbGFzc05hbWU9XCJvcGFjaXR5LTc1XCI+XG4gICAgICAgICAgICAgICAgPENsb2NrIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4+UmVjZW50IFBvc3RzPC9zcGFuPlxuICAgICAgICAgICAgICA8L1NpZGViYXJNZW51QnV0dG9uPlxuICAgICAgICAgICAgICA8U2lkZWJhck1lbnVTdWI+XG4gICAgICAgICAgICAgICAge3JlY2VudFBvc3RzLm1hcChwb3N0ID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IG5vcm1hbGl6ZWQgPT09IHBvc3QucGF0aFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPFNpZGViYXJNZW51U3ViSXRlbSBrZXk9e3Bvc3QucGF0aH0+XG4gICAgICAgICAgICAgICAgICAgICAgPFNpZGViYXJNZW51U3ViQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17YWN0aXZlfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXthY3RpdmUgPyBcIlwiIDogXCJvcGFjaXR5LTc1XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXI9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8TGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvPVwiLyRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz17e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NwbGF0OiBwb3N0LnBhdGgucmVwbGFjZSgvXlxcL3xcXC8kL2csIFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3Bvc3QudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVTdWJCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVTdWJJdGVtPlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICA8L1NpZGViYXJNZW51U3ViPlxuICAgICAgICAgICAgPC9TaWRlYmFyTWVudUl0ZW0+XG4gICAgICAgICAgICB7Y29uZmlnLnNpdGUgJiYgKFxuICAgICAgICAgICAgICA8U2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudUJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwib3BhY2l0eS03NVwiXG4gICAgICAgICAgICAgICAgICByZW5kZXI9ezxhIGhyZWY9e2AvJHtzZWN0aW9uUGF0aH0vcnNzLnhtbGB9IC8+fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxSc3MgY2xhc3NOYW1lPVwic2l6ZS00XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlJTUyBGZWVkPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVCdXR0b24+XG4gICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NpZGViYXJNZW51PlxuICAgICAgICA8L1NpZGViYXJHcm91cENvbnRlbnQ+XG4gICAgICA8L1NpZGViYXJHcm91cD5cblxuICAgICAge3RhZ3MubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxTaWRlYmFyR3JvdXA+XG4gICAgICAgICAgPFNpZGViYXJHcm91cExhYmVsIGNsYXNzTmFtZT1cInVwcGVyY2FzZSBmb250LW1vbm8gdGV4dC14cyB0cmFja2luZy13aWRlc3RcIj5cbiAgICAgICAgICAgIFRhZ3NcbiAgICAgICAgICA8L1NpZGViYXJHcm91cExhYmVsPlxuICAgICAgICAgIDxTaWRlYmFyR3JvdXBDb250ZW50PlxuICAgICAgICAgICAgPFNpZGViYXJNZW51PlxuICAgICAgICAgICAgICB7dGFncy5tYXAodGFnID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWdQYXRoID0gYCR7c2VjdGlvblBhdGh9L3RhZ3MvJHt0YWd9YFxuICAgICAgICAgICAgICAgIGNvbnN0IHRhZ0FjdGl2ZSA9IG5vcm1hbGl6ZWQgPT09IGAvJHt0YWdQYXRofS9gXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIDxTaWRlYmFyTWVudUl0ZW0ga2V5PXt0YWd9PlxuICAgICAgICAgICAgICAgICAgICA8U2lkZWJhck1lbnVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBpc0FjdGl2ZT17dGFnQWN0aXZlfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGFnQWN0aXZlID8gXCJcIiA6IFwib3BhY2l0eS03NVwifVxuICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcj17PExpbmsgdG89XCIvJFwiIHBhcmFtcz17eyBfc3BsYXQ6IHRhZ1BhdGggfX0gLz59XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8VGFnIGNsYXNzTmFtZT1cInNpemUtMy41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57dGFnfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9TaWRlYmFyTWVudUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvU2lkZWJhck1lbnVJdGVtPlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8L1NpZGViYXJNZW51PlxuICAgICAgICAgIDwvU2lkZWJhckdyb3VwQ29udGVudD5cbiAgICAgICAgPC9TaWRlYmFyR3JvdXA+XG4gICAgICApfVxuICAgIDwvPlxuICApXG59XG4iXX0=
@@ -0,0 +1,21 @@
1
+ export interface RssItem {
2
+ title: string;
3
+ link: string;
4
+ guid: string;
5
+ description?: string;
6
+ pubDate?: string;
7
+ author?: string | string[];
8
+ categories?: string[];
9
+ }
10
+ export interface RssFeed {
11
+ title: string;
12
+ description: string;
13
+ link: string;
14
+ feedLink: string;
15
+ items: RssItem[];
16
+ }
17
+ /** Render an RSS 2.0 channel as a serialized XML document. Pure — all I/O,
18
+ * URL composition, and item-count limits live in the caller. `pubDate` is
19
+ * accepted as an ISO string (article frontmatter shape) and converted to
20
+ * RFC 822 here, which is what readers like NetNewsWire and Feedly parse. */
21
+ export declare function renderRssFeed(feed: RssFeed): string;
@@ -0,0 +1,56 @@
1
+ /** Render an RSS 2.0 channel as a serialized XML document. Pure — all I/O,
2
+ * URL composition, and item-count limits live in the caller. `pubDate` is
3
+ * accepted as an ISO string (article frontmatter shape) and converted to
4
+ * RFC 822 here, which is what readers like NetNewsWire and Feedly parse. */
5
+ export function renderRssFeed(feed) {
6
+ const lines = [];
7
+ lines.push('<?xml version="1.0" encoding="UTF-8"?>');
8
+ lines.push('<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">');
9
+ lines.push(" <channel>");
10
+ lines.push(` <title>${escapeXml(feed.title)}</title>`);
11
+ lines.push(` <link>${escapeXml(feed.link)}</link>`);
12
+ lines.push(` <description>${escapeXml(feed.description)}</description>`);
13
+ lines.push(` <atom:link href="${escapeXml(feed.feedLink)}" rel="self" type="application/rss+xml" />`);
14
+ for (const item of feed.items) {
15
+ lines.push(" <item>");
16
+ lines.push(` <title>${escapeXml(item.title)}</title>`);
17
+ lines.push(` <link>${escapeXml(item.link)}</link>`);
18
+ lines.push(` <guid isPermaLink="true">${escapeXml(item.guid)}</guid>`);
19
+ if (item.description) {
20
+ lines.push(` <description>${escapeXml(item.description)}</description>`);
21
+ }
22
+ if (item.pubDate) {
23
+ lines.push(` <pubDate>${escapeXml(toRfc822(item.pubDate))}</pubDate>`);
24
+ }
25
+ if (item.author) {
26
+ const author = Array.isArray(item.author)
27
+ ? item.author.join(", ")
28
+ : item.author;
29
+ lines.push(` <author>${escapeXml(author)}</author>`);
30
+ }
31
+ if (item.categories) {
32
+ for (const category of item.categories) {
33
+ lines.push(` <category>${escapeXml(category)}</category>`);
34
+ }
35
+ }
36
+ lines.push(" </item>");
37
+ }
38
+ lines.push(" </channel>");
39
+ lines.push("</rss>");
40
+ return `${lines.join("\n")}\n`;
41
+ }
42
+ function escapeXml(value) {
43
+ return value
44
+ .replace(/&/g, "&amp;")
45
+ .replace(/</g, "&lt;")
46
+ .replace(/>/g, "&gt;")
47
+ .replace(/"/g, "&quot;")
48
+ .replace(/'/g, "&apos;");
49
+ }
50
+ function toRfc822(iso) {
51
+ const date = new Date(iso);
52
+ if (Number.isNaN(date.getTime()))
53
+ return iso;
54
+ return date.toUTCString();
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2hlbHBlcnMvcnNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQTs7OzZFQUc2RTtBQUM3RSxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQWE7SUFDekMsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFBO0lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQTtJQUNwRCxLQUFLLENBQUMsSUFBSSxDQUFDLDhEQUE4RCxDQUFDLENBQUE7SUFDMUUsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUN6QixLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDekQsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDM0UsS0FBSyxDQUFDLElBQUksQ0FDUix3QkFBd0IsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsNENBQTRDLENBQzdGLENBQUE7SUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNELEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN4RCxLQUFLLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUMzRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixLQUFLLENBQUMsSUFBSSxDQUNSLHNCQUFzQixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FDbEUsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixLQUFLLENBQUMsSUFBSSxDQUNSLGtCQUFrQixTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQ2hFLENBQUE7UUFDSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUN4QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQTtZQUNmLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDM0QsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN2QyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQ2pFLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtJQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3BCLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUE7QUFDaEMsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWE7SUFDOUIsT0FBTyxLQUFLO1NBQ1QsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7U0FDdEIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7U0FDckIsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7U0FDckIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7U0FDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtBQUM1QixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsR0FBVztJQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMxQixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUE7SUFDNUMsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUnNzSXRlbSB7XG4gIHRpdGxlOiBzdHJpbmdcbiAgbGluazogc3RyaW5nXG4gIGd1aWQ6IHN0cmluZ1xuICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICBwdWJEYXRlPzogc3RyaW5nXG4gIGF1dGhvcj86IHN0cmluZyB8IHN0cmluZ1tdXG4gIGNhdGVnb3JpZXM/OiBzdHJpbmdbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJzc0ZlZWQge1xuICB0aXRsZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmdcbiAgbGluazogc3RyaW5nXG4gIGZlZWRMaW5rOiBzdHJpbmdcbiAgaXRlbXM6IFJzc0l0ZW1bXVxufVxuXG4vKiogUmVuZGVyIGFuIFJTUyAyLjAgY2hhbm5lbCBhcyBhIHNlcmlhbGl6ZWQgWE1MIGRvY3VtZW50LiBQdXJlIOKAlCBhbGwgSS9PLFxuICogIFVSTCBjb21wb3NpdGlvbiwgYW5kIGl0ZW0tY291bnQgbGltaXRzIGxpdmUgaW4gdGhlIGNhbGxlci4gYHB1YkRhdGVgIGlzXG4gKiAgYWNjZXB0ZWQgYXMgYW4gSVNPIHN0cmluZyAoYXJ0aWNsZSBmcm9udG1hdHRlciBzaGFwZSkgYW5kIGNvbnZlcnRlZCB0b1xuICogIFJGQyA4MjIgaGVyZSwgd2hpY2ggaXMgd2hhdCByZWFkZXJzIGxpa2UgTmV0TmV3c1dpcmUgYW5kIEZlZWRseSBwYXJzZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJSc3NGZWVkKGZlZWQ6IFJzc0ZlZWQpIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW11cbiAgbGluZXMucHVzaCgnPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+JylcbiAgbGluZXMucHVzaCgnPHJzcyB2ZXJzaW9uPVwiMi4wXCIgeG1sbnM6YXRvbT1cImh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbVwiPicpXG4gIGxpbmVzLnB1c2goXCIgIDxjaGFubmVsPlwiKVxuICBsaW5lcy5wdXNoKGAgICAgPHRpdGxlPiR7ZXNjYXBlWG1sKGZlZWQudGl0bGUpfTwvdGl0bGU+YClcbiAgbGluZXMucHVzaChgICAgIDxsaW5rPiR7ZXNjYXBlWG1sKGZlZWQubGluayl9PC9saW5rPmApXG4gIGxpbmVzLnB1c2goYCAgICA8ZGVzY3JpcHRpb24+JHtlc2NhcGVYbWwoZmVlZC5kZXNjcmlwdGlvbil9PC9kZXNjcmlwdGlvbj5gKVxuICBsaW5lcy5wdXNoKFxuICAgIGAgICAgPGF0b206bGluayBocmVmPVwiJHtlc2NhcGVYbWwoZmVlZC5mZWVkTGluayl9XCIgcmVsPVwic2VsZlwiIHR5cGU9XCJhcHBsaWNhdGlvbi9yc3MreG1sXCIgLz5gLFxuICApXG4gIGZvciAoY29uc3QgaXRlbSBvZiBmZWVkLml0ZW1zKSB7XG4gICAgbGluZXMucHVzaChcIiAgICA8aXRlbT5cIilcbiAgICBsaW5lcy5wdXNoKGAgICAgICA8dGl0bGU+JHtlc2NhcGVYbWwoaXRlbS50aXRsZSl9PC90aXRsZT5gKVxuICAgIGxpbmVzLnB1c2goYCAgICAgIDxsaW5rPiR7ZXNjYXBlWG1sKGl0ZW0ubGluayl9PC9saW5rPmApXG4gICAgbGluZXMucHVzaChgICAgICAgPGd1aWQgaXNQZXJtYUxpbms9XCJ0cnVlXCI+JHtlc2NhcGVYbWwoaXRlbS5ndWlkKX08L2d1aWQ+YClcbiAgICBpZiAoaXRlbS5kZXNjcmlwdGlvbikge1xuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgYCAgICAgIDxkZXNjcmlwdGlvbj4ke2VzY2FwZVhtbChpdGVtLmRlc2NyaXB0aW9uKX08L2Rlc2NyaXB0aW9uPmAsXG4gICAgICApXG4gICAgfVxuICAgIGlmIChpdGVtLnB1YkRhdGUpIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgIGAgICAgICA8cHViRGF0ZT4ke2VzY2FwZVhtbCh0b1JmYzgyMihpdGVtLnB1YkRhdGUpKX08L3B1YkRhdGU+YCxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKGl0ZW0uYXV0aG9yKSB7XG4gICAgICBjb25zdCBhdXRob3IgPSBBcnJheS5pc0FycmF5KGl0ZW0uYXV0aG9yKVxuICAgICAgICA/IGl0ZW0uYXV0aG9yLmpvaW4oXCIsIFwiKVxuICAgICAgICA6IGl0ZW0uYXV0aG9yXG4gICAgICBsaW5lcy5wdXNoKGAgICAgICA8YXV0aG9yPiR7ZXNjYXBlWG1sKGF1dGhvcil9PC9hdXRob3I+YClcbiAgICB9XG4gICAgaWYgKGl0ZW0uY2F0ZWdvcmllcykge1xuICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBpdGVtLmNhdGVnb3JpZXMpIHtcbiAgICAgICAgbGluZXMucHVzaChgICAgICAgPGNhdGVnb3J5PiR7ZXNjYXBlWG1sKGNhdGVnb3J5KX08L2NhdGVnb3J5PmApXG4gICAgICB9XG4gICAgfVxuICAgIGxpbmVzLnB1c2goXCIgICAgPC9pdGVtPlwiKVxuICB9XG4gIGxpbmVzLnB1c2goXCIgIDwvY2hhbm5lbD5cIilcbiAgbGluZXMucHVzaChcIjwvcnNzPlwiKVxuICByZXR1cm4gYCR7bGluZXMuam9pbihcIlxcblwiKX1cXG5gXG59XG5cbmZ1bmN0aW9uIGVzY2FwZVhtbCh2YWx1ZTogc3RyaW5nKSB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcbiAgICAucmVwbGFjZSgvPC9nLCBcIiZsdDtcIilcbiAgICAucmVwbGFjZSgvPi9nLCBcIiZndDtcIilcbiAgICAucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcbiAgICAucmVwbGFjZSgvJy9nLCBcIiZhcG9zO1wiKVxufVxuXG5mdW5jdGlvbiB0b1JmYzgyMihpc286IHN0cmluZykge1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUoaXNvKVxuICBpZiAoTnVtYmVyLmlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgcmV0dXJuIGlzb1xuICByZXR1cm4gZGF0ZS50b1VUQ1N0cmluZygpXG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,123 @@
1
+ import { describe, expect, it } from "vite-plus/test";
2
+ import { renderRssFeed } from "./rss.js";
3
+ describe("renderRssFeed", () => {
4
+ it("renders a minimal channel with no items", () => {
5
+ const xml = renderRssFeed({
6
+ title: "Blog",
7
+ description: "Latest posts",
8
+ link: "https://example.com/blog/",
9
+ feedLink: "https://example.com/blog/rss.xml",
10
+ items: [],
11
+ });
12
+ expect(xml).toBe(`<?xml version="1.0" encoding="UTF-8"?>
13
+ <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
14
+ <channel>
15
+ <title>Blog</title>
16
+ <link>https://example.com/blog/</link>
17
+ <description>Latest posts</description>
18
+ <atom:link href="https://example.com/blog/rss.xml" rel="self" type="application/rss+xml" />
19
+ </channel>
20
+ </rss>
21
+ `);
22
+ });
23
+ it("renders an item with all optional fields", () => {
24
+ const xml = renderRssFeed({
25
+ title: "Blog",
26
+ description: "Latest posts",
27
+ link: "https://example.com/blog/",
28
+ feedLink: "https://example.com/blog/rss.xml",
29
+ items: [
30
+ {
31
+ title: "Hello",
32
+ link: "https://example.com/blog/hello/",
33
+ guid: "https://example.com/blog/hello/",
34
+ description: "First post",
35
+ pubDate: "2026-05-16T00:00:00Z",
36
+ author: "Jane",
37
+ categories: ["news"],
38
+ },
39
+ ],
40
+ });
41
+ expect(xml).toContain("<title>Hello</title>");
42
+ expect(xml).toContain("<link>https://example.com/blog/hello/</link>");
43
+ expect(xml).toContain('<guid isPermaLink="true">https://example.com/blog/hello/</guid>');
44
+ expect(xml).toContain("<description>First post</description>");
45
+ expect(xml).toContain("<pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate>");
46
+ expect(xml).toContain("<author>Jane</author>");
47
+ expect(xml).toContain("<category>news</category>");
48
+ });
49
+ it("joins array authors with a comma", () => {
50
+ const xml = renderRssFeed({
51
+ title: "Blog",
52
+ description: "",
53
+ link: "https://example.com/blog/",
54
+ feedLink: "https://example.com/blog/rss.xml",
55
+ items: [
56
+ {
57
+ title: "x",
58
+ link: "https://example.com/blog/x/",
59
+ guid: "https://example.com/blog/x/",
60
+ author: ["Alice", "Bob"],
61
+ },
62
+ ],
63
+ });
64
+ expect(xml).toContain("<author>Alice, Bob</author>");
65
+ });
66
+ it("emits one <category> per tag", () => {
67
+ const xml = renderRssFeed({
68
+ title: "Blog",
69
+ description: "",
70
+ link: "https://example.com/blog/",
71
+ feedLink: "https://example.com/blog/rss.xml",
72
+ items: [
73
+ {
74
+ title: "x",
75
+ link: "https://example.com/blog/x/",
76
+ guid: "https://example.com/blog/x/",
77
+ categories: ["a", "b", "c"],
78
+ },
79
+ ],
80
+ });
81
+ expect(xml).toContain("<category>a</category>");
82
+ expect(xml).toContain("<category>b</category>");
83
+ expect(xml).toContain("<category>c</category>");
84
+ });
85
+ it("escapes XML metacharacters in text content", () => {
86
+ const xml = renderRssFeed({
87
+ title: 'Title & "quoted" <tag>',
88
+ description: "A & B",
89
+ link: "https://example.com/blog/",
90
+ feedLink: "https://example.com/blog/rss.xml",
91
+ items: [
92
+ {
93
+ title: "1 < 2 & 3 > 0",
94
+ link: "https://example.com/blog/x/",
95
+ guid: "https://example.com/blog/x/",
96
+ description: "It's fine",
97
+ },
98
+ ],
99
+ });
100
+ expect(xml).toContain("<title>Title &amp; &quot;quoted&quot; &lt;tag&gt;</title>");
101
+ expect(xml).toContain("<description>A &amp; B</description>");
102
+ expect(xml).toContain("<title>1 &lt; 2 &amp; 3 &gt; 0</title>");
103
+ expect(xml).toContain("<description>It&apos;s fine</description>");
104
+ });
105
+ it("leaves an unparsable pubDate unchanged", () => {
106
+ const xml = renderRssFeed({
107
+ title: "Blog",
108
+ description: "",
109
+ link: "https://example.com/blog/",
110
+ feedLink: "https://example.com/blog/rss.xml",
111
+ items: [
112
+ {
113
+ title: "x",
114
+ link: "https://example.com/blog/x/",
115
+ guid: "https://example.com/blog/x/",
116
+ pubDate: "not-a-date",
117
+ },
118
+ ],
119
+ });
120
+ expect(xml).toContain("<pubDate>not-a-date</pubDate>");
121
+ });
122
+ });
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnNzLnVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvaGVscGVycy9yc3MudW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRXhDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7UUFDakQsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDO1lBQ3hCLEtBQUssRUFBRSxNQUFNO1lBQ2IsV0FBVyxFQUFFLGNBQWM7WUFDM0IsSUFBSSxFQUFFLDJCQUEyQjtZQUNqQyxRQUFRLEVBQUUsa0NBQWtDO1lBQzVDLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDZDs7Ozs7Ozs7O0NBU0wsQ0FDSSxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMENBQTBDLEVBQUUsR0FBRyxFQUFFO1FBQ2xELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQztZQUN4QixLQUFLLEVBQUUsTUFBTTtZQUNiLFdBQVcsRUFBRSxjQUFjO1lBQzNCLElBQUksRUFBRSwyQkFBMkI7WUFDakMsUUFBUSxFQUFFLGtDQUFrQztZQUM1QyxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsS0FBSyxFQUFFLE9BQU87b0JBQ2QsSUFBSSxFQUFFLGlDQUFpQztvQkFDdkMsSUFBSSxFQUFFLGlDQUFpQztvQkFDdkMsV0FBVyxFQUFFLFlBQVk7b0JBQ3pCLE9BQU8sRUFBRSxzQkFBc0I7b0JBQy9CLE1BQU0sRUFBRSxNQUFNO29CQUNkLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQztpQkFDckI7YUFDRjtTQUNGLENBQUMs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QyxDQUFDLENBQUE7UUFDL0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO0lBQ3BFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUM7WUFDeEIsS0FBSyxFQUFFLE1BQU07WUFDYixXQUFXLEVBQUUsRUFBRTtZQUNmLElBQUksRUFBRSwyQkFBMkI7WUFDakMsUUFBUSxFQUFFLGtDQUFrQztZQUM1QyxLQUFLLEVBQUU7Z0JBQ0w7b0JBQ0UsS0FBSyxFQUFFLEdBQUc7b0JBQ1YsSUFBSSxFQUFFLDZCQUE2QjtvQkFDbkMsSUFBSSxFQUFFLDZCQUE2QjtvQkFDbkMsT0FBTyxFQUFFLFlBQVk7aUJBQ3RCO2FBQ0Y7U0FDRixDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLCtCQUErQixDQUFDLENBQUE7SUFDeEQsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGUtcGx1cy90ZXN0XCJcbmltcG9ydCB7IHJlbmRlclJzc0ZlZWQgfSBmcm9tIFwiLi9yc3MudHNcIlxuXG5kZXNjcmliZShcInJlbmRlclJzc0ZlZWRcIiwgKCkgPT4ge1xuICBpdChcInJlbmRlcnMgYSBtaW5pbWFsIGNoYW5uZWwgd2l0aCBubyBpdGVtc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgeG1sID0gcmVuZGVyUnNzRmVlZCh7XG4gICAgICB0aXRsZTogXCJCbG9nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJMYXRlc3QgcG9zdHNcIixcbiAgICAgIGxpbms6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9ibG9nL1wiLFxuICAgICAgZmVlZExpbms6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9ibG9nL3Jzcy54bWxcIixcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICB9KVxuICAgIGV4cGVjdCh4bWwpLnRvQmUoXG4gICAgICBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG48cnNzIHZlcnNpb249XCIyLjBcIiB4bWxuczphdG9tPVwiaHR0cDovL3d3dy53My5vcmcvMjAwNS9BdG9tXCI+XG4gIDxjaGFubmVsPlxuICAgIDx0aXRsZT5CbG9nPC90aXRsZT5cbiAgICA8bGluaz5odHRwczovL2V4YW1wbGUuY29tL2Jsb2cvPC9saW5rPlxuICAgIDxkZXNjcmlwdGlvbj5MYXRlc3QgcG9zdHM8L2Rlc2NyaXB0aW9uPlxuICAgIDxhdG9tOmxpbmsgaHJlZj1cImh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy9yc3MueG1sXCIgcmVsPVwic2VsZlwiIHR5cGU9XCJhcHBsaWNhdGlvbi9yc3MreG1sXCIgLz5cbiAgPC9jaGFubmVsPlxuPC9yc3M+XG5gLFxuICAgIClcbiAgfSlcblxuICBpdChcInJlbmRlcnMgYW4gaXRlbSB3aXRoIGFsbCBvcHRpb25hbCBmaWVsZHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHhtbCA9IHJlbmRlclJzc0ZlZWQoe1xuICAgICAgdGl0bGU6IFwiQmxvZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGF0ZXN0IHBvc3RzXCIsXG4gICAgICBsaW5rOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy9cIixcbiAgICAgIGZlZWRMaW5rOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy9yc3MueG1sXCIsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6IFwiSGVsbG9cIixcbiAgICAgICAgICBsaW5rOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy9oZWxsby9cIixcbiAgICAgICAgICBndWlkOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy9oZWxsby9cIixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJGaXJzdCBwb3N0XCIsXG4gICAgICAgICAgcHViRGF0ZTogXCIyMDI2LTA1LTE2VDAwOjAwOjAwWlwiLFxuICAgICAgICAgIGF1dGhvcjogXCJKYW5lXCIsXG4gICAgICAgICAgY2F0ZWdvcmllczogW1wibmV3c1wiXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgICBleHBlY3QoeG1sKS50b0NvbnRhaW4oXCI8dGl0bGU+SGVsbG88L3RpdGxlPlwiKVxuICAgIGV4cGVjdCh4bWwpLnRvQ29udGFpbihcIjxsaW5rPmh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy9oZWxsby88L2xpbms+XCIpXG4gICAgZXhwZWN0KHhtbCkudG9Db250YWluKFxuICAgICAgJzxndWlkIGlzUGVybWFMaW5rPVwidHJ1ZVwiPmh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy9oZWxsby88L2d1aWQ+JyxcbiAgICApXG4gICAgZXhwZWN0KHhtbCkudG9Db250YWluKFwiPGRlc2NyaXB0aW9uPkZpcnN0IHBvc3Q8L2Rlc2NyaXB0aW9uPlwiKVxuICAgIGV4cGVjdCh4bWwpLnRvQ29udGFpbihcIjxwdWJEYXRlPlNhdCwgMTYgTWF5IDIwMjYgMDA6MDA6MDAgR01UPC9wdWJEYXRlPlwiKVxuICAgIGV4cGVjdCh4bWwpLnRvQ29udGFpbihcIjxhdXRob3I+SmFuZTwvYXV0aG9yPlwiKVxuICAgIGV4cGVjdCh4bWwpLnRvQ29udGFpbihcIjxjYXRlZ29yeT5uZXdzPC9jYXRlZ29yeT5cIilcbiAgfSlcblxuICBpdChcImpvaW5zIGFycmF5IGF1dGhvcnMgd2l0aCBhIGNvbW1hXCIsICgpID0+IHtcbiAgICBjb25zdCB4bWwgPSByZW5kZXJSc3NGZWVkKHtcbiAgICAgIHRpdGxlOiBcIkJsb2dcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgbGluazogXCJodHRwczovL2V4YW1wbGUuY29tL2Jsb2cvXCIsXG4gICAgICBmZWVkTGluazogXCJodHRwczovL2V4YW1wbGUuY29tL2Jsb2cvcnNzLnhtbFwiLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiBcInhcIixcbiAgICAgICAgICBsaW5rOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy94L1wiLFxuICAgICAgICAgIGd1aWQ6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9ibG9nL3gvXCIsXG4gICAgICAgICAgYXV0aG9yOiBbXCJBbGljZVwiLCBcIkJvYlwiXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSlcbiAgICBleHBlY3QoeG1sKS50b0NvbnRhaW4oXCI8YXV0aG9yPkFsaWNlLCBCb2I8L2F1dGhvcj5cIilcbiAgfSlcblxuICBpdChcImVtaXRzIG9uZSA8Y2F0ZWdvcnk+IHBlciB0YWdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHhtbCA9IHJlbmRlclJzc0ZlZWQoe1xuICAgICAgdGl0bGU6IFwiQmxvZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiXCIsXG4gICAgICBsaW5rOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy9cIixcbiAgICAgIGZlZWRMaW5rOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy9yc3MueG1sXCIsXG4gICAgICBpdGVtczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGl0bGU6IFwieFwiLFxuICAgICAgICAgIGxpbms6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9ibG9nL3gvXCIsXG4gICAgICAgICAgZ3VpZDogXCJodHRwczovL2V4YW1wbGUuY29tL2Jsb2cveC9cIixcbiAgICAgICAgICBjYXRlZ29yaWVzOiBbXCJhXCIsIFwiYlwiLCBcImNcIl0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pXG4gICAgZXhwZWN0KHhtbCkudG9Db250YWluKFwiPGNhdGVnb3J5PmE8L2NhdGVnb3J5PlwiKVxuICAgIGV4cGVjdCh4bWwpLnRvQ29udGFpbihcIjxjYXRlZ29yeT5iPC9jYXRlZ29yeT5cIilcbiAgICBleHBlY3QoeG1sKS50b0NvbnRhaW4oXCI8Y2F0ZWdvcnk+YzwvY2F0ZWdvcnk+XCIpXG4gIH0pXG5cbiAgaXQoXCJlc2NhcGVzIFhNTCBtZXRhY2hhcmFjdGVycyBpbiB0ZXh0IGNvbnRlbnRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHhtbCA9IHJlbmRlclJzc0ZlZWQoe1xuICAgICAgdGl0bGU6ICdUaXRsZSAmIFwicXVvdGVkXCIgPHRhZz4nLFxuICAgICAgZGVzY3JpcHRpb246IFwiQSAmIEJcIixcbiAgICAgIGxpbms6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9ibG9nL1wiLFxuICAgICAgZmVlZExpbms6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9ibG9nL3Jzcy54bWxcIixcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogXCIxIDwgMiAmIDMgPiAwXCIsXG4gICAgICAgICAgbGluazogXCJodHRwczovL2V4YW1wbGUuY29tL2Jsb2cveC9cIixcbiAgICAgICAgICBndWlkOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy94L1wiLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkl0J3MgZmluZVwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KVxuICAgIGV4cGVjdCh4bWwpLnRvQ29udGFpbihcbiAgICAgIFwiPHRpdGxlPlRpdGxlICZhbXA7ICZxdW90O3F1b3RlZCZxdW90OyAmbHQ7dGFnJmd0OzwvdGl0bGU+XCIsXG4gICAgKVxuICAgIGV4cGVjdCh4bWwpLnRvQ29udGFpbihcIjxkZXNjcmlwdGlvbj5BICZhbXA7IEI8L2Rlc2NyaXB0aW9uPlwiKVxuICAgIGV4cGVjdCh4bWwpLnRvQ29udGFpbihcIjx0aXRsZT4xICZsdDsgMiAmYW1wOyAzICZndDsgMDwvdGl0bGU+XCIpXG4gICAgZXhwZWN0KHhtbCkudG9Db250YWluKFwiPGRlc2NyaXB0aW9uPkl0JmFwb3M7cyBmaW5lPC9kZXNjcmlwdGlvbj5cIilcbiAgfSlcblxuICBpdChcImxlYXZlcyBhbiB1bnBhcnNhYmxlIHB1YkRhdGUgdW5jaGFuZ2VkXCIsICgpID0+IHtcbiAgICBjb25zdCB4bWwgPSByZW5kZXJSc3NGZWVkKHtcbiAgICAgIHRpdGxlOiBcIkJsb2dcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLFxuICAgICAgbGluazogXCJodHRwczovL2V4YW1wbGUuY29tL2Jsb2cvXCIsXG4gICAgICBmZWVkTGluazogXCJodHRwczovL2V4YW1wbGUuY29tL2Jsb2cvcnNzLnhtbFwiLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiBcInhcIixcbiAgICAgICAgICBsaW5rOiBcImh0dHBzOi8vZXhhbXBsZS5jb20vYmxvZy94L1wiLFxuICAgICAgICAgIGd1aWQ6IFwiaHR0cHM6Ly9leGFtcGxlLmNvbS9ibG9nL3gvXCIsXG4gICAgICAgICAgcHViRGF0ZTogXCJub3QtYS1kYXRlXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pXG4gICAgZXhwZWN0KHhtbCkudG9Db250YWluKFwiPHB1YkRhdGU+bm90LWEtZGF0ZTwvcHViRGF0ZT5cIilcbiAgfSlcbn0pXG4iXX0=
@@ -0,0 +1,17 @@
1
+ import type { Plugin } from "vite";
2
+ import type { Config } from "../models/config.ts";
3
+ export interface RobotsOptions {
4
+ config: Config;
5
+ }
6
+ /** Emit a default `robots.txt` into the client build output, with a
7
+ * `Sitemap:` line pointing at the TanStack-Start-generated `sitemap.xml`
8
+ * when {@link Config.site} is set. Skipped when the consumer ships
9
+ * their own `.livemark/public/robots.txt` so the standard publicDir
10
+ * overlay wins — Vite copies the publicDir before writeBundle, so
11
+ * unconditional emitFile would silently overwrite the override. */
12
+ export declare function robots(opts: RobotsOptions): Plugin;
13
+ /** Render the body of a permissive default `robots.txt`. A `Sitemap:`
14
+ * line is appended only when `site` is set, because the directive
15
+ * requires a fully-qualified URL; `base` is included so the URL matches
16
+ * where the build (and the `sitemap.xml` inside it) is actually mounted. */
17
+ export declare function renderRobots(config: Pick<Config, "site" | "base">): string;
@@ -0,0 +1,40 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ /** Emit a default `robots.txt` into the client build output, with a
4
+ * `Sitemap:` line pointing at the TanStack-Start-generated `sitemap.xml`
5
+ * when {@link Config.site} is set. Skipped when the consumer ships
6
+ * their own `.livemark/public/robots.txt` so the standard publicDir
7
+ * overlay wins — Vite copies the publicDir before writeBundle, so
8
+ * unconditional emitFile would silently overwrite the override. */
9
+ export function robots(opts) {
10
+ const overrideFile = join(opts.config.root, ".livemark", "public", "robots.txt");
11
+ return {
12
+ name: "livemark:robots",
13
+ applyToEnvironment(env) {
14
+ return env.name === "client";
15
+ },
16
+ generateBundle() {
17
+ if (existsSync(overrideFile))
18
+ return;
19
+ this.emitFile({
20
+ type: "asset",
21
+ fileName: "robots.txt",
22
+ source: renderRobots(opts.config),
23
+ });
24
+ },
25
+ };
26
+ }
27
+ /** Render the body of a permissive default `robots.txt`. A `Sitemap:`
28
+ * line is appended only when `site` is set, because the directive
29
+ * requires a fully-qualified URL; `base` is included so the URL matches
30
+ * where the build (and the `sitemap.xml` inside it) is actually mounted. */
31
+ export function renderRobots(config) {
32
+ const lines = ["User-agent: *", "Allow: /"];
33
+ if (config.site) {
34
+ const host = config.site.replace(/\/+$/, "");
35
+ const base = config.base ?? "";
36
+ lines.push("", `Sitemap: ${host}${base}/sitemap.xml`);
37
+ }
38
+ return `${lines.join("\n")}\n`;
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1yb2JvdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvcGx1Z2lucy92aXRlLXJvYm90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3BDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFRaEM7Ozs7O29FQUtvRTtBQUNwRSxNQUFNLFVBQVUsTUFBTSxDQUFDLElBQW1CO0lBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQ2hCLFdBQVcsRUFDWCxRQUFRLEVBQ1IsWUFBWSxDQUNiLENBQUE7SUFDRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixrQkFBa0IsQ0FBQyxHQUFHO1lBQ3BCLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUE7UUFDOUIsQ0FBQztRQUNELGNBQWM7WUFDWixJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUM7Z0JBQUUsT0FBTTtZQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNaLElBQUksRUFBRSxPQUFPO2dCQUNiLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDbEMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQ7Ozs2RUFHNkU7QUFDN0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFxQztJQUNoRSxNQUFNLEtBQUssR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUMzQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDNUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUE7UUFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsWUFBWSxJQUFJLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJub2RlOmZzXCJcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSBcInZpdGVcIlxuaW1wb3J0IHR5cGUgeyBDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy50c1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9ib3RzT3B0aW9ucyB7XG4gIGNvbmZpZzogQ29uZmlnXG59XG5cbi8qKiBFbWl0IGEgZGVmYXVsdCBgcm9ib3RzLnR4dGAgaW50byB0aGUgY2xpZW50IGJ1aWxkIG91dHB1dCwgd2l0aCBhXG4gKiAgYFNpdGVtYXA6YCBsaW5lIHBvaW50aW5nIGF0IHRoZSBUYW5TdGFjay1TdGFydC1nZW5lcmF0ZWQgYHNpdGVtYXAueG1sYFxuICogIHdoZW4ge0BsaW5rIENvbmZpZy5zaXRlfSBpcyBzZXQuIFNraXBwZWQgd2hlbiB0aGUgY29uc3VtZXIgc2hpcHNcbiAqICB0aGVpciBvd24gYC5saXZlbWFyay9wdWJsaWMvcm9ib3RzLnR4dGAgc28gdGhlIHN0YW5kYXJkIHB1YmxpY0RpclxuICogIG92ZXJsYXkgd2lucyDigJQgVml0ZSBjb3BpZXMgdGhlIHB1YmxpY0RpciBiZWZvcmUgd3JpdGVCdW5kbGUsIHNvXG4gKiAgdW5jb25kaXRpb25hbCBlbWl0RmlsZSB3b3VsZCBzaWxlbnRseSBvdmVyd3JpdGUgdGhlIG92ZXJyaWRlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvYm90cyhvcHRzOiBSb2JvdHNPcHRpb25zKTogUGx1Z2luIHtcbiAgY29uc3Qgb3ZlcnJpZGVGaWxlID0gam9pbihcbiAgICBvcHRzLmNvbmZpZy5yb290LFxuICAgIFwiLmxpdmVtYXJrXCIsXG4gICAgXCJwdWJsaWNcIixcbiAgICBcInJvYm90cy50eHRcIixcbiAgKVxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwibGl2ZW1hcms6cm9ib3RzXCIsXG4gICAgYXBwbHlUb0Vudmlyb25tZW50KGVudikge1xuICAgICAgcmV0dXJuIGVudi5uYW1lID09PSBcImNsaWVudFwiXG4gICAgfSxcbiAgICBnZW5lcmF0ZUJ1bmRsZSgpIHtcbiAgICAgIGlmIChleGlzdHNTeW5jKG92ZXJyaWRlRmlsZSkpIHJldHVyblxuICAgICAgdGhpcy5lbWl0RmlsZSh7XG4gICAgICAgIHR5cGU6IFwiYXNzZXRcIixcbiAgICAgICAgZmlsZU5hbWU6IFwicm9ib3RzLnR4dFwiLFxuICAgICAgICBzb3VyY2U6IHJlbmRlclJvYm90cyhvcHRzLmNvbmZpZyksXG4gICAgICB9KVxuICAgIH0sXG4gIH1cbn1cblxuLyoqIFJlbmRlciB0aGUgYm9keSBvZiBhIHBlcm1pc3NpdmUgZGVmYXVsdCBgcm9ib3RzLnR4dGAuIEEgYFNpdGVtYXA6YFxuICogIGxpbmUgaXMgYXBwZW5kZWQgb25seSB3aGVuIGBzaXRlYCBpcyBzZXQsIGJlY2F1c2UgdGhlIGRpcmVjdGl2ZVxuICogIHJlcXVpcmVzIGEgZnVsbHktcXVhbGlmaWVkIFVSTDsgYGJhc2VgIGlzIGluY2x1ZGVkIHNvIHRoZSBVUkwgbWF0Y2hlc1xuICogIHdoZXJlIHRoZSBidWlsZCAoYW5kIHRoZSBgc2l0ZW1hcC54bWxgIGluc2lkZSBpdCkgaXMgYWN0dWFsbHkgbW91bnRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJSb2JvdHMoY29uZmlnOiBQaWNrPENvbmZpZywgXCJzaXRlXCIgfCBcImJhc2VcIj4pIHtcbiAgY29uc3QgbGluZXMgPSBbXCJVc2VyLWFnZW50OiAqXCIsIFwiQWxsb3c6IC9cIl1cbiAgaWYgKGNvbmZpZy5zaXRlKSB7XG4gICAgY29uc3QgaG9zdCA9IGNvbmZpZy5zaXRlLnJlcGxhY2UoL1xcLyskLywgXCJcIilcbiAgICBjb25zdCBiYXNlID0gY29uZmlnLmJhc2UgPz8gXCJcIlxuICAgIGxpbmVzLnB1c2goXCJcIiwgYFNpdGVtYXA6ICR7aG9zdH0ke2Jhc2V9L3NpdGVtYXAueG1sYClcbiAgfVxuICByZXR1cm4gYCR7bGluZXMuam9pbihcIlxcblwiKX1cXG5gXG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,20 @@
1
+ import { describe, expect, it } from "vite-plus/test";
2
+ import { renderRobots } from "./vite-robots.js";
3
+ describe("renderRobots", () => {
4
+ it("emits an allow-all body when site is not set", () => {
5
+ expect(renderRobots({})).toBe("User-agent: *\nAllow: /\n");
6
+ });
7
+ it("appends a Sitemap line when site is set", () => {
8
+ expect(renderRobots({ site: "https://livemark.dev" })).toBe("User-agent: *\nAllow: /\n\nSitemap: https://livemark.dev/sitemap.xml\n");
9
+ });
10
+ it("strips a trailing slash from site before composing the URL", () => {
11
+ expect(renderRobots({ site: "https://livemark.dev/" })).toBe("User-agent: *\nAllow: /\n\nSitemap: https://livemark.dev/sitemap.xml\n");
12
+ });
13
+ it("includes the base path so the URL matches the build mount", () => {
14
+ expect(renderRobots({ site: "https://user.github.io", base: "/repo" })).toBe("User-agent: *\nAllow: /\n\nSitemap: https://user.github.io/repo/sitemap.xml\n");
15
+ });
16
+ it("ignores base when site is not set", () => {
17
+ expect(renderRobots({ base: "/repo" })).toBe("User-agent: *\nAllow: /\n");
18
+ });
19
+ });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS1yb2JvdHMudW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9wbHVnaW5zL3ZpdGUtcm9ib3RzLnVuaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRS9DLFFBQVEsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO0lBQzVCLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7UUFDdEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO0lBQzVELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEdBQUcsRUFBRTtRQUNqRCxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDekQsd0VBQXdFLENBQ3pFLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxHQUFHLEVBQUU7UUFDcEUsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzFELHdFQUF3RSxDQUN6RSxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsMkRBQTJELEVBQUUsR0FBRyxFQUFFO1FBQ25FLE1BQU0sQ0FDSixZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQ2hFLENBQUMsSUFBSSxDQUNKLCtFQUErRSxDQUNoRixDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1FBQzNDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO0lBQzNFLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlLXBsdXMvdGVzdFwiXG5pbXBvcnQgeyByZW5kZXJSb2JvdHMgfSBmcm9tIFwiLi92aXRlLXJvYm90cy50c1wiXG5cbmRlc2NyaWJlKFwicmVuZGVyUm9ib3RzXCIsICgpID0+IHtcbiAgaXQoXCJlbWl0cyBhbiBhbGxvdy1hbGwgYm9keSB3aGVuIHNpdGUgaXMgbm90IHNldFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlbmRlclJvYm90cyh7fSkpLnRvQmUoXCJVc2VyLWFnZW50OiAqXFxuQWxsb3c6IC9cXG5cIilcbiAgfSlcblxuICBpdChcImFwcGVuZHMgYSBTaXRlbWFwIGxpbmUgd2hlbiBzaXRlIGlzIHNldFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlbmRlclJvYm90cyh7IHNpdGU6IFwiaHR0cHM6Ly9saXZlbWFyay5kZXZcIiB9KSkudG9CZShcbiAgICAgIFwiVXNlci1hZ2VudDogKlxcbkFsbG93OiAvXFxuXFxuU2l0ZW1hcDogaHR0cHM6Ly9saXZlbWFyay5kZXYvc2l0ZW1hcC54bWxcXG5cIixcbiAgICApXG4gIH0pXG5cbiAgaXQoXCJzdHJpcHMgYSB0cmFpbGluZyBzbGFzaCBmcm9tIHNpdGUgYmVmb3JlIGNvbXBvc2luZyB0aGUgVVJMXCIsICgpID0+IHtcbiAgICBleHBlY3QocmVuZGVyUm9ib3RzKHsgc2l0ZTogXCJodHRwczovL2xpdmVtYXJrLmRldi9cIiB9KSkudG9CZShcbiAgICAgIFwiVXNlci1hZ2VudDogKlxcbkFsbG93OiAvXFxuXFxuU2l0ZW1hcDogaHR0cHM6Ly9saXZlbWFyay5kZXYvc2l0ZW1hcC54bWxcXG5cIixcbiAgICApXG4gIH0pXG5cbiAgaXQoXCJpbmNsdWRlcyB0aGUgYmFzZSBwYXRoIHNvIHRoZSBVUkwgbWF0Y2hlcyB0aGUgYnVpbGQgbW91bnRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIHJlbmRlclJvYm90cyh7IHNpdGU6IFwiaHR0cHM6Ly91c2VyLmdpdGh1Yi5pb1wiLCBiYXNlOiBcIi9yZXBvXCIgfSksXG4gICAgKS50b0JlKFxuICAgICAgXCJVc2VyLWFnZW50OiAqXFxuQWxsb3c6IC9cXG5cXG5TaXRlbWFwOiBodHRwczovL3VzZXIuZ2l0aHViLmlvL3JlcG8vc2l0ZW1hcC54bWxcXG5cIixcbiAgICApXG4gIH0pXG5cbiAgaXQoXCJpZ25vcmVzIGJhc2Ugd2hlbiBzaXRlIGlzIG5vdCBzZXRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZW5kZXJSb2JvdHMoeyBiYXNlOiBcIi9yZXBvXCIgfSkpLnRvQmUoXCJVc2VyLWFnZW50OiAqXFxuQWxsb3c6IC9cXG5cIilcbiAgfSlcbn0pXG4iXX0=
@@ -1,32 +1,38 @@
1
1
  import { Route as rootRouteImport } from './routes/__root';
2
2
  import { Route as splatRouteImport } from './routes/$';
3
+ import { Route as SectionRssDotxmlRouteImport } from './routes/$section.rss[.]xml';
3
4
  import { Route as IndexRouteImport } from './../.livemark/routes/index';
4
5
  declare const splatRoute: any;
6
+ declare const SectionRssDotxmlRoute: any;
5
7
  declare const IndexRoute: any;
6
8
  export interface FileRoutesByFullPath {
7
9
  '/': typeof IndexRoute;
8
10
  '/$': typeof splatRoute;
11
+ '/$section/rss.xml': typeof SectionRssDotxmlRoute;
9
12
  }
10
13
  export interface FileRoutesByTo {
11
14
  '/': typeof IndexRoute;
12
15
  '/$': typeof splatRoute;
16
+ '/$section/rss.xml': typeof SectionRssDotxmlRoute;
13
17
  }
14
18
  export interface FileRoutesById {
15
19
  __root__: typeof rootRouteImport;
16
20
  '/': typeof IndexRoute;
17
21
  '/$': typeof splatRoute;
22
+ '/$section/rss.xml': typeof SectionRssDotxmlRoute;
18
23
  }
19
24
  export interface FileRouteTypes {
20
25
  fileRoutesByFullPath: FileRoutesByFullPath;
21
- fullPaths: '/' | '/$';
26
+ fullPaths: '/' | '/$' | '/$section/rss.xml';
22
27
  fileRoutesByTo: FileRoutesByTo;
23
- to: '/' | '/$';
24
- id: '__root__' | '/' | '/$';
28
+ to: '/' | '/$' | '/$section/rss.xml';
29
+ id: '__root__' | '/' | '/$' | '/$section/rss.xml';
25
30
  fileRoutesById: FileRoutesById;
26
31
  }
27
32
  export interface RootRouteChildren {
28
33
  IndexRoute: typeof IndexRoute;
29
34
  splatRoute: typeof splatRoute;
35
+ SectionRssDotxmlRoute: typeof SectionRssDotxmlRoute;
30
36
  }
31
37
  declare module '@tanstack/react-router' {
32
38
  interface FileRoutesByPath {
@@ -37,6 +43,13 @@ declare module '@tanstack/react-router' {
37
43
  preLoaderRoute: typeof splatRouteImport;
38
44
  parentRoute: typeof rootRouteImport;
39
45
  };
46
+ '/$section/rss.xml': {
47
+ id: '/$section/rss.xml';
48
+ path: '/$section/rss.xml';
49
+ fullPath: '/$section/rss.xml';
50
+ preLoaderRoute: typeof SectionRssDotxmlRouteImport;
51
+ parentRoute: typeof rootRouteImport;
52
+ };
40
53
  '/': {
41
54
  id: '/';
42
55
  path: '/';
@@ -6,12 +6,18 @@
6
6
  // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
7
7
  import { Route as rootRouteImport } from './routes/__root';
8
8
  import { Route as splatRouteImport } from './routes/$';
9
+ import { Route as SectionRssDotxmlRouteImport } from './routes/$section.rss[.]xml';
9
10
  import { Route as IndexRouteImport } from './../.livemark/routes/index';
10
11
  const splatRoute = splatRouteImport.update({
11
12
  id: '/$',
12
13
  path: '/$',
13
14
  getParentRoute: () => rootRouteImport,
14
15
  });
16
+ const SectionRssDotxmlRoute = SectionRssDotxmlRouteImport.update({
17
+ id: '/$section/rss.xml',
18
+ path: '/$section/rss.xml',
19
+ getParentRoute: () => rootRouteImport,
20
+ });
15
21
  const IndexRoute = IndexRouteImport.update({
16
22
  id: '/',
17
23
  path: '/',
@@ -20,8 +26,9 @@ const IndexRoute = IndexRouteImport.update({
20
26
  const rootRouteChildren = {
21
27
  IndexRoute: IndexRoute,
22
28
  splatRoute: splatRoute,
29
+ SectionRssDotxmlRoute: SectionRssDotxmlRoute,
23
30
  };
24
31
  export const routeTree = rootRouteImport
25
32
  ._addFileChildren(rootRouteChildren)
26
33
  ._addFileTypes();
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVUcmVlLmdlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9yb3V0ZVRyZWUuZ2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9CQUFvQjtBQUVwQixjQUFjO0FBRWQscUNBQXFDO0FBRXJDLDREQUE0RDtBQUM1RCwwRUFBMEU7QUFDMUUsa0lBQWtJO0FBRWxJLE9BQU8sRUFBRSxLQUFLLElBQUksZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUQsT0FBTyxFQUFFLEtBQUssSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN0RCxPQUFPLEVBQUUsS0FBSyxJQUFJLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFFdkUsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO0lBQ3pDLEVBQUUsRUFBRSxJQUFJO0lBQ1IsSUFBSSxFQUFFLElBQUk7SUFDVixjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUMsZUFBZTtDQUMvQixDQUFDLENBQUE7QUFDVCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7SUFDekMsRUFBRSxFQUFFLEdBQUc7SUFDUCxJQUFJLEVBQUUsR0FBRztJQUNULGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlO0NBQy9CLENBQUMsQ0FBQTtBQStDVCxNQUFNLGlCQUFpQixHQUFzQjtJQUMzQyxVQUFVLEVBQUUsVUFBVTtJQUN0QixVQUFVLEVBQUUsVUFBVTtDQUN2QixDQUFBO0FBQ0QsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWU7S0FDckMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUM7S0FDbkMsYUFBYSxFQUFrQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cblxuLy8gQHRzLW5vY2hlY2tcblxuLy8gbm9pbnNwZWN0aW9uIEpTVW51c2VkR2xvYmFsU3ltYm9sc1xuXG4vLyBUaGlzIGZpbGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFRhblN0YWNrIFJvdXRlci5cbi8vIFlvdSBzaG91bGQgTk9UIG1ha2UgYW55IGNoYW5nZXMgaW4gdGhpcyBmaWxlIGFzIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4vLyBBZGRpdGlvbmFsbHksIHlvdSBzaG91bGQgYWxzbyBleGNsdWRlIHRoaXMgZmlsZSBmcm9tIHlvdXIgbGludGVyIGFuZC9vciBmb3JtYXR0ZXIgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGNoZWNrZWQgb3IgbW9kaWZpZWQuXG5cbmltcG9ydCB7IFJvdXRlIGFzIHJvb3RSb3V0ZUltcG9ydCB9IGZyb20gJy4vcm91dGVzL19fcm9vdCdcbmltcG9ydCB7IFJvdXRlIGFzIHNwbGF0Um91dGVJbXBvcnQgfSBmcm9tICcuL3JvdXRlcy8kJ1xuaW1wb3J0IHsgUm91dGUgYXMgSW5kZXhSb3V0ZUltcG9ydCB9IGZyb20gJy4vLi4vLmxpdmVtYXJrL3JvdXRlcy9pbmRleCdcblxuY29uc3Qgc3BsYXRSb3V0ZSA9IHNwbGF0Um91dGVJbXBvcnQudXBkYXRlKHtcbiAgaWQ6ICcvJCcsXG4gIHBhdGg6ICcvJCcsXG4gIGdldFBhcmVudFJvdXRlOiAoKSA9PiByb290Um91dGVJbXBvcnQsXG59IGFzIGFueSlcbmNvbnN0IEluZGV4Um91dGUgPSBJbmRleFJvdXRlSW1wb3J0LnVwZGF0ZSh7XG4gIGlkOiAnLycsXG4gIHBhdGg6ICcvJyxcbiAgZ2V0UGFyZW50Um91dGU6ICgpID0+IHJvb3RSb3V0ZUltcG9ydCxcbn0gYXMgYW55KVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVSb3V0ZXNCeUZ1bGxQYXRoIHtcbiAgJy8nOiB0eXBlb2YgSW5kZXhSb3V0ZVxuICAnLyQnOiB0eXBlb2Ygc3BsYXRSb3V0ZVxufVxuZXhwb3J0IGludGVyZmFjZSBGaWxlUm91dGVzQnlUbyB7XG4gICcvJzogdHlwZW9mIEluZGV4Um91dGVcbiAgJy8kJzogdHlwZW9mIHNwbGF0Um91dGVcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJvdXRlc0J5SWQge1xuICBfX3Jvb3RfXzogdHlwZW9mIHJvb3RSb3V0ZUltcG9ydFxuICAnLyc6IHR5cGVvZiBJbmRleFJvdXRlXG4gICcvJCc6IHR5cGVvZiBzcGxhdFJvdXRlXG59XG5leHBvcnQgaW50ZXJmYWNlIEZpbGVSb3V0ZVR5cGVzIHtcbiAgZmlsZVJvdXRlc0J5RnVsbFBhdGg6IEZpbGVSb3V0ZXNCeUZ1bGxQYXRoXG4gIGZ1bGxQYXRoczogJy8nIHwgJy8kJ1xuICBmaWxlUm91dGVzQnlUbzogRmlsZVJvdXRlc0J5VG9cbiAgdG86ICcvJyB8ICcvJCdcbiAgaWQ6ICdfX3Jvb3RfXycgfCAnLycgfCAnLyQnXG4gIGZpbGVSb3V0ZXNCeUlkOiBGaWxlUm91dGVzQnlJZFxufVxuZXhwb3J0IGludGVyZmFjZSBSb290Um91dGVDaGlsZHJlbiB7XG4gIEluZGV4Um91dGU6IHR5cGVvZiBJbmRleFJvdXRlXG4gIHNwbGF0Um91dGU6IHR5cGVvZiBzcGxhdFJvdXRlXG59XG5cbmRlY2xhcmUgbW9kdWxlICdAdGFuc3RhY2svcmVhY3Qtcm91dGVyJyB7XG4gIGludGVyZmFjZSBGaWxlUm91dGVzQnlQYXRoIHtcbiAgICAnLyQnOiB7XG4gICAgICBpZDogJy8kJ1xuICAgICAgcGF0aDogJy8kJ1xuICAgICAgZnVsbFBhdGg6ICcvJCdcbiAgICAgIHByZUxvYWRlclJvdXRlOiB0eXBlb2Ygc3BsYXRSb3V0ZUltcG9ydFxuICAgICAgcGFyZW50Um91dGU6IHR5cGVvZiByb290Um91dGVJbXBvcnRcbiAgICB9XG4gICAgJy8nOiB7XG4gICAgICBpZDogJy8nXG4gICAgICBwYXRoOiAnLydcbiAgICAgIGZ1bGxQYXRoOiAnLydcbiAgICAgIHByZUxvYWRlclJvdXRlOiB0eXBlb2YgSW5kZXhSb3V0ZUltcG9ydFxuICAgICAgcGFyZW50Um91dGU6IHR5cGVvZiByb290Um91dGVJbXBvcnRcbiAgICB9XG4gIH1cbn1cblxuY29uc3Qgcm9vdFJvdXRlQ2hpbGRyZW46IFJvb3RSb3V0ZUNoaWxkcmVuID0ge1xuICBJbmRleFJvdXRlOiBJbmRleFJvdXRlLFxuICBzcGxhdFJvdXRlOiBzcGxhdFJvdXRlLFxufVxuZXhwb3J0IGNvbnN0IHJvdXRlVHJlZSA9IHJvb3RSb3V0ZUltcG9ydFxuICAuX2FkZEZpbGVDaGlsZHJlbihyb290Um91dGVDaGlsZHJlbilcbiAgLl9hZGRGaWxlVHlwZXM8RmlsZVJvdXRlVHlwZXM+KClcblxuaW1wb3J0IHR5cGUgeyBnZXRSb3V0ZXIgfSBmcm9tICcuL3JvdXRlci50c3gnXG5pbXBvcnQgdHlwZSB7IGNyZWF0ZVN0YXJ0IH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXN0YXJ0J1xuZGVjbGFyZSBtb2R1bGUgJ0B0YW5zdGFjay9yZWFjdC1zdGFydCcge1xuICBpbnRlcmZhY2UgUmVnaXN0ZXIge1xuICAgIHNzcjogdHJ1ZVxuICAgIHJvdXRlcjogQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBnZXRSb3V0ZXI+PlxuICB9XG59XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVUcmVlLmdlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9yb3V0ZVRyZWUuZ2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9CQUFvQjtBQUVwQixjQUFjO0FBRWQscUNBQXFDO0FBRXJDLDREQUE0RDtBQUM1RCwwRUFBMEU7QUFDMUUsa0lBQWtJO0FBRWxJLE9BQU8sRUFBRSxLQUFLLElBQUksZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUQsT0FBTyxFQUFFLEtBQUssSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUN0RCxPQUFPLEVBQUUsS0FBSyxJQUFJLDJCQUEyQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDbEYsT0FBTyxFQUFFLEtBQUssSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBRXZFLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztJQUN6QyxFQUFFLEVBQUUsSUFBSTtJQUNSLElBQUksRUFBRSxJQUFJO0lBQ1YsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWU7Q0FDL0IsQ0FBQyxDQUFBO0FBQ1QsTUFBTSxxQkFBcUIsR0FBRywyQkFBMkIsQ0FBQyxNQUFNLENBQUM7SUFDL0QsRUFBRSxFQUFFLG1CQUFtQjtJQUN2QixJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlO0NBQy9CLENBQUMsQ0FBQTtBQUNULE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztJQUN6QyxFQUFFLEVBQUUsR0FBRztJQUNQLElBQUksRUFBRSxHQUFHO0lBQ1QsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWU7Q0FDL0IsQ0FBQyxDQUFBO0FBMERULE1BQU0saUJBQWlCLEdBQXNCO0lBQzNDLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLFVBQVUsRUFBRSxVQUFVO0lBQ3RCLHFCQUFxQixFQUFFLHFCQUFxQjtDQUM3QyxDQUFBO0FBQ0QsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLGVBQWU7S0FDckMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUM7S0FDbkMsYUFBYSxFQUFrQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cblxuLy8gQHRzLW5vY2hlY2tcblxuLy8gbm9pbnNwZWN0aW9uIEpTVW51c2VkR2xvYmFsU3ltYm9sc1xuXG4vLyBUaGlzIGZpbGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IFRhblN0YWNrIFJvdXRlci5cbi8vIFlvdSBzaG91bGQgTk9UIG1ha2UgYW55IGNoYW5nZXMgaW4gdGhpcyBmaWxlIGFzIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4vLyBBZGRpdGlvbmFsbHksIHlvdSBzaG91bGQgYWxzbyBleGNsdWRlIHRoaXMgZmlsZSBmcm9tIHlvdXIgbGludGVyIGFuZC9vciBmb3JtYXR0ZXIgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGNoZWNrZWQgb3IgbW9kaWZpZWQuXG5cbmltcG9ydCB7IFJvdXRlIGFzIHJvb3RSb3V0ZUltcG9ydCB9IGZyb20gJy4vcm91dGVzL19fcm9vdCdcbmltcG9ydCB7IFJvdXRlIGFzIHNwbGF0Um91dGVJbXBvcnQgfSBmcm9tICcuL3JvdXRlcy8kJ1xuaW1wb3J0IHsgUm91dGUgYXMgU2VjdGlvblJzc0RvdHhtbFJvdXRlSW1wb3J0IH0gZnJvbSAnLi9yb3V0ZXMvJHNlY3Rpb24ucnNzWy5deG1sJ1xuaW1wb3J0IHsgUm91dGUgYXMgSW5kZXhSb3V0ZUltcG9ydCB9IGZyb20gJy4vLi4vLmxpdmVtYXJrL3JvdXRlcy9pbmRleCdcblxuY29uc3Qgc3BsYXRSb3V0ZSA9IHNwbGF0Um91dGVJbXBvcnQudXBkYXRlKHtcbiAgaWQ6ICcvJCcsXG4gIHBhdGg6ICcvJCcsXG4gIGdldFBhcmVudFJvdXRlOiAoKSA9PiByb290Um91dGVJbXBvcnQsXG59IGFzIGFueSlcbmNvbnN0IFNlY3Rpb25Sc3NEb3R4bWxSb3V0ZSA9IFNlY3Rpb25Sc3NEb3R4bWxSb3V0ZUltcG9ydC51cGRhdGUoe1xuICBpZDogJy8kc2VjdGlvbi9yc3MueG1sJyxcbiAgcGF0aDogJy8kc2VjdGlvbi9yc3MueG1sJyxcbiAgZ2V0UGFyZW50Um91dGU6ICgpID0+IHJvb3RSb3V0ZUltcG9ydCxcbn0gYXMgYW55KVxuY29uc3QgSW5kZXhSb3V0ZSA9IEluZGV4Um91dGVJbXBvcnQudXBkYXRlKHtcbiAgaWQ6ICcvJyxcbiAgcGF0aDogJy8nLFxuICBnZXRQYXJlbnRSb3V0ZTogKCkgPT4gcm9vdFJvdXRlSW1wb3J0LFxufSBhcyBhbnkpXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJvdXRlc0J5RnVsbFBhdGgge1xuICAnLyc6IHR5cGVvZiBJbmRleFJvdXRlXG4gICcvJCc6IHR5cGVvZiBzcGxhdFJvdXRlXG4gICcvJHNlY3Rpb24vcnNzLnhtbCc6IHR5cGVvZiBTZWN0aW9uUnNzRG90eG1sUm91dGVcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJvdXRlc0J5VG8ge1xuICAnLyc6IHR5cGVvZiBJbmRleFJvdXRlXG4gICcvJCc6IHR5cGVvZiBzcGxhdFJvdXRlXG4gICcvJHNlY3Rpb24vcnNzLnhtbCc6IHR5cGVvZiBTZWN0aW9uUnNzRG90eG1sUm91dGVcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJvdXRlc0J5SWQge1xuICBfX3Jvb3RfXzogdHlwZW9mIHJvb3RSb3V0ZUltcG9ydFxuICAnLyc6IHR5cGVvZiBJbmRleFJvdXRlXG4gICcvJCc6IHR5cGVvZiBzcGxhdFJvdXRlXG4gICcvJHNlY3Rpb24vcnNzLnhtbCc6IHR5cGVvZiBTZWN0aW9uUnNzRG90eG1sUm91dGVcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVJvdXRlVHlwZXMge1xuICBmaWxlUm91dGVzQnlGdWxsUGF0aDogRmlsZVJvdXRlc0J5RnVsbFBhdGhcbiAgZnVsbFBhdGhzOiAnLycgfCAnLyQnIHwgJy8kc2VjdGlvbi9yc3MueG1sJ1xuICBmaWxlUm91dGVzQnlUbzogRmlsZVJvdXRlc0J5VG9cbiAgdG86ICcvJyB8ICcvJCcgfCAnLyRzZWN0aW9uL3Jzcy54bWwnXG4gIGlkOiAnX19yb290X18nIHwgJy8nIHwgJy8kJyB8ICcvJHNlY3Rpb24vcnNzLnhtbCdcbiAgZmlsZVJvdXRlc0J5SWQ6IEZpbGVSb3V0ZXNCeUlkXG59XG5leHBvcnQgaW50ZXJmYWNlIFJvb3RSb3V0ZUNoaWxkcmVuIHtcbiAgSW5kZXhSb3V0ZTogdHlwZW9mIEluZGV4Um91dGVcbiAgc3BsYXRSb3V0ZTogdHlwZW9mIHNwbGF0Um91dGVcbiAgU2VjdGlvblJzc0RvdHhtbFJvdXRlOiB0eXBlb2YgU2VjdGlvblJzc0RvdHhtbFJvdXRlXG59XG5cbmRlY2xhcmUgbW9kdWxlICdAdGFuc3RhY2svcmVhY3Qtcm91dGVyJyB7XG4gIGludGVyZmFjZSBGaWxlUm91dGVzQnlQYXRoIHtcbiAgICAnLyQnOiB7XG4gICAgICBpZDogJy8kJ1xuICAgICAgcGF0aDogJy8kJ1xuICAgICAgZnVsbFBhdGg6ICcvJCdcbiAgICAgIHByZUxvYWRlclJvdXRlOiB0eXBlb2Ygc3BsYXRSb3V0ZUltcG9ydFxuICAgICAgcGFyZW50Um91dGU6IHR5cGVvZiByb290Um91dGVJbXBvcnRcbiAgICB9XG4gICAgJy8kc2VjdGlvbi9yc3MueG1sJzoge1xuICAgICAgaWQ6ICcvJHNlY3Rpb24vcnNzLnhtbCdcbiAgICAgIHBhdGg6ICcvJHNlY3Rpb24vcnNzLnhtbCdcbiAgICAgIGZ1bGxQYXRoOiAnLyRzZWN0aW9uL3Jzcy54bWwnXG4gICAgICBwcmVMb2FkZXJSb3V0ZTogdHlwZW9mIFNlY3Rpb25Sc3NEb3R4bWxSb3V0ZUltcG9ydFxuICAgICAgcGFyZW50Um91dGU6IHR5cGVvZiByb290Um91dGVJbXBvcnRcbiAgICB9XG4gICAgJy8nOiB7XG4gICAgICBpZDogJy8nXG4gICAgICBwYXRoOiAnLydcbiAgICAgIGZ1bGxQYXRoOiAnLydcbiAgICAgIHByZUxvYWRlclJvdXRlOiB0eXBlb2YgSW5kZXhSb3V0ZUltcG9ydFxuICAgICAgcGFyZW50Um91dGU6IHR5cGVvZiByb290Um91dGVJbXBvcnRcbiAgICB9XG4gIH1cbn1cblxuY29uc3Qgcm9vdFJvdXRlQ2hpbGRyZW46IFJvb3RSb3V0ZUNoaWxkcmVuID0ge1xuICBJbmRleFJvdXRlOiBJbmRleFJvdXRlLFxuICBzcGxhdFJvdXRlOiBzcGxhdFJvdXRlLFxuICBTZWN0aW9uUnNzRG90eG1sUm91dGU6IFNlY3Rpb25Sc3NEb3R4bWxSb3V0ZSxcbn1cbmV4cG9ydCBjb25zdCByb3V0ZVRyZWUgPSByb290Um91dGVJbXBvcnRcbiAgLl9hZGRGaWxlQ2hpbGRyZW4ocm9vdFJvdXRlQ2hpbGRyZW4pXG4gIC5fYWRkRmlsZVR5cGVzPEZpbGVSb3V0ZVR5cGVzPigpXG5cbmltcG9ydCB0eXBlIHsgZ2V0Um91dGVyIH0gZnJvbSAnLi9yb3V0ZXIudHN4J1xuaW1wb3J0IHR5cGUgeyBjcmVhdGVTdGFydCB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1zdGFydCdcbmRlY2xhcmUgbW9kdWxlICdAdGFuc3RhY2svcmVhY3Qtc3RhcnQnIHtcbiAgaW50ZXJmYWNlIFJlZ2lzdGVyIHtcbiAgICBzc3I6IHRydWVcbiAgICByb3V0ZXI6IEF3YWl0ZWQ8UmV0dXJuVHlwZTx0eXBlb2YgZ2V0Um91dGVyPj5cbiAgfVxufVxuIl19
@@ -0,0 +1,7 @@
1
+ export declare const Route: import("@tanstack/router-core").Route<import("@tanstack/react-router").Register, any, "/$section/rss.xml", "/$section/rss.xml", "/$section/rss.xml", "/$section/rss.xml", undefined, import("@tanstack/react-router").ResolveParams<"/$section/rss.xml">, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, import("@tanstack/react-router").AnyContext, {}, undefined, unknown, unknown, unknown, unknown, {
2
+ GET: ({ params }: {
3
+ params: {
4
+ section: string;
5
+ };
6
+ }) => Promise<Response>;
7
+ }>;
@@ -0,0 +1,56 @@
1
+ import { config } from "livemark:virtual";
2
+ import { createFileRoute } from "@tanstack/react-router";
3
+ import { sectionFlatArticles, sortedArticles } from "../content/article.js";
4
+ import { renderRssFeed } from "../helpers/rss.js";
5
+ const FEED_ITEM_LIMIT = 20;
6
+ export const Route = createFileRoute("/$section/rss.xml")({
7
+ server: {
8
+ handlers: {
9
+ GET: async ({ params }) => {
10
+ if (!config.site) {
11
+ return new Response("RSS requires `site` in livemark.config.ts", {
12
+ status: 404,
13
+ });
14
+ }
15
+ const prefix = `/${params.section}/`;
16
+ const section = config.sections?.find(s => s.type === "blog" && s.prefix === prefix);
17
+ if (!section || section.type !== "blog") {
18
+ return new Response("Not found", { status: 404 });
19
+ }
20
+ const host = config.site.replace(/\/+$/, "");
21
+ const base = config.base ?? "";
22
+ const toAbsolute = (path) => `${host}${base}${path}`;
23
+ const paths = sectionFlatArticles.get(section.prefix) ?? [];
24
+ const items = [];
25
+ for (const path of paths) {
26
+ if (items.length >= FEED_ITEM_LIMIT)
27
+ break;
28
+ const article = sortedArticles.find(a => a.path === path);
29
+ if (!article?.date)
30
+ continue;
31
+ const link = toAbsolute(article.path);
32
+ items.push({
33
+ title: article.title,
34
+ link,
35
+ guid: link,
36
+ description: article.description,
37
+ pubDate: article.date,
38
+ author: article.author,
39
+ categories: article.tags,
40
+ });
41
+ }
42
+ const xml = renderRssFeed({
43
+ title: section.siteTitle ?? section.title,
44
+ description: section.siteDescription ?? config.description ?? "",
45
+ link: toAbsolute(section.prefix),
46
+ feedLink: toAbsolute(`${section.prefix}rss.xml`),
47
+ items,
48
+ });
49
+ return new Response(xml, {
50
+ headers: { "Content-Type": "application/rss+xml; charset=utf-8" },
51
+ });
52
+ },
53
+ },
54
+ },
55
+ });
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiJHNlY3Rpb24ucnNzWy5deG1sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL3JvdXRlcy8kc2VjdGlvbi5yc3NbLl14bWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDeEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sbUJBQW1CLENBQUE7QUFFL0QsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFBO0FBRTFCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUU7UUFDTixRQUFRLEVBQUU7WUFDUixHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFtQyxFQUFFLEVBQUU7Z0JBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2pCLE9BQU8sSUFBSSxRQUFRLENBQUMsMkNBQTJDLEVBQUU7d0JBQy9ELE1BQU0sRUFBRSxHQUFHO3FCQUNaLENBQUMsQ0FBQTtnQkFDSixDQUFDO2dCQUNELE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFBO2dCQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FDbkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FDOUMsQ0FBQTtnQkFDRCxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7b0JBQ3hDLE9BQU8sSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7Z0JBQ25ELENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFBO2dCQUM1QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQTtnQkFDOUIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQTtnQkFFNUQsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQzNELE1BQU0sS0FBSyxHQUFjLEVBQUUsQ0FBQTtnQkFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLGVBQWU7d0JBQUUsTUFBSztvQkFDMUMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUE7b0JBQ3pELElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSTt3QkFBRSxTQUFRO29CQUM1QixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO29CQUNyQyxLQUFLLENBQUMsSUFBSSxDQUFDO3dCQUNULEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSzt3QkFDcEIsSUFBSTt3QkFDSixJQUFJLEVBQUUsSUFBSTt3QkFDVixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7d0JBQ2hDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSTt3QkFDckIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO3dCQUN0QixVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUk7cUJBQ3pCLENBQUMsQ0FBQTtnQkFDSixDQUFDO2dCQUVELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQztvQkFDeEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLEtBQUs7b0JBQ3pDLFdBQVcsRUFBRSxPQUFPLENBQUMsZUFBZSxJQUFJLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRTtvQkFDaEUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO29CQUNoQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sU0FBUyxDQUFDO29CQUNoRCxLQUFLO2lCQUNOLENBQUMsQ0FBQTtnQkFFRixPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRTtvQkFDdkIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLG9DQUFvQyxFQUFFO2lCQUNsRSxDQUFDLENBQUE7WUFDSixDQUFDO1NBQ0Y7S0FDRjtDQUNGLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbmZpZyB9IGZyb20gXCJsaXZlbWFyazp2aXJ0dWFsXCJcbmltcG9ydCB7IGNyZWF0ZUZpbGVSb3V0ZSB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCJcbmltcG9ydCB7IHNlY3Rpb25GbGF0QXJ0aWNsZXMsIHNvcnRlZEFydGljbGVzIH0gZnJvbSBcIi4uL2NvbnRlbnQvYXJ0aWNsZS50c1wiXG5pbXBvcnQgeyByZW5kZXJSc3NGZWVkLCB0eXBlIFJzc0l0ZW0gfSBmcm9tIFwiLi4vaGVscGVycy9yc3MudHNcIlxuXG5jb25zdCBGRUVEX0lURU1fTElNSVQgPSAyMFxuXG5leHBvcnQgY29uc3QgUm91dGUgPSBjcmVhdGVGaWxlUm91dGUoXCIvJHNlY3Rpb24vcnNzLnhtbFwiKSh7XG4gIHNlcnZlcjoge1xuICAgIGhhbmRsZXJzOiB7XG4gICAgICBHRVQ6IGFzeW5jICh7IHBhcmFtcyB9OiB7IHBhcmFtczogeyBzZWN0aW9uOiBzdHJpbmcgfSB9KSA9PiB7XG4gICAgICAgIGlmICghY29uZmlnLnNpdGUpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKFwiUlNTIHJlcXVpcmVzIGBzaXRlYCBpbiBsaXZlbWFyay5jb25maWcudHNcIiwge1xuICAgICAgICAgICAgc3RhdHVzOiA0MDQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmVmaXggPSBgLyR7cGFyYW1zLnNlY3Rpb259L2BcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGNvbmZpZy5zZWN0aW9ucz8uZmluZChcbiAgICAgICAgICBzID0+IHMudHlwZSA9PT0gXCJibG9nXCIgJiYgcy5wcmVmaXggPT09IHByZWZpeCxcbiAgICAgICAgKVxuICAgICAgICBpZiAoIXNlY3Rpb24gfHwgc2VjdGlvbi50eXBlICE9PSBcImJsb2dcIikge1xuICAgICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoXCJOb3QgZm91bmRcIiwgeyBzdGF0dXM6IDQwNCB9KVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhvc3QgPSBjb25maWcuc2l0ZS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgICAgIGNvbnN0IGJhc2UgPSBjb25maWcuYmFzZSA/PyBcIlwiXG4gICAgICAgIGNvbnN0IHRvQWJzb2x1dGUgPSAocGF0aDogc3RyaW5nKSA9PiBgJHtob3N0fSR7YmFzZX0ke3BhdGh9YFxuXG4gICAgICAgIGNvbnN0IHBhdGhzID0gc2VjdGlvbkZsYXRBcnRpY2xlcy5nZXQoc2VjdGlvbi5wcmVmaXgpID8/IFtdXG4gICAgICAgIGNvbnN0IGl0ZW1zOiBSc3NJdGVtW10gPSBbXVxuICAgICAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcbiAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID49IEZFRURfSVRFTV9MSU1JVCkgYnJlYWtcbiAgICAgICAgICBjb25zdCBhcnRpY2xlID0gc29ydGVkQXJ0aWNsZXMuZmluZChhID0+IGEucGF0aCA9PT0gcGF0aClcbiAgICAgICAgICBpZiAoIWFydGljbGU/LmRhdGUpIGNvbnRpbnVlXG4gICAgICAgICAgY29uc3QgbGluayA9IHRvQWJzb2x1dGUoYXJ0aWNsZS5wYXRoKVxuICAgICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6IGFydGljbGUudGl0bGUsXG4gICAgICAgICAgICBsaW5rLFxuICAgICAgICAgICAgZ3VpZDogbGluayxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBhcnRpY2xlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgcHViRGF0ZTogYXJ0aWNsZS5kYXRlLFxuICAgICAgICAgICAgYXV0aG9yOiBhcnRpY2xlLmF1dGhvcixcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IGFydGljbGUudGFncyxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeG1sID0gcmVuZGVyUnNzRmVlZCh7XG4gICAgICAgICAgdGl0bGU6IHNlY3Rpb24uc2l0ZVRpdGxlID8/IHNlY3Rpb24udGl0bGUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHNlY3Rpb24uc2l0ZURlc2NyaXB0aW9uID8/IGNvbmZpZy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuICAgICAgICAgIGxpbms6IHRvQWJzb2x1dGUoc2VjdGlvbi5wcmVmaXgpLFxuICAgICAgICAgIGZlZWRMaW5rOiB0b0Fic29sdXRlKGAke3NlY3Rpb24ucHJlZml4fXJzcy54bWxgKSxcbiAgICAgICAgICBpdGVtcyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKHhtbCwge1xuICAgICAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9yc3MreG1sOyBjaGFyc2V0PXV0Zi04XCIgfSxcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn0pXG4iXX0=