@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.
- package/dist/admin/DocsSetManager.js +7 -40
- package/dist/admin/DocsSetManager.js.map +1 -1
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/format.d.ts +1 -3
- package/dist/cli/format.js +1 -2
- package/dist/cli/format.js.map +1 -1
- package/dist/collections/docs.js +13 -0
- package/dist/collections/docs.js.map +1 -1
- package/dist/collections/docsSets.d.ts +1 -4
- package/dist/collections/docsSets.js +17 -11
- package/dist/collections/docsSets.js.map +1 -1
- package/dist/collections/syncRuns.js +0 -9
- package/dist/collections/syncRuns.js.map +1 -1
- package/dist/endpoints/index.d.ts +0 -2
- package/dist/endpoints/index.js +0 -1
- package/dist/endpoints/index.js.map +1 -1
- package/dist/endpoints/sync.d.ts +0 -2
- package/dist/endpoints/sync.js +8 -15
- package/dist/endpoints/sync.js.map +1 -1
- package/dist/next/links.js +5 -2
- package/dist/next/links.js.map +1 -1
- package/dist/next/markdown.js +18 -6
- package/dist/next/markdown.js.map +1 -1
- package/dist/next/records.d.ts +4 -0
- package/dist/next/records.js +7 -0
- package/dist/next/records.js.map +1 -1
- package/dist/next/route.js +39 -13
- package/dist/next/route.js.map +1 -1
- package/dist/next/sidebar.js +1 -0
- package/dist/next/sidebar.js.map +1 -1
- package/dist/next/types.d.ts +2 -0
- package/dist/next/types.js.map +1 -1
- package/dist/payload/applyDocsSync.d.ts +4 -3
- package/dist/payload/applyDocsSync.js +18 -6
- package/dist/payload/applyDocsSync.js.map +1 -1
- package/dist/payload/docsData.d.ts +2 -5
- package/dist/payload/docsData.js +4 -8
- package/dist/payload/docsData.js.map +1 -1
- package/dist/payload/docsSets.d.ts +6 -2
- package/dist/payload/docsSets.js +5 -2
- package/dist/payload/docsSets.js.map +1 -1
- package/dist/payload/existingDocs.d.ts +5 -2
- package/dist/payload/existingDocs.js +5 -2
- package/dist/payload/existingDocs.js.map +1 -1
- package/dist/payload/index.d.ts +11 -11
- package/dist/payload/index.js.map +1 -1
- package/dist/payload/populatePublishedAt.d.ts +2 -0
- package/dist/payload/populatePublishedAt.js +14 -0
- package/dist/payload/populatePublishedAt.js.map +1 -0
- package/dist/payload/routeCollisions.d.ts +3 -1
- package/dist/payload/routeCollisions.js +2 -1
- package/dist/payload/routeCollisions.js.map +1 -1
- package/dist/payload/syncRuns.d.ts +1 -2
- package/dist/payload/syncRuns.js +1 -2
- package/dist/payload/syncRuns.js.map +1 -1
- package/dist/plugin.js +0 -4
- package/dist/plugin.js.map +1 -1
- package/dist/skills/codex/reference/admin.md +0 -1
- package/dist/sync/plan.d.ts +1 -0
- package/dist/sync/plan.js +4 -2
- package/dist/sync/plan.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/dist/endpoints/publishGeneratedDocs.d.ts +0 -7
- package/dist/endpoints/publishGeneratedDocs.js +0 -77
- package/dist/endpoints/publishGeneratedDocs.js.map +0 -1
- package/dist/payload/publishGeneratedDocs.d.ts +0 -30
- package/dist/payload/publishGeneratedDocs.js +0 -92
- package/dist/payload/publishGeneratedDocs.js.map +0 -1
package/dist/next/records.d.ts
CHANGED
|
@@ -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;
|
package/dist/next/records.js
CHANGED
|
@@ -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;
|
package/dist/next/records.js.map
CHANGED
|
@@ -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":"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"}
|
|
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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"}
|
package/dist/next/route.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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).
|
|
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
|
package/dist/next/route.js.map
CHANGED
|
@@ -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":"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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 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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"}
|
package/dist/next/sidebar.js
CHANGED
package/dist/next/sidebar.js.map
CHANGED
|
@@ -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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"}
|
package/dist/next/types.d.ts
CHANGED
|
@@ -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 = {
|
package/dist/next/types.js.map
CHANGED
|
@@ -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":"
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|