@valkyrianlabs/payload-markdown-docs 0.4.3 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/admin/DocsSetManager.js +7 -40
  2. package/dist/admin/DocsSetManager.js.map +1 -1
  3. package/dist/cli/commands/push.js.map +1 -1
  4. package/dist/cli/format.d.ts +1 -3
  5. package/dist/cli/format.js +1 -2
  6. package/dist/cli/format.js.map +1 -1
  7. package/dist/collections/docs.js +18 -0
  8. package/dist/collections/docs.js.map +1 -1
  9. package/dist/collections/docsSets.d.ts +1 -3
  10. package/dist/collections/docsSets.js +17 -10
  11. package/dist/collections/docsSets.js.map +1 -1
  12. package/dist/collections/syncRuns.js +0 -9
  13. package/dist/collections/syncRuns.js.map +1 -1
  14. package/dist/endpoints/index.d.ts +0 -2
  15. package/dist/endpoints/index.js +0 -1
  16. package/dist/endpoints/index.js.map +1 -1
  17. package/dist/endpoints/sync.d.ts +0 -2
  18. package/dist/endpoints/sync.js +4 -15
  19. package/dist/endpoints/sync.js.map +1 -1
  20. package/dist/next/records.d.ts +4 -0
  21. package/dist/next/records.js +7 -0
  22. package/dist/next/records.js.map +1 -1
  23. package/dist/next/route.js +34 -13
  24. package/dist/next/route.js.map +1 -1
  25. package/dist/next/types.d.ts +1 -0
  26. package/dist/next/types.js.map +1 -1
  27. package/dist/payload/applyDocsSync.d.ts +2 -3
  28. package/dist/payload/applyDocsSync.js +4 -6
  29. package/dist/payload/applyDocsSync.js.map +1 -1
  30. package/dist/payload/docsConflicts.js +12 -1
  31. package/dist/payload/docsConflicts.js.map +1 -1
  32. package/dist/payload/docsData.d.ts +2 -5
  33. package/dist/payload/docsData.js +6 -8
  34. package/dist/payload/docsData.js.map +1 -1
  35. package/dist/payload/existingDocs.d.ts +1 -0
  36. package/dist/payload/existingDocs.js +1 -0
  37. package/dist/payload/existingDocs.js.map +1 -1
  38. package/dist/payload/index.d.ts +11 -11
  39. package/dist/payload/index.js.map +1 -1
  40. package/dist/payload/populatePublishedAt.d.ts +2 -0
  41. package/dist/payload/populatePublishedAt.js +14 -0
  42. package/dist/payload/populatePublishedAt.js.map +1 -0
  43. package/dist/payload/syncRuns.d.ts +1 -2
  44. package/dist/payload/syncRuns.js +1 -2
  45. package/dist/payload/syncRuns.js.map +1 -1
  46. package/dist/plugin.js +0 -3
  47. package/dist/plugin.js.map +1 -1
  48. package/dist/skills/codex/reference/admin.md +0 -1
  49. package/dist/types.d.ts +0 -1
  50. package/dist/types.js.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/endpoints/publishGeneratedDocs.d.ts +0 -6
  53. package/dist/endpoints/publishGeneratedDocs.js +0 -76
  54. package/dist/endpoints/publishGeneratedDocs.js.map +0 -1
  55. package/dist/payload/publishGeneratedDocs.d.ts +0 -29
  56. package/dist/payload/publishGeneratedDocs.js +0 -78
  57. package/dist/payload/publishGeneratedDocs.js.map +0 -1
@@ -18,15 +18,6 @@ const formatDate = (value)=>{
18
18
  }
19
19
  return date.toISOString();
20
20
  };
21
- const normalizeRoute = (route = '/')=>{
22
- const normalized = `/${route.trim()}`.replace(/\/+/g, '/');
23
- return normalized.length > 1 ? normalized.replace(/\/+$/g, '') : normalized;
24
- };
25
- const getPublishAction = ({ apiRoute, docsSetId, docsSetsCollectionSlug, redirect })=>{
26
- const path = `${normalizeRoute(apiRoute ?? '/api')}/${docsSetsCollectionSlug}/${encodeURIComponent(String(docsSetId))}/publish-generated-docs`;
27
- return `${path}?redirect=${encodeURIComponent(redirect)}`;
28
- };
29
- const getDocsSetAdminURL = ({ adminRoute, docsSetId, docsSetsCollectionSlug })=>`${normalizeRoute(adminRoute ?? '/admin')}/collections/${docsSetsCollectionSlug}/${encodeURIComponent(String(docsSetId))}`;
30
21
  const StatusLabel = ({ item })=>{
31
22
  if (item.archived) {
32
23
  return /*#__PURE__*/ _jsx("span", {
@@ -219,7 +210,6 @@ export const DocsSetManager = async ({ id, field, payload, req })=>{
219
210
  const docsCollectionSlug = custom.docsCollectionSlug ?? DEFAULT_DOCS_COLLECTION_SLUG;
220
211
  const docsGroupsCollectionSlug = custom.docsGroupsCollectionSlug ?? DEFAULT_DOCS_GROUPS_COLLECTION_SLUG;
221
212
  const docsSetsCollectionSlug = custom.docsSetsCollectionSlug ?? DEFAULT_DOCS_SETS_COLLECTION_SLUG;
222
- const canPublishGeneratedDocs = custom.docsEnableDrafts === true && custom.allowPublish === true;
223
213
  if (!id) {
224
214
  return /*#__PURE__*/ _jsxs("section", {
225
215
  children: [
@@ -240,17 +230,6 @@ export const DocsSetManager = async ({ id, field, payload, req })=>{
240
230
  docsSetsCollectionSlug,
241
231
  payload: payload
242
232
  });
243
- const docsSetAdminURL = getDocsSetAdminURL({
244
- adminRoute: req.payload.config.routes.admin,
245
- docsSetId: id,
246
- docsSetsCollectionSlug
247
- });
248
- const publishAction = getPublishAction({
249
- apiRoute: req.payload.config.routes.api,
250
- docsSetId: id,
251
- docsSetsCollectionSlug,
252
- redirect: docsSetAdminURL
253
- });
254
233
  return /*#__PURE__*/ _jsxs("section", {
255
234
  children: [
256
235
  /*#__PURE__*/ _jsxs("header", {
@@ -285,25 +264,13 @@ export const DocsSetManager = async ({ id, field, payload, req })=>{
285
264
  /*#__PURE__*/ _jsx(Summary, {
286
265
  data: data
287
266
  }),
288
- data.summary.drafts > 0 ? /*#__PURE__*/ _jsxs("div", {
289
- children: [
290
- /*#__PURE__*/ _jsxs("p", {
291
- children: [
292
- data.summary.drafts,
293
- " generated docs records are drafts and are not public."
294
- ]
295
- }),
296
- canPublishGeneratedDocs ? /*#__PURE__*/ _jsx("form", {
297
- action: publishAction,
298
- method: "post",
299
- children: /*#__PURE__*/ _jsx("button", {
300
- type: "submit",
301
- children: "Publish generated docs"
302
- })
303
- }) : /*#__PURE__*/ _jsx("p", {
304
- children: "Publishing is disabled for this plugin config."
305
- })
306
- ]
267
+ data.summary.drafts > 0 ? /*#__PURE__*/ _jsx("div", {
268
+ children: /*#__PURE__*/ _jsxs("p", {
269
+ children: [
270
+ data.summary.drafts,
271
+ " generated docs records are drafts and are not public."
272
+ ]
273
+ })
307
274
  }) : null
308
275
  ]
309
276
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/admin/DocsSetManager.tsx"],"sourcesContent":["import type { UIFieldServerProps } from 'payload'\nimport type { ReactNode } from 'react'\n\nimport type {\n DocsSetManagerData,\n DocsSetManagerDocItem,\n DocsSetManagerPayloadOperations,\n} from './docsSetManagerTypes.js'\n\nimport {\n DEFAULT_DOCS_COLLECTION_SLUG,\n DEFAULT_DOCS_GROUPS_COLLECTION_SLUG,\n DEFAULT_DOCS_SETS_COLLECTION_SLUG,\n} from '../constants.js'\nimport { getDocsSetManagerData } from './docsSetManagerData.js'\n\ntype DocsSetManagerFieldCustom = {\n allowPublish?: boolean\n docsCollectionSlug?: string\n docsEnableDrafts?: boolean\n docsGroupsCollectionSlug?: string\n docsSetsCollectionSlug?: string\n}\n\nconst getFieldCustom = (field: UIFieldServerProps['field']): DocsSetManagerFieldCustom => {\n const custom = 'custom' in field ? field.custom : undefined\n\n if (!custom || typeof custom !== 'object') {\n return {}\n }\n\n return custom as DocsSetManagerFieldCustom\n}\n\nconst formatDate = (value?: string): string => {\n if (!value) {\n return 'Never'\n }\n\n const date = new Date(value)\n\n if (Number.isNaN(date.getTime())) {\n return value\n }\n\n return date.toISOString()\n}\n\nconst normalizeRoute = (route = '/'): string => {\n const normalized = `/${route.trim()}`.replace(/\\/+/g, '/')\n\n return normalized.length > 1 ? normalized.replace(/\\/+$/g, '') : normalized\n}\n\nconst getPublishAction = ({\n apiRoute,\n docsSetId,\n docsSetsCollectionSlug,\n redirect,\n}: {\n apiRoute?: string\n docsSetId: number | string\n docsSetsCollectionSlug: string\n redirect: string\n}): string => {\n const path = `${normalizeRoute(apiRoute ?? '/api')}/${docsSetsCollectionSlug}/${encodeURIComponent(String(docsSetId))}/publish-generated-docs`\n\n return `${path}?redirect=${encodeURIComponent(redirect)}`\n}\n\nconst getDocsSetAdminURL = ({\n adminRoute,\n docsSetId,\n docsSetsCollectionSlug,\n}: {\n adminRoute?: string\n docsSetId: number | string\n docsSetsCollectionSlug: string\n}): string =>\n `${normalizeRoute(adminRoute ?? '/admin')}/collections/${docsSetsCollectionSlug}/${encodeURIComponent(String(docsSetId))}`\n\nconst StatusLabel = ({ item }: { item: DocsSetManagerDocItem }) => {\n if (item.archived) {\n return <span>archived</span>\n }\n\n if (item.draft) {\n return <span>draft</span>\n }\n\n if (item.published) {\n return <span>published</span>\n }\n\n return <span>synced</span>\n}\n\nconst OverrideSummary = ({ item }: { item: DocsSetManagerDocItem }) => {\n if (item.overrideSummary.length === 0) {\n return <span>none</span>\n }\n\n return <span>{item.overrideSummary.join(', ')}</span>\n}\n\nconst renderDocItem = (item: DocsSetManagerDocItem): ReactNode => {\n if (item.kind === 'folder') {\n return (\n <details key={item.id}>\n <summary>{item.title}</summary>\n <div>{item.children?.map((child) => renderDocItem(child))}</div>\n </details>\n )\n }\n\n return (\n <details key={item.id}>\n <summary>{item.sourcePath}</summary>\n <dl>\n <div>\n <dt>Route</dt>\n <dd>{item.route || 'Missing route'}</dd>\n </div>\n <div>\n <dt>Title</dt>\n <dd>{item.title}</dd>\n </div>\n <div>\n <dt>Status</dt>\n <dd>\n <StatusLabel item={item} />\n </dd>\n </div>\n <div>\n <dt>Overrides</dt>\n <dd>\n <OverrideSummary item={item} />\n </dd>\n </div>\n </dl>\n {item.adminURL ? <a href={item.adminURL}>Open generated doc</a> : null}\n </details>\n )\n}\n\nconst Summary = ({ data }: { data: DocsSetManagerData }) => (\n <dl>\n <div>\n <dt>Docs</dt>\n <dd>{data.summary.total}</dd>\n </div>\n <div>\n <dt>Archived</dt>\n <dd>{data.summary.archived}</dd>\n </div>\n <div>\n <dt>Drafts</dt>\n <dd>{data.summary.drafts}</dd>\n </div>\n <div>\n <dt>Published</dt>\n <dd>{data.summary.published}</dd>\n </div>\n <div>\n <dt>Hidden from nav</dt>\n <dd>{data.summary.hiddenFromNav}</dd>\n </div>\n <div>\n <dt>With overrides</dt>\n <dd>{data.summary.withOverrides}</dd>\n </div>\n <div>\n <dt>Last sync</dt>\n <dd>{formatDate(data.sync?.lastSyncedAt)}</dd>\n </div>\n <div>\n <dt>Last status</dt>\n <dd>{data.sync?.lastStatus ?? 'unknown'}</dd>\n </div>\n </dl>\n)\n\nexport const DocsSetManager = async ({ id, field, payload, req }: UIFieldServerProps) => {\n const custom = getFieldCustom(field)\n const docsCollectionSlug = custom.docsCollectionSlug ?? DEFAULT_DOCS_COLLECTION_SLUG\n const docsGroupsCollectionSlug =\n custom.docsGroupsCollectionSlug ?? DEFAULT_DOCS_GROUPS_COLLECTION_SLUG\n const docsSetsCollectionSlug = custom.docsSetsCollectionSlug ?? DEFAULT_DOCS_SETS_COLLECTION_SLUG\n const canPublishGeneratedDocs = custom.docsEnableDrafts === true && custom.allowPublish === true\n\n if (!id) {\n return (\n <section>\n <h2>Generated Docs</h2>\n <p>Save this docs set before reviewing generated docs records.</p>\n </section>\n )\n }\n\n const data = await getDocsSetManagerData({\n adminRoute: req.payload.config.routes.admin,\n docsCollectionSlug,\n docsGroupsCollectionSlug,\n docsSetId: String(id),\n docsSetsCollectionSlug,\n payload: payload as DocsSetManagerPayloadOperations,\n })\n const docsSetAdminURL = getDocsSetAdminURL({\n adminRoute: req.payload.config.routes.admin,\n docsSetId: id,\n docsSetsCollectionSlug,\n })\n const publishAction = getPublishAction({\n apiRoute: req.payload.config.routes.api,\n docsSetId: id,\n docsSetsCollectionSlug,\n redirect: docsSetAdminURL,\n })\n\n return (\n <section>\n <header>\n <h2>Generated Docs</h2>\n <p>\n Review generated docs records for {data.docsSet.title}. Source docs remain Git-backed;\n per-doc overrides can be edited by opening a generated doc.\n </p>\n </header>\n\n <section>\n <h3>Effective Route</h3>\n <p>{data.docsSet.routeBase || 'No route available yet'}</p>\n </section>\n\n <section>\n <h3>Sync Summary</h3>\n <Summary data={data} />\n {data.summary.drafts > 0 ? (\n <div>\n <p>{data.summary.drafts} generated docs records are drafts and are not public.</p>\n {canPublishGeneratedDocs ? (\n <form action={publishAction} method=\"post\">\n <button type=\"submit\">Publish generated docs</button>\n </form>\n ) : (\n <p>Publishing is disabled for this plugin config.</p>\n )}\n </div>\n ) : null}\n </section>\n\n {data.warnings.length > 0 ? (\n <section>\n <h3>Warnings</h3>\n <ul>\n {data.warnings.map((warning) => (\n <li key={`${warning.docId ?? 'docs-set'}:${warning.message}`}>\n {warning.sourcePath ? `${warning.sourcePath}: ` : null}\n {warning.message}\n </li>\n ))}\n </ul>\n </section>\n ) : null}\n\n <section>\n <h3>Generated Docs</h3>\n {data.tree.length > 0 ? (\n <div>{data.tree.map((item) => renderDocItem(item))}</div>\n ) : (\n <p>No generated docs records are linked to this docs set yet.</p>\n )}\n </section>\n </section>\n )\n}\n"],"names":["DEFAULT_DOCS_COLLECTION_SLUG","DEFAULT_DOCS_GROUPS_COLLECTION_SLUG","DEFAULT_DOCS_SETS_COLLECTION_SLUG","getDocsSetManagerData","getFieldCustom","field","custom","undefined","formatDate","value","date","Date","Number","isNaN","getTime","toISOString","normalizeRoute","route","normalized","trim","replace","length","getPublishAction","apiRoute","docsSetId","docsSetsCollectionSlug","redirect","path","encodeURIComponent","String","getDocsSetAdminURL","adminRoute","StatusLabel","item","archived","span","draft","published","OverrideSummary","overrideSummary","join","renderDocItem","kind","details","summary","title","div","children","map","child","id","sourcePath","dl","dt","dd","adminURL","a","href","Summary","data","total","drafts","hiddenFromNav","withOverrides","sync","lastSyncedAt","lastStatus","DocsSetManager","payload","req","docsCollectionSlug","docsGroupsCollectionSlug","canPublishGeneratedDocs","docsEnableDrafts","allowPublish","section","h2","p","config","routes","admin","docsSetAdminURL","publishAction","api","header","docsSet","h3","routeBase","form","action","method","button","type","warnings","ul","warning","li","message","docId","tree"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/admin/DocsSetManager.tsx"],"sourcesContent":["import type { UIFieldServerProps } from 'payload'\nimport type { ReactNode } from 'react'\n\nimport type {\n DocsSetManagerData,\n DocsSetManagerDocItem,\n DocsSetManagerPayloadOperations,\n} from './docsSetManagerTypes.js'\n\nimport {\n DEFAULT_DOCS_COLLECTION_SLUG,\n DEFAULT_DOCS_GROUPS_COLLECTION_SLUG,\n DEFAULT_DOCS_SETS_COLLECTION_SLUG,\n} from '../constants.js'\nimport { getDocsSetManagerData } from './docsSetManagerData.js'\n\ntype DocsSetManagerFieldCustom = {\n docsCollectionSlug?: string\n docsGroupsCollectionSlug?: string\n docsSetsCollectionSlug?: string\n}\n\nconst getFieldCustom = (field: UIFieldServerProps['field']): DocsSetManagerFieldCustom => {\n const custom = 'custom' in field ? field.custom : undefined\n\n if (!custom || typeof custom !== 'object') {\n return {}\n }\n\n return custom as DocsSetManagerFieldCustom\n}\n\nconst formatDate = (value?: string): string => {\n if (!value) {\n return 'Never'\n }\n\n const date = new Date(value)\n\n if (Number.isNaN(date.getTime())) {\n return value\n }\n\n return date.toISOString()\n}\n\nconst StatusLabel = ({ item }: { item: DocsSetManagerDocItem }) => {\n if (item.archived) {\n return <span>archived</span>\n }\n\n if (item.draft) {\n return <span>draft</span>\n }\n\n if (item.published) {\n return <span>published</span>\n }\n\n return <span>synced</span>\n}\n\nconst OverrideSummary = ({ item }: { item: DocsSetManagerDocItem }) => {\n if (item.overrideSummary.length === 0) {\n return <span>none</span>\n }\n\n return <span>{item.overrideSummary.join(', ')}</span>\n}\n\nconst renderDocItem = (item: DocsSetManagerDocItem): ReactNode => {\n if (item.kind === 'folder') {\n return (\n <details key={item.id}>\n <summary>{item.title}</summary>\n <div>{item.children?.map((child) => renderDocItem(child))}</div>\n </details>\n )\n }\n\n return (\n <details key={item.id}>\n <summary>{item.sourcePath}</summary>\n <dl>\n <div>\n <dt>Route</dt>\n <dd>{item.route || 'Missing route'}</dd>\n </div>\n <div>\n <dt>Title</dt>\n <dd>{item.title}</dd>\n </div>\n <div>\n <dt>Status</dt>\n <dd>\n <StatusLabel item={item} />\n </dd>\n </div>\n <div>\n <dt>Overrides</dt>\n <dd>\n <OverrideSummary item={item} />\n </dd>\n </div>\n </dl>\n {item.adminURL ? <a href={item.adminURL}>Open generated doc</a> : null}\n </details>\n )\n}\n\nconst Summary = ({ data }: { data: DocsSetManagerData }) => (\n <dl>\n <div>\n <dt>Docs</dt>\n <dd>{data.summary.total}</dd>\n </div>\n <div>\n <dt>Archived</dt>\n <dd>{data.summary.archived}</dd>\n </div>\n <div>\n <dt>Drafts</dt>\n <dd>{data.summary.drafts}</dd>\n </div>\n <div>\n <dt>Published</dt>\n <dd>{data.summary.published}</dd>\n </div>\n <div>\n <dt>Hidden from nav</dt>\n <dd>{data.summary.hiddenFromNav}</dd>\n </div>\n <div>\n <dt>With overrides</dt>\n <dd>{data.summary.withOverrides}</dd>\n </div>\n <div>\n <dt>Last sync</dt>\n <dd>{formatDate(data.sync?.lastSyncedAt)}</dd>\n </div>\n <div>\n <dt>Last status</dt>\n <dd>{data.sync?.lastStatus ?? 'unknown'}</dd>\n </div>\n </dl>\n)\n\nexport const DocsSetManager = async ({ id, field, payload, req }: UIFieldServerProps) => {\n const custom = getFieldCustom(field)\n const docsCollectionSlug = custom.docsCollectionSlug ?? DEFAULT_DOCS_COLLECTION_SLUG\n const docsGroupsCollectionSlug =\n custom.docsGroupsCollectionSlug ?? DEFAULT_DOCS_GROUPS_COLLECTION_SLUG\n const docsSetsCollectionSlug = custom.docsSetsCollectionSlug ?? DEFAULT_DOCS_SETS_COLLECTION_SLUG\n\n if (!id) {\n return (\n <section>\n <h2>Generated Docs</h2>\n <p>Save this docs set before reviewing generated docs records.</p>\n </section>\n )\n }\n\n const data = await getDocsSetManagerData({\n adminRoute: req.payload.config.routes.admin,\n docsCollectionSlug,\n docsGroupsCollectionSlug,\n docsSetId: String(id),\n docsSetsCollectionSlug,\n payload: payload as DocsSetManagerPayloadOperations,\n })\n\n return (\n <section>\n <header>\n <h2>Generated Docs</h2>\n <p>\n Review generated docs records for {data.docsSet.title}. Source docs remain Git-backed;\n per-doc overrides can be edited by opening a generated doc.\n </p>\n </header>\n\n <section>\n <h3>Effective Route</h3>\n <p>{data.docsSet.routeBase || 'No route available yet'}</p>\n </section>\n\n <section>\n <h3>Sync Summary</h3>\n <Summary data={data} />\n {data.summary.drafts > 0 ? (\n <div>\n <p>{data.summary.drafts} generated docs records are drafts and are not public.</p>\n </div>\n ) : null}\n </section>\n\n {data.warnings.length > 0 ? (\n <section>\n <h3>Warnings</h3>\n <ul>\n {data.warnings.map((warning) => (\n <li key={`${warning.docId ?? 'docs-set'}:${warning.message}`}>\n {warning.sourcePath ? `${warning.sourcePath}: ` : null}\n {warning.message}\n </li>\n ))}\n </ul>\n </section>\n ) : null}\n\n <section>\n <h3>Generated Docs</h3>\n {data.tree.length > 0 ? (\n <div>{data.tree.map((item) => renderDocItem(item))}</div>\n ) : (\n <p>No generated docs records are linked to this docs set yet.</p>\n )}\n </section>\n </section>\n )\n}\n"],"names":["DEFAULT_DOCS_COLLECTION_SLUG","DEFAULT_DOCS_GROUPS_COLLECTION_SLUG","DEFAULT_DOCS_SETS_COLLECTION_SLUG","getDocsSetManagerData","getFieldCustom","field","custom","undefined","formatDate","value","date","Date","Number","isNaN","getTime","toISOString","StatusLabel","item","archived","span","draft","published","OverrideSummary","overrideSummary","length","join","renderDocItem","kind","details","summary","title","div","children","map","child","id","sourcePath","dl","dt","dd","route","adminURL","a","href","Summary","data","total","drafts","hiddenFromNav","withOverrides","sync","lastSyncedAt","lastStatus","DocsSetManager","payload","req","docsCollectionSlug","docsGroupsCollectionSlug","docsSetsCollectionSlug","section","h2","p","adminRoute","config","routes","admin","docsSetId","String","header","docsSet","h3","routeBase","warnings","ul","warning","li","message","docId","tree"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/push.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises'\n\nimport type { DocsDeleteBehavior } from '../../sync/index.js'\nimport type {\n HttpGetJson,\n HttpPostJson,\n} from '../http.js'\nimport type {\n CliResult,\n ParsedCliArgs,\n PushCommandOptions,\n} from '../types.js'\n\nimport {\n DocsSyncKeyError,\n signDocsSyncRequest,\n} from '../../security/index.js'\nimport {\n buildDocsManifest,\n sha256Hex,\n validateDocsManifest,\n} from '../../sync/index.js'\nimport {\n readDocsAiExportManifest,\n walkDocsFiles,\n} from '../filesystem.js'\nimport { formatIssues, formatPushSummary, printJson } from '../format.js'\nimport {\n getJson,\n postJson,\n} from '../http.js'\nimport { getFlagBoolean, getFlagString } from '../parseArgs.js'\nimport { getDocsCommandOptions } from './validate.js'\n\nconst supportedPushDeleteBehaviors = new Set<DocsDeleteBehavior>([\n 'archive',\n 'delete',\n 'draft',\n 'ignore',\n])\n\ntype ServerPushResponse = {\n deleteBehavior?: string\n effectivePublishMode?: string\n error?: {\n code?: string\n message?: string\n }\n ok?: boolean\n publishRequested?: boolean\n summary?: {\n archive?: number\n create?: number\n delete?: number\n draft?: number\n unchanged?: number\n update?: number\n warnings?: number\n }\n syncRunId?: string\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isServerPushResponse = (value: unknown): value is ServerPushResponse =>\n isRecord(value)\n\nconst validateEndpointUrl = (endpoint: string): CliResult | string => {\n try {\n const parsed = new URL(endpoint)\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n return {\n exitCode: 1,\n stderr: '--endpoint must be a full http:// or https:// URL.\\n',\n }\n }\n\n return parsed.toString()\n } catch {\n return {\n exitCode: 1,\n stderr: '--endpoint must be a valid full http:// or https:// URL.\\n',\n }\n }\n}\n\nconst readPrivateKey = async (\n args: ParsedCliArgs,\n): Promise<CliResult | string> => {\n const privateKeyFile = getFlagString(args, 'private-key-file')\n const privateKeyEnv = getFlagString(args, 'private-key-env')\n\n if (privateKeyFile && privateKeyEnv) {\n return {\n exitCode: 1,\n stderr:\n 'Use either --private-key-file or --private-key-env, not both.\\n',\n }\n }\n\n if (!privateKeyFile && !privateKeyEnv) {\n return {\n exitCode: 1,\n stderr: 'Push requires --private-key-file or --private-key-env.\\n',\n }\n }\n\n if (privateKeyEnv) {\n const privateKey = process.env[privateKeyEnv]\n\n if (!privateKey) {\n return {\n exitCode: 1,\n stderr: `Environment variable \"${privateKeyEnv}\" is not set.\\n`,\n }\n }\n\n return privateKey\n }\n\n try {\n return await readFile(privateKeyFile ?? '', 'utf8')\n } catch (error) {\n return {\n exitCode: 1,\n stderr:\n error instanceof Error\n ? `Could not read private key file: ${error.message}\\n`\n : 'Could not read private key file.\\n',\n }\n }\n}\n\nconst getGithubOidcTokenRequestUrl = ({\n audience,\n requestUrl,\n}: {\n audience: string\n requestUrl: string\n}): CliResult | string => {\n try {\n const url = new URL(requestUrl)\n url.searchParams.set('audience', audience)\n\n return url.toString()\n } catch {\n return {\n exitCode: 1,\n stderr: 'ACTIONS_ID_TOKEN_REQUEST_URL is not a valid URL.\\n',\n }\n }\n}\n\nconst readGithubOidcToken = async ({\n args,\n audience,\n httpGet,\n}: {\n args: ParsedCliArgs\n audience: string\n httpGet: HttpGetJson\n}): Promise<CliResult | string> => {\n const tokenEnv = getFlagString(args, 'oidc-token-env')\n\n if (tokenEnv) {\n const token = process.env[tokenEnv]\n\n if (!token) {\n return {\n exitCode: 1,\n stderr: `Environment variable \"${tokenEnv}\" is not set.\\n`,\n }\n }\n\n return token\n }\n\n const requestUrl = process.env.ACTIONS_ID_TOKEN_REQUEST_URL\n const requestToken = process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN\n\n if (!requestUrl || !requestToken) {\n return {\n exitCode: 1,\n stderr:\n 'GitHub OIDC push requires ACTIONS_ID_TOKEN_REQUEST_URL and ACTIONS_ID_TOKEN_REQUEST_TOKEN, or --oidc-token-env.\\n',\n }\n }\n\n const url = getGithubOidcTokenRequestUrl({\n audience,\n requestUrl,\n })\n\n if (typeof url !== 'string') {\n return url\n }\n\n const response = await httpGet({\n headers: {\n Authorization: `bearer ${requestToken}`,\n },\n url,\n })\n\n if (!response.ok || !isRecord(response.body) || typeof response.body.value !== 'string') {\n return {\n exitCode: 1,\n stderr: `Could not retrieve GitHub OIDC token. HTTP status ${response.status}.\\n`,\n }\n }\n\n return response.body.value\n}\n\nconst getPushCommandOptions = async (\n args: ParsedCliArgs,\n): Promise<CliResult | PushCommandOptions> => {\n const docsOptions = getDocsCommandOptions(args)\n\n if ('exitCode' in docsOptions) {\n return docsOptions\n }\n\n const endpointFlag = getFlagString(args, 'endpoint')\n\n if (!endpointFlag) {\n return {\n exitCode: 1,\n stderr: 'Push requires --endpoint <url>.\\n',\n }\n }\n\n const endpoint = validateEndpointUrl(endpointFlag)\n\n if (typeof endpoint !== 'string') {\n return endpoint\n }\n\n if (getFlagBoolean(args, 'dry-run') && getFlagBoolean(args, 'sync')) {\n return {\n exitCode: 1,\n stderr: 'Use either --dry-run or --sync, not both.\\n',\n }\n }\n\n const deleteBehaviorFlag = getFlagString(args, 'delete-behavior')\n\n if (\n deleteBehaviorFlag !== undefined &&\n !supportedPushDeleteBehaviors.has(deleteBehaviorFlag as DocsDeleteBehavior)\n ) {\n return {\n exitCode: 1,\n stderr: '--delete-behavior for push must be archive, delete, draft, or ignore.\\n',\n }\n }\n\n const mode: PushCommandOptions['mode'] = getFlagBoolean(args, 'sync')\n ? 'sync'\n : 'dry-run'\n const baseOptions = {\n ...docsOptions,\n deleteBehavior: deleteBehaviorFlag as DocsDeleteBehavior | undefined,\n endpoint,\n mode,\n publish: getFlagBoolean(args, 'publish'),\n }\n\n if (getFlagBoolean(args, 'github-oidc')) {\n if (getFlagString(args, 'key-id')) {\n return {\n exitCode: 1,\n stderr: 'Do not use --key-id with --github-oidc.\\n',\n }\n }\n\n if (getFlagString(args, 'private-key-file') || getFlagString(args, 'private-key-env')) {\n return {\n exitCode: 1,\n stderr: 'Do not use Ed25519 private key flags with --github-oidc.\\n',\n }\n }\n\n return {\n ...baseOptions,\n authMode: 'github-oidc',\n oidcTokenEnv: getFlagString(args, 'oidc-token-env'),\n }\n }\n\n const keyId = getFlagString(args, 'key-id')\n\n if (!keyId) {\n return {\n exitCode: 1,\n stderr: 'Push requires --key-id <id>.\\n',\n }\n }\n\n const privateKey = await readPrivateKey(args)\n\n if (typeof privateKey !== 'string') {\n return privateKey\n }\n\n return {\n ...baseOptions,\n authMode: 'ed25519',\n keyId,\n privateKey,\n }\n}\n\nconst formatServerFailure = ({\n body,\n status,\n}: {\n body: unknown\n status: number\n}): string => {\n if (isServerPushResponse(body) && body.error?.message) {\n return `${body.error.message}\\n`\n }\n\n return `Sync request failed with HTTP status ${status}.\\n`\n}\n\nexport const runPushCommand = async (\n args: ParsedCliArgs,\n httpPost: HttpPostJson = postJson,\n httpGet: HttpGetJson = getJson,\n): Promise<CliResult> => {\n const options = await getPushCommandOptions(args)\n\n if ('exitCode' in options) {\n return options\n }\n\n const files = await walkDocsFiles({\n root: options.docsRoot,\n })\n const aiExport = await readDocsAiExportManifest({\n root: options.docsRoot,\n })\n\n if (!aiExport.ok) {\n return {\n exitCode: 1,\n stderr: `AI export manifest is invalid.\\n\\nErrors:\\n${formatIssues(aiExport.issues)}\\n`,\n }\n }\n\n const manifest = buildDocsManifest({\n aiExport: aiExport.manifest,\n branch: options.branch,\n commit: options.commit,\n deleteBehavior: options.deleteBehavior ?? 'archive',\n files,\n mode: options.mode,\n publish: options.publish,\n repository: options.repository,\n sourceId: options.sourceId,\n })\n const validation = validateDocsManifest(manifest, {\n maxFileBytes: options.maxFileBytes,\n maxFiles: options.maxFiles,\n maxTotalBytes: options.maxTotalBytes,\n routeBase: `/${options.sourceId}`,\n })\n\n if (!validation.ok) {\n return {\n exitCode: 1,\n stderr: `Manifest is invalid.\\n\\nErrors:\\n${formatIssues(validation.issues)}\\n`,\n }\n }\n\n const body = JSON.stringify(manifest)\n let signedRequest:\n | {\n body: string\n headers: Record<string, string>\n }\n | ReturnType<typeof signDocsSyncRequest>\n\n if (options.authMode === 'github-oidc') {\n const oidcToken = await readGithubOidcToken({\n args,\n audience: options.sourceId,\n httpGet,\n })\n\n if (typeof oidcToken !== 'string') {\n return oidcToken\n }\n\n signedRequest = {\n body,\n headers: {\n Authorization: `Bearer ${oidcToken}`,\n 'Content-Type': 'application/json',\n 'X-VL-MD-DOCS-Body-SHA256': sha256Hex(body),\n },\n }\n } else {\n try {\n signedRequest = signDocsSyncRequest({\n body,\n endpoint: options.endpoint,\n keyId: options.keyId,\n privateKey: options.privateKey,\n })\n } catch (error) {\n if (error instanceof DocsSyncKeyError) {\n return {\n exitCode: 1,\n stderr: `${error.message}\\n`,\n }\n }\n\n throw error\n }\n }\n\n const response = await httpPost({\n body: signedRequest.body,\n headers: signedRequest.headers,\n url: options.endpoint,\n })\n\n if (getFlagBoolean(args, 'json')) {\n return {\n exitCode:\n response.ok &&\n isServerPushResponse(response.body) &&\n response.body.ok === true\n ? 0\n : 1,\n stdout: printJson(\n {\n endpoint: options.endpoint,\n mode: options.mode,\n response: response.body,\n sourceId: options.sourceId,\n status: response.status,\n },\n getFlagBoolean(args, 'pretty'),\n ),\n }\n }\n\n if (\n !response.ok ||\n !isServerPushResponse(response.body) ||\n response.body.ok !== true\n ) {\n return {\n exitCode: 1,\n stderr: formatServerFailure({\n body: response.body,\n status: response.status,\n }),\n }\n }\n\n return {\n exitCode: 0,\n stdout: formatPushSummary({\n endpoint: options.endpoint,\n mode: options.mode,\n response: response.body,\n sourceId: options.sourceId,\n }),\n }\n}\n"],"names":["readFile","DocsSyncKeyError","signDocsSyncRequest","buildDocsManifest","sha256Hex","validateDocsManifest","readDocsAiExportManifest","walkDocsFiles","formatIssues","formatPushSummary","printJson","getJson","postJson","getFlagBoolean","getFlagString","getDocsCommandOptions","supportedPushDeleteBehaviors","Set","isRecord","value","Array","isArray","isServerPushResponse","validateEndpointUrl","endpoint","parsed","URL","protocol","exitCode","stderr","toString","readPrivateKey","args","privateKeyFile","privateKeyEnv","privateKey","process","env","error","Error","message","getGithubOidcTokenRequestUrl","audience","requestUrl","url","searchParams","set","readGithubOidcToken","httpGet","tokenEnv","token","ACTIONS_ID_TOKEN_REQUEST_URL","requestToken","ACTIONS_ID_TOKEN_REQUEST_TOKEN","response","headers","Authorization","ok","body","status","getPushCommandOptions","docsOptions","endpointFlag","deleteBehaviorFlag","undefined","has","mode","baseOptions","deleteBehavior","publish","authMode","oidcTokenEnv","keyId","formatServerFailure","runPushCommand","httpPost","options","files","root","docsRoot","aiExport","issues","manifest","branch","commit","repository","sourceId","validation","maxFileBytes","maxFiles","maxTotalBytes","routeBase","JSON","stringify","signedRequest","oidcToken","stdout"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/cli/commands/push.ts"],"sourcesContent":["import { readFile } from 'node:fs/promises'\n\nimport type { DocsDeleteBehavior } from '../../sync/index.js'\nimport type { HttpGetJson, HttpPostJson } from '../http.js'\nimport type { CliResult, ParsedCliArgs, PushCommandOptions } from '../types.js'\n\nimport { DocsSyncKeyError, signDocsSyncRequest } from '../../security/index.js'\nimport { buildDocsManifest, sha256Hex, validateDocsManifest } from '../../sync/index.js'\nimport { readDocsAiExportManifest, walkDocsFiles } from '../filesystem.js'\nimport { formatIssues, formatPushSummary, printJson } from '../format.js'\nimport { getJson, postJson } from '../http.js'\nimport { getFlagBoolean, getFlagString } from '../parseArgs.js'\nimport { getDocsCommandOptions } from './validate.js'\n\nconst supportedPushDeleteBehaviors = new Set<DocsDeleteBehavior>([\n 'archive',\n 'delete',\n 'draft',\n 'ignore',\n])\n\ntype ServerPushResponse = {\n deleteBehavior?: string\n error?: {\n code?: string\n message?: string\n }\n ok?: boolean\n publishRequested?: boolean\n summary?: {\n archive?: number\n create?: number\n delete?: number\n draft?: number\n unchanged?: number\n update?: number\n warnings?: number\n }\n syncRunId?: string\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isServerPushResponse = (value: unknown): value is ServerPushResponse => isRecord(value)\n\nconst validateEndpointUrl = (endpoint: string): CliResult | string => {\n try {\n const parsed = new URL(endpoint)\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n return {\n exitCode: 1,\n stderr: '--endpoint must be a full http:// or https:// URL.\\n',\n }\n }\n\n return parsed.toString()\n } catch {\n return {\n exitCode: 1,\n stderr: '--endpoint must be a valid full http:// or https:// URL.\\n',\n }\n }\n}\n\nconst readPrivateKey = async (args: ParsedCliArgs): Promise<CliResult | string> => {\n const privateKeyFile = getFlagString(args, 'private-key-file')\n const privateKeyEnv = getFlagString(args, 'private-key-env')\n\n if (privateKeyFile && privateKeyEnv) {\n return {\n exitCode: 1,\n stderr: 'Use either --private-key-file or --private-key-env, not both.\\n',\n }\n }\n\n if (!privateKeyFile && !privateKeyEnv) {\n return {\n exitCode: 1,\n stderr: 'Push requires --private-key-file or --private-key-env.\\n',\n }\n }\n\n if (privateKeyEnv) {\n const privateKey = process.env[privateKeyEnv]\n\n if (!privateKey) {\n return {\n exitCode: 1,\n stderr: `Environment variable \"${privateKeyEnv}\" is not set.\\n`,\n }\n }\n\n return privateKey\n }\n\n try {\n return await readFile(privateKeyFile ?? '', 'utf8')\n } catch (error) {\n return {\n exitCode: 1,\n stderr:\n error instanceof Error\n ? `Could not read private key file: ${error.message}\\n`\n : 'Could not read private key file.\\n',\n }\n }\n}\n\nconst getGithubOidcTokenRequestUrl = ({\n audience,\n requestUrl,\n}: {\n audience: string\n requestUrl: string\n}): CliResult | string => {\n try {\n const url = new URL(requestUrl)\n url.searchParams.set('audience', audience)\n\n return url.toString()\n } catch {\n return {\n exitCode: 1,\n stderr: 'ACTIONS_ID_TOKEN_REQUEST_URL is not a valid URL.\\n',\n }\n }\n}\n\nconst readGithubOidcToken = async ({\n args,\n audience,\n httpGet,\n}: {\n args: ParsedCliArgs\n audience: string\n httpGet: HttpGetJson\n}): Promise<CliResult | string> => {\n const tokenEnv = getFlagString(args, 'oidc-token-env')\n\n if (tokenEnv) {\n const token = process.env[tokenEnv]\n\n if (!token) {\n return {\n exitCode: 1,\n stderr: `Environment variable \"${tokenEnv}\" is not set.\\n`,\n }\n }\n\n return token\n }\n\n const requestUrl = process.env.ACTIONS_ID_TOKEN_REQUEST_URL\n const requestToken = process.env.ACTIONS_ID_TOKEN_REQUEST_TOKEN\n\n if (!requestUrl || !requestToken) {\n return {\n exitCode: 1,\n stderr:\n 'GitHub OIDC push requires ACTIONS_ID_TOKEN_REQUEST_URL and ACTIONS_ID_TOKEN_REQUEST_TOKEN, or --oidc-token-env.\\n',\n }\n }\n\n const url = getGithubOidcTokenRequestUrl({\n audience,\n requestUrl,\n })\n\n if (typeof url !== 'string') {\n return url\n }\n\n const response = await httpGet({\n headers: {\n Authorization: `bearer ${requestToken}`,\n },\n url,\n })\n\n if (!response.ok || !isRecord(response.body) || typeof response.body.value !== 'string') {\n return {\n exitCode: 1,\n stderr: `Could not retrieve GitHub OIDC token. HTTP status ${response.status}.\\n`,\n }\n }\n\n return response.body.value\n}\n\nconst getPushCommandOptions = async (\n args: ParsedCliArgs,\n): Promise<CliResult | PushCommandOptions> => {\n const docsOptions = getDocsCommandOptions(args)\n\n if ('exitCode' in docsOptions) {\n return docsOptions\n }\n\n const endpointFlag = getFlagString(args, 'endpoint')\n\n if (!endpointFlag) {\n return {\n exitCode: 1,\n stderr: 'Push requires --endpoint <url>.\\n',\n }\n }\n\n const endpoint = validateEndpointUrl(endpointFlag)\n\n if (typeof endpoint !== 'string') {\n return endpoint\n }\n\n if (getFlagBoolean(args, 'dry-run') && getFlagBoolean(args, 'sync')) {\n return {\n exitCode: 1,\n stderr: 'Use either --dry-run or --sync, not both.\\n',\n }\n }\n\n const deleteBehaviorFlag = getFlagString(args, 'delete-behavior')\n\n if (\n deleteBehaviorFlag !== undefined &&\n !supportedPushDeleteBehaviors.has(deleteBehaviorFlag as DocsDeleteBehavior)\n ) {\n return {\n exitCode: 1,\n stderr: '--delete-behavior for push must be archive, delete, draft, or ignore.\\n',\n }\n }\n\n const mode: PushCommandOptions['mode'] = getFlagBoolean(args, 'sync') ? 'sync' : 'dry-run'\n const baseOptions = {\n ...docsOptions,\n deleteBehavior: deleteBehaviorFlag as DocsDeleteBehavior | undefined,\n endpoint,\n mode,\n publish: getFlagBoolean(args, 'publish'),\n }\n\n if (getFlagBoolean(args, 'github-oidc')) {\n if (getFlagString(args, 'key-id')) {\n return {\n exitCode: 1,\n stderr: 'Do not use --key-id with --github-oidc.\\n',\n }\n }\n\n if (getFlagString(args, 'private-key-file') || getFlagString(args, 'private-key-env')) {\n return {\n exitCode: 1,\n stderr: 'Do not use Ed25519 private key flags with --github-oidc.\\n',\n }\n }\n\n return {\n ...baseOptions,\n authMode: 'github-oidc',\n oidcTokenEnv: getFlagString(args, 'oidc-token-env'),\n }\n }\n\n const keyId = getFlagString(args, 'key-id')\n\n if (!keyId) {\n return {\n exitCode: 1,\n stderr: 'Push requires --key-id <id>.\\n',\n }\n }\n\n const privateKey = await readPrivateKey(args)\n\n if (typeof privateKey !== 'string') {\n return privateKey\n }\n\n return {\n ...baseOptions,\n authMode: 'ed25519',\n keyId,\n privateKey,\n }\n}\n\nconst formatServerFailure = ({ body, status }: { body: unknown; status: number }): string => {\n if (isServerPushResponse(body) && body.error?.message) {\n return `${body.error.message}\\n`\n }\n\n return `Sync request failed with HTTP status ${status}.\\n`\n}\n\nexport const runPushCommand = async (\n args: ParsedCliArgs,\n httpPost: HttpPostJson = postJson,\n httpGet: HttpGetJson = getJson,\n): Promise<CliResult> => {\n const options = await getPushCommandOptions(args)\n\n if ('exitCode' in options) {\n return options\n }\n\n const files = await walkDocsFiles({\n root: options.docsRoot,\n })\n const aiExport = await readDocsAiExportManifest({\n root: options.docsRoot,\n })\n\n if (!aiExport.ok) {\n return {\n exitCode: 1,\n stderr: `AI export manifest is invalid.\\n\\nErrors:\\n${formatIssues(aiExport.issues)}\\n`,\n }\n }\n\n const manifest = buildDocsManifest({\n aiExport: aiExport.manifest,\n branch: options.branch,\n commit: options.commit,\n deleteBehavior: options.deleteBehavior ?? 'archive',\n files,\n mode: options.mode,\n publish: options.publish,\n repository: options.repository,\n sourceId: options.sourceId,\n })\n const validation = validateDocsManifest(manifest, {\n maxFileBytes: options.maxFileBytes,\n maxFiles: options.maxFiles,\n maxTotalBytes: options.maxTotalBytes,\n routeBase: `/${options.sourceId}`,\n })\n\n if (!validation.ok) {\n return {\n exitCode: 1,\n stderr: `Manifest is invalid.\\n\\nErrors:\\n${formatIssues(validation.issues)}\\n`,\n }\n }\n\n const body = JSON.stringify(manifest)\n let signedRequest:\n | {\n body: string\n headers: Record<string, string>\n }\n | ReturnType<typeof signDocsSyncRequest>\n\n if (options.authMode === 'github-oidc') {\n const oidcToken = await readGithubOidcToken({\n args,\n audience: options.sourceId,\n httpGet,\n })\n\n if (typeof oidcToken !== 'string') {\n return oidcToken\n }\n\n signedRequest = {\n body,\n headers: {\n Authorization: `Bearer ${oidcToken}`,\n 'Content-Type': 'application/json',\n 'X-VL-MD-DOCS-Body-SHA256': sha256Hex(body),\n },\n }\n } else {\n try {\n signedRequest = signDocsSyncRequest({\n body,\n endpoint: options.endpoint,\n keyId: options.keyId,\n privateKey: options.privateKey,\n })\n } catch (error) {\n if (error instanceof DocsSyncKeyError) {\n return {\n exitCode: 1,\n stderr: `${error.message}\\n`,\n }\n }\n\n throw error\n }\n }\n\n const response = await httpPost({\n body: signedRequest.body,\n headers: signedRequest.headers,\n url: options.endpoint,\n })\n\n if (getFlagBoolean(args, 'json')) {\n return {\n exitCode:\n response.ok && isServerPushResponse(response.body) && response.body.ok === true ? 0 : 1,\n stdout: printJson(\n {\n endpoint: options.endpoint,\n mode: options.mode,\n response: response.body,\n sourceId: options.sourceId,\n status: response.status,\n },\n getFlagBoolean(args, 'pretty'),\n ),\n }\n }\n\n if (!response.ok || !isServerPushResponse(response.body) || response.body.ok !== true) {\n return {\n exitCode: 1,\n stderr: formatServerFailure({\n body: response.body,\n status: response.status,\n }),\n }\n }\n\n return {\n exitCode: 0,\n stdout: formatPushSummary({\n endpoint: options.endpoint,\n mode: options.mode,\n response: response.body,\n sourceId: options.sourceId,\n }),\n }\n}\n"],"names":["readFile","DocsSyncKeyError","signDocsSyncRequest","buildDocsManifest","sha256Hex","validateDocsManifest","readDocsAiExportManifest","walkDocsFiles","formatIssues","formatPushSummary","printJson","getJson","postJson","getFlagBoolean","getFlagString","getDocsCommandOptions","supportedPushDeleteBehaviors","Set","isRecord","value","Array","isArray","isServerPushResponse","validateEndpointUrl","endpoint","parsed","URL","protocol","exitCode","stderr","toString","readPrivateKey","args","privateKeyFile","privateKeyEnv","privateKey","process","env","error","Error","message","getGithubOidcTokenRequestUrl","audience","requestUrl","url","searchParams","set","readGithubOidcToken","httpGet","tokenEnv","token","ACTIONS_ID_TOKEN_REQUEST_URL","requestToken","ACTIONS_ID_TOKEN_REQUEST_TOKEN","response","headers","Authorization","ok","body","status","getPushCommandOptions","docsOptions","endpointFlag","deleteBehaviorFlag","undefined","has","mode","baseOptions","deleteBehavior","publish","authMode","oidcTokenEnv","keyId","formatServerFailure","runPushCommand","httpPost","options","files","root","docsRoot","aiExport","issues","manifest","branch","commit","repository","sourceId","validation","maxFileBytes","maxFiles","maxTotalBytes","routeBase","JSON","stringify","signedRequest","oidcToken","stdout"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,mBAAkB;AAM3C,SAASC,gBAAgB,EAAEC,mBAAmB,QAAQ,0BAAyB;AAC/E,SAASC,iBAAiB,EAAEC,SAAS,EAAEC,oBAAoB,QAAQ,sBAAqB;AACxF,SAASC,wBAAwB,EAAEC,aAAa,QAAQ,mBAAkB;AAC1E,SAASC,YAAY,EAAEC,iBAAiB,EAAEC,SAAS,QAAQ,eAAc;AACzE,SAASC,OAAO,EAAEC,QAAQ,QAAQ,aAAY;AAC9C,SAASC,cAAc,EAAEC,aAAa,QAAQ,kBAAiB;AAC/D,SAASC,qBAAqB,QAAQ,gBAAe;AAErD,MAAMC,+BAA+B,IAAIC,IAAwB;IAC/D;IACA;IACA;IACA;CACD;AAsBD,MAAMC,WAAW,CAACC,QAChB,OAAOA,UAAU,YAAYA,UAAU,QAAQ,CAACC,MAAMC,OAAO,CAACF;AAEhE,MAAMG,uBAAuB,CAACH,QAAgDD,SAASC;AAEvF,MAAMI,sBAAsB,CAACC;IAC3B,IAAI;QACF,MAAMC,SAAS,IAAIC,IAAIF;QAEvB,IAAIC,OAAOE,QAAQ,KAAK,WAAWF,OAAOE,QAAQ,KAAK,UAAU;YAC/D,OAAO;gBACLC,UAAU;gBACVC,QAAQ;YACV;QACF;QAEA,OAAOJ,OAAOK,QAAQ;IACxB,EAAE,OAAM;QACN,OAAO;YACLF,UAAU;YACVC,QAAQ;QACV;IACF;AACF;AAEA,MAAME,iBAAiB,OAAOC;IAC5B,MAAMC,iBAAiBnB,cAAckB,MAAM;IAC3C,MAAME,gBAAgBpB,cAAckB,MAAM;IAE1C,IAAIC,kBAAkBC,eAAe;QACnC,OAAO;YACLN,UAAU;YACVC,QAAQ;QACV;IACF;IAEA,IAAI,CAACI,kBAAkB,CAACC,eAAe;QACrC,OAAO;YACLN,UAAU;YACVC,QAAQ;QACV;IACF;IAEA,IAAIK,eAAe;QACjB,MAAMC,aAAaC,QAAQC,GAAG,CAACH,cAAc;QAE7C,IAAI,CAACC,YAAY;YACf,OAAO;gBACLP,UAAU;gBACVC,QAAQ,CAAC,sBAAsB,EAAEK,cAAc,eAAe,CAAC;YACjE;QACF;QAEA,OAAOC;IACT;IAEA,IAAI;QACF,OAAO,MAAMnC,SAASiC,kBAAkB,IAAI;IAC9C,EAAE,OAAOK,OAAO;QACd,OAAO;YACLV,UAAU;YACVC,QACES,iBAAiBC,QACb,CAAC,iCAAiC,EAAED,MAAME,OAAO,CAAC,EAAE,CAAC,GACrD;QACR;IACF;AACF;AAEA,MAAMC,+BAA+B,CAAC,EACpCC,QAAQ,EACRC,UAAU,EAIX;IACC,IAAI;QACF,MAAMC,MAAM,IAAIlB,IAAIiB;QACpBC,IAAIC,YAAY,CAACC,GAAG,CAAC,YAAYJ;QAEjC,OAAOE,IAAId,QAAQ;IACrB,EAAE,OAAM;QACN,OAAO;YACLF,UAAU;YACVC,QAAQ;QACV;IACF;AACF;AAEA,MAAMkB,sBAAsB,OAAO,EACjCf,IAAI,EACJU,QAAQ,EACRM,OAAO,EAKR;IACC,MAAMC,WAAWnC,cAAckB,MAAM;IAErC,IAAIiB,UAAU;QACZ,MAAMC,QAAQd,QAAQC,GAAG,CAACY,SAAS;QAEnC,IAAI,CAACC,OAAO;YACV,OAAO;gBACLtB,UAAU;gBACVC,QAAQ,CAAC,sBAAsB,EAAEoB,SAAS,eAAe,CAAC;YAC5D;QACF;QAEA,OAAOC;IACT;IAEA,MAAMP,aAAaP,QAAQC,GAAG,CAACc,4BAA4B;IAC3D,MAAMC,eAAehB,QAAQC,GAAG,CAACgB,8BAA8B;IAE/D,IAAI,CAACV,cAAc,CAACS,cAAc;QAChC,OAAO;YACLxB,UAAU;YACVC,QACE;QACJ;IACF;IAEA,MAAMe,MAAMH,6BAA6B;QACvCC;QACAC;IACF;IAEA,IAAI,OAAOC,QAAQ,UAAU;QAC3B,OAAOA;IACT;IAEA,MAAMU,WAAW,MAAMN,QAAQ;QAC7BO,SAAS;YACPC,eAAe,CAAC,OAAO,EAAEJ,cAAc;QACzC;QACAR;IACF;IAEA,IAAI,CAACU,SAASG,EAAE,IAAI,CAACvC,SAASoC,SAASI,IAAI,KAAK,OAAOJ,SAASI,IAAI,CAACvC,KAAK,KAAK,UAAU;QACvF,OAAO;YACLS,UAAU;YACVC,QAAQ,CAAC,kDAAkD,EAAEyB,SAASK,MAAM,CAAC,GAAG,CAAC;QACnF;IACF;IAEA,OAAOL,SAASI,IAAI,CAACvC,KAAK;AAC5B;AAEA,MAAMyC,wBAAwB,OAC5B5B;IAEA,MAAM6B,cAAc9C,sBAAsBiB;IAE1C,IAAI,cAAc6B,aAAa;QAC7B,OAAOA;IACT;IAEA,MAAMC,eAAehD,cAAckB,MAAM;IAEzC,IAAI,CAAC8B,cAAc;QACjB,OAAO;YACLlC,UAAU;YACVC,QAAQ;QACV;IACF;IAEA,MAAML,WAAWD,oBAAoBuC;IAErC,IAAI,OAAOtC,aAAa,UAAU;QAChC,OAAOA;IACT;IAEA,IAAIX,eAAemB,MAAM,cAAcnB,eAAemB,MAAM,SAAS;QACnE,OAAO;YACLJ,UAAU;YACVC,QAAQ;QACV;IACF;IAEA,MAAMkC,qBAAqBjD,cAAckB,MAAM;IAE/C,IACE+B,uBAAuBC,aACvB,CAAChD,6BAA6BiD,GAAG,CAACF,qBAClC;QACA,OAAO;YACLnC,UAAU;YACVC,QAAQ;QACV;IACF;IAEA,MAAMqC,OAAmCrD,eAAemB,MAAM,UAAU,SAAS;IACjF,MAAMmC,cAAc;QAClB,GAAGN,WAAW;QACdO,gBAAgBL;QAChBvC;QACA0C;QACAG,SAASxD,eAAemB,MAAM;IAChC;IAEA,IAAInB,eAAemB,MAAM,gBAAgB;QACvC,IAAIlB,cAAckB,MAAM,WAAW;YACjC,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;YACV;QACF;QAEA,IAAIf,cAAckB,MAAM,uBAAuBlB,cAAckB,MAAM,oBAAoB;YACrF,OAAO;gBACLJ,UAAU;gBACVC,QAAQ;YACV;QACF;QAEA,OAAO;YACL,GAAGsC,WAAW;YACdG,UAAU;YACVC,cAAczD,cAAckB,MAAM;QACpC;IACF;IAEA,MAAMwC,QAAQ1D,cAAckB,MAAM;IAElC,IAAI,CAACwC,OAAO;QACV,OAAO;YACL5C,UAAU;YACVC,QAAQ;QACV;IACF;IAEA,MAAMM,aAAa,MAAMJ,eAAeC;IAExC,IAAI,OAAOG,eAAe,UAAU;QAClC,OAAOA;IACT;IAEA,OAAO;QACL,GAAGgC,WAAW;QACdG,UAAU;QACVE;QACArC;IACF;AACF;AAEA,MAAMsC,sBAAsB,CAAC,EAAEf,IAAI,EAAEC,MAAM,EAAqC;IAC9E,IAAIrC,qBAAqBoC,SAASA,KAAKpB,KAAK,EAAEE,SAAS;QACrD,OAAO,GAAGkB,KAAKpB,KAAK,CAACE,OAAO,CAAC,EAAE,CAAC;IAClC;IAEA,OAAO,CAAC,qCAAqC,EAAEmB,OAAO,GAAG,CAAC;AAC5D;AAEA,OAAO,MAAMe,iBAAiB,OAC5B1C,MACA2C,WAAyB/D,QAAQ,EACjCoC,UAAuBrC,OAAO;IAE9B,MAAMiE,UAAU,MAAMhB,sBAAsB5B;IAE5C,IAAI,cAAc4C,SAAS;QACzB,OAAOA;IACT;IAEA,MAAMC,QAAQ,MAAMtE,cAAc;QAChCuE,MAAMF,QAAQG,QAAQ;IACxB;IACA,MAAMC,WAAW,MAAM1E,yBAAyB;QAC9CwE,MAAMF,QAAQG,QAAQ;IACxB;IAEA,IAAI,CAACC,SAASvB,EAAE,EAAE;QAChB,OAAO;YACL7B,UAAU;YACVC,QAAQ,CAAC,2CAA2C,EAAErB,aAAawE,SAASC,MAAM,EAAE,EAAE,CAAC;QACzF;IACF;IAEA,MAAMC,WAAW/E,kBAAkB;QACjC6E,UAAUA,SAASE,QAAQ;QAC3BC,QAAQP,QAAQO,MAAM;QACtBC,QAAQR,QAAQQ,MAAM;QACtBhB,gBAAgBQ,QAAQR,cAAc,IAAI;QAC1CS;QACAX,MAAMU,QAAQV,IAAI;QAClBG,SAASO,QAAQP,OAAO;QACxBgB,YAAYT,QAAQS,UAAU;QAC9BC,UAAUV,QAAQU,QAAQ;IAC5B;IACA,MAAMC,aAAalF,qBAAqB6E,UAAU;QAChDM,cAAcZ,QAAQY,YAAY;QAClCC,UAAUb,QAAQa,QAAQ;QAC1BC,eAAed,QAAQc,aAAa;QACpCC,WAAW,CAAC,CAAC,EAAEf,QAAQU,QAAQ,EAAE;IACnC;IAEA,IAAI,CAACC,WAAW9B,EAAE,EAAE;QAClB,OAAO;YACL7B,UAAU;YACVC,QAAQ,CAAC,iCAAiC,EAAErB,aAAa+E,WAAWN,MAAM,EAAE,EAAE,CAAC;QACjF;IACF;IAEA,MAAMvB,OAAOkC,KAAKC,SAAS,CAACX;IAC5B,IAAIY;IAOJ,IAAIlB,QAAQN,QAAQ,KAAK,eAAe;QACtC,MAAMyB,YAAY,MAAMhD,oBAAoB;YAC1Cf;YACAU,UAAUkC,QAAQU,QAAQ;YAC1BtC;QACF;QAEA,IAAI,OAAO+C,cAAc,UAAU;YACjC,OAAOA;QACT;QAEAD,gBAAgB;YACdpC;YACAH,SAAS;gBACPC,eAAe,CAAC,OAAO,EAAEuC,WAAW;gBACpC,gBAAgB;gBAChB,4BAA4B3F,UAAUsD;YACxC;QACF;IACF,OAAO;QACL,IAAI;YACFoC,gBAAgB5F,oBAAoB;gBAClCwD;gBACAlC,UAAUoD,QAAQpD,QAAQ;gBAC1BgD,OAAOI,QAAQJ,KAAK;gBACpBrC,YAAYyC,QAAQzC,UAAU;YAChC;QACF,EAAE,OAAOG,OAAO;YACd,IAAIA,iBAAiBrC,kBAAkB;gBACrC,OAAO;oBACL2B,UAAU;oBACVC,QAAQ,GAAGS,MAAME,OAAO,CAAC,EAAE,CAAC;gBAC9B;YACF;YAEA,MAAMF;QACR;IACF;IAEA,MAAMgB,WAAW,MAAMqB,SAAS;QAC9BjB,MAAMoC,cAAcpC,IAAI;QACxBH,SAASuC,cAAcvC,OAAO;QAC9BX,KAAKgC,QAAQpD,QAAQ;IACvB;IAEA,IAAIX,eAAemB,MAAM,SAAS;QAChC,OAAO;YACLJ,UACE0B,SAASG,EAAE,IAAInC,qBAAqBgC,SAASI,IAAI,KAAKJ,SAASI,IAAI,CAACD,EAAE,KAAK,OAAO,IAAI;YACxFuC,QAAQtF,UACN;gBACEc,UAAUoD,QAAQpD,QAAQ;gBAC1B0C,MAAMU,QAAQV,IAAI;gBAClBZ,UAAUA,SAASI,IAAI;gBACvB4B,UAAUV,QAAQU,QAAQ;gBAC1B3B,QAAQL,SAASK,MAAM;YACzB,GACA9C,eAAemB,MAAM;QAEzB;IACF;IAEA,IAAI,CAACsB,SAASG,EAAE,IAAI,CAACnC,qBAAqBgC,SAASI,IAAI,KAAKJ,SAASI,IAAI,CAACD,EAAE,KAAK,MAAM;QACrF,OAAO;YACL7B,UAAU;YACVC,QAAQ4C,oBAAoB;gBAC1Bf,MAAMJ,SAASI,IAAI;gBACnBC,QAAQL,SAASK,MAAM;YACzB;QACF;IACF;IAEA,OAAO;QACL/B,UAAU;QACVoE,QAAQvF,kBAAkB;YACxBe,UAAUoD,QAAQpD,QAAQ;YAC1B0C,MAAMU,QAAQV,IAAI;YAClBZ,UAAUA,SAASI,IAAI;YACvB4B,UAAUV,QAAQU,QAAQ;QAC5B;IACF;AACF,EAAC"}
@@ -1,13 +1,11 @@
1
1
  import type { DocsSyncPlan, DocsValidationIssue, DocsValidationResult } from '../sync/index.js';
2
2
  export type PushSummaryInput = {
3
3
  deleteBehavior?: string;
4
- effectivePublishMode?: string;
5
4
  endpoint: string;
6
5
  mode: 'dry-run' | 'sync';
7
6
  publishRequested?: boolean;
8
7
  response: {
9
8
  deleteBehavior?: string;
10
- effectivePublishMode?: string;
11
9
  ok?: boolean;
12
10
  publishRequested?: boolean;
13
11
  summary?: {
@@ -31,5 +29,5 @@ export declare const formatValidationSummary: ({ fileCount, root, sourceId, vali
31
29
  validation: DocsValidationResult;
32
30
  }) => string;
33
31
  export declare const formatPlanSummary: (plan: DocsSyncPlan) => string;
34
- export declare const formatPushSummary: ({ deleteBehavior, effectivePublishMode, endpoint, mode, publishRequested, response, sourceId, }: PushSummaryInput) => string;
32
+ export declare const formatPushSummary: ({ deleteBehavior, endpoint, mode, publishRequested, response, sourceId, }: PushSummaryInput) => string;
35
33
  export declare const printJson: (value: unknown, pretty?: boolean) => string;
@@ -44,7 +44,7 @@ export const formatPlanSummary = (plan)=>{
44
44
  }
45
45
  return `${lines.join('\n')}\n`;
46
46
  };
47
- export const formatPushSummary = ({ deleteBehavior, effectivePublishMode, endpoint, mode, publishRequested, response, sourceId })=>{
47
+ export const formatPushSummary = ({ deleteBehavior, endpoint, mode, publishRequested, response, sourceId })=>{
48
48
  const summary = response.summary ?? {};
49
49
  const lines = [
50
50
  'payload-markdown-docs push',
@@ -53,7 +53,6 @@ export const formatPushSummary = ({ deleteBehavior, effectivePublishMode, endpoi
53
53
  `Mode: ${mode}`,
54
54
  `Source: ${sourceId}`,
55
55
  `Publish requested: ${(publishRequested ?? response.publishRequested) === true ? 'yes' : 'no'}`,
56
- `Publish mode: ${effectivePublishMode ?? response.effectivePublishMode ?? 'unknown'}`,
57
56
  `Delete behavior: ${deleteBehavior ?? response.deleteBehavior ?? 'unknown'}`,
58
57
  '',
59
58
  `Create: ${summary.create ?? 0}`,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/format.ts"],"sourcesContent":["import type {\n DocsSyncPlan,\n DocsValidationIssue,\n DocsValidationResult,\n} from '../sync/index.js'\n\nexport type PushSummaryInput = {\n deleteBehavior?: string\n effectivePublishMode?: string\n endpoint: string\n mode: 'dry-run' | 'sync'\n publishRequested?: boolean\n response: {\n deleteBehavior?: string\n effectivePublishMode?: string\n ok?: boolean\n publishRequested?: boolean\n summary?: {\n archive?: number\n create?: number\n delete?: number\n draft?: number\n unchanged?: number\n update?: number\n warnings?: number\n }\n syncRunId?: string\n }\n sourceId: string\n}\n\nconst formatIssue = (issue: DocsValidationIssue): string => {\n if (issue.path) {\n return `- ${issue.path}: ${issue.message}`\n }\n\n return `- ${issue.message}`\n}\n\nexport const formatIssues = (issues: DocsValidationIssue[]): string => {\n if (issues.length === 0) {\n return ''\n }\n\n return issues.map(formatIssue).join('\\n')\n}\n\nexport const formatValidationSummary = ({\n fileCount,\n root,\n sourceId,\n validation,\n}: {\n fileCount: number\n root: string\n sourceId: string\n validation: DocsValidationResult\n}): string => {\n const lines = [\n 'payload-markdown-docs validate',\n '',\n `Source: ${sourceId}`,\n `Root: ${root}`,\n `Files: ${fileCount}`,\n `Status: ${validation.ok ? 'valid' : 'invalid'}`,\n ]\n\n if (validation.warnings.length > 0) {\n lines.push('', 'Warnings:', formatIssues(validation.warnings))\n }\n\n if (!validation.ok && validation.issues.length > 0) {\n lines.push('', 'Errors:', formatIssues(validation.issues))\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport const formatPlanSummary = (plan: DocsSyncPlan): string => {\n const lines = [\n 'payload-markdown-docs plan',\n '',\n `Create: ${plan.create.length}`,\n `Update: ${plan.update.length}`,\n `Unchanged: ${plan.unchanged.length}`,\n `Archive: ${plan.archive.length}`,\n `Delete: ${plan.delete.length}`,\n `Draft: ${plan.draft.length}`,\n `Warnings: ${plan.warnings.length}`,\n ]\n\n if (plan.warnings.length > 0) {\n lines.push('', 'Warnings:', formatIssues(plan.warnings))\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport const formatPushSummary = ({\n deleteBehavior,\n effectivePublishMode,\n endpoint,\n mode,\n publishRequested,\n response,\n sourceId,\n}: PushSummaryInput): string => {\n const summary = response.summary ?? {}\n const lines = [\n 'payload-markdown-docs push',\n '',\n `Endpoint: ${endpoint}`,\n `Mode: ${mode}`,\n `Source: ${sourceId}`,\n `Publish requested: ${\n (publishRequested ?? response.publishRequested) === true ? 'yes' : 'no'\n }`,\n `Publish mode: ${\n effectivePublishMode ?? response.effectivePublishMode ?? 'unknown'\n }`,\n `Delete behavior: ${deleteBehavior ?? response.deleteBehavior ?? 'unknown'}`,\n '',\n `Create: ${summary.create ?? 0}`,\n `Update: ${summary.update ?? 0}`,\n `Unchanged: ${summary.unchanged ?? 0}`,\n `Archive: ${summary.archive ?? 0}`,\n `Delete: ${summary.delete ?? 0}`,\n `Draft: ${summary.draft ?? 0}`,\n `Warnings: ${summary.warnings ?? 0}`,\n '',\n `Status: ${mode === 'sync' ? 'applied' : 'accepted'}`,\n ]\n\n if (response.syncRunId) {\n lines.push(`Sync run: ${response.syncRunId}`)\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport const printJson = (value: unknown, pretty = false): string =>\n `${JSON.stringify(value, null, pretty ? 2 : 0)}\\n`\n"],"names":["formatIssue","issue","path","message","formatIssues","issues","length","map","join","formatValidationSummary","fileCount","root","sourceId","validation","lines","ok","warnings","push","formatPlanSummary","plan","create","update","unchanged","archive","delete","draft","formatPushSummary","deleteBehavior","effectivePublishMode","endpoint","mode","publishRequested","response","summary","syncRunId","printJson","value","pretty","JSON","stringify"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/cli/format.ts"],"sourcesContent":["import type { DocsSyncPlan, DocsValidationIssue, DocsValidationResult } from '../sync/index.js'\n\nexport type PushSummaryInput = {\n deleteBehavior?: string\n endpoint: string\n mode: 'dry-run' | 'sync'\n publishRequested?: boolean\n response: {\n deleteBehavior?: string\n ok?: boolean\n publishRequested?: boolean\n summary?: {\n archive?: number\n create?: number\n delete?: number\n draft?: number\n unchanged?: number\n update?: number\n warnings?: number\n }\n syncRunId?: string\n }\n sourceId: string\n}\n\nconst formatIssue = (issue: DocsValidationIssue): string => {\n if (issue.path) {\n return `- ${issue.path}: ${issue.message}`\n }\n\n return `- ${issue.message}`\n}\n\nexport const formatIssues = (issues: DocsValidationIssue[]): string => {\n if (issues.length === 0) {\n return ''\n }\n\n return issues.map(formatIssue).join('\\n')\n}\n\nexport const formatValidationSummary = ({\n fileCount,\n root,\n sourceId,\n validation,\n}: {\n fileCount: number\n root: string\n sourceId: string\n validation: DocsValidationResult\n}): string => {\n const lines = [\n 'payload-markdown-docs validate',\n '',\n `Source: ${sourceId}`,\n `Root: ${root}`,\n `Files: ${fileCount}`,\n `Status: ${validation.ok ? 'valid' : 'invalid'}`,\n ]\n\n if (validation.warnings.length > 0) {\n lines.push('', 'Warnings:', formatIssues(validation.warnings))\n }\n\n if (!validation.ok && validation.issues.length > 0) {\n lines.push('', 'Errors:', formatIssues(validation.issues))\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport const formatPlanSummary = (plan: DocsSyncPlan): string => {\n const lines = [\n 'payload-markdown-docs plan',\n '',\n `Create: ${plan.create.length}`,\n `Update: ${plan.update.length}`,\n `Unchanged: ${plan.unchanged.length}`,\n `Archive: ${plan.archive.length}`,\n `Delete: ${plan.delete.length}`,\n `Draft: ${plan.draft.length}`,\n `Warnings: ${plan.warnings.length}`,\n ]\n\n if (plan.warnings.length > 0) {\n lines.push('', 'Warnings:', formatIssues(plan.warnings))\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport const formatPushSummary = ({\n deleteBehavior,\n endpoint,\n mode,\n publishRequested,\n response,\n sourceId,\n}: PushSummaryInput): string => {\n const summary = response.summary ?? {}\n const lines = [\n 'payload-markdown-docs push',\n '',\n `Endpoint: ${endpoint}`,\n `Mode: ${mode}`,\n `Source: ${sourceId}`,\n `Publish requested: ${(publishRequested ?? response.publishRequested) === true ? 'yes' : 'no'}`,\n `Delete behavior: ${deleteBehavior ?? response.deleteBehavior ?? 'unknown'}`,\n '',\n `Create: ${summary.create ?? 0}`,\n `Update: ${summary.update ?? 0}`,\n `Unchanged: ${summary.unchanged ?? 0}`,\n `Archive: ${summary.archive ?? 0}`,\n `Delete: ${summary.delete ?? 0}`,\n `Draft: ${summary.draft ?? 0}`,\n `Warnings: ${summary.warnings ?? 0}`,\n '',\n `Status: ${mode === 'sync' ? 'applied' : 'accepted'}`,\n ]\n\n if (response.syncRunId) {\n lines.push(`Sync run: ${response.syncRunId}`)\n }\n\n return `${lines.join('\\n')}\\n`\n}\n\nexport const printJson = (value: unknown, pretty = false): string =>\n `${JSON.stringify(value, null, pretty ? 2 : 0)}\\n`\n"],"names":["formatIssue","issue","path","message","formatIssues","issues","length","map","join","formatValidationSummary","fileCount","root","sourceId","validation","lines","ok","warnings","push","formatPlanSummary","plan","create","update","unchanged","archive","delete","draft","formatPushSummary","deleteBehavior","endpoint","mode","publishRequested","response","summary","syncRunId","printJson","value","pretty","JSON","stringify"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { markdownField } from '@valkyrianlabs/payload-markdown';
2
2
  import { MANAGED_BY } from '../constants.js';
3
+ import { populatePublishedAt } from '../payload/populatePublishedAt.js';
3
4
  const createHeroImageField = (relationToSlugs)=>{
4
5
  const fieldBase = {
5
6
  name: 'heroImage',
@@ -48,6 +49,13 @@ export const createDocsCollection = ({ slug, docsSetsCollectionSlug, enableDraft
48
49
  name: 'description',
49
50
  type: 'textarea'
50
51
  },
52
+ {
53
+ name: 'publishedAt',
54
+ type: 'date',
55
+ admin: {
56
+ position: 'sidebar'
57
+ }
58
+ },
51
59
  {
52
60
  name: 'route',
53
61
  type: 'text',
@@ -130,6 +138,11 @@ export const createDocsCollection = ({ slug, docsSetsCollectionSlug, enableDraft
130
138
  type: 'text',
131
139
  index: true
132
140
  },
141
+ {
142
+ name: 'contentHashAtLastSync',
143
+ type: 'text',
144
+ index: true
145
+ },
133
146
  {
134
147
  name: 'lastSyncedAt',
135
148
  type: 'date'
@@ -159,6 +172,11 @@ export const createDocsCollection = ({ slug, docsSetsCollectionSlug, enableDraft
159
172
  ]
160
173
  }
161
174
  ],
175
+ hooks: {
176
+ beforeChange: [
177
+ populatePublishedAt
178
+ ]
179
+ },
162
180
  ...enableDrafts ? {
163
181
  versions: {
164
182
  drafts: true
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/collections/docs.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport { markdownField } from '@valkyrianlabs/payload-markdown'\n\nimport { MANAGED_BY } from '../constants.js'\n\nexport type CreateDocsCollectionOptions = {\n docsSetsCollectionSlug?: string\n enableDrafts?: boolean\n heroImageMediaCollectionSlugs?: string[]\n markdownFieldName: string\n slug: string\n syncRunsCollectionSlug?: string\n}\n\nconst createHeroImageField = (relationToSlugs: string[]): Field => {\n const fieldBase = {\n name: 'heroImage',\n type: 'upload' as const,\n admin: {\n description: 'Optional hero image rendered above generated docs content.',\n },\n displayPreview: true,\n label: 'Hero Image',\n maxDepth: 1,\n }\n\n if (relationToSlugs.length === 1) {\n return {\n ...fieldBase,\n relationTo: relationToSlugs[0] ?? 'media',\n }\n }\n\n return {\n ...fieldBase,\n relationTo: relationToSlugs,\n }\n}\n\nexport const createDocsCollection = ({\n slug,\n docsSetsCollectionSlug,\n enableDrafts = false,\n heroImageMediaCollectionSlugs,\n markdownFieldName,\n syncRunsCollectionSlug,\n}: CreateDocsCollectionOptions): CollectionConfig => ({\n slug,\n admin: {\n defaultColumns: ['title', 'route', 'sourcePath', 'updatedAt'],\n hidden: true,\n useAsTitle: 'title',\n },\n fields: [\n {\n name: 'title',\n type: 'text',\n required: true,\n },\n {\n name: 'navTitle',\n type: 'text',\n },\n {\n name: 'description',\n type: 'textarea',\n },\n {\n name: 'route',\n type: 'text',\n index: true,\n required: true,\n unique: true,\n },\n {\n name: 'sourcePath',\n type: 'text',\n index: true,\n required: true,\n },\n ...(docsSetsCollectionSlug\n ? [\n {\n name: 'docsSet',\n type: 'relationship' as const,\n index: true,\n relationTo: docsSetsCollectionSlug,\n },\n ]\n : []),\n {\n name: 'sourceHash',\n type: 'text',\n index: true,\n },\n {\n name: 'depth',\n type: 'number',\n defaultValue: 0,\n },\n {\n name: 'order',\n type: 'number',\n defaultValue: 0,\n },\n {\n name: 'parent',\n type: 'relationship',\n relationTo: slug,\n },\n ...(heroImageMediaCollectionSlugs?.length\n ? [createHeroImageField(heroImageMediaCollectionSlugs)]\n : []),\n markdownField({\n name: markdownFieldName,\n label: 'Content',\n }),\n {\n name: 'overrides',\n type: 'group',\n fields: [\n {\n name: 'navTitle',\n type: 'text',\n },\n {\n name: 'hideFromNav',\n type: 'checkbox',\n defaultValue: false,\n },\n ],\n },\n {\n name: 'sync',\n type: 'group',\n fields: [\n {\n name: 'sourceId',\n type: 'text',\n index: true,\n },\n {\n name: 'sourcePath',\n type: 'text',\n index: true,\n },\n {\n name: 'sourceHashAtLastSync',\n type: 'text',\n index: true,\n },\n {\n name: 'lastSyncedAt',\n type: 'date',\n },\n ...(syncRunsCollectionSlug\n ? [\n {\n name: 'lastSyncRunId',\n type: 'relationship' as const,\n relationTo: syncRunsCollectionSlug,\n },\n ]\n : []),\n {\n name: 'managedBy',\n type: 'text',\n defaultValue: MANAGED_BY,\n },\n {\n name: 'archived',\n type: 'checkbox',\n defaultValue: false,\n index: true,\n },\n {\n name: 'archivedAt',\n type: 'date',\n },\n ],\n },\n ],\n ...(enableDrafts\n ? {\n versions: {\n drafts: true,\n },\n }\n : {}),\n})\n"],"names":["markdownField","MANAGED_BY","createHeroImageField","relationToSlugs","fieldBase","name","type","admin","description","displayPreview","label","maxDepth","length","relationTo","createDocsCollection","slug","docsSetsCollectionSlug","enableDrafts","heroImageMediaCollectionSlugs","markdownFieldName","syncRunsCollectionSlug","defaultColumns","hidden","useAsTitle","fields","required","index","unique","defaultValue","versions","drafts"],"mappings":"AAEA,SAASA,aAAa,QAAQ,kCAAiC;AAE/D,SAASC,UAAU,QAAQ,kBAAiB;AAW5C,MAAMC,uBAAuB,CAACC;IAC5B,MAAMC,YAAY;QAChBC,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,aAAa;QACf;QACAC,gBAAgB;QAChBC,OAAO;QACPC,UAAU;IACZ;IAEA,IAAIR,gBAAgBS,MAAM,KAAK,GAAG;QAChC,OAAO;YACL,GAAGR,SAAS;YACZS,YAAYV,eAAe,CAAC,EAAE,IAAI;QACpC;IACF;IAEA,OAAO;QACL,GAAGC,SAAS;QACZS,YAAYV;IACd;AACF;AAEA,OAAO,MAAMW,uBAAuB,CAAC,EACnCC,IAAI,EACJC,sBAAsB,EACtBC,eAAe,KAAK,EACpBC,6BAA6B,EAC7BC,iBAAiB,EACjBC,sBAAsB,EACM,GAAwB,CAAA;QACpDL;QACAR,OAAO;YACLc,gBAAgB;gBAAC;gBAAS;gBAAS;gBAAc;aAAY;YAC7DC,QAAQ;YACRC,YAAY;QACd;QACAC,QAAQ;YACN;gBACEnB,MAAM;gBACNC,MAAM;gBACNmB,UAAU;YACZ;YACA;gBACEpB,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNoB,OAAO;gBACPD,UAAU;gBACVE,QAAQ;YACV;YACA;gBACEtB,MAAM;gBACNC,MAAM;gBACNoB,OAAO;gBACPD,UAAU;YACZ;eACIT,yBACA;gBACE;oBACEX,MAAM;oBACNC,MAAM;oBACNoB,OAAO;oBACPb,YAAYG;gBACd;aACD,GACD,EAAE;YACN;gBACEX,MAAM;gBACNC,MAAM;gBACNoB,OAAO;YACT;YACA;gBACErB,MAAM;gBACNC,MAAM;gBACNsB,cAAc;YAChB;YACA;gBACEvB,MAAM;gBACNC,MAAM;gBACNsB,cAAc;YAChB;YACA;gBACEvB,MAAM;gBACNC,MAAM;gBACNO,YAAYE;YACd;eACIG,+BAA+BN,SAC/B;gBAACV,qBAAqBgB;aAA+B,GACrD,EAAE;YACNlB,cAAc;gBACZK,MAAMc;gBACNT,OAAO;YACT;YACA;gBACEL,MAAM;gBACNC,MAAM;gBACNkB,QAAQ;oBACN;wBACEnB,MAAM;wBACNC,MAAM;oBACR;oBACA;wBACED,MAAM;wBACNC,MAAM;wBACNsB,cAAc;oBAChB;iBACD;YACH;YACA;gBACEvB,MAAM;gBACNC,MAAM;gBACNkB,QAAQ;oBACN;wBACEnB,MAAM;wBACNC,MAAM;wBACNoB,OAAO;oBACT;oBACA;wBACErB,MAAM;wBACNC,MAAM;wBACNoB,OAAO;oBACT;oBACA;wBACErB,MAAM;wBACNC,MAAM;wBACNoB,OAAO;oBACT;oBACA;wBACErB,MAAM;wBACNC,MAAM;oBACR;uBACIc,yBACA;wBACE;4BACEf,MAAM;4BACNC,MAAM;4BACNO,YAAYO;wBACd;qBACD,GACD,EAAE;oBACN;wBACEf,MAAM;wBACNC,MAAM;wBACNsB,cAAc3B;oBAChB;oBACA;wBACEI,MAAM;wBACNC,MAAM;wBACNsB,cAAc;wBACdF,OAAO;oBACT;oBACA;wBACErB,MAAM;wBACNC,MAAM;oBACR;iBACD;YACH;SACD;QACD,GAAIW,eACA;YACEY,UAAU;gBACRC,QAAQ;YACV;QACF,IACA,CAAC,CAAC;IACR,CAAA,EAAE"}
1
+ {"version":3,"sources":["../../src/collections/docs.ts"],"sourcesContent":["import type { CollectionConfig, Field } from 'payload'\n\nimport { markdownField } from '@valkyrianlabs/payload-markdown'\n\nimport { MANAGED_BY } from '../constants.js'\nimport { populatePublishedAt } from '../payload/populatePublishedAt.js'\n\nexport type CreateDocsCollectionOptions = {\n docsSetsCollectionSlug?: string\n enableDrafts?: boolean\n heroImageMediaCollectionSlugs?: string[]\n markdownFieldName: string\n slug: string\n syncRunsCollectionSlug?: string\n}\n\nconst createHeroImageField = (relationToSlugs: string[]): Field => {\n const fieldBase = {\n name: 'heroImage',\n type: 'upload' as const,\n admin: {\n description: 'Optional hero image rendered above generated docs content.',\n },\n displayPreview: true,\n label: 'Hero Image',\n maxDepth: 1,\n }\n\n if (relationToSlugs.length === 1) {\n return {\n ...fieldBase,\n relationTo: relationToSlugs[0] ?? 'media',\n }\n }\n\n return {\n ...fieldBase,\n relationTo: relationToSlugs,\n }\n}\n\nexport const createDocsCollection = ({\n slug,\n docsSetsCollectionSlug,\n enableDrafts = false,\n heroImageMediaCollectionSlugs,\n markdownFieldName,\n syncRunsCollectionSlug,\n}: CreateDocsCollectionOptions): CollectionConfig => ({\n slug,\n admin: {\n defaultColumns: ['title', 'route', 'sourcePath', 'updatedAt'],\n hidden: true,\n useAsTitle: 'title',\n },\n fields: [\n {\n name: 'title',\n type: 'text',\n required: true,\n },\n {\n name: 'navTitle',\n type: 'text',\n },\n {\n name: 'description',\n type: 'textarea',\n },\n {\n name: 'publishedAt',\n type: 'date',\n admin: {\n position: 'sidebar',\n },\n },\n {\n name: 'route',\n type: 'text',\n index: true,\n required: true,\n unique: true,\n },\n {\n name: 'sourcePath',\n type: 'text',\n index: true,\n required: true,\n },\n ...(docsSetsCollectionSlug\n ? [\n {\n name: 'docsSet',\n type: 'relationship' as const,\n index: true,\n relationTo: docsSetsCollectionSlug,\n },\n ]\n : []),\n {\n name: 'sourceHash',\n type: 'text',\n index: true,\n },\n {\n name: 'depth',\n type: 'number',\n defaultValue: 0,\n },\n {\n name: 'order',\n type: 'number',\n defaultValue: 0,\n },\n {\n name: 'parent',\n type: 'relationship',\n relationTo: slug,\n },\n ...(heroImageMediaCollectionSlugs?.length\n ? [createHeroImageField(heroImageMediaCollectionSlugs)]\n : []),\n markdownField({\n name: markdownFieldName,\n label: 'Content',\n }),\n {\n name: 'overrides',\n type: 'group',\n fields: [\n {\n name: 'navTitle',\n type: 'text',\n },\n {\n name: 'hideFromNav',\n type: 'checkbox',\n defaultValue: false,\n },\n ],\n },\n {\n name: 'sync',\n type: 'group',\n fields: [\n {\n name: 'sourceId',\n type: 'text',\n index: true,\n },\n {\n name: 'sourcePath',\n type: 'text',\n index: true,\n },\n {\n name: 'sourceHashAtLastSync',\n type: 'text',\n index: true,\n },\n {\n name: 'contentHashAtLastSync',\n type: 'text',\n index: true,\n },\n {\n name: 'lastSyncedAt',\n type: 'date',\n },\n ...(syncRunsCollectionSlug\n ? [\n {\n name: 'lastSyncRunId',\n type: 'relationship' as const,\n relationTo: syncRunsCollectionSlug,\n },\n ]\n : []),\n {\n name: 'managedBy',\n type: 'text',\n defaultValue: MANAGED_BY,\n },\n {\n name: 'archived',\n type: 'checkbox',\n defaultValue: false,\n index: true,\n },\n {\n name: 'archivedAt',\n type: 'date',\n },\n ],\n },\n ],\n hooks: {\n beforeChange: [populatePublishedAt],\n },\n ...(enableDrafts\n ? {\n versions: {\n drafts: true,\n },\n }\n : {}),\n})\n"],"names":["markdownField","MANAGED_BY","populatePublishedAt","createHeroImageField","relationToSlugs","fieldBase","name","type","admin","description","displayPreview","label","maxDepth","length","relationTo","createDocsCollection","slug","docsSetsCollectionSlug","enableDrafts","heroImageMediaCollectionSlugs","markdownFieldName","syncRunsCollectionSlug","defaultColumns","hidden","useAsTitle","fields","required","position","index","unique","defaultValue","hooks","beforeChange","versions","drafts"],"mappings":"AAEA,SAASA,aAAa,QAAQ,kCAAiC;AAE/D,SAASC,UAAU,QAAQ,kBAAiB;AAC5C,SAASC,mBAAmB,QAAQ,oCAAmC;AAWvE,MAAMC,uBAAuB,CAACC;IAC5B,MAAMC,YAAY;QAChBC,MAAM;QACNC,MAAM;QACNC,OAAO;YACLC,aAAa;QACf;QACAC,gBAAgB;QAChBC,OAAO;QACPC,UAAU;IACZ;IAEA,IAAIR,gBAAgBS,MAAM,KAAK,GAAG;QAChC,OAAO;YACL,GAAGR,SAAS;YACZS,YAAYV,eAAe,CAAC,EAAE,IAAI;QACpC;IACF;IAEA,OAAO;QACL,GAAGC,SAAS;QACZS,YAAYV;IACd;AACF;AAEA,OAAO,MAAMW,uBAAuB,CAAC,EACnCC,IAAI,EACJC,sBAAsB,EACtBC,eAAe,KAAK,EACpBC,6BAA6B,EAC7BC,iBAAiB,EACjBC,sBAAsB,EACM,GAAwB,CAAA;QACpDL;QACAR,OAAO;YACLc,gBAAgB;gBAAC;gBAAS;gBAAS;gBAAc;aAAY;YAC7DC,QAAQ;YACRC,YAAY;QACd;QACAC,QAAQ;YACN;gBACEnB,MAAM;gBACNC,MAAM;gBACNmB,UAAU;YACZ;YACA;gBACEpB,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNC,OAAO;oBACLmB,UAAU;gBACZ;YACF;YACA;gBACErB,MAAM;gBACNC,MAAM;gBACNqB,OAAO;gBACPF,UAAU;gBACVG,QAAQ;YACV;YACA;gBACEvB,MAAM;gBACNC,MAAM;gBACNqB,OAAO;gBACPF,UAAU;YACZ;eACIT,yBACA;gBACE;oBACEX,MAAM;oBACNC,MAAM;oBACNqB,OAAO;oBACPd,YAAYG;gBACd;aACD,GACD,EAAE;YACN;gBACEX,MAAM;gBACNC,MAAM;gBACNqB,OAAO;YACT;YACA;gBACEtB,MAAM;gBACNC,MAAM;gBACNuB,cAAc;YAChB;YACA;gBACExB,MAAM;gBACNC,MAAM;gBACNuB,cAAc;YAChB;YACA;gBACExB,MAAM;gBACNC,MAAM;gBACNO,YAAYE;YACd;eACIG,+BAA+BN,SAC/B;gBAACV,qBAAqBgB;aAA+B,GACrD,EAAE;YACNnB,cAAc;gBACZM,MAAMc;gBACNT,OAAO;YACT;YACA;gBACEL,MAAM;gBACNC,MAAM;gBACNkB,QAAQ;oBACN;wBACEnB,MAAM;wBACNC,MAAM;oBACR;oBACA;wBACED,MAAM;wBACNC,MAAM;wBACNuB,cAAc;oBAChB;iBACD;YACH;YACA;gBACExB,MAAM;gBACNC,MAAM;gBACNkB,QAAQ;oBACN;wBACEnB,MAAM;wBACNC,MAAM;wBACNqB,OAAO;oBACT;oBACA;wBACEtB,MAAM;wBACNC,MAAM;wBACNqB,OAAO;oBACT;oBACA;wBACEtB,MAAM;wBACNC,MAAM;wBACNqB,OAAO;oBACT;oBACA;wBACEtB,MAAM;wBACNC,MAAM;wBACNqB,OAAO;oBACT;oBACA;wBACEtB,MAAM;wBACNC,MAAM;oBACR;uBACIc,yBACA;wBACE;4BACEf,MAAM;4BACNC,MAAM;4BACNO,YAAYO;wBACd;qBACD,GACD,EAAE;oBACN;wBACEf,MAAM;wBACNC,MAAM;wBACNuB,cAAc7B;oBAChB;oBACA;wBACEK,MAAM;wBACNC,MAAM;wBACNuB,cAAc;wBACdF,OAAO;oBACT;oBACA;wBACEtB,MAAM;wBACNC,MAAM;oBACR;iBACD;YACH;SACD;QACDwB,OAAO;YACLC,cAAc;gBAAC9B;aAAoB;QACrC;QACA,GAAIgB,eACA;YACEe,UAAU;gBACRC,QAAQ;YACV;QACF,IACA,CAAC,CAAC;IACR,CAAA,EAAE"}
@@ -1,10 +1,8 @@
1
1
  import type { CollectionConfig } from 'payload';
2
2
  export type CreateDocsSetsCollectionOptions = {
3
- allowPublish?: boolean;
4
3
  docsCollectionSlug?: string;
5
- docsEnableDrafts?: boolean;
6
4
  docsGroupsCollectionSlug: string;
7
5
  slug: string;
8
6
  syncRunsCollectionSlug?: string;
9
7
  };
10
- export declare const createDocsSetsCollection: ({ slug, allowPublish, docsCollectionSlug, docsEnableDrafts, docsGroupsCollectionSlug, syncRunsCollectionSlug, }: CreateDocsSetsCollectionOptions) => CollectionConfig;
8
+ export declare const createDocsSetsCollection: ({ slug, docsCollectionSlug, docsGroupsCollectionSlug, syncRunsCollectionSlug, }: CreateDocsSetsCollectionOptions) => CollectionConfig;
@@ -1,6 +1,6 @@
1
1
  import { DOCS_GLOBALS_ADMIN_GROUP, DOCS_SET_MANAGER_COMPONENT } from '../constants.js';
2
- import { createPublishGeneratedDocsEndpoint } from '../endpoints/publishGeneratedDocs.js';
3
- export const createDocsSetsCollection = ({ slug, allowPublish = false, docsCollectionSlug, docsEnableDrafts = false, docsGroupsCollectionSlug, syncRunsCollectionSlug })=>({
2
+ import { populatePublishedAt } from '../payload/populatePublishedAt.js';
3
+ export const createDocsSetsCollection = ({ slug, docsCollectionSlug, docsGroupsCollectionSlug, syncRunsCollectionSlug })=>({
4
4
  slug,
5
5
  admin: {
6
6
  defaultColumns: [
@@ -12,12 +12,6 @@ export const createDocsSetsCollection = ({ slug, allowPublish = false, docsColle
12
12
  group: DOCS_GLOBALS_ADMIN_GROUP,
13
13
  useAsTitle: 'title'
14
14
  },
15
- endpoints: docsCollectionSlug && docsEnableDrafts && allowPublish ? [
16
- createPublishGeneratedDocsEndpoint({
17
- docsCollectionSlug,
18
- docsSetsCollectionSlug: slug
19
- })
20
- ] : undefined,
21
15
  fields: [
22
16
  {
23
17
  name: 'title',
@@ -56,6 +50,13 @@ export const createDocsSetsCollection = ({ slug, allowPublish = false, docsColle
56
50
  name: 'description',
57
51
  type: 'textarea'
58
52
  },
53
+ {
54
+ name: 'publishedAt',
55
+ type: 'date',
56
+ admin: {
57
+ position: 'sidebar'
58
+ }
59
+ },
59
60
  {
60
61
  name: 'advancedSecurity',
61
62
  type: 'group',
@@ -142,9 +143,7 @@ export const createDocsSetsCollection = ({ slug, allowPublish = false, docsColle
142
143
  Field: DOCS_SET_MANAGER_COMPONENT
143
144
  },
144
145
  custom: {
145
- allowPublish,
146
146
  docsCollectionSlug,
147
- docsEnableDrafts,
148
147
  docsGroupsCollectionSlug,
149
148
  docsSetsCollectionSlug: slug
150
149
  }
@@ -152,9 +151,17 @@ export const createDocsSetsCollection = ({ slug, allowPublish = false, docsColle
152
151
  }
153
152
  ] : []
154
153
  ],
154
+ hooks: {
155
+ beforeChange: [
156
+ populatePublishedAt
157
+ ]
158
+ },
155
159
  labels: {
156
160
  plural: 'Sets',
157
161
  singular: 'Set'
162
+ },
163
+ versions: {
164
+ drafts: true
158
165
  }
159
166
  });
160
167
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/collections/docsSets.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport { DOCS_GLOBALS_ADMIN_GROUP, DOCS_SET_MANAGER_COMPONENT } from '../constants.js'\nimport { createPublishGeneratedDocsEndpoint } from '../endpoints/publishGeneratedDocs.js'\n\nexport type CreateDocsSetsCollectionOptions = {\n allowPublish?: boolean\n docsCollectionSlug?: string\n docsEnableDrafts?: boolean\n docsGroupsCollectionSlug: string\n slug: string\n syncRunsCollectionSlug?: string\n}\n\nexport const createDocsSetsCollection = ({\n slug,\n allowPublish = false,\n docsCollectionSlug,\n docsEnableDrafts = false,\n docsGroupsCollectionSlug,\n syncRunsCollectionSlug,\n}: CreateDocsSetsCollectionOptions): CollectionConfig => ({\n slug,\n admin: {\n defaultColumns: ['title', 'slug', 'branch', 'updatedAt'],\n group: DOCS_GLOBALS_ADMIN_GROUP,\n useAsTitle: 'title',\n },\n endpoints:\n docsCollectionSlug && docsEnableDrafts && allowPublish\n ? [\n createPublishGeneratedDocsEndpoint({\n docsCollectionSlug,\n docsSetsCollectionSlug: slug,\n }),\n ]\n : undefined,\n fields: [\n {\n name: 'title',\n type: 'text',\n required: true,\n },\n {\n name: 'slug',\n type: 'text',\n index: true,\n required: true,\n unique: true,\n },\n {\n name: 'group',\n type: 'relationship',\n relationTo: docsGroupsCollectionSlug,\n },\n {\n name: 'branch',\n type: 'text',\n admin: {\n description:\n 'Git branch allowed to publish this docs set. The full Git ref is handled internally.',\n },\n defaultValue: 'main',\n },\n {\n name: 'allowPullRequests',\n type: 'checkbox',\n admin: {\n description: 'Allow GitHub pull request events to dry-run or publish this docs set.',\n },\n defaultValue: false,\n },\n {\n name: 'description',\n type: 'textarea',\n },\n {\n name: 'advancedSecurity',\n type: 'group',\n admin: {\n description:\n 'Optional workflow lock-down. Leave disabled to allow any workflow from a trusted GitHub owner/repository and branch.',\n },\n fields: [\n {\n name: 'enabled',\n type: 'checkbox',\n admin: {\n description:\n 'When enabled, only the workflow refs listed below can publish this docs set.',\n },\n defaultValue: false,\n },\n {\n name: 'allowedWorkflowRefs',\n type: 'array',\n admin: {\n condition: (_data, siblingData) => siblingData?.enabled === true,\n description:\n 'Exact GitHub workflow refs, for example owner/repo/.github/workflows/publish-docs.yml@refs/heads/main.',\n },\n fields: [\n {\n name: 'value',\n type: 'text',\n required: true,\n },\n ],\n validate: (value, { siblingData }) => {\n const advancedSecurityData =\n typeof siblingData === 'object' && siblingData !== null\n ? (siblingData as { enabled?: unknown })\n : undefined\n\n if (\n advancedSecurityData?.enabled === true &&\n (!Array.isArray(value) || value.length === 0)\n ) {\n return 'Add at least one workflow ref or disable advanced security.'\n }\n\n return true\n },\n },\n ],\n },\n {\n name: 'aiExport',\n type: 'json',\n admin: {\n description: 'Parsed index.ai.yml control data for the raw Markdown AI export route.',\n },\n },\n {\n name: 'sync',\n type: 'group',\n fields: [\n {\n name: 'lastSyncedAt',\n type: 'date',\n },\n ...(syncRunsCollectionSlug\n ? [\n {\n name: 'lastSyncRunId',\n type: 'relationship' as const,\n relationTo: syncRunsCollectionSlug,\n },\n ]\n : []),\n {\n name: 'lastStatus',\n type: 'select',\n options: ['failed', 'pending', 'success'],\n },\n {\n name: 'docsCount',\n type: 'number',\n defaultValue: 0,\n },\n ],\n },\n ...(docsCollectionSlug\n ? [\n {\n name: 'docsSetManager',\n type: 'ui' as const,\n admin: {\n components: {\n Field: DOCS_SET_MANAGER_COMPONENT,\n },\n custom: {\n allowPublish,\n docsCollectionSlug,\n docsEnableDrafts,\n docsGroupsCollectionSlug,\n docsSetsCollectionSlug: slug,\n },\n },\n },\n ]\n : []),\n ],\n labels: {\n plural: 'Sets',\n singular: 'Set',\n },\n})\n"],"names":["DOCS_GLOBALS_ADMIN_GROUP","DOCS_SET_MANAGER_COMPONENT","createPublishGeneratedDocsEndpoint","createDocsSetsCollection","slug","allowPublish","docsCollectionSlug","docsEnableDrafts","docsGroupsCollectionSlug","syncRunsCollectionSlug","admin","defaultColumns","group","useAsTitle","endpoints","docsSetsCollectionSlug","undefined","fields","name","type","required","index","unique","relationTo","description","defaultValue","condition","_data","siblingData","enabled","validate","value","advancedSecurityData","Array","isArray","length","options","components","Field","custom","labels","plural","singular"],"mappings":"AAEA,SAASA,wBAAwB,EAAEC,0BAA0B,QAAQ,kBAAiB;AACtF,SAASC,kCAAkC,QAAQ,uCAAsC;AAWzF,OAAO,MAAMC,2BAA2B,CAAC,EACvCC,IAAI,EACJC,eAAe,KAAK,EACpBC,kBAAkB,EAClBC,mBAAmB,KAAK,EACxBC,wBAAwB,EACxBC,sBAAsB,EACU,GAAwB,CAAA;QACxDL;QACAM,OAAO;YACLC,gBAAgB;gBAAC;gBAAS;gBAAQ;gBAAU;aAAY;YACxDC,OAAOZ;YACPa,YAAY;QACd;QACAC,WACER,sBAAsBC,oBAAoBF,eACtC;YACEH,mCAAmC;gBACjCI;gBACAS,wBAAwBX;YAC1B;SACD,GACDY;QACNC,QAAQ;YACN;gBACEC,MAAM;gBACNC,MAAM;gBACNC,UAAU;YACZ;YACA;gBACEF,MAAM;gBACNC,MAAM;gBACNE,OAAO;gBACPD,UAAU;gBACVE,QAAQ;YACV;YACA;gBACEJ,MAAM;gBACNC,MAAM;gBACNI,YAAYf;YACd;YACA;gBACEU,MAAM;gBACNC,MAAM;gBACNT,OAAO;oBACLc,aACE;gBACJ;gBACAC,cAAc;YAChB;YACA;gBACEP,MAAM;gBACNC,MAAM;gBACNT,OAAO;oBACLc,aAAa;gBACf;gBACAC,cAAc;YAChB;YACA;gBACEP,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNT,OAAO;oBACLc,aACE;gBACJ;gBACAP,QAAQ;oBACN;wBACEC,MAAM;wBACNC,MAAM;wBACNT,OAAO;4BACLc,aACE;wBACJ;wBACAC,cAAc;oBAChB;oBACA;wBACEP,MAAM;wBACNC,MAAM;wBACNT,OAAO;4BACLgB,WAAW,CAACC,OAAOC,cAAgBA,aAAaC,YAAY;4BAC5DL,aACE;wBACJ;wBACAP,QAAQ;4BACN;gCACEC,MAAM;gCACNC,MAAM;gCACNC,UAAU;4BACZ;yBACD;wBACDU,UAAU,CAACC,OAAO,EAAEH,WAAW,EAAE;4BAC/B,MAAMI,uBACJ,OAAOJ,gBAAgB,YAAYA,gBAAgB,OAC9CA,cACDZ;4BAEN,IACEgB,sBAAsBH,YAAY,QACjC,CAAA,CAACI,MAAMC,OAAO,CAACH,UAAUA,MAAMI,MAAM,KAAK,CAAA,GAC3C;gCACA,OAAO;4BACT;4BAEA,OAAO;wBACT;oBACF;iBACD;YACH;YACA;gBACEjB,MAAM;gBACNC,MAAM;gBACNT,OAAO;oBACLc,aAAa;gBACf;YACF;YACA;gBACEN,MAAM;gBACNC,MAAM;gBACNF,QAAQ;oBACN;wBACEC,MAAM;wBACNC,MAAM;oBACR;uBACIV,yBACA;wBACE;4BACES,MAAM;4BACNC,MAAM;4BACNI,YAAYd;wBACd;qBACD,GACD,EAAE;oBACN;wBACES,MAAM;wBACNC,MAAM;wBACNiB,SAAS;4BAAC;4BAAU;4BAAW;yBAAU;oBAC3C;oBACA;wBACElB,MAAM;wBACNC,MAAM;wBACNM,cAAc;oBAChB;iBACD;YACH;eACInB,qBACA;gBACE;oBACEY,MAAM;oBACNC,MAAM;oBACNT,OAAO;wBACL2B,YAAY;4BACVC,OAAOrC;wBACT;wBACAsC,QAAQ;4BACNlC;4BACAC;4BACAC;4BACAC;4BACAO,wBAAwBX;wBAC1B;oBACF;gBACF;aACD,GACD,EAAE;SACP;QACDoC,QAAQ;YACNC,QAAQ;YACRC,UAAU;QACZ;IACF,CAAA,EAAE"}
1
+ {"version":3,"sources":["../../src/collections/docsSets.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nimport { DOCS_GLOBALS_ADMIN_GROUP, DOCS_SET_MANAGER_COMPONENT } from '../constants.js'\nimport { populatePublishedAt } from '../payload/populatePublishedAt.js'\n\nexport type CreateDocsSetsCollectionOptions = {\n docsCollectionSlug?: string\n docsGroupsCollectionSlug: string\n slug: string\n syncRunsCollectionSlug?: string\n}\n\nexport const createDocsSetsCollection = ({\n slug,\n docsCollectionSlug,\n docsGroupsCollectionSlug,\n syncRunsCollectionSlug,\n}: CreateDocsSetsCollectionOptions): CollectionConfig => ({\n slug,\n admin: {\n defaultColumns: ['title', 'slug', 'branch', 'updatedAt'],\n group: DOCS_GLOBALS_ADMIN_GROUP,\n useAsTitle: 'title',\n },\n fields: [\n {\n name: 'title',\n type: 'text',\n required: true,\n },\n {\n name: 'slug',\n type: 'text',\n index: true,\n required: true,\n unique: true,\n },\n {\n name: 'group',\n type: 'relationship',\n relationTo: docsGroupsCollectionSlug,\n },\n {\n name: 'branch',\n type: 'text',\n admin: {\n description:\n 'Git branch allowed to publish this docs set. The full Git ref is handled internally.',\n },\n defaultValue: 'main',\n },\n {\n name: 'allowPullRequests',\n type: 'checkbox',\n admin: {\n description: 'Allow GitHub pull request events to dry-run or publish this docs set.',\n },\n defaultValue: false,\n },\n {\n name: 'description',\n type: 'textarea',\n },\n {\n name: 'publishedAt',\n type: 'date',\n admin: {\n position: 'sidebar',\n },\n },\n {\n name: 'advancedSecurity',\n type: 'group',\n admin: {\n description:\n 'Optional workflow lock-down. Leave disabled to allow any workflow from a trusted GitHub owner/repository and branch.',\n },\n fields: [\n {\n name: 'enabled',\n type: 'checkbox',\n admin: {\n description:\n 'When enabled, only the workflow refs listed below can publish this docs set.',\n },\n defaultValue: false,\n },\n {\n name: 'allowedWorkflowRefs',\n type: 'array',\n admin: {\n condition: (_data, siblingData) => siblingData?.enabled === true,\n description:\n 'Exact GitHub workflow refs, for example owner/repo/.github/workflows/publish-docs.yml@refs/heads/main.',\n },\n fields: [\n {\n name: 'value',\n type: 'text',\n required: true,\n },\n ],\n validate: (value, { siblingData }) => {\n const advancedSecurityData =\n typeof siblingData === 'object' && siblingData !== null\n ? (siblingData as { enabled?: unknown })\n : undefined\n\n if (\n advancedSecurityData?.enabled === true &&\n (!Array.isArray(value) || value.length === 0)\n ) {\n return 'Add at least one workflow ref or disable advanced security.'\n }\n\n return true\n },\n },\n ],\n },\n {\n name: 'aiExport',\n type: 'json',\n admin: {\n description: 'Parsed index.ai.yml control data for the raw Markdown AI export route.',\n },\n },\n {\n name: 'sync',\n type: 'group',\n fields: [\n {\n name: 'lastSyncedAt',\n type: 'date',\n },\n ...(syncRunsCollectionSlug\n ? [\n {\n name: 'lastSyncRunId',\n type: 'relationship' as const,\n relationTo: syncRunsCollectionSlug,\n },\n ]\n : []),\n {\n name: 'lastStatus',\n type: 'select',\n options: ['failed', 'pending', 'success'],\n },\n {\n name: 'docsCount',\n type: 'number',\n defaultValue: 0,\n },\n ],\n },\n ...(docsCollectionSlug\n ? [\n {\n name: 'docsSetManager',\n type: 'ui' as const,\n admin: {\n components: {\n Field: DOCS_SET_MANAGER_COMPONENT,\n },\n custom: {\n docsCollectionSlug,\n docsGroupsCollectionSlug,\n docsSetsCollectionSlug: slug,\n },\n },\n },\n ]\n : []),\n ],\n hooks: {\n beforeChange: [populatePublishedAt],\n },\n labels: {\n plural: 'Sets',\n singular: 'Set',\n },\n versions: {\n drafts: true,\n },\n})\n"],"names":["DOCS_GLOBALS_ADMIN_GROUP","DOCS_SET_MANAGER_COMPONENT","populatePublishedAt","createDocsSetsCollection","slug","docsCollectionSlug","docsGroupsCollectionSlug","syncRunsCollectionSlug","admin","defaultColumns","group","useAsTitle","fields","name","type","required","index","unique","relationTo","description","defaultValue","position","condition","_data","siblingData","enabled","validate","value","advancedSecurityData","undefined","Array","isArray","length","options","components","Field","custom","docsSetsCollectionSlug","hooks","beforeChange","labels","plural","singular","versions","drafts"],"mappings":"AAEA,SAASA,wBAAwB,EAAEC,0BAA0B,QAAQ,kBAAiB;AACtF,SAASC,mBAAmB,QAAQ,oCAAmC;AASvE,OAAO,MAAMC,2BAA2B,CAAC,EACvCC,IAAI,EACJC,kBAAkB,EAClBC,wBAAwB,EACxBC,sBAAsB,EACU,GAAwB,CAAA;QACxDH;QACAI,OAAO;YACLC,gBAAgB;gBAAC;gBAAS;gBAAQ;gBAAU;aAAY;YACxDC,OAAOV;YACPW,YAAY;QACd;QACAC,QAAQ;YACN;gBACEC,MAAM;gBACNC,MAAM;gBACNC,UAAU;YACZ;YACA;gBACEF,MAAM;gBACNC,MAAM;gBACNE,OAAO;gBACPD,UAAU;gBACVE,QAAQ;YACV;YACA;gBACEJ,MAAM;gBACNC,MAAM;gBACNI,YAAYZ;YACd;YACA;gBACEO,MAAM;gBACNC,MAAM;gBACNN,OAAO;oBACLW,aACE;gBACJ;gBACAC,cAAc;YAChB;YACA;gBACEP,MAAM;gBACNC,MAAM;gBACNN,OAAO;oBACLW,aAAa;gBACf;gBACAC,cAAc;YAChB;YACA;gBACEP,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNN,OAAO;oBACLa,UAAU;gBACZ;YACF;YACA;gBACER,MAAM;gBACNC,MAAM;gBACNN,OAAO;oBACLW,aACE;gBACJ;gBACAP,QAAQ;oBACN;wBACEC,MAAM;wBACNC,MAAM;wBACNN,OAAO;4BACLW,aACE;wBACJ;wBACAC,cAAc;oBAChB;oBACA;wBACEP,MAAM;wBACNC,MAAM;wBACNN,OAAO;4BACLc,WAAW,CAACC,OAAOC,cAAgBA,aAAaC,YAAY;4BAC5DN,aACE;wBACJ;wBACAP,QAAQ;4BACN;gCACEC,MAAM;gCACNC,MAAM;gCACNC,UAAU;4BACZ;yBACD;wBACDW,UAAU,CAACC,OAAO,EAAEH,WAAW,EAAE;4BAC/B,MAAMI,uBACJ,OAAOJ,gBAAgB,YAAYA,gBAAgB,OAC9CA,cACDK;4BAEN,IACED,sBAAsBH,YAAY,QACjC,CAAA,CAACK,MAAMC,OAAO,CAACJ,UAAUA,MAAMK,MAAM,KAAK,CAAA,GAC3C;gCACA,OAAO;4BACT;4BAEA,OAAO;wBACT;oBACF;iBACD;YACH;YACA;gBACEnB,MAAM;gBACNC,MAAM;gBACNN,OAAO;oBACLW,aAAa;gBACf;YACF;YACA;gBACEN,MAAM;gBACNC,MAAM;gBACNF,QAAQ;oBACN;wBACEC,MAAM;wBACNC,MAAM;oBACR;uBACIP,yBACA;wBACE;4BACEM,MAAM;4BACNC,MAAM;4BACNI,YAAYX;wBACd;qBACD,GACD,EAAE;oBACN;wBACEM,MAAM;wBACNC,MAAM;wBACNmB,SAAS;4BAAC;4BAAU;4BAAW;yBAAU;oBAC3C;oBACA;wBACEpB,MAAM;wBACNC,MAAM;wBACNM,cAAc;oBAChB;iBACD;YACH;eACIf,qBACA;gBACE;oBACEQ,MAAM;oBACNC,MAAM;oBACNN,OAAO;wBACL0B,YAAY;4BACVC,OAAOlC;wBACT;wBACAmC,QAAQ;4BACN/B;4BACAC;4BACA+B,wBAAwBjC;wBAC1B;oBACF;gBACF;aACD,GACD,EAAE;SACP;QACDkC,OAAO;YACLC,cAAc;gBAACrC;aAAoB;QACrC;QACAsC,QAAQ;YACNC,QAAQ;YACRC,UAAU;QACZ;QACAC,UAAU;YACRC,QAAQ;QACV;IACF,CAAA,EAAE"}
@@ -65,15 +65,6 @@ export const createSyncRunsCollection = ({ slug })=>({
65
65
  type: 'checkbox',
66
66
  defaultValue: false
67
67
  },
68
- {
69
- name: 'effectivePublishMode',
70
- type: 'select',
71
- options: [
72
- 'draft',
73
- 'preserve',
74
- 'published'
75
- ]
76
- },
77
68
  {
78
69
  name: 'deleteBehavior',
79
70
  type: 'select',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/collections/syncRuns.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nexport type CreateSyncRunsCollectionOptions = {\n slug: string\n}\n\nexport const createSyncRunsCollection = ({\n slug,\n}: CreateSyncRunsCollectionOptions): CollectionConfig => ({\n slug,\n admin: {\n defaultColumns: ['sourceId', 'mode', 'status', 'startedAt', 'completedAt'],\n hidden: true,\n useAsTitle: 'sourceId',\n },\n fields: [\n {\n name: 'sourceId',\n type: 'text',\n index: true,\n required: true,\n },\n {\n name: 'repository',\n type: 'text',\n },\n {\n name: 'branch',\n type: 'text',\n },\n {\n name: 'commit',\n type: 'text',\n index: true,\n },\n {\n name: 'actor',\n type: 'text',\n },\n {\n name: 'keyId',\n type: 'text',\n index: true,\n },\n {\n name: 'mode',\n type: 'select',\n options: ['dry-run', 'sync'],\n required: true,\n },\n {\n name: 'status',\n type: 'select',\n defaultValue: 'pending',\n options: ['pending', 'success', 'failed'],\n required: true,\n },\n {\n name: 'publishRequested',\n type: 'checkbox',\n defaultValue: false,\n },\n {\n name: 'effectivePublishMode',\n type: 'select',\n options: ['draft', 'preserve', 'published'],\n },\n {\n name: 'deleteBehavior',\n type: 'select',\n options: ['archive', 'delete', 'draft', 'ignore'],\n },\n {\n name: 'bodyHash',\n type: 'text',\n index: true,\n },\n {\n name: 'fileCount',\n type: 'number',\n defaultValue: 0,\n },\n {\n name: 'totalBytes',\n type: 'number',\n defaultValue: 0,\n },\n {\n name: 'summary',\n type: 'json',\n },\n {\n name: 'warnings',\n type: 'array',\n fields: [\n {\n name: 'message',\n type: 'textarea',\n },\n ],\n },\n {\n name: 'errors',\n type: 'array',\n fields: [\n {\n name: 'message',\n type: 'textarea',\n },\n ],\n },\n {\n name: 'startedAt',\n type: 'date',\n index: true,\n required: true,\n },\n {\n name: 'completedAt',\n type: 'date',\n },\n ],\n})\n"],"names":["createSyncRunsCollection","slug","admin","defaultColumns","hidden","useAsTitle","fields","name","type","index","required","options","defaultValue"],"mappings":"AAMA,OAAO,MAAMA,2BAA2B,CAAC,EACvCC,IAAI,EAC4B,GAAwB,CAAA;QACxDA;QACAC,OAAO;YACLC,gBAAgB;gBAAC;gBAAY;gBAAQ;gBAAU;gBAAa;aAAc;YAC1EC,QAAQ;YACRC,YAAY;QACd;QACAC,QAAQ;YACN;gBACEC,MAAM;gBACNC,MAAM;gBACNC,OAAO;gBACPC,UAAU;YACZ;YACA;gBACEH,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNC,OAAO;YACT;YACA;gBACEF,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNC,OAAO;YACT;YACA;gBACEF,MAAM;gBACNC,MAAM;gBACNG,SAAS;oBAAC;oBAAW;iBAAO;gBAC5BD,UAAU;YACZ;YACA;gBACEH,MAAM;gBACNC,MAAM;gBACNI,cAAc;gBACdD,SAAS;oBAAC;oBAAW;oBAAW;iBAAS;gBACzCD,UAAU;YACZ;YACA;gBACEH,MAAM;gBACNC,MAAM;gBACNI,cAAc;YAChB;YACA;gBACEL,MAAM;gBACNC,MAAM;gBACNG,SAAS;oBAAC;oBAAS;oBAAY;iBAAY;YAC7C;YACA;gBACEJ,MAAM;gBACNC,MAAM;gBACNG,SAAS;oBAAC;oBAAW;oBAAU;oBAAS;iBAAS;YACnD;YACA;gBACEJ,MAAM;gBACNC,MAAM;gBACNC,OAAO;YACT;YACA;gBACEF,MAAM;gBACNC,MAAM;gBACNI,cAAc;YAChB;YACA;gBACEL,MAAM;gBACNC,MAAM;gBACNI,cAAc;YAChB;YACA;gBACEL,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNF,QAAQ;oBACN;wBACEC,MAAM;wBACNC,MAAM;oBACR;iBACD;YACH;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNF,QAAQ;oBACN;wBACEC,MAAM;wBACNC,MAAM;oBACR;iBACD;YACH;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNC,OAAO;gBACPC,UAAU;YACZ;YACA;gBACEH,MAAM;gBACNC,MAAM;YACR;SACD;IACH,CAAA,EAAE"}
1
+ {"version":3,"sources":["../../src/collections/syncRuns.ts"],"sourcesContent":["import type { CollectionConfig } from 'payload'\n\nexport type CreateSyncRunsCollectionOptions = {\n slug: string\n}\n\nexport const createSyncRunsCollection = ({\n slug,\n}: CreateSyncRunsCollectionOptions): CollectionConfig => ({\n slug,\n admin: {\n defaultColumns: ['sourceId', 'mode', 'status', 'startedAt', 'completedAt'],\n hidden: true,\n useAsTitle: 'sourceId',\n },\n fields: [\n {\n name: 'sourceId',\n type: 'text',\n index: true,\n required: true,\n },\n {\n name: 'repository',\n type: 'text',\n },\n {\n name: 'branch',\n type: 'text',\n },\n {\n name: 'commit',\n type: 'text',\n index: true,\n },\n {\n name: 'actor',\n type: 'text',\n },\n {\n name: 'keyId',\n type: 'text',\n index: true,\n },\n {\n name: 'mode',\n type: 'select',\n options: ['dry-run', 'sync'],\n required: true,\n },\n {\n name: 'status',\n type: 'select',\n defaultValue: 'pending',\n options: ['pending', 'success', 'failed'],\n required: true,\n },\n {\n name: 'publishRequested',\n type: 'checkbox',\n defaultValue: false,\n },\n {\n name: 'deleteBehavior',\n type: 'select',\n options: ['archive', 'delete', 'draft', 'ignore'],\n },\n {\n name: 'bodyHash',\n type: 'text',\n index: true,\n },\n {\n name: 'fileCount',\n type: 'number',\n defaultValue: 0,\n },\n {\n name: 'totalBytes',\n type: 'number',\n defaultValue: 0,\n },\n {\n name: 'summary',\n type: 'json',\n },\n {\n name: 'warnings',\n type: 'array',\n fields: [\n {\n name: 'message',\n type: 'textarea',\n },\n ],\n },\n {\n name: 'errors',\n type: 'array',\n fields: [\n {\n name: 'message',\n type: 'textarea',\n },\n ],\n },\n {\n name: 'startedAt',\n type: 'date',\n index: true,\n required: true,\n },\n {\n name: 'completedAt',\n type: 'date',\n },\n ],\n})\n"],"names":["createSyncRunsCollection","slug","admin","defaultColumns","hidden","useAsTitle","fields","name","type","index","required","options","defaultValue"],"mappings":"AAMA,OAAO,MAAMA,2BAA2B,CAAC,EACvCC,IAAI,EAC4B,GAAwB,CAAA;QACxDA;QACAC,OAAO;YACLC,gBAAgB;gBAAC;gBAAY;gBAAQ;gBAAU;gBAAa;aAAc;YAC1EC,QAAQ;YACRC,YAAY;QACd;QACAC,QAAQ;YACN;gBACEC,MAAM;gBACNC,MAAM;gBACNC,OAAO;gBACPC,UAAU;YACZ;YACA;gBACEH,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNC,OAAO;YACT;YACA;gBACEF,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNC,OAAO;YACT;YACA;gBACEF,MAAM;gBACNC,MAAM;gBACNG,SAAS;oBAAC;oBAAW;iBAAO;gBAC5BD,UAAU;YACZ;YACA;gBACEH,MAAM;gBACNC,MAAM;gBACNI,cAAc;gBACdD,SAAS;oBAAC;oBAAW;oBAAW;iBAAS;gBACzCD,UAAU;YACZ;YACA;gBACEH,MAAM;gBACNC,MAAM;gBACNI,cAAc;YAChB;YACA;gBACEL,MAAM;gBACNC,MAAM;gBACNG,SAAS;oBAAC;oBAAW;oBAAU;oBAAS;iBAAS;YACnD;YACA;gBACEJ,MAAM;gBACNC,MAAM;gBACNC,OAAO;YACT;YACA;gBACEF,MAAM;gBACNC,MAAM;gBACNI,cAAc;YAChB;YACA;gBACEL,MAAM;gBACNC,MAAM;gBACNI,cAAc;YAChB;YACA;gBACEL,MAAM;gBACNC,MAAM;YACR;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNF,QAAQ;oBACN;wBACEC,MAAM;wBACNC,MAAM;oBACR;iBACD;YACH;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNF,QAAQ;oBACN;wBACEC,MAAM;wBACNC,MAAM;oBACR;iBACD;YACH;YACA;gBACED,MAAM;gBACNC,MAAM;gBACNC,OAAO;gBACPC,UAAU;YACZ;YACA;gBACEH,MAAM;gBACNC,MAAM;YACR;SACD;IACH,CAAA,EAAE"}
@@ -1,4 +1,2 @@
1
- export { createPublishGeneratedDocsEndpoint } from './publishGeneratedDocs.js';
2
- export type { CreatePublishGeneratedDocsEndpointOptions } from './publishGeneratedDocs.js';
3
1
  export { createSyncEndpoint } from './sync.js';
4
2
  export type { CreateSyncEndpointOptions, DocsSyncEndpointErrorCode } from './sync.js';
@@ -1,4 +1,3 @@
1
- export { createPublishGeneratedDocsEndpoint } from './publishGeneratedDocs.js';
2
1
  export { createSyncEndpoint } from './sync.js';
3
2
 
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/endpoints/index.ts"],"sourcesContent":["export { createPublishGeneratedDocsEndpoint } from './publishGeneratedDocs.js'\nexport type { CreatePublishGeneratedDocsEndpointOptions } from './publishGeneratedDocs.js'\nexport { createSyncEndpoint } from './sync.js'\nexport type { CreateSyncEndpointOptions, DocsSyncEndpointErrorCode } from './sync.js'\n"],"names":["createPublishGeneratedDocsEndpoint","createSyncEndpoint"],"mappings":"AAAA,SAASA,kCAAkC,QAAQ,4BAA2B;AAE9E,SAASC,kBAAkB,QAAQ,YAAW"}
1
+ {"version":3,"sources":["../../src/endpoints/index.ts"],"sourcesContent":["export { createSyncEndpoint } from './sync.js'\nexport type { CreateSyncEndpointOptions, DocsSyncEndpointErrorCode } from './sync.js'\n"],"names":["createSyncEndpoint"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,YAAW"}
@@ -1,5 +1,4 @@
1
1
  import type { Endpoint } from 'payload';
2
- import type { DocsPublishMode } from '../payload/index.js';
3
2
  import type { FetchJson } from '../security/index.js';
4
3
  import type { DocsDeleteBehavior } from '../sync/index.js';
5
4
  import type { PayloadMarkdownDocsAuthConfig } from '../types.js';
@@ -9,7 +8,6 @@ export type CreateSyncEndpointOptions = {
9
8
  allowPublish?: boolean;
10
9
  allowWrites?: boolean;
11
10
  auth?: PayloadMarkdownDocsAuthConfig;
12
- defaultPublishMode?: DocsPublishMode;
13
11
  deleteBehavior?: DocsDeleteBehavior;
14
12
  docsCollectionSlug: string;
15
13
  docsEnabled: boolean;