@unterberg/nivel 0.1.13 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +8 -9
  2. package/dist/{SearchModal-YJZFUB53.js → SearchModal-Q2MTOIZU.js} +4 -4
  3. package/dist/SearchModal-Q2MTOIZU.js.map +1 -0
  4. package/dist/{chunk-DCHQC4WP.js → chunk-G6PC37P5.js} +46 -13
  5. package/dist/chunk-G6PC37P5.js.map +1 -0
  6. package/dist/{chunk-SH5XWPXW.js → chunk-MPERUGQD.js} +112 -59
  7. package/dist/chunk-MPERUGQD.js.map +1 -0
  8. package/dist/{chunk-QWIYQPCW.js → chunk-UMH7S7OB.js} +45 -4
  9. package/dist/chunk-UMH7S7OB.js.map +1 -0
  10. package/dist/{chunk-PKXDOKJY.js → chunk-VGBPF5O7.js} +22 -15
  11. package/dist/chunk-VGBPF5O7.js.map +1 -0
  12. package/dist/{chunk-OUDSISNU.js → chunk-WEGYZIYX.js} +6 -2
  13. package/dist/chunk-WEGYZIYX.js.map +1 -0
  14. package/dist/cli.js +2 -2
  15. package/dist/client.d.ts +2 -1
  16. package/dist/client.js +2 -2
  17. package/dist/icons.d.ts +1 -0
  18. package/dist/icons.js +3 -0
  19. package/dist/icons.js.map +1 -0
  20. package/dist/index.d.ts +2 -2
  21. package/dist/index.js +2 -8
  22. package/dist/mdx.js +2 -3
  23. package/dist/mdx.js.map +1 -1
  24. package/dist/runtime/client.d.ts +2 -1
  25. package/dist/runtime/client.js +2 -2
  26. package/dist/runtime/node.d.ts +2 -1
  27. package/dist/runtime/node.js +3 -3
  28. package/dist/{types-IiJ1jLWc.d.ts → types-Duk127zu.d.ts} +20 -2
  29. package/dist/vike.d.ts +2 -1
  30. package/dist/vike.js +5 -5
  31. package/dist/vike.js.map +1 -1
  32. package/package.json +5 -5
  33. package/dist/SearchModal-YJZFUB53.js.map +0 -1
  34. package/dist/chunk-DCHQC4WP.js.map +0 -1
  35. package/dist/chunk-JSZZPQEP.js +0 -9
  36. package/dist/chunk-JSZZPQEP.js.map +0 -1
  37. package/dist/chunk-OUDSISNU.js.map +0 -1
  38. package/dist/chunk-PKXDOKJY.js.map +0 -1
  39. package/dist/chunk-QWIYQPCW.js.map +0 -1
  40. package/dist/chunk-SH5XWPXW.js.map +0 -1
  41. package/dist/config.d.ts +0 -6
  42. package/dist/config.js +0 -9
  43. package/dist/config.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mdx/code-blocks/ChoiceGroup.tsx","../src/mdx/code-blocks/CodeBlockHeaderMeta.tsx","../src/mdx/code-blocks/CopyButton.tsx","../src/mdx/code-blocks/context.tsx","../src/mdx/code-blocks/useSelectedChoice.ts","../src/mdx/code-blocks/CodeBlockTransformer.tsx","../src/mdx/code-blocks/FileState.tsx","../src/mdx/code-blocks/Pre.tsx","../src/mdx/components/Alert.tsx","../src/mdx/components/Link.tsx","../src/mdx/components/Overview.tsx","../src/mdx/components/RepoLink.tsx","../src/mdx/components/Table.tsx"],"sourcesContent":["export { ChoiceGroup }\n\nimport { Children, isValidElement, type ReactElement, type ReactNode, useId, useRef } from 'react'\nimport { CodeBlockHeaderMeta } from './CodeBlockHeaderMeta.js'\nimport { CodeBlockCopyButton, trimTrailingWhitespace } from './CopyButton.js'\nimport { CodeBlockGroupProvider } from './context.js'\nimport { useSelectedChoice } from './useSelectedChoice.js'\n\ntype ChoiceGroupDescriptor = {\n default: string\n disabled: string[]\n name: string\n choices: string[]\n}\n\ntype ChoiceElementProps = {\n children?: ReactNode\n 'data-choice-value'?: string\n}\n\nconst isChoiceElement = (node: ReactNode): node is ReactElement<ChoiceElementProps> => {\n return isValidElement<ChoiceElementProps>(node) && typeof node.props?.['data-choice-value'] === 'string'\n}\n\nconst asTrimmedString = (value: unknown) => {\n return typeof value === 'string' && value.trim() ? value.trim() : null\n}\n\nconst getActiveCodeBlockMeta = (node: ReactNode): { env: string | null; hideCopy: boolean; title: string | null } => {\n for (const child of Children.toArray(node)) {\n if (!isValidElement(child)) {\n continue\n }\n\n const props = child.props as {\n children?: ReactNode\n 'data-code-env'?: string\n 'data-code-title'?: string\n 'hide-menu'?: string\n }\n const env = asTrimmedString(props['data-code-env'])\n const title = asTrimmedString(props['data-code-title'])\n const hideCopy = props['hide-menu'] === 'true'\n\n if (title || env || hideCopy) {\n return { env, hideCopy, title }\n }\n\n const nestedMeta = getActiveCodeBlockMeta(props.children)\n if (nestedMeta.title || nestedMeta.env || nestedMeta.hideCopy) {\n return nestedMeta\n }\n }\n\n return { env: null, hideCopy: false, title: null }\n}\n\nconst ChoiceGroup = ({\n children,\n choiceGroup,\n hide = false,\n}: {\n children: ReactNode\n choiceGroup: ChoiceGroupDescriptor\n hide?: boolean\n lvl?: number\n}) => {\n const [selectedChoice, setSelectedChoice] = useSelectedChoice(choiceGroup.name, choiceGroup.default)\n const bodyRef = useRef<HTMLDivElement>(null)\n const selectId = useId()\n const labelId = `${selectId}-label`\n // const previousPositionRef = useRestoreScroll([selectedChoice])\n const choiceElements = Children.toArray(children).filter(isChoiceElement)\n const activeChoiceElement =\n choiceElements.find((choiceElement) => choiceElement.props['data-choice-value'] === selectedChoice) ??\n choiceElements[0]\n\n if (!activeChoiceElement) {\n return <>{children}</>\n }\n\n const activeCodeBlockMeta = getActiveCodeBlockMeta(activeChoiceElement.props.children)\n const headerLabel = activeCodeBlockMeta.title ?? activeChoiceElement.props['data-choice-value'] ?? ''\n\n if (hide) {\n return <>{activeChoiceElement.props.children}</>\n }\n\n return (\n <div\n data-choice-group-outer\n className=\"my-6 flex h-full min-w-0 max-w-full flex-col overflow-hidden rounded-box border border-base-muted-light\"\n >\n <div\n className=\"not-prose flex min-h-10 items-center relative justify-between gap-3 border-b border-base-muted-light bg-base-muted-superlight px-4\"\n data-choice-group-header\n >\n <CodeBlockHeaderMeta label={headerLabel} env={activeCodeBlockMeta.env} />\n <div className=\"flex items-center gap-1\">\n <label className=\"select select-xs min-w-28 w-fit\" htmlFor={selectId}>\n <span id={labelId} className=\"sr-only\">\n Choose code example variant\n </span>\n <select\n id={selectId}\n aria-labelledby={labelId}\n name={`choicesFor-${choiceGroup.name}`}\n value={activeChoiceElement.props['data-choice-value']}\n onChange={(event) => {\n setSelectedChoice(event.currentTarget.value)\n }}\n >\n {choiceGroup.choices.map((choice) => (\n <option key={choice} value={choice} disabled={choiceGroup.disabled.includes(choice)}>\n {choice}\n </option>\n ))}\n </select>\n </label>\n {!activeCodeBlockMeta.hideCopy && (\n <CodeBlockCopyButton\n onCopy={async () => {\n const text = trimTrailingWhitespace(bodyRef.current?.textContent ?? '')\n\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n return false\n }\n }}\n />\n )}\n </div>\n </div>\n <div\n ref={bodyRef}\n className=\"h-full min-w-0 max-w-full flex-1 bg-base-200! [&>*:first-child]:mt-0 [&>*:last-child]:mb-0\"\n >\n <CodeBlockGroupProvider value={true}>{activeChoiceElement.props.children}</CodeBlockGroupProvider>\n </div>\n </div>\n )\n}\n","import cm from '@classmatejs/react'\n\nexport { CodeBlockHeaderMeta }\n\nconst CodeBlockHeaderMeta = ({ env, label }: { env?: string | null; label: string }) => {\n const effectiveEnv = env === 'server' || env === 'client' ? env : undefined\n\n return (\n <div className=\"flex min-w-0 items-center gap-2\">\n {env && <StyledDivider $env={env === 'server' || env === 'client' ? env : undefined} />}\n {env && <StyledBgShade $env={env === 'server' || env === 'client' ? env : undefined} />}\n {env && <StyledBadge $env={effectiveEnv}>{env}</StyledBadge>}\n <div className=\"font-mono text-xs font-semibold text-base-muted\">{label}</div>\n </div>\n )\n}\n\nconst StyledDivider = cm.div.variants<{ $env?: 'server' | 'client' }>({\n base: 'absolute h-1 -bottom-px left-0 w-full pointer-events-none',\n variants: {\n $env: {\n server: 'border-info/50 border-b ',\n client: 'border-success/50 border-b',\n },\n },\n defaultVariants: { $env: 'server' },\n})\n\nconst StyledBadge = cm.div.variants<{ $env?: 'server' | 'client' }>({\n base: 'shrink-0 badge badge-sm rounded-field badge-soft border pointer-events-none',\n variants: {\n $env: {\n server: 'badge-info border-info',\n client: 'badge-success border-success',\n },\n },\n defaultVariants: { $env: 'server' },\n})\n\nconst StyledBgShade = cm.div.variants<{ $env?: 'server' | 'client' }>({\n base: 'absolute inset-0 opacity-5 bg-linear-to-t via-40% via-transparent pointer-events-none',\n variants: {\n $env: {\n server: 'from-info',\n client: 'from-success',\n },\n },\n defaultVariants: { $env: 'server' },\n})\n","export { CodeBlockCopyButton, trimTrailingWhitespace }\n\nimport { cmMerge } from '@classmatejs/react'\nimport { Check, Copy } from 'lucide-react'\nimport { useState } from 'react'\n\nconst trimTrailingWhitespace = (text: string) => {\n return text\n .split('\\n')\n .map((line) => line.trimEnd())\n .join('\\n')\n}\n\nconst CodeBlockCopyButton = ({\n onCopy,\n className = '',\n}: {\n onCopy: () => Promise<boolean> | boolean\n className?: string\n}) => {\n const [copyState, setCopyState] = useState<'idle' | 'success' | 'error'>('idle')\n\n return (\n <button\n type=\"button\"\n className={cmMerge('btn btn-ghost btn-xs h-8 min-h-8 px-2 text-base-muted hover:text-base-content', className)}\n onClick={async () => {\n const success = await onCopy()\n setCopyState(success ? 'success' : 'error')\n window.setTimeout(() => setCopyState('idle'), 900)\n }}\n aria-label={copyState === 'idle' ? 'Copy to clipboard' : copyState === 'success' ? 'Copied' : 'Copy failed'}\n >\n {copyState === 'success' ? <Check size={14} /> : <Copy size={14} />}\n </button>\n )\n}\n","import { createContext, useContext } from 'react'\n\nconst CodeBlockGroupContext = createContext(false)\n\nexport const CodeBlockGroupProvider = CodeBlockGroupContext.Provider\n\nexport const useIsInCodeBlockGroup = () => useContext(CodeBlockGroupContext)\n","import { useEffect, useState, useSyncExternalStore } from 'react'\nimport { useUniversalMdxRuntime } from '../components/UniversalMdxProvider.js'\n\nconst subscribeNoop = () => () => {}\nconst getServerSnapshot = () => null\n\nexport const useSelectedChoice = (choiceGroupName: string, defaultValue: string) => {\n const runtime = useUniversalMdxRuntime()\n const choiceStore = runtime?.codeBlockChoices\n const storedChoice = useSyncExternalStore(\n choiceStore?.subscribe ?? subscribeNoop,\n () => choiceStore?.getChoice(choiceGroupName) ?? null,\n getServerSnapshot,\n )\n const [localChoice, setLocalChoice] = useState(defaultValue)\n\n useEffect(() => {\n if (!choiceStore || storedChoice) {\n return\n }\n\n const legacyChoice = choiceStore.getLegacyChoice?.(choiceGroupName)\n if (legacyChoice) {\n choiceStore.setChoice(choiceGroupName, legacyChoice)\n }\n }, [choiceGroupName, choiceStore, storedChoice])\n\n if (choiceStore) {\n return [storedChoice ?? defaultValue, (value: string) => choiceStore.setChoice(choiceGroupName, value)] as const\n }\n\n return [localChoice, setLocalChoice] as const\n}\n","export { CodeBlockTransformer }\nexport type { LineBreak }\n\nimport type { ReactNode } from 'react'\n\ntype LineBreak = 'white-space' | 'break-word'\n\nconst CodeBlockTransformer = ({ children, lineBreak }: { children: ReactNode; lineBreak: LineBreak }) => {\n const className = `with-line-break_${lineBreak}` as const\n return <div className={className}>{children}</div>\n}\n","export { FileAdded, FileRemoved }\n\nimport type { ReactNode } from 'react'\n\nconst FileAdded = ({ children }: { children: ReactNode }) => {\n return <div className=\"doc-code-file-state doc-code-file-added\">{children}</div>\n}\n\nconst FileRemoved = ({ children }: { children: ReactNode }) => {\n return <div className=\"doc-code-file-state doc-code-file-removed\">{children}</div>\n}\n","export { Pre }\n\nimport { cmMerge } from '@classmatejs/react'\nimport {\n Children,\n type ComponentPropsWithoutRef,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useRef,\n} from 'react'\nimport { CodeBlockHeaderMeta } from './CodeBlockHeaderMeta.js'\nimport { CodeBlockCopyButton, trimTrailingWhitespace } from './CopyButton.js'\nimport { useIsInCodeBlockGroup } from './context.js'\n\ntype PreProps = ComponentPropsWithoutRef<'pre'> & {\n 'data-code-env'?: string\n 'data-code-title'?: string\n 'data-language'?: string\n 'data-language-label'?: string\n 'file-added'?: string\n 'file-removed'?: string\n 'hide-menu'?: string\n}\n\nconst asTrimmedString = (value: unknown) => {\n return typeof value === 'string' && value.trim() ? value.trim() : null\n}\n\nconst getLanguageFromChildren = (children: ReactNode) => {\n const firstChild = Children.toArray(children)[0]\n if (!isValidElement(firstChild)) {\n return null\n }\n\n const props = (firstChild as ReactElement<{ className?: string; 'data-language'?: string }>).props\n const explicitLanguage = asTrimmedString(props['data-language'])\n if (explicitLanguage) {\n return explicitLanguage\n }\n\n const classNames = typeof props.className === 'string' ? props.className.split(/\\s+/) : []\n const languageClassName = classNames.find((className) => className.startsWith('language-'))\n return languageClassName ? languageClassName.slice('language-'.length) : null\n}\n\nconst getLanguageLabel = (props: PreProps) => {\n const explicitLabel = asTrimmedString(props['data-language-label'])\n if (explicitLabel) {\n return explicitLabel\n }\n\n const explicitLanguage = asTrimmedString(props['data-language']) ?? getLanguageFromChildren(props.children)\n return explicitLanguage ? explicitLanguage.toUpperCase() : 'CODE'\n}\n\nconst Pre = ({ children, className, ...props }: PreProps) => {\n const preRef = useRef<HTMLPreElement>(null)\n const isInChoiceGroup = useIsInCodeBlockGroup()\n const label = asTrimmedString(props['data-code-title']) ?? getLanguageLabel(props)\n const env = asTrimmedString(props['data-code-env'])\n const fileState = props['file-added'] ? 'added' : props['file-removed'] ? 'removed' : null\n const hideMenu = props['hide-menu'] === 'true'\n\n const copyButton =\n hideMenu || isInChoiceGroup ? null : (\n <CodeBlockCopyButton\n onCopy={async () => {\n const text = trimTrailingWhitespace(preRef.current?.textContent ?? '')\n\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch {\n return false\n }\n }}\n />\n )\n\n return (\n <div\n className={cmMerge(\n 'group relative h-full min-w-0 max-w-full not-prose overflow-hidden',\n isInChoiceGroup ? '' : 'rounded-box border border-base-muted-light',\n className,\n )}\n data-code-block-frame=\"\"\n data-file-state={fileState ?? undefined}\n >\n {!isInChoiceGroup && (\n <div\n className=\"flex min-h-10 relative items-center justify-between gap-3 border-b border-base-muted-light bg-base-muted-superlight! px-4\"\n data-code-block-header=\"\"\n >\n <CodeBlockHeaderMeta label={label} env={env} />\n {copyButton}\n </div>\n )}\n <pre\n {...props}\n ref={preRef}\n className={cmMerge(\n 'doc-code-pre m-0 h-full min-w-0 max-w-full overflow-x-auto bg-base-200! p-4 text-sm',\n className,\n )}\n data-code-block-content=\"\"\n >\n {children}\n </pre>\n </div>\n )\n}\n","import cm, { cmMerge } from '@classmatejs/react'\nimport { Check, CircleX, Info, TriangleAlert } from 'lucide-react'\nimport type { ReactNode } from 'react'\n\nexport type AlertVariant = 'info' | 'warning' | 'error' | 'success'\n\nconst alertIconMap = {\n info: Info,\n warning: TriangleAlert,\n error: CircleX,\n success: Check,\n}\n\nexport const Alert = ({\n type = 'info',\n heading,\n children,\n icon = true,\n}: {\n type?: AlertVariant\n heading?: ReactNode\n children: ReactNode\n icon?: boolean | ReactNode\n}) => {\n const AlertIcon = icon === true ? alertIconMap[type] : typeof icon === 'object' ? () => <>{icon}</> : null\n\n const alertIconTextColorClass = {\n info: 'text-info',\n warning: 'text-warning',\n error: 'text-error',\n success: 'text-success',\n }[type]\n\n return (\n <AlertOuter $variant={type}>\n {!!heading && AlertIcon && (\n <div className=\"mb-3 flex items-center gap-2\">\n <AlertIcon className={cmMerge(alertIconTextColorClass, 'float-left h-5 w-5')} />\n <AlertHeading>{heading}</AlertHeading>\n </div>\n )}\n {!(!!heading && AlertIcon) && !!heading && <AlertHeading>{heading}</AlertHeading>}\n {!(!!heading && AlertIcon) && AlertIcon && (\n <div className={cmMerge(alertIconTextColorClass, 'float-left mr-2')}>\n <AlertIcon className=\"mt-1 h-5 w-5\" />\n </div>\n )}\n {children}\n </AlertOuter>\n )\n}\n\nconst AlertOuter = cm.section.variants<{ $variant: AlertVariant }>({\n base: `\n p-4\n my-6\n border\n rounded-lg\n prose-p:last:mb-0\n prose-p:mt-0\n prose-headings:first:mt-0\n prose-headings:last:mb-0\n prose-ul:first:mt-0\n prose-ul:last:mb-0\n text-sm\n `,\n variants: {\n $variant: {\n info: 'bg-info/10 border-info/30',\n warning: 'bg-warning/10 border-warning/30',\n error: 'bg-error/10 border-error/25',\n success: 'bg-success/10 border-success/35',\n },\n },\n defaultVariants: {\n $variant: 'info',\n },\n})\n\nconst AlertHeading = cm.header`\n font-bold\n text-base\n`\n","import { cmMerge } from '@classmatejs/react'\nimport type { ComponentPropsWithoutRef, ReactNode } from 'react'\nimport { isExternalHref } from '../../docs/resolveDocsConfig.js'\nimport { withSiteBaseUrl } from '../../shared/assets.js'\nimport { useUniversalMdxRuntime } from './UniversalMdxProvider.js'\n\nexport type LinkProps = ComponentPropsWithoutRef<'a'> & {\n href?: string\n text?: string | ReactNode\n noBreadcrumb?: boolean\n doNotInferSectionTitle?: boolean\n noWarning?: boolean\n}\n\nfunction assertUsage(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(`[UniversalMdxMods][Wrong Usage] ${message}`)\n }\n}\n\nconst assertWarning = (condition: unknown, message: string) => {\n const isDev = (import.meta as ImportMeta & { env?: { DEV?: boolean } }).env?.DEV === true\n\n if (condition || !isDev) {\n return\n }\n\n console.warn(`[UniversalMdxMods][Warning] ${message}`)\n}\n\nconst parseMarkdownMini = (markdown: string) => {\n type Part = { content: string; nodeType: 'code' | 'text' }\n const parts: Part[] = []\n let current: Part | undefined\n\n for (const letter of markdown.split('')) {\n if (letter === '`') {\n if (current?.nodeType === 'code') {\n parts.push(current)\n current = undefined\n } else {\n if (current) {\n parts.push(current)\n }\n current = { nodeType: 'code', content: '' }\n }\n continue\n }\n\n current ??= { nodeType: 'text', content: '' }\n current.content += letter\n }\n\n if (current) {\n parts.push(current)\n }\n\n return (\n <>\n {parts.map((part, index) =>\n part.nodeType === 'code' ? <code key={index}>{part.content}</code> : <span key={index}>{part.content}</span>,\n )}\n </>\n )\n}\n\nconst determineSectionTitle = (href: string) => {\n const hash = href.split('#')[1]\n\n if (!hash) {\n return null\n }\n\n return hash\n .split(':~:text')[0]\n ?.split('-')\n .map((word, index) => (index === 0 ? `${word[0]?.toUpperCase() ?? ''}${word.slice(1)}` : word))\n .join(' ')\n}\n\nconst isDocsRelativeHref = (href: string) => {\n return (\n !href.startsWith('/') &&\n !href.startsWith('#') &&\n !isExternalHref(href) &&\n !href.startsWith('./') &&\n !href.startsWith('../')\n )\n}\n\nconst renderLabelPart = (value: ReactNode) => {\n return typeof value === 'string' ? parseMarkdownMini(value) : value\n}\n\nconst getLinkText = ({\n isCurrentPage,\n breadcrumb,\n noBreadcrumb,\n sectionTitle,\n title,\n}: {\n isCurrentPage?: boolean\n breadcrumb?: ReactNode[]\n noBreadcrumb?: boolean\n sectionTitle?: ReactNode\n title?: ReactNode\n}) => {\n const breadcrumbParts: ReactNode[] = []\n\n if (breadcrumb) {\n breadcrumbParts.push(...breadcrumb.map((item) => renderLabelPart(item)))\n }\n\n if (title) {\n breadcrumbParts.push(renderLabelPart(title))\n }\n\n if (sectionTitle) {\n breadcrumbParts.push(renderLabelPart(sectionTitle))\n }\n\n if (noBreadcrumb || isCurrentPage) {\n return breadcrumbParts[breadcrumbParts.length - 1] ?? null\n }\n\n return (\n <>\n {breadcrumbParts.map((part, index) => (\n <span key={index}>\n {index > 0 ? ' > ' : null}\n {part}\n </span>\n ))}\n </>\n )\n}\n\nexport const Link = ({\n href,\n text,\n noBreadcrumb,\n doNotInferSectionTitle,\n noWarning,\n children,\n className,\n ...props\n}: LinkProps) => {\n const runtime = useUniversalMdxRuntime()\n\n if (typeof href !== 'string' || href === '') {\n assertWarning(false, '<Link /> is missing `href`.')\n\n return (\n <a className={cmMerge(className, 'inline-flex gap-1 items-center')} {...props}>\n {text ?? children ?? 'LINK-TARGET-NOT-FOUND'}\n </a>\n )\n }\n\n assertUsage(\n href.startsWith('/') || href.startsWith('#') || isExternalHref(href) || isDocsRelativeHref(href),\n `<Link href /> prop \\`href==='${href}'\\` but should be external, docs-relative, or start with '/' or '#'`,\n )\n assertUsage(!text || !children, 'Cannot use both `text` or `children`')\n\n const content = text ?? children\n const resolvedDocLink = runtime?.resolveDocLink?.({\n href,\n doNotInferSectionTitle,\n noWarning,\n })\n const localizedHref = resolvedDocLink?.href ?? runtime?.localizeHref?.(href) ?? withSiteBaseUrl(href)\n const inferredSectionTitle =\n resolvedDocLink?.sectionTitle ?? (!doNotInferSectionTitle ? determineSectionTitle(href) : null)\n const inferredText =\n content ??\n (resolvedDocLink\n ? getLinkText({\n breadcrumb: resolvedDocLink.breadcrumb,\n isCurrentPage: resolvedDocLink.isCurrentPage,\n noBreadcrumb,\n sectionTitle: inferredSectionTitle ?? undefined,\n title: resolvedDocLink.title,\n })\n : isExternalHref(href)\n ? href\n : (inferredSectionTitle ?? 'LINK-TARGET-NOT-FOUND'))\n\n return (\n <a href={localizedHref} className={cmMerge(className, '')} {...props}>\n {inferredText}\n </a>\n )\n}\n","import cm from '@classmatejs/react'\nimport type { ReactNode } from 'react'\nimport { withSiteBaseUrl } from '../../shared/assets.js'\nimport { renderInlineMarkdown } from '../../shared/renderInlineMarkdown.js'\nimport type { UniversalResolvedOverviewItem } from './types.js'\nimport { useUniversalMdxRuntime } from './UniversalMdxProvider.js'\n\ntype OverviewLinkItem = {\n title: ReactNode\n href: string\n excerpt?: ReactNode | null\n compact?: boolean\n}\n\ntype OverviewDividerItem = {\n dividerText: ReactNode\n}\n\nexport type OverviewItem = OverviewLinkItem | OverviewDividerItem\n\ninterface OverviewProps {\n items: Array<string | OverviewItem>\n compact?: boolean\n}\n\nconst isOverviewDividerItem = (item: string | OverviewItem): item is OverviewDividerItem =>\n typeof item === 'object' && item !== null && 'dividerText' in item\n\nfunction assertUsage(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(`[UniversalMdxMods][Wrong Usage] ${message}`)\n }\n}\n\nconst groupOverviewItems = (items: OverviewItem[]) => {\n const groups: { dividerText?: ReactNode; items: OverviewLinkItem[] }[] = []\n let currentGroup: { dividerText?: ReactNode; items: OverviewLinkItem[] } = {\n items: [],\n }\n\n const commitCurrentGroup = () => {\n if (currentGroup.items.length > 0) {\n groups.push(currentGroup)\n }\n }\n\n for (const item of items) {\n if (isOverviewDividerItem(item)) {\n commitCurrentGroup()\n currentGroup = {\n dividerText: item.dividerText,\n items: [],\n }\n continue\n }\n\n currentGroup.items.push(item)\n }\n\n commitCurrentGroup()\n\n return groups\n}\n\nconst OverviewCard = ({ excerpt, href, title, compact }: OverviewLinkItem) => {\n return (\n <StyleOverviewCard href={withSiteBaseUrl(href)} $compact={compact}>\n <span className=\"text-lg font-semibold text-base-content\">{renderInlineMarkdown(title)}</span>\n {excerpt && !compact ? (\n <p className=\"text-sm leading-relaxed text-base-muted\">{renderInlineMarkdown(excerpt)}</p>\n ) : null}\n </StyleOverviewCard>\n )\n}\n\nconst StyleOverviewCard = cm.a.variants<{ $compact?: boolean }>({\n base: `\n flex h-full flex-col gap-3 \n rounded-box border \n border-base-muted-light hover:border-primary-muted\n hover:bg-primary-muted-superlight \n no-underline transition-colors \n shadow shadow-transparent hover:shadow-primary-muted-light\n `,\n variants: {\n $compact: {\n true: 'p-3',\n false: 'p-5',\n },\n },\n defaultVariants: {\n $compact: false,\n },\n})\n\nconst normalizeOverviewItems = (\n items: Array<string | OverviewItem>,\n resolveOverviewItem?: (key: string) => UniversalResolvedOverviewItem | null,\n): OverviewItem[] => {\n return items.map((item) => {\n if (typeof item !== 'string') {\n return item\n }\n\n const resolvedItem = resolveOverviewItem?.(item)\n\n assertUsage(\n resolvedItem,\n `Overview item \"${item}\" requires runtime.resolveOverviewItem(). Pass { title, href, excerpt } manually when no resolver is available.`,\n )\n\n return resolvedItem\n })\n}\n\nexport const Overview = ({ items, compact }: OverviewProps) => {\n const runtime = useUniversalMdxRuntime()\n const groups = groupOverviewItems(normalizeOverviewItems(items, runtime?.resolveOverviewItem))\n\n if (groups.length === 0) {\n return null\n }\n\n return (\n <div className=\"prose-headings:my-0 prose-p:my-0 my-5 flex flex-col gap-8\">\n {groups.map((group, groupIndex) => (\n <section className=\"flex flex-col gap-4\" key={groupIndex}>\n {group.dividerText ? (\n <p className=\"text-sm font-semibold uppercase tracking-wide\">{renderInlineMarkdown(group.dividerText)}</p>\n ) : null}\n <div className=\"grid gap-3 sm:grid-cols-2\">\n {group.items.map((item, itemIndex) => (\n <OverviewCard {...item} key={item.href || itemIndex} excerpt={!!item.excerpt} compact={compact} />\n ))}\n </div>\n </section>\n ))}\n </div>\n )\n}\n","type Repo = `${string}/${string}`\ntype TimestampType = `${number}.${number}`\n\nexport const RepoLink = ({ repo, timestamp }: { repo: Repo; timestamp: TimestampType }) => {\n if (!repo || repo.split('/').length !== 2) {\n throw new Error('Invalid repo')\n }\n\n return (\n <span className=\"inline-flex items-center gap-1\">\n <span className=\"bg-white font-mono font-bold h-fit px-1 text-sm!\">{timestamp}</span>\n <a href={`https://github.com/${repo}`} target=\"_blank\" rel=\"noopener\">\n GitHub &gt; <code>{repo}</code>\n </a>\n </span>\n )\n}\n","import cm from '@classmatejs/react'\n\nexport interface TableData {\n headers: string[]\n rows: string[][]\n}\n\nexport interface TableProps {\n size?: 'sm' | 'md' | 'lg'\n data: TableData\n}\n/** @deprecated - do not use pls */\nexport const Table = ({ size = 'md', data }: TableProps) => {\n return (\n <StyledTable $size={size}>\n <thead className=\"overflow-hidden rounded-t-box bg-base-200\">\n <tr>\n {data.headers.map((header, index) => (\n <th key={index}>{header}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {data.rows.map((row, rowIndex) => (\n <tr key={rowIndex}>\n {row.map((cell, cellIndex) => (\n <td key={cellIndex}>{cell}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </StyledTable>\n )\n}\n\nconst StyledTable = cm.table.variants<{ $size: TableProps['size'] }>({\n base: `\n not-prose\n table\n w-full\n table-zebra\n mb-6\n `,\n variants: {\n $size: {\n sm: 'table-sm',\n md: 'table-md',\n lg: 'table-lg',\n },\n },\n defaultVariants: {\n $size: 'md',\n },\n})\n"],"mappings":";;;;;;;;;;;;AAEA,SAAS,UAAU,gBAAmD,OAAO,cAAc;;;ACF3F,OAAO,QAAQ;AAQX,SACU,KADV;AAJJ,IAAM,sBAAsB,CAAC,EAAE,KAAK,MAAM,MAA8C;AACtF,QAAM,eAAe,QAAQ,YAAY,QAAQ,WAAW,MAAM;AAElE,SACE,qBAAC,SAAI,WAAU,mCACZ;AAAA,WAAO,oBAAC,iBAAc,MAAM,QAAQ,YAAY,QAAQ,WAAW,MAAM,QAAW;AAAA,IACpF,OAAO,oBAAC,iBAAc,MAAM,QAAQ,YAAY,QAAQ,WAAW,MAAM,QAAW;AAAA,IACpF,OAAO,oBAAC,eAAY,MAAM,cAAe,eAAI;AAAA,IAC9C,oBAAC,SAAI,WAAU,mDAAmD,iBAAM;AAAA,KAC1E;AAEJ;AAEA,IAAM,gBAAgB,GAAG,IAAI,SAAyC;AAAA,EACpE,MAAM;AAAA,EACN,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,iBAAiB,EAAE,MAAM,SAAS;AACpC,CAAC;AAED,IAAM,cAAc,GAAG,IAAI,SAAyC;AAAA,EAClE,MAAM;AAAA,EACN,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,iBAAiB,EAAE,MAAM,SAAS;AACpC,CAAC;AAED,IAAM,gBAAgB,GAAG,IAAI,SAAyC;AAAA,EACpE,MAAM;AAAA,EACN,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,iBAAiB,EAAE,MAAM,SAAS;AACpC,CAAC;;;AC9CD,SAAS,eAAe;AACxB,SAAS,OAAO,YAAY;AAC5B,SAAS,gBAAgB;AA6BQ,gBAAAA,YAAA;AA3BjC,IAAM,yBAAyB,CAAC,SAAiB;AAC/C,SAAO,KACJ,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,EAC5B,KAAK,IAAI;AACd;AAEA,IAAM,sBAAsB,CAAC;AAAA,EAC3B;AAAA,EACA,YAAY;AACd,MAGM;AACJ,QAAM,CAAC,WAAW,YAAY,IAAI,SAAuC,MAAM;AAE/E,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAW,QAAQ,iFAAiF,SAAS;AAAA,MAC7G,SAAS,YAAY;AACnB,cAAM,UAAU,MAAM,OAAO;AAC7B,qBAAa,UAAU,YAAY,OAAO;AAC1C,eAAO,WAAW,MAAM,aAAa,MAAM,GAAG,GAAG;AAAA,MACnD;AAAA,MACA,cAAY,cAAc,SAAS,sBAAsB,cAAc,YAAY,WAAW;AAAA,MAE7F,wBAAc,YAAY,gBAAAA,KAAC,SAAM,MAAM,IAAI,IAAK,gBAAAA,KAAC,QAAK,MAAM,IAAI;AAAA;AAAA,EACnE;AAEJ;;;ACpCA,SAAS,eAAe,kBAAkB;AAE1C,IAAM,wBAAwB,cAAc,KAAK;AAE1C,IAAM,yBAAyB,sBAAsB;AAErD,IAAM,wBAAwB,MAAM,WAAW,qBAAqB;;;ACN3E,SAAS,WAAW,YAAAC,WAAU,4BAA4B;AAG1D,IAAM,gBAAgB,MAAM,MAAM;AAAC;AACnC,IAAM,oBAAoB,MAAM;AAEzB,IAAM,oBAAoB,CAAC,iBAAyB,iBAAyB;AAClF,QAAM,UAAU,uBAAuB;AACvC,QAAM,cAAc,SAAS;AAC7B,QAAM,eAAe;AAAA,IACnB,aAAa,aAAa;AAAA,IAC1B,MAAM,aAAa,UAAU,eAAe,KAAK;AAAA,IACjD;AAAA,EACF;AACA,QAAM,CAAC,aAAa,cAAc,IAAIC,UAAS,YAAY;AAE3D,YAAU,MAAM;AACd,QAAI,CAAC,eAAe,cAAc;AAChC;AAAA,IACF;AAEA,UAAM,eAAe,YAAY,kBAAkB,eAAe;AAClE,QAAI,cAAc;AAChB,kBAAY,UAAU,iBAAiB,YAAY;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,iBAAiB,aAAa,YAAY,CAAC;AAE/C,MAAI,aAAa;AACf,WAAO,CAAC,gBAAgB,cAAc,CAAC,UAAkB,YAAY,UAAU,iBAAiB,KAAK,CAAC;AAAA,EACxG;AAEA,SAAO,CAAC,aAAa,cAAc;AACrC;;;AJ8CW,0BAAAC,MAqBD,QAAAC,aArBC;AA1DX,IAAM,kBAAkB,CAAC,SAA8D;AACrF,SAAO,eAAmC,IAAI,KAAK,OAAO,KAAK,QAAQ,mBAAmB,MAAM;AAClG;AAEA,IAAM,kBAAkB,CAAC,UAAmB;AAC1C,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;AACpE;AAEA,IAAM,yBAAyB,CAAC,SAAqF;AACnH,aAAW,SAAS,SAAS,QAAQ,IAAI,GAAG;AAC1C,QAAI,CAAC,eAAe,KAAK,GAAG;AAC1B;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM;AAMpB,UAAM,MAAM,gBAAgB,MAAM,eAAe,CAAC;AAClD,UAAM,QAAQ,gBAAgB,MAAM,iBAAiB,CAAC;AACtD,UAAM,WAAW,MAAM,WAAW,MAAM;AAExC,QAAI,SAAS,OAAO,UAAU;AAC5B,aAAO,EAAE,KAAK,UAAU,MAAM;AAAA,IAChC;AAEA,UAAM,aAAa,uBAAuB,MAAM,QAAQ;AACxD,QAAI,WAAW,SAAS,WAAW,OAAO,WAAW,UAAU;AAC7D,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO,EAAE,KAAK,MAAM,UAAU,OAAO,OAAO,KAAK;AACnD;AAEA,IAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA,OAAO;AACT,MAKM;AACJ,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,kBAAkB,YAAY,MAAM,YAAY,OAAO;AACnG,QAAM,UAAU,OAAuB,IAAI;AAC3C,QAAM,WAAW,MAAM;AACvB,QAAM,UAAU,GAAG,QAAQ;AAE3B,QAAM,iBAAiB,SAAS,QAAQ,QAAQ,EAAE,OAAO,eAAe;AACxE,QAAM,sBACJ,eAAe,KAAK,CAAC,kBAAkB,cAAc,MAAM,mBAAmB,MAAM,cAAc,KAClG,eAAe,CAAC;AAElB,MAAI,CAAC,qBAAqB;AACxB,WAAO,gBAAAC,KAAA,YAAG,UAAS;AAAA,EACrB;AAEA,QAAM,sBAAsB,uBAAuB,oBAAoB,MAAM,QAAQ;AACrF,QAAM,cAAc,oBAAoB,SAAS,oBAAoB,MAAM,mBAAmB,KAAK;AAEnG,MAAI,MAAM;AACR,WAAO,gBAAAA,KAAA,YAAG,8BAAoB,MAAM,UAAS;AAAA,EAC/C;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,2BAAuB;AAAA,MACvB,WAAU;AAAA,MAEV;AAAA,wBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,4BAAwB;AAAA,YAExB;AAAA,8BAAAD,KAAC,uBAAoB,OAAO,aAAa,KAAK,oBAAoB,KAAK;AAAA,cACvE,gBAAAC,MAAC,SAAI,WAAU,2BACb;AAAA,gCAAAA,MAAC,WAAM,WAAU,mCAAkC,SAAS,UAC1D;AAAA,kCAAAD,KAAC,UAAK,IAAI,SAAS,WAAU,WAAU,yCAEvC;AAAA,kBACA,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,IAAI;AAAA,sBACJ,mBAAiB;AAAA,sBACjB,MAAM,cAAc,YAAY,IAAI;AAAA,sBACpC,OAAO,oBAAoB,MAAM,mBAAmB;AAAA,sBACpD,UAAU,CAAC,UAAU;AACnB,0CAAkB,MAAM,cAAc,KAAK;AAAA,sBAC7C;AAAA,sBAEC,sBAAY,QAAQ,IAAI,CAAC,WACxB,gBAAAA,KAAC,YAAoB,OAAO,QAAQ,UAAU,YAAY,SAAS,SAAS,MAAM,GAC/E,oBADU,MAEb,CACD;AAAA;AAAA,kBACH;AAAA,mBACF;AAAA,gBACC,CAAC,oBAAoB,YACpB,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,QAAQ,YAAY;AAClB,4BAAM,OAAO,uBAAuB,QAAQ,SAAS,eAAe,EAAE;AAEtE,0BAAI;AACF,8BAAM,UAAU,UAAU,UAAU,IAAI;AACxC,+BAAO;AAAA,sBACT,QAAQ;AACN,+BAAO;AAAA,sBACT;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA,iBAEJ;AAAA;AAAA;AAAA,QACF;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAU;AAAA,YAEV,0BAAAA,KAAC,0BAAuB,OAAO,MAAO,8BAAoB,MAAM,UAAS;AAAA;AAAA,QAC3E;AAAA;AAAA;AAAA,EACF;AAEJ;;;AKtIS,gBAAAE,YAAA;AAFT,IAAM,uBAAuB,CAAC,EAAE,UAAU,UAAU,MAAqD;AACvG,QAAM,YAAY,mBAAmB,SAAS;AAC9C,SAAO,gBAAAC,KAAC,SAAI,WAAuB,UAAS;AAC9C;;;ACLS,gBAAAC,YAAA;AADT,IAAM,YAAY,CAAC,EAAE,SAAS,MAA+B;AAC3D,SAAO,gBAAAC,KAAC,SAAI,WAAU,2CAA2C,UAAS;AAC5E;AAEA,IAAM,cAAc,CAAC,EAAE,SAAS,MAA+B;AAC7D,SAAO,gBAAAA,KAAC,SAAI,WAAU,6CAA6C,UAAS;AAC9E;;;ACRA,SAAS,WAAAC,gBAAe;AACxB;AAAA,EACE,YAAAC;AAAA,EAEA,kBAAAC;AAAA,EAGA,UAAAC;AAAA,OACK;AAwDD,gBAAAC,MAyBE,QAAAC,aAzBF;AAzCN,IAAMC,mBAAkB,CAAC,UAAmB;AAC1C,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;AACpE;AAEA,IAAM,0BAA0B,CAAC,aAAwB;AACvD,QAAM,aAAaC,UAAS,QAAQ,QAAQ,EAAE,CAAC;AAC/C,MAAI,CAACC,gBAAe,UAAU,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,QAAS,WAA8E;AAC7F,QAAM,mBAAmBF,iBAAgB,MAAM,eAAe,CAAC;AAC/D,MAAI,kBAAkB;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,OAAO,MAAM,cAAc,WAAW,MAAM,UAAU,MAAM,KAAK,IAAI,CAAC;AACzF,QAAM,oBAAoB,WAAW,KAAK,CAAC,cAAc,UAAU,WAAW,WAAW,CAAC;AAC1F,SAAO,oBAAoB,kBAAkB,MAAM,YAAY,MAAM,IAAI;AAC3E;AAEA,IAAM,mBAAmB,CAAC,UAAoB;AAC5C,QAAM,gBAAgBA,iBAAgB,MAAM,qBAAqB,CAAC;AAClE,MAAI,eAAe;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,mBAAmBA,iBAAgB,MAAM,eAAe,CAAC,KAAK,wBAAwB,MAAM,QAAQ;AAC1G,SAAO,mBAAmB,iBAAiB,YAAY,IAAI;AAC7D;AAEA,IAAM,MAAM,CAAC,EAAE,UAAU,WAAW,GAAG,MAAM,MAAgB;AAC3D,QAAM,SAASG,QAAuB,IAAI;AAC1C,QAAM,kBAAkB,sBAAsB;AAC9C,QAAM,QAAQH,iBAAgB,MAAM,iBAAiB,CAAC,KAAK,iBAAiB,KAAK;AACjF,QAAM,MAAMA,iBAAgB,MAAM,eAAe,CAAC;AAClD,QAAM,YAAY,MAAM,YAAY,IAAI,UAAU,MAAM,cAAc,IAAI,YAAY;AACtF,QAAM,WAAW,MAAM,WAAW,MAAM;AAExC,QAAM,aACJ,YAAY,kBAAkB,OAC5B,gBAAAI;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ,YAAY;AAClB,cAAM,OAAO,uBAAuB,OAAO,SAAS,eAAe,EAAE;AAErE,YAAI;AACF,gBAAM,UAAU,UAAU,UAAU,IAAI;AACxC,iBAAO;AAAA,QACT,QAAQ;AACN,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA,EACF;AAGJ,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACA,kBAAkB,KAAK;AAAA,QACvB;AAAA,MACF;AAAA,MACA,yBAAsB;AAAA,MACtB,mBAAiB,aAAa;AAAA,MAE7B;AAAA,SAAC,mBACA,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,0BAAuB;AAAA,YAEvB;AAAA,8BAAAD,KAAC,uBAAoB,OAAc,KAAU;AAAA,cAC5C;AAAA;AAAA;AAAA,QACH;AAAA,QAEF,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ,KAAK;AAAA,YACL,WAAWE;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YACA,2BAAwB;AAAA,YAEvB;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ;;;AChHA,OAAOC,OAAM,WAAAC,gBAAe;AAC5B,SAAS,SAAAC,QAAO,SAAS,MAAM,qBAAqB;AAuBsC,qBAAAC,WAAA,OAAAC,MAYlF,QAAAC,aAZkF;AAlB1F,IAAM,eAAe;AAAA,EACnB,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAASH;AACX;AAEO,IAAM,QAAQ,CAAC;AAAA,EACpB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,OAAO;AACT,MAKM;AACJ,QAAM,YAAY,SAAS,OAAO,aAAa,IAAI,IAAI,OAAO,SAAS,WAAW,MAAM,gBAAAE,KAAAD,WAAA,EAAG,gBAAK,IAAM;AAEtG,QAAM,0BAA0B;AAAA,IAC9B,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS;AAAA,EACX,EAAE,IAAI;AAEN,SACE,gBAAAE,MAAC,cAAW,UAAU,MACnB;AAAA,KAAC,CAAC,WAAW,aACZ,gBAAAA,MAAC,SAAI,WAAU,gCACb;AAAA,sBAAAD,KAAC,aAAU,WAAWH,SAAQ,yBAAyB,oBAAoB,GAAG;AAAA,MAC9E,gBAAAG,KAAC,gBAAc,mBAAQ;AAAA,OACzB;AAAA,IAED,EAAE,CAAC,CAAC,WAAW,cAAc,CAAC,CAAC,WAAW,gBAAAA,KAAC,gBAAc,mBAAQ;AAAA,IACjE,EAAE,CAAC,CAAC,WAAW,cAAc,aAC5B,gBAAAA,KAAC,SAAI,WAAWH,SAAQ,yBAAyB,iBAAiB,GAChE,0BAAAG,KAAC,aAAU,WAAU,gBAAe,GACtC;AAAA,IAED;AAAA,KACH;AAEJ;AAEA,IAAM,aAAaJ,IAAG,QAAQ,SAAqC;AAAA,EACjE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaN,UAAU;AAAA,IACR,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,EACZ;AACF,CAAC;AAED,IAAM,eAAeA,IAAG;AAAA;AAAA;AAAA;;;AC/ExB,SAAS,WAAAM,gBAAe;AA0DpB,qBAAAC,WAE+B,OAAAC,MAoE3B,QAAAC,aAtEJ;AA5CJ,SAAS,YAAY,WAAoB,SAAoC;AAC3E,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,mCAAmC,OAAO,EAAE;AAAA,EAC9D;AACF;AAEA,IAAM,gBAAgB,CAAC,WAAoB,YAAoB;AAC7D,QAAM,QAAS,YAAyD,KAAK,QAAQ;AAErF,MAAI,aAAa,CAAC,OAAO;AACvB;AAAA,EACF;AAEA,UAAQ,KAAK,+BAA+B,OAAO,EAAE;AACvD;AAEA,IAAM,oBAAoB,CAAC,aAAqB;AAE9C,QAAM,QAAgB,CAAC;AACvB,MAAI;AAEJ,aAAW,UAAU,SAAS,MAAM,EAAE,GAAG;AACvC,QAAI,WAAW,KAAK;AAClB,UAAI,SAAS,aAAa,QAAQ;AAChC,cAAM,KAAK,OAAO;AAClB,kBAAU;AAAA,MACZ,OAAO;AACL,YAAI,SAAS;AACX,gBAAM,KAAK,OAAO;AAAA,QACpB;AACA,kBAAU,EAAE,UAAU,QAAQ,SAAS,GAAG;AAAA,MAC5C;AACA;AAAA,IACF;AAEA,gBAAY,EAAE,UAAU,QAAQ,SAAS,GAAG;AAC5C,YAAQ,WAAW;AAAA,EACrB;AAEA,MAAI,SAAS;AACX,UAAM,KAAK,OAAO;AAAA,EACpB;AAEA,SACE,gBAAAD,KAAAD,WAAA,EACG,gBAAM;AAAA,IAAI,CAAC,MAAM,UAChB,KAAK,aAAa,SAAS,gBAAAC,KAAC,UAAkB,eAAK,WAAb,KAAqB,IAAU,gBAAAA,KAAC,UAAkB,eAAK,WAAb,KAAqB;AAAA,EACvG,GACF;AAEJ;AAEA,IAAM,wBAAwB,CAAC,SAAiB;AAC9C,QAAM,OAAO,KAAK,MAAM,GAAG,EAAE,CAAC;AAE9B,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,SAAO,KACJ,MAAM,SAAS,EAAE,CAAC,GACjB,MAAM,GAAG,EACV,IAAI,CAAC,MAAM,UAAW,UAAU,IAAI,GAAG,KAAK,CAAC,GAAG,YAAY,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,KAAK,IAAK,EAC7F,KAAK,GAAG;AACb;AAEA,IAAM,qBAAqB,CAAC,SAAiB;AAC3C,SACE,CAAC,KAAK,WAAW,GAAG,KACpB,CAAC,KAAK,WAAW,GAAG,KACpB,CAAC,eAAe,IAAI,KACpB,CAAC,KAAK,WAAW,IAAI,KACrB,CAAC,KAAK,WAAW,KAAK;AAE1B;AAEA,IAAM,kBAAkB,CAAC,UAAqB;AAC5C,SAAO,OAAO,UAAU,WAAW,kBAAkB,KAAK,IAAI;AAChE;AAEA,IAAM,cAAc,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AACJ,QAAM,kBAA+B,CAAC;AAEtC,MAAI,YAAY;AACd,oBAAgB,KAAK,GAAG,WAAW,IAAI,CAAC,SAAS,gBAAgB,IAAI,CAAC,CAAC;AAAA,EACzE;AAEA,MAAI,OAAO;AACT,oBAAgB,KAAK,gBAAgB,KAAK,CAAC;AAAA,EAC7C;AAEA,MAAI,cAAc;AAChB,oBAAgB,KAAK,gBAAgB,YAAY,CAAC;AAAA,EACpD;AAEA,MAAI,gBAAgB,eAAe;AACjC,WAAO,gBAAgB,gBAAgB,SAAS,CAAC,KAAK;AAAA,EACxD;AAEA,SACE,gBAAAA,KAAAD,WAAA,EACG,0BAAgB,IAAI,CAAC,MAAM,UAC1B,gBAAAE,MAAC,UACE;AAAA,YAAQ,IAAI,QAAQ;AAAA,IACpB;AAAA,OAFQ,KAGX,CACD,GACH;AAEJ;AAEO,IAAM,OAAO,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAiB;AACf,QAAM,UAAU,uBAAuB;AAEvC,MAAI,OAAO,SAAS,YAAY,SAAS,IAAI;AAC3C,kBAAc,OAAO,6BAA6B;AAElD,WACE,gBAAAD,KAAC,OAAE,WAAWE,SAAQ,WAAW,gCAAgC,GAAI,GAAG,OACrE,kBAAQ,YAAY,yBACvB;AAAA,EAEJ;AAEA;AAAA,IACE,KAAK,WAAW,GAAG,KAAK,KAAK,WAAW,GAAG,KAAK,eAAe,IAAI,KAAK,mBAAmB,IAAI;AAAA,IAC/F,gCAAgC,IAAI;AAAA,EACtC;AACA,cAAY,CAAC,QAAQ,CAAC,UAAU,sCAAsC;AAEtE,QAAM,UAAU,QAAQ;AACxB,QAAM,kBAAkB,SAAS,iBAAiB;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,gBAAgB,iBAAiB,QAAQ,SAAS,eAAe,IAAI,KAAK,gBAAgB,IAAI;AACpG,QAAM,uBACJ,iBAAiB,iBAAiB,CAAC,yBAAyB,sBAAsB,IAAI,IAAI;AAC5F,QAAM,eACJ,YACC,kBACG,YAAY;AAAA,IACV,YAAY,gBAAgB;AAAA,IAC5B,eAAe,gBAAgB;AAAA,IAC/B;AAAA,IACA,cAAc,wBAAwB;AAAA,IACtC,OAAO,gBAAgB;AAAA,EACzB,CAAC,IACD,eAAe,IAAI,IACjB,OACC,wBAAwB;AAEjC,SACE,gBAAAF,KAAC,OAAE,MAAM,eAAe,WAAWE,SAAQ,WAAW,EAAE,GAAI,GAAG,OAC5D,wBACH;AAEJ;;;ACjMA,OAAOC,SAAQ;AAkEX,SACE,OAAAC,MADF,QAAAC,aAAA;AAkEU;AA3Gd,IAAM,wBAAwB,CAAC,SAC7B,OAAO,SAAS,YAAY,SAAS,QAAQ,iBAAiB;AAEhE,SAASC,aAAY,WAAoB,SAAoC;AAC3E,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,MAAM,mCAAmC,OAAO,EAAE;AAAA,EAC9D;AACF;AAEA,IAAM,qBAAqB,CAAC,UAA0B;AACpD,QAAM,SAAmE,CAAC;AAC1E,MAAI,eAAuE;AAAA,IACzE,OAAO,CAAC;AAAA,EACV;AAEA,QAAM,qBAAqB,MAAM;AAC/B,QAAI,aAAa,MAAM,SAAS,GAAG;AACjC,aAAO,KAAK,YAAY;AAAA,IAC1B;AAAA,EACF;AAEA,aAAW,QAAQ,OAAO;AACxB,QAAI,sBAAsB,IAAI,GAAG;AAC/B,yBAAmB;AACnB,qBAAe;AAAA,QACb,aAAa,KAAK;AAAA,QAClB,OAAO,CAAC;AAAA,MACV;AACA;AAAA,IACF;AAEA,iBAAa,MAAM,KAAK,IAAI;AAAA,EAC9B;AAEA,qBAAmB;AAEnB,SAAO;AACT;AAEA,IAAM,eAAe,CAAC,EAAE,SAAS,MAAM,OAAO,QAAQ,MAAwB;AAC5E,SACE,gBAAAD,MAAC,qBAAkB,MAAM,gBAAgB,IAAI,GAAG,UAAU,SACxD;AAAA,oBAAAD,KAAC,UAAK,WAAU,2CAA2C,+BAAqB,KAAK,GAAE;AAAA,IACtF,WAAW,CAAC,UACX,gBAAAA,KAAC,OAAE,WAAU,2CAA2C,+BAAqB,OAAO,GAAE,IACpF;AAAA,KACN;AAEJ;AAEA,IAAM,oBAAoBG,IAAG,EAAE,SAAiC;AAAA,EAC9D,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQN,UAAU;AAAA,IACR,UAAU;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,UAAU;AAAA,EACZ;AACF,CAAC;AAED,IAAM,yBAAyB,CAC7B,OACA,wBACmB;AACnB,SAAO,MAAM,IAAI,CAAC,SAAS;AACzB,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,IACT;AAEA,UAAM,eAAe,sBAAsB,IAAI;AAE/C,IAAAD;AAAA,MACE;AAAA,MACA,kBAAkB,IAAI;AAAA,IACxB;AAEA,WAAO;AAAA,EACT,CAAC;AACH;AAEO,IAAM,WAAW,CAAC,EAAE,OAAO,QAAQ,MAAqB;AAC7D,QAAM,UAAU,uBAAuB;AACvC,QAAM,SAAS,mBAAmB,uBAAuB,OAAO,SAAS,mBAAmB,CAAC;AAE7F,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,SACE,gBAAAF,KAAC,SAAI,WAAU,6DACZ,iBAAO,IAAI,CAAC,OAAO,eAClB,gBAAAC,MAAC,aAAQ,WAAU,uBAChB;AAAA,UAAM,cACL,gBAAAD,KAAC,OAAE,WAAU,iDAAiD,+BAAqB,MAAM,WAAW,GAAE,IACpG;AAAA,IACJ,gBAAAA,KAAC,SAAI,WAAU,6BACZ,gBAAM,MAAM,IAAI,CAAC,MAAM,cACtB,8BAAC,gBAAc,GAAG,MAAM,KAAK,KAAK,QAAQ,WAAW,SAAS,CAAC,CAAC,KAAK,SAAS,SAAkB,CACjG,GACH;AAAA,OAR4C,UAS9C,CACD,GACH;AAEJ;;;ACjIM,gBAAAI,OACA,QAAAC,aADA;AAPC,IAAM,WAAW,CAAC,EAAE,MAAM,UAAU,MAAgD;AACzF,MAAI,CAAC,QAAQ,KAAK,MAAM,GAAG,EAAE,WAAW,GAAG;AACzC,UAAM,IAAI,MAAM,cAAc;AAAA,EAChC;AAEA,SACE,gBAAAA,MAAC,UAAK,WAAU,kCACd;AAAA,oBAAAD,MAAC,UAAK,WAAU,oDAAoD,qBAAU;AAAA,IAC9E,gBAAAC,MAAC,OAAE,MAAM,sBAAsB,IAAI,IAAI,QAAO,UAAS,KAAI,YAAW;AAAA;AAAA,MACxD,gBAAAD,MAAC,UAAM,gBAAK;AAAA,OAC1B;AAAA,KACF;AAEJ;;;AChBA,OAAOE,SAAQ;AAcX,SAIQ,OAAAC,OAJR,QAAAC,aAAA;AAFG,IAAM,QAAQ,CAAC,EAAE,OAAO,MAAM,KAAK,MAAkB;AAC1D,SACE,gBAAAA,MAAC,eAAY,OAAO,MAClB;AAAA,oBAAAD,MAAC,WAAM,WAAU,6CACf,0BAAAA,MAAC,QACE,eAAK,QAAQ,IAAI,CAAC,QAAQ,UACzB,gBAAAA,MAAC,QAAgB,oBAAR,KAAe,CACzB,GACH,GACF;AAAA,IACA,gBAAAA,MAAC,WACE,eAAK,KAAK,IAAI,CAAC,KAAK,aACnB,gBAAAA,MAAC,QACE,cAAI,IAAI,CAAC,MAAM,cACd,gBAAAA,MAAC,QAAoB,kBAAZ,SAAiB,CAC3B,KAHM,QAIT,CACD,GACH;AAAA,KACF;AAEJ;AAEA,IAAM,cAAcD,IAAG,MAAM,SAAwC;AAAA,EACnE,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAON,UAAU;AAAA,IACR,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,OAAO;AAAA,EACT;AACF,CAAC;","names":["jsx","jsx","useState","useState","jsx","jsxs","jsx","jsxs","jsx","jsx","jsx","jsx","cmMerge","Children","isValidElement","useRef","jsx","jsxs","asTrimmedString","Children","isValidElement","useRef","jsx","jsxs","cmMerge","cm","cmMerge","Check","Fragment","jsx","jsxs","cmMerge","Fragment","jsx","jsxs","cmMerge","cm","jsx","jsxs","assertUsage","cm","jsx","jsxs","cm","jsx","jsxs"]}
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  getDocsSourcePaths,
3
3
  isDocsSourcePath,
4
+ isGeneratedDocsPath,
4
5
  loadDocsConfig,
5
6
  syncGeneratedDocsPages
6
- } from "./chunk-DCHQC4WP.js";
7
+ } from "./chunk-G6PC37P5.js";
7
8
  import {
8
9
  nivelPublicRoute
9
10
  } from "./chunk-PYYPYIBD.js";
@@ -222,6 +223,9 @@ var nivelPagesPlugin = () => {
222
223
  }
223
224
  const rootDir = ctx.server.config.root;
224
225
  const resolvedDocsSourcePaths = docsSourcePaths ?? getDefaultDocsSourcePaths(rootDir);
226
+ if (isGeneratedDocsPath(ctx.file, resolvedDocsSourcePaths)) {
227
+ return [];
228
+ }
225
229
  if (!isDocsSourcePath(ctx.file, resolvedDocsSourcePaths)) {
226
230
  return;
227
231
  }
@@ -237,4 +241,4 @@ var nivelPagesPlugin = () => {
237
241
  export {
238
242
  nivelPagesPlugin
239
243
  };
240
- //# sourceMappingURL=chunk-OUDSISNU.js.map
244
+ //# sourceMappingURL=chunk-WEGYZIYX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/node/plugin.ts","../src/runtime/node/publicAssets.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport type { Plugin, ViteDevServer } from 'vite'\nimport {\n getDocsSourcePaths,\n isDocsSourcePath,\n isGeneratedDocsPath,\n syncGeneratedDocsPages,\n type DocsSourcePaths,\n} from './codegen.js'\nimport {\n getNivelPublicAssetContentType,\n getNivelPublicAssetFilePath,\n getNivelPublicAssets,\n getNivelPublicAssetsRoot,\n isNivelAssetPath,\n isNivelAssetRequestUrl,\n} from './publicAssets.js'\nimport { loadDocsConfig } from './loadDocsConfig.js'\n\nconst syncGeneratedPages = async (\n server: ViteDevServer,\n rootDir: string,\n onDocsSourcesResolved: (docsSourcePaths: DocsSourcePaths) => void,\n) => {\n const docsConfig = await loadDocsConfig({\n rootDir,\n loadModule: (modulePath) => server.ssrLoadModule(modulePath),\n })\n onDocsSourcesResolved(getDocsSourcePaths({ rootDir, docsConfig }))\n syncGeneratedDocsPages({ rootDir, docsConfig })\n}\n\nconst getDefaultDocsSourcePaths = (rootDir: string): DocsSourcePaths => {\n return {\n contentRootPath: path.join(rootDir, 'docs'),\n docsConfigPath: path.join(rootDir, 'pages', '+docs.ts'),\n docsGraphPath: path.join(rootDir, 'docs', 'docs.graph.ts'),\n generatedRootPath: path.join(rootDir, 'pages', '(nivel-generated)'),\n }\n}\n\nexport const nivelPagesPlugin = (): Plugin => {\n let shouldEmitBuildAssets = false\n let docsSourcePaths: DocsSourcePaths | null = null\n\n return {\n name: 'nivel-pages-plugin',\n enforce: 'pre',\n configResolved(config) {\n shouldEmitBuildAssets = config.command === 'build' && !config.build.ssr\n },\n buildStart() {\n if (!shouldEmitBuildAssets) {\n return\n }\n\n for (const asset of getNivelPublicAssets()) {\n this.emitFile({\n fileName: asset.fileName,\n source: fs.readFileSync(asset.filePath),\n type: 'asset',\n })\n }\n },\n configureServer(server) {\n const rootDir = server.config.root\n const assetsRoot = getNivelPublicAssetsRoot()\n let pendingSync = Promise.resolve()\n docsSourcePaths = getDefaultDocsSourcePaths(rootDir)\n\n server.watcher.add(assetsRoot)\n server.watcher.add([\n docsSourcePaths.docsConfigPath,\n docsSourcePaths.docsGraphPath,\n docsSourcePaths.contentRootPath,\n ])\n\n const updateDocsSourcePaths = (nextDocsSourcePaths: DocsSourcePaths) => {\n if (!docsSourcePaths) {\n docsSourcePaths = nextDocsSourcePaths\n server.watcher.add(nextDocsSourcePaths.contentRootPath)\n return\n }\n\n if (nextDocsSourcePaths.contentRootPath !== docsSourcePaths.contentRootPath) {\n server.watcher.unwatch(docsSourcePaths.contentRootPath)\n server.watcher.add(nextDocsSourcePaths.contentRootPath)\n }\n\n docsSourcePaths = nextDocsSourcePaths\n }\n\n void loadDocsConfig({\n rootDir,\n loadModule: (modulePath) => server.ssrLoadModule(modulePath),\n })\n .then((docsConfig) => {\n updateDocsSourcePaths(getDocsSourcePaths({ rootDir, docsConfig }))\n })\n .catch((error: unknown) => {\n console.error(error)\n })\n\n const queueSync = (filePath: string) => {\n if (!docsSourcePaths || !isDocsSourcePath(filePath, docsSourcePaths)) {\n return\n }\n\n pendingSync = pendingSync\n .then(async () => {\n await syncGeneratedPages(server, rootDir, updateDocsSourcePaths)\n server.ws.send({ type: 'full-reload' })\n })\n .catch((error: unknown) => {\n console.error(error)\n })\n }\n\n server.watcher.on('add', queueSync)\n server.watcher.on('unlink', queueSync)\n\n server.watcher.on('change', (filePath) => {\n if (!isNivelAssetPath(filePath)) {\n return\n }\n\n server.ws.send({ type: 'full-reload' })\n })\n\n server.middlewares.use((req, res, next) => {\n const filePath = getNivelPublicAssetFilePath(req.url)\n\n if (filePath) {\n res.setHeader('Content-Type', getNivelPublicAssetContentType(filePath))\n res.setHeader('Cache-Control', 'no-store')\n res.end(fs.readFileSync(filePath))\n return\n }\n\n if (isNivelAssetRequestUrl(req.url)) {\n res.statusCode = 404\n res.setHeader('Cache-Control', 'no-store')\n res.end()\n return\n }\n\n next()\n })\n },\n async handleHotUpdate(ctx) {\n if (isNivelAssetPath(ctx.file)) {\n ctx.server.ws.send({ type: 'full-reload' })\n return []\n }\n\n const rootDir = ctx.server.config.root\n const resolvedDocsSourcePaths = docsSourcePaths ?? getDefaultDocsSourcePaths(rootDir)\n\n if (isGeneratedDocsPath(ctx.file, resolvedDocsSourcePaths)) {\n return []\n }\n\n if (!isDocsSourcePath(ctx.file, resolvedDocsSourcePaths)) {\n return\n }\n\n await syncGeneratedPages(ctx.server, rootDir, (nextDocsSourcePaths) => {\n docsSourcePaths = nextDocsSourcePaths\n })\n ctx.server.ws.send({ type: 'full-reload' })\n return []\n },\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath, pathToFileURL } from 'node:url'\nimport { nivelPublicRoute } from '../../shared/assets.js'\n\nconst toPosix = (value: string) => value.split(path.sep).join(path.posix.sep)\n\nconst collectPublicAssetFilePaths = (directoryPath: string): string[] => {\n return fs.readdirSync(directoryPath, { withFileTypes: true }).flatMap((entry) => {\n const entryPath = path.join(directoryPath, entry.name)\n return entry.isDirectory() ? collectPublicAssetFilePaths(entryPath) : [entryPath]\n })\n}\n\nconst getRequestPathname = (requestUrl: string | undefined) => {\n return requestUrl?.split('?')[0]?.split('#')[0] ?? ''\n}\n\nconst normalizeNivelAssetPathname = (pathname: string) => {\n if (pathname === nivelPublicRoute) {\n return pathname\n }\n\n if (!pathname.startsWith(`${nivelPublicRoute}/`)) {\n return null\n }\n\n const trimmedPathname = pathname.replace(/\\/+$/g, '')\n if (trimmedPathname !== pathname && path.extname(trimmedPathname)) {\n return trimmedPathname\n }\n\n return pathname\n}\n\nconst getPublicAssetsRootCandidates = (runtimeDir: string) => {\n let packageRoot: string | null = null\n\n try {\n const nivelConfigUrl = import.meta.resolve('@unterberg/nivel/vike')\n const nivelConfigPath = fileURLToPath(nivelConfigUrl)\n packageRoot = path.resolve(path.dirname(nivelConfigPath), '..')\n } catch {\n packageRoot = null\n }\n\n return [\n ...(packageRoot ? [path.join(packageRoot, 'assets')] : []),\n path.resolve(runtimeDir, '../assets'),\n path.resolve(runtimeDir, '../../assets'),\n ]\n}\n\nexport const getNivelPublicAssetsRoot = () => {\n const runtimeUrl = import.meta.url.startsWith('/') ? pathToFileURL(import.meta.url).href : import.meta.url\n const runtimeDir = path.dirname(fileURLToPath(runtimeUrl))\n\n for (const candidate of getPublicAssetsRootCandidates(runtimeDir)) {\n if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {\n return candidate\n }\n }\n\n throw new Error(`Unable to locate nivel public assets from ${runtimeDir}.`)\n}\n\nexport const getNivelPublicAssets = () => {\n const assetsRoot = getNivelPublicAssetsRoot()\n\n return collectPublicAssetFilePaths(assetsRoot).map((filePath) => ({\n fileName: toPosix(path.relative(assetsRoot, filePath)),\n filePath,\n }))\n}\n\nexport const getNivelPublicAssetFilePath = (requestUrl: string | undefined) => {\n const pathname = normalizeNivelAssetPathname(getRequestPathname(requestUrl))\n\n if (!pathname) {\n return null\n }\n\n const assetsRoot = getNivelPublicAssetsRoot()\n const relativePath = pathname.replace(/^\\/+/, '')\n const filePath = path.resolve(assetsRoot, relativePath)\n const relativeToRoot = path.relative(assetsRoot, filePath)\n\n if (\n relativeToRoot.startsWith('..') ||\n path.isAbsolute(relativeToRoot) ||\n !fs.existsSync(filePath) ||\n !fs.statSync(filePath).isFile()\n ) {\n return null\n }\n\n return filePath\n}\n\nexport const getNivelPublicAssetContentType = (filePath: string) => {\n switch (path.extname(filePath)) {\n case '.css':\n return 'text/css; charset=utf-8'\n case '.svg':\n return 'image/svg+xml'\n case '.png':\n return 'image/png'\n case '.ico':\n return 'image/x-icon'\n case '.woff2':\n return 'font/woff2'\n default:\n return 'application/octet-stream'\n }\n}\n\nexport const isNivelAssetRequestUrl = (requestUrl: string | undefined) => {\n return normalizeNivelAssetPathname(getRequestPathname(requestUrl)) !== null\n}\n\nexport const isNivelAssetPath = (filePath: string) => {\n const normalizedFilePath = toPosix(path.resolve(filePath))\n const assetsRoot = toPosix(getNivelPublicAssetsRoot())\n return normalizedFilePath.startsWith(`${assetsRoot}/`)\n}\n"],"mappings":"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","names":["fs","path","path","fs"]}
package/dist/cli.js CHANGED
@@ -4,9 +4,9 @@ import {
4
4
  initConsumer,
5
5
  loadDocsConfig,
6
6
  syncGeneratedDocsPages
7
- } from "./chunk-DCHQC4WP.js";
7
+ } from "./chunk-G6PC37P5.js";
8
8
  import "./chunk-SOVTSE5J.js";
9
- import "./chunk-QWIYQPCW.js";
9
+ import "./chunk-UMH7S7OB.js";
10
10
  import "./chunk-PYYPYIBD.js";
11
11
 
12
12
  // src/cli.ts
package/dist/client.d.ts CHANGED
@@ -2,9 +2,10 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as react from 'react';
3
3
  import { ReactNode, ComponentType } from 'react';
4
4
  import * as _classmatejs_react from '@classmatejs/react';
5
- import { g as DocsConfig, T as ThemePreference, r as DocsThemeConfig } from './types-IiJ1jLWc.js';
5
+ import { D as DocsConfig, T as ThemePreference, b as DocsThemeConfig } from './types-Duk127zu.js';
6
6
  import * as zustand_middleware from 'zustand/middleware';
7
7
  import * as zustand from 'zustand';
8
+ import 'lucide-react';
8
9
 
9
10
  interface AppLayoutProps {
10
11
  children: ReactNode;
package/dist/client.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  UserSettingsSync,
9
9
  applyThemePreference,
10
10
  useDocsUserSettingsStore
11
- } from "./chunk-SH5XWPXW.js";
11
+ } from "./chunk-MPERUGQD.js";
12
12
  import {
13
13
  LayoutComponent,
14
14
  useDocsSearchActions,
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-ESAHWFDZ.js";
19
19
  import "./chunk-SOVTSE5J.js";
20
20
  import "./chunk-L6ZVB6XH.js";
21
- import "./chunk-QWIYQPCW.js";
21
+ import "./chunk-UMH7S7OB.js";
22
22
  import "./chunk-PYYPYIBD.js";
23
23
  export {
24
24
  AppLayout,
@@ -0,0 +1 @@
1
+ export * from 'lucide-react';
package/dist/icons.js ADDED
@@ -0,0 +1,3 @@
1
+ // src/icons.ts
2
+ export * from "lucide-react";
3
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/icons.ts"],"sourcesContent":["export * from 'lucide-react'\n"],"mappings":";AAAA,cAAc;","names":[]}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { defineDocsConfig, defineDocsGraph } from './config.js';
2
- export { D as DocHeading, a as DocPageData, b as DocPageLinkData, c as DocsAlgoliaConfig, d as DocsAlgoliaFieldsConfig, e as DocsBrandConfig, f as DocsCollapsible, g as DocsConfig, h as DocsFooterConfig, i as DocsGlobalContextData, j as DocsGraph, k as DocsGroupNode, l as DocsHeadConfig, m as DocsPageNode, n as DocsPartnerConfig, o as DocsPartnersConfig, p as DocsSectionNode, q as DocsSidebarNode, r as DocsThemeConfig, J as JsonPrimitive, s as JsonValue, R as ResolvedDocsAlgoliaConfig, t as ResolvedDocsAlgoliaFieldsConfig, u as ResolvedDocsBrandConfig, v as ResolvedDocsConfig, w as ResolvedDocsPartnerConfig, x as ResolvedDocsPartnersConfig, y as ResolvedDocsSection, T as ThemePreference } from './types-IiJ1jLWc.js';
1
+ export { c as DocHeading, d as DocPageData, e as DocPageLinkData, f as DocsAlgoliaConfig, g as DocsAlgoliaFieldsConfig, h as DocsBrandConfig, i as DocsCollapsible, D as DocsConfig, j as DocsFooterConfig, k as DocsGlobalContextData, l as DocsGlobalContextSerializableData, m as DocsGraph, n as DocsGroupNode, o as DocsHeadConfig, p as DocsIconMap, q as DocsIconName, r as DocsPageNode, s as DocsPartnerConfig, t as DocsPartnersConfig, u as DocsSectionNode, v as DocsSidebarNode, b as DocsThemeConfig, J as JsonPrimitive, w as JsonValue, x as ResolvedDocsAlgoliaConfig, y as ResolvedDocsAlgoliaFieldsConfig, z as ResolvedDocsBrandConfig, a as ResolvedDocsConfig, A as ResolvedDocsPartnerConfig, B as ResolvedDocsPartnersConfig, C as ResolvedDocsSection, T as ThemePreference } from './types-Duk127zu.js';
3
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
3
  import { ReactNode, ComponentPropsWithoutRef, PropsWithChildren } from 'react';
4
+ import 'lucide-react';
5
5
 
6
6
  type ChoiceGroupDescriptor = {
7
7
  default: string;
package/dist/index.js CHANGED
@@ -9,17 +9,13 @@ import {
9
9
  Pre,
10
10
  RepoLink,
11
11
  Table
12
- } from "./chunk-PKXDOKJY.js";
12
+ } from "./chunk-VGBPF5O7.js";
13
13
  import {
14
14
  UniversalMdxProvider,
15
15
  renderInlineMarkdown,
16
16
  useUniversalMdxRuntime
17
17
  } from "./chunk-L6ZVB6XH.js";
18
- import {
19
- defineDocsConfig,
20
- defineDocsGraph
21
- } from "./chunk-JSZZPQEP.js";
22
- import "./chunk-QWIYQPCW.js";
18
+ import "./chunk-UMH7S7OB.js";
23
19
  import {
24
20
  baseAssets,
25
21
  nivelAssetUrl,
@@ -38,8 +34,6 @@ export {
38
34
  Table,
39
35
  UniversalMdxProvider,
40
36
  baseAssets,
41
- defineDocsConfig,
42
- defineDocsGraph,
43
37
  nivelAssetUrl,
44
38
  nivelPublicRoute,
45
39
  renderInlineMarkdown,
package/dist/mdx.js CHANGED
@@ -9,10 +9,9 @@ import {
9
9
  Pre,
10
10
  RepoLink,
11
11
  Table
12
- } from "./chunk-PKXDOKJY.js";
12
+ } from "./chunk-VGBPF5O7.js";
13
13
  import "./chunk-L6ZVB6XH.js";
14
- import "./chunk-JSZZPQEP.js";
15
- import "./chunk-QWIYQPCW.js";
14
+ import "./chunk-UMH7S7OB.js";
16
15
  import "./chunk-PYYPYIBD.js";
17
16
 
18
17
  // src/mdx/index.ts
package/dist/mdx.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mdx/index.ts"],"sourcesContent":["import {\n Alert,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n Link,\n Overview,\n Pre,\n RepoLink,\n Table,\n} from '../index.js'\n\ntype MdxComponents = Record<string, unknown>\n\nexport const useMDXComponents = (components?: MdxComponents): MdxComponents => {\n return {\n Alert,\n Link,\n RepoLink,\n Table,\n Overview,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n pre: Pre,\n ...components,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAeO,IAAM,mBAAmB,CAAC,eAA8C;AAC7E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,GAAG;AAAA,EACL;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/mdx/index.ts"],"sourcesContent":["import {\n Alert,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n Link,\n Overview,\n Pre,\n RepoLink,\n Table,\n} from '../index.js'\n\ntype MdxComponents = Record<string, unknown>\n\nexport const useMDXComponents = (components?: MdxComponents): MdxComponents => {\n return {\n Alert,\n Link,\n RepoLink,\n Table,\n Overview,\n ChoiceGroup,\n CodeBlockTransformer,\n FileAdded,\n FileRemoved,\n pre: Pre,\n ...components,\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAeO,IAAM,mBAAmB,CAAC,eAA8C;AAC7E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK;AAAA,IACL,GAAG;AAAA,EACL;AACF;","names":[]}
@@ -2,6 +2,7 @@ export { AppLayout, DEFAULT_THEME_PREFERENCE, DocsPage, DocsRouteLayout, DocsSea
2
2
  import 'react/jsx-runtime';
3
3
  import 'react';
4
4
  import '@classmatejs/react';
5
- import '../types-IiJ1jLWc.js';
5
+ import '../types-Duk127zu.js';
6
+ import 'lucide-react';
6
7
  import 'zustand/middleware';
7
8
  import 'zustand';
@@ -8,7 +8,7 @@ import {
8
8
  UserSettingsSync,
9
9
  applyThemePreference,
10
10
  useDocsUserSettingsStore
11
- } from "../chunk-SH5XWPXW.js";
11
+ } from "../chunk-MPERUGQD.js";
12
12
  import {
13
13
  LayoutComponent,
14
14
  useDocsSearchActions,
@@ -18,7 +18,7 @@ import {
18
18
  } from "../chunk-ESAHWFDZ.js";
19
19
  import "../chunk-SOVTSE5J.js";
20
20
  import "../chunk-L6ZVB6XH.js";
21
- import "../chunk-QWIYQPCW.js";
21
+ import "../chunk-UMH7S7OB.js";
22
22
  import "../chunk-PYYPYIBD.js";
23
23
  export {
24
24
  AppLayout,
@@ -1,5 +1,6 @@
1
- import { z as ResolvedDocsPage, g as DocsConfig, v as ResolvedDocsConfig } from '../types-IiJ1jLWc.js';
1
+ import { R as ResolvedDocsPage, D as DocsConfig, a as ResolvedDocsConfig } from '../types-Duk127zu.js';
2
2
  import { Plugin } from 'vite';
3
+ import 'lucide-react';
3
4
 
4
5
  declare const resolveDocsHref: (basePath: string, href: string) => string | null;
5
6
  declare const resolveDocsConfig: (config: DocsConfig) => ResolvedDocsConfig;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  nivelPagesPlugin
3
- } from "../chunk-OUDSISNU.js";
3
+ } from "../chunk-WEGYZIYX.js";
4
4
  import {
5
5
  getGeneratedPagesRoot,
6
6
  getInitSummary,
@@ -8,13 +8,13 @@ import {
8
8
  initConsumer,
9
9
  loadDocsConfig,
10
10
  syncGeneratedDocsPages
11
- } from "../chunk-DCHQC4WP.js";
11
+ } from "../chunk-G6PC37P5.js";
12
12
  import "../chunk-SOVTSE5J.js";
13
13
  import {
14
14
  getResolvedPageById,
15
15
  resolveDocsConfig,
16
16
  resolveDocsHref
17
- } from "../chunk-QWIYQPCW.js";
17
+ } from "../chunk-UMH7S7OB.js";
18
18
  import "../chunk-PYYPYIBD.js";
19
19
  export {
20
20
  getGeneratedPagesRoot,
@@ -1,3 +1,11 @@
1
+ import * as lucide_react from 'lucide-react';
2
+ import { LucideIcon } from 'lucide-react';
3
+
4
+ type LucideModule = typeof lucide_react;
5
+ type DocsIconName = {
6
+ [Key in keyof LucideModule]: LucideModule[Key] extends LucideIcon ? Key : never;
7
+ }[keyof LucideModule];
8
+
1
9
  type DocsCollapsible = {
2
10
  isDefaultOpen?: boolean;
3
11
  };
@@ -71,6 +79,7 @@ type DocsPageNode = {
71
79
  tableOfContents?: boolean;
72
80
  navTitle?: string;
73
81
  description?: string;
82
+ icon?: DocsIconName;
74
83
  };
75
84
  type DocsGroupNode = {
76
85
  kind: 'group';
@@ -80,6 +89,7 @@ type DocsGroupNode = {
80
89
  showInNav?: boolean;
81
90
  items: DocsSidebarNode[];
82
91
  collapsible?: DocsCollapsible;
92
+ icon?: DocsIconName;
83
93
  };
84
94
  type DocsSectionNode = {
85
95
  kind: 'section';
@@ -88,6 +98,7 @@ type DocsSectionNode = {
88
98
  navTitle?: string;
89
99
  href?: string;
90
100
  items: DocsSidebarNode[];
101
+ icon?: DocsIconName;
91
102
  };
92
103
  type DocsSidebarNode = DocsGroupNode | DocsPageNode;
93
104
  type DocsGraph = {
@@ -162,6 +173,7 @@ type ResolvedSidebarGroup = {
162
173
  showInNav: boolean;
163
174
  items: ResolvedSidebarNode[];
164
175
  collapsible?: DocsCollapsible;
176
+ icon?: DocsIconName;
165
177
  };
166
178
  type ResolvedSidebarPage = {
167
179
  kind: 'page';
@@ -170,6 +182,7 @@ type ResolvedSidebarPage = {
170
182
  navTitle: string;
171
183
  href: string;
172
184
  showInNav: boolean;
185
+ icon?: DocsIconName;
173
186
  };
174
187
  type ResolvedSidebarNode = ResolvedSidebarGroup | ResolvedSidebarPage;
175
188
  type ResolvedDocsSection = {
@@ -178,6 +191,7 @@ type ResolvedDocsSection = {
178
191
  navTitle: string;
179
192
  href: string;
180
193
  items: ResolvedSidebarNode[];
194
+ icon?: DocsIconName;
181
195
  };
182
196
  type ResolvedNavbarItem = {
183
197
  id: string;
@@ -201,9 +215,13 @@ type ResolvedDocsConfig = {
201
215
  navbarItems: ResolvedNavbarItem[];
202
216
  };
203
217
  type DocPageLinkData = Pick<ResolvedDocsPage, 'id' | 'title' | 'href' | 'documentTitle'>;
204
- type DocsGlobalContextData = Pick<ResolvedDocsConfig, 'siteTitle' | 'basePath' | 'theme' | 'footer' | 'brand' | 'head' | 'partners' | 'algolia' | 'pages' | 'navbarItems' | 'social'> & {
218
+ type DocsIconMap = Partial<Record<string, LucideIcon>>;
219
+ type DocsGlobalContextSerializableData = Pick<ResolvedDocsConfig, 'siteTitle' | 'basePath' | 'theme' | 'footer' | 'brand' | 'head' | 'partners' | 'algolia' | 'pages' | 'navbarItems' | 'social'> & {
205
220
  sidebarSections: ResolvedDocsConfig['sections'];
206
221
  };
222
+ type DocsGlobalContextData = DocsGlobalContextSerializableData & {
223
+ docsIconMap: DocsIconMap;
224
+ };
207
225
  type DocPageData = {
208
226
  page: ResolvedDocsPage;
209
227
  headings: DocHeading[];
@@ -211,4 +229,4 @@ type DocPageData = {
211
229
  nextPage: DocPageLinkData | null;
212
230
  };
213
231
 
214
- export type { DocHeading as D, JsonPrimitive as J, ResolvedDocsAlgoliaConfig as R, ThemePreference as T, DocPageData as a, DocPageLinkData as b, DocsAlgoliaConfig as c, DocsAlgoliaFieldsConfig as d, DocsBrandConfig as e, DocsCollapsible as f, DocsConfig as g, DocsFooterConfig as h, DocsGlobalContextData as i, DocsGraph as j, DocsGroupNode as k, DocsHeadConfig as l, DocsPageNode as m, DocsPartnerConfig as n, DocsPartnersConfig as o, DocsSectionNode as p, DocsSidebarNode as q, DocsThemeConfig as r, JsonValue as s, ResolvedDocsAlgoliaFieldsConfig as t, ResolvedDocsBrandConfig as u, ResolvedDocsConfig as v, ResolvedDocsPartnerConfig as w, ResolvedDocsPartnersConfig as x, ResolvedDocsSection as y, ResolvedDocsPage as z };
232
+ export type { ResolvedDocsPartnerConfig as A, ResolvedDocsPartnersConfig as B, ResolvedDocsSection as C, DocsConfig as D, JsonPrimitive as J, ResolvedDocsPage as R, ThemePreference as T, ResolvedDocsConfig as a, DocsThemeConfig as b, DocHeading as c, DocPageData as d, DocPageLinkData as e, DocsAlgoliaConfig as f, DocsAlgoliaFieldsConfig as g, DocsBrandConfig as h, DocsCollapsible as i, DocsFooterConfig as j, DocsGlobalContextData as k, DocsGlobalContextSerializableData as l, DocsGraph as m, DocsGroupNode as n, DocsHeadConfig as o, DocsIconMap as p, DocsIconName as q, DocsPageNode as r, DocsPartnerConfig as s, DocsPartnersConfig as t, DocsSectionNode as u, DocsSidebarNode as v, JsonValue as w, ResolvedDocsAlgoliaConfig as x, ResolvedDocsAlgoliaFieldsConfig as y, ResolvedDocsBrandConfig as z };
package/dist/vike.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Config } from 'vike/types';
2
- import { g as DocsConfig } from './types-IiJ1jLWc.js';
2
+ import { D as DocsConfig } from './types-Duk127zu.js';
3
+ import 'lucide-react';
3
4
 
4
5
  declare const nivelConfig: {
5
6
  meta: {
package/dist/vike.js CHANGED
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  nivelPagesPlugin
3
- } from "./chunk-OUDSISNU.js";
3
+ } from "./chunk-WEGYZIYX.js";
4
4
  import {
5
5
  loadDocsConfig
6
- } from "./chunk-DCHQC4WP.js";
6
+ } from "./chunk-G6PC37P5.js";
7
7
  import {
8
8
  createHeadingSlugger,
9
9
  normalizeHeadingTitle
10
10
  } from "./chunk-SOVTSE5J.js";
11
11
  import {
12
12
  resolveDocsConfig
13
- } from "./chunk-QWIYQPCW.js";
13
+ } from "./chunk-UMH7S7OB.js";
14
14
  import "./chunk-PYYPYIBD.js";
15
15
  import {
16
16
  getCodeBlockMdxPlugins
@@ -82,7 +82,6 @@ var rehypeDocsHeadings = () => {
82
82
  properties: {
83
83
  href: `#${node.properties.id}`,
84
84
  "data-copy-heading-link": "",
85
- "aria-hidden": "true",
86
85
  "aria-label": `Copy link to heading: ${title}`,
87
86
  title: `Copy link to heading: ${title}`,
88
87
  className: ["docs-heading-link absolute inset-0 flex items-center justify-end text-primary-muted"]
@@ -101,7 +100,8 @@ var rehypeDocsHeadings = () => {
101
100
  "stroke-width": 2,
102
101
  "stroke-linecap": "round",
103
102
  "stroke-linejoin": "round",
104
- className: ["w-4 h-4 hidden group-hover:block translate-x-5"]
103
+ "aria-hidden": "true",
104
+ className: ["size-4 hidden group-hover:block group-focus-within:block translate-x-5"]
105
105
  },
106
106
  children: [
107
107
  createLinkIconLine(4, 9, 20, 9),
package/dist/vike.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/vike/index.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 { 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, 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","// 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-24',\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-hidden': 'true',\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 className: ['w-4 h-4 hidden group-hover: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('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('\"', '&quot;')\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 = (siteUrl: string) => {\n return ['User-agent: *', 'Disallow: /cdn-cgi/', `Sitemap: ${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(siteUrl),\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":[]}
1
+ {"version":3,"sources":["../src/vike/index.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 { 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, 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","// 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-24',\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('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;').replaceAll('\"', '&quot;')\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 = (siteUrl: string) => {\n return ['User-agent: *', 'Disallow: /cdn-cgi/', `Sitemap: ${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(siteUrl),\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":[]}