format files

pull/4692/head
Okinea Dev 5 months ago
parent 673db7d4b6
commit 5c83259896
No known key found for this signature in database
GPG Key ID: 07944BC5E01E7B43

@ -122,7 +122,7 @@ export const shared = defineConfig({
),
firebase: 'logos:firebase'
}
}),
})
]
},
llms: {

@ -243,7 +243,7 @@ export async function resolveSiteData(
scrollOffset: userConfig.scrollOffset ?? 134,
cleanUrls: !!userConfig.cleanUrls,
contentProps: userConfig.contentProps,
llms: userConfig.llms ?? false,
llms: userConfig.llms ?? false
}
}

@ -9,7 +9,7 @@ import type {
LinksExtension,
LlmstxtSettings,
PreparedFile,
VitePressConfig,
VitePressConfig
} from '../types'
import { generateTOC } from './toc'
import { expandTemplate, extractTitle, generateMetadata } from './utils'
@ -70,7 +70,7 @@ export interface GenerateLLMsTxtOptions {
*/
export async function generateLLMsTxt(
preparedFiles: PreparedFile[],
options: GenerateLLMsTxtOptions,
options: GenerateLLMsTxtOptions
): Promise<string> {
const {
indexMd,
@ -81,7 +81,7 @@ export async function generateLLMsTxt(
domain,
sidebar,
linksExtension,
cleanUrls,
cleanUrls
} = options
// @ts-expect-error
@ -119,7 +119,7 @@ export async function generateLLMsTxt(
domain,
sidebarConfig: sidebar || vitepressConfig?.themeConfig?.sidebar,
linksExtension,
cleanUrls,
cleanUrls
})
return expandTemplate(LLMsTxtTemplate, templateVariables)
@ -151,7 +151,7 @@ export interface GenerateLLMsFullTxtOptions {
*/
export function generateLLMsFullTxt(
preparedFiles: PreparedFile[],
options: GenerateLLMsFullTxtOptions,
options: GenerateLLMsFullTxtOptions
) {
const { srcDir, domain, linksExtension, cleanUrls } = options
@ -165,8 +165,8 @@ export function generateLLMsFullTxt(
domain,
filePath: relativePath,
linksExtension,
cleanUrls,
}),
cleanUrls
})
)
})
.join('\n---\n\n')

@ -37,7 +37,7 @@ const log = {
* @param message - The message to log.
*/
error: (message: string) =>
console.error(`${logPrefix}${pc.red('✗')} ${pc.red(message)}`),
console.error(`${logPrefix}${pc.red('✗')} ${pc.red(message)}`)
}
export default log

@ -4,7 +4,7 @@ import type {
LinksExtension,
LlmstxtSettings,
PreparedFile,
VitePressConfig,
VitePressConfig
} from '../types'
import { generateLink, stripExtPosix } from './utils'
@ -23,7 +23,7 @@ export const generateTOCLink = (
domain: LlmstxtSettings['domain'],
relativePath: string,
extension?: LinksExtension,
cleanUrls: VitePressConfig['cleanUrls'] = false,
cleanUrls: VitePressConfig['cleanUrls'] = false
) => {
const description: string = file.file.data.description
return `- [${file.title}](${generateLink(stripExtPosix(relativePath), domain, extension ?? '.md', cleanUrls)})${description ? `: ${description.trim()}` : ''}\n`
@ -36,7 +36,7 @@ export const generateTOCLink = (
* @returns Array of paths collected from the sidebar items.
*/
function collectPathsFromSidebarItems(
items: DefaultTheme.SidebarItem[],
items: DefaultTheme.SidebarItem[]
): string[] {
const paths: string[] = []
@ -106,7 +106,7 @@ async function processSidebarSection(
domain?: LlmstxtSettings['domain'],
linksExtension?: LinksExtension,
cleanUrls?: VitePressConfig['cleanUrls'],
depth = 3,
depth = 3
): Promise<string> {
let sectionTOC = ''
@ -133,7 +133,7 @@ async function processSidebarSection(
linksExtension,
cleanUrls,
// Increase depth for nested sections to maintain proper heading levels
depth + 1,
depth + 1
)
nestedSections.push(processedSection)
}
@ -155,12 +155,12 @@ async function processSidebarSection(
domain,
relativePath,
linksExtension,
cleanUrls,
),
cleanUrls
)
)
}
}
}),
})
)
// Add link items if any
@ -189,7 +189,7 @@ async function processSidebarSection(
* @returns An array of sidebar items.
*/
function flattenSidebarConfig(
sidebarConfig: DefaultTheme.Sidebar,
sidebarConfig: DefaultTheme.Sidebar
): DefaultTheme.SidebarItem[] {
// If it's already an array, return as is
if (Array.isArray(sidebarConfig)) {
@ -245,7 +245,7 @@ export interface GenerateTOCOptions {
*/
export async function generateTOC(
preparedFiles: PreparedFile[],
options: GenerateTOCOptions,
options: GenerateTOCOptions
): Promise<string> {
const { srcDir, domain, sidebarConfig, linksExtension, cleanUrls } = options
let tableOfContent = ''
@ -266,7 +266,7 @@ export async function generateTOC(
srcDir,
domain,
linksExtension,
cleanUrls,
cleanUrls
)
// tableOfContent = `${tableOfContent.trimEnd()}\n\n`
@ -275,12 +275,12 @@ export async function generateTOC(
// Find files that didn't match any section
const allSidebarPaths = collectPathsFromSidebarItems(
flattenedSidebarConfig,
flattenedSidebarConfig
)
const unsortedFiles = filesToProcess.filter((file) => {
const relativePath = `/${stripExtPosix(path.relative(srcDir, file.path))}`
return !allSidebarPaths.some((sidebarPath) =>
isPathMatch(relativePath, sidebarPath),
isPathMatch(relativePath, sidebarPath)
)
})
@ -298,9 +298,9 @@ export async function generateTOC(
filesToProcess.map(async (file) => {
const relativePath = path.relative(srcDir, file.path)
tocEntries.push(
generateTOCLink(file, domain, relativePath, linksExtension, cleanUrls),
generateTOCLink(file, domain, relativePath, linksExtension, cleanUrls)
)
}),
})
)
tableOfContent += tocEntries.join('')

@ -13,7 +13,7 @@ import type { LinksExtension, LlmstxtSettings, VitePressConfig } from '../types'
*/
export const splitDirAndFile = (filepath: string) => ({
dir: path.dirname(filepath),
file: path.basename(filepath),
file: path.basename(filepath)
})
/**
@ -92,7 +92,7 @@ export function replaceTemplateVariable(
content: string,
variable: string,
value: string | undefined,
fallback?: string,
fallback?: string
) {
return content.replace(templateVariable(variable), (_, prefix) => {
const val = value?.length ? value : fallback?.length ? fallback : ''
@ -117,11 +117,11 @@ export function replaceTemplateVariable(
*/
export const expandTemplate = (
template: string,
variables: Record<string, string | undefined>,
variables: Record<string, string | undefined>
) => {
return Object.entries(variables).reduce(
(result, [key, value]) => replaceTemplateVariable(result, key, value),
template,
template
)
}
@ -137,12 +137,12 @@ export const generateLink = (
path: string,
domain?: string,
extension?: LinksExtension,
cleanUrls?: VitePressConfig['cleanUrls'],
cleanUrls?: VitePressConfig['cleanUrls']
) =>
expandTemplate('{domain}/{path}{extension}', {
domain: domain || '',
path,
extension: cleanUrls ? '' : extension,
extension: cleanUrls ? '' : extension
})
/**
@ -175,7 +175,7 @@ export interface GenerateMetadataOptions {
*/
export function generateMetadata<GrayMatter extends GrayMatterFile<Input>>(
sourceFile: GrayMatter,
options: GenerateMetadataOptions,
options: GenerateMetadataOptions
) {
const { domain, filePath, linksExtension, cleanUrls } = options
const frontmatterMetadata: Record<string, string> = {}
@ -184,7 +184,7 @@ export function generateMetadata<GrayMatter extends GrayMatterFile<Input>>(
stripExtPosix(filePath),
domain,
linksExtension ?? '.md',
cleanUrls,
cleanUrls
)
if (sourceFile.data?.description?.length) {

@ -21,13 +21,13 @@ import {
extractTitle,
generateMetadata,
getHumanReadableSizeOf,
stripExt,
stripExt
} from './helpers/utils'
import type {
CustomTemplateVariables,
LlmstxtSettings,
PreparedFile,
VitePressConfig,
VitePressConfig
} from './types'
const PLUGIN_NAME = 'llmstxt'
@ -50,7 +50,7 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
ignoreFiles: [],
workDir: undefined as unknown as string,
stripHTML: true,
...userSettings,
...userSettings
}
// Store the resolved Vite config
@ -71,7 +71,7 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
if (settings.workDir) {
settings.workDir = path.resolve(
config.vitepress.srcDir,
settings.workDir as string,
settings.workDir as string
)
} else {
settings.workDir = config.vitepress.srcDir
@ -79,7 +79,7 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
// Detect if this is the SSR build
isSsrBuild = !!resolvedConfig.build?.ssr
log.info(
`${pc.bold(PLUGIN_NAME)} initialized ${isSsrBuild ? pc.dim('(SSR build)') : pc.dim('(client build)')} with workDir: ${pc.cyan(settings.workDir as string)}`,
`${pc.bold(PLUGIN_NAME)} initialized ${isSsrBuild ? pc.dim('(SSR build)') : pc.dim('(client build)')} with workDir: ${pc.cyan(settings.workDir as string)}`
)
},
@ -92,7 +92,7 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
// Try to read and serve the markdown file
const filePath = path.resolve(
config.vitepress?.outDir ?? 'dist',
`${stripExt(req.url)}.md`,
`${stripExt(req.url)}.md`
)
const content = await fs.readFile(filePath, 'utf-8')
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
@ -143,12 +143,12 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
return await Promise.resolve(
minimatch(
path.relative(settings.workDir as string, id),
pattern,
),
pattern
)
)
}
return false
}),
})
)
if (shouldIgnore.some((result) => result === true)) {
@ -189,13 +189,13 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
// Skip if no files found
if (fileCount === 0) {
log.warn(
`No markdown files found to process. Check your \`${pc.bold('workDir')}\` and \`${pc.bold('ignoreFiles')}\` settings.`,
`No markdown files found to process. Check your \`${pc.bold('workDir')}\` and \`${pc.bold('ignoreFiles')}\` settings.`
)
return
}
log.info(
`Processing ${pc.bold(fileCount.toString())} markdown files from ${pc.cyan(settings.workDir)}`,
`Processing ${pc.bold(fileCount.toString())} markdown files from ${pc.cyan(settings.workDir)}`
)
const preparedFiles: PreparedFile[] = await Promise.all(
@ -230,7 +230,7 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
: file
return { path: filePath, title, file: mdFile }
}),
})
)
if (settings.generateLLMFriendlyDocsForEachPage) {
@ -243,7 +243,7 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
// Ensure target directory exists (async version)
await fs.mkdir(path.dirname(targetPath), {
recursive: true,
recursive: true
})
// Copy file to output directory (async version)
@ -253,19 +253,19 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
mdFile.content,
generateMetadata(mdFile, {
domain: settings.domain,
filePath: relativePath,
}),
),
filePath: relativePath
})
)
)
log.success(`Processed ${pc.cyan(relativePath)}`)
} catch (error) {
log.error(
// @ts-ignore
`Failed to process ${pc.cyan(relativePath)}: ${error.message}`,
`Failed to process ${pc.cyan(relativePath)}: ${error.message}`
)
}
}),
})
)
}
@ -282,7 +282,7 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
description: settings.description,
details: settings.details,
toc: settings.toc,
...settings.customTemplateVariables,
...settings.customTemplateVariables
}
tasks.push(
@ -301,7 +301,7 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
linksExtension: !settings.generateLLMFriendlyDocsForEachPage
? '.html'
: undefined,
cleanUrls: config.cleanUrls,
cleanUrls: config.cleanUrls
})
await fs.writeFile(llmsTxtPath, llmsTxt, 'utf-8')
@ -313,11 +313,11 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
file: pc.cyan('llms.txt'),
tokens: pc.bold(millify(approximateTokenSize(llmsTxt))),
size: pc.bold(getHumanReadableSizeOf(llmsTxt)),
fileCount: pc.bold(fileCount.toString()),
},
),
fileCount: pc.bold(fileCount.toString())
}
)
)
})(),
})()
)
}
@ -328,7 +328,7 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
tasks.push(
(async () => {
log.info(
`Generating full documentation bundle (${pc.cyan('llms-full.txt')})...`,
`Generating full documentation bundle (${pc.cyan('llms-full.txt')})...`
)
const llmsFullTxt = generateLLMsFullTxt(preparedFiles, {
@ -337,7 +337,7 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
linksExtension: !settings.generateLLMFriendlyDocsForEachPage
? '.html'
: undefined,
cleanUrls: config.cleanUrls,
cleanUrls: config.cleanUrls
})
// Write content to llms-full.txt
@ -349,17 +349,17 @@ export default function llmstxt(userSettings: LlmstxtSettings = {}): Plugin {
file: pc.cyan('llms-full.txt'),
tokens: pc.bold(millify(approximateTokenSize(llmsFullTxt))),
size: pc.bold(getHumanReadableSizeOf(llmsFullTxt)),
fileCount: pc.bold(fileCount.toString()),
},
),
fileCount: pc.bold(fileCount.toString())
}
)
})(),
)
})()
)
}
if (tasks.length) {
await Promise.all(tasks)
}
},
}
}
}

Loading…
Cancel
Save