@forumone/throughline 2.1.0 → 2.2.0-next-623d42c

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 (183) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/approvals/endpoints/action.d.ts.map +1 -1
  3. package/dist/approvals/endpoints/action.js +27 -8
  4. package/dist/approvals/endpoints/action.js.map +1 -1
  5. package/dist/approvals/tokens.d.ts +3 -0
  6. package/dist/approvals/tokens.d.ts.map +1 -1
  7. package/dist/approvals/tokens.js +1 -1
  8. package/dist/approvals/tokens.js.map +1 -1
  9. package/dist/authoring/tools.d.ts.map +1 -1
  10. package/dist/authoring/tools.js +6 -1
  11. package/dist/authoring/tools.js.map +1 -1
  12. package/dist/components/tools/validate-composition.d.ts.map +1 -1
  13. package/dist/components/tools/validate-composition.js +4 -1
  14. package/dist/components/tools/validate-composition.js.map +1 -1
  15. package/dist/components/validation/composition.d.ts +9 -1
  16. package/dist/components/validation/composition.d.ts.map +1 -1
  17. package/dist/components/validation/composition.js +9 -7
  18. package/dist/components/validation/composition.js.map +1 -1
  19. package/dist/exports/client.d.ts +3 -0
  20. package/dist/exports/client.d.ts.map +1 -1
  21. package/dist/exports/client.js +2 -0
  22. package/dist/exports/client.js.map +1 -1
  23. package/dist/fields/slug.d.ts.map +1 -1
  24. package/dist/fields/slug.js +4 -1
  25. package/dist/fields/slug.js.map +1 -1
  26. package/dist/integrations/admin/SyncButton.d.ts.map +1 -1
  27. package/dist/integrations/admin/SyncButton.js +11 -5
  28. package/dist/integrations/admin/SyncButton.js.map +1 -1
  29. package/dist/integrations/admin/sync-client.d.ts +2 -0
  30. package/dist/integrations/admin/sync-client.d.ts.map +1 -1
  31. package/dist/integrations/admin/sync-client.js +7 -1
  32. package/dist/integrations/admin/sync-client.js.map +1 -1
  33. package/dist/integrations/collection.d.ts +1 -1
  34. package/dist/integrations/collection.d.ts.map +1 -1
  35. package/dist/integrations/collection.js +11 -4
  36. package/dist/integrations/collection.js.map +1 -1
  37. package/dist/integrations/sync/status.d.ts +17 -4
  38. package/dist/integrations/sync/status.d.ts.map +1 -1
  39. package/dist/integrations/sync/status.js +37 -6
  40. package/dist/integrations/sync/status.js.map +1 -1
  41. package/dist/media/hooks.d.ts.map +1 -1
  42. package/dist/media/hooks.js +11 -9
  43. package/dist/media/hooks.js.map +1 -1
  44. package/dist/migrate/exports.json +16 -0
  45. package/dist/publishing/admin/FirstErrorProvider.d.ts +24 -0
  46. package/dist/publishing/admin/FirstErrorProvider.d.ts.map +1 -0
  47. package/dist/publishing/admin/FirstErrorProvider.js +100 -0
  48. package/dist/publishing/admin/FirstErrorProvider.js.map +1 -0
  49. package/dist/publishing/admin/PublishButton.d.ts.map +1 -1
  50. package/dist/publishing/admin/PublishButton.js +18 -3
  51. package/dist/publishing/admin/PublishButton.js.map +1 -1
  52. package/dist/publishing/admin/SchedulePublishField.d.ts.map +1 -1
  53. package/dist/publishing/admin/SchedulePublishField.js +25 -10
  54. package/dist/publishing/admin/SchedulePublishField.js.map +1 -1
  55. package/dist/publishing/admin/UnpublishButton.d.ts.map +1 -1
  56. package/dist/publishing/admin/UnpublishButton.js +9 -3
  57. package/dist/publishing/admin/UnpublishButton.js.map +1 -1
  58. package/dist/publishing/admin/first-error.d.ts +60 -0
  59. package/dist/publishing/admin/first-error.d.ts.map +1 -0
  60. package/dist/publishing/admin/first-error.js +211 -0
  61. package/dist/publishing/admin/first-error.js.map +1 -0
  62. package/dist/publishing/admin/publishing-client.d.ts +33 -4
  63. package/dist/publishing/admin/publishing-client.d.ts.map +1 -1
  64. package/dist/publishing/admin/publishing-client.js +56 -21
  65. package/dist/publishing/admin/publishing-client.js.map +1 -1
  66. package/dist/publishing/admin/schedule-state.d.ts +31 -4
  67. package/dist/publishing/admin/schedule-state.d.ts.map +1 -1
  68. package/dist/publishing/admin/schedule-state.js +26 -14
  69. package/dist/publishing/admin/schedule-state.js.map +1 -1
  70. package/dist/publishing/checks/alt-text.d.ts.map +1 -1
  71. package/dist/publishing/checks/alt-text.js +3 -1
  72. package/dist/publishing/checks/alt-text.js.map +1 -1
  73. package/dist/publishing/checks/heading-hierarchy.d.ts +9 -3
  74. package/dist/publishing/checks/heading-hierarchy.d.ts.map +1 -1
  75. package/dist/publishing/checks/heading-hierarchy.js +19 -6
  76. package/dist/publishing/checks/heading-hierarchy.js.map +1 -1
  77. package/dist/publishing/checks/link-labels.js +1 -1
  78. package/dist/publishing/checks/link-labels.js.map +1 -1
  79. package/dist/publishing/endpoints/admin.d.ts.map +1 -1
  80. package/dist/publishing/endpoints/admin.js +26 -7
  81. package/dist/publishing/endpoints/admin.js.map +1 -1
  82. package/dist/publishing/events.d.ts +15 -1
  83. package/dist/publishing/events.d.ts.map +1 -1
  84. package/dist/publishing/events.js +17 -2
  85. package/dist/publishing/events.js.map +1 -1
  86. package/dist/publishing/hooks/block-status-writes.js +5 -2
  87. package/dist/publishing/hooks/block-status-writes.js.map +1 -1
  88. package/dist/publishing/hooks/schedule-events.d.ts.map +1 -1
  89. package/dist/publishing/hooks/schedule-events.js +5 -7
  90. package/dist/publishing/hooks/schedule-events.js.map +1 -1
  91. package/dist/publishing/index.d.ts +9 -1
  92. package/dist/publishing/index.d.ts.map +1 -1
  93. package/dist/publishing/index.js +7 -0
  94. package/dist/publishing/index.js.map +1 -1
  95. package/dist/publishing/messages.d.ts +63 -0
  96. package/dist/publishing/messages.d.ts.map +1 -0
  97. package/dist/publishing/messages.js +84 -0
  98. package/dist/publishing/messages.js.map +1 -0
  99. package/dist/publishing/options.d.ts +46 -1
  100. package/dist/publishing/options.d.ts.map +1 -1
  101. package/dist/publishing/options.js +8 -0
  102. package/dist/publishing/options.js.map +1 -1
  103. package/dist/publishing/pipeline/finish.d.ts +12 -0
  104. package/dist/publishing/pipeline/finish.d.ts.map +1 -0
  105. package/dist/publishing/pipeline/finish.js +24 -0
  106. package/dist/publishing/pipeline/finish.js.map +1 -0
  107. package/dist/publishing/pipeline/index.d.ts.map +1 -1
  108. package/dist/publishing/pipeline/index.js +11 -8
  109. package/dist/publishing/pipeline/index.js.map +1 -1
  110. package/dist/publishing/pipeline/steps/accessibility.d.ts +3 -3
  111. package/dist/publishing/pipeline/steps/accessibility.d.ts.map +1 -1
  112. package/dist/publishing/pipeline/steps/accessibility.js +17 -9
  113. package/dist/publishing/pipeline/steps/accessibility.js.map +1 -1
  114. package/dist/publishing/pipeline/steps/approval.d.ts.map +1 -1
  115. package/dist/publishing/pipeline/steps/approval.js +6 -4
  116. package/dist/publishing/pipeline/steps/approval.js.map +1 -1
  117. package/dist/publishing/pipeline/steps/composition.d.ts.map +1 -1
  118. package/dist/publishing/pipeline/steps/composition.js +36 -17
  119. package/dist/publishing/pipeline/steps/composition.js.map +1 -1
  120. package/dist/publishing/pipeline/steps/embargo.d.ts +4 -0
  121. package/dist/publishing/pipeline/steps/embargo.d.ts.map +1 -1
  122. package/dist/publishing/pipeline/steps/embargo.js +13 -4
  123. package/dist/publishing/pipeline/steps/embargo.js.map +1 -1
  124. package/dist/publishing/pipeline/steps/execute.d.ts.map +1 -1
  125. package/dist/publishing/pipeline/steps/execute.js +48 -5
  126. package/dist/publishing/pipeline/steps/execute.js.map +1 -1
  127. package/dist/publishing/pipeline/steps/exist.d.ts +2 -0
  128. package/dist/publishing/pipeline/steps/exist.d.ts.map +1 -1
  129. package/dist/publishing/pipeline/steps/exist.js +5 -3
  130. package/dist/publishing/pipeline/steps/exist.js.map +1 -1
  131. package/dist/publishing/pipeline/steps/link-targets.d.ts +3 -0
  132. package/dist/publishing/pipeline/steps/link-targets.d.ts.map +1 -0
  133. package/dist/publishing/pipeline/steps/link-targets.js +293 -0
  134. package/dist/publishing/pipeline/steps/link-targets.js.map +1 -0
  135. package/dist/publishing/pipeline/steps/required-fields.d.ts.map +1 -1
  136. package/dist/publishing/pipeline/steps/required-fields.js +7 -5
  137. package/dist/publishing/pipeline/steps/required-fields.js.map +1 -1
  138. package/dist/publishing/pipeline/types.d.ts +25 -0
  139. package/dist/publishing/pipeline/types.d.ts.map +1 -1
  140. package/dist/publishing/pipeline/where.d.ts +13 -0
  141. package/dist/publishing/pipeline/where.d.ts.map +1 -0
  142. package/dist/publishing/pipeline/where.js +44 -0
  143. package/dist/publishing/pipeline/where.js.map +1 -0
  144. package/dist/publishing/plugin.d.ts.map +1 -1
  145. package/dist/publishing/plugin.js +22 -0
  146. package/dist/publishing/plugin.js.map +1 -1
  147. package/dist/publishing/service.d.ts +26 -17
  148. package/dist/publishing/service.d.ts.map +1 -1
  149. package/dist/publishing/service.js +43 -32
  150. package/dist/publishing/service.js.map +1 -1
  151. package/dist/publishing/tools/get-publish-status.d.ts.map +1 -1
  152. package/dist/publishing/tools/get-publish-status.js +4 -0
  153. package/dist/publishing/tools/get-publish-status.js.map +1 -1
  154. package/dist/publishing/tools/rollback.d.ts.map +1 -1
  155. package/dist/publishing/tools/rollback.js +1 -1
  156. package/dist/publishing/tools/rollback.js.map +1 -1
  157. package/dist/references/UsedOnPanel.d.ts.map +1 -1
  158. package/dist/references/UsedOnPanel.js +1 -1
  159. package/dist/references/UsedOnPanel.js.map +1 -1
  160. package/dist/references/find.d.ts +12 -1
  161. package/dist/references/find.d.ts.map +1 -1
  162. package/dist/references/find.js +24 -5
  163. package/dist/references/find.js.map +1 -1
  164. package/dist/references/guards.d.ts.map +1 -1
  165. package/dist/references/guards.js +9 -2
  166. package/dist/references/guards.js.map +1 -1
  167. package/dist/references/index.d.ts +4 -2
  168. package/dist/references/index.d.ts.map +1 -1
  169. package/dist/references/index.js +2 -1
  170. package/dist/references/index.js.map +1 -1
  171. package/dist/references/links.d.ts +45 -0
  172. package/dist/references/links.d.ts.map +1 -0
  173. package/dist/references/links.js +117 -0
  174. package/dist/references/links.js.map +1 -0
  175. package/dist/references/walk.d.ts +70 -0
  176. package/dist/references/walk.d.ts.map +1 -1
  177. package/dist/references/walk.js +88 -41
  178. package/dist/references/walk.js.map +1 -1
  179. package/dist/utils/field-path.d.ts +56 -0
  180. package/dist/utils/field-path.d.ts.map +1 -0
  181. package/dist/utils/field-path.js +146 -0
  182. package/dist/utils/field-path.js.map +1 -0
  183. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/references/guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EAEpB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAsC,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AA2BvF,MAAM,WAAW,qBAAqB;IACpC,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAA;CAC1B;AAED,KAAK,IAAI,GAAG,QAAQ,GAAG,mBAAmB,CAAA;AAE1C,yFAAyF;AACzF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,kBAAkB,EAAE,EACpC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACjE,MAAM,CAmBR;AAsDD,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAIzE;AAED,qEAAqE;AACrE,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,cAAc,EAC1B,OAAO,GAAE,qBAA0B,GAClC,0BAA0B,CAE5B;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,cAAc,EAC1B,OAAO,GAAE,qBAA0B,GAClC,0BAA0B,CAQ5B"}
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/references/guards.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,cAAc,EAEpB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAsC,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AA2BvF,MAAM,WAAW,qBAAqB;IACpC,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAA;CAC1B;AAED,KAAK,IAAI,GAAG,QAAQ,GAAG,mBAAmB,CAAA;AAE1C,yFAAyF;AACzF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,kBAAkB,EAAE,EACpC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GACjE,MAAM,CAmBR;AA+DD,6FAA6F;AAC7F,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAIzE;AAED,qEAAqE;AACrE,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,cAAc,EAC1B,OAAO,GAAE,qBAA0B,GAClC,0BAA0B,CAE5B;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,cAAc,EAC1B,OAAO,GAAE,qBAA0B,GAClC,0BAA0B,CAQ5B"}
@@ -14,7 +14,7 @@ export function referenceRefusal(found, options = {}) {
14
14
  */
15
15
  const blocks = found.filter((entry) => entry.viaBlock).length;
16
16
  const note = blocks > 0
17
- ? `\n\n${blocks} of these use it inside a block, where nothing would have warned you and it would simply have stopped appearing.`
17
+ ? `\n\n${blocks} of these ${blocks === 1 ? 'uses' : 'use'} it inside a block, where nothing would have warned you and it would simply have stopped appearing.`
18
18
  : '';
19
19
  return `This ${noun} is still used by ${count} document${count === 1 ? '' : 's'}. Remove it there first, then ${then}${consequence}.\n\n${describeReferences(found)}${note}`;
20
20
  }
@@ -29,7 +29,14 @@ async function refuseIfReferenced(req, collection, id, verb, options) {
29
29
  }
30
30
  catch (error) {
31
31
  req.payload.logger.error({ event: 'references.scan-failed', collection, id, err: error }, `Could not check whether this ${noun} is in use; refusing to ${verb} it`);
32
- throw new APIError(`Could not check whether this ${noun} is still in use, so nothing has changed. Try again; if it keeps happening, this needs a developer.`, 500);
32
+ /*
33
+ Public, or nobody reads it. Payload's `routeError` replaces the message of
34
+ any error that is not public with "Something went wrong.", and a 500 is not
35
+ public unless it says so — which is what editors saw instead of this
36
+ (forumone-2026#805). 503 too, because it is the truer status: the check
37
+ could not run, and trying again is the advice.
38
+ */
39
+ throw new APIError(`Could not check whether this ${noun} is still in use, so nothing has changed. Try again; if it keeps happening, tell a site administrator.`, 503, undefined, true);
33
40
  }
34
41
  if (found.length === 0)
35
42
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/references/guards.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,GAMT,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAA2B,MAAM,WAAW,CAAA;AAyCvF,yFAAyF;AACzF,MAAM,UAAU,gBAAgB,CAC9B,KAAoC,EACpC,UAAgE,EAAE;IAElE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,CAAA;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAA;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAA;IAC1B,MAAM,IAAI,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB,CAAA;IACrE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IAE1E;;;;MAIE;IACF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAA;IAC7D,MAAM,IAAI,GACR,MAAM,GAAG,CAAC;QACR,CAAC,CAAC,OAAO,MAAM,kHAAkH;QACjI,CAAC,CAAC,EAAE,CAAA;IAER,OAAO,QAAQ,IAAI,qBAAqB,KAAK,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,iCAAiC,IAAI,GAAG,WAAW,QAAQ,kBAAkB,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,CAAA;AAC9K,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,GAAmB,EACnB,UAA0B,EAC1B,EAAmB,EACnB,IAAU,EACV,OAA8B;IAE9B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,UAAU,CAAA;IACvC,IAAI,KAA2B,CAAA;IAC/B,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,cAAc,CAC1B,GAAG,CAAC,OAAO,EACX,EAAE,UAAU,EAAE,EAAE,EAAE,EAClB;YACE,GAAG;YACH,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtD,CACF,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACtB,EAAE,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAC/D,gCAAgC,IAAI,2BAA2B,IAAI,KAAK,CACzE,CAAA;QACD,MAAM,IAAI,QAAQ,CAChB,gCAAgC,IAAI,qGAAqG,EACzI,GAAG,CACJ,CAAA;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAE9B,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACrB;QACE,KAAK,EAAE,oBAAoB;QAC3B,UAAU;QACV,EAAE;QACF,IAAI;QACJ,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;KAC3E,EACD,cAAc,IAAI,MAAM,IAAI,2BAA2B,CACxD,CAAA;IACD,6EAA6E;IAC7E,MAAM,IAAI,QAAQ,CAChB,gBAAgB,CAAC,KAAK,EAAE;QACtB,IAAI;QACJ,IAAI;QACJ,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC,EACF,GAAG,CACJ,CAAA;AACH,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,WAAoB;IAC9D,MAAM,IAAI,GAAI,IAAmD,EAAE,CAAC,WAAW,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAI,WAA0D,EAAE,CAAC,WAAW,CAAC,CAAA;IAC3F,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,CAAC,CAAA;AAC7F,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,2BAA2B,CACzC,UAA0B,EAC1B,UAAiC,EAAE;IAEnC,OAAO,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;AAC1F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,UAA0B,EAC1B,UAAiC,EAAE;IAEnC,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE;QACrD,IAAI,SAAS,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC;YAAE,OAAO,IAAI,CAAA;QAC3E,MAAM,EAAE,GAAI,WAAoD,EAAE,EAAE,CAAA;QACpE,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,IAAI,CAAA;QACjC,MAAM,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAA;QAC3E,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/references/guards.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":"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"}
@@ -5,12 +5,23 @@ export interface Reference {
5
5
  id: number | string;
6
6
  /** A human-readable path: `layout[3] › ImageHero › image`. */
7
7
  path: string;
8
+ /**
9
+ * The data path, `layout[3].image`, from which `findReferences` says where
10
+ * the reference is in the editor's words. Inside rich text, the rich-text
11
+ * field's own path.
12
+ */
13
+ dataPath: string;
8
14
  /**
9
15
  * Whether the reference is inside a block, and so has no foreign key.
10
16
  * A `false` is one the database will null out on delete; a `true` is one it
11
17
  * does not know exists.
12
18
  */
13
19
  viaBlock: boolean;
20
+ /**
21
+ * Where it is, as the edit view labels it: `Block 4 (Image Hero) › Image`.
22
+ * Filled in by `findReferences`, which has the config to read labels from.
23
+ */
24
+ where?: string;
14
25
  }
15
26
  export interface ReferencesInOptions {
16
27
  /** The collection whose documents are being looked for. */
@@ -22,8 +33,67 @@ export interface ReferencesInOptions {
22
33
  */
23
34
  blocks?: readonly Block[] | ReadonlyMap<string, Block>;
24
35
  }
36
+ export type NamedField = Field & {
37
+ name: string;
38
+ };
39
+ /**
40
+ * The id out of a relationship value. An id at `depth: 0`, a populated object
41
+ * above it. `String({ id: 3 })` is `[object Object]`, which matches nothing and
42
+ * fails open, so the object case is handled rather than coerced.
43
+ */
44
+ export declare function idOf(value: unknown): number | string | undefined;
25
45
  /** Whether an upload or relationship field can point at `collection`. */
26
46
  export declare function pointsAt(field: Field, collection: CollectionSlug): boolean;
47
+ /** Where the walk is, as a visitor sees it. */
48
+ export interface WalkLocation {
49
+ /** A human-readable path: `layout[3] › ImageHero › image`. */
50
+ path: string;
51
+ /**
52
+ * The data path in the form the publish checks report: `layout[3].image`.
53
+ * Inside rich text it stays the rich-text field's own path, because nothing
54
+ * inside the editor state is a field the admin can mark.
55
+ */
56
+ dataPath: string;
57
+ /** Whether the walk is inside a block, and so past any foreign key. */
58
+ viaBlock: boolean;
59
+ /** The outermost `blocks` row the walk is inside: its index and its config. */
60
+ block?: {
61
+ index: number;
62
+ block: Block;
63
+ } | undefined;
64
+ /** The top-level field, or named tab, the walk is under. */
65
+ top?: {
66
+ name: string;
67
+ label?: unknown;
68
+ } | undefined;
69
+ /** Whether the walk is inside rich text. */
70
+ inRichText: boolean;
71
+ }
72
+ /**
73
+ * What a walk does at each stop. Both are optional; a visitor that implements
74
+ * neither walks the document and learns nothing.
75
+ */
76
+ export interface WalkVisitor {
77
+ /**
78
+ * Every named field that holds a value, with the data object it sits in.
79
+ * Return `true` to keep the walk out of the value — a relationship that has
80
+ * been read should not be walked as though it were a group.
81
+ */
82
+ field?: (field: NamedField, value: unknown, siblings: Record<string, unknown>, at: WalkLocation) => boolean | void;
83
+ /** Every Lexical node, at the location of the rich-text field it is in. */
84
+ richTextNode?: (node: Record<string, unknown>, at: WalkLocation) => void;
85
+ }
86
+ export interface WalkDocumentOptions {
87
+ /** As `ReferencesInOptions.blocks`. */
88
+ blocks?: readonly Block[] | ReadonlyMap<string, Block>;
89
+ }
90
+ /**
91
+ * Walks one document's data alongside its field config, calling the visitor at
92
+ * every field and every rich-text node. The structure `referencesIn` and
93
+ * `linkTargetsIn` share: each says what it is looking for, and neither restates
94
+ * how groups, tabs, arrays, blocks and rich text nest.
95
+ */
96
+ export declare function walkDocument(fields: readonly Field[], data: Record<string, unknown> | undefined, visitor: WalkVisitor, options?: WalkDocumentOptions): void;
27
97
  /**
28
98
  * Every reference to `collection` inside one document. Pure: it takes the field
29
99
  * 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,35 @@ 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, dataPath: at.dataPath, 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({
226
+ id,
227
+ path: `${at.path} › ${embedded}`,
228
+ dataPath: at.dataPath,
229
+ viaBlock: at.viaBlock,
230
+ });
231
+ }
232
+ },
233
+ }, options);
187
234
  return out;
188
235
  }
189
236
  /** 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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"}