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.
- package/build/actions/config/define.d.ts +67 -3
- package/build/actions/config/define.js +3 -3
- package/build/actions/config/load.js +23 -2
- package/build/components/Layout.js +11 -4
- package/build/components/SidebarArticles.js +9 -9
- package/build/components/SidebarSections.js +11 -5
- package/build/content/article.d.ts +10 -10
- package/build/content/article.js +19 -17
- package/build/helpers/article.d.ts +1 -15
- package/build/helpers/article.js +1 -34
- package/build/helpers/resolve-base.d.ts +6 -0
- package/build/helpers/resolve-base.js +13 -0
- package/build/helpers/resolve-base.unit.d.ts +1 -0
- package/build/helpers/resolve-base.unit.js +49 -0
- package/build/helpers/section.d.ts +10 -2
- package/build/helpers/section.js +19 -2
- package/build/helpers/section.unit.js +32 -2
- package/build/models/article.d.ts +0 -9
- package/build/models/article.js +1 -2
- package/build/models/config.d.ts +62 -19
- package/build/models/config.js +9 -11
- package/build/models/patch.d.ts +0 -1
- package/build/models/section.d.ts +29 -6
- package/build/models/section.js +14 -3
- package/package.json +1 -1
- package/source/actions/config/define.ts +4 -6
- package/source/actions/config/load.ts +26 -6
- package/source/components/Layout.tsx +20 -5
- package/source/components/SidebarArticles.tsx +17 -24
- package/source/components/SidebarSections.tsx +23 -3
- package/source/content/article.ts +20 -26
- package/source/helpers/article.ts +1 -39
- package/source/helpers/resolve-base.ts +11 -0
- package/source/helpers/resolve-base.unit.ts +61 -0
- package/source/helpers/section.ts +18 -2
- package/source/helpers/section.unit.ts +43 -1
- package/source/models/article.ts +0 -10
- package/source/models/config.ts +32 -14
- package/source/models/section.ts +18 -2
package/build/helpers/article.js
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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;
|
package/build/helpers/section.js
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
-
}
|
package/build/models/article.js
CHANGED
|
@@ -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,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWNsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS9tb2RlbHMvYXJ0aWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUtwRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUM5QixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUNoQyxLQUFLLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUNoQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUN0QyxJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDbEMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzlCLEtBQUssRUFBRSxjQUFjLENBQUMsUUFBUSxFQUFFO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUNyRSxJQUFJLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRTtJQUMvQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsWUFBWSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0NBQ3ZELENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCJcbmltcG9ydCB7IG5vbkVtcHR5U3RyaW5nIH0gZnJvbSBcIi4uL2hlbHBlcnMvbW9kZWwudHNcIlxuaW1wb3J0IHR5cGUgeyBUb2NJdGVtIH0gZnJvbSBcIi4vdG9jLnRzXCJcblxuLyoqIEZyb250bWF0dGVyIHNjaGVtYSBmb3IgYSBtYXJrZG93biBhcnRpY2xlLiAqL1xuZXhwb3J0IHR5cGUgQXJ0aWNsZSA9IHouaW5mZXI8dHlwZW9mIEFydGljbGU+XG5leHBvcnQgY29uc3QgQXJ0aWNsZSA9IHoub2JqZWN0KHtcbiAgY29udGVudDogei5zdHJpbmcoKSxcbiAgdGl0bGU6IG5vbkVtcHR5U3RyaW5nLm9wdGlvbmFsKCksXG4gIGxhYmVsOiBub25FbXB0eVN0cmluZy5vcHRpb25hbCgpLFxuICBkZXNjcmlwdGlvbjogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgaWNvbjogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgb3JkZXI6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgcGF0aDogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgc2lkZWJhcjogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgdG9jOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICBpbWFnZTogbm9uRW1wdHlTdHJpbmcub3B0aW9uYWwoKSxcbiAgYXV0aG9yOiB6LnVuaW9uKFtub25FbXB0eVN0cmluZywgei5hcnJheShub25FbXB0eVN0cmluZyldKS5vcHRpb25hbCgpLFxuICBkYXRlOiBub25FbXB0eVN0cmluZy5vcHRpb25hbCgpLFxuICB0YWdzOiB6LmFycmF5KG5vbkVtcHR5U3RyaW5nKS5vcHRpb25hbCgpLFxuICBzb3VyY2VVcmw6IG5vbkVtcHR5U3RyaW5nLm9wdGlvbmFsKCksXG4gIHNvdXJjZUFjdGlvbjogei5lbnVtKFtcImVkaXRcIiwgXCJ2aWV3XCJdKS5kZWZhdWx0KFwiZWRpdFwiKSxcbn0pXG5cbi8qKiBQcm9jZXNzZWQgYXJ0aWNsZSByZWFkeSBmb3IgcGFnZSByZW5kZXJpbmcgKHJlc3VsdCBvZiBjb250ZW50LWNvbGxlY3Rpb25zIHRyYW5zZm9ybSkuICovXG5leHBvcnQgaW50ZXJmYWNlIEFydGljbGVWaWV3IHtcbiAgcGF0aDogc3RyaW5nXG4gIHRpdGxlOiBzdHJpbmdcbiAgY29udGVudDogc3RyaW5nXG4gIGZpbGU6IHN0cmluZ1xuICBtZHg6IHN0cmluZ1xuICB0b2NJdGVtczogVG9jSXRlbVtdXG4gIHRvYz86IGJvb2xlYW5cbiAgbGFzdFVwZGF0ZWQ/OiBzdHJpbmdcbiAgc2lkZWJhcj86IGJvb2xlYW5cbiAgaW1hZ2U/OiBzdHJpbmdcbiAgYXV0aG9yPzogc3RyaW5nIHwgc3RyaW5nW11cbiAgZGF0ZT86IHN0cmluZ1xuICB0YWdzPzogc3RyaW5nW11cbiAgc291cmNlVXJsPzogc3RyaW5nXG4gIHNvdXJjZUFjdGlvbj86IFwiZWRpdFwiIHwgXCJ2aWV3XCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcnRpY2xlTm9kZSB7XG4gIHBhdGg6IHN0cmluZ1xuICB0aXRsZTogc3RyaW5nXG4gIGxhYmVsPzogc3RyaW5nXG4gIGljb246IHN0cmluZ1xuICBjaGlsZHJlbjogQXJ0aWNsZU5vZGVbXVxufVxuIl19
|
package/build/models/config.d.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
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`
|
|
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.
|
|
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>>;
|