@unterberg/nivel 0.2.46 → 0.2.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-MUNS2MZP.js → chunk-AZSIADTL.js} +2 -2
- package/dist/{chunk-BRLIMUNM.js → chunk-LSRCZKTI.js} +3 -3
- package/dist/{chunk-BRLIMUNM.js.map → chunk-LSRCZKTI.js.map} +1 -1
- package/dist/{chunk-TFL3J5J2.js → chunk-TPNGK36M.js} +6947 -6885
- package/dist/chunk-TPNGK36M.js.map +1 -0
- package/dist/{chunk-OMA4T46A.js → chunk-XEMDJ4CI.js} +2 -2
- package/dist/{chunk-OMA4T46A.js.map → chunk-XEMDJ4CI.js.map} +1 -1
- package/dist/cli.js +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +1 -1
- package/dist/icons.d.ts +1 -1
- package/dist/icons.js +54 -0
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/mdx.js +1 -1
- package/dist/runtime/client.d.ts +1 -1
- package/dist/runtime/client.js +1 -1
- package/dist/runtime/node.d.ts +1 -1
- package/dist/runtime/node.js +2 -2
- package/dist/types-ju9hC2hN.d.ts +237 -0
- package/dist/vike.d.ts +1 -1
- package/dist/vike.js +5 -2
- package/dist/vike.js.map +1 -1
- package/package.json +12 -12
- package/dist/chunk-TFL3J5J2.js.map +0 -1
- package/dist/types-BhEjFwpG.d.ts +0 -237
- /package/dist/{chunk-MUNS2MZP.js.map → chunk-AZSIADTL.js.map} +0 -0
package/dist/vike.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vike/index.ts","../src/mdx/plugins/rehypeDefinitionLists.ts","../src/mdx/plugins/rehypeDocsHeadings.ts","../src/vike/sitemap.ts"],"sourcesContent":["export { nivelConfig as default }\n\nimport mdx from '@mdx-js/rollup'\nimport remarkGfm from 'remark-gfm'\nimport type { Config } from 'vike/types'\nimport type { PluginOption, UserConfig } from 'vite'\nimport type { DocsConfig } from '../docs/types.js'\nimport { getCodeBlockMdxPlugins } from '../mdx/code-blocks/index.js'\nimport { rehypeDefinitionLists } from '../mdx/plugins/rehypeDefinitionLists.js'\nimport { rehypeDocsHeadings } from '../mdx/plugins/rehypeDocsHeadings.js'\nimport { nivelPagesPlugin } from '../runtime/node/index.js'\nimport { createNivelSitemapPlugins } from './sitemap.js'\n\nprocess.env.VIKE_CRAWL ??= JSON.stringify({ git: false })\n\nconst codeBlockMdxPlugins = getCodeBlockMdxPlugins()\n\nconst viteConfig: UserConfig = {\n plugins: [\n {\n ...mdx({\n providerImportSource: '@unterberg/nivel/mdx',\n ...codeBlockMdxPlugins,\n rehypePlugins: [...codeBlockMdxPlugins.rehypePlugins, rehypeDefinitionLists, rehypeDocsHeadings],\n remarkPlugins: [remarkGfm, ...codeBlockMdxPlugins.remarkPlugins],\n }),\n enforce: 'pre',\n } as PluginOption,\n nivelPagesPlugin(),\n ],\n ssr: {\n noExternal: ['@unterberg/nivel'],\n },\n}\n\nconst getConsumerViteConfig = (docsConfig: DocsConfig) => {\n return {\n ...viteConfig,\n plugins: [...(viteConfig.plugins ?? []), ...createNivelSitemapPlugins(docsConfig)],\n } satisfies UserConfig\n}\n\nconst getDefaultConsumerDataTheme = (docsConfig: DocsConfig) => {\n const defaultPreference = docsConfig.theme?.defaultPreference ?? 'light'\n const lightThemeName = docsConfig.theme?.light ?? 'consumer-light'\n const darkThemeName = docsConfig.theme?.dark ?? 'consumer-dark'\n\n return defaultPreference === 'dark' ? darkThemeName : lightThemeName\n}\n\nconst vikeReactConfigImport = 'import:vike-react/config:default'\n\nconst nivelConfig = {\n meta: {\n docs: {\n env: {\n server: true,\n client: true,\n },\n global: true,\n },\n },\n prerender: true,\n trailingSlash: true,\n vite: viteConfig as Record<string, unknown>,\n} satisfies Config\n\nexport const createNivelVikeConfig = (docsConfig: DocsConfig) => {\n return {\n ...nivelConfig,\n title: docsConfig.siteTitle,\n description: docsConfig.siteDescription ?? `${docsConfig.siteTitle} documentation`,\n extends: [vikeReactConfigImport] as unknown as Config['extends'],\n htmlAttributes: {\n 'data-theme': getDefaultConsumerDataTheme(docsConfig),\n },\n prerender: true,\n vite: getConsumerViteConfig(docsConfig) as Record<string, unknown>,\n } as Config\n}\n","import type { ElementContentNode, ElementNode, HtmlRootNode, TextNode } from '../ast.js'\n\ntype DefinitionListItem = {\n definitions: ElementContentNode[][]\n term: ElementContentNode[]\n}\n\nconst isElementNode = (node: ElementContentNode): node is ElementNode => {\n return node.type === 'element'\n}\n\nconst isTextNode = (node: ElementContentNode): node is TextNode => {\n return node.type === 'text'\n}\n\nconst cloneElementNode = (node: ElementNode): ElementNode => {\n return {\n ...node,\n properties: { ...node.properties },\n children: node.children.map((child) => cloneContentNode(child)),\n }\n}\n\nconst cloneContentNode = (node: ElementContentNode): ElementContentNode => {\n if (isTextNode(node)) {\n return { ...node }\n }\n\n return cloneElementNode(node)\n}\n\nconst trimLine = (line: ElementContentNode[]): ElementContentNode[] => {\n const trimmed = line.map((node) => cloneContentNode(node))\n\n while (trimmed.length > 0 && isTextNode(trimmed[0]) && trimmed[0].value.trim() === '') {\n trimmed.shift()\n }\n\n while (trimmed.length > 0) {\n const lastNode = trimmed[trimmed.length - 1]\n if (!lastNode || !isTextNode(lastNode) || lastNode.value.trim() !== '') {\n break\n }\n\n trimmed.pop()\n }\n\n if (trimmed.length > 0 && isTextNode(trimmed[0])) {\n trimmed[0].value = trimmed[0].value.replace(/^\\s+/, '')\n }\n\n const lastNode = trimmed[trimmed.length - 1]\n if (lastNode && isTextNode(lastNode)) {\n lastNode.value = lastNode.value.replace(/\\s+$/, '')\n }\n\n return trimmed\n}\n\nconst stripDefinitionMarker = (line: ElementContentNode[]): ElementContentNode[] | undefined => {\n const [firstNode, ...rest] = line.map((node) => cloneContentNode(node))\n\n if (!firstNode || !isTextNode(firstNode)) {\n return undefined\n }\n\n const markerMatch = /^[ \\t]{0,3}:[ \\t]?/.exec(firstNode.value)\n if (!markerMatch) {\n return undefined\n }\n\n firstNode.value = firstNode.value.slice(markerMatch[0].length)\n return trimLine(firstNode.value === '' ? rest : [firstNode, ...rest])\n}\n\nconst splitParagraphLines = (node: ElementNode): ElementContentNode[][] | undefined => {\n const lines: ElementContentNode[][] = [[]]\n\n for (const child of node.children) {\n if (isElementNode(child)) {\n lines[lines.length - 1].push(cloneElementNode(child))\n continue\n }\n\n if (!isTextNode(child)) {\n return undefined\n }\n\n const textLines = child.value.split('\\n')\n textLines.forEach((textLine, index) => {\n if (index > 0) {\n lines.push([])\n }\n\n if (textLine !== '') {\n lines[lines.length - 1].push({ ...child, value: textLine })\n }\n })\n }\n\n return lines.length > 1 ? lines : undefined\n}\n\nconst isDefinitionLine = (line: ElementContentNode[]) => {\n return stripDefinitionMarker(line) !== undefined\n}\n\nconst parseDefinitionListParagraph = (node: ElementNode): DefinitionListItem[] | undefined => {\n if (node.tagName !== 'p') {\n return undefined\n }\n\n const lines = splitParagraphLines(node)\n if (!lines || lines.length < 2) {\n return undefined\n }\n\n const items: DefinitionListItem[] = []\n let lineIndex = 0\n\n while (lineIndex < lines.length) {\n const term = trimLine(lines[lineIndex])\n if (term.length === 0 || isDefinitionLine(lines[lineIndex])) {\n return undefined\n }\n\n lineIndex += 1\n\n const definitions: ElementContentNode[][] = []\n while (lineIndex < lines.length) {\n const definition = stripDefinitionMarker(lines[lineIndex])\n if (!definition) {\n break\n }\n\n definitions.push(definition)\n lineIndex += 1\n }\n\n if (definitions.length === 0) {\n return undefined\n }\n\n items.push({ definitions, term })\n }\n\n return items\n}\n\nconst createElement = (tagName: string, children: ElementContentNode[]): ElementNode => {\n return {\n type: 'element',\n tagName,\n properties: {},\n children,\n }\n}\n\nconst createDefinitionList = (items: DefinitionListItem[]): ElementNode => {\n return createElement(\n 'dl',\n items.flatMap((item) => {\n return [createElement('dt', item.term), ...item.definitions.map((definition) => createElement('dd', definition))]\n }),\n )\n}\n\nconst transformChildren = (parent: HtmlRootNode | ElementNode) => {\n const transformedChildren: ElementContentNode[] = []\n let childIndex = 0\n\n while (childIndex < parent.children.length) {\n const child = parent.children[childIndex]\n\n if (!isElementNode(child)) {\n transformedChildren.push(child)\n childIndex += 1\n continue\n }\n\n const definitionListItems = parseDefinitionListParagraph(child)\n if (!definitionListItems) {\n transformChildren(child)\n transformedChildren.push(child)\n childIndex += 1\n continue\n }\n\n const groupedItems = [...definitionListItems]\n childIndex += 1\n\n while (childIndex < parent.children.length) {\n const nextChild = parent.children[childIndex]\n if (!isElementNode(nextChild)) {\n break\n }\n\n const nextItems = parseDefinitionListParagraph(nextChild)\n if (!nextItems) {\n break\n }\n\n groupedItems.push(...nextItems)\n childIndex += 1\n }\n\n transformedChildren.push(createDefinitionList(groupedItems))\n }\n\n parent.children = transformedChildren\n}\n\nexport const rehypeDefinitionLists = () => {\n return (tree: HtmlRootNode) => {\n transformChildren(tree)\n }\n}\n","// attention: no HMR is active for this file, changes require a full engine pre-build -> dev / preview\nimport { visit } from 'unist-util-visit'\nimport { createHeadingSlugger, normalizeHeadingTitle } from '../../docs/docHeadings.js'\nimport type { ElementContentNode, ElementNode, HtmlRootNode } from '../ast.js'\n\nconst headingTags = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n\nconst getNodeText = (node: ElementContentNode | HtmlRootNode): string => {\n if (node.type === 'text') {\n return typeof node.value === 'string' ? node.value : ''\n }\n\n if ('children' in node) {\n return node.children.map((child) => getNodeText(child)).join('')\n }\n\n return ''\n}\n\nconst getClassNames = (value: unknown): string[] => {\n if (Array.isArray(value)) {\n return value.flatMap((entry) => getClassNames(entry))\n }\n\n if (typeof value === 'string') {\n return value.split(/\\s+/).filter(Boolean)\n }\n\n return []\n}\n\nconst createLinkIconLine = (x1: number, y1: number, x2: number, y2: number): ElementNode => {\n return {\n type: 'element',\n tagName: 'line',\n properties: { x1, y1, x2, y2 },\n children: [],\n }\n}\n\nexport const rehypeDocsHeadings = () => {\n return (tree: HtmlRootNode) => {\n const slugify = createHeadingSlugger()\n\n visit(tree, 'element', (node: ElementNode) => {\n if (!headingTags.has(node?.tagName)) {\n return\n }\n\n const title = normalizeHeadingTitle(getNodeText(node))\n if (!title) {\n return\n }\n\n node.properties ??= {}\n\n if (typeof node.properties.id !== 'string' || node.properties.id === '') {\n node.properties.id = slugify(title)\n }\n\n const classNames = getClassNames(node.properties.className)\n if (!classNames.includes('scroll-mt-32')) {\n node.properties.className = [\n ...classNames,\n 'scroll-mt-32',\n 'xl:scroll-mt-22',\n 'flex gap-2 items-center',\n 'group',\n 'relative',\n 'w-fit',\n ].join(' ')\n }\n\n // create link element with has and anchor icon\n const linkElement: ElementNode = {\n type: 'element',\n tagName: 'a',\n properties: {\n href: `#${node.properties.id}`,\n 'data-copy-heading-link': '',\n 'aria-label': `Copy link to heading: ${title}`,\n title: `Copy link to heading: ${title}`,\n className: ['docs-heading-link absolute inset-0 flex items-center justify-end text-primary-muted'],\n },\n children: [\n {\n type: 'element',\n tagName: 'svg',\n properties: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 16,\n height: 16,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n 'aria-hidden': 'true',\n className: ['size-4 hidden group-hover:block group-focus-within:block translate-x-5'],\n },\n children: [\n createLinkIconLine(4, 9, 20, 9),\n createLinkIconLine(4, 15, 20, 15),\n createLinkIconLine(10, 3, 8, 21),\n createLinkIconLine(16, 3, 14, 21),\n ],\n },\n ],\n }\n node.children.push(linkElement)\n })\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport type { Plugin, ViteDevServer } from 'vite'\nimport { resolveDocsConfig } from '../docs/resolveDocsConfig.js'\nimport type { DocsConfig } from '../docs/types.js'\nimport { loadDocsConfig } from '../runtime/node/loadDocsConfig.js'\n\nconst GENERATED_DIRNAME = '(nivel-generated)'\nconst SITEMAP_FILENAME = 'sitemap.xml'\nconst ROBOTS_FILENAME = 'robots.txt'\n\ntype SitemapEntry = {\n lastmod?: string\n loc: string\n}\n\nconst normalizeRoutePath = (value: string) => {\n const normalized = value.trim().replace(/^\\/+|\\/+$/g, '')\n return normalized ? `/${normalized}/` : '/'\n}\n\nconst normalizeSiteUrl = (value: string) => {\n const normalized = value.trim()\n\n if (!normalized) {\n throw new Error('Docs siteUrl must be a non-empty absolute URL when sitemap support is enabled.')\n }\n\n const url = new URL(normalized)\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new Error(`Docs siteUrl must use http or https. Received ${JSON.stringify(value)}.`)\n }\n\n if (url.search || url.hash) {\n throw new Error(`Docs siteUrl cannot include query strings or hashes. Received ${JSON.stringify(value)}.`)\n }\n\n const pathname = url.pathname.replace(/\\/+$/g, '')\n url.pathname = pathname || '/'\n\n return url.toString().replace(/\\/+$/g, '')\n}\n\nconst joinPublicUrl = (siteUrl: string, routePath: string) => {\n return routePath === '/' ? `${siteUrl}/` : `${siteUrl}${routePath}`\n}\n\nconst normalizePublicUrl = (value: string) => {\n const url = new URL(value)\n url.search = ''\n url.hash = ''\n url.pathname = normalizeRoutePath(url.pathname)\n return url.toString()\n}\n\nconst xmlEscape = (value: string) => {\n return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('\"', '"')\n}\n\nconst getLastMod = (filePath: string) => {\n return fs.statSync(filePath).mtime.toISOString()\n}\n\nconst collectFiles = (directoryPath: string): string[] => {\n if (!fs.existsSync(directoryPath)) {\n return []\n }\n\n return fs.readdirSync(directoryPath, { withFileTypes: true }).flatMap((entry) => {\n const entryPath = path.join(directoryPath, entry.name)\n return entry.isDirectory() ? collectFiles(entryPath) : [entryPath]\n })\n}\n\nconst resolveFilesystemRoutePathFromPageFile = (pagesRootPath: string, filePath: string) => {\n const relativeDirPath = path.relative(pagesRootPath, path.dirname(filePath)).split(path.sep).join(path.posix.sep)\n const segments = relativeDirPath ? relativeDirPath.split('/').filter(Boolean) : []\n const resolvedSegments: string[] = []\n\n for (const segment of segments) {\n if (segment === 'index') {\n continue\n }\n\n if (segment.startsWith('(') && segment.endsWith(')')) {\n continue\n }\n\n if (segment.startsWith('_') || segment.startsWith('@')) {\n return null\n }\n\n resolvedSegments.push(segment)\n }\n\n return resolvedSegments.length === 0 ? '/' : `/${resolvedSegments.join('/')}/`\n}\n\nconst collectFilesystemPageEntries = (options: { rootDir: string; siteUrl: string }) => {\n const pagesRootPath = path.join(options.rootDir, 'pages')\n const generatedPagesRootPath = path.join(pagesRootPath, GENERATED_DIRNAME)\n const entries: SitemapEntry[] = []\n\n for (const filePath of collectFiles(pagesRootPath)) {\n if (!path.basename(filePath).startsWith('+Page.')) {\n continue\n }\n\n if (filePath.startsWith(generatedPagesRootPath)) {\n continue\n }\n\n const routePath = resolveFilesystemRoutePathFromPageFile(pagesRootPath, filePath)\n\n if (!routePath) {\n continue\n }\n\n entries.push({\n lastmod: getLastMod(filePath),\n loc: normalizePublicUrl(joinPublicUrl(options.siteUrl, routePath)),\n })\n }\n\n return entries\n}\n\nconst getDocsCanonicalEntries = (options: { docsConfig: DocsConfig; rootDir: string; siteUrl: string }) => {\n const resolvedDocsConfig = resolveDocsConfig(options.docsConfig)\n const contentRootPath = path.join(options.rootDir, resolvedDocsConfig.contentDir)\n\n return resolvedDocsConfig.pages.map((page) => {\n return {\n lastmod: getLastMod(path.join(contentRootPath, page.source)),\n loc: normalizePublicUrl(joinPublicUrl(options.siteUrl, page.href)),\n } satisfies SitemapEntry\n })\n}\n\nconst getSitemapXml = (entries: SitemapEntry[]) => {\n const urlEntries = entries.map((entry) => {\n return [\n ' <url>',\n ` <loc>${xmlEscape(entry.loc)}</loc>`,\n ...(entry.lastmod ? [` <lastmod>${xmlEscape(entry.lastmod)}</lastmod>`] : []),\n ' </url>',\n ].join('\\n')\n })\n\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n ...urlEntries,\n '</urlset>',\n '',\n ].join('\\n')\n}\n\nconst getRobotsTxtContent = (options: { siteUrl: string; allowCrawlers: boolean }) => {\n if (!options.allowCrawlers) {\n return ['User-agent: *', 'Disallow: /'].join('\\n')\n }\n\n return ['User-agent: *', 'Disallow: /cdn-cgi/', `Sitemap: ${options.siteUrl}/${SITEMAP_FILENAME}`].join('\\n')\n}\n\nconst getSitemapArtifacts = (options: { rootDir: string; docsConfig: DocsConfig }) => {\n const siteUrl = options.docsConfig.siteUrl?.trim() ? normalizeSiteUrl(options.docsConfig.siteUrl) : null\n\n if (!siteUrl) {\n return null\n }\n\n const filesystemPageEntries = collectFilesystemPageEntries({\n rootDir: options.rootDir,\n siteUrl,\n })\n const docsCanonicalEntries = getDocsCanonicalEntries({\n docsConfig: options.docsConfig,\n rootDir: options.rootDir,\n siteUrl,\n })\n const filesystemPageLocs = new Set(filesystemPageEntries.map((entry) => entry.loc))\n const docsCanonicalLocs = docsCanonicalEntries.map((entry) => entry.loc)\n const collidingLoc = docsCanonicalLocs.find((loc) => filesystemPageLocs.has(loc))\n\n if (collidingLoc) {\n throw new Error(\n `Nivel sitemap collision: docs canonical URL ${JSON.stringify(collidingLoc)} conflicts with a consumer filesystem page.`,\n )\n }\n\n const sitemapEntriesByLoc = new Map<string, SitemapEntry>()\n\n for (const entry of [...filesystemPageEntries, ...docsCanonicalEntries]) {\n sitemapEntriesByLoc.set(entry.loc, entry)\n }\n\n const sitemapEntries = [...sitemapEntriesByLoc.values()].sort((left, right) => {\n return left.loc.localeCompare(right.loc)\n })\n\n return {\n robotsTxt: getRobotsTxtContent({\n siteUrl,\n allowCrawlers: options.docsConfig.robots ?? true,\n }),\n sitemapXml: getSitemapXml(sitemapEntries),\n }\n}\n\nconst writeStaticAsset = (filePath: string, contents: string) => {\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n fs.writeFileSync(filePath, contents)\n}\n\nconst createNivelSitemapPlugin = (docsConfig: DocsConfig): Plugin => {\n let resolvedBase = '/'\n let resolvedRootDir = process.cwd()\n\n const matchesRequestPath = (requestUrl: string | undefined, pathname: string) => {\n if (!requestUrl) {\n return false\n }\n\n const normalizedRequestUrl = requestUrl.split('?')[0] ?? requestUrl\n return (\n normalizedRequestUrl === pathname ||\n (resolvedBase !== '/' && normalizedRequestUrl === `${resolvedBase}${pathname.slice(1)}`)\n )\n }\n\n const getServerArtifacts = async (server: ViteDevServer) => {\n const nextDocsConfig = await loadDocsConfig({\n rootDir: server.config.root,\n loadModule: (modulePath) => server.ssrLoadModule(modulePath),\n })\n\n return getSitemapArtifacts({\n rootDir: server.config.root,\n docsConfig: nextDocsConfig,\n })\n }\n\n return {\n name: 'nivel-sitemap-plugin',\n configResolved(config) {\n resolvedBase = config.base\n resolvedRootDir = config.root\n },\n configureServer(server) {\n server.middlewares.use(async (req, res, next) => {\n const isSitemapRequest = matchesRequestPath(req.url, `/${SITEMAP_FILENAME}`)\n const isRobotsRequest = matchesRequestPath(req.url, `/${ROBOTS_FILENAME}`)\n\n if (!isSitemapRequest && !isRobotsRequest) {\n next()\n return\n }\n\n const artifacts = await getServerArtifacts(server)\n\n if (!artifacts) {\n res.statusCode = 404\n res.end()\n return\n }\n\n res.setHeader('Cache-Control', 'no-store')\n\n if (isSitemapRequest) {\n res.setHeader('Content-Type', 'application/xml')\n res.end(artifacts.sitemapXml)\n return\n }\n\n res.setHeader('Content-Type', 'text/plain')\n res.end(artifacts.robotsTxt)\n })\n },\n closeBundle() {\n if (this.environment.config.consumer !== 'client') {\n return\n }\n\n const artifacts = getSitemapArtifacts({\n rootDir: resolvedRootDir,\n docsConfig,\n })\n\n if (!artifacts) {\n return\n }\n\n const outputDirectory = path.resolve(resolvedRootDir, this.environment.config.build.outDir)\n\n writeStaticAsset(path.join(outputDirectory, SITEMAP_FILENAME), artifacts.sitemapXml)\n writeStaticAsset(path.join(outputDirectory, ROBOTS_FILENAME), artifacts.robotsTxt)\n },\n }\n}\n\nexport const createNivelSitemapPlugins = (docsConfig: DocsConfig): Plugin[] => {\n if (!docsConfig.siteUrl?.trim()) {\n return []\n }\n\n return [createNivelSitemapPlugin(docsConfig)]\n}\n"],"mappings":"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","names":["lastNode"]}
|
|
1
|
+
{"version":3,"sources":["../src/vike/index.ts","../src/mdx/plugins/rehypeDefinitionLists.ts","../src/mdx/plugins/rehypeDocsHeadings.ts","../src/vike/sitemap.ts"],"sourcesContent":["export { nivelConfig as default }\n\nimport mdx from '@mdx-js/rollup'\nimport remarkGfm from 'remark-gfm'\nimport type { Config } from 'vike/types'\nimport type { PluginOption, UserConfig } from 'vite'\nimport type { DocsConfig } from '../docs/types.js'\nimport { getCodeBlockMdxPlugins } from '../mdx/code-blocks/index.js'\nimport { rehypeDefinitionLists } from '../mdx/plugins/rehypeDefinitionLists.js'\nimport { rehypeDocsHeadings } from '../mdx/plugins/rehypeDocsHeadings.js'\nimport { nivelPagesPlugin } from '../runtime/node/index.js'\nimport { createNivelSitemapPlugins } from './sitemap.js'\n\nprocess.env.VIKE_CRAWL ??= JSON.stringify({ git: false })\n\nconst codeBlockMdxPlugins = getCodeBlockMdxPlugins()\n\nconst viteConfig: UserConfig = {\n plugins: [\n {\n ...mdx({\n providerImportSource: '@unterberg/nivel/mdx',\n ...codeBlockMdxPlugins,\n rehypePlugins: [...codeBlockMdxPlugins.rehypePlugins, rehypeDefinitionLists, rehypeDocsHeadings],\n remarkPlugins: [remarkGfm, ...codeBlockMdxPlugins.remarkPlugins],\n }),\n enforce: 'pre',\n } as PluginOption,\n nivelPagesPlugin(),\n ],\n resolve: {\n dedupe: ['react', 'react-dom', 'vike', 'vike-react'],\n },\n ssr: {\n noExternal: ['@unterberg/nivel'],\n },\n}\n\nconst getConsumerViteConfig = (docsConfig: DocsConfig) => {\n return {\n ...viteConfig,\n plugins: [...(viteConfig.plugins ?? []), ...createNivelSitemapPlugins(docsConfig)],\n } satisfies UserConfig\n}\n\nconst getDefaultConsumerDataTheme = (docsConfig: DocsConfig) => {\n const defaultPreference = docsConfig.theme?.defaultPreference ?? 'light'\n const lightThemeName = docsConfig.theme?.light ?? 'consumer-light'\n const darkThemeName = docsConfig.theme?.dark ?? 'consumer-dark'\n\n return defaultPreference === 'dark' ? darkThemeName : lightThemeName\n}\n\nconst vikeReactConfigImport = 'import:vike-react/config:default'\n\nconst nivelConfig = {\n meta: {\n docs: {\n env: {\n server: true,\n client: true,\n },\n global: true,\n },\n },\n prerender: true,\n trailingSlash: true,\n vite: viteConfig as Record<string, unknown>,\n} satisfies Config\n\nexport const createNivelVikeConfig = (docsConfig: DocsConfig) => {\n return {\n ...nivelConfig,\n title: docsConfig.siteTitle,\n description: docsConfig.siteDescription ?? `${docsConfig.siteTitle} documentation`,\n extends: [vikeReactConfigImport] as unknown as Config['extends'],\n htmlAttributes: {\n 'data-theme': getDefaultConsumerDataTheme(docsConfig),\n },\n prerender: true,\n vite: getConsumerViteConfig(docsConfig) as Record<string, unknown>,\n } as Config\n}\n","import type { ElementContentNode, ElementNode, HtmlRootNode, TextNode } from '../ast.js'\n\ntype DefinitionListItem = {\n definitions: ElementContentNode[][]\n term: ElementContentNode[]\n}\n\nconst isElementNode = (node: ElementContentNode): node is ElementNode => {\n return node.type === 'element'\n}\n\nconst isTextNode = (node: ElementContentNode): node is TextNode => {\n return node.type === 'text'\n}\n\nconst cloneElementNode = (node: ElementNode): ElementNode => {\n return {\n ...node,\n properties: { ...node.properties },\n children: node.children.map((child) => cloneContentNode(child)),\n }\n}\n\nconst cloneContentNode = (node: ElementContentNode): ElementContentNode => {\n if (isTextNode(node)) {\n return { ...node }\n }\n\n return cloneElementNode(node)\n}\n\nconst trimLine = (line: ElementContentNode[]): ElementContentNode[] => {\n const trimmed = line.map((node) => cloneContentNode(node))\n\n while (trimmed.length > 0 && isTextNode(trimmed[0]) && trimmed[0].value.trim() === '') {\n trimmed.shift()\n }\n\n while (trimmed.length > 0) {\n const lastNode = trimmed[trimmed.length - 1]\n if (!lastNode || !isTextNode(lastNode) || lastNode.value.trim() !== '') {\n break\n }\n\n trimmed.pop()\n }\n\n if (trimmed.length > 0 && isTextNode(trimmed[0])) {\n trimmed[0].value = trimmed[0].value.replace(/^\\s+/, '')\n }\n\n const lastNode = trimmed[trimmed.length - 1]\n if (lastNode && isTextNode(lastNode)) {\n lastNode.value = lastNode.value.replace(/\\s+$/, '')\n }\n\n return trimmed\n}\n\nconst stripDefinitionMarker = (line: ElementContentNode[]): ElementContentNode[] | undefined => {\n const [firstNode, ...rest] = line.map((node) => cloneContentNode(node))\n\n if (!firstNode || !isTextNode(firstNode)) {\n return undefined\n }\n\n const markerMatch = /^[ \\t]{0,3}:[ \\t]?/.exec(firstNode.value)\n if (!markerMatch) {\n return undefined\n }\n\n firstNode.value = firstNode.value.slice(markerMatch[0].length)\n return trimLine(firstNode.value === '' ? rest : [firstNode, ...rest])\n}\n\nconst splitParagraphLines = (node: ElementNode): ElementContentNode[][] | undefined => {\n const lines: ElementContentNode[][] = [[]]\n\n for (const child of node.children) {\n if (isElementNode(child)) {\n lines[lines.length - 1].push(cloneElementNode(child))\n continue\n }\n\n if (!isTextNode(child)) {\n return undefined\n }\n\n const textLines = child.value.split('\\n')\n textLines.forEach((textLine, index) => {\n if (index > 0) {\n lines.push([])\n }\n\n if (textLine !== '') {\n lines[lines.length - 1].push({ ...child, value: textLine })\n }\n })\n }\n\n return lines.length > 1 ? lines : undefined\n}\n\nconst isDefinitionLine = (line: ElementContentNode[]) => {\n return stripDefinitionMarker(line) !== undefined\n}\n\nconst parseDefinitionListParagraph = (node: ElementNode): DefinitionListItem[] | undefined => {\n if (node.tagName !== 'p') {\n return undefined\n }\n\n const lines = splitParagraphLines(node)\n if (!lines || lines.length < 2) {\n return undefined\n }\n\n const items: DefinitionListItem[] = []\n let lineIndex = 0\n\n while (lineIndex < lines.length) {\n const term = trimLine(lines[lineIndex])\n if (term.length === 0 || isDefinitionLine(lines[lineIndex])) {\n return undefined\n }\n\n lineIndex += 1\n\n const definitions: ElementContentNode[][] = []\n while (lineIndex < lines.length) {\n const definition = stripDefinitionMarker(lines[lineIndex])\n if (!definition) {\n break\n }\n\n definitions.push(definition)\n lineIndex += 1\n }\n\n if (definitions.length === 0) {\n return undefined\n }\n\n items.push({ definitions, term })\n }\n\n return items\n}\n\nconst createElement = (tagName: string, children: ElementContentNode[]): ElementNode => {\n return {\n type: 'element',\n tagName,\n properties: {},\n children,\n }\n}\n\nconst createDefinitionList = (items: DefinitionListItem[]): ElementNode => {\n return createElement(\n 'dl',\n items.flatMap((item) => {\n return [createElement('dt', item.term), ...item.definitions.map((definition) => createElement('dd', definition))]\n }),\n )\n}\n\nconst transformChildren = (parent: HtmlRootNode | ElementNode) => {\n const transformedChildren: ElementContentNode[] = []\n let childIndex = 0\n\n while (childIndex < parent.children.length) {\n const child = parent.children[childIndex]\n\n if (!isElementNode(child)) {\n transformedChildren.push(child)\n childIndex += 1\n continue\n }\n\n const definitionListItems = parseDefinitionListParagraph(child)\n if (!definitionListItems) {\n transformChildren(child)\n transformedChildren.push(child)\n childIndex += 1\n continue\n }\n\n const groupedItems = [...definitionListItems]\n childIndex += 1\n\n while (childIndex < parent.children.length) {\n const nextChild = parent.children[childIndex]\n if (!isElementNode(nextChild)) {\n break\n }\n\n const nextItems = parseDefinitionListParagraph(nextChild)\n if (!nextItems) {\n break\n }\n\n groupedItems.push(...nextItems)\n childIndex += 1\n }\n\n transformedChildren.push(createDefinitionList(groupedItems))\n }\n\n parent.children = transformedChildren\n}\n\nexport const rehypeDefinitionLists = () => {\n return (tree: HtmlRootNode) => {\n transformChildren(tree)\n }\n}\n","// attention: no HMR is active for this file, changes require a full engine pre-build -> dev / preview\nimport { visit } from 'unist-util-visit'\nimport { createHeadingSlugger, normalizeHeadingTitle } from '../../docs/docHeadings.js'\nimport type { ElementContentNode, ElementNode, HtmlRootNode } from '../ast.js'\n\nconst headingTags = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n\nconst getNodeText = (node: ElementContentNode | HtmlRootNode): string => {\n if (node.type === 'text') {\n return typeof node.value === 'string' ? node.value : ''\n }\n\n if ('children' in node) {\n return node.children.map((child) => getNodeText(child)).join('')\n }\n\n return ''\n}\n\nconst getClassNames = (value: unknown): string[] => {\n if (Array.isArray(value)) {\n return value.flatMap((entry) => getClassNames(entry))\n }\n\n if (typeof value === 'string') {\n return value.split(/\\s+/).filter(Boolean)\n }\n\n return []\n}\n\nconst createLinkIconLine = (x1: number, y1: number, x2: number, y2: number): ElementNode => {\n return {\n type: 'element',\n tagName: 'line',\n properties: { x1, y1, x2, y2 },\n children: [],\n }\n}\n\nexport const rehypeDocsHeadings = () => {\n return (tree: HtmlRootNode) => {\n const slugify = createHeadingSlugger()\n\n visit(tree, 'element', (node: ElementNode) => {\n if (!headingTags.has(node?.tagName)) {\n return\n }\n\n const title = normalizeHeadingTitle(getNodeText(node))\n if (!title) {\n return\n }\n\n node.properties ??= {}\n\n if (typeof node.properties.id !== 'string' || node.properties.id === '') {\n node.properties.id = slugify(title)\n }\n\n const classNames = getClassNames(node.properties.className)\n if (!classNames.includes('scroll-mt-32')) {\n node.properties.className = [\n ...classNames,\n 'scroll-mt-32',\n 'xl:scroll-mt-22',\n 'flex gap-2 items-center',\n 'group',\n 'relative',\n 'w-fit',\n ].join(' ')\n }\n\n // create link element with has and anchor icon\n const linkElement: ElementNode = {\n type: 'element',\n tagName: 'a',\n properties: {\n href: `#${node.properties.id}`,\n 'data-copy-heading-link': '',\n 'aria-label': `Copy link to heading: ${title}`,\n title: `Copy link to heading: ${title}`,\n className: ['docs-heading-link absolute inset-0 flex items-center justify-end text-primary-muted'],\n },\n children: [\n {\n type: 'element',\n tagName: 'svg',\n properties: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 16,\n height: 16,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n 'stroke-width': 2,\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round',\n 'aria-hidden': 'true',\n className: ['size-4 hidden group-hover:block group-focus-within:block translate-x-5'],\n },\n children: [\n createLinkIconLine(4, 9, 20, 9),\n createLinkIconLine(4, 15, 20, 15),\n createLinkIconLine(10, 3, 8, 21),\n createLinkIconLine(16, 3, 14, 21),\n ],\n },\n ],\n }\n node.children.push(linkElement)\n })\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport type { Plugin, ViteDevServer } from 'vite'\nimport { resolveDocsConfig } from '../docs/resolveDocsConfig.js'\nimport type { DocsConfig } from '../docs/types.js'\nimport { loadDocsConfig } from '../runtime/node/loadDocsConfig.js'\n\nconst GENERATED_DIRNAME = '(nivel-generated)'\nconst SITEMAP_FILENAME = 'sitemap.xml'\nconst ROBOTS_FILENAME = 'robots.txt'\n\ntype SitemapEntry = {\n lastmod?: string\n loc: string\n}\n\nconst normalizeRoutePath = (value: string) => {\n const normalized = value.trim().replace(/^\\/+|\\/+$/g, '')\n return normalized ? `/${normalized}/` : '/'\n}\n\nconst normalizeSiteUrl = (value: string) => {\n const normalized = value.trim()\n\n if (!normalized) {\n throw new Error('Docs siteUrl must be a non-empty absolute URL when sitemap support is enabled.')\n }\n\n const url = new URL(normalized)\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new Error(`Docs siteUrl must use http or https. Received ${JSON.stringify(value)}.`)\n }\n\n if (url.search || url.hash) {\n throw new Error(`Docs siteUrl cannot include query strings or hashes. Received ${JSON.stringify(value)}.`)\n }\n\n const pathname = url.pathname.replace(/\\/+$/g, '')\n url.pathname = pathname || '/'\n\n return url.toString().replace(/\\/+$/g, '')\n}\n\nconst joinPublicUrl = (siteUrl: string, routePath: string) => {\n return routePath === '/' ? `${siteUrl}/` : `${siteUrl}${routePath}`\n}\n\nconst normalizePublicUrl = (value: string) => {\n const url = new URL(value)\n url.search = ''\n url.hash = ''\n url.pathname = normalizeRoutePath(url.pathname)\n return url.toString()\n}\n\nconst xmlEscape = (value: string) => {\n return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('\"', '"')\n}\n\nconst getLastMod = (filePath: string) => {\n return fs.statSync(filePath).mtime.toISOString()\n}\n\nconst collectFiles = (directoryPath: string): string[] => {\n if (!fs.existsSync(directoryPath)) {\n return []\n }\n\n return fs.readdirSync(directoryPath, { withFileTypes: true }).flatMap((entry) => {\n const entryPath = path.join(directoryPath, entry.name)\n return entry.isDirectory() ? collectFiles(entryPath) : [entryPath]\n })\n}\n\nconst resolveFilesystemRoutePathFromPageFile = (pagesRootPath: string, filePath: string) => {\n const relativeDirPath = path.relative(pagesRootPath, path.dirname(filePath)).split(path.sep).join(path.posix.sep)\n const segments = relativeDirPath ? relativeDirPath.split('/').filter(Boolean) : []\n const resolvedSegments: string[] = []\n\n for (const segment of segments) {\n if (segment === 'index') {\n continue\n }\n\n if (segment.startsWith('(') && segment.endsWith(')')) {\n continue\n }\n\n if (segment.startsWith('_') || segment.startsWith('@')) {\n return null\n }\n\n resolvedSegments.push(segment)\n }\n\n return resolvedSegments.length === 0 ? '/' : `/${resolvedSegments.join('/')}/`\n}\n\nconst collectFilesystemPageEntries = (options: { rootDir: string; siteUrl: string }) => {\n const pagesRootPath = path.join(options.rootDir, 'pages')\n const generatedPagesRootPath = path.join(pagesRootPath, GENERATED_DIRNAME)\n const entries: SitemapEntry[] = []\n\n for (const filePath of collectFiles(pagesRootPath)) {\n if (!path.basename(filePath).startsWith('+Page.')) {\n continue\n }\n\n if (filePath.startsWith(generatedPagesRootPath)) {\n continue\n }\n\n const routePath = resolveFilesystemRoutePathFromPageFile(pagesRootPath, filePath)\n\n if (!routePath) {\n continue\n }\n\n entries.push({\n lastmod: getLastMod(filePath),\n loc: normalizePublicUrl(joinPublicUrl(options.siteUrl, routePath)),\n })\n }\n\n return entries\n}\n\nconst getDocsCanonicalEntries = (options: { docsConfig: DocsConfig; rootDir: string; siteUrl: string }) => {\n const resolvedDocsConfig = resolveDocsConfig(options.docsConfig)\n const contentRootPath = path.join(options.rootDir, resolvedDocsConfig.contentDir)\n\n return resolvedDocsConfig.pages.map((page) => {\n return {\n lastmod: getLastMod(path.join(contentRootPath, page.source)),\n loc: normalizePublicUrl(joinPublicUrl(options.siteUrl, page.href)),\n } satisfies SitemapEntry\n })\n}\n\nconst getSitemapXml = (entries: SitemapEntry[]) => {\n const urlEntries = entries.map((entry) => {\n return [\n ' <url>',\n ` <loc>${xmlEscape(entry.loc)}</loc>`,\n ...(entry.lastmod ? [` <lastmod>${xmlEscape(entry.lastmod)}</lastmod>`] : []),\n ' </url>',\n ].join('\\n')\n })\n\n return [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">',\n ...urlEntries,\n '</urlset>',\n '',\n ].join('\\n')\n}\n\nconst getRobotsTxtContent = (options: { siteUrl: string; allowCrawlers: boolean }) => {\n if (!options.allowCrawlers) {\n return ['User-agent: *', 'Disallow: /'].join('\\n')\n }\n\n return ['User-agent: *', 'Disallow: /cdn-cgi/', `Sitemap: ${options.siteUrl}/${SITEMAP_FILENAME}`].join('\\n')\n}\n\nconst getSitemapArtifacts = (options: { rootDir: string; docsConfig: DocsConfig }) => {\n const siteUrl = options.docsConfig.siteUrl?.trim() ? normalizeSiteUrl(options.docsConfig.siteUrl) : null\n\n if (!siteUrl) {\n return null\n }\n\n const filesystemPageEntries = collectFilesystemPageEntries({\n rootDir: options.rootDir,\n siteUrl,\n })\n const docsCanonicalEntries = getDocsCanonicalEntries({\n docsConfig: options.docsConfig,\n rootDir: options.rootDir,\n siteUrl,\n })\n const filesystemPageLocs = new Set(filesystemPageEntries.map((entry) => entry.loc))\n const docsCanonicalLocs = docsCanonicalEntries.map((entry) => entry.loc)\n const collidingLoc = docsCanonicalLocs.find((loc) => filesystemPageLocs.has(loc))\n\n if (collidingLoc) {\n throw new Error(\n `Nivel sitemap collision: docs canonical URL ${JSON.stringify(collidingLoc)} conflicts with a consumer filesystem page.`,\n )\n }\n\n const sitemapEntriesByLoc = new Map<string, SitemapEntry>()\n\n for (const entry of [...filesystemPageEntries, ...docsCanonicalEntries]) {\n sitemapEntriesByLoc.set(entry.loc, entry)\n }\n\n const sitemapEntries = [...sitemapEntriesByLoc.values()].sort((left, right) => {\n return left.loc.localeCompare(right.loc)\n })\n\n return {\n robotsTxt: getRobotsTxtContent({\n siteUrl,\n allowCrawlers: options.docsConfig.robots ?? true,\n }),\n sitemapXml: getSitemapXml(sitemapEntries),\n }\n}\n\nconst writeStaticAsset = (filePath: string, contents: string) => {\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n fs.writeFileSync(filePath, contents)\n}\n\nconst createNivelSitemapPlugin = (docsConfig: DocsConfig): Plugin => {\n let resolvedBase = '/'\n let resolvedRootDir = process.cwd()\n\n const matchesRequestPath = (requestUrl: string | undefined, pathname: string) => {\n if (!requestUrl) {\n return false\n }\n\n const normalizedRequestUrl = requestUrl.split('?')[0] ?? requestUrl\n return (\n normalizedRequestUrl === pathname ||\n (resolvedBase !== '/' && normalizedRequestUrl === `${resolvedBase}${pathname.slice(1)}`)\n )\n }\n\n const getServerArtifacts = async (server: ViteDevServer) => {\n const nextDocsConfig = await loadDocsConfig({\n rootDir: server.config.root,\n loadModule: (modulePath) => server.ssrLoadModule(modulePath),\n })\n\n return getSitemapArtifacts({\n rootDir: server.config.root,\n docsConfig: nextDocsConfig,\n })\n }\n\n return {\n name: 'nivel-sitemap-plugin',\n configResolved(config) {\n resolvedBase = config.base\n resolvedRootDir = config.root\n },\n configureServer(server) {\n server.middlewares.use(async (req, res, next) => {\n const isSitemapRequest = matchesRequestPath(req.url, `/${SITEMAP_FILENAME}`)\n const isRobotsRequest = matchesRequestPath(req.url, `/${ROBOTS_FILENAME}`)\n\n if (!isSitemapRequest && !isRobotsRequest) {\n next()\n return\n }\n\n const artifacts = await getServerArtifacts(server)\n\n if (!artifacts) {\n res.statusCode = 404\n res.end()\n return\n }\n\n res.setHeader('Cache-Control', 'no-store')\n\n if (isSitemapRequest) {\n res.setHeader('Content-Type', 'application/xml')\n res.end(artifacts.sitemapXml)\n return\n }\n\n res.setHeader('Content-Type', 'text/plain')\n res.end(artifacts.robotsTxt)\n })\n },\n closeBundle() {\n if (this.environment.config.consumer !== 'client') {\n return\n }\n\n const artifacts = getSitemapArtifacts({\n rootDir: resolvedRootDir,\n docsConfig,\n })\n\n if (!artifacts) {\n return\n }\n\n const outputDirectory = path.resolve(resolvedRootDir, this.environment.config.build.outDir)\n\n writeStaticAsset(path.join(outputDirectory, SITEMAP_FILENAME), artifacts.sitemapXml)\n writeStaticAsset(path.join(outputDirectory, ROBOTS_FILENAME), artifacts.robotsTxt)\n },\n }\n}\n\nexport const createNivelSitemapPlugins = (docsConfig: DocsConfig): Plugin[] => {\n if (!docsConfig.siteUrl?.trim()) {\n return []\n }\n\n return [createNivelSitemapPlugin(docsConfig)]\n}\n"],"mappings":"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","names":["lastNode"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unterberg/nivel",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.48",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Deterministic structure engine for documentation systems",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -89,22 +89,22 @@
|
|
|
89
89
|
"@mdx-js/rollup": "^3.1.1",
|
|
90
90
|
"@shikijs/transformers": "^4.0.2",
|
|
91
91
|
"@tailwindcss/typography": "^0.5.19",
|
|
92
|
-
"@tailwindcss/vite": "^4.
|
|
92
|
+
"@tailwindcss/vite": "^4.3.0",
|
|
93
93
|
"daisyui": "^5.5.19",
|
|
94
94
|
"detype": "^2.0.7",
|
|
95
95
|
"estree-util-value-to-estree": "^3.5.0",
|
|
96
|
-
"lucide-react": "^1.
|
|
96
|
+
"lucide-react": "^1.14.0",
|
|
97
97
|
"mdast-util-mdx-jsx": "^3.2.0",
|
|
98
|
-
"mermaid": "^11.
|
|
98
|
+
"mermaid": "^11.14.0",
|
|
99
99
|
"npm-to-yarn": "^3.0.1",
|
|
100
100
|
"rehype-pretty-code": "^0.14.3",
|
|
101
101
|
"remark-directive": "^4.0.0",
|
|
102
102
|
"remark-gfm": "^4.0.1",
|
|
103
103
|
"shiki": "^4.0.2",
|
|
104
|
-
"tailwindcss": "^4.
|
|
104
|
+
"tailwindcss": "^4.3.0",
|
|
105
105
|
"tsx": "^4.21.0",
|
|
106
106
|
"unist-util-visit": "^5.1.0",
|
|
107
|
-
"zustand": "^5.0.
|
|
107
|
+
"zustand": "^5.0.13"
|
|
108
108
|
},
|
|
109
109
|
"peerDependencies": {
|
|
110
110
|
"react": ">=18",
|
|
@@ -114,15 +114,15 @@
|
|
|
114
114
|
"vite": ">=6"
|
|
115
115
|
},
|
|
116
116
|
"devDependencies": {
|
|
117
|
-
"@types/node": "^24.
|
|
117
|
+
"@types/node": "^24.12.0",
|
|
118
118
|
"@types/react": "^19.2.14",
|
|
119
119
|
"@types/react-dom": "^19.2.3",
|
|
120
|
-
"react": "^19.2.
|
|
121
|
-
"react-dom": "^19.2.
|
|
120
|
+
"react": "^19.2.6",
|
|
121
|
+
"react-dom": "^19.2.6",
|
|
122
122
|
"tsup": "^8.5.1",
|
|
123
|
-
"typescript": "^6.0.
|
|
124
|
-
"vike": "^0.4.
|
|
123
|
+
"typescript": "^6.0.3",
|
|
124
|
+
"vike": "^0.4.259",
|
|
125
125
|
"vike-react": "^0.6.21",
|
|
126
|
-
"vite": "^
|
|
126
|
+
"vite": "^8.0.11"
|
|
127
127
|
}
|
|
128
128
|
}
|