@forumone/throughline 2.1.0 → 2.2.0-next-332baf9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @forumone/throughline
2
2
 
3
+ ## 2.2.0-next-332baf9
4
+
5
+ ### Minor Changes
6
+
7
+ - 332baf9: Publishing refuses a page whose internal links go to a draft, trashed or deleted document (forumone-2026#756). A new pipeline step, `link-targets`, runs after `required-fields` and looks up every link's target. A deleted target, a trashed one, or an unpublished one in a collection with drafts blocks the publish (`code: 'link-targets'`). Each issue names the block or field and the target's title, and its `field` is the link's own path, so the admin marks it. An unpublished target with a scheduled publish time is a warning, not a block.
8
+
9
+ **This is a new blocking step, and it's on by default.** After upgrading, a page that already links to a draft or trashed page can't be published until the link is fixed. `get_publish_status` and `check` report it like any other blocker. To switch it off, set `publishing: { linkTargets: { enabled: false } }`.
10
+
11
+ A link is either an internal link in Lexical rich text, or a relationship field marked with `custom: { throughlineLinkTarget: true }`. The design-system generator's `linkField` now marks its `reference`, so every generated link is covered without changes. To cover a hand-written link field, wrap it in `markLinkTarget` from `@forumone/throughline/publishing`. A marked reference whose sibling `mode` isn't `internal` is ignored, and `markLinkTarget(field, { when })` takes a different rule. The structural walk behind `referencesIn` is now `walkDocument`, exported from `/media` along with `linkTargetsIn`.
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [332baf9]
16
+ - @forumone/throughline-design-system@2.2.0-next-332baf9
17
+
3
18
  ## 2.1.0
4
19
 
5
20
  ### Minor Changes
@@ -188,8 +188,12 @@
188
188
  "JobTrigger": ["@forumone/throughline/jobs"],
189
189
  "JobsAdapter": ["@forumone/throughline/jobs"],
190
190
  "KeyParts": ["@forumone/throughline/media"],
191
+ "LINK_TARGET_KEY": ["@forumone/throughline/media", "@forumone/throughline/publishing"],
191
192
  "LISTED": ["@forumone/throughline/fields"],
192
193
  "LOCKED_DOCUMENTS_SLUG": ["@forumone/throughline"],
194
+ "LinkTarget": ["@forumone/throughline/media", "@forumone/throughline/publishing"],
195
+ "LinkTargetMarker": ["@forumone/throughline/media", "@forumone/throughline/publishing"],
196
+ "LinkTargetsInOptions": ["@forumone/throughline/media", "@forumone/throughline/publishing"],
193
197
  "LockHolder": ["@forumone/throughline/content"],
194
198
  "Logger": ["@forumone/throughline"],
195
199
  "MANUAL_SYNC_EVENT": ["@forumone/throughline/integrations"],
@@ -314,6 +318,9 @@
314
318
  "WEBHOOK_INTEGRATION_ID": ["@forumone/throughline/integrations"],
315
319
  "WORK_TOOLS": ["@forumone/throughline/editorial"],
316
320
  "WORK_TOOL_DESCRIPTORS": ["@forumone/throughline/editorial"],
321
+ "WalkDocumentOptions": ["@forumone/throughline/media"],
322
+ "WalkLocation": ["@forumone/throughline/media"],
323
+ "WalkVisitor": ["@forumone/throughline/media"],
317
324
  "WebhookConfig": ["@forumone/throughline/integrations"],
318
325
  "WorkOptions": ["@forumone/throughline/editorial"],
319
326
  "WorkRow": ["@forumone/throughline/editorial"],
@@ -472,10 +479,13 @@
472
479
  "jobPayload": ["@forumone/throughline/jobs"],
473
480
  "keepOrStampPublishedAt": ["@forumone/throughline/fields"],
474
481
  "linkLabelsCheck": ["@forumone/throughline/publishing"],
482
+ "linkTargetMarker": ["@forumone/throughline/media"],
483
+ "linkTargetsIn": ["@forumone/throughline/media", "@forumone/throughline/publishing"],
475
484
  "listHref": ["@forumone/throughline/editorial"],
476
485
  "lockHolder": ["@forumone/throughline/content"],
477
486
  "lockRefusal": ["@forumone/throughline/content"],
478
487
  "mapFields": ["@forumone/throughline/fields"],
488
+ "markLinkTarget": ["@forumone/throughline/media", "@forumone/throughline/publishing"],
479
489
  "matchCommands": ["@forumone/throughline/editorial"],
480
490
  "matchRank": ["@forumone/throughline/editorial"],
481
491
  "mcpApiKeyAccess": ["@forumone/throughline"],
@@ -562,6 +572,7 @@
562
572
  "usedBy": ["@forumone/throughline/fields"],
563
573
  "validateBlock": ["@forumone/throughline/content"],
564
574
  "verifyActionToken": ["@forumone/throughline/approvals"],
575
+ "walkDocument": ["@forumone/throughline/media"],
565
576
  "webhookIntegration": ["@forumone/throughline/integrations"],
566
577
  "whereQuery": ["@forumone/throughline/editorial"],
567
578
  "withMeta": ["@forumone/throughline"],
@@ -38,4 +38,12 @@ export { publishAtScheduledTimeJob } from './jobs/publish-at-scheduled-time.js';
38
38
  export { createTagRevalidationHooks } from './jobs/revalidate-tag-hooks.js';
39
39
  export type { CollectionTagHookOptions, GlobalTagHookOptions, RevalidateTagFn, TagRevalidationHooks, TagRevalidationOptions, TagSelector, } from './jobs/revalidate-tag-hooks.js';
40
40
  export type { ExecuteScheduledPublishesOptions, PublishAtScheduledTimeOptions, RevalidateFn, RevalidateOnPublishOptions, RevalidatePathsInput, ScheduledCollectionConfig, ScheduledPublishRequest, ScheduledPublishResult, } from '../jobs/workflow-types.js';
41
+ /**
42
+ * Links, for the `link-targets` step: a host marks its own hand-written link
43
+ * fields with `markLinkTarget` so a link to a draft, trashed or deleted page
44
+ * is refused at publish. The fields the design-system generator builds are
45
+ * marked already.
46
+ */
47
+ export { LINK_TARGET_KEY, linkTargetsIn, markLinkTarget } from '../references/links.js';
48
+ export type { LinkTarget, LinkTargetMarker, LinkTargetsInOptions } from '../references/links.js';
41
49
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publishing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AAErB,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAE5B;;;;GAIG;AACH,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AAErB,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,cAAc,CAAA;AAErB;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAGtE,OAAO,EACL,6BAA6B,EAC7B,YAAY,EACZ,qBAAqB,EACrB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAA;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAA;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAC3E,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,GACZ,MAAM,gCAAgC,CAAA;AACvC,YAAY,EACV,gCAAgC,EAChC,6BAA6B,EAC7B,YAAY,EACZ,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publishing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AAErB,YAAY,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,kBAAkB,GACnB,MAAM,qBAAqB,CAAA;AAE5B;;;;GAIG;AACH,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AAErB,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,cAAc,CAAA;AAErB;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAGtE,OAAO,EACL,6BAA6B,EAC7B,YAAY,EACZ,qBAAqB,EACrB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAA;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAA;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAC3E,YAAY,EACV,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,GACZ,MAAM,gCAAgC,CAAA;AACvC,YAAY,EACV,gCAAgC,EAChC,6BAA6B,EAC7B,YAAY,EACZ,0BAA0B,EAC1B,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,2BAA2B,CAAA;AAElC;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvF,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -35,4 +35,11 @@ export { revalidateOnPublishJob } from './jobs/revalidate-on-publish.js';
35
35
  export { executeScheduledPublishesJob } from './jobs/execute-scheduled-publishes.js';
36
36
  export { publishAtScheduledTimeJob } from './jobs/publish-at-scheduled-time.js';
37
37
  export { createTagRevalidationHooks } from './jobs/revalidate-tag-hooks.js';
38
+ /**
39
+ * Links, for the `link-targets` step: a host marks its own hand-written link
40
+ * fields with `markLinkTarget` so a link to a draft, trashed or deleted page
41
+ * is refused at publish. The fields the design-system generator builds are
42
+ * marked already.
43
+ */
44
+ export { LINK_TARGET_KEY, linkTargetsIn, markLinkTarget } from '../references/links.js';
38
45
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/publishing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAmB9C;;;;GAIG;AACH,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AAerB;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,uFAAuF;AACvF,OAAO,EACL,6BAA6B,EAC7B,YAAY,EACZ,qBAAqB,EACrB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAE1B,gFAAgF;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAA;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAA;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/publishing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAmB9C;;;;GAIG;AACH,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAA;AAerB;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD;;;;GAIG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AAEtE,uFAAuF;AACvF,OAAO,EACL,6BAA6B,EAC7B,YAAY,EACZ,qBAAqB,EACrB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAE1B,gFAAgF;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAA;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAA;AAC/E,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAoB3E;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA"}
@@ -67,6 +67,19 @@ export interface PublishingPluginOptions extends BaseCorePluginOptions {
67
67
  * plugin ships a fix. Switch one off here and supply your own.
68
68
  */
69
69
  disableAccessibilityChecks?: string[];
70
+ /**
71
+ * Optional: the `link-targets` step, which refuses a publish whose internal
72
+ * links go to a draft, a document in the trash, or one that has been
73
+ * deleted. On by default; `{ enabled: false }` switches it off.
74
+ *
75
+ * A link is a relationship field marked with `markLinkTarget` (every link
76
+ * the design-system generator builds already is) or an internal link in
77
+ * rich text. A target that is not published but has a scheduled publish
78
+ * time is a warning rather than a block.
79
+ */
80
+ linkTargets?: {
81
+ enabled?: boolean;
82
+ };
70
83
  /** Optional: resolver consulted when a document's policy requires approval. */
71
84
  approvalResolver?: ApprovalResolver;
72
85
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/publishing/options.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/publishing/options.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/publishing/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA2HvB,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACxE,QAAQ,EAAE;CACd,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgC;IAC9D,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAA;IAC7F,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IACnF,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAChE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC5C,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAgC,EAChC,IAAY;IAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,sFAAsF,CAC1G,CAAA;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ;QAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;QAClC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ;QAC3C,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;QACrC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,aAAa;QAC1D,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,oBAAoB;QAC3E,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/publishing/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAsIvB,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACxE,QAAQ,EAAE;CACd,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgC;IAC9D,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAA;IAC7F,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IACnF,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAChE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC5C,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAgC,EAChC,IAAY;IAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,sFAAsF,CAC1G,CAAA;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ;QAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;QAClC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ;QAC3C,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;QACrC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,aAAa;QAC1D,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,oBAAoB;QAC3E,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/publishing/pipeline/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAA;AAoE/E;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAO1F;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAG5F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAW5F;AAED,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/publishing/pipeline/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAgB,MAAM,YAAY,CAAA;AAmE/E;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAO1F;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAG5F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAW5F;AAED,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA"}
@@ -2,6 +2,7 @@ import { existStep } from './steps/exist.js';
2
2
  import { compositionStep } from './steps/composition.js';
3
3
  import { accessibilityStep } from './steps/accessibility.js';
4
4
  import { requiredFieldsStep } from './steps/required-fields.js';
5
+ import { linkTargetsStep } from './steps/link-targets.js';
5
6
  import { embargoStep } from './steps/embargo.js';
6
7
  import { approvalStep } from './steps/approval.js';
7
8
  import { executeStep } from './steps/execute.js';
@@ -10,6 +11,8 @@ const PREFLIGHT_STEPS = [
10
11
  { name: 'composition', step: compositionStep },
11
12
  { name: 'accessibility', step: accessibilityStep },
12
13
  { name: 'required-fields', step: requiredFieldsStep },
14
+ // The last content check, and the first to read other documents.
15
+ { name: 'link-targets', step: linkTargetsStep },
13
16
  { name: 'embargo', step: embargoStep },
14
17
  { name: 'approval', step: approvalStep },
15
18
  ];
@@ -29,13 +32,10 @@ const ORDERED_STEPS = [
29
32
  * differs between the two callers, and that difference is the only reason there
30
33
  * are still two.
31
34
  *
32
- * One thing worth knowing before adding a step: a warning cannot currently reach
33
- * a *failure* envelope. `execute` is the only step that warns, it runs last, and
34
- * its two failure returns carry none — so `runPublishPipeline` spreading
35
- * warnings onto a failure is unreachable today. It is kept because the moment a
36
- * step both warns and fails, or an earlier step learns to warn, dropping them
37
- * would be silent. That is also why there is no test for it: the pipeline has no
38
- * way to produce the case.
35
+ * A warning can reach a *failure* envelope: `link-targets` warns about a link
36
+ * to a scheduled page and can fail on another link in the same run, and an
37
+ * earlier step's warnings are carried past a later failure. `runPublishPipeline`
38
+ * spreads them onto the failure so neither is dropped silently.
39
39
  */
40
40
  async function runSteps(context, steps) {
41
41
  const warnings = [];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/publishing/pipeline/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/publishing/pipeline/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PipelineStep } from '../types.js';
2
+ export declare const linkTargetsStep: PipelineStep;
3
+ //# sourceMappingURL=link-targets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-targets.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/link-targets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkC,YAAY,EAAE,MAAM,aAAa,CAAA;AAkO/E,eAAO,MAAM,eAAe,EAAE,YA0E7B,CAAA"}
@@ -0,0 +1,269 @@
1
+ import { blockRegistry } from '../../../references/find.js';
2
+ import { linkTargetsIn } from '../../../references/links.js';
3
+ import { resolveCollection } from '../../options.js';
4
+ /*
5
+ Refuses a publish whose links go to pages readers cannot see (forumone-2026#756).
6
+
7
+ An internal link stores a relationship and the renderer resolves it when the
8
+ page is read. If the target is a draft, in the trash or deleted, the link
9
+ renders as nothing or as a 404, and nothing told the editor who published the
10
+ page. Moving a page to the trash is routine since the content trash, so this got
11
+ likelier rather than rarer.
12
+
13
+ ## Its own step, not an accessibility check
14
+
15
+ The accessibility checks are pure functions of the document. This one has to
16
+ ask the database about other documents, so it is a step with `ctx.payload`, and
17
+ it runs after the pure content checks and before the policy steps.
18
+
19
+ ## What it reads
20
+
21
+ - **The document again, at `depth: 0`.** The pipeline's copy was read at
22
+ Payload's default depth, and population replaces a trashed target with
23
+ `null`: the very link this is looking for would have lost its id.
24
+ - **Each linked collection once**, `where: { id: { in } }`, with `trash: true`
25
+ so a trashed target comes back with its `deletedAt` rather than looking
26
+ deleted, and `draft: false` so `_status` is the live row's.
27
+ - **The latest draft of unpublished targets**, only in collections that can
28
+ carry a schedule, because a schedule lives on the latest version.
29
+
30
+ All with `overrideAccess: true`: the question is what a reader will get, not
31
+ what the person publishing may read.
32
+
33
+ ## The verdicts
34
+
35
+ - not found: deleted, an error;
36
+ - `deletedAt` set: in the trash, an error;
37
+ - drafts enabled and not published: an error, unless the target is publishable
38
+ and has a scheduled publish time, which is a warning. A page scheduled to go
39
+ live with the page it links to is legitimate;
40
+ - anything else, including a collection without drafts: published.
41
+
42
+ A link back to the document being published is skipped: publishing it is what
43
+ makes it live.
44
+ */
45
+ const CODE = 'link-targets';
46
+ function keyOf(relationTo, id) {
47
+ return `${relationTo}\u0000${String(id)}`;
48
+ }
49
+ function configOf(payload, slug) {
50
+ const collections = payload
51
+ .collections;
52
+ return collections?.[slug]?.config;
53
+ }
54
+ /** A label that may be a string, a record of translations, or a function. */
55
+ function textOf(label) {
56
+ if (typeof label === 'string' && label.trim() !== '')
57
+ return label;
58
+ if (label && typeof label === 'object') {
59
+ const record = label;
60
+ const preferred = record['en'] ?? Object.values(record).find((v) => typeof v === 'string');
61
+ if (typeof preferred === 'string' && preferred.trim() !== '')
62
+ return preferred;
63
+ }
64
+ return undefined;
65
+ }
66
+ /** `CardGrid` → `Card Grid`, `heroImage` → `Hero image`, for a config with no label. */
67
+ function humanize(name) {
68
+ const words = name
69
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
70
+ .replace(/[_-]+/g, ' ')
71
+ .trim();
72
+ return words.charAt(0).toUpperCase() + words.slice(1);
73
+ }
74
+ function article(noun) {
75
+ return /^[aeiou]/i.test(noun) ? 'an' : 'a';
76
+ }
77
+ function singularOf(config, slug) {
78
+ const labels = config?.labels;
79
+ return textOf(labels?.singular) ?? humanize(slug);
80
+ }
81
+ function blockLabel(block) {
82
+ const labels = block.labels;
83
+ return textOf(labels?.singular) ?? humanize(block.slug);
84
+ }
85
+ /** Where the link is, in the editor's terms: "block 3 (Card Grid)", "the Body field". */
86
+ function placeOf(link) {
87
+ const { block, top } = link.at;
88
+ if (block)
89
+ return `block ${block.index + 1} (${blockLabel(block.block)})`;
90
+ if (top)
91
+ return `the ${textOf(top.label) ?? humanize(top.name)} field`;
92
+ return 'this page';
93
+ }
94
+ function quoted(title) {
95
+ return title ? `"${title}"` : undefined;
96
+ }
97
+ function messageFor(link, verdict, singular) {
98
+ const where = `A link in ${placeOf(link)}`;
99
+ switch (verdict.kind) {
100
+ case 'deleted':
101
+ return `${where} goes to ${article(singular)} ${singular} that has been deleted. Change the link.`;
102
+ case 'trash': {
103
+ const name = quoted(verdict.title) ?? `${article(singular)} ${singular}`;
104
+ return `${where} goes to ${name}, which is in the trash. Restore it, or change the link.`;
105
+ }
106
+ case 'draft': {
107
+ const name = quoted(verdict.title);
108
+ return name
109
+ ? `${where} goes to ${name}, which is a draft, so readers would get a page that doesn't exist. Publish ${name} first, or change the link.`
110
+ : `${where} goes to ${article(singular)} ${singular} that is a draft, so readers would get a page that doesn't exist. Publish it first, or change the link.`;
111
+ }
112
+ case 'scheduled': {
113
+ const name = quoted(verdict.title) ?? `${article(singular)} ${singular}`;
114
+ return `${where} goes to ${name}, which isn't published yet but is scheduled to be. Until it goes live, readers who follow the link will get a page that doesn't exist.`;
115
+ }
116
+ case 'published':
117
+ return '';
118
+ }
119
+ }
120
+ function hasDrafts(config) {
121
+ const { versions } = config;
122
+ return Boolean(versions && typeof versions === 'object' && versions.drafts);
123
+ }
124
+ function titleOf(doc, field) {
125
+ const value = doc?.[field];
126
+ return typeof value === 'string' && value.trim() !== '' ? value : undefined;
127
+ }
128
+ /** One collection's targets, classified. One query, plus one for unpublished targets that may be scheduled. */
129
+ async function classify(ctx, slug, config, ids) {
130
+ const drafts = hasDrafts(config);
131
+ const titleField = config.admin?.useAsTitle ?? 'id';
132
+ const select = { [titleField]: true };
133
+ if (drafts)
134
+ select['_status'] = true;
135
+ if (config.trash)
136
+ select['deletedAt'] = true;
137
+ const found = await ctx.payload.find({
138
+ collection: slug,
139
+ where: { id: { in: ids } },
140
+ draft: false,
141
+ ...(config.trash ? { trash: true } : {}),
142
+ depth: 0,
143
+ overrideAccess: true,
144
+ limit: ids.length,
145
+ pagination: false,
146
+ select,
147
+ });
148
+ const rows = new Map();
149
+ for (const doc of found.docs)
150
+ rows.set(String(doc['id']), doc);
151
+ const verdicts = new Map();
152
+ const unpublished = [];
153
+ for (const id of ids) {
154
+ const row = rows.get(String(id));
155
+ if (!row)
156
+ verdicts.set(String(id), { kind: 'deleted' });
157
+ else if (row['deletedAt'])
158
+ verdicts.set(String(id), { kind: 'trash', title: titleOf(row, titleField) });
159
+ else if (drafts && row['_status'] !== 'published')
160
+ unpublished.push(id);
161
+ else
162
+ verdicts.set(String(id), { kind: 'published' });
163
+ }
164
+ const publishable = ctx.options.collections.some((c) => c.slug === slug);
165
+ const scheduledField = publishable
166
+ ? resolveCollection(ctx.options, slug).scheduledPublishField
167
+ : undefined;
168
+ let latest = new Map();
169
+ if (unpublished.length > 0) {
170
+ const drafted = await ctx.payload.find({
171
+ collection: slug,
172
+ where: { id: { in: unpublished } },
173
+ draft: true,
174
+ depth: 0,
175
+ overrideAccess: true,
176
+ limit: unpublished.length,
177
+ pagination: false,
178
+ select: { [titleField]: true, ...(scheduledField ? { [scheduledField]: true } : {}) },
179
+ });
180
+ latest = new Map(drafted.docs.map((d) => [String(d['id']), d]));
181
+ }
182
+ for (const id of unpublished) {
183
+ const draft = latest.get(String(id));
184
+ const title = titleOf(draft, titleField) ?? titleOf(rows.get(String(id)), titleField);
185
+ const scheduled = scheduledField ? draft?.[scheduledField] : undefined;
186
+ verdicts.set(String(id), scheduled !== undefined && scheduled !== null && scheduled !== ''
187
+ ? { kind: 'scheduled', title }
188
+ : { kind: 'draft', title });
189
+ }
190
+ return verdicts;
191
+ }
192
+ /** The document as stored, ids unpopulated; the pipeline's copy when it cannot be read. */
193
+ async function storedDocument(ctx) {
194
+ const stored = await ctx.payload.findByID({
195
+ collection: ctx.collection.slug,
196
+ id: ctx.documentId,
197
+ draft: true,
198
+ depth: 0,
199
+ overrideAccess: true,
200
+ disableErrors: true,
201
+ });
202
+ return stored ?? ctx.document;
203
+ }
204
+ export const linkTargetsStep = async (ctx) => {
205
+ if (ctx.options.linkTargets?.enabled === false)
206
+ return { pass: true };
207
+ const own = configOf(ctx.payload, ctx.collection.slug);
208
+ if (!own)
209
+ return { pass: true };
210
+ let links;
211
+ const verdicts = new Map();
212
+ try {
213
+ const data = await storedDocument(ctx);
214
+ links = linkTargetsIn(own.fields, data, {
215
+ blocks: blockRegistry(ctx.payload),
216
+ }).filter((link) => !(link.relationTo === ctx.collection.slug && String(link.id) === ctx.documentId));
217
+ if (links.length === 0)
218
+ return { pass: true };
219
+ const byCollection = new Map();
220
+ for (const link of links) {
221
+ const ids = byCollection.get(link.relationTo) ?? new Map();
222
+ ids.set(String(link.id), link.id);
223
+ byCollection.set(link.relationTo, ids);
224
+ }
225
+ for (const [slug, ids] of byCollection) {
226
+ const config = configOf(ctx.payload, slug);
227
+ // A collection the config no longer has: nothing to ask, and nothing a reader can reach either way.
228
+ if (!config)
229
+ continue;
230
+ for (const [id, verdict] of await classify(ctx, slug, config, [...ids.values()])) {
231
+ verdicts.set(keyOf(slug, id), verdict);
232
+ }
233
+ }
234
+ }
235
+ catch (error) {
236
+ ctx.payload.logger?.error?.({ err: error }, '[publishing] link-targets: could not read link targets');
237
+ return {
238
+ pass: false,
239
+ code: CODE,
240
+ reason: "Couldn't check where this page's links go, so it hasn't been published. Try again, and if it keeps happening, tell a site administrator.",
241
+ };
242
+ }
243
+ const errors = [];
244
+ const warnings = [];
245
+ for (const link of links) {
246
+ const verdict = verdicts.get(keyOf(link.relationTo, link.id));
247
+ if (!verdict || verdict.kind === 'published')
248
+ continue;
249
+ const message = messageFor(link, verdict, singularOf(configOf(ctx.payload, link.relationTo), link.relationTo));
250
+ if (verdict.kind === 'scheduled') {
251
+ warnings.push(message);
252
+ continue;
253
+ }
254
+ errors.push({ field: link.at.dataPath, message, severity: 'error', rule: verdict.kind });
255
+ }
256
+ const carried = warnings.length ? { warnings } : {};
257
+ if (errors.length === 0)
258
+ return { pass: true, ...carried };
259
+ return {
260
+ ...carried,
261
+ pass: false,
262
+ code: CODE,
263
+ reason: errors.length === 1
264
+ ? "1 link goes to a page readers can't see"
265
+ : `${errors.length} links go to pages readers can't see`,
266
+ issues: errors,
267
+ };
268
+ };
269
+ //# sourceMappingURL=link-targets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-targets.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/link-targets.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
- export { couldReference, pointsAt, referencesIn, referencesTo } from './walk.js';
2
- export type { Reference, ReferencesInOptions } from './walk.js';
1
+ export { couldReference, pointsAt, referencesIn, referencesTo, walkDocument } from './walk.js';
2
+ export type { Reference, ReferencesInOptions, WalkDocumentOptions, WalkLocation, WalkVisitor, } from './walk.js';
3
+ export { LINK_TARGET_KEY, linkTargetMarker, linkTargetsIn, markLinkTarget } from './links.js';
4
+ export type { LinkTarget, LinkTargetMarker, LinkTargetsInOptions } from './links.js';
3
5
  export { blockRegistry, describeReferences, findReferencedIds, findReferences } from './find.js';
4
6
  export type { DocumentReferences, FindReferencesOptions } from './find.js';
5
7
  export { movesToTrash, referenceRefusal, refuseDeleteWhileReferenced, refuseTrashWhileReferenced, } from './guards.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/references/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAChF,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAChG,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAE1E,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACjF,YAAY,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/references/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC9F,YAAY,EACV,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,WAAW,GACZ,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC7F,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEpF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAChG,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AAE1E,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACjF,YAAY,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA"}
@@ -1,4 +1,5 @@
1
- export { couldReference, pointsAt, referencesIn, referencesTo } from './walk.js';
1
+ export { couldReference, pointsAt, referencesIn, referencesTo, walkDocument } from './walk.js';
2
+ export { LINK_TARGET_KEY, linkTargetMarker, linkTargetsIn, markLinkTarget } from './links.js';
2
3
  export { blockRegistry, describeReferences, findReferencedIds, findReferences } from './find.js';
3
4
  export { movesToTrash, referenceRefusal, refuseDeleteWhileReferenced, refuseTrashWhileReferenced, } from './guards.js';
4
5
  export { REFERENCE_TOOLS, REFERENCE_TOOL_DESCRIPTORS, createCanDeleteTool, createFindReferencesTool, } from './tools.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/references/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAGhF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGhG,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/references/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAS9F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAG7F,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAGhG,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,aAAa,CAAA;AAGpB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,45 @@
1
+ import type { Block, Field } from 'payload';
2
+ import { type WalkLocation } from './walk.js';
3
+ /** The key a relationship field's `custom` carries to say it is a link. */
4
+ export declare const LINK_TARGET_KEY = "throughlineLinkTarget";
5
+ /**
6
+ * What the marker may hold. `true` follows the generator's rule: the reference
7
+ * counts unless a sibling `mode` says the link goes somewhere else. `when`
8
+ * replaces that rule for a link group shaped differently — it is handed the
9
+ * group's data and answers whether the reference is the live branch.
10
+ */
11
+ export type LinkTargetMarker = true | {
12
+ when?: (siblings: Record<string, unknown>) => boolean;
13
+ };
14
+ /**
15
+ * Marks a hand-written relationship field as a link target, so the publish
16
+ * pipeline's `link-targets` step checks where it goes.
17
+ *
18
+ * ```ts
19
+ * markLinkTarget({ name: 'page', type: 'relationship', relationTo: ['pages', 'posts'] })
20
+ * ```
21
+ */
22
+ export declare function markLinkTarget<T extends Field>(field: T, marker?: LinkTargetMarker): T;
23
+ /** The marker on a field, when it is a relationship or upload carrying one. */
24
+ export declare function linkTargetMarker(field: Field): LinkTargetMarker | undefined;
25
+ /** One link to another document, and where in this one it is. */
26
+ export interface LinkTarget {
27
+ /** The linked document's collection. */
28
+ relationTo: string;
29
+ /** The linked document's id, as it appears in the data. */
30
+ id: number | string;
31
+ /** Whether it was found in a marked field or in rich text. */
32
+ source: 'field' | 'richText';
33
+ /** The walk's location: human path, data path, block and top-level field. */
34
+ at: WalkLocation;
35
+ }
36
+ export interface LinkTargetsInOptions {
37
+ /** As `ReferencesInOptions.blocks`: the config's registry, for `blockReferences` and Lexical blocks. */
38
+ blocks?: readonly Block[] | ReadonlyMap<string, Block>;
39
+ }
40
+ /**
41
+ * Every link inside one document. Pure, like `referencesIn`: the field config
42
+ * and the data in, the links out, and no database.
43
+ */
44
+ export declare function linkTargetsIn(fields: readonly Field[], data: Record<string, unknown> | undefined, options?: LinkTargetsInOptions): LinkTarget[];
45
+ //# sourceMappingURL=links.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.d.ts","sourceRoot":"","sources":["../../src/references/links.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAuC,KAAK,YAAY,EAAE,MAAM,WAAW,CAAA;AA8BlF,2EAA2E;AAC3E,eAAO,MAAM,eAAe,0BAA0B,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG;IAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;CAAE,CAAA;AAE/F;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,gBAAuB,GAAG,CAAC,CAG5F;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,GAAG,SAAS,CAO3E;AAED,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,2DAA2D;IAC3D,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,8DAA8D;IAC9D,MAAM,EAAE,OAAO,GAAG,UAAU,CAAA;IAC5B,6EAA6E;IAC7E,EAAE,EAAE,YAAY,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,wGAAwG;IACxG,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CACvD;AAgCD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,GAAE,oBAAyB,GACjC,UAAU,EAAE,CA4Bd"}
@@ -0,0 +1,117 @@
1
+ import { idOf, walkDocument } from './walk.js';
2
+ /*
3
+ Which documents one document links to, found by the same structural walk as
4
+ `referencesIn` (forumone-2026#756).
5
+
6
+ ## What counts as a link
7
+
8
+ Not every relationship. An author, a list of related articles or a form block's
9
+ form are relationships, and a draft one of those is somebody else's problem. A
10
+ link is a place a reader can follow to another page, and there are two:
11
+
12
+ - **A relationship field marked as a link target**, with
13
+ `custom: { [LINK_TARGET_KEY]: true }`. Throughline's design-system generator
14
+ marks the `reference` of every link it builds; a host marks its own
15
+ hand-written link fields the same way, with `markLinkTarget`. That marker is
16
+ how the platform finds a site's links without learning its schema.
17
+ - **A Lexical internal link**: a `link` or `autolink` node whose `linkType` is
18
+ `internal`, pointing at `doc: { relationTo, value }`.
19
+
20
+ ## A reference the reader cannot reach is not a link
21
+
22
+ A generated link is a group with a `mode`, and only `internal` follows the
23
+ reference: switch a link to "Another site" and the old reference stays stored
24
+ beside the URL. So a marked field whose siblings carry a `mode` other than
25
+ `internal` is skipped, which is the same rule the renderer uses (`mode` absent
26
+ means internal). A host whose link group decides differently passes a `when`
27
+ in the marker instead.
28
+ */
29
+ /** The key a relationship field's `custom` carries to say it is a link. */
30
+ export const LINK_TARGET_KEY = 'throughlineLinkTarget';
31
+ /**
32
+ * Marks a hand-written relationship field as a link target, so the publish
33
+ * pipeline's `link-targets` step checks where it goes.
34
+ *
35
+ * ```ts
36
+ * markLinkTarget({ name: 'page', type: 'relationship', relationTo: ['pages', 'posts'] })
37
+ * ```
38
+ */
39
+ export function markLinkTarget(field, marker = true) {
40
+ const custom = field.custom;
41
+ return { ...field, custom: { ...custom, [LINK_TARGET_KEY]: marker } };
42
+ }
43
+ /** The marker on a field, when it is a relationship or upload carrying one. */
44
+ export function linkTargetMarker(field) {
45
+ if (field.type !== 'relationship' && field.type !== 'upload')
46
+ return undefined;
47
+ const custom = field.custom;
48
+ const marker = custom?.[LINK_TARGET_KEY];
49
+ if (marker === true)
50
+ return true;
51
+ if (marker && typeof marker === 'object')
52
+ return marker;
53
+ return undefined;
54
+ }
55
+ function isLive(marker, siblings) {
56
+ if (marker !== true && marker.when)
57
+ return marker.when(siblings);
58
+ const mode = siblings['mode'];
59
+ return mode === undefined || mode === null || mode === 'internal';
60
+ }
61
+ /** `{ relationTo, id }` pairs out of a relationship value. */
62
+ function targetsIn(field, value) {
63
+ const { relationTo } = field;
64
+ const entries = Array.isArray(value) ? value : [value];
65
+ const out = [];
66
+ for (const entry of entries) {
67
+ if (Array.isArray(relationTo)) {
68
+ // Polymorphic: `{ relationTo, value }`.
69
+ if (!entry || typeof entry !== 'object')
70
+ continue;
71
+ const { relationTo: to, value: held } = entry;
72
+ const id = idOf(held);
73
+ if (typeof to === 'string' && id !== undefined)
74
+ out.push({ relationTo: to, id });
75
+ continue;
76
+ }
77
+ if (typeof relationTo !== 'string')
78
+ continue;
79
+ const id = idOf(entry);
80
+ if (id !== undefined)
81
+ out.push({ relationTo, id });
82
+ }
83
+ return out;
84
+ }
85
+ /**
86
+ * Every link inside one document. Pure, like `referencesIn`: the field config
87
+ * and the data in, the links out, and no database.
88
+ */
89
+ export function linkTargetsIn(fields, data, options = {}) {
90
+ const out = [];
91
+ walkDocument(fields, data, {
92
+ field(field, value, siblings, at) {
93
+ const marker = linkTargetMarker(field);
94
+ if (!marker)
95
+ return false;
96
+ if (isLive(marker, siblings)) {
97
+ for (const target of targetsIn(field, value))
98
+ out.push({ ...target, source: 'field', at });
99
+ }
100
+ return true;
101
+ },
102
+ richTextNode(node, at) {
103
+ if (node['type'] !== 'link' && node['type'] !== 'autolink')
104
+ return;
105
+ const fields = node['fields'];
106
+ if (fields?.['linkType'] !== 'internal')
107
+ return;
108
+ const doc = fields['doc'];
109
+ const id = idOf(doc?.value);
110
+ if (typeof doc?.relationTo === 'string' && id !== undefined) {
111
+ out.push({ relationTo: doc.relationTo, id, source: 'richText', at });
112
+ }
113
+ },
114
+ }, options);
115
+ return out;
116
+ }
117
+ //# sourceMappingURL=links.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"links.js","sourceRoot":"","sources":["../../src/references/links.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAsC,MAAM,WAAW,CAAA;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BE;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,eAAe,GAAG,uBAAuB,CAAA;AAUtD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAkB,KAAQ,EAAE,SAA2B,IAAI;IACvF,MAAM,MAAM,GAAI,KAA8C,CAAC,MAAM,CAAA;IACrE,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;AACvE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC9E,MAAM,MAAM,GAAI,KAA8C,CAAC,MAAM,CAAA;IACrE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,CAAA;IACxC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAChC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAA0B,CAAA;IAC3E,OAAO,SAAS,CAAA;AAClB,CAAC;AAmBD,SAAS,MAAM,CAAC,MAAwB,EAAE,QAAiC;IACzE,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAChE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC7B,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,UAAU,CAAA;AACnE,CAAC;AAED,8DAA8D;AAC9D,SAAS,SAAS,CAChB,KAAiB,EACjB,KAAc;IAEd,MAAM,EAAE,UAAU,EAAE,GAAG,KAAiC,CAAA;IACxD,MAAM,OAAO,GAAc,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACjE,MAAM,GAAG,GAAkD,EAAE,CAAA;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,wCAAwC;YACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAQ;YACjD,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAkD,CAAA;YAC1F,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;YACrB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,SAAS;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;YAChF,SAAQ;QACV,CAAC;QACD,IAAI,OAAO,UAAU,KAAK,QAAQ;YAAE,SAAQ;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QACtB,IAAI,EAAE,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAwB,EACxB,IAAyC,EACzC,UAAgC,EAAE;IAElC,MAAM,GAAG,GAAiB,EAAE,CAAA;IAC5B,YAAY,CACV,MAAM,EACN,IAAI,EACJ;QACE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YAC9B,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;YACtC,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAA;YACzB,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAC7B,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;YAC5F,CAAC;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QACD,YAAY,CAAC,IAAI,EAAE,EAAE;YACnB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU;gBAAE,OAAM;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAwC,CAAA;YACpE,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,UAAU;gBAAE,OAAM;YAC/C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAiE,CAAA;YACzF,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAC3B,IAAI,OAAO,GAAG,EAAE,UAAU,KAAK,QAAQ,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC5D,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;KACF,EACD,OAAO,CACR,CAAA;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -22,8 +22,67 @@ export interface ReferencesInOptions {
22
22
  */
23
23
  blocks?: readonly Block[] | ReadonlyMap<string, Block>;
24
24
  }
25
+ export type NamedField = Field & {
26
+ name: string;
27
+ };
28
+ /**
29
+ * The id out of a relationship value. An id at `depth: 0`, a populated object
30
+ * above it. `String({ id: 3 })` is `[object Object]`, which matches nothing and
31
+ * fails open, so the object case is handled rather than coerced.
32
+ */
33
+ export declare function idOf(value: unknown): number | string | undefined;
25
34
  /** Whether an upload or relationship field can point at `collection`. */
26
35
  export declare function pointsAt(field: Field, collection: CollectionSlug): boolean;
36
+ /** Where the walk is, as a visitor sees it. */
37
+ export interface WalkLocation {
38
+ /** A human-readable path: `layout[3] › ImageHero › image`. */
39
+ path: string;
40
+ /**
41
+ * The data path in the form the publish checks report: `layout[3].image`.
42
+ * Inside rich text it stays the rich-text field's own path, because nothing
43
+ * inside the editor state is a field the admin can mark.
44
+ */
45
+ dataPath: string;
46
+ /** Whether the walk is inside a block, and so past any foreign key. */
47
+ viaBlock: boolean;
48
+ /** The outermost `blocks` row the walk is inside: its index and its config. */
49
+ block?: {
50
+ index: number;
51
+ block: Block;
52
+ } | undefined;
53
+ /** The top-level field, or named tab, the walk is under. */
54
+ top?: {
55
+ name: string;
56
+ label?: unknown;
57
+ } | undefined;
58
+ /** Whether the walk is inside rich text. */
59
+ inRichText: boolean;
60
+ }
61
+ /**
62
+ * What a walk does at each stop. Both are optional; a visitor that implements
63
+ * neither walks the document and learns nothing.
64
+ */
65
+ export interface WalkVisitor {
66
+ /**
67
+ * Every named field that holds a value, with the data object it sits in.
68
+ * Return `true` to keep the walk out of the value — a relationship that has
69
+ * been read should not be walked as though it were a group.
70
+ */
71
+ field?: (field: NamedField, value: unknown, siblings: Record<string, unknown>, at: WalkLocation) => boolean | void;
72
+ /** Every Lexical node, at the location of the rich-text field it is in. */
73
+ richTextNode?: (node: Record<string, unknown>, at: WalkLocation) => void;
74
+ }
75
+ export interface WalkDocumentOptions {
76
+ /** As `ReferencesInOptions.blocks`. */
77
+ blocks?: readonly Block[] | ReadonlyMap<string, Block>;
78
+ }
79
+ /**
80
+ * Walks one document's data alongside its field config, calling the visitor at
81
+ * every field and every rich-text node. The structure `referencesIn` and
82
+ * `linkTargetsIn` share: each says what it is looking for, and neither restates
83
+ * how groups, tabs, arrays, blocks and rich text nest.
84
+ */
85
+ export declare function walkDocument(fields: readonly Field[], data: Record<string, unknown> | undefined, visitor: WalkVisitor, options?: WalkDocumentOptions): void;
27
86
  /**
28
87
  * Every reference to `collection` inside one document. Pure: it takes the field
29
88
  * config and the data and touches nothing, so the whole decision is testable
@@ -1 +1 @@
1
- {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/references/walk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AA6C3D,oDAAoD;AACpD,MAAM,WAAW,SAAS;IACxB,+DAA+D;IAC/D,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,UAAU,EAAE,cAAc,CAAA;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CACvD;AA0BD,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAI1E;AAyKD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,mBAAmB,GAC3B,SAAS,EAAE,CAQb;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,mBAAmB,GAAG;IAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACrD,SAAS,EAAE,CAIb;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,EAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAW5F"}
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/references/walk.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ function childrenOf(field) {
9
9
  * above it. `String({ id: 3 })` is `[object Object]`, which matches nothing and
10
10
  * fails open, so the object case is handled rather than coerced.
11
11
  */
12
- function idOf(value) {
12
+ export function idOf(value) {
13
13
  if (typeof value === 'number' || typeof value === 'string')
14
14
  return value;
15
15
  if (value && typeof value === 'object' && 'id' in value) {
@@ -63,44 +63,45 @@ function blocksOf(field, registry) {
63
63
  }
64
64
  return own;
65
65
  }
66
+ /** `here` one step down into `name`, in both path forms. */
67
+ function into(at, name) {
68
+ return {
69
+ ...at,
70
+ path: at.path ? `${at.path} › ${name}` : name,
71
+ dataPath: at.inRichText ? at.dataPath : at.dataPath ? `${at.dataPath}.${name}` : name,
72
+ };
73
+ }
66
74
  /**
67
- * Rich text: `upload` nodes, and `block` / `inlineBlock` nodes walked as the
68
- * block they name. Shape-matched rather than typed against Lexical's node
69
- * union, because the column was written by whatever editor version was current.
75
+ * Rich text: every node goes to the visitor, and `block` / `inlineBlock` nodes
76
+ * are walked as the block they name. Shape-matched rather than typed against
77
+ * Lexical's node union, because the column was written by whatever editor
78
+ * version was current.
70
79
  */
71
- function walkRichText(value, path, viaBlock, ctx) {
80
+ function walkRichText(value, at, walk) {
72
81
  if (!value || typeof value !== 'object')
73
82
  return;
74
83
  if (Array.isArray(value)) {
75
84
  for (const entry of value)
76
- walkRichText(entry, path, viaBlock, ctx);
85
+ walkRichText(entry, at, walk);
77
86
  return;
78
87
  }
79
88
  const node = value;
80
- const embedded = node['type'] === 'upload'
81
- ? 'embedded upload'
82
- : node['type'] === 'relationship'
83
- ? 'embedded link'
84
- : undefined;
85
- if (embedded && node['relationTo'] === ctx.collection) {
86
- const id = idOf(node['value']);
87
- if (id !== undefined)
88
- ctx.out.push({ id, path: `${path} › ${embedded}`, viaBlock });
89
- }
89
+ walk.visitor.richTextNode?.(node, at);
90
90
  if (node['type'] === 'block' || node['type'] === 'inlineBlock') {
91
91
  const fields = node['fields'];
92
92
  const slug = typeof fields?.['blockType'] === 'string' ? fields['blockType'] : undefined;
93
- const block = slug ? ctx.registry.get(slug) : undefined;
93
+ const block = slug ? walk.registry.get(slug) : undefined;
94
94
  // An unknown block is skipped rather than guessed at, as in a `blocks` field.
95
- if (block && fields)
96
- walkFields(block.fields, fields, `${path} › ${block.slug}`, true, ctx);
95
+ if (block && fields) {
96
+ walkFields(block.fields, fields, { ...at, path: `${at.path} › ${block.slug}`, viaBlock: true, inRichText: true }, walk);
97
+ }
97
98
  }
98
99
  for (const key of ['root', 'children']) {
99
100
  if (key in node)
100
- walkRichText(node[key], path, viaBlock, ctx);
101
+ walkRichText(node[key], at, walk);
101
102
  }
102
103
  }
103
- function walkFields(fields, data, path, viaBlock, ctx) {
104
+ function walkFields(fields, data, at, walk) {
104
105
  if (!data)
105
106
  return;
106
107
  for (const field of fields) {
@@ -109,46 +110,53 @@ function walkFields(fields, data, path, viaBlock, ctx) {
109
110
  if (field.type === 'tabs' && 'tabs' in field && Array.isArray(field.tabs)) {
110
111
  for (const tab of field.tabs) {
111
112
  const named = 'name' in tab && typeof tab.name === 'string' ? tab.name : undefined;
112
- const nested = named ? data[named] : data;
113
- const here = named ? `${path}${path ? ' › ' : ''}${named}` : path;
114
- walkFields(tab.fields, nested, here, viaBlock, ctx);
113
+ if (!named) {
114
+ walkFields(tab.fields, data, at, walk);
115
+ continue;
116
+ }
117
+ const here = into(at, named);
118
+ walkFields(tab.fields, data[named], { ...here, top: at.top ?? { name: named, label: tab.label } }, walk);
115
119
  }
116
120
  continue;
117
121
  }
118
- walkFields(childrenOf(field), data, path, viaBlock, ctx);
122
+ walkFields(childrenOf(field), data, at, walk);
119
123
  continue;
120
124
  }
121
125
  const value = data[field.name];
122
126
  if (value === undefined || value === null)
123
127
  continue;
124
- const here = path ? `${path} › ${field.name}` : field.name;
125
- if (pointsAt(field, ctx.collection)) {
126
- for (const id of idsIn(value, ctx.collection))
127
- ctx.out.push({ id, path: here, viaBlock });
128
+ const here = {
129
+ ...into(at, field.name),
130
+ top: at.top ?? { name: field.name, label: field.label },
131
+ };
132
+ if (walk.visitor.field?.(field, value, data, here) === true)
128
133
  continue;
129
- }
130
134
  switch (field.type) {
131
135
  case 'richText':
132
- walkRichText(value, here, viaBlock, ctx);
136
+ walkRichText(value, here, walk);
133
137
  break;
134
138
  case 'group':
135
- walkFields(childrenOf(field), value, here, viaBlock, ctx);
139
+ walkFields(childrenOf(field), value, here, walk);
136
140
  break;
137
141
  case 'array':
138
142
  if (Array.isArray(value)) {
139
143
  value.forEach((row, index) => {
140
- walkFields(childrenOf(field), row, `${here}[${index}]`, viaBlock, ctx);
144
+ walkFields(childrenOf(field), row, {
145
+ ...here,
146
+ path: `${here.path}[${index}]`,
147
+ dataPath: here.inRichText ? here.dataPath : `${here.dataPath}[${index}]`,
148
+ }, walk);
141
149
  });
142
150
  }
143
151
  break;
144
152
  case 'blocks': {
145
153
  if (!Array.isArray(value))
146
154
  break;
147
- const own = blocksOf(field, ctx.registry);
155
+ const own = blocksOf(field, walk.registry);
148
156
  value.forEach((row, index) => {
149
157
  const entry = row;
150
158
  const slug = typeof entry['blockType'] === 'string' ? entry['blockType'] : undefined;
151
- const block = slug ? (own.get(slug) ?? ctx.registry.get(slug)) : undefined;
159
+ const block = slug ? (own.get(slug) ?? walk.registry.get(slug)) : undefined;
152
160
  /*
153
161
  A row whose `blockType` names no known block is skipped rather than
154
162
  guessed at: the config and the data disagree, and inventing a field
@@ -156,7 +164,13 @@ function walkFields(fields, data, path, viaBlock, ctx) {
156
164
  */
157
165
  if (!block)
158
166
  return;
159
- walkFields(block.fields, entry, `${here}[${index}] › ${block.slug}`, true, ctx);
167
+ walkFields(block.fields, entry, {
168
+ ...here,
169
+ path: `${here.path}[${index}] › ${block.slug}`,
170
+ dataPath: here.inRichText ? here.dataPath : `${here.dataPath}[${index}]`,
171
+ viaBlock: true,
172
+ block: here.block ?? { index, block },
173
+ }, walk);
160
174
  });
161
175
  break;
162
176
  }
@@ -172,6 +186,15 @@ function registryOf(blocks) {
172
186
  return blocks;
173
187
  return new Map(blocks.map((block) => [block.slug, block]));
174
188
  }
189
+ /**
190
+ * Walks one document's data alongside its field config, calling the visitor at
191
+ * every field and every rich-text node. The structure `referencesIn` and
192
+ * `linkTargetsIn` share: each says what it is looking for, and neither restates
193
+ * how groups, tabs, arrays, blocks and rich text nest.
194
+ */
195
+ export function walkDocument(fields, data, visitor, options = {}) {
196
+ walkFields(fields, data, { path: '', dataPath: '', viaBlock: false, inRichText: false }, { registry: registryOf(options.blocks), visitor });
197
+ }
175
198
  /**
176
199
  * Every reference to `collection` inside one document. Pure: it takes the field
177
200
  * config and the data and touches nothing, so the whole decision is testable
@@ -179,11 +202,30 @@ function registryOf(blocks) {
179
202
  */
180
203
  export function referencesIn(fields, data, options) {
181
204
  const out = [];
182
- walkFields(fields, data, '', false, {
183
- collection: options.collection,
184
- registry: registryOf(options.blocks),
185
- out,
186
- });
205
+ const { collection } = options;
206
+ walkDocument(fields, data, {
207
+ field(field, value, _siblings, at) {
208
+ if (!pointsAt(field, collection))
209
+ return false;
210
+ for (const id of idsIn(value, collection)) {
211
+ out.push({ id, path: at.path, viaBlock: at.viaBlock });
212
+ }
213
+ return true;
214
+ },
215
+ richTextNode(node, at) {
216
+ const embedded = node['type'] === 'upload'
217
+ ? 'embedded upload'
218
+ : node['type'] === 'relationship'
219
+ ? 'embedded link'
220
+ : undefined;
221
+ if (!embedded || node['relationTo'] !== collection)
222
+ return;
223
+ const id = idOf(node['value']);
224
+ if (id !== undefined) {
225
+ out.push({ id, path: `${at.path} › ${embedded}`, viaBlock: at.viaBlock });
226
+ }
227
+ },
228
+ }, options);
187
229
  return out;
188
230
  }
189
231
  /** The references to one document, comparing ids as strings. */
@@ -1 +1 @@
1
- {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/references/walk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/references/walk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forumone/throughline",
3
- "version": "2.1.0",
3
+ "version": "2.2.0-next-332baf9",
4
4
  "description": "Throughline: an editorial platform for Payload CMS. Publishing, approvals, audit, integrations, email and jobs, with every feature reachable over MCP.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -166,7 +166,7 @@
166
166
  "dependencies": {
167
167
  "zod": "^3.23.0",
168
168
  "zod-to-json-schema": "^3.25.2",
169
- "@forumone/throughline-design-system": "2.1.0"
169
+ "@forumone/throughline-design-system": "2.2.0-next-332baf9"
170
170
  },
171
171
  "devDependencies": {
172
172
  "@payloadcms/db-sqlite": "^3.83.0",
@@ -189,7 +189,7 @@
189
189
  "typescript": "^5.6.0",
190
190
  "vitest": "^4.1.10",
191
191
  "@forumone/throughline-eslint-config": "0.0.1",
192
- "@forumone/throughline-reference-ds": "0.3.21",
192
+ "@forumone/throughline-reference-ds": "0.3.22-next-332baf9",
193
193
  "@forumone/throughline-tsconfig": "0.0.1"
194
194
  },
195
195
  "scripts": {