@valkyrianlabs/payload-markdown-docs 0.5.1 → 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/endpoints/sync.js +4 -0
- 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/route.js +5 -0
- 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 +1 -0
- package/dist/next/types.js.map +1 -1
- package/dist/payload/applyDocsSync.d.ts +2 -0
- package/dist/payload/applyDocsSync.js +14 -0
- package/dist/payload/applyDocsSync.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/routeCollisions.d.ts +3 -1
- package/dist/payload/routeCollisions.js +2 -1
- package/dist/payload/routeCollisions.js.map +1 -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/package.json +1 -1
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 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 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 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 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 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 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","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":"AASA,SACEA,4BAA4B,EAC5BC,mCAAmC,EACnCC,iCAAiC,EACjCC,2BAA2B,QACtB,kBAAiB;AACxB,SACEC,sBAAsB,EACtBC,iBAAiB,EACjBC,iBAAiB,EACjBC,kBAAkB,QACb,sBAAqB;AAC5B,SACEC,iBAAiB,EACjBC,QAAQ,EACRC,mBAAmB,EACnBC,gBAAgB,EAChBC,mBAAmB,EACnBC,oBAAoB,EACpBC,iBAAiB,QACZ,eAAc;AACrB,SAASC,6BAA6B,QAAQ,eAAc;AAQ5D,MAAMC,yBAAyB,CAC7BC,cAC6B,CAAA;QAC7BC,MAAMD,aAAaC,QAAQlB;QAC3BmB,YAAYF,aAAaE,cAAclB;QACvCmB,UAAUH,aAAaG,YAAYlB;IACrC,CAAA;AAEA,OAAO,MAAMmB,kCAAkC,CAAC,EAC9CC,IAAI,EACJC,IAAI,EAIL;IACC,IAAIA,SAASC,WAAW;QACtB,OAAOjB,mBAAmBgB;IAC5B;IAEA,IAAIE,MAAMC,OAAO,CAACJ,OAAO;QACvB,OAAOA,KAAKK,MAAM,KAAK,IAAI,MAAMrB,qBAAqBgB;IACxD;IAEA,IAAI,OAAOA,SAAS,UAAU;QAC5B,OAAOf,mBAAmBe;IAC5B;IAEA,OAAO;AACT,EAAC;AAED,MAAMM,gBAAgB,OAAO,EAC3BX,WAAW,EACXY,cAAc,EACdC,OAAO,EAKR;IACC,MAAMC,SAAS,MAAMD,QAAQE,IAAI,CAAC;QAChCC,YAAYhB,YAAYE,UAAU;QAClCe,OAAO;QACPC,OAAO;QACPN;IACF;IAEA,OAAO,IAAIO,IACTL,OAAOb,IAAI,CAACmB,OAAO,CAAC,CAACC;QACnB,IAAI,CAAC7B,SAAS6B,MAAM;YAClB,OAAO,EAAE;QACX;QAEA,MAAMC,KAAK/B,kBAAkB8B;QAE7B,OAAOC,KAAK;YAAC;gBAACA;gBAAID;aAAI;SAAC,GAAG,EAAE;IAC9B;AAEJ;AAEA,MAAME,oBAAoB,CAAC,EACzBC,OAAO,EACPC,UAAU,EACVC,OAAO,IAAIC,KAAa,EAKzB;IACC,IAAI,CAACH,WAAWE,KAAKE,GAAG,CAACJ,UAAU;QACjC,OAAOjB;IACT;IAEA,MAAMsB,QAAQJ,WAAWK,GAAG,CAACN;IAE7B,IAAI,CAAChC,SAASqC,QAAQ;QACpB,OAAOtB;IACT;IAEA,MAAMF,OAAO,OAAOwB,MAAMxB,IAAI,KAAK,WAAWwB,MAAMxB,IAAI,GAAGE;IAE3D,IAAI,CAACF,MAAM;QACT,OAAOE;IACT;IAEA,MAAMwB,kBAAkBR,kBAAkB;QACxCC,SAASjC,kBAAkBsC,MAAMG,MAAM;QACvCP;QACAC,MAAM,IAAIC,IAAI;YAACH;eAAYE;SAAK;IAClC;IAEA,OAAOrC,kBAAkB0C,iBAAiB1B;AAC5C;AAEA,MAAM4B,2BAA2B,CAAC,EAChCZ,GAAG,EACHa,OAAO,EACPT,UAAU,EAKX;IACC,IAAI,CAACS,SAAS7B,MAAM;QAClB,OAAO6B;IACT;IAEA,MAAMV,UAAUhC,SAAS6B,OAAO9B,kBAAkB8B,IAAIQ,KAAK,IAAItB;IAC/D,MAAM4B,iBAAiBZ,kBAAkB;QACvCC;QACAC;IACF;IAEA,OAAO;QACL,GAAGS,OAAO;QACVE,WAAWjD,uBAAuB;YAChCkD,aAAaH,QAAQ7B,IAAI;YACzB8B;QACF;IACF;AACF;AAEA,MAAMG,kBAAkB,OAAO,EAC7BhB,EAAE,EACFtB,WAAW,EACXuC,aAAa,EACb3B,cAAc,EACdC,OAAO,EAOR;IACC,MAAM,CAACC,QAAQW,WAAW,GAAG,MAAMe,QAAQC,GAAG,CAAC;QAC7C5B,QAAQE,IAAI,CAAC;YACXC,YAAYhB,YAAYG,QAAQ;YAChCc,OAAO;YACPC,OAAO;YACPN;YACA8B,OAAO;gBACLpB,IAAI;oBACFqB,QAAQrB;gBACV;YACF;QACF;QACAX,cAAc;YACZX;YACAY;YACAC;QACF;KACD;IAED,MAAMqB,UAAUD,yBAAyB;QACvCZ,KAAKP,OAAOb,IAAI,CAAC,EAAE;QACnBiC,SAASrC,kBAAkBiB,OAAOb,IAAI,CAAC,EAAE;QACzCwB;IACF;IAEA,OAAOS,WAAWxC,iBAAiB;QAAEwC;QAASK;IAAc,KAAKL,UAAU3B;AAC7E;AAEA,MAAMqC,yBAAyB,OAAO,EACpC5C,WAAW,EACXuC,aAAa,EACb3B,cAAc,EACdC,OAAO,EACPgC,KAAK,EAON;IACC,MAAM,CAAC/B,QAAQW,WAAW,GAAG,MAAMe,QAAQC,GAAG,CAAC;QAC7C5B,QAAQE,IAAI,CAAC;YACXC,YAAYhB,YAAYG,QAAQ;YAChCc,OAAO;YACPC,OAAO;YACPN;QACF;QACAD,cAAc;YACZX;YACAY;YACAC;QACF;KACD;IAED,OAAOC,OAAOb,IAAI,CACf6C,GAAG,CAAC,CAACzB,MACJY,yBAAyB;YACvBZ;YACAa,SAASrC,kBAAkBwB;YAC3BI;QACF,IAEDsB,MAAM,CACL,CAACb,UACCA,YAAY3B,aAAab,iBAAiB;YAAEwC;YAASK;QAAc,IAEtExB,IAAI,CAAC,CAACmB,UAAYA,SAASE,cAAcS;AAC9C;AAEA,MAAMG,2BAA2B,OAAO,EACtChD,WAAW,EACXuC,aAAa,EACb3B,cAAc,EACdC,OAAO,EACPgC,KAAK,EAON;IACC,MAAM,CAAC/B,QAAQW,WAAW,GAAG,MAAMe,QAAQC,GAAG,CAAC;QAC7C5B,QAAQE,IAAI,CAAC;YACXC,YAAYhB,YAAYG,QAAQ;YAChCc,OAAO;YACPC,OAAO;YACPN;QACF;QACAD,cAAc;YACZX;YACAY;YACAC;QACF;KACD;IAED,OAAOC,OAAOb,IAAI,CACf6C,GAAG,CAAC,CAACzB,MACJY,yBAAyB;YACvBZ;YACAa,SAASrC,kBAAkBwB;YAC3BI;QACF,IAEDsB,MAAM,CAAC,CAACb;QACP,IAAI,CAACA,SAAS;YACZ,OAAO;QACT;QAEA,IAAI,CAACxC,iBAAiB;YAAEwC;YAASK;QAAc,IAAI;YACjD,OAAO;QACT;QAEA,OAAOL,QAAQE,SAAS,KAAKS,SAASzD,kBAAkB8C,QAAQE,SAAS,EAAES;IAC7E,GACCI,IAAI,CAAC,CAACC,OAAOC,SAAWA,OAAOf,SAAS,CAAC1B,MAAM,GAAGwC,MAAMd,SAAS,CAAC1B,MAAM,CAAC,CAAC,EAAE;AACjF;AAEA,MAAM0C,oBAAoB,CAAC/B;IACzB,IAAI,CAAC7B,SAAS6B,QAAQ,CAAC7B,SAAS6B,IAAIa,OAAO,GAAG;QAC5C,OAAO3B;IACT;IAEA,OAAOV,kBAAkBwB,IAAIa,OAAO;AACtC;AAEA,MAAMmB,uBAAuB,OAAO,EAClCrD,WAAW,EACXqB,GAAG,EACHkB,aAAa,EACb3B,cAAc,EACdC,OAAO,EACPyC,MAAM,EAQP;IACC,IAAIA,OAAOC,SAAS,EAAE;QACpB,OAAOjB,gBAAgB;YACrBhB,IAAIgC,OAAOC,SAAS;YACpBvD;YACAuC;YACA3B;YACAC;QACF;IACF;IAEA,MAAM2C,iBAAiBJ,kBAAkB/B;IAEzC,IAAImC,kBAAkB9D,iBAAiB;QAAEwC,SAASsB;QAAgBjB;IAAc,IAAI;QAClF,OAAOiB;IACT;IAEA,OAAOR,yBAAyB;QAC9BhD;QACAuC;QACA3B;QACAC;QACAgC,OAAOS,OAAOT,KAAK;IACrB;AACF;AAEA,MAAMY,wBAAwB,OAAO,EACnCzD,WAAW,EACXuC,aAAa,EACbmB,aAAa,EACb9C,cAAc,EACdC,OAAO,EACPgC,KAAK,EAQN;IAOC,MAAM/B,SAAS,MAAMD,QAAQE,IAAI,CAAC;QAChCC,YAAYhB,YAAYC,IAAI;QAC5BgB,OAAO;QACPC,OAAO;QACPN;QACA8B,OAAO;YACLG,OAAO;gBACLF,QAAQE;YACV;QACF;IACF;IAEA,KAAK,MAAMxB,OAAOP,OAAOb,IAAI,CAAE;QAC7B,MAAMqD,SAAS1D,qBAAqB;YAClCyB;YACAqC;QACF;QAEA,IACEJ,UACAA,OAAOT,KAAK,KAAKA,SACjBpD,oBAAoB;YAClB8C;YACAe;QACF,IACA;YACA,OAAO;gBACLjC;gBACAiC;YACF;QACF;IACF;IAEA,OAAO/C;AACT;AAEA,MAAMoD,yBAAyB,OAAO,EACpC3D,WAAW,EACXkC,OAAO,EACPK,aAAa,EACbmB,aAAa,EACb9C,cAAc,EACdC,OAAO,EAQR;IACC,MAAMC,SAAS,MAAM2C,sBAAsB;QACzCzD;QACAuC;QACAmB;QACA9C;QACAC;QACAgC,OAAOX,QAAQE,SAAS;IAC1B;IAEA,IAAI,CAACtB,QAAQ;QACX,OAAOP;IACT;IAEA,IAAIO,OAAOwC,MAAM,CAACC,SAAS,IAAIzC,OAAOwC,MAAM,CAACC,SAAS,KAAKrB,QAAQZ,EAAE,EAAE;QACrE,OAAOf;IACT;IAEA,IAAIf,SAASsB,OAAOO,GAAG,GAAG;QACxB,MAAMuC,mBAAmBrE,kBAAkBuB,OAAOO,GAAG,CAACa,OAAO;QAE7D,IAAI0B,oBAAoBA,qBAAqB1B,QAAQZ,EAAE,EAAE;YACvD,OAAOf;QACT;IACF;IAEA,OAAOO,OAAOwC,MAAM;AACtB;AAEA,MAAMO,sBAAsB,OAAO,EACjC7D,WAAW,EACXuC,aAAa,EACb3B,cAAc,EACdC,OAAO,EACPgC,KAAK,EAON;IACC,MAAMpB,aAAa,MAAMd,cAAc;QACrCX;QACAY;QACAC;IACF;IACA,MAAMgB,QAAQ;WAAIJ,WAAWqC,OAAO;KAAG,CACpChB,GAAG,CAAC,CAAC,CAACtB,SAASH,IAAI;QAClB,MAAM0C,WAAWpE,oBAAoB0B;QACrC,MAAM2C,YAAYzC,kBAAkB;YAClCC;YACAC;QACF;QAEA,OAAOsC,YAAYC,YACf;YACE,GAAGD,QAAQ;YACXC;QACF,IACAzD;IACN,GACCQ,IAAI,CAAC,CAACkD,YAAcA,WAAWD,cAAcnB,SAASoB,UAAUC,UAAU;IAE7E,IAAI,CAACrC,OAAO;QACV,OAAOtB;IACT;IAEA,MAAM4D,iBAAiB,MAAMtD,QAAQE,IAAI,CAAC;QACxCC,YAAYhB,YAAYG,QAAQ;QAChCc,OAAO;QACPC,OAAO;QACPN;IACF;IACA,MAAMT,WAAWgE,eAAelE,IAAI,CACjC8C,MAAM,CAAC,CAAC1B,MAAQ7B,SAAS6B,QAAQ9B,kBAAkB8B,IAAIQ,KAAK,MAAMA,MAAMP,EAAE,EAC1EwB,GAAG,CAAC,CAACzB,MACJY,yBAAyB;YACvBZ;YACAa,SAASrC,kBAAkBwB;YAC3BI;QACF,IAEDsB,MAAM,CAAC,CAACb,UAAuDA,YAAY3B,WAC3EwC,MAAM,CAAC,CAACb,UAAYxC,iBAAiB;YAAEwC;YAASK;QAAc,IAC9DU,IAAI,CAAC,CAACC,OAAOC;QACZ,IAAID,MAAMkB,KAAK,KAAKjB,OAAOiB,KAAK,EAAE;YAChC,OAAOlB,MAAMkB,KAAK,GAAGjB,OAAOiB,KAAK;QACnC;QAEA,OAAOlB,MAAMd,SAAS,CAACiC,aAAa,CAAClB,OAAOf,SAAS;IACvD;IAEF,OAAO;QACLkC,MAAM;QACNnE;QACA0B;QACAgB;IACF;AACF;AAEA,OAAO,MAAM0B,kCAAkC,OAAO,EACpDlE,IAAI,EACJL,aAAawE,iBAAiB,EAC9BjC,gBAAgB,KAAK,EACrBmB,gBAAgBxE,2BAA2B,EAC3C,2EAA2E;AAC3E,4EAA4E;AAC5E0B,iBAAiB,IAAI,EACrBN,IAAI,EACJO,OAAO,EACgC;IACvC,MAAMgC,QAAQzC,gCAAgC;QAC5CC;QACAC;IACF;IACA,MAAMN,cAAcD,uBAAuByE;IAC3C,MAAMtC,UAAU,MAAMU,uBAAuB;QAC3C5C;QACAuC;QACA3B;QACAC;QACAgC;IACF;IAEA,IAAIX,SAAS;QACX,MAAM,CAACb,KAAKoD,QAAQ,GAAG,MAAMjC,QAAQC,GAAG,CAAC;YACvCkB,uBAAuB;gBACrB3D;gBACAkC;gBACAK;gBACAmB;gBACA9C;gBACAC;YACF;YACAf,8BAA8B;gBAC5BE,aAAawE;gBACbtC;gBACAK;gBACAmB;gBACA9C;gBACAC;YACF;SACD;QAED,OAAO;YACL,GAAIQ,MAAM;gBAAEA;YAAI,IAAI,CAAC,CAAC;YACtBiD,MAAM;YACNpC;YACAW;YACA4B;QACF;IACF;IAEA,MAAMC,YAAY,MAAMjB,sBAAsB;QAC5CzD;QACAuC;QACAmB;QACA9C;QACAC;QACAgC;IACF;IAEA,IAAI6B,WAAW;QACb,MAAMC,kBAAkB,MAAMtB,qBAAqB;YACjDrD;YACAqB,KAAKqD,UAAUrD,GAAG;YAClBkB;YACA3B;YACAC;YACAyC,QAAQoB,UAAUpB,MAAM;QAC1B;QAEA,IAAIqB,iBAAiB;YACnB,MAAMF,UAAU,MAAM3E,8BAA8B;gBAClDE,aAAawE;gBACbtC,SAASyC;gBACTpC;gBACAmB;gBACA9C;gBACAC;YACF;YAEA,OAAO;gBACLyD,MAAM;gBACNjD,KAAKqD,UAAUpB,MAAM;gBACrBpB,SAASyC;gBACT9B;gBACA4B;YACF;QACF;IACF;IAEA,MAAMG,aAAa,MAAMf,oBAAoB;QAC3C7D;QACAuC;QACA3B;QACAC;QACAgC;IACF;IAEA,OAAO+B,cAAc;AACvB,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../src/next/route.ts"],"sourcesContent":["import type {\n PayloadMarkdownDocsCollectionSlugs,\n PayloadMarkdownDocsReadPayload,\n ResolvedPayloadMarkdownDocsRecord,\n ResolvedPayloadMarkdownDocsRoute,\n ResolvedPayloadMarkdownDocsSet,\n ResolvePayloadMarkdownDocsRouteOptions,\n} from './types.js'\n\nimport {\n DEFAULT_DOCS_COLLECTION_SLUG,\n DEFAULT_DOCS_GROUPS_COLLECTION_SLUG,\n DEFAULT_DOCS_SETS_COLLECTION_SLUG,\n DEFAULT_MARKDOWN_FIELD_NAME,\n} from '../constants.js'\nimport {\n deriveDocsSetRouteBase,\n isRouteDescendant,\n joinRouteSegments,\n normalizeRoutePath,\n} from '../routing/index.js'\nimport {\n getRelationshipId,\n isRecord,\n isVisibleDocsRecord,\n isVisibleDocsSet,\n toResolvedDocsGroup,\n toResolvedDocsRecord,\n toResolvedDocsSet,\n} from './records.js'\nimport { getPayloadMarkdownDocsSidebar } from './sidebar.js'\n\ntype ResolvedCollectionSlugs = {\n docs: string\n docsGroups: string\n docsSets: string\n}\n\nconst resolveCollectionSlugs = (\n collections?: PayloadMarkdownDocsCollectionSlugs,\n): ResolvedCollectionSlugs => ({\n docs: collections?.docs ?? DEFAULT_DOCS_COLLECTION_SLUG,\n docsGroups: collections?.docsGroups ?? DEFAULT_DOCS_GROUPS_COLLECTION_SLUG,\n docsSets: collections?.docsSets ?? DEFAULT_DOCS_SETS_COLLECTION_SLUG,\n})\n\nexport const getPayloadMarkdownDocsRoutePath = ({\n slug,\n path,\n}: {\n path?: string\n slug?: string | string[]\n}): string => {\n if (path !== undefined) {\n return normalizeRoutePath(path)\n }\n\n if (Array.isArray(slug)) {\n return slug.length === 0 ? '/' : joinRouteSegments(...slug)\n }\n\n if (typeof slug === 'string') {\n return normalizeRoutePath(slug)\n }\n\n return '/'\n}\n\nconst getGroupsById = async ({\n collections,\n overrideAccess,\n payload,\n}: {\n collections: ResolvedCollectionSlugs\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n}): Promise<Map<string, unknown>> => {\n const result = await payload.find({\n collection: collections.docsGroups,\n depth: 0,\n limit: 1000,\n overrideAccess,\n })\n\n return new Map(\n result.docs.flatMap((doc) => {\n if (!isRecord(doc)) {\n return []\n }\n\n const id = getRelationshipId(doc)\n\n return id ? [[id, doc]] : []\n }),\n )\n}\n\nconst getGroupRoutePath = ({\n groupId,\n groupsById,\n seen = new Set<string>(),\n}: {\n groupId?: string\n groupsById: Map<string, unknown>\n seen?: Set<string>\n}): string | undefined => {\n if (!groupId || seen.has(groupId)) {\n return undefined\n }\n\n const group = groupsById.get(groupId)\n\n if (!isRecord(group)) {\n return undefined\n }\n\n const slug = typeof group.slug === 'string' ? group.slug : undefined\n\n if (!slug) {\n return undefined\n }\n\n const parentRoutePath = getGroupRoutePath({\n groupId: getRelationshipId(group.parent),\n groupsById,\n seen: new Set([groupId, ...seen]),\n })\n\n return joinRouteSegments(parentRoutePath, slug)\n}\n\nconst withComputedDocsSetRoute = ({\n doc,\n docsSet,\n groupsById,\n}: {\n doc?: unknown\n docsSet?: ResolvedPayloadMarkdownDocsSet\n groupsById: Map<string, unknown>\n}): ResolvedPayloadMarkdownDocsSet | undefined => {\n if (!docsSet?.slug) {\n return docsSet\n }\n\n const groupId = isRecord(doc) ? getRelationshipId(doc.group) : undefined\n const groupRoutePath = getGroupRoutePath({\n groupId,\n groupsById,\n })\n\n return {\n ...docsSet,\n routeBase: deriveDocsSetRouteBase({\n docsSetSlug: docsSet.slug,\n groupRoutePath,\n }),\n }\n}\n\nconst findDocsSetById = async ({\n id,\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n}: {\n collections: ResolvedCollectionSlugs\n id: string\n includeDrafts: boolean\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const [result, groupsById] = await Promise.all([\n payload.find({\n collection: collections.docsSets,\n depth: 0,\n draft: includeDrafts,\n limit: 1,\n overrideAccess,\n where: {\n id: {\n equals: id,\n },\n },\n }),\n getGroupsById({\n collections,\n overrideAccess,\n payload,\n }),\n ])\n\n const docsSet = withComputedDocsSetRoute({\n doc: result.docs[0],\n docsSet: toResolvedDocsSet(result.docs[0]),\n groupsById,\n })\n\n return docsSet && isVisibleDocsSet({ docsSet, includeDrafts }) ? docsSet : undefined\n}\n\nconst findDocsSetByRouteBase = async ({\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n includeDrafts: boolean\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const [result, groupsById] = await Promise.all([\n payload.find({\n collection: collections.docsSets,\n depth: 0,\n draft: includeDrafts,\n limit: 1000,\n overrideAccess,\n }),\n getGroupsById({\n collections,\n overrideAccess,\n payload,\n }),\n ])\n\n return result.docs\n .map((doc) =>\n withComputedDocsSetRoute({\n doc,\n docsSet: toResolvedDocsSet(doc),\n groupsById,\n }),\n )\n .filter(\n (docsSet): docsSet is ResolvedPayloadMarkdownDocsSet =>\n docsSet !== undefined && isVisibleDocsSet({ docsSet, includeDrafts }),\n )\n .find((docsSet) => docsSet?.routeBase === route)\n}\n\nconst findDocsSetByRoutePrefix = async ({\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n includeDrafts: boolean\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n const [result, groupsById] = await Promise.all([\n payload.find({\n collection: collections.docsSets,\n depth: 0,\n draft: includeDrafts,\n limit: 1000,\n overrideAccess,\n }),\n getGroupsById({\n collections,\n overrideAccess,\n payload,\n }),\n ])\n\n return result.docs\n .map((doc) =>\n withComputedDocsSetRoute({\n doc,\n docsSet: toResolvedDocsSet(doc),\n groupsById,\n }),\n )\n .filter((docsSet): docsSet is ResolvedPayloadMarkdownDocsSet => {\n if (!docsSet) {\n return false\n }\n\n if (!isVisibleDocsSet({ docsSet, includeDrafts })) {\n return false\n }\n\n return docsSet.routeBase === route || isRouteDescendant(docsSet.routeBase, route)\n })\n .sort((first, second) => second.routeBase.length - first.routeBase.length)[0]\n}\n\nconst getRelatedDocsSet = (doc: unknown): ResolvedPayloadMarkdownDocsSet | undefined => {\n if (!isRecord(doc) || !isRecord(doc.docsSet)) {\n return undefined\n }\n\n return toResolvedDocsSet(doc.docsSet)\n}\n\nconst findDocsSetForRecord = async ({\n collections,\n doc,\n includeDrafts,\n overrideAccess,\n payload,\n record,\n}: {\n collections: ResolvedCollectionSlugs\n doc: unknown\n includeDrafts: boolean\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n record: ResolvedPayloadMarkdownDocsRecord\n}): Promise<ResolvedPayloadMarkdownDocsSet | undefined> => {\n if (record.docsSetId) {\n return findDocsSetById({\n id: record.docsSetId,\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n })\n }\n\n const relatedDocsSet = getRelatedDocsSet(doc)\n\n if (relatedDocsSet && isVisibleDocsSet({ docsSet: relatedDocsSet, includeDrafts })) {\n return relatedDocsSet\n }\n\n return findDocsSetByRoutePrefix({\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n route: record.route,\n })\n}\n\nconst findDocsRecordByRoute = async ({\n collections,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n includeDrafts: boolean\n markdownField: string\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<\n | {\n doc: unknown\n record: ResolvedPayloadMarkdownDocsRecord\n }\n | undefined\n> => {\n const result = await payload.find({\n collection: collections.docs,\n depth: 1,\n draft: includeDrafts,\n limit: 5,\n overrideAccess,\n where: {\n route: {\n equals: route,\n },\n },\n })\n\n for (const doc of result.docs) {\n const record = toResolvedDocsRecord({\n doc,\n markdownField,\n })\n\n if (\n record &&\n record.route === route &&\n isVisibleDocsRecord({\n includeDrafts,\n record,\n })\n ) {\n return {\n doc,\n record,\n }\n }\n }\n\n return undefined\n}\n\nconst findDocsSetIndexRecord = async ({\n collections,\n docsSet,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n}: {\n collections: ResolvedCollectionSlugs\n docsSet: ResolvedPayloadMarkdownDocsSet\n includeDrafts: boolean\n markdownField: string\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n}): Promise<ResolvedPayloadMarkdownDocsRecord | undefined> => {\n const result = await findDocsRecordByRoute({\n collections,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n route: docsSet.routeBase,\n })\n\n if (!result) {\n return undefined\n }\n\n if (result.record.docsSetId && result.record.docsSetId !== docsSet.id) {\n return undefined\n }\n\n if (isRecord(result.doc)) {\n const relatedDocsSetId = getRelationshipId(result.doc.docsSet)\n\n if (relatedDocsSetId && relatedDocsSetId !== docsSet.id) {\n return undefined\n }\n }\n\n return result.record\n}\n\nconst findGroupIndexRoute = async ({\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n route,\n}: {\n collections: ResolvedCollectionSlugs\n includeDrafts: boolean\n overrideAccess: boolean\n payload: PayloadMarkdownDocsReadPayload\n route: string\n}): Promise<ResolvedPayloadMarkdownDocsRoute | undefined> => {\n const groupsById = await getGroupsById({\n collections,\n overrideAccess,\n payload,\n })\n const group = [...groupsById.entries()]\n .map(([groupId, doc]) => {\n const resolved = toResolvedDocsGroup(doc)\n const routePath = getGroupRoutePath({\n groupId,\n groupsById,\n })\n\n return resolved && routePath\n ? {\n ...resolved,\n routePath,\n }\n : undefined\n })\n .find((candidate) => candidate?.routePath === route && candidate.serveIndex)\n\n if (!group) {\n return undefined\n }\n\n const docsSetsResult = await payload.find({\n collection: collections.docsSets,\n depth: 0,\n draft: includeDrafts,\n limit: 1000,\n overrideAccess,\n })\n const docsSets = docsSetsResult.docs\n .filter((doc) => isRecord(doc) && getRelationshipId(doc.group) === group.id)\n .map((doc) =>\n withComputedDocsSetRoute({\n doc,\n docsSet: toResolvedDocsSet(doc),\n groupsById,\n }),\n )\n .filter((docsSet): docsSet is ResolvedPayloadMarkdownDocsSet => docsSet !== undefined)\n .filter((docsSet) => isVisibleDocsSet({ docsSet, includeDrafts }))\n .sort((first, second) => {\n if (first.order !== second.order) {\n return first.order - second.order\n }\n\n return first.routeBase.localeCompare(second.routeBase)\n })\n\n return {\n type: 'docsGroupIndex',\n docsSets,\n group,\n route,\n }\n}\n\nexport const resolvePayloadMarkdownDocsRoute = async ({\n slug,\n collections: collectionOptions,\n includeDrafts = false,\n markdownField = DEFAULT_MARKDOWN_FIELD_NAME,\n // Route adapter reads plugin-owned generated docs collections server-side.\n // Access is overridden here, then public visibility is enforced explicitly.\n overrideAccess = true,\n path,\n payload,\n}: ResolvePayloadMarkdownDocsRouteOptions): Promise<null | ResolvedPayloadMarkdownDocsRoute> => {\n const route = getPayloadMarkdownDocsRoutePath({\n slug,\n path,\n })\n const collections = resolveCollectionSlugs(collectionOptions)\n const docsSet = await findDocsSetByRouteBase({\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n route,\n })\n\n if (docsSet) {\n const [doc, sidebar] = await Promise.all([\n findDocsSetIndexRecord({\n collections,\n docsSet,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n }),\n getPayloadMarkdownDocsSidebar({\n collections: collectionOptions,\n docsSet,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n }),\n ])\n\n return {\n ...(doc ? { doc } : {}),\n type: 'docsSetIndex',\n docsSet,\n route,\n sidebar,\n }\n }\n\n const docResult = await findDocsRecordByRoute({\n collections,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n route,\n })\n\n if (docResult) {\n const resolvedDocsSet = await findDocsSetForRecord({\n collections,\n doc: docResult.doc,\n includeDrafts,\n overrideAccess,\n payload,\n record: docResult.record,\n })\n\n if (resolvedDocsSet) {\n const sidebar = await getPayloadMarkdownDocsSidebar({\n collections: collectionOptions,\n docsSet: resolvedDocsSet,\n includeDrafts,\n markdownField,\n overrideAccess,\n payload,\n })\n\n return {\n type: 'doc',\n doc: docResult.record,\n docsSet: resolvedDocsSet,\n route,\n sidebar,\n }\n }\n }\n\n const groupRoute = await findGroupIndexRoute({\n collections,\n includeDrafts,\n overrideAccess,\n payload,\n route,\n })\n\n return groupRoute ?? null\n}\n"],"names":["DEFAULT_DOCS_COLLECTION_SLUG","DEFAULT_DOCS_GROUPS_COLLECTION_SLUG","DEFAULT_DOCS_SETS_COLLECTION_SLUG","DEFAULT_MARKDOWN_FIELD_NAME","deriveDocsSetRouteBase","isRouteDescendant","joinRouteSegments","normalizeRoutePath","getRelationshipId","isRecord","isVisibleDocsRecord","isVisibleDocsSet","toResolvedDocsGroup","toResolvedDocsRecord","toResolvedDocsSet","getPayloadMarkdownDocsSidebar","resolveCollectionSlugs","collections","docs","docsGroups","docsSets","getPayloadMarkdownDocsRoutePath","slug","path","undefined","Array","isArray","length","getGroupsById","overrideAccess","payload","result","find","collection","depth","limit","Map","flatMap","doc","id","getGroupRoutePath","groupId","groupsById","seen","Set","has","group","get","parentRoutePath","parent","withComputedDocsSetRoute","docsSet","groupRoutePath","routeBase","docsSetSlug","findDocsSetById","includeDrafts","Promise","all","draft","where","equals","findDocsSetByRouteBase","route","map","filter","findDocsSetByRoutePrefix","sort","first","second","getRelatedDocsSet","findDocsSetForRecord","record","docsSetId","relatedDocsSet","findDocsRecordByRoute","markdownField","findDocsSetIndexRecord","relatedDocsSetId","findGroupIndexRoute","entries","resolved","routePath","candidate","serveIndex","docsSetsResult","order","localeCompare","type","resolvePayloadMarkdownDocsRoute","collectionOptions","sidebar","docResult","resolvedDocsSet","groupRoute"],"mappings":"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"}
|
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
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 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":"
|
|
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"}
|
|
@@ -5,6 +5,7 @@ export type ApplyDocsSyncPayloadOperations = {
|
|
|
5
5
|
create: (args: {
|
|
6
6
|
collection: string;
|
|
7
7
|
data: Record<string, unknown>;
|
|
8
|
+
draft?: boolean;
|
|
8
9
|
overrideAccess?: boolean;
|
|
9
10
|
}) => Promise<Record<string, unknown>>;
|
|
10
11
|
delete?: (args: {
|
|
@@ -15,6 +16,7 @@ export type ApplyDocsSyncPayloadOperations = {
|
|
|
15
16
|
update: (args: {
|
|
16
17
|
collection: string;
|
|
17
18
|
data: Record<string, unknown>;
|
|
19
|
+
draft?: boolean;
|
|
18
20
|
id: string;
|
|
19
21
|
overrideAccess?: boolean;
|
|
20
22
|
}) => Promise<Record<string, unknown>>;
|
|
@@ -9,6 +9,9 @@ export const assertApplyDeleteBehaviorSupported = (deleteBehavior, { allowHardDe
|
|
|
9
9
|
}
|
|
10
10
|
return allowHardDelete;
|
|
11
11
|
};
|
|
12
|
+
const getDocsWriteDraftOption = ({ docsEnableDrafts, publish })=>docsEnableDrafts ? {
|
|
13
|
+
draft: !publish
|
|
14
|
+
} : {};
|
|
12
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,
|
|
@@ -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;
|
|
@@ -55,6 +62,7 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
|
|
|
55
62
|
publish,
|
|
56
63
|
syncRunId
|
|
57
64
|
}),
|
|
65
|
+
...writeDraftOption,
|
|
58
66
|
overrideAccess: true
|
|
59
67
|
});
|
|
60
68
|
writes.create += 1;
|
|
@@ -80,6 +88,7 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
|
|
|
80
88
|
publish,
|
|
81
89
|
syncRunId
|
|
82
90
|
}),
|
|
91
|
+
...writeDraftOption,
|
|
83
92
|
overrideAccess: true
|
|
84
93
|
});
|
|
85
94
|
writes.update += 1;
|
|
@@ -105,6 +114,7 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
|
|
|
105
114
|
publish,
|
|
106
115
|
syncRunId
|
|
107
116
|
}),
|
|
117
|
+
...writeDraftOption,
|
|
108
118
|
overrideAccess: true
|
|
109
119
|
});
|
|
110
120
|
writes.reactivate += 1;
|
|
@@ -123,6 +133,7 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
|
|
|
123
133
|
now,
|
|
124
134
|
syncRunId
|
|
125
135
|
}),
|
|
136
|
+
...writeDraftOption,
|
|
126
137
|
overrideAccess: true
|
|
127
138
|
});
|
|
128
139
|
writes.archive += 1;
|
|
@@ -143,6 +154,9 @@ export const applyDocsSync = async ({ collectionSlug, deleteBehavior, docsEnable
|
|
|
143
154
|
now,
|
|
144
155
|
syncRunId
|
|
145
156
|
}),
|
|
157
|
+
...docsEnableDrafts ? {
|
|
158
|
+
draft: true
|
|
159
|
+
} : {},
|
|
146
160
|
overrideAccess: true
|
|
147
161
|
});
|
|
148
162
|
writes.draft += 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/payload/applyDocsSync.ts"],"sourcesContent":["import type { DocsDeleteBehavior, DocsSyncPlan, ValidatedDocsManifest } from '../sync/index.js'\nimport type { DocsSyncConflict } from './docsConflicts.js'\nimport type { ExistingPayloadDocsRecord } from './existingDocs.js'\n\nimport { findDocsSyncConflicts } from './docsConflicts.js'\nimport { buildArchiveData, buildDocsData } from './docsData.js'\n\nexport type ApplyDocsSyncPayloadOperations = {\n create: (args: {\n collection: string\n data: Record<string, unknown>\n overrideAccess?: boolean\n }) => Promise<Record<string, unknown>>\n delete?: (args: {\n collection: string\n id: string\n overrideAccess?: boolean\n }) => Promise<Record<string, unknown>>\n update: (args: {\n collection: string\n data: Record<string, unknown>\n id: string\n overrideAccess?: boolean\n }) => Promise<Record<string, unknown>>\n}\n\nexport type ApplyDocsSyncResult =\n | {\n conflicts: DocsSyncConflict[]\n ok: false\n }\n | {\n ok: true\n writes: {\n archive: number\n create: number\n delete: number\n draft: number\n reactivate: number\n update: number\n }\n }\n\nexport const assertApplyDeleteBehaviorSupported = (\n deleteBehavior: DocsDeleteBehavior,\n {\n allowHardDelete = false,\n docsEnableDrafts = false,\n }: {\n allowHardDelete?: boolean\n docsEnableDrafts?: boolean\n } = {},\n): boolean => {\n if (deleteBehavior === 'archive' || deleteBehavior === 'ignore') {\n return true\n }\n\n if (deleteBehavior === 'draft') {\n return docsEnableDrafts\n }\n\n return allowHardDelete\n}\n\nexport const applyDocsSync = async ({\n collectionSlug,\n deleteBehavior,\n docsEnableDrafts,\n docsSetId,\n existing,\n manifest,\n markdownFieldName,\n now,\n payload,\n plan,\n publish,\n syncRunId,\n}: {\n collectionSlug: string\n deleteBehavior: DocsDeleteBehavior\n docsEnableDrafts: boolean\n docsSetId?: number | string\n existing: ExistingPayloadDocsRecord[]\n manifest: ValidatedDocsManifest\n markdownFieldName: string\n now: Date\n payload: ApplyDocsSyncPayloadOperations\n plan: DocsSyncPlan\n publish: boolean\n syncRunId?: number | string\n}): Promise<ApplyDocsSyncResult> => {\n const existingBySourcePath = new Map(existing.map((record) => [record.sourcePath, record]))\n const reactivations = plan.unchanged.filter((change) => change.current?.archived)\n const conflicts = findDocsSyncConflicts({\n existingBySourcePath,\n plannedChanges: [\n ...plan.update,\n ...plan.archive,\n ...plan.draft,\n ...plan.delete,\n ...reactivations,\n ],\n })\n\n if (conflicts.length > 0) {\n return {\n conflicts,\n ok: false,\n }\n }\n\n const writes = {\n archive: 0,\n create: 0,\n delete: 0,\n draft: 0,\n reactivate: 0,\n update: 0,\n }\n\n for (const change of plan.create) {\n if (!change.desired) {\n continue\n }\n\n await payload.create({\n collection: collectionSlug,\n data: buildDocsData({\n desired: change.desired,\n docsEnableDrafts,\n docsSetId,\n manifest,\n markdownFieldName,\n now,\n publish,\n syncRunId,\n }),\n overrideAccess: true,\n })\n writes.create += 1\n }\n\n for (const change of plan.update) {\n if (!change.desired) {\n continue\n }\n\n const current = existingBySourcePath.get(change.sourcePath)\n\n if (!current) {\n continue\n }\n\n await payload.update({\n id: current.id,\n collection: collectionSlug,\n data: buildDocsData({\n desired: change.desired,\n docsEnableDrafts,\n docsSetId,\n manifest,\n markdownFieldName,\n now,\n publish,\n syncRunId,\n }),\n overrideAccess: true,\n })\n writes.update += 1\n }\n\n for (const change of reactivations) {\n if (!change.desired) {\n continue\n }\n\n const current = existingBySourcePath.get(change.sourcePath)\n\n if (!current) {\n continue\n }\n\n await payload.update({\n id: current.id,\n collection: collectionSlug,\n data: buildDocsData({\n desired: change.desired,\n docsEnableDrafts,\n docsSetId,\n manifest,\n markdownFieldName,\n now,\n publish,\n syncRunId,\n }),\n overrideAccess: true,\n })\n writes.reactivate += 1\n }\n\n if (deleteBehavior === 'archive') {\n for (const change of plan.archive) {\n const current = existingBySourcePath.get(change.sourcePath)\n\n if (!current) {\n continue\n }\n\n await payload.update({\n id: current.id,\n collection: collectionSlug,\n data: buildArchiveData({\n docsEnableDrafts,\n now,\n syncRunId,\n }),\n overrideAccess: true,\n })\n writes.archive += 1\n }\n }\n\n if (deleteBehavior === 'draft') {\n for (const change of plan.draft) {\n const current = existingBySourcePath.get(change.sourcePath)\n\n if (!current) {\n continue\n }\n\n await payload.update({\n id: current.id,\n collection: collectionSlug,\n data: buildArchiveData({\n docsEnableDrafts,\n draftMissing: true,\n now,\n syncRunId,\n }),\n overrideAccess: true,\n })\n writes.draft += 1\n }\n }\n\n if (deleteBehavior === 'delete') {\n if (!payload.delete) {\n throw new Error('Payload delete operation is required for hard delete.')\n }\n\n for (const change of plan.delete) {\n const current = existingBySourcePath.get(change.sourcePath)\n\n if (!current) {\n continue\n }\n\n await payload.delete({\n id: current.id,\n collection: collectionSlug,\n overrideAccess: true,\n })\n writes.delete += 1\n }\n }\n\n return {\n ok: true,\n writes,\n }\n}\n"],"names":["findDocsSyncConflicts","buildArchiveData","buildDocsData","assertApplyDeleteBehaviorSupported","deleteBehavior","allowHardDelete","docsEnableDrafts","applyDocsSync","collectionSlug","docsSetId","existing","manifest","markdownFieldName","now","payload","plan","publish","syncRunId","existingBySourcePath","Map","map","record","sourcePath","reactivations","unchanged","filter","change","current","archived","conflicts","plannedChanges","update","archive","draft","delete","length","ok","writes","create","reactivate","desired","collection","data","overrideAccess","get","id","draftMissing","Error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/payload/applyDocsSync.ts"],"sourcesContent":["import type { DocsDeleteBehavior, DocsSyncPlan, ValidatedDocsManifest } from '../sync/index.js'\nimport type { DocsSyncConflict } from './docsConflicts.js'\nimport type { ExistingPayloadDocsRecord } from './existingDocs.js'\n\nimport { findDocsSyncConflicts } from './docsConflicts.js'\nimport { buildArchiveData, buildDocsData } from './docsData.js'\n\nexport type ApplyDocsSyncPayloadOperations = {\n create: (args: {\n collection: string\n data: Record<string, unknown>\n draft?: boolean\n overrideAccess?: boolean\n }) => Promise<Record<string, unknown>>\n delete?: (args: {\n collection: string\n id: string\n overrideAccess?: boolean\n }) => Promise<Record<string, unknown>>\n update: (args: {\n collection: string\n data: Record<string, unknown>\n draft?: boolean\n id: string\n overrideAccess?: boolean\n }) => Promise<Record<string, unknown>>\n}\n\nexport type ApplyDocsSyncResult =\n | {\n conflicts: DocsSyncConflict[]\n ok: false\n }\n | {\n ok: true\n writes: {\n archive: number\n create: number\n delete: number\n draft: number\n reactivate: number\n update: number\n }\n }\n\nexport const assertApplyDeleteBehaviorSupported = (\n deleteBehavior: DocsDeleteBehavior,\n {\n allowHardDelete = false,\n docsEnableDrafts = false,\n }: {\n allowHardDelete?: boolean\n docsEnableDrafts?: boolean\n } = {},\n): boolean => {\n if (deleteBehavior === 'archive' || deleteBehavior === 'ignore') {\n return true\n }\n\n if (deleteBehavior === 'draft') {\n return docsEnableDrafts\n }\n\n return allowHardDelete\n}\n\nconst getDocsWriteDraftOption = ({\n docsEnableDrafts,\n publish,\n}: {\n docsEnableDrafts: boolean\n publish: boolean\n}): { draft?: boolean } => (docsEnableDrafts ? { draft: !publish } : {})\n\nexport const applyDocsSync = async ({\n collectionSlug,\n deleteBehavior,\n docsEnableDrafts,\n docsSetId,\n existing,\n manifest,\n markdownFieldName,\n now,\n payload,\n plan,\n publish,\n syncRunId,\n}: {\n collectionSlug: string\n deleteBehavior: DocsDeleteBehavior\n docsEnableDrafts: boolean\n docsSetId?: number | string\n existing: ExistingPayloadDocsRecord[]\n manifest: ValidatedDocsManifest\n markdownFieldName: string\n now: Date\n payload: ApplyDocsSyncPayloadOperations\n plan: DocsSyncPlan\n publish: boolean\n syncRunId?: number | string\n}): Promise<ApplyDocsSyncResult> => {\n const existingBySourcePath = new Map(existing.map((record) => [record.sourcePath, record]))\n const reactivations = plan.unchanged.filter((change) => change.current?.archived)\n const conflicts = findDocsSyncConflicts({\n existingBySourcePath,\n plannedChanges: [\n ...plan.update,\n ...plan.archive,\n ...plan.draft,\n ...plan.delete,\n ...reactivations,\n ],\n })\n\n if (conflicts.length > 0) {\n return {\n conflicts,\n ok: false,\n }\n }\n\n const writes = {\n archive: 0,\n create: 0,\n delete: 0,\n draft: 0,\n reactivate: 0,\n update: 0,\n }\n const writeDraftOption = getDocsWriteDraftOption({\n docsEnableDrafts,\n publish,\n })\n\n for (const change of plan.create) {\n if (!change.desired) {\n continue\n }\n\n await payload.create({\n collection: collectionSlug,\n data: buildDocsData({\n desired: change.desired,\n docsEnableDrafts,\n docsSetId,\n manifest,\n markdownFieldName,\n now,\n publish,\n syncRunId,\n }),\n ...writeDraftOption,\n overrideAccess: true,\n })\n writes.create += 1\n }\n\n for (const change of plan.update) {\n if (!change.desired) {\n continue\n }\n\n const current = existingBySourcePath.get(change.sourcePath)\n\n if (!current) {\n continue\n }\n\n await payload.update({\n id: current.id,\n collection: collectionSlug,\n data: buildDocsData({\n desired: change.desired,\n docsEnableDrafts,\n docsSetId,\n manifest,\n markdownFieldName,\n now,\n publish,\n syncRunId,\n }),\n ...writeDraftOption,\n overrideAccess: true,\n })\n writes.update += 1\n }\n\n for (const change of reactivations) {\n if (!change.desired) {\n continue\n }\n\n const current = existingBySourcePath.get(change.sourcePath)\n\n if (!current) {\n continue\n }\n\n await payload.update({\n id: current.id,\n collection: collectionSlug,\n data: buildDocsData({\n desired: change.desired,\n docsEnableDrafts,\n docsSetId,\n manifest,\n markdownFieldName,\n now,\n publish,\n syncRunId,\n }),\n ...writeDraftOption,\n overrideAccess: true,\n })\n writes.reactivate += 1\n }\n\n if (deleteBehavior === 'archive') {\n for (const change of plan.archive) {\n const current = existingBySourcePath.get(change.sourcePath)\n\n if (!current) {\n continue\n }\n\n await payload.update({\n id: current.id,\n collection: collectionSlug,\n data: buildArchiveData({\n docsEnableDrafts,\n now,\n syncRunId,\n }),\n ...writeDraftOption,\n overrideAccess: true,\n })\n writes.archive += 1\n }\n }\n\n if (deleteBehavior === 'draft') {\n for (const change of plan.draft) {\n const current = existingBySourcePath.get(change.sourcePath)\n\n if (!current) {\n continue\n }\n\n await payload.update({\n id: current.id,\n collection: collectionSlug,\n data: buildArchiveData({\n docsEnableDrafts,\n draftMissing: true,\n now,\n syncRunId,\n }),\n ...(docsEnableDrafts ? { draft: true } : {}),\n overrideAccess: true,\n })\n writes.draft += 1\n }\n }\n\n if (deleteBehavior === 'delete') {\n if (!payload.delete) {\n throw new Error('Payload delete operation is required for hard delete.')\n }\n\n for (const change of plan.delete) {\n const current = existingBySourcePath.get(change.sourcePath)\n\n if (!current) {\n continue\n }\n\n await payload.delete({\n id: current.id,\n collection: collectionSlug,\n overrideAccess: true,\n })\n writes.delete += 1\n }\n }\n\n return {\n ok: true,\n writes,\n }\n}\n"],"names":["findDocsSyncConflicts","buildArchiveData","buildDocsData","assertApplyDeleteBehaviorSupported","deleteBehavior","allowHardDelete","docsEnableDrafts","getDocsWriteDraftOption","publish","draft","applyDocsSync","collectionSlug","docsSetId","existing","manifest","markdownFieldName","now","payload","plan","syncRunId","existingBySourcePath","Map","map","record","sourcePath","reactivations","unchanged","filter","change","current","archived","conflicts","plannedChanges","update","archive","delete","length","ok","writes","create","reactivate","writeDraftOption","desired","collection","data","overrideAccess","get","id","draftMissing","Error"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ export type DocsSetPayloadOperations = {
|
|
|
3
3
|
find: (args: {
|
|
4
4
|
collection: string;
|
|
5
5
|
depth?: number;
|
|
6
|
+
draft?: boolean;
|
|
6
7
|
limit?: number;
|
|
7
8
|
overrideAccess?: boolean;
|
|
8
9
|
where?: unknown;
|
|
@@ -12,6 +13,7 @@ export type DocsSetPayloadOperations = {
|
|
|
12
13
|
update?: (args: {
|
|
13
14
|
collection: string;
|
|
14
15
|
data: Record<string, unknown>;
|
|
16
|
+
draft?: boolean;
|
|
15
17
|
id: string;
|
|
16
18
|
overrideAccess?: boolean;
|
|
17
19
|
}) => Promise<Record<string, unknown>>;
|
|
@@ -43,18 +45,20 @@ export declare const isEd25519AuthEnabled: (auth: {
|
|
|
43
45
|
ed25519?: boolean | PayloadMarkdownDocsAuthToggle;
|
|
44
46
|
mode?: "disabled";
|
|
45
47
|
} | undefined) => boolean;
|
|
46
|
-
export declare const updateDocsSetAfterSync: ({ aiExport, collectionSlug, docsCount, docsSetId, now, payload, syncRunId, }: {
|
|
48
|
+
export declare const updateDocsSetAfterSync: ({ aiExport, collectionSlug, docsCount, docsSetId, now, payload, publish, syncRunId, }: {
|
|
47
49
|
aiExport?: unknown;
|
|
48
50
|
collectionSlug: string;
|
|
49
51
|
docsCount: number;
|
|
50
52
|
docsSetId: PayloadRecordId;
|
|
51
53
|
now: Date;
|
|
52
54
|
payload: DocsSetPayloadOperations;
|
|
55
|
+
publish: boolean;
|
|
53
56
|
syncRunId?: PayloadRecordId;
|
|
54
57
|
}) => Promise<void>;
|
|
55
|
-
export declare const findDocsSetBySlug: ({ slug, collectionSlug, docsGroupsCollectionSlug, payload, }: {
|
|
58
|
+
export declare const findDocsSetBySlug: ({ slug, collectionSlug, docsGroupsCollectionSlug, includeDrafts, payload, }: {
|
|
56
59
|
collectionSlug: string;
|
|
57
60
|
docsGroupsCollectionSlug: string;
|
|
61
|
+
includeDrafts?: boolean;
|
|
58
62
|
payload: DocsSetPayloadOperations;
|
|
59
63
|
slug: string;
|
|
60
64
|
}) => Promise<ResolvedDocsSet | undefined>;
|
package/dist/payload/docsSets.js
CHANGED
|
@@ -47,7 +47,7 @@ const authToggleEnabled = (toggle, defaultValue)=>{
|
|
|
47
47
|
};
|
|
48
48
|
export const isGitHubOidcAuthEnabled = (auth)=>auth?.mode !== 'disabled' && authToggleEnabled(auth?.githubOidc, false);
|
|
49
49
|
export const isEd25519AuthEnabled = (auth)=>auth?.mode !== 'disabled' && authToggleEnabled(auth?.ed25519, false);
|
|
50
|
-
export const updateDocsSetAfterSync = async ({ aiExport, collectionSlug, docsCount, docsSetId, now, payload, syncRunId })=>{
|
|
50
|
+
export const updateDocsSetAfterSync = async ({ aiExport, collectionSlug, docsCount, docsSetId, now, payload, publish, syncRunId })=>{
|
|
51
51
|
if (!payload.update) {
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
@@ -55,6 +55,7 @@ export const updateDocsSetAfterSync = async ({ aiExport, collectionSlug, docsCou
|
|
|
55
55
|
id: String(docsSetId),
|
|
56
56
|
collection: collectionSlug,
|
|
57
57
|
data: {
|
|
58
|
+
_status: publish ? 'published' : 'draft',
|
|
58
59
|
aiExport: aiExport ?? null,
|
|
59
60
|
sync: {
|
|
60
61
|
docsCount,
|
|
@@ -63,6 +64,7 @@ export const updateDocsSetAfterSync = async ({ aiExport, collectionSlug, docsCou
|
|
|
63
64
|
lastSyncRunId: syncRunId
|
|
64
65
|
}
|
|
65
66
|
},
|
|
67
|
+
draft: !publish,
|
|
66
68
|
overrideAccess: true
|
|
67
69
|
});
|
|
68
70
|
};
|
|
@@ -147,11 +149,12 @@ const getGroupsById = async ({ collectionSlug, payload })=>{
|
|
|
147
149
|
];
|
|
148
150
|
}));
|
|
149
151
|
};
|
|
150
|
-
export const findDocsSetBySlug = async ({ slug, collectionSlug, docsGroupsCollectionSlug, payload })=>{
|
|
152
|
+
export const findDocsSetBySlug = async ({ slug, collectionSlug, docsGroupsCollectionSlug, includeDrafts = false, payload })=>{
|
|
151
153
|
const [result, groupsById] = await Promise.all([
|
|
152
154
|
payload.find({
|
|
153
155
|
collection: collectionSlug,
|
|
154
156
|
depth: 0,
|
|
157
|
+
draft: includeDrafts,
|
|
155
158
|
limit: 1,
|
|
156
159
|
overrideAccess: true,
|
|
157
160
|
where: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/payload/docsSets.ts"],"sourcesContent":["import type { PayloadMarkdownDocsAuthToggle } from '../types.js'\n\nimport {\n deriveDocsSetRouteBase,\n joinRouteSegments,\n normalizeRoutePath,\n} from '../routing/index.js'\n\nexport type DocsSetPayloadOperations = {\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 update?: (args: {\n collection: string\n data: Record<string, unknown>\n id: string\n overrideAccess?: boolean\n }) => Promise<Record<string, unknown>>\n}\n\nexport type PayloadRecordId = number | string\n\nexport type ResolvedDocsGroup = {\n id: PayloadRecordId\n parentId?: string\n routePath: string\n slug: string\n}\n\nexport type ResolvedDocsSet = {\n advancedSecurity?: {\n allowedWorkflowRefs: string[]\n enabled: boolean\n }\n allowPullRequests: boolean\n branch: string\n groupId?: string\n id: PayloadRecordId\n routeBase: string\n slug: string\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst getRecordId = (doc: Record<string, unknown>): PayloadRecordId | undefined => {\n if (typeof doc.id === 'string' || typeof doc.id === 'number') {\n return doc.id\n }\n\n return undefined\n}\n\nconst getRelationshipId = (value: unknown): string | undefined => {\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value)\n }\n\n if (isRecord(value)) {\n const id = getRecordId(value)\n\n return id === undefined ? undefined : String(id)\n }\n\n return undefined\n}\n\nconst getString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined\n\nconst getStringArray = (value: unknown): string[] => {\n if (!Array.isArray(value)) {\n return []\n }\n\n return value.flatMap((item) => {\n if (typeof item === 'string' && item.trim() !== '') {\n return [item.trim()]\n }\n\n if (isRecord(item)) {\n const nestedValue = getString(item.value)\n\n return nestedValue ? [nestedValue] : []\n }\n\n return []\n })\n}\n\nconst authToggleEnabled = (\n toggle: boolean | PayloadMarkdownDocsAuthToggle | undefined,\n defaultValue: boolean,\n): boolean => {\n if (toggle === undefined) {\n return defaultValue\n }\n\n if (typeof toggle === 'boolean') {\n return toggle\n }\n\n return toggle.enabled !== false\n}\n\nexport const isGitHubOidcAuthEnabled = (\n auth: { githubOidc?: boolean | PayloadMarkdownDocsAuthToggle; mode?: 'disabled' } | undefined,\n): boolean => auth?.mode !== 'disabled' && authToggleEnabled(auth?.githubOidc, false)\n\nexport const isEd25519AuthEnabled = (\n auth: { ed25519?: boolean | PayloadMarkdownDocsAuthToggle; mode?: 'disabled' } | undefined,\n): boolean => auth?.mode !== 'disabled' && authToggleEnabled(auth?.ed25519, false)\n\nexport const updateDocsSetAfterSync = async ({\n aiExport,\n collectionSlug,\n docsCount,\n docsSetId,\n now,\n payload,\n syncRunId,\n}: {\n aiExport?: unknown\n collectionSlug: string\n docsCount: number\n docsSetId: PayloadRecordId\n now: Date\n payload: DocsSetPayloadOperations\n syncRunId?: PayloadRecordId\n}): Promise<void> => {\n if (!payload.update) {\n return\n }\n\n await payload.update({\n id: String(docsSetId),\n collection: collectionSlug,\n data: {\n aiExport: aiExport ?? null,\n sync: {\n docsCount,\n lastStatus: 'success',\n lastSyncedAt: now.toISOString(),\n lastSyncRunId: syncRunId,\n },\n },\n overrideAccess: true,\n })\n}\n\nconst toResolvedGroup = (\n doc: unknown,\n groupsById: Map<string, unknown>,\n seen = new Set<string>(),\n): ResolvedDocsGroup | undefined => {\n if (!isRecord(doc)) {\n return undefined\n }\n\n const id = getRecordId(doc)\n const slug = getString(doc.slug)\n\n if (!id || !slug) {\n return undefined\n }\n\n const stringId = String(id)\n\n if (seen.has(stringId)) {\n return {\n id,\n slug,\n routePath: joinRouteSegments(slug),\n }\n }\n\n const parentId = getRelationshipId(doc.parent)\n const parentDoc = parentId ? groupsById.get(parentId) : undefined\n const parentGroup = parentDoc\n ? toResolvedGroup(parentDoc, groupsById, new Set([stringId, ...seen]))\n : undefined\n\n return {\n id,\n slug,\n parentId,\n routePath: joinRouteSegments(parentGroup?.routePath, slug),\n }\n}\n\nconst toResolvedDocsSet = ({\n doc,\n groupsById,\n}: {\n doc: unknown\n groupsById: Map<string, unknown>\n}): ResolvedDocsSet | undefined => {\n if (!isRecord(doc)) {\n return undefined\n }\n\n const id = getRecordId(doc)\n const slug = getString(doc.slug)\n\n if (!id || !slug) {\n return undefined\n }\n\n const groupId = getRelationshipId(doc.group)\n const group = groupId ? toResolvedGroup(groupsById.get(groupId), groupsById) : undefined\n const advancedSecurity = isRecord(doc.advancedSecurity)\n ? doc.advancedSecurity\n : undefined\n const advancedSecurityEnabled = advancedSecurity?.enabled === true\n\n return {\n id,\n ...(advancedSecurityEnabled\n ? {\n advancedSecurity: {\n allowedWorkflowRefs: getStringArray(advancedSecurity.allowedWorkflowRefs),\n enabled: true,\n },\n }\n : {}),\n slug,\n allowPullRequests: doc.allowPullRequests === true,\n branch: getString(doc.branch) ?? 'main',\n groupId,\n routeBase: normalizeRoutePath(\n deriveDocsSetRouteBase({\n docsSetSlug: slug,\n groupRoutePath: group?.routePath,\n }),\n ),\n }\n}\n\nconst getGroupsById = async ({\n collectionSlug,\n payload,\n}: {\n collectionSlug: string\n payload: DocsSetPayloadOperations\n}): Promise<Map<string, unknown>> => {\n const result = await payload.find({\n collection: collectionSlug,\n depth: 0,\n limit: 1000,\n overrideAccess: true,\n })\n\n return new Map(\n result.docs.flatMap((doc) => {\n if (!isRecord(doc)) {\n return []\n }\n\n const id = getRecordId(doc)\n\n return id === undefined ? [] : [[String(id), doc]]\n }),\n )\n}\n\nexport const findDocsSetBySlug = async ({\n slug,\n collectionSlug,\n docsGroupsCollectionSlug,\n payload,\n}: {\n collectionSlug: string\n docsGroupsCollectionSlug: string\n payload: DocsSetPayloadOperations\n slug: string\n}): Promise<ResolvedDocsSet | undefined> => {\n const [result, groupsById] = await Promise.all([\n payload.find({\n collection: collectionSlug,\n depth: 0,\n limit: 1,\n overrideAccess: true,\n where: {\n slug: {\n equals: slug,\n },\n },\n }),\n getGroupsById({\n collectionSlug: docsGroupsCollectionSlug,\n payload,\n }),\n ])\n\n return toResolvedDocsSet({\n doc: result.docs[0],\n groupsById,\n })\n}\n\nexport const findDocsSetByRouteBase = async ({\n collectionSlug,\n docsGroupsCollectionSlug,\n payload,\n routeBase,\n}: {\n collectionSlug: string\n docsGroupsCollectionSlug: string\n payload: DocsSetPayloadOperations\n routeBase: string\n}): Promise<ResolvedDocsSet | undefined> => {\n const [result, groupsById] = await Promise.all([\n payload.find({\n collection: collectionSlug,\n depth: 0,\n limit: 1000,\n overrideAccess: true,\n }),\n getGroupsById({\n collectionSlug: docsGroupsCollectionSlug,\n payload,\n }),\n ])\n const normalizedRouteBase = normalizeRoutePath(routeBase)\n\n return result.docs\n .map((doc) =>\n toResolvedDocsSet({\n doc,\n groupsById,\n }),\n )\n .find((docsSet) => docsSet?.routeBase === normalizedRouteBase)\n}\n"],"names":["deriveDocsSetRouteBase","joinRouteSegments","normalizeRoutePath","isRecord","value","Array","isArray","getRecordId","doc","id","undefined","getRelationshipId","String","getString","trim","getStringArray","flatMap","item","nestedValue","authToggleEnabled","toggle","defaultValue","enabled","isGitHubOidcAuthEnabled","auth","mode","githubOidc","isEd25519AuthEnabled","ed25519","updateDocsSetAfterSync","aiExport","collectionSlug","docsCount","docsSetId","now","payload","syncRunId","update","collection","data","sync","lastStatus","lastSyncedAt","toISOString","lastSyncRunId","overrideAccess","toResolvedGroup","groupsById","seen","Set","slug","stringId","has","routePath","parentId","parent","parentDoc","get","parentGroup","toResolvedDocsSet","groupId","group","advancedSecurity","advancedSecurityEnabled","allowedWorkflowRefs","allowPullRequests","branch","routeBase","docsSetSlug","groupRoutePath","getGroupsById","result","find","depth","limit","Map","docs","findDocsSetBySlug","docsGroupsCollectionSlug","Promise","all","where","equals","findDocsSetByRouteBase","normalizedRouteBase","map","docsSet"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/payload/docsSets.ts"],"sourcesContent":["import type { PayloadMarkdownDocsAuthToggle } from '../types.js'\n\nimport { deriveDocsSetRouteBase, joinRouteSegments, normalizeRoutePath } from '../routing/index.js'\n\nexport type DocsSetPayloadOperations = {\n find: (args: {\n collection: string\n depth?: number\n draft?: boolean\n limit?: number\n overrideAccess?: boolean\n where?: unknown\n }) => Promise<{\n docs: unknown[]\n }>\n update?: (args: {\n collection: string\n data: Record<string, unknown>\n draft?: boolean\n id: string\n overrideAccess?: boolean\n }) => Promise<Record<string, unknown>>\n}\n\nexport type PayloadRecordId = number | string\n\nexport type ResolvedDocsGroup = {\n id: PayloadRecordId\n parentId?: string\n routePath: string\n slug: string\n}\n\nexport type ResolvedDocsSet = {\n advancedSecurity?: {\n allowedWorkflowRefs: string[]\n enabled: boolean\n }\n allowPullRequests: boolean\n branch: string\n groupId?: string\n id: PayloadRecordId\n routeBase: string\n slug: string\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst getRecordId = (doc: Record<string, unknown>): PayloadRecordId | undefined => {\n if (typeof doc.id === 'string' || typeof doc.id === 'number') {\n return doc.id\n }\n\n return undefined\n}\n\nconst getRelationshipId = (value: unknown): string | undefined => {\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value)\n }\n\n if (isRecord(value)) {\n const id = getRecordId(value)\n\n return id === undefined ? undefined : String(id)\n }\n\n return undefined\n}\n\nconst getString = (value: unknown): string | undefined =>\n typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined\n\nconst getStringArray = (value: unknown): string[] => {\n if (!Array.isArray(value)) {\n return []\n }\n\n return value.flatMap((item) => {\n if (typeof item === 'string' && item.trim() !== '') {\n return [item.trim()]\n }\n\n if (isRecord(item)) {\n const nestedValue = getString(item.value)\n\n return nestedValue ? [nestedValue] : []\n }\n\n return []\n })\n}\n\nconst authToggleEnabled = (\n toggle: boolean | PayloadMarkdownDocsAuthToggle | undefined,\n defaultValue: boolean,\n): boolean => {\n if (toggle === undefined) {\n return defaultValue\n }\n\n if (typeof toggle === 'boolean') {\n return toggle\n }\n\n return toggle.enabled !== false\n}\n\nexport const isGitHubOidcAuthEnabled = (\n auth: { githubOidc?: boolean | PayloadMarkdownDocsAuthToggle; mode?: 'disabled' } | undefined,\n): boolean => auth?.mode !== 'disabled' && authToggleEnabled(auth?.githubOidc, false)\n\nexport const isEd25519AuthEnabled = (\n auth: { ed25519?: boolean | PayloadMarkdownDocsAuthToggle; mode?: 'disabled' } | undefined,\n): boolean => auth?.mode !== 'disabled' && authToggleEnabled(auth?.ed25519, false)\n\nexport const updateDocsSetAfterSync = async ({\n aiExport,\n collectionSlug,\n docsCount,\n docsSetId,\n now,\n payload,\n publish,\n syncRunId,\n}: {\n aiExport?: unknown\n collectionSlug: string\n docsCount: number\n docsSetId: PayloadRecordId\n now: Date\n payload: DocsSetPayloadOperations\n publish: boolean\n syncRunId?: PayloadRecordId\n}): Promise<void> => {\n if (!payload.update) {\n return\n }\n\n await payload.update({\n id: String(docsSetId),\n collection: collectionSlug,\n data: {\n _status: publish ? 'published' : 'draft',\n aiExport: aiExport ?? null,\n sync: {\n docsCount,\n lastStatus: 'success',\n lastSyncedAt: now.toISOString(),\n lastSyncRunId: syncRunId,\n },\n },\n draft: !publish,\n overrideAccess: true,\n })\n}\n\nconst toResolvedGroup = (\n doc: unknown,\n groupsById: Map<string, unknown>,\n seen = new Set<string>(),\n): ResolvedDocsGroup | undefined => {\n if (!isRecord(doc)) {\n return undefined\n }\n\n const id = getRecordId(doc)\n const slug = getString(doc.slug)\n\n if (!id || !slug) {\n return undefined\n }\n\n const stringId = String(id)\n\n if (seen.has(stringId)) {\n return {\n id,\n slug,\n routePath: joinRouteSegments(slug),\n }\n }\n\n const parentId = getRelationshipId(doc.parent)\n const parentDoc = parentId ? groupsById.get(parentId) : undefined\n const parentGroup = parentDoc\n ? toResolvedGroup(parentDoc, groupsById, new Set([stringId, ...seen]))\n : undefined\n\n return {\n id,\n slug,\n parentId,\n routePath: joinRouteSegments(parentGroup?.routePath, slug),\n }\n}\n\nconst toResolvedDocsSet = ({\n doc,\n groupsById,\n}: {\n doc: unknown\n groupsById: Map<string, unknown>\n}): ResolvedDocsSet | undefined => {\n if (!isRecord(doc)) {\n return undefined\n }\n\n const id = getRecordId(doc)\n const slug = getString(doc.slug)\n\n if (!id || !slug) {\n return undefined\n }\n\n const groupId = getRelationshipId(doc.group)\n const group = groupId ? toResolvedGroup(groupsById.get(groupId), groupsById) : undefined\n const advancedSecurity = isRecord(doc.advancedSecurity) ? doc.advancedSecurity : undefined\n const advancedSecurityEnabled = advancedSecurity?.enabled === true\n\n return {\n id,\n ...(advancedSecurityEnabled\n ? {\n advancedSecurity: {\n allowedWorkflowRefs: getStringArray(advancedSecurity.allowedWorkflowRefs),\n enabled: true,\n },\n }\n : {}),\n slug,\n allowPullRequests: doc.allowPullRequests === true,\n branch: getString(doc.branch) ?? 'main',\n groupId,\n routeBase: normalizeRoutePath(\n deriveDocsSetRouteBase({\n docsSetSlug: slug,\n groupRoutePath: group?.routePath,\n }),\n ),\n }\n}\n\nconst getGroupsById = async ({\n collectionSlug,\n payload,\n}: {\n collectionSlug: string\n payload: DocsSetPayloadOperations\n}): Promise<Map<string, unknown>> => {\n const result = await payload.find({\n collection: collectionSlug,\n depth: 0,\n limit: 1000,\n overrideAccess: true,\n })\n\n return new Map(\n result.docs.flatMap((doc) => {\n if (!isRecord(doc)) {\n return []\n }\n\n const id = getRecordId(doc)\n\n return id === undefined ? [] : [[String(id), doc]]\n }),\n )\n}\n\nexport const findDocsSetBySlug = async ({\n slug,\n collectionSlug,\n docsGroupsCollectionSlug,\n includeDrafts = false,\n payload,\n}: {\n collectionSlug: string\n docsGroupsCollectionSlug: string\n includeDrafts?: boolean\n payload: DocsSetPayloadOperations\n slug: string\n}): Promise<ResolvedDocsSet | undefined> => {\n const [result, groupsById] = await Promise.all([\n payload.find({\n collection: collectionSlug,\n depth: 0,\n draft: includeDrafts,\n limit: 1,\n overrideAccess: true,\n where: {\n slug: {\n equals: slug,\n },\n },\n }),\n getGroupsById({\n collectionSlug: docsGroupsCollectionSlug,\n payload,\n }),\n ])\n\n return toResolvedDocsSet({\n doc: result.docs[0],\n groupsById,\n })\n}\n\nexport const findDocsSetByRouteBase = async ({\n collectionSlug,\n docsGroupsCollectionSlug,\n payload,\n routeBase,\n}: {\n collectionSlug: string\n docsGroupsCollectionSlug: string\n payload: DocsSetPayloadOperations\n routeBase: string\n}): Promise<ResolvedDocsSet | undefined> => {\n const [result, groupsById] = await Promise.all([\n payload.find({\n collection: collectionSlug,\n depth: 0,\n limit: 1000,\n overrideAccess: true,\n }),\n getGroupsById({\n collectionSlug: docsGroupsCollectionSlug,\n payload,\n }),\n ])\n const normalizedRouteBase = normalizeRoutePath(routeBase)\n\n return result.docs\n .map((doc) =>\n toResolvedDocsSet({\n doc,\n groupsById,\n }),\n )\n .find((docsSet) => docsSet?.routeBase === normalizedRouteBase)\n}\n"],"names":["deriveDocsSetRouteBase","joinRouteSegments","normalizeRoutePath","isRecord","value","Array","isArray","getRecordId","doc","id","undefined","getRelationshipId","String","getString","trim","getStringArray","flatMap","item","nestedValue","authToggleEnabled","toggle","defaultValue","enabled","isGitHubOidcAuthEnabled","auth","mode","githubOidc","isEd25519AuthEnabled","ed25519","updateDocsSetAfterSync","aiExport","collectionSlug","docsCount","docsSetId","now","payload","publish","syncRunId","update","collection","data","_status","sync","lastStatus","lastSyncedAt","toISOString","lastSyncRunId","draft","overrideAccess","toResolvedGroup","groupsById","seen","Set","slug","stringId","has","routePath","parentId","parent","parentDoc","get","parentGroup","toResolvedDocsSet","groupId","group","advancedSecurity","advancedSecurityEnabled","allowedWorkflowRefs","allowPullRequests","branch","routeBase","docsSetSlug","groupRoutePath","getGroupsById","result","find","depth","limit","Map","docs","findDocsSetBySlug","docsGroupsCollectionSlug","includeDrafts","Promise","all","where","equals","findDocsSetByRouteBase","normalizedRouteBase","map","docsSet"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ export type ExistingDocsPayloadOperations = {
|
|
|
3
3
|
find: (args: {
|
|
4
4
|
collection: string;
|
|
5
5
|
depth?: number;
|
|
6
|
+
draft?: boolean;
|
|
6
7
|
limit?: number;
|
|
7
8
|
overrideAccess?: boolean;
|
|
8
9
|
where?: unknown;
|
|
@@ -28,16 +29,18 @@ export type ExistingPayloadDocsRecord = {
|
|
|
28
29
|
};
|
|
29
30
|
} & ExistingDocsRecord;
|
|
30
31
|
export declare const toExistingDocsRecord: (doc: ExistingPayloadDocsRecord) => ExistingDocsRecord;
|
|
31
|
-
export declare const findExistingPayloadDocsRecords: ({ collectionSlug, docsSetId, markdownFieldName, payload, sourceId, }: {
|
|
32
|
+
export declare const findExistingPayloadDocsRecords: ({ collectionSlug, docsSetId, draft, markdownFieldName, payload, sourceId, }: {
|
|
32
33
|
collectionSlug: string;
|
|
33
34
|
docsSetId?: number | string;
|
|
35
|
+
draft?: boolean;
|
|
34
36
|
markdownFieldName: string;
|
|
35
37
|
payload: ExistingDocsPayloadOperations;
|
|
36
38
|
sourceId: string;
|
|
37
39
|
}) => Promise<ExistingPayloadDocsRecord[]>;
|
|
38
|
-
export declare const findExistingDocsRecords: ({ collectionSlug, docsSetId, markdownFieldName, payload, sourceId, }: {
|
|
40
|
+
export declare const findExistingDocsRecords: ({ collectionSlug, docsSetId, draft, markdownFieldName, payload, sourceId, }: {
|
|
39
41
|
collectionSlug: string;
|
|
40
42
|
docsSetId?: number | string;
|
|
43
|
+
draft?: boolean;
|
|
41
44
|
markdownFieldName: string;
|
|
42
45
|
payload: ExistingDocsPayloadOperations;
|
|
43
46
|
sourceId: string;
|
|
@@ -52,12 +52,14 @@ export const toExistingDocsRecord = (doc)=>({
|
|
|
52
52
|
route: doc.route,
|
|
53
53
|
sourceHash: doc.sourceHash,
|
|
54
54
|
sourcePath: doc.sourcePath,
|
|
55
|
+
status: doc.status,
|
|
55
56
|
title: doc.title
|
|
56
57
|
});
|
|
57
|
-
export const findExistingPayloadDocsRecords = async ({ collectionSlug, docsSetId, markdownFieldName, payload, sourceId })=>{
|
|
58
|
+
export const findExistingPayloadDocsRecords = async ({ collectionSlug, docsSetId, draft, markdownFieldName, payload, sourceId })=>{
|
|
58
59
|
const result = await payload.find({
|
|
59
60
|
collection: collectionSlug,
|
|
60
61
|
depth: 0,
|
|
62
|
+
draft,
|
|
61
63
|
limit: 1000,
|
|
62
64
|
overrideAccess: true,
|
|
63
65
|
where: docsSetId ? {
|
|
@@ -84,10 +86,11 @@ export const findExistingPayloadDocsRecords = async ({ collectionSlug, docsSetId
|
|
|
84
86
|
markdownFieldName
|
|
85
87
|
})).filter((doc)=>doc !== undefined);
|
|
86
88
|
};
|
|
87
|
-
export const findExistingDocsRecords = async ({ collectionSlug, docsSetId, markdownFieldName, payload, sourceId })=>{
|
|
89
|
+
export const findExistingDocsRecords = async ({ collectionSlug, docsSetId, draft, markdownFieldName, payload, sourceId })=>{
|
|
88
90
|
const docs = await findExistingPayloadDocsRecords({
|
|
89
91
|
collectionSlug,
|
|
90
92
|
docsSetId,
|
|
93
|
+
draft,
|
|
91
94
|
markdownFieldName,
|
|
92
95
|
payload,
|
|
93
96
|
sourceId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/payload/existingDocs.ts"],"sourcesContent":["import type { ExistingDocsRecord } from '../sync/index.js'\n\nexport type ExistingDocsPayloadOperations = {\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 ExistingPayloadDocsRecord = {\n content?: string\n docsSetId?: number | string\n id: string\n status?: 'draft' | 'published'\n sync?: {\n archived?: boolean\n archivedAt?: null | string\n contentHashAtLastSync?: string\n lastSyncedAt?: string\n lastSyncRunId?: string\n managedBy?: string\n sourceHashAtLastSync?: string\n sourceId?: string\n sourcePath?: string\n }\n} & ExistingDocsRecord\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst 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\nconst 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 toExistingPayloadDocsRecord = ({\n doc,\n markdownFieldName,\n}: {\n doc: unknown\n markdownFieldName: string\n}): ExistingPayloadDocsRecord | undefined => {\n if (!isRecord(doc)) {\n return undefined\n }\n\n const id = getRecordId(doc)\n\n if (!id || typeof doc.route !== 'string' || typeof doc.sourcePath !== 'string') {\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: typeof sync?.archived === 'boolean' ? sync.archived : undefined,\n content: typeof doc[markdownFieldName] === 'string' ? doc[markdownFieldName] : undefined,\n docsSetId: getRelationshipId(doc.docsSet),\n route: doc.route,\n sourceHash: typeof doc.sourceHash === 'string' ? doc.sourceHash : undefined,\n sourcePath: doc.sourcePath,\n status,\n sync: sync\n ? {\n archived: typeof sync.archived === 'boolean' ? sync.archived : undefined,\n archivedAt:\n typeof sync.archivedAt === 'string' || sync.archivedAt === null\n ? sync.archivedAt\n : undefined,\n contentHashAtLastSync:\n typeof sync.contentHashAtLastSync === 'string' ? sync.contentHashAtLastSync : undefined,\n lastSyncedAt: typeof sync.lastSyncedAt === 'string' ? sync.lastSyncedAt : undefined,\n lastSyncRunId: typeof sync.lastSyncRunId === 'string' ? sync.lastSyncRunId : undefined,\n managedBy: typeof sync.managedBy === 'string' ? sync.managedBy : undefined,\n sourceHashAtLastSync:\n typeof sync.sourceHashAtLastSync === 'string' ? sync.sourceHashAtLastSync : undefined,\n sourceId: typeof sync.sourceId === 'string' ? sync.sourceId : undefined,\n sourcePath: typeof sync.sourcePath === 'string' ? sync.sourcePath : undefined,\n }\n : undefined,\n title: typeof doc.title === 'string' ? doc.title : undefined,\n }\n}\n\nexport const toExistingDocsRecord = (doc: ExistingPayloadDocsRecord): ExistingDocsRecord => ({\n archived: doc.archived,\n route: doc.route,\n sourceHash: doc.sourceHash,\n sourcePath: doc.sourcePath,\n title: doc.title,\n})\n\nexport const findExistingPayloadDocsRecords = async ({\n collectionSlug,\n docsSetId,\n markdownFieldName,\n payload,\n sourceId,\n}: {\n collectionSlug: string\n docsSetId?: number | string\n markdownFieldName: string\n payload: ExistingDocsPayloadOperations\n sourceId: string\n}): Promise<ExistingPayloadDocsRecord[]> => {\n const result = await payload.find({\n collection: collectionSlug,\n depth: 0,\n limit: 1000,\n overrideAccess: true,\n where: docsSetId\n ? {\n or: [\n {\n docsSet: {\n equals: docsSetId,\n },\n },\n {\n 'sync.sourceId': {\n equals: sourceId,\n },\n },\n ],\n }\n : {\n 'sync.sourceId': {\n equals: sourceId,\n },\n },\n })\n\n return result.docs\n .map((doc) =>\n toExistingPayloadDocsRecord({\n doc,\n markdownFieldName,\n }),\n )\n .filter((doc): doc is ExistingPayloadDocsRecord => doc !== undefined)\n}\n\nexport const findExistingDocsRecords = async ({\n collectionSlug,\n docsSetId,\n markdownFieldName,\n payload,\n sourceId,\n}: {\n collectionSlug: string\n docsSetId?: number | string\n markdownFieldName: string\n payload: ExistingDocsPayloadOperations\n sourceId: string\n}): Promise<ExistingDocsRecord[]> => {\n const docs = await findExistingPayloadDocsRecords({\n collectionSlug,\n docsSetId,\n markdownFieldName,\n payload,\n sourceId,\n })\n\n return docs.map(toExistingDocsRecord)\n}\n"],"names":["isRecord","value","Array","isArray","getRecordId","doc","id","String","undefined","getRelationshipId","toExistingPayloadDocsRecord","markdownFieldName","route","sourcePath","sync","status","_status","archived","content","docsSetId","docsSet","sourceHash","archivedAt","contentHashAtLastSync","lastSyncedAt","lastSyncRunId","managedBy","sourceHashAtLastSync","sourceId","title","toExistingDocsRecord","findExistingPayloadDocsRecords","collectionSlug","payload","result","find","collection","depth","limit","overrideAccess","where","or","equals","docs","map","filter","findExistingDocsRecords"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/payload/existingDocs.ts"],"sourcesContent":["import type { ExistingDocsRecord } from '../sync/index.js'\n\nexport type ExistingDocsPayloadOperations = {\n find: (args: {\n collection: string\n depth?: number\n draft?: boolean\n limit?: number\n overrideAccess?: boolean\n where?: unknown\n }) => Promise<{\n docs: unknown[]\n }>\n}\n\nexport type ExistingPayloadDocsRecord = {\n content?: string\n docsSetId?: number | string\n id: string\n status?: 'draft' | 'published'\n sync?: {\n archived?: boolean\n archivedAt?: null | string\n contentHashAtLastSync?: string\n lastSyncedAt?: string\n lastSyncRunId?: string\n managedBy?: string\n sourceHashAtLastSync?: string\n sourceId?: string\n sourcePath?: string\n }\n} & ExistingDocsRecord\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst 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\nconst 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 toExistingPayloadDocsRecord = ({\n doc,\n markdownFieldName,\n}: {\n doc: unknown\n markdownFieldName: string\n}): ExistingPayloadDocsRecord | undefined => {\n if (!isRecord(doc)) {\n return undefined\n }\n\n const id = getRecordId(doc)\n\n if (!id || typeof doc.route !== 'string' || typeof doc.sourcePath !== 'string') {\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: typeof sync?.archived === 'boolean' ? sync.archived : undefined,\n content: typeof doc[markdownFieldName] === 'string' ? doc[markdownFieldName] : undefined,\n docsSetId: getRelationshipId(doc.docsSet),\n route: doc.route,\n sourceHash: typeof doc.sourceHash === 'string' ? doc.sourceHash : undefined,\n sourcePath: doc.sourcePath,\n status,\n sync: sync\n ? {\n archived: typeof sync.archived === 'boolean' ? sync.archived : undefined,\n archivedAt:\n typeof sync.archivedAt === 'string' || sync.archivedAt === null\n ? sync.archivedAt\n : undefined,\n contentHashAtLastSync:\n typeof sync.contentHashAtLastSync === 'string' ? sync.contentHashAtLastSync : undefined,\n lastSyncedAt: typeof sync.lastSyncedAt === 'string' ? sync.lastSyncedAt : undefined,\n lastSyncRunId: typeof sync.lastSyncRunId === 'string' ? sync.lastSyncRunId : undefined,\n managedBy: typeof sync.managedBy === 'string' ? sync.managedBy : undefined,\n sourceHashAtLastSync:\n typeof sync.sourceHashAtLastSync === 'string' ? sync.sourceHashAtLastSync : undefined,\n sourceId: typeof sync.sourceId === 'string' ? sync.sourceId : undefined,\n sourcePath: typeof sync.sourcePath === 'string' ? sync.sourcePath : undefined,\n }\n : undefined,\n title: typeof doc.title === 'string' ? doc.title : undefined,\n }\n}\n\nexport const toExistingDocsRecord = (doc: ExistingPayloadDocsRecord): ExistingDocsRecord => ({\n archived: doc.archived,\n route: doc.route,\n sourceHash: doc.sourceHash,\n sourcePath: doc.sourcePath,\n status: doc.status,\n title: doc.title,\n})\n\nexport const findExistingPayloadDocsRecords = async ({\n collectionSlug,\n docsSetId,\n draft,\n markdownFieldName,\n payload,\n sourceId,\n}: {\n collectionSlug: string\n docsSetId?: number | string\n draft?: boolean\n markdownFieldName: string\n payload: ExistingDocsPayloadOperations\n sourceId: string\n}): Promise<ExistingPayloadDocsRecord[]> => {\n const result = await payload.find({\n collection: collectionSlug,\n depth: 0,\n draft,\n limit: 1000,\n overrideAccess: true,\n where: docsSetId\n ? {\n or: [\n {\n docsSet: {\n equals: docsSetId,\n },\n },\n {\n 'sync.sourceId': {\n equals: sourceId,\n },\n },\n ],\n }\n : {\n 'sync.sourceId': {\n equals: sourceId,\n },\n },\n })\n\n return result.docs\n .map((doc) =>\n toExistingPayloadDocsRecord({\n doc,\n markdownFieldName,\n }),\n )\n .filter((doc): doc is ExistingPayloadDocsRecord => doc !== undefined)\n}\n\nexport const findExistingDocsRecords = async ({\n collectionSlug,\n docsSetId,\n draft,\n markdownFieldName,\n payload,\n sourceId,\n}: {\n collectionSlug: string\n docsSetId?: number | string\n draft?: boolean\n markdownFieldName: string\n payload: ExistingDocsPayloadOperations\n sourceId: string\n}): Promise<ExistingDocsRecord[]> => {\n const docs = await findExistingPayloadDocsRecords({\n collectionSlug,\n docsSetId,\n draft,\n markdownFieldName,\n payload,\n sourceId,\n })\n\n return docs.map(toExistingDocsRecord)\n}\n"],"names":["isRecord","value","Array","isArray","getRecordId","doc","id","String","undefined","getRelationshipId","toExistingPayloadDocsRecord","markdownFieldName","route","sourcePath","sync","status","_status","archived","content","docsSetId","docsSet","sourceHash","archivedAt","contentHashAtLastSync","lastSyncedAt","lastSyncRunId","managedBy","sourceHashAtLastSync","sourceId","title","toExistingDocsRecord","findExistingPayloadDocsRecords","collectionSlug","draft","payload","result","find","collection","depth","limit","overrideAccess","where","or","equals","docs","map","filter","findExistingDocsRecords"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ export type RouteCollisionPayloadOperations = {
|
|
|
2
2
|
find: (args: {
|
|
3
3
|
collection: string;
|
|
4
4
|
depth?: number;
|
|
5
|
+
draft?: boolean;
|
|
5
6
|
limit?: number;
|
|
6
7
|
overrideAccess?: boolean;
|
|
7
8
|
where?: unknown;
|
|
@@ -14,9 +15,10 @@ export type DocsRouteCollisionIssue = {
|
|
|
14
15
|
route: string;
|
|
15
16
|
};
|
|
16
17
|
export declare const findDuplicateDesiredRouteCollisions: (routes: string[]) => DocsRouteCollisionIssue[];
|
|
17
|
-
export declare const findExistingDocsRouteCollisions: ({ collectionSlug, docsSetId, payload, routes, sourceId, }: {
|
|
18
|
+
export declare const findExistingDocsRouteCollisions: ({ collectionSlug, docsSetId, includeDrafts, payload, routes, sourceId, }: {
|
|
18
19
|
collectionSlug: string;
|
|
19
20
|
docsSetId?: number | string;
|
|
21
|
+
includeDrafts?: boolean;
|
|
20
22
|
payload: RouteCollisionPayloadOperations;
|
|
21
23
|
routes: string[];
|
|
22
24
|
sourceId: string;
|