fromsrc 0.0.2 → 0.0.21
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 +17 -7
- 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 +17 -4
- 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 +33 -29
- 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 +6 -2
- package/dist/components/feedbackwidget.js +10 -4
- 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 +22 -17
- 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 +3 -2
- package/dist/components/panel.js +91 -15
- 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 +3 -1
- 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 +35 -22
- 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 +221 -56
- package/dist/components/sidebarfilter.d.ts +1 -1
- package/dist/components/sidebarfilter.js +30 -6
- package/dist/components/sidebarscript.d.ts +5 -0
- package/dist/components/sidebarscript.js +18 -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 +25 -3
- 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/config.js
CHANGED
|
@@ -2,18 +2,18 @@ import { readFile } from 'node:fs/promises';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
|
|
4
4
|
const defaults = {
|
|
5
|
-
description: "",
|
|
6
5
|
baseUrl: "/",
|
|
6
|
+
description: "",
|
|
7
7
|
docsDir: "docs",
|
|
8
|
-
|
|
9
|
-
theme: "default",
|
|
10
|
-
search: { provider: "local", options: {} },
|
|
11
|
-
sidebar: { defaultOpen: true, collapsible: true },
|
|
12
|
-
toc: { minDepth: 2, maxDepth: 3 },
|
|
13
|
-
i18n: { defaultLocale: "en", locales: ["en"] },
|
|
8
|
+
draft: false,
|
|
14
9
|
editUrl: "",
|
|
10
|
+
i18n: { defaultLocale: "en", locales: ["en"] },
|
|
15
11
|
lastUpdated: false,
|
|
16
|
-
|
|
12
|
+
outDir: ".fromsrc",
|
|
13
|
+
search: { options: {}, provider: "local" },
|
|
14
|
+
sidebar: { collapsible: true, defaultOpen: true },
|
|
15
|
+
theme: "default",
|
|
16
|
+
toc: { maxDepth: 3, minDepth: 2 }
|
|
17
17
|
};
|
|
18
18
|
function isrecord(value) {
|
|
19
19
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -25,32 +25,52 @@ function isboolean(value) {
|
|
|
25
25
|
return typeof value === "boolean";
|
|
26
26
|
}
|
|
27
27
|
function parseconfig(value) {
|
|
28
|
-
if (!isrecord(value))
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
if (!isrecord(value)) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const { title } = value;
|
|
32
|
+
if (!isstring(title)) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
31
35
|
const config = { title };
|
|
32
|
-
if (isstring(value.description))
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (isstring(value.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
if (
|
|
39
|
-
|
|
36
|
+
if (isstring(value.description)) {
|
|
37
|
+
config.description = value.description;
|
|
38
|
+
}
|
|
39
|
+
if (isstring(value.baseUrl)) {
|
|
40
|
+
config.baseUrl = value.baseUrl;
|
|
41
|
+
}
|
|
42
|
+
if (isstring(value.docsDir)) {
|
|
43
|
+
config.docsDir = value.docsDir;
|
|
44
|
+
}
|
|
45
|
+
if (isstring(value.outDir)) {
|
|
46
|
+
config.outDir = value.outDir;
|
|
47
|
+
}
|
|
48
|
+
if (isstring(value.theme)) {
|
|
49
|
+
config.theme = value.theme;
|
|
50
|
+
}
|
|
51
|
+
if (isstring(value.editUrl)) {
|
|
52
|
+
config.editUrl = value.editUrl;
|
|
53
|
+
}
|
|
54
|
+
if (isboolean(value.lastUpdated)) {
|
|
55
|
+
config.lastUpdated = value.lastUpdated;
|
|
56
|
+
}
|
|
57
|
+
if (isboolean(value.draft)) {
|
|
58
|
+
config.draft = value.draft;
|
|
59
|
+
}
|
|
40
60
|
if (isrecord(value.search)) {
|
|
41
61
|
const provider = isstring(value.search.provider) ? value.search.provider : void 0;
|
|
42
62
|
const options = isrecord(value.search.options) ? value.search.options : void 0;
|
|
43
|
-
config.search = {
|
|
63
|
+
config.search = { options, provider };
|
|
44
64
|
}
|
|
45
65
|
if (isrecord(value.sidebar)) {
|
|
46
66
|
const defaultOpen = isboolean(value.sidebar.defaultOpen) ? value.sidebar.defaultOpen : void 0;
|
|
47
67
|
const collapsible = isboolean(value.sidebar.collapsible) ? value.sidebar.collapsible : void 0;
|
|
48
|
-
config.sidebar = {
|
|
68
|
+
config.sidebar = { collapsible, defaultOpen };
|
|
49
69
|
}
|
|
50
70
|
if (isrecord(value.toc)) {
|
|
51
71
|
const minDepth = typeof value.toc.minDepth === "number" ? value.toc.minDepth : void 0;
|
|
52
72
|
const maxDepth = typeof value.toc.maxDepth === "number" ? value.toc.maxDepth : void 0;
|
|
53
|
-
config.toc = {
|
|
73
|
+
config.toc = { maxDepth, minDepth };
|
|
54
74
|
}
|
|
55
75
|
if (isrecord(value.i18n)) {
|
|
56
76
|
const defaultLocale = isstring(value.i18n.defaultLocale) ? value.i18n.defaultLocale : void 0;
|
|
@@ -63,24 +83,27 @@ function defineConfig(config) {
|
|
|
63
83
|
return config;
|
|
64
84
|
}
|
|
65
85
|
function resolveConfig(config) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
);
|
|
86
|
+
const base = { ...defaults };
|
|
87
|
+
const over = { ...config };
|
|
88
|
+
return mergeConfig(base, over);
|
|
70
89
|
}
|
|
71
90
|
async function loadConfig(dir) {
|
|
72
91
|
for (const name of ["fromsrc.config.ts", "fromsrc.config.js"]) {
|
|
73
92
|
try {
|
|
74
93
|
const mod = await import(/* webpackIgnore: true */ join(dir, name));
|
|
75
94
|
const parsed = parseconfig(mod.default ?? mod);
|
|
76
|
-
if (parsed)
|
|
95
|
+
if (parsed) {
|
|
96
|
+
return parsed;
|
|
97
|
+
}
|
|
77
98
|
} catch {
|
|
78
99
|
}
|
|
79
100
|
}
|
|
80
101
|
try {
|
|
81
|
-
const raw = await readFile(join(dir, "fromsrc.config.json"), "
|
|
102
|
+
const raw = await readFile(join(dir, "fromsrc.config.json"), "utf8");
|
|
82
103
|
const parsed = parseconfig(JSON.parse(raw));
|
|
83
|
-
if (parsed)
|
|
104
|
+
if (parsed) {
|
|
105
|
+
return parsed;
|
|
106
|
+
}
|
|
84
107
|
} catch {
|
|
85
108
|
}
|
|
86
109
|
throw new Error("no config found");
|
|
@@ -91,7 +114,10 @@ function mergeConfig(base, overrides) {
|
|
|
91
114
|
const b = base[key];
|
|
92
115
|
const o = overrides[key];
|
|
93
116
|
if (b && o && typeof b === "object" && typeof o === "object" && !Array.isArray(o)) {
|
|
94
|
-
result[key] = mergeConfig(
|
|
117
|
+
result[key] = mergeConfig(
|
|
118
|
+
b,
|
|
119
|
+
o
|
|
120
|
+
);
|
|
95
121
|
} else if (o !== void 0) {
|
|
96
122
|
result[key] = o;
|
|
97
123
|
}
|
package/dist/content.d.ts
CHANGED
|
@@ -26,6 +26,9 @@ interface ContentConfig<T extends SchemaType = typeof baseSchema> {
|
|
|
26
26
|
schema?: T;
|
|
27
27
|
}
|
|
28
28
|
declare function defineContent<T extends SchemaType>(config: ContentConfig<T>): {
|
|
29
|
+
getAllDocs: () => Promise<(z.TypeOf<T> & {
|
|
30
|
+
slug: string;
|
|
31
|
+
})[]>;
|
|
29
32
|
getDoc: (slug: string[]) => Promise<(z.TypeOf<T> & {
|
|
30
33
|
slug: string;
|
|
31
34
|
} & {
|
|
@@ -38,9 +41,6 @@ declare function defineContent<T extends SchemaType>(config: ContentConfig<T>):
|
|
|
38
41
|
content: string;
|
|
39
42
|
data: z.infer<T>;
|
|
40
43
|
})[]>;
|
|
41
|
-
getAllDocs: () => Promise<(z.TypeOf<T> & {
|
|
42
|
-
slug: string;
|
|
43
|
-
})[]>;
|
|
44
44
|
getNavigation: () => Promise<{
|
|
45
45
|
title: string;
|
|
46
46
|
items: (z.TypeOf<T> & {
|
|
@@ -54,10 +54,10 @@ declare function defineContent<T extends SchemaType>(config: ContentConfig<T>):
|
|
|
54
54
|
headings?: Heading[];
|
|
55
55
|
})[]>;
|
|
56
56
|
schema: z.ZodObject<{
|
|
57
|
-
title: z.ZodString;
|
|
58
57
|
description: z.ZodOptional<z.ZodString>;
|
|
59
|
-
order: z.ZodOptional<z.ZodNumber>;
|
|
60
58
|
draft: z.ZodOptional<z.ZodBoolean>;
|
|
59
|
+
order: z.ZodOptional<z.ZodNumber>;
|
|
60
|
+
title: z.ZodString;
|
|
61
61
|
}, "strip", z.ZodTypeAny, {
|
|
62
62
|
title: string;
|
|
63
63
|
order?: number | undefined;
|
package/dist/content.js
CHANGED
|
@@ -14,11 +14,13 @@ function isnotfound(error) {
|
|
|
14
14
|
}
|
|
15
15
|
async function readCached(filepath) {
|
|
16
16
|
if (!isProduction()) {
|
|
17
|
-
return readFile(filepath, "
|
|
17
|
+
return readFile(filepath, "utf8");
|
|
18
18
|
}
|
|
19
19
|
const cached = fileCache.get(filepath);
|
|
20
|
-
if (cached)
|
|
21
|
-
|
|
20
|
+
if (cached) {
|
|
21
|
+
return cached;
|
|
22
|
+
}
|
|
23
|
+
const content = await readFile(filepath, "utf8");
|
|
22
24
|
fileCache.set(filepath, content);
|
|
23
25
|
return content;
|
|
24
26
|
}
|
|
@@ -28,15 +30,19 @@ async function resolveSource(docsDir, slug) {
|
|
|
28
30
|
const indexPath = join(docsDir, `${path}/index.mdx`);
|
|
29
31
|
try {
|
|
30
32
|
const source = await readCached(filepath);
|
|
31
|
-
return {
|
|
33
|
+
return { actualPath: path, filepath, source };
|
|
32
34
|
} catch (error) {
|
|
33
|
-
if (!isnotfound(error))
|
|
35
|
+
if (!isnotfound(error)) {
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
34
38
|
}
|
|
35
39
|
try {
|
|
36
40
|
const source = await readCached(indexPath);
|
|
37
|
-
return {
|
|
41
|
+
return { actualPath: `${path}/index`, filepath: indexPath, source };
|
|
38
42
|
} catch (error) {
|
|
39
|
-
if (!isnotfound(error))
|
|
43
|
+
if (!isnotfound(error)) {
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
40
46
|
}
|
|
41
47
|
return null;
|
|
42
48
|
}
|
|
@@ -51,11 +57,15 @@ function defineContent(config) {
|
|
|
51
57
|
}
|
|
52
58
|
async function getDoc2(slug) {
|
|
53
59
|
const resolved = await resolveSource(config.dir, slug);
|
|
54
|
-
if (!resolved)
|
|
60
|
+
if (!resolved) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
55
63
|
try {
|
|
56
64
|
const { data, content } = matter(resolved.source);
|
|
57
65
|
const parsed = schema.parse(data);
|
|
58
|
-
if (isProduction() && isDraft(data))
|
|
66
|
+
if (isProduction() && isDraft(data)) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
59
69
|
return {
|
|
60
70
|
slug: resolved.actualPath,
|
|
61
71
|
...parsed,
|
|
@@ -73,7 +83,9 @@ function defineContent(config) {
|
|
|
73
83
|
}
|
|
74
84
|
}
|
|
75
85
|
async function getAllDocs2() {
|
|
76
|
-
if (isProduction() && docsCache)
|
|
86
|
+
if (isProduction() && docsCache) {
|
|
87
|
+
return docsCache;
|
|
88
|
+
}
|
|
77
89
|
if (isProduction() && fullDocsCache) {
|
|
78
90
|
const sorted2 = fullDocsCache.map(asMeta);
|
|
79
91
|
docsCache = sorted2;
|
|
@@ -90,7 +102,9 @@ function defineContent(config) {
|
|
|
90
102
|
const source = await readCached(filepath);
|
|
91
103
|
const { data } = matter(source);
|
|
92
104
|
const parsed = schema.parse(data);
|
|
93
|
-
if (isProduction() && isDraft(data))
|
|
105
|
+
if (isProduction() && isDraft(data)) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
94
108
|
const slug = `${prefix}${entry.name.replace(".mdx", "")}`;
|
|
95
109
|
docs.push({
|
|
96
110
|
slug: slug === "index" ? "" : slug,
|
|
@@ -115,7 +129,9 @@ function defineContent(config) {
|
|
|
115
129
|
return sorted;
|
|
116
130
|
}
|
|
117
131
|
async function getDocs() {
|
|
118
|
-
if (isProduction() && fullDocsCache)
|
|
132
|
+
if (isProduction() && fullDocsCache) {
|
|
133
|
+
return fullDocsCache;
|
|
134
|
+
}
|
|
119
135
|
const docs = [];
|
|
120
136
|
async function scan(dir, prefix = "") {
|
|
121
137
|
const entries = await readdir(dir, { withFileTypes: true });
|
|
@@ -127,7 +143,9 @@ function defineContent(config) {
|
|
|
127
143
|
const source = await readCached(filepath);
|
|
128
144
|
const { data, content } = matter(source);
|
|
129
145
|
const parsed = schema.parse(data);
|
|
130
|
-
if (isProduction() && isDraft(data))
|
|
146
|
+
if (isProduction() && isDraft(data)) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
131
149
|
const slug = `${prefix}${entry.name.replace(".mdx", "")}`;
|
|
132
150
|
docs.push({
|
|
133
151
|
slug: slug === "index" ? "" : slug,
|
|
@@ -154,7 +172,9 @@ function defineContent(config) {
|
|
|
154
172
|
return sorted;
|
|
155
173
|
}
|
|
156
174
|
async function getNavigation2() {
|
|
157
|
-
if (isProduction() && navCache)
|
|
175
|
+
if (isProduction() && navCache) {
|
|
176
|
+
return navCache;
|
|
177
|
+
}
|
|
158
178
|
try {
|
|
159
179
|
const docs = await getAllDocs2();
|
|
160
180
|
const filtered = await buildNavigation(docs, config.dir);
|
|
@@ -169,7 +189,9 @@ function defineContent(config) {
|
|
|
169
189
|
}
|
|
170
190
|
let searchCache2 = null;
|
|
171
191
|
async function getSearchDocs2() {
|
|
172
|
-
if (isProduction() && searchCache2)
|
|
192
|
+
if (isProduction() && searchCache2) {
|
|
193
|
+
return searchCache2;
|
|
194
|
+
}
|
|
173
195
|
if (isProduction() && fullDocsCache) {
|
|
174
196
|
const sorted2 = fullDocsCache.map((doc) => {
|
|
175
197
|
const headings = extractHeadings(doc.content);
|
|
@@ -193,7 +215,9 @@ function defineContent(config) {
|
|
|
193
215
|
const source = await readCached(filepath);
|
|
194
216
|
const { data, content } = matter(source);
|
|
195
217
|
const parsed = schema.parse(data);
|
|
196
|
-
if (isProduction() && isDraft(data))
|
|
218
|
+
if (isProduction() && isDraft(data)) {
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
197
221
|
const slug = `${prefix}${entry.name.replace(".mdx", "")}`;
|
|
198
222
|
const headings = extractHeadings(content);
|
|
199
223
|
docs.push({
|
|
@@ -221,19 +245,19 @@ function defineContent(config) {
|
|
|
221
245
|
return sorted;
|
|
222
246
|
}
|
|
223
247
|
return {
|
|
248
|
+
getAllDocs: getAllDocs2,
|
|
224
249
|
getDoc: getDoc2,
|
|
225
250
|
getDocs,
|
|
226
|
-
getAllDocs: getAllDocs2,
|
|
227
251
|
getNavigation: getNavigation2,
|
|
228
252
|
getSearchDocs: getSearchDocs2,
|
|
229
253
|
schema
|
|
230
254
|
};
|
|
231
255
|
}
|
|
232
256
|
function stripHeadingFormatting(text) {
|
|
233
|
-
return text.
|
|
257
|
+
return text.replaceAll(/\*\*([^*]+)\*\*/g, "$1").replaceAll(/\*([^*]+)\*/g, "$1").replaceAll(/`([^`]+)`/g, "$1").replaceAll(/\[([^\]]+)\]\([^)]+\)/g, "$1").trim();
|
|
234
258
|
}
|
|
235
259
|
function headingId(text) {
|
|
236
|
-
return text.toLowerCase().
|
|
260
|
+
return text.toLowerCase().replaceAll(/\s+/g, "-").replaceAll(/[^a-z0-9_-]/g, "").replaceAll(/-+/g, "-").replaceAll(/^-|-$/g, "");
|
|
237
261
|
}
|
|
238
262
|
function extractHeadings(content) {
|
|
239
263
|
const headings = [];
|
|
@@ -241,38 +265,48 @@ function extractHeadings(content) {
|
|
|
241
265
|
const lines = content.split("\n");
|
|
242
266
|
for (const line of lines) {
|
|
243
267
|
const match = line.match(/^(#{2,4})\s+(.+)$/);
|
|
244
|
-
if (!match)
|
|
268
|
+
if (!match) {
|
|
269
|
+
continue;
|
|
270
|
+
}
|
|
245
271
|
const hashes = match[1];
|
|
246
272
|
const heading = match[2];
|
|
247
|
-
if (!hashes || !heading)
|
|
273
|
+
if (!hashes || !heading) {
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
248
276
|
const level = hashes.length;
|
|
249
277
|
const raw = stripHeadingFormatting(heading);
|
|
250
278
|
const base = headingId(raw);
|
|
251
|
-
if (!base)
|
|
279
|
+
if (!base) {
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
252
282
|
const count = seen.get(base) ?? 0;
|
|
253
283
|
seen.set(base, count + 1);
|
|
254
284
|
const id = count === 0 ? base : `${base}-${count}`;
|
|
255
|
-
headings.push({ id, text: raw
|
|
285
|
+
headings.push({ id, level, text: raw });
|
|
256
286
|
}
|
|
257
287
|
return headings;
|
|
258
288
|
}
|
|
259
289
|
function stripMdx(content) {
|
|
260
|
-
return content.
|
|
290
|
+
return content.replaceAll(/```[\s\S]*?```/g, "").replaceAll(/`[^`]+`/g, "").replaceAll(/import\s+.*?from\s+['"][^'"]+['"];?/g, "").replaceAll(/export\s+.*?;/g, "").replaceAll(/<[^>]+>/g, " ").replaceAll(/\[([^\]]+)\]\([^)]+\)/g, "$1").replaceAll(/#{1,6}\s+/g, "").replaceAll(/\*\*([^*]+)\*\*/g, "$1").replaceAll(/\*([^*]+)\*/g, "$1").replaceAll(/\n+/g, " ").replaceAll(/\s+/g, " ").trim();
|
|
261
291
|
}
|
|
262
292
|
async function getDoc(docsDir, slug) {
|
|
263
293
|
const resolved = await resolveSource(docsDir, slug);
|
|
264
|
-
if (!resolved)
|
|
294
|
+
if (!resolved) {
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
265
297
|
try {
|
|
266
298
|
const { data, content } = matter(resolved.source);
|
|
267
299
|
const parsed = baseSchema.parse(data);
|
|
268
|
-
if (isProduction() && isDraft(data))
|
|
300
|
+
if (isProduction() && isDraft(data)) {
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
269
303
|
return {
|
|
270
|
-
|
|
271
|
-
|
|
304
|
+
content,
|
|
305
|
+
data: parsed,
|
|
272
306
|
description: parsed.description,
|
|
273
307
|
order: parsed.order,
|
|
274
|
-
|
|
275
|
-
|
|
308
|
+
slug: resolved.actualPath,
|
|
309
|
+
title: parsed.title
|
|
276
310
|
};
|
|
277
311
|
} catch (error) {
|
|
278
312
|
if (error instanceof z.ZodError) {
|
|
@@ -288,7 +322,9 @@ async function getAllDocs(docsDir) {
|
|
|
288
322
|
const cacheKey = docsDir;
|
|
289
323
|
if (isProduction()) {
|
|
290
324
|
const cached = metaCache.get(cacheKey);
|
|
291
|
-
if (cached)
|
|
325
|
+
if (cached) {
|
|
326
|
+
return cached;
|
|
327
|
+
}
|
|
292
328
|
}
|
|
293
329
|
const docs = [];
|
|
294
330
|
const folderMetas = /* @__PURE__ */ new Map();
|
|
@@ -304,13 +340,15 @@ async function getAllDocs(docsDir) {
|
|
|
304
340
|
const source = await readCached(filepath);
|
|
305
341
|
const { data } = matter(source);
|
|
306
342
|
const parsed = baseSchema.parse(data);
|
|
307
|
-
if (isProduction() && isDraft(data))
|
|
343
|
+
if (isProduction() && isDraft(data)) {
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
308
346
|
const slug = `${prefix}${entry.name.replace(".mdx", "")}`;
|
|
309
347
|
docs.push({
|
|
310
|
-
slug: slug === "index" ? "" : slug,
|
|
311
|
-
title: parsed.title,
|
|
312
348
|
description: parsed.description,
|
|
313
|
-
order: parsed.order
|
|
349
|
+
order: parsed.order,
|
|
350
|
+
slug: slug === "index" ? "" : slug,
|
|
351
|
+
title: parsed.title
|
|
314
352
|
});
|
|
315
353
|
}
|
|
316
354
|
}
|
|
@@ -350,7 +388,9 @@ async function getSearchDocs(docsDir) {
|
|
|
350
388
|
const cacheKey = docsDir;
|
|
351
389
|
if (isProduction()) {
|
|
352
390
|
const cached = searchCache.get(cacheKey);
|
|
353
|
-
if (cached)
|
|
391
|
+
if (cached) {
|
|
392
|
+
return cached;
|
|
393
|
+
}
|
|
354
394
|
}
|
|
355
395
|
const docs = [];
|
|
356
396
|
async function scan(dir, prefix = "") {
|
|
@@ -363,16 +403,18 @@ async function getSearchDocs(docsDir) {
|
|
|
363
403
|
const source = await readCached(filepath);
|
|
364
404
|
const { data, content } = matter(source);
|
|
365
405
|
const parsed = baseSchema.parse(data);
|
|
366
|
-
if (isProduction() && isDraft(data))
|
|
406
|
+
if (isProduction() && isDraft(data)) {
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
367
409
|
const slug = `${prefix}${entry.name.replace(".mdx", "")}`;
|
|
368
410
|
const headings = extractHeadings(content);
|
|
369
411
|
docs.push({
|
|
370
|
-
|
|
371
|
-
title: parsed.title,
|
|
412
|
+
content: stripMdx(content),
|
|
372
413
|
description: parsed.description,
|
|
414
|
+
headings: headings.length > 0 ? headings : void 0,
|
|
373
415
|
order: parsed.order,
|
|
374
|
-
|
|
375
|
-
|
|
416
|
+
slug: slug === "index" ? "" : slug,
|
|
417
|
+
title: parsed.title
|
|
376
418
|
});
|
|
377
419
|
}
|
|
378
420
|
}
|
|
@@ -393,17 +435,19 @@ async function getSearchDocs(docsDir) {
|
|
|
393
435
|
return sorted;
|
|
394
436
|
}
|
|
395
437
|
function fallbacktitle(key) {
|
|
396
|
-
if (key === "")
|
|
397
|
-
|
|
438
|
+
if (key === "") {
|
|
439
|
+
return "docs";
|
|
440
|
+
}
|
|
441
|
+
return key.replaceAll("-", " ");
|
|
398
442
|
}
|
|
399
443
|
async function buildNavigation(docs, docsDir) {
|
|
400
444
|
const grouped = /* @__PURE__ */ new Map();
|
|
401
445
|
for (const doc of docs) {
|
|
402
446
|
const key = groupkey(doc.slug);
|
|
403
447
|
const section = grouped.get(key) ?? {
|
|
448
|
+
items: [],
|
|
404
449
|
key,
|
|
405
|
-
title: fallbacktitle(key)
|
|
406
|
-
items: []
|
|
450
|
+
title: fallbacktitle(key)
|
|
407
451
|
};
|
|
408
452
|
section.items.push(doc);
|
|
409
453
|
grouped.set(key, section);
|
|
@@ -414,16 +458,28 @@ async function buildNavigation(docs, docsDir) {
|
|
|
414
458
|
sections.sort((left, right) => {
|
|
415
459
|
const leftOrder = order.get(left.key);
|
|
416
460
|
const rightOrder = order.get(right.key);
|
|
417
|
-
if (leftOrder !== void 0 && rightOrder !== void 0)
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
if (
|
|
421
|
-
|
|
461
|
+
if (leftOrder !== void 0 && rightOrder !== void 0) {
|
|
462
|
+
return leftOrder - rightOrder;
|
|
463
|
+
}
|
|
464
|
+
if (leftOrder !== void 0) {
|
|
465
|
+
return -1;
|
|
466
|
+
}
|
|
467
|
+
if (rightOrder !== void 0) {
|
|
468
|
+
return 1;
|
|
469
|
+
}
|
|
470
|
+
if (left.key === "") {
|
|
471
|
+
return -1;
|
|
472
|
+
}
|
|
473
|
+
if (right.key === "") {
|
|
474
|
+
return 1;
|
|
475
|
+
}
|
|
422
476
|
return left.key.localeCompare(right.key);
|
|
423
477
|
});
|
|
424
478
|
const metas = await Promise.all(
|
|
425
479
|
sections.map((section) => {
|
|
426
|
-
if (section.key === "")
|
|
480
|
+
if (section.key === "") {
|
|
481
|
+
return Promise.resolve(rootMeta);
|
|
482
|
+
}
|
|
427
483
|
return loadMeta(join(docsDir, section.key));
|
|
428
484
|
})
|
|
429
485
|
);
|
|
@@ -432,14 +488,16 @@ async function buildNavigation(docs, docsDir) {
|
|
|
432
488
|
const sorted = sortByMeta(section.items, metas[index]?.pages, prefix);
|
|
433
489
|
const label = metas[index]?.title ?? section.title;
|
|
434
490
|
return {
|
|
435
|
-
|
|
436
|
-
|
|
491
|
+
items: sorted,
|
|
492
|
+
title: label
|
|
437
493
|
};
|
|
438
494
|
}).filter((section) => section.items.length > 0);
|
|
439
495
|
}
|
|
440
496
|
function sectionOrder(pages) {
|
|
441
497
|
const order = /* @__PURE__ */ new Map();
|
|
442
|
-
if (!pages)
|
|
498
|
+
if (!pages) {
|
|
499
|
+
return order;
|
|
500
|
+
}
|
|
443
501
|
for (const page of pages) {
|
|
444
502
|
const key = groupkey(page);
|
|
445
503
|
if (!order.has(key)) {
|
|
@@ -449,10 +507,16 @@ function sectionOrder(pages) {
|
|
|
449
507
|
return order;
|
|
450
508
|
}
|
|
451
509
|
function groupkey(slug) {
|
|
452
|
-
if (!slug || slug === "index")
|
|
453
|
-
|
|
510
|
+
if (!slug || slug === "index") {
|
|
511
|
+
return "";
|
|
512
|
+
}
|
|
513
|
+
if (!slug.includes("/")) {
|
|
514
|
+
return slug;
|
|
515
|
+
}
|
|
454
516
|
const [head] = slug.split("/");
|
|
455
|
-
if (!head || head === "index")
|
|
517
|
+
if (!head || head === "index") {
|
|
518
|
+
return "";
|
|
519
|
+
}
|
|
456
520
|
return head;
|
|
457
521
|
}
|
|
458
522
|
function clearContentCache() {
|
package/dist/contentcache.d.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
|
|
1
|
+
interface CacheEntry<T> {
|
|
2
2
|
value: T;
|
|
3
3
|
expires: number;
|
|
4
4
|
key: string;
|
|
5
|
-
}
|
|
6
|
-
|
|
5
|
+
}
|
|
6
|
+
interface CacheConfig {
|
|
7
7
|
maxSize?: number;
|
|
8
8
|
ttl?: number;
|
|
9
9
|
onEvict?: (key: string) => void;
|
|
10
|
-
}
|
|
11
|
-
|
|
10
|
+
}
|
|
11
|
+
interface CacheStats {
|
|
12
12
|
hits: number;
|
|
13
13
|
misses: number;
|
|
14
14
|
size: number;
|
|
15
15
|
evictions: number;
|
|
16
|
-
}
|
|
16
|
+
}
|
|
17
17
|
declare function createCache<T>(config?: CacheConfig): {
|
|
18
|
+
clear: () => void;
|
|
19
|
+
delete: (key: string) => boolean;
|
|
18
20
|
get: (key: string) => T | undefined;
|
|
19
|
-
set: (key: string, value: T, ttl?: number) => void;
|
|
20
21
|
has: (key: string) => boolean;
|
|
21
|
-
delete: (key: string) => boolean;
|
|
22
|
-
clear: () => void;
|
|
23
|
-
stats: () => CacheStats;
|
|
24
22
|
keys: () => string[];
|
|
25
23
|
prune: () => number;
|
|
24
|
+
set: (key: string, value: T, ttl?: number) => void;
|
|
25
|
+
stats: () => CacheStats;
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
export { type CacheConfig, type CacheEntry, type CacheStats, createCache };
|
package/dist/contentcache.js
CHANGED
|
@@ -11,7 +11,9 @@ function createCache(config) {
|
|
|
11
11
|
}
|
|
12
12
|
function evictOldest() {
|
|
13
13
|
const oldest = store.keys().next().value;
|
|
14
|
-
if (!oldest)
|
|
14
|
+
if (!oldest) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
15
17
|
store.delete(oldest);
|
|
16
18
|
evictions++;
|
|
17
19
|
onEvict?.(oldest);
|
|
@@ -37,11 +39,13 @@ function createCache(config) {
|
|
|
37
39
|
if (store.size >= maxSize) {
|
|
38
40
|
evictOldest();
|
|
39
41
|
}
|
|
40
|
-
store.set(key, {
|
|
42
|
+
store.set(key, { expires: Date.now() + (ttl ?? defaultTtl), key, value });
|
|
41
43
|
}
|
|
42
44
|
function has(key) {
|
|
43
45
|
const entry = store.get(key);
|
|
44
|
-
if (!entry)
|
|
46
|
+
if (!entry) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
45
49
|
if (isExpired(entry)) {
|
|
46
50
|
store.delete(key);
|
|
47
51
|
return false;
|
|
@@ -55,7 +59,7 @@ function createCache(config) {
|
|
|
55
59
|
store.clear();
|
|
56
60
|
}
|
|
57
61
|
function stats() {
|
|
58
|
-
return { hits, misses, size: store.size
|
|
62
|
+
return { evictions, hits, misses, size: store.size };
|
|
59
63
|
}
|
|
60
64
|
function keys() {
|
|
61
65
|
return [...store.keys()];
|
|
@@ -70,7 +74,7 @@ function createCache(config) {
|
|
|
70
74
|
}
|
|
71
75
|
return count;
|
|
72
76
|
}
|
|
73
|
-
return {
|
|
77
|
+
return { clear, delete: del, get, has, keys, prune, set, stats };
|
|
74
78
|
}
|
|
75
79
|
|
|
76
80
|
export { createCache };
|
package/dist/contentdiff.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
interface ContentChange {
|
|
2
2
|
type: "added" | "removed" | "modified";
|
|
3
3
|
path: string;
|
|
4
4
|
title?: string;
|
|
5
|
-
}
|
|
6
|
-
|
|
5
|
+
}
|
|
6
|
+
interface ContentDiff {
|
|
7
7
|
added: ContentChange[];
|
|
8
8
|
removed: ContentChange[];
|
|
9
9
|
modified: ContentChange[];
|
|
10
10
|
summary: string;
|
|
11
|
-
}
|
|
11
|
+
}
|
|
12
12
|
declare function contentFromDocs(docs: {
|
|
13
13
|
slug: string;
|
|
14
14
|
content: string;
|