specra 0.1.13 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.MD +25 -4
- package/README.md +67 -58
- package/config/specra.config.schema.json +16 -0
- package/config/svelte-config.js +63 -0
- package/dist/api-parser.types.d.ts +59 -0
- package/dist/api-parser.types.js +5 -0
- package/dist/api.types.d.ts +137 -0
- package/dist/api.types.js +5 -0
- package/dist/category.d.ts +21 -0
- package/dist/category.js +48 -0
- package/dist/components/ConfigProvider.svelte +13 -0
- package/dist/components/ConfigProvider.svelte.d.ts +31 -0
- package/dist/components/docs/Accordion.svelte +18 -0
- package/dist/components/docs/Accordion.svelte.d.ts +10 -0
- package/dist/components/docs/AccordionItem.svelte +41 -0
- package/dist/components/docs/AccordionItem.svelte.d.ts +10 -0
- package/dist/components/docs/Badge.svelte +28 -0
- package/dist/components/docs/Badge.svelte.d.ts +9 -0
- package/dist/components/docs/Breadcrumb.svelte +80 -0
- package/dist/components/docs/Breadcrumb.svelte.d.ts +8 -0
- package/dist/components/docs/Callout.svelte +96 -0
- package/dist/components/docs/Callout.svelte.d.ts +10 -0
- package/dist/components/docs/Card.svelte +63 -0
- package/dist/components/docs/Card.svelte.d.ts +12 -0
- package/dist/components/docs/CardGrid.svelte +24 -0
- package/dist/components/docs/CardGrid.svelte.d.ts +8 -0
- package/dist/components/docs/CategoryIndex.svelte +110 -0
- package/dist/components/docs/CategoryIndex.svelte.d.ts +29 -0
- package/dist/components/docs/CodeBlock.svelte +172 -0
- package/dist/components/docs/CodeBlock.svelte.d.ts +8 -0
- package/dist/components/docs/Column.svelte +25 -0
- package/dist/components/docs/Column.svelte.d.ts +8 -0
- package/dist/components/docs/Columns.svelte +38 -0
- package/dist/components/docs/Columns.svelte.d.ts +13 -0
- package/dist/components/docs/DevModeBadge.svelte +15 -0
- package/dist/components/docs/DevModeBadge.svelte.d.ts +18 -0
- package/dist/components/docs/DocBadge.svelte +28 -0
- package/dist/components/docs/DocBadge.svelte.d.ts +9 -0
- package/dist/components/docs/DocLayout.svelte +107 -0
- package/dist/components/docs/DocLayout.svelte.d.ts +32 -0
- package/dist/components/docs/DocLoading.svelte +53 -0
- package/dist/components/docs/DocLoading.svelte.d.ts +18 -0
- package/dist/components/docs/DocMetadata.svelte +106 -0
- package/dist/components/docs/DocMetadata.svelte.d.ts +18 -0
- package/dist/components/docs/DocNavigation.svelte +56 -0
- package/dist/components/docs/DocNavigation.svelte.d.ts +12 -0
- package/dist/components/docs/DocTags.svelte +22 -0
- package/dist/components/docs/DocTags.svelte.d.ts +6 -0
- package/dist/components/docs/DraftBadge.svelte +10 -0
- package/dist/components/docs/DraftBadge.svelte.d.ts +18 -0
- package/dist/components/docs/Footer.svelte +72 -0
- package/dist/components/docs/Footer.svelte.d.ts +7 -0
- package/dist/components/docs/Frame.svelte +27 -0
- package/dist/components/docs/Frame.svelte.d.ts +9 -0
- package/dist/components/docs/Header.svelte +123 -0
- package/dist/components/docs/Header.svelte.d.ts +9 -0
- package/dist/components/docs/HeaderWithMenu.svelte +34 -0
- package/dist/components/docs/HeaderWithMenu.svelte.d.ts +17 -0
- package/dist/components/docs/HotReloadIndicator.svelte +44 -0
- package/dist/components/docs/HotReloadIndicator.svelte.d.ts +3 -0
- package/dist/components/docs/Icon.svelte +103 -0
- package/dist/components/docs/Icon.svelte.d.ts +11 -0
- package/dist/components/docs/Image.svelte +88 -0
- package/dist/components/docs/Image.svelte.d.ts +11 -0
- package/dist/components/docs/ImageCard.svelte +91 -0
- package/dist/components/docs/ImageCard.svelte.d.ts +12 -0
- package/dist/components/docs/ImageCardGrid.svelte +25 -0
- package/dist/components/docs/ImageCardGrid.svelte.d.ts +8 -0
- package/dist/components/docs/LayoutProviders.svelte +57 -0
- package/dist/components/docs/LayoutProviders.svelte.d.ts +9 -0
- package/dist/components/docs/Logo.svelte +25 -0
- package/dist/components/docs/Logo.svelte.d.ts +11 -0
- package/dist/components/docs/Math.svelte +54 -0
- package/dist/components/docs/Math.svelte.d.ts +7 -0
- package/dist/components/docs/MdxContent.svelte +41 -0
- package/dist/components/docs/MdxHotReload.svelte +78 -0
- package/dist/components/docs/MdxHotReload.svelte.d.ts +9 -0
- package/dist/components/docs/MdxLayout.svelte +16 -0
- package/dist/components/docs/MdxLayout.svelte.d.ts +6 -0
- package/dist/components/docs/Mermaid.svelte +88 -0
- package/dist/components/docs/Mermaid.svelte.d.ts +7 -0
- package/dist/components/docs/MobileDocLayout.svelte +211 -0
- package/dist/components/docs/MobileDocLayout.svelte.d.ts +35 -0
- package/dist/components/docs/MobileSidebar.svelte +122 -0
- package/dist/components/docs/MobileSidebar.svelte.d.ts +31 -0
- package/dist/components/docs/MobileSidebarWrapper.svelte +122 -0
- package/dist/components/docs/MobileSidebarWrapper.svelte.d.ts +32 -0
- package/dist/components/docs/NotFoundContent.svelte +40 -0
- package/dist/components/docs/NotFoundContent.svelte.d.ts +6 -0
- package/dist/components/docs/SearchHighlight.svelte +116 -0
- package/dist/components/docs/SearchHighlight.svelte.d.ts +3 -0
- package/dist/components/docs/SearchModal.svelte +239 -0
- package/dist/components/docs/SearchModal.svelte.d.ts +9 -0
- package/dist/components/docs/Sidebar.svelte +69 -0
- package/dist/components/docs/Sidebar.svelte.d.ts +31 -0
- package/dist/components/docs/SidebarMenuItems.svelte +344 -0
- package/dist/components/docs/SidebarMenuItems.svelte.d.ts +33 -0
- package/dist/components/docs/SidebarSkeleton.svelte +50 -0
- package/dist/components/docs/SidebarSkeleton.svelte.d.ts +18 -0
- package/dist/components/docs/SiteBanner.svelte +92 -0
- package/dist/components/docs/SiteBanner.svelte.d.ts +7 -0
- package/dist/components/docs/Step.svelte +44 -0
- package/dist/components/docs/Step.svelte.d.ts +8 -0
- package/dist/components/docs/Steps.svelte +15 -0
- package/dist/components/docs/Steps.svelte.d.ts +7 -0
- package/dist/components/docs/Tab.svelte +40 -0
- package/dist/components/docs/Tab.svelte.d.ts +8 -0
- package/dist/components/docs/TabGroups.svelte +183 -0
- package/dist/components/docs/TabGroups.svelte.d.ts +25 -0
- package/dist/components/docs/TableOfContents.svelte +100 -0
- package/dist/components/docs/TableOfContents.svelte.d.ts +9 -0
- package/dist/components/docs/Tabs.svelte +69 -0
- package/dist/components/docs/Tabs.svelte.d.ts +8 -0
- package/dist/components/docs/ThemeToggle.svelte +16 -0
- package/dist/components/docs/ThemeToggle.svelte.d.ts +18 -0
- package/dist/components/docs/Tooltip.svelte +44 -0
- package/dist/components/docs/Tooltip.svelte.d.ts +10 -0
- package/dist/components/docs/VersionSwitcher.svelte +95 -0
- package/dist/components/docs/VersionSwitcher.svelte.d.ts +7 -0
- package/dist/components/docs/Video.svelte +84 -0
- package/dist/components/docs/Video.svelte.d.ts +12 -0
- package/dist/components/docs/api/ApiEndpoint.svelte +61 -0
- package/dist/components/docs/api/ApiEndpoint.svelte.d.ts +11 -0
- package/dist/components/docs/api/ApiParams.svelte +80 -0
- package/dist/components/docs/api/ApiParams.svelte.d.ts +14 -0
- package/dist/components/docs/api/ApiPlayground.svelte +259 -0
- package/dist/components/docs/api/ApiPlayground.svelte.d.ts +16 -0
- package/dist/components/docs/api/ApiReference.svelte +278 -0
- package/dist/components/docs/api/ApiReference.svelte.d.ts +23 -0
- package/dist/components/docs/api/ApiResponse.svelte +66 -0
- package/dist/components/docs/api/ApiResponse.svelte.d.ts +9 -0
- package/dist/components/docs/api/index.d.ts +5 -0
- package/dist/components/docs/api/index.js +5 -0
- package/dist/components/docs/componentTextProps.d.ts +3 -0
- package/dist/components/docs/componentTextProps.js +61 -0
- package/dist/components/docs/index.d.ts +54 -0
- package/dist/components/docs/index.js +56 -0
- package/dist/components/global/VersionNotFound.svelte +48 -0
- package/dist/components/global/VersionNotFound.svelte.d.ts +7 -0
- package/dist/components/global/index.d.ts +1 -0
- package/dist/components/global/index.js +1 -0
- package/dist/components/index.d.ts +6 -822
- package/dist/components/index.js +11 -3854
- package/dist/components/ui/Badge.svelte +48 -0
- package/dist/components/ui/Badge.svelte.d.ts +15 -0
- package/dist/components/ui/Button.svelte +58 -0
- package/dist/components/ui/Button.svelte.d.ts +17 -0
- package/dist/components/ui/Dialog.svelte +16 -0
- package/dist/components/ui/Dialog.svelte.d.ts +9 -0
- package/dist/components/ui/DialogClose.svelte +16 -0
- package/dist/components/ui/DialogClose.svelte.d.ts +9 -0
- package/dist/components/ui/DialogContent.svelte +43 -0
- package/dist/components/ui/DialogContent.svelte.d.ts +10 -0
- package/dist/components/ui/DialogDescription.svelte +21 -0
- package/dist/components/ui/DialogDescription.svelte.d.ts +9 -0
- package/dist/components/ui/DialogFooter.svelte +20 -0
- package/dist/components/ui/DialogFooter.svelte.d.ts +9 -0
- package/dist/components/ui/DialogHeader.svelte +20 -0
- package/dist/components/ui/DialogHeader.svelte.d.ts +9 -0
- package/dist/components/ui/DialogTitle.svelte +21 -0
- package/dist/components/ui/DialogTitle.svelte.d.ts +9 -0
- package/dist/components/ui/Input.svelte +23 -0
- package/dist/components/ui/Input.svelte.d.ts +8 -0
- package/dist/components/ui/Textarea.svelte +19 -0
- package/dist/components/ui/Textarea.svelte.d.ts +7 -0
- package/dist/components/ui/index.d.ts +11 -0
- package/dist/components/ui/index.js +11 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.js +9 -0
- package/dist/config.schema.json +471 -0
- package/dist/config.server.d.ts +46 -0
- package/dist/config.server.js +149 -0
- package/dist/{mdx-ColN3Cyg.d.mts → config.types.d.ts} +22 -75
- package/dist/config.types.js +39 -0
- package/dist/dev-utils.d.ts +29 -0
- package/dist/dev-utils.js +63 -0
- package/dist/index.d.ts +19 -4
- package/dist/index.js +25 -4861
- package/dist/mdx-cache.d.ts +41 -0
- package/dist/mdx-cache.js +160 -0
- package/dist/mdx-components.js +50 -1931
- package/dist/mdx-security.d.ts +76 -0
- package/dist/mdx-security.js +217 -0
- package/dist/mdx.d.ts +73 -0
- package/dist/mdx.js +1099 -0
- package/dist/middleware/index.d.ts +1 -0
- package/dist/middleware/index.js +2 -0
- package/dist/middleware/security.d.ts +22 -47
- package/dist/middleware/security.js +111 -137
- package/dist/parsers/base-parser.d.ts +14 -0
- package/dist/parsers/base-parser.js +1 -0
- package/dist/parsers/index.d.ts +16 -0
- package/dist/parsers/index.js +51 -0
- package/dist/parsers/openapi-parser.d.ts +18 -0
- package/dist/parsers/openapi-parser.js +209 -0
- package/dist/parsers/postman-parser.d.ts +20 -0
- package/dist/parsers/postman-parser.js +260 -0
- package/dist/parsers/specra-parser.d.ts +10 -0
- package/dist/parsers/specra-parser.js +18 -0
- package/dist/redirects.d.ts +12 -0
- package/dist/redirects.js +30 -0
- package/dist/remark-code-meta.d.ts +6 -0
- package/dist/remark-code-meta.js +21 -0
- package/dist/sidebar-utils.d.ts +59 -0
- package/dist/sidebar-utils.js +144 -0
- package/dist/stores/config.d.ts +20 -0
- package/dist/stores/config.js +45 -0
- package/dist/stores/index.d.ts +4 -0
- package/dist/stores/index.js +4 -0
- package/dist/stores/sidebar.d.ts +7 -0
- package/dist/stores/sidebar.js +12 -0
- package/dist/stores/tabs.d.ts +6 -0
- package/dist/stores/tabs.js +41 -0
- package/dist/stores/theme.d.ts +7 -0
- package/dist/stores/theme.js +75 -0
- package/dist/{styles.css → styles/globals.css} +136 -6
- package/dist/toc.d.ts +9 -0
- package/dist/toc.js +15 -0
- package/dist/utils.d.ts +13 -0
- package/dist/utils.js +30 -0
- package/package.json +47 -90
- package/dist/app/api/mdx-watch/route.d.mts +0 -10
- package/dist/app/api/mdx-watch/route.d.ts +0 -10
- package/dist/app/api/mdx-watch/route.js +0 -118
- package/dist/app/api/mdx-watch/route.js.map +0 -1
- package/dist/app/api/mdx-watch/route.mjs +0 -91
- package/dist/app/api/mdx-watch/route.mjs.map +0 -1
- package/dist/chunk-6S3EJVEO.mjs +0 -259
- package/dist/chunk-6S3EJVEO.mjs.map +0 -1
- package/dist/chunk-BE7EROIW.mjs +0 -212
- package/dist/chunk-BE7EROIW.mjs.map +0 -1
- package/dist/chunk-CWHRZHZO.mjs +0 -168
- package/dist/chunk-CWHRZHZO.mjs.map +0 -1
- package/dist/chunk-D5VDVYFY.mjs +0 -1325
- package/dist/chunk-D5VDVYFY.mjs.map +0 -1
- package/dist/chunk-WMCO2UX5.mjs +0 -585
- package/dist/chunk-WMCO2UX5.mjs.map +0 -1
- package/dist/chunk-XEMGCPZZ.mjs +0 -475
- package/dist/chunk-XEMGCPZZ.mjs.map +0 -1
- package/dist/components/index.d.mts +0 -822
- package/dist/components/index.js.map +0 -1
- package/dist/components/index.mjs +0 -3741
- package/dist/components/index.mjs.map +0 -1
- package/dist/index.d.mts +0 -4
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -1897
- package/dist/index.mjs.map +0 -1
- package/dist/layouts/index.d.mts +0 -34
- package/dist/layouts/index.d.ts +0 -34
- package/dist/layouts/index.js +0 -453
- package/dist/layouts/index.js.map +0 -1
- package/dist/layouts/index.mjs +0 -173
- package/dist/layouts/index.mjs.map +0 -1
- package/dist/lib/index.d.mts +0 -583
- package/dist/lib/index.d.ts +0 -583
- package/dist/lib/index.js +0 -1595
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/index.mjs +0 -111
- package/dist/lib/index.mjs.map +0 -1
- package/dist/mdx-ColN3Cyg.d.ts +0 -352
- package/dist/mdx-components.d.mts +0 -86
- package/dist/mdx-components.d.ts +0 -86
- package/dist/mdx-components.js.map +0 -1
- package/dist/mdx-components.mjs +0 -206
- package/dist/mdx-components.mjs.map +0 -1
- package/dist/middleware/security.d.mts +0 -82
- package/dist/middleware/security.js.map +0 -1
- package/dist/middleware/security.mjs +0 -84
- package/dist/middleware/security.mjs.map +0 -1
- package/dist/styles.css.map +0 -1
- package/dist/styles.d.mts +0 -2
- package/dist/styles.d.ts +0 -2
- package/dist/styles.js +0 -2
- package/dist/styles.js.map +0 -1
- package/dist/styles.mjs +0 -1
- package/dist/styles.mjs.map +0 -1
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caching layer for MDX operations to improve development performance
|
|
3
|
+
*
|
|
4
|
+
* This module provides in-memory caching for expensive file system operations
|
|
5
|
+
* that occur during static generation. In development mode, caches are
|
|
6
|
+
* invalidated automatically when files change.
|
|
7
|
+
*/
|
|
8
|
+
import type { Doc } from './mdx';
|
|
9
|
+
/**
|
|
10
|
+
* Cached version of getVersions()
|
|
11
|
+
*/
|
|
12
|
+
export declare function getCachedVersions(): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Cached version of getAllDocs()
|
|
15
|
+
*/
|
|
16
|
+
export declare function getCachedAllDocs(version?: string, locale?: string): Promise<Doc[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Cached version of getDocBySlug()
|
|
19
|
+
*/
|
|
20
|
+
export declare function getCachedDocBySlug(slug: string, version?: string): Promise<Doc | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Manually clear all caches
|
|
23
|
+
* Useful for testing or when you want to force a refresh
|
|
24
|
+
*/
|
|
25
|
+
export declare function clearAllCaches(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Get cache statistics for debugging
|
|
28
|
+
*/
|
|
29
|
+
export declare function getCacheStats(): {
|
|
30
|
+
versions: {
|
|
31
|
+
cached: boolean;
|
|
32
|
+
age: number;
|
|
33
|
+
};
|
|
34
|
+
allDocs: {
|
|
35
|
+
entries: number;
|
|
36
|
+
versions: string[];
|
|
37
|
+
};
|
|
38
|
+
docBySlug: {
|
|
39
|
+
entries: number;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Caching layer for MDX operations to improve development performance
|
|
3
|
+
*
|
|
4
|
+
* This module provides in-memory caching for expensive file system operations
|
|
5
|
+
* that occur during static generation. In development mode, caches are
|
|
6
|
+
* invalidated automatically when files change.
|
|
7
|
+
*/
|
|
8
|
+
import { getVersions, getAllDocs, getDocBySlug } from './mdx';
|
|
9
|
+
import { watch } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { PerfTimer, logCacheOperation } from './dev-utils';
|
|
12
|
+
const isDevelopment = process.env.NODE_ENV === 'development';
|
|
13
|
+
// Cache stores
|
|
14
|
+
const versionsCache = {
|
|
15
|
+
data: null,
|
|
16
|
+
timestamp: 0,
|
|
17
|
+
};
|
|
18
|
+
const allDocsCache = new Map();
|
|
19
|
+
const docBySlugCache = new Map();
|
|
20
|
+
// Cache TTL (time to live) in milliseconds
|
|
21
|
+
const CACHE_TTL = isDevelopment ? 5000 : 60000; // 5s in dev, 60s in prod
|
|
22
|
+
// Track if we've set up file watchers
|
|
23
|
+
let watchersInitialized = false;
|
|
24
|
+
/**
|
|
25
|
+
* Initialize file watchers to invalidate cache on changes
|
|
26
|
+
* Only runs in development mode
|
|
27
|
+
*/
|
|
28
|
+
function initializeWatchers() {
|
|
29
|
+
if (!isDevelopment || watchersInitialized)
|
|
30
|
+
return;
|
|
31
|
+
watchersInitialized = true;
|
|
32
|
+
const docsPath = join(process.cwd(), 'docs');
|
|
33
|
+
try {
|
|
34
|
+
watch(docsPath, { recursive: true }, (eventType, filename) => {
|
|
35
|
+
if (!filename)
|
|
36
|
+
return;
|
|
37
|
+
// Invalidate relevant caches when MDX or JSON files change
|
|
38
|
+
if (filename.endsWith('.mdx') || filename.endsWith('.json')) {
|
|
39
|
+
// Extract version from path
|
|
40
|
+
const parts = filename.split(/[/\\]/);
|
|
41
|
+
const version = parts[0];
|
|
42
|
+
// Clear all docs cache for this version
|
|
43
|
+
allDocsCache.delete(version);
|
|
44
|
+
// Clear individual doc caches for this version
|
|
45
|
+
const cacheKeysToDelete = [];
|
|
46
|
+
docBySlugCache.forEach((_, key) => {
|
|
47
|
+
if (key.startsWith(`${version}:`)) {
|
|
48
|
+
cacheKeysToDelete.push(key);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
cacheKeysToDelete.forEach(key => docBySlugCache.delete(key));
|
|
52
|
+
// Clear versions cache if directory structure changed
|
|
53
|
+
if (eventType === 'rename') {
|
|
54
|
+
versionsCache.data = null;
|
|
55
|
+
}
|
|
56
|
+
console.log(`[MDX Cache] Invalidated cache for: ${filename}`);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
console.log('[MDX Cache] File watchers initialized');
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.error('[MDX Cache] Failed to initialize watchers:', error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Check if a cache entry is still valid
|
|
67
|
+
*/
|
|
68
|
+
function isCacheValid(timestamp) {
|
|
69
|
+
return Date.now() - timestamp < CACHE_TTL;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Cached version of getVersions()
|
|
73
|
+
*/
|
|
74
|
+
export function getCachedVersions() {
|
|
75
|
+
// Initialize watchers on first use
|
|
76
|
+
initializeWatchers();
|
|
77
|
+
if (versionsCache.data && isCacheValid(versionsCache.timestamp)) {
|
|
78
|
+
logCacheOperation('hit', 'versions');
|
|
79
|
+
return versionsCache.data;
|
|
80
|
+
}
|
|
81
|
+
logCacheOperation('miss', 'versions');
|
|
82
|
+
const timer = new PerfTimer('getVersions');
|
|
83
|
+
const versions = getVersions();
|
|
84
|
+
timer.end();
|
|
85
|
+
versionsCache.data = versions;
|
|
86
|
+
versionsCache.timestamp = Date.now();
|
|
87
|
+
return versions;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Cached version of getAllDocs()
|
|
91
|
+
*/
|
|
92
|
+
export async function getCachedAllDocs(version = 'v1.0.0', locale) {
|
|
93
|
+
// Initialize watchers on first use
|
|
94
|
+
initializeWatchers();
|
|
95
|
+
const cacheKey = locale ? `${version}:${locale}` : version;
|
|
96
|
+
const cached = allDocsCache.get(cacheKey);
|
|
97
|
+
if (cached && isCacheValid(cached.timestamp)) {
|
|
98
|
+
logCacheOperation('hit', `getAllDocs:${cacheKey}`);
|
|
99
|
+
return cached.data;
|
|
100
|
+
}
|
|
101
|
+
logCacheOperation('miss', `getAllDocs:${cacheKey}`);
|
|
102
|
+
const timer = new PerfTimer(`getAllDocs(${cacheKey})`);
|
|
103
|
+
const docs = await getAllDocs(version, locale);
|
|
104
|
+
timer.end();
|
|
105
|
+
allDocsCache.set(cacheKey, {
|
|
106
|
+
data: docs,
|
|
107
|
+
timestamp: Date.now(),
|
|
108
|
+
});
|
|
109
|
+
return docs;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Cached version of getDocBySlug()
|
|
113
|
+
*/
|
|
114
|
+
export async function getCachedDocBySlug(slug, version = 'v1.0.0') {
|
|
115
|
+
// Initialize watchers on first use
|
|
116
|
+
initializeWatchers();
|
|
117
|
+
const cacheKey = `${version}:${slug}`;
|
|
118
|
+
const cached = docBySlugCache.get(cacheKey);
|
|
119
|
+
if (cached && isCacheValid(cached.timestamp)) {
|
|
120
|
+
logCacheOperation('hit', `getDocBySlug:${cacheKey}`);
|
|
121
|
+
return cached.data;
|
|
122
|
+
}
|
|
123
|
+
logCacheOperation('miss', `getDocBySlug:${cacheKey}`);
|
|
124
|
+
const timer = new PerfTimer(`getDocBySlug(${slug})`);
|
|
125
|
+
const doc = await getDocBySlug(slug, version);
|
|
126
|
+
timer.end();
|
|
127
|
+
docBySlugCache.set(cacheKey, {
|
|
128
|
+
data: doc,
|
|
129
|
+
timestamp: Date.now(),
|
|
130
|
+
});
|
|
131
|
+
return doc;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Manually clear all caches
|
|
135
|
+
* Useful for testing or when you want to force a refresh
|
|
136
|
+
*/
|
|
137
|
+
export function clearAllCaches() {
|
|
138
|
+
versionsCache.data = null;
|
|
139
|
+
allDocsCache.clear();
|
|
140
|
+
docBySlugCache.clear();
|
|
141
|
+
console.log('[MDX Cache] All caches cleared');
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get cache statistics for debugging
|
|
145
|
+
*/
|
|
146
|
+
export function getCacheStats() {
|
|
147
|
+
return {
|
|
148
|
+
versions: {
|
|
149
|
+
cached: versionsCache.data !== null,
|
|
150
|
+
age: versionsCache.timestamp ? Date.now() - versionsCache.timestamp : 0,
|
|
151
|
+
},
|
|
152
|
+
allDocs: {
|
|
153
|
+
entries: allDocsCache.size,
|
|
154
|
+
versions: Array.from(allDocsCache.keys()),
|
|
155
|
+
},
|
|
156
|
+
docBySlug: {
|
|
157
|
+
entries: docBySlugCache.size,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|