@unterberg/nivel 0.0.5 → 0.1.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.
- package/README.md +4 -0
- package/dist/{chunk-D35PFSSY.js → chunk-4XQN7OBV.js} +50 -8
- package/dist/chunk-4XQN7OBV.js.map +1 -0
- package/dist/{chunk-D7IAGT53.js → chunk-CL74JUQ4.js} +134 -80
- package/dist/chunk-CL74JUQ4.js.map +1 -0
- package/dist/{chunk-2EDJWL3U.js → chunk-DSQGGUBC.js} +13 -22
- package/dist/{chunk-2EDJWL3U.js.map → chunk-DSQGGUBC.js.map} +1 -1
- package/dist/{chunk-UMMK73OW.js → chunk-G7DN5RH7.js} +40 -19
- package/dist/chunk-G7DN5RH7.js.map +1 -0
- package/dist/chunk-SOVTSE5J.js +65 -0
- package/dist/chunk-SOVTSE5J.js.map +1 -0
- package/dist/{chunk-4RLPVGMZ.js → chunk-XTBGSCAZ.js} +7 -6
- package/dist/chunk-XTBGSCAZ.js.map +1 -0
- package/dist/cli.js +3 -3
- package/dist/client.d.ts +1 -1
- package/dist/client.js +3 -3
- package/dist/config.d.ts +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -2
- package/dist/mdx/code-blocks.d.ts +1 -1
- package/dist/mdx.js +2 -2
- package/dist/runtime/client.d.ts +1 -1
- package/dist/runtime/client.js +3 -3
- package/dist/runtime/node.d.ts +3 -2
- package/dist/runtime/node.js +7 -5
- package/dist/{types-j0kEkMA4.d.ts → types-Dj-zbZbD.d.ts} +6 -3
- package/dist/vike.d.ts +1 -1
- package/dist/vike.js +4 -4
- package/package.json +8 -8
- package/dist/chunk-4RLPVGMZ.js.map +0 -1
- package/dist/chunk-D35PFSSY.js.map +0 -1
- package/dist/chunk-D7IAGT53.js.map +0 -1
- package/dist/chunk-PYYPYIBD.js +0 -49
- package/dist/chunk-PYYPYIBD.js.map +0 -1
- package/dist/chunk-UMMK73OW.js.map +0 -1
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
|
-
extractDocHeadings
|
|
2
|
+
extractDocHeadings
|
|
3
|
+
} from "./chunk-SOVTSE5J.js";
|
|
4
|
+
import {
|
|
3
5
|
getResolvedPageById,
|
|
4
6
|
resolveDocsConfig
|
|
5
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-CL74JUQ4.js";
|
|
6
8
|
|
|
7
9
|
// src/runtime/node/codegen.ts
|
|
8
10
|
import fs from "fs";
|
|
@@ -113,11 +115,33 @@ var toDocPageLinkData = (page) => {
|
|
|
113
115
|
};
|
|
114
116
|
};
|
|
115
117
|
var getGeneratedPagesRoot = (rootDir) => path.join(rootDir, "pages", GENERATED_DIRNAME);
|
|
118
|
+
var getDocsConfigPath = (rootDir) => path.join(rootDir, "pages", "+docs.ts");
|
|
119
|
+
var getDocsGraphPath = (rootDir) => path.join(rootDir, "docs", "docs.graph.ts");
|
|
120
|
+
var getDocsSourcePaths = (options) => {
|
|
121
|
+
const resolved = resolveDocsConfig(options.docsConfig);
|
|
122
|
+
return {
|
|
123
|
+
contentRootPath: path.join(options.rootDir, resolved.contentDir),
|
|
124
|
+
docsConfigPath: getDocsConfigPath(options.rootDir),
|
|
125
|
+
docsGraphPath: getDocsGraphPath(options.rootDir),
|
|
126
|
+
generatedRootPath: getGeneratedPagesRoot(options.rootDir)
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
var isDocsSourcePath = (filePath, docsSourcePaths) => {
|
|
130
|
+
const normalized = toPosix(filePath);
|
|
131
|
+
const generatedRootPath = toPosix(docsSourcePaths.generatedRootPath);
|
|
132
|
+
const docsConfigPath = toPosix(docsSourcePaths.docsConfigPath);
|
|
133
|
+
const docsGraphPath = toPosix(docsSourcePaths.docsGraphPath);
|
|
134
|
+
const contentRootPath = toPosix(docsSourcePaths.contentRootPath);
|
|
135
|
+
if (normalized.startsWith(generatedRootPath)) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
return normalized === docsConfigPath || normalized === docsGraphPath || normalized === contentRootPath || normalized.startsWith(`${contentRootPath}/`);
|
|
139
|
+
};
|
|
116
140
|
var syncGeneratedDocsPages = (options) => {
|
|
117
141
|
const { rootDir, docsConfig } = options;
|
|
118
142
|
const resolved = resolveDocsConfig(docsConfig);
|
|
119
143
|
const generatedPagesRoot = getGeneratedPagesRoot(rootDir);
|
|
120
|
-
const
|
|
144
|
+
const docsContentRoot = path.join(rootDir, resolved.contentDir);
|
|
121
145
|
const expectedFiles = /* @__PURE__ */ new Set();
|
|
122
146
|
const globalContextFilePath = path.join(generatedPagesRoot, "_docsGlobalContext.ts");
|
|
123
147
|
fs.mkdirSync(generatedPagesRoot, { recursive: true });
|
|
@@ -137,7 +161,7 @@ var syncGeneratedDocsPages = (options) => {
|
|
|
137
161
|
writeFileIfChanged(globalContextFilePath, getGeneratedGlobalContextSource(globalContextData));
|
|
138
162
|
expectedFiles.add(globalContextFilePath);
|
|
139
163
|
for (const [pageIndex, page] of resolved.pages.entries()) {
|
|
140
|
-
const contentFilePath = path.join(
|
|
164
|
+
const contentFilePath = path.join(docsContentRoot, page.source);
|
|
141
165
|
if (!fs.existsSync(contentFilePath)) {
|
|
142
166
|
throw new Error(`Docs page "${page.id}" points to missing source file: ${contentFilePath}`);
|
|
143
167
|
}
|
|
@@ -148,9 +172,15 @@ var syncGeneratedDocsPages = (options) => {
|
|
|
148
172
|
previousPage: toDocPageLinkData(resolved.pages[pageIndex - 1]),
|
|
149
173
|
nextPage: toDocPageLinkData(resolved.pages[pageIndex + 1])
|
|
150
174
|
};
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
175
|
+
const routeTargets = [
|
|
176
|
+
{ routeHref: page.href, routePath: page.slug },
|
|
177
|
+
...page.aliases.map((routePath, index) => ({
|
|
178
|
+
routeHref: page.aliasHrefs[index],
|
|
179
|
+
routePath
|
|
180
|
+
}))
|
|
181
|
+
];
|
|
182
|
+
for (const { routeHref, routePath } of routeTargets) {
|
|
183
|
+
const pageDir = path.join(generatedPagesRoot, ...routePath.split("/"));
|
|
154
184
|
const contentImportPath = getRelativeImportPath(pageDir, contentFilePath);
|
|
155
185
|
const pageFilePath = path.join(pageDir, "+Page.tsx");
|
|
156
186
|
const dataFilePath = path.join(pageDir, "+data.ts");
|
|
@@ -179,16 +209,6 @@ var syncGeneratedDocsPages = (options) => {
|
|
|
179
209
|
}
|
|
180
210
|
removeEmptyDirectories(generatedPagesRoot, generatedPagesRoot);
|
|
181
211
|
};
|
|
182
|
-
var isDocsSourcePath = (filePath, rootDir) => {
|
|
183
|
-
const normalized = toPosix(filePath);
|
|
184
|
-
const docsRoot = toPosix(path.join(rootDir, "docs"));
|
|
185
|
-
const docsConfigPath = toPosix(path.join(rootDir, "pages", "+docs.ts"));
|
|
186
|
-
const generatedRoot = toPosix(getGeneratedPagesRoot(rootDir));
|
|
187
|
-
if (normalized.startsWith(generatedRoot)) {
|
|
188
|
-
return false;
|
|
189
|
-
}
|
|
190
|
-
return normalized === docsConfigPath || normalized.startsWith(`${docsRoot}/`);
|
|
191
|
-
};
|
|
192
212
|
|
|
193
213
|
// src/runtime/node/loadDocsConfig.ts
|
|
194
214
|
import path2 from "path";
|
|
@@ -484,10 +504,11 @@ var initConsumer = (options) => {
|
|
|
484
504
|
|
|
485
505
|
export {
|
|
486
506
|
getGeneratedPagesRoot,
|
|
487
|
-
|
|
507
|
+
getDocsSourcePaths,
|
|
488
508
|
isDocsSourcePath,
|
|
509
|
+
syncGeneratedDocsPages,
|
|
489
510
|
loadDocsConfig,
|
|
490
511
|
getInitSummary,
|
|
491
512
|
initConsumer
|
|
492
513
|
};
|
|
493
|
-
//# sourceMappingURL=chunk-
|
|
514
|
+
//# sourceMappingURL=chunk-G7DN5RH7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/node/codegen.ts","../src/runtime/node/loadDocsConfig.ts","../src/runtime/node/scaffold.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport type { DocPageData, DocPageLinkData, DocsConfig, DocsGlobalContextData } from '../../docs/types.js'\nimport { extractDocHeadings } from '../../docs/docHeadings.js'\nimport { getResolvedPageById, resolveDocsConfig } from '../../docs/resolveDocsConfig.js'\n\nconst GENERATED_DIRNAME = '(nivel-generated)'\n\nconst writeFileIfChanged = (filePath: string, source: string) => {\n const current = fs.existsSync(filePath) ? fs.readFileSync(filePath, 'utf8') : null\n if (current === source) {\n return\n }\n\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n fs.writeFileSync(filePath, source)\n}\n\nconst toPosix = (value: string) => value.split(path.sep).join(path.posix.sep)\n\nconst getRelativeImportPath = (fromDirectory: string, toFile: string) => {\n const relativePath = toPosix(path.relative(fromDirectory, toFile))\n if (relativePath.startsWith('.')) {\n return relativePath\n }\n return `./${relativePath}`\n}\n\nconst serializeData = (data: DocPageData | DocsGlobalContextData) => JSON.stringify(data, null, 2)\n\nconst collectFiles = (directoryPath: string): string[] => {\n if (!fs.existsSync(directoryPath)) {\n return []\n }\n\n const entries = fs.readdirSync(directoryPath, { withFileTypes: true })\n\n return entries.flatMap((entry) => {\n const entryPath = path.join(directoryPath, entry.name)\n return entry.isDirectory() ? collectFiles(entryPath) : [entryPath]\n })\n}\n\nconst removeEmptyDirectories = (directoryPath: string, rootPath: string) => {\n if (!fs.existsSync(directoryPath)) {\n return\n }\n\n for (const entry of fs.readdirSync(directoryPath, { withFileTypes: true })) {\n if (!entry.isDirectory()) {\n continue\n }\n\n removeEmptyDirectories(path.join(directoryPath, entry.name), rootPath)\n }\n\n if (directoryPath === rootPath) {\n return\n }\n\n if (fs.readdirSync(directoryPath).length === 0) {\n fs.rmdirSync(directoryPath)\n }\n}\n\nconst getGeneratedPageSource = (contentImportPath: string) => {\n return [\n \"import { DocsPage } from '@unterberg/nivel/client'\",\n `import Content from ${JSON.stringify(contentImportPath)}`,\n '',\n 'const Page = () => {',\n ' return <DocsPage Content={Content} />',\n '}',\n '',\n 'export default Page',\n '',\n ].join('\\n')\n}\n\nconst getGeneratedDataSource = (data: DocPageData) => {\n return [\n \"import type { DocPageData } from '@unterberg/nivel'\",\n '',\n `const data: DocPageData = ${serializeData(data)}`,\n '',\n 'const pageData = () => {',\n ' return data',\n '}',\n '',\n 'export default pageData',\n '',\n ].join('\\n')\n}\n\nconst getGeneratedGlobalContextSource = (data: DocsGlobalContextData) => {\n return [\n \"import type { DocsGlobalContextData } from '@unterberg/nivel'\",\n '',\n `const docsGlobalContextData: DocsGlobalContextData = ${serializeData(data)}`,\n '',\n 'export { docsGlobalContextData }',\n '',\n ].join('\\n')\n}\n\nconst getRouteString = (href: string) => {\n if (href === '/') {\n return href\n }\n\n return href.replace(/\\/+$/g, '')\n}\n\nconst getGeneratedRouteSource = (href: string) => {\n return [`export default ${JSON.stringify(getRouteString(href))}`, ''].join('\\n')\n}\n\nconst getGeneratedTextExport = (value: string) => {\n return [`export default ${JSON.stringify(value)}`, ''].join('\\n')\n}\n\nconst toDocPageLinkData = (\n page:\n | {\n id: string\n title: string\n href: string\n documentTitle: string\n }\n | undefined,\n): DocPageLinkData | null => {\n if (!page) {\n return null\n }\n\n return {\n id: page.id,\n title: page.title,\n href: page.href,\n documentTitle: page.documentTitle,\n }\n}\n\nexport const getGeneratedPagesRoot = (rootDir: string) => path.join(rootDir, 'pages', GENERATED_DIRNAME)\n\nexport type DocsSourcePaths = {\n contentRootPath: string\n docsConfigPath: string\n docsGraphPath: string\n generatedRootPath: string\n}\n\nconst getDocsConfigPath = (rootDir: string) => path.join(rootDir, 'pages', '+docs.ts')\n\nconst getDocsGraphPath = (rootDir: string) => path.join(rootDir, 'docs', 'docs.graph.ts')\n\nexport const getDocsSourcePaths = (options: { rootDir: string; docsConfig: DocsConfig }): DocsSourcePaths => {\n const resolved = resolveDocsConfig(options.docsConfig)\n\n return {\n contentRootPath: path.join(options.rootDir, resolved.contentDir),\n docsConfigPath: getDocsConfigPath(options.rootDir),\n docsGraphPath: getDocsGraphPath(options.rootDir),\n generatedRootPath: getGeneratedPagesRoot(options.rootDir),\n }\n}\n\nexport const isDocsSourcePath = (filePath: string, docsSourcePaths: DocsSourcePaths) => {\n const normalized = toPosix(filePath)\n const generatedRootPath = toPosix(docsSourcePaths.generatedRootPath)\n const docsConfigPath = toPosix(docsSourcePaths.docsConfigPath)\n const docsGraphPath = toPosix(docsSourcePaths.docsGraphPath)\n const contentRootPath = toPosix(docsSourcePaths.contentRootPath)\n\n if (normalized.startsWith(generatedRootPath)) {\n return false\n }\n\n return (\n normalized === docsConfigPath ||\n normalized === docsGraphPath ||\n normalized === contentRootPath ||\n normalized.startsWith(`${contentRootPath}/`)\n )\n}\n\nexport const syncGeneratedDocsPages = (options: { rootDir: string; docsConfig: DocsConfig }) => {\n const { rootDir, docsConfig } = options\n const resolved = resolveDocsConfig(docsConfig)\n const generatedPagesRoot = getGeneratedPagesRoot(rootDir)\n const docsContentRoot = path.join(rootDir, resolved.contentDir)\n const expectedFiles = new Set<string>()\n const globalContextFilePath = path.join(generatedPagesRoot, '_docsGlobalContext.ts')\n\n fs.mkdirSync(generatedPagesRoot, { recursive: true })\n\n const globalContextData: DocsGlobalContextData = {\n siteTitle: resolved.siteTitle,\n basePath: resolved.basePath,\n theme: resolved.theme,\n footer: resolved.footer,\n brand: resolved.brand,\n head: resolved.head,\n partners: resolved.partners,\n algolia: resolved.algolia,\n pages: resolved.pages,\n navbarItems: resolved.navbarItems,\n sidebarSections: resolved.sections,\n }\n\n writeFileIfChanged(globalContextFilePath, getGeneratedGlobalContextSource(globalContextData))\n expectedFiles.add(globalContextFilePath)\n\n for (const [pageIndex, page] of resolved.pages.entries()) {\n const contentFilePath = path.join(docsContentRoot, page.source)\n\n if (!fs.existsSync(contentFilePath)) {\n throw new Error(`Docs page \"${page.id}\" points to missing source file: ${contentFilePath}`)\n }\n\n const pageSource = fs.readFileSync(contentFilePath, 'utf8')\n const data: DocPageData = {\n page: getResolvedPageById(resolved, page.id),\n headings: extractDocHeadings(pageSource),\n previousPage: toDocPageLinkData(resolved.pages[pageIndex - 1]),\n nextPage: toDocPageLinkData(resolved.pages[pageIndex + 1]),\n }\n\n const routeTargets = [\n { routeHref: page.href, routePath: page.slug },\n ...page.aliases.map((routePath, index) => ({\n routeHref: page.aliasHrefs[index] as string,\n routePath,\n })),\n ]\n\n for (const { routeHref, routePath } of routeTargets) {\n const pageDir = path.join(generatedPagesRoot, ...routePath.split('/'))\n const contentImportPath = getRelativeImportPath(pageDir, contentFilePath)\n\n const pageFilePath = path.join(pageDir, '+Page.tsx')\n const dataFilePath = path.join(pageDir, '+data.ts')\n const routeFilePath = path.join(pageDir, '+route.ts')\n const titleFilePath = path.join(pageDir, '+title.ts')\n\n writeFileIfChanged(pageFilePath, getGeneratedPageSource(contentImportPath))\n writeFileIfChanged(dataFilePath, getGeneratedDataSource(data))\n writeFileIfChanged(routeFilePath, getGeneratedRouteSource(routeHref))\n writeFileIfChanged(titleFilePath, getGeneratedTextExport(page.documentTitle))\n\n expectedFiles.add(pageFilePath)\n expectedFiles.add(dataFilePath)\n expectedFiles.add(routeFilePath)\n expectedFiles.add(titleFilePath)\n\n if (page.description) {\n const descriptionFilePath = path.join(pageDir, '+description.ts')\n writeFileIfChanged(descriptionFilePath, getGeneratedTextExport(page.description))\n expectedFiles.add(descriptionFilePath)\n }\n }\n }\n\n for (const filePath of collectFiles(generatedPagesRoot)) {\n if (expectedFiles.has(filePath)) {\n continue\n }\n\n fs.rmSync(filePath, { force: true })\n }\n\n removeEmptyDirectories(generatedPagesRoot, generatedPagesRoot)\n}\n","import path from 'node:path'\nimport type { DocsConfig } from '../../docs/types.js'\n\nconst getDocsConfigModulePath = (rootDir: string) => {\n return path.join(rootDir, 'pages', '+docs.ts')\n}\n\nconst getDocsConfigFromLoadedModule = (loaded: unknown, modulePath: string) => {\n const docsConfig = (loaded as { default?: DocsConfig }).default\n\n if (!docsConfig) {\n throw new Error(`Expected default export from ${modulePath}`)\n }\n\n return docsConfig\n}\n\nexport const loadDocsConfig = async (options: {\n rootDir: string\n loadModule: (modulePath: string) => Promise<unknown>\n}) => {\n const modulePath = getDocsConfigModulePath(options.rootDir)\n const loaded = await options.loadModule(modulePath)\n return getDocsConfigFromLoadedModule(loaded, modulePath)\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nconst MANAGED_SCRIPT_NAMES = ['generate:docs', 'predev', 'prebuild', 'pretypecheck'] as const\n\nconst REQUIRED_DEPENDENCIES = ['@unterberg/nivel', 'react', 'react-dom', 'vike', 'vike-react'] as const\nconst REQUIRED_DEV_DEPENDENCIES = ['vite', 'typescript', '@types/react', '@types/react-dom'] as const\n\ntype InitConsumerOptions = { force: boolean; rootDir: string }\n\ntype InitConsumerResult = {\n allDependenciesPresent: boolean\n createdFiles: string[]\n missingDependencies: string[]\n overwrittenFiles: string[]\n skippedFiles: string[]\n updatedScripts: string[]\n}\n\ntype PackageJsonShape = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n packageManager?: string\n scripts?: Record<string, string>\n}\n\nconst getDocsConfigTemplate = () => {\n return [\n \"import { defineDocsConfig } from '@unterberg/nivel/config'\",\n \"import { docsGraph } from '../docs/docs.graph'\",\n '',\n 'const docsConfig = defineDocsConfig({',\n ' graph: docsGraph,',\n \" siteTitle: 'My Docs',\",\n \" siteDescription: 'Documentation site powered by @unterberg/nivel.',\",\n \" basePath: '/docs',\",\n '})',\n '',\n 'export default docsConfig',\n '',\n ].join('\\n')\n}\n\nconst getDocsGraphTemplate = () => {\n return [\n \"import { defineDocsGraph } from '@unterberg/nivel/config'\",\n '',\n 'export const docsGraph = defineDocsGraph({',\n ' items: [',\n ' {',\n \" kind: 'section',\",\n \" id: 'docs',\",\n \" title: 'Docs',\",\n ' items: [',\n ' {',\n \" kind: 'page',\",\n \" id: 'gettingStarted',\",\n \" title: 'Getting Started',\",\n \" slug: 'getting-started',\",\n \" source: 'content/getting-started/content.mdx',\",\n \" description: 'Getting started with @unterberg/nivel.',\",\n ' },',\n ' ],',\n ' },',\n ' ],',\n '})',\n '',\n ].join('\\n')\n}\n\nconst getConfigTemplate = () => {\n return [\n \"import nivel from '@unterberg/nivel/vike'\",\n \"import type { Config } from 'vike/types'\",\n \"import vikeReact from 'vike-react/config'\",\n \"import docsConfig from './+docs'\",\n '',\n 'export { config }',\n '',\n \"const themePreference = docsConfig.theme?.defaultPreference ?? 'light'\",\n 'const dataTheme =',\n \" themePreference === 'dark'\",\n \" ? (docsConfig.theme?.dark ?? 'consumer-dark')\",\n \" : (docsConfig.theme?.light ?? 'consumer-light')\",\n '',\n 'const config: Config = {',\n ' ...nivel,',\n ' extends: [vikeReact],',\n ' title: docsConfig.siteTitle,',\n ' description: docsConfig.siteDescription ?? `${docsConfig.siteTitle} documentation`,',\n \" htmlAttributes: { 'data-theme': dataTheme },\",\n \" passToClient: ['docs'],\",\n '',\n ' // User-facing Vike levers stay visible in +config.ts.',\n ' prerender: true,',\n ' // ssr: true,',\n \" // prefetchStaticAssets: 'viewport',\",\n '}',\n '',\n ].join('\\n')\n}\n\nconst getHeadTemplate = () => {\n return [\n \"import { MetaHead } from '@unterberg/nivel/client'\",\n '',\n 'export const Head = () => {',\n ' return <MetaHead />',\n '}',\n '',\n ].join('\\n')\n}\n\nconst getLayoutTemplate = () => {\n return [\n \"import { AppLayout } from '@unterberg/nivel/client'\",\n \"import type { ReactNode } from 'react'\",\n '',\n 'const Layout = ({ children }: { children: ReactNode }) => {',\n ' return <AppLayout>{children}</AppLayout>',\n '}',\n '',\n 'export default Layout',\n '',\n ].join('\\n')\n}\n\nconst getGlobalContextTemplate = () => {\n return [\n \"import { docsGlobalContextData } from './(nivel-generated)/_docsGlobalContext'\",\n '',\n 'export const onCreateGlobalContext = (globalContext: { docs?: typeof docsGlobalContextData }) => {',\n ' globalContext.docs = docsGlobalContextData',\n '}',\n '',\n ].join('\\n')\n}\n\nconst getWrapperTemplate = () => {\n return [\n \"import type { ReactNode } from 'react'\",\n '',\n 'const Wrapper = ({ children }: { children: ReactNode }) => {',\n ' return <>{children}</>',\n '}',\n '',\n 'export default Wrapper',\n '',\n ].join('\\n')\n}\n\nconst getGlobalTypesTemplate = () => {\n return [\n \"declare module '*.mdx' {\",\n \" import type { ComponentType } from 'react'\",\n '',\n ' const MdxComponent: ComponentType',\n ' export default MdxComponent',\n '}',\n '',\n \"declare module '*.css'\",\n '',\n 'declare global {',\n ' namespace Vike {',\n ' interface GlobalContext {',\n \" docs: import('@unterberg/nivel').DocsGlobalContextData\",\n ' }',\n ' }',\n '}',\n '',\n ].join('\\n')\n}\n\nconst getManagedFileEntries = () => {\n return [\n ['pages/+docs.ts', getDocsConfigTemplate()],\n ['docs/docs.graph.ts', getDocsGraphTemplate()],\n ['pages/+config.ts', getConfigTemplate()],\n ['pages/+Head.tsx', getHeadTemplate()],\n ['pages/+Layout.tsx', getLayoutTemplate()],\n ['pages/+onCreateGlobalContext.ts', getGlobalContextTemplate()],\n ['pages/+Wrapper.tsx', getWrapperTemplate()],\n ['global.d.ts', getGlobalTypesTemplate()],\n ] as const\n}\n\nconst getGenerateDocsRunner = (packageJson: PackageJsonShape) => {\n const packageManager = packageJson.packageManager?.trim() ?? ''\n\n if (packageManager.startsWith('pnpm@')) {\n return 'pnpm generate:docs'\n }\n\n if (packageManager.startsWith('npm@')) {\n return 'npm run generate:docs'\n }\n\n return 'npm run generate:docs'\n}\n\nconst getManagedScripts = (packageJson: PackageJsonShape) => {\n const generateDocsRunner = getGenerateDocsRunner(packageJson)\n\n return {\n 'generate:docs': 'nivel prepare',\n predev: generateDocsRunner,\n prebuild: generateDocsRunner,\n pretypecheck: generateDocsRunner,\n } satisfies Record<(typeof MANAGED_SCRIPT_NAMES)[number], string>\n}\n\nconst writeFile = (filePath: string, source: string) => {\n fs.mkdirSync(path.dirname(filePath), { recursive: true })\n fs.writeFileSync(filePath, source)\n}\n\nconst writeManagedFile = (\n rootDir: string,\n relativeFilePath: string,\n source: string,\n force: boolean,\n result: InitConsumerResult,\n) => {\n const filePath = path.join(rootDir, relativeFilePath)\n const exists = fs.existsSync(filePath)\n\n if (exists && !force) {\n result.skippedFiles.push(relativeFilePath)\n return\n }\n\n writeFile(filePath, source)\n\n if (exists) {\n result.overwrittenFiles.push(relativeFilePath)\n return\n }\n\n result.createdFiles.push(relativeFilePath)\n}\n\nconst readPackageJson = (rootDir: string) => {\n const packageJsonPath = path.join(rootDir, 'package.json')\n\n if (!fs.existsSync(packageJsonPath)) {\n throw new Error(`Expected package.json in ${rootDir}`)\n }\n\n return {\n packageJson: JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as PackageJsonShape,\n packageJsonPath,\n }\n}\n\nconst patchPackageScripts = (packageJson: PackageJsonShape, packageJsonPath: string, result: InitConsumerResult) => {\n const scripts = { ...(packageJson.scripts ?? {}) }\n const managedScripts = getManagedScripts(packageJson)\n\n for (const scriptName of MANAGED_SCRIPT_NAMES) {\n if (scripts[scriptName] === managedScripts[scriptName]) {\n continue\n }\n\n scripts[scriptName] = managedScripts[scriptName]\n result.updatedScripts.push(scriptName)\n }\n\n const nextPackageJson = {\n ...packageJson,\n scripts,\n }\n\n fs.writeFileSync(packageJsonPath, `${JSON.stringify(nextPackageJson, null, 2)}\\n`)\n}\n\nconst getMissingDependencies = (packageJson: PackageJsonShape) => {\n const installed = new Set<string>([\n ...Object.keys(packageJson.dependencies ?? {}),\n ...Object.keys(packageJson.devDependencies ?? {}),\n ])\n\n return [...REQUIRED_DEPENDENCIES, ...REQUIRED_DEV_DEPENDENCIES].filter((packageName) => !installed.has(packageName))\n}\n\nexport const getInitSummary = (result: InitConsumerResult) => {\n const lines = ['Initialized nivel consumer scaffolding.']\n\n if (result.createdFiles.length > 0) {\n lines.push(`Created files: ${result.createdFiles.join(', ')}`)\n }\n\n if (result.overwrittenFiles.length > 0) {\n lines.push(`Overwritten files: ${result.overwrittenFiles.join(', ')}`)\n }\n\n if (result.skippedFiles.length > 0) {\n lines.push(`Skipped existing files: ${result.skippedFiles.join(', ')}`)\n }\n\n if (result.updatedScripts.length > 0) {\n lines.push(`Updated package.json scripts: ${result.updatedScripts.join(', ')}`)\n }\n\n if (result.missingDependencies.length > 0) {\n lines.push(`Missing dependencies: ${result.missingDependencies.join(', ')}`)\n lines.push(\n 'Consumer CSS stays hand-authored. Add your stylesheet import manually, for example in pages/+Wrapper.tsx.',\n )\n } else if (!result.allDependenciesPresent) {\n lines.push('Dependency validation completed with warnings.')\n } else {\n lines.push('All required dependencies are already present.')\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport const initConsumer = (options: InitConsumerOptions): InitConsumerResult => {\n const result: InitConsumerResult = {\n allDependenciesPresent: true,\n createdFiles: [],\n missingDependencies: [],\n overwrittenFiles: [],\n skippedFiles: [],\n updatedScripts: [],\n }\n\n const { packageJson, packageJsonPath } = readPackageJson(options.rootDir)\n\n for (const [relativeFilePath, source] of getManagedFileEntries()) {\n writeManagedFile(options.rootDir, relativeFilePath, source, options.force, result)\n }\n\n patchPackageScripts(packageJson, packageJsonPath, result)\n\n result.missingDependencies = getMissingDependencies(packageJson)\n result.allDependenciesPresent = result.missingDependencies.length === 0\n\n return result\n}\n"],"mappings":";;;;;;;;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAKjB,IAAM,oBAAoB;AAE1B,IAAM,qBAAqB,CAAC,UAAkB,WAAmB;AAC/D,QAAM,UAAU,GAAG,WAAW,QAAQ,IAAI,GAAG,aAAa,UAAU,MAAM,IAAI;AAC9E,MAAI,YAAY,QAAQ;AACtB;AAAA,EACF;AAEA,KAAG,UAAU,KAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACxD,KAAG,cAAc,UAAU,MAAM;AACnC;AAEA,IAAM,UAAU,CAAC,UAAkB,MAAM,MAAM,KAAK,GAAG,EAAE,KAAK,KAAK,MAAM,GAAG;AAE5E,IAAM,wBAAwB,CAAC,eAAuB,WAAmB;AACvE,QAAM,eAAe,QAAQ,KAAK,SAAS,eAAe,MAAM,CAAC;AACjE,MAAI,aAAa,WAAW,GAAG,GAAG;AAChC,WAAO;AAAA,EACT;AACA,SAAO,KAAK,YAAY;AAC1B;AAEA,IAAM,gBAAgB,CAAC,SAA8C,KAAK,UAAU,MAAM,MAAM,CAAC;AAEjG,IAAM,eAAe,CAAC,kBAAoC;AACxD,MAAI,CAAC,GAAG,WAAW,aAAa,GAAG;AACjC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,UAAU,GAAG,YAAY,eAAe,EAAE,eAAe,KAAK,CAAC;AAErE,SAAO,QAAQ,QAAQ,CAAC,UAAU;AAChC,UAAM,YAAY,KAAK,KAAK,eAAe,MAAM,IAAI;AACrD,WAAO,MAAM,YAAY,IAAI,aAAa,SAAS,IAAI,CAAC,SAAS;AAAA,EACnE,CAAC;AACH;AAEA,IAAM,yBAAyB,CAAC,eAAuB,aAAqB;AAC1E,MAAI,CAAC,GAAG,WAAW,aAAa,GAAG;AACjC;AAAA,EACF;AAEA,aAAW,SAAS,GAAG,YAAY,eAAe,EAAE,eAAe,KAAK,CAAC,GAAG;AAC1E,QAAI,CAAC,MAAM,YAAY,GAAG;AACxB;AAAA,IACF;AAEA,2BAAuB,KAAK,KAAK,eAAe,MAAM,IAAI,GAAG,QAAQ;AAAA,EACvE;AAEA,MAAI,kBAAkB,UAAU;AAC9B;AAAA,EACF;AAEA,MAAI,GAAG,YAAY,aAAa,EAAE,WAAW,GAAG;AAC9C,OAAG,UAAU,aAAa;AAAA,EAC5B;AACF;AAEA,IAAM,yBAAyB,CAAC,sBAA8B;AAC5D,SAAO;AAAA,IACL;AAAA,IACA,uBAAuB,KAAK,UAAU,iBAAiB,CAAC;AAAA,IACxD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,yBAAyB,CAAC,SAAsB;AACpD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,6BAA6B,cAAc,IAAI,CAAC;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,kCAAkC,CAAC,SAAgC;AACvE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,wDAAwD,cAAc,IAAI,CAAC;AAAA,IAC3E;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,iBAAiB,CAAC,SAAiB;AACvC,MAAI,SAAS,KAAK;AAChB,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,QAAQ,SAAS,EAAE;AACjC;AAEA,IAAM,0BAA0B,CAAC,SAAiB;AAChD,SAAO,CAAC,kBAAkB,KAAK,UAAU,eAAe,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI;AACjF;AAEA,IAAM,yBAAyB,CAAC,UAAkB;AAChD,SAAO,CAAC,kBAAkB,KAAK,UAAU,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI;AAClE;AAEA,IAAM,oBAAoB,CACxB,SAQ2B;AAC3B,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,OAAO,KAAK;AAAA,IACZ,MAAM,KAAK;AAAA,IACX,eAAe,KAAK;AAAA,EACtB;AACF;AAEO,IAAM,wBAAwB,CAAC,YAAoB,KAAK,KAAK,SAAS,SAAS,iBAAiB;AASvG,IAAM,oBAAoB,CAAC,YAAoB,KAAK,KAAK,SAAS,SAAS,UAAU;AAErF,IAAM,mBAAmB,CAAC,YAAoB,KAAK,KAAK,SAAS,QAAQ,eAAe;AAEjF,IAAM,qBAAqB,CAAC,YAA0E;AAC3G,QAAM,WAAW,kBAAkB,QAAQ,UAAU;AAErD,SAAO;AAAA,IACL,iBAAiB,KAAK,KAAK,QAAQ,SAAS,SAAS,UAAU;AAAA,IAC/D,gBAAgB,kBAAkB,QAAQ,OAAO;AAAA,IACjD,eAAe,iBAAiB,QAAQ,OAAO;AAAA,IAC/C,mBAAmB,sBAAsB,QAAQ,OAAO;AAAA,EAC1D;AACF;AAEO,IAAM,mBAAmB,CAAC,UAAkB,oBAAqC;AACtF,QAAM,aAAa,QAAQ,QAAQ;AACnC,QAAM,oBAAoB,QAAQ,gBAAgB,iBAAiB;AACnE,QAAM,iBAAiB,QAAQ,gBAAgB,cAAc;AAC7D,QAAM,gBAAgB,QAAQ,gBAAgB,aAAa;AAC3D,QAAM,kBAAkB,QAAQ,gBAAgB,eAAe;AAE/D,MAAI,WAAW,WAAW,iBAAiB,GAAG;AAC5C,WAAO;AAAA,EACT;AAEA,SACE,eAAe,kBACf,eAAe,iBACf,eAAe,mBACf,WAAW,WAAW,GAAG,eAAe,GAAG;AAE/C;AAEO,IAAM,yBAAyB,CAAC,YAAyD;AAC9F,QAAM,EAAE,SAAS,WAAW,IAAI;AAChC,QAAM,WAAW,kBAAkB,UAAU;AAC7C,QAAM,qBAAqB,sBAAsB,OAAO;AACxD,QAAM,kBAAkB,KAAK,KAAK,SAAS,SAAS,UAAU;AAC9D,QAAM,gBAAgB,oBAAI,IAAY;AACtC,QAAM,wBAAwB,KAAK,KAAK,oBAAoB,uBAAuB;AAEnF,KAAG,UAAU,oBAAoB,EAAE,WAAW,KAAK,CAAC;AAEpD,QAAM,oBAA2C;AAAA,IAC/C,WAAW,SAAS;AAAA,IACpB,UAAU,SAAS;AAAA,IACnB,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,IACjB,OAAO,SAAS;AAAA,IAChB,MAAM,SAAS;AAAA,IACf,UAAU,SAAS;AAAA,IACnB,SAAS,SAAS;AAAA,IAClB,OAAO,SAAS;AAAA,IAChB,aAAa,SAAS;AAAA,IACtB,iBAAiB,SAAS;AAAA,EAC5B;AAEA,qBAAmB,uBAAuB,gCAAgC,iBAAiB,CAAC;AAC5F,gBAAc,IAAI,qBAAqB;AAEvC,aAAW,CAAC,WAAW,IAAI,KAAK,SAAS,MAAM,QAAQ,GAAG;AACxD,UAAM,kBAAkB,KAAK,KAAK,iBAAiB,KAAK,MAAM;AAE9D,QAAI,CAAC,GAAG,WAAW,eAAe,GAAG;AACnC,YAAM,IAAI,MAAM,cAAc,KAAK,EAAE,oCAAoC,eAAe,EAAE;AAAA,IAC5F;AAEA,UAAM,aAAa,GAAG,aAAa,iBAAiB,MAAM;AAC1D,UAAM,OAAoB;AAAA,MACxB,MAAM,oBAAoB,UAAU,KAAK,EAAE;AAAA,MAC3C,UAAU,mBAAmB,UAAU;AAAA,MACvC,cAAc,kBAAkB,SAAS,MAAM,YAAY,CAAC,CAAC;AAAA,MAC7D,UAAU,kBAAkB,SAAS,MAAM,YAAY,CAAC,CAAC;AAAA,IAC3D;AAEA,UAAM,eAAe;AAAA,MACnB,EAAE,WAAW,KAAK,MAAM,WAAW,KAAK,KAAK;AAAA,MAC7C,GAAG,KAAK,QAAQ,IAAI,CAAC,WAAW,WAAW;AAAA,QACzC,WAAW,KAAK,WAAW,KAAK;AAAA,QAChC;AAAA,MACF,EAAE;AAAA,IACJ;AAEA,eAAW,EAAE,WAAW,UAAU,KAAK,cAAc;AACnD,YAAM,UAAU,KAAK,KAAK,oBAAoB,GAAG,UAAU,MAAM,GAAG,CAAC;AACrE,YAAM,oBAAoB,sBAAsB,SAAS,eAAe;AAExE,YAAM,eAAe,KAAK,KAAK,SAAS,WAAW;AACnD,YAAM,eAAe,KAAK,KAAK,SAAS,UAAU;AAClD,YAAM,gBAAgB,KAAK,KAAK,SAAS,WAAW;AACpD,YAAM,gBAAgB,KAAK,KAAK,SAAS,WAAW;AAEpD,yBAAmB,cAAc,uBAAuB,iBAAiB,CAAC;AAC1E,yBAAmB,cAAc,uBAAuB,IAAI,CAAC;AAC7D,yBAAmB,eAAe,wBAAwB,SAAS,CAAC;AACpE,yBAAmB,eAAe,uBAAuB,KAAK,aAAa,CAAC;AAE5E,oBAAc,IAAI,YAAY;AAC9B,oBAAc,IAAI,YAAY;AAC9B,oBAAc,IAAI,aAAa;AAC/B,oBAAc,IAAI,aAAa;AAE/B,UAAI,KAAK,aAAa;AACpB,cAAM,sBAAsB,KAAK,KAAK,SAAS,iBAAiB;AAChE,2BAAmB,qBAAqB,uBAAuB,KAAK,WAAW,CAAC;AAChF,sBAAc,IAAI,mBAAmB;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAEA,aAAW,YAAY,aAAa,kBAAkB,GAAG;AACvD,QAAI,cAAc,IAAI,QAAQ,GAAG;AAC/B;AAAA,IACF;AAEA,OAAG,OAAO,UAAU,EAAE,OAAO,KAAK,CAAC;AAAA,EACrC;AAEA,yBAAuB,oBAAoB,kBAAkB;AAC/D;;;AChRA,OAAOA,WAAU;AAGjB,IAAM,0BAA0B,CAAC,YAAoB;AACnD,SAAOA,MAAK,KAAK,SAAS,SAAS,UAAU;AAC/C;AAEA,IAAM,gCAAgC,CAAC,QAAiB,eAAuB;AAC7E,QAAM,aAAc,OAAoC;AAExD,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,gCAAgC,UAAU,EAAE;AAAA,EAC9D;AAEA,SAAO;AACT;AAEO,IAAM,iBAAiB,OAAO,YAG/B;AACJ,QAAM,aAAa,wBAAwB,QAAQ,OAAO;AAC1D,QAAM,SAAS,MAAM,QAAQ,WAAW,UAAU;AAClD,SAAO,8BAA8B,QAAQ,UAAU;AACzD;;;ACxBA,OAAOC,SAAQ;AACf,OAAOC,WAAU;AAEjB,IAAM,uBAAuB,CAAC,iBAAiB,UAAU,YAAY,cAAc;AAEnF,IAAM,wBAAwB,CAAC,oBAAoB,SAAS,aAAa,QAAQ,YAAY;AAC7F,IAAM,4BAA4B,CAAC,QAAQ,cAAc,gBAAgB,kBAAkB;AAoB3F,IAAM,wBAAwB,MAAM;AAClC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,uBAAuB,MAAM;AACjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,oBAAoB,MAAM;AAC9B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,kBAAkB,MAAM;AAC5B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,oBAAoB,MAAM;AAC9B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,2BAA2B,MAAM;AACrC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,qBAAqB,MAAM;AAC/B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,yBAAyB,MAAM;AACnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,wBAAwB,MAAM;AAClC,SAAO;AAAA,IACL,CAAC,kBAAkB,sBAAsB,CAAC;AAAA,IAC1C,CAAC,sBAAsB,qBAAqB,CAAC;AAAA,IAC7C,CAAC,oBAAoB,kBAAkB,CAAC;AAAA,IACxC,CAAC,mBAAmB,gBAAgB,CAAC;AAAA,IACrC,CAAC,qBAAqB,kBAAkB,CAAC;AAAA,IACzC,CAAC,mCAAmC,yBAAyB,CAAC;AAAA,IAC9D,CAAC,sBAAsB,mBAAmB,CAAC;AAAA,IAC3C,CAAC,eAAe,uBAAuB,CAAC;AAAA,EAC1C;AACF;AAEA,IAAM,wBAAwB,CAAC,gBAAkC;AAC/D,QAAM,iBAAiB,YAAY,gBAAgB,KAAK,KAAK;AAE7D,MAAI,eAAe,WAAW,OAAO,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,MAAI,eAAe,WAAW,MAAM,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,IAAM,oBAAoB,CAAC,gBAAkC;AAC3D,QAAM,qBAAqB,sBAAsB,WAAW;AAE5D,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AACF;AAEA,IAAM,YAAY,CAAC,UAAkB,WAAmB;AACtD,EAAAD,IAAG,UAAUC,MAAK,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACxD,EAAAD,IAAG,cAAc,UAAU,MAAM;AACnC;AAEA,IAAM,mBAAmB,CACvB,SACA,kBACA,QACA,OACA,WACG;AACH,QAAM,WAAWC,MAAK,KAAK,SAAS,gBAAgB;AACpD,QAAM,SAASD,IAAG,WAAW,QAAQ;AAErC,MAAI,UAAU,CAAC,OAAO;AACpB,WAAO,aAAa,KAAK,gBAAgB;AACzC;AAAA,EACF;AAEA,YAAU,UAAU,MAAM;AAE1B,MAAI,QAAQ;AACV,WAAO,iBAAiB,KAAK,gBAAgB;AAC7C;AAAA,EACF;AAEA,SAAO,aAAa,KAAK,gBAAgB;AAC3C;AAEA,IAAM,kBAAkB,CAAC,YAAoB;AAC3C,QAAM,kBAAkBC,MAAK,KAAK,SAAS,cAAc;AAEzD,MAAI,CAACD,IAAG,WAAW,eAAe,GAAG;AACnC,UAAM,IAAI,MAAM,4BAA4B,OAAO,EAAE;AAAA,EACvD;AAEA,SAAO;AAAA,IACL,aAAa,KAAK,MAAMA,IAAG,aAAa,iBAAiB,MAAM,CAAC;AAAA,IAChE;AAAA,EACF;AACF;AAEA,IAAM,sBAAsB,CAAC,aAA+B,iBAAyB,WAA+B;AAClH,QAAM,UAAU,EAAE,GAAI,YAAY,WAAW,CAAC,EAAG;AACjD,QAAM,iBAAiB,kBAAkB,WAAW;AAEpD,aAAW,cAAc,sBAAsB;AAC7C,QAAI,QAAQ,UAAU,MAAM,eAAe,UAAU,GAAG;AACtD;AAAA,IACF;AAEA,YAAQ,UAAU,IAAI,eAAe,UAAU;AAC/C,WAAO,eAAe,KAAK,UAAU;AAAA,EACvC;AAEA,QAAM,kBAAkB;AAAA,IACtB,GAAG;AAAA,IACH;AAAA,EACF;AAEA,EAAAA,IAAG,cAAc,iBAAiB,GAAG,KAAK,UAAU,iBAAiB,MAAM,CAAC,CAAC;AAAA,CAAI;AACnF;AAEA,IAAM,yBAAyB,CAAC,gBAAkC;AAChE,QAAM,YAAY,oBAAI,IAAY;AAAA,IAChC,GAAG,OAAO,KAAK,YAAY,gBAAgB,CAAC,CAAC;AAAA,IAC7C,GAAG,OAAO,KAAK,YAAY,mBAAmB,CAAC,CAAC;AAAA,EAClD,CAAC;AAED,SAAO,CAAC,GAAG,uBAAuB,GAAG,yBAAyB,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,IAAI,WAAW,CAAC;AACrH;AAEO,IAAM,iBAAiB,CAAC,WAA+B;AAC5D,QAAM,QAAQ,CAAC,yCAAyC;AAExD,MAAI,OAAO,aAAa,SAAS,GAAG;AAClC,UAAM,KAAK,kBAAkB,OAAO,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,EAC/D;AAEA,MAAI,OAAO,iBAAiB,SAAS,GAAG;AACtC,UAAM,KAAK,sBAAsB,OAAO,iBAAiB,KAAK,IAAI,CAAC,EAAE;AAAA,EACvE;AAEA,MAAI,OAAO,aAAa,SAAS,GAAG;AAClC,UAAM,KAAK,2BAA2B,OAAO,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,EACxE;AAEA,MAAI,OAAO,eAAe,SAAS,GAAG;AACpC,UAAM,KAAK,iCAAiC,OAAO,eAAe,KAAK,IAAI,CAAC,EAAE;AAAA,EAChF;AAEA,MAAI,OAAO,oBAAoB,SAAS,GAAG;AACzC,UAAM,KAAK,yBAAyB,OAAO,oBAAoB,KAAK,IAAI,CAAC,EAAE;AAC3E,UAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF,WAAW,CAAC,OAAO,wBAAwB;AACzC,UAAM,KAAK,gDAAgD;AAAA,EAC7D,OAAO;AACL,UAAM,KAAK,gDAAgD;AAAA,EAC7D;AAEA,SAAO,GAAG,MAAM,KAAK,IAAI,CAAC;AAAA;AAC5B;AAEO,IAAM,eAAe,CAAC,YAAqD;AAChF,QAAM,SAA6B;AAAA,IACjC,wBAAwB;AAAA,IACxB,cAAc,CAAC;AAAA,IACf,qBAAqB,CAAC;AAAA,IACtB,kBAAkB,CAAC;AAAA,IACnB,cAAc,CAAC;AAAA,IACf,gBAAgB,CAAC;AAAA,EACnB;AAEA,QAAM,EAAE,aAAa,gBAAgB,IAAI,gBAAgB,QAAQ,OAAO;AAExE,aAAW,CAAC,kBAAkB,MAAM,KAAK,sBAAsB,GAAG;AAChE,qBAAiB,QAAQ,SAAS,kBAAkB,QAAQ,QAAQ,OAAO,MAAM;AAAA,EACnF;AAEA,sBAAoB,aAAa,iBAAiB,MAAM;AAExD,SAAO,sBAAsB,uBAAuB,WAAW;AAC/D,SAAO,yBAAyB,OAAO,oBAAoB,WAAW;AAEtE,SAAO;AACT;","names":["path","fs","path"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// src/docs/docHeadings.ts
|
|
2
|
+
var normalizeWhitespace = (value) => value.replace(/\s+/g, " ").trim();
|
|
3
|
+
var slugifyHeading = (value) => {
|
|
4
|
+
const normalized = normalizeWhitespace(value).normalize("NFKD").toLowerCase().replace(/['"]/g, "").replace(/[^\p{Letter}\p{Number}\s-]/gu, " ").replace(/\s+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
|
|
5
|
+
return normalized || "section";
|
|
6
|
+
};
|
|
7
|
+
var createHeadingSlugger = () => {
|
|
8
|
+
const slugCounts = /* @__PURE__ */ new Map();
|
|
9
|
+
return (value) => {
|
|
10
|
+
const baseSlug = slugifyHeading(value);
|
|
11
|
+
const count = slugCounts.get(baseSlug) ?? 0;
|
|
12
|
+
slugCounts.set(baseSlug, count + 1);
|
|
13
|
+
return count === 0 ? baseSlug : `${baseSlug}-${count}`;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
var stripInlineMarkdown = (value) => {
|
|
17
|
+
return normalizeWhitespace(
|
|
18
|
+
value.replace(/!\[([^\]]*)\]\([^)]+\)/g, "$1").replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").replace(/`([^`]+)`/g, "$1").replace(/<[^>]+>/g, " ").replace(/\\([\\`*_[\]{}()#+\-.!])/g, "$1").replace(/[*_~]/g, "").replace(/\{[^}]+\}/g, " ")
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
var getFenceMarker = (line) => {
|
|
22
|
+
const match = line.match(/^\s{0,3}(`{3,}|~{3,})/);
|
|
23
|
+
return match?.[1]?.[0] ?? null;
|
|
24
|
+
};
|
|
25
|
+
var extractDocHeadings = (source, minDepth = 2, maxDepth = 3) => {
|
|
26
|
+
const slugify = createHeadingSlugger();
|
|
27
|
+
const headings = [];
|
|
28
|
+
let activeFenceMarker = null;
|
|
29
|
+
for (const line of source.split("\n")) {
|
|
30
|
+
const fenceMarker = getFenceMarker(line);
|
|
31
|
+
if (activeFenceMarker) {
|
|
32
|
+
if (fenceMarker === activeFenceMarker) {
|
|
33
|
+
activeFenceMarker = null;
|
|
34
|
+
}
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (fenceMarker) {
|
|
38
|
+
activeFenceMarker = fenceMarker;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const match = line.match(/^\s{0,3}(#{1,6})\s+(.*?)(?:\s+#+\s*)?$/);
|
|
42
|
+
if (!match) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const depth = match[1].length;
|
|
46
|
+
const title = stripInlineMarkdown(match[2] ?? "");
|
|
47
|
+
if (!title || depth < minDepth || depth > maxDepth) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
headings.push({
|
|
51
|
+
depth,
|
|
52
|
+
id: slugify(title),
|
|
53
|
+
title
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return headings;
|
|
57
|
+
};
|
|
58
|
+
var normalizeHeadingTitle = (value) => normalizeWhitespace(value);
|
|
59
|
+
|
|
60
|
+
export {
|
|
61
|
+
createHeadingSlugger,
|
|
62
|
+
extractDocHeadings,
|
|
63
|
+
normalizeHeadingTitle
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=chunk-SOVTSE5J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/docs/docHeadings.ts"],"sourcesContent":["import type { DocHeading } from './types.js'\n\nconst normalizeWhitespace = (value: string) => value.replace(/\\s+/g, ' ').trim()\n\nconst slugifyHeading = (value: string) => {\n const normalized = normalizeWhitespace(value)\n .normalize('NFKD')\n .toLowerCase()\n .replace(/['\"]/g, '')\n .replace(/[^\\p{Letter}\\p{Number}\\s-]/gu, ' ')\n .replace(/\\s+/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-+|-+$/g, '')\n\n return normalized || 'section'\n}\n\nexport const createHeadingSlugger = () => {\n const slugCounts = new Map<string, number>()\n\n return (value: string) => {\n const baseSlug = slugifyHeading(value)\n const count = slugCounts.get(baseSlug) ?? 0\n slugCounts.set(baseSlug, count + 1)\n\n return count === 0 ? baseSlug : `${baseSlug}-${count}`\n }\n}\n\nconst stripInlineMarkdown = (value: string) => {\n return normalizeWhitespace(\n value\n .replace(/!\\[([^\\]]*)\\]\\([^)]+\\)/g, '$1')\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1')\n .replace(/`([^`]+)`/g, '$1')\n .replace(/<[^>]+>/g, ' ')\n .replace(/\\\\([\\\\`*_[\\]{}()#+\\-.!])/g, '$1')\n .replace(/[*_~]/g, '')\n .replace(/\\{[^}]+\\}/g, ' '),\n )\n}\n\nconst getFenceMarker = (line: string) => {\n const match = line.match(/^\\s{0,3}(`{3,}|~{3,})/)\n return match?.[1]?.[0] ?? null\n}\n\nexport const extractDocHeadings = (source: string, minDepth = 2, maxDepth = 3): DocHeading[] => {\n const slugify = createHeadingSlugger()\n const headings: DocHeading[] = []\n let activeFenceMarker: string | null = null\n\n for (const line of source.split('\\n')) {\n const fenceMarker = getFenceMarker(line)\n\n if (activeFenceMarker) {\n if (fenceMarker === activeFenceMarker) {\n activeFenceMarker = null\n }\n continue\n }\n\n if (fenceMarker) {\n activeFenceMarker = fenceMarker\n continue\n }\n\n const match = line.match(/^\\s{0,3}(#{1,6})\\s+(.*?)(?:\\s+#+\\s*)?$/)\n if (!match) {\n continue\n }\n\n const depth = match[1].length\n const title = stripInlineMarkdown(match[2] ?? '')\n if (!title || depth < minDepth || depth > maxDepth) {\n continue\n }\n\n headings.push({\n depth,\n id: slugify(title),\n title,\n })\n }\n\n return headings\n}\n\nexport const normalizeHeadingTitle = (value: string) => normalizeWhitespace(value)\n"],"mappings":";AAEA,IAAM,sBAAsB,CAAC,UAAkB,MAAM,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAE/E,IAAM,iBAAiB,CAAC,UAAkB;AACxC,QAAM,aAAa,oBAAoB,KAAK,EACzC,UAAU,MAAM,EAChB,YAAY,EACZ,QAAQ,SAAS,EAAE,EACnB,QAAQ,gCAAgC,GAAG,EAC3C,QAAQ,QAAQ,GAAG,EACnB,QAAQ,OAAO,GAAG,EAClB,QAAQ,YAAY,EAAE;AAEzB,SAAO,cAAc;AACvB;AAEO,IAAM,uBAAuB,MAAM;AACxC,QAAM,aAAa,oBAAI,IAAoB;AAE3C,SAAO,CAAC,UAAkB;AACxB,UAAM,WAAW,eAAe,KAAK;AACrC,UAAM,QAAQ,WAAW,IAAI,QAAQ,KAAK;AAC1C,eAAW,IAAI,UAAU,QAAQ,CAAC;AAElC,WAAO,UAAU,IAAI,WAAW,GAAG,QAAQ,IAAI,KAAK;AAAA,EACtD;AACF;AAEA,IAAM,sBAAsB,CAAC,UAAkB;AAC7C,SAAO;AAAA,IACL,MACG,QAAQ,2BAA2B,IAAI,EACvC,QAAQ,0BAA0B,IAAI,EACtC,QAAQ,cAAc,IAAI,EAC1B,QAAQ,YAAY,GAAG,EACvB,QAAQ,6BAA6B,IAAI,EACzC,QAAQ,UAAU,EAAE,EACpB,QAAQ,cAAc,GAAG;AAAA,EAC9B;AACF;AAEA,IAAM,iBAAiB,CAAC,SAAiB;AACvC,QAAM,QAAQ,KAAK,MAAM,uBAAuB;AAChD,SAAO,QAAQ,CAAC,IAAI,CAAC,KAAK;AAC5B;AAEO,IAAM,qBAAqB,CAAC,QAAgB,WAAW,GAAG,WAAW,MAAoB;AAC9F,QAAM,UAAU,qBAAqB;AACrC,QAAM,WAAyB,CAAC;AAChC,MAAI,oBAAmC;AAEvC,aAAW,QAAQ,OAAO,MAAM,IAAI,GAAG;AACrC,UAAM,cAAc,eAAe,IAAI;AAEvC,QAAI,mBAAmB;AACrB,UAAI,gBAAgB,mBAAmB;AACrC,4BAAoB;AAAA,MACtB;AACA;AAAA,IACF;AAEA,QAAI,aAAa;AACf,0BAAoB;AACpB;AAAA,IACF;AAEA,UAAM,QAAQ,KAAK,MAAM,wCAAwC;AACjE,QAAI,CAAC,OAAO;AACV;AAAA,IACF;AAEA,UAAM,QAAQ,MAAM,CAAC,EAAE;AACvB,UAAM,QAAQ,oBAAoB,MAAM,CAAC,KAAK,EAAE;AAChD,QAAI,CAAC,SAAS,QAAQ,YAAY,QAAQ,UAAU;AAClD;AAAA,IACF;AAEA,aAAS,KAAK;AAAA,MACZ;AAAA,MACA,IAAI,QAAQ,KAAK;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,IAAM,wBAAwB,CAAC,UAAkB,oBAAoB,KAAK;","names":[]}
|
|
@@ -3,8 +3,9 @@ import {
|
|
|
3
3
|
useUniversalMdxRuntime
|
|
4
4
|
} from "./chunk-L6ZVB6XH.js";
|
|
5
5
|
import {
|
|
6
|
+
isExternalHref,
|
|
6
7
|
withSiteBaseUrl
|
|
7
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-CL74JUQ4.js";
|
|
8
9
|
|
|
9
10
|
// src/mdx/code-blocks/ChoiceGroup.tsx
|
|
10
11
|
import { Children, isValidElement, useRef as useRef2 } from "react";
|
|
@@ -452,8 +453,8 @@ var determineSectionTitle = (href) => {
|
|
|
452
453
|
}
|
|
453
454
|
return hash.split(":~:text")[0]?.split("-").map((word, index) => index === 0 ? `${word[0]?.toUpperCase() ?? ""}${word.slice(1)}` : word).join(" ");
|
|
454
455
|
};
|
|
455
|
-
var
|
|
456
|
-
return
|
|
456
|
+
var isDocsRelativeHref = (href) => {
|
|
457
|
+
return !href.startsWith("/") && !href.startsWith("#") && !isExternalHref(href) && !href.startsWith("./") && !href.startsWith("../");
|
|
457
458
|
};
|
|
458
459
|
var renderLabelPart = (value) => {
|
|
459
460
|
return typeof value === "string" ? parseMarkdownMini(value) : value;
|
|
@@ -499,8 +500,8 @@ var Link = ({
|
|
|
499
500
|
return /* @__PURE__ */ jsx8("a", { className: cmMerge4(className, "inline-flex gap-1 items-center"), ...props, children: text ?? children ?? "LINK-TARGET-NOT-FOUND" });
|
|
500
501
|
}
|
|
501
502
|
assertUsage(
|
|
502
|
-
href.startsWith("/") || href.startsWith("#") || isExternalHref(href),
|
|
503
|
-
`<Link href /> prop \`href==='${href}'\` but should be external or start with '/' or '#'`
|
|
503
|
+
href.startsWith("/") || href.startsWith("#") || isExternalHref(href) || isDocsRelativeHref(href),
|
|
504
|
+
`<Link href /> prop \`href==='${href}'\` but should be external, docs-relative, or start with '/' or '#'`
|
|
504
505
|
);
|
|
505
506
|
assertUsage(!text || !children, "Cannot use both `text` or `children`");
|
|
506
507
|
const content = text ?? children;
|
|
@@ -648,4 +649,4 @@ export {
|
|
|
648
649
|
RepoLink,
|
|
649
650
|
Table
|
|
650
651
|
};
|
|
651
|
-
//# sourceMappingURL=chunk-
|
|
652
|
+
//# sourceMappingURL=chunk-XTBGSCAZ.js.map
|
|
@@ -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/useRestoreScroll.ts","../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, useRef } from 'react'\nimport { CodeBlockHeaderMeta } from './CodeBlockHeaderMeta.js'\nimport { CodeBlockCopyButton, trimTrailingWhitespace } from './CopyButton.js'\nimport { CodeBlockGroupProvider } from './context.js'\nimport { useRestoreScroll } from './useRestoreScroll.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 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=\"mt-5 mb-5 flex h-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\">\n <select\n name={`choicesFor-${choiceGroup.name}`}\n value={activeChoiceElement.props['data-choice-value']}\n onChange={(event) => {\n previousPositionRef.current = {\n top: event.currentTarget.getBoundingClientRect().top,\n element: event.currentTarget,\n }\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 ref={bodyRef} className=\"h-full flex-1 bg-base-200! [&>*:first-child]:mt-0 [&>*:last-child]:mb-0\">\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 <div className=\"font-mono text-xs font-semibold text-base-muted\">{label}</div>\n {env && <StyledBadge $env={effectiveEnv}>{env}</StyledBadge>}\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, useRef } from 'react'\n\ntype ScrollPosition = {\n top: number\n element: Element\n}\n\nexport const useRestoreScroll = (deps: ReadonlyArray<unknown>) => {\n const previousPositionRef = useRef<ScrollPosition | null>(null)\n\n useEffect(() => {\n if (!previousPositionRef.current) {\n return\n }\n\n const { top, element } = previousPositionRef.current\n const delta = element.getBoundingClientRect().top - top\n\n if (delta !== 0) {\n window.scrollBy(0, delta)\n }\n\n previousPositionRef.current = null\n // biome-ignore lint/correctness/useExhaustiveDependencies: restore only when the tracked value changes\n }, deps)\n\n return previousPositionRef\n}\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 not-prose overflow-hidden',\n isInChoiceGroup ? '' : 'mb-6 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('doc-code-pre m-0 h-full overflow-x-auto bg-base-200! p-4 text-sm', className)}\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 mt-5\n mb-5\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 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}\n\ntype OverviewDividerItem = {\n dividerText: ReactNode\n}\n\nexport type OverviewItem = OverviewLinkItem | OverviewDividerItem\n\ninterface OverviewProps {\n items: Array<string | OverviewItem>\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 }: OverviewLinkItem) => {\n return (\n <a\n href={withSiteBaseUrl(href)}\n className=\"group flex h-full flex-col gap-3 rounded-box border border-base-muted-light bg-base-muted-superlight p-5 no-underline hover:border-primary-muted-medium hover:bg-base-muted-superlight/50\"\n >\n <h3 className=\"text-lg font-semibold text-base-content\">{renderInlineMarkdown(title)}</h3>\n {excerpt ? <p className=\"text-sm leading-relaxed text-base-muted\">{renderInlineMarkdown(excerpt)}</p> : null}\n </a>\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 }: 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-4 sm:grid-cols-2\">\n {group.items.map((item, itemIndex) => (\n <OverviewCard {...item} key={item.href || itemIndex} />\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 > <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":"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","names":["useRef","jsx","jsx","useEffect","useState","useState","useEffect","jsx","jsxs","useRef","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","jsx","jsxs","assertUsage","jsx","jsxs","cm","jsx","jsxs"]}
|
package/dist/cli.js
CHANGED
|
@@ -3,9 +3,9 @@ import {
|
|
|
3
3
|
initConsumer,
|
|
4
4
|
loadDocsConfig,
|
|
5
5
|
syncGeneratedDocsPages
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-G7DN5RH7.js";
|
|
7
|
+
import "./chunk-SOVTSE5J.js";
|
|
8
|
+
import "./chunk-CL74JUQ4.js";
|
|
9
9
|
|
|
10
10
|
// src/cli.ts
|
|
11
11
|
import path from "path";
|
package/dist/client.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ 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-
|
|
5
|
+
import { g as DocsConfig, T as ThemePreference, r as DocsThemeConfig } from './types-Dj-zbZbD.js';
|
|
6
6
|
import * as zustand_middleware from 'zustand/middleware';
|
|
7
7
|
import * as zustand from 'zustand';
|
|
8
8
|
|
package/dist/client.js
CHANGED
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
UserSettingsSync,
|
|
9
9
|
applyThemePreference,
|
|
10
10
|
useDocsUserSettingsStore
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-DSQGGUBC.js";
|
|
12
|
+
import "./chunk-SOVTSE5J.js";
|
|
13
13
|
import "./chunk-L6ZVB6XH.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-CL74JUQ4.js";
|
|
15
15
|
export {
|
|
16
16
|
AppLayout,
|
|
17
17
|
DEFAULT_THEME_PREFERENCE,
|
package/dist/config.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { g as DocsConfig, j as DocsGraph } from './types-
|
|
1
|
+
import { g as DocsConfig, j as DocsGraph } from './types-Dj-zbZbD.js';
|
|
2
2
|
|
|
3
3
|
declare const defineDocsConfig: (config: DocsConfig) => DocsConfig;
|
|
4
4
|
declare const defineDocsGraph: (graph: DocsGraph) => DocsGraph;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
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-
|
|
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-Dj-zbZbD.js';
|
|
3
3
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
4
4
|
import { ReactNode, ComponentPropsWithoutRef, PropsWithChildren } from 'react';
|
|
5
5
|
|
|
@@ -86,6 +86,7 @@ interface TableProps {
|
|
|
86
86
|
size?: 'sm' | 'md' | 'lg';
|
|
87
87
|
data: TableData;
|
|
88
88
|
}
|
|
89
|
+
/** @deprecated - do not use pls */
|
|
89
90
|
declare const Table: ({ size, data }: TableProps) => react_jsx_runtime.JSX.Element;
|
|
90
91
|
|
|
91
92
|
type UniversalMdxTranslationFn = (group: string, key: string) => string;
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
Pre,
|
|
10
10
|
RepoLink,
|
|
11
11
|
Table
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-XTBGSCAZ.js";
|
|
13
13
|
import {
|
|
14
14
|
defineDocsConfig,
|
|
15
15
|
defineDocsGraph
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
baseAssets,
|
|
24
24
|
nivelAssetUrl,
|
|
25
25
|
nivelPublicRoute
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-CL74JUQ4.js";
|
|
27
27
|
export {
|
|
28
28
|
Alert,
|
|
29
29
|
ChoiceGroup,
|
|
@@ -15,7 +15,7 @@ declare const parseMetaString: <Name extends string = string>(meta: unknown, pro
|
|
|
15
15
|
declare const stripMetaProps: <Name extends string = string>(meta: unknown, propNames: Name[]) => string;
|
|
16
16
|
declare const getCodeBlockPropsFromMeta: (meta: unknown) => {
|
|
17
17
|
props: Record<string, string>;
|
|
18
|
-
env: "
|
|
18
|
+
env: "client" | "server" | null;
|
|
19
19
|
title: string | null;
|
|
20
20
|
};
|
|
21
21
|
|
package/dist/mdx.js
CHANGED
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
Pre,
|
|
10
10
|
RepoLink,
|
|
11
11
|
Table
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-XTBGSCAZ.js";
|
|
13
13
|
import "./chunk-JSZZPQEP.js";
|
|
14
14
|
import "./chunk-L6ZVB6XH.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-CL74JUQ4.js";
|
|
16
16
|
|
|
17
17
|
// src/mdx/index.ts
|
|
18
18
|
var useMDXComponents = (components) => {
|
package/dist/runtime/client.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ export { AppLayout, DEFAULT_THEME_PREFERENCE, DocsPage, LayoutComponent, MetaHea
|
|
|
2
2
|
import 'react/jsx-runtime';
|
|
3
3
|
import 'react';
|
|
4
4
|
import '@classmatejs/react';
|
|
5
|
-
import '../types-
|
|
5
|
+
import '../types-Dj-zbZbD.js';
|
|
6
6
|
import 'zustand/middleware';
|
|
7
7
|
import 'zustand';
|
package/dist/runtime/client.js
CHANGED
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
UserSettingsSync,
|
|
9
9
|
applyThemePreference,
|
|
10
10
|
useDocsUserSettingsStore
|
|
11
|
-
} from "../chunk-
|
|
12
|
-
import "../chunk-
|
|
11
|
+
} from "../chunk-DSQGGUBC.js";
|
|
12
|
+
import "../chunk-SOVTSE5J.js";
|
|
13
13
|
import "../chunk-L6ZVB6XH.js";
|
|
14
|
-
import "../chunk-
|
|
14
|
+
import "../chunk-CL74JUQ4.js";
|
|
15
15
|
export {
|
|
16
16
|
AppLayout,
|
|
17
17
|
DEFAULT_THEME_PREFERENCE,
|
package/dist/runtime/node.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { z as ResolvedDocsPage, g as DocsConfig, v as ResolvedDocsConfig } from '../types-
|
|
1
|
+
import { z as ResolvedDocsPage, g as DocsConfig, v as ResolvedDocsConfig } from '../types-Dj-zbZbD.js';
|
|
2
2
|
import { Plugin } from 'vite';
|
|
3
3
|
|
|
4
|
+
declare const resolveDocsHref: (basePath: string, href: string) => string | null;
|
|
4
5
|
declare const resolveDocsConfig: (config: DocsConfig) => ResolvedDocsConfig;
|
|
5
6
|
declare const getResolvedPageById: (config: {
|
|
6
7
|
pages: ResolvedDocsPage[];
|
|
@@ -34,4 +35,4 @@ type InitConsumerResult = {
|
|
|
34
35
|
declare const getInitSummary: (result: InitConsumerResult) => string;
|
|
35
36
|
declare const initConsumer: (options: InitConsumerOptions) => InitConsumerResult;
|
|
36
37
|
|
|
37
|
-
export { getGeneratedPagesRoot, getInitSummary, getResolvedPageById, initConsumer, loadDocsConfig, nivelPagesPlugin, resolveDocsConfig, syncGeneratedDocsPages };
|
|
38
|
+
export { getGeneratedPagesRoot, getInitSummary, getResolvedPageById, initConsumer, loadDocsConfig, nivelPagesPlugin, resolveDocsConfig, resolveDocsHref, syncGeneratedDocsPages };
|
package/dist/runtime/node.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import {
|
|
2
2
|
nivelPagesPlugin
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-4XQN7OBV.js";
|
|
4
4
|
import {
|
|
5
5
|
getGeneratedPagesRoot,
|
|
6
6
|
getInitSummary,
|
|
7
7
|
initConsumer,
|
|
8
8
|
loadDocsConfig,
|
|
9
9
|
syncGeneratedDocsPages
|
|
10
|
-
} from "../chunk-
|
|
10
|
+
} from "../chunk-G7DN5RH7.js";
|
|
11
|
+
import "../chunk-SOVTSE5J.js";
|
|
11
12
|
import {
|
|
12
13
|
getResolvedPageById,
|
|
13
|
-
resolveDocsConfig
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
resolveDocsConfig,
|
|
15
|
+
resolveDocsHref
|
|
16
|
+
} from "../chunk-CL74JUQ4.js";
|
|
16
17
|
export {
|
|
17
18
|
getGeneratedPagesRoot,
|
|
18
19
|
getInitSummary,
|
|
@@ -21,6 +22,7 @@ export {
|
|
|
21
22
|
loadDocsConfig,
|
|
22
23
|
nivelPagesPlugin,
|
|
23
24
|
resolveDocsConfig,
|
|
25
|
+
resolveDocsHref,
|
|
24
26
|
syncGeneratedDocsPages
|
|
25
27
|
};
|
|
26
28
|
//# sourceMappingURL=node.js.map
|
|
@@ -89,7 +89,8 @@ type DocsGraph = {
|
|
|
89
89
|
type DocsConfig = {
|
|
90
90
|
siteTitle: string;
|
|
91
91
|
siteDescription?: string;
|
|
92
|
-
basePath:
|
|
92
|
+
basePath: string;
|
|
93
|
+
contentDir?: string;
|
|
93
94
|
graph: DocsGraph;
|
|
94
95
|
theme?: DocsThemeConfig;
|
|
95
96
|
footer?: DocsFooterConfig;
|
|
@@ -135,7 +136,8 @@ type DocHeading = {
|
|
|
135
136
|
id: string;
|
|
136
137
|
title: string;
|
|
137
138
|
};
|
|
138
|
-
type ResolvedDocsPage = DocsPageNode & {
|
|
139
|
+
type ResolvedDocsPage = Omit<DocsPageNode, 'aliases'> & {
|
|
140
|
+
aliases: string[];
|
|
139
141
|
href: string;
|
|
140
142
|
aliasHrefs: string[];
|
|
141
143
|
tableOfContents: boolean;
|
|
@@ -175,7 +177,8 @@ type ResolvedNavbarItem = {
|
|
|
175
177
|
type ResolvedDocsConfig = {
|
|
176
178
|
siteTitle: string;
|
|
177
179
|
siteDescription: string | null;
|
|
178
|
-
basePath:
|
|
180
|
+
basePath: string;
|
|
181
|
+
contentDir: string;
|
|
179
182
|
theme: Required<DocsThemeConfig>;
|
|
180
183
|
footer: Required<DocsFooterConfig>;
|
|
181
184
|
brand: ResolvedDocsBrandConfig;
|
package/dist/vike.d.ts
CHANGED