@valkyrianlabs/payload-markdown-docs 0.3.1 → 0.4.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 (98) hide show
  1. package/README.md +76 -176
  2. package/dist/admin/DocsSetManager.js +5 -3
  3. package/dist/admin/DocsSetManager.js.map +1 -1
  4. package/dist/admin/docsSetManagerData.d.ts +6 -5
  5. package/dist/admin/docsSetManagerData.js +60 -33
  6. package/dist/admin/docsSetManagerData.js.map +1 -1
  7. package/dist/admin/docsSetManagerTypes.d.ts +12 -9
  8. package/dist/admin/docsSetManagerTypes.js.map +1 -1
  9. package/dist/cli/commands/manifest.js +1 -2
  10. package/dist/cli/commands/manifest.js.map +1 -1
  11. package/dist/cli/commands/plan.js +1 -2
  12. package/dist/cli/commands/plan.js.map +1 -1
  13. package/dist/cli/commands/push.js +2 -5
  14. package/dist/cli/commands/push.js.map +1 -1
  15. package/dist/cli/commands/validate.js +11 -6
  16. package/dist/cli/commands/validate.js.map +1 -1
  17. package/dist/cli/index.js +5 -14
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/cli/parseArgs.js +0 -3
  20. package/dist/cli/parseArgs.js.map +1 -1
  21. package/dist/cli/types.d.ts +0 -3
  22. package/dist/cli/types.js.map +1 -1
  23. package/dist/collections/docs.js +0 -24
  24. package/dist/collections/docs.js.map +1 -1
  25. package/dist/collections/docsGroups.js +8 -9
  26. package/dist/collections/docsGroups.js.map +1 -1
  27. package/dist/collections/docsKeys.d.ts +5 -0
  28. package/dist/collections/docsKeys.js +44 -0
  29. package/dist/collections/docsKeys.js.map +1 -0
  30. package/dist/collections/docsSets.js +47 -202
  31. package/dist/collections/docsSets.js.map +1 -1
  32. package/dist/collections/docsTrusted.d.ts +5 -0
  33. package/dist/collections/docsTrusted.js +60 -0
  34. package/dist/collections/docsTrusted.js.map +1 -0
  35. package/dist/collections/index.d.ts +4 -0
  36. package/dist/collections/index.js +2 -0
  37. package/dist/collections/index.js.map +1 -1
  38. package/dist/constants.d.ts +3 -1
  39. package/dist/constants.js +3 -1
  40. package/dist/constants.js.map +1 -1
  41. package/dist/endpoints/sync.d.ts +6 -7
  42. package/dist/endpoints/sync.js +57 -124
  43. package/dist/endpoints/sync.js.map +1 -1
  44. package/dist/index.d.ts +2 -2
  45. package/dist/index.js +1 -1
  46. package/dist/index.js.map +1 -1
  47. package/dist/next/PayloadMarkdownDocsPage.js +2 -6
  48. package/dist/next/PayloadMarkdownDocsPage.js.map +1 -1
  49. package/dist/next/index.d.ts +2 -0
  50. package/dist/next/index.js +1 -0
  51. package/dist/next/index.js.map +1 -1
  52. package/dist/next/links.d.ts +11 -0
  53. package/dist/next/links.js +79 -0
  54. package/dist/next/links.js.map +1 -0
  55. package/dist/next/markdown.js +91 -19
  56. package/dist/next/markdown.js.map +1 -1
  57. package/dist/next/metadata.js +6 -6
  58. package/dist/next/metadata.js.map +1 -1
  59. package/dist/next/records.js +13 -23
  60. package/dist/next/records.js.map +1 -1
  61. package/dist/next/route.js +141 -49
  62. package/dist/next/route.js.map +1 -1
  63. package/dist/next/types.d.ts +0 -14
  64. package/dist/next/types.js.map +1 -1
  65. package/dist/payload/docsKeys.d.ts +20 -0
  66. package/dist/payload/docsKeys.js +29 -0
  67. package/dist/payload/docsKeys.js.map +1 -0
  68. package/dist/payload/docsSets.d.ts +32 -6
  69. package/dist/payload/docsSets.js +146 -83
  70. package/dist/payload/docsSets.js.map +1 -1
  71. package/dist/payload/docsTrusted.d.ts +16 -0
  72. package/dist/payload/docsTrusted.js +49 -0
  73. package/dist/payload/docsTrusted.js.map +1 -0
  74. package/dist/payload/index.d.ts +5 -1
  75. package/dist/payload/index.js +3 -1
  76. package/dist/payload/index.js.map +1 -1
  77. package/dist/plugin.js +36 -9
  78. package/dist/plugin.js.map +1 -1
  79. package/dist/security/githubOidc.d.ts +18 -5
  80. package/dist/security/githubOidc.js +44 -16
  81. package/dist/security/githubOidc.js.map +1 -1
  82. package/dist/security/index.d.ts +1 -1
  83. package/dist/security/index.js.map +1 -1
  84. package/dist/skills/codex/SKILL.md +3 -4
  85. package/dist/skills/codex/examples/github-actions.md +0 -2
  86. package/dist/skills/codex/reference/admin.md +0 -6
  87. package/dist/skills/codex/reference/routing.md +2 -1
  88. package/dist/skills/codex/reference/sync.md +7 -5
  89. package/dist/skills/codex/reference/troubleshooting.md +3 -4
  90. package/dist/skills/codex/reference/workflow.md +0 -1
  91. package/dist/sync/manifest.d.ts +1 -3
  92. package/dist/sync/manifest.js +2 -3
  93. package/dist/sync/manifest.js.map +1 -1
  94. package/dist/sync/validate.js +1 -2
  95. package/dist/sync/validate.js.map +1 -1
  96. package/dist/types.d.ts +7 -50
  97. package/dist/types.js.map +1 -1
  98. package/package.json +4 -4
@@ -1,5 +1,5 @@
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
- import { isRouteDescendant, joinRouteSegments, normalizeRoutePath } from '../routing/index.js';
2
+ import { deriveDocsSetRouteBase, isRouteDescendant, joinRouteSegments, normalizeRoutePath } from '../routing/index.js';
3
3
  import { getRelationshipId, isRecord, isVisibleDocsRecord, toResolvedDocsGroup, toResolvedDocsRecord, toResolvedDocsSet } from './records.js';
4
4
  import { getPayloadMarkdownDocsSidebar } from './sidebar.js';
5
5
  const resolveCollectionSlugs = (collections)=>({
@@ -19,42 +19,129 @@ export const getPayloadMarkdownDocsRoutePath = ({ slug, path })=>{
19
19
  }
20
20
  return '/';
21
21
  };
22
- const findDocsSetById = async ({ id, collections, overrideAccess, payload })=>{
22
+ const getGroupsById = async ({ collections, overrideAccess, payload })=>{
23
23
  const result = await payload.find({
24
- collection: collections.docsSets,
24
+ collection: collections.docsGroups,
25
25
  depth: 0,
26
- limit: 1,
27
- overrideAccess,
28
- where: {
29
- id: {
30
- equals: id
31
- }
26
+ limit: 1000,
27
+ overrideAccess
28
+ });
29
+ return new Map(result.docs.flatMap((doc)=>{
30
+ if (!isRecord(doc)) {
31
+ return [];
32
32
  }
33
+ const id = getRelationshipId(doc);
34
+ return id ? [
35
+ [
36
+ id,
37
+ doc
38
+ ]
39
+ ] : [];
40
+ }));
41
+ };
42
+ const getGroupRoutePath = ({ groupId, groupsById, seen = new Set() })=>{
43
+ if (!groupId || seen.has(groupId)) {
44
+ return undefined;
45
+ }
46
+ const group = groupsById.get(groupId);
47
+ if (!isRecord(group)) {
48
+ return undefined;
49
+ }
50
+ const slug = typeof group.slug === 'string' ? group.slug : undefined;
51
+ if (!slug) {
52
+ return undefined;
53
+ }
54
+ const parentRoutePath = getGroupRoutePath({
55
+ groupId: getRelationshipId(group.parent),
56
+ groupsById,
57
+ seen: new Set([
58
+ groupId,
59
+ ...seen
60
+ ])
33
61
  });
34
- return toResolvedDocsSet(result.docs[0]);
62
+ return joinRouteSegments(parentRoutePath, slug);
35
63
  };
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
64
+ const withComputedDocsSetRoute = ({ doc, docsSet, groupsById })=>{
65
+ if (!docsSet?.slug) {
66
+ return docsSet;
67
+ }
68
+ const groupId = isRecord(doc) ? getRelationshipId(doc.group) : undefined;
69
+ const groupRoutePath = getGroupRoutePath({
70
+ groupId,
71
+ groupsById
72
+ });
73
+ return {
74
+ ...docsSet,
75
+ routeBase: deriveDocsSetRouteBase({
76
+ docsSetSlug: docsSet.slug,
77
+ groupRoutePath
78
+ })
79
+ };
80
+ };
81
+ const findDocsSetById = async ({ id, collections, overrideAccess, payload })=>{
82
+ const [result, groupsById] = await Promise.all([
83
+ payload.find({
84
+ collection: collections.docsSets,
85
+ depth: 0,
86
+ limit: 1,
87
+ overrideAccess,
88
+ where: {
89
+ id: {
90
+ equals: id
91
+ }
45
92
  }
46
- }
93
+ }),
94
+ getGroupsById({
95
+ collections,
96
+ overrideAccess,
97
+ payload
98
+ })
99
+ ]);
100
+ return withComputedDocsSetRoute({
101
+ doc: result.docs[0],
102
+ docsSet: toResolvedDocsSet(result.docs[0]),
103
+ groupsById
47
104
  });
48
- return result.docs.map(toResolvedDocsSet).find((docsSet)=>docsSet?.routeBase === route);
105
+ };
106
+ const findDocsSetByRouteBase = async ({ collections, overrideAccess, payload, route })=>{
107
+ const [result, groupsById] = await Promise.all([
108
+ payload.find({
109
+ collection: collections.docsSets,
110
+ depth: 0,
111
+ limit: 1000,
112
+ overrideAccess
113
+ }),
114
+ getGroupsById({
115
+ collections,
116
+ overrideAccess,
117
+ payload
118
+ })
119
+ ]);
120
+ return result.docs.map((doc)=>withComputedDocsSetRoute({
121
+ doc,
122
+ docsSet: toResolvedDocsSet(doc),
123
+ groupsById
124
+ })).find((docsSet)=>docsSet?.routeBase === route);
49
125
  };
50
126
  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)=>{
127
+ const [result, groupsById] = await Promise.all([
128
+ payload.find({
129
+ collection: collections.docsSets,
130
+ depth: 0,
131
+ limit: 1000,
132
+ overrideAccess
133
+ }),
134
+ getGroupsById({
135
+ collections,
136
+ overrideAccess,
137
+ payload
138
+ })
139
+ ]);
140
+ return result.docs.map((doc)=>withComputedDocsSetRoute({
141
+ doc,
142
+ docsSet: toResolvedDocsSet(doc),
143
+ groupsById
144
+ })).filter((docsSet)=>{
58
145
  if (!docsSet) {
59
146
  return false;
60
147
  }
@@ -68,10 +155,6 @@ const getRelatedDocsSet = (doc)=>{
68
155
  return toResolvedDocsSet(doc.docsSet);
69
156
  };
70
157
  const findDocsSetForRecord = async ({ collections, doc, overrideAccess, payload, record })=>{
71
- const relatedDocsSet = getRelatedDocsSet(doc);
72
- if (relatedDocsSet) {
73
- return relatedDocsSet;
74
- }
75
158
  if (record.docsSetId) {
76
159
  const docsSetById = await findDocsSetById({
77
160
  id: record.docsSetId,
@@ -83,6 +166,10 @@ const findDocsSetForRecord = async ({ collections, doc, overrideAccess, payload,
83
166
  return docsSetById;
84
167
  }
85
168
  }
169
+ const relatedDocsSet = getRelatedDocsSet(doc);
170
+ if (relatedDocsSet) {
171
+ return relatedDocsSet;
172
+ }
86
173
  return findDocsSetByRoutePrefix({
87
174
  collections,
88
175
  overrideAccess,
@@ -143,18 +230,24 @@ const findDocsSetIndexRecord = async ({ collections, docsSet, includeDrafts, mar
143
230
  return result.record;
144
231
  };
145
232
  const findGroupIndexRoute = async ({ collections, overrideAccess, payload, route })=>{
146
- const result = await payload.find({
147
- collection: collections.docsGroups,
148
- depth: 0,
149
- limit: 5,
233
+ const groupsById = await getGroupsById({
234
+ collections,
150
235
  overrideAccess,
151
- where: {
152
- routePath: {
153
- equals: route
154
- }
155
- }
236
+ payload
156
237
  });
157
- const group = result.docs.map(toResolvedDocsGroup).find((candidate)=>candidate?.routePath === route && candidate.serveIndex);
238
+ const group = [
239
+ ...groupsById.entries()
240
+ ].map(([groupId, doc])=>{
241
+ const resolved = toResolvedDocsGroup(doc);
242
+ const routePath = getGroupRoutePath({
243
+ groupId,
244
+ groupsById
245
+ });
246
+ return resolved && routePath ? {
247
+ ...resolved,
248
+ routePath
249
+ } : undefined;
250
+ }).find((candidate)=>candidate?.routePath === route && candidate.serveIndex);
158
251
  if (!group) {
159
252
  return undefined;
160
253
  }
@@ -162,14 +255,13 @@ const findGroupIndexRoute = async ({ collections, overrideAccess, payload, route
162
255
  collection: collections.docsSets,
163
256
  depth: 0,
164
257
  limit: 1000,
165
- overrideAccess,
166
- where: {
167
- group: {
168
- equals: group.id
169
- }
170
- }
258
+ overrideAccess
171
259
  });
172
- const docsSets = docsSetsResult.docs.map(toResolvedDocsSet).filter((docsSet)=>docsSet !== undefined).sort((first, second)=>{
260
+ const docsSets = docsSetsResult.docs.filter((doc)=>isRecord(doc) && getRelationshipId(doc.group) === group.id).map((doc)=>withComputedDocsSetRoute({
261
+ doc,
262
+ docsSet: toResolvedDocsSet(doc),
263
+ groupsById
264
+ })).filter((docsSet)=>docsSet !== undefined).sort((first, second)=>{
173
265
  if (first.order !== second.order) {
174
266
  return first.order - second.order;
175
267
  }
@@ -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 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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"}
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":"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"}
@@ -27,23 +27,11 @@ export type ResolvePayloadMarkdownDocsRouteOptions = {
27
27
  slug?: string | string[];
28
28
  };
29
29
  export type PayloadMarkdownDocsDefaults = {
30
- heroDescription?: string;
31
- heroEyebrow?: string;
32
- heroTitle?: string;
33
- seoDescription?: string;
34
- seoTitle?: string;
35
30
  sidebarMode?: 'auto' | 'hidden' | 'manual';
36
- theme?: string;
37
31
  };
38
32
  export type PayloadMarkdownDocsOverrides = {
39
- heroDescription?: string;
40
- heroEyebrow?: string;
41
- heroTitle?: string;
42
33
  hideFromNav?: boolean;
43
34
  navTitle?: string;
44
- seoDescription?: string;
45
- seoTitle?: string;
46
- theme?: string;
47
35
  };
48
36
  export type ResolvedPayloadMarkdownDocsSet = {
49
37
  aiExport?: DocsAiExportManifest;
@@ -54,8 +42,6 @@ export type ResolvedPayloadMarkdownDocsSet = {
54
42
  order: number;
55
43
  routeBase: string;
56
44
  slug?: string;
57
- sourceId?: string;
58
- sourceRoot?: string;
59
45
  title: string;
60
46
  };
61
47
  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 heroDescription?: string\n heroEyebrow?: string\n heroTitle?: string\n seoDescription?: string\n seoTitle?: string\n sidebarMode?: 'auto' | 'hidden' | 'manual'\n theme?: string\n}\n\nexport type PayloadMarkdownDocsOverrides = {\n heroDescription?: string\n heroEyebrow?: string\n heroTitle?: string\n hideFromNav?: boolean\n navTitle?: string\n seoDescription?: string\n seoTitle?: string\n theme?: string\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 sourceId?: string\n sourceRoot?: 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 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":"AAgIA,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 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 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 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":"AAkHA,WAGC"}
@@ -0,0 +1,20 @@
1
+ export type DocsKeyPayloadOperations = {
2
+ find: (args: {
3
+ collection: string;
4
+ depth?: number;
5
+ limit?: number;
6
+ overrideAccess?: boolean;
7
+ where?: unknown;
8
+ }) => Promise<{
9
+ docs: unknown[];
10
+ }>;
11
+ };
12
+ export type ResolvedDocsKey = {
13
+ id: string;
14
+ publicKey: string;
15
+ };
16
+ export declare const findDocsKeyById: ({ collectionSlug, keyId, payload, }: {
17
+ collectionSlug: string;
18
+ keyId: string;
19
+ payload: DocsKeyPayloadOperations;
20
+ }) => Promise<ResolvedDocsKey | undefined>;
@@ -0,0 +1,29 @@
1
+ const isRecord = (value)=>typeof value === 'object' && value !== null && !Array.isArray(value);
2
+ const getString = (value)=>typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
3
+ const toResolvedDocsKey = (doc)=>{
4
+ if (!isRecord(doc)) {
5
+ return undefined;
6
+ }
7
+ const id = getString(doc.keyId);
8
+ const publicKey = getString(doc.publicKey);
9
+ return id && publicKey ? {
10
+ id,
11
+ publicKey
12
+ } : undefined;
13
+ };
14
+ export const findDocsKeyById = async ({ collectionSlug, keyId, payload })=>{
15
+ const result = await payload.find({
16
+ collection: collectionSlug,
17
+ depth: 0,
18
+ limit: 1,
19
+ overrideAccess: true,
20
+ where: {
21
+ keyId: {
22
+ equals: keyId
23
+ }
24
+ }
25
+ });
26
+ return toResolvedDocsKey(result.docs[0]);
27
+ };
28
+
29
+ //# sourceMappingURL=docsKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/payload/docsKeys.ts"],"sourcesContent":["export type DocsKeyPayloadOperations = {\n find: (args: {\n collection: string\n depth?: number\n limit?: number\n overrideAccess?: boolean\n where?: unknown\n }) => Promise<{\n docs: unknown[]\n }>\n}\n\nexport type ResolvedDocsKey = {\n id: string\n publicKey: string\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst getString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined\n\nconst toResolvedDocsKey = (doc: unknown): ResolvedDocsKey | undefined => {\n if (!isRecord(doc)) {\n return undefined\n }\n\n const id = getString(doc.keyId)\n const publicKey = getString(doc.publicKey)\n\n return id && publicKey\n ? {\n id,\n publicKey,\n }\n : undefined\n}\n\nexport const findDocsKeyById = async ({\n collectionSlug,\n keyId,\n payload,\n}: {\n collectionSlug: string\n keyId: string\n payload: DocsKeyPayloadOperations\n}): Promise<ResolvedDocsKey | undefined> => {\n const result = await payload.find({\n collection: collectionSlug,\n depth: 0,\n limit: 1,\n overrideAccess: true,\n where: {\n keyId: {\n equals: keyId,\n },\n },\n })\n\n return toResolvedDocsKey(result.docs[0])\n}\n"],"names":["isRecord","value","Array","isArray","getString","trim","undefined","toResolvedDocsKey","doc","id","keyId","publicKey","findDocsKeyById","collectionSlug","payload","result","find","collection","depth","limit","overrideAccess","where","equals","docs"],"mappings":"AAiBA,MAAMA,WAAW,CAACC,QAChB,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAACC,MAAMC,OAAO,CAACF;AAEhE,MAAMG,YAAY,CAACH,QACjB,OAAOA,UAAU,YAAYA,MAAMI,IAAI,OAAO,KAAKJ,MAAMI,IAAI,KAAKC;AAEpE,MAAMC,oBAAoB,CAACC;IACzB,IAAI,CAACR,SAASQ,MAAM;QAClB,OAAOF;IACT;IAEA,MAAMG,KAAKL,UAAUI,IAAIE,KAAK;IAC9B,MAAMC,YAAYP,UAAUI,IAAIG,SAAS;IAEzC,OAAOF,MAAME,YACT;QACEF;QACAE;IACF,IACAL;AACN;AAEA,OAAO,MAAMM,kBAAkB,OAAO,EACpCC,cAAc,EACdH,KAAK,EACLI,OAAO,EAKR;IACC,MAAMC,SAAS,MAAMD,QAAQE,IAAI,CAAC;QAChCC,YAAYJ;QACZK,OAAO;QACPC,OAAO;QACPC,gBAAgB;QAChBC,OAAO;YACLX,OAAO;gBACLY,QAAQZ;YACV;QACF;IACF;IAEA,OAAOH,kBAAkBQ,OAAOQ,IAAI,CAAC,EAAE;AACzC,EAAC"}
@@ -1,4 +1,4 @@
1
- import type { PayloadMarkdownDocsDocsSetAuthConfig } from '../types.js';
1
+ import type { PayloadMarkdownDocsAuthToggle } from '../types.js';
2
2
  export type DocsSetPayloadOperations = {
3
3
  find: (args: {
4
4
  collection: string;
@@ -17,13 +17,32 @@ export type DocsSetPayloadOperations = {
17
17
  }) => Promise<Record<string, unknown>>;
18
18
  };
19
19
  export type PayloadRecordId = number | string;
20
+ export type ResolvedDocsGroup = {
21
+ id: PayloadRecordId;
22
+ parentId?: string;
23
+ routePath: string;
24
+ slug: string;
25
+ };
20
26
  export type ResolvedDocsSet = {
21
- auth?: PayloadMarkdownDocsDocsSetAuthConfig;
27
+ advancedSecurity?: {
28
+ allowedWorkflowRefs: string[];
29
+ enabled: boolean;
30
+ };
31
+ allowPullRequests: boolean;
32
+ branch: string;
33
+ groupId?: string;
22
34
  id: PayloadRecordId;
23
35
  routeBase: string;
24
- sourceId: string;
25
- sourceRoot?: string;
36
+ slug: string;
26
37
  };
38
+ export declare const isGitHubOidcAuthEnabled: (auth: {
39
+ githubOidc?: boolean | PayloadMarkdownDocsAuthToggle;
40
+ mode?: "disabled";
41
+ } | undefined) => boolean;
42
+ export declare const isEd25519AuthEnabled: (auth: {
43
+ ed25519?: boolean | PayloadMarkdownDocsAuthToggle;
44
+ mode?: "disabled";
45
+ } | undefined) => boolean;
27
46
  export declare const updateDocsSetAfterSync: ({ aiExport, collectionSlug, docsCount, docsSetId, now, payload, syncRunId, }: {
28
47
  aiExport?: unknown;
29
48
  collectionSlug: string;
@@ -33,8 +52,15 @@ export declare const updateDocsSetAfterSync: ({ aiExport, collectionSlug, docsCo
33
52
  payload: DocsSetPayloadOperations;
34
53
  syncRunId?: PayloadRecordId;
35
54
  }) => Promise<void>;
36
- export declare const findDocsSetBySourceId: ({ collectionSlug, payload, sourceId, }: {
55
+ export declare const findDocsSetBySlug: ({ slug, collectionSlug, docsGroupsCollectionSlug, payload, }: {
56
+ collectionSlug: string;
57
+ docsGroupsCollectionSlug: string;
58
+ payload: DocsSetPayloadOperations;
59
+ slug: string;
60
+ }) => Promise<ResolvedDocsSet | undefined>;
61
+ export declare const findDocsSetByRouteBase: ({ collectionSlug, docsGroupsCollectionSlug, payload, routeBase, }: {
37
62
  collectionSlug: string;
63
+ docsGroupsCollectionSlug: string;
38
64
  payload: DocsSetPayloadOperations;
39
- sourceId: string;
65
+ routeBase: string;
40
66
  }) => Promise<ResolvedDocsSet | undefined>;