livemark 0.15.0 → 0.17.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.
Files changed (39) hide show
  1. package/build/actions/config/define.d.ts +67 -3
  2. package/build/actions/config/define.js +3 -3
  3. package/build/actions/config/load.js +23 -2
  4. package/build/components/Layout.js +11 -4
  5. package/build/components/SidebarArticles.js +9 -9
  6. package/build/components/SidebarSections.js +11 -5
  7. package/build/content/article.d.ts +10 -10
  8. package/build/content/article.js +19 -17
  9. package/build/helpers/article.d.ts +1 -15
  10. package/build/helpers/article.js +1 -34
  11. package/build/helpers/resolve-base.d.ts +6 -0
  12. package/build/helpers/resolve-base.js +13 -0
  13. package/build/helpers/resolve-base.unit.d.ts +1 -0
  14. package/build/helpers/resolve-base.unit.js +49 -0
  15. package/build/helpers/section.d.ts +10 -2
  16. package/build/helpers/section.js +19 -2
  17. package/build/helpers/section.unit.js +32 -2
  18. package/build/models/article.d.ts +0 -9
  19. package/build/models/article.js +1 -2
  20. package/build/models/config.d.ts +62 -19
  21. package/build/models/config.js +9 -11
  22. package/build/models/patch.d.ts +0 -1
  23. package/build/models/section.d.ts +29 -6
  24. package/build/models/section.js +14 -3
  25. package/package.json +1 -1
  26. package/source/actions/config/define.ts +4 -6
  27. package/source/actions/config/load.ts +26 -6
  28. package/source/components/Layout.tsx +20 -5
  29. package/source/components/SidebarArticles.tsx +17 -24
  30. package/source/components/SidebarSections.tsx +23 -3
  31. package/source/content/article.ts +20 -26
  32. package/source/helpers/article.ts +1 -39
  33. package/source/helpers/resolve-base.ts +11 -0
  34. package/source/helpers/resolve-base.unit.ts +61 -0
  35. package/source/helpers/section.ts +18 -2
  36. package/source/helpers/section.unit.ts +43 -1
  37. package/source/models/article.ts +0 -10
  38. package/source/models/config.ts +32 -14
  39. package/source/models/section.ts +18 -2
@@ -28,39 +28,6 @@ export function buildArticleTree(articles) {
28
28
  }
29
29
  return roots;
30
30
  }
31
- /**
32
- * Partition root nodes into sidebar sections.
33
- *
34
- * Walks root nodes in sort order. A root whose article has a `group` field
35
- * opens a new section; subsequent roots without `group` append to the current
36
- * section. Roots before the first `group` field land in a single leading
37
- * section with `name: undefined` (rendered without a label).
38
- *
39
- * `group` on non-root articles is ignored — only roots gate section boundaries.
40
- */
41
- export function groupArticleTree(tree, articles) {
42
- const groupByPathname = new Map();
43
- for (const article of articles) {
44
- groupByPathname.set(article.path, article.group);
45
- }
46
- const sections = [];
47
- let current;
48
- for (const node of tree) {
49
- const group = groupByPathname.get(node.path);
50
- if (group) {
51
- current = { name: group, nodes: [node] };
52
- sections.push(current);
53
- }
54
- else if (current) {
55
- current.nodes.push(node);
56
- }
57
- else {
58
- current = { name: undefined, nodes: [node] };
59
- sections.push(current);
60
- }
61
- }
62
- return sections;
63
- }
64
31
  /** Depth-first flatten of an article tree into a list of paths */
65
32
  export function flattenArticleTree(nodes) {
66
33
  const result = [];
@@ -70,4 +37,4 @@ export function flattenArticleTree(nodes) {
70
37
  }
71
38
  return result;
72
39
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL2FydGljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsK0VBQStFO0FBQy9FLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsUUFLRztJQUVILE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFBO0lBRTlDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3hCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFBO0lBRS9CLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdEMsSUFBSSxDQUFDLElBQUk7WUFBRSxTQUFRO1FBQ25CLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUMvQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sVUFBVSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ3pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRS9ELElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQW1CLEVBQ25CLFFBQTRDO0lBRTVDLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFBO0lBQzdELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQW1CLEVBQUUsQ0FBQTtJQUNuQyxJQUFJLE9BQWlDLENBQUE7SUFFckMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixNQUFNLEtBQUssR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFBO1lBQ3hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDeEIsQ0FBQzthQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUE7WUFDNUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQW9CO0lBQ3JELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQTtJQUMzQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBcnRpY2xlR3JvdXAsIEFydGljbGVOb2RlIH0gZnJvbSBcIi4uL21vZGVscy9hcnRpY2xlLnRzXCJcblxuLyoqIEJ1aWxkIGEgdHJlZSBmcm9tIGEgZmxhdCBzb3J0ZWQgbGlzdCBvZiBhcnRpY2xlcyBiYXNlZCBvbiBwYXRoIGhpZXJhcmNoeSAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQXJ0aWNsZVRyZWUoXG4gIGFydGljbGVzOiB7XG4gICAgcGF0aDogc3RyaW5nXG4gICAgdGl0bGU6IHN0cmluZ1xuICAgIGxhYmVsPzogc3RyaW5nXG4gICAgaWNvbjogc3RyaW5nXG4gIH1bXSxcbikge1xuICBjb25zdCBub2RlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEFydGljbGVOb2RlPigpXG5cbiAgZm9yIChjb25zdCBhcnRpY2xlIG9mIGFydGljbGVzKSB7XG4gICAgbm9kZU1hcC5zZXQoYXJ0aWNsZS5wYXRoLCB7XG4gICAgICBwYXRoOiBhcnRpY2xlLnBhdGgsXG4gICAgICB0aXRsZTogYXJ0aWNsZS50aXRsZSxcbiAgICAgIGxhYmVsOiBhcnRpY2xlLmxhYmVsLFxuICAgICAgaWNvbjogYXJ0aWNsZS5pY29uLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCByb290czogQXJ0aWNsZU5vZGVbXSA9IFtdXG5cbiAgZm9yIChjb25zdCBhcnRpY2xlIG9mIGFydGljbGVzKSB7XG4gICAgY29uc3Qgbm9kZSA9IG5vZGVNYXAuZ2V0KGFydGljbGUucGF0aClcbiAgICBpZiAoIW5vZGUpIGNvbnRpbnVlXG4gICAgY29uc3QgdHJpbW1lZCA9IGFydGljbGUucGF0aC5yZXBsYWNlKC9cXC8kLywgXCJcIilcbiAgICBjb25zdCBsYXN0U2xhc2ggPSB0cmltbWVkLmxhc3RJbmRleE9mKFwiL1wiKVxuICAgIGNvbnN0IHBhcmVudFBhdGggPSBsYXN0U2xhc2ggPiAwID8gYCR7dHJpbW1lZC5zbGljZSgwLCBsYXN0U2xhc2gpfS9gIDogXCJcIlxuICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudFBhdGggPyBub2RlTWFwLmdldChwYXJlbnRQYXRoKSA6IHVuZGVmaW5lZFxuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2gobm9kZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcm9vdHMucHVzaChub2RlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb290c1xufVxuXG4vKipcbiAqIFBhcnRpdGlvbiByb290IG5vZGVzIGludG8gc2lkZWJhciBzZWN0aW9ucy5cbiAqXG4gKiBXYWxrcyByb290IG5vZGVzIGluIHNvcnQgb3JkZXIuIEEgcm9vdCB3aG9zZSBhcnRpY2xlIGhhcyBhIGBncm91cGAgZmllbGRcbiAqIG9wZW5zIGEgbmV3IHNlY3Rpb247IHN1YnNlcXVlbnQgcm9vdHMgd2l0aG91dCBgZ3JvdXBgIGFwcGVuZCB0byB0aGUgY3VycmVudFxuICogc2VjdGlvbi4gUm9vdHMgYmVmb3JlIHRoZSBmaXJzdCBgZ3JvdXBgIGZpZWxkIGxhbmQgaW4gYSBzaW5nbGUgbGVhZGluZ1xuICogc2VjdGlvbiB3aXRoIGBuYW1lOiB1bmRlZmluZWRgIChyZW5kZXJlZCB3aXRob3V0IGEgbGFiZWwpLlxuICpcbiAqIGBncm91cGAgb24gbm9uLXJvb3QgYXJ0aWNsZXMgaXMgaWdub3JlZCDigJQgb25seSByb290cyBnYXRlIHNlY3Rpb24gYm91bmRhcmllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQXJ0aWNsZVRyZWUoXG4gIHRyZWU6IEFydGljbGVOb2RlW10sXG4gIGFydGljbGVzOiB7IHBhdGg6IHN0cmluZzsgZ3JvdXA/OiBzdHJpbmcgfVtdLFxuKTogQXJ0aWNsZUdyb3VwW10ge1xuICBjb25zdCBncm91cEJ5UGF0aG5hbWUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPigpXG4gIGZvciAoY29uc3QgYXJ0aWNsZSBvZiBhcnRpY2xlcykge1xuICAgIGdyb3VwQnlQYXRobmFtZS5zZXQoYXJ0aWNsZS5wYXRoLCBhcnRpY2xlLmdyb3VwKVxuICB9XG5cbiAgY29uc3Qgc2VjdGlvbnM6IEFydGljbGVHcm91cFtdID0gW11cbiAgbGV0IGN1cnJlbnQ6IEFydGljbGVHcm91cCB8IHVuZGVmaW5lZFxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiB0cmVlKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cEJ5UGF0aG5hbWUuZ2V0KG5vZGUucGF0aClcbiAgICBpZiAoZ3JvdXApIHtcbiAgICAgIGN1cnJlbnQgPSB7IG5hbWU6IGdyb3VwLCBub2RlczogW25vZGVdIH1cbiAgICAgIHNlY3Rpb25zLnB1c2goY3VycmVudClcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnQpIHtcbiAgICAgIGN1cnJlbnQubm9kZXMucHVzaChub2RlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50ID0geyBuYW1lOiB1bmRlZmluZWQsIG5vZGVzOiBbbm9kZV0gfVxuICAgICAgc2VjdGlvbnMucHVzaChjdXJyZW50KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWN0aW9uc1xufVxuXG4vKiogRGVwdGgtZmlyc3QgZmxhdHRlbiBvZiBhbiBhcnRpY2xlIHRyZWUgaW50byBhIGxpc3Qgb2YgcGF0aHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuQXJ0aWNsZVRyZWUobm9kZXM6IEFydGljbGVOb2RlW10pIHtcbiAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgIHJlc3VsdC5wdXNoKG5vZGUucGF0aClcbiAgICByZXN1bHQucHVzaCguLi5mbGF0dGVuQXJ0aWNsZVRyZWUobm9kZS5jaGlsZHJlbikpXG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuIl19
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL2FydGljbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsK0VBQStFO0FBQy9FLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsUUFLRztJQUVILE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUF1QixDQUFBO0lBRTlDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ3hCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7WUFDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFBO0lBRS9CLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdEMsSUFBSSxDQUFDLElBQUk7WUFBRSxTQUFRO1FBQ25CLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUMvQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sVUFBVSxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ3pFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO1FBRS9ELElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQW9CO0lBQ3JELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQTtJQUMzQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBcnRpY2xlTm9kZSB9IGZyb20gXCIuLi9tb2RlbHMvYXJ0aWNsZS50c1wiXG5cbi8qKiBCdWlsZCBhIHRyZWUgZnJvbSBhIGZsYXQgc29ydGVkIGxpc3Qgb2YgYXJ0aWNsZXMgYmFzZWQgb24gcGF0aCBoaWVyYXJjaHkgKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFydGljbGVUcmVlKFxuICBhcnRpY2xlczoge1xuICAgIHBhdGg6IHN0cmluZ1xuICAgIHRpdGxlOiBzdHJpbmdcbiAgICBsYWJlbD86IHN0cmluZ1xuICAgIGljb246IHN0cmluZ1xuICB9W10sXG4pIHtcbiAgY29uc3Qgbm9kZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBBcnRpY2xlTm9kZT4oKVxuXG4gIGZvciAoY29uc3QgYXJ0aWNsZSBvZiBhcnRpY2xlcykge1xuICAgIG5vZGVNYXAuc2V0KGFydGljbGUucGF0aCwge1xuICAgICAgcGF0aDogYXJ0aWNsZS5wYXRoLFxuICAgICAgdGl0bGU6IGFydGljbGUudGl0bGUsXG4gICAgICBsYWJlbDogYXJ0aWNsZS5sYWJlbCxcbiAgICAgIGljb246IGFydGljbGUuaWNvbixcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9KVxuICB9XG5cbiAgY29uc3Qgcm9vdHM6IEFydGljbGVOb2RlW10gPSBbXVxuXG4gIGZvciAoY29uc3QgYXJ0aWNsZSBvZiBhcnRpY2xlcykge1xuICAgIGNvbnN0IG5vZGUgPSBub2RlTWFwLmdldChhcnRpY2xlLnBhdGgpXG4gICAgaWYgKCFub2RlKSBjb250aW51ZVxuICAgIGNvbnN0IHRyaW1tZWQgPSBhcnRpY2xlLnBhdGgucmVwbGFjZSgvXFwvJC8sIFwiXCIpXG4gICAgY29uc3QgbGFzdFNsYXNoID0gdHJpbW1lZC5sYXN0SW5kZXhPZihcIi9cIilcbiAgICBjb25zdCBwYXJlbnRQYXRoID0gbGFzdFNsYXNoID4gMCA/IGAke3RyaW1tZWQuc2xpY2UoMCwgbGFzdFNsYXNoKX0vYCA6IFwiXCJcbiAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRQYXRoID8gbm9kZU1hcC5nZXQocGFyZW50UGF0aCkgOiB1bmRlZmluZWRcblxuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3RzLnB1c2gobm9kZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdHNcbn1cblxuLyoqIERlcHRoLWZpcnN0IGZsYXR0ZW4gb2YgYW4gYXJ0aWNsZSB0cmVlIGludG8gYSBsaXN0IG9mIHBhdGhzICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkFydGljbGVUcmVlKG5vZGVzOiBBcnRpY2xlTm9kZVtdKSB7XG4gIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXVxuICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICByZXN1bHQucHVzaChub2RlLnBhdGgpXG4gICAgcmVzdWx0LnB1c2goLi4uZmxhdHRlbkFydGljbGVUcmVlKG5vZGUuY2hpbGRyZW4pKVxuICB9XG4gIHJldHVybiByZXN1bHRcbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ /** Resolve a base config field — accepts a string, a function of the
2
+ * form `(command) => string | undefined` (where `command` matches
3
+ * Vite's `ConfigEnv.command`), or undefined. Normalizes the result to
4
+ * either `undefined` (no base) or a leading-slash, no-trailing-slash
5
+ * string (e.g. `"repo"` and `"/repo/"` both → `"/repo"`). */
6
+ export declare function resolveBase(input: unknown, command: "build" | "serve"): string | undefined;
@@ -0,0 +1,13 @@
1
+ /** Resolve a base config field — accepts a string, a function of the
2
+ * form `(command) => string | undefined` (where `command` matches
3
+ * Vite's `ConfigEnv.command`), or undefined. Normalizes the result to
4
+ * either `undefined` (no base) or a leading-slash, no-trailing-slash
5
+ * string (e.g. `"repo"` and `"/repo/"` both → `"/repo"`). */
6
+ export function resolveBase(input, command) {
7
+ const raw = typeof input === "function" ? input(command) : input;
8
+ if (typeof raw !== "string" || !raw)
9
+ return undefined;
10
+ const trimmed = raw.replace(/^\/|\/$/g, "");
11
+ return trimmed ? `/${trimmed}` : undefined;
12
+ }
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2hlbHBlcnMvcmVzb2x2ZS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OzhEQUk4RDtBQUM5RCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWMsRUFBRSxPQUEwQjtJQUNwRSxNQUFNLEdBQUcsR0FBRyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ2hFLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sU0FBUyxDQUFBO0lBQ3JELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzNDLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBSZXNvbHZlIGEgYmFzZSBjb25maWcgZmllbGQg4oCUIGFjY2VwdHMgYSBzdHJpbmcsIGEgZnVuY3Rpb24gb2YgdGhlXG4gKiAgZm9ybSBgKGNvbW1hbmQpID0+IHN0cmluZyB8IHVuZGVmaW5lZGAgKHdoZXJlIGBjb21tYW5kYCBtYXRjaGVzXG4gKiAgVml0ZSdzIGBDb25maWdFbnYuY29tbWFuZGApLCBvciB1bmRlZmluZWQuIE5vcm1hbGl6ZXMgdGhlIHJlc3VsdCB0b1xuICogIGVpdGhlciBgdW5kZWZpbmVkYCAobm8gYmFzZSkgb3IgYSBsZWFkaW5nLXNsYXNoLCBuby10cmFpbGluZy1zbGFzaFxuICogIHN0cmluZyAoZS5nLiBgXCJyZXBvXCJgIGFuZCBgXCIvcmVwby9cImAgYm90aCDihpIgYFwiL3JlcG9cImApLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCYXNlKGlucHV0OiB1bmtub3duLCBjb21tYW5kOiBcImJ1aWxkXCIgfCBcInNlcnZlXCIpIHtcbiAgY29uc3QgcmF3ID0gdHlwZW9mIGlucHV0ID09PSBcImZ1bmN0aW9uXCIgPyBpbnB1dChjb21tYW5kKSA6IGlucHV0XG4gIGlmICh0eXBlb2YgcmF3ICE9PSBcInN0cmluZ1wiIHx8ICFyYXcpIHJldHVybiB1bmRlZmluZWRcbiAgY29uc3QgdHJpbW1lZCA9IHJhdy5yZXBsYWNlKC9eXFwvfFxcLyQvZywgXCJcIilcbiAgcmV0dXJuIHRyaW1tZWQgPyBgLyR7dHJpbW1lZH1gIDogdW5kZWZpbmVkXG59XG4iXX0=
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,49 @@
1
+ import { describe, expect, it } from "vite-plus/test";
2
+ import { resolveBase } from "./resolve-base.js";
3
+ describe("resolveBase", () => {
4
+ it("should return undefined for undefined input", () => {
5
+ expect(resolveBase(undefined, "build")).toBeUndefined();
6
+ expect(resolveBase(undefined, "serve")).toBeUndefined();
7
+ });
8
+ it("should return undefined for empty or root-only string", () => {
9
+ expect(resolveBase("", "build")).toBeUndefined();
10
+ expect(resolveBase("/", "build")).toBeUndefined();
11
+ });
12
+ it("should normalize a string without slashes", () => {
13
+ expect(resolveBase("repo", "build")).toBe("/repo");
14
+ });
15
+ it("should normalize a string with leading slash", () => {
16
+ expect(resolveBase("/repo", "build")).toBe("/repo");
17
+ });
18
+ it("should normalize a string with trailing slash", () => {
19
+ expect(resolveBase("repo/", "build")).toBe("/repo");
20
+ });
21
+ it("should normalize a string with both slashes", () => {
22
+ expect(resolveBase("/repo/", "build")).toBe("/repo");
23
+ });
24
+ it("should preserve multi-segment paths", () => {
25
+ expect(resolveBase("/a/b/", "build")).toBe("/a/b");
26
+ });
27
+ it("should call a function with command=build", () => {
28
+ const fn = (cmd) => (cmd === "build" ? "prod" : "dev");
29
+ expect(resolveBase(fn, "build")).toBe("/prod");
30
+ });
31
+ it("should call a function with command=serve", () => {
32
+ const fn = (cmd) => (cmd === "build" ? "prod" : "dev");
33
+ expect(resolveBase(fn, "serve")).toBe("/dev");
34
+ });
35
+ it("should handle a function returning undefined", () => {
36
+ const fn = (cmd) => cmd === "serve" ? undefined : "prod";
37
+ expect(resolveBase(fn, "serve")).toBeUndefined();
38
+ expect(resolveBase(fn, "build")).toBe("/prod");
39
+ });
40
+ it("should handle a function returning empty string", () => {
41
+ const fn = () => "";
42
+ expect(resolveBase(fn, "build")).toBeUndefined();
43
+ });
44
+ it("should normalize the function-returned string", () => {
45
+ const fn = () => "/repo/";
46
+ expect(resolveBase(fn, "build")).toBe("/repo");
47
+ });
48
+ });
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1iYXNlLnVuaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zb3VyY2UvaGVscGVycy9yZXNvbHZlLWJhc2UudW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFFL0MsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7SUFDM0IsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtRQUNyRCxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3ZELE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDekQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1FBQy9ELE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUNuRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7UUFDbkQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDcEQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1FBQ3RELE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN2RCxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNyRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7UUFDckQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDdEQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMscUNBQXFDLEVBQUUsR0FBRyxFQUFFO1FBQzdDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3BELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtRQUNuRCxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN6RSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNoRCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7UUFDbkQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDekUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDL0MsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsOENBQThDLEVBQUUsR0FBRyxFQUFFO1FBQ3RELE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBc0IsRUFBRSxFQUFFLENBQ3BDLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO1FBQ3RDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDaEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEQsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1FBQ3pELE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQTtRQUNuQixNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ2xELENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN2RCxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUE7UUFDekIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEQsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBleHBlY3QsIGl0IH0gZnJvbSBcInZpdGUtcGx1cy90ZXN0XCJcbmltcG9ydCB7IHJlc29sdmVCYXNlIH0gZnJvbSBcIi4vcmVzb2x2ZS1iYXNlLnRzXCJcblxuZGVzY3JpYmUoXCJyZXNvbHZlQmFzZVwiLCAoKSA9PiB7XG4gIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIHVuZGVmaW5lZCBpbnB1dFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlc29sdmVCYXNlKHVuZGVmaW5lZCwgXCJidWlsZFwiKSkudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KHJlc29sdmVCYXNlKHVuZGVmaW5lZCwgXCJzZXJ2ZVwiKSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3IgZW1wdHkgb3Igcm9vdC1vbmx5IHN0cmluZ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlc29sdmVCYXNlKFwiXCIsIFwiYnVpbGRcIikpLnRvQmVVbmRlZmluZWQoKVxuICAgIGV4cGVjdChyZXNvbHZlQmFzZShcIi9cIiwgXCJidWlsZFwiKSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbm9ybWFsaXplIGEgc3RyaW5nIHdpdGhvdXQgc2xhc2hlc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlc29sdmVCYXNlKFwicmVwb1wiLCBcImJ1aWxkXCIpKS50b0JlKFwiL3JlcG9cIilcbiAgfSlcblxuICBpdChcInNob3VsZCBub3JtYWxpemUgYSBzdHJpbmcgd2l0aCBsZWFkaW5nIHNsYXNoXCIsICgpID0+IHtcbiAgICBleHBlY3QocmVzb2x2ZUJhc2UoXCIvcmVwb1wiLCBcImJ1aWxkXCIpKS50b0JlKFwiL3JlcG9cIilcbiAgfSlcblxuICBpdChcInNob3VsZCBub3JtYWxpemUgYSBzdHJpbmcgd2l0aCB0cmFpbGluZyBzbGFzaFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlc29sdmVCYXNlKFwicmVwby9cIiwgXCJidWlsZFwiKSkudG9CZShcIi9yZXBvXCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbm9ybWFsaXplIGEgc3RyaW5nIHdpdGggYm90aCBzbGFzaGVzXCIsICgpID0+IHtcbiAgICBleHBlY3QocmVzb2x2ZUJhc2UoXCIvcmVwby9cIiwgXCJidWlsZFwiKSkudG9CZShcIi9yZXBvXCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcHJlc2VydmUgbXVsdGktc2VnbWVudCBwYXRoc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlc29sdmVCYXNlKFwiL2EvYi9cIiwgXCJidWlsZFwiKSkudG9CZShcIi9hL2JcIilcbiAgfSlcblxuICBpdChcInNob3VsZCBjYWxsIGEgZnVuY3Rpb24gd2l0aCBjb21tYW5kPWJ1aWxkXCIsICgpID0+IHtcbiAgICBjb25zdCBmbiA9IChjbWQ6IFwiYnVpbGRcIiB8IFwic2VydmVcIikgPT4gKGNtZCA9PT0gXCJidWlsZFwiID8gXCJwcm9kXCIgOiBcImRldlwiKVxuICAgIGV4cGVjdChyZXNvbHZlQmFzZShmbiwgXCJidWlsZFwiKSkudG9CZShcIi9wcm9kXCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgY2FsbCBhIGZ1bmN0aW9uIHdpdGggY29tbWFuZD1zZXJ2ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgZm4gPSAoY21kOiBcImJ1aWxkXCIgfCBcInNlcnZlXCIpID0+IChjbWQgPT09IFwiYnVpbGRcIiA/IFwicHJvZFwiIDogXCJkZXZcIilcbiAgICBleHBlY3QocmVzb2x2ZUJhc2UoZm4sIFwic2VydmVcIikpLnRvQmUoXCIvZGV2XCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgaGFuZGxlIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHVuZGVmaW5lZFwiLCAoKSA9PiB7XG4gICAgY29uc3QgZm4gPSAoY21kOiBcImJ1aWxkXCIgfCBcInNlcnZlXCIpID0+XG4gICAgICBjbWQgPT09IFwic2VydmVcIiA/IHVuZGVmaW5lZCA6IFwicHJvZFwiXG4gICAgZXhwZWN0KHJlc29sdmVCYXNlKGZuLCBcInNlcnZlXCIpKS50b0JlVW5kZWZpbmVkKClcbiAgICBleHBlY3QocmVzb2x2ZUJhc2UoZm4sIFwiYnVpbGRcIikpLnRvQmUoXCIvcHJvZFwiKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGhhbmRsZSBhIGZ1bmN0aW9uIHJldHVybmluZyBlbXB0eSBzdHJpbmdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGZuID0gKCkgPT4gXCJcIlxuICAgIGV4cGVjdChyZXNvbHZlQmFzZShmbiwgXCJidWlsZFwiKSkudG9CZVVuZGVmaW5lZCgpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbm9ybWFsaXplIHRoZSBmdW5jdGlvbi1yZXR1cm5lZCBzdHJpbmdcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGZuID0gKCkgPT4gXCIvcmVwby9cIlxuICAgIGV4cGVjdChyZXNvbHZlQmFzZShmbiwgXCJidWlsZFwiKSkudG9CZShcIi9yZXBvXCIpXG4gIH0pXG59KVxuIl19
@@ -1,6 +1,14 @@
1
1
  import type { Section } from "../models/section.ts";
2
- /** Return the section's icon, falling back to a type-based default */
3
- export declare function sectionIcon(section: Pick<Section, "icon" | "type">): string;
2
+ /** Return the section's icon, falling back to a type-based default.
3
+ * Custom sections have no default — the user opts in via `icon`. */
4
+ export declare function sectionIcon(section: Pick<Section, "icon" | "type">): string | undefined;
5
+ /** Whether a custom section's URL should highlight as active for the
6
+ * current pathname. Only `/`-leading internal paths participate;
7
+ * protocol-absolute (`https://…`, `//cdn…`) URLs never highlight.
8
+ * Match semantics mirror routed sections — exact path or any
9
+ * descendant. A URL of `/` only highlights the home page itself
10
+ * (otherwise it would always match). */
11
+ export declare function customSectionActive(url: string, pathname: string): boolean;
4
12
  /** Find the section whose prefix is the longest prefix of the article path */
5
13
  export declare function matchSection<S extends {
6
14
  prefix: string;
@@ -3,10 +3,27 @@ const DEFAULT_ICONS = {
3
3
  blog: "rss",
4
4
  changelog: "history",
5
5
  };
6
- /** Return the section's icon, falling back to a type-based default */
6
+ /** Return the section's icon, falling back to a type-based default.
7
+ * Custom sections have no default — the user opts in via `icon`. */
7
8
  export function sectionIcon(section) {
8
9
  return section.icon ?? DEFAULT_ICONS[section.type];
9
10
  }
11
+ /** Whether a custom section's URL should highlight as active for the
12
+ * current pathname. Only `/`-leading internal paths participate;
13
+ * protocol-absolute (`https://…`, `//cdn…`) URLs never highlight.
14
+ * Match semantics mirror routed sections — exact path or any
15
+ * descendant. A URL of `/` only highlights the home page itself
16
+ * (otherwise it would always match). */
17
+ export function customSectionActive(url, pathname) {
18
+ if (!url.startsWith("/") || url.startsWith("//"))
19
+ return false;
20
+ const stripped = url.split(/[?#]/)[0] ?? "";
21
+ const target = `/${stripped.replace(/^\/|\/$/g, "")}/`;
22
+ const current = `/${pathname.replace(/^\/|\/$/g, "")}/`;
23
+ if (target === "/")
24
+ return current === "/";
25
+ return current === target || current.startsWith(target);
26
+ }
10
27
  /** Find the section whose prefix is the longest prefix of the article path */
11
28
  export function matchSection(articlePath, sections) {
12
29
  let best;
@@ -36,4 +53,4 @@ export function partitionBySection(articles, sections) {
36
53
  }
37
54
  return buckets;
38
55
  }
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL3NlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxhQUFhLEdBQW9DO0lBQ3JELE9BQU8sRUFBRSxXQUFXO0lBQ3BCLElBQUksRUFBRSxLQUFLO0lBQ1gsU0FBUyxFQUFFLFNBQVM7Q0FDckIsQ0FBQTtBQUVELHNFQUFzRTtBQUN0RSxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQXVDO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLFlBQVksQ0FDMUIsV0FBbUIsRUFDbkIsUUFBYTtJQUViLElBQUksSUFBbUIsQ0FBQTtJQUN2QixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUE7SUFDZixLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLElBQ0UsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFDL0IsQ0FBQztZQUNELElBQUksR0FBRyxPQUFPLENBQUE7WUFDZCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUE7UUFDakMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFFRCxzRkFBc0Y7QUFDdEYsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxRQUFhLEVBQ2IsUUFBOEI7SUFFOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQTtJQUN0QyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO1FBQ3BELE1BQU0sR0FBRyxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksYUFBYSxDQUFBO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdEIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQTtBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTZWN0aW9uIH0gZnJvbSBcIi4uL21vZGVscy9zZWN0aW9uLnRzXCJcblxuY29uc3QgREVGQVVMVF9JQ09OUzogUmVjb3JkPFNlY3Rpb25bXCJ0eXBlXCJdLCBzdHJpbmc+ID0ge1xuICBhcnRpY2xlOiBcImJvb2stb3BlblwiLFxuICBibG9nOiBcInJzc1wiLFxuICBjaGFuZ2Vsb2c6IFwiaGlzdG9yeVwiLFxufVxuXG4vKiogUmV0dXJuIHRoZSBzZWN0aW9uJ3MgaWNvbiwgZmFsbGluZyBiYWNrIHRvIGEgdHlwZS1iYXNlZCBkZWZhdWx0ICovXG5leHBvcnQgZnVuY3Rpb24gc2VjdGlvbkljb24oc2VjdGlvbjogUGljazxTZWN0aW9uLCBcImljb25cIiB8IFwidHlwZVwiPikge1xuICByZXR1cm4gc2VjdGlvbi5pY29uID8/IERFRkFVTFRfSUNPTlNbc2VjdGlvbi50eXBlXVxufVxuXG4vKiogRmluZCB0aGUgc2VjdGlvbiB3aG9zZSBwcmVmaXggaXMgdGhlIGxvbmdlc3QgcHJlZml4IG9mIHRoZSBhcnRpY2xlIHBhdGggKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFNlY3Rpb248UyBleHRlbmRzIHsgcHJlZml4OiBzdHJpbmcgfT4oXG4gIGFydGljbGVQYXRoOiBzdHJpbmcsXG4gIHNlY3Rpb25zOiBTW10sXG4pOiBTIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGJlc3Q6IFMgfCB1bmRlZmluZWRcbiAgbGV0IGJlc3RMZW4gPSAwXG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgIGlmIChcbiAgICAgIGFydGljbGVQYXRoLnN0YXJ0c1dpdGgoc2VjdGlvbi5wcmVmaXgpICYmXG4gICAgICBzZWN0aW9uLnByZWZpeC5sZW5ndGggPiBiZXN0TGVuXG4gICAgKSB7XG4gICAgICBiZXN0ID0gc2VjdGlvblxuICAgICAgYmVzdExlbiA9IHNlY3Rpb24ucHJlZml4Lmxlbmd0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gYmVzdFxufVxuXG4vKiogU3BsaXQgYXJ0aWNsZXMgaW50byBwZXItc2VjdGlvbiBidWNrZXRzLiBVbm1hdGNoZWQgYXJ0aWNsZXMgZ28gdG8gXCJfX2RlZmF1bHRfX1wiICovXG5leHBvcnQgZnVuY3Rpb24gcGFydGl0aW9uQnlTZWN0aW9uPFQgZXh0ZW5kcyB7IHBhdGg6IHN0cmluZyB9PihcbiAgYXJ0aWNsZXM6IFRbXSxcbiAgc2VjdGlvbnM6IHsgcHJlZml4OiBzdHJpbmcgfVtdLFxuKTogTWFwPHN0cmluZywgVFtdPiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBuZXcgTWFwPHN0cmluZywgVFtdPigpXG4gIGZvciAoY29uc3QgYXJ0aWNsZSBvZiBhcnRpY2xlcykge1xuICAgIGNvbnN0IHNlY3Rpb24gPSBtYXRjaFNlY3Rpb24oYXJ0aWNsZS5wYXRoLCBzZWN0aW9ucylcbiAgICBjb25zdCBrZXkgPSBzZWN0aW9uPy5wcmVmaXggPz8gXCJfX2RlZmF1bHRfX1wiXG4gICAgY29uc3QgYnVja2V0ID0gYnVja2V0cy5nZXQoa2V5KVxuICAgIGlmIChidWNrZXQpIHtcbiAgICAgIGJ1Y2tldC5wdXNoKGFydGljbGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Y2tldHMuc2V0KGtleSwgW2FydGljbGVdKVxuICAgIH1cbiAgfVxuICByZXR1cm4gYnVja2V0c1xufVxuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9oZWxwZXJzL3NlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxhQUFhLEdBQTZDO0lBQzlELE9BQU8sRUFBRSxXQUFXO0lBQ3BCLElBQUksRUFBRSxLQUFLO0lBQ1gsU0FBUyxFQUFFLFNBQVM7Q0FDckIsQ0FBQTtBQUVEO3FFQUNxRTtBQUNyRSxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQXVDO0lBQ2pFLE9BQU8sT0FBTyxDQUFDLElBQUksSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRDs7Ozs7eUNBS3lDO0FBQ3pDLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxHQUFXLEVBQUUsUUFBZ0I7SUFDL0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUM5RCxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUE7SUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFBO0lBQ3ZELElBQUksTUFBTSxLQUFLLEdBQUc7UUFBRSxPQUFPLE9BQU8sS0FBSyxHQUFHLENBQUE7SUFDMUMsT0FBTyxPQUFPLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDekQsQ0FBQztBQUVELDhFQUE4RTtBQUM5RSxNQUFNLFVBQVUsWUFBWSxDQUMxQixXQUFtQixFQUNuQixRQUFhO0lBRWIsSUFBSSxJQUFtQixDQUFBO0lBQ3ZCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQTtJQUNmLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFDRSxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsT0FBTyxFQUMvQixDQUFDO1lBQ0QsSUFBSSxHQUFHLE9BQU8sQ0FBQTtZQUNkLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQTtRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELHNGQUFzRjtBQUN0RixNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFFBQWEsRUFDYixRQUE4QjtJQUU5QixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFBO0lBQ3RDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDcEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLENBQUE7UUFDNUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMvQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN0QixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNlY3Rpb24gfSBmcm9tIFwiLi4vbW9kZWxzL3NlY3Rpb24udHNcIlxuXG5jb25zdCBERUZBVUxUX0lDT05TOiBQYXJ0aWFsPFJlY29yZDxTZWN0aW9uW1widHlwZVwiXSwgc3RyaW5nPj4gPSB7XG4gIGFydGljbGU6IFwiYm9vay1vcGVuXCIsXG4gIGJsb2c6IFwicnNzXCIsXG4gIGNoYW5nZWxvZzogXCJoaXN0b3J5XCIsXG59XG5cbi8qKiBSZXR1cm4gdGhlIHNlY3Rpb24ncyBpY29uLCBmYWxsaW5nIGJhY2sgdG8gYSB0eXBlLWJhc2VkIGRlZmF1bHQuXG4gKiAgQ3VzdG9tIHNlY3Rpb25zIGhhdmUgbm8gZGVmYXVsdCDigJQgdGhlIHVzZXIgb3B0cyBpbiB2aWEgYGljb25gLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlY3Rpb25JY29uKHNlY3Rpb246IFBpY2s8U2VjdGlvbiwgXCJpY29uXCIgfCBcInR5cGVcIj4pIHtcbiAgcmV0dXJuIHNlY3Rpb24uaWNvbiA/PyBERUZBVUxUX0lDT05TW3NlY3Rpb24udHlwZV1cbn1cblxuLyoqIFdoZXRoZXIgYSBjdXN0b20gc2VjdGlvbidzIFVSTCBzaG91bGQgaGlnaGxpZ2h0IGFzIGFjdGl2ZSBmb3IgdGhlXG4gKiAgY3VycmVudCBwYXRobmFtZS4gT25seSBgL2AtbGVhZGluZyBpbnRlcm5hbCBwYXRocyBwYXJ0aWNpcGF0ZTtcbiAqICBwcm90b2NvbC1hYnNvbHV0ZSAoYGh0dHBzOi8v4oCmYCwgYC8vY2Ru4oCmYCkgVVJMcyBuZXZlciBoaWdobGlnaHQuXG4gKiAgTWF0Y2ggc2VtYW50aWNzIG1pcnJvciByb3V0ZWQgc2VjdGlvbnMg4oCUIGV4YWN0IHBhdGggb3IgYW55XG4gKiAgZGVzY2VuZGFudC4gQSBVUkwgb2YgYC9gIG9ubHkgaGlnaGxpZ2h0cyB0aGUgaG9tZSBwYWdlIGl0c2VsZlxuICogIChvdGhlcndpc2UgaXQgd291bGQgYWx3YXlzIG1hdGNoKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdXN0b21TZWN0aW9uQWN0aXZlKHVybDogc3RyaW5nLCBwYXRobmFtZTogc3RyaW5nKSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoXCIvXCIpIHx8IHVybC5zdGFydHNXaXRoKFwiLy9cIikpIHJldHVybiBmYWxzZVxuICBjb25zdCBzdHJpcHBlZCA9IHVybC5zcGxpdCgvWz8jXS8pWzBdID8/IFwiXCJcbiAgY29uc3QgdGFyZ2V0ID0gYC8ke3N0cmlwcGVkLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYFxuICBjb25zdCBjdXJyZW50ID0gYC8ke3BhdGhuYW1lLnJlcGxhY2UoL15cXC98XFwvJC9nLCBcIlwiKX0vYFxuICBpZiAodGFyZ2V0ID09PSBcIi9cIikgcmV0dXJuIGN1cnJlbnQgPT09IFwiL1wiXG4gIHJldHVybiBjdXJyZW50ID09PSB0YXJnZXQgfHwgY3VycmVudC5zdGFydHNXaXRoKHRhcmdldClcbn1cblxuLyoqIEZpbmQgdGhlIHNlY3Rpb24gd2hvc2UgcHJlZml4IGlzIHRoZSBsb25nZXN0IHByZWZpeCBvZiB0aGUgYXJ0aWNsZSBwYXRoICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hTZWN0aW9uPFMgZXh0ZW5kcyB7IHByZWZpeDogc3RyaW5nIH0+KFxuICBhcnRpY2xlUGF0aDogc3RyaW5nLFxuICBzZWN0aW9uczogU1tdLFxuKTogUyB8IHVuZGVmaW5lZCB7XG4gIGxldCBiZXN0OiBTIHwgdW5kZWZpbmVkXG4gIGxldCBiZXN0TGVuID0gMFxuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICBpZiAoXG4gICAgICBhcnRpY2xlUGF0aC5zdGFydHNXaXRoKHNlY3Rpb24ucHJlZml4KSAmJlxuICAgICAgc2VjdGlvbi5wcmVmaXgubGVuZ3RoID4gYmVzdExlblxuICAgICkge1xuICAgICAgYmVzdCA9IHNlY3Rpb25cbiAgICAgIGJlc3RMZW4gPSBzZWN0aW9uLnByZWZpeC5sZW5ndGhcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJlc3Rcbn1cblxuLyoqIFNwbGl0IGFydGljbGVzIGludG8gcGVyLXNlY3Rpb24gYnVja2V0cy4gVW5tYXRjaGVkIGFydGljbGVzIGdvIHRvIFwiX19kZWZhdWx0X19cIiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpdGlvbkJ5U2VjdGlvbjxUIGV4dGVuZHMgeyBwYXRoOiBzdHJpbmcgfT4oXG4gIGFydGljbGVzOiBUW10sXG4gIHNlY3Rpb25zOiB7IHByZWZpeDogc3RyaW5nIH1bXSxcbik6IE1hcDxzdHJpbmcsIFRbXT4ge1xuICBjb25zdCBidWNrZXRzID0gbmV3IE1hcDxzdHJpbmcsIFRbXT4oKVxuICBmb3IgKGNvbnN0IGFydGljbGUgb2YgYXJ0aWNsZXMpIHtcbiAgICBjb25zdCBzZWN0aW9uID0gbWF0Y2hTZWN0aW9uKGFydGljbGUucGF0aCwgc2VjdGlvbnMpXG4gICAgY29uc3Qga2V5ID0gc2VjdGlvbj8ucHJlZml4ID8/IFwiX19kZWZhdWx0X19cIlxuICAgIGNvbnN0IGJ1Y2tldCA9IGJ1Y2tldHMuZ2V0KGtleSlcbiAgICBpZiAoYnVja2V0KSB7XG4gICAgICBidWNrZXQucHVzaChhcnRpY2xlKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWNrZXRzLnNldChrZXksIFthcnRpY2xlXSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGJ1Y2tldHNcbn1cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from "vite-plus/test";
2
- import { matchSection, partitionBySection } from "./section.js";
2
+ import { customSectionActive, matchSection, partitionBySection, } from "./section.js";
3
3
  describe("matchSection", () => {
4
4
  const sections = [
5
5
  { title: "Docs", prefix: "/" },
@@ -59,4 +59,34 @@ describe("partitionBySection", () => {
59
59
  ]);
60
60
  });
61
61
  });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi51bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2hlbHBlcnMvc2VjdGlvbi51bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFL0QsUUFBUSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7SUFDNUIsTUFBTSxRQUFRLEdBQUc7UUFDZixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtRQUM5QixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtRQUNqQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRTtLQUM1QyxDQUFBO0lBRUQsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtRQUMvQyxNQUFNLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUM1RSxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQywwREFBMEQsRUFBRSxHQUFHLEVBQUU7UUFDbEUsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2xFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtRQUMvQyxNQUFNLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN6RSxD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cmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlLXBsdXMvdGVzdFwiXG5pbXBvcnQgeyBtYXRjaFNlY3Rpb24sIHBhcnRpdGlvbkJ5U2VjdGlvbiB9IGZyb20gXCIuL3NlY3Rpb24udHNcIlxuXG5kZXNjcmliZShcIm1hdGNoU2VjdGlvblwiLCAoKSA9PiB7XG4gIGNvbnN0IHNlY3Rpb25zID0gW1xuICAgIHsgdGl0bGU6IFwiRG9jc1wiLCBwcmVmaXg6IFwiL1wiIH0sXG4gICAgeyB0aXRsZTogXCJBUElcIiwgcHJlZml4OiBcIi9hcGkvXCIgfSxcbiAgICB7IHRpdGxlOiBcIkFQSSBBdXRoXCIsIHByZWZpeDogXCIvYXBpL2F1dGgvXCIgfSxcbiAgXVxuXG4gIGl0KFwic2hvdWxkIG1hdGNoIHRoZSBtb3N0IHNwZWNpZmljIHByZWZpeFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KG1hdGNoU2VjdGlvbihcIi9hcGkvYXV0aC9sb2dpbi9cIiwgc2VjdGlvbnMpPy50aXRsZSkudG9CZShcIkFQSSBBdXRoXCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbWF0Y2ggYSBsZXNzIHNwZWNpZmljIHByZWZpeCB3aGVuIG5vIGRlZXBlciBtYXRjaFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KG1hdGNoU2VjdGlvbihcIi9hcGkvdXNlcnMvXCIsIHNlY3Rpb25zKT8udGl0bGUpLnRvQmUoXCJBUElcIilcbiAgfSlcblxuICBpdChcInNob3VsZCBtYXRjaCByb290IHNlY3Rpb24gYXMgZmFsbGJhY2tcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChtYXRjaFNlY3Rpb24oXCIvZ2V0dGluZy1zdGFydGVkL1wiLCBzZWN0aW9ucyk/LnRpdGxlKS50b0JlKFwiRG9jc1wiKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHJldHVybiB1bmRlZmluZWQgd2hlbiBubyBzZWN0aW9uIG1hdGNoZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG5hcnJvdyA9IFt7IHRpdGxlOiBcIkFQSVwiLCBwcmVmaXg6IFwiL2FwaS9cIiB9XVxuICAgIGV4cGVjdChtYXRjaFNlY3Rpb24oXCIvZ2V0dGluZy1zdGFydGVkL1wiLCBuYXJyb3cpKS50b0JlVW5kZWZpbmVkKClcbiAgfSlcblxuICBpdChcInNob3VsZCBtYXRjaCBhIHNpbmdsZSByb290IHNlY3Rpb24gZm9yIGFsbCBhcnRpY2xlc1wiLCAoKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IFt7IHRpdGxlOiBcIkRvY3NcIiwgcHJlZml4OiBcIi9cIiB9XVxuICAgIGV4cGVjdChtYXRjaFNlY3Rpb24oXCIvYW55dGhpbmcvZGVlcC9wYXRoL1wiLCByb290KT8udGl0bGUpLnRvQmUoXCJEb2NzXCIpXG4gIH0pXG59KVxuXG5kZXNjcmliZShcInBhcnRpdGlvbkJ5U2VjdGlvblwiLCAoKSA9PiB7XG4gIGNvbnN0IHNlY3Rpb25zID0gW1xuICAgIHsgdGl0bGU6IFwiRG9jc1wiLCBwcmVmaXg6IFwiL1wiIH0sXG4gICAgeyB0aXRsZTogXCJBUElcIiwgcHJlZml4OiBcIi9hcGkvXCIgfSxcbiAgXVxuXG4gIGNvbnN0IGFydGljbGVzID0gW1xuICAgIHsgcGF0aDogXCIvZ2V0dGluZy1zdGFydGVkL1wiIH0sXG4gICAgeyBwYXRoOiBcIi9ndWlkZS9cIiB9LFxuICAgIHsgcGF0aDogXCIvYXBpL3VzZXJzL1wiIH0sXG4gICAgeyBwYXRoOiBcIi9hcGkvYXV0aC9cIiB9LFxuICBdXG5cbiAgaXQoXCJzaG91bGQgc3BsaXQgYXJ0aWNsZXMgaW50byBzZWN0aW9uIGJ1Y2tldHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnRpdGlvbkJ5U2VjdGlvbihhcnRpY2xlcywgc2VjdGlvbnMpXG4gICAgZXhwZWN0KHJlc3VsdC5nZXQoXCIvXCIpPy5tYXAoYSA9PiBhLnBhdGgpKS50b0VxdWFsKFtcbiAgICAgIFwiL2dldHRpbmctc3RhcnRlZC9cIixcbiAgICAgIFwiL2d1aWRlL1wiLFxuICAgIF0pXG4gICAgZXhwZWN0KHJlc3VsdC5nZXQoXCIvYXBpL1wiKT8ubWFwKGEgPT4gYS5wYXRoKSkudG9FcXVhbChbXG4gICAgICBcIi9hcGkvdXNlcnMvXCIsXG4gICAgICBcIi9hcGkvYXV0aC9cIixcbiAgICBdKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIHB1dCB1bm1hdGNoZWQgYXJ0aWNsZXMgaW4gX19kZWZhdWx0X18gYnVja2V0XCIsICgpID0+IHtcbiAgICBjb25zdCBuYXJyb3cgPSBbeyB0aXRsZTogXCJBUElcIiwgcHJlZml4OiBcIi9hcGkvXCIgfV1cbiAgICBjb25zdCByZXN1bHQgPSBwYXJ0aXRpb25CeVNlY3Rpb24oYXJ0aWNsZXMsIG5hcnJvdylcbiAgICBleHBlY3QocmVzdWx0LmdldChcIl9fZGVmYXVsdF9fXCIpPy5tYXAoYSA9PiBhLnBhdGgpKS50b0VxdWFsKFtcbiAgICAgIFwiL2dldHRpbmctc3RhcnRlZC9cIixcbiAgICAgIFwiL2d1aWRlL1wiLFxuICAgIF0pXG4gICAgZXhwZWN0KHJlc3VsdC5nZXQoXCIvYXBpL1wiKT8ubWFwKGEgPT4gYS5wYXRoKSkudG9FcXVhbChbXG4gICAgICBcIi9hcGkvdXNlcnMvXCIsXG4gICAgICBcIi9hcGkvYXV0aC9cIixcbiAgICBdKVxuICB9KVxufSlcbiJdfQ==
62
+ describe("customSectionActive", () => {
63
+ it("should not match an absolute http url", () => {
64
+ expect(customSectionActive("https://x.com/y", "/y/")).toBe(false);
65
+ expect(customSectionActive("http://x.com/y", "/y/")).toBe(false);
66
+ });
67
+ it("should not match a protocol-relative url", () => {
68
+ expect(customSectionActive("//cdn.x.com/y", "/y/")).toBe(false);
69
+ });
70
+ it("should not match a hash url", () => {
71
+ expect(customSectionActive("#section", "/section/")).toBe(false);
72
+ });
73
+ it("should match the exact path", () => {
74
+ expect(customSectionActive("/about", "/about/")).toBe(true);
75
+ expect(customSectionActive("/about/", "/about/")).toBe(true);
76
+ });
77
+ it("should match a descendant path", () => {
78
+ expect(customSectionActive("/about", "/about/team/")).toBe(true);
79
+ });
80
+ it("should not match a sibling path with shared prefix", () => {
81
+ expect(customSectionActive("/about", "/aboutus/")).toBe(false);
82
+ });
83
+ it("should match exact root only", () => {
84
+ expect(customSectionActive("/", "/")).toBe(true);
85
+ expect(customSectionActive("/", "/about/")).toBe(false);
86
+ });
87
+ it("should ignore query and hash on the url", () => {
88
+ expect(customSectionActive("/about?x=1", "/about/")).toBe(true);
89
+ expect(customSectionActive("/about#top", "/about/team/")).toBe(true);
90
+ });
91
+ });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdGlvbi51bml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc291cmNlL2hlbHBlcnMvc2VjdGlvbi51bml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLGtCQUFrQixHQUNuQixNQUFNLGNBQWMsQ0FBQTtBQUVyQixRQUFRLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtJQUM1QixNQUFNLFFBQVEsR0FBRztRQUNmLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO1FBQzlCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO1FBQ2pDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFO0tBQzVDLENBQUE7SUFFRCxFQUFFLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1FBQy9DLE1BQU0sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQzVFLENBQUMsQ0FBQyxDQUFBO0lBRUYsRUFBRSxDQUFDLDBEQUEwRCxFQUFFLEdBQUcsRUFBRTtRQUNsRSxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDbEUsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxFQUFFO1FBQy9DLE1BQU0sQ0FBQyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FB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QUFFLENBQUMsb0RBQW9ELEVBQUUsR0FBRyxFQUFFO1FBQzVELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEUsQ0FBQyxDQUFDLENBQUE7SUFFRixFQUFFLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDaEQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6RCxDQUFDLENBQUMsQ0FBQTtJQUVGLEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRSxHQUFHLEVBQUU7UUFDakQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3RFLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgZXhwZWN0LCBpdCB9IGZyb20gXCJ2aXRlLXBsdXMvdGVzdFwiXG5pbXBvcnQge1xuICBjdXN0b21TZWN0aW9uQWN0aXZlLFxuICBtYXRjaFNlY3Rpb24sXG4gIHBhcnRpdGlvbkJ5U2VjdGlvbixcbn0gZnJvbSBcIi4vc2VjdGlvbi50c1wiXG5cbmRlc2NyaWJlKFwibWF0Y2hTZWN0aW9uXCIsICgpID0+IHtcbiAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgeyB0aXRsZTogXCJEb2NzXCIsIHByZWZpeDogXCIvXCIgfSxcbiAgICB7IHRpdGxlOiBcIkFQSVwiLCBwcmVmaXg6IFwiL2FwaS9cIiB9LFxuICAgIHsgdGl0bGU6IFwiQVBJIEF1dGhcIiwgcHJlZml4OiBcIi9hcGkvYXV0aC9cIiB9LFxuICBdXG5cbiAgaXQoXCJzaG91bGQgbWF0Y2ggdGhlIG1vc3Qgc3BlY2lmaWMgcHJlZml4XCIsICgpID0+IHtcbiAgICBleHBlY3QobWF0Y2hTZWN0aW9uKFwiL2FwaS9hdXRoL2xvZ2luL1wiLCBzZWN0aW9ucyk/LnRpdGxlKS50b0JlKFwiQVBJIEF1dGhcIilcbiAgfSlcblxuICBpdChcInNob3VsZCBtYXRjaCBhIGxlc3Mgc3BlY2lmaWMgcHJlZml4IHdoZW4gbm8gZGVlcGVyIG1hdGNoXCIsICgpID0+IHtcbiAgICBleHBlY3QobWF0Y2hTZWN0aW9uKFwiL2FwaS91c2Vycy9cIiwgc2VjdGlvbnMpPy50aXRsZSkudG9CZShcIkFQSVwiKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIG1hdGNoIHJvb3Qgc2VjdGlvbiBhcyBmYWxsYmFja1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KG1hdGNoU2VjdGlvbihcIi9nZXR0aW5nLXN0YXJ0ZWQvXCIsIHNlY3Rpb25zKT8udGl0bGUpLnRvQmUoXCJEb2NzXCIpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCB3aGVuIG5vIHNlY3Rpb24gbWF0Y2hlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgbmFycm93ID0gW3sgdGl0bGU6IFwiQVBJXCIsIHByZWZpeDogXCIvYXBpL1wiIH1dXG4gICAgZXhwZWN0KG1hdGNoU2VjdGlvbihcIi9nZXR0aW5nLXN0YXJ0ZWQvXCIsIG5hcnJvdykpLnRvQmVVbmRlZmluZWQoKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIG1hdGNoIGEgc2luZ2xlIHJvb3Qgc2VjdGlvbiBmb3IgYWxsIGFydGljbGVzXCIsICgpID0+IHtcbiAgICBjb25zdCByb290ID0gW3sgdGl0bGU6IFwiRG9jc1wiLCBwcmVmaXg6IFwiL1wiIH1dXG4gICAgZXhwZWN0KG1hdGNoU2VjdGlvbihcIi9hbnl0aGluZy9kZWVwL3BhdGgvXCIsIHJvb3QpPy50aXRsZSkudG9CZShcIkRvY3NcIilcbiAgfSlcbn0pXG5cbmRlc2NyaWJlKFwicGFydGl0aW9uQnlTZWN0aW9uXCIsICgpID0+IHtcbiAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgeyB0aXRsZTogXCJEb2NzXCIsIHByZWZpeDogXCIvXCIgfSxcbiAgICB7IHRpdGxlOiBcIkFQSVwiLCBwcmVmaXg6IFwiL2FwaS9cIiB9LFxuICBdXG5cbiAgY29uc3QgYXJ0aWNsZXMgPSBbXG4gICAgeyBwYXRoOiBcIi9nZXR0aW5nLXN0YXJ0ZWQvXCIgfSxcbiAgICB7IHBhdGg6IFwiL2d1aWRlL1wiIH0sXG4gICAgeyBwYXRoOiBcIi9hcGkvdXNlcnMvXCIgfSxcbiAgICB7IHBhdGg6IFwiL2FwaS9hdXRoL1wiIH0sXG4gIF1cblxuICBpdChcInNob3VsZCBzcGxpdCBhcnRpY2xlcyBpbnRvIHNlY3Rpb24gYnVja2V0c1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFydGl0aW9uQnlTZWN0aW9uKGFydGljbGVzLCBzZWN0aW9ucylcbiAgICBleHBlY3QocmVzdWx0LmdldChcIi9cIik/Lm1hcChhID0+IGEucGF0aCkpLnRvRXF1YWwoW1xuICAgICAgXCIvZ2V0dGluZy1zdGFydGVkL1wiLFxuICAgICAgXCIvZ3VpZGUvXCIsXG4gICAgXSlcbiAgICBleHBlY3QocmVzdWx0LmdldChcIi9hcGkvXCIpPy5tYXAoYSA9PiBhLnBhdGgpKS50b0VxdWFsKFtcbiAgICAgIFwiL2FwaS91c2Vycy9cIixcbiAgICAgIFwiL2FwaS9hdXRoL1wiLFxuICAgIF0pXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgcHV0IHVubWF0Y2hlZCBhcnRpY2xlcyBpbiBfX2RlZmF1bHRfXyBidWNrZXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG5hcnJvdyA9IFt7IHRpdGxlOiBcIkFQSVwiLCBwcmVmaXg6IFwiL2FwaS9cIiB9XVxuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnRpdGlvbkJ5U2VjdGlvbihhcnRpY2xlcywgbmFycm93KVxuICAgIGV4cGVjdChyZXN1bHQuZ2V0KFwiX19kZWZhdWx0X19cIik/Lm1hcChhID0+IGEucGF0aCkpLnRvRXF1YWwoW1xuICAgICAgXCIvZ2V0dGluZy1zdGFydGVkL1wiLFxuICAgICAgXCIvZ3VpZGUvXCIsXG4gICAgXSlcbiAgICBleHBlY3QocmVzdWx0LmdldChcIi9hcGkvXCIpPy5tYXAoYSA9PiBhLnBhdGgpKS50b0VxdWFsKFtcbiAgICAgIFwiL2FwaS91c2Vycy9cIixcbiAgICAgIFwiL2FwaS9hdXRoL1wiLFxuICAgIF0pXG4gIH0pXG59KVxuXG5kZXNjcmliZShcImN1c3RvbVNlY3Rpb25BY3RpdmVcIiwgKCkgPT4ge1xuICBpdChcInNob3VsZCBub3QgbWF0Y2ggYW4gYWJzb2x1dGUgaHR0cCB1cmxcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChjdXN0b21TZWN0aW9uQWN0aXZlKFwiaHR0cHM6Ly94LmNvbS95XCIsIFwiL3kvXCIpKS50b0JlKGZhbHNlKVxuICAgIGV4cGVjdChjdXN0b21TZWN0aW9uQWN0aXZlKFwiaHR0cDovL3guY29tL3lcIiwgXCIveS9cIikpLnRvQmUoZmFsc2UpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbm90IG1hdGNoIGEgcHJvdG9jb2wtcmVsYXRpdmUgdXJsXCIsICgpID0+IHtcbiAgICBleHBlY3QoY3VzdG9tU2VjdGlvbkFjdGl2ZShcIi8vY2RuLnguY29tL3lcIiwgXCIveS9cIikpLnRvQmUoZmFsc2UpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbm90IG1hdGNoIGEgaGFzaCB1cmxcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChjdXN0b21TZWN0aW9uQWN0aXZlKFwiI3NlY3Rpb25cIiwgXCIvc2VjdGlvbi9cIikpLnRvQmUoZmFsc2UpXG4gIH0pXG5cbiAgaXQoXCJzaG91bGQgbWF0Y2ggdGhlIGV4YWN0IHBhdGhcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChjdXN0b21TZWN0aW9uQWN0aXZlKFwiL2Fib3V0XCIsIFwiL2Fib3V0L1wiKSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChjdXN0b21TZWN0aW9uQWN0aXZlKFwiL2Fib3V0L1wiLCBcIi9hYm91dC9cIikpLnRvQmUodHJ1ZSlcbiAgfSlcblxuICBpdChcInNob3VsZCBtYXRjaCBhIGRlc2NlbmRhbnQgcGF0aFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGN1c3RvbVNlY3Rpb25BY3RpdmUoXCIvYWJvdXRcIiwgXCIvYWJvdXQvdGVhbS9cIikpLnRvQmUodHJ1ZSlcbiAgfSlcblxuICBpdChcInNob3VsZCBub3QgbWF0Y2ggYSBzaWJsaW5nIHBhdGggd2l0aCBzaGFyZWQgcHJlZml4XCIsICgpID0+IHtcbiAgICBleHBlY3QoY3VzdG9tU2VjdGlvbkFjdGl2ZShcIi9hYm91dFwiLCBcIi9hYm91dHVzL1wiKSkudG9CZShmYWxzZSlcbiAgfSlcblxuICBpdChcInNob3VsZCBtYXRjaCBleGFjdCByb290IG9ubHlcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChjdXN0b21TZWN0aW9uQWN0aXZlKFwiL1wiLCBcIi9cIikpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3QoY3VzdG9tU2VjdGlvbkFjdGl2ZShcIi9cIiwgXCIvYWJvdXQvXCIpKS50b0JlKGZhbHNlKVxuICB9KVxuXG4gIGl0KFwic2hvdWxkIGlnbm9yZSBxdWVyeSBhbmQgaGFzaCBvbiB0aGUgdXJsXCIsICgpID0+IHtcbiAgICBleHBlY3QoY3VzdG9tU2VjdGlvbkFjdGl2ZShcIi9hYm91dD94PTFcIiwgXCIvYWJvdXQvXCIpKS50b0JlKHRydWUpXG4gICAgZXhwZWN0KGN1c3RvbVNlY3Rpb25BY3RpdmUoXCIvYWJvdXQjdG9wXCIsIFwiL2Fib3V0L3RlYW0vXCIpKS50b0JlKHRydWUpXG4gIH0pXG59KVxuIl19
@@ -10,7 +10,6 @@ export declare const Article: z.ZodObject<{
10
10
  icon: z.ZodOptional<z.ZodString>;
11
11
  order: z.ZodOptional<z.ZodNumber>;
12
12
  path: z.ZodOptional<z.ZodString>;
13
- group: z.ZodOptional<z.ZodString>;
14
13
  sidebar: z.ZodDefault<z.ZodBoolean>;
15
14
  toc: z.ZodDefault<z.ZodBoolean>;
16
15
  image: z.ZodOptional<z.ZodString>;
@@ -48,11 +47,3 @@ export interface ArticleNode {
48
47
  icon: string;
49
48
  children: ArticleNode[];
50
49
  }
51
- /**
52
- * A contiguous section of root articles sharing the same `group` label.
53
- * `name: undefined` represents the leading ungrouped section (at most one).
54
- */
55
- export interface ArticleGroup {
56
- name?: string;
57
- nodes: ArticleNode[];
58
- }
@@ -8,7 +8,6 @@ export const Article = z.object({
8
8
  icon: nonEmptyString.optional(),
9
9
  order: z.number().optional(),
10
10
  path: nonEmptyString.optional(),
11
- group: nonEmptyString.optional(),
12
11
  sidebar: z.boolean().default(true),
13
12
  toc: z.boolean().default(true),
14
13
  image: nonEmptyString.optional(),
@@ -18,4 +17,4 @@ export const Article = z.object({
18
17
  sourceUrl: nonEmptyString.optional(),
19
18
  sourceAction: z.enum(["edit", "view"]).default("edit"),
20
19
  });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9tb2RlbHMvYXJ0aWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUtwRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUNoQyxLQUFLLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUNoQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUN0QyxJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixLQUFLLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUNoQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDbEMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzlCLEtBQUssRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNyRSxJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0NBQ3ZELENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IG5vbkVtcHR5U3RyaW5nIH0gZnJvbSBcIi4uL2hlbHBlcnMvbW9kZWwudHNcIlxuaW1wb3J0IHR5cGUgeyBUb2NJdGVtIH0gZnJvbSBcIi4vdG9jLnRzXCJcblxuLyoqIEZyb250bWF0dGVyIHNjaGVtYSBmb3IgYSBtYXJrZG93biBhcnRpY2xlLiAqL1xuZXhwb3J0IHR5cGUgQXJ0aWNsZSA9IHouaW5mZXI8dHlwZW9mIEFydGljbGU+XG5leHBvcnQgY29uc3QgQXJ0aWNsZSA9IHoub2JqZWN0KHtcbiAgY29udGVudDogei5zdHJpbmcoKSxcbiAgdGl0bGU6IG5vbkVtcHR5U3RyaW5nLm9wdGlvbmFsKCksXG4gIGxhYmVsOiBub25FbXB0eVN0cmluZy5vcHRpb25hbCgpLFxuICBkZXNjcmlwdGlvbjogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgaWNvbjogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgb3JkZXI6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgcGF0aDogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgZ3JvdXA6IG5vbkVtcHR5U3RyaW5nLm9wdGlvbmFsKCksXG4gIHNpZGViYXI6IHouYm9vbGVhbigpLmRlZmF1bHQodHJ1ZSksXG4gIHRvYzogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgaW1hZ2U6IG5vbkVtcHR5U3RyaW5nLm9wdGlvbmFsKCksXG4gIGF1dGhvcjogei51bmlvbihbbm9uRW1wdHlTdHJpbmcsIHouYXJyYXkobm9uRW1wdHlTdHJpbmcpXSkub3B0aW9uYWwoKSxcbiAgZGF0ZTogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgdGFnczogei5hcnJheShub25FbXB0eVN0cmluZykub3B0aW9uYWwoKSxcbiAgc291cmNlVXJsOiBub25FbXB0eVN0cmluZy5vcHRpb25hbCgpLFxuICBzb3VyY2VBY3Rpb246IHouZW51bShbXCJlZGl0XCIsIFwidmlld1wiXSkuZGVmYXVsdChcImVkaXRcIiksXG59KVxuXG4vKiogUHJvY2Vzc2VkIGFydGljbGUgcmVhZHkgZm9yIHBhZ2UgcmVuZGVyaW5nIChyZXN1bHQgb2YgY29udGVudC1jb2xsZWN0aW9ucyB0cmFuc2Zvcm0pLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcnRpY2xlVmlldyB7XG4gIHBhdGg6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIGNvbnRlbnQ6IHN0cmluZ1xuICBmaWxlOiBzdHJpbmdcbiAgbWR4OiBzdHJpbmdcbiAgdG9jSXRlbXM6IFRvY0l0ZW1bXVxuICB0b2M/OiBib29sZWFuXG4gIGxhc3RVcGRhdGVkPzogc3RyaW5nXG4gIHNpZGViYXI/OiBib29sZWFuXG4gIGltYWdlPzogc3RyaW5nXG4gIGF1dGhvcj86IHN0cmluZyB8IHN0cmluZ1tdXG4gIGRhdGU/OiBzdHJpbmdcbiAgdGFncz86IHN0cmluZ1tdXG4gIHNvdXJjZVVybD86IHN0cmluZ1xuICBzb3VyY2VBY3Rpb24/OiBcImVkaXRcIiB8IFwidmlld1wiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJ0aWNsZU5vZGUge1xuICBwYXRoOiBzdHJpbmdcbiAgdGl0bGU6IHN0cmluZ1xuICBsYWJlbD86IHN0cmluZ1xuICBpY29uOiBzdHJpbmdcbiAgY2hpbGRyZW46IEFydGljbGVOb2RlW11cbn1cblxuLyoqXG4gKiBBIGNvbnRpZ3VvdXMgc2VjdGlvbiBvZiByb290IGFydGljbGVzIHNoYXJpbmcgdGhlIHNhbWUgYGdyb3VwYCBsYWJlbC5cbiAqIGBuYW1lOiB1bmRlZmluZWRgIHJlcHJlc2VudHMgdGhlIGxlYWRpbmcgdW5ncm91cGVkIHNlY3Rpb24gKGF0IG1vc3Qgb25lKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcnRpY2xlR3JvdXAge1xuICBuYW1lPzogc3RyaW5nXG4gIG5vZGVzOiBBcnRpY2xlTm9kZVtdXG59XG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9tb2RlbHMvYXJ0aWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUtwRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUNoQyxLQUFLLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUNoQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUN0QyxJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDbEMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzlCLEtBQUssRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNyRSxJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0NBQ3ZELENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IG5vbkVtcHR5U3RyaW5nIH0gZnJvbSBcIi4uL2hlbHBlcnMvbW9kZWwudHNcIlxuaW1wb3J0IHR5cGUgeyBUb2NJdGVtIH0gZnJvbSBcIi4vdG9jLnRzXCJcblxuLyoqIEZyb250bWF0dGVyIHNjaGVtYSBmb3IgYSBtYXJrZG93biBhcnRpY2xlLiAqL1xuZXhwb3J0IHR5cGUgQXJ0aWNsZSA9IHouaW5mZXI8dHlwZW9mIEFydGljbGU+XG5leHBvcnQgY29uc3QgQXJ0aWNsZSA9IHoub2JqZWN0KHtcbiAgY29udGVudDogei5zdHJpbmcoKSxcbiAgdGl0bGU6IG5vbkVtcHR5U3RyaW5nLm9wdGlvbmFsKCksXG4gIGxhYmVsOiBub25FbXB0eVN0cmluZy5vcHRpb25hbCgpLFxuICBkZXNjcmlwdGlvbjogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgaWNvbjogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgb3JkZXI6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgcGF0aDogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgc2lkZWJhcjogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgdG9jOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICBpbWFnZTogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgYXV0aG9yOiB6LnVuaW9uKFtub25FbXB0eVN0cmluZywgei5hcnJheShub25FbXB0eVN0cmluZyldKS5vcHRpb25hbCgpLFxuICBkYXRlOiBub25FbXB0eVN0cmluZy5vcHRpb25hbCgpLFxuICB0YWdzOiB6LmFycmF5KG5vbkVtcHR5U3RyaW5nKS5vcHRpb25hbCgpLFxuICBzb3VyY2VVcmw6IG5vbkVtcHR5U3RyaW5nLm9wdGlvbmFsKCksXG4gIHNvdXJjZUFjdGlvbjogei5lbnVtKFtcImVkaXRcIiwgXCJ2aWV3XCJdKS5kZWZhdWx0KFwiZWRpdFwiKSxcbn0pXG5cbi8qKiBQcm9jZXNzZWQgYXJ0aWNsZSByZWFkeSBmb3IgcGFnZSByZW5kZXJpbmcgKHJlc3VsdCBvZiBjb250ZW50LWNvbGxlY3Rpb25zIHRyYW5zZm9ybSkuICovXG5leHBvcnQgaW50ZXJmYWNlIEFydGljbGVWaWV3IHtcbiAgcGF0aDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgY29udGVudDogc3RyaW5nXG4gIGZpbGU6IHN0cmluZ1xuICBtZHg6IHN0cmluZ1xuICB0b2NJdGVtczogVG9jSXRlbVtdXG4gIHRvYz86IGJvb2xlYW5cbiAgbGFzdFVwZGF0ZWQ/OiBzdHJpbmdcbiAgc2lkZWJhcj86IGJvb2xlYW5cbiAgaW1hZ2U/OiBzdHJpbmdcbiAgYXV0aG9yPzogc3RyaW5nIHwgc3RyaW5nW11cbiAgZGF0ZT86IHN0cmluZ1xuICB0YWdzPzogc3RyaW5nW11cbiAgc291cmNlVXJsPzogc3RyaW5nXG4gIHNvdXJjZUFjdGlvbj86IFwiZWRpdFwiIHwgXCJ2aWV3XCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcnRpY2xlTm9kZSB7XG4gIHBhdGg6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIGxhYmVsPzogc3RyaW5nXG4gIGljb246IHN0cmluZ1xuICBjaGlsZHJlbjogQXJ0aWNsZU5vZGVbXVxufVxuIl19
@@ -7,15 +7,27 @@ import type { ConfigEnv, UserConfig as ViteUserConfig } from "vite";
7
7
  * merge, etc. Use this for deployment-target tweaks (e.g. CF Workers
8
8
  * via `environments.ssr.resolve.conditions: ["workerd", ...]`). */
9
9
  export type ViteOverride = ViteUserConfig | ((env: ConfigEnv) => ViteUserConfig | Promise<ViteUserConfig>);
10
+ /** Sub-path mount. String form is used as-is; function form is called
11
+ * with Vite's `command` (`"serve"` in dev, `"build"` in production) so
12
+ * the user can branch (typical case: serve at `/` in dev but at
13
+ * `/repo/` in production for GitHub Pages). The build pipeline
14
+ * resolves it to a string before any runtime sees it. */
15
+ export type Base = string | ((command: "build" | "serve") => string | undefined);
10
16
  /**
11
17
  * User-provided configuration for Livemark.
18
+ *
19
+ * `vite` and `base` are lifted from `unknown` to their public types so
20
+ * `defineConfig` shows the right shape in editors. Use this type for
21
+ * the input to `defineConfig` — it keeps defaulted fields optional
22
+ * (because zod input ≠ output for fields with `.default()`).
12
23
  */
13
- export type UserConfig = Omit<z.infer<typeof UserConfig>, "vite"> & {
24
+ export type UserConfig = Omit<z.input<typeof UserConfig>, "vite" | "base"> & {
14
25
  vite?: ViteOverride;
26
+ base?: Base;
15
27
  };
16
28
  export declare const UserConfig: z.ZodObject<{
17
29
  site: z.ZodOptional<z.ZodString>;
18
- base: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<string | undefined, string | undefined>>;
30
+ base: z.ZodOptional<z.ZodUnknown>;
19
31
  favicon: z.ZodOptional<z.ZodString>;
20
32
  logo: z.ZodOptional<z.ZodString>;
21
33
  title: z.ZodDefault<z.ZodString>;
@@ -104,32 +116,41 @@ export declare const UserConfig: z.ZodObject<{
104
116
  sections: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{
105
117
  icon: z.ZodOptional<z.ZodString>;
106
118
  title: z.ZodString;
107
- prefix: z.ZodString;
108
119
  position: z.ZodDefault<z.ZodEnum<{
109
120
  header: "header";
110
121
  sidebar: "sidebar";
111
122
  }>>;
112
123
  type: z.ZodLiteral<"article">;
124
+ prefix: z.ZodString;
113
125
  }, z.core.$strip>, z.ZodObject<{
114
126
  icon: z.ZodOptional<z.ZodString>;
115
127
  title: z.ZodString;
116
- prefix: z.ZodString;
117
128
  position: z.ZodDefault<z.ZodEnum<{
118
129
  header: "header";
119
130
  sidebar: "sidebar";
120
131
  }>>;
121
132
  type: z.ZodLiteral<"blog">;
133
+ prefix: z.ZodString;
122
134
  }, z.core.$strip>, z.ZodObject<{
123
135
  icon: z.ZodOptional<z.ZodString>;
124
136
  title: z.ZodString;
125
- prefix: z.ZodString;
126
137
  position: z.ZodDefault<z.ZodEnum<{
127
138
  header: "header";
128
139
  sidebar: "sidebar";
129
140
  }>>;
130
141
  type: z.ZodLiteral<"changelog">;
142
+ prefix: z.ZodString;
131
143
  source: z.ZodString;
132
144
  version: z.ZodOptional<z.ZodBoolean>;
145
+ }, z.core.$strip>, z.ZodObject<{
146
+ icon: z.ZodOptional<z.ZodString>;
147
+ title: z.ZodString;
148
+ position: z.ZodDefault<z.ZodEnum<{
149
+ header: "header";
150
+ sidebar: "sidebar";
151
+ }>>;
152
+ type: z.ZodLiteral<"custom">;
153
+ url: z.ZodString;
133
154
  }, z.core.$strip>], "type">>>>;
134
155
  patches: z.ZodOptional<z.ZodArray<z.ZodObject<{
135
156
  file: z.ZodString;
@@ -140,7 +161,6 @@ export declare const UserConfig: z.ZodObject<{
140
161
  icon: z.ZodOptional<z.ZodOptional<z.ZodString>>;
141
162
  order: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
142
163
  path: z.ZodOptional<z.ZodOptional<z.ZodString>>;
143
- group: z.ZodOptional<z.ZodOptional<z.ZodString>>;
144
164
  sidebar: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
145
165
  toc: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
146
166
  image: z.ZodOptional<z.ZodOptional<z.ZodString>>;
@@ -156,11 +176,12 @@ export declare const UserConfig: z.ZodObject<{
156
176
  }, z.core.$strip>>>;
157
177
  vite: z.ZodOptional<z.ZodUnknown>;
158
178
  }, z.core.$strip>;
159
- /** Website configuration injected at build time via Vite define */
179
+ /** Website configuration injected at build time via Vite define.
180
+ * `base` is strictly a string here — the build pipeline has already
181
+ * resolved any function form via `resolveBase()`. */
160
182
  export type WebsiteConfig = z.infer<typeof WebsiteConfig>;
161
183
  export declare const WebsiteConfig: z.ZodObject<{
162
184
  site: z.ZodOptional<z.ZodString>;
163
- base: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<string | undefined, string | undefined>>;
164
185
  favicon: z.ZodOptional<z.ZodString>;
165
186
  logo: z.ZodOptional<z.ZodString>;
166
187
  title: z.ZodDefault<z.ZodString>;
@@ -178,33 +199,43 @@ export declare const WebsiteConfig: z.ZodObject<{
178
199
  sections: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{
179
200
  icon: z.ZodOptional<z.ZodString>;
180
201
  title: z.ZodString;
181
- prefix: z.ZodString;
182
202
  position: z.ZodDefault<z.ZodEnum<{
183
203
  header: "header";
184
204
  sidebar: "sidebar";
185
205
  }>>;
186
206
  type: z.ZodLiteral<"article">;
207
+ prefix: z.ZodString;
187
208
  }, z.core.$strip>, z.ZodObject<{
188
209
  icon: z.ZodOptional<z.ZodString>;
189
210
  title: z.ZodString;
190
- prefix: z.ZodString;
191
211
  position: z.ZodDefault<z.ZodEnum<{
192
212
  header: "header";
193
213
  sidebar: "sidebar";
194
214
  }>>;
195
215
  type: z.ZodLiteral<"blog">;
216
+ prefix: z.ZodString;
196
217
  }, z.core.$strip>, z.ZodObject<{
197
218
  icon: z.ZodOptional<z.ZodString>;
198
219
  title: z.ZodString;
199
- prefix: z.ZodString;
200
220
  position: z.ZodDefault<z.ZodEnum<{
201
221
  header: "header";
202
222
  sidebar: "sidebar";
203
223
  }>>;
204
224
  type: z.ZodLiteral<"changelog">;
225
+ prefix: z.ZodString;
205
226
  source: z.ZodString;
206
227
  version: z.ZodOptional<z.ZodBoolean>;
228
+ }, z.core.$strip>, z.ZodObject<{
229
+ icon: z.ZodOptional<z.ZodString>;
230
+ title: z.ZodString;
231
+ position: z.ZodDefault<z.ZodEnum<{
232
+ header: "header";
233
+ sidebar: "sidebar";
234
+ }>>;
235
+ type: z.ZodLiteral<"custom">;
236
+ url: z.ZodString;
207
237
  }, z.core.$strip>], "type">>>>;
238
+ base: z.ZodOptional<z.ZodString>;
208
239
  }, z.core.$strip>;
209
240
  /**
210
241
  * System-computed configuration derived from the config file location.
@@ -217,14 +248,18 @@ export declare const SystemConfig: z.ZodObject<{
217
248
  /**
218
249
  * Fully resolved Livemark configuration.
219
250
  *
220
- * `vite` stays `unknown` here because that's what the runtime schema
251
+ * `vite` stays `unknown` because that's what the runtime schema
221
252
  * produces — consumer-facing typing happens via {@link UserConfig} so
222
- * `defineConfig` shows the right shape in editors.
253
+ * `defineConfig` shows the right shape in editors. `base` is lifted to
254
+ * `string | undefined` because `loadConfig()` resolves any function
255
+ * form via `resolveBase()` before returning.
223
256
  */
224
- export type Config = z.infer<typeof Config>;
257
+ export type Config = Omit<z.infer<typeof Config>, "base"> & {
258
+ base?: string;
259
+ };
225
260
  export declare const Config: z.ZodObject<{
226
261
  site: z.ZodOptional<z.ZodString>;
227
- base: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<string | undefined, string | undefined>>;
262
+ base: z.ZodOptional<z.ZodUnknown>;
228
263
  favicon: z.ZodOptional<z.ZodString>;
229
264
  logo: z.ZodOptional<z.ZodString>;
230
265
  title: z.ZodDefault<z.ZodString>;
@@ -313,32 +348,41 @@ export declare const Config: z.ZodObject<{
313
348
  sections: z.ZodOptional<z.ZodArray<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDiscriminatedUnion<[z.ZodObject<{
314
349
  icon: z.ZodOptional<z.ZodString>;
315
350
  title: z.ZodString;
316
- prefix: z.ZodString;
317
351
  position: z.ZodDefault<z.ZodEnum<{
318
352
  header: "header";
319
353
  sidebar: "sidebar";
320
354
  }>>;
321
355
  type: z.ZodLiteral<"article">;
356
+ prefix: z.ZodString;
322
357
  }, z.core.$strip>, z.ZodObject<{
323
358
  icon: z.ZodOptional<z.ZodString>;
324
359
  title: z.ZodString;
325
- prefix: z.ZodString;
326
360
  position: z.ZodDefault<z.ZodEnum<{
327
361
  header: "header";
328
362
  sidebar: "sidebar";
329
363
  }>>;
330
364
  type: z.ZodLiteral<"blog">;
365
+ prefix: z.ZodString;
331
366
  }, z.core.$strip>, z.ZodObject<{
332
367
  icon: z.ZodOptional<z.ZodString>;
333
368
  title: z.ZodString;
334
- prefix: z.ZodString;
335
369
  position: z.ZodDefault<z.ZodEnum<{
336
370
  header: "header";
337
371
  sidebar: "sidebar";
338
372
  }>>;
339
373
  type: z.ZodLiteral<"changelog">;
374
+ prefix: z.ZodString;
340
375
  source: z.ZodString;
341
376
  version: z.ZodOptional<z.ZodBoolean>;
377
+ }, z.core.$strip>, z.ZodObject<{
378
+ icon: z.ZodOptional<z.ZodString>;
379
+ title: z.ZodString;
380
+ position: z.ZodDefault<z.ZodEnum<{
381
+ header: "header";
382
+ sidebar: "sidebar";
383
+ }>>;
384
+ type: z.ZodLiteral<"custom">;
385
+ url: z.ZodString;
342
386
  }, z.core.$strip>], "type">>>>;
343
387
  patches: z.ZodOptional<z.ZodArray<z.ZodObject<{
344
388
  file: z.ZodString;
@@ -349,7 +393,6 @@ export declare const Config: z.ZodObject<{
349
393
  icon: z.ZodOptional<z.ZodOptional<z.ZodString>>;
350
394
  order: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
351
395
  path: z.ZodOptional<z.ZodOptional<z.ZodString>>;
352
- group: z.ZodOptional<z.ZodOptional<z.ZodString>>;
353
396
  sidebar: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
354
397
  toc: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
355
398
  image: z.ZodOptional<z.ZodOptional<z.ZodString>>;