@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.
- package/CHANGELOG.md +41 -0
- package/dist/approvals/endpoints/action.d.ts.map +1 -1
- package/dist/approvals/endpoints/action.js +27 -8
- package/dist/approvals/endpoints/action.js.map +1 -1
- package/dist/approvals/tokens.d.ts +3 -0
- package/dist/approvals/tokens.d.ts.map +1 -1
- package/dist/approvals/tokens.js +1 -1
- package/dist/approvals/tokens.js.map +1 -1
- package/dist/authoring/tools.d.ts.map +1 -1
- package/dist/authoring/tools.js +6 -1
- package/dist/authoring/tools.js.map +1 -1
- package/dist/components/tools/validate-composition.d.ts.map +1 -1
- package/dist/components/tools/validate-composition.js +4 -1
- package/dist/components/tools/validate-composition.js.map +1 -1
- package/dist/components/validation/composition.d.ts +9 -1
- package/dist/components/validation/composition.d.ts.map +1 -1
- package/dist/components/validation/composition.js +9 -7
- package/dist/components/validation/composition.js.map +1 -1
- package/dist/exports/client.d.ts +3 -0
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +2 -0
- package/dist/exports/client.js.map +1 -1
- package/dist/fields/slug.d.ts.map +1 -1
- package/dist/fields/slug.js +4 -1
- package/dist/fields/slug.js.map +1 -1
- package/dist/integrations/admin/SyncButton.d.ts.map +1 -1
- package/dist/integrations/admin/SyncButton.js +11 -5
- package/dist/integrations/admin/SyncButton.js.map +1 -1
- package/dist/integrations/admin/sync-client.d.ts +2 -0
- package/dist/integrations/admin/sync-client.d.ts.map +1 -1
- package/dist/integrations/admin/sync-client.js +7 -1
- package/dist/integrations/admin/sync-client.js.map +1 -1
- package/dist/integrations/collection.d.ts +1 -1
- package/dist/integrations/collection.d.ts.map +1 -1
- package/dist/integrations/collection.js +11 -4
- package/dist/integrations/collection.js.map +1 -1
- package/dist/integrations/sync/status.d.ts +17 -4
- package/dist/integrations/sync/status.d.ts.map +1 -1
- package/dist/integrations/sync/status.js +37 -6
- package/dist/integrations/sync/status.js.map +1 -1
- package/dist/media/hooks.d.ts.map +1 -1
- package/dist/media/hooks.js +11 -9
- package/dist/media/hooks.js.map +1 -1
- package/dist/migrate/exports.json +16 -0
- package/dist/publishing/admin/FirstErrorProvider.d.ts +24 -0
- package/dist/publishing/admin/FirstErrorProvider.d.ts.map +1 -0
- package/dist/publishing/admin/FirstErrorProvider.js +100 -0
- package/dist/publishing/admin/FirstErrorProvider.js.map +1 -0
- package/dist/publishing/admin/PublishButton.d.ts.map +1 -1
- package/dist/publishing/admin/PublishButton.js +18 -3
- package/dist/publishing/admin/PublishButton.js.map +1 -1
- package/dist/publishing/admin/SchedulePublishField.d.ts.map +1 -1
- package/dist/publishing/admin/SchedulePublishField.js +25 -10
- package/dist/publishing/admin/SchedulePublishField.js.map +1 -1
- package/dist/publishing/admin/UnpublishButton.d.ts.map +1 -1
- package/dist/publishing/admin/UnpublishButton.js +9 -3
- package/dist/publishing/admin/UnpublishButton.js.map +1 -1
- package/dist/publishing/admin/first-error.d.ts +60 -0
- package/dist/publishing/admin/first-error.d.ts.map +1 -0
- package/dist/publishing/admin/first-error.js +211 -0
- package/dist/publishing/admin/first-error.js.map +1 -0
- package/dist/publishing/admin/publishing-client.d.ts +33 -4
- package/dist/publishing/admin/publishing-client.d.ts.map +1 -1
- package/dist/publishing/admin/publishing-client.js +56 -21
- package/dist/publishing/admin/publishing-client.js.map +1 -1
- package/dist/publishing/admin/schedule-state.d.ts +31 -4
- package/dist/publishing/admin/schedule-state.d.ts.map +1 -1
- package/dist/publishing/admin/schedule-state.js +26 -14
- package/dist/publishing/admin/schedule-state.js.map +1 -1
- package/dist/publishing/checks/alt-text.d.ts.map +1 -1
- package/dist/publishing/checks/alt-text.js +3 -1
- package/dist/publishing/checks/alt-text.js.map +1 -1
- package/dist/publishing/checks/heading-hierarchy.d.ts +9 -3
- package/dist/publishing/checks/heading-hierarchy.d.ts.map +1 -1
- package/dist/publishing/checks/heading-hierarchy.js +19 -6
- package/dist/publishing/checks/heading-hierarchy.js.map +1 -1
- package/dist/publishing/checks/link-labels.js +1 -1
- package/dist/publishing/checks/link-labels.js.map +1 -1
- package/dist/publishing/endpoints/admin.d.ts.map +1 -1
- package/dist/publishing/endpoints/admin.js +26 -7
- package/dist/publishing/endpoints/admin.js.map +1 -1
- package/dist/publishing/events.d.ts +15 -1
- package/dist/publishing/events.d.ts.map +1 -1
- package/dist/publishing/events.js +17 -2
- package/dist/publishing/events.js.map +1 -1
- package/dist/publishing/hooks/block-status-writes.js +5 -2
- package/dist/publishing/hooks/block-status-writes.js.map +1 -1
- package/dist/publishing/hooks/schedule-events.d.ts.map +1 -1
- package/dist/publishing/hooks/schedule-events.js +5 -7
- package/dist/publishing/hooks/schedule-events.js.map +1 -1
- package/dist/publishing/index.d.ts +9 -1
- package/dist/publishing/index.d.ts.map +1 -1
- package/dist/publishing/index.js +7 -0
- package/dist/publishing/index.js.map +1 -1
- package/dist/publishing/messages.d.ts +63 -0
- package/dist/publishing/messages.d.ts.map +1 -0
- package/dist/publishing/messages.js +84 -0
- package/dist/publishing/messages.js.map +1 -0
- package/dist/publishing/options.d.ts +46 -1
- package/dist/publishing/options.d.ts.map +1 -1
- package/dist/publishing/options.js +8 -0
- package/dist/publishing/options.js.map +1 -1
- package/dist/publishing/pipeline/finish.d.ts +12 -0
- package/dist/publishing/pipeline/finish.d.ts.map +1 -0
- package/dist/publishing/pipeline/finish.js +24 -0
- package/dist/publishing/pipeline/finish.js.map +1 -0
- package/dist/publishing/pipeline/index.d.ts.map +1 -1
- package/dist/publishing/pipeline/index.js +11 -8
- package/dist/publishing/pipeline/index.js.map +1 -1
- package/dist/publishing/pipeline/steps/accessibility.d.ts +3 -3
- package/dist/publishing/pipeline/steps/accessibility.d.ts.map +1 -1
- package/dist/publishing/pipeline/steps/accessibility.js +17 -9
- package/dist/publishing/pipeline/steps/accessibility.js.map +1 -1
- package/dist/publishing/pipeline/steps/approval.d.ts.map +1 -1
- package/dist/publishing/pipeline/steps/approval.js +6 -4
- package/dist/publishing/pipeline/steps/approval.js.map +1 -1
- package/dist/publishing/pipeline/steps/composition.d.ts.map +1 -1
- package/dist/publishing/pipeline/steps/composition.js +36 -17
- package/dist/publishing/pipeline/steps/composition.js.map +1 -1
- package/dist/publishing/pipeline/steps/embargo.d.ts +4 -0
- package/dist/publishing/pipeline/steps/embargo.d.ts.map +1 -1
- package/dist/publishing/pipeline/steps/embargo.js +13 -4
- package/dist/publishing/pipeline/steps/embargo.js.map +1 -1
- package/dist/publishing/pipeline/steps/execute.d.ts.map +1 -1
- package/dist/publishing/pipeline/steps/execute.js +48 -5
- package/dist/publishing/pipeline/steps/execute.js.map +1 -1
- package/dist/publishing/pipeline/steps/exist.d.ts +2 -0
- package/dist/publishing/pipeline/steps/exist.d.ts.map +1 -1
- package/dist/publishing/pipeline/steps/exist.js +5 -3
- package/dist/publishing/pipeline/steps/exist.js.map +1 -1
- package/dist/publishing/pipeline/steps/link-targets.d.ts +3 -0
- package/dist/publishing/pipeline/steps/link-targets.d.ts.map +1 -0
- package/dist/publishing/pipeline/steps/link-targets.js +293 -0
- package/dist/publishing/pipeline/steps/link-targets.js.map +1 -0
- package/dist/publishing/pipeline/steps/required-fields.d.ts.map +1 -1
- package/dist/publishing/pipeline/steps/required-fields.js +7 -5
- package/dist/publishing/pipeline/steps/required-fields.js.map +1 -1
- package/dist/publishing/pipeline/types.d.ts +25 -0
- package/dist/publishing/pipeline/types.d.ts.map +1 -1
- package/dist/publishing/pipeline/where.d.ts +13 -0
- package/dist/publishing/pipeline/where.d.ts.map +1 -0
- package/dist/publishing/pipeline/where.js +44 -0
- package/dist/publishing/pipeline/where.js.map +1 -0
- package/dist/publishing/plugin.d.ts.map +1 -1
- package/dist/publishing/plugin.js +22 -0
- package/dist/publishing/plugin.js.map +1 -1
- package/dist/publishing/service.d.ts +26 -17
- package/dist/publishing/service.d.ts.map +1 -1
- package/dist/publishing/service.js +43 -32
- package/dist/publishing/service.js.map +1 -1
- package/dist/publishing/tools/get-publish-status.d.ts.map +1 -1
- package/dist/publishing/tools/get-publish-status.js +4 -0
- package/dist/publishing/tools/get-publish-status.js.map +1 -1
- package/dist/publishing/tools/rollback.d.ts.map +1 -1
- package/dist/publishing/tools/rollback.js +1 -1
- package/dist/publishing/tools/rollback.js.map +1 -1
- package/dist/references/UsedOnPanel.d.ts.map +1 -1
- package/dist/references/UsedOnPanel.js +1 -1
- package/dist/references/UsedOnPanel.js.map +1 -1
- package/dist/references/find.d.ts +12 -1
- package/dist/references/find.d.ts.map +1 -1
- package/dist/references/find.js +24 -5
- package/dist/references/find.js.map +1 -1
- package/dist/references/guards.d.ts.map +1 -1
- package/dist/references/guards.js +9 -2
- package/dist/references/guards.js.map +1 -1
- package/dist/references/index.d.ts +4 -2
- package/dist/references/index.d.ts.map +1 -1
- package/dist/references/index.js +2 -1
- package/dist/references/index.js.map +1 -1
- package/dist/references/links.d.ts +45 -0
- package/dist/references/links.d.ts.map +1 -0
- package/dist/references/links.js +117 -0
- package/dist/references/links.js.map +1 -0
- package/dist/references/walk.d.ts +70 -0
- package/dist/references/walk.d.ts.map +1 -1
- package/dist/references/walk.js +88 -41
- package/dist/references/walk.js.map +1 -1
- package/dist/utils/field-path.d.ts +56 -0
- package/dist/utils/field-path.d.ts.map +1 -0
- package/dist/utils/field-path.js +146 -0
- package/dist/utils/field-path.js.map +1 -0
- 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;
|
|
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
|
-
|
|
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,
|
|
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;
|
|
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"}
|
package/dist/references/index.js
CHANGED
|
@@ -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;
|
|
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;
|
|
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;AAqD3D,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,MAAM,CAAA;IAChB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAA;IACjB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;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;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAUjD;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAOhE;AAED,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,GAAG,OAAO,CAI1E;AAoBD,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB,uEAAuE;IACvE,QAAQ,EAAE,OAAO,CAAA;IACjB,+EAA+E;IAC/E,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,GAAG,SAAS,CAAA;IACnD,4DAA4D;IAC5D,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAA;IACnD,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,CACN,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,EAAE,EAAE,YAAY,KACb,OAAO,GAAG,IAAI,CAAA;IACnB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,CAAA;CACzE;AAED,MAAM,WAAW,mBAAmB;IAClC,uCAAuC;IACvC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CACvD;AAmLD;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,WAAW,EACpB,OAAO,GAAE,mBAAwB,GAChC,IAAI,CAON;AAED;;;;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,CAoCb;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"}
|
package/dist/references/walk.js
CHANGED
|
@@ -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:
|
|
68
|
-
* block they name. Shape-matched rather than typed against
|
|
69
|
-
* union, because the column was written by whatever editor
|
|
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,
|
|
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,
|
|
85
|
+
walkRichText(entry, at, walk);
|
|
77
86
|
return;
|
|
78
87
|
}
|
|
79
88
|
const node = value;
|
|
80
|
-
|
|
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 ?
|
|
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,
|
|
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],
|
|
101
|
+
walkRichText(node[key], at, walk);
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
|
-
function walkFields(fields, data,
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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,
|
|
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 =
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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,
|
|
136
|
+
walkRichText(value, here, walk);
|
|
133
137
|
break;
|
|
134
138
|
case 'group':
|
|
135
|
-
walkFields(childrenOf(field), value, here,
|
|
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,
|
|
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,
|
|
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) ??
|
|
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,
|
|
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
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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":"
|
|
1
|
+
{"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/references/walk.ts"],"names":[],"mappings":"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"}
|