fromsrc 0.0.2 → 0.0.22
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/access.d.ts +7 -7
- package/dist/access.js +12 -5
- package/dist/adapter.js +8 -16
- package/dist/adapterbrowser.js +6 -10
- package/dist/adapternext.js +7 -18
- package/dist/adapterreactrouter.js +5 -9
- package/dist/adapterremix.js +8 -17
- package/dist/adaptertanstack.js +6 -10
- package/dist/algolia.js +43 -21
- package/dist/analytics.d.ts +1 -1
- package/dist/analytics.js +16 -10
- package/dist/ansi.js +76 -37
- package/dist/api.d.ts +10 -10
- package/dist/api.js +14 -11
- package/dist/audit.d.ts +6 -6
- package/dist/audit.js +29 -10
- package/dist/autotype.js +20 -10
- package/dist/batch.d.ts +6 -6
- package/dist/batch.js +16 -9
- package/dist/changelog.js +28 -14
- package/dist/changelogutil.d.ts +4 -4
- package/dist/changelogutil.js +33 -13
- package/dist/cli.d.ts +6 -6
- package/dist/cli.js +7 -3
- package/dist/client.d.ts +1 -1
- package/dist/codesample.d.ts +4 -4
- package/dist/codesample.js +63 -24
- package/dist/collapse.js +31 -13
- package/dist/collections.js +36 -16
- package/dist/components/accordion.d.ts +1 -1
- package/dist/components/accordion.js +5 -1
- package/dist/components/alert.d.ts +1 -1
- package/dist/components/alert.js +24 -13
- package/dist/components/announce.js +40 -17
- package/dist/components/autofill.js +18 -8
- package/dist/components/avatar.js +4 -4
- package/dist/components/avatarstack.js +2 -2
- package/dist/components/backtotop.d.ts +1 -1
- package/dist/components/backtotop.js +18 -5
- package/dist/components/badge.js +9 -4
- package/dist/components/banner.js +22 -5
- package/dist/components/breadcrumb.js +11 -4
- package/dist/components/breadcrumbnav.js +37 -21
- package/dist/components/button.js +23 -8
- package/dist/components/callout.d.ts +1 -1
- package/dist/components/callout.js +35 -31
- package/dist/components/changelog.js +21 -8
- package/dist/components/checkbox.js +32 -19
- package/dist/components/code.d.ts +1 -1
- package/dist/components/code.js +6 -3
- package/dist/components/codeblock.js +157 -39
- package/dist/components/codecopy.d.ts +1 -1
- package/dist/components/codecopy.js +36 -13
- package/dist/components/codegroup.js +87 -25
- package/dist/components/collapsible.d.ts +1 -1
- package/dist/components/collapsible.js +5 -1
- package/dist/components/command.d.ts +1 -1
- package/dist/components/command.js +42 -15
- package/dist/components/compare.js +20 -8
- package/dist/components/content.js +121 -79
- package/dist/components/copybutton.d.ts +1 -1
- package/dist/components/copybutton.js +14 -7
- package/dist/components/countdown.js +9 -3
- package/dist/components/create.js +34 -24
- package/dist/components/definition.js +11 -4
- package/dist/components/diffview.js +63 -29
- package/dist/components/divider.js +5 -1
- package/dist/components/docheader.js +8 -1
- package/dist/components/doclinkcard.js +27 -3
- package/dist/components/dropdown.d.ts +1 -1
- package/dist/components/dropdown.js +32 -11
- package/dist/components/dynamiccode.js +5 -3
- package/dist/components/editlink.js +35 -23
- package/dist/components/embed.js +15 -7
- package/dist/components/endpoint.d.ts +3 -3
- package/dist/components/endpoint.js +24 -9
- package/dist/components/errormessage.d.ts +1 -1
- package/dist/components/errormessage.js +4 -1
- package/dist/components/expandcode.d.ts +1 -1
- package/dist/components/expandcode.js +6 -2
- package/dist/components/feature.js +8 -1
- package/dist/components/featuregrid.d.ts +4 -4
- package/dist/components/featuregrid.js +7 -1
- package/dist/components/feedback.js +11 -7
- package/dist/components/feedbackwidget.js +18 -12
- package/dist/components/files.d.ts +1 -1
- package/dist/components/files.js +52 -18
- package/dist/components/folder.d.ts +1 -1
- package/dist/components/folder.js +21 -4
- package/dist/components/footer.js +5 -1
- package/dist/components/formlabel.d.ts +1 -1
- package/dist/components/formlabel.js +31 -18
- package/dist/components/github.js +43 -14
- package/dist/components/graph.js +38 -14
- package/dist/components/heading.js +36 -29
- package/dist/components/headingcopy.js +13 -5
- package/dist/components/hero.js +20 -14
- package/dist/components/highlight.d.ts +2 -2
- package/dist/components/highlight.js +14 -8
- package/dist/components/hover.d.ts +2 -2
- package/dist/components/hover.js +11 -4
- package/dist/components/icons.js +4 -1
- package/dist/components/inlinetoc.js +3 -1
- package/dist/components/input.js +13 -3
- package/dist/components/install.js +34 -24
- package/dist/components/kbd.js +19 -11
- package/dist/components/langicon.d.ts +1 -1
- package/dist/components/langicon.js +32 -24
- package/dist/components/language.d.ts +1 -1
- package/dist/components/language.js +12 -4
- package/dist/components/lastupdated.d.ts +2 -2
- package/dist/components/lastupdated.js +36 -12
- package/dist/components/link.d.ts +1 -1
- package/dist/components/linkcard.js +3 -1
- package/dist/components/list.d.ts +1 -1
- package/dist/components/list.js +4 -1
- package/dist/components/math.js +33 -8
- package/dist/components/mermaid.js +3 -3
- package/dist/components/mobilenav.d.ts +2 -1
- package/dist/components/mobilenav.js +116 -47
- package/dist/components/modal.d.ts +1 -1
- package/dist/components/modal.js +9 -2
- package/dist/components/navlink.js +17 -3
- package/dist/components/openapi.d.ts +1 -1
- package/dist/components/openapi.js +102 -32
- package/dist/components/openapischema.d.ts +1 -1
- package/dist/components/openapischema.js +29 -9
- package/dist/components/openapitags.js +6 -2
- package/dist/components/pagetransition.js +5 -3
- package/dist/components/pagination.js +5 -4
- package/dist/components/panel.js +92 -16
- package/dist/components/playground.d.ts +1 -1
- package/dist/components/playground.js +153 -50
- package/dist/components/popover.js +9 -7
- package/dist/components/prelink.js +40 -9
- package/dist/components/prevnext.d.ts +1 -1
- package/dist/components/prevnext.js +36 -16
- package/dist/components/progress.js +2 -2
- package/dist/components/property.js +4 -2
- package/dist/components/quote.d.ts +2 -2
- package/dist/components/quote.js +32 -4
- package/dist/components/radio.js +36 -18
- package/dist/components/rating.js +14 -3
- package/dist/components/recent.d.ts +1 -1
- package/dist/components/recent.js +26 -10
- package/dist/components/responsive.js +21 -13
- package/dist/components/results.js +8 -4
- package/dist/components/screenshot.js +61 -21
- package/dist/components/scrollprogress.js +9 -5
- package/dist/components/scrollspy.d.ts +2 -2
- package/dist/components/scrollspy.js +9 -3
- package/dist/components/search.js +47 -18
- package/dist/components/searchbutton.js +3 -1
- package/dist/components/searchdialog.js +36 -23
- package/dist/components/searcher.d.ts +1 -1
- package/dist/components/searcher.js +51 -26
- package/dist/components/select.js +27 -13
- package/dist/components/shortcuts.d.ts +1 -1
- package/dist/components/shortcuts.js +57 -38
- package/dist/components/sidebar.d.ts +2 -1
- package/dist/components/sidebar.js +209 -64
- package/dist/components/sidebarfilter.d.ts +1 -1
- package/dist/components/sidebarfilter.js +33 -9
- package/dist/components/sidebarscript.d.ts +5 -0
- package/dist/components/sidebarscript.js +5 -0
- package/dist/components/skeleton.js +15 -3
- package/dist/components/spinner.js +13 -3
- package/dist/components/status.js +20 -8
- package/dist/components/steps.js +3 -1
- package/dist/components/switch.js +4 -4
- package/dist/components/table.js +37 -12
- package/dist/components/tabnav.d.ts +1 -1
- package/dist/components/tabnav.js +48 -36
- package/dist/components/tabs.d.ts +1 -1
- package/dist/components/tabs.js +56 -40
- package/dist/components/tag.js +8 -3
- package/dist/components/terminal.js +14 -4
- package/dist/components/textarea.js +96 -82
- package/dist/components/theme.d.ts +1 -1
- package/dist/components/theme.js +26 -4
- package/dist/components/themeprovider.d.ts +4 -4
- package/dist/components/themeprovider.js +16 -5
- package/dist/components/toast.d.ts +1 -1
- package/dist/components/toast.js +23 -14
- package/dist/components/toc/default.d.ts +1 -1
- package/dist/components/toc/default.js +28 -13
- package/dist/components/toc/hook.js +28 -14
- package/dist/components/toc/index.js +8 -4
- package/dist/components/toc/inline.js +12 -2
- package/dist/components/toc/minimal.js +11 -5
- package/dist/components/toc/zigzag.d.ts +1 -1
- package/dist/components/toc/zigzag.js +37 -17
- package/dist/components/tocprogress.d.ts +1 -1
- package/dist/components/tocprogress.js +66 -34
- package/dist/components/tooltip.d.ts +1 -1
- package/dist/components/tooltip.js +20 -8
- package/dist/components/trigger.js +13 -5
- package/dist/components/twoslash.js +49 -26
- package/dist/components/typetable.js +23 -4
- package/dist/components/typewriter.js +6 -2
- package/dist/components/version.js +40 -14
- package/dist/components/video.js +25 -15
- package/dist/components/zoom.js +6 -2
- package/dist/config.d.ts +2 -2
- package/dist/config.js +56 -30
- package/dist/content.d.ts +5 -5
- package/dist/content.js +121 -57
- package/dist/contentcache.d.ts +10 -10
- package/dist/contentcache.js +9 -5
- package/dist/contentdiff.d.ts +4 -4
- package/dist/contentdiff.js +16 -8
- package/dist/contributors.d.ts +4 -4
- package/dist/contributors.js +49 -19
- package/dist/diff.d.ts +6 -6
- package/dist/diff.js +37 -16
- package/dist/draft.d.ts +11 -11
- package/dist/draft.js +9 -5
- package/dist/env.js +21 -7
- package/dist/export.js +4 -4
- package/dist/frontmatter.js +11 -9
- package/dist/github.js +60 -30
- package/dist/gitsource.d.ts +1 -1
- package/dist/gitsource.js +16 -9
- package/dist/hash.d.ts +6 -6
- package/dist/hash.js +19 -7
- package/dist/highlight.d.ts +4 -4
- package/dist/highlight.js +34 -14
- package/dist/hooks/anchor.js +26 -14
- package/dist/hooks/arrownav.js +25 -7
- package/dist/hooks/async.js +3 -3
- package/dist/hooks/battery.js +11 -3
- package/dist/hooks/breakpoint.js +10 -2
- package/dist/hooks/clickoutside.js +10 -3
- package/dist/hooks/clipboard-paste.js +7 -3
- package/dist/hooks/clipboard.d.ts +2 -2
- package/dist/hooks/clipboard.js +21 -15
- package/dist/hooks/copy.js +11 -6
- package/dist/hooks/countdown.js +1 -1
- package/dist/hooks/counter.js +1 -1
- package/dist/hooks/escapekey.js +6 -1
- package/dist/hooks/eventlistener.js +3 -1
- package/dist/hooks/eventsource.js +4 -2
- package/dist/hooks/eyedropper.js +7 -3
- package/dist/hooks/favicon.js +1 -1
- package/dist/hooks/fetch.js +12 -4
- package/dist/hooks/focustrap.js +20 -8
- package/dist/hooks/focuswithin.js +6 -2
- package/dist/hooks/form.d.ts +2 -2
- package/dist/hooks/form.js +15 -2
- package/dist/hooks/fullscreen.js +1 -1
- package/dist/hooks/geolocation.js +8 -8
- package/dist/hooks/hotkeys.js +19 -7
- package/dist/hooks/hover.d.ts +4 -1
- package/dist/hooks/hover.js +3 -1
- package/dist/hooks/idle.js +13 -3
- package/dist/hooks/infinitescroll.js +4 -2
- package/dist/hooks/interval.js +3 -1
- package/dist/hooks/inview.js +7 -3
- package/dist/hooks/keyboard.js +36 -12
- package/dist/hooks/keypress.js +6 -2
- package/dist/hooks/list.js +11 -1
- package/dist/hooks/longpress.js +3 -3
- package/dist/hooks/map.js +1 -1
- package/dist/hooks/measure.js +16 -7
- package/dist/hooks/mediarecorder.js +7 -3
- package/dist/hooks/networkstate.js +4 -2
- package/dist/hooks/os.js +12 -4
- package/dist/hooks/pagination.js +6 -4
- package/dist/hooks/permission.js +6 -2
- package/dist/hooks/queue.js +4 -2
- package/dist/hooks/readprogress.js +6 -2
- package/dist/hooks/resizeobserver.js +6 -4
- package/dist/hooks/script.js +1 -1
- package/dist/hooks/scrolllock.js +6 -2
- package/dist/hooks/scrollspy.js +4 -2
- package/dist/hooks/selection.js +6 -3
- package/dist/hooks/share.js +18 -9
- package/dist/hooks/speechrecognition.js +7 -3
- package/dist/hooks/stepper.js +4 -4
- package/dist/hooks/storage.js +9 -3
- package/dist/hooks/stylesheet.js +4 -2
- package/dist/hooks/textselection.js +6 -3
- package/dist/hooks/throttle.js +6 -2
- package/dist/hooks/undoredo.js +19 -11
- package/dist/hooks/vibrate.js +3 -1
- package/dist/hooks/viewtransition.js +8 -4
- package/dist/hooks/wakelock.js +12 -7
- package/dist/hooks/websocket.js +4 -2
- package/dist/hooks/windowsize.js +2 -2
- package/dist/i18n.d.ts +2 -2
- package/dist/i18n.js +27 -14
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/lastmodified.js +11 -5
- package/dist/linkcheck.d.ts +6 -6
- package/dist/linkcheck.js +55 -14
- package/dist/llms.js +20 -4
- package/dist/manifest.js +7 -7
- package/dist/mcp.js +28 -22
- package/dist/mdtoc.d.ts +4 -4
- package/dist/mdtoc.js +11 -5
- package/dist/mdxscope.d.ts +2 -2
- package/dist/mdxscope.js +3 -1
- package/dist/meta.js +19 -7
- package/dist/migrate.js +35 -25
- package/dist/navgen.d.ts +8 -8
- package/dist/navgen.js +73 -30
- package/dist/navtree.d.ts +1 -1
- package/dist/navtree.js +39 -19
- package/dist/oembed.d.ts +4 -4
- package/dist/oembed.js +24 -18
- package/dist/ogimage.d.ts +11 -11
- package/dist/ogimage.js +24 -24
- package/dist/openapi.js +60 -33
- package/dist/openapiguard.js +21 -11
- package/dist/openapiutil.js +66 -20
- package/dist/orama.js +52 -34
- package/dist/pipeline.d.ts +4 -4
- package/dist/pipeline.js +4 -4
- package/dist/preload.d.ts +2 -2
- package/dist/preload.js +4 -4
- package/dist/ranking.d.ts +6 -6
- package/dist/ranking.js +39 -13
- package/dist/readtime.js +3 -1
- package/dist/redirects.d.ts +2 -2
- package/dist/redirects.js +20 -12
- package/dist/rehype.js +16 -9
- package/dist/rehypeautolink.d.ts +2 -2
- package/dist/rehypeautolink.js +25 -23
- package/dist/rehypecode.js +38 -28
- package/dist/rehypecopy.js +17 -13
- package/dist/rehypeinline.js +33 -27
- package/dist/rehypelinks.js +28 -20
- package/dist/rehyperaw.js +9 -3
- package/dist/rehypeslug.d.ts +1 -1
- package/dist/rehypeslug.js +23 -19
- package/dist/rehypetablewrap.d.ts +2 -2
- package/dist/rehypetablewrap.js +9 -5
- package/dist/rehypetoc.d.ts +1 -1
- package/dist/rehypetoc.js +15 -7
- package/dist/remark.js +28 -13
- package/dist/remarkadmonition.js +40 -14
- package/dist/remarkannotation.d.ts +2 -2
- package/dist/remarkannotation.js +26 -10
- package/dist/remarkbadge.js +43 -31
- package/dist/remarkblockmath.js +29 -15
- package/dist/remarkcallout.js +32 -14
- package/dist/remarkcaption.js +28 -16
- package/dist/remarkcodetitle.js +29 -13
- package/dist/remarkcolumns.js +22 -10
- package/dist/remarkdetails.js +34 -14
- package/dist/remarkdirective.js +47 -20
- package/dist/remarkembed.js +38 -22
- package/dist/remarkfiletree.js +29 -19
- package/dist/remarkfootnote.js +46 -18
- package/dist/remarkgfm.js +13 -8
- package/dist/remarkheadingid.js +16 -6
- package/dist/remarkimage.js +54 -34
- package/dist/remarkinclude.js +20 -8
- package/dist/remarkinstall.js +20 -12
- package/dist/remarklinkcard.js +33 -14
- package/dist/remarkmath.js +34 -15
- package/dist/remarkmermaid.js +10 -6
- package/dist/remarkmeta.d.ts +2 -2
- package/dist/remarkmeta.js +15 -5
- package/dist/remarkreadingtime.d.ts +2 -2
- package/dist/remarkreadingtime.js +3 -1
- package/dist/remarksteps.js +26 -14
- package/dist/remarkstructure.js +16 -10
- package/dist/remarktabs.js +31 -14
- package/dist/remarktoc.js +40 -24
- package/dist/remarkts2js.js +51 -40
- package/dist/remarktwoslash.d.ts +4 -4
- package/dist/remarktwoslash.js +24 -14
- package/dist/remarkvideo.d.ts +4 -4
- package/dist/remarkvideo.js +42 -16
- package/dist/schema.d.ts +14 -14
- package/dist/schema.js +2 -2
- package/dist/search.js +106 -48
- package/dist/searchindex.js +86 -34
- package/dist/searchpolicy.js +1 -1
- package/dist/searchscore.js +5 -5
- package/dist/searchtypo.js +30 -10
- package/dist/seo.d.ts +2 -2
- package/dist/seo.js +14 -14
- package/dist/shortcodes.d.ts +4 -4
- package/dist/shortcodes.js +25 -20
- package/dist/sitemap.js +18 -8
- package/dist/snippets.js +26 -18
- package/dist/source.js +75 -41
- package/dist/stats.d.ts +4 -4
- package/dist/stats.js +18 -12
- package/dist/testing.d.ts +7 -7
- package/dist/testing.js +74 -29
- package/dist/themeutil.d.ts +6 -6
- package/dist/themeutil.js +145 -27
- package/dist/typegen.js +31 -12
- package/dist/validate.js +19 -7
- package/dist/validator.d.ts +11 -11
- package/dist/validator.js +68 -19
- package/dist/versioning.d.ts +7 -7
- package/dist/versioning.js +27 -11
- package/dist/watcher.js +39 -15
- package/dist/webhook.d.ts +6 -6
- package/dist/webhook.js +34 -12
- package/dist/workspace.js +26 -12
- package/package.json +137 -137
- package/styles/reset.css +1 -1
package/dist/searchtypo.js
CHANGED
|
@@ -1,21 +1,33 @@
|
|
|
1
1
|
function oneedit(left, right) {
|
|
2
2
|
const a = left.length;
|
|
3
3
|
const b = right.length;
|
|
4
|
-
if (Math.abs(a - b) > 1)
|
|
4
|
+
if (Math.abs(a - b) > 1) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
5
7
|
if (a === b) {
|
|
6
8
|
const diffs = [];
|
|
7
9
|
for (let i2 = 0; i2 < a; i2++) {
|
|
8
10
|
if (left[i2] !== right[i2]) {
|
|
9
11
|
diffs.push(i2);
|
|
10
|
-
if (diffs.length > 2)
|
|
12
|
+
if (diffs.length > 2) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
11
15
|
}
|
|
12
16
|
}
|
|
13
|
-
if (diffs.length === 1)
|
|
14
|
-
|
|
17
|
+
if (diffs.length === 1) {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
if (diffs.length !== 2) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
15
23
|
const first = diffs[0];
|
|
16
24
|
const second = diffs[1];
|
|
17
|
-
if (first === void 0 || second === void 0)
|
|
18
|
-
|
|
25
|
+
if (first === void 0 || second === void 0) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
if (second !== first + 1) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
19
31
|
return left[first] === right[second] && left[second] === right[first];
|
|
20
32
|
}
|
|
21
33
|
const longer = a > b ? left : right;
|
|
@@ -30,16 +42,24 @@ function oneedit(left, right) {
|
|
|
30
42
|
continue;
|
|
31
43
|
}
|
|
32
44
|
diff++;
|
|
33
|
-
if (diff > 1)
|
|
45
|
+
if (diff > 1) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
34
48
|
i++;
|
|
35
49
|
}
|
|
36
50
|
return true;
|
|
37
51
|
}
|
|
38
52
|
function typomatch(term, words) {
|
|
39
|
-
if (term.length < 3)
|
|
53
|
+
if (term.length < 3) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
40
56
|
for (const word of words) {
|
|
41
|
-
if (Math.abs(word.length - term.length) > 1)
|
|
42
|
-
|
|
57
|
+
if (Math.abs(word.length - term.length) > 1) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
if (word === term || oneedit(term, word)) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
43
63
|
}
|
|
44
64
|
return false;
|
|
45
65
|
}
|
package/dist/seo.d.ts
CHANGED
|
@@ -17,9 +17,9 @@ interface PageSeo {
|
|
|
17
17
|
noindex?: boolean;
|
|
18
18
|
}
|
|
19
19
|
declare function createSeo(config: SeoConfig): {
|
|
20
|
-
meta: (page: PageSeo) => Record<string, string>[];
|
|
21
|
-
jsonLd: (page: PageSeo) => object;
|
|
22
20
|
canonical: (page: PageSeo) => string;
|
|
21
|
+
jsonLd: (page: PageSeo) => object;
|
|
22
|
+
meta: (page: PageSeo) => Record<string, string>[];
|
|
23
23
|
title: (page: PageSeo) => string;
|
|
24
24
|
};
|
|
25
25
|
|
package/dist/seo.js
CHANGED
|
@@ -15,25 +15,25 @@ function createSeo(config) {
|
|
|
15
15
|
const image = page.image ?? config.defaultImage;
|
|
16
16
|
const type = page.type ?? "article";
|
|
17
17
|
const tags = [
|
|
18
|
-
{ property: "og:title"
|
|
19
|
-
{ property: "og:url"
|
|
20
|
-
{ property: "og:type"
|
|
21
|
-
{ property: "og:site_name"
|
|
22
|
-
{ property: "og:locale"
|
|
23
|
-
{
|
|
18
|
+
{ content: formatted, property: "og:title" },
|
|
19
|
+
{ content: url, property: "og:url" },
|
|
20
|
+
{ content: type, property: "og:type" },
|
|
21
|
+
{ content: config.siteName, property: "og:site_name" },
|
|
22
|
+
{ content: locale, property: "og:locale" },
|
|
23
|
+
{ content: "summary_large_image", name: "twitter:card" }
|
|
24
24
|
];
|
|
25
25
|
if (page.description) {
|
|
26
|
-
tags.unshift({
|
|
27
|
-
tags.push({ property: "og:description"
|
|
26
|
+
tags.unshift({ content: page.description, name: "description" });
|
|
27
|
+
tags.push({ content: page.description, property: "og:description" });
|
|
28
28
|
}
|
|
29
29
|
if (image) {
|
|
30
|
-
tags.push({ property: "og:image"
|
|
30
|
+
tags.push({ content: image, property: "og:image" });
|
|
31
31
|
}
|
|
32
32
|
if (config.twitter) {
|
|
33
|
-
tags.push({ name: "twitter:site"
|
|
33
|
+
tags.push({ content: config.twitter, name: "twitter:site" });
|
|
34
34
|
}
|
|
35
35
|
if (page.noindex) {
|
|
36
|
-
tags.push({
|
|
36
|
+
tags.push({ content: "noindex,nofollow", name: "robots" });
|
|
37
37
|
}
|
|
38
38
|
return tags;
|
|
39
39
|
}
|
|
@@ -42,11 +42,11 @@ function createSeo(config) {
|
|
|
42
42
|
"@context": "https://schema.org",
|
|
43
43
|
"@type": "TechArticle",
|
|
44
44
|
headline: title(page),
|
|
45
|
-
url: canonical(page),
|
|
46
45
|
publisher: {
|
|
47
46
|
"@type": "Organization",
|
|
48
47
|
name: config.siteName
|
|
49
|
-
}
|
|
48
|
+
},
|
|
49
|
+
url: canonical(page)
|
|
50
50
|
};
|
|
51
51
|
if (page.description) {
|
|
52
52
|
data.description = page.description;
|
|
@@ -63,7 +63,7 @@ function createSeo(config) {
|
|
|
63
63
|
}
|
|
64
64
|
return data;
|
|
65
65
|
}
|
|
66
|
-
return {
|
|
66
|
+
return { canonical, jsonLd, meta, title };
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
export { createSeo };
|
package/dist/shortcodes.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
interface ShortcodeDefinition {
|
|
2
2
|
name: string;
|
|
3
3
|
transform: (attrs: Record<string, string>, content?: string) => string;
|
|
4
|
-
}
|
|
5
|
-
|
|
4
|
+
}
|
|
5
|
+
interface ShortcodeConfig {
|
|
6
6
|
definitions: ShortcodeDefinition[];
|
|
7
|
-
}
|
|
7
|
+
}
|
|
8
8
|
declare function parseAttrs(tag: string): Record<string, string>;
|
|
9
9
|
declare function registerShortcode(name: string, transform: (attrs: Record<string, string>, content?: string) => string): ShortcodeDefinition;
|
|
10
10
|
declare function processShortcodes(content: string, config: ShortcodeConfig): string;
|
package/dist/shortcodes.js
CHANGED
|
@@ -8,7 +8,9 @@ function parseAttrs(tag) {
|
|
|
8
8
|
while ((match = pattern.exec(tag)) !== null) {
|
|
9
9
|
const key = match[1];
|
|
10
10
|
const value = match[2];
|
|
11
|
-
if (!key || value === void 0)
|
|
11
|
+
if (!key || value === void 0) {
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
12
14
|
attrs[key] = value;
|
|
13
15
|
}
|
|
14
16
|
return attrs;
|
|
@@ -23,35 +25,38 @@ function processShortcodes(content, config) {
|
|
|
23
25
|
`\\{\\{${def.name}([^}]*)\\}\\}([\\s\\S]*?)\\{\\{/${def.name}\\}\\}`,
|
|
24
26
|
"g"
|
|
25
27
|
);
|
|
26
|
-
result = result.replace(
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
result = result.replace(
|
|
29
|
+
block,
|
|
30
|
+
(_, tag, inner) => def.transform(parseAttrs(tag), inner)
|
|
31
|
+
);
|
|
29
32
|
const inline = new RegExp(`\\{\\{${def.name}([^}]*)\\}\\}`, "g");
|
|
30
|
-
result = result.replace(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
result = result.replace(
|
|
34
|
+
inline,
|
|
35
|
+
(_, tag) => def.transform(parseAttrs(tag))
|
|
36
|
+
);
|
|
33
37
|
}
|
|
34
38
|
return result;
|
|
35
39
|
}
|
|
36
40
|
const builtinShortcodes = [
|
|
37
|
-
registerShortcode("youtube", (attrs) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}),
|
|
43
|
-
registerShortcode("badge", (attrs) => {
|
|
44
|
-
return `<Badge>${attrs.text}</Badge>`;
|
|
45
|
-
}),
|
|
41
|
+
registerShortcode("youtube", (attrs) => `<YouTube id="${attrs.id}" />`),
|
|
42
|
+
registerShortcode(
|
|
43
|
+
"note",
|
|
44
|
+
(attrs, content) => `<Note type="${attrs.type}">${content ?? ""}</Note>`
|
|
45
|
+
),
|
|
46
|
+
registerShortcode("badge", (attrs) => `<Badge>${attrs.text}</Badge>`),
|
|
46
47
|
registerShortcode("include", (attrs) => {
|
|
47
48
|
try {
|
|
48
|
-
const file = attrs
|
|
49
|
-
if (!file || file.includes("..") || isAbsolute(file))
|
|
49
|
+
const { file } = attrs;
|
|
50
|
+
if (!file || file.includes("..") || isAbsolute(file)) {
|
|
51
|
+
return "";
|
|
52
|
+
}
|
|
50
53
|
const root = resolve(process.cwd());
|
|
51
54
|
const full = resolve(root, file);
|
|
52
55
|
const rooted = `${root}/`;
|
|
53
|
-
if (full !== root && !full.startsWith(rooted))
|
|
54
|
-
|
|
56
|
+
if (full !== root && !full.startsWith(rooted)) {
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
return readFileSync(full, "utf8");
|
|
55
60
|
} catch {
|
|
56
61
|
return "";
|
|
57
62
|
}
|
package/dist/sitemap.js
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
function escape(str) {
|
|
2
|
-
return str.
|
|
2
|
+
return str.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
3
3
|
}
|
|
4
4
|
function urlEntry(entry) {
|
|
5
5
|
let xml = ` <url>
|
|
6
6
|
<loc>${escape(entry.url)}</loc>`;
|
|
7
|
-
if (entry.lastmod)
|
|
7
|
+
if (entry.lastmod) {
|
|
8
|
+
xml += `
|
|
8
9
|
<lastmod>${escape(entry.lastmod)}</lastmod>`;
|
|
9
|
-
|
|
10
|
+
}
|
|
11
|
+
if (entry.changefreq) {
|
|
12
|
+
xml += `
|
|
10
13
|
<changefreq>${entry.changefreq}</changefreq>`;
|
|
11
|
-
|
|
14
|
+
}
|
|
15
|
+
if (entry.priority !== void 0) {
|
|
16
|
+
xml += `
|
|
12
17
|
<priority>${entry.priority}</priority>`;
|
|
18
|
+
}
|
|
13
19
|
xml += "\n </url>";
|
|
14
20
|
return xml;
|
|
15
21
|
}
|
|
@@ -23,9 +29,11 @@ function generateSitemap(config, entries) {
|
|
|
23
29
|
].join("\n");
|
|
24
30
|
}
|
|
25
31
|
function generateSitemapIndex(baseUrl, sitemaps) {
|
|
26
|
-
const entries = sitemaps.map(
|
|
32
|
+
const entries = sitemaps.map(
|
|
33
|
+
(url) => ` <sitemap>
|
|
27
34
|
<loc>${escape(`${baseUrl}${url}`)}</loc>
|
|
28
|
-
</sitemap>`
|
|
35
|
+
</sitemap>`
|
|
36
|
+
).join("\n");
|
|
29
37
|
return [
|
|
30
38
|
`<?xml version="1.0" encoding="UTF-8"?>`,
|
|
31
39
|
`<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">`,
|
|
@@ -53,7 +61,9 @@ function entriesToRss(config, entries) {
|
|
|
53
61
|
].join("\n");
|
|
54
62
|
}
|
|
55
63
|
function depth(slug) {
|
|
56
|
-
if (slug === "")
|
|
64
|
+
if (slug === "") {
|
|
65
|
+
return 0;
|
|
66
|
+
}
|
|
57
67
|
return slug.split("/").length;
|
|
58
68
|
}
|
|
59
69
|
function docsToEntries(config, docs) {
|
|
@@ -62,7 +72,7 @@ function docsToEntries(config, docs) {
|
|
|
62
72
|
const d = depth(doc.slug);
|
|
63
73
|
const priority = d === 0 ? 1 : d === 1 ? 0.8 : d === 2 ? 0.6 : 0.4;
|
|
64
74
|
const url = `${config.baseUrl}${prefix}${doc.slug ? `/${doc.slug}` : ""}`;
|
|
65
|
-
return {
|
|
75
|
+
return { priority, url };
|
|
66
76
|
});
|
|
67
77
|
}
|
|
68
78
|
|
package/dist/snippets.js
CHANGED
|
@@ -3,19 +3,19 @@ import { join, extname, relative } from 'node:path';
|
|
|
3
3
|
|
|
4
4
|
const defaults = [".ts", ".tsx", ".js", ".jsx"];
|
|
5
5
|
const languages = {
|
|
6
|
-
".
|
|
7
|
-
".
|
|
6
|
+
".css": "css",
|
|
7
|
+
".go": "go",
|
|
8
|
+
".html": "html",
|
|
8
9
|
".js": "javascript",
|
|
10
|
+
".json": "json",
|
|
9
11
|
".jsx": "javascript",
|
|
10
12
|
".py": "python",
|
|
11
|
-
".go": "go",
|
|
12
13
|
".rs": "rust",
|
|
13
|
-
".
|
|
14
|
-
".
|
|
15
|
-
".
|
|
14
|
+
".sh": "bash",
|
|
15
|
+
".ts": "typescript",
|
|
16
|
+
".tsx": "typescript",
|
|
16
17
|
".yaml": "yaml",
|
|
17
|
-
".yml": "yaml"
|
|
18
|
-
".sh": "bash"
|
|
18
|
+
".yml": "yaml"
|
|
19
19
|
};
|
|
20
20
|
const regionRe = /(?:\/\/|\/\*|#|\{\/\*)\s*#region\s+(\S+)(?:\s*\*\/|\s*\*\/\})?/;
|
|
21
21
|
const endRe = /(?:\/\/|\/\*|#|\{\/\*)\s*#endregion\s+(\S+)(?:\s*\*\/|\s*\*\/\})?/;
|
|
@@ -24,7 +24,9 @@ async function collect(dir, exts) {
|
|
|
24
24
|
const nested = await Promise.all(
|
|
25
25
|
entries.map((e) => {
|
|
26
26
|
const full = join(dir, e.name);
|
|
27
|
-
if (e.isDirectory())
|
|
27
|
+
if (e.isDirectory()) {
|
|
28
|
+
return collect(full, exts);
|
|
29
|
+
}
|
|
28
30
|
return exts.includes(extname(e.name)) ? [full] : [];
|
|
29
31
|
})
|
|
30
32
|
);
|
|
@@ -37,7 +39,9 @@ function parse(content, filepath) {
|
|
|
37
39
|
const results = [];
|
|
38
40
|
for (let i = 0; i < lines.length; i++) {
|
|
39
41
|
const line = lines[i];
|
|
40
|
-
if (!line)
|
|
42
|
+
if (!line) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
41
45
|
const start = line.match(regionRe);
|
|
42
46
|
const startId = start?.[1];
|
|
43
47
|
if (startId) {
|
|
@@ -48,15 +52,17 @@ function parse(content, filepath) {
|
|
|
48
52
|
const endId = end?.[1];
|
|
49
53
|
if (endId && open.has(endId)) {
|
|
50
54
|
const s = open.get(endId);
|
|
51
|
-
if (s === void 0)
|
|
55
|
+
if (s === void 0) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
52
58
|
open.delete(endId);
|
|
53
59
|
results.push({
|
|
54
|
-
id: `${relative(process.cwd(), filepath)}:${endId}`,
|
|
55
|
-
file: filepath,
|
|
56
60
|
code: lines.slice(s + 1, i).join("\n"),
|
|
61
|
+
endLine: i,
|
|
62
|
+
file: filepath,
|
|
63
|
+
id: `${relative(process.cwd(), filepath)}:${endId}`,
|
|
57
64
|
lang,
|
|
58
|
-
startLine: s + 2
|
|
59
|
-
endLine: i
|
|
65
|
+
startLine: s + 2
|
|
60
66
|
});
|
|
61
67
|
}
|
|
62
68
|
}
|
|
@@ -68,7 +74,7 @@ async function extractSnippets(config) {
|
|
|
68
74
|
for (const dir of config.dirs) {
|
|
69
75
|
const files = await collect(dir, exts);
|
|
70
76
|
for (const file of files) {
|
|
71
|
-
snippets.push(...parse(await readFile(file, "
|
|
77
|
+
snippets.push(...parse(await readFile(file, "utf8"), file));
|
|
72
78
|
}
|
|
73
79
|
}
|
|
74
80
|
return snippets;
|
|
@@ -78,11 +84,13 @@ function getSnippet(snippets, id) {
|
|
|
78
84
|
}
|
|
79
85
|
function generateSnippetMap(snippets) {
|
|
80
86
|
const map = {};
|
|
81
|
-
for (const s of snippets)
|
|
87
|
+
for (const s of snippets) {
|
|
88
|
+
map[s.id] = s.code;
|
|
89
|
+
}
|
|
82
90
|
return map;
|
|
83
91
|
}
|
|
84
92
|
async function extractFileSnippet(filepath, startLine, endLine) {
|
|
85
|
-
const lines = (await readFile(filepath, "
|
|
93
|
+
const lines = (await readFile(filepath, "utf8")).split("\n");
|
|
86
94
|
return lines.slice(startLine - 1, endLine).join("\n");
|
|
87
95
|
}
|
|
88
96
|
|
package/dist/source.js
CHANGED
|
@@ -12,39 +12,53 @@ function createRemoteSource(config) {
|
|
|
12
12
|
const filecache = createcache(ttl);
|
|
13
13
|
const searchcache = createcache(ttl);
|
|
14
14
|
return {
|
|
15
|
-
async list() {
|
|
16
|
-
const cached = listcache.get("list");
|
|
17
|
-
if (cached) return cached;
|
|
18
|
-
const docs = await loaddocs(docsUrl);
|
|
19
|
-
if (docs.length > 0) {
|
|
20
|
-
listcache.set("list", docs);
|
|
21
|
-
return docs;
|
|
22
|
-
}
|
|
23
|
-
const llms = await loadllms(indexUrl, base);
|
|
24
|
-
listcache.set("list", llms);
|
|
25
|
-
return llms;
|
|
26
|
-
},
|
|
27
15
|
async get(slug) {
|
|
28
16
|
const path = slug.length === 0 ? "index" : slug.join("/");
|
|
29
17
|
const cached = filecache.get(path);
|
|
30
|
-
if (cached)
|
|
18
|
+
if (cached) {
|
|
19
|
+
return cached;
|
|
20
|
+
}
|
|
31
21
|
const normalized = slug.length === 0 ? "index" : slug.map((part) => encodeURIComponent(part)).join("/");
|
|
32
22
|
const res = await fetch(`${rawUrl}/${normalized}`);
|
|
33
|
-
if (!res.ok)
|
|
23
|
+
if (!res.ok) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
34
26
|
const source = await res.text();
|
|
35
27
|
const parsed = parsefrontmatter(source);
|
|
36
28
|
const docs = await this.list();
|
|
37
|
-
const item = docs.find(
|
|
29
|
+
const item = docs.find(
|
|
30
|
+
(doc) => doc.slug === path || path === "index" && doc.slug === ""
|
|
31
|
+
);
|
|
38
32
|
const data = { ...parsed.data };
|
|
39
|
-
if (item?.title)
|
|
40
|
-
|
|
33
|
+
if (item?.title) {
|
|
34
|
+
data.title = item.title;
|
|
35
|
+
}
|
|
36
|
+
if (item?.description) {
|
|
37
|
+
data.description = item.description;
|
|
38
|
+
}
|
|
41
39
|
const value = { content: parsed.content, data };
|
|
42
40
|
filecache.set(path, value);
|
|
43
41
|
return value;
|
|
44
42
|
},
|
|
43
|
+
async list() {
|
|
44
|
+
const cached = listcache.get("list");
|
|
45
|
+
if (cached) {
|
|
46
|
+
return cached;
|
|
47
|
+
}
|
|
48
|
+
const docs = await loaddocs(docsUrl);
|
|
49
|
+
if (docs.length > 0) {
|
|
50
|
+
listcache.set("list", docs);
|
|
51
|
+
return docs;
|
|
52
|
+
}
|
|
53
|
+
const llms = await loadllms(indexUrl, base);
|
|
54
|
+
listcache.set("list", llms);
|
|
55
|
+
return llms;
|
|
56
|
+
},
|
|
45
57
|
async search() {
|
|
46
58
|
const cached = searchcache.get("search");
|
|
47
|
-
if (cached)
|
|
59
|
+
if (cached) {
|
|
60
|
+
return cached;
|
|
61
|
+
}
|
|
48
62
|
const docs = await loadsearch(searchIndexUrl);
|
|
49
63
|
searchcache.set("search", docs);
|
|
50
64
|
return docs;
|
|
@@ -56,7 +70,9 @@ function createcache(ttl) {
|
|
|
56
70
|
return {
|
|
57
71
|
get(key) {
|
|
58
72
|
const value = store.get(key);
|
|
59
|
-
if (!value)
|
|
73
|
+
if (!value) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
60
76
|
if (Date.now() - value.at > ttl) {
|
|
61
77
|
store.delete(key);
|
|
62
78
|
return null;
|
|
@@ -64,34 +80,36 @@ function createcache(ttl) {
|
|
|
64
80
|
return value.data;
|
|
65
81
|
},
|
|
66
82
|
set(key, data) {
|
|
67
|
-
store.set(key, {
|
|
83
|
+
store.set(key, { at: Date.now(), data });
|
|
68
84
|
}
|
|
69
85
|
};
|
|
70
86
|
}
|
|
71
87
|
const docsSchema = z.object({
|
|
72
88
|
data: z.array(
|
|
73
89
|
z.object({
|
|
90
|
+
description: z.string().optional(),
|
|
74
91
|
slug: z.string(),
|
|
75
|
-
title: z.string()
|
|
76
|
-
description: z.string().optional()
|
|
92
|
+
title: z.string()
|
|
77
93
|
})
|
|
78
94
|
)
|
|
79
95
|
});
|
|
80
96
|
const indexSchema = z.object({
|
|
81
97
|
documents: z.array(
|
|
82
98
|
z.object({
|
|
83
|
-
|
|
84
|
-
title: z.string(),
|
|
99
|
+
content: z.string(),
|
|
85
100
|
description: z.string().optional(),
|
|
86
101
|
headings: z.array(z.string()),
|
|
87
|
-
|
|
102
|
+
path: z.string(),
|
|
103
|
+
title: z.string()
|
|
88
104
|
})
|
|
89
105
|
)
|
|
90
106
|
});
|
|
91
107
|
async function loaddocs(url) {
|
|
92
108
|
try {
|
|
93
109
|
const res = await fetch(url);
|
|
94
|
-
if (!res.ok)
|
|
110
|
+
if (!res.ok) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
95
113
|
const data = docsSchema.parse(await res.json());
|
|
96
114
|
return data.data;
|
|
97
115
|
} catch {
|
|
@@ -101,14 +119,16 @@ async function loaddocs(url) {
|
|
|
101
119
|
async function loadsearch(url) {
|
|
102
120
|
try {
|
|
103
121
|
const res = await fetch(url);
|
|
104
|
-
if (!res.ok)
|
|
122
|
+
if (!res.ok) {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
105
125
|
const data = indexSchema.parse(await res.json());
|
|
106
126
|
return data.documents.map((doc) => ({
|
|
107
|
-
slug: normalizepath(doc.path),
|
|
108
|
-
title: doc.title,
|
|
109
|
-
description: doc.description,
|
|
110
127
|
content: doc.content,
|
|
111
|
-
|
|
128
|
+
description: doc.description,
|
|
129
|
+
headings: headings(doc.headings),
|
|
130
|
+
slug: normalizepath(doc.path),
|
|
131
|
+
title: doc.title
|
|
112
132
|
}));
|
|
113
133
|
} catch {
|
|
114
134
|
return [];
|
|
@@ -117,7 +137,9 @@ async function loadsearch(url) {
|
|
|
117
137
|
async function loadllms(url, base) {
|
|
118
138
|
try {
|
|
119
139
|
const res = await fetch(url);
|
|
120
|
-
if (!res.ok)
|
|
140
|
+
if (!res.ok) {
|
|
141
|
+
return [];
|
|
142
|
+
}
|
|
121
143
|
const text = await res.text();
|
|
122
144
|
return parseLlmsIndex(text, base);
|
|
123
145
|
} catch {
|
|
@@ -128,20 +150,28 @@ function parseLlmsIndex(text, baseUrl) {
|
|
|
128
150
|
const docs = [];
|
|
129
151
|
for (const line of text.split("\n")) {
|
|
130
152
|
const match = line.match(/^- \[(.+?)\]\((.+?)\)(?:: (.+))?$/);
|
|
131
|
-
if (!match)
|
|
153
|
+
if (!match) {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
132
156
|
const title = match[1];
|
|
133
157
|
const url = match[2];
|
|
134
|
-
if (!title || !url)
|
|
158
|
+
if (!title || !url) {
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
135
161
|
const description = match[3]?.trim();
|
|
136
162
|
const slug = slugfrom(url, baseUrl);
|
|
137
|
-
if (!slug && url !== `${baseUrl}/docs`)
|
|
138
|
-
|
|
163
|
+
if (!slug && url !== `${baseUrl}/docs`) {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
docs.push({ description, slug, title });
|
|
139
167
|
}
|
|
140
168
|
return docs;
|
|
141
169
|
}
|
|
142
170
|
function slugfrom(value, base) {
|
|
143
171
|
const parsed = parseurl(value, base);
|
|
144
|
-
if (!parsed)
|
|
172
|
+
if (!parsed) {
|
|
173
|
+
return "";
|
|
174
|
+
}
|
|
145
175
|
const path = parsed.pathname.replace(/^\/docs\/?/, "").replace(/\/$/, "").trim();
|
|
146
176
|
return normalizepath(path);
|
|
147
177
|
}
|
|
@@ -159,7 +189,7 @@ function trimslash(value) {
|
|
|
159
189
|
return value.replace(/\/+$/, "");
|
|
160
190
|
}
|
|
161
191
|
function headingid(text) {
|
|
162
|
-
return text.toLowerCase().
|
|
192
|
+
return text.toLowerCase().replaceAll(/\s+/g, "-").replaceAll(/[^a-z0-9_-]/g, "").replaceAll(/-+/g, "-").replaceAll(/^-|-$/g, "");
|
|
163
193
|
}
|
|
164
194
|
function parsefrontmatter(source) {
|
|
165
195
|
try {
|
|
@@ -171,16 +201,20 @@ function parsefrontmatter(source) {
|
|
|
171
201
|
}
|
|
172
202
|
}
|
|
173
203
|
function headings(values) {
|
|
174
|
-
if (values.length === 0)
|
|
204
|
+
if (values.length === 0) {
|
|
205
|
+
return void 0;
|
|
206
|
+
}
|
|
175
207
|
const seen = /* @__PURE__ */ new Map();
|
|
176
208
|
const list = [];
|
|
177
209
|
for (const text of values) {
|
|
178
210
|
const base = headingid(text);
|
|
179
|
-
if (!base)
|
|
211
|
+
if (!base) {
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
180
214
|
const count = seen.get(base) ?? 0;
|
|
181
215
|
seen.set(base, count + 1);
|
|
182
216
|
const id = count === 0 ? base : `${base}-${count}`;
|
|
183
|
-
list.push({ id,
|
|
217
|
+
list.push({ id, level: 2, text });
|
|
184
218
|
}
|
|
185
219
|
return list.length > 0 ? list : void 0;
|
|
186
220
|
}
|
package/dist/stats.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
interface DocsStats {
|
|
2
2
|
totalPages: number;
|
|
3
3
|
totalWords: number;
|
|
4
4
|
avgWords: number;
|
|
@@ -8,15 +8,15 @@ type DocsStats = {
|
|
|
8
8
|
totalImages: number;
|
|
9
9
|
languages: Record<string, number>;
|
|
10
10
|
lastUpdated: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
11
|
+
}
|
|
12
|
+
interface PageStats {
|
|
13
13
|
path: string;
|
|
14
14
|
words: number;
|
|
15
15
|
headings: number;
|
|
16
16
|
links: number;
|
|
17
17
|
codeBlocks: number;
|
|
18
18
|
images: number;
|
|
19
|
-
}
|
|
19
|
+
}
|
|
20
20
|
declare function analyzePage(content: string, path: string): PageStats;
|
|
21
21
|
declare function analyzeDocs(dir: string): Promise<DocsStats>;
|
|
22
22
|
declare function formatStats(stats: DocsStats): string;
|