
| Current Path : /var/www/html/konvbav/vendor/twbs/bootstrap/site/src/libs/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/html/konvbav/vendor/twbs/bootstrap/site/src/libs/examples.ts |
import type { AstroInstance } from 'astro'
import fs from 'node:fs'
import path from 'node:path'
import { z } from 'zod'
import { getDocsFsPath } from './path'
export const exampleFrontmatterSchema = z.object({
body_class: z.string().optional(),
direction: z.literal('rtl').optional(),
extra_css: z.string().array().optional(),
extra_js: z
.object({
async: z.boolean().optional(),
integrity: z.string().optional(),
src: z.string()
})
.array()
.optional(),
html_class: z.string().optional(),
include_js: z.boolean().optional(),
title: z.string()
})
export type ExampleFrontmatter = z.infer<typeof exampleFrontmatterSchema>
export function getExamplesAssets() {
const source = path.join(getDocsFsPath(), 'src/assets/examples')
return getExamplesAssetsRecursively(source)
}
export function getAliasedExamplesPages(pages: AstroInstance[]) {
return pages.filter(isAliasedAstroInstance)
}
export function getExampleNameFromPagePath(examplePath: string) {
const matches = examplePath.match(/([^/]+)\/(?:[^/]+)\.astro$/)
if (!matches || !matches[1]) {
throw new Error(`Failed to get example name from path: '${examplePath}'.`)
}
return matches[1]
}
function getExamplesAssetsRecursively(source: string, assets: string[] = []) {
const entries = fs.readdirSync(source, { withFileTypes: true })
for (const entry of entries) {
if (entry.isFile() && !entry.name.endsWith('.astro')) {
assets.push(sanitizeAssetPath(path.join(source, entry.name)))
} else if (entry.isDirectory()) {
getExamplesAssetsRecursively(path.join(source, entry.name), assets)
}
}
return assets
}
function sanitizeAssetPath(assetPath: string) {
const matches = assetPath.match(/([^\/\\]+[\/\\][^\/\\]+\.\w+)$/)
if (!matches || !matches[1]) {
throw new Error(`Failed to get example asset path from path: '${assetPath}'.`)
}
return matches[1].replaceAll('\\', '/')
}
function isAliasedAstroInstance(page: AstroInstance): page is AliasedAstroInstance {
return (page as AliasedAstroInstance).aliases !== undefined
}
type AliasedAstroInstance = AstroInstance & { aliases: string | string[] }