@valkyrianlabs/payload-markdown-docs 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/admin/DocsSetManager.js +7 -40
  2. package/dist/admin/DocsSetManager.js.map +1 -1
  3. package/dist/cli/commands/push.js.map +1 -1
  4. package/dist/cli/format.d.ts +1 -3
  5. package/dist/cli/format.js +1 -2
  6. package/dist/cli/format.js.map +1 -1
  7. package/dist/collections/docs.js +13 -0
  8. package/dist/collections/docs.js.map +1 -1
  9. package/dist/collections/docsSets.d.ts +1 -4
  10. package/dist/collections/docsSets.js +17 -11
  11. package/dist/collections/docsSets.js.map +1 -1
  12. package/dist/collections/syncRuns.js +0 -9
  13. package/dist/collections/syncRuns.js.map +1 -1
  14. package/dist/endpoints/index.d.ts +0 -2
  15. package/dist/endpoints/index.js +0 -1
  16. package/dist/endpoints/index.js.map +1 -1
  17. package/dist/endpoints/sync.d.ts +0 -2
  18. package/dist/endpoints/sync.js +8 -15
  19. package/dist/endpoints/sync.js.map +1 -1
  20. package/dist/next/links.js +5 -2
  21. package/dist/next/links.js.map +1 -1
  22. package/dist/next/markdown.js +18 -6
  23. package/dist/next/markdown.js.map +1 -1
  24. package/dist/next/records.d.ts +4 -0
  25. package/dist/next/records.js +7 -0
  26. package/dist/next/records.js.map +1 -1
  27. package/dist/next/route.js +39 -13
  28. package/dist/next/route.js.map +1 -1
  29. package/dist/next/sidebar.js +1 -0
  30. package/dist/next/sidebar.js.map +1 -1
  31. package/dist/next/types.d.ts +2 -0
  32. package/dist/next/types.js.map +1 -1
  33. package/dist/payload/applyDocsSync.d.ts +4 -3
  34. package/dist/payload/applyDocsSync.js +18 -6
  35. package/dist/payload/applyDocsSync.js.map +1 -1
  36. package/dist/payload/docsData.d.ts +2 -5
  37. package/dist/payload/docsData.js +4 -8
  38. package/dist/payload/docsData.js.map +1 -1
  39. package/dist/payload/docsSets.d.ts +6 -2
  40. package/dist/payload/docsSets.js +5 -2
  41. package/dist/payload/docsSets.js.map +1 -1
  42. package/dist/payload/existingDocs.d.ts +5 -2
  43. package/dist/payload/existingDocs.js +5 -2
  44. package/dist/payload/existingDocs.js.map +1 -1
  45. package/dist/payload/index.d.ts +11 -11
  46. package/dist/payload/index.js.map +1 -1
  47. package/dist/payload/populatePublishedAt.d.ts +2 -0
  48. package/dist/payload/populatePublishedAt.js +14 -0
  49. package/dist/payload/populatePublishedAt.js.map +1 -0
  50. package/dist/payload/routeCollisions.d.ts +3 -1
  51. package/dist/payload/routeCollisions.js +2 -1
  52. package/dist/payload/routeCollisions.js.map +1 -1
  53. package/dist/payload/syncRuns.d.ts +1 -2
  54. package/dist/payload/syncRuns.js +1 -2
  55. package/dist/payload/syncRuns.js.map +1 -1
  56. package/dist/plugin.js +0 -4
  57. package/dist/plugin.js.map +1 -1
  58. package/dist/skills/codex/reference/admin.md +0 -1
  59. package/dist/sync/plan.d.ts +1 -0
  60. package/dist/sync/plan.js +4 -2
  61. package/dist/sync/plan.js.map +1 -1
  62. package/dist/types.d.ts +0 -1
  63. package/dist/types.js.map +1 -1
  64. package/package.json +1 -1
  65. package/dist/endpoints/publishGeneratedDocs.d.ts +0 -7
  66. package/dist/endpoints/publishGeneratedDocs.js +0 -77
  67. package/dist/endpoints/publishGeneratedDocs.js.map +0 -1
  68. package/dist/payload/publishGeneratedDocs.d.ts +0 -30
  69. package/dist/payload/publishGeneratedDocs.js +0 -92
  70. package/dist/payload/publishGeneratedDocs.js.map +0 -1
@@ -3,6 +3,10 @@ export declare const isRecord: (value: unknown) => value is Record<string, unkno
3
3
  export declare const getRecordId: (doc: Record<string, unknown>) => string | undefined;
4
4
  export declare const getRelationshipId: (value: unknown) => string | undefined;
5
5
  export declare const toResolvedDocsSet: (doc: unknown) => ResolvedPayloadMarkdownDocsSet | undefined;
6
+ export declare const isVisibleDocsSet: ({ docsSet, includeDrafts, }: {
7
+ docsSet: ResolvedPayloadMarkdownDocsSet;
8
+ includeDrafts?: boolean;
9
+ }) => boolean;
6
10
  export declare const toResolvedDocsGroup: (doc: unknown) => ResolvedPayloadMarkdownDocsGroup | undefined;
7
11
  export declare const toResolvedDocsRecord: ({ doc, markdownField, }: {
8
12
  doc: unknown;
@@ -83,9 +83,16 @@ export const toResolvedDocsSet = (doc)=>{
83
83
  routeBase: normalizeRoutePath(routeBase ?? deriveDocsSetRouteBase({
84
84
  docsSetSlug: slug ?? id
85
85
  })),
86
+ status: doc._status === 'draft' || doc._status === 'published' ? doc._status : undefined,
86
87
  title
87
88
  };
88
89
  };
90
+ export const isVisibleDocsSet = ({ docsSet, includeDrafts = false })=>{
91
+ if (!includeDrafts && docsSet.status === 'draft') {
92
+ return false;
93
+ }
94
+ return true;
95
+ };
89
96
  export const toResolvedDocsGroup = (doc)=>{
90
97
  if (!isRecord(doc)) {
91
98
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/next/records.ts"],"sourcesContent":["import type {\n PayloadMarkdownDocsDefaults,\n PayloadMarkdownDocsHeroImage,\n PayloadMarkdownDocsOverrides,\n ResolvedPayloadMarkdownDocsGroup,\n ResolvedPayloadMarkdownDocsRecord,\n ResolvedPayloadMarkdownDocsSet,\n} from './types.js'\n\nimport { deriveDocsSetRouteBase, normalizeRoutePath } from '../routing/index.js'\nimport { isAiMarkdownExportManifestPath, validateDocsAiExportManifest } 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 = (doc: Record<string, unknown>, key: string): string | undefined =>\n typeof doc[key] === 'string' ? doc[key] : undefined\n\nconst getOptionalNumber = (doc: Record<string, unknown>, key: string): number | undefined =>\n typeof doc[key] === 'number' ? doc[key] : undefined\n\nconst getOptionalBoolean = (doc: Record<string, unknown>, key: string): boolean | undefined =>\n 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' || value.sidebarMode === 'hidden' || value.sidebarMode === 'manual'\n ? value.sidebarMode\n : undefined\n const defaults = cleanObject({\n sidebarMode,\n } satisfies PayloadMarkdownDocsDefaults)\n\n return Object.keys(defaults).length > 0 ? (defaults as PayloadMarkdownDocsDefaults) : undefined\n}\n\nconst toOverrides = (value: unknown): PayloadMarkdownDocsOverrides | undefined => {\n if (!isRecord(value)) {\n return undefined\n }\n\n const overrides = cleanObject({\n hideFromNav: getOptionalBoolean(value, 'hideFromNav'),\n navTitle: getOptionalString(value, 'navTitle'),\n })\n\n return Object.keys(overrides).length > 0 ? overrides : undefined\n}\n\nconst toHeroImage = (value: unknown): PayloadMarkdownDocsHeroImage | undefined => {\n const media = isRecord(value) && isRecord(value.value) ? value.value : value\n\n if (!isRecord(media)) {\n return undefined\n }\n\n const url = getOptionalString(media, 'url')\n\n if (!url) {\n return undefined\n }\n\n return cleanObject({\n id: getRecordId(media),\n alt: getOptionalString(media, 'alt'),\n height: getOptionalNumber(media, 'height'),\n relationTo: isRecord(value) ? getOptionalString(value, 'relationTo') : undefined,\n url,\n width: getOptionalNumber(media, 'width'),\n }) as PayloadMarkdownDocsHeroImage\n}\n\nexport const toResolvedDocsSet = (doc: unknown): 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 const slug = getOptionalString(doc, 'slug')\n\n if (!id || !title || (!routeBase && !slug)) {\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,\n defaults: toDefaults(doc.defaults),\n description: getOptionalString(doc, 'description'),\n navTitle: getOptionalString(doc, 'navTitle'),\n order: getOptionalNumber(doc, 'order') ?? 0,\n routeBase: normalizeRoutePath(\n routeBase ??\n deriveDocsSetRouteBase({\n docsSetSlug: slug ?? id,\n }),\n ),\n title,\n }\n}\n\nexport const toResolvedDocsGroup = (doc: unknown): 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 const slug = getOptionalString(doc, 'slug')\n\n if (!id || !title || (!routePath && !slug)) {\n return undefined\n }\n\n return {\n id,\n slug,\n description: getOptionalString(doc, 'description'),\n navTitle: getOptionalString(doc, 'navTitle'),\n order: getOptionalNumber(doc, 'order') ?? 0,\n routePath: normalizeRoutePath(routePath ?? `/${slug}`),\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 = doc._status === 'draft' || doc._status === 'published' ? doc._status : undefined\n\n return {\n id,\n archived: getOptionalBoolean(sync ?? {}, 'archived') ?? false,\n content: typeof doc[markdownField] === 'string' ? doc[markdownField] : undefined,\n depth: getOptionalNumber(doc, 'depth') ?? 0,\n description: getOptionalString(doc, 'description'),\n docsSetId: getRelationshipId(doc.docsSet),\n heroImage: toHeroImage(doc.heroImage),\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":["deriveDocsSetRouteBase","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","keys","length","toOverrides","overrides","hideFromNav","navTitle","toHeroImage","media","url","alt","height","relationTo","width","toResolvedDocsSet","routeBase","title","slug","aiExportValidation","aiExport","ok","manifest","description","order","docsSetSlug","toResolvedDocsGroup","routePath","serveIndex","toResolvedDocsRecord","markdownField","route","sourcePath","sync","status","_status","archived","content","depth","docsSetId","docsSet","heroImage","sourceHash","isVisibleDocsRecord","includeDrafts","record"],"mappings":"AASA,SAASA,sBAAsB,EAAEC,kBAAkB,QAAQ,sBAAqB;AAChF,SAASC,8BAA8B,EAAEC,4BAA4B,QAAQ,mBAAkB;AAE/F,OAAO,MAAMC,WAAW,CAACC,QACvB,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAACC,MAAMC,OAAO,CAACF,OAAM;AAEtE,OAAO,MAAMG,cAAc,CAACC;IAC1B,IAAI,OAAOA,IAAIC,EAAE,KAAK,YAAY,OAAOD,IAAIC,EAAE,KAAK,UAAU;QAC5D,OAAOC,OAAOF,IAAIC,EAAE;IACtB;IAEA,OAAOE;AACT,EAAC;AAED,OAAO,MAAMC,oBAAoB,CAACR;IAChC,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,UAAU;QAC1D,OAAOM,OAAON;IAChB;IAEA,IAAID,SAASC,QAAQ;QACnB,OAAOG,YAAYH;IACrB;IAEA,OAAOO;AACT,EAAC;AAED,MAAME,oBAAoB,CAACL,KAA8BM,MACvD,OAAON,GAAG,CAACM,IAAI,KAAK,WAAWN,GAAG,CAACM,IAAI,GAAGH;AAE5C,MAAMI,oBAAoB,CAACP,KAA8BM,MACvD,OAAON,GAAG,CAACM,IAAI,KAAK,WAAWN,GAAG,CAACM,IAAI,GAAGH;AAE5C,MAAMK,qBAAqB,CAACR,KAA8BM,MACxD,OAAON,GAAG,CAACM,IAAI,KAAK,YAAYN,GAAG,CAACM,IAAI,GAAGH;AAE7C,MAAMM,cAAc,CAAoCC,QACtDC,OAAOC,WAAW,CAChBD,OAAOE,OAAO,CAACH,OAAOI,MAAM,CAAC,CAAC,GAAGlB,MAAM,GAAKA,UAAUO,aAAaP,UAAU;AAGjF,MAAMmB,aAAa,CAACnB;IAClB,IAAI,CAACD,SAASC,QAAQ;QACpB,OAAOO;IACT;IAEA,MAAMa,cACJpB,MAAMoB,WAAW,KAAK,UAAUpB,MAAMoB,WAAW,KAAK,YAAYpB,MAAMoB,WAAW,KAAK,WACpFpB,MAAMoB,WAAW,GACjBb;IACN,MAAMc,WAAWR,YAAY;QAC3BO;IACF;IAEA,OAAOL,OAAOO,IAAI,CAACD,UAAUE,MAAM,GAAG,IAAKF,WAA2Cd;AACxF;AAEA,MAAMiB,cAAc,CAACxB;IACnB,IAAI,CAACD,SAASC,QAAQ;QACpB,OAAOO;IACT;IAEA,MAAMkB,YAAYZ,YAAY;QAC5Ba,aAAad,mBAAmBZ,OAAO;QACvC2B,UAAUlB,kBAAkBT,OAAO;IACrC;IAEA,OAAOe,OAAOO,IAAI,CAACG,WAAWF,MAAM,GAAG,IAAIE,YAAYlB;AACzD;AAEA,MAAMqB,cAAc,CAAC5B;IACnB,MAAM6B,QAAQ9B,SAASC,UAAUD,SAASC,MAAMA,KAAK,IAAIA,MAAMA,KAAK,GAAGA;IAEvE,IAAI,CAACD,SAAS8B,QAAQ;QACpB,OAAOtB;IACT;IAEA,MAAMuB,MAAMrB,kBAAkBoB,OAAO;IAErC,IAAI,CAACC,KAAK;QACR,OAAOvB;IACT;IAEA,OAAOM,YAAY;QACjBR,IAAIF,YAAY0B;QAChBE,KAAKtB,kBAAkBoB,OAAO;QAC9BG,QAAQrB,kBAAkBkB,OAAO;QACjCI,YAAYlC,SAASC,SAASS,kBAAkBT,OAAO,gBAAgBO;QACvEuB;QACAI,OAAOvB,kBAAkBkB,OAAO;IAClC;AACF;AAEA,OAAO,MAAMM,oBAAoB,CAAC/B;IAChC,IAAI,CAACL,SAASK,MAAM;QAClB,OAAOG;IACT;IAEA,MAAMF,KAAKF,YAAYC;IACvB,MAAMgC,YAAY3B,kBAAkBL,KAAK;IACzC,MAAMiC,QAAQ5B,kBAAkBL,KAAK;IACrC,MAAMkC,OAAO7B,kBAAkBL,KAAK;IAEpC,IAAI,CAACC,MAAM,CAACgC,SAAU,CAACD,aAAa,CAACE,MAAO;QAC1C,OAAO/B;IACT;IAEA,MAAMgC,qBACJnC,IAAIoC,QAAQ,KAAKjC,aAAaH,IAAIoC,QAAQ,KAAK,OAC3CjC,YACAT,6BAA6BM,IAAIoC,QAAQ;IAE/C,OAAO;QACL,GAAID,oBAAoBE,KAAK;YAAED,UAAUD,mBAAmBG,QAAQ;QAAC,IAAI,CAAC,CAAC;QAC3ErC;QACAiC;QACAjB,UAAUF,WAAWf,IAAIiB,QAAQ;QACjCsB,aAAalC,kBAAkBL,KAAK;QACpCuB,UAAUlB,kBAAkBL,KAAK;QACjCwC,OAAOjC,kBAAkBP,KAAK,YAAY;QAC1CgC,WAAWxC,mBACTwC,aACEzC,uBAAuB;YACrBkD,aAAaP,QAAQjC;QACvB;QAEJgC;IACF;AACF,EAAC;AAED,OAAO,MAAMS,sBAAsB,CAAC1C;IAClC,IAAI,CAACL,SAASK,MAAM;QAClB,OAAOG;IACT;IAEA,MAAMF,KAAKF,YAAYC;IACvB,MAAM2C,YAAYtC,kBAAkBL,KAAK;IACzC,MAAMiC,QAAQ5B,kBAAkBL,KAAK;IACrC,MAAMkC,OAAO7B,kBAAkBL,KAAK;IAEpC,IAAI,CAACC,MAAM,CAACgC,SAAU,CAACU,aAAa,CAACT,MAAO;QAC1C,OAAO/B;IACT;IAEA,OAAO;QACLF;QACAiC;QACAK,aAAalC,kBAAkBL,KAAK;QACpCuB,UAAUlB,kBAAkBL,KAAK;QACjCwC,OAAOjC,kBAAkBP,KAAK,YAAY;QAC1C2C,WAAWnD,mBAAmBmD,aAAa,CAAC,CAAC,EAAET,MAAM;QACrDU,YAAYpC,mBAAmBR,KAAK,iBAAiB;QACrDiC;IACF;AACF,EAAC;AAED,OAAO,MAAMY,uBAAuB,CAAC,EACnC7C,GAAG,EACH8C,aAAa,EAId;IACC,IAAI,CAACnD,SAASK,MAAM;QAClB,OAAOG;IACT;IAEA,MAAMF,KAAKF,YAAYC;IACvB,MAAM+C,QAAQ1C,kBAAkBL,KAAK;IACrC,MAAMgD,aAAa3C,kBAAkBL,KAAK;IAC1C,MAAMiC,QAAQ5B,kBAAkBL,KAAK;IAErC,IAAI,CAACC,MAAM,CAAC8C,SAAS,CAACC,cAAc,CAACf,OAAO;QAC1C,OAAO9B;IACT;IAEA,MAAM8C,OAAOtD,SAASK,IAAIiD,IAAI,IAAIjD,IAAIiD,IAAI,GAAG9C;IAC7C,MAAM+C,SAASlD,IAAImD,OAAO,KAAK,WAAWnD,IAAImD,OAAO,KAAK,cAAcnD,IAAImD,OAAO,GAAGhD;IAEtF,OAAO;QACLF;QACAmD,UAAU5C,mBAAmByC,QAAQ,CAAC,GAAG,eAAe;QACxDI,SAAS,OAAOrD,GAAG,CAAC8C,cAAc,KAAK,WAAW9C,GAAG,CAAC8C,cAAc,GAAG3C;QACvEmD,OAAO/C,kBAAkBP,KAAK,YAAY;QAC1CuC,aAAalC,kBAAkBL,KAAK;QACpCuD,WAAWnD,kBAAkBJ,IAAIwD,OAAO;QACxCC,WAAWjC,YAAYxB,IAAIyD,SAAS;QACpClC,UAAUlB,kBAAkBL,KAAK;QACjCwC,OAAOjC,kBAAkBP,KAAK,YAAY;QAC1CqB,WAAWD,YAAYpB,IAAIqB,SAAS;QACpC0B,OAAOvD,mBAAmBuD;QAC1BW,YAAYrD,kBAAkBL,KAAK;QACnCgD;QACAE;QACAjB;IACF;AACF,EAAC;AAED,OAAO,MAAM0B,sBAAsB,CAAC,EAClCC,gBAAgB,KAAK,EACrBC,MAAM,EAIP;IACC,IAAIA,OAAOT,QAAQ,EAAE;QACnB,OAAO;IACT;IAEA,IAAI3D,+BAA+BoE,OAAOb,UAAU,GAAG;QACrD,OAAO;IACT;IAEA,IAAI,CAACY,iBAAiBC,OAAOX,MAAM,KAAK,SAAS;QAC/C,OAAO;IACT;IAEA,OAAO;AACT,EAAC"}
1
+ {"version":3,"sources":["../../src/next/records.ts"],"sourcesContent":["import type {\n PayloadMarkdownDocsDefaults,\n PayloadMarkdownDocsHeroImage,\n PayloadMarkdownDocsOverrides,\n ResolvedPayloadMarkdownDocsGroup,\n ResolvedPayloadMarkdownDocsRecord,\n ResolvedPayloadMarkdownDocsSet,\n} from './types.js'\n\nimport { deriveDocsSetRouteBase, normalizeRoutePath } from '../routing/index.js'\nimport { isAiMarkdownExportManifestPath, validateDocsAiExportManifest } 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 = (doc: Record<string, unknown>, key: string): string | undefined =>\n typeof doc[key] === 'string' ? doc[key] : undefined\n\nconst getOptionalNumber = (doc: Record<string, unknown>, key: string): number | undefined =>\n typeof doc[key] === 'number' ? doc[key] : undefined\n\nconst getOptionalBoolean = (doc: Record<string, unknown>, key: string): boolean | undefined =>\n 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' || value.sidebarMode === 'hidden' || value.sidebarMode === 'manual'\n ? value.sidebarMode\n : undefined\n const defaults = cleanObject({\n sidebarMode,\n } satisfies PayloadMarkdownDocsDefaults)\n\n return Object.keys(defaults).length > 0 ? (defaults as PayloadMarkdownDocsDefaults) : undefined\n}\n\nconst toOverrides = (value: unknown): PayloadMarkdownDocsOverrides | undefined => {\n if (!isRecord(value)) {\n return undefined\n }\n\n const overrides = cleanObject({\n hideFromNav: getOptionalBoolean(value, 'hideFromNav'),\n navTitle: getOptionalString(value, 'navTitle'),\n })\n\n return Object.keys(overrides).length > 0 ? overrides : undefined\n}\n\nconst toHeroImage = (value: unknown): PayloadMarkdownDocsHeroImage | undefined => {\n const media = isRecord(value) && isRecord(value.value) ? value.value : value\n\n if (!isRecord(media)) {\n return undefined\n }\n\n const url = getOptionalString(media, 'url')\n\n if (!url) {\n return undefined\n }\n\n return cleanObject({\n id: getRecordId(media),\n alt: getOptionalString(media, 'alt'),\n height: getOptionalNumber(media, 'height'),\n relationTo: isRecord(value) ? getOptionalString(value, 'relationTo') : undefined,\n url,\n width: getOptionalNumber(media, 'width'),\n }) as PayloadMarkdownDocsHeroImage\n}\n\nexport const toResolvedDocsSet = (doc: unknown): 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 const slug = getOptionalString(doc, 'slug')\n\n if (!id || !title || (!routeBase && !slug)) {\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,\n defaults: toDefaults(doc.defaults),\n description: getOptionalString(doc, 'description'),\n navTitle: getOptionalString(doc, 'navTitle'),\n order: getOptionalNumber(doc, 'order') ?? 0,\n routeBase: normalizeRoutePath(\n routeBase ??\n deriveDocsSetRouteBase({\n docsSetSlug: slug ?? id,\n }),\n ),\n status: doc._status === 'draft' || doc._status === 'published' ? doc._status : undefined,\n title,\n }\n}\n\nexport const isVisibleDocsSet = ({\n docsSet,\n includeDrafts = false,\n}: {\n docsSet: ResolvedPayloadMarkdownDocsSet\n includeDrafts?: boolean\n}): boolean => {\n if (!includeDrafts && docsSet.status === 'draft') {\n return false\n }\n\n return true\n}\n\nexport const toResolvedDocsGroup = (doc: unknown): 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 const slug = getOptionalString(doc, 'slug')\n\n if (!id || !title || (!routePath && !slug)) {\n return undefined\n }\n\n return {\n id,\n slug,\n description: getOptionalString(doc, 'description'),\n navTitle: getOptionalString(doc, 'navTitle'),\n order: getOptionalNumber(doc, 'order') ?? 0,\n routePath: normalizeRoutePath(routePath ?? `/${slug}`),\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 = doc._status === 'draft' || doc._status === 'published' ? doc._status : undefined\n\n return {\n id,\n archived: getOptionalBoolean(sync ?? {}, 'archived') ?? false,\n content: typeof doc[markdownField] === 'string' ? doc[markdownField] : undefined,\n depth: getOptionalNumber(doc, 'depth') ?? 0,\n description: getOptionalString(doc, 'description'),\n docsSetId: getRelationshipId(doc.docsSet),\n heroImage: toHeroImage(doc.heroImage),\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":["deriveDocsSetRouteBase","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","keys","length","toOverrides","overrides","hideFromNav","navTitle","toHeroImage","media","url","alt","height","relationTo","width","toResolvedDocsSet","routeBase","title","slug","aiExportValidation","aiExport","ok","manifest","description","order","docsSetSlug","status","_status","isVisibleDocsSet","docsSet","includeDrafts","toResolvedDocsGroup","routePath","serveIndex","toResolvedDocsRecord","markdownField","route","sourcePath","sync","archived","content","depth","docsSetId","heroImage","sourceHash","isVisibleDocsRecord","record"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { DEFAULT_DOCS_COLLECTION_SLUG, DEFAULT_DOCS_GROUPS_COLLECTION_SLUG, DEFAULT_DOCS_SETS_COLLECTION_SLUG, DEFAULT_MARKDOWN_FIELD_NAME } from '../constants.js';
2
2
  import { deriveDocsSetRouteBase, isRouteDescendant, joinRouteSegments, normalizeRoutePath } from '../routing/index.js';
3
- import { getRelationshipId, isRecord, isVisibleDocsRecord, toResolvedDocsGroup, toResolvedDocsRecord, toResolvedDocsSet } from './records.js';
3
+ import { getRelationshipId, isRecord, isVisibleDocsRecord, isVisibleDocsSet, toResolvedDocsGroup, toResolvedDocsRecord, toResolvedDocsSet } from './records.js';
4
4
  import { getPayloadMarkdownDocsSidebar } from './sidebar.js';
5
5
  const resolveCollectionSlugs = (collections)=>({
6
6
  docs: collections?.docs ?? DEFAULT_DOCS_COLLECTION_SLUG,
@@ -78,11 +78,12 @@ const withComputedDocsSetRoute = ({ doc, docsSet, groupsById })=>{
78
78
  })
79
79
  };
80
80
  };
81
- const findDocsSetById = async ({ id, collections, overrideAccess, payload })=>{
81
+ const findDocsSetById = async ({ id, collections, includeDrafts, overrideAccess, payload })=>{
82
82
  const [result, groupsById] = await Promise.all([
83
83
  payload.find({
84
84
  collection: collections.docsSets,
85
85
  depth: 0,
86
+ draft: includeDrafts,
86
87
  limit: 1,
87
88
  overrideAccess,
88
89
  where: {
@@ -97,17 +98,22 @@ const findDocsSetById = async ({ id, collections, overrideAccess, payload })=>{
97
98
  payload
98
99
  })
99
100
  ]);
100
- return withComputedDocsSetRoute({
101
+ const docsSet = withComputedDocsSetRoute({
101
102
  doc: result.docs[0],
102
103
  docsSet: toResolvedDocsSet(result.docs[0]),
103
104
  groupsById
104
105
  });
106
+ return docsSet && isVisibleDocsSet({
107
+ docsSet,
108
+ includeDrafts
109
+ }) ? docsSet : undefined;
105
110
  };
106
- const findDocsSetByRouteBase = async ({ collections, overrideAccess, payload, route })=>{
111
+ const findDocsSetByRouteBase = async ({ collections, includeDrafts, overrideAccess, payload, route })=>{
107
112
  const [result, groupsById] = await Promise.all([
108
113
  payload.find({
109
114
  collection: collections.docsSets,
110
115
  depth: 0,
116
+ draft: includeDrafts,
111
117
  limit: 1000,
112
118
  overrideAccess
113
119
  }),
@@ -121,13 +127,17 @@ const findDocsSetByRouteBase = async ({ collections, overrideAccess, payload, ro
121
127
  doc,
122
128
  docsSet: toResolvedDocsSet(doc),
123
129
  groupsById
130
+ })).filter((docsSet)=>docsSet !== undefined && isVisibleDocsSet({
131
+ docsSet,
132
+ includeDrafts
124
133
  })).find((docsSet)=>docsSet?.routeBase === route);
125
134
  };
126
- const findDocsSetByRoutePrefix = async ({ collections, overrideAccess, payload, route })=>{
135
+ const findDocsSetByRoutePrefix = async ({ collections, includeDrafts, overrideAccess, payload, route })=>{
127
136
  const [result, groupsById] = await Promise.all([
128
137
  payload.find({
129
138
  collection: collections.docsSets,
130
139
  depth: 0,
140
+ draft: includeDrafts,
131
141
  limit: 1000,
132
142
  overrideAccess
133
143
  }),
@@ -145,6 +155,12 @@ const findDocsSetByRoutePrefix = async ({ collections, overrideAccess, payload,
145
155
  if (!docsSet) {
146
156
  return false;
147
157
  }
158
+ if (!isVisibleDocsSet({
159
+ docsSet,
160
+ includeDrafts
161
+ })) {
162
+ return false;
163
+ }
148
164
  return docsSet.routeBase === route || isRouteDescendant(docsSet.routeBase, route);
149
165
  }).sort((first, second)=>second.routeBase.length - first.routeBase.length)[0];
150
166
  };
@@ -154,24 +170,26 @@ const getRelatedDocsSet = (doc)=>{
154
170
  }
155
171
  return toResolvedDocsSet(doc.docsSet);
156
172
  };
157
- const findDocsSetForRecord = async ({ collections, doc, overrideAccess, payload, record })=>{
173
+ const findDocsSetForRecord = async ({ collections, doc, includeDrafts, overrideAccess, payload, record })=>{
158
174
  if (record.docsSetId) {
159
- const docsSetById = await findDocsSetById({
175
+ return findDocsSetById({
160
176
  id: record.docsSetId,
161
177
  collections,
178
+ includeDrafts,
162
179
  overrideAccess,
163
180
  payload
164
181
  });
165
- if (docsSetById) {
166
- return docsSetById;
167
- }
168
182
  }
169
183
  const relatedDocsSet = getRelatedDocsSet(doc);
170
- if (relatedDocsSet) {
184
+ if (relatedDocsSet && isVisibleDocsSet({
185
+ docsSet: relatedDocsSet,
186
+ includeDrafts
187
+ })) {
171
188
  return relatedDocsSet;
172
189
  }
173
190
  return findDocsSetByRoutePrefix({
174
191
  collections,
192
+ includeDrafts,
175
193
  overrideAccess,
176
194
  payload,
177
195
  route: record.route
@@ -181,6 +199,7 @@ const findDocsRecordByRoute = async ({ collections, includeDrafts, markdownField
181
199
  const result = await payload.find({
182
200
  collection: collections.docs,
183
201
  depth: 1,
202
+ draft: includeDrafts,
184
203
  limit: 5,
185
204
  overrideAccess,
186
205
  where: {
@@ -229,7 +248,7 @@ const findDocsSetIndexRecord = async ({ collections, docsSet, includeDrafts, mar
229
248
  }
230
249
  return result.record;
231
250
  };
232
- const findGroupIndexRoute = async ({ collections, overrideAccess, payload, route })=>{
251
+ const findGroupIndexRoute = async ({ collections, includeDrafts, overrideAccess, payload, route })=>{
233
252
  const groupsById = await getGroupsById({
234
253
  collections,
235
254
  overrideAccess,
@@ -254,6 +273,7 @@ const findGroupIndexRoute = async ({ collections, overrideAccess, payload, route
254
273
  const docsSetsResult = await payload.find({
255
274
  collection: collections.docsSets,
256
275
  depth: 0,
276
+ draft: includeDrafts,
257
277
  limit: 1000,
258
278
  overrideAccess
259
279
  });
@@ -261,7 +281,10 @@ const findGroupIndexRoute = async ({ collections, overrideAccess, payload, route
261
281
  doc,
262
282
  docsSet: toResolvedDocsSet(doc),
263
283
  groupsById
264
- })).filter((docsSet)=>docsSet !== undefined).sort((first, second)=>{
284
+ })).filter((docsSet)=>docsSet !== undefined).filter((docsSet)=>isVisibleDocsSet({
285
+ docsSet,
286
+ includeDrafts
287
+ })).sort((first, second)=>{
265
288
  if (first.order !== second.order) {
266
289
  return first.order - second.order;
267
290
  }
@@ -284,6 +307,7 @@ overrideAccess = true, path, payload })=>{
284
307
  const collections = resolveCollectionSlugs(collectionOptions);
285
308
  const docsSet = await findDocsSetByRouteBase({
286
309
  collections,
310
+ includeDrafts,
287
311
  overrideAccess,
288
312
  payload,
289
313
  route
@@ -329,6 +353,7 @@ overrideAccess = true, path, payload })=>{
329
353
  const resolvedDocsSet = await findDocsSetForRecord({
330
354
  collections,
331
355
  doc: docResult.doc,
356
+ includeDrafts,
332
357
  overrideAccess,
333
358
  payload,
334
359
  record: docResult.record
@@ -353,6 +378,7 @@ overrideAccess = true, path, payload })=>{
353
378
  }
354
379
  const groupRoute = await findGroupIndexRoute({
355
380
  collections,
381
+ includeDrafts,
356
382
  overrideAccess,
357
383
  payload,
358
384
  route
@@ -1 +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 deriveDocsSetRouteBase,\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 getGroupsById = async ({\n collections,\n overrideAccess,\n payload,\n}: {\n collections: ResolvedCollectionSlugs\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n}): Promise<Map<string, unknown>> => {\n const result = await payload.find({\n collection: collections.docsGroups,\n depth: 0,\n limit: 1000,\n overrideAccess,\n })\n\n return new Map(\n result.docs.flatMap((doc) => {\n if (!isRecord(doc)) {\n return []\n }\n\n const id = getRelationshipId(doc)\n\n return id ? [[id, doc]] : []\n }),\n )\n}\n\nconst getGroupRoutePath = ({\n groupId,\n groupsById,\n seen = new Set<string>(),\n}: {\n groupId?: string\n groupsById: Map<string, unknown>\n seen?: Set<string>\n}): string | undefined => {\n if (!groupId || seen.has(groupId)) {\n return undefined\n }\n\n const group = groupsById.get(groupId)\n\n if (!isRecord(group)) {\n return undefined\n }\n\n const slug = typeof group.slug === 'string' ? group.slug : undefined\n\n if (!slug) {\n return undefined\n }\n\n const parentRoutePath = getGroupRoutePath({\n groupId: getRelationshipId(group.parent),\n groupsById,\n seen: new Set([groupId, ...seen]),\n })\n\n return joinRouteSegments(parentRoutePath, slug)\n}\n\nconst withComputedDocsSetRoute = ({\n doc,\n docsSet,\n groupsById,\n}: {\n doc?: unknown\n docsSet?: ResolvedPayloadMarkdownDocsSet\n groupsById: Map<string, unknown>\n}): ResolvedPayloadMarkdownDocsSet | undefined => {\n if (!docsSet?.slug) {\n return docsSet\n }\n\n const groupId = isRecord(doc) ? getRelationshipId(doc.group) : undefined\n const groupRoutePath = getGroupRoutePath({\n groupId,\n groupsById,\n })\n\n return {\n ...docsSet,\n routeBase: deriveDocsSetRouteBase({\n docsSetSlug: docsSet.slug,\n groupRoutePath,\n }),\n }\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, groupsById] = await Promise.all([\n 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 getGroupsById({\n collections,\n overrideAccess,\n payload,\n }),\n ])\n\n return withComputedDocsSetRoute({\n doc: result.docs[0],\n docsSet: toResolvedDocsSet(result.docs[0]),\n groupsById,\n })\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, groupsById] = await Promise.all([\n payload.find({\n collection: collections.docsSets,\n depth: 0,\n limit: 1000,\n overrideAccess,\n }),\n getGroupsById({\n collections,\n overrideAccess,\n payload,\n }),\n ])\n\n return result.docs\n .map((doc) =>\n withComputedDocsSetRoute({\n doc,\n docsSet: toResolvedDocsSet(doc),\n groupsById,\n }),\n )\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, groupsById] = await Promise.all([\n payload.find({\n collection: collections.docsSets,\n depth: 0,\n limit: 1000,\n overrideAccess,\n }),\n getGroupsById({\n collections,\n overrideAccess,\n payload,\n }),\n ])\n\n return result.docs\n .map((doc) =>\n withComputedDocsSetRoute({\n doc,\n docsSet: toResolvedDocsSet(doc),\n groupsById,\n }),\n )\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 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 const relatedDocsSet = getRelatedDocsSet(doc)\n\n if (relatedDocsSet) {\n return relatedDocsSet\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 groupsById = await getGroupsById({\n collections,\n overrideAccess,\n payload,\n })\n const group = [...groupsById.entries()]\n .map(([groupId, doc]) => {\n const resolved = toResolvedDocsGroup(doc)\n const routePath = getGroupRoutePath({\n groupId,\n groupsById,\n })\n\n return resolved && routePath\n ? {\n ...resolved,\n routePath,\n }\n : undefined\n })\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 })\n const docsSets = docsSetsResult.docs\n .filter((doc) => isRecord(doc) && getRelationshipId(doc.group) === group.id)\n .map((doc) =>\n withComputedDocsSetRoute({\n doc,\n docsSet: toResolvedDocsSet(doc),\n groupsById,\n }),\n )\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","deriveDocsSetRouteBase","isRouteDescendant","joinRouteSegments","normalizeRoutePath","getRelationshipId","isRecord","isVisibleDocsRecord","toResolvedDocsGroup","toResolvedDocsRecord","toResolvedDocsSet","getPayloadMarkdownDocsSidebar","resolveCollectionSlugs","collections","docs","docsGroups","docsSets","getPayloadMarkdownDocsRoutePath","slug","path","undefined","Array","isArray","length","getGroupsById","overrideAccess","payload","result","find","collection","depth","limit","Map","flatMap","doc","id","getGroupRoutePath","groupId","groupsById","seen","Set","has","group","get","parentRoutePath","parent","withComputedDocsSetRoute","docsSet","groupRoutePath","routeBase","docsSetSlug","findDocsSetById","Promise","all","where","equals","findDocsSetByRouteBase","route","map","findDocsSetByRoutePrefix","filter","sort","first","second","getRelatedDocsSet","findDocsSetForRecord","record","docsSetId","docsSetById","relatedDocsSet","findDocsRecordByRoute","includeDrafts","markdownField","findDocsSetIndexRecord","relatedDocsSetId","findGroupIndexRoute","entries","resolved","routePath","candidate","serveIndex","docsSetsResult","order","localeCompare","type","resolvePayloadMarkdownDocsRoute","collectionOptions","sidebar","docResult","resolvedDocsSet","groupRoute"],"mappings":"AASA,SACEA,4BAA4B,EAC5BC,mCAAmC,EACnCC,iCAAiC,EACjCC,2BAA2B,QACtB,kBAAiB;AACxB,SACEC,sBAAsB,EACtBC,iBAAiB,EACjBC,iBAAiB,EACjBC,kBAAkB,QACb,sBAAqB;AAC5B,SACEC,iBAAiB,EACjBC,QAAQ,EACRC,mBAAmB,EACnBC,mBAAmB,EACnBC,oBAAoB,EACpBC,iBAAiB,QACZ,eAAc;AACrB,SAASC,6BAA6B,QAAQ,eAAc;AAQ5D,MAAMC,yBAAyB,CAC7BC,cAC6B,CAAA;QAC7BC,MAAMD,aAAaC,QAAQjB;QAC3BkB,YAAYF,aAAaE,cAAcjB;QACvCkB,UAAUH,aAAaG,YAAYjB;IACrC,CAAA;AAEA,OAAO,MAAMkB,kCAAkC,CAAC,EAC9CC,IAAI,EACJC,IAAI,EAIL;IACC,IAAIA,SAASC,WAAW;QACtB,OAAOhB,mBAAmBe;IAC5B;IAEA,IAAIE,MAAMC,OAAO,CAACJ,OAAO;QACvB,OAAOA,KAAKK,MAAM,KAAK,IAAI,MAAMpB,qBAAqBe;IACxD;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5B,OAAOd,mBAAmBc;IAC5B;IAEA,OAAO;AACT,EAAC;AAED,MAAMM,gBAAgB,OAAO,EAC3BX,WAAW,EACXY,cAAc,EACdC,OAAO,EAKR;IACC,MAAMC,SAAS,MAAMD,QAAQE,IAAI,CAAC;QAChCC,YAAYhB,YAAYE,UAAU;QAClCe,OAAO;QACPC,OAAO;QACPN;IACF;IAEA,OAAO,IAAIO,IACTL,OAAOb,IAAI,CAACmB,OAAO,CAAC,CAACC;QACnB,IAAI,CAAC5B,SAAS4B,MAAM;YAClB,OAAO,EAAE;QACX;QAEA,MAAMC,KAAK9B,kBAAkB6B;QAE7B,OAAOC,KAAK;YAAC;gBAACA;gBAAID;aAAI;SAAC,GAAG,EAAE;IAC9B;AAEJ;AAEA,MAAME,oBAAoB,CAAC,EACzBC,OAAO,EACPC,UAAU,EACVC,OAAO,IAAIC,KAAa,EAKzB;IACC,IAAI,CAACH,WAAWE,KAAKE,GAAG,CAACJ,UAAU;QACjC,OAAOjB;IACT;IAEA,MAAMsB,QAAQJ,WAAWK,GAAG,CAACN;IAE7B,IAAI,CAAC/B,SAASoC,QAAQ;QACpB,OAAOtB;IACT;IAEA,MAAMF,OAAO,OAAOwB,MAAMxB,IAAI,KAAK,WAAWwB,MAAMxB,IAAI,GAAGE;IAE3D,IAAI,CAACF,MAAM;QACT,OAAOE;IACT;IAEA,MAAMwB,kBAAkBR,kBAAkB;QACxCC,SAAShC,kBAAkBqC,MAAMG,MAAM;QACvCP;QACAC,MAAM,IAAIC,IAAI;YAACH;eAAYE;SAAK;IAClC;IAEA,OAAOpC,kBAAkByC,iBAAiB1B;AAC5C;AAEA,MAAM4B,2BAA2B,CAAC,EAChCZ,GAAG,EACHa,OAAO,EACPT,UAAU,EAKX;IACC,IAAI,CAACS,SAAS7B,MAAM;QAClB,OAAO6B;IACT;IAEA,MAAMV,UAAU/B,SAAS4B,OAAO7B,kBAAkB6B,IAAIQ,KAAK,IAAItB;IAC/D,MAAM4B,iBAAiBZ,kBAAkB;QACvCC;QACAC;IACF;IAEA,OAAO;QACL,GAAGS,OAAO;QACVE,WAAWhD,uBAAuB;YAChCiD,aAAaH,QAAQ7B,IAAI;YACzB8B;QACF;IACF;AACF;AAEA,MAAMG,kBAAkB,OAAO,EAC7BhB,EAAE,EACFtB,WAAW,EACXY,cAAc,EACdC,OAAO,EAMR;IACC,MAAM,CAACC,QAAQW,WAAW,GAAG,MAAMc,QAAQC,GAAG,CAAC;QAC7C3B,QAAQE,IAAI,CAAC;YACXC,YAAYhB,YAAYG,QAAQ;YAChCc,OAAO;YACPC,OAAO;YACPN;YACA6B,OAAO;gBACLnB,IAAI;oBACFoB,QAAQpB;gBACV;YACF;QACF;QACAX,cAAc;YACZX;YACAY;YACAC;QACF;KACD;IAED,OAAOoB,yBAAyB;QAC9BZ,KAAKP,OAAOb,IAAI,CAAC,EAAE;QACnBiC,SAASrC,kBAAkBiB,OAAOb,IAAI,CAAC,EAAE;QACzCwB;IACF;AACF;AAEA,MAAMkB,yBAAyB,OAAO,EACpC3C,WAAW,EACXY,cAAc,EACdC,OAAO,EACP+B,KAAK,EAMN;IACC,MAAM,CAAC9B,QAAQW,WAAW,GAAG,MAAMc,QAAQC,GAAG,CAAC;QAC7C3B,QAAQE,IAAI,CAAC;YACXC,YAAYhB,YAAYG,QAAQ;YAChCc,OAAO;YACPC,OAAO;YACPN;QACF;QACAD,cAAc;YACZX;YACAY;YACAC;QACF;KACD;IAED,OAAOC,OAAOb,IAAI,CACf4C,GAAG,CAAC,CAACxB,MACJY,yBAAyB;YACvBZ;YACAa,SAASrC,kBAAkBwB;YAC3BI;QACF,IAEDV,IAAI,CAAC,CAACmB,UAAYA,SAASE,cAAcQ;AAC9C;AAEA,MAAME,2BAA2B,OAAO,EACtC9C,WAAW,EACXY,cAAc,EACdC,OAAO,EACP+B,KAAK,EAMN;IACC,MAAM,CAAC9B,QAAQW,WAAW,GAAG,MAAMc,QAAQC,GAAG,CAAC;QAC7C3B,QAAQE,IAAI,CAAC;YACXC,YAAYhB,YAAYG,QAAQ;YAChCc,OAAO;YACPC,OAAO;YACPN;QACF;QACAD,cAAc;YACZX;YACAY;YACAC;QACF;KACD;IAED,OAAOC,OAAOb,IAAI,CACf4C,GAAG,CAAC,CAACxB,MACJY,yBAAyB;YACvBZ;YACAa,SAASrC,kBAAkBwB;YAC3BI;QACF,IAEDsB,MAAM,CAAC,CAACb;QACP,IAAI,CAACA,SAAS;YACZ,OAAO;QACT;QAEA,OAAOA,QAAQE,SAAS,KAAKQ,SAASvD,kBAAkB6C,QAAQE,SAAS,EAAEQ;IAC7E,GACCI,IAAI,CAAC,CAACC,OAAOC,SAAWA,OAAOd,SAAS,CAAC1B,MAAM,GAAGuC,MAAMb,SAAS,CAAC1B,MAAM,CAAC,CAAC,EAAE;AACjF;AAEA,MAAMyC,oBAAoB,CAAC9B;IACzB,IAAI,CAAC5B,SAAS4B,QAAQ,CAAC5B,SAAS4B,IAAIa,OAAO,GAAG;QAC5C,OAAO3B;IACT;IAEA,OAAOV,kBAAkBwB,IAAIa,OAAO;AACtC;AAEA,MAAMkB,uBAAuB,OAAO,EAClCpD,WAAW,EACXqB,GAAG,EACHT,cAAc,EACdC,OAAO,EACPwC,MAAM,EAOP;IACC,IAAIA,OAAOC,SAAS,EAAE;QACpB,MAAMC,cAAc,MAAMjB,gBAAgB;YACxChB,IAAI+B,OAAOC,SAAS;YACpBtD;YACAY;YACAC;QACF;QAEA,IAAI0C,aAAa;YACf,OAAOA;QACT;IACF;IAEA,MAAMC,iBAAiBL,kBAAkB9B;IAEzC,IAAImC,gBAAgB;QAClB,OAAOA;IACT;IAEA,OAAOV,yBAAyB;QAC9B9C;QACAY;QACAC;QACA+B,OAAOS,OAAOT,KAAK;IACrB;AACF;AAEA,MAAMa,wBAAwB,OAAO,EACnCzD,WAAW,EACX0D,aAAa,EACbC,aAAa,EACb/C,cAAc,EACdC,OAAO,EACP+B,KAAK,EAQN;IAOC,MAAM9B,SAAS,MAAMD,QAAQE,IAAI,CAAC;QAChCC,YAAYhB,YAAYC,IAAI;QAC5BgB,OAAO;QACPC,OAAO;QACPN;QACA6B,OAAO;YACLG,OAAO;gBACLF,QAAQE;YACV;QACF;IACF;IAEA,KAAK,MAAMvB,OAAOP,OAAOb,IAAI,CAAE;QAC7B,MAAMoD,SAASzD,qBAAqB;YAClCyB;YACAsC;QACF;QAEA,IACEN,UACAA,OAAOT,KAAK,KAAKA,SACjBlD,oBAAoB;YAClBgE;YACAL;QACF,IACA;YACA,OAAO;gBACLhC;gBACAgC;YACF;QACF;IACF;IAEA,OAAO9C;AACT;AAEA,MAAMqD,yBAAyB,OAAO,EACpC5D,WAAW,EACXkC,OAAO,EACPwB,aAAa,EACbC,aAAa,EACb/C,cAAc,EACdC,OAAO,EAQR;IACC,MAAMC,SAAS,MAAM2C,sBAAsB;QACzCzD;QACA0D;QACAC;QACA/C;QACAC;QACA+B,OAAOV,QAAQE,SAAS;IAC1B;IAEA,IAAI,CAACtB,QAAQ;QACX,OAAOP;IACT;IAEA,IAAIO,OAAOuC,MAAM,CAACC,SAAS,IAAIxC,OAAOuC,MAAM,CAACC,SAAS,KAAKpB,QAAQZ,EAAE,EAAE;QACrE,OAAOf;IACT;IAEA,IAAId,SAASqB,OAAOO,GAAG,GAAG;QACxB,MAAMwC,mBAAmBrE,kBAAkBsB,OAAOO,GAAG,CAACa,OAAO;QAE7D,IAAI2B,oBAAoBA,qBAAqB3B,QAAQZ,EAAE,EAAE;YACvD,OAAOf;QACT;IACF;IAEA,OAAOO,OAAOuC,MAAM;AACtB;AAEA,MAAMS,sBAAsB,OAAO,EACjC9D,WAAW,EACXY,cAAc,EACdC,OAAO,EACP+B,KAAK,EAMN;IACC,MAAMnB,aAAa,MAAMd,cAAc;QACrCX;QACAY;QACAC;IACF;IACA,MAAMgB,QAAQ;WAAIJ,WAAWsC,OAAO;KAAG,CACpClB,GAAG,CAAC,CAAC,CAACrB,SAASH,IAAI;QAClB,MAAM2C,WAAWrE,oBAAoB0B;QACrC,MAAM4C,YAAY1C,kBAAkB;YAClCC;YACAC;QACF;QAEA,OAAOuC,YAAYC,YACf;YACE,GAAGD,QAAQ;YACXC;QACF,IACA1D;IACN,GACCQ,IAAI,CAAC,CAACmD,YAAcA,WAAWD,cAAcrB,SAASsB,UAAUC,UAAU;IAE7E,IAAI,CAACtC,OAAO;QACV,OAAOtB;IACT;IAEA,MAAM6D,iBAAiB,MAAMvD,QAAQE,IAAI,CAAC;QACxCC,YAAYhB,YAAYG,QAAQ;QAChCc,OAAO;QACPC,OAAO;QACPN;IACF;IACA,MAAMT,WAAWiE,eAAenE,IAAI,CACjC8C,MAAM,CAAC,CAAC1B,MAAQ5B,SAAS4B,QAAQ7B,kBAAkB6B,IAAIQ,KAAK,MAAMA,MAAMP,EAAE,EAC1EuB,GAAG,CAAC,CAACxB,MACJY,yBAAyB;YACvBZ;YACAa,SAASrC,kBAAkBwB;YAC3BI;QACF,IAEDsB,MAAM,CAAC,CAACb,UAAuDA,YAAY3B,WAC3EyC,IAAI,CAAC,CAACC,OAAOC;QACZ,IAAID,MAAMoB,KAAK,KAAKnB,OAAOmB,KAAK,EAAE;YAChC,OAAOpB,MAAMoB,KAAK,GAAGnB,OAAOmB,KAAK;QACnC;QAEA,OAAOpB,MAAMb,SAAS,CAACkC,aAAa,CAACpB,OAAOd,SAAS;IACvD;IAEF,OAAO;QACLmC,MAAM;QACNpE;QACA0B;QACAe;IACF;AACF;AAEA,OAAO,MAAM4B,kCAAkC,OAAO,EACpDnE,IAAI,EACJL,aAAayE,iBAAiB,EAC9Bf,gBAAgB,KAAK,EACrBC,gBAAgBxE,2BAA2B,EAC3C,2EAA2E;AAC3E,4EAA4E;AAC5EyB,iBAAiB,IAAI,EACrBN,IAAI,EACJO,OAAO,EACgC;IACvC,MAAM+B,QAAQxC,gCAAgC;QAC5CC;QACAC;IACF;IACA,MAAMN,cAAcD,uBAAuB0E;IAC3C,MAAMvC,UAAU,MAAMS,uBAAuB;QAC3C3C;QACAY;QACAC;QACA+B;IACF;IAEA,IAAIV,SAAS;QACX,MAAM,CAACb,KAAKqD,QAAQ,GAAG,MAAMnC,QAAQC,GAAG,CAAC;YACvCoB,uBAAuB;gBACrB5D;gBACAkC;gBACAwB;gBACAC;gBACA/C;gBACAC;YACF;YACAf,8BAA8B;gBAC5BE,aAAayE;gBACbvC;gBACAwB;gBACAC;gBACA/C;gBACAC;YACF;SACD;QAED,OAAO;YACL,GAAIQ,MAAM;gBAAEA;YAAI,IAAI,CAAC,CAAC;YACtBkD,MAAM;YACNrC;YACAU;YACA8B;QACF;IACF;IAEA,MAAMC,YAAY,MAAMlB,sBAAsB;QAC5CzD;QACA0D;QACAC;QACA/C;QACAC;QACA+B;IACF;IAEA,IAAI+B,WAAW;QACb,MAAMC,kBAAkB,MAAMxB,qBAAqB;YACjDpD;YACAqB,KAAKsD,UAAUtD,GAAG;YAClBT;YACAC;YACAwC,QAAQsB,UAAUtB,MAAM;QAC1B;QAEA,IAAIuB,iBAAiB;YACnB,MAAMF,UAAU,MAAM5E,8BAA8B;gBAClDE,aAAayE;gBACbvC,SAAS0C;gBACTlB;gBACAC;gBACA/C;gBACAC;YACF;YAEA,OAAO;gBACL0D,MAAM;gBACNlD,KAAKsD,UAAUtB,MAAM;gBACrBnB,SAAS0C;gBACThC;gBACA8B;YACF;QACF;IACF;IAEA,MAAMG,aAAa,MAAMf,oBAAoB;QAC3C9D;QACAY;QACAC;QACA+B;IACF;IAEA,OAAOiC,cAAc;AACvB,EAAC"}
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 deriveDocsSetRouteBase,\n isRouteDescendant,\n joinRouteSegments,\n normalizeRoutePath,\n} from '../routing/index.js'\nimport {\n getRelationshipId,\n isRecord,\n isVisibleDocsRecord,\n isVisibleDocsSet,\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 getGroupsById = async ({\n collections,\n overrideAccess,\n payload,\n}: {\n collections: ResolvedCollectionSlugs\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n}): Promise<Map<string, unknown>> => {\n const result = await payload.find({\n collection: collections.docsGroups,\n depth: 0,\n limit: 1000,\n overrideAccess,\n })\n\n return new Map(\n result.docs.flatMap((doc) => {\n if (!isRecord(doc)) {\n return []\n }\n\n const id = getRelationshipId(doc)\n\n return id ? [[id, doc]] : []\n }),\n )\n}\n\nconst getGroupRoutePath = ({\n groupId,\n groupsById,\n seen = new Set<string>(),\n}: {\n groupId?: string\n groupsById: Map<string, unknown>\n seen?: Set<string>\n}): string | undefined => {\n if (!groupId || seen.has(groupId)) {\n return undefined\n }\n\n const group = groupsById.get(groupId)\n\n if (!isRecord(group)) {\n return undefined\n }\n\n const slug = typeof group.slug === 'string' ? group.slug : undefined\n\n if (!slug) {\n return undefined\n }\n\n const parentRoutePath = getGroupRoutePath({\n groupId: getRelationshipId(group.parent),\n groupsById,\n seen: new Set([groupId, ...seen]),\n })\n\n return joinRouteSegments(parentRoutePath, slug)\n}\n\nconst withComputedDocsSetRoute = ({\n doc,\n docsSet,\n groupsById,\n}: {\n doc?: unknown\n docsSet?: ResolvedPayloadMarkdownDocsSet\n groupsById: Map<string, unknown>\n}): ResolvedPayloadMarkdownDocsSet | undefined => {\n if (!docsSet?.slug) {\n return docsSet\n }\n\n const groupId = isRecord(doc) ? getRelationshipId(doc.group) : undefined\n const groupRoutePath = getGroupRoutePath({\n groupId,\n groupsById,\n })\n\n return {\n ...docsSet,\n routeBase: deriveDocsSetRouteBase({\n docsSetSlug: docsSet.slug,\n groupRoutePath,\n }),\n }\n}\n\nconst findDocsSetById = async ({\n id,\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n}: {\n collections: ResolvedCollectionSlugs\n id: string\n includeDrafts: boolean\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const [result, groupsById] = await Promise.all([\n payload.find({\n collection: collections.docsSets,\n depth: 0,\n draft: includeDrafts,\n limit: 1,\n overrideAccess,\n where: {\n id: {\n equals: id,\n },\n },\n }),\n getGroupsById({\n collections,\n overrideAccess,\n payload,\n }),\n ])\n\n const docsSet = withComputedDocsSetRoute({\n doc: result.docs[0],\n docsSet: toResolvedDocsSet(result.docs[0]),\n groupsById,\n })\n\n return docsSet && isVisibleDocsSet({ docsSet, includeDrafts }) ? docsSet : undefined\n}\n\nconst findDocsSetByRouteBase = async ({\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n includeDrafts: boolean\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const [result, groupsById] = await Promise.all([\n payload.find({\n collection: collections.docsSets,\n depth: 0,\n draft: includeDrafts,\n limit: 1000,\n overrideAccess,\n }),\n getGroupsById({\n collections,\n overrideAccess,\n payload,\n }),\n ])\n\n return result.docs\n .map((doc) =>\n withComputedDocsSetRoute({\n doc,\n docsSet: toResolvedDocsSet(doc),\n groupsById,\n }),\n )\n .filter(\n (docsSet): docsSet is ResolvedPayloadMarkdownDocsSet =>\n docsSet !== undefined && isVisibleDocsSet({ docsSet, includeDrafts }),\n )\n .find((docsSet) => docsSet?.routeBase === route)\n}\n\nconst findDocsSetByRoutePrefix = async ({\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n includeDrafts: boolean\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const [result, groupsById] = await Promise.all([\n payload.find({\n collection: collections.docsSets,\n depth: 0,\n draft: includeDrafts,\n limit: 1000,\n overrideAccess,\n }),\n getGroupsById({\n collections,\n overrideAccess,\n payload,\n }),\n ])\n\n return result.docs\n .map((doc) =>\n withComputedDocsSetRoute({\n doc,\n docsSet: toResolvedDocsSet(doc),\n groupsById,\n }),\n )\n .filter((docsSet): docsSet is ResolvedPayloadMarkdownDocsSet => {\n if (!docsSet) {\n return false\n }\n\n if (!isVisibleDocsSet({ docsSet, includeDrafts })) {\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 includeDrafts,\n overrideAccess,\n payload,\n record,\n}: {\n collections: ResolvedCollectionSlugs\n doc: unknown\n includeDrafts: boolean\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n record: ResolvedPayloadMarkdownDocsRecord\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n if (record.docsSetId) {\n return findDocsSetById({\n id: record.docsSetId,\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n })\n }\n\n const relatedDocsSet = getRelatedDocsSet(doc)\n\n if (relatedDocsSet && isVisibleDocsSet({ docsSet: relatedDocsSet, includeDrafts })) {\n return relatedDocsSet\n }\n\n return findDocsSetByRoutePrefix({\n collections,\n includeDrafts,\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 draft: includeDrafts,\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 includeDrafts,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n includeDrafts: boolean\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<ResolvedPayloadMarkdownDocsRoute | undefined> => {\n const groupsById = await getGroupsById({\n collections,\n overrideAccess,\n payload,\n })\n const group = [...groupsById.entries()]\n .map(([groupId, doc]) => {\n const resolved = toResolvedDocsGroup(doc)\n const routePath = getGroupRoutePath({\n groupId,\n groupsById,\n })\n\n return resolved && routePath\n ? {\n ...resolved,\n routePath,\n }\n : undefined\n })\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 draft: includeDrafts,\n limit: 1000,\n overrideAccess,\n })\n const docsSets = docsSetsResult.docs\n .filter((doc) => isRecord(doc) && getRelationshipId(doc.group) === group.id)\n .map((doc) =>\n withComputedDocsSetRoute({\n doc,\n docsSet: toResolvedDocsSet(doc),\n groupsById,\n }),\n )\n .filter((docsSet): docsSet is ResolvedPayloadMarkdownDocsSet => docsSet !== undefined)\n .filter((docsSet) => isVisibleDocsSet({ docsSet, includeDrafts }))\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 includeDrafts,\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 includeDrafts,\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 includeDrafts,\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","deriveDocsSetRouteBase","isRouteDescendant","joinRouteSegments","normalizeRoutePath","getRelationshipId","isRecord","isVisibleDocsRecord","isVisibleDocsSet","toResolvedDocsGroup","toResolvedDocsRecord","toResolvedDocsSet","getPayloadMarkdownDocsSidebar","resolveCollectionSlugs","collections","docs","docsGroups","docsSets","getPayloadMarkdownDocsRoutePath","slug","path","undefined","Array","isArray","length","getGroupsById","overrideAccess","payload","result","find","collection","depth","limit","Map","flatMap","doc","id","getGroupRoutePath","groupId","groupsById","seen","Set","has","group","get","parentRoutePath","parent","withComputedDocsSetRoute","docsSet","groupRoutePath","routeBase","docsSetSlug","findDocsSetById","includeDrafts","Promise","all","draft","where","equals","findDocsSetByRouteBase","route","map","filter","findDocsSetByRoutePrefix","sort","first","second","getRelatedDocsSet","findDocsSetForRecord","record","docsSetId","relatedDocsSet","findDocsRecordByRoute","markdownField","findDocsSetIndexRecord","relatedDocsSetId","findGroupIndexRoute","entries","resolved","routePath","candidate","serveIndex","docsSetsResult","order","localeCompare","type","resolvePayloadMarkdownDocsRoute","collectionOptions","sidebar","docResult","resolvedDocsSet","groupRoute"],"mappings":"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"}
@@ -116,6 +116,7 @@ overrideAccess = true, payload })=>{
116
116
  const result = await payload.find({
117
117
  collection: collections?.docs ?? DEFAULT_DOCS_COLLECTION_SLUG,
118
118
  depth: 0,
119
+ draft: includeDrafts,
119
120
  limit: 1000,
120
121
  overrideAccess,
121
122
  where: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/next/sidebar.ts"],"sourcesContent":["import type {\n PayloadMarkdownDocsCollectionSlugs,\n PayloadMarkdownDocsReadPayload,\n PayloadMarkdownDocsSidebarItem,\n ResolvedPayloadMarkdownDocsRecord,\n ResolvedPayloadMarkdownDocsSet,\n} from './types.js'\n\nimport {\n DEFAULT_DOCS_COLLECTION_SLUG,\n DEFAULT_MARKDOWN_FIELD_NAME,\n} from '../constants.js'\nimport { joinRouteSegments } from '../routing/index.js'\nimport {\n isVisibleDocsRecord,\n toResolvedDocsRecord,\n} from './records.js'\n\nexport type BuildPayloadMarkdownDocsSidebarOptions = {\n docsSet?: ResolvedPayloadMarkdownDocsSet\n includeDrafts?: boolean\n}\n\nexport type GetPayloadMarkdownDocsSidebarOptions = {\n collections?: PayloadMarkdownDocsCollectionSlugs\n docsSet: ResolvedPayloadMarkdownDocsSet\n includeDrafts?: boolean\n markdownField?: string\n overrideAccess?: boolean\n payload: PayloadMarkdownDocsReadPayload\n}\n\nconst titleCaseSegment = (segment: string): string =>\n segment\n .split(/[-_]+/)\n .filter(Boolean)\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join(' ')\n\nconst getSidebarLabel = (record: ResolvedPayloadMarkdownDocsRecord): string =>\n record.overrides?.navTitle ?? record.navTitle ?? record.title ?? record.sourcePath\n\nconst getSourcePathSegments = (sourcePath: string): string[] => {\n const withoutExtension = sourcePath.replace(/\\.md$/i, '')\n const segments = withoutExtension.split('/').filter(Boolean)\n\n if (segments.at(-1) === 'index') {\n return segments.slice(0, -1)\n }\n\n return segments\n}\n\nconst compareSidebarItems = (\n first: PayloadMarkdownDocsSidebarItem,\n second: PayloadMarkdownDocsSidebarItem,\n): number => {\n if (first.order !== second.order) {\n return first.order - second.order\n }\n\n return first.sourcePath.localeCompare(second.sourcePath)\n}\n\nconst sortSidebarTree = (items: PayloadMarkdownDocsSidebarItem[]) => {\n items.sort(compareSidebarItems)\n\n for (const item of items) {\n if (item.children) {\n sortSidebarTree(item.children)\n }\n }\n}\n\nconst getOrCreateFolderNode = ({\n currentItems,\n depth,\n docsSet,\n order,\n segment,\n sourcePath,\n}: {\n currentItems: PayloadMarkdownDocsSidebarItem[]\n depth: number\n docsSet?: ResolvedPayloadMarkdownDocsSet\n order: number\n segment: string\n sourcePath: string\n}): PayloadMarkdownDocsSidebarItem => {\n const existing = currentItems.find((item) => item.sourcePath === sourcePath)\n\n if (existing) {\n existing.order = Math.min(existing.order, order)\n return existing\n }\n\n const node: PayloadMarkdownDocsSidebarItem = {\n children: [],\n depth,\n label: titleCaseSegment(segment),\n order,\n route: docsSet ? joinRouteSegments(docsSet.routeBase, sourcePath) : `/${sourcePath}`,\n sourcePath,\n }\n\n currentItems.push(node)\n\n return node\n}\n\nconst mergeLeafIntoTree = ({\n docsSet,\n record,\n rootItems,\n}: {\n docsSet?: ResolvedPayloadMarkdownDocsSet\n record: ResolvedPayloadMarkdownDocsRecord\n rootItems: PayloadMarkdownDocsSidebarItem[]\n}) => {\n const segments = getSourcePathSegments(record.sourcePath)\n\n if (segments.length === 0) {\n rootItems.push({\n depth: 0,\n label: getSidebarLabel(record),\n order: record.order,\n route: record.route,\n sourcePath: record.sourcePath,\n })\n return\n }\n\n let currentItems = rootItems\n\n for (const [index, segment] of segments.entries()) {\n const sourcePath = segments.slice(0, index + 1).join('/')\n const isLeaf = index === segments.length - 1\n\n if (isLeaf) {\n const existing = currentItems.find((item) => item.sourcePath === sourcePath)\n\n if (existing) {\n existing.label = getSidebarLabel(record)\n existing.order = record.order\n existing.route = record.route\n existing.sourcePath = record.sourcePath\n existing.children ??= []\n return\n }\n\n currentItems.push({\n depth: index,\n label: getSidebarLabel(record),\n order: record.order,\n route: record.route,\n sourcePath: record.sourcePath,\n })\n return\n }\n\n const folder = getOrCreateFolderNode({\n currentItems,\n depth: index,\n docsSet,\n order: record.order,\n segment,\n sourcePath,\n })\n\n folder.children ??= []\n currentItems = folder.children\n }\n}\n\nexport const buildPayloadMarkdownDocsSidebar = (\n records: ResolvedPayloadMarkdownDocsRecord[],\n options: BuildPayloadMarkdownDocsSidebarOptions = {},\n): PayloadMarkdownDocsSidebarItem[] => {\n const sidebar: PayloadMarkdownDocsSidebarItem[] = []\n const visibleRecords = records\n .filter((record) =>\n isVisibleDocsRecord({\n includeDrafts: options.includeDrafts,\n record,\n }),\n )\n .filter((record) => record.overrides?.hideFromNav !== true)\n .sort((first, second) => {\n if (first.order !== second.order) {\n return first.order - second.order\n }\n\n return first.sourcePath.localeCompare(second.sourcePath)\n })\n\n for (const record of visibleRecords) {\n mergeLeafIntoTree({\n docsSet: options.docsSet,\n record,\n rootItems: sidebar,\n })\n }\n\n sortSidebarTree(sidebar)\n\n return sidebar\n}\n\nexport const getPayloadMarkdownDocsSidebar = async ({\n collections,\n docsSet,\n includeDrafts = false,\n markdownField = DEFAULT_MARKDOWN_FIELD_NAME,\n // Sidebar data reads plugin-owned generated docs server-side.\n // Access is overridden here, then nav visibility is enforced explicitly.\n overrideAccess = true,\n payload,\n}: GetPayloadMarkdownDocsSidebarOptions): Promise<PayloadMarkdownDocsSidebarItem[]> => {\n const result = await payload.find({\n collection: collections?.docs ?? DEFAULT_DOCS_COLLECTION_SLUG,\n depth: 0,\n limit: 1000,\n overrideAccess,\n where: {\n docsSet: {\n equals: docsSet.id,\n },\n },\n })\n\n const records = result.docs\n .map((doc) =>\n toResolvedDocsRecord({\n doc,\n markdownField,\n }),\n )\n .filter(\n (record): record is ResolvedPayloadMarkdownDocsRecord => record !== undefined,\n )\n\n return buildPayloadMarkdownDocsSidebar(records, {\n docsSet,\n includeDrafts,\n })\n}\n"],"names":["DEFAULT_DOCS_COLLECTION_SLUG","DEFAULT_MARKDOWN_FIELD_NAME","joinRouteSegments","isVisibleDocsRecord","toResolvedDocsRecord","titleCaseSegment","segment","split","filter","Boolean","map","part","charAt","toUpperCase","slice","join","getSidebarLabel","record","overrides","navTitle","title","sourcePath","getSourcePathSegments","withoutExtension","replace","segments","at","compareSidebarItems","first","second","order","localeCompare","sortSidebarTree","items","sort","item","children","getOrCreateFolderNode","currentItems","depth","docsSet","existing","find","Math","min","node","label","route","routeBase","push","mergeLeafIntoTree","rootItems","length","index","entries","isLeaf","folder","buildPayloadMarkdownDocsSidebar","records","options","sidebar","visibleRecords","includeDrafts","hideFromNav","getPayloadMarkdownDocsSidebar","collections","markdownField","overrideAccess","payload","result","collection","docs","limit","where","equals","id","doc","undefined"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/next/sidebar.ts"],"sourcesContent":["import type {\n PayloadMarkdownDocsCollectionSlugs,\n PayloadMarkdownDocsReadPayload,\n PayloadMarkdownDocsSidebarItem,\n ResolvedPayloadMarkdownDocsRecord,\n ResolvedPayloadMarkdownDocsSet,\n} from './types.js'\n\nimport { DEFAULT_DOCS_COLLECTION_SLUG, DEFAULT_MARKDOWN_FIELD_NAME } from '../constants.js'\nimport { joinRouteSegments } from '../routing/index.js'\nimport { isVisibleDocsRecord, toResolvedDocsRecord } from './records.js'\n\nexport type BuildPayloadMarkdownDocsSidebarOptions = {\n docsSet?: ResolvedPayloadMarkdownDocsSet\n includeDrafts?: boolean\n}\n\nexport type GetPayloadMarkdownDocsSidebarOptions = {\n collections?: PayloadMarkdownDocsCollectionSlugs\n docsSet: ResolvedPayloadMarkdownDocsSet\n includeDrafts?: boolean\n markdownField?: string\n overrideAccess?: boolean\n payload: PayloadMarkdownDocsReadPayload\n}\n\nconst titleCaseSegment = (segment: string): string =>\n segment\n .split(/[-_]+/)\n .filter(Boolean)\n .map((part) => `${part.charAt(0).toUpperCase()}${part.slice(1)}`)\n .join(' ')\n\nconst getSidebarLabel = (record: ResolvedPayloadMarkdownDocsRecord): string =>\n record.overrides?.navTitle ?? record.navTitle ?? record.title ?? record.sourcePath\n\nconst getSourcePathSegments = (sourcePath: string): string[] => {\n const withoutExtension = sourcePath.replace(/\\.md$/i, '')\n const segments = withoutExtension.split('/').filter(Boolean)\n\n if (segments.at(-1) === 'index') {\n return segments.slice(0, -1)\n }\n\n return segments\n}\n\nconst compareSidebarItems = (\n first: PayloadMarkdownDocsSidebarItem,\n second: PayloadMarkdownDocsSidebarItem,\n): number => {\n if (first.order !== second.order) {\n return first.order - second.order\n }\n\n return first.sourcePath.localeCompare(second.sourcePath)\n}\n\nconst sortSidebarTree = (items: PayloadMarkdownDocsSidebarItem[]) => {\n items.sort(compareSidebarItems)\n\n for (const item of items) {\n if (item.children) {\n sortSidebarTree(item.children)\n }\n }\n}\n\nconst getOrCreateFolderNode = ({\n currentItems,\n depth,\n docsSet,\n order,\n segment,\n sourcePath,\n}: {\n currentItems: PayloadMarkdownDocsSidebarItem[]\n depth: number\n docsSet?: ResolvedPayloadMarkdownDocsSet\n order: number\n segment: string\n sourcePath: string\n}): PayloadMarkdownDocsSidebarItem => {\n const existing = currentItems.find((item) => item.sourcePath === sourcePath)\n\n if (existing) {\n existing.order = Math.min(existing.order, order)\n return existing\n }\n\n const node: PayloadMarkdownDocsSidebarItem = {\n children: [],\n depth,\n label: titleCaseSegment(segment),\n order,\n route: docsSet ? joinRouteSegments(docsSet.routeBase, sourcePath) : `/${sourcePath}`,\n sourcePath,\n }\n\n currentItems.push(node)\n\n return node\n}\n\nconst mergeLeafIntoTree = ({\n docsSet,\n record,\n rootItems,\n}: {\n docsSet?: ResolvedPayloadMarkdownDocsSet\n record: ResolvedPayloadMarkdownDocsRecord\n rootItems: PayloadMarkdownDocsSidebarItem[]\n}) => {\n const segments = getSourcePathSegments(record.sourcePath)\n\n if (segments.length === 0) {\n rootItems.push({\n depth: 0,\n label: getSidebarLabel(record),\n order: record.order,\n route: record.route,\n sourcePath: record.sourcePath,\n })\n return\n }\n\n let currentItems = rootItems\n\n for (const [index, segment] of segments.entries()) {\n const sourcePath = segments.slice(0, index + 1).join('/')\n const isLeaf = index === segments.length - 1\n\n if (isLeaf) {\n const existing = currentItems.find((item) => item.sourcePath === sourcePath)\n\n if (existing) {\n existing.label = getSidebarLabel(record)\n existing.order = record.order\n existing.route = record.route\n existing.sourcePath = record.sourcePath\n existing.children ??= []\n return\n }\n\n currentItems.push({\n depth: index,\n label: getSidebarLabel(record),\n order: record.order,\n route: record.route,\n sourcePath: record.sourcePath,\n })\n return\n }\n\n const folder = getOrCreateFolderNode({\n currentItems,\n depth: index,\n docsSet,\n order: record.order,\n segment,\n sourcePath,\n })\n\n folder.children ??= []\n currentItems = folder.children\n }\n}\n\nexport const buildPayloadMarkdownDocsSidebar = (\n records: ResolvedPayloadMarkdownDocsRecord[],\n options: BuildPayloadMarkdownDocsSidebarOptions = {},\n): PayloadMarkdownDocsSidebarItem[] => {\n const sidebar: PayloadMarkdownDocsSidebarItem[] = []\n const visibleRecords = records\n .filter((record) =>\n isVisibleDocsRecord({\n includeDrafts: options.includeDrafts,\n record,\n }),\n )\n .filter((record) => record.overrides?.hideFromNav !== true)\n .sort((first, second) => {\n if (first.order !== second.order) {\n return first.order - second.order\n }\n\n return first.sourcePath.localeCompare(second.sourcePath)\n })\n\n for (const record of visibleRecords) {\n mergeLeafIntoTree({\n docsSet: options.docsSet,\n record,\n rootItems: sidebar,\n })\n }\n\n sortSidebarTree(sidebar)\n\n return sidebar\n}\n\nexport const getPayloadMarkdownDocsSidebar = async ({\n collections,\n docsSet,\n includeDrafts = false,\n markdownField = DEFAULT_MARKDOWN_FIELD_NAME,\n // Sidebar data reads plugin-owned generated docs server-side.\n // Access is overridden here, then nav visibility is enforced explicitly.\n overrideAccess = true,\n payload,\n}: GetPayloadMarkdownDocsSidebarOptions): Promise<PayloadMarkdownDocsSidebarItem[]> => {\n const result = await payload.find({\n collection: collections?.docs ?? DEFAULT_DOCS_COLLECTION_SLUG,\n depth: 0,\n draft: includeDrafts,\n limit: 1000,\n overrideAccess,\n where: {\n docsSet: {\n equals: docsSet.id,\n },\n },\n })\n\n const records = result.docs\n .map((doc) =>\n toResolvedDocsRecord({\n doc,\n markdownField,\n }),\n )\n .filter((record): record is ResolvedPayloadMarkdownDocsRecord => record !== undefined)\n\n return buildPayloadMarkdownDocsSidebar(records, {\n docsSet,\n includeDrafts,\n })\n}\n"],"names":["DEFAULT_DOCS_COLLECTION_SLUG","DEFAULT_MARKDOWN_FIELD_NAME","joinRouteSegments","isVisibleDocsRecord","toResolvedDocsRecord","titleCaseSegment","segment","split","filter","Boolean","map","part","charAt","toUpperCase","slice","join","getSidebarLabel","record","overrides","navTitle","title","sourcePath","getSourcePathSegments","withoutExtension","replace","segments","at","compareSidebarItems","first","second","order","localeCompare","sortSidebarTree","items","sort","item","children","getOrCreateFolderNode","currentItems","depth","docsSet","existing","find","Math","min","node","label","route","routeBase","push","mergeLeafIntoTree","rootItems","length","index","entries","isLeaf","folder","buildPayloadMarkdownDocsSidebar","records","options","sidebar","visibleRecords","includeDrafts","hideFromNav","getPayloadMarkdownDocsSidebar","collections","markdownField","overrideAccess","payload","result","collection","docs","draft","limit","where","equals","id","doc","undefined"],"mappings":"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"}
@@ -2,6 +2,7 @@ import type { DocsAiExportManifest } from '../sync/index.js';
2
2
  export type PayloadMarkdownDocsFindArgs = {
3
3
  collection: string;
4
4
  depth?: number;
5
+ draft?: boolean;
5
6
  limit?: number;
6
7
  overrideAccess?: boolean;
7
8
  sort?: string;
@@ -50,6 +51,7 @@ export type ResolvedPayloadMarkdownDocsSet = {
50
51
  order: number;
51
52
  routeBase: string;
52
53
  slug?: string;
54
+ status?: 'draft' | 'published';
53
55
  title: string;
54
56
  };
55
57
  export type ResolvedPayloadMarkdownDocsGroup = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/next/types.ts"],"sourcesContent":["import type { DocsAiExportManifest } from '../sync/index.js'\n\nexport type PayloadMarkdownDocsFindArgs = {\n collection: string\n depth?: number\n limit?: number\n overrideAccess?: boolean\n sort?: string\n where?: unknown\n}\n\nexport type PayloadMarkdownDocsReadPayload = {\n find: (args: PayloadMarkdownDocsFindArgs) => Promise<{\n docs: unknown[]\n }>\n}\n\nexport type PayloadMarkdownDocsCollectionSlugs = {\n docs?: string\n docsGroups?: string\n docsSets?: string\n}\n\nexport type ResolvePayloadMarkdownDocsRouteOptions = {\n collections?: PayloadMarkdownDocsCollectionSlugs\n includeDrafts?: boolean\n markdownField?: string\n overrideAccess?: boolean\n path?: string\n payload: PayloadMarkdownDocsReadPayload\n slug?: string | string[]\n}\n\nexport type PayloadMarkdownDocsDefaults = {\n sidebarMode?: 'auto' | 'hidden' | 'manual'\n}\n\nexport type PayloadMarkdownDocsOverrides = {\n hideFromNav?: boolean\n navTitle?: string\n}\n\nexport type PayloadMarkdownDocsHeroImage = {\n alt?: string\n height?: number\n id?: string\n relationTo?: string\n url: string\n width?: number\n}\n\nexport type ResolvedPayloadMarkdownDocsSet = {\n aiExport?: DocsAiExportManifest\n defaults?: PayloadMarkdownDocsDefaults\n description?: string\n id: string\n navTitle?: string\n order: number\n routeBase: string\n slug?: string\n title: string\n}\n\nexport type ResolvedPayloadMarkdownDocsGroup = {\n description?: string\n id: string\n navTitle?: string\n order: number\n routePath: string\n serveIndex: boolean\n slug?: string\n title: string\n}\n\nexport type ResolvedPayloadMarkdownDocsRecord = {\n archived: boolean\n content?: string\n depth: number\n description?: string\n docsSetId?: string\n heroImage?: PayloadMarkdownDocsHeroImage\n id: string\n navTitle?: string\n order: number\n overrides?: PayloadMarkdownDocsOverrides\n route: string\n sourceHash?: string\n sourcePath: string\n status?: 'draft' | 'published'\n title: string\n}\n\nexport type PayloadMarkdownDocsSidebarItem = {\n children?: PayloadMarkdownDocsSidebarItem[]\n depth: number\n hidden?: boolean\n label: string\n order: number\n route: string\n sourcePath: string\n}\n\nexport type ResolvedPayloadMarkdownDocsRoute =\n | {\n doc: ResolvedPayloadMarkdownDocsRecord\n docsSet: ResolvedPayloadMarkdownDocsSet\n route: string\n sidebar: PayloadMarkdownDocsSidebarItem[]\n type: 'doc'\n }\n | {\n doc?: ResolvedPayloadMarkdownDocsRecord\n docsSet: ResolvedPayloadMarkdownDocsSet\n route: string\n sidebar: PayloadMarkdownDocsSidebarItem[]\n type: 'docsSetIndex'\n }\n | {\n docsSets: ResolvedPayloadMarkdownDocsSet[]\n group: ResolvedPayloadMarkdownDocsGroup\n route: string\n type: 'docsGroupIndex'\n }\n\nexport type PayloadMarkdownDocsMetadata = {\n description?: string\n title?: string\n}\n"],"names":[],"mappings":"AA4HA,WAGC"}
1
+ {"version":3,"sources":["../../src/next/types.ts"],"sourcesContent":["import type { DocsAiExportManifest } from '../sync/index.js'\n\nexport type PayloadMarkdownDocsFindArgs = {\n collection: string\n depth?: number\n draft?: boolean\n limit?: number\n overrideAccess?: boolean\n sort?: string\n where?: unknown\n}\n\nexport type PayloadMarkdownDocsReadPayload = {\n find: (args: PayloadMarkdownDocsFindArgs) => Promise<{\n docs: unknown[]\n }>\n}\n\nexport type PayloadMarkdownDocsCollectionSlugs = {\n docs?: string\n docsGroups?: string\n docsSets?: string\n}\n\nexport type ResolvePayloadMarkdownDocsRouteOptions = {\n collections?: PayloadMarkdownDocsCollectionSlugs\n includeDrafts?: boolean\n markdownField?: string\n overrideAccess?: boolean\n path?: string\n payload: PayloadMarkdownDocsReadPayload\n slug?: string | string[]\n}\n\nexport type PayloadMarkdownDocsDefaults = {\n sidebarMode?: 'auto' | 'hidden' | 'manual'\n}\n\nexport type PayloadMarkdownDocsOverrides = {\n hideFromNav?: boolean\n navTitle?: string\n}\n\nexport type PayloadMarkdownDocsHeroImage = {\n alt?: string\n height?: number\n id?: string\n relationTo?: string\n url: string\n width?: number\n}\n\nexport type ResolvedPayloadMarkdownDocsSet = {\n aiExport?: DocsAiExportManifest\n defaults?: PayloadMarkdownDocsDefaults\n description?: string\n id: string\n navTitle?: string\n order: number\n routeBase: string\n slug?: string\n status?: 'draft' | 'published'\n title: string\n}\n\nexport type ResolvedPayloadMarkdownDocsGroup = {\n description?: string\n id: string\n navTitle?: string\n order: number\n routePath: string\n serveIndex: boolean\n slug?: string\n title: string\n}\n\nexport type ResolvedPayloadMarkdownDocsRecord = {\n archived: boolean\n content?: string\n depth: number\n description?: string\n docsSetId?: string\n heroImage?: PayloadMarkdownDocsHeroImage\n id: string\n navTitle?: string\n order: number\n overrides?: PayloadMarkdownDocsOverrides\n route: string\n sourceHash?: string\n sourcePath: string\n status?: 'draft' | 'published'\n title: string\n}\n\nexport type PayloadMarkdownDocsSidebarItem = {\n children?: PayloadMarkdownDocsSidebarItem[]\n depth: number\n hidden?: boolean\n label: string\n order: number\n route: string\n sourcePath: string\n}\n\nexport type ResolvedPayloadMarkdownDocsRoute =\n | {\n doc: ResolvedPayloadMarkdownDocsRecord\n docsSet: ResolvedPayloadMarkdownDocsSet\n route: string\n sidebar: PayloadMarkdownDocsSidebarItem[]\n type: 'doc'\n }\n | {\n doc?: ResolvedPayloadMarkdownDocsRecord\n docsSet: ResolvedPayloadMarkdownDocsSet\n route: string\n sidebar: PayloadMarkdownDocsSidebarItem[]\n type: 'docsSetIndex'\n }\n | {\n docsSets: ResolvedPayloadMarkdownDocsSet[]\n group: ResolvedPayloadMarkdownDocsGroup\n route: string\n type: 'docsGroupIndex'\n }\n\nexport type PayloadMarkdownDocsMetadata = {\n description?: string\n title?: string\n}\n"],"names":[],"mappings":"AA8HA,WAGC"}
@@ -1,11 +1,11 @@
1
1
  import type { DocsDeleteBehavior, DocsSyncPlan, ValidatedDocsManifest } from '../sync/index.js';
2
2
  import type { DocsSyncConflict } from './docsConflicts.js';
3
- import type { DocsPublishMode } from './docsData.js';
4
3
  import type { ExistingPayloadDocsRecord } from './existingDocs.js';
5
4
  export type ApplyDocsSyncPayloadOperations = {
6
5
  create: (args: {
7
6
  collection: string;
8
7
  data: Record<string, unknown>;
8
+ draft?: boolean;
9
9
  overrideAccess?: boolean;
10
10
  }) => Promise<Record<string, unknown>>;
11
11
  delete?: (args: {
@@ -16,6 +16,7 @@ export type ApplyDocsSyncPayloadOperations = {
16
16
  update: (args: {
17
17
  collection: string;
18
18
  data: Record<string, unknown>;
19
+ draft?: boolean;
19
20
  id: string;
20
21
  overrideAccess?: boolean;
21
22
  }) => Promise<Record<string, unknown>>;
@@ -38,7 +39,7 @@ export declare const assertApplyDeleteBehaviorSupported: (deleteBehavior: DocsDe
38
39
  allowHardDelete?: boolean;
39
40
  docsEnableDrafts?: boolean;
40
41
  }) => boolean;
41
- export declare const applyDocsSync: ({ collectionSlug, deleteBehavior, docsEnableDrafts, docsSetId, existing, manifest, markdownFieldName, now, payload, plan, publishMode, syncRunId, }: {
42
+ export declare const applyDocsSync: ({ collectionSlug, deleteBehavior, docsEnableDrafts, docsSetId, existing, manifest, markdownFieldName, now, payload, plan, publish, syncRunId, }: {
42
43
  collectionSlug: string;
43
44
  deleteBehavior: DocsDeleteBehavior;
44
45
  docsEnableDrafts: boolean;
@@ -49,6 +50,6 @@ export declare const applyDocsSync: ({ collectionSlug, deleteBehavior, docsEnabl
49
50
  now: Date;
50
51
  payload: ApplyDocsSyncPayloadOperations;
51
52
  plan: DocsSyncPlan;
52
- publishMode: DocsPublishMode;
53
+ publish: boolean;
53
54
  syncRunId?: number | string;
54
55
  }) => Promise<ApplyDocsSyncResult>;
@@ -9,7 +9,10 @@ export const assertApplyDeleteBehaviorSupported = (deleteBehavior, { allowHardDe
9
9
  }
10
10
  return allowHardDelete;
11
11
  };
12
- export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnableDrafts, docsSetId, existing, manifest, markdownFieldName, now, payload, plan, publishMode, syncRunId })=>{
12
+ const getDocsWriteDraftOption = ({ docsEnableDrafts, publish })=>docsEnableDrafts ? {
13
+ draft: !publish
14
+ } : {};
15
+ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnableDrafts, docsSetId, existing, manifest, markdownFieldName, now, payload, plan, publish, syncRunId })=>{
13
16
  const existingBySourcePath = new Map(existing.map((record)=>[
14
17
  record.sourcePath,
15
18
  record
@@ -39,6 +42,10 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
39
42
  reactivate: 0,
40
43
  update: 0
41
44
  };
45
+ const writeDraftOption = getDocsWriteDraftOption({
46
+ docsEnableDrafts,
47
+ publish
48
+ });
42
49
  for (const change of plan.create){
43
50
  if (!change.desired) {
44
51
  continue;
@@ -52,9 +59,10 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
52
59
  manifest,
53
60
  markdownFieldName,
54
61
  now,
55
- publishMode,
62
+ publish,
56
63
  syncRunId
57
64
  }),
65
+ ...writeDraftOption,
58
66
  overrideAccess: true
59
67
  });
60
68
  writes.create += 1;
@@ -71,16 +79,16 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
71
79
  id: current.id,
72
80
  collection: collectionSlug,
73
81
  data: buildDocsData({
74
- current,
75
82
  desired: change.desired,
76
83
  docsEnableDrafts,
77
84
  docsSetId,
78
85
  manifest,
79
86
  markdownFieldName,
80
87
  now,
81
- publishMode,
88
+ publish,
82
89
  syncRunId
83
90
  }),
91
+ ...writeDraftOption,
84
92
  overrideAccess: true
85
93
  });
86
94
  writes.update += 1;
@@ -97,16 +105,16 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
97
105
  id: current.id,
98
106
  collection: collectionSlug,
99
107
  data: buildDocsData({
100
- current,
101
108
  desired: change.desired,
102
109
  docsEnableDrafts,
103
110
  docsSetId,
104
111
  manifest,
105
112
  markdownFieldName,
106
113
  now,
107
- publishMode,
114
+ publish,
108
115
  syncRunId
109
116
  }),
117
+ ...writeDraftOption,
110
118
  overrideAccess: true
111
119
  });
112
120
  writes.reactivate += 1;
@@ -125,6 +133,7 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
125
133
  now,
126
134
  syncRunId
127
135
  }),
136
+ ...writeDraftOption,
128
137
  overrideAccess: true
129
138
  });
130
139
  writes.archive += 1;
@@ -145,6 +154,9 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
145
154
  now,
146
155
  syncRunId
147
156
  }),
157
+ ...docsEnableDrafts ? {
158
+ draft: true
159
+ } : {},
148
160
  overrideAccess: true
149
161
  });
150
162
  writes.draft += 1;