diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-09-01 14:48:45 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-09-01 14:48:45 +0300 |
| commit | 8a6d697308162874a236c84aac0b0f8c7ac01f83 (patch) | |
| tree | ed7dc7e8c6f50d66bde721fae78576aede929f66 /website/src/docs-path.ts | |
| parent | b54a78aa510b87d1e3b56c619b72eaeb59e4a2a1 (diff) | |
refactor: separate website presentation from runtime
Diffstat (limited to 'website/src/docs-path.ts')
| -rw-r--r-- | website/src/docs-path.ts | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/website/src/docs-path.ts b/website/src/docs-path.ts deleted file mode 100644 index 53ace41d..00000000 --- a/website/src/docs-path.ts +++ /dev/null @@ -1,87 +0,0 @@ -const docsLocales = new Set(['ja', 'zh-cn']); -const docsVersionPattern = /^\d+\.\d+\.\d+$/; - -export type DocsTarget = 'stable' | 'preview' | string; - -export interface DocsRoute { - isDocs: boolean; - locale: string | undefined; - target: DocsTarget; - page: string; -} - -export interface DocsScope { - locales: Record<string, string[]>; -} - -export function docsRoute(pathname: string): DocsRoute { - const segments = pathname.split('/').filter(Boolean); - let locale: string | undefined; - - if (segments[0] && docsLocales.has(segments[0])) { - locale = segments.shift(); - } - - if (segments.shift() !== 'docs') { - return { isDocs: false, locale, target: 'stable', page: '' }; - } - - let target: DocsTarget = 'stable'; - if (segments[0] === 'preview') { - target = 'preview'; - segments.shift(); - } else if (segments[0] && docsVersionPattern.test(segments[0])) { - target = segments.shift()!; - } - - return { - isDocs: true, - locale, - target, - page: segments.join('/'), - }; -} - -export function docsVersion(pathname: string) { - return docsRoute(pathname).target; -} - -export function docsTargetHref( - route: DocsRoute, - target: DocsTarget, - scopes?: Record<string, DocsScope>, -) { - if (!route.isDocs) throw new Error('cannot build a documentation target from a non-docs route'); - - const localeKey = route.locale ?? 'root'; - const availablePages = scopes?.[target]?.locales[localeKey]; - const page = availablePages?.includes(route.page) === false ? '' : route.page; - const prefix = route.locale ? `/${route.locale}` : ''; - const targetSegment = target === 'stable' ? '' : `/${target}`; - return `${prefix}/docs${targetSegment}${page ? `/${page}` : ''}/`; -} - -export function docsPath({ entry }: { entry: string }) { - const slug = entry.replace(/\.(md|mdx|markdown|mdown|mkdn|mkd|mdwn)$/i, ''); - const normalized = slug.replace(/\/index$/, ''); - const segments = normalized.split('/'); - - let targetSegment = ''; - if (segments[0] === 'preview') { - targetSegment = 'preview'; - segments.shift(); - } else if (segments[0] === '_versions' && segments[1] && docsVersionPattern.test(segments[1])) { - segments.shift(); - targetSegment = segments.shift()!; - } - - let locale: string | undefined; - if (segments[0] && docsLocales.has(segments[0])) { - locale = segments.shift(); - } - - const page = segments.join('/'); - const prefix = locale ? `${locale}/` : ''; - const target = targetSegment ? `/${targetSegment}` : ''; - return `${prefix}docs${target}${page && page !== 'index' ? `/${page}` : ''}`; -} |
