@clarify-labs/renderer 0.10.0 → 0.10.2
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/output/{ClarifyShell-CxhXBtsR.js → ClarifyShell-1LuBliwt.js} +124 -40
- package/output/ClarifyShell-1LuBliwt.js.map +1 -0
- package/output/{ClarifyShell-DjLRRW8T.cjs → ClarifyShell-C6li72Ce.cjs} +136 -52
- package/output/ClarifyShell-C6li72Ce.cjs.map +1 -0
- package/output/MermaidViewer-B6-BMCJG.cjs +101 -0
- package/output/MermaidViewer-B6-BMCJG.cjs.map +1 -0
- package/output/MermaidViewer-dXsomvM7.js +98 -0
- package/output/MermaidViewer-dXsomvM7.js.map +1 -0
- package/output/{OpenApiOperation-qp5tFaWP.cjs → OpenApiOperation-B52IWlKb.cjs} +405 -243
- package/output/OpenApiOperation-B52IWlKb.cjs.map +1 -0
- package/output/{OpenApiOperation-CyBkzvob.js → OpenApiOperation-DgrqzeiS.js} +377 -228
- package/output/OpenApiOperation-DgrqzeiS.js.map +1 -0
- package/output/{PageActions-GS_cxeJN.cjs → PageActions-BjB6PYmL.cjs} +73 -734
- package/output/PageActions-BjB6PYmL.cjs.map +1 -0
- package/output/{PageActions-Dn8IGWoL.js → PageActions-D7K9LDGf.js} +67 -680
- package/output/PageActions-D7K9LDGf.js.map +1 -0
- package/output/SearchDialog-CIPvXMT3.cjs +414 -0
- package/output/SearchDialog-CIPvXMT3.cjs.map +1 -0
- package/output/SearchDialog-CxYLjRi5.js +411 -0
- package/output/SearchDialog-CxYLjRi5.js.map +1 -0
- package/output/app/AppShell.d.ts +2 -2
- package/output/app/SectionHashSync.d.ts +6 -0
- package/output/client.cjs +3 -3
- package/output/client.js +3 -3
- package/output/components/HighlightedCode.d.ts +7 -0
- package/output/components/MermaidViewer.d.ts +7 -0
- package/output/context.d.ts +1 -1
- package/output/core/context.d.ts +3 -4
- package/output/core/i18n.d.ts +1 -1
- package/output/core/index.d.ts +1 -1
- package/output/core/types.d.ts +36 -19
- package/output/i18n-DnqZHFT7.js +247 -0
- package/output/i18n-DnqZHFT7.js.map +1 -0
- package/output/i18n-b4iTLeia.cjs +294 -0
- package/output/i18n-b4iTLeia.cjs.map +1 -0
- package/output/index.cjs +91 -94
- package/output/index.cjs.map +1 -1
- package/output/index.d.ts +7 -7
- package/output/index.js +83 -87
- package/output/index.js.map +1 -1
- package/output/markdown.cjs +2 -1
- package/output/markdown.d.ts +1 -1
- package/output/markdown.js +2 -2
- package/output/mdx/remark.d.ts +1 -0
- package/output/openapi/components/EndpointSections.d.ts +3 -1
- package/output/openapi/components/ExamplePanels.d.ts +5 -2
- package/output/openapi/components/OpenApiOperation.d.ts +3 -1
- package/output/openapi/components/OpenApiOperation.state.d.ts +3 -3
- package/output/openapi/components/SchemaProperties.d.ts +1 -0
- package/output/openapi/components/helpers.d.ts +2 -2
- package/output/openapi/entry.d.ts +0 -1
- package/output/openapi/lib/helpers.d.ts +5 -3
- package/output/openapi/lib/request-code.d.ts +2 -1
- package/output/openapi/lib/spec-path.d.ts +6 -1
- package/output/openapi/lib/utils.d.ts +10 -4
- package/output/preview.cjs +7 -5
- package/output/preview.cjs.map +1 -1
- package/output/preview.js +5 -3
- package/output/preview.js.map +1 -1
- package/output/{remark-Dd2WU50s.js → remark-C9iRQM0R.js} +4 -3
- package/output/remark-C9iRQM0R.js.map +1 -0
- package/output/{remark-zSQT0MBv.cjs → remark-DTLbG8PK.cjs} +9 -2
- package/output/remark-DTLbG8PK.cjs.map +1 -0
- package/output/{render-CV0a-qtD.js → render-DKj24Jqw.js} +15 -8
- package/output/render-DKj24Jqw.js.map +1 -0
- package/output/{render-CCCoUWDP.cjs → render-Di5B6Zc0.cjs} +15 -8
- package/output/render-Di5B6Zc0.cjs.map +1 -0
- package/output/renderer.css +234 -20
- package/output/runtime/ClarifyShell.d.ts +5 -6
- package/output/server.cjs +4 -4
- package/output/server.cjs.map +1 -1
- package/output/server.js +4 -4
- package/output/server.js.map +1 -1
- package/output/shell/Navigation.d.ts +1 -0
- package/output/shell/search/SearchDialog.d.ts +1 -1
- package/output/slots/RuntimeSlot.d.ts +7 -7
- package/output/slots/context.d.ts +5 -5
- package/output/slots/index.d.ts +2 -2
- package/output/slots/types.d.ts +1 -1
- package/output/utils/path.d.ts +1 -1
- package/package.json +3 -1
- package/output/ClarifyShell-CxhXBtsR.js.map +0 -1
- package/output/ClarifyShell-DjLRRW8T.cjs.map +0 -1
- package/output/OpenApiOperation-CyBkzvob.js.map +0 -1
- package/output/OpenApiOperation-qp5tFaWP.cjs.map +0 -1
- package/output/PageActions-Dn8IGWoL.js.map +0 -1
- package/output/PageActions-GS_cxeJN.cjs.map +0 -1
- package/output/remark-Dd2WU50s.js.map +0 -1
- package/output/remark-zSQT0MBv.cjs.map +0 -1
- package/output/render-CCCoUWDP.cjs.map +0 -1
- package/output/render-CV0a-qtD.js.map +0 -1
package/output/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../source/app/ContentDiagnostic.tsx","../source/openapi/lib/spec-path.ts","../source/openapi/lib/utils.ts","../source/openapi/entry.tsx","../source/mdx/components.ts","../source/mdx/DocShell.tsx"],"sourcesContent":["import type { ComponentType } from 'react'\n\nimport { RenderErrorPanel } from './RenderErrorPanel'\n\nexport type ContentDiagnostic = {\n kind: string\n title: string\n message: string\n details?: string\n filePath?: string\n}\n\ntype ContentDiagnosticPanelProps = {\n data: ContentDiagnostic\n}\n\nfunction ContentDiagnosticPanel(params: ContentDiagnosticPanelProps) {\n const { data } = params\n const typeLabel = data.kind === 'mdx' ? 'MDX' : data.kind === 'openapi' ? 'OpenAPI' : 'Route'\n const detailsLabel = data.kind === 'mdx' ? 'Why it happened' : 'Details'\n const pathLabel = 'File'\n\n return (\n <RenderErrorPanel\n title={data.title}\n description={data.message}\n titleId=\"clarify-content-diagnostic-title\"\n metadata={[\n { label: pathLabel, value: data.filePath ?? 'Unknown' },\n { label: 'Type', value: typeLabel },\n ]}\n detailsLabel={detailsLabel}\n detailsContent={data.details ? (\n <pre className=\"max-h-(--clarify-error-details-max-height) overflow-auto whitespace-pre-wrap wrap-break-word font-mono\">\n {data.details}\n </pre>\n ) : null}\n />\n )\n}\n\nexport function createContentDiagnosticComponent(data: ContentDiagnostic): ComponentType {\n return function ContentDiagnosticComponent() {\n return <ContentDiagnosticPanel data={data} />\n }\n}\n","import { useLocation } from 'react-router-dom'\n\nimport { useConfig, useLocale, useOpenApis } from '../../core/context'\n\nimport type { OpenAPISpec } from './utils'\n\nconst VIRTUAL_PREFIX = 'virtual:clarify-page/'\n\nfunction resolveRelativePath(fromDir: string, to: string): string {\n const parts = (fromDir + '/' + to).split('/').filter(Boolean)\n const stack: string[] = []\n for (const part of parts) {\n if (part === '..') {\n stack.pop()\n } else if (part !== '.') {\n stack.push(part)\n }\n }\n return stack.join('/')\n}\n\nfunction normalizeSpecPath(specPath: string, currentRoutePath?: string, routePrefix = ''): string {\n if (specPath.startsWith(VIRTUAL_PREFIX)) return specPath\n\n const normalizedRoutePrefix = routePrefix.replace(/^\\/+|\\/+$/g, '')\n const normalizedSpecPath = specPath.startsWith('/') && normalizedRoutePrefix && specPath.slice(1).startsWith(`${normalizedRoutePrefix}/`)\n ? '/' + specPath.slice(normalizedRoutePrefix.length + 2)\n : specPath\n\n if (normalizedSpecPath.startsWith('/')) {\n return VIRTUAL_PREFIX + normalizedSpecPath.replace(/^\\//, '')\n }\n const fromDir = currentRoutePath === '/' ? '' : currentRoutePath?.replace(/^\\//, '').replace(/\\/[^/]*$/, '') ?? ''\n const normalizedFromDir = normalizedRoutePrefix && fromDir.startsWith(`${normalizedRoutePrefix}/`)\n ? fromDir.slice(normalizedRoutePrefix.length + 1)\n : fromDir\n return VIRTUAL_PREFIX + resolveRelativePath(normalizedFromDir, normalizedSpecPath)\n}\n\n/**\n * 为绝对 specPath 生成带 locale 前缀的候选模块 ID。\n *\n * 所有 locale 的 spec 都注册在 `virtual:clarify-page/<locale>/...` 下,\n * 因此绝对路径(如 `/api`)需要显式注入 locale 前缀才能命中。\n * 相对路径会因为当前路由已含 locale 前缀而自动解析到正确的 spec。\n */\nfunction localizeSpecModuleId(moduleId: string, specPath: string, locale: string | undefined, _defaultLocale: string | undefined): string | undefined {\n if (!locale) return undefined\n // 仅处理绝对路径;相对路径已经基于含 locale 前缀的当前路由解析。\n if (!specPath.startsWith('/') || specPath.startsWith(VIRTUAL_PREFIX)) return undefined\n const rest = moduleId.slice(VIRTUAL_PREFIX.length)\n if (rest.startsWith(`${locale}/`) || rest === locale) return undefined\n return `${VIRTUAL_PREFIX}${locale}/${rest}`\n}\n\nexport function useOpenApiSpec(spec?: OpenAPISpec, specPath?: string): OpenAPISpec | null {\n const config = useConfig()\n const locale = useLocale()\n const specs = useOpenApis()\n const location = useLocation()\n\n if (spec) return spec\n if (!specPath) return null\n\n const normalized = normalizeSpecPath(specPath, location.pathname, config.routePrefix)\n const localized = localizeSpecModuleId(normalized, specPath, locale, config.i18n?.defaultLocale)\n\n if (localized && specs[localized]) return specs[localized]\n return specs[normalized] ?? null\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'\n\nimport type { OpenApiRecord } from '../types'\n\nexport type OpenAPISpec = OpenAPIV3.Document | OpenAPIV3_1.Document\nexport type OpenAPIOperation = OpenAPIV3.OperationObject | OpenAPIV3_1.OperationObject\n\nexport const OPENAPI_HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const\n\nexport type OpenAPIHttpMethod = typeof OPENAPI_HTTP_METHODS[number]\n\nexport function isOpenAPIHttpMethod(method: string): method is OpenAPIHttpMethod {\n return (OPENAPI_HTTP_METHODS as readonly string[]).includes(method.toLowerCase())\n}\n\nfunction isRecord(value: unknown): value is OpenApiRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction resolveOpenApiRef(spec: OpenAPISpec, ref: string): unknown {\n if (!ref.startsWith('#/')) return undefined\n\n return ref\n .slice(2)\n .split('/')\n .map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'))\n .reduce<unknown>((current, part) => (isRecord(current) ? current[part] : undefined), spec)\n}\n\nfunction getPathItem(spec: OpenAPISpec, path: string): OpenApiRecord | undefined {\n const pathItem = spec.paths?.[path]\n const resolved = isRecord(pathItem) && typeof pathItem.$ref === 'string' ? resolveOpenApiRef(spec, pathItem.$ref) : pathItem\n return isRecord(resolved) ? resolved : undefined\n}\n\nexport function getOpenApiOperation(spec: OpenAPISpec, path: string, method: string): OpenAPIOperation | undefined {\n if (!isOpenAPIHttpMethod(method)) return undefined\n return getPathItem(spec, path)?.[method.toLowerCase() as OpenAPIHttpMethod] as OpenAPIOperation | undefined\n}\n\nexport function listOpenApiOperations(spec: OpenAPISpec): Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> {\n const paths = spec.paths ?? {}\n const operations: Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> = []\n\n for (const path of Object.keys(paths)) {\n const pathItem = getPathItem(spec, path)\n if (!pathItem) continue\n for (const method of OPENAPI_HTTP_METHODS) {\n const operation = pathItem[method]\n if (operation) operations.push({ path, method, operation: operation as OpenAPIOperation })\n }\n }\n\n return operations\n}\n","import type { ReactNode } from 'react'\n\nimport { PageTitleActions } from '../app/PageActions'\nimport { Prose } from '../components/Prose'\nimport { useBuiltInText } from '../core/i18n'\nimport { Markdown } from '../mdx/Markdown'\n\nimport { OpenApiOperation as OpenApiOperationComponent } from './components/OpenApiOperation'\nimport { useOpenApiSpec } from './lib/spec-path'\nimport { getOpenApiOperation, listOpenApiOperations } from './lib/utils'\nimport type { OpenAPISpec } from './lib/utils'\n\ntype OpenApiPathsProps = { spec: OpenAPISpec; tagFilter?: string[] }\n\ntype OpenApiHeaderProps = { spec: OpenAPISpec }\n\ntype WarningBoxProps = {\n children: ReactNode\n tone?: 'amber' | 'red'\n}\n\nexport type OpenApiDocumentProps = {\n spec?: OpenAPISpec\n specPath?: string\n tagFilter?: string[]\n}\n\nexport type OpenApiRouteData = {\n spec: OpenAPISpec\n tagFilter?: string[]\n}\n\ntype OpenApiOperationWithSpecProps = {\n spec: OpenAPISpec\n path: string\n method: string\n}\n\nexport type OpenApiOperationProps = {\n specPath: string\n path: string\n method: string\n}\n\nfunction OpenApiHeader(arg0: OpenApiHeaderProps): ReactNode {\n const { spec } = arg0\n\n const t = useBuiltInText()\n return (\n <header className=\"clarify-openapi-header mb-16 border-b border-(--clarify-theme-tokens-colors-border) pb-8\">\n <p className=\"mb-3 text-xs/6 font-medium tracking-widest text-(--clarify-ui-accent-text) uppercase\">\n {t('openapi.openApiReference')}\n </p>\n <div className=\"clarify-page-title-row flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <h1 className=\"clarify-page-title min-w-0 flex-1\">{spec.info?.title ?? t('openapi.apiDocumentation')}</h1>\n <PageTitleActions />\n </div>\n {spec.info?.description ? <Markdown className=\"lead mt-4 *:first:mt-0 *:last:mb-0\">{spec.info.description}</Markdown> : null}\n {spec.info?.version ? <p className=\"mt-4 text-sm text-(--clarify-ui-text-faint)\">{t('openapi.version', { version: spec.info.version })}</p> : null}\n </header>\n )\n}\n\nfunction operationMatchesTags(operationTags: string[] | undefined, filterTags: string[] | undefined): boolean {\n if (!filterTags?.length) return true\n return operationTags?.some(tag => filterTags.includes(tag)) ?? false\n}\n\nfunction OpenApiPaths(arg0: OpenApiPathsProps): ReactNode {\n const { spec, tagFilter } = arg0\n\n const entries = listOpenApiOperations(spec)\n .filter(({ operation }) => operationMatchesTags(operation.tags, tagFilter))\n .map(({ path, method, operation }) => ({\n path,\n method: method.toUpperCase(),\n operation,\n }))\n\n return (\n <div className=\"clarify-api-endpoints divide-y divide-zinc-200/70 dark:divide-white/10\">\n {entries.map(({ path, method, operation }) => (\n <OpenApiOperationComponent key={`${method}-${path}`} spec={spec} path={path} method={method} operation={operation} />\n ))}\n </div>\n )\n}\n\nfunction WarningBox(arg0: WarningBoxProps): ReactNode {\n const { children, tone = 'amber' } = arg0\n\n const classes = tone === 'red'\n ? 'rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200'\n : 'rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200'\n\n return <div className={`clarify-warning ${classes}`}>{children}</div>\n}\n\nexport function OpenApiDocument(arg0: OpenApiDocumentProps): ReactNode {\n const { spec, specPath, tagFilter } = arg0\n const t = useBuiltInText()\n const resolved = useOpenApiSpec(spec, specPath)\n\n if (!resolved) {\n return <WarningBox>{t('openapi.specNotFound', { specPath: specPath ?? t('openapi.specPathMissing') })}</WarningBox>\n }\n\n return (\n <article className=\"clarify-openapi-page flex h-full flex-col pt-16 pb-10\">\n <Prose className=\"flex-auto\">\n <OpenApiHeader spec={resolved} />\n <OpenApiPaths spec={resolved} tagFilter={tagFilter} />\n </Prose>\n </article>\n )\n}\n\nfunction OpenApiOperationWithSpec(arg0: OpenApiOperationWithSpecProps): ReactNode {\n const { spec, path, method } = arg0\n const t = useBuiltInText()\n const op = getOpenApiOperation(spec, path, method)\n\n if (!op) {\n return <WarningBox tone=\"red\">{t('openapi.endpointNotFound', { endpoint: `${method.toUpperCase()} ${path}` })}</WarningBox>\n }\n\n const normalizedMethod = method.toUpperCase()\n return <OpenApiOperationComponent key={`${normalizedMethod}-${path}`} spec={spec} path={path} method={normalizedMethod} operation={op} />\n}\n\nexport function OpenApiOperation(arg0: OpenApiOperationProps): ReactNode {\n const { specPath, path, method } = arg0\n const t = useBuiltInText()\n const spec = useOpenApiSpec(undefined, specPath)\n\n if (!spec) {\n return <WarningBox>{t('openapi.specNotFound', { specPath })}</WarningBox>\n }\n\n return <OpenApiOperationWithSpec spec={spec} path={path} method={method} />\n}\n\nexport function createOpenApiRouteComponent(data: OpenApiRouteData) {\n return function OpenApiRoutePage() {\n return <OpenApiDocument spec={data.spec} tagFilter={data.tagFilter} />\n }\n}\n","import { Collapse } from '../components/Collapse'\nimport { Mermaid } from '../components/Mermaid'\nimport { OpenApiDocument, OpenApiOperation } from '../openapi'\n\nimport { Markdown } from './Markdown'\nimport * as mdxPrimitives from './primitives'\n\nconst builtInMDXComponents = {\n ...mdxPrimitives,\n Markdown,\n Collapse,\n Mermaid,\n}\n\nconst builtInOpenAPIComponents = {\n OpenApiDocument,\n OpenApiOperation,\n}\n\nexport function useMDXComponents(components: Record<string, unknown> = {}) {\n return {\n ...components,\n ...builtInMDXComponents,\n ...builtInOpenAPIComponents,\n }\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\n\nexport type DocShellProps = {\n title: string\n subtitle?: string\n children: ReactNode\n}\n\nexport function DocShell(arg0: DocShellProps) {\n const { title, subtitle, children } = arg0\n\n return (\n <main className=\"clarify-doc-shell min-h-screen bg-(--clarify-theme-tokens-colors-background) px-6 py-10 text-(--clarify-theme-tokens-colors-foreground) md:px-10\">\n <div className=\"mx-auto max-w-6xl\">\n <header className=\"mb-10\">\n <h1 className=\"text-3xl font-bold tracking-tight md:text-5xl\">{title}</h1>\n {subtitle ? <p className=\"mt-3 max-w-2xl text-(--clarify-ui-text-soft)\">{subtitle}</p> : null}\n </header>\n <Prose>{children}</Prose>\n </div>\n </main>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../source/app/ContentDiagnostic.tsx","../source/openapi/lib/spec-path.ts","../source/openapi/entry.tsx","../source/mdx/components.ts","../source/mdx/DocShell.tsx"],"sourcesContent":["import type { ComponentType } from 'react'\n\nimport { RenderErrorPanel } from './RenderErrorPanel'\n\nexport type ContentDiagnostic = {\n kind: string\n title: string\n message: string\n details?: string\n filePath?: string\n}\n\ntype ContentDiagnosticPanelProps = {\n data: ContentDiagnostic\n}\n\nfunction ContentDiagnosticPanel(params: ContentDiagnosticPanelProps) {\n const { data } = params\n const typeLabel = data.kind === 'mdx' ? 'MDX' : data.kind === 'openapi' ? 'OpenAPI' : 'Route'\n const detailsLabel = data.kind === 'mdx' ? 'Why it happened' : 'Details'\n const pathLabel = 'File'\n\n return (\n <RenderErrorPanel\n title={data.title}\n description={data.message}\n titleId=\"clarify-content-diagnostic-title\"\n metadata={[\n { label: pathLabel, value: data.filePath ?? 'Unknown' },\n { label: 'Type', value: typeLabel },\n ]}\n detailsLabel={detailsLabel}\n detailsContent={data.details ? (\n <pre className=\"max-h-(--clarify-error-details-max-height) overflow-auto whitespace-pre-wrap wrap-break-word font-mono\">\n {data.details}\n </pre>\n ) : null}\n />\n )\n}\n\nexport function createContentDiagnosticComponent(data: ContentDiagnostic): ComponentType {\n return function ContentDiagnosticComponent() {\n return <ContentDiagnosticPanel data={data} />\n }\n}\n","import { useEffect, useState } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nimport { useConfig, useLocale, useOpenApiSpecs } from '../../core/context'\n\nimport type { OpenAPISpec } from './utils'\n\ntype OpenApiSpecResult = {\n spec: OpenAPISpec | null\n loading: boolean\n}\n\ntype OpenApiSpecModule = { default: OpenAPISpec } | OpenAPISpec\n\ntype LoadedSpecState = {\n loader?: () => Promise<OpenApiSpecModule>\n spec: OpenAPISpec | null\n}\n\nfunction isOpenApiSpecLoader(value: unknown): value is () => Promise<OpenApiSpecModule> {\n return typeof value === 'function'\n}\n\nfunction getLoadedSpec(value: OpenApiSpecModule): OpenAPISpec {\n return value && typeof value === 'object' && 'default' in value\n ? value.default\n : value\n}\n\nconst VIRTUAL_PREFIX = 'virtual:clarify-page/'\n\nfunction resolveRelativePath(fromDir: string, to: string): string {\n const parts = (fromDir + '/' + to).split('/').filter(Boolean)\n const stack: string[] = []\n for (const part of parts) {\n if (part === '..') {\n stack.pop()\n } else if (part !== '.') {\n stack.push(part)\n }\n }\n return stack.join('/')\n}\n\nfunction normalizeSpecPath(specPath: string, currentRoutePath?: string, routePrefix = ''): string {\n if (specPath.startsWith(VIRTUAL_PREFIX)) return specPath\n\n const normalizedRoutePrefix = routePrefix.replace(/^\\/+|\\/+$/g, '')\n const normalizedSpecPath = specPath.startsWith('/') && normalizedRoutePrefix && specPath.slice(1).startsWith(`${normalizedRoutePrefix}/`)\n ? '/' + specPath.slice(normalizedRoutePrefix.length + 2)\n : specPath\n\n if (normalizedSpecPath.startsWith('/')) {\n return VIRTUAL_PREFIX + normalizedSpecPath.replace(/^\\//, '')\n }\n const fromDir = currentRoutePath === '/' ? '' : currentRoutePath?.replace(/^\\//, '').replace(/\\/[^/]*$/, '') ?? ''\n const normalizedFromDir = normalizedRoutePrefix && fromDir.startsWith(`${normalizedRoutePrefix}/`)\n ? fromDir.slice(normalizedRoutePrefix.length + 1)\n : fromDir\n return VIRTUAL_PREFIX + resolveRelativePath(normalizedFromDir, normalizedSpecPath)\n}\n\n/**\n * Prefer a locale-qualified registry key for absolute specPath values, then\n * fall back to the normalized key. The CLI registers visible route aliases,\n * while relative paths already resolve through the current localized route.\n */\nfunction specModuleCandidates(moduleId: string, specPath: string, locale: string | undefined): string[] {\n const candidates: string[] = []\n if (locale && specPath.startsWith('/') && !specPath.startsWith(VIRTUAL_PREFIX)) {\n const rest = moduleId.slice(VIRTUAL_PREFIX.length)\n if (!rest.startsWith(`${locale}/`) && rest !== locale) candidates.push(`${VIRTUAL_PREFIX}${locale}/${rest}`)\n }\n candidates.push(moduleId)\n return candidates\n}\n\nexport function useOpenApiSpec(spec?: OpenAPISpec, specPath?: string): OpenApiSpecResult {\n const config = useConfig()\n const locale = useLocale()\n const specs = useOpenApiSpecs()\n const location = useLocation()\n const [loadedSpec, setLoadedSpec] = useState<LoadedSpecState>({ spec: null })\n const normalized = specPath ? normalizeSpecPath(specPath, location.pathname, config.routePrefix) : undefined\n const candidates = specPath && normalized ? specModuleCandidates(normalized, specPath, locale) : []\n const registryValue = candidates.map(candidate => specs[candidate]).find(Boolean)\n\n useEffect(() => {\n let cancelled = false\n\n if (!isOpenApiSpecLoader(registryValue)) return\n\n registryValue().then(module => {\n if (!cancelled) setLoadedSpec({ loader: registryValue, spec: getLoadedSpec(module) })\n }).catch(() => {\n if (!cancelled) setLoadedSpec({ loader: registryValue, spec: null })\n })\n\n return () => {\n cancelled = true\n }\n }, [registryValue])\n\n if (spec) return { spec, loading: false }\n if (!specPath) return { spec: null, loading: false }\n if (isOpenApiSpecLoader(registryValue)) {\n return loadedSpec.loader === registryValue\n ? { spec: loadedSpec.spec, loading: false }\n : { spec: null, loading: true }\n }\n return { spec: registryValue ?? null, loading: false }\n}\n","import type { ReactNode } from 'react'\n\nimport { PageTitleActions } from '../app/PageActions'\nimport { Prose } from '../components/Prose'\nimport { useBuiltInText } from '../core/i18n'\nimport { Markdown } from '../mdx/Markdown'\n\nimport { OpenApiOperation as OpenApiOperationComponent } from './components/OpenApiOperation'\nimport { useOpenApiSpec } from './lib/spec-path'\nimport { getOpenApiOperationEntry, listOpenApiOperations } from './lib/utils'\nimport type { OpenAPISpec } from './lib/utils'\n\ntype OpenApiPathsProps = { spec: OpenAPISpec; tagFilter?: string[] }\n\ntype OpenApiHeaderProps = { spec: OpenAPISpec }\n\ntype WarningBoxProps = {\n children: ReactNode\n tone?: 'amber' | 'red'\n}\n\nexport type OpenApiDocumentProps = {\n spec?: OpenAPISpec\n specPath?: string\n tagFilter?: string[]\n}\n\nexport type OpenApiRouteData = {\n spec: OpenAPISpec\n}\n\ntype OpenApiOperationWithSpecProps = {\n spec: OpenAPISpec\n path: string\n method: string\n}\n\nexport type OpenApiOperationProps = {\n specPath: string\n path: string\n method: string\n}\n\nfunction OpenApiHeader(arg0: OpenApiHeaderProps): ReactNode {\n const { spec } = arg0\n\n const t = useBuiltInText()\n return (\n <header className=\"clarify-openapi-header mb-16 border-b border-(--clarify-theme-tokens-colors-border) pb-8\">\n <p className=\"mb-3 text-xs/6 font-medium tracking-widest text-(--clarify-ui-accent-text) uppercase\">\n {t('openapi.openApiReference')}\n </p>\n <div className=\"clarify-page-title-row flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <h1 className=\"clarify-page-title min-w-0 flex-1\">{spec.info?.title ?? t('openapi.apiDocumentation')}</h1>\n <PageTitleActions />\n </div>\n {spec.info?.description ? <Markdown className=\"lead mt-4 *:first:mt-0 *:last:mb-0\">{spec.info.description}</Markdown> : null}\n {spec.info?.version ? <p className=\"mt-4 text-sm text-(--clarify-ui-text-faint)\">{t('openapi.version', { version: spec.info.version })}</p> : null}\n </header>\n )\n}\n\nfunction operationMatchesTags(operationTags: string[] | undefined, filterTags: string[] | undefined): boolean {\n if (!filterTags?.length) return true\n return operationTags?.some(tag => filterTags.includes(tag)) ?? false\n}\n\nfunction OpenApiPaths(arg0: OpenApiPathsProps): ReactNode {\n const { spec, tagFilter } = arg0\n\n const entries = listOpenApiOperations(spec)\n .filter(({ operation }) => operationMatchesTags(operation.tags, tagFilter))\n .map(({ path, method, operation, source }) => ({\n path,\n method: method.toUpperCase(),\n operation,\n source,\n }))\n\n return (\n <div className=\"clarify-api-endpoints divide-y divide-zinc-200/70 dark:divide-white/10\">\n {entries.map(({ path, method, operation, source }) => (\n <OpenApiOperationComponent key={`${source}-${method}-${path}`} spec={spec} path={path} method={method} operation={operation} operationSource={source} />\n ))}\n </div>\n )\n}\n\nfunction WarningBox(arg0: WarningBoxProps): ReactNode {\n const { children, tone = 'amber' } = arg0\n\n const classes = tone === 'red'\n ? 'rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200'\n : 'rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200'\n\n return <div className={`clarify-warning ${classes}`}>{children}</div>\n}\n\nexport function OpenApiDocument(arg0: OpenApiDocumentProps): ReactNode {\n const { spec, specPath, tagFilter } = arg0\n const t = useBuiltInText()\n const { spec: resolved, loading } = useOpenApiSpec(spec, specPath)\n\n if (loading) {\n return <WarningBox>{t('openapi.loading')}</WarningBox>\n }\n if (!resolved) {\n return <WarningBox>{t('openapi.specNotFound', { specPath: specPath ?? t('openapi.specPathMissing') })}</WarningBox>\n }\n\n return (\n <article className=\"clarify-openapi-page flex h-full flex-col pt-16 pb-10\">\n <Prose className=\"flex-auto\">\n <OpenApiHeader spec={resolved} />\n <OpenApiPaths spec={resolved} tagFilter={tagFilter} />\n </Prose>\n </article>\n )\n}\n\nfunction OpenApiOperationWithSpec(arg0: OpenApiOperationWithSpecProps): ReactNode {\n const { spec, path, method } = arg0\n const t = useBuiltInText()\n const entry = getOpenApiOperationEntry(spec, path, method)\n\n if (!entry) {\n return <WarningBox tone=\"red\">{t('openapi.endpointNotFound', { endpoint: `${method.toUpperCase()} ${path}` })}</WarningBox>\n }\n\n const normalizedMethod = entry.method.toUpperCase()\n return <OpenApiOperationComponent key={`${entry.source}-${normalizedMethod}-${path}`} spec={spec} path={path} method={normalizedMethod} operation={entry.operation} operationSource={entry.source} />\n}\n\nexport function OpenApiOperation(arg0: OpenApiOperationProps): ReactNode {\n const { specPath, path, method } = arg0\n const t = useBuiltInText()\n const { spec, loading } = useOpenApiSpec(undefined, specPath)\n\n if (loading) {\n return <WarningBox>{t('openapi.loading')}</WarningBox>\n }\n if (!spec) {\n return <WarningBox>{t('openapi.specNotFound', { specPath })}</WarningBox>\n }\n\n return <OpenApiOperationWithSpec spec={spec} path={path} method={method} />\n}\n\nexport function createOpenApiRouteComponent(data: OpenApiRouteData) {\n return function OpenApiRoutePage() {\n return <OpenApiDocument spec={data.spec} />\n }\n}\n","import { Collapse } from '../components/Collapse'\nimport { Mermaid } from '../components/Mermaid'\nimport { OpenApiDocument, OpenApiOperation } from '../openapi'\n\nimport { Markdown } from './Markdown'\nimport * as mdxPrimitives from './primitives'\n\nconst builtInMDXComponents = {\n ...mdxPrimitives,\n Markdown,\n Collapse,\n Mermaid,\n}\n\nconst builtInOpenAPIComponents = {\n OpenApiDocument,\n OpenApiOperation,\n}\n\nexport function useMDXComponents(components: Record<string, unknown> = {}) {\n return {\n ...components,\n ...builtInMDXComponents,\n ...builtInOpenAPIComponents,\n }\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\n\nexport type DocShellProps = {\n title: string\n subtitle?: string\n children: ReactNode\n}\n\nexport function DocShell(arg0: DocShellProps) {\n const { title, subtitle, children } = arg0\n\n return (\n <main className=\"clarify-doc-shell min-h-screen bg-(--clarify-theme-tokens-colors-background) px-6 py-10 text-(--clarify-theme-tokens-colors-foreground) md:px-10\">\n <div className=\"mx-auto max-w-6xl\">\n <header className=\"mb-10\">\n <h1 className=\"text-3xl font-bold tracking-tight md:text-5xl\">{title}</h1>\n {subtitle ? <p className=\"mt-3 max-w-2xl text-(--clarify-ui-text-soft)\">{subtitle}</p> : null}\n </header>\n <Prose>{children}</Prose>\n </div>\n </main>\n )\n}\n"],"mappings":"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"}
|
package/output/index.d.ts
CHANGED
|
@@ -5,11 +5,11 @@ import { PageBanner } from './app/PageBanner';
|
|
|
5
5
|
import { PageFooter } from './app/PageFooter';
|
|
6
6
|
import { SectionProvider, useSectionStore, Section } from './app/SectionProvider';
|
|
7
7
|
import { Button, Callout, Card, CardGroup, Code, CodeGroup, Collapse, Feedback, GridPattern, Heading, HeroPattern, Logo, Mermaid, Pre, Prose, Tag, WebFrame } from './components';
|
|
8
|
-
import {
|
|
8
|
+
import { OpenApiSpecsContext, useOpenApiSpecs } from './context';
|
|
9
9
|
import { useMDXComponents } from './mdx/components';
|
|
10
10
|
import { DocShell } from './mdx/DocShell';
|
|
11
11
|
import { Markdown } from './mdx/Markdown';
|
|
12
|
-
import { markdownRemarkPlugins } from './mdx/remark';
|
|
12
|
+
import { markdownRemarkPlugins, parseCodeMeta } from './mdx/remark';
|
|
13
13
|
import { OpenApiDocument, OpenApiOperation, createOpenApiRouteComponent } from './openapi';
|
|
14
14
|
import { render } from './runtime/render';
|
|
15
15
|
import { SlotProvider, RuntimeSlot, RuntimeSlotsProvider, useSlot } from './slots';
|
|
@@ -17,15 +17,15 @@ import { applyThemeVariables, themeEditorPresets, ThemeEditor } from './theme/Th
|
|
|
17
17
|
import { ThemeProvider, useTheme } from './theme/ThemeProvider';
|
|
18
18
|
import { ThemeToggle } from './theme/ThemeToggle';
|
|
19
19
|
import { themePresets, themeBootstrapScript } from './theme/variables';
|
|
20
|
-
import { Config, RouteItem, RenderOptions, ServerRenderOptions } from './types';
|
|
20
|
+
import { Config, RouteItem, RouteSection, RenderOptions, ServerRenderOptions } from './types';
|
|
21
21
|
import { remToPx } from './utils/remToPx';
|
|
22
22
|
export type { OpenApiOperationProps, OpenApiDocumentProps, OpenAPIOperation, OpenAPISpec, OpenApiRouteData } from './openapi';
|
|
23
23
|
export type { ThemeEditorProps } from './theme/ThemeEditor';
|
|
24
24
|
export type { ContentDiagnostic };
|
|
25
|
-
export type { Config, RouteItem, RenderOptions, ServerRenderOptions, Section };
|
|
26
|
-
export type { RuntimeSlotEntry,
|
|
27
|
-
export { AppShell, render,
|
|
25
|
+
export type { Config, RouteItem, RouteSection, RenderOptions, ServerRenderOptions, Section };
|
|
26
|
+
export type { RuntimeSlotEntry, RuntimeSlotRegistry, UISlotRegistration, UISlotName, UISlotContext } from './slots';
|
|
27
|
+
export { AppShell, render, OpenApiSpecsContext, useOpenApiSpecs, BuiltWithClarify, PageBanner, PageFooter, ThemeProvider, ThemeToggle, ThemeEditor, useTheme, SectionProvider, useSectionStore, remToPx, applyThemeVariables, themeEditorPresets, themePresets, themeBootstrapScript, createContentDiagnosticComponent, createOpenApiRouteComponent };
|
|
28
28
|
export { Button, Callout, Card, CardGroup, Code, CodeGroup, Collapse, Pre, Prose, Heading, Logo, Mermaid, GridPattern, HeroPattern, Feedback, Tag, WebFrame };
|
|
29
|
-
export { DocShell, Markdown, useMDXComponents, markdownRemarkPlugins };
|
|
29
|
+
export { DocShell, Markdown, useMDXComponents, markdownRemarkPlugins, parseCodeMeta };
|
|
30
30
|
export { SlotProvider, RuntimeSlot, RuntimeSlotsProvider, useSlot };
|
|
31
31
|
export { OpenApiDocument, OpenApiOperation };
|
package/output/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { A as
|
|
2
|
-
import {
|
|
3
|
-
import { a as themeBootstrapScript, c as AppShell, d as RenderErrorPanel, f as BuiltWithClarify, g as useSlot, h as SlotProvider, i as themeEditorPresets, l as PageFooter, m as RuntimeSlotsProvider, n as ThemeEditor, o as themePresets, p as RuntimeSlot, r as applyThemeVariables, u as PageBanner } from "./ClarifyShell-
|
|
4
|
-
import {
|
|
5
|
-
import { t as
|
|
1
|
+
import { A as CardGroup, C as Feedback, D as Pre, E as CodeGroup, M as Button, O as Mermaid, S as Tag, T as Code, _ as Prose, b as Logo, d as listOpenApiOperations, g as WebFrame, h as primitives_exports, j as Callout, k as Card, m as Markdown, n as OpenApiOperation$1, u as getOpenApiOperationEntry, v as GridPattern, w as Collapse, x as Heading, y as HeroPattern } from "./OpenApiOperation-DgrqzeiS.js";
|
|
2
|
+
import { a as useConfig, c as useOpenApiSpecs, i as OpenApiSpecsContext, s as useLocale, t as useBuiltInText } from "./i18n-DnqZHFT7.js";
|
|
3
|
+
import { a as themeBootstrapScript, c as AppShell, d as RenderErrorPanel, f as BuiltWithClarify, g as useSlot, h as SlotProvider, i as themeEditorPresets, l as PageFooter, m as RuntimeSlotsProvider, n as ThemeEditor, o as themePresets, p as RuntimeSlot, r as applyThemeVariables, u as PageBanner } from "./ClarifyShell-1LuBliwt.js";
|
|
4
|
+
import { a as SectionProvider, h as useTheme, m as ThemeProvider, n as PageTitleActions, o as useSectionStore, p as ThemeToggle, s as remToPx } from "./PageActions-D7K9LDGf.js";
|
|
5
|
+
import { n as parseCodeMeta, t as markdownRemarkPlugins } from "./remark-C9iRQM0R.js";
|
|
6
|
+
import { t as render } from "./render-DKj24Jqw.js";
|
|
7
|
+
import { useEffect, useState } from "react";
|
|
6
8
|
import { useLocation } from "react-router-dom";
|
|
7
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
10
|
//#region source/app/ContentDiagnostic.tsx
|
|
@@ -35,6 +37,12 @@ function createContentDiagnosticComponent(data) {
|
|
|
35
37
|
}
|
|
36
38
|
//#endregion
|
|
37
39
|
//#region source/openapi/lib/spec-path.ts
|
|
40
|
+
function isOpenApiSpecLoader(value) {
|
|
41
|
+
return typeof value === "function";
|
|
42
|
+
}
|
|
43
|
+
function getLoadedSpec(value) {
|
|
44
|
+
return value && typeof value === "object" && "default" in value ? value.default : value;
|
|
45
|
+
}
|
|
38
46
|
var VIRTUAL_PREFIX = "virtual:clarify-page/";
|
|
39
47
|
function resolveRelativePath(fromDir, to) {
|
|
40
48
|
const parts = (fromDir + "/" + to).split("/").filter(Boolean);
|
|
@@ -52,78 +60,64 @@ function normalizeSpecPath(specPath, currentRoutePath, routePrefix = "") {
|
|
|
52
60
|
return VIRTUAL_PREFIX + resolveRelativePath(normalizedRoutePrefix && fromDir.startsWith(`${normalizedRoutePrefix}/`) ? fromDir.slice(normalizedRoutePrefix.length + 1) : fromDir, normalizedSpecPath);
|
|
53
61
|
}
|
|
54
62
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* 因此绝对路径(如 `/api`)需要显式注入 locale 前缀才能命中。
|
|
59
|
-
* 相对路径会因为当前路由已含 locale 前缀而自动解析到正确的 spec。
|
|
63
|
+
* Prefer a locale-qualified registry key for absolute specPath values, then
|
|
64
|
+
* fall back to the normalized key. The CLI registers visible route aliases,
|
|
65
|
+
* while relative paths already resolve through the current localized route.
|
|
60
66
|
*/
|
|
61
|
-
function
|
|
62
|
-
|
|
63
|
-
if (
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
function specModuleCandidates(moduleId, specPath, locale) {
|
|
68
|
+
const candidates = [];
|
|
69
|
+
if (locale && specPath.startsWith("/") && !specPath.startsWith(VIRTUAL_PREFIX)) {
|
|
70
|
+
const rest = moduleId.slice(21);
|
|
71
|
+
if (!rest.startsWith(`${locale}/`) && rest !== locale) candidates.push(`${VIRTUAL_PREFIX}${locale}/${rest}`);
|
|
72
|
+
}
|
|
73
|
+
candidates.push(moduleId);
|
|
74
|
+
return candidates;
|
|
67
75
|
}
|
|
68
76
|
function useOpenApiSpec(spec, specPath) {
|
|
69
77
|
const config = useConfig();
|
|
70
78
|
const locale = useLocale();
|
|
71
|
-
const specs =
|
|
79
|
+
const specs = useOpenApiSpecs();
|
|
72
80
|
const location = useLocation();
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
"get",
|
|
84
|
-
"put",
|
|
85
|
-
"post",
|
|
86
|
-
"delete",
|
|
87
|
-
"options",
|
|
88
|
-
"head",
|
|
89
|
-
"patch",
|
|
90
|
-
"trace"
|
|
91
|
-
];
|
|
92
|
-
function isOpenAPIHttpMethod(method) {
|
|
93
|
-
return OPENAPI_HTTP_METHODS.includes(method.toLowerCase());
|
|
94
|
-
}
|
|
95
|
-
function isRecord(value) {
|
|
96
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
97
|
-
}
|
|
98
|
-
function resolveOpenApiRef(spec, ref) {
|
|
99
|
-
if (!ref.startsWith("#/")) return void 0;
|
|
100
|
-
return ref.slice(2).split("/").map((part) => part.replace(/~1/g, "/").replace(/~0/g, "~")).reduce((current, part) => isRecord(current) ? current[part] : void 0, spec);
|
|
101
|
-
}
|
|
102
|
-
function getPathItem(spec, path) {
|
|
103
|
-
const pathItem = spec.paths?.[path];
|
|
104
|
-
const resolved = isRecord(pathItem) && typeof pathItem.$ref === "string" ? resolveOpenApiRef(spec, pathItem.$ref) : pathItem;
|
|
105
|
-
return isRecord(resolved) ? resolved : void 0;
|
|
106
|
-
}
|
|
107
|
-
function getOpenApiOperation(spec, path, method) {
|
|
108
|
-
if (!isOpenAPIHttpMethod(method)) return void 0;
|
|
109
|
-
return getPathItem(spec, path)?.[method.toLowerCase()];
|
|
110
|
-
}
|
|
111
|
-
function listOpenApiOperations(spec) {
|
|
112
|
-
const paths = spec.paths ?? {};
|
|
113
|
-
const operations = [];
|
|
114
|
-
for (const path of Object.keys(paths)) {
|
|
115
|
-
const pathItem = getPathItem(spec, path);
|
|
116
|
-
if (!pathItem) continue;
|
|
117
|
-
for (const method of OPENAPI_HTTP_METHODS) {
|
|
118
|
-
const operation = pathItem[method];
|
|
119
|
-
if (operation) operations.push({
|
|
120
|
-
path,
|
|
121
|
-
method,
|
|
122
|
-
operation
|
|
81
|
+
const [loadedSpec, setLoadedSpec] = useState({ spec: null });
|
|
82
|
+
const normalized = specPath ? normalizeSpecPath(specPath, location.pathname, config.routePrefix) : void 0;
|
|
83
|
+
const registryValue = (specPath && normalized ? specModuleCandidates(normalized, specPath, locale) : []).map((candidate) => specs[candidate]).find(Boolean);
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
let cancelled = false;
|
|
86
|
+
if (!isOpenApiSpecLoader(registryValue)) return;
|
|
87
|
+
registryValue().then((module) => {
|
|
88
|
+
if (!cancelled) setLoadedSpec({
|
|
89
|
+
loader: registryValue,
|
|
90
|
+
spec: getLoadedSpec(module)
|
|
123
91
|
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
|
|
92
|
+
}).catch(() => {
|
|
93
|
+
if (!cancelled) setLoadedSpec({
|
|
94
|
+
loader: registryValue,
|
|
95
|
+
spec: null
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
return () => {
|
|
99
|
+
cancelled = true;
|
|
100
|
+
};
|
|
101
|
+
}, [registryValue]);
|
|
102
|
+
if (spec) return {
|
|
103
|
+
spec,
|
|
104
|
+
loading: false
|
|
105
|
+
};
|
|
106
|
+
if (!specPath) return {
|
|
107
|
+
spec: null,
|
|
108
|
+
loading: false
|
|
109
|
+
};
|
|
110
|
+
if (isOpenApiSpecLoader(registryValue)) return loadedSpec.loader === registryValue ? {
|
|
111
|
+
spec: loadedSpec.spec,
|
|
112
|
+
loading: false
|
|
113
|
+
} : {
|
|
114
|
+
spec: null,
|
|
115
|
+
loading: true
|
|
116
|
+
};
|
|
117
|
+
return {
|
|
118
|
+
spec: registryValue ?? null,
|
|
119
|
+
loading: false
|
|
120
|
+
};
|
|
127
121
|
}
|
|
128
122
|
//#endregion
|
|
129
123
|
//#region source/openapi/entry.tsx
|
|
@@ -163,16 +157,18 @@ function OpenApiPaths(arg0) {
|
|
|
163
157
|
const { spec, tagFilter } = arg0;
|
|
164
158
|
return /* @__PURE__ */ jsx("div", {
|
|
165
159
|
className: "clarify-api-endpoints divide-y divide-zinc-200/70 dark:divide-white/10",
|
|
166
|
-
children: listOpenApiOperations(spec).filter(({ operation }) => operationMatchesTags(operation.tags, tagFilter)).map(({ path, method, operation }) => ({
|
|
160
|
+
children: listOpenApiOperations(spec).filter(({ operation }) => operationMatchesTags(operation.tags, tagFilter)).map(({ path, method, operation, source }) => ({
|
|
167
161
|
path,
|
|
168
162
|
method: method.toUpperCase(),
|
|
169
|
-
operation
|
|
170
|
-
|
|
163
|
+
operation,
|
|
164
|
+
source
|
|
165
|
+
})).map(({ path, method, operation, source }) => /* @__PURE__ */ jsx(OpenApiOperation$1, {
|
|
171
166
|
spec,
|
|
172
167
|
path,
|
|
173
168
|
method,
|
|
174
|
-
operation
|
|
175
|
-
|
|
169
|
+
operation,
|
|
170
|
+
operationSource: source
|
|
171
|
+
}, `${source}-${method}-${path}`))
|
|
176
172
|
});
|
|
177
173
|
}
|
|
178
174
|
function WarningBox(arg0) {
|
|
@@ -185,7 +181,8 @@ function WarningBox(arg0) {
|
|
|
185
181
|
function OpenApiDocument(arg0) {
|
|
186
182
|
const { spec, specPath, tagFilter } = arg0;
|
|
187
183
|
const t = useBuiltInText();
|
|
188
|
-
const resolved = useOpenApiSpec(spec, specPath);
|
|
184
|
+
const { spec: resolved, loading } = useOpenApiSpec(spec, specPath);
|
|
185
|
+
if (loading) return /* @__PURE__ */ jsx(WarningBox, { children: t("openapi.loading") });
|
|
189
186
|
if (!resolved) return /* @__PURE__ */ jsx(WarningBox, { children: t("openapi.specNotFound", { specPath: specPath ?? t("openapi.specPathMissing") }) });
|
|
190
187
|
return /* @__PURE__ */ jsx("article", {
|
|
191
188
|
className: "clarify-openapi-page flex h-full flex-col pt-16 pb-10",
|
|
@@ -201,23 +198,25 @@ function OpenApiDocument(arg0) {
|
|
|
201
198
|
function OpenApiOperationWithSpec(arg0) {
|
|
202
199
|
const { spec, path, method } = arg0;
|
|
203
200
|
const t = useBuiltInText();
|
|
204
|
-
const
|
|
205
|
-
if (!
|
|
201
|
+
const entry = getOpenApiOperationEntry(spec, path, method);
|
|
202
|
+
if (!entry) return /* @__PURE__ */ jsx(WarningBox, {
|
|
206
203
|
tone: "red",
|
|
207
204
|
children: t("openapi.endpointNotFound", { endpoint: `${method.toUpperCase()} ${path}` })
|
|
208
205
|
});
|
|
209
|
-
const normalizedMethod = method.toUpperCase();
|
|
206
|
+
const normalizedMethod = entry.method.toUpperCase();
|
|
210
207
|
return /* @__PURE__ */ jsx(OpenApiOperation$1, {
|
|
211
208
|
spec,
|
|
212
209
|
path,
|
|
213
210
|
method: normalizedMethod,
|
|
214
|
-
operation:
|
|
215
|
-
|
|
211
|
+
operation: entry.operation,
|
|
212
|
+
operationSource: entry.source
|
|
213
|
+
}, `${entry.source}-${normalizedMethod}-${path}`);
|
|
216
214
|
}
|
|
217
215
|
function OpenApiOperation(arg0) {
|
|
218
216
|
const { specPath, path, method } = arg0;
|
|
219
217
|
const t = useBuiltInText();
|
|
220
|
-
const spec = useOpenApiSpec(void 0, specPath);
|
|
218
|
+
const { spec, loading } = useOpenApiSpec(void 0, specPath);
|
|
219
|
+
if (loading) return /* @__PURE__ */ jsx(WarningBox, { children: t("openapi.loading") });
|
|
221
220
|
if (!spec) return /* @__PURE__ */ jsx(WarningBox, { children: t("openapi.specNotFound", { specPath }) });
|
|
222
221
|
return /* @__PURE__ */ jsx(OpenApiOperationWithSpec, {
|
|
223
222
|
spec,
|
|
@@ -227,10 +226,7 @@ function OpenApiOperation(arg0) {
|
|
|
227
226
|
}
|
|
228
227
|
function createOpenApiRouteComponent(data) {
|
|
229
228
|
return function OpenApiRoutePage() {
|
|
230
|
-
return /* @__PURE__ */ jsx(OpenApiDocument, {
|
|
231
|
-
spec: data.spec,
|
|
232
|
-
tagFilter: data.tagFilter
|
|
233
|
-
});
|
|
229
|
+
return /* @__PURE__ */ jsx(OpenApiDocument, { spec: data.spec });
|
|
234
230
|
};
|
|
235
231
|
}
|
|
236
232
|
//#endregion
|
|
@@ -274,6 +270,6 @@ function DocShell(arg0) {
|
|
|
274
270
|
});
|
|
275
271
|
}
|
|
276
272
|
//#endregion
|
|
277
|
-
export { AppShell, BuiltWithClarify, Button, Callout, Card, CardGroup, Code, CodeGroup, Collapse, DocShell, Feedback, GridPattern, Heading, HeroPattern, Logo, Markdown, Mermaid, OpenApiDocument, OpenApiOperation,
|
|
273
|
+
export { AppShell, BuiltWithClarify, Button, Callout, Card, CardGroup, Code, CodeGroup, Collapse, DocShell, Feedback, GridPattern, Heading, HeroPattern, Logo, Markdown, Mermaid, OpenApiDocument, OpenApiOperation, OpenApiSpecsContext, PageBanner, PageFooter, Pre, Prose, RuntimeSlot, RuntimeSlotsProvider, SectionProvider, SlotProvider, Tag, ThemeEditor, ThemeProvider, ThemeToggle, WebFrame, applyThemeVariables, createContentDiagnosticComponent, createOpenApiRouteComponent, markdownRemarkPlugins, parseCodeMeta, remToPx, render, themeBootstrapScript, themeEditorPresets, themePresets, useMDXComponents, useOpenApiSpecs, useSectionStore, useSlot, useTheme };
|
|
278
274
|
|
|
279
275
|
//# sourceMappingURL=index.js.map
|
package/output/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../source/app/ContentDiagnostic.tsx","../source/openapi/lib/spec-path.ts","../source/openapi/lib/utils.ts","../source/openapi/entry.tsx","../source/mdx/components.ts","../source/mdx/DocShell.tsx"],"sourcesContent":["import type { ComponentType } from 'react'\n\nimport { RenderErrorPanel } from './RenderErrorPanel'\n\nexport type ContentDiagnostic = {\n kind: string\n title: string\n message: string\n details?: string\n filePath?: string\n}\n\ntype ContentDiagnosticPanelProps = {\n data: ContentDiagnostic\n}\n\nfunction ContentDiagnosticPanel(params: ContentDiagnosticPanelProps) {\n const { data } = params\n const typeLabel = data.kind === 'mdx' ? 'MDX' : data.kind === 'openapi' ? 'OpenAPI' : 'Route'\n const detailsLabel = data.kind === 'mdx' ? 'Why it happened' : 'Details'\n const pathLabel = 'File'\n\n return (\n <RenderErrorPanel\n title={data.title}\n description={data.message}\n titleId=\"clarify-content-diagnostic-title\"\n metadata={[\n { label: pathLabel, value: data.filePath ?? 'Unknown' },\n { label: 'Type', value: typeLabel },\n ]}\n detailsLabel={detailsLabel}\n detailsContent={data.details ? (\n <pre className=\"max-h-(--clarify-error-details-max-height) overflow-auto whitespace-pre-wrap wrap-break-word font-mono\">\n {data.details}\n </pre>\n ) : null}\n />\n )\n}\n\nexport function createContentDiagnosticComponent(data: ContentDiagnostic): ComponentType {\n return function ContentDiagnosticComponent() {\n return <ContentDiagnosticPanel data={data} />\n }\n}\n","import { useLocation } from 'react-router-dom'\n\nimport { useConfig, useLocale, useOpenApis } from '../../core/context'\n\nimport type { OpenAPISpec } from './utils'\n\nconst VIRTUAL_PREFIX = 'virtual:clarify-page/'\n\nfunction resolveRelativePath(fromDir: string, to: string): string {\n const parts = (fromDir + '/' + to).split('/').filter(Boolean)\n const stack: string[] = []\n for (const part of parts) {\n if (part === '..') {\n stack.pop()\n } else if (part !== '.') {\n stack.push(part)\n }\n }\n return stack.join('/')\n}\n\nfunction normalizeSpecPath(specPath: string, currentRoutePath?: string, routePrefix = ''): string {\n if (specPath.startsWith(VIRTUAL_PREFIX)) return specPath\n\n const normalizedRoutePrefix = routePrefix.replace(/^\\/+|\\/+$/g, '')\n const normalizedSpecPath = specPath.startsWith('/') && normalizedRoutePrefix && specPath.slice(1).startsWith(`${normalizedRoutePrefix}/`)\n ? '/' + specPath.slice(normalizedRoutePrefix.length + 2)\n : specPath\n\n if (normalizedSpecPath.startsWith('/')) {\n return VIRTUAL_PREFIX + normalizedSpecPath.replace(/^\\//, '')\n }\n const fromDir = currentRoutePath === '/' ? '' : currentRoutePath?.replace(/^\\//, '').replace(/\\/[^/]*$/, '') ?? ''\n const normalizedFromDir = normalizedRoutePrefix && fromDir.startsWith(`${normalizedRoutePrefix}/`)\n ? fromDir.slice(normalizedRoutePrefix.length + 1)\n : fromDir\n return VIRTUAL_PREFIX + resolveRelativePath(normalizedFromDir, normalizedSpecPath)\n}\n\n/**\n * 为绝对 specPath 生成带 locale 前缀的候选模块 ID。\n *\n * 所有 locale 的 spec 都注册在 `virtual:clarify-page/<locale>/...` 下,\n * 因此绝对路径(如 `/api`)需要显式注入 locale 前缀才能命中。\n * 相对路径会因为当前路由已含 locale 前缀而自动解析到正确的 spec。\n */\nfunction localizeSpecModuleId(moduleId: string, specPath: string, locale: string | undefined, _defaultLocale: string | undefined): string | undefined {\n if (!locale) return undefined\n // 仅处理绝对路径;相对路径已经基于含 locale 前缀的当前路由解析。\n if (!specPath.startsWith('/') || specPath.startsWith(VIRTUAL_PREFIX)) return undefined\n const rest = moduleId.slice(VIRTUAL_PREFIX.length)\n if (rest.startsWith(`${locale}/`) || rest === locale) return undefined\n return `${VIRTUAL_PREFIX}${locale}/${rest}`\n}\n\nexport function useOpenApiSpec(spec?: OpenAPISpec, specPath?: string): OpenAPISpec | null {\n const config = useConfig()\n const locale = useLocale()\n const specs = useOpenApis()\n const location = useLocation()\n\n if (spec) return spec\n if (!specPath) return null\n\n const normalized = normalizeSpecPath(specPath, location.pathname, config.routePrefix)\n const localized = localizeSpecModuleId(normalized, specPath, locale, config.i18n?.defaultLocale)\n\n if (localized && specs[localized]) return specs[localized]\n return specs[normalized] ?? null\n}\n","import type { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'\n\nimport type { OpenApiRecord } from '../types'\n\nexport type OpenAPISpec = OpenAPIV3.Document | OpenAPIV3_1.Document\nexport type OpenAPIOperation = OpenAPIV3.OperationObject | OpenAPIV3_1.OperationObject\n\nexport const OPENAPI_HTTP_METHODS = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'] as const\n\nexport type OpenAPIHttpMethod = typeof OPENAPI_HTTP_METHODS[number]\n\nexport function isOpenAPIHttpMethod(method: string): method is OpenAPIHttpMethod {\n return (OPENAPI_HTTP_METHODS as readonly string[]).includes(method.toLowerCase())\n}\n\nfunction isRecord(value: unknown): value is OpenApiRecord {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction resolveOpenApiRef(spec: OpenAPISpec, ref: string): unknown {\n if (!ref.startsWith('#/')) return undefined\n\n return ref\n .slice(2)\n .split('/')\n .map((part) => part.replace(/~1/g, '/').replace(/~0/g, '~'))\n .reduce<unknown>((current, part) => (isRecord(current) ? current[part] : undefined), spec)\n}\n\nfunction getPathItem(spec: OpenAPISpec, path: string): OpenApiRecord | undefined {\n const pathItem = spec.paths?.[path]\n const resolved = isRecord(pathItem) && typeof pathItem.$ref === 'string' ? resolveOpenApiRef(spec, pathItem.$ref) : pathItem\n return isRecord(resolved) ? resolved : undefined\n}\n\nexport function getOpenApiOperation(spec: OpenAPISpec, path: string, method: string): OpenAPIOperation | undefined {\n if (!isOpenAPIHttpMethod(method)) return undefined\n return getPathItem(spec, path)?.[method.toLowerCase() as OpenAPIHttpMethod] as OpenAPIOperation | undefined\n}\n\nexport function listOpenApiOperations(spec: OpenAPISpec): Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> {\n const paths = spec.paths ?? {}\n const operations: Array<{ path: string; method: OpenAPIHttpMethod; operation: OpenAPIOperation }> = []\n\n for (const path of Object.keys(paths)) {\n const pathItem = getPathItem(spec, path)\n if (!pathItem) continue\n for (const method of OPENAPI_HTTP_METHODS) {\n const operation = pathItem[method]\n if (operation) operations.push({ path, method, operation: operation as OpenAPIOperation })\n }\n }\n\n return operations\n}\n","import type { ReactNode } from 'react'\n\nimport { PageTitleActions } from '../app/PageActions'\nimport { Prose } from '../components/Prose'\nimport { useBuiltInText } from '../core/i18n'\nimport { Markdown } from '../mdx/Markdown'\n\nimport { OpenApiOperation as OpenApiOperationComponent } from './components/OpenApiOperation'\nimport { useOpenApiSpec } from './lib/spec-path'\nimport { getOpenApiOperation, listOpenApiOperations } from './lib/utils'\nimport type { OpenAPISpec } from './lib/utils'\n\ntype OpenApiPathsProps = { spec: OpenAPISpec; tagFilter?: string[] }\n\ntype OpenApiHeaderProps = { spec: OpenAPISpec }\n\ntype WarningBoxProps = {\n children: ReactNode\n tone?: 'amber' | 'red'\n}\n\nexport type OpenApiDocumentProps = {\n spec?: OpenAPISpec\n specPath?: string\n tagFilter?: string[]\n}\n\nexport type OpenApiRouteData = {\n spec: OpenAPISpec\n tagFilter?: string[]\n}\n\ntype OpenApiOperationWithSpecProps = {\n spec: OpenAPISpec\n path: string\n method: string\n}\n\nexport type OpenApiOperationProps = {\n specPath: string\n path: string\n method: string\n}\n\nfunction OpenApiHeader(arg0: OpenApiHeaderProps): ReactNode {\n const { spec } = arg0\n\n const t = useBuiltInText()\n return (\n <header className=\"clarify-openapi-header mb-16 border-b border-(--clarify-theme-tokens-colors-border) pb-8\">\n <p className=\"mb-3 text-xs/6 font-medium tracking-widest text-(--clarify-ui-accent-text) uppercase\">\n {t('openapi.openApiReference')}\n </p>\n <div className=\"clarify-page-title-row flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <h1 className=\"clarify-page-title min-w-0 flex-1\">{spec.info?.title ?? t('openapi.apiDocumentation')}</h1>\n <PageTitleActions />\n </div>\n {spec.info?.description ? <Markdown className=\"lead mt-4 *:first:mt-0 *:last:mb-0\">{spec.info.description}</Markdown> : null}\n {spec.info?.version ? <p className=\"mt-4 text-sm text-(--clarify-ui-text-faint)\">{t('openapi.version', { version: spec.info.version })}</p> : null}\n </header>\n )\n}\n\nfunction operationMatchesTags(operationTags: string[] | undefined, filterTags: string[] | undefined): boolean {\n if (!filterTags?.length) return true\n return operationTags?.some(tag => filterTags.includes(tag)) ?? false\n}\n\nfunction OpenApiPaths(arg0: OpenApiPathsProps): ReactNode {\n const { spec, tagFilter } = arg0\n\n const entries = listOpenApiOperations(spec)\n .filter(({ operation }) => operationMatchesTags(operation.tags, tagFilter))\n .map(({ path, method, operation }) => ({\n path,\n method: method.toUpperCase(),\n operation,\n }))\n\n return (\n <div className=\"clarify-api-endpoints divide-y divide-zinc-200/70 dark:divide-white/10\">\n {entries.map(({ path, method, operation }) => (\n <OpenApiOperationComponent key={`${method}-${path}`} spec={spec} path={path} method={method} operation={operation} />\n ))}\n </div>\n )\n}\n\nfunction WarningBox(arg0: WarningBoxProps): ReactNode {\n const { children, tone = 'amber' } = arg0\n\n const classes = tone === 'red'\n ? 'rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200'\n : 'rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200'\n\n return <div className={`clarify-warning ${classes}`}>{children}</div>\n}\n\nexport function OpenApiDocument(arg0: OpenApiDocumentProps): ReactNode {\n const { spec, specPath, tagFilter } = arg0\n const t = useBuiltInText()\n const resolved = useOpenApiSpec(spec, specPath)\n\n if (!resolved) {\n return <WarningBox>{t('openapi.specNotFound', { specPath: specPath ?? t('openapi.specPathMissing') })}</WarningBox>\n }\n\n return (\n <article className=\"clarify-openapi-page flex h-full flex-col pt-16 pb-10\">\n <Prose className=\"flex-auto\">\n <OpenApiHeader spec={resolved} />\n <OpenApiPaths spec={resolved} tagFilter={tagFilter} />\n </Prose>\n </article>\n )\n}\n\nfunction OpenApiOperationWithSpec(arg0: OpenApiOperationWithSpecProps): ReactNode {\n const { spec, path, method } = arg0\n const t = useBuiltInText()\n const op = getOpenApiOperation(spec, path, method)\n\n if (!op) {\n return <WarningBox tone=\"red\">{t('openapi.endpointNotFound', { endpoint: `${method.toUpperCase()} ${path}` })}</WarningBox>\n }\n\n const normalizedMethod = method.toUpperCase()\n return <OpenApiOperationComponent key={`${normalizedMethod}-${path}`} spec={spec} path={path} method={normalizedMethod} operation={op} />\n}\n\nexport function OpenApiOperation(arg0: OpenApiOperationProps): ReactNode {\n const { specPath, path, method } = arg0\n const t = useBuiltInText()\n const spec = useOpenApiSpec(undefined, specPath)\n\n if (!spec) {\n return <WarningBox>{t('openapi.specNotFound', { specPath })}</WarningBox>\n }\n\n return <OpenApiOperationWithSpec spec={spec} path={path} method={method} />\n}\n\nexport function createOpenApiRouteComponent(data: OpenApiRouteData) {\n return function OpenApiRoutePage() {\n return <OpenApiDocument spec={data.spec} tagFilter={data.tagFilter} />\n }\n}\n","import { Collapse } from '../components/Collapse'\nimport { Mermaid } from '../components/Mermaid'\nimport { OpenApiDocument, OpenApiOperation } from '../openapi'\n\nimport { Markdown } from './Markdown'\nimport * as mdxPrimitives from './primitives'\n\nconst builtInMDXComponents = {\n ...mdxPrimitives,\n Markdown,\n Collapse,\n Mermaid,\n}\n\nconst builtInOpenAPIComponents = {\n OpenApiDocument,\n OpenApiOperation,\n}\n\nexport function useMDXComponents(components: Record<string, unknown> = {}) {\n return {\n ...components,\n ...builtInMDXComponents,\n ...builtInOpenAPIComponents,\n }\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\n\nexport type DocShellProps = {\n title: string\n subtitle?: string\n children: ReactNode\n}\n\nexport function DocShell(arg0: DocShellProps) {\n const { title, subtitle, children } = arg0\n\n return (\n <main className=\"clarify-doc-shell min-h-screen bg-(--clarify-theme-tokens-colors-background) px-6 py-10 text-(--clarify-theme-tokens-colors-foreground) md:px-10\">\n <div className=\"mx-auto max-w-6xl\">\n <header className=\"mb-10\">\n <h1 className=\"text-3xl font-bold tracking-tight md:text-5xl\">{title}</h1>\n {subtitle ? <p className=\"mt-3 max-w-2xl text-(--clarify-ui-text-soft)\">{subtitle}</p> : null}\n </header>\n <Prose>{children}</Prose>\n </div>\n </main>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../source/app/ContentDiagnostic.tsx","../source/openapi/lib/spec-path.ts","../source/openapi/entry.tsx","../source/mdx/components.ts","../source/mdx/DocShell.tsx"],"sourcesContent":["import type { ComponentType } from 'react'\n\nimport { RenderErrorPanel } from './RenderErrorPanel'\n\nexport type ContentDiagnostic = {\n kind: string\n title: string\n message: string\n details?: string\n filePath?: string\n}\n\ntype ContentDiagnosticPanelProps = {\n data: ContentDiagnostic\n}\n\nfunction ContentDiagnosticPanel(params: ContentDiagnosticPanelProps) {\n const { data } = params\n const typeLabel = data.kind === 'mdx' ? 'MDX' : data.kind === 'openapi' ? 'OpenAPI' : 'Route'\n const detailsLabel = data.kind === 'mdx' ? 'Why it happened' : 'Details'\n const pathLabel = 'File'\n\n return (\n <RenderErrorPanel\n title={data.title}\n description={data.message}\n titleId=\"clarify-content-diagnostic-title\"\n metadata={[\n { label: pathLabel, value: data.filePath ?? 'Unknown' },\n { label: 'Type', value: typeLabel },\n ]}\n detailsLabel={detailsLabel}\n detailsContent={data.details ? (\n <pre className=\"max-h-(--clarify-error-details-max-height) overflow-auto whitespace-pre-wrap wrap-break-word font-mono\">\n {data.details}\n </pre>\n ) : null}\n />\n )\n}\n\nexport function createContentDiagnosticComponent(data: ContentDiagnostic): ComponentType {\n return function ContentDiagnosticComponent() {\n return <ContentDiagnosticPanel data={data} />\n }\n}\n","import { useEffect, useState } from 'react'\nimport { useLocation } from 'react-router-dom'\n\nimport { useConfig, useLocale, useOpenApiSpecs } from '../../core/context'\n\nimport type { OpenAPISpec } from './utils'\n\ntype OpenApiSpecResult = {\n spec: OpenAPISpec | null\n loading: boolean\n}\n\ntype OpenApiSpecModule = { default: OpenAPISpec } | OpenAPISpec\n\ntype LoadedSpecState = {\n loader?: () => Promise<OpenApiSpecModule>\n spec: OpenAPISpec | null\n}\n\nfunction isOpenApiSpecLoader(value: unknown): value is () => Promise<OpenApiSpecModule> {\n return typeof value === 'function'\n}\n\nfunction getLoadedSpec(value: OpenApiSpecModule): OpenAPISpec {\n return value && typeof value === 'object' && 'default' in value\n ? value.default\n : value\n}\n\nconst VIRTUAL_PREFIX = 'virtual:clarify-page/'\n\nfunction resolveRelativePath(fromDir: string, to: string): string {\n const parts = (fromDir + '/' + to).split('/').filter(Boolean)\n const stack: string[] = []\n for (const part of parts) {\n if (part === '..') {\n stack.pop()\n } else if (part !== '.') {\n stack.push(part)\n }\n }\n return stack.join('/')\n}\n\nfunction normalizeSpecPath(specPath: string, currentRoutePath?: string, routePrefix = ''): string {\n if (specPath.startsWith(VIRTUAL_PREFIX)) return specPath\n\n const normalizedRoutePrefix = routePrefix.replace(/^\\/+|\\/+$/g, '')\n const normalizedSpecPath = specPath.startsWith('/') && normalizedRoutePrefix && specPath.slice(1).startsWith(`${normalizedRoutePrefix}/`)\n ? '/' + specPath.slice(normalizedRoutePrefix.length + 2)\n : specPath\n\n if (normalizedSpecPath.startsWith('/')) {\n return VIRTUAL_PREFIX + normalizedSpecPath.replace(/^\\//, '')\n }\n const fromDir = currentRoutePath === '/' ? '' : currentRoutePath?.replace(/^\\//, '').replace(/\\/[^/]*$/, '') ?? ''\n const normalizedFromDir = normalizedRoutePrefix && fromDir.startsWith(`${normalizedRoutePrefix}/`)\n ? fromDir.slice(normalizedRoutePrefix.length + 1)\n : fromDir\n return VIRTUAL_PREFIX + resolveRelativePath(normalizedFromDir, normalizedSpecPath)\n}\n\n/**\n * Prefer a locale-qualified registry key for absolute specPath values, then\n * fall back to the normalized key. The CLI registers visible route aliases,\n * while relative paths already resolve through the current localized route.\n */\nfunction specModuleCandidates(moduleId: string, specPath: string, locale: string | undefined): string[] {\n const candidates: string[] = []\n if (locale && specPath.startsWith('/') && !specPath.startsWith(VIRTUAL_PREFIX)) {\n const rest = moduleId.slice(VIRTUAL_PREFIX.length)\n if (!rest.startsWith(`${locale}/`) && rest !== locale) candidates.push(`${VIRTUAL_PREFIX}${locale}/${rest}`)\n }\n candidates.push(moduleId)\n return candidates\n}\n\nexport function useOpenApiSpec(spec?: OpenAPISpec, specPath?: string): OpenApiSpecResult {\n const config = useConfig()\n const locale = useLocale()\n const specs = useOpenApiSpecs()\n const location = useLocation()\n const [loadedSpec, setLoadedSpec] = useState<LoadedSpecState>({ spec: null })\n const normalized = specPath ? normalizeSpecPath(specPath, location.pathname, config.routePrefix) : undefined\n const candidates = specPath && normalized ? specModuleCandidates(normalized, specPath, locale) : []\n const registryValue = candidates.map(candidate => specs[candidate]).find(Boolean)\n\n useEffect(() => {\n let cancelled = false\n\n if (!isOpenApiSpecLoader(registryValue)) return\n\n registryValue().then(module => {\n if (!cancelled) setLoadedSpec({ loader: registryValue, spec: getLoadedSpec(module) })\n }).catch(() => {\n if (!cancelled) setLoadedSpec({ loader: registryValue, spec: null })\n })\n\n return () => {\n cancelled = true\n }\n }, [registryValue])\n\n if (spec) return { spec, loading: false }\n if (!specPath) return { spec: null, loading: false }\n if (isOpenApiSpecLoader(registryValue)) {\n return loadedSpec.loader === registryValue\n ? { spec: loadedSpec.spec, loading: false }\n : { spec: null, loading: true }\n }\n return { spec: registryValue ?? null, loading: false }\n}\n","import type { ReactNode } from 'react'\n\nimport { PageTitleActions } from '../app/PageActions'\nimport { Prose } from '../components/Prose'\nimport { useBuiltInText } from '../core/i18n'\nimport { Markdown } from '../mdx/Markdown'\n\nimport { OpenApiOperation as OpenApiOperationComponent } from './components/OpenApiOperation'\nimport { useOpenApiSpec } from './lib/spec-path'\nimport { getOpenApiOperationEntry, listOpenApiOperations } from './lib/utils'\nimport type { OpenAPISpec } from './lib/utils'\n\ntype OpenApiPathsProps = { spec: OpenAPISpec; tagFilter?: string[] }\n\ntype OpenApiHeaderProps = { spec: OpenAPISpec }\n\ntype WarningBoxProps = {\n children: ReactNode\n tone?: 'amber' | 'red'\n}\n\nexport type OpenApiDocumentProps = {\n spec?: OpenAPISpec\n specPath?: string\n tagFilter?: string[]\n}\n\nexport type OpenApiRouteData = {\n spec: OpenAPISpec\n}\n\ntype OpenApiOperationWithSpecProps = {\n spec: OpenAPISpec\n path: string\n method: string\n}\n\nexport type OpenApiOperationProps = {\n specPath: string\n path: string\n method: string\n}\n\nfunction OpenApiHeader(arg0: OpenApiHeaderProps): ReactNode {\n const { spec } = arg0\n\n const t = useBuiltInText()\n return (\n <header className=\"clarify-openapi-header mb-16 border-b border-(--clarify-theme-tokens-colors-border) pb-8\">\n <p className=\"mb-3 text-xs/6 font-medium tracking-widest text-(--clarify-ui-accent-text) uppercase\">\n {t('openapi.openApiReference')}\n </p>\n <div className=\"clarify-page-title-row flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <h1 className=\"clarify-page-title min-w-0 flex-1\">{spec.info?.title ?? t('openapi.apiDocumentation')}</h1>\n <PageTitleActions />\n </div>\n {spec.info?.description ? <Markdown className=\"lead mt-4 *:first:mt-0 *:last:mb-0\">{spec.info.description}</Markdown> : null}\n {spec.info?.version ? <p className=\"mt-4 text-sm text-(--clarify-ui-text-faint)\">{t('openapi.version', { version: spec.info.version })}</p> : null}\n </header>\n )\n}\n\nfunction operationMatchesTags(operationTags: string[] | undefined, filterTags: string[] | undefined): boolean {\n if (!filterTags?.length) return true\n return operationTags?.some(tag => filterTags.includes(tag)) ?? false\n}\n\nfunction OpenApiPaths(arg0: OpenApiPathsProps): ReactNode {\n const { spec, tagFilter } = arg0\n\n const entries = listOpenApiOperations(spec)\n .filter(({ operation }) => operationMatchesTags(operation.tags, tagFilter))\n .map(({ path, method, operation, source }) => ({\n path,\n method: method.toUpperCase(),\n operation,\n source,\n }))\n\n return (\n <div className=\"clarify-api-endpoints divide-y divide-zinc-200/70 dark:divide-white/10\">\n {entries.map(({ path, method, operation, source }) => (\n <OpenApiOperationComponent key={`${source}-${method}-${path}`} spec={spec} path={path} method={method} operation={operation} operationSource={source} />\n ))}\n </div>\n )\n}\n\nfunction WarningBox(arg0: WarningBoxProps): ReactNode {\n const { children, tone = 'amber' } = arg0\n\n const classes = tone === 'red'\n ? 'rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700 dark:border-red-500/30 dark:bg-red-500/10 dark:text-red-200'\n : 'rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm text-amber-700 dark:border-amber-500/30 dark:bg-amber-500/10 dark:text-amber-200'\n\n return <div className={`clarify-warning ${classes}`}>{children}</div>\n}\n\nexport function OpenApiDocument(arg0: OpenApiDocumentProps): ReactNode {\n const { spec, specPath, tagFilter } = arg0\n const t = useBuiltInText()\n const { spec: resolved, loading } = useOpenApiSpec(spec, specPath)\n\n if (loading) {\n return <WarningBox>{t('openapi.loading')}</WarningBox>\n }\n if (!resolved) {\n return <WarningBox>{t('openapi.specNotFound', { specPath: specPath ?? t('openapi.specPathMissing') })}</WarningBox>\n }\n\n return (\n <article className=\"clarify-openapi-page flex h-full flex-col pt-16 pb-10\">\n <Prose className=\"flex-auto\">\n <OpenApiHeader spec={resolved} />\n <OpenApiPaths spec={resolved} tagFilter={tagFilter} />\n </Prose>\n </article>\n )\n}\n\nfunction OpenApiOperationWithSpec(arg0: OpenApiOperationWithSpecProps): ReactNode {\n const { spec, path, method } = arg0\n const t = useBuiltInText()\n const entry = getOpenApiOperationEntry(spec, path, method)\n\n if (!entry) {\n return <WarningBox tone=\"red\">{t('openapi.endpointNotFound', { endpoint: `${method.toUpperCase()} ${path}` })}</WarningBox>\n }\n\n const normalizedMethod = entry.method.toUpperCase()\n return <OpenApiOperationComponent key={`${entry.source}-${normalizedMethod}-${path}`} spec={spec} path={path} method={normalizedMethod} operation={entry.operation} operationSource={entry.source} />\n}\n\nexport function OpenApiOperation(arg0: OpenApiOperationProps): ReactNode {\n const { specPath, path, method } = arg0\n const t = useBuiltInText()\n const { spec, loading } = useOpenApiSpec(undefined, specPath)\n\n if (loading) {\n return <WarningBox>{t('openapi.loading')}</WarningBox>\n }\n if (!spec) {\n return <WarningBox>{t('openapi.specNotFound', { specPath })}</WarningBox>\n }\n\n return <OpenApiOperationWithSpec spec={spec} path={path} method={method} />\n}\n\nexport function createOpenApiRouteComponent(data: OpenApiRouteData) {\n return function OpenApiRoutePage() {\n return <OpenApiDocument spec={data.spec} />\n }\n}\n","import { Collapse } from '../components/Collapse'\nimport { Mermaid } from '../components/Mermaid'\nimport { OpenApiDocument, OpenApiOperation } from '../openapi'\n\nimport { Markdown } from './Markdown'\nimport * as mdxPrimitives from './primitives'\n\nconst builtInMDXComponents = {\n ...mdxPrimitives,\n Markdown,\n Collapse,\n Mermaid,\n}\n\nconst builtInOpenAPIComponents = {\n OpenApiDocument,\n OpenApiOperation,\n}\n\nexport function useMDXComponents(components: Record<string, unknown> = {}) {\n return {\n ...components,\n ...builtInMDXComponents,\n ...builtInOpenAPIComponents,\n }\n}\n","import type { ReactNode } from 'react'\n\nimport { Prose } from '../components/Prose'\n\nexport type DocShellProps = {\n title: string\n subtitle?: string\n children: ReactNode\n}\n\nexport function DocShell(arg0: DocShellProps) {\n const { title, subtitle, children } = arg0\n\n return (\n <main className=\"clarify-doc-shell min-h-screen bg-(--clarify-theme-tokens-colors-background) px-6 py-10 text-(--clarify-theme-tokens-colors-foreground) md:px-10\">\n <div className=\"mx-auto max-w-6xl\">\n <header className=\"mb-10\">\n <h1 className=\"text-3xl font-bold tracking-tight md:text-5xl\">{title}</h1>\n {subtitle ? <p className=\"mt-3 max-w-2xl text-(--clarify-ui-text-soft)\">{subtitle}</p> : null}\n </header>\n <Prose>{children}</Prose>\n </div>\n </main>\n )\n}\n"],"mappings":"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"}
|
package/output/markdown.cjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_remark = require("./remark-
|
|
2
|
+
const require_remark = require("./remark-DTLbG8PK.cjs");
|
|
3
3
|
exports.markdownRemarkPlugins = require_remark.markdownRemarkPlugins;
|
|
4
|
+
exports.parseCodeMeta = require_remark.parseCodeMeta;
|
package/output/markdown.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { markdownRemarkPlugins } from './mdx/remark';
|
|
1
|
+
export { markdownRemarkPlugins, parseCodeMeta } from './mdx/remark';
|
package/output/markdown.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as markdownRemarkPlugins } from "./remark-
|
|
2
|
-
export { markdownRemarkPlugins };
|
|
1
|
+
import { n as parseCodeMeta, t as markdownRemarkPlugins } from "./remark-C9iRQM0R.js";
|
|
2
|
+
export { markdownRemarkPlugins, parseCodeMeta };
|
package/output/mdx/remark.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export type MarkdownNode = {
|
|
|
7
7
|
};
|
|
8
8
|
children?: MarkdownNode[];
|
|
9
9
|
};
|
|
10
|
+
export declare function parseCodeMeta(meta: string | null | undefined): Record<string, string>;
|
|
10
11
|
declare function remarkCodeMeta(): (tree: MarkdownNode) => void;
|
|
11
12
|
export declare const markdownRemarkPlugins: (typeof remarkGfm | typeof remarkCodeMeta)[];
|
|
12
13
|
export {};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import { OpenAPIOperation, OpenAPISpec } from '../lib/utils';
|
|
2
|
+
import { OpenAPIOperation, OpenAPIOperationSource, OpenAPISpec } from '../lib/utils';
|
|
3
3
|
import { MediaTypeEntry, OpenApiParameter, OpenApiRecord, OpenApiServer, RequestAuthInput } from '../types';
|
|
4
4
|
type EndpointRequestProps = {
|
|
5
5
|
spec: OpenAPISpec;
|
|
6
6
|
path: string;
|
|
7
7
|
method: string;
|
|
8
|
+
operationSource?: OpenAPIOperationSource;
|
|
8
9
|
description?: string;
|
|
9
10
|
groupedParameters: {
|
|
10
11
|
path: OpenApiParameter[];
|
|
@@ -27,6 +28,7 @@ export declare function EndpointRequest(arg0: EndpointRequestProps): ReactNode;
|
|
|
27
28
|
type EndpointResponseProps = {
|
|
28
29
|
spec: OpenAPISpec;
|
|
29
30
|
operation: OpenAPIOperation;
|
|
31
|
+
operationSource?: OpenAPIOperationSource;
|
|
30
32
|
sharedExampleKey?: string;
|
|
31
33
|
onSelectExampleKey?: (value: string) => void;
|
|
32
34
|
selectedStatus?: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { buildRequestCodeExamples } from '../lib/request-code';
|
|
3
|
-
import { OpenAPIOperation, OpenAPISpec } from '../lib/utils';
|
|
4
|
-
import { MediaTypeEntry, OpenApiParameter, RequestAuthInput } from '../types';
|
|
3
|
+
import { OpenAPIOperation, OpenAPIOperationSource, OpenAPISpec } from '../lib/utils';
|
|
4
|
+
import { ExampleEntry, MediaTypeEntry, OpenApiParameter, RequestAuthInput } from '../types';
|
|
5
5
|
type RequestExamplesPanelProps = {
|
|
6
6
|
spec: OpenAPISpec;
|
|
7
7
|
path: string;
|
|
@@ -13,6 +13,7 @@ type RequestExamplesPanelProps = {
|
|
|
13
13
|
selectedServer: Parameters<typeof buildRequestCodeExamples>[0]['server'];
|
|
14
14
|
serverVariables: Record<string, string>;
|
|
15
15
|
auth?: RequestAuthInput;
|
|
16
|
+
operationSource?: OpenAPIOperationSource;
|
|
16
17
|
sharedExampleKey?: string;
|
|
17
18
|
onSelectExampleKey?: (value: string) => void;
|
|
18
19
|
};
|
|
@@ -20,10 +21,12 @@ export declare function RequestExamplesPanel(arg0: RequestExamplesPanelProps): R
|
|
|
20
21
|
type ResponseExamplesPanelProps = {
|
|
21
22
|
operation: OpenAPIOperation;
|
|
22
23
|
spec?: OpenAPISpec;
|
|
24
|
+
title?: string;
|
|
23
25
|
sharedExampleKey?: string;
|
|
24
26
|
onSelectExampleKey?: (value: string) => void;
|
|
25
27
|
selectedStatus?: string;
|
|
26
28
|
onSelectStatus?: (value: string) => void;
|
|
27
29
|
};
|
|
30
|
+
export declare function getResponseExampleBody(content: MediaTypeEntry | undefined, example: ExampleEntry | undefined): string;
|
|
28
31
|
export declare function ResponseExamplesPanel(arg0: ResponseExamplesPanelProps): ReactNode;
|
|
29
32
|
export { getServers, getServerKey, getServerLabel, defaultServerVariables, authPlaceholder, authLabel, getAuthOptions, type AuthOption, } from './helpers';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import { OpenAPIOperation, OpenAPISpec } from '../lib/utils';
|
|
2
|
+
import { OpenAPIOperation, OpenAPIOperationSource, OpenAPISpec } from '../lib/utils';
|
|
3
3
|
import { OpenApiServer } from '../types';
|
|
4
4
|
import { AuthOption } from './ExamplePanels';
|
|
5
5
|
export type OpenApiOperationProps = {
|
|
@@ -7,6 +7,7 @@ export type OpenApiOperationProps = {
|
|
|
7
7
|
path: string;
|
|
8
8
|
method: string;
|
|
9
9
|
operation: OpenAPIOperation;
|
|
10
|
+
operationSource?: OpenAPIOperationSource;
|
|
10
11
|
};
|
|
11
12
|
type EndpointPathProps = {
|
|
12
13
|
path: string;
|
|
@@ -16,6 +17,7 @@ type EndpointPathProps = {
|
|
|
16
17
|
export declare function EndpointPath(arg0: EndpointPathProps): ReactNode;
|
|
17
18
|
type EndpointIdentityProps = {
|
|
18
19
|
method: string;
|
|
20
|
+
operationSource: OpenAPIOperationSource;
|
|
19
21
|
path: string;
|
|
20
22
|
servers: OpenApiServer[];
|
|
21
23
|
selectedServerKey: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getMediaTypeEntries, getRequestBody } from '../lib/helpers';
|
|
2
|
-
import { OpenAPIOperation, OpenAPISpec } from '../lib/utils';
|
|
2
|
+
import { OpenAPIOperation, OpenAPIOperationSource, OpenAPISpec } from '../lib/utils';
|
|
3
3
|
import { OpenApiParameter, OpenApiServer, RequestAuthInput } from '../types';
|
|
4
4
|
import { AuthOption } from './ExamplePanels';
|
|
5
5
|
export type OperationRequestState = {
|
|
@@ -15,7 +15,7 @@ export type OperationRequestState = {
|
|
|
15
15
|
header: OpenApiParameter[];
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
|
-
export declare function useOperationRequestState(spec: OpenAPISpec, path: string, operation: OpenAPIOperation): OperationRequestState;
|
|
18
|
+
export declare function useOperationRequestState(spec: OpenAPISpec, path: string, operation: OpenAPIOperation, source?: OpenAPIOperationSource): OperationRequestState;
|
|
19
19
|
export type OperationServerState = {
|
|
20
20
|
servers: OpenApiServer[];
|
|
21
21
|
selectedServerKey: string;
|
|
@@ -27,7 +27,7 @@ export type OperationServerState = {
|
|
|
27
27
|
onToggleServer: () => void;
|
|
28
28
|
closeServer: () => void;
|
|
29
29
|
};
|
|
30
|
-
export declare function useOperationServerState(spec: OpenAPISpec, operation: OpenAPIOperation, path: string): OperationServerState;
|
|
30
|
+
export declare function useOperationServerState(spec: OpenAPISpec, operation: OpenAPIOperation, path: string, source?: OpenAPIOperationSource): OperationServerState;
|
|
31
31
|
export type OperationAuthState = {
|
|
32
32
|
authOptions: AuthOption[];
|
|
33
33
|
selectedAuthName: string;
|