From 27b19bbc4b57d195106ac32c86f5c334424ed456 Mon Sep 17 00:00:00 2001 From: swarnabhasinha Date: Fri, 5 Sep 2025 01:25:33 +0530 Subject: [PATCH 1/2] feat: Add LLM integration dropdown with Claude/ChatGPT support --- .vitepress/components/LLMDropdown.vue | 477 +++++++++++++++++++++ .vitepress/components/LLMDropdown.vue.d.ts | 4 + .vitepress/config.mts | 38 +- .vitepress/plugins/llms-plugin.ts | 262 +++++++++++ .vitepress/theme/index.ts | 5 +- .vitepress/vue-shims.d.ts | 5 + package-lock.json | 221 ++++++++++ package.json | 2 + public/chatgpt-dark.svg | 1 + public/chatgpt-light.svg | 1 + public/claude-dark.svg | 1 + public/claude-light.svg | 1 + yarn.lock | 279 ++++++++++-- 13 files changed, 1224 insertions(+), 73 deletions(-) create mode 100644 .vitepress/components/LLMDropdown.vue create mode 100644 .vitepress/components/LLMDropdown.vue.d.ts create mode 100644 .vitepress/plugins/llms-plugin.ts create mode 100644 .vitepress/vue-shims.d.ts create mode 100644 public/chatgpt-dark.svg create mode 100644 public/chatgpt-light.svg create mode 100644 public/claude-dark.svg create mode 100644 public/claude-light.svg diff --git a/.vitepress/components/LLMDropdown.vue b/.vitepress/components/LLMDropdown.vue new file mode 100644 index 0000000..f5495d6 --- /dev/null +++ b/.vitepress/components/LLMDropdown.vue @@ -0,0 +1,477 @@ + + + + + + diff --git a/.vitepress/components/LLMDropdown.vue.d.ts b/.vitepress/components/LLMDropdown.vue.d.ts new file mode 100644 index 0000000..9b6ae89 --- /dev/null +++ b/.vitepress/components/LLMDropdown.vue.d.ts @@ -0,0 +1,4 @@ +import { DefineComponent } from 'vue' + +declare const LLMDropdown: DefineComponent<{}, {}, any> +export default LLMDropdown diff --git a/.vitepress/config.mts b/.vitepress/config.mts index 67a0724..1824b64 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -1,4 +1,5 @@ import { defineConfig } from 'vitepress' +import { llmsPlugin } from './plugins/llms-plugin' const { BASE: base = "/" } = process.env; @@ -11,6 +12,16 @@ export default defineConfig({ cleanUrls: true, ignoreDeadLinks: true, base: base, + vite: { + plugins: [ + llmsPlugin({ + title: 'Optimum Docs', + description: 'The world\'s first high-performance memory infrastructure for any blockchain.', + basePath: base, + rootDir: process.cwd() + }) + ] + }, markdown: { math: true, }, @@ -153,32 +164,7 @@ export default defineConfig({ }) function nav() { - return [ - { - text: "Menu", - items: [ - // { text: "Get Started", link: "/docs/how-to-guides/overview" }, - { text: "Learn", link: "/docs/learn/overview/intro" }, - { - text: "Resources", - items: [ - // { - // text: "Optimum Improvement Proposals (OIPs)", - // link: "https://docs.getoptimum.xyz/", // TODO: Update link once live. - // }, - { - text: "Optimum ADRs", - link: "https://github.com/getoptimum/optimum/tree/main/docs/architecture#adr-table-of-contents", - }, - // { - // text: "Flexnode API Docs", - // link: "https://docs.getoptimum.xyz/", // TODO: Update link once live. - // }, - ], - }, - ], - }, - ]; + return []; } function sidebarHome() { diff --git a/.vitepress/plugins/llms-plugin.ts b/.vitepress/plugins/llms-plugin.ts new file mode 100644 index 0000000..4e5ff58 --- /dev/null +++ b/.vitepress/plugins/llms-plugin.ts @@ -0,0 +1,262 @@ +import { resolve } from 'node:path' +import { writeFileSync, readFileSync, existsSync, mkdirSync } from 'node:fs' +import { globby } from 'globby' +import matter from 'gray-matter' +import type { Plugin as VitePlugin } from 'vite' + +export interface LLMsPluginOptions { + /** + * Output directory for llms.txt files + * @default 'dist' + */ + outDir?: string + /** + * Base path for the site + * @default '/' + */ + basePath?: string + /** + * Site title + * @default 'Documentation' + */ + title?: string + /** + * Site description + */ + description?: string + /** + * Root directory containing markdown files + * @default process.cwd() + */ + rootDir?: string + /** + * Patterns to exclude from processing + * @default ['node_modules/**', 'README.md'] + */ + exclude?: string[] +} + +export function llmsPlugin(options: LLMsPluginOptions = {}): VitePlugin { + const { + outDir = 'dist', + basePath = '/', + title = 'Documentation', + description, + rootDir = process.cwd(), + exclude = ['**/node_modules/**', '**/.*/**', '**/README.md'] + } = options + + let viteConfig: any + + return { + name: 'vitepress-llms-plugin', + configResolved(config) { + viteConfig = config + }, + async buildStart() { + await generateLLMsFiles() + }, + async handleHotUpdate(ctx) { + // Regenerate on markdown file changes in dev mode + if (ctx.file.endsWith('.md')) { + await generateLLMsFiles() + } + }, + configureServer(server) { + // Serve llms.txt files in dev mode + server.middlewares.use('/llms.txt', (req, res, next) => { + const llmsPath = resolve(process.cwd(), 'dist', 'llms.txt') + if (existsSync(llmsPath)) { + res.setHeader('Content-Type', 'text/plain') + res.end(readFileSync(llmsPath, 'utf-8')) + } else { + res.statusCode = 404 + res.end('llms.txt not found') + } + }) + + server.middlewares.use('/llms-full.txt', (req, res, next) => { + const llmsPath = resolve(process.cwd(), 'dist', 'llms-full.txt') + if (existsSync(llmsPath)) { + res.setHeader('Content-Type', 'text/plain') + res.end(readFileSync(llmsPath, 'utf-8')) + } else { + res.statusCode = 404 + res.end('llms-full.txt not found') + } + }) + } + } + + async function generateLLMsFiles() { + try { + const actualOutDir = viteConfig?.build?.outDir || outDir + + // Ensure output directory exists + if (!existsSync(actualOutDir)) { + mkdirSync(actualOutDir, { recursive: true }) + } + + // Build content arrays with metadata + const content = [ + `# ${title} LLM Guide`, + `llms.txt for https://docs.getoptimum.xyz/`, + `version: 1.0`, + `attribution: Required`, + `attribution_url: https://docs.getoptimum.xyz/`, + '', + '# Crawl settings', + 'crawl_delay: 1', + 'allow_paths:', + ' - /', + 'disallow_paths:', + ' - /private/', + ' - /drafts/', + 'sitemaps:', + ' - https://docs.getoptimum.xyz/sitemap.xml', + '', + '## Site Overview', + description || 'Official documentation for Optimum - the world\'s first high-performance memory infrastructure for any blockchain.', + '', + '## llms-full.txt', + '', + 'For a complete text version of all documentation pages, use https://docs.getoptimum.xyz/llms-full.txt', + '' + ] + + // Find all markdown files + const patterns = [ + `${rootDir}/**/*.md`, + `!${rootDir}/node_modules/**`, + `!${rootDir}/.*/**`, + ...exclude.map((pattern: string) => `!${rootDir}/${pattern}`) + ] + + const files = await globby(patterns) + + // Content for llms.txt (index format) + const llmsTxtContent = [...content, '## Documentation', ''] + + // Content for llms-full.txt (full content) + const llmsFullContent = [...content] + + for (const file of files.sort()) { + try { + const fileContent = readFileSync(file, 'utf-8') + const { data: frontmatter, content: markdownContent } = matter(fileContent) + + // Generate relative path for URL + let relativePath = file.replace(rootDir, '').replace(/\\/g, '/') + if (relativePath.startsWith('/')) { + relativePath = relativePath.substring(1) + } + + // Convert file path to URL path + let urlPath = relativePath.replace(/\.md$/, '') + if (urlPath.endsWith('/index')) { + urlPath = urlPath.replace('/index', '') + } + if (urlPath === 'index') { + urlPath = '' + } + + // Skip if this is the main index file and it's just frontmatter + if (urlPath === '' && markdownContent.trim().length < 50) { + continue + } + + const fullUrl = basePath === '/' ? `/${urlPath}` : `${basePath}/${urlPath}` + + // Extract title from frontmatter or first heading + let pageTitle = frontmatter.title || extractTitleFromMarkdown(markdownContent) || 'Untitled' + + // Extract description + let pageDescription = frontmatter.description || extractDescriptionFromMarkdown(markdownContent) + + // Add to index format (llms.txt) + const indexEntry = pageDescription + ? `- [${pageTitle}](${fullUrl}): ${pageDescription}` + : `- [${pageTitle}](${fullUrl})` + llmsTxtContent.push(indexEntry) + + // Add to full content format (llms-full.txt) + llmsFullContent.push( + `## ${pageTitle}`, + '', + `**URL:** ${fullUrl}`, + '', + processMarkdownContent(markdownContent), + '', + '---', + '' + ) + } catch (error) { + console.warn(`Warning: Could not process file ${file}:`, error) + } + } + + // Write files + const llmsTxtPath = resolve(actualOutDir, 'llms.txt') + const llmsFullTxtPath = resolve(actualOutDir, 'llms-full.txt') + + writeFileSync(llmsTxtPath, llmsTxtContent.join('\n')) + writeFileSync(llmsFullTxtPath, llmsFullContent.join('\n')) + + console.log(`✅ Generated LLM files:`) + console.log(` 📄 ${llmsTxtPath}`) + console.log(` 📄 ${llmsFullTxtPath}`) + + } catch (error) { + console.error('Error generating LLM files:', error) + } + } +} + +function extractTitleFromMarkdown(content: string): string | null { + // Look for first # heading + const headingMatch = content.match(/^#\s+(.+)$/m) + if (headingMatch) { + return headingMatch[1].trim() + } + + // Look for any heading + const anyHeadingMatch = content.match(/^#+\s+(.+)$/m) + if (anyHeadingMatch) { + return anyHeadingMatch[1].trim() + } + + return null +} + +function extractDescriptionFromMarkdown(content: string): string | null { + // Remove frontmatter and headings, get first paragraph + const withoutFrontmatter = content.replace(/^---[\s\S]*?---/, '').trim() + const withoutHeadings = withoutFrontmatter.replace(/^#+\s+.+$/gm, '').trim() + + // Get first paragraph + const paragraphs = withoutHeadings.split('\n\n') + const firstParagraph = paragraphs.find(p => p.trim().length > 0) + + if (firstParagraph && firstParagraph.length > 10) { + // Clean up markdown formatting and limit length + const cleaned = firstParagraph + .replace(/\[([^\]]+)\]\([^)]+\)/g, '$1') // Remove links + .replace(/[*_`]/g, '') // Remove formatting + .replace(/\n/g, ' ') // Replace newlines with spaces + .trim() + + return cleaned.length > 150 ? cleaned.substring(0, 147) + '...' : cleaned + } + + return null +} + +function processMarkdownContent(content: string): string { + // Remove frontmatter + const withoutFrontmatter = content.replace(/^---[\s\S]*?---/, '').trim() + + // Clean up the content but preserve structure + return withoutFrontmatter + .replace(/\n{3,}/g, '\n\n') // Reduce multiple newlines + .trim() +} \ No newline at end of file diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index 419dde9..ce37392 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -4,15 +4,18 @@ import type { Theme } from "vitepress"; import DefaultTheme from 'vitepress/theme-without-fonts'; import "./style.css"; import "./fonts.css"; +import LLMDropdown from '../components/LLMDropdown.vue'; export default { extends: DefaultTheme, Layout: () => { return h(DefaultTheme.Layout, null, { // https://vitepress.dev/guide/extending-default-theme#layout-slots + 'nav-bar-content-after': () => h(LLMDropdown), }); }, enhanceApp({ app, router, siteData }) { - // ... + // Register global components + app.component('LLMDropdown', LLMDropdown); }, } satisfies Theme; diff --git a/.vitepress/vue-shims.d.ts b/.vitepress/vue-shims.d.ts new file mode 100644 index 0000000..2b97bd9 --- /dev/null +++ b/.vitepress/vue-shims.d.ts @@ -0,0 +1,5 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/package-lock.json b/package-lock.json index e798920..4c82642 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,11 +11,14 @@ }, "devDependencies": { "@eslint/js": "^9.22.0", + "@types/node": "^24.1.0", "@typescript-eslint/eslint-plugin": "^8.26.1", "@typescript-eslint/parser": "^8.26.1", "eslint": "^9.22.0", "eslint-plugin-vue": "^10.0.0", "globals": "^16.0.0", + "globby": "^14.1.0", + "gray-matter": "^4.0.3", "lint-staged": "^15.4.3", "markdown-it-mathjax3": "^4.3.2", "markdownlint-cli": "^0.44.0", @@ -1917,6 +1920,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -2000,6 +2016,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/node": { + "version": "24.3.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.1.tgz", + "integrity": "sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, "node_modules/@types/unist": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", @@ -3616,6 +3642,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", @@ -3700,6 +3740,19 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3940,6 +3993,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -3956,6 +4040,46 @@ "dev": true, "license": "MIT" }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4143,6 +4267,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4367,6 +4501,16 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5669,6 +5813,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/perfect-debounce": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", @@ -6031,6 +6188,20 @@ "license": "MIT", "peer": true }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -6103,6 +6274,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/slice-ansi": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", @@ -6221,6 +6405,13 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/string-argv": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", @@ -6360,6 +6551,16 @@ "node": ">=8" } }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", @@ -6533,6 +6734,26 @@ "dev": true, "license": "MIT" }, + "node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unist-util-is": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", diff --git a/package.json b/package.json index f66540c..91fe8d6 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,8 @@ "eslint": "^9.22.0", "eslint-plugin-vue": "^10.0.0", "globals": "^16.0.0", + "globby": "^14.1.0", + "gray-matter": "^4.0.3", "lint-staged": "^15.4.3", "markdown-it-mathjax3": "^4.3.2", "markdownlint-cli": "^0.44.0", diff --git a/public/chatgpt-dark.svg b/public/chatgpt-dark.svg new file mode 100644 index 0000000..3fc5080 --- /dev/null +++ b/public/chatgpt-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/chatgpt-light.svg b/public/chatgpt-light.svg new file mode 100644 index 0000000..0944147 --- /dev/null +++ b/public/chatgpt-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/claude-dark.svg b/public/claude-dark.svg new file mode 100644 index 0000000..c65ea53 --- /dev/null +++ b/public/claude-dark.svg @@ -0,0 +1 @@ +Claude \ No newline at end of file diff --git a/public/claude-light.svg b/public/claude-light.svg new file mode 100644 index 0000000..934547b --- /dev/null +++ b/public/claude-light.svg @@ -0,0 +1 @@ +Claude \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 52ee578..d64fead 100644 --- a/yarn.lock +++ b/yarn.lock @@ -54,6 +54,11 @@ resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.20.4.tgz" integrity sha512-OCGa8hKAP6kQKBwi+tu9flTXshz4qeCK5P8J6bI1qq8KYs+/TU1xSotT+E7hO+uyDanGU6dT6soiMSi4A38JgA== +"@algolia/client-common@5.34.1": + version "5.34.1" + resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.34.1.tgz" + integrity sha512-otPWALs72KvmVuP0CN0DI6sqVx1jQWKi+/DgAiP8DysVMgiNlva3GDKTtAK6XVGlT08f4h32FNuL0yQODuCfKA== + "@algolia/client-insights@5.20.4": version "5.20.4" resolved "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.20.4.tgz" @@ -84,6 +89,16 @@ "@algolia/requester-fetch" "5.20.4" "@algolia/requester-node-http" "5.20.4" +"@algolia/client-search@>= 4.9.1 < 6": + version "5.34.1" + resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.34.1.tgz" + integrity sha512-bt5hC9vvjaKvdvsgzfXJ42Sl3qjQqoi/FD8V7HOQgtNFhwSauZOlgLwFoUiw67sM+r7ehF7QDk5WRDgY7fAkIg== + dependencies: + "@algolia/client-common" "5.34.1" + "@algolia/requester-browser-xhr" "5.34.1" + "@algolia/requester-fetch" "5.34.1" + "@algolia/requester-node-http" "5.34.1" + "@algolia/client-search@5.20.4": version "5.20.4" resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.20.4.tgz" @@ -131,6 +146,13 @@ dependencies: "@algolia/client-common" "5.20.4" +"@algolia/requester-browser-xhr@5.34.1": + version "5.34.1" + resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.34.1.tgz" + integrity sha512-567LfFTc9VOiPtuySQohoqaWMeohYWbXK71aMSin+SLMgeKX7hz5LrVmkmMQj9udwWK6/mtHEYZGPYHSuXpLQg== + dependencies: + "@algolia/client-common" "5.34.1" + "@algolia/requester-fetch@5.20.4": version "5.20.4" resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.20.4.tgz" @@ -138,6 +160,13 @@ dependencies: "@algolia/client-common" "5.20.4" +"@algolia/requester-fetch@5.34.1": + version "5.34.1" + resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.34.1.tgz" + integrity sha512-YRbygPgGBEik5U593JvyjgxFjcsyZMR25eIQxNHvSQumdAzt5A4E4Idw3yXnwhrmMdjML54ZXT7EAjnTjWy8Xw== + dependencies: + "@algolia/client-common" "5.34.1" + "@algolia/requester-node-http@5.20.4": version "5.20.4" resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.20.4.tgz" @@ -145,6 +174,13 @@ dependencies: "@algolia/client-common" "5.20.4" +"@algolia/requester-node-http@5.34.1": + version "5.34.1" + resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.34.1.tgz" + integrity sha512-o0mqRYbS82Rt4DE02Od7RL6pNtV7oSxScPuIw8LW4aqO2V5eCF05Pry/SnUgcI/Vb2QCYC66hytBCqzyC/toZA== + dependencies: + "@algolia/client-common" "5.34.1" + "@babel/helper-string-parser@^7.27.1": version "7.27.1" resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" @@ -155,7 +191,7 @@ resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz" integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== -"@babel/parser@^7.25.3": +"@babel/parser@^7.23.5", "@babel/parser@^7.25.3": version "7.28.0" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz" integrity sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g== @@ -205,16 +241,16 @@ resolved "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz" integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - "@esbuild/android-arm@0.21.5": version "0.21.5" resolved "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz" integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== +"@esbuild/android-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz" + integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== + "@esbuild/android-x64@0.21.5": version "0.21.5" resolved "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz" @@ -240,16 +276,16 @@ resolved "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz" integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - "@esbuild/linux-arm@0.21.5": version "0.21.5" resolved "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz" integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== +"@esbuild/linux-arm64@0.21.5": + version "0.21.5" + resolved "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz" + integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== + "@esbuild/linux-ia32@0.21.5": version "0.21.5" resolved "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz" @@ -363,7 +399,7 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.22.0", "@eslint/js@^9.22.0": +"@eslint/js@^9.22.0", "@eslint/js@9.22.0": version "9.22.0" resolved "https://registry.npmjs.org/@eslint/js/-/js-9.22.0.tgz" integrity sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ== @@ -446,7 +482,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -559,7 +595,7 @@ resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.35.0.tgz" integrity sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw== -"@shikijs/core@2.5.0", "@shikijs/core@^2.1.0": +"@shikijs/core@^2.1.0", "@shikijs/core@2.5.0": version "2.5.0" resolved "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz" integrity sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg== @@ -610,7 +646,7 @@ "@shikijs/core" "2.5.0" "@shikijs/types" "2.5.0" -"@shikijs/types@2.5.0", "@shikijs/types@^2.1.0": +"@shikijs/types@^2.1.0", "@shikijs/types@2.5.0": version "2.5.0" resolved "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz" integrity sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw== @@ -623,6 +659,11 @@ resolved "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz" integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== +"@sindresorhus/merge-streams@^2.1.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz" + integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== + "@types/debug@^4.0.0": version "4.1.12" resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" @@ -630,7 +671,7 @@ dependencies: "@types/ms" "*" -"@types/estree@1.0.6", "@types/estree@^1.0.6": +"@types/estree@^1.0.6", "@types/estree@1.0.6": version "1.0.6" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz" integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== @@ -682,10 +723,10 @@ resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz" integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== -"@types/node@^24.1.0": - version "24.2.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.2.0.tgz#cde712f88c5190006d6b069232582ecd1f94a760" - integrity sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw== +"@types/node@^18.0.0 || >=20.0.0", "@types/node@^24.1.0": + version "24.3.1" + resolved "https://registry.npmjs.org/@types/node/-/node-24.3.1.tgz" + integrity sha512-3vXmQDXy+woz+gnrTvuvNrPzekOi+Ds0ReMxw0LzBiK3a+1k0kQn9f2NWk+lgD4rJehFUmYy2gMhJ2ZI+7YP9g== dependencies: undici-types "~7.10.0" @@ -704,7 +745,7 @@ resolved "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz" integrity sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA== -"@typescript-eslint/eslint-plugin@8.26.1", "@typescript-eslint/eslint-plugin@^8.26.1": +"@typescript-eslint/eslint-plugin@^8.26.1", "@typescript-eslint/eslint-plugin@8.26.1": version "8.26.1" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz" integrity sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA== @@ -719,7 +760,7 @@ natural-compare "^1.4.0" ts-api-utils "^2.0.1" -"@typescript-eslint/parser@8.26.1", "@typescript-eslint/parser@^8.26.1": +"@typescript-eslint/parser@^8.0.0 || ^8.0.0-alpha.0", "@typescript-eslint/parser@^8.26.1", "@typescript-eslint/parser@8.26.1": version "8.26.1" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.1.tgz" integrity sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ== @@ -814,6 +855,17 @@ "@vue/compiler-core" "3.5.13" "@vue/shared" "3.5.13" +"@vue/compiler-sfc@2.7.16": + version "2.7.16" + resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz" + integrity sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg== + dependencies: + "@babel/parser" "^7.23.5" + postcss "^8.4.14" + source-map "^0.6.1" + optionalDependencies: + prettier "^1.18.2 || ^2.0.0" + "@vue/compiler-sfc@3.5.13": version "3.5.13" resolved "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz" @@ -897,12 +949,12 @@ "@vue/compiler-ssr" "3.5.13" "@vue/shared" "3.5.13" -"@vue/shared@3.5.13", "@vue/shared@^3.5.13": +"@vue/shared@^3.5.13", "@vue/shared@3.5.13": version "3.5.13" resolved "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz" integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== -"@vueuse/core@12.8.2", "@vueuse/core@^12.4.0": +"@vueuse/core@^12.4.0", "@vueuse/core@12.8.2": version "12.8.2" resolved "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz" integrity sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ== @@ -938,7 +990,7 @@ acorn-jsx@^5.3.2: resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^8.14.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.14.0: version "8.14.1" resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== @@ -953,7 +1005,7 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -algoliasearch@^5.14.2: +algoliasearch@^5.14.2, "algoliasearch@>= 4.9.1 < 6": version "5.20.4" resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.20.4.tgz" integrity sha512-wjfzqruxovJyDqga8M6Xk5XtfuVg3igrWjhjgkRya87+WwfEa1kg+IluujBLzgAiMSd6rO6jqRb7czjgeeSYgQ== @@ -1001,11 +1053,28 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^6.0.0, ansi-styles@^6.1.0, ansi-styles@^6.2.1: +ansi-styles@^6.0.0: version "6.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +ansi-styles@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" @@ -1161,11 +1230,6 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== -commander@9.2.0: - version "9.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz" - integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== - commander@^13.1.0, commander@~13.1.0: version "13.1.0" resolved "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz" @@ -1181,6 +1245,11 @@ commander@^8.3.0: resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +commander@9.2.0: + version "9.2.0" + resolved "https://registry.npmjs.org/commander/-/commander-9.2.0.tgz" + integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" @@ -1223,7 +1292,7 @@ cssesc@^3.0.0: resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csstype@^3.1.3: +csstype@^3.1.0, csstype@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== @@ -1336,7 +1405,12 @@ entities@^2.0.0: resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^4.4.0, entities@^4.5.0: +entities@^4.4.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +entities@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -1415,7 +1489,7 @@ eslint-visitor-keys@^4.2.0: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz" integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== -eslint@^9.22.0: +"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^8.57.0 || ^9.0.0", eslint@^9.22.0: version "9.22.0" resolved "https://registry.npmjs.org/eslint/-/eslint-9.22.0.tgz" integrity sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ== @@ -1470,6 +1544,11 @@ espree@^10.0.1, espree@^10.3.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^4.2.0" +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.5.0, esquery@^1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" @@ -1519,12 +1598,19 @@ execa@^8.0.1: signal-exit "^4.1.0" strip-final-newline "^3.0.0" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.3.2: +fast-glob@^3.3.2, fast-glob@^3.3.3: version "3.3.3" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -1587,7 +1673,7 @@ flatted@^3.2.9: resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz" integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== -focus-trap@^7.6.4: +focus-trap@^7, focus-trap@^7.6.4: version "7.6.4" resolved "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz" integrity sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw== @@ -1653,6 +1739,18 @@ globals@^16.0.0: resolved "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz" integrity sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A== +globby@^14.1.0: + version "14.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz" + integrity sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA== + dependencies: + "@sindresorhus/merge-streams" "^2.1.0" + fast-glob "^3.3.3" + ignore "^7.0.3" + path-type "^6.0.0" + slash "^5.1.0" + unicorn-magic "^0.3.0" + good-listener@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz" @@ -1665,6 +1763,16 @@ graphemer@^1.4.0: resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + has-flag@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" @@ -1734,6 +1842,11 @@ ignore@^5.2.0, ignore@^5.3.1: resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== +ignore@^7.0.3: + version "7.0.5" + resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + ignore@~7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz" @@ -1775,6 +1888,11 @@ is-decimal@^2.0.0: resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz" integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" @@ -1838,6 +1956,14 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^4.1.0, js-yaml@~4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" @@ -1895,6 +2021,11 @@ keyv@^4.5.4: dependencies: json-buffer "3.0.1" +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -1988,7 +2119,7 @@ mark.js@8.11.1: resolved "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz" integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== -markdown-it-mathjax3@^4.3.2: +markdown-it-mathjax3@^4, markdown-it-mathjax3@^4.3.2: version "4.3.2" resolved "https://registry.npmjs.org/markdown-it-mathjax3/-/markdown-it-mathjax3-4.3.2.tgz" integrity sha512-TX3GW5NjmupgFtMJGRauioMbbkGsOXAAt1DZ/rzzYmTHqzkO1rNAdiMD4NiruurToPApn2kYy76x02QN26qr2w== @@ -2089,7 +2220,7 @@ mhchemparser@^4.1.0: resolved "https://registry.npmjs.org/mhchemparser/-/mhchemparser-4.2.1.tgz" integrity sha512-kYmyrCirqJf3zZ9t/0wGgRZ4/ZJw//VwaRVGA75C4nhE60vtnIzhl9J9ndkX/h6hxSN7pjg/cE0VxbnNM+bnDQ== -micromark-core-commonmark@2.0.2, micromark-core-commonmark@^2.0.0: +micromark-core-commonmark@^2.0.0, micromark-core-commonmark@2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz" integrity sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w== @@ -2306,7 +2437,7 @@ micromark-util-symbol@^2.0.0: resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz" integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== -micromark-util-types@2.0.1, micromark-util-types@^2.0.0: +micromark-util-types@^2.0.0, micromark-util-types@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz" integrity sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ== @@ -2541,6 +2672,11 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" +path-type@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz" + integrity sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ== + perfect-debounce@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz" @@ -2574,7 +2710,7 @@ postcss-selector-parser@^6.0.15: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss@^8.4.43, postcss@^8.4.48: +postcss@^8, postcss@^8.4.14, postcss@^8.4.43, postcss@^8.4.48: version "8.5.3" resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz" integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== @@ -2593,6 +2729,11 @@ prelude-ls@^1.2.1: resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +"prettier@^1.18.2 || ^2.0.0": + version "2.8.8" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + prettier@^3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz" @@ -2710,6 +2851,19 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +"search-insights@>= 1 < 3": + version "2.17.3" + resolved "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz" + integrity sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ== + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + select@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/select/-/select-1.1.2.tgz" @@ -2751,6 +2905,11 @@ signal-exit@^4.0.1, signal-exit@^4.1.0: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +slash@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + slice-ansi@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" @@ -2782,6 +2941,11 @@ source-map-js@^1.2.0, source-map-js@^1.2.1: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + space-separated-tokens@^2.0.0: version "2.0.2" resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz" @@ -2801,6 +2965,11 @@ speech-rule-engine@^4.0.6: wicked-good-xpath "1.3.0" xmldom-sre "0.1.31" +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + string-argv@^0.3.2: version "0.3.2" resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz" @@ -2871,6 +3040,11 @@ strip-ansi@^7.0.1, strip-ansi@^7.1.0: dependencies: ansi-regex "^6.0.1" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + strip-final-newline@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz" @@ -2948,7 +3122,7 @@ typescript-eslint@^8.26.1: "@typescript-eslint/parser" "8.26.1" "@typescript-eslint/utils" "8.26.1" -typescript@^5.2.2: +typescript@*, typescript@^5.2.2, typescript@>=4.8.4, "typescript@>=4.8.4 <5.9.0": version "5.8.2" resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz" integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== @@ -2960,9 +3134,14 @@ uc.micro@^2.0.0, uc.micro@^2.1.0: undici-types@~7.10.0: version "7.10.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz" integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== +unicorn-magic@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz" + integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== + unist-util-is@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz" @@ -3044,7 +3223,7 @@ vfile@^6.0.0: "@types/unist" "^3.0.0" vfile-message "^4.0.0" -vite@^5.4.14: +"vite@^5.0.0 || ^6.0.0", vite@^5.4.14: version "5.4.14" resolved "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz" integrity sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA== @@ -3086,7 +3265,7 @@ vue-clipboard2@^0.3.3: dependencies: clipboard "^2.0.0" -vue-eslint-parser@^10.1.1: +vue-eslint-parser@^10.0.0, vue-eslint-parser@^10.1.1: version "10.1.1" resolved "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.1.1.tgz" integrity sha512-bh2Z/Au5slro9QJ3neFYLanZtb1jH+W2bKqGHXAoYD4vZgNG3KeotL7JpPv5xzY4UXUXJl7TrIsnzECH63kd3Q== @@ -3106,7 +3285,15 @@ vue-resize@^1.0.1: dependencies: "@babel/runtime" "^7.13.10" -vue@^3.5.13: +vue@^2.6.0: + version "2.7.16" + resolved "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz" + integrity sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw== + dependencies: + "@vue/compiler-sfc" "2.7.16" + csstype "^3.1.0" + +vue@^3.2.25, vue@^3.5.13, vue@3.5.13: version "3.5.13" resolved "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz" integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ== From 21e7834fc214ef95bc166bc89edefbd4967ab91f Mon Sep 17 00:00:00 2001 From: swarnabhasinha Date: Fri, 5 Sep 2025 01:29:19 +0530 Subject: [PATCH 2/2] fix: lint --- .vitepress/components/LLMDropdown.vue.d.ts | 2 +- .vitepress/plugins/llms-plugin.ts | 10 +++++----- .vitepress/vue-shims.d.ts | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.vitepress/components/LLMDropdown.vue.d.ts b/.vitepress/components/LLMDropdown.vue.d.ts index 9b6ae89..a89e6e7 100644 --- a/.vitepress/components/LLMDropdown.vue.d.ts +++ b/.vitepress/components/LLMDropdown.vue.d.ts @@ -1,4 +1,4 @@ import { DefineComponent } from 'vue' -declare const LLMDropdown: DefineComponent<{}, {}, any> +declare const LLMDropdown: DefineComponent, Record, unknown> export default LLMDropdown diff --git a/.vitepress/plugins/llms-plugin.ts b/.vitepress/plugins/llms-plugin.ts index 4e5ff58..2946dcb 100644 --- a/.vitepress/plugins/llms-plugin.ts +++ b/.vitepress/plugins/llms-plugin.ts @@ -46,7 +46,7 @@ export function llmsPlugin(options: LLMsPluginOptions = {}): VitePlugin { exclude = ['**/node_modules/**', '**/.*/**', '**/README.md'] } = options - let viteConfig: any + let viteConfig: { build?: { outDir?: string } } return { name: 'vitepress-llms-plugin', @@ -64,7 +64,7 @@ export function llmsPlugin(options: LLMsPluginOptions = {}): VitePlugin { }, configureServer(server) { // Serve llms.txt files in dev mode - server.middlewares.use('/llms.txt', (req, res, next) => { + server.middlewares.use('/llms.txt', (req, res) => { const llmsPath = resolve(process.cwd(), 'dist', 'llms.txt') if (existsSync(llmsPath)) { res.setHeader('Content-Type', 'text/plain') @@ -75,7 +75,7 @@ export function llmsPlugin(options: LLMsPluginOptions = {}): VitePlugin { } }) - server.middlewares.use('/llms-full.txt', (req, res, next) => { + server.middlewares.use('/llms-full.txt', (req, res) => { const llmsPath = resolve(process.cwd(), 'dist', 'llms-full.txt') if (existsSync(llmsPath)) { res.setHeader('Content-Type', 'text/plain') @@ -168,10 +168,10 @@ export function llmsPlugin(options: LLMsPluginOptions = {}): VitePlugin { const fullUrl = basePath === '/' ? `/${urlPath}` : `${basePath}/${urlPath}` // Extract title from frontmatter or first heading - let pageTitle = frontmatter.title || extractTitleFromMarkdown(markdownContent) || 'Untitled' + const pageTitle = frontmatter.title || extractTitleFromMarkdown(markdownContent) || 'Untitled' // Extract description - let pageDescription = frontmatter.description || extractDescriptionFromMarkdown(markdownContent) + const pageDescription = frontmatter.description || extractDescriptionFromMarkdown(markdownContent) // Add to index format (llms.txt) const indexEntry = pageDescription diff --git a/.vitepress/vue-shims.d.ts b/.vitepress/vue-shims.d.ts index 2b97bd9..28b0633 100644 --- a/.vitepress/vue-shims.d.ts +++ b/.vitepress/vue-shims.d.ts @@ -1,5 +1,5 @@ declare module '*.vue' { import type { DefineComponent } from 'vue' - const component: DefineComponent<{}, {}, any> + const component: DefineComponent, Record, unknown> export default component }