wiki-formant 0.2.0 → 0.3.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/README.md +20 -0
- package/dist/headings.d.ts +42 -0
- package/dist/headings.d.ts.map +1 -0
- package/dist/headings.js +81 -0
- package/dist/headings.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/taxonomy.d.ts +21 -0
- package/dist/taxonomy.d.ts.map +1 -1
- package/dist/taxonomy.js +17 -0
- package/dist/taxonomy.js.map +1 -1
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -42,10 +42,29 @@ Four behaviours worth knowing, because each replaces a plausible wrong answer:
|
|
|
42
42
|
- **Each facet is counted over the set narrowed by every *other* active filter**, so its own options stay switchable instead of collapsing to the one already chosen.
|
|
43
43
|
- **Values come from the data, not from the declared `options`.** A key that declares four values while the pages hold seven would otherwise hide three behind a bar claiming to cover everything. Render what is there and the drift becomes visible.
|
|
44
44
|
- **A single-valued facet hides — unless it is the active one.** An infobox row can set a filter the chips never offered; without its chip the reader lands on a narrowed list with nothing to press to widen it.
|
|
45
|
+
- **`metadataRows` returns rows, not markup.** A page's populated keys in schema order, with `href` set exactly on the facet ones. The three wikis each rendered this selection their own way — an HTML table folded into a block, a React `<aside>`, a markdown twin — and differed only in how a *value* is formatted; which keys appear and where each links is the part they had rebuilt three times.
|
|
45
46
|
- **`rankRelated` ranks by shared facet values** and returns the shared axis as `{key, value}`, so the *See also* heading can be the link into the filtered set. The behaviour it replaces — `pages.slice(0, 5)` — shows every page in a large category the same five links.
|
|
46
47
|
|
|
47
48
|
One `href` builder is passed in and used by every chip, letter and sort button. A sort button that drops the active filters is the tell that a project grew a second one.
|
|
48
49
|
|
|
50
|
+
## Headings
|
|
51
|
+
|
|
52
|
+
Heading ids, permalink anchors, and the list an "on this page" rail renders — one pass over the HTML you already have.
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
import { injectHeadingIds, headingsFrom } from 'wiki-formant/headings';
|
|
56
|
+
|
|
57
|
+
const html = injectHeadingIds(page.body); // ids + anchors, idempotent
|
|
58
|
+
const toc = headingsFrom(html); // [{ id, text, level }]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Two behaviours worth knowing:
|
|
62
|
+
|
|
63
|
+
- **The slug rule is a parameter.** A heading id is a live URL — readers link to `#the-shape-of-a-code`, and so does the page's own permalink anchor. The two wikis this was lifted from had drifted onto different rules, and unifying them would have silently moved every published anchor on whichever one lost. Pass `slug` to keep the rule you already ship.
|
|
64
|
+
- **Deduping is not a parameter.** Two headings with the same text otherwise mint the same id twice, and every link to the second lands on the first. The copy that lacked it had that bug.
|
|
65
|
+
|
|
66
|
+
`headingsFrom` reads the string, not the rendered DOM — possible only where the body IS a string at render time. A wiki whose content streams in as blocks after mount has to query the DOM, and uses only the injector.
|
|
67
|
+
|
|
49
68
|
## MCP
|
|
50
69
|
|
|
51
70
|
A minimal [Model Context Protocol](https://modelcontextprotocol.io) server over Streamable HTTP, with the transport edges most implementations get wrong.
|
|
@@ -134,6 +153,7 @@ export async function GET(request: Request) {
|
|
|
134
153
|
| Export | From |
|
|
135
154
|
|---|---|
|
|
136
155
|
| `createTaxonomy`, `defaultHref`, `firstLetter`, `toggleFilter` | `wiki-formant/taxonomy` |
|
|
156
|
+
| `injectHeadingIds`, `headingsFrom`, `slugifyHeading` | `wiki-formant/headings` |
|
|
137
157
|
| `mcpResponse`, `mcpGet`, `mcpOptions`, `handleMcp`, `withMcpCors`, `McpToolError`, `MCP_CORS`, `MCP_PROTOCOL_VERSION` | `wiki-formant/mcp` |
|
|
138
158
|
| `htmlToMarkdown`, `inlineToMarkdown`, `tableToMarkdown`, `frontmatter`, `markdownDocument`, `decodeEntities` | `wiki-formant/markdown` |
|
|
139
159
|
| `corpusEtag`, `notModified`, `textHeaders`, `markdownHeaders`, `cleanSnippet`, `pageLine` | `wiki-formant/http` |
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** A heading found in a page's HTML, in document order. */
|
|
2
|
+
export interface Heading {
|
|
3
|
+
id: string;
|
|
4
|
+
text: string;
|
|
5
|
+
/** 1 for `<h1>`, 2 for `<h2>`, and so on. */
|
|
6
|
+
level: number;
|
|
7
|
+
}
|
|
8
|
+
/** The default slug rule: lowercase words joined by hyphens. */
|
|
9
|
+
export declare function slugifyHeading(text: string): string;
|
|
10
|
+
export interface HeadingIdOptions {
|
|
11
|
+
/**
|
|
12
|
+
* How heading text becomes an id. Defaults to `slugifyHeading`. Pass the rule
|
|
13
|
+
* your wiki has already published ids under — see the note at the top of this
|
|
14
|
+
* file about why this is not standardised.
|
|
15
|
+
*/
|
|
16
|
+
slug?: (text: string) => string;
|
|
17
|
+
/**
|
|
18
|
+
* Emitted after the heading text so a reader can link to the section. Return
|
|
19
|
+
* `''` for no anchor. The default is deliberately empty of text — its glyph
|
|
20
|
+
* comes from CSS, so it never leaks into a heading's `textContent` and out
|
|
21
|
+
* into a TOC label.
|
|
22
|
+
*/
|
|
23
|
+
anchor?: (id: string) => string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Give every heading in `html` an id and a permalink anchor. Headings that
|
|
27
|
+
* already carry an id keep it, and a heading already carrying an anchor is left
|
|
28
|
+
* alone, so this is safe to run twice over the same string.
|
|
29
|
+
*/
|
|
30
|
+
export declare function injectHeadingIds(html: string, options?: HeadingIdOptions): string;
|
|
31
|
+
/**
|
|
32
|
+
* The headings in `html` that carry an id, in document order — the list an "on
|
|
33
|
+
* this page" rail renders. Run it over the output of `injectHeadingIds` and
|
|
34
|
+
* every heading is in it.
|
|
35
|
+
*
|
|
36
|
+
* Reading the string rather than the rendered DOM is only possible where the
|
|
37
|
+
* body IS a string at render time. A wiki whose content streams in as blocks
|
|
38
|
+
* after mount has to query the DOM instead, which is why two of the three
|
|
39
|
+
* consumers use only the injector above.
|
|
40
|
+
*/
|
|
41
|
+
export declare function headingsFrom(html: string): Heading[];
|
|
42
|
+
//# sourceMappingURL=headings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headings.d.ts","sourceRoot":"","sources":["../src/headings.ts"],"names":[],"mappings":"AAoBA,2DAA2D;AAC3D,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOnD;AAUD,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAChC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;CACjC;AAKD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAkBrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,CAQpD"}
|
package/dist/headings.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// headings.ts — stable ids on a wiki page's headings, and the list a table of
|
|
2
|
+
// contents is built from.
|
|
3
|
+
//
|
|
4
|
+
// Two of the three wikis had already written this out (caper's `injectHeadingIds`,
|
|
5
|
+
// radix-wiki's heading branch in `processHtml`), down to byte-identical
|
|
6
|
+
// `stripTags` and `getAttr` helpers — caper's file says "ported in spirit from
|
|
7
|
+
// radix-wiki" at the top, which is the drift admitting itself. What they had
|
|
8
|
+
// drifted on is below.
|
|
9
|
+
//
|
|
10
|
+
// The slug rule is a parameter, not a decision this module makes. A heading id
|
|
11
|
+
// is a live URL: readers link to `#the-shape-of-a-code`, and so does the page's
|
|
12
|
+
// own permalink anchor. Unifying two slug rules would silently move every
|
|
13
|
+
// existing anchor on whichever wiki lost, so the rule each has shipped is the
|
|
14
|
+
// rule it keeps, stated at its call site instead of buried in a helper.
|
|
15
|
+
//
|
|
16
|
+
// Deduping, by contrast, is not a choice: two headings with the same text
|
|
17
|
+
// otherwise mint the same id twice and every link to the second one lands on
|
|
18
|
+
// the first. That was already a bug in the copy that lacked it, so this always
|
|
19
|
+
// dedupes.
|
|
20
|
+
/** The default slug rule: lowercase words joined by hyphens. */
|
|
21
|
+
export function slugifyHeading(text) {
|
|
22
|
+
return text
|
|
23
|
+
.toLowerCase()
|
|
24
|
+
.trim()
|
|
25
|
+
.replace(/[^\w\s-]/g, '')
|
|
26
|
+
.replace(/[\s_-]+/g, '-')
|
|
27
|
+
.replace(/^-+|-+$/g, '');
|
|
28
|
+
}
|
|
29
|
+
const HEADING = /<(h[1-6])([^>]*)>([\s\S]*?)<\/\1>/gi;
|
|
30
|
+
const stripTags = (s) => s.replace(/<[^>]*>/g, '').replace(/ /g, ' ').replace(/&/g, '&').trim();
|
|
31
|
+
const getAttr = (attrs, name) => attrs.match(new RegExp(`\\s${name}\\s*=\\s*"([^"]*)"`, 'i'))?.[1] ?? null;
|
|
32
|
+
const defaultAnchor = (id) => `<a class="heading-anchor" href="#${id}" aria-label="Permalink to this section" tabindex="-1"></a>`;
|
|
33
|
+
/**
|
|
34
|
+
* Give every heading in `html` an id and a permalink anchor. Headings that
|
|
35
|
+
* already carry an id keep it, and a heading already carrying an anchor is left
|
|
36
|
+
* alone, so this is safe to run twice over the same string.
|
|
37
|
+
*/
|
|
38
|
+
export function injectHeadingIds(html, options = {}) {
|
|
39
|
+
if (!html.trim())
|
|
40
|
+
return html;
|
|
41
|
+
const slug = options.slug ?? slugifyHeading;
|
|
42
|
+
const anchor = options.anchor ?? defaultAnchor;
|
|
43
|
+
const used = new Set();
|
|
44
|
+
return html.replace(HEADING, (match, tag, attrs, content) => {
|
|
45
|
+
if (content.includes('heading-anchor'))
|
|
46
|
+
return match;
|
|
47
|
+
const existing = getAttr(attrs, 'id');
|
|
48
|
+
let id = existing || slug(stripTags(content));
|
|
49
|
+
if (!id)
|
|
50
|
+
return match;
|
|
51
|
+
if (!existing) {
|
|
52
|
+
const base = id;
|
|
53
|
+
let n = 2;
|
|
54
|
+
while (used.has(id))
|
|
55
|
+
id = `${base}-${n++}`;
|
|
56
|
+
}
|
|
57
|
+
used.add(id);
|
|
58
|
+
return `<${tag}${existing ? attrs : `${attrs} id="${id}"`}>${content}${anchor(id)}</${tag}>`;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The headings in `html` that carry an id, in document order — the list an "on
|
|
63
|
+
* this page" rail renders. Run it over the output of `injectHeadingIds` and
|
|
64
|
+
* every heading is in it.
|
|
65
|
+
*
|
|
66
|
+
* Reading the string rather than the rendered DOM is only possible where the
|
|
67
|
+
* body IS a string at render time. A wiki whose content streams in as blocks
|
|
68
|
+
* after mount has to query the DOM instead, which is why two of the three
|
|
69
|
+
* consumers use only the injector above.
|
|
70
|
+
*/
|
|
71
|
+
export function headingsFrom(html) {
|
|
72
|
+
const out = [];
|
|
73
|
+
for (const [, tag, attrs, content] of html.matchAll(HEADING)) {
|
|
74
|
+
const id = getAttr(attrs ?? '', 'id');
|
|
75
|
+
const text = stripTags(content ?? '');
|
|
76
|
+
if (id && text)
|
|
77
|
+
out.push({ id, text, level: Number(tag[1]) });
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=headings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headings.js","sourceRoot":"","sources":["../src/headings.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,mBAAmB;AAEnB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,mBAAmB;AAEnB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
|
package/dist/taxonomy.d.ts
CHANGED
|
@@ -38,6 +38,23 @@ export interface RelatedRanking<T> {
|
|
|
38
38
|
pages: T[];
|
|
39
39
|
sharedFacet: SharedFacet | null;
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* One row of a page's facts panel: a declared key that carries a value, in
|
|
43
|
+
* schema order. `href` is set exactly when the key is a facet — a `select`
|
|
44
|
+
* value is precisely a set the category view already filters and counts, so the
|
|
45
|
+
* row is the way into that set rather than dead text.
|
|
46
|
+
*
|
|
47
|
+
* Rows, not markup: the three wikis this was lifted from render the same
|
|
48
|
+
* selection three ways (an HTML `<table>` string folded into a block, a React
|
|
49
|
+
* `<aside>`, a markdown twin), and they differ only in how a value is
|
|
50
|
+
* *formatted* — a `url` gets an external link here, a shortened display there.
|
|
51
|
+
* What they had all rebuilt, and had already begun to disagree about, is which
|
|
52
|
+
* keys appear and where each one links.
|
|
53
|
+
*/
|
|
54
|
+
export interface MetadataRow extends MetadataKeyDefinition {
|
|
55
|
+
value: string;
|
|
56
|
+
href?: string;
|
|
57
|
+
}
|
|
41
58
|
/** State a category URL can carry. `href` receives this and owns the format. */
|
|
42
59
|
export interface CategoryState {
|
|
43
60
|
sort?: string;
|
|
@@ -82,6 +99,10 @@ export interface Taxonomy {
|
|
|
82
99
|
filterPages: <T extends FacetablePage>(pages: T[], filters: FacetFilters, letter?: string) => T[];
|
|
83
100
|
buildFacets: <T extends FacetablePage>(tagPath: string, pages: T[], filters: FacetFilters, letter?: string) => Facet[];
|
|
84
101
|
alphaIndex: <T extends FacetablePage>(pages: T[], filters: FacetFilters) => FacetValue[];
|
|
102
|
+
/** A page's populated metadata keys as facts-panel rows, facet values linked. */
|
|
103
|
+
metadataRows: (tagPath: string, page: {
|
|
104
|
+
metadata?: unknown;
|
|
105
|
+
}) => MetadataRow[];
|
|
85
106
|
/** Whether a set has outgrown a grid and needs the A–Z index. */
|
|
86
107
|
needsAlphaIndex: (pageCount: number) => boolean;
|
|
87
108
|
href: (tagPath: string, state: CategoryState) => string;
|
package/dist/taxonomy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../src/taxonomy.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../src/taxonomy.ts"],"names":[],"mappings":"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"}
|
package/dist/taxonomy.js
CHANGED
|
@@ -111,6 +111,23 @@ export function createTaxonomy(config) {
|
|
|
111
111
|
return [{ key: key.key, label: key.label.replace(/:$/, ''), values }];
|
|
112
112
|
});
|
|
113
113
|
},
|
|
114
|
+
metadataRows(tagPath, page) {
|
|
115
|
+
const facets = new Set(facetKeys(tagPath).map(k => k.key));
|
|
116
|
+
return config.getMetadataKeys(tagPath).flatMap(key => {
|
|
117
|
+
const value = metaValue(page, key.key);
|
|
118
|
+
if (!value)
|
|
119
|
+
return [];
|
|
120
|
+
return [
|
|
121
|
+
{
|
|
122
|
+
...key,
|
|
123
|
+
value,
|
|
124
|
+
...(facets.has(key.key)
|
|
125
|
+
? { href: href(tagPath, { filters: { [key.key]: value } }) }
|
|
126
|
+
: {}),
|
|
127
|
+
},
|
|
128
|
+
];
|
|
129
|
+
});
|
|
130
|
+
},
|
|
114
131
|
/** A–Z buckets present in the set, `#` last. */
|
|
115
132
|
alphaIndex(pages, filters) {
|
|
116
133
|
const counts = new Map();
|
package/dist/taxonomy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taxonomy.js","sourceRoot":"","sources":["../src/taxonomy.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,2BAA2B;AAC3B,EAAE;AACF,gFAAgF;AAChF,+DAA+D;AAC/D,EAAE;AACF,gFAAgF;AAChF,gFAAgF;AAChF,wEAAwE;
|
|
1
|
+
{"version":3,"file":"taxonomy.js","sourceRoot":"","sources":["../src/taxonomy.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wiki-formant",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "The portable half of a wiki: derived taxonomy, a spec-correct MCP transport, markdown twins, block rendering, rate limiting, and the conditional-GET plumbing agent surfaces need. Zero runtime dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -34,6 +34,10 @@
|
|
|
34
34
|
"types": "./dist/mcp.d.ts",
|
|
35
35
|
"import": "./dist/mcp.js"
|
|
36
36
|
},
|
|
37
|
+
"./headings": {
|
|
38
|
+
"types": "./dist/headings.d.ts",
|
|
39
|
+
"import": "./dist/headings.js"
|
|
40
|
+
},
|
|
37
41
|
"./markdown": {
|
|
38
42
|
"types": "./dist/markdown.d.ts",
|
|
39
43
|
"import": "./dist/markdown.js"
|