neoorm 0.7.0 → 0.7.2
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/dist/docs/render.d.ts.map +1 -1
- package/dist/docs/render.js +316 -43
- package/dist/docs/render.js.map +1 -1
- package/dist/docs/search.d.ts +17 -0
- package/dist/docs/search.d.ts.map +1 -0
- package/dist/docs/search.js +191 -0
- package/dist/docs/search.js.map +1 -0
- package/dist/docs/server.d.ts +4 -0
- package/dist/docs/server.d.ts.map +1 -1
- package/dist/docs/server.js +15 -2
- package/dist/docs/server.js.map +1 -1
- package/dist/runtime/query/compile.d.ts +7 -5
- package/dist/runtime/query/compile.d.ts.map +1 -1
- package/dist/runtime/query/compile.js +39 -70
- package/dist/runtime/query/compile.js.map +1 -1
- package/dist/runtime/query/find.d.ts +3 -0
- package/dist/runtime/query/find.d.ts.map +1 -1
- package/dist/runtime/query/find.js +23 -13
- package/dist/runtime/query/find.js.map +1 -1
- package/dist/runtime/query/projection.d.ts +3 -1
- package/dist/runtime/query/projection.d.ts.map +1 -1
- package/dist/runtime/query/projection.js +21 -8
- package/dist/runtime/query/projection.js.map +1 -1
- package/dist/runtime/query/relation-planner.d.ts +1 -0
- package/dist/runtime/query/relation-planner.d.ts.map +1 -1
- package/dist/runtime/query/relation-planner.js +7 -8
- package/dist/runtime/query/relation-planner.js.map +1 -1
- package/dist/runtime/types.d.ts +14 -4
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/schema/relation-types.d.ts +17 -9
- package/dist/schema/relation-types.d.ts.map +1 -1
- package/dist/schema/types.d.ts +4 -0
- package/dist/schema/types.d.ts.map +1 -1
- package/docs/cli.md +2 -0
- package/docs/examples.md +4 -3
- package/docs/queries.md +26 -11
- package/docs/schema.md +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/docs/render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/docs/render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAwE3C,wBAAsB,cAAc,CACnC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,QAAQ,EAAE,EACf,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAgBjB;AAED,wBAAgB,eAAe,CAC9B,GAAG,EAAE,QAAQ,EAAE,EACf,OAAO,EAAE,MAAM,GACb,MAAM,CAoBR"}
|
package/dist/docs/render.js
CHANGED
|
@@ -8,42 +8,64 @@ function rewriteMarkdownLinks(html) {
|
|
|
8
8
|
return `href="/docs/${slug}${hash}"`;
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const body = rewriteMarkdownLinks(await marked.parse(markdown, {
|
|
14
|
-
gfm: true,
|
|
15
|
-
breaks: false,
|
|
16
|
-
}));
|
|
17
|
-
const navItems = nav
|
|
11
|
+
function renderNavItems(nav, activeSlug) {
|
|
12
|
+
return nav
|
|
18
13
|
.map((item) => {
|
|
19
|
-
const active = item.slug ===
|
|
14
|
+
const active = item.slug === activeSlug ? " active" : "";
|
|
20
15
|
return `<a class="nav-link${active}" href="/docs/${item.slug}">${escapeHtml(item.title)}</a>`;
|
|
21
16
|
})
|
|
22
17
|
.join("\n");
|
|
18
|
+
}
|
|
19
|
+
function renderSidebar(nav, version, activeSlug) {
|
|
20
|
+
return `<aside class="sidebar">
|
|
21
|
+
<div class="brand">
|
|
22
|
+
<a href="/">NeoOrm</a>
|
|
23
|
+
<span class="version">v${escapeHtml(version)}</span>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="search">
|
|
26
|
+
<input
|
|
27
|
+
type="search"
|
|
28
|
+
id="docs-search"
|
|
29
|
+
placeholder="Search docs…"
|
|
30
|
+
autocomplete="off"
|
|
31
|
+
spellcheck="false"
|
|
32
|
+
aria-label="Search documentation"
|
|
33
|
+
aria-controls="docs-search-results"
|
|
34
|
+
aria-expanded="false"
|
|
35
|
+
/>
|
|
36
|
+
<div id="docs-search-results" class="search-results" hidden></div>
|
|
37
|
+
</div>
|
|
38
|
+
<nav class="nav">${renderNavItems(nav, activeSlug)}</nav>
|
|
39
|
+
</aside>`;
|
|
40
|
+
}
|
|
41
|
+
function renderDocsShell(title, version, nav, mainHtml, activeSlug) {
|
|
23
42
|
return `<!doctype html>
|
|
24
43
|
<html lang="en">
|
|
25
44
|
<head>
|
|
26
45
|
<meta charset="utf-8" />
|
|
27
46
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
28
|
-
<title>${escapeHtml(
|
|
47
|
+
<title>${escapeHtml(title)}</title>
|
|
29
48
|
<style>${DOCS_CSS}</style>
|
|
30
49
|
</head>
|
|
31
50
|
<body>
|
|
32
51
|
<div class="layout">
|
|
33
|
-
|
|
34
|
-
<div class="brand">
|
|
35
|
-
<a href="/">NeoOrm</a>
|
|
36
|
-
<span class="version">v${escapeHtml(version)}</span>
|
|
37
|
-
</div>
|
|
38
|
-
<nav class="nav">${navItems}</nav>
|
|
39
|
-
</aside>
|
|
52
|
+
${renderSidebar(nav, version, activeSlug)}
|
|
40
53
|
<main class="content">
|
|
41
|
-
|
|
54
|
+
${mainHtml}
|
|
42
55
|
</main>
|
|
43
56
|
</div>
|
|
57
|
+
<script>${DOCS_SEARCH_SCRIPT}</script>
|
|
44
58
|
</body>
|
|
45
59
|
</html>`;
|
|
46
60
|
}
|
|
61
|
+
export async function renderDocsPage(page, nav, version) {
|
|
62
|
+
const markdown = await readFile(page.sourcePath, "utf-8");
|
|
63
|
+
const body = rewriteMarkdownLinks(await marked.parse(markdown, {
|
|
64
|
+
gfm: true,
|
|
65
|
+
breaks: false,
|
|
66
|
+
}));
|
|
67
|
+
return renderDocsShell(`${page.title} · NeoOrm`, version, nav, `<article class="markdown-body">${body}</article>`, page.slug);
|
|
68
|
+
}
|
|
47
69
|
export function renderDocsIndex(nav, version) {
|
|
48
70
|
const cards = nav
|
|
49
71
|
.map((page) => `<a class="card" href="/docs/${page.slug}">
|
|
@@ -51,35 +73,11 @@ export function renderDocsIndex(nav, version) {
|
|
|
51
73
|
<p>${escapeHtml(page.slug)}.md</p>
|
|
52
74
|
</a>`)
|
|
53
75
|
.join("\n");
|
|
54
|
-
return
|
|
55
|
-
<html lang="en">
|
|
56
|
-
<head>
|
|
57
|
-
<meta charset="utf-8" />
|
|
58
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
59
|
-
<title>NeoOrm Documentation</title>
|
|
60
|
-
<style>${DOCS_CSS}</style>
|
|
61
|
-
</head>
|
|
62
|
-
<body>
|
|
63
|
-
<div class="layout">
|
|
64
|
-
<aside class="sidebar">
|
|
65
|
-
<div class="brand">
|
|
66
|
-
<a href="/">NeoOrm</a>
|
|
67
|
-
<span class="version">v${escapeHtml(version)}</span>
|
|
68
|
-
</div>
|
|
69
|
-
<nav class="nav">${nav
|
|
70
|
-
.map((item) => `<a class="nav-link" href="/docs/${item.slug}">${escapeHtml(item.title)}</a>`)
|
|
71
|
-
.join("\n")}</nav>
|
|
72
|
-
</aside>
|
|
73
|
-
<main class="content">
|
|
74
|
-
<section class="hero">
|
|
76
|
+
return renderDocsShell("NeoOrm Documentation", version, nav, `<section class="hero">
|
|
75
77
|
<h1>NeoOrm documentation</h1>
|
|
76
78
|
<p>TypeScript-first PostgreSQL and SQLite ORM with schema DSL, codegen, and typed relations.</p>
|
|
77
79
|
</section>
|
|
78
|
-
<section class="cards">${cards}</section
|
|
79
|
-
</main>
|
|
80
|
-
</div>
|
|
81
|
-
</body>
|
|
82
|
-
</html>`;
|
|
80
|
+
<section class="cards">${cards}</section>`);
|
|
83
81
|
}
|
|
84
82
|
function escapeHtml(value) {
|
|
85
83
|
return value
|
|
@@ -88,6 +86,203 @@ function escapeHtml(value) {
|
|
|
88
86
|
.replaceAll(">", ">")
|
|
89
87
|
.replaceAll('"', """);
|
|
90
88
|
}
|
|
89
|
+
const DOCS_SEARCH_SCRIPT = `
|
|
90
|
+
(() => {
|
|
91
|
+
const input = document.getElementById("docs-search");
|
|
92
|
+
const resultsEl = document.getElementById("docs-search-results");
|
|
93
|
+
if (!input || !resultsEl) return;
|
|
94
|
+
|
|
95
|
+
let index = null;
|
|
96
|
+
let indexPromise = null;
|
|
97
|
+
let debounceTimer = null;
|
|
98
|
+
let activeIndex = -1;
|
|
99
|
+
let currentHits = [];
|
|
100
|
+
|
|
101
|
+
function escapeHtml(value) {
|
|
102
|
+
return value
|
|
103
|
+
.replaceAll("&", "&")
|
|
104
|
+
.replaceAll("<", "<")
|
|
105
|
+
.replaceAll(">", ">")
|
|
106
|
+
.replaceAll('"', """);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function tokenize(query) {
|
|
110
|
+
return query.toLowerCase().split(/\\s+/).map((t) => t.trim()).filter(Boolean);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function scoreRecord(record, tokens) {
|
|
114
|
+
const title = record.title.toLowerCase();
|
|
115
|
+
const heading = (record.heading || "").toLowerCase();
|
|
116
|
+
const text = record.text.toLowerCase();
|
|
117
|
+
let score = 0;
|
|
118
|
+
for (const token of tokens) {
|
|
119
|
+
if (title === token) score += 10;
|
|
120
|
+
else if (title.startsWith(token)) score += 8;
|
|
121
|
+
else if (title.includes(token)) score += 5;
|
|
122
|
+
if (heading === token) score += 6;
|
|
123
|
+
else if (heading.startsWith(token)) score += 5;
|
|
124
|
+
else if (heading.includes(token)) score += 4;
|
|
125
|
+
if (text.includes(token)) {
|
|
126
|
+
score += 3;
|
|
127
|
+
const occurrences = text.split(token).length - 1;
|
|
128
|
+
if (occurrences > 1) score += Math.min(occurrences - 1, 3);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return score;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function rankResults(query, records) {
|
|
135
|
+
const tokens = tokenize(query);
|
|
136
|
+
if (tokens.length === 0) return [];
|
|
137
|
+
const hits = [];
|
|
138
|
+
for (const record of records) {
|
|
139
|
+
const score = scoreRecord(record, tokens);
|
|
140
|
+
if (score > 0) hits.push({ ...record, score });
|
|
141
|
+
}
|
|
142
|
+
hits.sort((a, b) => b.score - a.score || a.title.localeCompare(b.title));
|
|
143
|
+
return hits.slice(0, 8);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function highlightExcerpt(excerpt, query) {
|
|
147
|
+
const tokens = tokenize(query).filter((t) => t.length >= 2);
|
|
148
|
+
let html = escapeHtml(excerpt);
|
|
149
|
+
for (const token of tokens) {
|
|
150
|
+
const re = new RegExp("(" + token.replace(/[.*+?^\${}()|[\\]\\\\]/g, "\\\\$&") + ")", "gi");
|
|
151
|
+
html = html.replace(re, "<mark>$1</mark>");
|
|
152
|
+
}
|
|
153
|
+
return html;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function resultHref(hit) {
|
|
157
|
+
return hit.anchor ? "/docs/" + hit.slug + "#" + hit.anchor : "/docs/" + hit.slug;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function loadIndex() {
|
|
161
|
+
if (index) return Promise.resolve(index);
|
|
162
|
+
if (!indexPromise) {
|
|
163
|
+
indexPromise = fetch("/search-index.json")
|
|
164
|
+
.then((res) => {
|
|
165
|
+
if (!res.ok) throw new Error("Failed to load search index");
|
|
166
|
+
return res.json();
|
|
167
|
+
})
|
|
168
|
+
.then((data) => {
|
|
169
|
+
index = data;
|
|
170
|
+
return index;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
return indexPromise;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function closeResults() {
|
|
177
|
+
resultsEl.hidden = true;
|
|
178
|
+
input.setAttribute("aria-expanded", "false");
|
|
179
|
+
activeIndex = -1;
|
|
180
|
+
currentHits = [];
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function renderResults(hits, query) {
|
|
184
|
+
if (hits.length === 0) {
|
|
185
|
+
resultsEl.innerHTML = '<div class="search-empty">No results</div>';
|
|
186
|
+
resultsEl.hidden = false;
|
|
187
|
+
input.setAttribute("aria-expanded", "true");
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
resultsEl.innerHTML = hits
|
|
192
|
+
.map((hit, i) => {
|
|
193
|
+
const heading = hit.heading
|
|
194
|
+
? '<span class="search-result-heading">' + escapeHtml(hit.heading) + "</span>"
|
|
195
|
+
: "";
|
|
196
|
+
return (
|
|
197
|
+
'<a class="search-result' +
|
|
198
|
+
(i === activeIndex ? " active" : "") +
|
|
199
|
+
'" href="' +
|
|
200
|
+
escapeHtml(resultHref(hit)) +
|
|
201
|
+
'">' +
|
|
202
|
+
'<span class="search-result-title">' +
|
|
203
|
+
escapeHtml(hit.title) +
|
|
204
|
+
"</span>" +
|
|
205
|
+
heading +
|
|
206
|
+
'<span class="search-result-excerpt">' +
|
|
207
|
+
highlightExcerpt(hit.excerpt, query) +
|
|
208
|
+
"</span>" +
|
|
209
|
+
"</a>"
|
|
210
|
+
);
|
|
211
|
+
})
|
|
212
|
+
.join("");
|
|
213
|
+
resultsEl.hidden = false;
|
|
214
|
+
input.setAttribute("aria-expanded", "true");
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function updateActiveResult() {
|
|
218
|
+
const items = resultsEl.querySelectorAll(".search-result");
|
|
219
|
+
items.forEach((item, i) => {
|
|
220
|
+
item.classList.toggle("active", i === activeIndex);
|
|
221
|
+
});
|
|
222
|
+
const active = items[activeIndex];
|
|
223
|
+
if (active) active.scrollIntoView({ block: "nearest" });
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
async function runSearch() {
|
|
227
|
+
const query = input.value.trim();
|
|
228
|
+
if (!query) {
|
|
229
|
+
closeResults();
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
const records = await loadIndex();
|
|
233
|
+
currentHits = rankResults(query, records);
|
|
234
|
+
activeIndex = currentHits.length > 0 ? 0 : -1;
|
|
235
|
+
renderResults(currentHits, query);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
input.addEventListener("focus", () => {
|
|
239
|
+
void loadIndex();
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
input.addEventListener("input", () => {
|
|
243
|
+
clearTimeout(debounceTimer);
|
|
244
|
+
debounceTimer = setTimeout(() => {
|
|
245
|
+
void runSearch();
|
|
246
|
+
}, 150);
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
input.addEventListener("keydown", (event) => {
|
|
250
|
+
if (resultsEl.hidden) return;
|
|
251
|
+
if (event.key === "Escape") {
|
|
252
|
+
closeResults();
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
if (event.key === "ArrowDown") {
|
|
256
|
+
event.preventDefault();
|
|
257
|
+
if (currentHits.length === 0) return;
|
|
258
|
+
activeIndex = Math.min(activeIndex + 1, currentHits.length - 1);
|
|
259
|
+
updateActiveResult();
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
if (event.key === "ArrowUp") {
|
|
263
|
+
event.preventDefault();
|
|
264
|
+
if (currentHits.length === 0) return;
|
|
265
|
+
activeIndex = Math.max(activeIndex - 1, 0);
|
|
266
|
+
updateActiveResult();
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
if (event.key === "Enter" && activeIndex >= 0) {
|
|
270
|
+
const hit = currentHits[activeIndex];
|
|
271
|
+
if (hit) {
|
|
272
|
+
event.preventDefault();
|
|
273
|
+
window.location.href = resultHref(hit);
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
document.addEventListener("click", (event) => {
|
|
279
|
+
if (!(event.target instanceof Node)) return;
|
|
280
|
+
if (!input.contains(event.target) && !resultsEl.contains(event.target)) {
|
|
281
|
+
closeResults();
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
})();
|
|
285
|
+
`;
|
|
91
286
|
const DOCS_CSS = `
|
|
92
287
|
:root {
|
|
93
288
|
color-scheme: light dark;
|
|
@@ -147,6 +342,79 @@ a:hover { text-decoration: underline; }
|
|
|
147
342
|
font-size: 0.8rem;
|
|
148
343
|
font-weight: 500;
|
|
149
344
|
}
|
|
345
|
+
.search {
|
|
346
|
+
position: relative;
|
|
347
|
+
margin-bottom: 1rem;
|
|
348
|
+
}
|
|
349
|
+
.search input {
|
|
350
|
+
width: 100%;
|
|
351
|
+
padding: 0.55rem 0.7rem;
|
|
352
|
+
border: 1px solid var(--border);
|
|
353
|
+
border-radius: 0.55rem;
|
|
354
|
+
background: var(--bg);
|
|
355
|
+
color: var(--text);
|
|
356
|
+
font: inherit;
|
|
357
|
+
}
|
|
358
|
+
.search input:focus {
|
|
359
|
+
outline: 2px solid color-mix(in srgb, var(--accent) 45%, transparent);
|
|
360
|
+
outline-offset: 1px;
|
|
361
|
+
}
|
|
362
|
+
.search-results {
|
|
363
|
+
position: absolute;
|
|
364
|
+
left: 0;
|
|
365
|
+
right: 0;
|
|
366
|
+
top: calc(100% + 0.35rem);
|
|
367
|
+
z-index: 20;
|
|
368
|
+
max-height: 18rem;
|
|
369
|
+
overflow: auto;
|
|
370
|
+
border: 1px solid var(--border);
|
|
371
|
+
border-radius: 0.65rem;
|
|
372
|
+
background: var(--panel);
|
|
373
|
+
box-shadow: 0 10px 30px color-mix(in srgb, var(--bg) 35%, transparent);
|
|
374
|
+
}
|
|
375
|
+
.search-result {
|
|
376
|
+
display: block;
|
|
377
|
+
padding: 0.65rem 0.75rem;
|
|
378
|
+
color: inherit;
|
|
379
|
+
border-bottom: 1px solid var(--border);
|
|
380
|
+
}
|
|
381
|
+
.search-result:last-child {
|
|
382
|
+
border-bottom: 0;
|
|
383
|
+
}
|
|
384
|
+
.search-result:hover,
|
|
385
|
+
.search-result.active {
|
|
386
|
+
background: color-mix(in srgb, var(--accent) 12%, transparent);
|
|
387
|
+
text-decoration: none;
|
|
388
|
+
}
|
|
389
|
+
.search-result-title {
|
|
390
|
+
display: block;
|
|
391
|
+
font-weight: 600;
|
|
392
|
+
font-size: 0.92rem;
|
|
393
|
+
}
|
|
394
|
+
.search-result-heading {
|
|
395
|
+
display: block;
|
|
396
|
+
color: var(--muted);
|
|
397
|
+
font-size: 0.82rem;
|
|
398
|
+
margin-top: 0.1rem;
|
|
399
|
+
}
|
|
400
|
+
.search-result-excerpt {
|
|
401
|
+
display: block;
|
|
402
|
+
color: var(--muted);
|
|
403
|
+
font-size: 0.8rem;
|
|
404
|
+
margin-top: 0.25rem;
|
|
405
|
+
line-height: 1.4;
|
|
406
|
+
}
|
|
407
|
+
.search-result-excerpt mark {
|
|
408
|
+
background: color-mix(in srgb, var(--accent) 25%, transparent);
|
|
409
|
+
color: inherit;
|
|
410
|
+
padding: 0 0.1rem;
|
|
411
|
+
border-radius: 0.15rem;
|
|
412
|
+
}
|
|
413
|
+
.search-empty {
|
|
414
|
+
padding: 0.75rem;
|
|
415
|
+
color: var(--muted);
|
|
416
|
+
font-size: 0.9rem;
|
|
417
|
+
}
|
|
150
418
|
.nav {
|
|
151
419
|
display: flex;
|
|
152
420
|
flex-direction: column;
|
|
@@ -240,6 +508,11 @@ a:hover { text-decoration: underline; }
|
|
|
240
508
|
border-right: 0;
|
|
241
509
|
border-bottom: 1px solid var(--border);
|
|
242
510
|
}
|
|
511
|
+
.search-results {
|
|
512
|
+
position: static;
|
|
513
|
+
max-height: 12rem;
|
|
514
|
+
margin-top: 0.35rem;
|
|
515
|
+
}
|
|
243
516
|
}
|
|
244
517
|
`;
|
|
245
518
|
//# sourceMappingURL=render.js.map
|
package/dist/docs/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/docs/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,SAAS,oBAAoB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,OAAO,CAClB,8BAA8B,EAC9B,CAAC,MAAM,EAAE,IAAY,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE;QACnC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC3C,OAAO,eAAe,IAAI,GAAG,IAAI,GAAG,CAAC;IACtC,CAAC,CACD,CAAC;AACH,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/docs/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { DocsPage } from "./pages.js";
|
|
2
|
+
export type DocsSearchRecord = {
|
|
3
|
+
slug: string;
|
|
4
|
+
title: string;
|
|
5
|
+
heading?: string;
|
|
6
|
+
anchor?: string;
|
|
7
|
+
excerpt: string;
|
|
8
|
+
text: string;
|
|
9
|
+
};
|
|
10
|
+
export type DocsSearchHit = DocsSearchRecord & {
|
|
11
|
+
score: number;
|
|
12
|
+
};
|
|
13
|
+
export declare function slugifyHeading(text: string): string;
|
|
14
|
+
export declare function plainTextFromMarkdown(markdown: string): string;
|
|
15
|
+
export declare function buildSearchIndex(pages: DocsPage[]): Promise<DocsSearchRecord[]>;
|
|
16
|
+
export declare function rankSearchResults(query: string, records: DocsSearchRecord[]): DocsSearchHit[];
|
|
17
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/docs/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAC9C,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAUF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAc9D;AAuFD,wBAAsB,gBAAgB,CACrC,KAAK,EAAE,QAAQ,EAAE,GACf,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA4B7B;AAiDD,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,gBAAgB,EAAE,GACzB,aAAa,EAAE,CAsBjB"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
const EXCERPT_LENGTH = 120;
|
|
3
|
+
const MAX_RESULTS = 8;
|
|
4
|
+
export function slugifyHeading(text) {
|
|
5
|
+
return text
|
|
6
|
+
.toLowerCase()
|
|
7
|
+
.trim()
|
|
8
|
+
.replace(/[^\w\s-]/g, "")
|
|
9
|
+
.replace(/\s+/g, "-")
|
|
10
|
+
.replace(/-+/g, "-")
|
|
11
|
+
.replace(/^-|-$/g, "");
|
|
12
|
+
}
|
|
13
|
+
export function plainTextFromMarkdown(markdown) {
|
|
14
|
+
let text = markdown;
|
|
15
|
+
text = text.replace(/^---[\s\S]*?---\n?/m, "");
|
|
16
|
+
text = text.replace(/```[\s\S]*?```/g, " ");
|
|
17
|
+
text = text.replace(/`[^`]*`/g, " ");
|
|
18
|
+
text = text.replace(/!\[([^\]]*)\]\([^)]+\)/g, "$1");
|
|
19
|
+
text = text.replace(/\[([^\]]+)\]\([^)]+\)/g, "$1");
|
|
20
|
+
text = text.replace(/^#{1,6}\s+/gm, "");
|
|
21
|
+
text = text.replace(/^\s*[-*+]\s+/gm, "");
|
|
22
|
+
text = text.replace(/^\s*\d+\.\s+/gm, "");
|
|
23
|
+
text = text.replace(/[*_~]/g, "");
|
|
24
|
+
text = text.replace(/\|/g, " ");
|
|
25
|
+
text = text.replace(/\s+/g, " ");
|
|
26
|
+
return text.trim();
|
|
27
|
+
}
|
|
28
|
+
function excerptFromText(text) {
|
|
29
|
+
const normalized = text.replace(/\s+/g, " ").trim();
|
|
30
|
+
if (normalized.length <= EXCERPT_LENGTH) {
|
|
31
|
+
return normalized;
|
|
32
|
+
}
|
|
33
|
+
return `${normalized.slice(0, EXCERPT_LENGTH).trimEnd()}…`;
|
|
34
|
+
}
|
|
35
|
+
function parseMarkdownSections(markdown) {
|
|
36
|
+
const lines = markdown.split("\n");
|
|
37
|
+
const sections = [];
|
|
38
|
+
let intro = [];
|
|
39
|
+
let currentHeading;
|
|
40
|
+
let currentBody = [];
|
|
41
|
+
const flush = () => {
|
|
42
|
+
const body = currentBody.join("\n").trim();
|
|
43
|
+
if (currentHeading !== undefined || body.length > 0) {
|
|
44
|
+
sections.push({
|
|
45
|
+
...(currentHeading ? { heading: currentHeading } : {}),
|
|
46
|
+
body,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
currentHeading = undefined;
|
|
50
|
+
currentBody = [];
|
|
51
|
+
};
|
|
52
|
+
for (const line of lines) {
|
|
53
|
+
const headingMatch = line.match(/^#{2,3}\s+(.+)$/);
|
|
54
|
+
if (headingMatch) {
|
|
55
|
+
if (currentHeading === undefined && intro.length > 0) {
|
|
56
|
+
sections.push({ body: intro.join("\n").trim() });
|
|
57
|
+
intro = [];
|
|
58
|
+
}
|
|
59
|
+
else if (currentHeading !== undefined || currentBody.length > 0) {
|
|
60
|
+
flush();
|
|
61
|
+
}
|
|
62
|
+
currentHeading = headingMatch[1]?.trim();
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (currentHeading === undefined && sections.length === 0 && !line.match(/^#\s+/)) {
|
|
66
|
+
intro.push(line);
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
currentBody.push(line);
|
|
70
|
+
}
|
|
71
|
+
if (currentHeading === undefined && intro.length > 0) {
|
|
72
|
+
sections.push({ body: intro.join("\n").trim() });
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
flush();
|
|
76
|
+
}
|
|
77
|
+
return sections.filter((section) => section.body.length > 0 || section.heading);
|
|
78
|
+
}
|
|
79
|
+
function buildRecord(page, section) {
|
|
80
|
+
const bodyText = plainTextFromMarkdown(section.body);
|
|
81
|
+
if (!bodyText && !section.heading) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
const heading = section.heading;
|
|
85
|
+
const searchableParts = [page.title];
|
|
86
|
+
if (heading)
|
|
87
|
+
searchableParts.push(heading);
|
|
88
|
+
if (bodyText)
|
|
89
|
+
searchableParts.push(bodyText);
|
|
90
|
+
const text = searchableParts.join(" ");
|
|
91
|
+
const excerptSource = bodyText || heading || page.title;
|
|
92
|
+
return {
|
|
93
|
+
slug: page.slug,
|
|
94
|
+
title: page.title,
|
|
95
|
+
...(heading
|
|
96
|
+
? { heading, anchor: slugifyHeading(heading) }
|
|
97
|
+
: {}),
|
|
98
|
+
excerpt: excerptFromText(excerptSource),
|
|
99
|
+
text,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export async function buildSearchIndex(pages) {
|
|
103
|
+
const records = [];
|
|
104
|
+
for (const page of pages) {
|
|
105
|
+
const markdown = await readFile(page.sourcePath, "utf-8");
|
|
106
|
+
const sections = parseMarkdownSections(markdown);
|
|
107
|
+
for (const section of sections) {
|
|
108
|
+
const record = buildRecord(page, section);
|
|
109
|
+
if (record) {
|
|
110
|
+
records.push(record);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (sections.length === 0) {
|
|
114
|
+
const text = plainTextFromMarkdown(markdown);
|
|
115
|
+
if (text) {
|
|
116
|
+
records.push({
|
|
117
|
+
slug: page.slug,
|
|
118
|
+
title: page.title,
|
|
119
|
+
excerpt: excerptFromText(text),
|
|
120
|
+
text: `${page.title} ${text}`,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return records;
|
|
126
|
+
}
|
|
127
|
+
function tokenizeQuery(query) {
|
|
128
|
+
return query
|
|
129
|
+
.toLowerCase()
|
|
130
|
+
.split(/\s+/)
|
|
131
|
+
.map((token) => token.trim())
|
|
132
|
+
.filter((token) => token.length > 0);
|
|
133
|
+
}
|
|
134
|
+
function scoreRecord(record, tokens) {
|
|
135
|
+
if (tokens.length === 0) {
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
const title = record.title.toLowerCase();
|
|
139
|
+
const heading = record.heading?.toLowerCase() ?? "";
|
|
140
|
+
const text = record.text.toLowerCase();
|
|
141
|
+
let score = 0;
|
|
142
|
+
for (const token of tokens) {
|
|
143
|
+
if (title === token) {
|
|
144
|
+
score += 10;
|
|
145
|
+
}
|
|
146
|
+
else if (title.startsWith(token)) {
|
|
147
|
+
score += 8;
|
|
148
|
+
}
|
|
149
|
+
else if (title.includes(token)) {
|
|
150
|
+
score += 5;
|
|
151
|
+
}
|
|
152
|
+
if (heading === token) {
|
|
153
|
+
score += 6;
|
|
154
|
+
}
|
|
155
|
+
else if (heading.startsWith(token)) {
|
|
156
|
+
score += 5;
|
|
157
|
+
}
|
|
158
|
+
else if (heading.includes(token)) {
|
|
159
|
+
score += 4;
|
|
160
|
+
}
|
|
161
|
+
if (text.includes(token)) {
|
|
162
|
+
score += 3;
|
|
163
|
+
const occurrences = text.split(token).length - 1;
|
|
164
|
+
if (occurrences > 1) {
|
|
165
|
+
score += Math.min(occurrences - 1, 3);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return score;
|
|
170
|
+
}
|
|
171
|
+
export function rankSearchResults(query, records) {
|
|
172
|
+
const tokens = tokenizeQuery(query);
|
|
173
|
+
if (tokens.length === 0) {
|
|
174
|
+
return [];
|
|
175
|
+
}
|
|
176
|
+
const hits = [];
|
|
177
|
+
for (const record of records) {
|
|
178
|
+
const score = scoreRecord(record, tokens);
|
|
179
|
+
if (score > 0) {
|
|
180
|
+
hits.push({ ...record, score });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
hits.sort((a, b) => {
|
|
184
|
+
if (b.score !== a.score) {
|
|
185
|
+
return b.score - a.score;
|
|
186
|
+
}
|
|
187
|
+
return a.title.localeCompare(b.title);
|
|
188
|
+
});
|
|
189
|
+
return hits.slice(0, MAX_RESULTS);
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/docs/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAgB5C,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,WAAW,GAAG,CAAC,CAAC;AAOtB,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,OAAO,IAAI;SACT,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACrD,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAC5C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;IACrD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAClC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,UAAU,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;QACzC,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AAC5D,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC9C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,cAAkC,CAAC;IACvC,IAAI,WAAW,GAAa,EAAE,CAAC;IAE/B,MAAM,KAAK,GAAG,GAAG,EAAE;QAClB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrD,QAAQ,CAAC,IAAI,CAAC;gBACb,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtD,IAAI;aACJ,CAAC,CAAC;QACJ,CAAC;QACD,cAAc,GAAG,SAAS,CAAC;QAC3B,WAAW,GAAG,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACnD,IAAI,YAAY,EAAE,CAAC;YAClB,IAAI,cAAc,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACjD,KAAK,GAAG,EAAE,CAAC;YACZ,CAAC;iBAAM,IAAI,cAAc,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnE,KAAK,EAAE,CAAC;YACT,CAAC;YACD,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YACzC,SAAS;QACV,CAAC;QAED,IAAI,cAAc,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACnF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,SAAS;QACV,CAAC;QAED,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,cAAc,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAClD,CAAC;SAAM,CAAC;QACP,KAAK,EAAE,CAAC;IACT,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,WAAW,CACnB,IAAc,EACd,OAAwB;IAExB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,OAAO;QAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,QAAQ;QAAE,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;IAExD,OAAO;QACN,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,CAAC,OAAO;YACV,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE;YAC9C,CAAC,CAAC,EAAE,CAAC;QACN,OAAO,EAAE,eAAe,CAAC,aAAa,CAAC;QACvC,IAAI;KACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACrC,KAAiB;IAEjB,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAEjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1C,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC;oBAC9B,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;iBAC7B,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IACnC,OAAO,KAAK;SACV,WAAW,EAAE;SACb,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,WAAW,CAAC,MAAwB,EAAE,MAAgB;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC;IACV,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACvC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACrB,KAAK,IAAI,EAAE,CAAC;QACb,CAAC;aAAM,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,CAAC;QACZ,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC;YACX,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YACjD,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;gBACrB,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,KAAa,EACb,OAA2B;IAE3B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;IACF,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAClB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACnC,CAAC"}
|
package/dist/docs/server.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { type IncomingMessage, type ServerResponse } from "node:http";
|
|
2
|
+
import { type DocsPage } from "./pages.js";
|
|
3
|
+
import { type DocsSearchRecord } from "./search.js";
|
|
1
4
|
export type DocsServerOptions = {
|
|
2
5
|
port?: number;
|
|
3
6
|
host?: string;
|
|
4
7
|
open?: boolean;
|
|
5
8
|
version: string;
|
|
6
9
|
};
|
|
10
|
+
export declare function createRequestHandler(pages: DocsPage[], version: string, searchIndex: DocsSearchRecord[]): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
|
|
7
11
|
export declare function startDocsServer(options: DocsServerOptions): Promise<{
|
|
8
12
|
url: string;
|
|
9
13
|
close: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/docs/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/docs/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAEpF,OAAO,EAAoC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,EAEN,KAAK,gBAAgB,EACrB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC;AAmCF,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,gBAAgB,EAAE,GAC7B,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAoC9D;AAeD,wBAAsB,eAAe,CACpC,OAAO,EAAE,iBAAiB,GACxB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAqCtD"}
|