@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":"approval.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/approval.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"approval.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/approval.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI/C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,YA+C1B,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { documentContentHash } from '../../../utils/content-hash.js';
|
|
2
|
+
import { PUBLISHING_UNAVAILABLE } from '../../messages.js';
|
|
2
3
|
import { APPROVALS_RESOLVER_SYMBOL } from '../../../approvals/symbol.js';
|
|
3
4
|
/**
|
|
4
5
|
* Gates publish on a granted approval when the document's policy demands
|
|
@@ -20,8 +21,8 @@ export const approvalStep = async (ctx) => {
|
|
|
20
21
|
return {
|
|
21
22
|
pass: false,
|
|
22
23
|
code: 'approval-resolver-missing',
|
|
23
|
-
reason:
|
|
24
|
-
|
|
24
|
+
reason: PUBLISHING_UNAVAILABLE,
|
|
25
|
+
detail: 'The document requires approval but no approval resolver is configured. Register approvalsPlugin in your Payload config (it attaches the resolver automatically) or pass an explicit `approvalResolver` to publishingPlugin.',
|
|
25
26
|
};
|
|
26
27
|
}
|
|
27
28
|
/*
|
|
@@ -41,8 +42,9 @@ export const approvalStep = async (ctx) => {
|
|
|
41
42
|
return {
|
|
42
43
|
pass: false,
|
|
43
44
|
code: 'approval-required',
|
|
44
|
-
reason: 'This
|
|
45
|
-
|
|
45
|
+
reason: 'This needs approval before it can be published.',
|
|
46
|
+
// An MCP caller's `publish` adds how to request one, in its own terms.
|
|
47
|
+
suggestion: 'Ask an approver to review this version. Any edit after approval needs a fresh approval.',
|
|
46
48
|
};
|
|
47
49
|
}
|
|
48
50
|
return { pass: true };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAG1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAA;AAGxE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiB,KAAK,EAAE,GAAG,EAAE,EAAE;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAEzC,CAAA;IACb,IAAI,CAAC,MAAM,EAAE,CAAC,kBAAkB,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAExD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACrF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,2BAA2B;YACjC,MAAM,EAAE,sBAAsB;YAC9B,MAAM,EACJ,6NAA6N;SAChO,CAAA;IACH,CAAC;IAED;;;;;;;;;;MAUE;IACF,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAC/C,GAAG,CAAC,UAAU,CAAC,IAAI,EACnB,GAAG,CAAC,UAAU,EACd,SAAS,CACV,CAAA;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,iDAAiD;YACzD,uEAAuE;YACvE,UAAU,EACR,yFAAyF;SAC5F,CAAA;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACvB,CAAC,CAAA;AAED,SAAS,uBAAuB,CAAC,OAAe;IAC9C,MAAM,KAAK,GAAI,OAAmC,CAAC,yBAAyB,CAAC,CAAA;IAC7E,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,KAA0B,CAAC,CAAC,CAAC,SAAS,CAAA;AAC9F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/composition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAA;
|
|
1
|
+
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/composition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAA;AAK5E,OAAO,KAAK,EAAkC,YAAY,EAAE,MAAM,aAAa,CAAA;AAG/E;;;GAGG;AACH,eAAO,MAAM,2BAA2B,eAEvC,CAAA;AAED,sFAAsF;AACtF,eAAO,MAAM,0BAA0B,eAA0D,CAAA;AA8BjG;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,YAkG7B,CAAA;AAiHD,6EAA6E;AAC7E,wBAAgB,UAAU,CACxB,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,EACrD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,EAAE,GAAG,SAAS,CAiBtB;AAID,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAYlD"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { lintRecipe } from '@forumone/throughline-design-system/recipes';
|
|
2
|
+
import { PUBLISHING_UNAVAILABLE, TELL_AN_ADMINISTRATOR, plural } from '../../messages.js';
|
|
3
|
+
import { blockLabel, fieldConfigFor } from '../where.js';
|
|
2
4
|
/**
|
|
3
5
|
* Symbol the Component Server's plugin (C5) attaches its composition
|
|
4
6
|
* validator to. Keep in sync with the components package.
|
|
@@ -36,23 +38,37 @@ export const compositionStep = async (ctx) => {
|
|
|
36
38
|
return {
|
|
37
39
|
pass: false,
|
|
38
40
|
code: 'components-server-missing',
|
|
39
|
-
reason:
|
|
40
|
-
|
|
41
|
+
reason: PUBLISHING_UNAVAILABLE,
|
|
42
|
+
detail: 'The composition step requires the components plugin. Register `componentsPlugin` in your Payload config before `publishingPlugin`; both must share the same Payload instance.',
|
|
41
43
|
};
|
|
42
44
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
// Each block named as the editor picked it: its label in this collection's
|
|
46
|
+
// layout field, which is where a host's renamed block shows its new name.
|
|
47
|
+
const config = fieldConfigFor(ctx);
|
|
48
|
+
const result = await validator({ blocks, label: (type) => blockLabel(config, type) });
|
|
49
|
+
const toIssue = (issue) => {
|
|
47
50
|
const out = {
|
|
48
|
-
severity:
|
|
51
|
+
severity: issue.severity,
|
|
49
52
|
message: issue.message,
|
|
50
53
|
rule: issue.rule,
|
|
51
54
|
};
|
|
52
55
|
if (issue.blockIndex !== undefined)
|
|
53
56
|
out.field = `${ctx.collection.layoutField}[${issue.blockIndex}]`;
|
|
54
57
|
return out;
|
|
55
|
-
}
|
|
58
|
+
};
|
|
59
|
+
const errors = result.issues
|
|
60
|
+
.filter((issue) => issue.severity === 'error')
|
|
61
|
+
.map(toIssue);
|
|
62
|
+
/*
|
|
63
|
+
A warning does not block, and used to be dropped here — so the one rule that
|
|
64
|
+
only warns, a component missing the sibling its contract expects, reached
|
|
65
|
+
nobody (forumone-2026#805). It now rides on the result's `warnings`, which a
|
|
66
|
+
publish reports beside its success.
|
|
67
|
+
*/
|
|
68
|
+
const warnings = result.issues
|
|
69
|
+
.filter((issue) => issue.severity === 'warning')
|
|
70
|
+
.map((issue) => issue.message);
|
|
71
|
+
const carried = warnings.length > 0 ? { warnings } : {};
|
|
56
72
|
if (gate) {
|
|
57
73
|
for (const [index, block] of typed.entries()) {
|
|
58
74
|
if (block.blockType !== gate.blockType)
|
|
@@ -71,7 +87,7 @@ export const compositionStep = async (ctx) => {
|
|
|
71
87
|
errors.push({
|
|
72
88
|
severity: 'error',
|
|
73
89
|
rule: 'empty-block',
|
|
74
|
-
message: `
|
|
90
|
+
message: `This ${blockLabel(config, block.blockType)} block is empty, so it would show as a blank band on the page. Fill it in or remove it.`,
|
|
75
91
|
field: `${ctx.collection.layoutField}[${index}]`,
|
|
76
92
|
});
|
|
77
93
|
}
|
|
@@ -79,14 +95,15 @@ export const compositionStep = async (ctx) => {
|
|
|
79
95
|
}
|
|
80
96
|
if (errors.length > 0) {
|
|
81
97
|
return {
|
|
98
|
+
...carried,
|
|
82
99
|
pass: false,
|
|
83
100
|
code: 'composition-errors',
|
|
84
|
-
reason: `${errors.length}
|
|
101
|
+
reason: `${plural(errors.length, 'problem')} with the blocks to fix before this can be published.`,
|
|
85
102
|
issues: errors,
|
|
86
|
-
suggestion: '
|
|
103
|
+
suggestion: 'Each problem below names the block.',
|
|
87
104
|
};
|
|
88
105
|
}
|
|
89
|
-
return { pass: true };
|
|
106
|
+
return { pass: true, ...carried };
|
|
90
107
|
};
|
|
91
108
|
/*
|
|
92
109
|
A composed section may publish only when its recipe would pass review today
|
|
@@ -115,7 +132,7 @@ async function checkComposedSection(ctx, gate, block, index) {
|
|
|
115
132
|
const reference = block[gate.recipeField ?? 'recipe'];
|
|
116
133
|
const id = reference && typeof reference === 'object' ? reference.id : reference;
|
|
117
134
|
if (typeof id !== 'string' && typeof id !== 'number') {
|
|
118
|
-
return [issue('recipe-missing', 'This
|
|
135
|
+
return [issue('recipe-missing', 'This section has no recipe chosen. Choose one, or remove the block.')];
|
|
119
136
|
}
|
|
120
137
|
const recipe = (await ctx.payload.findByID({
|
|
121
138
|
collection: gate.collection,
|
|
@@ -125,13 +142,15 @@ async function checkComposedSection(ctx, gate, block, index) {
|
|
|
125
142
|
disableErrors: true,
|
|
126
143
|
}));
|
|
127
144
|
if (!recipe) {
|
|
128
|
-
return [
|
|
145
|
+
return [
|
|
146
|
+
issue('recipe-missing', `The recipe this section was built from no longer exists (${id}). Choose another, or remove the block.`),
|
|
147
|
+
];
|
|
129
148
|
}
|
|
130
149
|
const name = String(recipe['name'] ?? id);
|
|
131
150
|
const approved = gate.isApproved ? gate.isApproved(recipe) : recipe['status'] === 'approved';
|
|
132
151
|
if (!approved) {
|
|
133
152
|
return [
|
|
134
|
-
issue('recipe-not-approved', `
|
|
153
|
+
issue('recipe-not-approved', `This section uses the recipe "${name}", which hasn't been approved. Approve it, or ask someone who can, then publish.`),
|
|
135
154
|
];
|
|
136
155
|
}
|
|
137
156
|
const issues = [];
|
|
@@ -139,7 +158,7 @@ async function checkComposedSection(ctx, gate, block, index) {
|
|
|
139
158
|
if (manifest) {
|
|
140
159
|
const lint = lintRecipe({ contract: recipe['contract'], tree: recipe['tree'] }, await manifest());
|
|
141
160
|
for (const found of lint.filter((l) => l.severity === 'error')) {
|
|
142
|
-
issues.push(issue('recipe-lint', `The recipe "${name}" no longer
|
|
161
|
+
issues.push(issue('recipe-lint', `The recipe "${name}" no longer matches the design system, so this section can't be published. Choose another recipe, or ${TELL_AN_ADMINISTRATOR}. (${found.path}: ${found.message})`));
|
|
143
162
|
}
|
|
144
163
|
}
|
|
145
164
|
const fields = recipe['contract']
|
|
@@ -148,7 +167,7 @@ async function checkComposedSection(ctx, gate, block, index) {
|
|
|
148
167
|
for (const f of fields) {
|
|
149
168
|
const value = content[f.name];
|
|
150
169
|
if (f.required && (value === undefined || value === null || value === '')) {
|
|
151
|
-
issues.push(issue('recipe-content', `"${f.name}" is
|
|
170
|
+
issues.push(issue('recipe-content', `"${f.name}" is empty, and the recipe "${name}" needs it. Fill it in.`));
|
|
152
171
|
}
|
|
153
172
|
}
|
|
154
173
|
return issues;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/composition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6CAA6C,CAAA;
|
|
1
|
+
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/composition.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,10 @@ import type { PipelineStep } from '../types.js';
|
|
|
7
7
|
* Both fields live under the configured `policyField` on the document.
|
|
8
8
|
* Missing or null values are treated as "no policy applies" — the step
|
|
9
9
|
* passes.
|
|
10
|
+
*
|
|
11
|
+
* The time is written into `reason` in the site's configured zone
|
|
12
|
+
* (`timeZone`, UTC by default) and named, and returned as `when` too, so the
|
|
13
|
+
* admin can say it in the editor's own zone instead.
|
|
10
14
|
*/
|
|
11
15
|
export declare const embargoStep: PipelineStep;
|
|
12
16
|
//# sourceMappingURL=embargo.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embargo.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/embargo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embargo.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/embargo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,EAAE,YAiCzB,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { messageDate } from '../../messages.js';
|
|
1
2
|
/**
|
|
2
3
|
* Enforces the document's policy:
|
|
3
4
|
* - `embargoedUntil`: blocks publish until that time has passed
|
|
@@ -6,6 +7,10 @@
|
|
|
6
7
|
* Both fields live under the configured `policyField` on the document.
|
|
7
8
|
* Missing or null values are treated as "no policy applies" — the step
|
|
8
9
|
* passes.
|
|
10
|
+
*
|
|
11
|
+
* The time is written into `reason` in the site's configured zone
|
|
12
|
+
* (`timeZone`, UTC by default) and named, and returned as `when` too, so the
|
|
13
|
+
* admin can say it in the editor's own zone instead.
|
|
9
14
|
*/
|
|
10
15
|
export const embargoStep = async (ctx) => {
|
|
11
16
|
const policy = ctx.document[ctx.collection.policyField];
|
|
@@ -14,20 +19,24 @@ export const embargoStep = async (ctx) => {
|
|
|
14
19
|
const now = Date.now();
|
|
15
20
|
const embargoedUntil = parseDate(policy['embargoedUntil']);
|
|
16
21
|
if (embargoedUntil !== null && embargoedUntil > now) {
|
|
22
|
+
const when = messageDate(embargoedUntil, ctx.options.timeZone);
|
|
17
23
|
return {
|
|
18
24
|
pass: false,
|
|
19
25
|
code: 'embargoed',
|
|
20
|
-
reason: `
|
|
21
|
-
suggestion: 'Wait until
|
|
26
|
+
reason: `This can't go live until ${when.text}.`,
|
|
27
|
+
suggestion: 'Wait until then, change the embargo date, or schedule it to publish after that time.',
|
|
28
|
+
when,
|
|
22
29
|
};
|
|
23
30
|
}
|
|
24
31
|
const expiresAt = parseDate(policy['expiresAt']);
|
|
25
32
|
if (expiresAt !== null && expiresAt < now) {
|
|
33
|
+
const when = messageDate(expiresAt, ctx.options.timeZone);
|
|
26
34
|
return {
|
|
27
35
|
pass: false,
|
|
28
36
|
code: 'expired',
|
|
29
|
-
reason: `
|
|
30
|
-
suggestion: '
|
|
37
|
+
reason: `This content expired on ${when.text}.`,
|
|
38
|
+
suggestion: 'Change the expiry date, or unpublish it.',
|
|
39
|
+
when,
|
|
31
40
|
};
|
|
32
41
|
}
|
|
33
42
|
return { pass: true };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embargo.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/embargo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"embargo.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/embargo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,WAAW,GAAiB,KAAK,EAAE,GAAG,EAAE,EAAE;IACrD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAEzC,CAAA;IACb,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAElC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC1D,IAAI,cAAc,KAAK,IAAI,IAAI,cAAc,GAAG,GAAG,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,WAAW,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC9D,OAAO;YACL,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,4BAA4B,IAAI,CAAC,IAAI,GAAG;YAChD,UAAU,EACR,sFAAsF;YACxF,IAAI;SACL,CAAA;IACH,CAAC;IAED,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAA;IAChD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACzD,OAAO;YACL,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,2BAA2B,IAAI,CAAC,IAAI,GAAG;YAC/C,UAAU,EAAE,0CAA0C;YACtD,IAAI;SACL,CAAA;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACvB,CAAC,CAAA;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5B,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA;AACrC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/execute.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/execute.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,aAAa,CAAA;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,eAAO,MAAM,WAAW,EAAE,YA+EzB,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { sendEventSafely } from '../../events.js';
|
|
2
|
+
import { plural } from '../../messages.js';
|
|
2
3
|
/**
|
|
3
4
|
* Performs the actual publish: writes `_status: 'published'`, stamps the
|
|
4
5
|
* publishedAt field on a first publish, then fires `content/page.published`
|
|
@@ -80,11 +81,14 @@ export const executeStep = async (ctx) => {
|
|
|
80
81
|
// Somebody is in the document. Not a failure to investigate — a state that
|
|
81
82
|
// resolves itself, and one the caller can act on: wait, or ask them.
|
|
82
83
|
if (isLocked(error)) {
|
|
84
|
+
const holder = await lockHolder(ctx);
|
|
83
85
|
return {
|
|
84
86
|
pass: false,
|
|
85
87
|
code: 'document-locked',
|
|
86
|
-
reason: '
|
|
87
|
-
|
|
88
|
+
reason: `${holder ?? 'Someone else'} is editing this right now.`,
|
|
89
|
+
// It resolves itself, and has to say so, or it reads as a failure to
|
|
90
|
+
// investigate.
|
|
91
|
+
suggestion: "Try again once they've closed it, or ask them to finish. If they've left it open, it frees up on its own a few minutes after they stop.",
|
|
88
92
|
};
|
|
89
93
|
}
|
|
90
94
|
const issues = fieldIssues(error);
|
|
@@ -95,10 +99,11 @@ export const executeStep = async (ctx) => {
|
|
|
95
99
|
throw error;
|
|
96
100
|
return {
|
|
97
101
|
pass: false,
|
|
102
|
+
// No suggestion: Payload's own messages say what each field needs, and
|
|
103
|
+
// the admin marks the fields and says so.
|
|
98
104
|
code: 'field-validation-failed',
|
|
99
|
-
reason: `${issues.length}
|
|
105
|
+
reason: `${plural(issues.length, 'field')} ${issues.length === 1 ? 'needs' : 'need'} fixing before this can be published.`,
|
|
100
106
|
issues,
|
|
101
|
-
suggestion: 'These are required by the collection rather than by a policy check, so they must be filled before this document can be published.',
|
|
102
107
|
};
|
|
103
108
|
}
|
|
104
109
|
// The write has landed. From here the publish has happened, so nothing
|
|
@@ -113,7 +118,7 @@ export const executeStep = async (ctx) => {
|
|
|
113
118
|
previousPublishedAt,
|
|
114
119
|
isFirstPublish: wasFirstPublish,
|
|
115
120
|
},
|
|
116
|
-
});
|
|
121
|
+
}, ctx.payload.logger);
|
|
117
122
|
return { pass: true, ...(warning ? { warnings: [warning] } : {}) };
|
|
118
123
|
};
|
|
119
124
|
/**
|
|
@@ -146,6 +151,44 @@ function fieldIssues(error) {
|
|
|
146
151
|
}
|
|
147
152
|
return issues;
|
|
148
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* The name of whoever holds the document's lock, or `undefined` when it cannot
|
|
156
|
+
* be read. Payload's `Locked` carries only a sentence naming the document's id;
|
|
157
|
+
* the lock row names the user, and "Sam is editing this" is something an
|
|
158
|
+
* editor can act on — they can ask Sam.
|
|
159
|
+
*
|
|
160
|
+
* Best effort, and past access control: the holder's name is what the admin's
|
|
161
|
+
* own lock modal shows anybody who opens the document.
|
|
162
|
+
*/
|
|
163
|
+
async function lockHolder(ctx) {
|
|
164
|
+
try {
|
|
165
|
+
const found = await ctx.payload.find({
|
|
166
|
+
collection: 'payload-locked-documents',
|
|
167
|
+
where: {
|
|
168
|
+
and: [
|
|
169
|
+
{ 'document.relationTo': { equals: ctx.collection.slug } },
|
|
170
|
+
{ 'document.value': { equals: ctx.documentId } },
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
sort: '-updatedAt',
|
|
174
|
+
limit: 1,
|
|
175
|
+
depth: 1,
|
|
176
|
+
overrideAccess: true,
|
|
177
|
+
});
|
|
178
|
+
const user = found.docs[0]?.user?.value;
|
|
179
|
+
if (!user || typeof user !== 'object')
|
|
180
|
+
return undefined;
|
|
181
|
+
const { name, email } = user;
|
|
182
|
+
if (typeof name === 'string' && name.trim() !== '')
|
|
183
|
+
return name;
|
|
184
|
+
if (typeof email === 'string' && email.trim() !== '')
|
|
185
|
+
return email;
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
149
192
|
/**
|
|
150
193
|
* Payload's `Locked`, read structurally for the same reason as `fieldIssues`
|
|
151
194
|
* below it: two copies of `payload` under one tree make `instanceof` false for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/execute.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { PipelineStep } from '../types.js';
|
|
2
|
+
/** Also what unpublish, schedule and unschedule say for a document that is not there. */
|
|
3
|
+
export declare const NOT_FOUND = "This document couldn't be found. It may have been deleted or moved to the trash.";
|
|
2
4
|
/**
|
|
3
5
|
* Verifies the document exists and isn't already published with no
|
|
4
6
|
* outstanding draft changes. The publish operation should be idempotent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exist.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/exist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,YAgBvB,CAAA"}
|
|
1
|
+
{"version":3,"file":"exist.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/exist.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,yFAAyF;AACzF,eAAO,MAAM,SAAS,qFAC8D,CAAA;AAEpF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,YAgBvB,CAAA"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
/** Also what unpublish, schedule and unschedule say for a document that is not there. */
|
|
2
|
+
export const NOT_FOUND = "This document couldn't be found. It may have been deleted or moved to the trash.";
|
|
1
3
|
/**
|
|
2
4
|
* Verifies the document exists and isn't already published with no
|
|
3
5
|
* outstanding draft changes. The publish operation should be idempotent
|
|
@@ -6,15 +8,15 @@
|
|
|
6
8
|
*/
|
|
7
9
|
export const existStep = async (ctx) => {
|
|
8
10
|
if (!ctx.document || Object.keys(ctx.document).length === 0) {
|
|
9
|
-
return { pass: false, code: 'not-found', reason:
|
|
11
|
+
return { pass: false, code: 'not-found', reason: NOT_FOUND };
|
|
10
12
|
}
|
|
11
13
|
const isPublished = ctx.document['_status'] === 'published';
|
|
12
14
|
if (isPublished && !hasUnpublishedChanges(ctx.document, ctx.collection.publishedAtField)) {
|
|
13
15
|
return {
|
|
14
16
|
pass: false,
|
|
15
17
|
code: 'already-published',
|
|
16
|
-
reason: '
|
|
17
|
-
suggestion: 'Make a
|
|
18
|
+
reason: "There's nothing new to publish.",
|
|
19
|
+
suggestion: 'Make a change first, then publish.',
|
|
18
20
|
};
|
|
19
21
|
}
|
|
20
22
|
return { pass: true };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exist.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/exist.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAiB,KAAK,EAAE,GAAG,EAAE,EAAE;IACnD,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"exist.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/exist.ts"],"names":[],"mappings":"AAEA,yFAAyF;AACzF,MAAM,CAAC,MAAM,SAAS,GACpB,kFAAkF,CAAA;AAEpF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAiB,KAAK,EAAE,GAAG,EAAE,EAAE;IACnD,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;IAC9D,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,WAAW,CAAA;IAC3D,IAAI,WAAW,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACzF,OAAO;YACL,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,mBAAmB;YACzB,MAAM,EAAE,iCAAiC;YACzC,UAAU,EAAE,oCAAoC;SACjD,CAAA;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACvB,CAAC,CAAA;AAED,SAAS,qBAAqB,CAC5B,GAA4B,EAC5B,gBAAwB;IAExB,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,CAAA;IACnC,MAAM,YAAY,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC1C,MAAM,SAAS,GAAG,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7E,MAAM,WAAW,GAAG,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACnF,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAA;IACrE,OAAO,SAAS,GAAG,WAAW,CAAA;AAChC,CAAC"}
|
|
@@ -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;AAuP/E,eAAO,MAAM,eAAe,EAAE,YA6E7B,CAAA"}
|