From 348b568501489e001162288bf5a8671ebc199616 Mon Sep 17 00:00:00 2001 From: klocke-io Date: Fri, 27 Feb 2026 08:27:09 +0100 Subject: [PATCH 1/9] feat: remove persona filter --- .vitepress/config.mts | 90 ++---- .vitepress/data/sidebar.data.ts | 14 - .vitepress/theme/community-sidebar.ts | 11 - .../theme/components/CustomVPMenuLink.vue | 59 ---- .vitepress/theme/components/VPMenu.vue | 105 ------- .../theme/components/VPNavBarMenuLink.vue | 122 -------- .../components/VPNavbarMenuGroupWrapper.vue | 45 --- .../theme/components/VPSidebarGroup.vue | 238 -------------- .vitepress/theme/docs-sidebar.ts | 70 ----- .vitepress/theme/index.ts | 36 --- .vitepress/theme/layouts/EmptyIndexLayout.vue | 291 +++--------------- .vitepress/theme/utils/debug-json.ts | 16 - .vitepress/theme/utils/personaMapping.json | 265 ---------------- .vitepress/theme/utils/sidebar.ts | 228 ++++++-------- Makefile | 19 +- post-processing/part-3.js | 162 +--------- website/documentation/_index.md | 41 --- 17 files changed, 181 insertions(+), 1631 deletions(-) delete mode 100644 .vitepress/data/sidebar.data.ts delete mode 100644 .vitepress/theme/components/CustomVPMenuLink.vue delete mode 100644 .vitepress/theme/components/VPMenu.vue delete mode 100644 .vitepress/theme/components/VPNavBarMenuLink.vue delete mode 100644 .vitepress/theme/components/VPNavbarMenuGroupWrapper.vue delete mode 100644 .vitepress/theme/components/VPSidebarGroup.vue delete mode 100644 .vitepress/theme/utils/debug-json.ts delete mode 100644 .vitepress/theme/utils/personaMapping.json diff --git a/.vitepress/config.mts b/.vitepress/config.mts index bb9fa649e..5aa3b4ada 100644 --- a/.vitepress/config.mts +++ b/.vitepress/config.mts @@ -1,16 +1,42 @@ import { defineConfig } from 'vitepress' -import { fileURLToPath, URL } from 'node:url' +import { fileURLToPath, URL, pathToFileURL } from 'node:url' import blogSidebar from './theme/blog-sidebar.ts' import {communitySidebar} from "./theme/community-sidebar.ts"; import path from 'path' import { SearchResult } from 'minisearch' +import { generateEnhancedDocsSidebar } from './theme/docs-sidebar.ts'; +import { hasMarkdownContent, getTaxonomyChildren } from './theme/utils/sidebar.ts'; const indexPattern = new RegExp(/\/?_?index\.md$/i); +// Pre-compute sidebar data at module level (runs once at build start) +const allSidebars = { + '/blog/': blogSidebar()['/blog/'], + '/community/': communitySidebar()['/community/'], + '/docs/': generateEnhancedDocsSidebar()['/docs/'] +}; + export default defineConfig({ base: process.env.VITE_PUBLIC_BASE_PATH || '', srcDir: 'hugo/content', cleanUrls: true, + transformPageData(pageData) { + // Only process index pages + if (!pageData.relativePath.endsWith('index.md')) return + + // Build the absolute file path + const configDir = path.dirname(fileURLToPath(import.meta.url)) + const filePath = path.resolve(configDir, '..', 'hugo', 'content', pageData.relativePath) + + // Check if the markdown body is empty + if (hasMarkdownContent(filePath)) return + + // Look up sidebar children for this path + const children = getTaxonomyChildren(pageData.relativePath, allSidebars) + if (children && children.length > 0) { + pageData.frontmatter.taxonomyChildren = children + } + }, sitemap: { hostname: 'https://gardener.cloud' }, @@ -76,18 +102,9 @@ function getNavConfig () { activeMatch: 'adopter', }, { - component: 'VPNavbarMenuGroupWrapper', - props: { - text: 'Documentation', - link: '/docs/', - activeMatch: 'docs', - items: [ - {text: 'User', link: '/docs/index.md',}, - {text: 'Operator', link: '/docs/index.md',}, - {text: 'Developer', link: '/docs/index.md',}, - {text: 'All', link: '/docs/index.md',}, - ], - }, + text: 'Documentation', + activeMatch: 'docs', + link: '/docs', }, { text: 'Blog', @@ -178,30 +195,9 @@ function getThemeConfig() { isNetlify: process.env.NETLIFY === 'true', logo: {src: '/gardener-logo.svg', width: 24, height: 24}, nav: getNavConfig(), - sidebar: { - '/blog/': blogSidebar()['/blog/'], - //@ts-ignore - '/community/': communitySidebar()['/community/'], - //@ts-ignore - '/docs/': { //generateEnhancedDocsSidebar()['/docs/'], - "base": "/docs/", - "text": "Docs", - "items": [ - { - "text": "Gardener", - "link": "gardener/index.md", - "items": [ - { - "text": "Concepts", - "link": "gardener/concepts/index.md", - } - ] - } - ], - }, - }, + sidebar: allSidebars, editLink: { - pattern: ({filePath, frontmatter}) => { + pattern: ({filePath, frontmatter}: {filePath: string, frontmatter: Record}) => { const fileName = `${frontmatter?.path_base_for_github_subdir?.to ?? filePath.split("/").pop()}` const githubLink = `${frontmatter['github_repo']}/tree/master/${frontmatter['github_subdir']}/${fileName}` return githubLink @@ -247,11 +243,11 @@ function getViteConfig() { alias: [ { find: '@data', - replacement: path.resolve(__dirname, './data') + replacement: path.resolve(path.dirname(fileURLToPath(import.meta.url)), './data') }, { find: '@components', - replacement: path.resolve(__dirname, './theme/components') + replacement: path.resolve(path.dirname(fileURLToPath(import.meta.url)), './theme/components') }, { find: /^.*\/VPFeature\.vue$/, @@ -265,24 +261,6 @@ function getViteConfig() { new URL('./theme/components/VPTeamMembersItem.vue', import.meta.url) ) }, - { - find: /^.*\/VPNavBarMenuLink\.vue$/, - replacement: fileURLToPath( - new URL('./theme/components/VPNavBarMenuLink.vue', import.meta.url) - ) - }, - { - find: /^.*\/VPSidebarGroup\.vue$/, - replacement: fileURLToPath( - new URL('./theme/components/VPSidebarGroup.vue', import.meta.url) - ) - }, - { - find: /^.*\/VPMenu\.vue$/, - replacement: fileURLToPath( - new URL('./theme/components/VPMenu.vue', import.meta.url) - ) - }, ] } } diff --git a/.vitepress/data/sidebar.data.ts b/.vitepress/data/sidebar.data.ts deleted file mode 100644 index 999f2ef35..000000000 --- a/.vitepress/data/sidebar.data.ts +++ /dev/null @@ -1,14 +0,0 @@ - -import { personaSidebar, generateEnhancedDocsSidebar } from '../theme/docs-sidebar.ts' - -//https://vitepress.dev/guide/data-loading#build-time-data-loading -export default{ - load() { - return { - usersSidebar: personaSidebar('Users')['/docs/'], - developersSidebar: personaSidebar('Developers')['/docs/'], - operatorsSidebar: personaSidebar('Operators')['/docs/'], - all : generateEnhancedDocsSidebar()['/docs/'] - } - } -} \ No newline at end of file diff --git a/.vitepress/theme/community-sidebar.ts b/.vitepress/theme/community-sidebar.ts index a98649476..539548851 100644 --- a/.vitepress/theme/community-sidebar.ts +++ b/.vitepress/theme/community-sidebar.ts @@ -1,5 +1,4 @@ import { generateSidebar } from 'vitepress-sidebar'; -import { writeJsonDebug } from './utils/debug-json.ts'; import { removeIndexEntries, sortByWeight, @@ -33,18 +32,8 @@ export function communitySidebar(): any { // Filter out all _index.md entries (called last) const filteredSidebar = removeIndexEntries(sortedSidebar) - writeJsonDebug( - 'filteredCommunitySidebar.json', - filteredSidebar - ); - const cleandSidebar = removeEmptyItems(filteredSidebar) - writeJsonDebug( - 'cleandCommunitySidebar.json', - cleandSidebar - ); - addTrailingSlashToLinks(cleandSidebar['/community/'].items); return cleandSidebar; diff --git a/.vitepress/theme/components/CustomVPMenuLink.vue b/.vitepress/theme/components/CustomVPMenuLink.vue deleted file mode 100644 index c7b6dc77b..000000000 --- a/.vitepress/theme/components/CustomVPMenuLink.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.vitepress/theme/components/VPMenu.vue b/.vitepress/theme/components/VPMenu.vue deleted file mode 100644 index d549b0407..000000000 --- a/.vitepress/theme/components/VPMenu.vue +++ /dev/null @@ -1,105 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.vitepress/theme/components/VPNavBarMenuLink.vue b/.vitepress/theme/components/VPNavBarMenuLink.vue deleted file mode 100644 index fc6691759..000000000 --- a/.vitepress/theme/components/VPNavBarMenuLink.vue +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.vitepress/theme/components/VPNavbarMenuGroupWrapper.vue b/.vitepress/theme/components/VPNavbarMenuGroupWrapper.vue deleted file mode 100644 index a74c13af3..000000000 --- a/.vitepress/theme/components/VPNavbarMenuGroupWrapper.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - diff --git a/.vitepress/theme/components/VPSidebarGroup.vue b/.vitepress/theme/components/VPSidebarGroup.vue deleted file mode 100644 index c70f62270..000000000 --- a/.vitepress/theme/components/VPSidebarGroup.vue +++ /dev/null @@ -1,238 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.vitepress/theme/docs-sidebar.ts b/.vitepress/theme/docs-sidebar.ts index 1e008c364..cdc2ed4fc 100644 --- a/.vitepress/theme/docs-sidebar.ts +++ b/.vitepress/theme/docs-sidebar.ts @@ -1,14 +1,8 @@ import { generateSidebar } from 'vitepress-sidebar'; -import { writeJsonDebug } from './utils/debug-json.ts'; import { - type SidebarItem, removeIndexEntries, sortByWeight, enhanceDirectoryTitles, - createLeafMap, - extractItems, - filterLeafMapByPersona, - filterSidebarByLeafMap, removeEmptyItems, addTrailingSlashToLinks } from './utils/sidebar.ts'; @@ -42,76 +36,12 @@ export function generateEnhancedDocsSidebar(): any { // Sort entries by weight from frontmatter const sortedSidebar = sortByWeight(enhancedSidebar, 'docs'); - // Log the sorted sidebar for debugging - writeJsonDebug('sortedSidebar.json', sortedSidebar); - // Filter out all _index.md entries (called last) const filteredSidebar = removeIndexEntries(sortedSidebar); - writeJsonDebug( - 'filteredSidebar.json', - filteredSidebar - ); - const cleandSidebar = removeEmptyItems(filteredSidebar) - writeJsonDebug( - 'cleandSidebar.json', - cleandSidebar - ); - addTrailingSlashToLinks(cleandSidebar['/docs/'].items); return cleandSidebar; } - -export function personaSidebar(persona: 'Users' | 'Developers' | 'Operators') { - // Use the enhanced sidebar instead of the basic one - const generatedSidebar = generateEnhancedDocsSidebar(); - - // Get all items from all sections of the sidebar - const allItems: SidebarItem[] = Object.values(generatedSidebar) - .flatMap(section => extractItems(section)); - - // Create the leaf map - const leafMap = createLeafMap(allItems); - - // Write both the generated sidebar and the leaf map to files - writeJsonDebug( - 'generatedSidebar.json', - generatedSidebar - ); - - writeJsonDebug( - `${persona}leafMap.json`, - Object.fromEntries(leafMap) - ); - - - // Apply filtering for persona and write to file - const personaLeafMap = filterLeafMapByPersona(leafMap, persona); - writeJsonDebug( - `/${persona}LeafMap.json`, - Object.fromEntries(personaLeafMap) - ); - - // Create sidebar by filtering the generated sidebar - const { filtered: sidebar, deleted: deletedItems } = filterSidebarByLeafMap( - generatedSidebar, - personaLeafMap - ); - - // Write the filtered sidebar and debug info to files - writeJsonDebug( - `/${persona}Sidebar.json`, - sidebar - ); - - writeJsonDebug( - 'deletedItems.json', - deletedItems - ); - - - return sidebar -} diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index 78bd9201f..ed0fadaca 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -3,7 +3,6 @@ import { Theme, useData } from 'vitepress' import DefaultTheme from 'vitepress/theme' import YouTubeVideo from './components/YouTubeVideo.vue' import VPFooter from './components/VPFooter.vue' -import VPNavbarMenuGroupWrapper from './components/VPNavbarMenuGroupWrapper.vue' import EmptyIndexLayout from './layouts/EmptyIndexLayout.vue' import './style.css' @@ -20,40 +19,5 @@ export default { enhanceApp({ app, router, siteData }) { app.component('YouTubeVideo', YouTubeVideo) app.component('VPFooter', VPFooter) - app.component('VPNavbarMenuGroupWrapper', VPNavbarMenuGroupWrapper) - - // Handle 404 detection for both initial loads and SPA navigation - if (typeof window !== 'undefined') { - let lastTrackedPath = ''; - - // Function to check and track 404 pages with deduplication - const check404 = (path?: string) => { - setTimeout(() => { - if (document.querySelector('.NotFound')) { - const currentPath = path || document.location.pathname; - - // Prevent duplicate tracking for the same path - if (currentPath !== lastTrackedPath) { - lastTrackedPath = currentPath; - if (typeof window?.plausible === 'function') { - window.plausible('404', { props: { path: currentPath } }); - console.log('executed 404 for:', currentPath); - } - } - } else { - // Reset tracking when not on 404 page - lastTrackedPath = ''; - } - }, 100); // Small delay to ensure DOM is updated - }; - - // Initial page load check - document.addEventListener('DOMContentLoaded', () => check404()); - - // SPA navigation - handle route changes - router.onAfterRouteChanged = (to) => { - check404(to); - }; - } }, } satisfies Theme diff --git a/.vitepress/theme/layouts/EmptyIndexLayout.vue b/.vitepress/theme/layouts/EmptyIndexLayout.vue index c1e728cea..a1a196b2a 100644 --- a/.vitepress/theme/layouts/EmptyIndexLayout.vue +++ b/.vitepress/theme/layouts/EmptyIndexLayout.vue @@ -1,266 +1,63 @@ + + - + \ No newline at end of file diff --git a/.vitepress/theme/utils/debug-json.ts b/.vitepress/theme/utils/debug-json.ts deleted file mode 100644 index ccf8071a8..000000000 --- a/.vitepress/theme/utils/debug-json.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { dirname } from 'path'; -import fs from 'node:fs'; - - -// Before writing the file, ensure the directory exists -export function writeJsonDebug(fileName: string, data: object): void { - const filePath = `${import.meta.dirname}/debug/${fileName}` - - const dir = dirname(filePath); - - // Create directory if it doesn't exist (recursive: true creates all needed directories) - fs.mkdirSync(dir, { recursive: true }); - - // Then write the file - fs.writeFileSync(filePath, JSON.stringify(data, null, 2)); -} \ No newline at end of file diff --git a/.vitepress/theme/utils/personaMapping.json b/.vitepress/theme/utils/personaMapping.json deleted file mode 100644 index 61d31eb61..000000000 --- a/.vitepress/theme/utils/personaMapping.json +++ /dev/null @@ -1,265 +0,0 @@ -{ - "/": ["Developers", "Operators", "Users"], - "/docs/": ["Developers", "Operators", "Users"], - "/docs/dashboard/": ["Operators", "Users", "Developers"], - "/docs/dashboard/access-restrictions/": ["Operators"], - "/docs/dashboard/architecture/": ["Developers"], - "/docs/dashboard/automated-resource-management/": ["Users"], - "/docs/dashboard/connect-kubectl/": ["Users"], - "/docs/dashboard/custom-fields/": ["Users"], - "/docs/dashboard/customization/": ["Operators"], - "/docs/dashboard/local-setup/": ["Developers"], - "/docs/dashboard/process/": ["Developers"], - "/docs/dashboard/project-operations/": ["Users"], - "/docs/dashboard/terminal-shortcuts/": ["Users"], - "/docs/dashboard/testing/": ["Developers"], - "/docs/dashboard/using-terminal/": ["Users"], - "/docs/dashboard/webterminals/": ["Operators"], - "/docs/dashboard/working-with-projects/": ["Users"], - "/docs/extensions/": ["Operators", "Developers", "Users"], - "/docs/extensions/infrastructure-extensions/": ["Operators", "Developers", "Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-alicloud/": ["Operators", "Developers", "Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-alicloud/deployment/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-alicloud/local-setup/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-alicloud/operations/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-alicloud/tutorials/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-alicloud/usage/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/": ["Operators", "Developers", "Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/deployment/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/dual-stack-ingress/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/images/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/ipv6/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/local-setup/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/operations/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/tutorials/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/tutorials/kubernetes-cluster-on-aws-with-gardener/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/tutorials/kubernetes-cluster-on-aws-with-gardener/images/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/tutorials/kubernetes-cluster-on-aws-with-gardener/kubernetes-cluster-on-aws-with-gardener/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-aws/usage/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-azure/": ["Developers", "Operators", "Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-azure/azure-permissions/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-azure/deployment/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-azure/images/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-azure/local-setup/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-azure/operations/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-azure/tutorials/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-azure/usage/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-equinix-metal/": ["Operators", "Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-equinix-metal/operations/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-equinix-metal/usage/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-gcp/": ["Developers", "Operators", "Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-gcp/deployment/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-gcp/images/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-gcp/ipv6/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-gcp/local-setup/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-gcp/operations/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-gcp/tutorials/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-gcp/usage/": ["Users"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-openstack/": ["Operators", "Users", "Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-openstack/deployment/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-openstack/local-setup/": ["Developers"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-openstack/operations/": ["Operators"], - "/docs/extensions/infrastructure-extensions/gardener-extension-provider-openstack/usage/": ["Users"], - "/docs/extensions/network-extensions/": ["Operators", "Users"], - "/docs/extensions/network-extensions/gardener-extension-networking-calico/": ["Operators", "Users"], - "/docs/extensions/network-extensions/gardener-extension-networking-calico/assets/": ["Users"], - "/docs/extensions/network-extensions/gardener-extension-networking-calico/deployment/": ["Operators"], - "/docs/extensions/network-extensions/gardener-extension-networking-calico/operations/": ["Operators"], - "/docs/extensions/network-extensions/gardener-extension-networking-calico/shoot_overlay_network/": ["Users"], - "/docs/extensions/network-extensions/gardener-extension-networking-calico/usage/": ["Users"], - "/docs/extensions/network-extensions/gardener-extension-networking-cilium/": ["Users"], - "/docs/extensions/network-extensions/gardener-extension-networking-cilium/usage/": ["Users"], - "/docs/extensions/os-extensions/": ["Users"], - "/docs/extensions/os-extensions/gardener-extension-os-coreos/": ["Users"], - "/docs/extensions/os-extensions/gardener-extension-os-coreos/usage/": ["Users"], - "/docs/extensions/os-extensions/gardener-extension-os-suse-chost/": ["Users"], - "/docs/extensions/os-extensions/gardener-extension-os-suse-chost/usage/": ["Users"], - "/docs/extensions/os-extensions/gardener-extension-os-ubuntu/": ["Users"], - "/docs/extensions/os-extensions/gardener-extension-os-ubuntu/usage/": ["Users"], - "/docs/extensions/others/": ["Operators", "Users", "Developers"], - "/docs/extensions/others/gardener-extension-registry-cache/": ["Developers", "Users"], - "/docs/extensions/others/gardener-extension-registry-cache/extension-registry-cache/": ["Developers"], - "/docs/extensions/others/gardener-extension-registry-cache/getting-started-locally/": ["Developers"], - "/docs/extensions/others/gardener-extension-registry-cache/getting-started-remotely/": ["Developers"], - "/docs/extensions/others/gardener-extension-registry-cache/registry-cache/": ["Users"], - "/docs/extensions/others/gardener-extension-registry-cache/registry-cache/configuration/": ["Users"], - "/docs/extensions/others/gardener-extension-registry-cache/registry-cache/images/": ["Users"], - "/docs/extensions/others/gardener-extension-registry-cache/registry-cache/observability/": ["Users"], - "/docs/extensions/others/gardener-extension-registry-cache/registry-cache/upstream-credentials/": ["Users"], - "/docs/extensions/others/gardener-extension-registry-cache/registry-mirror/": ["Users"], - "/docs/extensions/others/gardener-extension-registry-cache/registry-mirror/configuration/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-cert-service/": ["Users", "Operators"], - "/docs/extensions/others/gardener-extension-shoot-cert-service/alerting/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-cert-service/custom_shoot_issuer/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-cert-service/deployment/": ["Operators"], - "/docs/extensions/others/gardener-extension-shoot-cert-service/request_cert/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-cert-service/request_default_domain_cert/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-dns-service/": ["Operators", "Users"], - "/docs/extensions/others/gardener-extension-shoot-dns-service/configuration/": ["Operators"], - "/docs/extensions/others/gardener-extension-shoot-dns-service/deployment/": ["Operators"], - "/docs/extensions/others/gardener-extension-shoot-dns-service/dns_names/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-dns-service/dns_providers/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-dns-service/tutorials/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-dns-service/tutorials/gateway-api-gateways/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-dns-service/tutorials/istio-gateways/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-lakom-service/": ["Operators", "Users"], - "/docs/extensions/others/gardener-extension-shoot-lakom-service/deployment/": ["Operators"], - "/docs/extensions/others/gardener-extension-shoot-lakom-service/lakom/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-lakom-service/shoot-extension/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-networking-filter/": ["Users", "Operators"], - "/docs/extensions/others/gardener-extension-shoot-networking-filter/deployment/": ["Operators"], - "/docs/extensions/others/gardener-extension-shoot-networking-filter/shoot-networking-filter/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-networking-problemdetector/": ["Operators", "Users"], - "/docs/extensions/others/gardener-extension-shoot-networking-problemdetector/deployment/": ["Operators"], - "/docs/extensions/others/gardener-extension-shoot-networking-problemdetector/shoot-networking-problemdetector/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-oidc-service/": ["Users", "Operators"], - "/docs/extensions/others/gardener-extension-shoot-oidc-service/deployment/": ["Operators"], - "/docs/extensions/others/gardener-extension-shoot-oidc-service/openidconnects/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-rsyslog-relp/": ["Users", "Developers"], - "/docs/extensions/others/gardener-extension-shoot-rsyslog-relp/configuration/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-rsyslog-relp/getting-started-remotely/": ["Developers"], - "/docs/extensions/others/gardener-extension-shoot-rsyslog-relp/getting-started/": ["Developers"], - "/docs/extensions/others/gardener-extension-shoot-rsyslog-relp/images/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-rsyslog-relp/monitoring/": ["Users"], - "/docs/extensions/others/gardener-extension-shoot-rsyslog-relp/shoot-rsyslog-relp/": ["Developers"], - "/docs/faq/": ["Developers"], - "/docs/gardener/": ["Developers", "Operators", "Users"], - "/docs/gardener/advanced/": ["Users"], - "/docs/gardener/advanced/containerd-registry-configuration/": ["Users"], - "/docs/gardener/advanced/control-plane-endpoints-and-ports/": ["Users"], - "/docs/gardener/advanced/csi_components/": ["Users"], - "/docs/gardener/advanced/custom-containerd-config/": ["Users"], - "/docs/gardener/advanced/images/": ["Users"], - "/docs/gardener/advanced/node-readiness/": ["Users"], - "/docs/gardener/advanced/shoot_cleanup/": ["Users"], - "/docs/gardener/advanced/tolerations/": ["Users"], - "/docs/gardener/api-reference/": ["Developers"], - "/docs/gardener/autoscaling-specifics-for-components/": ["Developers"], - "/docs/gardener/autoscaling/": ["Users"], - "/docs/gardener/autoscaling/dns-autoscaling/": ["Users"], - "/docs/gardener/autoscaling/shoot_autoscaling/": ["Users"], - "/docs/gardener/autoscaling/shoot_pod_autoscaling_best_practices/": ["Users"], - "/docs/gardener/changing-the-api/": ["Developers"], - "/docs/gardener/component-checklist/": ["Developers"], - "/docs/gardener/concepts/": ["Operators"], - "/docs/gardener/configuration/": ["Operators"], - "/docs/gardener/content/": ["Developers"], - "/docs/gardener/control_plane_migration/": ["Operators"], - "/docs/gardener/defaulting/": ["Developers"], - "/docs/gardener/dependencies/": ["Developers"], - "/docs/gardener/deployment/": ["Operators"], - "/docs/gardener/extensions/": ["Developers"], - "/docs/gardener/gardener/": ["Users"], - "/docs/gardener/gardener/gardener_info_configmap/": ["Users"], - "/docs/gardener/getting_started_locally/": ["Developers"], - "/docs/gardener/high-availability-of-components/": ["Developers"], - "/docs/gardener/high-availability/": ["Users"], - "/docs/gardener/high-availability/shoot_high_availability/": ["Users"], - "/docs/gardener/high-availability/shoot_high_availability_best_practices/": ["Users"], - "/docs/gardener/images/": ["Operators"], - "/docs/gardener/ipv6/": ["Developers"], - "/docs/gardener/istio/": ["Operators"], - "/docs/gardener/kube_apiserver_loadbalancing/": ["Operators"], - "/docs/gardener/kubernetes-clients/": ["Developers"], - "/docs/gardener/local_setup/": ["Developers"], - "/docs/gardener/log_parsers/": ["Developers"], - "/docs/gardener/logging/": ["Developers"], - "/docs/gardener/managed_seed/": ["Operators"], - "/docs/gardener/monitoring-stack/": ["Developers"], - "/docs/gardener/monitoring/": ["Operators"], - "/docs/gardener/network_policies/": ["Operators"], - "/docs/gardener/networking/": ["Users"], - "/docs/gardener/networking/custom-dns-config/": ["Users"], - "/docs/gardener/networking/dns-search-path-optimization/": ["Users"], - "/docs/gardener/networking/exposureclasses/": ["Users"], - "/docs/gardener/networking/images/": ["Users"], - "/docs/gardener/networking/node-local-dns/": ["Users"], - "/docs/gardener/networking/shoot_kubernetes_service_host_injection/": ["Users"], - "/docs/gardener/networking/shoot_networking/": ["Users"], - "/docs/gardener/new-cloud-provider/": ["Developers"], - "/docs/gardener/new-kubernetes-version/": ["Developers"], - "/docs/gardener/observability/": ["Users"], - "/docs/gardener/observability/images/": ["Users"], - "/docs/gardener/observability/logging/": ["Users"], - "/docs/gardener/priority-classes/": ["Developers"], - "/docs/gardener/process/": ["Developers"], - "/docs/gardener/project/": ["Users"], - "/docs/gardener/project/namespaced-cloud-profiles/": ["Users"], - "/docs/gardener/project/projects/": ["Users"], - "/docs/gardener/project/service-account-manager/": ["Users"], - "/docs/gardener/reversed-vpn-tunnel/": ["Developers"], - "/docs/gardener/secrets_management/": ["Developers"], - "/docs/gardener/security/": ["Users"], - "/docs/gardener/security/default_seccomp_profile/": ["Users"], - "/docs/gardener/security/etcd_encryption_config/": ["Users"], - "/docs/gardener/security/openidconnect-presets/": ["Users"], - "/docs/gardener/security/pod-security/": ["Users"], - "/docs/gardener/security/shoot_auditpolicy/": ["Users"], - "/docs/gardener/security/shoot_serviceaccounts/": ["Users"], - "/docs/gardener/seed_bootstrapping/": ["Operators"], - "/docs/gardener/seed_settings/": ["Operators"], - "/docs/gardener/shoot-operations/": ["Users"], - "/docs/gardener/shoot-operations/shoot_credentials_rotation/": ["Users"], - "/docs/gardener/shoot-operations/shoot_operations/": ["Users"], - "/docs/gardener/shoot-operations/shoot_updates/": ["Users"], - "/docs/gardener/shoot-operations/shoot_versions/": ["Users"], - "/docs/gardener/shoot-operations/supported_k8s_versions/": ["Users"], - "/docs/gardener/shoot-operations/worker_pool_k8s_versions/": ["Users"], - "/docs/gardener/shoot/": ["Users"], - "/docs/gardener/shoot/access_restrictions/": ["Users"], - "/docs/gardener/shoot/shoot_access/": ["Users"], - "/docs/gardener/shoot/shoot_hibernate/": ["Users"], - "/docs/gardener/shoot/shoot_info_configmap/": ["Users"], - "/docs/gardener/shoot/shoot_kubernetes_versions/": ["Users"], - "/docs/gardener/shoot/shoot_limits/": ["Users"], - "/docs/gardener/shoot/shoot_maintenance/": ["Users"], - "/docs/gardener/shoot/shoot_purposes/": ["Users"], - "/docs/gardener/shoot/shoot_scheduling_profiles/": ["Users"], - "/docs/gardener/shoot/shoot_status/": ["Users"], - "/docs/gardener/shoot/shoot_supported_architectures/": ["Users"], - "/docs/gardener/shoot/shoot_workerless/": ["Users"], - "/docs/gardener/shoot/shoot_workers_settings/": ["Users"], - "/docs/gardener/testing/": ["Developers"], - "/docs/gardener/testmachinery_tests/": ["Developers"], - "/docs/gardener/topology_aware_routing/": ["Operators"], - "/docs/gardener/trusted-tls-for-control-planes/": ["Operators"], - "/docs/gardener/trusted-tls-for-garden-runtime/": ["Operators"], - "/docs/guides/": ["Developers"], - "/docs/other-components/": ["Developers", "Operators", "Users"], - "/docs/other-components/dependency-watchdog/": ["Developers"], - "/docs/other-components/dependency-watchdog/contribution/": ["Developers"], - "/docs/other-components/dependency-watchdog/setup/": ["Developers"], - "/docs/other-components/dependency-watchdog/setup/dwd-using-local-garden/": ["Developers"], - "/docs/other-components/dependency-watchdog/testing/": ["Developers"], - "/docs/other-components/gardener-discovery-server/": ["Developers", "Operators"], - "/docs/other-components/gardener-discovery-server/api": ["Developers", "Operators"], - "/docs/other-components/etcd-druid/": ["Developers", "Users"], - "/docs/other-components/etcd-druid/add-new-etcd-cluster-component/": ["Developers"], - "/docs/other-components/etcd-druid/api-reference/": ["Developers"], - "/docs/other-components/etcd-druid/changing-api/": ["Developers"], - "/docs/other-components/etcd-druid/contribution/": ["Developers"], - "/docs/other-components/etcd-druid/controllers/": ["Developers"], - "/docs/other-components/etcd-druid/dependency-management/": ["Developers"], - "/docs/other-components/etcd-druid/getting-started-locally/": ["Developers"], - "/docs/other-components/etcd-druid/managing-etcd-clusters/": ["Users"], - "/docs/other-components/etcd-druid/prepare-dev-environment/": ["Developers"], - "/docs/other-components/etcd-druid/raising-a-pr/": ["Developers"], - "/docs/other-components/etcd-druid/recovering-etcd-clusters/": ["Users"], - "/docs/other-components/etcd-druid/running-e2e-tests/": ["Developers"], - "/docs/other-components/etcd-druid/securing-etcd-clusters/": ["Users"], - "/docs/other-components/etcd-druid/testing/": ["Developers"], - "/docs/other-components/etcd-druid/updating-documentation/": ["Developers"], - "/docs/other-components/etcd-druid/using-druid-client/": ["Users"], - "/docs/other-components/etcd-druid/validating-etcd-clusters/": ["Users"], - "/docs/other-components/machine-controller-manager/": ["Developers", "Operators"], - "/docs/other-components/machine-controller-manager/cp_support_new/": ["Developers"], - "/docs/other-components/machine-controller-manager/deployment/": ["Operators"], - "/docs/other-components/machine-controller-manager/integration_tests/": ["Developers"], - "/docs/other-components/machine-controller-manager/local_setup/": ["Developers"], - "/docs/other-components/machine-controller-manager/machine/": ["Operators"], - "/docs/other-components/machine-controller-manager/machine_deployment/": ["Operators"], - "/docs/other-components/machine-controller-manager/machine_error_codes/": ["Developers"], - "/docs/other-components/machine-controller-manager/machine_set/": ["Operators"], - "/docs/other-components/machine-controller-manager/prerequisite/": ["Operators"], - "/docs/other-components/machine-controller-manager/testing_and_dependencies/": ["Developers"] -} diff --git a/.vitepress/theme/utils/sidebar.ts b/.vitepress/theme/utils/sidebar.ts index 1506a66a5..ca684a5ac 100644 --- a/.vitepress/theme/utils/sidebar.ts +++ b/.vitepress/theme/utils/sidebar.ts @@ -282,26 +282,6 @@ export function getTitleFromIndexFile(link: string, base?: string): string | nul } } -/** - * Function to create a map of all leaf nodes - */ -export function createLeafMap(items: SidebarItem[]): Map { - const leafMap = new Map(); - - function processItem(item: SidebarItem) { - // If the item has a link and no items, it's a leaf node - if ('link' in item && !('items' in item)) { - leafMap.set(item.link, item); - } - // If it has items, process them recursively - if ('items' in item) { - item.items.forEach(processItem); - } - } - - items.forEach(processItem); - return leafMap; -} /** * Function to recursively extract all items from a section @@ -317,125 +297,6 @@ export function extractItems(section: any): SidebarItem[] { } -function removeTrailingSlash (str: string) { - return str.endsWith('/') ? str.slice(0, -1) : str; -} - -/** - * Function to filter leaf map based on persona permissions - * Only removes entries that are explicitly restricted for the persona. - * Entries not mentioned in the persona mapping are kept (available to all personas). - */ -export function filterLeafMapByPersona(leafMap: Map, persona: string): Map { - // Create a copy of the original map - const filteredMap = new Map(leafMap); - - // Read the persona mapping - const personaMapping = JSON.parse( - readFileSync(`${import.meta.dirname}/personaMapping.json`, 'utf-8') - ) as Record; - - // Process each entry in the persona mapping - for (const [path, allowedPersonas] of Object.entries(personaMapping)) { - // Only remove entries that are explicitly restricted (don't include this persona) - if (!allowedPersonas.includes(persona)) { - // Remove /docs/ prefix from the path - let strippedPath = path.replace('/docs/', ''); - strippedPath = removeTrailingSlash(strippedPath); - - // Find and remove all matching entries from filteredMap - for (const [leafKey] of filteredMap) { - if (leafKey.includes(strippedPath+ '/')) { - //delete dirs - filteredMap.delete(leafKey); - } - if (leafKey === strippedPath) { - //delete files - filteredMap.delete(leafKey); - } - } - } - } - - return filteredMap; -} - -/** - * Function to filter sidebar based on allowed leaf nodes - */ -export function filterSidebarByLeafMap( - sidebar: Record, - allowedLeafMap: Map -): { filtered: Record, deleted: SidebarLeaf[] } { - const deletedItems: SidebarLeaf[] = []; - - function filterItem(item: SidebarItem): SidebarItem | null { - // If it's a leaf node (has link but no items) - if ('link' in item && !('items' in item)) { - // If this leaf is not in the allowed map, add to deleted items - if (!allowedLeafMap.has(item.link)) { - deletedItems.push(item as SidebarLeaf); - return null; - } - - //Prefix the link with /docs/ - item.link = `/docs/${item.link}`; - return item; - } - - // If it's a branch node (has items) - if ('items' in item && Array.isArray(item.items)) { - const branch = item as SidebarBranch; - const filteredItems = branch.items - .map((subItem: SidebarItem) => filterItem(subItem)) - .filter((subItem): subItem is SidebarItem => subItem !== null); - - // If all items were filtered out, remove this branch too - if (filteredItems.length === 0) { - return null; - } - - return { - ...branch, - items: filteredItems - }; - } - - return item; - } - - // Create a deep copy of the sidebar - const filteredSidebar = JSON.parse(JSON.stringify(sidebar)); - - // Filter each section of the sidebar - for (const [path, section] of Object.entries(filteredSidebar)) { - if (Array.isArray(section)) { - // If the section is an array, filter its items - filteredSidebar[path] = section - .map(item => filterItem(item)) - .filter((item): item is SidebarItem => item !== null); - } else if (section && typeof section === 'object' && 'items' in section) { - // If the section has items, filter them - const sectionWithItems = section as { items: SidebarItem[] }; - const filteredItems = sectionWithItems.items - .map((item: SidebarItem) => filterItem(item)) - .filter((item): item is SidebarItem => item !== null); - - if (filteredItems.length === 0) { - // If all items were filtered out, remove the section - delete filteredSidebar[path]; - } else { - // Update the section with filtered items - filteredSidebar[path] = { - ...section, - items: filteredItems - }; - } - } - } - - return { filtered: filteredSidebar, deleted: deletedItems }; -} /** * Recursively removes all items fields from the sidebar object that are empty arrays @@ -499,3 +360,92 @@ export function addTrailingSlashToLinks(sidebar: any) { } } } + +/** + * Check if a markdown file has meaningful body content (beyond frontmatter). + */ +export function hasMarkdownContent(filePath: string): boolean { + try { + const raw = readFileSync(filePath, 'utf-8') + // Strip frontmatter (--- ... ---) + const stripped = raw.replace(/^---[\s\S]*?---\s*/, '') + // Check if remaining content has meaningful text + return stripped.trim().length > 0 + } catch { + return true // If we can't read, assume it has content + } +} + +export interface TaxonomySidebarItem { + text?: string + link?: string + items?: TaxonomySidebarItem[] + collapsed?: boolean +} + +/** + * Normalize a path for comparison. + * e.g. 'gardener/advanced/' -> 'gardener/advanced/index.md' + */ +export function normalizeSidebarPath(base: string, link: string): string { + let p = base + link + if (p.endsWith('/')) p += 'index.md' + else if (!p.endsWith('.md')) p += '/index.md' + // Remove leading slash for comparison with relativePath + return p.replace(/^\//, '') +} + +/** + * Recursively find sidebar children for a given page path. + */ +export function findSidebarChildren( + items: TaxonomySidebarItem[], + base: string, + targetRelativePath: string +): Array<{ text: string; link: string }> | null { + for (const item of items) { + if (item.link) { + const normalized = normalizeSidebarPath(base, item.link) + if (normalized === targetRelativePath && item.items && item.items.length > 0) { + return item.items + .filter(child => child.text && child.link) + .map(child => ({ + text: child.text!, + link: base + child.link!, + })) + } + } + if (item.items) { + const found = findSidebarChildren(item.items, base, targetRelativePath) + if (found) return found + } + } + return null +} + +/** + * Find taxonomy children for a page across all sidebar configs. + */ +export function getTaxonomyChildren(relativePath: string, allSidebars: Record): Array<{ text: string; link: string }> | null { + for (const [, section] of Object.entries(allSidebars)) { + const sidebarSection = section as { base?: string; items?: TaxonomySidebarItem[] } + if (!sidebarSection.items) continue + const base = sidebarSection.base || '' + + // Check if this page IS the section root + const sectionRootNormalized = normalizeSidebarPath(base, '').replace(/^\//, '') + if (sectionRootNormalized === relativePath && sidebarSection.items.length > 0) { + return sidebarSection.items + .filter(item => item.text && item.link) + .map(item => ({ + text: item.text!, + link: base + item.link!, + })) + } + + // Search deeper in the tree + const found = findSidebarChildren(sidebarSection.items, base, relativePath) + if (found) return found + } + return null +} diff --git a/Makefile b/Makefile index 7503de84b..13b48c5d9 100644 --- a/Makefile +++ b/Makefile @@ -110,8 +110,16 @@ dev: npx vitepress dev .PHONY: local-preview -local-preview: - docforge-ci install post-process npx vitepress preview +local-preview: ## Full local preview: clean hugo dir, run docforge, post-process, build, and preview + @if [ -d "hugo" ]; then \ + echo "Removing existing hugo/content directory..."; \ + rm -rf hugo; \ + fi + @$(MAKE) docforge-ci + @$(MAKE) install + @$(MAKE) post-process + @$(MAKE) build + npx vitepress preview .PHONY: post-processing-part-1 post-processing-part-1: @@ -127,7 +135,7 @@ post-processing-part-index: .PHONY: post-processing-part-3 post-processing-part-3: - node post-processing/part-3.js --add-empty-metadata --update-report-link --process-api-html + node post-processing/part-3.js --update-report-link --process-api-html .PHONY: post-process post-process: ## Run post-processing scripts @@ -147,7 +155,4 @@ docforge-ci: docforge-download ## Run docforge in CI mode (non-interactive) ./bin/docforge .PHONY: ci-build -ci-build: docforge-ci install post-process build ## Run all steps for building in CI - -.PHONY: ci-test -ci-test: docforge-ci install post-process test ## Run all steps for testing in CI +ci-build: docforge-ci install post-process build ## Run all steps for building in CI \ No newline at end of file diff --git a/post-processing/part-3.js b/post-processing/part-3.js index b2cfc816a..e4e203177 100644 --- a/post-processing/part-3.js +++ b/post-processing/part-3.js @@ -11,10 +11,6 @@ await main(); // Main function async function main() { try { - if (process.argv.includes('--add-empty-metadata') || process.argv.includes('-e')) { - await addEmptyMetadata(BASE_PATH); - } - if (process.argv.includes('--update-report-link') || process.argv.includes('-r')) { await updateReportLink(path.join(BASE_PATH, 'docs/security-and-compliance/report.md')); } @@ -23,19 +19,15 @@ async function main() { await processApiHtml(BASE_PATH); } - if (!process.argv.includes('--add-empty-metadata') && - !process.argv.includes('-e') && - !process.argv.includes('--update-report-link') && + if (!process.argv.includes('--update-report-link') && !process.argv.includes('-r') && !process.argv.includes('--process-api-html') && !process.argv.includes('-a')) { // If no specific action is specified, show usage console.log('Available commands:'); - console.log('--add-empty-metadata, -e : Add isEmpty: true to frontmatter of empty index.md files'); console.log('--update-report-link, -r : Update the report link in security-and-compliance/report.md'); console.log('--process-api-html, -a : Extract HTML content to Vue script setup for API reference files'); - console.log(`\nExample: node post-processing/part-3.js --add-empty-metadata`); - console.log(`Example: node post-processing/part-3.js --update-report-link`); + console.log(`\nExample: node post-processing/part-3.js --update-report-link`); console.log(`Example: node post-processing/part-3.js --process-api-html`); } } catch (err) { @@ -43,156 +35,6 @@ async function main() { } } -/** - * Post-processing function to add isEmpty: true to frontmatter - * of index.md files that have no substantial content - */ -async function addEmptyMetadata(basePath) { - async function findIndexFiles(directory) { - let foundFiles = []; - - try { - const files = await fs.readdir(directory); - - for (const file of files) { - const fullPath = path.join(directory, file); - - try { - const stats = await fs.stat(fullPath); - - if (stats.isDirectory()) { - // Skip ignored directories - if (!IGNORE_DIRS.includes(file)) { - const subdirFiles = await findIndexFiles(fullPath); - foundFiles = foundFiles.concat(subdirFiles); - } - } else if (file === 'index.md') { - foundFiles.push(fullPath); - } - } catch (err) { - console.error(`Error accessing ${fullPath}: ${err.message}`); - } - } - } catch (err) { - console.error(`Error reading directory ${directory}: ${err.message}`); - } - - return foundFiles; - } - - async function processIndexFile(filePath) { - try { - const content = await fs.readFile(filePath, 'utf-8'); - const parsed = matter(content); - - // Check if body is empty (only whitespace, newlines, or comments) - const isEmpty = isBodyEmpty(parsed.content); - - if (isEmpty && parsed.data.isEmpty !== true) { - // Add isEmpty: true to frontmatter - parsed.data.isEmpty = true; - parsed.data.editLink = false; - - // Reconstruct the file with updated frontmatter - const updatedContent = matter.stringify(parsed.content, parsed.data); - await fs.writeFile(filePath, updatedContent, 'utf-8'); - - return { - file: filePath, - modified: true, - action: 'Added isEmpty: true' - }; - } else if (!isEmpty && parsed.data.isEmpty === true) { - // Remove isEmpty if file now has content - delete parsed.data.isEmpty; - const updatedContent = matter.stringify(parsed.content, parsed.data); - await fs.writeFile(filePath, updatedContent, 'utf-8'); - - return { - file: filePath, - modified: true, - action: 'Removed isEmpty (now has content)' - }; - } else if (isEmpty && parsed.data.isEmpty === true) { - return { - file: filePath, - modified: false, - reason: 'Already marked as empty' - }; - } else { - return { - file: filePath, - modified: false, - reason: 'Has content, not empty' - }; - } - } catch (err) { - console.error(`Error processing ${filePath}: ${err.message}`); - return { - file: filePath, - modified: false, - reason: err.message - }; - } - } - - /** - * Check if markdown body content is empty - * Returns true if body only contains whitespace, newlines, comments, or h1 markdown tags - */ - function isBodyEmpty(body) { - if (!body || typeof body !== 'string') { - return true; - } - - // Remove HTML comments - const withoutHtmlComments = body.replace(//g, ''); - - // Remove h1 markdown tags (# Title) - const withoutH1Tags = withoutHtmlComments.replace(/^#\s+.*$/gm, ''); - - // Check if remaining content is only whitespace and newlines - const trimmed = withoutH1Tags.trim(); - - return trimmed === ''; - } - - console.log(`Searching for index.md files in: ${basePath}`); - const indexFiles = await findIndexFiles(basePath); - console.log(`\nFound ${indexFiles.length} index.md files`); - - if (indexFiles.length > 0) { - console.log('\nProcessing index.md files for empty content...'); - const results = []; - - for (const file of indexFiles) { - const result = await processIndexFile(file); - results.push(result); - - if (result.modified) { - console.log(`- ${result.action}: ${path.relative(basePath, file)}`); - } - } - - const modifiedCount = results.filter(r => r.modified).length; - const addedEmptyCount = results.filter(r => r.modified && r.action.includes('Added')).length; - const removedEmptyCount = results.filter(r => r.modified && r.action.includes('Removed')).length; - - console.log(`\nSummary: Modified ${modifiedCount} of ${indexFiles.length} index.md files.`); - if (addedEmptyCount > 0) { - console.log(`- Added isEmpty: true to ${addedEmptyCount} files`); - } - if (removedEmptyCount > 0) { - console.log(`- Removed isEmpty from ${removedEmptyCount} files`); - } - - if (modifiedCount > 0) { - console.log('\nEmpty metadata processing completed!'); - console.log('Files with empty content now have isEmpty: true in their frontmatter.'); - } - } -} - /** * Updates the report link in the security-and-compliance/report.md file * Replaces the download link with a direct view link diff --git a/website/documentation/_index.md b/website/documentation/_index.md index a2a5d2eca..ad76991c4 100644 --- a/website/documentation/_index.md +++ b/website/documentation/_index.md @@ -12,47 +12,6 @@ If you're new to Gardener, we recommend starting with our [Getting Started](./ge For an easy-to-grasp analogy of how Gardener works, check out [Podrick and the Infinite Garden](./getting-started/podrick-and-the-infinite-garden.md). -## Understanding the Documentation Personas - -Our documentation is organized around three user personas to help you find the most relevant content for your needs. Below you will find more information on each of them. - -> [!NOTE] -> You can switch between personas through the Documentation drop-down menu in the top navigation bar. - -### User - -You are a **User** if you: - -- Create and manage Kubernetes clusters (shoots) using Gardener -- Work with Gardener through the Dashboard or API -- Configure cluster specifications, extensions, and networking -- Have access to shoot clusters but not to the underlying seed infrastructure - -User documentation focuses on how to use Gardener to create, configure, and manage your Kubernetes clusters. - -### Operator - -You are an **Operator** if you: - -- Run and maintain Gardener landscapes -- Manage seed clusters and infrastructure -- Configure Gardener components and extensions -- Handle platform-level operations and monitoring -- Provide Gardener as a service to end-users - -Operator documentation covers installation, configuration, maintenance, and operational aspects of running Gardener. - -### Developer - -You are a **Developer** if you: - -- Contribute to Gardener core components -- Develop Gardener extensions or integrations -- Work on the Gardener codebase -- Need to understand Gardener's internal architecture and APIs - -Developer documentation includes architecture details, development guides, API references, and contribution guidelines. - ## Support If you need assistance or have questions: From 288bae3b324265192b7cbfac58085b9bf856709b Mon Sep 17 00:00:00 2001 From: klocke-io Date: Fri, 27 Feb 2026 08:43:50 +0100 Subject: [PATCH 2/9] clean up package.json --- package-lock.json | 2057 ++------------------------------------------- package.json | 18 +- vitest.config.ts | 59 -- 3 files changed, 90 insertions(+), 2044 deletions(-) delete mode 100644 vitest.config.ts diff --git a/package-lock.json b/package-lock.json index f2938c5e9..647780b8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,25 +6,17 @@ "": { "name": "documentation", "dependencies": { - "@tailwindcss/typography": "0.5.14", "@types/js-yaml": "4.0.9", "@types/lodash-es": "4.17.12", "@types/markdown-it": "12.2.3", "@types/node": "20.11.27", "autoprefixer": "10.4.0", - "feed": "4.2.2", "gray-matter": "4.0.3", "js-yaml": "4.1.1", "lodash-es": "4.17.23", - "postcss": "8.5.6", - "postcss-cli": "9.0.2", - "tailwindcss": "3.4.10", "ts-node": "10.9.2", - "tslib": "2.8.1", "vitepress": "1.6.3", - "vitepress-plugin-autobar": "1.0.8", "vitepress-sidebar": "1.31.1", - "vitest": "3.2.4", "vue": "3.5.16" } }, @@ -253,18 +245,6 @@ "node": ">= 14.0.0" } }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", @@ -781,16 +761,6 @@ "node": ">=12" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.10.tgz", - "integrity": "sha512-HM2F4B9N4cA0RH2KQiIZOHAZqtP4xGS4IZ+SFe1SIbO4dyjf9MTY2Bo3vHYnm0hglWfXqBrzUBSa+cJfl3Xvrg==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -806,51 +776,6 @@ "integrity": "sha512-gKYheCylLIedI+CSZoDtGkFV9YEBxRRVcfCH7OfAqh4TyUyRjEE6WVE/aXDXX0p8BIe/QgLcaAoI0220KRRFgg==", "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.27", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.27.tgz", - "integrity": "sha512-VO95AxtSFMelbg3ouljAYnfvTEwSWVt/2YLf+U5Ejd8iT5mXE2Sa/1LGyvySMne2CGsepGLI7KpF3EzE3Aq9Mg==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -1265,21 +1190,6 @@ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "license": "MIT" }, - "node_modules/@tailwindcss/typography": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.14.tgz", - "integrity": "sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==", - "license": "MIT", - "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "postcss-selector-parser": "6.0.10" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || insiders" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -1304,21 +1214,6 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "license": "MIT" }, - "node_modules/@types/chai": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", - "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "license": "MIT" - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -1426,114 +1321,6 @@ "vue": "^3.2.25" } }, - "node_modules/@vitest/expect": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/mocker": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", - "license": "MIT", - "dependencies": { - "@vitest/spy": "3.2.4", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.17" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/pretty-format": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", - "license": "MIT", - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", - "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", - "license": "MIT", - "dependencies": { - "@vitest/utils": "3.2.4", - "pathe": "^2.0.3", - "strip-literal": "^3.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", - "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", - "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.4", - "loupe": "^3.1.4", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/@vue/compiler-core": { "version": "3.5.16", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.16.tgz", @@ -1901,58 +1688,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, - "node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, "node_modules/autoprefixer": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.0.tgz", @@ -1986,18 +1727,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/birpc": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.4.0.tgz", @@ -2016,18 +1745,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/browserslist": { "version": "4.25.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", @@ -2060,24 +1777,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001726", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", @@ -2108,22 +1807,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/chai": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", - "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/character-entities-html4": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", @@ -2144,126 +1827,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2292,15 +1855,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/copy-anything": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", @@ -2336,59 +1890,12 @@ "node": ">= 8" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, - "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/dependency-graph": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -2411,12 +1918,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "license": "Apache-2.0" - }, "node_modules/diff": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", @@ -2426,24 +1927,6 @@ "node": ">=0.3.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "license": "MIT" - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -2480,12 +1963,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "license": "MIT" - }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -2546,24 +2023,6 @@ "node": ">=4" } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/expect-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz", - "integrity": "sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==", - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -2576,55 +2035,6 @@ "node": ">=0.10.0" } }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "license": "MIT", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/focus-trap": { "version": "7.6.5", "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz", @@ -2663,26 +2073,6 @@ "url": "https://github.com/sponsors/rawify" } }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2697,36 +2087,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -2747,44 +2107,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", - "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", - "license": "MIT", - "dependencies": { - "array-union": "^3.0.1", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.9", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", @@ -2822,18 +2144,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/hast-util-to-html": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", @@ -2886,59 +2196,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -2948,15 +2205,6 @@ "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", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -2966,27 +2214,6 @@ "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/is-what": { "version": "4.1.16", "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", @@ -3020,21 +2247,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jiti": { - "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "license": "MIT" - }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", @@ -3047,18 +2259,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -3068,57 +2268,12 @@ "node": ">=0.10.0" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "license": "MIT" - }, "node_modules/lodash-es": { "version": "4.17.23", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz", "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", "license": "MIT" }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT" - }, - "node_modules/loupe": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.4.tgz", - "integrity": "sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==", - "license": "MIT" - }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -3167,15 +2322,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/micromark-util-character": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", @@ -3265,19 +2411,6 @@ ], "license": "MIT" }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/minimatch": { "version": "9.0.9", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", @@ -3314,23 +2447,6 @@ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", "license": "MIT" }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -3355,15 +2471,6 @@ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "license": "MIT" }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", @@ -3373,33 +2480,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/oniguruma-to-es": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", @@ -3426,12 +2506,6 @@ "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -3448,35 +2522,11 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "license": "MIT" - }, - "node_modules/pathval": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", - "license": "MIT" + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", @@ -3484,36 +2534,6 @@ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", @@ -3542,158 +2562,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-cli": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-9.0.2.tgz", - "integrity": "sha512-08Wujoy7YGhKCFrGsT9OXqWjtHlGQ+JmyaD/4McjCiwor2IUTRVzXiJd+xmLTGdSWjceS6/TePaJQwBlkVWHiw==", - "license": "MIT", - "dependencies": { - "chokidar": "^3.3.0", - "dependency-graph": "^0.11.0", - "fs-extra": "^10.0.0", - "get-stdin": "^9.0.0", - "globby": "^12.0.0", - "picocolors": "^1.0.0", - "postcss-load-config": "^3.0.0", - "postcss-reporter": "^7.0.0", - "pretty-hrtime": "^1.0.3", - "read-cache": "^1.0.0", - "slash": "^4.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "postcss": "index.js" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-import": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "license": "MIT", - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-nested": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nested/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-reporter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.1.0.tgz", - "integrity": "sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "thenby": "^1.3.4" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", @@ -3710,15 +2578,6 @@ "url": "https://opencollective.com/preact" } }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/property-information": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", @@ -3738,47 +2597,6 @@ "node": ">=18.0.0" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "license": "MIT", - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", @@ -3803,45 +2621,6 @@ "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", "license": "MIT" }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", @@ -3892,35 +2671,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, "node_modules/search-insights": { "version": "2.17.3", "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", @@ -3978,12 +2728,6 @@ "@types/hast": "^3.0.4" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "license": "ISC" - }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -3996,18 +2740,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4042,18 +2774,6 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "license": "BSD-3-Clause" }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "license": "MIT" - }, - "node_modules/std-env": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", - "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", - "license": "MIT" - }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -4062,447 +2782,135 @@ "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "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==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-literal": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", - "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/superjson": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", - "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", - "license": "MIT", - "dependencies": { - "copy-anything": "^3.0.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "license": "MIT" - }, - "node_modules/tailwindcss": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", - "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", - "license": "MIT", - "dependencies": { - "@alloc/quick-lru": "^5.2.0", - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.3.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", - "postcss-import": "^15.1.0", - "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tailwindcss/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tailwindcss/node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/tailwindcss/node_modules/postcss-js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", - "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/tailwindcss/node_modules/postcss-load-config": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "lilconfig": "^3.0.0", - "yaml": "^2.3.4" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/tailwindcss/node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tailwindcss/node_modules/yaml": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", - "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 14.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/thenby": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", - "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==", - "license": "Apache-2.0" - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { - "any-promise": "^1.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, "engines": { - "node": ">=0.8" + "node": ">=8" } }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, - "node_modules/tinyglobby": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", - "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { - "fdir": "^6.4.4", - "picomatch": "^4.0.2" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "node": ">=8" } }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", - "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "license": "MIT", - "peerDependencies": { - "picomatch": "^3 || ^4" + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/tinypool": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": ">=8" } }, - "node_modules/tinyrainbow": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=8" } }, - "node_modules/tinyspy": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", - "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "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==", "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": ">=0.10.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "copy-anything": "^3.0.2" }, "engines": { - "node": ">=8.0" + "node": ">=16" } }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, "node_modules/trim-lines": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", @@ -4513,12 +2921,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "license": "Apache-2.0" - }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -4568,12 +2970,6 @@ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "license": "MIT" }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", @@ -4662,15 +3058,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/update-browserslist-db": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", @@ -4701,12 +3088,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", @@ -4800,28 +3181,6 @@ } } }, - "node_modules/vite-node": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", - "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", - "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.1", - "es-module-lexer": "^1.7.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "node_modules/vitepress": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.3.tgz", @@ -4863,48 +3222,6 @@ } } }, - "node_modules/vitepress-plugin-autobar": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/vitepress-plugin-autobar/-/vitepress-plugin-autobar-1.0.8.tgz", - "integrity": "sha512-BIDtjh3ljnM+m9joJqQ5f5jaxED+bvYJkxDy6rUGk6XH0gY+87rUHQbg0OL1hUOZ+oeMw7MObH9L04u2Jj64TQ==", - "license": "MIT", - "dependencies": { - "glob": "^8.0.3", - "lodash": "^4.17.21" - } - }, - "node_modules/vitepress-plugin-autobar/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/vitepress-plugin-autobar/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/vitepress-sidebar": { "version": "1.31.1", "resolved": "https://registry.npmjs.org/vitepress-sidebar/-/vitepress-sidebar-1.31.1.tgz", @@ -4929,90 +3246,6 @@ "@types/mdurl": "^2" } }, - "node_modules/vitest": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", - "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.4", - "@vitest/mocker": "3.2.4", - "@vitest/pretty-format": "^3.2.4", - "@vitest/runner": "3.2.4", - "@vitest/snapshot": "3.2.4", - "@vitest/spy": "3.2.4", - "@vitest/utils": "3.2.4", - "chai": "^5.2.0", - "debug": "^4.4.1", - "expect-type": "^1.2.1", - "magic-string": "^0.30.17", - "pathe": "^2.0.3", - "picomatch": "^4.0.2", - "std-env": "^3.9.0", - "tinybench": "^2.9.0", - "tinyexec": "^0.3.2", - "tinyglobby": "^0.2.14", - "tinypool": "^1.1.1", - "tinyrainbow": "^2.0.0", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.4", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/debug": "^4.1.12", - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.4", - "@vitest/ui": "3.2.4", - "happy-dom": "*", - "jsdom": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@types/debug": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/vue": { "version": "3.5.16", "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.16.tgz", @@ -5055,22 +3288,6 @@ "node": ">= 8" } }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -5162,110 +3379,6 @@ "node": ">=8" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/package.json b/package.json index 50211d7d2..70934e04d 100644 --- a/package.json +++ b/package.json @@ -3,24 +3,16 @@ "type": "module", "dependencies": { "@types/js-yaml": "4.0.9", + "@types/lodash-es": "4.17.12", + "@types/markdown-it": "12.2.3", + "@types/node": "20.11.27", "autoprefixer": "10.4.0", "gray-matter": "4.0.3", "js-yaml": "4.1.1", - "postcss": "8.5.6", - "postcss-cli": "9.0.2", - "ts-node": "10.9.2", - "vitepress-plugin-autobar": "1.0.8", - "vitepress-sidebar": "1.31.1", - "@tailwindcss/typography": "0.5.14", - "@types/markdown-it": "12.2.3", - "@types/node": "20.11.27", - "feed": "4.2.2", "lodash-es": "4.17.23", - "@types/lodash-es": "4.17.12", - "tailwindcss": "3.4.10", - "tslib": "2.8.1", + "ts-node": "10.9.2", "vitepress": "1.6.3", - "vitest": "3.2.4", + "vitepress-sidebar": "1.31.1", "vue": "3.5.16" } } diff --git a/vitest.config.ts b/vitest.config.ts deleted file mode 100644 index 558f0fc76..000000000 --- a/vitest.config.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { defineConfig } from 'vitest/config' -import { fileURLToPath } from 'node:url' -import path from 'node:path' - -export default defineConfig({ - test: { - // Enable TypeScript support - globals: true, - environment: 'node', - - // Test file patterns - include: ['tests/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], - - // Exclude patterns - exclude: [ - '**/node_modules/**', - '**/dist/**', - '**/.{idea,git,cache,output,temp}/**', - '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*' - ], - - // Test timeout - testTimeout: 10000, - - // Coverage configuration (optional) - coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], - exclude: [ - 'coverage/**', - 'dist/**', - 'packages/*/test{,s}/**', - '**/*.d.ts', - 'cypress/**', - 'test{,s}/**', - 'test{,-*}.{js,cjs,mjs,ts,tsx,jsx}', - '**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx}', - '**/*{.,-}spec.{js,cjs,mjs,ts,tsx,jsx}', - '**/__tests__/**', - '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', - '**/.{eslint,mocha,prettier}rc.{js,cjs,yml}' - ] - } - }, - - resolve: { - alias: { - '@': fileURLToPath(new URL('.', import.meta.url)), - '@data': path.resolve(__dirname, '.vitepress/data'), - '@components': path.resolve(__dirname, '.vitepress/theme/components'), - '@utils': path.resolve(__dirname, '.vitepress/theme/utils') - } - }, - - // Enable TypeScript module resolution - esbuild: { - target: 'node14' - } -}) \ No newline at end of file From 0f0a74dc7d7f8c3177d80b513d040ec1ad592320 Mon Sep 17 00:00:00 2001 From: klocke-io Date: Fri, 27 Feb 2026 11:32:51 +0100 Subject: [PATCH 3/9] chore: reorder dependencies --- package.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 70934e04d..f6cf34d8f 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,6 @@ "name": "documentation", "type": "module", "dependencies": { - "@types/js-yaml": "4.0.9", - "@types/lodash-es": "4.17.12", - "@types/markdown-it": "12.2.3", - "@types/node": "20.11.27", "autoprefixer": "10.4.0", "gray-matter": "4.0.3", "js-yaml": "4.1.1", @@ -14,5 +10,11 @@ "vitepress": "1.6.3", "vitepress-sidebar": "1.31.1", "vue": "3.5.16" + }, + "devDependencies": { + "@types/js-yaml": "4.0.9", + "@types/lodash-es": "4.17.12", + "@types/markdown-it": "12.2.3", + "@types/node": "20.11.27" } } From 5846b070ab9d5ff62818048fae4d7095b8d435a4 Mon Sep 17 00:00:00 2001 From: klocke-io Date: Fri, 27 Feb 2026 12:51:01 +0100 Subject: [PATCH 4/9] refactor(frontend): replace layout wrapper with slot composition --- .../TaxonomyIndex.vue} | 24 +++++++------------ .vitepress/theme/index.ts | 15 ++++++++---- 2 files changed, 19 insertions(+), 20 deletions(-) rename .vitepress/theme/{layouts/EmptyIndexLayout.vue => components/TaxonomyIndex.vue} (66%) diff --git a/.vitepress/theme/layouts/EmptyIndexLayout.vue b/.vitepress/theme/components/TaxonomyIndex.vue similarity index 66% rename from .vitepress/theme/layouts/EmptyIndexLayout.vue rename to .vitepress/theme/components/TaxonomyIndex.vue index a1a196b2a..5ad9b84c0 100644 --- a/.vitepress/theme/layouts/EmptyIndexLayout.vue +++ b/.vitepress/theme/components/TaxonomyIndex.vue @@ -1,9 +1,7 @@ \ No newline at end of file + diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index ed0fadaca..249be8ab7 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -1,9 +1,10 @@ // https://vitepress.dev/guide/custom-theme -import { Theme, useData } from 'vitepress' +import { h } from 'vue' +import { Theme } from 'vitepress' import DefaultTheme from 'vitepress/theme' import YouTubeVideo from './components/YouTubeVideo.vue' import VPFooter from './components/VPFooter.vue' -import EmptyIndexLayout from './layouts/EmptyIndexLayout.vue' +import TaxonomyIndex from './components/TaxonomyIndex.vue' import './style.css' // Extend Window interface to include plausible @@ -15,9 +16,13 @@ declare global { export default { extends: DefaultTheme, - Layout: EmptyIndexLayout, - enhanceApp({ app, router, siteData }) { + Layout() { + return h(DefaultTheme.Layout, null, { + 'doc-before': () => h(TaxonomyIndex), + 'layout-bottom': () => h(VPFooter), + }) + }, + enhanceApp({ app }) { app.component('YouTubeVideo', YouTubeVideo) - app.component('VPFooter', VPFooter) }, } satisfies Theme From dfea39f324cbc7956990e1bc3d17cd67b37d5cd1 Mon Sep 17 00:00:00 2001 From: klocke-io Date: Fri, 27 Feb 2026 12:58:37 +0100 Subject: [PATCH 5/9] chore: cleanup --- Makefile | 2 +- package.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 13b48c5d9..b6226ca22 100644 --- a/Makefile +++ b/Makefile @@ -112,7 +112,7 @@ dev: .PHONY: local-preview local-preview: ## Full local preview: clean hugo dir, run docforge, post-process, build, and preview @if [ -d "hugo" ]; then \ - echo "Removing existing hugo/content directory..."; \ + echo "Removing existing hugo directory..."; \ rm -rf hugo; \ fi @$(MAKE) docforge-ci diff --git a/package.json b/package.json index f6cf34d8f..074daf568 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,6 @@ "gray-matter": "4.0.3", "js-yaml": "4.1.1", "lodash-es": "4.17.23", - "ts-node": "10.9.2", "vitepress": "1.6.3", "vitepress-sidebar": "1.31.1", "vue": "3.5.16" From c82db9182dc4a064fd7e368d2279b043dc737b3a Mon Sep 17 00:00:00 2001 From: klocke-io Date: Fri, 27 Feb 2026 14:10:56 +0100 Subject: [PATCH 6/9] feat: improve sidebar design --- .vitepress/theme/index.ts | 6 ------ .vitepress/theme/style.css | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index 249be8ab7..8366c9fcf 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -7,12 +7,6 @@ import VPFooter from './components/VPFooter.vue' import TaxonomyIndex from './components/TaxonomyIndex.vue' import './style.css' -// Extend Window interface to include plausible -declare global { - interface Window { - plausible?: (event: string, options?: { props?: Record }) => void; - } -} export default { extends: DefaultTheme, diff --git a/.vitepress/theme/style.css b/.vitepress/theme/style.css index be6c8d0eb..52c27b328 100644 --- a/.vitepress/theme/style.css +++ b/.vitepress/theme/style.css @@ -67,6 +67,21 @@ img[src='/search.png'] { --vp-c-brand-soft: var(--vp-c-green-soft); } +/* Sidebar: directories (sections) are always bold, leaves (divs) never */ +#VPSidebarNav section.VPSidebarItem > .item .text { + font-weight: 700; + color: var(--vp-c-text-1); +} + +#VPSidebarNav div.VPSidebarItem > .item .text { + font-weight: 500; +} + +/* Sidebar: restore root-level item spacing (VitePress default is 24px) */ +#VPSidebarNav .VPSidebarItem.level-0 { + padding-bottom: 10px; +} + /* GitHub social link styling */ .VPSocialLink[href*="github"] { color: var(--vp-c-text-1); From 7eed5f5973de93c48f20095cd7e798435d1d31aa Mon Sep 17 00:00:00 2001 From: klocke-io Date: Fri, 27 Feb 2026 14:58:06 +0100 Subject: [PATCH 7/9] chore: simplify sidebar code --- .vitepress/theme/community-sidebar.ts | 49 +++------ .vitepress/theme/docs-sidebar.ts | 55 ++-------- .vitepress/theme/utils/sidebar.ts | 138 +++----------------------- 3 files changed, 38 insertions(+), 204 deletions(-) diff --git a/.vitepress/theme/community-sidebar.ts b/.vitepress/theme/community-sidebar.ts index 539548851..c316022f0 100644 --- a/.vitepress/theme/community-sidebar.ts +++ b/.vitepress/theme/community-sidebar.ts @@ -1,40 +1,15 @@ -import { generateSidebar } from 'vitepress-sidebar'; -import { - removeIndexEntries, - sortByWeight, - enhanceDirectoryTitles, - removeEmptyItems, - addTrailingSlashToLinks, -} from './utils/sidebar.ts'; - -const communitySidbarConfig = { - documentRootPath: '/hugo/content', - scanStartPath: 'community', - resolvePath: '/community/', - collapsed: true, - useTitleFromFileHeading: true, - useTitleFromFrontmatter: true, - useFolderLinkFromIndexFile: true, - includeFolderLinksInFolder: true, - excludeFilesByFrontmatterFieldName: 'exclude', -} +import { generateWeightSortedSidebar } from './utils/sidebar.ts'; export function communitySidebar(): any { - // Generate the base sidebar - const sidebar = generateSidebar([communitySidbarConfig]); - - // Recursively enhance directory titles from frontmatter - const enhancedSidebar = enhanceDirectoryTitles(sidebar, 'community'); - - // Sort entries by weight from frontmatter - const sortedSidebar = sortByWeight(enhancedSidebar, 'community'); - - // Filter out all _index.md entries (called last) - const filteredSidebar = removeIndexEntries(sortedSidebar) - - const cleandSidebar = removeEmptyItems(filteredSidebar) - - addTrailingSlashToLinks(cleandSidebar['/community/'].items); - - return cleandSidebar; + return generateWeightSortedSidebar({ + documentRootPath: '/hugo/content', + scanStartPath: 'community', + resolvePath: '/community/', + collapsed: true, + useTitleFromFileHeading: true, + useTitleFromFrontmatter: true, + useFolderLinkFromIndexFile: true, + useFolderTitleFromIndexFile: true, + excludeFilesByFrontmatterFieldName: 'exclude', + }); } diff --git a/.vitepress/theme/docs-sidebar.ts b/.vitepress/theme/docs-sidebar.ts index cdc2ed4fc..f284e88fc 100644 --- a/.vitepress/theme/docs-sidebar.ts +++ b/.vitepress/theme/docs-sidebar.ts @@ -1,47 +1,14 @@ -import { generateSidebar } from 'vitepress-sidebar'; -import { - removeIndexEntries, - sortByWeight, - enhanceDirectoryTitles, - removeEmptyItems, - addTrailingSlashToLinks -} from './utils/sidebar.ts'; +import { generateWeightSortedSidebar } from './utils/sidebar.ts'; -const docsSidbarConfig = { - documentRootPath: '/hugo/content', - scanStartPath: 'docs', - resolvePath: '/docs/', - collapsed: true, - useTitleFromFileHeading: true, - useTitleFromFrontmatter: true, - useFolderLinkFromIndexFile: true, - includeFolderLinksInFolder: true, -} - -function generateDocsSidebar(): any { - return generateSidebar([docsSidbarConfig]); -} - -/** - * Wrapper function that generates and enhances the docs sidebar - * @returns The enhanced sidebar with updated directory titles - */ export function generateEnhancedDocsSidebar(): any { - // Generate the base sidebar - const sidebar = generateDocsSidebar(); - - // Recursively enhance directory titles from frontmatter - const enhancedSidebar = enhanceDirectoryTitles(sidebar, 'docs'); - - // Sort entries by weight from frontmatter - const sortedSidebar = sortByWeight(enhancedSidebar, 'docs'); - - // Filter out all _index.md entries (called last) - const filteredSidebar = removeIndexEntries(sortedSidebar); - - const cleandSidebar = removeEmptyItems(filteredSidebar) - - addTrailingSlashToLinks(cleandSidebar['/docs/'].items); - - return cleandSidebar; + return generateWeightSortedSidebar({ + documentRootPath: '/hugo/content', + scanStartPath: 'docs', + resolvePath: '/docs/', + collapsed: true, + useTitleFromFileHeading: true, + useTitleFromFrontmatter: true, + useFolderLinkFromIndexFile: true, + useFolderTitleFromIndexFile: true, + }); } diff --git a/.vitepress/theme/utils/sidebar.ts b/.vitepress/theme/utils/sidebar.ts index ca684a5ac..328629168 100644 --- a/.vitepress/theme/utils/sidebar.ts +++ b/.vitepress/theme/utils/sidebar.ts @@ -1,23 +1,25 @@ import { readFileSync, existsSync } from 'node:fs'; import { join } from 'node:path'; import { load } from 'js-yaml'; +import { generateSidebar } from 'vitepress-sidebar'; +import type { VitePressSidebarOptions } from 'vitepress-sidebar'; -// Type definitions for sidebar items -export interface SidebarLeaf { - text: string; - link: string; - collapsed?: boolean; -} +/** + * Generates a sidebar with weight-based sorting and standard post-processing. + * Shared pipeline for docs and community sidebars. + */ +export function generateWeightSortedSidebar(config: VitePressSidebarOptions): any { + const sidebar = generateSidebar([config]); + const base = config.scanStartPath || ''; + const resolvePath = config.resolvePath || '/'; -export interface SidebarBranch { - text: string; - items: (SidebarLeaf | SidebarBranch)[]; - collapsed?: boolean; + const sorted = sortByWeight(sidebar, base); + const filtered = removeIndexEntries(sorted); + const cleaned = removeEmptyItems(filtered); + addTrailingSlashToLinks(cleaned[resolvePath].items); + return cleaned; } -export type SidebarItem = SidebarLeaf | SidebarBranch; - - /** * Recursively removes all _index.md entries from the sidebar */ @@ -188,116 +190,6 @@ export function getWeightFromFile(link: string, base?: string): number | null { } } -/** - * Recursively enhances directory titles by reading from _index.md frontmatter - */ -export function enhanceDirectoryTitles(sidebar: any, base): any { - if (Array.isArray(sidebar)) { - return sidebar.map(item => enhanceDirectoryTitles(item, base)); - } - - if (typeof sidebar !== 'object' || sidebar === null) { - return sidebar; - } - - // Create a copy of the object - const enhanced = { ...sidebar }; - - // If this object has items (indicating it's a directory), enhance it - if (enhanced.items && Array.isArray(enhanced.items)) { - // Look for _index.md file in the items - const indexItem = enhanced.items.find((item: any) => - item.link && (item.link === '_index' || item.link.endsWith('/_index')) - ); - - if (indexItem) { - // Try to read the frontmatter and update the title - const title = getTitleFromIndexFile(indexItem.link, base); - if (title) { - enhanced.text = title; - } - } - - // Recursively process all items - enhanced.items = enhanced.items.map((item: any) => enhanceDirectoryTitles(item, base)); - } - - // If it's a top-level section with items, process those too - if (enhanced.base && enhanced.items) { - enhanced.items = enhanced.items.map((item: any) => enhanceDirectoryTitles(item, base)); - } - - // Process other properties recursively - for (const [key, value] of Object.entries(enhanced)) { - if (key !== 'items' && typeof value === 'object') { - enhanced[key] = enhanceDirectoryTitles(value, base); - } - } - - return enhanced; -} - -/** - * Reads the title from an _index.md file's frontmatter - */ -export function getTitleFromIndexFile(link: string, base?: string): string | null { - try { - // Construct the file path - let filePath: string; - - if (link === '_index') { - // For root _index files - filePath = join(process.cwd(), 'hugo', 'content', base, '_index.md'); - } else if (link.endsWith('/_index')) { - // For nested _index files - const relativePath = link.replace('/_index', ''); - filePath = join(process.cwd(), 'hugo', 'content', base, relativePath, '_index.md'); - } else { - return null; - } - - // Check if file exists - if (!existsSync(filePath)) { - return null; - } - - // Read the file content - const content = readFileSync(filePath, 'utf-8'); - - // Extract frontmatter - const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/); - if (!frontmatterMatch) { - return null; - } - - // Parse YAML frontmatter - const frontmatter = load(frontmatterMatch[1]) as any; - - // Return the title if it exists - return frontmatter?.title || null; - - } catch (error) { - console.warn(`Error reading title from ${link}:`, error); - return null; - } -} - - -/** - * Function to recursively extract all items from a section - */ -export function extractItems(section: any): SidebarItem[] { - if (Array.isArray(section)) { - return section as SidebarItem[]; - } - if (section && typeof section === 'object' && 'items' in section) { - return section.items as SidebarItem[]; - } - return []; -} - - - /** * Recursively removes all items fields from the sidebar object that are empty arrays */ From adec1fb38f77ed1cee03fe069cac3405218ce83d Mon Sep 17 00:00:00 2001 From: klocke-io Date: Wed, 4 Mar 2026 08:43:02 +0100 Subject: [PATCH 8/9] fix(vitepress): normalize taxonomy sidebar path joins --- .vitepress/theme/utils/sidebar.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/.vitepress/theme/utils/sidebar.ts b/.vitepress/theme/utils/sidebar.ts index 328629168..607a98050 100644 --- a/.vitepress/theme/utils/sidebar.ts +++ b/.vitepress/theme/utils/sidebar.ts @@ -275,12 +275,25 @@ export interface TaxonomySidebarItem { collapsed?: boolean } +/** + * Join base and link with exactly one slash between segments. + * Preserves a leading slash only when the original path is absolute. + */ +function joinSidebarBaseAndLink(base: string, link: string): string { + const keepLeadingSlash = base.startsWith('/') || (!base && link.startsWith('/')) + const basePart = base.replace(/\/+$/, '').replace(/^\/+/, '') + const linkPart = link.replace(/^\/+/, '') + const joined = [basePart, linkPart].filter(Boolean).join('/') + if (!joined) return keepLeadingSlash ? '/' : '' + return keepLeadingSlash ? `/${joined}` : joined +} + /** * Normalize a path for comparison. * e.g. 'gardener/advanced/' -> 'gardener/advanced/index.md' */ export function normalizeSidebarPath(base: string, link: string): string { - let p = base + link + let p = joinSidebarBaseAndLink(base, link) if (p.endsWith('/')) p += 'index.md' else if (!p.endsWith('.md')) p += '/index.md' // Remove leading slash for comparison with relativePath @@ -303,7 +316,7 @@ export function findSidebarChildren( .filter(child => child.text && child.link) .map(child => ({ text: child.text!, - link: base + child.link!, + link: joinSidebarBaseAndLink(base, child.link!), })) } } @@ -331,7 +344,7 @@ export function getTaxonomyChildren(relativePath: string, allSidebars: Record item.text && item.link) .map(item => ({ text: item.text!, - link: base + item.link!, + link: joinSidebarBaseAndLink(base, item.link!), })) } From 48f90add3e297db53cf487356fe326d2ce5b178c Mon Sep 17 00:00:00 2001 From: klocke-io Date: Wed, 4 Mar 2026 08:51:41 +0100 Subject: [PATCH 9/9] chore: clean up package-lock.json --- package-lock.json | 182 ++++------------------------------------------ 1 file changed, 13 insertions(+), 169 deletions(-) diff --git a/package-lock.json b/package-lock.json index 647780b8f..5f0638145 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,18 +6,19 @@ "": { "name": "documentation", "dependencies": { - "@types/js-yaml": "4.0.9", - "@types/lodash-es": "4.17.12", - "@types/markdown-it": "12.2.3", - "@types/node": "20.11.27", "autoprefixer": "10.4.0", "gray-matter": "4.0.3", "js-yaml": "4.1.1", "lodash-es": "4.17.23", - "ts-node": "10.9.2", "vitepress": "1.6.3", "vitepress-sidebar": "1.31.1", "vue": "3.5.16" + }, + "devDependencies": { + "@types/js-yaml": "4.0.9", + "@types/lodash-es": "4.17.12", + "@types/markdown-it": "12.2.3", + "@types/node": "20.11.27" } }, "node_modules/@algolia/autocomplete-core": { @@ -291,28 +292,6 @@ "node": ">=6.9.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@docsearch/css": { "version": "3.8.2", "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", @@ -761,15 +740,6 @@ "node": ">=12" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.2.tgz", @@ -1190,30 +1160,6 @@ "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "license": "MIT" }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "license": "MIT" - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -1233,6 +1179,7 @@ "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true, "license": "MIT" }, "node_modules/@types/linkify-it": { @@ -1245,12 +1192,14 @@ "version": "4.17.19", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.19.tgz", "integrity": "sha512-NYqRyg/hIQrYPT9lbOeYc3kIRabJDn/k4qQHIXUpx88CBDww2fD15Sg5kbXlW86zm2XEW4g0QxkTI3/Kfkc7xQ==", + "dev": true, "license": "MIT" }, "node_modules/@types/lodash-es": { "version": "4.17.12", "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/lodash": "*" @@ -1260,6 +1209,7 @@ "version": "12.2.3", "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/linkify-it": "*", @@ -1285,6 +1235,7 @@ "version": "20.11.27", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.27.tgz", "integrity": "sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg==", + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~5.26.4" @@ -1616,30 +1567,6 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/algoliasearch": { "version": "5.29.0", "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.29.0.tgz", @@ -1870,12 +1797,6 @@ "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "license": "MIT" - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1918,15 +1839,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -2289,12 +2201,6 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "license": "ISC" - }, "node_modules/mark.js": { "version": "8.11.1", "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", @@ -2921,60 +2827,12 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "license": "MIT" - }, "node_modules/typescript": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", + "optional": true, "peer": true, "bin": { "tsc": "bin/tsc", @@ -2988,6 +2846,7 @@ "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true, "license": "MIT" }, "node_modules/unist-util-is": { @@ -3088,12 +2947,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "license": "MIT" - }, "node_modules/vfile": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", @@ -3379,15 +3232,6 @@ "node": ">=8" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/zwitch": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",