diff --git a/.amp/services.yaml b/.amp/services.yaml index 87e947eb5..e6614b0a4 100644 --- a/.amp/services.yaml +++ b/.amp/services.yaml @@ -4,7 +4,8 @@ services: port: 31420 env: NODE_OPTIONS: --max-old-space-size=3072 - health: /agentic-batch-changes + # YAML cannot read DOCS_BASE_PATH from docs.config.js; keep these in step. + health: /docs/agentic-batch-changes portal: - url: /agentic-batch-changes + url: /docs/agentic-batch-changes title: Sourcegraph Docs diff --git a/.github/workflows/preview-links.yml b/.github/workflows/preview-links.yml index 70c688e0d..20854b43f 100644 --- a/.github/workflows/preview-links.yml +++ b/.github/workflows/preview-links.yml @@ -29,6 +29,12 @@ jobs: if: github.event.client_payload.environment != 'production' runs-on: ubuntu-latest steps: + # The PR's own docs.config.js, for the basePath the preview serves under. + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.client_payload.git.sha || inputs.sha }} + sparse-checkout: docs.config.js + sparse-checkout-cone-mode: false - uses: actions/github-script@v7 env: PREVIEW_URL: ${{ github.event.client_payload.url || inputs.url }} @@ -36,6 +42,7 @@ jobs: with: script: | const {PREVIEW_URL, COMMIT_SHA} = process.env; + const {DOCS_BASE_PATH} = require(`${process.env.GITHUB_WORKSPACE}/docs.config.js`); if (!PREVIEW_URL || !/^[0-9a-f]{40}$/i.test(COMMIT_SHA ?? '')) { core.setFailed(`Need a preview URL and a full commit SHA; got url=${JSON.stringify(PREVIEW_URL)} sha=${JSON.stringify(COMMIT_SHA)}. ` + `Vercel sends these as client_payload.url and client_payload.git.sha; workflow_dispatch takes them as the url and sha inputs.`); @@ -60,11 +67,11 @@ jobs: }); // Mirror contentlayer's flattenedPath: docs/.mdx -> /, - // with a trailing /index dropped. Preview deployments have no basePath. + // with a trailing /index dropped, under the basePath. const pages = files .filter(f => f.filename.startsWith('docs/') && f.filename.endsWith('.mdx') && f.status !== 'removed') .map(f => f.filename.slice('docs/'.length, -'.mdx'.length).replace(/^index$/, '').replace(/\/index$/, '')) - .map(path => ({path, url: `${previewUrl}/${path}`})); + .map(path => ({path, url: `${previewUrl}${DOCS_BASE_PATH}/${path}`})); if (pages.length === 0) { core.info(`PR #${pr.number} changes no docs pages; not commenting.`); diff --git a/.gitignore b/.gitignore index a89a2fd9d..797a66fa9 100644 --- a/.gitignore +++ b/.gitignore @@ -37,25 +37,17 @@ next-env.d.ts # contentlayer .contentlayer -# search index file generated on build -/public/search.json - # Algolia records/settings generated by dev/algolia-index.mjs /.algolia/ # IDEs .idea -# We ignore the generated file as it should always be generated -public/changelog.rss - # env file .env # amp orb portal state .amp/portals/ -public/technical-changelog.rss - # script output logs/ diff --git a/AGENTS.md b/AGENTS.md index 8ae767663..b3a6ddfc2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -32,7 +32,7 @@ linking the job log, instead of failing the PR: an empty report says nothing about the PR - **Prove changed links resolve on a deploy**: - `node dev/verify-links-live.mjs --site ` prints a + `node dev/verify-links-live.mjs --site /docs` prints a Markdown table for the PR description - **Spell check**: `.github/workflows/spellcheck.yml` runs `dev/check-spelling.mjs` on the lines a PR adds plus its title and @@ -92,3 +92,13 @@ next run. (From a manifest), install it, copy its Bot User OAuth Token into the secret, and `/invite @Vercel build log` to the channel. + + + +# This is NOT the Next.js you know + +This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices. + +This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean. + + diff --git a/README.md b/README.md index 398d259ba..dd6064ea3 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Next, run the development server: pnpm run dev ``` -Finally, open [`http://localhost:3000`](http://localhost:3000) in your browser +Finally, open [`http://localhost:3000/docs`](http://localhost:3000/docs) in your browser to view the website. ## Writing and contributing to Sourcegraph Docs @@ -225,7 +225,7 @@ instructions visit As you make changes to the documentation, the development server will automatically update. Review your changes by navigating to -`http://localhost:3000` in your browser. +`http://localhost:3000/docs` in your browser. ### Previewing Vercel Deployments diff --git a/contentlayer.config.ts b/contentlayer.config.ts index abc08c904..e6dfe5be1 100644 --- a/contentlayer.config.ts +++ b/contentlayer.config.ts @@ -1,11 +1,8 @@ import {defineDocumentType, makeSource} from 'contentlayer2/source-files'; -import fs from 'fs'; import rehypeAutolinkHeadings from 'rehype-autolink-headings'; import rehypePrettyCode from 'rehype-pretty-code'; import rehypeSlug from 'rehype-slug'; import remarkGfm from 'remark-gfm'; -import {MDXDocument, allCoreContent} from './src/utils/contentlayer'; -import {searchMetadata} from './src/data/search'; import shadesOfPurple from './src/styles/shades-of-purple.json'; import GithubSlugger from 'github-slugger'; import {visit} from 'unist-util-visit'; @@ -82,19 +79,6 @@ export const Post = defineDocumentType(() => ({ } })); -function createSearchIndex(allPosts: MDXDocument[]) { - if ( - searchMetadata?.provider === 'kbar' && - searchMetadata.kbarConfig.searchDocumentsPath - ) { - fs.writeFileSync( - `public/search.json`, - JSON.stringify(allCoreContent(allPosts)) - ); - console.log('Search index generated...'); - } -} - const prettyCodeOptions = { keepBackground: true, theme: shadesOfPurple @@ -138,9 +122,5 @@ export default makeSource({ rehypePlugins: rehypePlugins, // Externalize mermaid to prevent bundling its problematic Unicode regex patterns esbuildOptions: options => ({...options, external: [...(options.external ?? []), 'mermaid']}) - }, - onSuccess: async importData => { - const {allPosts} = await importData(); - createSearchIndex(allPosts); } }); diff --git a/cspell-allow-list.txt b/cspell-allow-list.txt index 00ef52265..98ec580ea 100644 --- a/cspell-allow-list.txt +++ b/cspell-allow-list.txt @@ -241,6 +241,7 @@ horsegraph horsten hostmatcher hostpath +hrefs HSTS httptest huggingface @@ -277,7 +278,6 @@ journalctl Jsonnet jsonschemadoc Kaspersky -kbar keegancsmith keymap keymappings diff --git a/dev/algolia-index.mjs b/dev/algolia-index.mjs index a7ebed8c7..b8f47e83d 100644 --- a/dev/algolia-index.mjs +++ b/dev/algolia-index.mjs @@ -25,12 +25,12 @@ import fs from 'node:fs'; import path from 'node:path'; import {fileURLToPath} from 'node:url'; import GithubSlugger from 'github-slugger'; +import config from '../docs.config.js'; const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'); const generatedDir = path.join(root, '.contentlayer/generated/Post'); const outDir = path.join(root, '.algolia'); -const SITE_URL = 'https://sourcegraph.com/docs'; const DEFAULT_INDEX = 'sourcegraph_docs'; const DEFAULT_APP_ID = 'JSZOJ0ZYVG'; // Consecutive paragraphs under the same heading are merged into chunks of up to @@ -282,7 +282,7 @@ function contentHash(content) { function buildPageRecords(post, owner, deduplication) { const url = post.url; - const pageUrl = SITE_URL + url; + const pageUrl = config.DOCS_PROD_URL + url; const slugger = new GithubSlugger(); const pageRank = Math.round((post.seoPriority ?? 0.5) * 100); const records = []; diff --git a/dev/check-links.mjs b/dev/check-links.mjs index f9fd80857..74620146a 100644 --- a/dev/check-links.mjs +++ b/dev/check-links.mjs @@ -46,6 +46,7 @@ import fs from 'fs'; import path from 'path'; import GithubSlugger from 'github-slugger'; import { fileURLToPath, pathToFileURL } from 'url'; +import config from '../docs.config.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); @@ -279,11 +280,17 @@ function extractLinks(content, filePath) { } // Absolute links to this site, in every form the docs have used: http or https, -// scheme-relative, www., the legacy docs.sourcegraph.com host, or sourcegraph.com/docs. -// Links pinned to an old version (/@5.1/..., /v/5.1/...) are external: the -// middleware sends them to that version's own site (5.1.sourcegraph.com), whose -// pages are not in this repo, so only --check-external can validate them. -const SELF_LINK_REGEX = /^(?:https?:)?\/\/(?:www\.)?(?:docs\.sourcegraph\.com|sourcegraph\.com\/docs)(?=[/#?]|$)(?!\/@|\/v\/)/i; +// scheme-relative, www., the legacy docs.sourcegraph.com host, or the production +// URL from docs.config.js. Links pinned to an old version (/@5.1/..., /v/5.1/...) +// are external: the middleware sends them to that version's own site +// (5.1.sourcegraph.com), whose pages are not in this repo, so only +// --check-external can validate them. +const escapeRegExp = text => text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +const PROD_HOST_AND_PATH = config.DOCS_PROD_URL.replace(/^https?:\/\//, ''); +const SELF_LINK_REGEX = new RegExp( + `^(?:https?:)?//(?:www\\.)?(?:docs\\.sourcegraph\\.com|${escapeRegExp(PROD_HOST_AND_PATH)})(?=[/#?]|$)(?!/@|/v/)`, + 'i' +); export function isSelfLink(url) { return SELF_LINK_REGEX.test(url); @@ -580,7 +587,7 @@ function markdownFindingList(findings) { const ABSOLUTE_LINKS_ADVICE = 'Write links on this site as relative paths (`/admin/config/site-config`), ' + - 'not `https://sourcegraph.com/docs/…`: absolute links leave the preview ' + + `not \`${config.DOCS_PROD_URL}/…\`: absolute links leave the preview ` + 'deployment and local dev server, and hide moved pages behind redirects.'; // Body for a pull request comment. With --diff, findings are split into diff --git a/dev/check-redirects.mjs b/dev/check-redirects.mjs index f84d0e191..32d038c21 100644 --- a/dev/check-redirects.mjs +++ b/dev/check-redirects.mjs @@ -10,8 +10,8 @@ * - the source has no #fragment: browsers never send fragments, so such an * entry can never match * - the source has no earlier entry: the middleware uses the first match only - * - neither path starts with /docs: the middleware strips that prefix from - * requests and adds it to destinations + * - neither path starts with the basePath (docs.config.js): Next strips it + * from requests and the middleware adds it to destinations * - the destination is a page, not another redirect * - the destination page exists under docs/ (or is a file under public/) * - when the destination has a #fragment, the heading exists on that page @@ -39,11 +39,13 @@ import path from 'path'; import vm from 'vm'; import {fileURLToPath} from 'url'; import {extractHeadings, listFiles, routeFor} from './check-links.mjs'; +import config from '../docs.config.js'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const args = process.argv.slice(2); const ROOT_DIR = path.resolve(flagValue('--root') ?? path.dirname(__dirname)); +const BASE_PATH = config.DOCS_BASE_PATH; const FORMAT = flagValue('--format') ?? 'text'; const BASELINE_FILE = flagValue('--baseline'); const LINK_BASE = flagValue('--link-base')?.replace(/\/$/, ''); @@ -72,12 +74,12 @@ const PROBLEM = { 'If the redirect destination has a #fragment, it takes precedence, otherwise if the customer ' + "clicked a link which has a #fragment, it'll be kept and tried on the destination page." }, - docsPrefix: { - heading: 'Source or destination starts with /docs', + basePathPrefix: { + heading: `Source or destination starts with ${BASE_PATH}`, fix: - 'Write paths without the /docs prefix. The site removes /docs from the requested URL before ' + - 'matching sources, and adds it back in front of the destination, so a /docs/... source never ' + - 'matches and a /docs/... destination lands on /docs/docs/....' + `Write paths without the ${BASE_PATH} prefix. The site removes ${BASE_PATH} from the requested URL before ` + + `matching sources, and adds it back in front of the destination, so a ${BASE_PATH}/... source never ` + + `matches and a ${BASE_PATH}/... destination lands on ${BASE_PATH}${BASE_PATH}/....` }, duplicateSource: { heading: @@ -198,7 +200,8 @@ function findBrokenRedirects(redirects, headingsByRoute) { const report = (redirect, problem, {detail, fix} = {}) => findings.push({...redirect, problem: problem.heading, detail, fix}); const withoutFragment = url => url.split('#')[0]; - const withoutDocsPrefix = url => url.replace(/^\/docs(?=\/)/, ''); + const withoutBasePath = url => + url.startsWith(`${BASE_PATH}/`) ? url.slice(BASE_PATH.length) : url; const isRedirect = pathname => firstBySource.has(pathname) && !headingsByRoute.has(pathname); @@ -220,13 +223,13 @@ function findBrokenRedirects(redirects, headingsByRoute) { report(redirect, PROBLEM.shadowsPage); } if ( - source.pathname.startsWith('/docs/') || - redirect.destination.startsWith('/docs/') + source.pathname.startsWith(`${BASE_PATH}/`) || + redirect.destination.startsWith(`${BASE_PATH}/`) ) { - report(redirect, PROBLEM.docsPrefix, { + report(redirect, PROBLEM.basePathPrefix, { fix: { - source: withoutDocsPrefix(redirect.source), - destination: withoutDocsPrefix(redirect.destination) + source: withoutBasePath(redirect.source), + destination: withoutBasePath(redirect.destination) } }); continue; diff --git a/dev/verify-links-live.mjs b/dev/verify-links-live.mjs index 7f4434a3e..f2120d68e 100644 --- a/dev/verify-links-live.mjs +++ b/dev/verify-links-live.mjs @@ -13,23 +13,23 @@ // Prints a Markdown table to paste into a PR. Old links point at --old-site so // reviewers can see the current breakage. // -// node dev/verify-links-live.mjs --site https://.vercel.app [--old-site https://sourcegraph.com/docs] [--base origin/main] +// node dev/verify-links-live.mjs --site https://.vercel.app/docs [--old-site https://sourcegraph.com/docs] [--base origin/main] // -// Production serves under https://sourcegraph.com/docs (basePath in -// next.config.js); Vercel previews serve at the root, so pass the full prefix -// in --site. +// Every deployment serves under the basePath (docs.config.js), so --site +// includes that prefix. Both default to production. import { execSync } from 'node:child_process'; import fs from 'node:fs'; import path from 'node:path'; import { extractHeadings } from './check-links.mjs'; +import config from '../docs.config.js'; const args = process.argv.slice(2); const argValue = (flag, fallback) => { const index = args.indexOf(flag); return index === -1 ? fallback : args[index + 1]; }; -const SITE = argValue('--site', 'https://sourcegraph.com/docs').replace(/\/$/, ''); -const OLD_SITE = argValue('--old-site', 'https://sourcegraph.com/docs').replace(/\/$/, ''); +const SITE = argValue('--site', config.DOCS_PROD_URL).replace(/\/$/, ''); +const OLD_SITE = argValue('--old-site', config.DOCS_PROD_URL).replace(/\/$/, ''); const BASE_REF = argValue('--base', 'origin/main'); const LINK = /\]\(([^)\s]+)\)|href=["']([^"']+)["']/g; diff --git a/docs.config.js b/docs.config.js index f5ca0dd01..51c5d04be 100644 --- a/docs.config.js +++ b/docs.config.js @@ -1,5 +1,15 @@ +// sourcegraph.com proxies DOCS_BASE_PATH/* to this site. Previews and local dev +// use the same basePath so a root-relative URL that 404s in production 404s +// there too. To move the site, change DOCS_BASE_PATH here and the load balancer +// rule in sourcegraph/infrastructure; nothing else spells the path out. +const DOCS_BASE_PATH = '/docs'; +const DOCS_PROD_ORIGIN = 'https://sourcegraph.com'; + const config = { - DOCS_LATEST_VERSION: '8.0' + DOCS_LATEST_VERSION: '8.0', + DOCS_BASE_PATH, + DOCS_PROD_ORIGIN, + DOCS_PROD_URL: `${DOCS_PROD_ORIGIN}${DOCS_BASE_PATH}` }; module.exports = config; diff --git a/next.config.js b/next.config.js index 941a822af..eea492352 100644 --- a/next.config.js +++ b/next.config.js @@ -1,34 +1,23 @@ const {PHASE_DEVELOPMENT_SERVER} = require('next/constants'); const {withContentlayer} = require('next-contentlayer2'); +const {DOCS_BASE_PATH} = require('./docs.config.js'); /** @type {import('next').NextConfig} */ -// in prod, we serve the docs from sourcegraph.com/docs, and this requires special config on the GFE side -// in preview/development, this is not necessary. -// -// VERCEL_ENV is a system env var set by Vercel -// https://vercel.com/docs/projects/environment-variables/system-environment-variables -const basePath = process.env.VERCEL_ENV === 'production' ? '/docs' : ''; - const nextConfig = { reactStrictMode: true, - basePath, + basePath: DOCS_BASE_PATH, // Orb portals proxy the dev server through a different hostname. allowedDevOrigins: process.env.PUBLIC_URL ? [new URL(process.env.PUBLIC_URL).hostname] : [], - env: { - NEXT_PUBLIC_DOCS_BASE_PATH: basePath - }, - // With basePath set, nothing serves `/`, so the *.vercel.app deployment URL - // that Vercel links from Slack / GitHub 404s. sourcegraph.com never proxies - // `/` to us, so this only affects visitors opening that raw URL. Stay on the - // same host so they see this exact deployment, not whatever is live. + // Nothing serves `/`, so the deployment URLs Vercel links from Slack / GitHub + // and http://localhost:3000 would 404. sourcegraph.com never proxies `/` to + // us. Stay on the same host so visitors see this exact deployment. async redirects() { - if (!basePath) return []; return [ { source: '/', - destination: basePath, + destination: DOCS_BASE_PATH, basePath: false, permanent: false } diff --git a/package.json b/package.json index c40eaf290..e9a166ec7 100644 --- a/package.json +++ b/package.json @@ -27,12 +27,8 @@ "dependencies": { "@algolia/autocomplete-core": "^1.13.0", "@algolia/client-search": "^4.22.1", - "@docsearch/react": "^3.5.2", "@headlessui/react": "^2.2.10", "@heroicons/react": "^2.1.1", - "@iconify-json/logos": "^1.2.10", - "@iconify/types": "^2.0.0", - "@mdx-js/mdx": "^3.1.0", "@radix-ui/react-hover-card": "^1.1.5", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", @@ -40,34 +36,24 @@ "@types/node": "24.13.4", "@types/react": "19.3.0", "@types/react-dom": "19.3.0", - "@types/react-highlight-words": "^0.16.7", "algoliasearch": "^4.22.1", "autoprefixer": "^10.4.16", "class-variance-authority": "^0.7.0", "clsx": "^1.2.1", "contentlayer2": "^0.5.8", - "date-fns": "^2.30.0", - "fast-glob": "^3.3.2", - "feed": "^4.2.2", "github-slugger": "^2.0.0", "lucide-react": "^0.372.0", - "mdx": "^0.3.1", "mermaid": "^11.16.1", "next": "^16.3.5", "next-contentlayer2": "^0.5.8", "next-themes": "^0.4.6", - "prism-react-renderer": "^2.3.1", "react": "19.3.0", "react-dom": "19.3.0", - "react-highlight-words": "^0.20.0", - "react-syntax-highlighter": "^15.6.1", "rehype-autolink-headings": "^7.1.0", "rehype-pretty-code": "^0.10.2", "rehype-slug": "^6.0.0", - "rehype-toc": "^3.0.2", "remark-gfm": "^4.0.1", "shiki": "^0.14.7", - "simple-functional-loader": "^1.2.1", "svg-pan-zoom": "^3.6.2", "tailwind-merge": "^2.3.0", "tailwindcss": "^3.4.0", @@ -76,7 +62,6 @@ "unist-util-visit": "^5.0.0" }, "devDependencies": { - "dotenv": "^16.4.7", "eslint": "^9.39.5", "eslint-config-next": "16.3.5", "glob": "^11.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2ef3cd5c0..500fc0ebd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,24 +14,12 @@ importers: '@algolia/client-search': specifier: ^4.22.1 version: 4.25.3 - '@docsearch/react': - specifier: ^3.5.2 - version: 3.9.0(@algolia/client-search@4.25.3)(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(search-insights@2.17.3) '@headlessui/react': specifier: ^2.2.10 version: 2.2.10(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@heroicons/react': specifier: ^2.1.1 version: 2.2.0(react@19.3.0) - '@iconify-json/logos': - specifier: ^1.2.10 - version: 1.2.10 - '@iconify/types': - specifier: ^2.0.0 - version: 2.0.0 - '@mdx-js/mdx': - specifier: ^3.1.0 - version: 3.1.1 '@radix-ui/react-hover-card': specifier: ^1.1.5 version: 1.1.15(@types/react-dom@19.3.0(@types/react@19.3.0))(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0) @@ -53,9 +41,6 @@ importers: '@types/react-dom': specifier: 19.3.0 version: 19.3.0(@types/react@19.3.0) - '@types/react-highlight-words': - specifier: ^0.16.7 - version: 0.16.7 algoliasearch: specifier: ^4.22.1 version: 4.25.3 @@ -71,24 +56,12 @@ importers: contentlayer2: specifier: ^0.5.8 version: 0.5.8(esbuild@0.18.20) - date-fns: - specifier: ^2.30.0 - version: 2.30.0 - fast-glob: - specifier: ^3.3.2 - version: 3.3.3 - feed: - specifier: ^4.2.2 - version: 4.2.2 github-slugger: specifier: ^2.0.0 version: 2.0.0 lucide-react: specifier: ^0.372.0 version: 0.372.0(react@19.3.0) - mdx: - specifier: ^0.3.1 - version: 0.3.1 mermaid: specifier: ^11.16.1 version: 11.17.2 @@ -101,21 +74,12 @@ importers: next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.3.0(react@19.3.0))(react@19.3.0) - prism-react-renderer: - specifier: ^2.3.1 - version: 2.4.1(react@19.3.0) react: specifier: 19.3.0 version: 19.3.0 react-dom: specifier: 19.3.0 version: 19.3.0(react@19.3.0) - react-highlight-words: - specifier: ^0.20.0 - version: 0.20.0(react@19.3.0) - react-syntax-highlighter: - specifier: ^15.6.1 - version: 15.6.6(react@19.3.0) rehype-autolink-headings: specifier: ^7.1.0 version: 7.1.0 @@ -125,18 +89,12 @@ importers: rehype-slug: specifier: ^6.0.0 version: 6.0.0 - rehype-toc: - specifier: ^3.0.2 - version: 3.0.2 remark-gfm: specifier: ^4.0.1 version: 4.0.1 shiki: specifier: ^0.14.7 version: 0.14.7 - simple-functional-loader: - specifier: ^1.2.1 - version: 1.2.1 svg-pan-zoom: specifier: ^3.6.2 version: 3.6.2 @@ -156,9 +114,6 @@ importers: specifier: ^5.0.0 version: 5.1.0 devDependencies: - dotenv: - specifier: ^16.4.7 - version: 16.6.1 eslint: specifier: ^9.39.5 version: 9.39.5(jiti@1.21.7) @@ -180,38 +135,14 @@ importers: packages: - '@algolia/abtesting@1.14.0': - resolution: {integrity: sha512-cZfj+1Z1dgrk3YPtNQNt0H9Rr67P8b4M79JjUKGS0d7/EbFbGxGgSu6zby5f22KXo3LT0LZa4O2c6VVbupJuDg==} - engines: {node: '>= 14.0.0'} - - '@algolia/autocomplete-core@1.17.9': - resolution: {integrity: sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==} - '@algolia/autocomplete-core@1.19.5': resolution: {integrity: sha512-/kAE3mMBage/9m0OGnKQteSa7/eIfvhiKx28OWj857+dJ6qYepEBuw5L8its2oTX8ZNM/6TA3fo49kMwgcwjlg==} - '@algolia/autocomplete-plugin-algolia-insights@1.17.9': - resolution: {integrity: sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==} - peerDependencies: - search-insights: '>= 1 < 3' - '@algolia/autocomplete-plugin-algolia-insights@1.19.5': resolution: {integrity: sha512-5zbetV9h2VxH+Mxx27I7BH2EIACVRUBE1FNykBK+2c2M+mhXYMY4npHbbGYj6QDEw3VVvH2UxAnghFpCtC6B/w==} peerDependencies: search-insights: '>= 1 < 3' - '@algolia/autocomplete-preset-algolia@1.17.9': - resolution: {integrity: sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - - '@algolia/autocomplete-shared@1.17.9': - resolution: {integrity: sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - '@algolia/autocomplete-shared@1.19.5': resolution: {integrity: sha512-yblBczNXtm2cCVzX4UAY3KkjdefmZPn1gWbIi8Q7qfBw7FjcKq2EjEl/65x4kU9nUc/ZkB5SeUf/bkqLEnA5gA==} peerDependencies: @@ -227,91 +158,39 @@ packages: '@algolia/cache-in-memory@4.25.3': resolution: {integrity: sha512-6u/fVDr3ZIJIgtqdgUDB5kL9KcOdowmxf052bjfI1XhFTpxmIa49HcAEh1y2R0YqmmNDQHaPCT0QzwkINhWbug==} - '@algolia/client-abtesting@5.48.0': - resolution: {integrity: sha512-n17WSJ7vazmM6yDkWBAjY12J8ERkW9toOqNgQ1GEZu/Kc4dJDJod1iy+QP5T/UlR3WICgZDi/7a/VX5TY5LAPQ==} - engines: {node: '>= 14.0.0'} - '@algolia/client-account@4.25.3': resolution: {integrity: sha512-TkSVT5+davX4Dzt3gyEJ+SAfaVT5bHrZctAiup/AGPV7sNBigv4kuZv40OEbMMgu1uPJ4zw3tA39Oj/mOjd6gg==} '@algolia/client-analytics@4.25.3': resolution: {integrity: sha512-vHSU4zBaENbRjzwFYB3OQuDlKXwe+YDRgyGh1kKZhcMRDSsEBH/PGNWn+2ZmtbgrNS52TC+TJ8oUOg5wXIeISw==} - '@algolia/client-analytics@5.48.0': - resolution: {integrity: sha512-v5bMZMEqW9U2l40/tTAaRyn4AKrYLio7KcRuHmLaJtxuJAhvZiE7Y62XIsF070juz4MN3eyvfQmI+y5+OVbZuA==} - engines: {node: '>= 14.0.0'} - '@algolia/client-common@4.25.3': resolution: {integrity: sha512-ExRdFnJDe7t1/DgJUsqjzZKeI9gkLft4oVttlyTMru8TRNWA6eZ0wHRj4uQ9N3sxmzPiw3C53wigor705n1yQw==} - '@algolia/client-common@5.48.0': - resolution: {integrity: sha512-7H3DgRyi7UByScc0wz7EMrhgNl7fKPDjKX9OcWixLwCj7yrRXDSIzwunykuYUUO7V7HD4s319e15FlJ9CQIIFQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-insights@5.48.0': - resolution: {integrity: sha512-tXmkB6qrIGAXrtRYHQNpfW0ekru/qymV02bjT0w5QGaGw0W91yT+53WB6dTtRRsIrgS30Al6efBvyaEosjZ5uw==} - engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@4.25.3': resolution: {integrity: sha512-ycCkQ0nWoH+sf0Gh20kk4NfJ+iUBc59ailqNCFcVl/0th1dtHF0P61IGetTsSmxVPZedDvnHop2z1ujWpYzNmw==} - '@algolia/client-personalization@5.48.0': - resolution: {integrity: sha512-4tXEsrdtcBZbDF73u14Kb3otN+xUdTVGop1tBjict+Rc/FhsJQVIwJIcTrOJqmvhtBfc56Bu65FiVOnpAZCxcw==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-query-suggestions@5.48.0': - resolution: {integrity: sha512-unzSUwWFpsDrO8935RhMAlyK0Ttua/5XveVIwzfjs5w+GVBsHgIkbOe8VbBJccMU/z1LCwvu1AY3kffuSLAR5Q==} - engines: {node: '>= 14.0.0'} - '@algolia/client-search@4.25.3': resolution: {integrity: sha512-GFA99zL6cfNSDEDHfEJ0TmVYmXCJofQpForFhCShQLfRQgBYud9UBHOh4LB6ZSzmtVDIfP33joCA9hxQWPIbFw==} - '@algolia/client-search@5.48.0': - resolution: {integrity: sha512-RB9bKgYTVUiOcEb5bOcZ169jiiVW811dCsJoLT19DcbbFmU4QaK0ghSTssij35QBQ3SCOitXOUrHcGgNVwS7sQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/ingestion@1.48.0': - resolution: {integrity: sha512-rhoSoPu+TDzDpvpk3cY/pYgbeWXr23DxnAIH/AkN0dUC+GCnVIeNSQkLaJ+CL4NZ51cjLIjksrzb4KC5Xu+ktw==} - engines: {node: '>= 14.0.0'} - '@algolia/logger-common@4.25.3': resolution: {integrity: sha512-RrlmuHNTc9CIgykWh37QduDAkpX4745KQ75I+vhgT5ER3BBykaYByDTyWkyFSSlZjpDHXtOymu9epNbI5V6OWQ==} '@algolia/logger-console@4.25.3': resolution: {integrity: sha512-s8AtfF9W+6Pbxfwkmzywd8ThVJ04D4JZlNyBdCuWpC5b3jzx1JAXT9ZL8K2faUsO4rEdHpy9LXMURvF7cQAE0w==} - '@algolia/monitoring@1.48.0': - resolution: {integrity: sha512-aSe6jKvWt+8VdjOaq2ERtsXp9+qMXNJ3mTyTc1VMhNfgPl7ArOhRMRSQ8QBnY8ZL4yV5Xpezb7lAg8pdGrrulg==} - engines: {node: '>= 14.0.0'} - '@algolia/recommend@4.25.3': resolution: {integrity: sha512-/vpXzDFLmrkcM1UOvZae8i/z8wRs2uaKKlPaHqN24ySADWKyf2zxVsDmtcaGMYzBYqYsKR1XKFvwGA5HQxaZxQ==} - '@algolia/recommend@5.48.0': - resolution: {integrity: sha512-p9tfI1bimAaZrdiVExL/dDyGUZ8gyiSHsktP1ZWGzt5hXpM3nhv4tSjyHtXjEKtA0UvsaHKwSfFE8aAAm1eIQA==} - engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@4.25.3': resolution: {integrity: sha512-5ZXO55IDqXUehQKilVYU6OdUBT2XGI+JIki2UsxUkMykH4ksA9EU8YZJth1ZwEYTDC50bVSH32VCYsOFB0MUTA==} - '@algolia/requester-browser-xhr@5.48.0': - resolution: {integrity: sha512-XshyfpsQB7BLnHseMinp3fVHOGlTv6uEHOzNK/3XrEF9mjxoZAcdVfY1OCXObfwRWX5qXZOq8FnrndFd44iVsQ==} - engines: {node: '>= 14.0.0'} - '@algolia/requester-common@4.25.3': resolution: {integrity: sha512-n5dJA5jlIle5IQavlDWBXC46lw/VuwFbbknWJcPiJ6nJ6lRllpLOhV2ZJeUdCvRyg/6zG18h+9+Q/m2d/vLEIw==} - '@algolia/requester-fetch@5.48.0': - resolution: {integrity: sha512-Q4XNSVQU89bKNAPuvzSYqTH9AcbOOiIo6AeYMQTxgSJ2+uvT78CLPMG89RIIloYuAtSfE07s40OLV50++l1Bbw==} - engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@4.25.3': resolution: {integrity: sha512-7BXWAyVMK1Z3gT+2RPv0I48HfaIlho3nCQaB/tjziw+DdPigHRDq+xjtdzL8y+5O1g7LEdlPI9QHAgDbW/BLXw==} - '@algolia/requester-node-http@5.48.0': - resolution: {integrity: sha512-ZgxV2+5qt3NLeUYBTsi6PLyHcENQWC0iFppFZekHSEDA2wcLdTUjnaJzimTEULHIvJuLRCkUs4JABdhuJktEag==} - engines: {node: '>= 14.0.0'} - '@algolia/transporter@4.25.3': resolution: {integrity: sha512-2yji+TKjC1uOxhJ9pCdw7lQm6GSiQ+fMvNH4es6oz82DrBpkVHkeU49HmpyTqz8Ai9e+nW/UBz8T9+UyBul3dA==} @@ -430,26 +309,6 @@ packages: '@effect-ts/otel-node': optional: true - '@docsearch/css@3.9.0': - resolution: {integrity: sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==} - - '@docsearch/react@3.9.0': - resolution: {integrity: sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==} - peerDependencies: - '@types/react': '>= 16.8.0 < 20.0.0' - react: '>= 16.8.0 < 20.0.0' - react-dom: '>= 16.8.0 < 20.0.0' - search-insights: '>= 1 < 3' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true - search-insights: - optional: true - '@effect-ts/core@0.60.5': resolution: {integrity: sha512-qi1WrtJA90XLMnj2hnUszW9Sx4dXP03ZJtCc5DiUBIOhF4Vw7plfb65/bdBySPoC9s7zy995TdUX1XBSxUkl5w==} @@ -722,9 +581,6 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@iconify-json/logos@1.2.10': - resolution: {integrity: sha512-qxaXKJ6fu8jzTMPQdHtNxlfx6tBQ0jXRbHZIYy5Ilh8Lx9US9FsAdzZWUR8MXV8PnWTKGDFO4ZZee9VwerCyMA==} - '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -913,10 +769,6 @@ packages: resolution: {integrity: sha512-2X6bvghJ/JAoZO52lbgyAPFj8uCflhTo2g7nkFzEQdXd/D8rEeD4HtmTEpmtGCva260fcd66YNXBOYdnmHqSOg==} engines: {node: '>=12'} - '@jsdevtools/rehype-toc@3.0.2': - resolution: {integrity: sha512-n5JEf16Wr4mdkRMZ8wMP/wN9/sHmTjRPbouXjJH371mZ2LEGDl72t8tEsMRNFerQN/QJtivOxqK1frdGa4QK5Q==} - engines: {node: '>=10'} - '@jsonjoy.com/base64@1.1.2': resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} engines: {node: '>=10.0'} @@ -1704,17 +1556,11 @@ packages: '@types/node@24.13.4': resolution: {integrity: sha512-YJ7EqCstVTzIr0fMr7qul/977en+pQHrfmuKIo6Zr9i75Be21dr3MovcfvGtyvi2HAUrRerWps5sMO9I7WaxDw==} - '@types/prismjs@1.26.6': - resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} - '@types/react-dom@19.3.0': resolution: {integrity: sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q==} peerDependencies: '@types/react': ^19.3.0 - '@types/react-highlight-words@0.16.7': - resolution: {integrity: sha512-+upXTIaRd3rGvh1aDQSs9z5X+sV3UM6Jrmjk03GN2GXl4v/+iOJKQj2LZHo6Vp2IoTvMdtxgME26feqo12xXLg==} - '@types/react@19.3.0': resolution: {integrity: sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==} @@ -1907,10 +1753,6 @@ packages: algoliasearch@4.25.3: resolution: {integrity: sha512-kgeIixgDiB+FbH1cHDFUtTNkxdJadHryF8lSPIHHQkEeUrzZA1Hi3PLL+EgNubO0dch4ALNb5G4rw+FDCv3Vbw==} - algoliasearch@5.48.0: - resolution: {integrity: sha512-aD8EQC6KEman6/S79FtPdQmB7D4af/etcRL/KwiKFKgAE62iU8c5PeEQvpvIcBPurC3O/4Lj78nOl7ZcoazqSw==} - engines: {node: '>= 14.0.0'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1950,10 +1792,6 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} - array-find-index@1.0.2: - resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} - engines: {node: '>=0.10.0'} - array-includes@3.1.9: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} @@ -2030,9 +1868,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -2079,14 +1914,6 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - camelcase-keys@2.1.0: - resolution: {integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==} - engines: {node: '>=0.10.0'} - - camelcase@2.1.1: - resolution: {integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==} - engines: {node: '>=0.10.0'} - caniuse-lite@1.0.30001769: resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} @@ -2103,21 +1930,12 @@ packages: character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} - character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} @@ -2158,9 +1976,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - comma-separated-tokens@1.0.8: - resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} - comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -2215,10 +2030,6 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - currently-unhandled@0.4.1: - resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} - engines: {node: '>=0.10.0'} - cytoscape-cose-bilkent@4.1.0: resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} peerDependencies: @@ -2390,10 +2201,6 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - date-fns@2.30.0: - resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} - engines: {node: '>=0.11'} - dayjs@1.11.23: resolution: {integrity: sha512-QDTCU0M0MxR3hQfnlDJfwekQiaanm1ubOD231u73WBckQ/fsamwRLiE2GBz6D3a/xF1NgfiDLJjXBa1hYOYTtQ==} @@ -2458,10 +2265,6 @@ packages: dompurify@3.4.15: resolution: {integrity: sha512-EUBjM+B+lkDE41iE82DDSCfkoPGfXx8IxFxPMjNzm/Uk4xDet77rTN9wqlxlVg71kK7XGuUMv6wUxJUwwv+Xyw==} - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2475,13 +2278,6 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - es-abstract@1.24.1: resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} @@ -2720,9 +2516,6 @@ packages: fastq@1.20.1: resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - fault@1.0.4: - resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==} - fault@2.0.1: resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} @@ -2735,10 +2528,6 @@ packages: picomatch: optional: true - feed@4.2.2: - resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} - engines: {node: '>=0.4.0'} - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -2747,10 +2536,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-up@1.1.2: - resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} - engines: {node: '>=0.10.0'} - find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -2816,10 +2601,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stdin@4.0.1: - resolution: {integrity: sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==} - engines: {node: '>=0.10.0'} - get-symbol-description@1.1.0: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} @@ -2866,9 +2647,6 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - gray-matter@4.0.3: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} @@ -2919,9 +2697,6 @@ packages: hast-util-is-element@3.0.0: resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - hast-util-parse-selector@2.2.5: - resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} - hast-util-parse-selector@3.1.1: resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} @@ -2943,9 +2718,6 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - hastscript@6.0.0: - resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} - hastscript@7.2.0: resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} @@ -2955,18 +2727,6 @@ packages: hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - highlight-words-core@1.2.3: - resolution: {integrity: sha512-m1O9HW3/GNHxzSIXWw1wCNXXsgLlxrP0OI6+ycGUhiUHkikqW3OrwVHz+lxeNBe5yqLESdIcj8PowHQ2zLvUvQ==} - - highlight.js@10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - - highlightjs-vue@1.0.0: - resolution: {integrity: sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==} - - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -2998,10 +2758,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - indent-string@2.1.0: - resolution: {integrity: sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==} - engines: {node: '>=0.10.0'} - inflection@3.0.2: resolution: {integrity: sha512-+Bg3+kg+J6JUWn8J6bzFmOWkTQ6L/NHfDRSYU+EVvuKHDxUDHAXgqixHfVlzuBQaPOTac8hn43aPhMNk6rMe3g==} engines: {node: '>=18.0.0'} @@ -3020,15 +2776,9 @@ packages: resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} engines: {node: '>=12'} - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - is-alphabetical@2.0.1: resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - is-alphanumerical@2.0.1: resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} @@ -3036,9 +2786,6 @@ packages: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} @@ -3078,9 +2825,6 @@ packages: resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} engines: {node: '>= 0.4'} - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} @@ -3096,10 +2840,6 @@ packages: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} - is-finite@1.1.0: - resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==} - engines: {node: '>=0.10.0'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -3112,9 +2852,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} @@ -3166,9 +2903,6 @@ packages: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} - is-utf8@0.2.1: - resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} - is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -3281,14 +3015,6 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - load-json-file@1.1.0: - resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} - engines: {node: '>=0.10.0'} - - loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -3312,16 +3038,9 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loud-rejection@1.6.0: - resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==} - engines: {node: '>=0.10.0'} - lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - lowlight@1.20.0: - resolution: {integrity: sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==} - lru-cache@11.2.6: resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} engines: {node: 20 || >=22} @@ -3334,10 +3053,6 @@ packages: peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} @@ -3411,20 +3126,9 @@ packages: peerDependencies: esbuild: 0.* - mdx@0.3.1: - resolution: {integrity: sha512-i+oUkB4ntcYVYnjiuktpYP77m/ISDg7z1B2pL+alDNFPgRkXlkYaW6zY03103/88A06E3Pn6x/DL9qB8pT9xWA==} - hasBin: true - memfs@4.75.0: resolution: {integrity: sha512-ds3qQCghw0FsG9S+CSAR9F1n5nCwlA7Z5Mf8xgRec6iBAVPPwldmD5UxJhMstWhMhOVBwZ/FoBz09B46m3Le/g==} - memoize-one@4.0.3: - resolution: {integrity: sha512-QmpUu4KqDmX0plH4u+tf0riMc1KHE1+lw95cMrLlXQAFOx/xnBtwhZ52XJxd9X2O6kwKBqX32kmhbhlobD0cuw==} - - meow@3.6.0: - resolution: {integrity: sha512-1zRGO8C/2QD8uBxZbwwKbIQHrHKANzVnlK/3Gj7xro+ks4HLmayvETy+BnCV+wm68PE6dYcfgyTDMVG2mjlQwg==} - engines: {node: '>=0.10.0'} - merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -3564,11 +3268,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mustache@2.2.1: - resolution: {integrity: sha512-azYRexmi9y6h2lk2JqfBLh1htlDMjKYyEYOkxoGKa0FRdr5aY4f5q8bH4JIecM181DtUEYLSz8PcRO46mgzMNQ==} - engines: {npm: '>=1.4.0'} - hasBin: true - mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} @@ -3627,17 +3326,10 @@ packages: resolution: {integrity: sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==} engines: {node: '>=18'} - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - object-assign@4.0.1: - resolution: {integrity: sha512-c6legOHWepAbWnp3j5SRUMpxCXBKI4rD7A5Osn9IzZ8w4O/KccXdW0lqdkQKbpk0eHGjNgKihgzY6WuEq99Tfw==} - engines: {node: '>=0.10.0'} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -3704,16 +3396,9 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - parse-json@2.2.0: - resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} - engines: {node: '>=0.10.0'} - parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} @@ -3726,10 +3411,6 @@ packages: path-data-parser@0.1.0: resolution: {integrity: sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==} - path-exists@2.1.0: - resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==} - engines: {node: '>=0.10.0'} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3745,10 +3426,6 @@ packages: resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} engines: {node: 20 || >=22} - path-type@1.1.0: - resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} - engines: {node: '>=0.10.0'} - pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -3767,14 +3444,6 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - pinkie-promise@2.0.1: - resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} - engines: {node: '>=0.10.0'} - - pinkie@2.0.4: - resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} - engines: {node: '>=0.10.0'} - pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} @@ -3908,25 +3577,9 @@ packages: engines: {node: '>=14'} hasBin: true - prism-react-renderer@2.4.1: - resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==} - peerDependencies: - react: '>=16.0.0' - - prismjs@1.27.0: - resolution: {integrity: sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==} - engines: {node: '>=6'} - - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - property-information@5.6.0: - resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} - property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -3955,11 +3608,6 @@ packages: peerDependencies: react: ^19.3.0 - react-highlight-words@0.20.0: - resolution: {integrity: sha512-asCxy+jCehDVhusNmCBoxDf2mm1AJ//D+EzDx1m5K7EqsMBIHdZ5G4LdwbSEXqZq1Ros0G0UySWmAtntSph7XA==} - peerDependencies: - react: ^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 - react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -3998,11 +3646,6 @@ packages: '@types/react': optional: true - react-syntax-highlighter@15.6.6: - resolution: {integrity: sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==} - peerDependencies: - react: '>= 0.14.0' - react@19.3.0: resolution: {integrity: sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==} engines: {node: '>=0.10.0'} @@ -4010,17 +3653,6 @@ packages: read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - read-input@0.3.1: - resolution: {integrity: sha512-J1ZkWCnB4altU7RTe+62PSfa21FrEtfKyO9fuqR3yP8kZku3nIwaw2Krj383JC7egAIl5Zyz2w+EOu9uXH5HZw==} - - read-pkg-up@1.0.1: - resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} - engines: {node: '>=0.10.0'} - - read-pkg@1.1.0: - resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==} - engines: {node: '>=0.10.0'} - readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -4039,17 +3671,10 @@ packages: recma-stringify@1.0.0: resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} - redent@1.0.0: - resolution: {integrity: sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==} - engines: {node: '>=0.10.0'} - reflect.getprototypeof@1.0.10: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - refractor@3.6.0: - resolution: {integrity: sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==} - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -4075,10 +3700,6 @@ packages: rehype-stringify@10.0.1: resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} - rehype-toc@3.0.2: - resolution: {integrity: sha512-DMt376+4i1KJGgHJL7Ezd65qKkJ7Eqp6JSB47BJ90ReBrohI9ufrornArM6f4oJjP2E2DVZZHufWucv/9t7GUQ==} - engines: {node: '>=10'} - remark-frontmatter@5.0.0: resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} @@ -4100,10 +3721,6 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - repeating@2.0.1: - resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==} - engines: {node: '>=0.10.0'} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4155,10 +3772,6 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sax@1.4.4: - resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} - engines: {node: '>=11.0.0'} - scheduler@0.28.0: resolution: {integrity: sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==} @@ -4169,10 +3782,6 @@ packages: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4230,16 +3839,10 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-functional-loader@1.2.1: - resolution: {integrity: sha512-GPDrxrQkE7ijm35QlfPFVp5hBHR6ZcaUq42TEDgf1U5iTL3IDLFvKAbHE/ODqpdfJJ7Xn4cr/slBn12jjNPkaQ==} - sort-keys@5.1.0: resolution: {integrity: sha512-aSbHV0DaBcr7u0PVHXzM6NbZNAtrr9sF6+Qfs9UUVG7Ll3jQ6hHi8F/xqIIcn2rvIVbr0v/2zyjSdwSV47AgLQ==} engines: {node: '>=12'} @@ -4259,24 +3862,9 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} - space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} - space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.22: - resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -4328,19 +3916,10 @@ packages: resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} engines: {node: '>=0.10.0'} - strip-bom@2.0.0: - resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} - engines: {node: '>=0.10.0'} - strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-indent@1.0.1: - resolution: {integrity: sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==} - engines: {node: '>=0.10.0'} - hasBin: true - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -4436,10 +4015,6 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - trim-newlines@1.0.0: - resolution: {integrity: sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==} - engines: {node: '>=0.10.0'} - trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} @@ -4603,9 +4178,6 @@ packages: deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - vfile-location@4.1.0: resolution: {integrity: sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==} @@ -4659,14 +4231,6 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - xml-js@1.6.11: - resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} - hasBin: true - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -4705,22 +4269,6 @@ packages: snapshots: - '@algolia/abtesting@1.14.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - - '@algolia/autocomplete-core@1.17.9(@algolia/client-search@4.25.3)(algoliasearch@5.48.0)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@4.25.3)(algoliasearch@5.48.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@4.25.3)(algoliasearch@5.48.0) - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - search-insights - '@algolia/autocomplete-core@1.19.5(@algolia/client-search@4.25.3)(algoliasearch@4.25.3)(search-insights@2.17.3)': dependencies: '@algolia/autocomplete-plugin-algolia-insights': 1.19.5(@algolia/client-search@4.25.3)(algoliasearch@4.25.3)(search-insights@2.17.3) @@ -4730,14 +4278,6 @@ snapshots: - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@4.25.3)(algoliasearch@5.48.0)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@4.25.3)(algoliasearch@5.48.0) - search-insights: 2.17.3 - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - '@algolia/autocomplete-plugin-algolia-insights@1.19.5(@algolia/client-search@4.25.3)(algoliasearch@4.25.3)(search-insights@2.17.3)': dependencies: '@algolia/autocomplete-shared': 1.19.5(@algolia/client-search@4.25.3)(algoliasearch@4.25.3) @@ -4746,17 +4286,6 @@ snapshots: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@4.25.3)(algoliasearch@5.48.0)': - dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@4.25.3)(algoliasearch@5.48.0) - '@algolia/client-search': 4.25.3 - algoliasearch: 5.48.0 - - '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@4.25.3)(algoliasearch@5.48.0)': - dependencies: - '@algolia/client-search': 4.25.3 - algoliasearch: 5.48.0 - '@algolia/autocomplete-shared@1.19.5(@algolia/client-search@4.25.3)(algoliasearch@4.25.3)': dependencies: '@algolia/client-search': 4.25.3 @@ -4772,13 +4301,6 @@ snapshots: dependencies: '@algolia/cache-common': 4.25.3 - '@algolia/client-abtesting@5.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - '@algolia/client-account@4.25.3': dependencies: '@algolia/client-common': 4.25.3 @@ -4792,80 +4314,29 @@ snapshots: '@algolia/requester-common': 4.25.3 '@algolia/transporter': 4.25.3 - '@algolia/client-analytics@5.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - '@algolia/client-common@4.25.3': dependencies: '@algolia/requester-common': 4.25.3 '@algolia/transporter': 4.25.3 - '@algolia/client-common@5.48.0': {} - - '@algolia/client-insights@5.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - '@algolia/client-personalization@4.25.3': dependencies: '@algolia/client-common': 4.25.3 '@algolia/requester-common': 4.25.3 '@algolia/transporter': 4.25.3 - '@algolia/client-personalization@5.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - - '@algolia/client-query-suggestions@5.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - '@algolia/client-search@4.25.3': dependencies: '@algolia/client-common': 4.25.3 '@algolia/requester-common': 4.25.3 '@algolia/transporter': 4.25.3 - '@algolia/client-search@5.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - - '@algolia/ingestion@1.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - '@algolia/logger-common@4.25.3': {} '@algolia/logger-console@4.25.3': dependencies: '@algolia/logger-common': 4.25.3 - '@algolia/monitoring@1.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - '@algolia/recommend@4.25.3': dependencies: '@algolia/cache-browser-local-storage': 4.25.3 @@ -4880,35 +4351,16 @@ snapshots: '@algolia/requester-node-http': 4.25.3 '@algolia/transporter': 4.25.3 - '@algolia/recommend@5.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - '@algolia/requester-browser-xhr@4.25.3': dependencies: '@algolia/requester-common': 4.25.3 - '@algolia/requester-browser-xhr@5.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-common@4.25.3': {} - '@algolia/requester-fetch@5.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/requester-node-http@4.25.3': dependencies: '@algolia/requester-common': 4.25.3 - '@algolia/requester-node-http@5.48.0': - dependencies: - '@algolia/client-common': 5.48.0 - '@algolia/transporter@4.25.3': dependencies: '@algolia/cache-common': 4.25.3 @@ -5120,22 +4572,6 @@ snapshots: ts-pattern: 5.9.0 type-fest: 4.41.0 - '@docsearch/css@3.9.0': {} - - '@docsearch/react@3.9.0(@algolia/client-search@4.25.3)(@types/react@19.3.0)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@4.25.3)(algoliasearch@5.48.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@4.25.3)(algoliasearch@5.48.0) - '@docsearch/css': 3.9.0 - algoliasearch: 5.48.0 - optionalDependencies: - '@types/react': 19.3.0 - react: 19.3.0 - react-dom: 19.3.0(react@19.3.0) - search-insights: 2.17.3 - transitivePeerDependencies: - - '@algolia/client-search' - '@effect-ts/core@0.60.5': dependencies: '@effect-ts/system': 0.57.5 @@ -5365,10 +4801,6 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@iconify-json/logos@1.2.10': - dependencies: - '@iconify/types': 2.0.0 - '@iconify/types@2.0.0': {} '@iconify/utils@3.1.0': @@ -5523,8 +4955,6 @@ snapshots: jsbi: 4.3.2 tslib: 2.8.1 - '@jsdevtools/rehype-toc@3.0.2': {} - '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: tslib: 2.8.1 @@ -6328,16 +5758,10 @@ snapshots: dependencies: undici-types: 7.18.2 - '@types/prismjs@1.26.6': {} - '@types/react-dom@19.3.0(@types/react@19.3.0)': dependencies: '@types/react': 19.3.0 - '@types/react-highlight-words@0.16.7': - dependencies: - '@types/react': 19.3.0 - '@types/react@19.3.0': dependencies: csstype: 3.2.3 @@ -6539,23 +5963,6 @@ snapshots: '@algolia/requester-node-http': 4.25.3 '@algolia/transporter': 4.25.3 - algoliasearch@5.48.0: - dependencies: - '@algolia/abtesting': 1.14.0 - '@algolia/client-abtesting': 5.48.0 - '@algolia/client-analytics': 5.48.0 - '@algolia/client-common': 5.48.0 - '@algolia/client-insights': 5.48.0 - '@algolia/client-personalization': 5.48.0 - '@algolia/client-query-suggestions': 5.48.0 - '@algolia/client-search': 5.48.0 - '@algolia/ingestion': 1.48.0 - '@algolia/monitoring': 1.48.0 - '@algolia/recommend': 5.48.0 - '@algolia/requester-browser-xhr': 5.48.0 - '@algolia/requester-fetch': 5.48.0 - '@algolia/requester-node-http': 5.48.0 - ansi-regex@5.0.1: {} ansi-sequence-parser@1.1.3: {} @@ -6590,8 +5997,6 @@ snapshots: call-bound: 1.0.4 is-array-buffer: 3.0.5 - array-find-index@1.0.2: {} - array-includes@3.1.9: dependencies: call-bind: 1.0.8 @@ -6687,8 +6092,6 @@ snapshots: baseline-browser-mapping@2.11.21: {} - big.js@5.2.2: {} - binary-extensions@2.3.0: {} brace-expansion@1.1.18: @@ -6740,13 +6143,6 @@ snapshots: camelcase-css@2.0.1: {} - camelcase-keys@2.1.0: - dependencies: - camelcase: 2.1.1 - map-obj: 1.0.1 - - camelcase@2.1.1: {} - caniuse-lite@1.0.30001769: {} caniuse-lite@1.0.30001810: {} @@ -6760,16 +6156,10 @@ snapshots: character-entities-html4@2.1.0: {} - character-entities-legacy@1.1.4: {} - character-entities-legacy@3.0.0: {} - character-entities@1.2.4: {} - character-entities@2.0.2: {} - character-reference-invalid@1.1.4: {} - character-reference-invalid@2.0.1: {} chokidar@3.6.0: @@ -6812,8 +6202,6 @@ snapshots: color-name@1.1.4: {} - comma-separated-tokens@1.0.8: {} - comma-separated-tokens@2.0.3: {} commander@4.1.1: {} @@ -6868,10 +6256,6 @@ snapshots: csstype@3.2.3: {} - currently-unhandled@0.4.1: - dependencies: - array-find-index: 1.0.2 - cytoscape-cose-bilkent@4.1.0(cytoscape@3.34.3): dependencies: cose-base: 1.0.3 @@ -7076,10 +6460,6 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - date-fns@2.30.0: - dependencies: - '@babel/runtime': 7.28.6 - dayjs@1.11.23: {} debug@3.2.7: @@ -7134,8 +6514,6 @@ snapshots: optionalDependencies: '@types/trusted-types': 2.0.7 - dotenv@16.6.1: {} - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7148,12 +6526,6 @@ snapshots: emoji-regex@9.2.2: {} - emojis-list@3.0.0: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 @@ -7582,10 +6954,6 @@ snapshots: dependencies: reusify: 1.1.0 - fault@1.0.4: - dependencies: - format: 0.2.2 - fault@2.0.1: dependencies: format: 0.2.2 @@ -7594,10 +6962,6 @@ snapshots: optionalDependencies: picomatch: 4.0.7 - feed@4.2.2: - dependencies: - xml-js: 1.6.11 - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -7606,11 +6970,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-up@1.1.2: - dependencies: - path-exists: 2.1.0 - pinkie-promise: 2.0.1 - find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -7678,8 +7037,6 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stdin@4.0.1: {} - get-symbol-description@1.1.0: dependencies: call-bound: 1.0.4 @@ -7724,8 +7081,6 @@ snapshots: gopd@1.2.0: {} - graceful-fs@4.2.11: {} - gray-matter@4.0.3: dependencies: js-yaml: 3.15.2 @@ -7783,8 +7138,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hast-util-parse-selector@2.2.5: {} - hast-util-parse-selector@3.1.1: dependencies: '@types/hast': 2.3.10 @@ -7856,14 +7209,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hastscript@6.0.0: - dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 1.0.8 - hast-util-parse-selector: 2.2.5 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 - hastscript@7.2.0: dependencies: '@types/hast': 2.3.10 @@ -7878,14 +7223,6 @@ snapshots: dependencies: hermes-estree: 0.25.1 - highlight-words-core@1.2.3: {} - - highlight.js@10.7.3: {} - - highlightjs-vue@1.0.0: {} - - hosted-git-info@2.8.9: {} - html-void-elements@3.0.0: {} hyperdyperid@1.2.0: {} @@ -7907,10 +7244,6 @@ snapshots: imurmurhash@0.1.4: {} - indent-string@2.1.0: - dependencies: - repeating: 2.0.1 - inflection@3.0.2: {} inline-style-parser@0.2.7: {} @@ -7925,15 +7258,8 @@ snapshots: internmap@2.0.3: {} - is-alphabetical@1.0.4: {} - is-alphabetical@2.0.1: {} - is-alphanumerical@1.0.4: - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - is-alphanumerical@2.0.1: dependencies: is-alphabetical: 2.0.1 @@ -7945,8 +7271,6 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-arrayish@0.2.1: {} - is-async-function@2.1.1: dependencies: async-function: 1.0.0 @@ -7991,8 +7315,6 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 - is-decimal@1.0.4: {} - is-decimal@2.0.1: {} is-extendable@0.1.1: {} @@ -8003,8 +7325,6 @@ snapshots: dependencies: call-bound: 1.0.4 - is-finite@1.1.0: {} - is-fullwidth-code-point@3.0.0: {} is-generator-function@1.1.2: @@ -8019,8 +7339,6 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-hexadecimal@1.0.4: {} - is-hexadecimal@2.0.1: {} is-map@2.0.3: {} @@ -8066,8 +7384,6 @@ snapshots: dependencies: which-typed-array: 1.1.20 - is-utf8@0.2.1: {} - is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -8165,20 +7481,6 @@ snapshots: lines-and-columns@1.2.4: {} - load-json-file@1.1.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 2.2.0 - pify: 2.3.0 - pinkie-promise: 2.0.1 - strip-bom: 2.0.0 - - loader-utils@2.0.4: - dependencies: - big.js: 5.2.2 - emojis-list: 3.0.0 - json5: 2.2.3 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -8197,20 +7499,10 @@ snapshots: dependencies: js-tokens: 4.0.0 - loud-rejection@1.6.0: - dependencies: - currently-unhandled: 0.4.1 - signal-exit: 3.0.7 - lower-case@2.0.2: dependencies: tslib: 2.8.1 - lowlight@1.20.0: - dependencies: - fault: 1.0.4 - highlight.js: 10.7.3 - lru-cache@11.2.6: {} lru-cache@5.1.1: @@ -8221,8 +7513,6 @@ snapshots: dependencies: react: 19.3.0 - map-obj@1.0.1: {} - markdown-extensions@2.0.0: {} markdown-table@3.0.4: {} @@ -8420,13 +7710,6 @@ snapshots: transitivePeerDependencies: - supports-color - mdx@0.3.1: - dependencies: - meow: 3.6.0 - mustache: 2.2.1 - object-assign: 4.0.1 - read-input: 0.3.1 - memfs@4.75.0: dependencies: '@jsonjoy.com/fs-core': 4.75.0(tslib@2.8.1) @@ -8444,19 +7727,6 @@ snapshots: tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 - memoize-one@4.0.3: {} - - meow@3.6.0: - dependencies: - camelcase-keys: 2.1.0 - loud-rejection: 1.6.0 - minimist: 1.2.8 - normalize-package-data: 2.5.0 - object-assign: 4.0.1 - read-pkg-up: 1.0.1 - redent: 1.0.0 - trim-newlines: 1.0.0 - merge2@1.4.1: {} mermaid@11.17.2: @@ -8781,8 +8051,6 @@ snapshots: ms@2.1.3: {} - mustache@2.2.1: {} - mz@2.7.0: dependencies: any-promise: 1.3.0 @@ -8847,17 +8115,8 @@ snapshots: node-releases@2.0.55: {} - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.11 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - normalize-path@3.0.0: {} - object-assign@4.0.1: {} - object-assign@4.1.1: {} object-hash@3.0.0: {} @@ -8935,15 +8194,6 @@ snapshots: dependencies: callsites: 3.1.0 - parse-entities@2.0.0: - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -8954,10 +8204,6 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - parse-json@2.2.0: - dependencies: - error-ex: 1.3.4 - parse-numeric-range@1.3.0: {} parse5@6.0.1: {} @@ -8969,10 +8215,6 @@ snapshots: path-data-parser@0.1.0: {} - path-exists@2.1.0: - dependencies: - pinkie-promise: 2.0.1 - path-exists@4.0.0: {} path-key@3.1.1: {} @@ -8984,12 +8226,6 @@ snapshots: lru-cache: 11.2.6 minipass: 7.1.2 - path-type@1.1.0: - dependencies: - graceful-fs: 4.2.11 - pify: 2.3.0 - pinkie-promise: 2.0.1 - pathe@2.0.3: {} picocolors@1.1.1: {} @@ -9000,12 +8236,6 @@ snapshots: pify@2.3.0: {} - pinkie-promise@2.0.1: - dependencies: - pinkie: 2.0.4 - - pinkie@2.0.4: {} - pirates@4.0.7: {} pkg-types@1.3.1: @@ -9080,26 +8310,12 @@ snapshots: prettier@3.8.1: {} - prism-react-renderer@2.4.1(react@19.3.0): - dependencies: - '@types/prismjs': 1.26.6 - clsx: 2.1.1 - react: 19.3.0 - - prismjs@1.27.0: {} - - prismjs@1.30.0: {} - prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - property-information@5.6.0: - dependencies: - xtend: 4.0.2 - property-information@6.5.0: {} property-information@7.1.0: {} @@ -9141,13 +8357,6 @@ snapshots: react: 19.3.0 scheduler: 0.28.0 - react-highlight-words@0.20.0(react@19.3.0): - dependencies: - highlight-words-core: 1.2.3 - memoize-one: 4.0.3 - prop-types: 15.8.1 - react: 19.3.0 - react-is@16.13.1: {} react-remove-scroll-bar@2.3.8(@types/react@19.3.0)(react@19.3.0): @@ -9187,35 +8396,12 @@ snapshots: optionalDependencies: '@types/react': 19.3.0 - react-syntax-highlighter@15.6.6(react@19.3.0): - dependencies: - '@babel/runtime': 7.28.6 - highlight.js: 10.7.3 - highlightjs-vue: 1.0.0 - lowlight: 1.20.0 - prismjs: 1.30.0 - react: 19.3.0 - refractor: 3.6.0 - react@19.3.0: {} read-cache@1.0.0: dependencies: pify: 2.3.0 - read-input@0.3.1: {} - - read-pkg-up@1.0.1: - dependencies: - find-up: 1.1.2 - read-pkg: 1.1.0 - - read-pkg@1.1.0: - dependencies: - load-json-file: 1.1.0 - normalize-package-data: 2.5.0 - path-type: 1.1.0 - readdirp@3.6.0: dependencies: picomatch: 2.3.2 @@ -9249,11 +8435,6 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 - redent@1.0.0: - dependencies: - indent-string: 2.1.0 - strip-indent: 1.0.1 - reflect.getprototypeof@1.0.10: dependencies: call-bind: 1.0.8 @@ -9265,12 +8446,6 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 - refractor@3.6.0: - dependencies: - hastscript: 6.0.0 - parse-entities: 2.0.0 - prismjs: 1.27.0 - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -9328,10 +8503,6 @@ snapshots: hast-util-to-html: 9.0.5 unified: 11.0.5 - rehype-toc@3.0.2: - dependencies: - '@jsdevtools/rehype-toc': 3.0.2 - remark-frontmatter@5.0.0: dependencies: '@types/mdast': 4.0.4 @@ -9391,10 +8562,6 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - repeating@2.0.1: - dependencies: - is-finite: 1.1.0 - require-directory@2.1.1: {} resolve-from@4.0.0: {} @@ -9451,8 +8618,6 @@ snapshots: safer-buffer@2.1.2: {} - sax@1.4.4: {} - scheduler@0.28.0: {} search-insights@2.17.3: {} @@ -9462,8 +8627,6 @@ snapshots: extend-shallow: 2.0.1 kind-of: 6.0.3 - semver@5.7.2: {} - semver@6.3.1: {} semver@7.8.5: {} @@ -9564,14 +8727,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - signal-exit@3.0.7: {} - signal-exit@4.1.0: {} - simple-functional-loader@1.2.1: - dependencies: - loader-utils: 2.0.4 - sort-keys@5.1.0: dependencies: is-plain-obj: 4.1.0 @@ -9587,24 +8744,8 @@ snapshots: source-map@0.7.6: {} - space-separated-tokens@1.1.5: {} - space-separated-tokens@2.0.2: {} - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.22 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.22 - - spdx-license-ids@3.0.22: {} - sprintf-js@1.0.3: {} stable-hash@0.0.5: {} @@ -9683,16 +8824,8 @@ snapshots: strip-bom-string@1.0.0: {} - strip-bom@2.0.0: - dependencies: - is-utf8: 0.2.1 - strip-bom@3.0.0: {} - strip-indent@1.0.1: - dependencies: - get-stdin: 4.0.1 - strip-json-comments@3.1.1: {} style-to-js@1.1.21: @@ -9797,8 +8930,6 @@ snapshots: trim-lines@3.0.1: {} - trim-newlines@1.0.0: {} - trough@2.2.0: {} ts-api-utils@2.5.0(typescript@5.3.3): @@ -10012,11 +9143,6 @@ snapshots: uuid@9.0.1: {} - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - vfile-location@4.1.0: dependencies: '@types/unist': 2.0.11 @@ -10103,12 +9229,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - xml-js@1.6.11: - dependencies: - sax: 1.4.4 - - xtend@4.0.2: {} - y18n@5.0.8: {} yallist@3.1.1: {} diff --git a/src/app/[...slug]/page.tsx b/src/app/[...slug]/page.tsx index 3bc78c815..831eab97d 100644 --- a/src/app/[...slug]/page.tsx +++ b/src/app/[...slug]/page.tsx @@ -4,6 +4,7 @@ import {PreviewGuard} from '@/components/PreviewGuard'; import {PrevNextLinks} from '@/components/PrevNextLinks'; import {Prose} from '@/components/Prose'; import {TableOfContents} from '@/components/Toc'; +import {withBasePath} from '@/lib/utils'; import {allPosts} from 'contentlayer/generated'; import {getMDXComponent} from 'next-contentlayer2/hooks'; import {notFound} from 'next/navigation'; @@ -28,13 +29,13 @@ export const generateMetadata = async ({params}: Props) => { const post = allPosts.find(post => post._raw.flattenedPath === path); if (post && post.headings && post.headings.length > 0) { const title = post.headings[0].title; - const ogImageUrl = `${process.env.NEXT_PUBLIC_DOCS_BASE_PATH || ''}/api/og/${path}`; + const ogImageUrl = withBasePath(`/api/og/${path}`); return { title, // The root layout's canonical is the landing page; without this // override every docs page tells search engines it is a duplicate // of https://sourcegraph.com/docs. - alternates: {canonical: `/docs${post.url}`}, + alternates: {canonical: withBasePath(post.url)}, openGraph: { images: [{url: ogImageUrl, width: 1200, height: 630}] }, diff --git a/src/app/api/versions/route.ts b/src/app/api/versions/route.ts index 686d5c24e..b87d9c031 100644 --- a/src/app/api/versions/route.ts +++ b/src/app/api/versions/route.ts @@ -1,4 +1,5 @@ import {versions} from '@/data/versions'; +import config from 'docs.config'; import {NextResponse} from 'next/server'; // Next 15+ no longer caches GET handlers by default; the version list is @@ -9,7 +10,7 @@ export function GET() { return NextResponse.json( versions.map((version, index) => index === 0 - ? {...version, url: 'https://sourcegraph.com/docs'} + ? {...version, url: config.DOCS_PROD_URL} : version ), { diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 3408ec9c0..3a696a774 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,6 +1,7 @@ import {Providers} from '@/app/providers'; import {Layout} from '@/components/Layout'; import {TECHNICAL_CHANGELOG_RSS_URL} from '@/data/constants'; +import {withBasePath} from '@/lib/utils'; import clsx from 'clsx'; import config from 'docs.config'; import {type Metadata} from 'next'; @@ -11,7 +12,7 @@ import {Suspense} from 'react'; import '@/styles/tailwind.css'; export const metadata: Metadata = { - metadataBase: new URL('https://sourcegraph.com'), + metadataBase: new URL(config.DOCS_PROD_ORIGIN), title: { template: '%s - Sourcegraph docs', default: 'Sourcegraph docs' @@ -23,14 +24,14 @@ export const metadata: Metadata = { 'docsearch:version': `v${config.DOCS_LATEST_VERSION}` }, alternates: { - canonical: '/docs' + canonical: config.DOCS_BASE_PATH }, openGraph: { - images: [{url: `${process.env.NEXT_PUBLIC_DOCS_BASE_PATH || ''}/api/og/index`, width: 1200, height: 630}] + images: [{url: withBasePath('/api/og/index'), width: 1200, height: 630}] }, twitter: { card: 'summary_large_image', - images: [{url: `${process.env.NEXT_PUBLIC_DOCS_BASE_PATH || ''}/api/og/index`, width: 1200, height: 630}] + images: [{url: withBasePath('/api/og/index'), width: 1200, height: 630}] } }; diff --git a/src/app/page.tsx b/src/app/page.tsx index 01a78b0fe..11cd0c712 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,11 +1,12 @@ import MdxComponents from '@/components/MdxComponents'; import {Prose} from '@/components/Prose'; +import {withBasePath} from '@/lib/utils'; import {allPosts} from 'contentlayer/generated'; import {getMDXComponent} from 'next-contentlayer2/hooks'; import {notFound} from 'next/navigation'; export const generateMetadata = () => { - const ogImageUrl = `${process.env.NEXT_PUBLIC_DOCS_BASE_PATH || ''}/api/og/index`; + const ogImageUrl = withBasePath('/api/og/index'); return { openGraph: { images: [{url: ogImageUrl, width: 1200, height: 630}] diff --git a/src/app/robots.ts b/src/app/robots.ts index 35d3bdba1..ed87f84e1 100644 --- a/src/app/robots.ts +++ b/src/app/robots.ts @@ -1,4 +1,5 @@ import {MetadataRoute} from 'next'; +import config from 'docs.config'; export default async function robots(): Promise { return { @@ -6,6 +7,6 @@ export default async function robots(): Promise { userAgent: '*', allow: '/' }, - sitemap: 'https://sourcegraph.com/docs/sitemap.xml' + sitemap: `${config.DOCS_PROD_URL}/sitemap.xml` }; } diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 618ceb52f..968493c84 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -1,12 +1,11 @@ import {MetadataRoute} from 'next'; import {allPosts} from 'contentlayer/generated'; +import config from 'docs.config'; export default async function sitemap(): Promise { - const baseUrl = 'https://sourcegraph.com/docs'; - const links: MetadataRoute.Sitemap = [ { - url: baseUrl, + url: config.DOCS_PROD_URL, lastModified: new Date(), changeFrequency: 'weekly', priority: 1.0 @@ -18,7 +17,7 @@ export default async function sitemap(): Promise { .forEach(post => { const priority = post.seoPriority; links.push({ - url: `${baseUrl}${post.url}`, + url: `${config.DOCS_PROD_URL}${post.url}`, lastModified: post.date ? new Date(post.date) : new Date(), changeFrequency: 'weekly', ...(priority !== undefined && priority !== 0.5 && {priority}) diff --git a/src/components/DemoLayout.tsx b/src/components/DemoLayout.tsx deleted file mode 100644 index 54ff56523..000000000 --- a/src/components/DemoLayout.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import {useState} from 'react'; - -const tabs = [ - 'Overview', - 'Assistants', - 'Text-to-Image', - 'Text-to-Speech', - 'Plugins', - 'Multi-Models' -]; - -const tabVideos = { - Overview: 'https://www.youtube.com/embed/ZK-rNEhJIDs?autoplay=1&mute=1', - Assistants: 'https://www.youtube.com/embed/ZK-rNEhJIDs?autoplay=1&mute=1', - 'Text-to-Image': - 'https://www.youtube.com/embed/ZK-rNEhJIDs?autoplay=1&mute=1', - 'Text-to-Speech': - 'https://www.youtube.com/embed/ZK-rNEhJIDs?autoplay=1&mute=1', - Plugins: 'https://www.youtube.com/embed/ZK-rNEhJIDs?autoplay=1&mute=1', - 'Multi-Models': - 'https://www.youtube.com/embed/ZK-rNEhJIDs?autoplay=1&mute=1' -}; - -type TabKeys = keyof typeof tabVideos; - -export function DemoLayout() { - const [activeTab, setActiveTab] = useState('Overview'); - - return ( -
- {/* tabs */} -
- {tabs.map((tab, index) => ( - - ))} -
-
-
-
-