@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.
Files changed (204) hide show
  1. package/README.md +195 -0
  2. package/dist/admin/DocsSetManager.d.ts +2 -0
  3. package/dist/admin/DocsSetManager.js +298 -0
  4. package/dist/admin/DocsSetManager.js.map +1 -0
  5. package/dist/admin/docsSetManagerData.d.ts +25 -0
  6. package/dist/admin/docsSetManagerData.js +266 -0
  7. package/dist/admin/docsSetManagerData.js.map +1 -0
  8. package/dist/admin/docsSetManagerTypes.d.ts +103 -0
  9. package/dist/admin/docsSetManagerTypes.js +3 -0
  10. package/dist/admin/docsSetManagerTypes.js.map +1 -0
  11. package/dist/admin/index.d.ts +3 -0
  12. package/dist/admin/index.js +4 -0
  13. package/dist/admin/index.js.map +1 -0
  14. package/dist/cli/commands/install.d.ts +2 -0
  15. package/dist/cli/commands/install.js +211 -0
  16. package/dist/cli/commands/install.js.map +1 -0
  17. package/dist/cli/commands/keygen.d.ts +2 -0
  18. package/dist/cli/commands/keygen.js +89 -0
  19. package/dist/cli/commands/keygen.js.map +1 -0
  20. package/dist/cli/commands/manifest.d.ts +2 -0
  21. package/dist/cli/commands/manifest.js +50 -0
  22. package/dist/cli/commands/manifest.js.map +1 -0
  23. package/dist/cli/commands/plan.d.ts +2 -0
  24. package/dist/cli/commands/plan.js +110 -0
  25. package/dist/cli/commands/plan.js.map +1 -0
  26. package/dist/cli/commands/push.d.ts +3 -0
  27. package/dist/cli/commands/push.js +308 -0
  28. package/dist/cli/commands/push.js.map +1 -0
  29. package/dist/cli/commands/validate.d.ts +3 -0
  30. package/dist/cli/commands/validate.js +109 -0
  31. package/dist/cli/commands/validate.js.map +1 -0
  32. package/dist/cli/filesystem.d.ts +20 -0
  33. package/dist/cli/filesystem.js +96 -0
  34. package/dist/cli/filesystem.js.map +1 -0
  35. package/dist/cli/format.d.ts +35 -0
  36. package/dist/cli/format.js +76 -0
  37. package/dist/cli/format.js.map +1 -0
  38. package/dist/cli/http.d.ts +19 -0
  39. package/dist/cli/http.js +39 -0
  40. package/dist/cli/http.js.map +1 -0
  41. package/dist/cli/index.d.ts +3 -0
  42. package/dist/cli/index.js +214 -0
  43. package/dist/cli/index.js.map +1 -0
  44. package/dist/cli/parseArgs.d.ts +5 -0
  45. package/dist/cli/parseArgs.js +219 -0
  46. package/dist/cli/parseArgs.js.map +1 -0
  47. package/dist/cli/types.d.ts +51 -0
  48. package/dist/cli/types.js +3 -0
  49. package/dist/cli/types.js.map +1 -0
  50. package/dist/collections/docs.d.ts +9 -0
  51. package/dist/collections/docs.js +168 -0
  52. package/dist/collections/docs.js.map +1 -0
  53. package/dist/collections/docsGroups.d.ts +5 -0
  54. package/dist/collections/docsGroups.js +57 -0
  55. package/dist/collections/docsGroups.js.map +1 -0
  56. package/dist/collections/docsSets.d.ts +8 -0
  57. package/dist/collections/docsSets.js +158 -0
  58. package/dist/collections/docsSets.js.map +1 -0
  59. package/dist/collections/index.d.ts +10 -0
  60. package/dist/collections/index.js +7 -0
  61. package/dist/collections/index.js.map +1 -0
  62. package/dist/collections/nonces.d.ts +6 -0
  63. package/dist/collections/nonces.js +57 -0
  64. package/dist/collections/nonces.js.map +1 -0
  65. package/dist/collections/syncRuns.d.ts +5 -0
  66. package/dist/collections/syncRuns.js +139 -0
  67. package/dist/collections/syncRuns.js.map +1 -0
  68. package/dist/constants.d.ts +21 -0
  69. package/dist/constants.js +23 -0
  70. package/dist/constants.js.map +1 -0
  71. package/dist/endpoints/index.d.ts +2 -0
  72. package/dist/endpoints/index.js +3 -0
  73. package/dist/endpoints/index.js.map +1 -0
  74. package/dist/endpoints/sync.d.ts +47 -0
  75. package/dist/endpoints/sync.js +616 -0
  76. package/dist/endpoints/sync.js.map +1 -0
  77. package/dist/index.d.ts +9 -0
  78. package/dist/index.js +7 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/next/PayloadMarkdownDocsPage.d.ts +7 -0
  81. package/dist/next/PayloadMarkdownDocsPage.js +142 -0
  82. package/dist/next/PayloadMarkdownDocsPage.js.map +1 -0
  83. package/dist/next/index.d.ts +9 -0
  84. package/dist/next/index.js +7 -0
  85. package/dist/next/index.js.map +1 -0
  86. package/dist/next/markdown.d.ts +14 -0
  87. package/dist/next/markdown.js +232 -0
  88. package/dist/next/markdown.js.map +1 -0
  89. package/dist/next/metadata.d.ts +3 -0
  90. package/dist/next/metadata.js +33 -0
  91. package/dist/next/metadata.js.map +1 -0
  92. package/dist/next/records.d.ts +14 -0
  93. package/dist/next/records.js +146 -0
  94. package/dist/next/records.js.map +1 -0
  95. package/dist/next/route.d.ts +6 -0
  96. package/dist/next/route.js +271 -0
  97. package/dist/next/route.js.map +1 -0
  98. package/dist/next/sidebar.d.ts +15 -0
  99. package/dist/next/sidebar.js +137 -0
  100. package/dist/next/sidebar.js.map +1 -0
  101. package/dist/next/types.d.ts +117 -0
  102. package/dist/next/types.js +3 -0
  103. package/dist/next/types.js.map +1 -0
  104. package/dist/payload/applyDocsSync.d.ts +54 -0
  105. package/dist/payload/applyDocsSync.js +176 -0
  106. package/dist/payload/applyDocsSync.js.map +1 -0
  107. package/dist/payload/docsConflicts.d.ts +12 -0
  108. package/dist/payload/docsConflicts.js +34 -0
  109. package/dist/payload/docsConflicts.js.map +1 -0
  110. package/dist/payload/docsData.d.ts +23 -0
  111. package/dist/payload/docsData.js +59 -0
  112. package/dist/payload/docsData.js.map +1 -0
  113. package/dist/payload/docsSets.d.ts +38 -0
  114. package/dist/payload/docsSets.js +57 -0
  115. package/dist/payload/docsSets.js.map +1 -0
  116. package/dist/payload/existingDocs.d.ts +43 -0
  117. package/dist/payload/existingDocs.js +97 -0
  118. package/dist/payload/existingDocs.js.map +1 -0
  119. package/dist/payload/index.d.ts +15 -0
  120. package/dist/payload/index.js +10 -0
  121. package/dist/payload/index.js.map +1 -0
  122. package/dist/payload/routeCollisions.d.ts +31 -0
  123. package/dist/payload/routeCollisions.js +104 -0
  124. package/dist/payload/routeCollisions.js.map +1 -0
  125. package/dist/payload/syncRuns.d.ts +60 -0
  126. package/dist/payload/syncRuns.js +53 -0
  127. package/dist/payload/syncRuns.js.map +1 -0
  128. package/dist/plugin.d.ts +3 -0
  129. package/dist/plugin.js +165 -0
  130. package/dist/plugin.js.map +1 -0
  131. package/dist/routing/index.d.ts +3 -0
  132. package/dist/routing/index.js +4 -0
  133. package/dist/routing/index.js.map +1 -0
  134. package/dist/routing/paths.d.ts +7 -0
  135. package/dist/routing/paths.js +23 -0
  136. package/dist/routing/paths.js.map +1 -0
  137. package/dist/routing/reservations.d.ts +37 -0
  138. package/dist/routing/reservations.js +79 -0
  139. package/dist/routing/reservations.js.map +1 -0
  140. package/dist/security/canonical.d.ts +12 -0
  141. package/dist/security/canonical.js +24 -0
  142. package/dist/security/canonical.js.map +1 -0
  143. package/dist/security/githubOidc.d.ts +45 -0
  144. package/dist/security/githubOidc.js +177 -0
  145. package/dist/security/githubOidc.js.map +1 -0
  146. package/dist/security/headers.d.ts +22 -0
  147. package/dist/security/headers.js +44 -0
  148. package/dist/security/headers.js.map +1 -0
  149. package/dist/security/index.d.ts +15 -0
  150. package/dist/security/index.js +9 -0
  151. package/dist/security/index.js.map +1 -0
  152. package/dist/security/jwks.d.ts +20 -0
  153. package/dist/security/jwks.js +40 -0
  154. package/dist/security/jwks.js.map +1 -0
  155. package/dist/security/jwt.d.ts +10 -0
  156. package/dist/security/jwt.js +42 -0
  157. package/dist/security/jwt.js.map +1 -0
  158. package/dist/security/nonce.d.ts +34 -0
  159. package/dist/security/nonce.js +43 -0
  160. package/dist/security/nonce.js.map +1 -0
  161. package/dist/security/sign.d.ts +13 -0
  162. package/dist/security/sign.js +39 -0
  163. package/dist/security/sign.js.map +1 -0
  164. package/dist/security/verify.d.ts +28 -0
  165. package/dist/security/verify.js +54 -0
  166. package/dist/security/verify.js.map +1 -0
  167. package/dist/skills/codex/SKILL.md +173 -0
  168. package/dist/skills/codex/examples/docs-page.md +42 -0
  169. package/dist/skills/codex/examples/github-actions.md +64 -0
  170. package/dist/skills/codex/reference/admin.md +28 -0
  171. package/dist/skills/codex/reference/frontmatter.md +39 -0
  172. package/dist/skills/codex/reference/payload-markdown-directives.md +77 -0
  173. package/dist/skills/codex/reference/routing.md +35 -0
  174. package/dist/skills/codex/reference/sync.md +35 -0
  175. package/dist/skills/codex/reference/troubleshooting.md +53 -0
  176. package/dist/skills/codex/reference/workflow.md +39 -0
  177. package/dist/sync/aiExportManifest.d.ts +58 -0
  178. package/dist/sync/aiExportManifest.js +430 -0
  179. package/dist/sync/aiExportManifest.js.map +1 -0
  180. package/dist/sync/frontmatter.d.ts +28 -0
  181. package/dist/sync/frontmatter.js +210 -0
  182. package/dist/sync/frontmatter.js.map +1 -0
  183. package/dist/sync/hash.d.ts +1 -0
  184. package/dist/sync/hash.js +8 -0
  185. package/dist/sync/hash.js.map +1 -0
  186. package/dist/sync/index.d.ts +12 -0
  187. package/dist/sync/index.js +9 -0
  188. package/dist/sync/index.js.map +1 -0
  189. package/dist/sync/manifest.d.ts +58 -0
  190. package/dist/sync/manifest.js +21 -0
  191. package/dist/sync/manifest.js.map +1 -0
  192. package/dist/sync/paths.d.ts +16 -0
  193. package/dist/sync/paths.js +116 -0
  194. package/dist/sync/paths.js.map +1 -0
  195. package/dist/sync/plan.d.ts +29 -0
  196. package/dist/sync/plan.js +72 -0
  197. package/dist/sync/plan.js.map +1 -0
  198. package/dist/sync/validate.d.ts +26 -0
  199. package/dist/sync/validate.js +308 -0
  200. package/dist/sync/validate.js.map +1 -0
  201. package/dist/types.d.ts +84 -0
  202. package/dist/types.js +3 -0
  203. package/dist/types.js.map +1 -0
  204. 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[]>;