@valkyrianlabs/payload-markdown-docs 0.1.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +195 -0
- package/dist/admin/DocsSetManager.d.ts +2 -0
- package/dist/admin/DocsSetManager.js +298 -0
- package/dist/admin/DocsSetManager.js.map +1 -0
- package/dist/admin/docsSetManagerData.d.ts +25 -0
- package/dist/admin/docsSetManagerData.js +266 -0
- package/dist/admin/docsSetManagerData.js.map +1 -0
- package/dist/admin/docsSetManagerTypes.d.ts +103 -0
- package/dist/admin/docsSetManagerTypes.js +3 -0
- package/dist/admin/docsSetManagerTypes.js.map +1 -0
- package/dist/admin/index.d.ts +3 -0
- package/dist/admin/index.js +4 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/cli/commands/install.d.ts +2 -0
- package/dist/cli/commands/install.js +211 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/keygen.d.ts +2 -0
- package/dist/cli/commands/keygen.js +89 -0
- package/dist/cli/commands/keygen.js.map +1 -0
- package/dist/cli/commands/manifest.d.ts +2 -0
- package/dist/cli/commands/manifest.js +50 -0
- package/dist/cli/commands/manifest.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +2 -0
- package/dist/cli/commands/plan.js +110 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/push.d.ts +3 -0
- package/dist/cli/commands/push.js +308 -0
- package/dist/cli/commands/push.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +3 -0
- package/dist/cli/commands/validate.js +109 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/filesystem.d.ts +20 -0
- package/dist/cli/filesystem.js +96 -0
- package/dist/cli/filesystem.js.map +1 -0
- package/dist/cli/format.d.ts +35 -0
- package/dist/cli/format.js +76 -0
- package/dist/cli/format.js.map +1 -0
- package/dist/cli/http.d.ts +19 -0
- package/dist/cli/http.js +39 -0
- package/dist/cli/http.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +214 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parseArgs.d.ts +5 -0
- package/dist/cli/parseArgs.js +219 -0
- package/dist/cli/parseArgs.js.map +1 -0
- package/dist/cli/types.d.ts +51 -0
- package/dist/cli/types.js +3 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/collections/docs.d.ts +9 -0
- package/dist/collections/docs.js +168 -0
- package/dist/collections/docs.js.map +1 -0
- package/dist/collections/docsGroups.d.ts +5 -0
- package/dist/collections/docsGroups.js +57 -0
- package/dist/collections/docsGroups.js.map +1 -0
- package/dist/collections/docsSets.d.ts +8 -0
- package/dist/collections/docsSets.js +158 -0
- package/dist/collections/docsSets.js.map +1 -0
- package/dist/collections/index.d.ts +10 -0
- package/dist/collections/index.js +7 -0
- package/dist/collections/index.js.map +1 -0
- package/dist/collections/nonces.d.ts +6 -0
- package/dist/collections/nonces.js +57 -0
- package/dist/collections/nonces.js.map +1 -0
- package/dist/collections/syncRuns.d.ts +5 -0
- package/dist/collections/syncRuns.js +139 -0
- package/dist/collections/syncRuns.js.map +1 -0
- package/dist/constants.d.ts +21 -0
- package/dist/constants.js +23 -0
- package/dist/constants.js.map +1 -0
- package/dist/endpoints/index.d.ts +2 -0
- package/dist/endpoints/index.js +3 -0
- package/dist/endpoints/index.js.map +1 -0
- package/dist/endpoints/sync.d.ts +47 -0
- package/dist/endpoints/sync.js +616 -0
- package/dist/endpoints/sync.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/next/PayloadMarkdownDocsPage.d.ts +7 -0
- package/dist/next/PayloadMarkdownDocsPage.js +142 -0
- package/dist/next/PayloadMarkdownDocsPage.js.map +1 -0
- package/dist/next/index.d.ts +9 -0
- package/dist/next/index.js +7 -0
- package/dist/next/index.js.map +1 -0
- package/dist/next/markdown.d.ts +14 -0
- package/dist/next/markdown.js +232 -0
- package/dist/next/markdown.js.map +1 -0
- package/dist/next/metadata.d.ts +3 -0
- package/dist/next/metadata.js +33 -0
- package/dist/next/metadata.js.map +1 -0
- package/dist/next/records.d.ts +14 -0
- package/dist/next/records.js +146 -0
- package/dist/next/records.js.map +1 -0
- package/dist/next/route.d.ts +6 -0
- package/dist/next/route.js +271 -0
- package/dist/next/route.js.map +1 -0
- package/dist/next/sidebar.d.ts +15 -0
- package/dist/next/sidebar.js +137 -0
- package/dist/next/sidebar.js.map +1 -0
- package/dist/next/types.d.ts +117 -0
- package/dist/next/types.js +3 -0
- package/dist/next/types.js.map +1 -0
- package/dist/payload/applyDocsSync.d.ts +54 -0
- package/dist/payload/applyDocsSync.js +176 -0
- package/dist/payload/applyDocsSync.js.map +1 -0
- package/dist/payload/docsConflicts.d.ts +12 -0
- package/dist/payload/docsConflicts.js +34 -0
- package/dist/payload/docsConflicts.js.map +1 -0
- package/dist/payload/docsData.d.ts +23 -0
- package/dist/payload/docsData.js +59 -0
- package/dist/payload/docsData.js.map +1 -0
- package/dist/payload/docsSets.d.ts +38 -0
- package/dist/payload/docsSets.js +57 -0
- package/dist/payload/docsSets.js.map +1 -0
- package/dist/payload/existingDocs.d.ts +43 -0
- package/dist/payload/existingDocs.js +97 -0
- package/dist/payload/existingDocs.js.map +1 -0
- package/dist/payload/index.d.ts +15 -0
- package/dist/payload/index.js +10 -0
- package/dist/payload/index.js.map +1 -0
- package/dist/payload/routeCollisions.d.ts +31 -0
- package/dist/payload/routeCollisions.js +104 -0
- package/dist/payload/routeCollisions.js.map +1 -0
- package/dist/payload/syncRuns.d.ts +60 -0
- package/dist/payload/syncRuns.js +53 -0
- package/dist/payload/syncRuns.js.map +1 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/plugin.js +165 -0
- package/dist/plugin.js.map +1 -0
- package/dist/routing/index.d.ts +3 -0
- package/dist/routing/index.js +4 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/paths.d.ts +7 -0
- package/dist/routing/paths.js +23 -0
- package/dist/routing/paths.js.map +1 -0
- package/dist/routing/reservations.d.ts +37 -0
- package/dist/routing/reservations.js +79 -0
- package/dist/routing/reservations.js.map +1 -0
- package/dist/security/canonical.d.ts +12 -0
- package/dist/security/canonical.js +24 -0
- package/dist/security/canonical.js.map +1 -0
- package/dist/security/githubOidc.d.ts +45 -0
- package/dist/security/githubOidc.js +177 -0
- package/dist/security/githubOidc.js.map +1 -0
- package/dist/security/headers.d.ts +22 -0
- package/dist/security/headers.js +44 -0
- package/dist/security/headers.js.map +1 -0
- package/dist/security/index.d.ts +15 -0
- package/dist/security/index.js +9 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/jwks.d.ts +20 -0
- package/dist/security/jwks.js +40 -0
- package/dist/security/jwks.js.map +1 -0
- package/dist/security/jwt.d.ts +10 -0
- package/dist/security/jwt.js +42 -0
- package/dist/security/jwt.js.map +1 -0
- package/dist/security/nonce.d.ts +34 -0
- package/dist/security/nonce.js +43 -0
- package/dist/security/nonce.js.map +1 -0
- package/dist/security/sign.d.ts +13 -0
- package/dist/security/sign.js +39 -0
- package/dist/security/sign.js.map +1 -0
- package/dist/security/verify.d.ts +28 -0
- package/dist/security/verify.js +54 -0
- package/dist/security/verify.js.map +1 -0
- package/dist/skills/codex/SKILL.md +173 -0
- package/dist/skills/codex/examples/docs-page.md +42 -0
- package/dist/skills/codex/examples/github-actions.md +64 -0
- package/dist/skills/codex/reference/admin.md +28 -0
- package/dist/skills/codex/reference/frontmatter.md +39 -0
- package/dist/skills/codex/reference/payload-markdown-directives.md +77 -0
- package/dist/skills/codex/reference/routing.md +35 -0
- package/dist/skills/codex/reference/sync.md +35 -0
- package/dist/skills/codex/reference/troubleshooting.md +53 -0
- package/dist/skills/codex/reference/workflow.md +39 -0
- package/dist/sync/aiExportManifest.d.ts +58 -0
- package/dist/sync/aiExportManifest.js +430 -0
- package/dist/sync/aiExportManifest.js.map +1 -0
- package/dist/sync/frontmatter.d.ts +28 -0
- package/dist/sync/frontmatter.js +210 -0
- package/dist/sync/frontmatter.js.map +1 -0
- package/dist/sync/hash.d.ts +1 -0
- package/dist/sync/hash.js +8 -0
- package/dist/sync/hash.js.map +1 -0
- package/dist/sync/index.d.ts +12 -0
- package/dist/sync/index.js +9 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/manifest.d.ts +58 -0
- package/dist/sync/manifest.js +21 -0
- package/dist/sync/manifest.js.map +1 -0
- package/dist/sync/paths.d.ts +16 -0
- package/dist/sync/paths.js +116 -0
- package/dist/sync/paths.js.map +1 -0
- package/dist/sync/plan.d.ts +29 -0
- package/dist/sync/plan.js +72 -0
- package/dist/sync/plan.js.map +1 -0
- package/dist/sync/validate.d.ts +26 -0
- package/dist/sync/validate.js +308 -0
- package/dist/sync/validate.js.map +1 -0
- package/dist/types.d.ts +84 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +143 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next/markdown.ts"],"sourcesContent":["import type {\n DocsAiExportManifest,\n DocsValidationIssue,\n} from '../sync/index.js'\nimport type {\n PayloadMarkdownDocsCollectionSlugs,\n PayloadMarkdownDocsReadPayload,\n ResolvedPayloadMarkdownDocsRecord,\n ResolvedPayloadMarkdownDocsSet,\n ResolvePayloadMarkdownDocsRouteOptions,\n} from './types.js'\n\nimport {\n DEFAULT_DOCS_COLLECTION_SLUG,\n DEFAULT_DOCS_GROUPS_COLLECTION_SLUG,\n DEFAULT_DOCS_SETS_COLLECTION_SLUG,\n DEFAULT_MARKDOWN_FIELD_NAME,\n} from '../constants.js'\nimport { normalizeRoutePath } from '../routing/index.js'\nimport {\n isExcludedFromAiExport,\n} from '../sync/index.js'\nimport {\n isVisibleDocsRecord,\n toResolvedDocsRecord,\n toResolvedDocsSet,\n} from './records.js'\n\nexport type ResolvedPayloadMarkdownDocsMarkdownRoute = {\n contentType: 'text/markdown; charset=utf-8'\n docsSet: ResolvedPayloadMarkdownDocsSet\n markdown: string\n output: string\n route: string\n type: 'markdown'\n warnings: DocsValidationIssue[]\n}\n\nexport type ResolvePayloadMarkdownDocsMarkdownRouteOptions =\n ResolvePayloadMarkdownDocsRouteOptions\n\ntype ResolvedCollectionSlugs = {\n docs: string\n docsGroups: string\n docsSets: string\n}\n\nconst resolveCollectionSlugs = (\n collections?: PayloadMarkdownDocsCollectionSlugs,\n): ResolvedCollectionSlugs => ({\n docs: collections?.docs ?? DEFAULT_DOCS_COLLECTION_SLUG,\n docsGroups: collections?.docsGroups ?? DEFAULT_DOCS_GROUPS_COLLECTION_SLUG,\n docsSets: collections?.docsSets ?? DEFAULT_DOCS_SETS_COLLECTION_SLUG,\n})\n\nconst getRoutePath = ({\n slug,\n path,\n}: Pick<ResolvePayloadMarkdownDocsRouteOptions, 'path' | 'slug'>): string => {\n if (path !== undefined) {\n return normalizeRoutePath(path)\n }\n\n if (Array.isArray(slug)) {\n return normalizeRoutePath(slug.length === 0 ? '/' : slug.join('/'))\n }\n\n if (typeof slug === 'string') {\n return normalizeRoutePath(slug)\n }\n\n return '/'\n}\n\nconst stripMarkdownRouteSuffix = (route: string): string | undefined =>\n route.toLowerCase().endsWith('.md') ? route.slice(0, -3) : undefined\n\nconst findDocsSetByRouteBase = async ({\n collections,\n overrideAccess,\n payload,\n routeBase,\n}: {\n collections: ResolvedCollectionSlugs\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n routeBase: string\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const result = await payload.find({\n collection: collections.docsSets,\n depth: 0,\n limit: 1,\n overrideAccess,\n where: {\n routeBase: {\n equals: routeBase,\n },\n },\n })\n\n return result.docs\n .map(toResolvedDocsSet)\n .find((docsSet) => docsSet?.routeBase === routeBase)\n}\n\nconst findDocsSetByAiExportOutput = async ({\n collections,\n output,\n overrideAccess,\n payload,\n}: {\n collections: ResolvedCollectionSlugs\n output: string\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const result = await payload.find({\n collection: collections.docsSets,\n depth: 0,\n limit: 1000,\n overrideAccess,\n })\n\n return result.docs\n .map(toResolvedDocsSet)\n .find((docsSet) => docsSet?.aiExport?.output === output)\n}\n\nconst findDocsSetForMarkdownRoute = async ({\n collections,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const routeBase = stripMarkdownRouteSuffix(route)\n\n if (!routeBase) {\n return undefined\n }\n\n const docsSet = await findDocsSetByRouteBase({\n collections,\n overrideAccess,\n payload,\n routeBase,\n })\n\n return (\n docsSet ??\n findDocsSetByAiExportOutput({\n collections,\n output: route,\n overrideAccess,\n payload,\n })\n )\n}\n\nconst getDocsRecords = async ({\n collections,\n docsSet,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n}: {\n collections: ResolvedCollectionSlugs\n docsSet: ResolvedPayloadMarkdownDocsSet\n includeDrafts: boolean\n markdownField: string\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n}): Promise<ResolvedPayloadMarkdownDocsRecord[]> => {\n const result = await payload.find({\n collection: collections.docs,\n depth: 0,\n limit: 1000,\n overrideAccess,\n where: {\n docsSet: {\n equals: docsSet.id,\n },\n },\n })\n\n return result.docs\n .map((doc) =>\n toResolvedDocsRecord({\n doc,\n markdownField,\n }),\n )\n .filter(\n (record): record is ResolvedPayloadMarkdownDocsRecord =>\n record !== undefined &&\n isVisibleDocsRecord({\n includeDrafts,\n record,\n }),\n )\n}\n\nconst compareDocsRecords = (\n first: ResolvedPayloadMarkdownDocsRecord,\n second: ResolvedPayloadMarkdownDocsRecord,\n): number => {\n if (first.order !== second.order) {\n return first.order - second.order\n }\n\n const titleCompare = first.title.localeCompare(second.title)\n\n if (titleCompare !== 0) {\n return titleCompare\n }\n\n const pathCompare = first.sourcePath.localeCompare(second.sourcePath)\n\n return pathCompare !== 0 ? pathCompare : first.id.localeCompare(second.id)\n}\n\nconst getDefaultAiExportManifest = (\n docsSet: ResolvedPayloadMarkdownDocsSet,\n): DocsAiExportManifest => ({\n canonical: docsSet.routeBase,\n exclude: [],\n headingMode: 'normalize',\n order: [],\n orphans: 'append',\n output: `${docsSet.routeBase}.md`,\n sourcePath: 'fallback',\n title: docsSet.title,\n version: 1,\n})\n\nconst orderDocsRecords = ({\n manifest,\n records,\n}: {\n manifest: DocsAiExportManifest\n records: ResolvedPayloadMarkdownDocsRecord[]\n}): {\n ordered: ResolvedPayloadMarkdownDocsRecord[]\n warnings: DocsValidationIssue[]\n} => {\n const recordsBySourcePath = new Map(records.map((record) => [record.sourcePath, record]))\n const listedRecords: ResolvedPayloadMarkdownDocsRecord[] = []\n const listedSourcePaths = new Set<string>()\n const warnings: DocsValidationIssue[] = []\n\n for (const orderedPath of manifest.order) {\n listedSourcePaths.add(orderedPath)\n const record = recordsBySourcePath.get(orderedPath)\n\n if (!record) {\n warnings.push({\n code: 'missing_ai_export_order_path',\n message: `AI export manifest order path \"${orderedPath}\" does not exist in the generated docs records.`,\n path: manifest.sourcePath,\n })\n continue\n }\n\n listedRecords.push(record)\n }\n\n if (manifest.orphans === 'ignore') {\n return {\n ordered: listedRecords,\n warnings,\n }\n }\n\n const orphans = records\n .filter((record) => !listedSourcePaths.has(record.sourcePath))\n .sort(compareDocsRecords)\n\n return {\n ordered: [...listedRecords, ...orphans],\n warnings,\n }\n}\n\nconst shiftMarkdownHeadings = (markdown: string): string =>\n markdown.replace(/^(#{1,6})(\\s+)/gm, (match, hashes: string, whitespace: string) =>\n hashes.length >= 5 ? `${'#'.repeat(6)}${whitespace}` : `${hashes}##${whitespace}`,\n )\n\nconst sectionTitle = (record: ResolvedPayloadMarkdownDocsRecord): string =>\n record.title.trim() || record.sourcePath\n\nconst renderMarkdownExport = ({\n docsSet,\n manifest,\n records,\n}: {\n docsSet: ResolvedPayloadMarkdownDocsSet\n manifest: DocsAiExportManifest\n records: ResolvedPayloadMarkdownDocsRecord[]\n}): string => {\n const lines: string[] = []\n const title = manifest.title ?? docsSet.title\n const canonical = manifest.canonical ?? docsSet.routeBase\n const output = manifest.output ?? `${docsSet.routeBase}.md`\n\n lines.push(`# ${title}`)\n lines.push('')\n lines.push(`Canonical: ${canonical}`)\n lines.push(`Output: ${output}`)\n\n if (manifest.description) {\n lines.push('', manifest.description.trim())\n }\n\n if (manifest.preamble) {\n lines.push('', manifest.preamble.trim())\n }\n\n for (const record of records) {\n const content = record.content?.trim()\n\n if (!content) {\n continue\n }\n\n if (manifest.headingMode === 'preserve') {\n lines.push('', content)\n continue\n }\n\n lines.push('', `## ${sectionTitle(record)}`, '', shiftMarkdownHeadings(content))\n }\n\n return `${lines.join('\\n').replace(/\\n{4,}/g, '\\n\\n\\n').trimEnd()}\\n`\n}\n\nexport const resolvePayloadMarkdownDocsMarkdownRoute = async ({\n slug,\n collections: collectionOptions,\n includeDrafts = false,\n markdownField = DEFAULT_MARKDOWN_FIELD_NAME,\n // Route adapter reads plugin-owned generated docs collections server-side.\n // Access is overridden here, then public visibility and manifest exclusions are enforced.\n overrideAccess = true,\n path,\n payload,\n}: ResolvePayloadMarkdownDocsMarkdownRouteOptions): Promise<\n null | ResolvedPayloadMarkdownDocsMarkdownRoute\n> => {\n const route = getRoutePath({\n slug,\n path,\n })\n const collections = resolveCollectionSlugs(collectionOptions)\n const docsSet = await findDocsSetForMarkdownRoute({\n collections,\n overrideAccess,\n payload,\n route,\n })\n\n if (!docsSet) {\n return null\n }\n\n const manifest = docsSet.aiExport ?? getDefaultAiExportManifest(docsSet)\n const records = (\n await getDocsRecords({\n collections,\n docsSet,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n })\n ).filter(\n (record) =>\n !isExcludedFromAiExport({\n exclude: manifest.exclude,\n sourcePath: record.sourcePath,\n }),\n )\n const ordered = orderDocsRecords({\n manifest,\n records,\n })\n\n return {\n type: 'markdown',\n contentType: 'text/markdown; charset=utf-8',\n docsSet,\n markdown: renderMarkdownExport({\n docsSet,\n manifest,\n records: ordered.ordered,\n }),\n output: manifest.output ?? `${docsSet.routeBase}.md`,\n route,\n warnings: ordered.warnings,\n }\n}\n\nexport const createPayloadMarkdownDocsMarkdownResponse = async (\n options: ResolvePayloadMarkdownDocsMarkdownRouteOptions,\n): Promise<null | Response> => {\n const resolved = await resolvePayloadMarkdownDocsMarkdownRoute(options)\n\n if (!resolved) {\n return null\n }\n\n return new Response(resolved.markdown, {\n headers: {\n 'Content-Type': resolved.contentType,\n },\n status: 200,\n })\n}\n"],"names":["DEFAULT_DOCS_COLLECTION_SLUG","DEFAULT_DOCS_GROUPS_COLLECTION_SLUG","DEFAULT_DOCS_SETS_COLLECTION_SLUG","DEFAULT_MARKDOWN_FIELD_NAME","normalizeRoutePath","isExcludedFromAiExport","isVisibleDocsRecord","toResolvedDocsRecord","toResolvedDocsSet","resolveCollectionSlugs","collections","docs","docsGroups","docsSets","getRoutePath","slug","path","undefined","Array","isArray","length","join","stripMarkdownRouteSuffix","route","toLowerCase","endsWith","slice","findDocsSetByRouteBase","overrideAccess","payload","routeBase","result","find","collection","depth","limit","where","equals","map","docsSet","findDocsSetByAiExportOutput","output","aiExport","findDocsSetForMarkdownRoute","getDocsRecords","includeDrafts","markdownField","id","doc","filter","record","compareDocsRecords","first","second","order","titleCompare","title","localeCompare","pathCompare","sourcePath","getDefaultAiExportManifest","canonical","exclude","headingMode","orphans","version","orderDocsRecords","manifest","records","recordsBySourcePath","Map","listedRecords","listedSourcePaths","Set","warnings","orderedPath","add","get","push","code","message","ordered","has","sort","shiftMarkdownHeadings","markdown","replace","match","hashes","whitespace","repeat","sectionTitle","trim","renderMarkdownExport","lines","description","preamble","content","trimEnd","resolvePayloadMarkdownDocsMarkdownRoute","collectionOptions","type","contentType","createPayloadMarkdownDocsMarkdownResponse","options","resolved","Response","headers","status"],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { PayloadMarkdownDocsMetadata, ResolvedPayloadMarkdownDocsRoute, ResolvePayloadMarkdownDocsRouteOptions } from './types.js';
|
|
2
|
+
export declare const getPayloadMarkdownDocsMetadata: (resolved: ResolvedPayloadMarkdownDocsRoute) => PayloadMarkdownDocsMetadata;
|
|
3
|
+
export declare const generatePayloadMarkdownDocsMetadata: (options: ResolvePayloadMarkdownDocsRouteOptions) => Promise<null | PayloadMarkdownDocsMetadata>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { resolvePayloadMarkdownDocsRoute } from './route.js';
|
|
2
|
+
const compactMetadata = (metadata)=>Object.fromEntries(Object.entries(metadata).filter(([, value])=>value !== undefined && value !== ''));
|
|
3
|
+
export const getPayloadMarkdownDocsMetadata = (resolved)=>{
|
|
4
|
+
if (resolved.type === 'docsGroupIndex') {
|
|
5
|
+
return compactMetadata({
|
|
6
|
+
description: resolved.group.description,
|
|
7
|
+
title: resolved.group.navTitle ?? resolved.group.title
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
if (resolved.type === 'docsSetIndex' && !resolved.doc) {
|
|
11
|
+
return compactMetadata({
|
|
12
|
+
description: resolved.docsSet.defaults?.seoDescription ?? resolved.docsSet.description,
|
|
13
|
+
title: resolved.docsSet.defaults?.seoTitle ?? resolved.docsSet.defaults?.heroTitle ?? resolved.docsSet.navTitle ?? resolved.docsSet.title
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
const doc = resolved.doc;
|
|
17
|
+
if (!doc) {
|
|
18
|
+
return compactMetadata({
|
|
19
|
+
description: resolved.docsSet.defaults?.seoDescription ?? resolved.docsSet.description,
|
|
20
|
+
title: resolved.docsSet.defaults?.seoTitle ?? resolved.docsSet.defaults?.heroTitle ?? resolved.docsSet.navTitle ?? resolved.docsSet.title
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return compactMetadata({
|
|
24
|
+
description: doc.overrides?.seoDescription ?? doc.overrides?.heroDescription ?? doc.description ?? resolved.docsSet.defaults?.seoDescription ?? resolved.docsSet.description,
|
|
25
|
+
title: doc.overrides?.seoTitle ?? doc.overrides?.heroTitle ?? doc.title ?? resolved.docsSet.defaults?.seoTitle ?? resolved.docsSet.title
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
export const generatePayloadMarkdownDocsMetadata = async (options)=>{
|
|
29
|
+
const resolved = await resolvePayloadMarkdownDocsRoute(options);
|
|
30
|
+
return resolved ? getPayloadMarkdownDocsMetadata(resolved) : null;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next/metadata.ts"],"sourcesContent":["import type {\n PayloadMarkdownDocsMetadata,\n ResolvedPayloadMarkdownDocsRoute,\n ResolvePayloadMarkdownDocsRouteOptions,\n} from './types.js'\n\nimport { resolvePayloadMarkdownDocsRoute } from './route.js'\n\nconst compactMetadata = (\n metadata: PayloadMarkdownDocsMetadata,\n): PayloadMarkdownDocsMetadata =>\n Object.fromEntries(\n Object.entries(metadata).filter(([, value]) => value !== undefined && value !== ''),\n ) as PayloadMarkdownDocsMetadata\n\nexport const getPayloadMarkdownDocsMetadata = (\n resolved: ResolvedPayloadMarkdownDocsRoute,\n): PayloadMarkdownDocsMetadata => {\n if (resolved.type === 'docsGroupIndex') {\n return compactMetadata({\n description: resolved.group.description,\n title: resolved.group.navTitle ?? resolved.group.title,\n })\n }\n\n if (resolved.type === 'docsSetIndex' && !resolved.doc) {\n return compactMetadata({\n description:\n resolved.docsSet.defaults?.seoDescription ?? resolved.docsSet.description,\n title:\n resolved.docsSet.defaults?.seoTitle ??\n resolved.docsSet.defaults?.heroTitle ??\n resolved.docsSet.navTitle ??\n resolved.docsSet.title,\n })\n }\n\n const doc = resolved.doc\n\n if (!doc) {\n return compactMetadata({\n description:\n resolved.docsSet.defaults?.seoDescription ?? resolved.docsSet.description,\n title:\n resolved.docsSet.defaults?.seoTitle ??\n resolved.docsSet.defaults?.heroTitle ??\n resolved.docsSet.navTitle ??\n resolved.docsSet.title,\n })\n }\n\n return compactMetadata({\n description:\n doc.overrides?.seoDescription ??\n doc.overrides?.heroDescription ??\n doc.description ??\n resolved.docsSet.defaults?.seoDescription ??\n resolved.docsSet.description,\n title:\n doc.overrides?.seoTitle ??\n doc.overrides?.heroTitle ??\n doc.title ??\n resolved.docsSet.defaults?.seoTitle ??\n resolved.docsSet.title,\n })\n}\n\nexport const generatePayloadMarkdownDocsMetadata = async (\n options: ResolvePayloadMarkdownDocsRouteOptions,\n): Promise<null | PayloadMarkdownDocsMetadata> => {\n const resolved = await resolvePayloadMarkdownDocsRoute(options)\n\n return resolved ? getPayloadMarkdownDocsMetadata(resolved) : null\n}\n"],"names":["resolvePayloadMarkdownDocsRoute","compactMetadata","metadata","Object","fromEntries","entries","filter","value","undefined","getPayloadMarkdownDocsMetadata","resolved","type","description","group","title","navTitle","doc","docsSet","defaults","seoDescription","seoTitle","heroTitle","overrides","heroDescription","generatePayloadMarkdownDocsMetadata","options"],"mappings":"AAMA,SAASA,+BAA+B,QAAQ,aAAY;AAE5D,MAAMC,kBAAkB,CACtBC,WAEAC,OAAOC,WAAW,CAChBD,OAAOE,OAAO,CAACH,UAAUI,MAAM,CAAC,CAAC,GAAGC,MAAM,GAAKA,UAAUC,aAAaD,UAAU;AAGpF,OAAO,MAAME,iCAAiC,CAC5CC;IAEA,IAAIA,SAASC,IAAI,KAAK,kBAAkB;QACtC,OAAOV,gBAAgB;YACrBW,aAAaF,SAASG,KAAK,CAACD,WAAW;YACvCE,OAAOJ,SAASG,KAAK,CAACE,QAAQ,IAAIL,SAASG,KAAK,CAACC,KAAK;QACxD;IACF;IAEA,IAAIJ,SAASC,IAAI,KAAK,kBAAkB,CAACD,SAASM,GAAG,EAAE;QACrD,OAAOf,gBAAgB;YACrBW,aACEF,SAASO,OAAO,CAACC,QAAQ,EAAEC,kBAAkBT,SAASO,OAAO,CAACL,WAAW;YAC3EE,OACEJ,SAASO,OAAO,CAACC,QAAQ,EAAEE,YAC3BV,SAASO,OAAO,CAACC,QAAQ,EAAEG,aAC3BX,SAASO,OAAO,CAACF,QAAQ,IACzBL,SAASO,OAAO,CAACH,KAAK;QAC1B;IACF;IAEA,MAAME,MAAMN,SAASM,GAAG;IAExB,IAAI,CAACA,KAAK;QACR,OAAOf,gBAAgB;YACrBW,aACEF,SAASO,OAAO,CAACC,QAAQ,EAAEC,kBAAkBT,SAASO,OAAO,CAACL,WAAW;YAC3EE,OACEJ,SAASO,OAAO,CAACC,QAAQ,EAAEE,YAC3BV,SAASO,OAAO,CAACC,QAAQ,EAAEG,aAC3BX,SAASO,OAAO,CAACF,QAAQ,IACzBL,SAASO,OAAO,CAACH,KAAK;QAC1B;IACF;IAEA,OAAOb,gBAAgB;QACrBW,aACEI,IAAIM,SAAS,EAAEH,kBACfH,IAAIM,SAAS,EAAEC,mBACfP,IAAIJ,WAAW,IACfF,SAASO,OAAO,CAACC,QAAQ,EAAEC,kBAC3BT,SAASO,OAAO,CAACL,WAAW;QAC9BE,OACEE,IAAIM,SAAS,EAAEF,YACfJ,IAAIM,SAAS,EAAED,aACfL,IAAIF,KAAK,IACTJ,SAASO,OAAO,CAACC,QAAQ,EAAEE,YAC3BV,SAASO,OAAO,CAACH,KAAK;IAC1B;AACF,EAAC;AAED,OAAO,MAAMU,sCAAsC,OACjDC;IAEA,MAAMf,WAAW,MAAMV,gCAAgCyB;IAEvD,OAAOf,WAAWD,+BAA+BC,YAAY;AAC/D,EAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ResolvedPayloadMarkdownDocsGroup, ResolvedPayloadMarkdownDocsRecord, ResolvedPayloadMarkdownDocsSet } from './types.js';
|
|
2
|
+
export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
|
|
3
|
+
export declare const getRecordId: (doc: Record<string, unknown>) => string | undefined;
|
|
4
|
+
export declare const getRelationshipId: (value: unknown) => string | undefined;
|
|
5
|
+
export declare const toResolvedDocsSet: (doc: unknown) => ResolvedPayloadMarkdownDocsSet | undefined;
|
|
6
|
+
export declare const toResolvedDocsGroup: (doc: unknown) => ResolvedPayloadMarkdownDocsGroup | undefined;
|
|
7
|
+
export declare const toResolvedDocsRecord: ({ doc, markdownField, }: {
|
|
8
|
+
doc: unknown;
|
|
9
|
+
markdownField: string;
|
|
10
|
+
}) => ResolvedPayloadMarkdownDocsRecord | undefined;
|
|
11
|
+
export declare const isVisibleDocsRecord: ({ includeDrafts, record, }: {
|
|
12
|
+
includeDrafts?: boolean;
|
|
13
|
+
record: ResolvedPayloadMarkdownDocsRecord;
|
|
14
|
+
}) => boolean;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { normalizeRoutePath } from '../routing/index.js';
|
|
2
|
+
import { isAiMarkdownExportManifestPath, validateDocsAiExportManifest } from '../sync/index.js';
|
|
3
|
+
export const isRecord = (value)=>typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
4
|
+
export const getRecordId = (doc)=>{
|
|
5
|
+
if (typeof doc.id === 'string' || typeof doc.id === 'number') {
|
|
6
|
+
return String(doc.id);
|
|
7
|
+
}
|
|
8
|
+
return undefined;
|
|
9
|
+
};
|
|
10
|
+
export const getRelationshipId = (value)=>{
|
|
11
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
12
|
+
return String(value);
|
|
13
|
+
}
|
|
14
|
+
if (isRecord(value)) {
|
|
15
|
+
return getRecordId(value);
|
|
16
|
+
}
|
|
17
|
+
return undefined;
|
|
18
|
+
};
|
|
19
|
+
const getOptionalString = (doc, key)=>typeof doc[key] === 'string' ? doc[key] : undefined;
|
|
20
|
+
const getOptionalNumber = (doc, key)=>typeof doc[key] === 'number' ? doc[key] : undefined;
|
|
21
|
+
const getOptionalBoolean = (doc, key)=>typeof doc[key] === 'boolean' ? doc[key] : undefined;
|
|
22
|
+
const cleanObject = (input)=>Object.fromEntries(Object.entries(input).filter(([, value])=>value !== undefined && value !== null));
|
|
23
|
+
const toDefaults = (value)=>{
|
|
24
|
+
if (!isRecord(value)) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const sidebarMode = value.sidebarMode === 'auto' || value.sidebarMode === 'hidden' || value.sidebarMode === 'manual' ? value.sidebarMode : undefined;
|
|
28
|
+
const defaults = cleanObject({
|
|
29
|
+
heroDescription: getOptionalString(value, 'heroDescription'),
|
|
30
|
+
heroEyebrow: getOptionalString(value, 'heroEyebrow'),
|
|
31
|
+
heroTitle: getOptionalString(value, 'heroTitle'),
|
|
32
|
+
seoDescription: getOptionalString(value, 'seoDescription'),
|
|
33
|
+
seoTitle: getOptionalString(value, 'seoTitle'),
|
|
34
|
+
sidebarMode,
|
|
35
|
+
theme: getOptionalString(value, 'theme')
|
|
36
|
+
});
|
|
37
|
+
return Object.keys(defaults).length > 0 ? defaults : undefined;
|
|
38
|
+
};
|
|
39
|
+
const toOverrides = (value)=>{
|
|
40
|
+
if (!isRecord(value)) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const overrides = cleanObject({
|
|
44
|
+
heroDescription: getOptionalString(value, 'heroDescription'),
|
|
45
|
+
heroEyebrow: getOptionalString(value, 'heroEyebrow'),
|
|
46
|
+
heroTitle: getOptionalString(value, 'heroTitle'),
|
|
47
|
+
hideFromNav: getOptionalBoolean(value, 'hideFromNav'),
|
|
48
|
+
navTitle: getOptionalString(value, 'navTitle'),
|
|
49
|
+
seoDescription: getOptionalString(value, 'seoDescription'),
|
|
50
|
+
seoTitle: getOptionalString(value, 'seoTitle'),
|
|
51
|
+
theme: getOptionalString(value, 'theme')
|
|
52
|
+
});
|
|
53
|
+
return Object.keys(overrides).length > 0 ? overrides : undefined;
|
|
54
|
+
};
|
|
55
|
+
export const toResolvedDocsSet = (doc)=>{
|
|
56
|
+
if (!isRecord(doc)) {
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
const id = getRecordId(doc);
|
|
60
|
+
const routeBase = getOptionalString(doc, 'routeBase');
|
|
61
|
+
const title = getOptionalString(doc, 'title');
|
|
62
|
+
if (!id || !routeBase || !title) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
const aiExportValidation = doc.aiExport === undefined || doc.aiExport === null ? undefined : validateDocsAiExportManifest(doc.aiExport);
|
|
66
|
+
return {
|
|
67
|
+
...aiExportValidation?.ok ? {
|
|
68
|
+
aiExport: aiExportValidation.manifest
|
|
69
|
+
} : {},
|
|
70
|
+
id,
|
|
71
|
+
slug: getOptionalString(doc, 'slug'),
|
|
72
|
+
defaults: toDefaults(doc.defaults),
|
|
73
|
+
description: getOptionalString(doc, 'description'),
|
|
74
|
+
navTitle: getOptionalString(doc, 'navTitle'),
|
|
75
|
+
order: getOptionalNumber(doc, 'order') ?? 0,
|
|
76
|
+
routeBase: normalizeRoutePath(routeBase),
|
|
77
|
+
sourceId: getOptionalString(doc, 'sourceId'),
|
|
78
|
+
sourceRoot: getOptionalString(doc, 'sourceRoot'),
|
|
79
|
+
title
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
export const toResolvedDocsGroup = (doc)=>{
|
|
83
|
+
if (!isRecord(doc)) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
const id = getRecordId(doc);
|
|
87
|
+
const routePath = getOptionalString(doc, 'routePath');
|
|
88
|
+
const title = getOptionalString(doc, 'title');
|
|
89
|
+
if (!id || !routePath || !title) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
id,
|
|
94
|
+
slug: getOptionalString(doc, 'slug'),
|
|
95
|
+
description: getOptionalString(doc, 'description'),
|
|
96
|
+
navTitle: getOptionalString(doc, 'navTitle'),
|
|
97
|
+
order: getOptionalNumber(doc, 'order') ?? 0,
|
|
98
|
+
routePath: normalizeRoutePath(routePath),
|
|
99
|
+
serveIndex: getOptionalBoolean(doc, 'serveIndex') ?? false,
|
|
100
|
+
title
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
export const toResolvedDocsRecord = ({ doc, markdownField })=>{
|
|
104
|
+
if (!isRecord(doc)) {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
const id = getRecordId(doc);
|
|
108
|
+
const route = getOptionalString(doc, 'route');
|
|
109
|
+
const sourcePath = getOptionalString(doc, 'sourcePath');
|
|
110
|
+
const title = getOptionalString(doc, 'title');
|
|
111
|
+
if (!id || !route || !sourcePath || !title) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
const sync = isRecord(doc.sync) ? doc.sync : undefined;
|
|
115
|
+
const status = doc._status === 'draft' || doc._status === 'published' ? doc._status : undefined;
|
|
116
|
+
return {
|
|
117
|
+
id,
|
|
118
|
+
archived: getOptionalBoolean(sync ?? {}, 'archived') ?? false,
|
|
119
|
+
content: typeof doc[markdownField] === 'string' ? doc[markdownField] : undefined,
|
|
120
|
+
depth: getOptionalNumber(doc, 'depth') ?? 0,
|
|
121
|
+
description: getOptionalString(doc, 'description'),
|
|
122
|
+
docsSetId: getRelationshipId(doc.docsSet),
|
|
123
|
+
navTitle: getOptionalString(doc, 'navTitle'),
|
|
124
|
+
order: getOptionalNumber(doc, 'order') ?? 0,
|
|
125
|
+
overrides: toOverrides(doc.overrides),
|
|
126
|
+
route: normalizeRoutePath(route),
|
|
127
|
+
sourceHash: getOptionalString(doc, 'sourceHash'),
|
|
128
|
+
sourcePath,
|
|
129
|
+
status,
|
|
130
|
+
title
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
export const isVisibleDocsRecord = ({ includeDrafts = false, record })=>{
|
|
134
|
+
if (record.archived) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
if (isAiMarkdownExportManifestPath(record.sourcePath)) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
if (!includeDrafts && record.status === 'draft') {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
return true;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
//# sourceMappingURL=records.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next/records.ts"],"sourcesContent":["import type {\n PayloadMarkdownDocsDefaults,\n PayloadMarkdownDocsOverrides,\n ResolvedPayloadMarkdownDocsGroup,\n ResolvedPayloadMarkdownDocsRecord,\n ResolvedPayloadMarkdownDocsSet,\n} from './types.js'\n\nimport { normalizeRoutePath } from '../routing/index.js'\nimport {\n isAiMarkdownExportManifestPath,\n validateDocsAiExportManifest,\n} from '../sync/index.js'\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nexport const getRecordId = (doc: Record<string, unknown>): string | undefined => {\n if (typeof doc.id === 'string' || typeof doc.id === 'number') {\n return String(doc.id)\n }\n\n return undefined\n}\n\nexport const getRelationshipId = (value: unknown): string | undefined => {\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value)\n }\n\n if (isRecord(value)) {\n return getRecordId(value)\n }\n\n return undefined\n}\n\nconst getOptionalString = (\n doc: Record<string, unknown>,\n key: string,\n): string | undefined => (typeof doc[key] === 'string' ? doc[key] : undefined)\n\nconst getOptionalNumber = (\n doc: Record<string, unknown>,\n key: string,\n): number | undefined => (typeof doc[key] === 'number' ? doc[key] : undefined)\n\nconst getOptionalBoolean = (\n doc: Record<string, unknown>,\n key: string,\n): boolean | undefined => (typeof doc[key] === 'boolean' ? doc[key] : undefined)\n\nconst cleanObject = <T extends Record<string, unknown>>(input: T): Partial<T> =>\n Object.fromEntries(\n Object.entries(input).filter(([, value]) => value !== undefined && value !== null),\n ) as Partial<T>\n\nconst toDefaults = (value: unknown): PayloadMarkdownDocsDefaults | undefined => {\n if (!isRecord(value)) {\n return undefined\n }\n\n const sidebarMode: PayloadMarkdownDocsDefaults['sidebarMode'] =\n value.sidebarMode === 'auto' ||\n value.sidebarMode === 'hidden' ||\n value.sidebarMode === 'manual'\n ? value.sidebarMode\n : undefined\n const defaults = cleanObject({\n heroDescription: getOptionalString(value, 'heroDescription'),\n heroEyebrow: getOptionalString(value, 'heroEyebrow'),\n heroTitle: getOptionalString(value, 'heroTitle'),\n seoDescription: getOptionalString(value, 'seoDescription'),\n seoTitle: getOptionalString(value, 'seoTitle'),\n sidebarMode,\n theme: getOptionalString(value, 'theme'),\n } satisfies PayloadMarkdownDocsDefaults)\n\n return Object.keys(defaults).length > 0\n ? (defaults as PayloadMarkdownDocsDefaults)\n : undefined\n}\n\nconst toOverrides = (value: unknown): PayloadMarkdownDocsOverrides | undefined => {\n if (!isRecord(value)) {\n return undefined\n }\n\n const overrides = cleanObject({\n heroDescription: getOptionalString(value, 'heroDescription'),\n heroEyebrow: getOptionalString(value, 'heroEyebrow'),\n heroTitle: getOptionalString(value, 'heroTitle'),\n hideFromNav: getOptionalBoolean(value, 'hideFromNav'),\n navTitle: getOptionalString(value, 'navTitle'),\n seoDescription: getOptionalString(value, 'seoDescription'),\n seoTitle: getOptionalString(value, 'seoTitle'),\n theme: getOptionalString(value, 'theme'),\n })\n\n return Object.keys(overrides).length > 0 ? overrides : undefined\n}\n\nexport const toResolvedDocsSet = (\n doc: unknown,\n): ResolvedPayloadMarkdownDocsSet | undefined => {\n if (!isRecord(doc)) {\n return undefined\n }\n\n const id = getRecordId(doc)\n const routeBase = getOptionalString(doc, 'routeBase')\n const title = getOptionalString(doc, 'title')\n\n if (!id || !routeBase || !title) {\n return undefined\n }\n\n const aiExportValidation =\n doc.aiExport === undefined || doc.aiExport === null\n ? undefined\n : validateDocsAiExportManifest(doc.aiExport)\n\n return {\n ...(aiExportValidation?.ok ? { aiExport: aiExportValidation.manifest } : {}),\n id,\n slug: getOptionalString(doc, 'slug'),\n defaults: toDefaults(doc.defaults),\n description: getOptionalString(doc, 'description'),\n navTitle: getOptionalString(doc, 'navTitle'),\n order: getOptionalNumber(doc, 'order') ?? 0,\n routeBase: normalizeRoutePath(routeBase),\n sourceId: getOptionalString(doc, 'sourceId'),\n sourceRoot: getOptionalString(doc, 'sourceRoot'),\n title,\n }\n}\n\nexport const toResolvedDocsGroup = (\n doc: unknown,\n): ResolvedPayloadMarkdownDocsGroup | undefined => {\n if (!isRecord(doc)) {\n return undefined\n }\n\n const id = getRecordId(doc)\n const routePath = getOptionalString(doc, 'routePath')\n const title = getOptionalString(doc, 'title')\n\n if (!id || !routePath || !title) {\n return undefined\n }\n\n return {\n id,\n slug: getOptionalString(doc, 'slug'),\n description: getOptionalString(doc, 'description'),\n navTitle: getOptionalString(doc, 'navTitle'),\n order: getOptionalNumber(doc, 'order') ?? 0,\n routePath: normalizeRoutePath(routePath),\n serveIndex: getOptionalBoolean(doc, 'serveIndex') ?? false,\n title,\n }\n}\n\nexport const toResolvedDocsRecord = ({\n doc,\n markdownField,\n}: {\n doc: unknown\n markdownField: string\n}): ResolvedPayloadMarkdownDocsRecord | undefined => {\n if (!isRecord(doc)) {\n return undefined\n }\n\n const id = getRecordId(doc)\n const route = getOptionalString(doc, 'route')\n const sourcePath = getOptionalString(doc, 'sourcePath')\n const title = getOptionalString(doc, 'title')\n\n if (!id || !route || !sourcePath || !title) {\n return undefined\n }\n\n const sync = isRecord(doc.sync) ? doc.sync : undefined\n const status =\n doc._status === 'draft' || doc._status === 'published' ? doc._status : undefined\n\n return {\n id,\n archived: getOptionalBoolean(sync ?? {}, 'archived') ?? false,\n content:\n typeof doc[markdownField] === 'string' ? doc[markdownField] : undefined,\n depth: getOptionalNumber(doc, 'depth') ?? 0,\n description: getOptionalString(doc, 'description'),\n docsSetId: getRelationshipId(doc.docsSet),\n navTitle: getOptionalString(doc, 'navTitle'),\n order: getOptionalNumber(doc, 'order') ?? 0,\n overrides: toOverrides(doc.overrides),\n route: normalizeRoutePath(route),\n sourceHash: getOptionalString(doc, 'sourceHash'),\n sourcePath,\n status,\n title,\n }\n}\n\nexport const isVisibleDocsRecord = ({\n includeDrafts = false,\n record,\n}: {\n includeDrafts?: boolean\n record: ResolvedPayloadMarkdownDocsRecord\n}): boolean => {\n if (record.archived) {\n return false\n }\n\n if (isAiMarkdownExportManifestPath(record.sourcePath)) {\n return false\n }\n\n if (!includeDrafts && record.status === 'draft') {\n return false\n }\n\n return true\n}\n"],"names":["normalizeRoutePath","isAiMarkdownExportManifestPath","validateDocsAiExportManifest","isRecord","value","Array","isArray","getRecordId","doc","id","String","undefined","getRelationshipId","getOptionalString","key","getOptionalNumber","getOptionalBoolean","cleanObject","input","Object","fromEntries","entries","filter","toDefaults","sidebarMode","defaults","heroDescription","heroEyebrow","heroTitle","seoDescription","seoTitle","theme","keys","length","toOverrides","overrides","hideFromNav","navTitle","toResolvedDocsSet","routeBase","title","aiExportValidation","aiExport","ok","manifest","slug","description","order","sourceId","sourceRoot","toResolvedDocsGroup","routePath","serveIndex","toResolvedDocsRecord","markdownField","route","sourcePath","sync","status","_status","archived","content","depth","docsSetId","docsSet","sourceHash","isVisibleDocsRecord","includeDrafts","record"],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ResolvedPayloadMarkdownDocsRoute, ResolvePayloadMarkdownDocsRouteOptions } from './types.js';
|
|
2
|
+
export declare const getPayloadMarkdownDocsRoutePath: ({ slug, path, }: {
|
|
3
|
+
path?: string;
|
|
4
|
+
slug?: string | string[];
|
|
5
|
+
}) => string;
|
|
6
|
+
export declare const resolvePayloadMarkdownDocsRoute: ({ slug, collections: collectionOptions, includeDrafts, markdownField, overrideAccess, path, payload, }: ResolvePayloadMarkdownDocsRouteOptions) => Promise<null | ResolvedPayloadMarkdownDocsRoute>;
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { DEFAULT_DOCS_COLLECTION_SLUG, DEFAULT_DOCS_GROUPS_COLLECTION_SLUG, DEFAULT_DOCS_SETS_COLLECTION_SLUG, DEFAULT_MARKDOWN_FIELD_NAME } from '../constants.js';
|
|
2
|
+
import { isRouteDescendant, joinRouteSegments, normalizeRoutePath } from '../routing/index.js';
|
|
3
|
+
import { getRelationshipId, isRecord, isVisibleDocsRecord, toResolvedDocsGroup, toResolvedDocsRecord, toResolvedDocsSet } from './records.js';
|
|
4
|
+
import { getPayloadMarkdownDocsSidebar } from './sidebar.js';
|
|
5
|
+
const resolveCollectionSlugs = (collections)=>({
|
|
6
|
+
docs: collections?.docs ?? DEFAULT_DOCS_COLLECTION_SLUG,
|
|
7
|
+
docsGroups: collections?.docsGroups ?? DEFAULT_DOCS_GROUPS_COLLECTION_SLUG,
|
|
8
|
+
docsSets: collections?.docsSets ?? DEFAULT_DOCS_SETS_COLLECTION_SLUG
|
|
9
|
+
});
|
|
10
|
+
export const getPayloadMarkdownDocsRoutePath = ({ slug, path })=>{
|
|
11
|
+
if (path !== undefined) {
|
|
12
|
+
return normalizeRoutePath(path);
|
|
13
|
+
}
|
|
14
|
+
if (Array.isArray(slug)) {
|
|
15
|
+
return slug.length === 0 ? '/' : joinRouteSegments(...slug);
|
|
16
|
+
}
|
|
17
|
+
if (typeof slug === 'string') {
|
|
18
|
+
return normalizeRoutePath(slug);
|
|
19
|
+
}
|
|
20
|
+
return '/';
|
|
21
|
+
};
|
|
22
|
+
const findDocsSetById = async ({ id, collections, overrideAccess, payload })=>{
|
|
23
|
+
const result = await payload.find({
|
|
24
|
+
collection: collections.docsSets,
|
|
25
|
+
depth: 0,
|
|
26
|
+
limit: 1,
|
|
27
|
+
overrideAccess,
|
|
28
|
+
where: {
|
|
29
|
+
id: {
|
|
30
|
+
equals: id
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
return toResolvedDocsSet(result.docs[0]);
|
|
35
|
+
};
|
|
36
|
+
const findDocsSetByRouteBase = async ({ collections, overrideAccess, payload, route })=>{
|
|
37
|
+
const result = await payload.find({
|
|
38
|
+
collection: collections.docsSets,
|
|
39
|
+
depth: 0,
|
|
40
|
+
limit: 1,
|
|
41
|
+
overrideAccess,
|
|
42
|
+
where: {
|
|
43
|
+
routeBase: {
|
|
44
|
+
equals: route
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return result.docs.map(toResolvedDocsSet).find((docsSet)=>docsSet?.routeBase === route);
|
|
49
|
+
};
|
|
50
|
+
const findDocsSetByRoutePrefix = async ({ collections, overrideAccess, payload, route })=>{
|
|
51
|
+
const result = await payload.find({
|
|
52
|
+
collection: collections.docsSets,
|
|
53
|
+
depth: 0,
|
|
54
|
+
limit: 1000,
|
|
55
|
+
overrideAccess
|
|
56
|
+
});
|
|
57
|
+
return result.docs.map(toResolvedDocsSet).filter((docsSet)=>{
|
|
58
|
+
if (!docsSet) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return docsSet.routeBase === route || isRouteDescendant(docsSet.routeBase, route);
|
|
62
|
+
}).sort((first, second)=>second.routeBase.length - first.routeBase.length)[0];
|
|
63
|
+
};
|
|
64
|
+
const getRelatedDocsSet = (doc)=>{
|
|
65
|
+
if (!isRecord(doc) || !isRecord(doc.docsSet)) {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
return toResolvedDocsSet(doc.docsSet);
|
|
69
|
+
};
|
|
70
|
+
const findDocsSetForRecord = async ({ collections, doc, overrideAccess, payload, record })=>{
|
|
71
|
+
const relatedDocsSet = getRelatedDocsSet(doc);
|
|
72
|
+
if (relatedDocsSet) {
|
|
73
|
+
return relatedDocsSet;
|
|
74
|
+
}
|
|
75
|
+
if (record.docsSetId) {
|
|
76
|
+
const docsSetById = await findDocsSetById({
|
|
77
|
+
id: record.docsSetId,
|
|
78
|
+
collections,
|
|
79
|
+
overrideAccess,
|
|
80
|
+
payload
|
|
81
|
+
});
|
|
82
|
+
if (docsSetById) {
|
|
83
|
+
return docsSetById;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return findDocsSetByRoutePrefix({
|
|
87
|
+
collections,
|
|
88
|
+
overrideAccess,
|
|
89
|
+
payload,
|
|
90
|
+
route: record.route
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
const findDocsRecordByRoute = async ({ collections, includeDrafts, markdownField, overrideAccess, payload, route })=>{
|
|
94
|
+
const result = await payload.find({
|
|
95
|
+
collection: collections.docs,
|
|
96
|
+
depth: 1,
|
|
97
|
+
limit: 5,
|
|
98
|
+
overrideAccess,
|
|
99
|
+
where: {
|
|
100
|
+
route: {
|
|
101
|
+
equals: route
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
for (const doc of result.docs){
|
|
106
|
+
const record = toResolvedDocsRecord({
|
|
107
|
+
doc,
|
|
108
|
+
markdownField
|
|
109
|
+
});
|
|
110
|
+
if (record && record.route === route && isVisibleDocsRecord({
|
|
111
|
+
includeDrafts,
|
|
112
|
+
record
|
|
113
|
+
})) {
|
|
114
|
+
return {
|
|
115
|
+
doc,
|
|
116
|
+
record
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return undefined;
|
|
121
|
+
};
|
|
122
|
+
const findDocsSetIndexRecord = async ({ collections, docsSet, includeDrafts, markdownField, overrideAccess, payload })=>{
|
|
123
|
+
const result = await findDocsRecordByRoute({
|
|
124
|
+
collections,
|
|
125
|
+
includeDrafts,
|
|
126
|
+
markdownField,
|
|
127
|
+
overrideAccess,
|
|
128
|
+
payload,
|
|
129
|
+
route: docsSet.routeBase
|
|
130
|
+
});
|
|
131
|
+
if (!result) {
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
if (result.record.docsSetId && result.record.docsSetId !== docsSet.id) {
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
137
|
+
if (isRecord(result.doc)) {
|
|
138
|
+
const relatedDocsSetId = getRelationshipId(result.doc.docsSet);
|
|
139
|
+
if (relatedDocsSetId && relatedDocsSetId !== docsSet.id) {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return result.record;
|
|
144
|
+
};
|
|
145
|
+
const findGroupIndexRoute = async ({ collections, overrideAccess, payload, route })=>{
|
|
146
|
+
const result = await payload.find({
|
|
147
|
+
collection: collections.docsGroups,
|
|
148
|
+
depth: 0,
|
|
149
|
+
limit: 5,
|
|
150
|
+
overrideAccess,
|
|
151
|
+
where: {
|
|
152
|
+
routePath: {
|
|
153
|
+
equals: route
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
const group = result.docs.map(toResolvedDocsGroup).find((candidate)=>candidate?.routePath === route && candidate.serveIndex);
|
|
158
|
+
if (!group) {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
const docsSetsResult = await payload.find({
|
|
162
|
+
collection: collections.docsSets,
|
|
163
|
+
depth: 0,
|
|
164
|
+
limit: 1000,
|
|
165
|
+
overrideAccess,
|
|
166
|
+
where: {
|
|
167
|
+
group: {
|
|
168
|
+
equals: group.id
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
const docsSets = docsSetsResult.docs.map(toResolvedDocsSet).filter((docsSet)=>docsSet !== undefined).sort((first, second)=>{
|
|
173
|
+
if (first.order !== second.order) {
|
|
174
|
+
return first.order - second.order;
|
|
175
|
+
}
|
|
176
|
+
return first.routeBase.localeCompare(second.routeBase);
|
|
177
|
+
});
|
|
178
|
+
return {
|
|
179
|
+
type: 'docsGroupIndex',
|
|
180
|
+
docsSets,
|
|
181
|
+
group,
|
|
182
|
+
route
|
|
183
|
+
};
|
|
184
|
+
};
|
|
185
|
+
export const resolvePayloadMarkdownDocsRoute = async ({ slug, collections: collectionOptions, includeDrafts = false, markdownField = DEFAULT_MARKDOWN_FIELD_NAME, // Route adapter reads plugin-owned generated docs collections server-side.
|
|
186
|
+
// Access is overridden here, then public visibility is enforced explicitly.
|
|
187
|
+
overrideAccess = true, path, payload })=>{
|
|
188
|
+
const route = getPayloadMarkdownDocsRoutePath({
|
|
189
|
+
slug,
|
|
190
|
+
path
|
|
191
|
+
});
|
|
192
|
+
const collections = resolveCollectionSlugs(collectionOptions);
|
|
193
|
+
const docsSet = await findDocsSetByRouteBase({
|
|
194
|
+
collections,
|
|
195
|
+
overrideAccess,
|
|
196
|
+
payload,
|
|
197
|
+
route
|
|
198
|
+
});
|
|
199
|
+
if (docsSet) {
|
|
200
|
+
const [doc, sidebar] = await Promise.all([
|
|
201
|
+
findDocsSetIndexRecord({
|
|
202
|
+
collections,
|
|
203
|
+
docsSet,
|
|
204
|
+
includeDrafts,
|
|
205
|
+
markdownField,
|
|
206
|
+
overrideAccess,
|
|
207
|
+
payload
|
|
208
|
+
}),
|
|
209
|
+
getPayloadMarkdownDocsSidebar({
|
|
210
|
+
collections: collectionOptions,
|
|
211
|
+
docsSet,
|
|
212
|
+
includeDrafts,
|
|
213
|
+
markdownField,
|
|
214
|
+
overrideAccess,
|
|
215
|
+
payload
|
|
216
|
+
})
|
|
217
|
+
]);
|
|
218
|
+
return {
|
|
219
|
+
...doc ? {
|
|
220
|
+
doc
|
|
221
|
+
} : {},
|
|
222
|
+
type: 'docsSetIndex',
|
|
223
|
+
docsSet,
|
|
224
|
+
route,
|
|
225
|
+
sidebar
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
const docResult = await findDocsRecordByRoute({
|
|
229
|
+
collections,
|
|
230
|
+
includeDrafts,
|
|
231
|
+
markdownField,
|
|
232
|
+
overrideAccess,
|
|
233
|
+
payload,
|
|
234
|
+
route
|
|
235
|
+
});
|
|
236
|
+
if (docResult) {
|
|
237
|
+
const resolvedDocsSet = await findDocsSetForRecord({
|
|
238
|
+
collections,
|
|
239
|
+
doc: docResult.doc,
|
|
240
|
+
overrideAccess,
|
|
241
|
+
payload,
|
|
242
|
+
record: docResult.record
|
|
243
|
+
});
|
|
244
|
+
if (resolvedDocsSet) {
|
|
245
|
+
const sidebar = await getPayloadMarkdownDocsSidebar({
|
|
246
|
+
collections: collectionOptions,
|
|
247
|
+
docsSet: resolvedDocsSet,
|
|
248
|
+
includeDrafts,
|
|
249
|
+
markdownField,
|
|
250
|
+
overrideAccess,
|
|
251
|
+
payload
|
|
252
|
+
});
|
|
253
|
+
return {
|
|
254
|
+
type: 'doc',
|
|
255
|
+
doc: docResult.record,
|
|
256
|
+
docsSet: resolvedDocsSet,
|
|
257
|
+
route,
|
|
258
|
+
sidebar
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
const groupRoute = await findGroupIndexRoute({
|
|
263
|
+
collections,
|
|
264
|
+
overrideAccess,
|
|
265
|
+
payload,
|
|
266
|
+
route
|
|
267
|
+
});
|
|
268
|
+
return groupRoute ?? null;
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/next/route.ts"],"sourcesContent":["import type {\n PayloadMarkdownDocsCollectionSlugs,\n PayloadMarkdownDocsReadPayload,\n ResolvedPayloadMarkdownDocsRecord,\n ResolvedPayloadMarkdownDocsRoute,\n ResolvedPayloadMarkdownDocsSet,\n ResolvePayloadMarkdownDocsRouteOptions,\n} from './types.js'\n\nimport {\n DEFAULT_DOCS_COLLECTION_SLUG,\n DEFAULT_DOCS_GROUPS_COLLECTION_SLUG,\n DEFAULT_DOCS_SETS_COLLECTION_SLUG,\n DEFAULT_MARKDOWN_FIELD_NAME,\n} from '../constants.js'\nimport {\n isRouteDescendant,\n joinRouteSegments,\n normalizeRoutePath,\n} from '../routing/index.js'\nimport {\n getRelationshipId,\n isRecord,\n isVisibleDocsRecord,\n toResolvedDocsGroup,\n toResolvedDocsRecord,\n toResolvedDocsSet,\n} from './records.js'\nimport { getPayloadMarkdownDocsSidebar } from './sidebar.js'\n\ntype ResolvedCollectionSlugs = {\n docs: string\n docsGroups: string\n docsSets: string\n}\n\nconst resolveCollectionSlugs = (\n collections?: PayloadMarkdownDocsCollectionSlugs,\n): ResolvedCollectionSlugs => ({\n docs: collections?.docs ?? DEFAULT_DOCS_COLLECTION_SLUG,\n docsGroups: collections?.docsGroups ?? DEFAULT_DOCS_GROUPS_COLLECTION_SLUG,\n docsSets: collections?.docsSets ?? DEFAULT_DOCS_SETS_COLLECTION_SLUG,\n})\n\nexport const getPayloadMarkdownDocsRoutePath = ({\n slug,\n path,\n}: {\n path?: string\n slug?: string | string[]\n}): string => {\n if (path !== undefined) {\n return normalizeRoutePath(path)\n }\n\n if (Array.isArray(slug)) {\n return slug.length === 0 ? '/' : joinRouteSegments(...slug)\n }\n\n if (typeof slug === 'string') {\n return normalizeRoutePath(slug)\n }\n\n return '/'\n}\n\nconst findDocsSetById = async ({\n id,\n collections,\n overrideAccess,\n payload,\n}: {\n collections: ResolvedCollectionSlugs\n id: string\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const result = await payload.find({\n collection: collections.docsSets,\n depth: 0,\n limit: 1,\n overrideAccess,\n where: {\n id: {\n equals: id,\n },\n },\n })\n\n return toResolvedDocsSet(result.docs[0])\n}\n\nconst findDocsSetByRouteBase = async ({\n collections,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const result = await payload.find({\n collection: collections.docsSets,\n depth: 0,\n limit: 1,\n overrideAccess,\n where: {\n routeBase: {\n equals: route,\n },\n },\n })\n\n return result.docs\n .map(toResolvedDocsSet)\n .find((docsSet) => docsSet?.routeBase === route)\n}\n\nconst findDocsSetByRoutePrefix = async ({\n collections,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const result = await payload.find({\n collection: collections.docsSets,\n depth: 0,\n limit: 1000,\n overrideAccess,\n })\n\n return result.docs\n .map(toResolvedDocsSet)\n .filter((docsSet): docsSet is ResolvedPayloadMarkdownDocsSet => {\n if (!docsSet) {\n return false\n }\n\n return docsSet.routeBase === route || isRouteDescendant(docsSet.routeBase, route)\n })\n .sort((first, second) => second.routeBase.length - first.routeBase.length)[0]\n}\n\nconst getRelatedDocsSet = (doc: unknown): ResolvedPayloadMarkdownDocsSet | undefined => {\n if (!isRecord(doc) || !isRecord(doc.docsSet)) {\n return undefined\n }\n\n return toResolvedDocsSet(doc.docsSet)\n}\n\nconst findDocsSetForRecord = async ({\n collections,\n doc,\n overrideAccess,\n payload,\n record,\n}: {\n collections: ResolvedCollectionSlugs\n doc: unknown\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n record: ResolvedPayloadMarkdownDocsRecord\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const relatedDocsSet = getRelatedDocsSet(doc)\n\n if (relatedDocsSet) {\n return relatedDocsSet\n }\n\n if (record.docsSetId) {\n const docsSetById = await findDocsSetById({\n id: record.docsSetId,\n collections,\n overrideAccess,\n payload,\n })\n\n if (docsSetById) {\n return docsSetById\n }\n }\n\n return findDocsSetByRoutePrefix({\n collections,\n overrideAccess,\n payload,\n route: record.route,\n })\n}\n\nconst findDocsRecordByRoute = async ({\n collections,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n includeDrafts: boolean\n markdownField: string\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<\n | {\n doc: unknown\n record: ResolvedPayloadMarkdownDocsRecord\n }\n | undefined\n> => {\n const result = await payload.find({\n collection: collections.docs,\n depth: 1,\n limit: 5,\n overrideAccess,\n where: {\n route: {\n equals: route,\n },\n },\n })\n\n for (const doc of result.docs) {\n const record = toResolvedDocsRecord({\n doc,\n markdownField,\n })\n\n if (\n record &&\n record.route === route &&\n isVisibleDocsRecord({\n includeDrafts,\n record,\n })\n ) {\n return {\n doc,\n record,\n }\n }\n }\n\n return undefined\n}\n\nconst findDocsSetIndexRecord = async ({\n collections,\n docsSet,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n}: {\n collections: ResolvedCollectionSlugs\n docsSet: ResolvedPayloadMarkdownDocsSet\n includeDrafts: boolean\n markdownField: string\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n}): Promise<ResolvedPayloadMarkdownDocsRecord | undefined> => {\n const result = await findDocsRecordByRoute({\n collections,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n route: docsSet.routeBase,\n })\n\n if (!result) {\n return undefined\n }\n\n if (result.record.docsSetId && result.record.docsSetId !== docsSet.id) {\n return undefined\n }\n\n if (isRecord(result.doc)) {\n const relatedDocsSetId = getRelationshipId(result.doc.docsSet)\n\n if (relatedDocsSetId && relatedDocsSetId !== docsSet.id) {\n return undefined\n }\n }\n\n return result.record\n}\n\nconst findGroupIndexRoute = async ({\n collections,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<ResolvedPayloadMarkdownDocsRoute | undefined> => {\n const result = await payload.find({\n collection: collections.docsGroups,\n depth: 0,\n limit: 5,\n overrideAccess,\n where: {\n routePath: {\n equals: route,\n },\n },\n })\n const group = result.docs\n .map(toResolvedDocsGroup)\n .find((candidate) => candidate?.routePath === route && candidate.serveIndex)\n\n if (!group) {\n return undefined\n }\n\n const docsSetsResult = await payload.find({\n collection: collections.docsSets,\n depth: 0,\n limit: 1000,\n overrideAccess,\n where: {\n group: {\n equals: group.id,\n },\n },\n })\n const docsSets = docsSetsResult.docs\n .map(toResolvedDocsSet)\n .filter((docsSet): docsSet is ResolvedPayloadMarkdownDocsSet => docsSet !== undefined)\n .sort((first, second) => {\n if (first.order !== second.order) {\n return first.order - second.order\n }\n\n return first.routeBase.localeCompare(second.routeBase)\n })\n\n return {\n type: 'docsGroupIndex',\n docsSets,\n group,\n route,\n }\n}\n\nexport const resolvePayloadMarkdownDocsRoute = async ({\n slug,\n collections: collectionOptions,\n includeDrafts = false,\n markdownField = DEFAULT_MARKDOWN_FIELD_NAME,\n // Route adapter reads plugin-owned generated docs collections server-side.\n // Access is overridden here, then public visibility is enforced explicitly.\n overrideAccess = true,\n path,\n payload,\n}: ResolvePayloadMarkdownDocsRouteOptions): Promise<null | ResolvedPayloadMarkdownDocsRoute> => {\n const route = getPayloadMarkdownDocsRoutePath({\n slug,\n path,\n })\n const collections = resolveCollectionSlugs(collectionOptions)\n const docsSet = await findDocsSetByRouteBase({\n collections,\n overrideAccess,\n payload,\n route,\n })\n\n if (docsSet) {\n const [doc, sidebar] = await Promise.all([\n findDocsSetIndexRecord({\n collections,\n docsSet,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n }),\n getPayloadMarkdownDocsSidebar({\n collections: collectionOptions,\n docsSet,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n }),\n ])\n\n return {\n ...(doc ? { doc } : {}),\n type: 'docsSetIndex',\n docsSet,\n route,\n sidebar,\n }\n }\n\n const docResult = await findDocsRecordByRoute({\n collections,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n route,\n })\n\n if (docResult) {\n const resolvedDocsSet = await findDocsSetForRecord({\n collections,\n doc: docResult.doc,\n overrideAccess,\n payload,\n record: docResult.record,\n })\n\n if (resolvedDocsSet) {\n const sidebar = await getPayloadMarkdownDocsSidebar({\n collections: collectionOptions,\n docsSet: resolvedDocsSet,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n })\n\n return {\n type: 'doc',\n doc: docResult.record,\n docsSet: resolvedDocsSet,\n route,\n sidebar,\n }\n }\n }\n\n const groupRoute = await findGroupIndexRoute({\n collections,\n overrideAccess,\n payload,\n route,\n })\n\n return groupRoute ?? null\n}\n"],"names":["DEFAULT_DOCS_COLLECTION_SLUG","DEFAULT_DOCS_GROUPS_COLLECTION_SLUG","DEFAULT_DOCS_SETS_COLLECTION_SLUG","DEFAULT_MARKDOWN_FIELD_NAME","isRouteDescendant","joinRouteSegments","normalizeRoutePath","getRelationshipId","isRecord","isVisibleDocsRecord","toResolvedDocsGroup","toResolvedDocsRecord","toResolvedDocsSet","getPayloadMarkdownDocsSidebar","resolveCollectionSlugs","collections","docs","docsGroups","docsSets","getPayloadMarkdownDocsRoutePath","slug","path","undefined","Array","isArray","length","findDocsSetById","id","overrideAccess","payload","result","find","collection","depth","limit","where","equals","findDocsSetByRouteBase","route","routeBase","map","docsSet","findDocsSetByRoutePrefix","filter","sort","first","second","getRelatedDocsSet","doc","findDocsSetForRecord","record","relatedDocsSet","docsSetId","docsSetById","findDocsRecordByRoute","includeDrafts","markdownField","findDocsSetIndexRecord","relatedDocsSetId","findGroupIndexRoute","routePath","group","candidate","serveIndex","docsSetsResult","order","localeCompare","type","resolvePayloadMarkdownDocsRoute","collectionOptions","sidebar","Promise","all","docResult","resolvedDocsSet","groupRoute"],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PayloadMarkdownDocsCollectionSlugs, PayloadMarkdownDocsReadPayload, PayloadMarkdownDocsSidebarItem, ResolvedPayloadMarkdownDocsRecord, ResolvedPayloadMarkdownDocsSet } from './types.js';
|
|
2
|
+
export type BuildPayloadMarkdownDocsSidebarOptions = {
|
|
3
|
+
docsSet?: ResolvedPayloadMarkdownDocsSet;
|
|
4
|
+
includeDrafts?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export type GetPayloadMarkdownDocsSidebarOptions = {
|
|
7
|
+
collections?: PayloadMarkdownDocsCollectionSlugs;
|
|
8
|
+
docsSet: ResolvedPayloadMarkdownDocsSet;
|
|
9
|
+
includeDrafts?: boolean;
|
|
10
|
+
markdownField?: string;
|
|
11
|
+
overrideAccess?: boolean;
|
|
12
|
+
payload: PayloadMarkdownDocsReadPayload;
|
|
13
|
+
};
|
|
14
|
+
export declare const buildPayloadMarkdownDocsSidebar: (records: ResolvedPayloadMarkdownDocsRecord[], options?: BuildPayloadMarkdownDocsSidebarOptions) => PayloadMarkdownDocsSidebarItem[];
|
|
15
|
+
export declare const getPayloadMarkdownDocsSidebar: ({ collections, docsSet, includeDrafts, markdownField, overrideAccess, payload, }: GetPayloadMarkdownDocsSidebarOptions) => Promise<PayloadMarkdownDocsSidebarItem[]>;
|