@forumone/throughline 1.7.0 → 1.8.0-pr-296-6143452
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 +10 -0
- package/dist/components/plugin.d.ts +2 -0
- package/dist/components/plugin.d.ts.map +1 -1
- package/dist/components/plugin.js +13 -0
- package/dist/components/plugin.js.map +1 -1
- package/dist/components/validation/composition.d.ts +6 -0
- package/dist/components/validation/composition.d.ts.map +1 -1
- package/dist/components/validation/composition.js +15 -1
- package/dist/components/validation/composition.js.map +1 -1
- package/dist/publishing/options.d.ts +21 -0
- package/dist/publishing/options.d.ts.map +1 -1
- package/dist/publishing/options.js.map +1 -1
- package/dist/publishing/pipeline/steps/composition.d.ts +5 -0
- package/dist/publishing/pipeline/steps/composition.d.ts.map +1 -1
- package/dist/publishing/pipeline/steps/composition.js +89 -13
- package/dist/publishing/pipeline/steps/composition.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# @forumone/throughline
|
|
2
2
|
|
|
3
|
+
## 1.8.0-pr-296-6143452
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 6143452: The publish gate for composed sections. The new `publishing.recipes` option names the block that holds a recipe and the collection recipes live in. With it, the composition step checks that each such block's recipe exists, is approved, still passes `lintRecipe` against the current manifest, and has its required content filled, instead of calling the block an unknown component. The components plugin now also attaches its loaded manifest for this. The composition validator also checks placement: a component placed only `inline` can't be a block on a page by itself.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- @forumone/throughline-design-system@1.8.0-pr-296-6143452
|
|
12
|
+
|
|
3
13
|
## 1.7.0
|
|
4
14
|
|
|
5
15
|
### Patch Changes
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { CorePlugin } from '../plugin-contract/index.js';
|
|
2
2
|
import { type ComponentsPluginOptions } from './options.js';
|
|
3
|
+
/** Where the loaded manifest is attached, for peers that need the manifest itself. */
|
|
4
|
+
export declare const MANIFEST_SYMBOL: unique symbol;
|
|
3
5
|
export declare const componentsPlugin: CorePlugin<ComponentsPluginOptions>;
|
|
4
6
|
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/components/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAI7D,OAAO,EAAE,KAAK,uBAAuB,EAAmB,MAAM,cAAc,CAAA;AA6B5E,eAAO,MAAM,gBAAgB,EAAE,UAAU,CAAC,uBAAuB,CAsE9D,CAAA"}
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/components/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAI7D,OAAO,EAAE,KAAK,uBAAuB,EAAmB,MAAM,cAAc,CAAA;AA6B5E,sFAAsF;AACtF,eAAO,MAAM,eAAe,eAA0D,CAAA;AAEtF,eAAO,MAAM,gBAAgB,EAAE,UAAU,CAAC,uBAAuB,CAsE9D,CAAA"}
|
|
@@ -15,6 +15,8 @@ const PLUGIN_VERSION = '0.1.0';
|
|
|
15
15
|
* in the publishing package.
|
|
16
16
|
*/
|
|
17
17
|
const VALIDATOR_SYMBOL = Symbol.for('@forumone/throughline/components-validator');
|
|
18
|
+
/** Where the loaded manifest is attached, for peers that need the manifest itself. */
|
|
19
|
+
export const MANIFEST_SYMBOL = Symbol.for('@forumone/throughline/components-manifest');
|
|
18
20
|
export const componentsPlugin = (rawOptions) => (incomingConfig) => {
|
|
19
21
|
if (rawOptions.enabled === false)
|
|
20
22
|
return incomingConfig;
|
|
@@ -91,5 +93,16 @@ function attachValidator(payload, loader) {
|
|
|
91
93
|
writable: false,
|
|
92
94
|
configurable: false,
|
|
93
95
|
});
|
|
96
|
+
/*
|
|
97
|
+
The manifest itself, for the publish step's recipe check (forumone-2026#801):
|
|
98
|
+
a composed section is linted against the design system as it is at publish,
|
|
99
|
+
which is this loader's answer, not a copy taken when the recipe was saved.
|
|
100
|
+
*/
|
|
101
|
+
Object.defineProperty(payload, MANIFEST_SYMBOL, {
|
|
102
|
+
value: async () => (await loader.get()).raw,
|
|
103
|
+
enumerable: false,
|
|
104
|
+
writable: false,
|
|
105
|
+
configurable: false,
|
|
106
|
+
});
|
|
94
107
|
}
|
|
95
108
|
//# sourceMappingURL=plugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/components/plugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/components/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,12 @@ import type { LoadedManifest } from '@forumone/throughline-design-system/contrac
|
|
|
2
2
|
export interface CompositionBlock {
|
|
3
3
|
type: string;
|
|
4
4
|
variant?: string;
|
|
5
|
+
/**
|
|
6
|
+
* A composed section (forumone-2026#801): a recipe, not a component, so it
|
|
7
|
+
* has no contract here. The publish step checks the recipe itself; this only
|
|
8
|
+
* keeps its place in the order, so every block's index stays right.
|
|
9
|
+
*/
|
|
10
|
+
composed?: boolean;
|
|
5
11
|
}
|
|
6
12
|
export interface CompositionInput {
|
|
7
13
|
blocks: CompositionBlock[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../src/components/validation/composition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAA;AAElF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../src/components/validation/composition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAA;AAElF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,cAAc,GACvB,iBAAiB,CA8FnB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,cAAc,GACvB,gBAAgB,EAAE,CAmDpB"}
|
|
@@ -8,7 +8,7 @@ export function validateComposition(input, manifest) {
|
|
|
8
8
|
const counts = new Map();
|
|
9
9
|
for (let i = 0; i < input.blocks.length; i++) {
|
|
10
10
|
const block = input.blocks[i];
|
|
11
|
-
if (!block)
|
|
11
|
+
if (!block || block.composed)
|
|
12
12
|
continue;
|
|
13
13
|
counts.set(block.type, (counts.get(block.type) ?? 0) + 1);
|
|
14
14
|
const contract = manifest.getComponent(block.type);
|
|
@@ -21,6 +21,20 @@ export function validateComposition(input, manifest) {
|
|
|
21
21
|
});
|
|
22
22
|
continue;
|
|
23
23
|
}
|
|
24
|
+
/*
|
|
25
|
+
A component placed only `inline` lives inside another one — a Button in a
|
|
26
|
+
hero, a Card in a grid — and on a page by itself it is a fragment of a
|
|
27
|
+
layout with nothing around it. Nothing checked this before.
|
|
28
|
+
*/
|
|
29
|
+
const placement = contract.composition.placement;
|
|
30
|
+
if (!placement.includes('page') && !placement.includes('section')) {
|
|
31
|
+
issues.push({
|
|
32
|
+
severity: 'error',
|
|
33
|
+
rule: 'placement',
|
|
34
|
+
message: `"${block.type}" is placed inside other components, not on a page by itself`,
|
|
35
|
+
blockIndex: i,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
24
38
|
if (block.variant && contract.content.variants) {
|
|
25
39
|
const has = contract.content.variants.some((v) => v.name === block.variant);
|
|
26
40
|
if (!has) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../src/components/validation/composition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../src/components/validation/composition.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,6 +41,18 @@ export interface ApprovalResolver {
|
|
|
41
41
|
/** Returns the active granted approval for this document version, or `null`. */
|
|
42
42
|
getActiveApproval: (collection: string, id: string, version: string) => Promise<ActiveApproval | null>;
|
|
43
43
|
}
|
|
44
|
+
export interface RecipeGateOptions {
|
|
45
|
+
/** The block type a composed section is stored as, e.g. `ComposedSection`. */
|
|
46
|
+
blockType: string;
|
|
47
|
+
/** The collection its recipes live in, e.g. `section-recipes`. */
|
|
48
|
+
collection: string;
|
|
49
|
+
/** The block's relationship to its recipe. Default: `recipe`. */
|
|
50
|
+
recipeField?: string;
|
|
51
|
+
/** The block's content, one value per recipe field. Default: `content`. */
|
|
52
|
+
contentField?: string;
|
|
53
|
+
/** Whether a recipe may be published. Default: its `status` is `approved`. */
|
|
54
|
+
isApproved?: (recipe: Record<string, unknown>) => boolean;
|
|
55
|
+
}
|
|
44
56
|
export interface PublishingPluginOptions extends BaseCorePluginOptions {
|
|
45
57
|
/** Required: collections that can be published through this server. */
|
|
46
58
|
collections: PublishableCollection[];
|
|
@@ -57,6 +69,15 @@ export interface PublishingPluginOptions extends BaseCorePluginOptions {
|
|
|
57
69
|
disableAccessibilityChecks?: string[];
|
|
58
70
|
/** Optional: resolver consulted when a document's policy requires approval. */
|
|
59
71
|
approvalResolver?: ApprovalResolver;
|
|
72
|
+
/**
|
|
73
|
+
* Optional: the block that holds a composed section, and where its recipes
|
|
74
|
+
* live (forumone-2026#801). With it, the composition step checks each such
|
|
75
|
+
* block's recipe — that it exists, is approved, still passes `lintRecipe`
|
|
76
|
+
* against the manifest as it is now, and that the block's content fills the
|
|
77
|
+
* recipe's required fields — instead of calling the block an unknown
|
|
78
|
+
* component.
|
|
79
|
+
*/
|
|
80
|
+
recipes?: RecipeGateOptions;
|
|
60
81
|
/** Required: Inngest client used to fire publishing events. */
|
|
61
82
|
inngest: Inngest;
|
|
62
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/publishing/options.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AAExE,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mGAAmG;IACnG,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uFAAuF;IACvF,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,CACH,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,UAAU,EAAE,kBAAkB,KAC3B,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAA;CAC1D;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,iBAAiB,EAAE,CACjB,UAAU,EAAE,MAAM,EAClB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,uBAAwB,SAAQ,qBAAqB;IACpE,uEAAuE;IACvE,WAAW,EAAE,qBAAqB,EAAE,CAAA;IACpC,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAA;IAC1C;;;;;;;OAOG;IACH,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAA;IACrC,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAA;IAChB;;;;;;;;OAQG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,EAAE,gBAAgB,CAAA;CAC5B;AAED,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAC,GACtF,IAAI,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,CAAA;AAe/C;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,uBAAuB,GAAG,uBAAuB,CAezF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,uBAAuB,EAChC,IAAI,EAAE,MAAM,GACX,kBAAkB,CAiBpB"}
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/publishing/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/publishing/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/publishing/options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAGxD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA2HvB,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACvC,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5C,cAAc,EAAE,CAAC;SACd,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACxE,QAAQ,EAAE;CACd,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAgC;IAC9D,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAA;IAC7F,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IACnF,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,2BAA2B,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAChE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAC5C,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAA;QAC1D,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAgC,EAChC,IAAY;IAEZ,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;IAC/D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,eAAe,IAAI,sFAAsF,CAC1G,CAAA;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ;QAC3C,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;QAClC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,QAAQ;QAC3C,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM;QACrC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,aAAa;QAC1D,qBAAqB,EAAE,MAAM,CAAC,qBAAqB,IAAI,oBAAoB;QAC3E,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAA;AACH,CAAC"}
|
|
@@ -4,11 +4,16 @@ import type { PipelineStep } from '../types.js';
|
|
|
4
4
|
* validator to. Keep in sync with the components package.
|
|
5
5
|
*/
|
|
6
6
|
export declare const COMPONENTS_VALIDATOR_SYMBOL: unique symbol;
|
|
7
|
+
/** Where the components plugin attaches its loaded manifest. Keep in sync with it. */
|
|
8
|
+
export declare const COMPONENTS_MANIFEST_SYMBOL: unique symbol;
|
|
7
9
|
/**
|
|
8
10
|
* Validates a document's layout blocks via the Component Server's validator
|
|
9
11
|
* (attached to the Payload instance by `componentsPlugin`'s `onInit`). Empty
|
|
10
12
|
* layouts pass automatically. Composition warnings don't block publish; only
|
|
11
13
|
* errors do.
|
|
14
|
+
*
|
|
15
|
+
* With `recipes` configured, a composed section is checked as a recipe rather
|
|
16
|
+
* than as a component — see {@link checkComposedSection}.
|
|
12
17
|
*/
|
|
13
18
|
export declare const compositionStep: PipelineStep;
|
|
14
19
|
//# sourceMappingURL=composition.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/composition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/composition.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAkC,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/E;;;GAGG;AACH,eAAO,MAAM,2BAA2B,eAEvC,CAAA;AAED,sFAAsF;AACtF,eAAO,MAAM,0BAA0B,eAA0D,CAAA;AA4BjG;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,EAAE,YAkE7B,CAAA"}
|
|
@@ -1,32 +1,36 @@
|
|
|
1
|
+
import { lintRecipe } from '@forumone/throughline-design-system/recipes';
|
|
1
2
|
/**
|
|
2
3
|
* Symbol the Component Server's plugin (C5) attaches its composition
|
|
3
4
|
* validator to. Keep in sync with the components package.
|
|
4
5
|
*/
|
|
5
6
|
export const COMPONENTS_VALIDATOR_SYMBOL = Symbol.for('@forumone/throughline/components-validator');
|
|
7
|
+
/** Where the components plugin attaches its loaded manifest. Keep in sync with it. */
|
|
8
|
+
export const COMPONENTS_MANIFEST_SYMBOL = Symbol.for('@forumone/throughline/components-manifest');
|
|
6
9
|
/**
|
|
7
10
|
* Validates a document's layout blocks via the Component Server's validator
|
|
8
11
|
* (attached to the Payload instance by `componentsPlugin`'s `onInit`). Empty
|
|
9
12
|
* layouts pass automatically. Composition warnings don't block publish; only
|
|
10
13
|
* errors do.
|
|
14
|
+
*
|
|
15
|
+
* With `recipes` configured, a composed section is checked as a recipe rather
|
|
16
|
+
* than as a component — see {@link checkComposedSection}.
|
|
11
17
|
*/
|
|
12
18
|
export const compositionStep = async (ctx) => {
|
|
13
19
|
const layoutValue = ctx.document[ctx.collection.layoutField];
|
|
14
20
|
if (!Array.isArray(layoutValue) || layoutValue.length === 0) {
|
|
15
21
|
return { pass: true };
|
|
16
22
|
}
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const variant = block?.variant;
|
|
21
|
-
if (typeof type !== 'string')
|
|
22
|
-
return null;
|
|
23
|
-
return typeof variant === 'string'
|
|
24
|
-
? { type, variant }
|
|
25
|
-
: { type };
|
|
26
|
-
})
|
|
27
|
-
.filter((b) => b !== null);
|
|
28
|
-
if (blocks.length === 0)
|
|
23
|
+
const gate = ctx.options.recipes;
|
|
24
|
+
const typed = layoutValue.filter((block) => typeof block?.blockType === 'string');
|
|
25
|
+
if (typed.length === 0)
|
|
29
26
|
return { pass: true };
|
|
27
|
+
const blocks = typed.map((block) => {
|
|
28
|
+
if (gate && block.blockType === gate.blockType)
|
|
29
|
+
return { type: block.blockType, composed: true };
|
|
30
|
+
return typeof block.variant === 'string'
|
|
31
|
+
? { type: block.blockType, variant: block.variant }
|
|
32
|
+
: { type: block.blockType };
|
|
33
|
+
});
|
|
30
34
|
const validator = ctx.payload[COMPONENTS_VALIDATOR_SYMBOL];
|
|
31
35
|
if (!validator) {
|
|
32
36
|
return {
|
|
@@ -49,15 +53,87 @@ export const compositionStep = async (ctx) => {
|
|
|
49
53
|
out.field = `${ctx.collection.layoutField}[${issue.blockIndex}]`;
|
|
50
54
|
return out;
|
|
51
55
|
});
|
|
56
|
+
if (gate) {
|
|
57
|
+
for (const [index, block] of typed.entries()) {
|
|
58
|
+
if (block.blockType !== gate.blockType)
|
|
59
|
+
continue;
|
|
60
|
+
errors.push(...(await checkComposedSection(ctx, gate, block, index)));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
52
63
|
if (errors.length > 0) {
|
|
53
64
|
return {
|
|
54
65
|
pass: false,
|
|
55
66
|
code: 'composition-errors',
|
|
56
67
|
reason: `${errors.length} composition error${errors.length === 1 ? '' : 's'}`,
|
|
57
68
|
issues: errors,
|
|
58
|
-
suggestion: 'Fix the composition errors. Common causes: duplicate Heroes, forbidden adjacent blocks,
|
|
69
|
+
suggestion: 'Fix the composition errors. Common causes: duplicate Heroes, forbidden adjacent blocks, unknown component types, or a composed section whose recipe is not approved.',
|
|
59
70
|
};
|
|
60
71
|
}
|
|
61
72
|
return { pass: true };
|
|
62
73
|
};
|
|
74
|
+
/*
|
|
75
|
+
A composed section may publish only when its recipe would pass review today
|
|
76
|
+
(forumone-2026#801):
|
|
77
|
+
|
|
78
|
+
- **it exists** — a block whose recipe was deleted renders nothing;
|
|
79
|
+
- **a person approved it** — the recipe is the thing nobody reviewed as code;
|
|
80
|
+
- **it still lints against the manifest as it is now**, not as it was when it
|
|
81
|
+
was saved — a token renamed or a component removed since is caught here
|
|
82
|
+
rather than on the page;
|
|
83
|
+
- **the block fills the recipe's required fields** — an empty heading is an
|
|
84
|
+
empty `<h2>`.
|
|
85
|
+
|
|
86
|
+
Read past access control: the question is about the recipe, not about what the
|
|
87
|
+
publisher may see, and a draft recipe must fail for not being approved rather
|
|
88
|
+
than pass for not being found.
|
|
89
|
+
*/
|
|
90
|
+
async function checkComposedSection(ctx, gate, block, index) {
|
|
91
|
+
const field = `${ctx.collection.layoutField}[${index}]`;
|
|
92
|
+
const issue = (rule, message) => ({
|
|
93
|
+
severity: 'error',
|
|
94
|
+
rule,
|
|
95
|
+
message,
|
|
96
|
+
field,
|
|
97
|
+
});
|
|
98
|
+
const reference = block[gate.recipeField ?? 'recipe'];
|
|
99
|
+
const id = reference && typeof reference === 'object' ? reference.id : reference;
|
|
100
|
+
if (typeof id !== 'string' && typeof id !== 'number') {
|
|
101
|
+
return [issue('recipe-missing', 'This composed section has no recipe.')];
|
|
102
|
+
}
|
|
103
|
+
const recipe = (await ctx.payload.findByID({
|
|
104
|
+
collection: gate.collection,
|
|
105
|
+
id,
|
|
106
|
+
depth: 0,
|
|
107
|
+
overrideAccess: true,
|
|
108
|
+
disableErrors: true,
|
|
109
|
+
}));
|
|
110
|
+
if (!recipe) {
|
|
111
|
+
return [issue('recipe-missing', `The recipe this composed section uses (${id}) no longer exists.`)];
|
|
112
|
+
}
|
|
113
|
+
const name = String(recipe['name'] ?? id);
|
|
114
|
+
const approved = gate.isApproved ? gate.isApproved(recipe) : recipe['status'] === 'approved';
|
|
115
|
+
if (!approved) {
|
|
116
|
+
return [
|
|
117
|
+
issue('recipe-not-approved', `The composed section uses the recipe "${name}", which has not been approved. Approve it in the admin, then publish.`),
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
const issues = [];
|
|
121
|
+
const manifest = ctx.payload[COMPONENTS_MANIFEST_SYMBOL];
|
|
122
|
+
if (manifest) {
|
|
123
|
+
const lint = lintRecipe({ contract: recipe['contract'], tree: recipe['tree'] }, await manifest());
|
|
124
|
+
for (const found of lint.filter((l) => l.severity === 'error')) {
|
|
125
|
+
issues.push(issue('recipe-lint', `The recipe "${name}" no longer passes against the design system: ${found.path}: ${found.message}`));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const fields = recipe['contract']
|
|
129
|
+
?.content?.fields ?? [];
|
|
130
|
+
const content = (block[gate.contentField ?? 'content'] ?? {});
|
|
131
|
+
for (const f of fields) {
|
|
132
|
+
const value = content[f.name];
|
|
133
|
+
if (f.required && (value === undefined || value === null || value === '')) {
|
|
134
|
+
issues.push(issue('recipe-content', `"${f.name}" is required by the recipe "${name}" and is empty.`));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return issues;
|
|
138
|
+
}
|
|
63
139
|
//# sourceMappingURL=composition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/composition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"composition.js","sourceRoot":"","sources":["../../../../src/publishing/pipeline/steps/composition.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6CAA6C,CAAA;AAKxE;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CACnD,4CAA4C,CAC7C,CAAA;AAED,sFAAsF;AACtF,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;AA4BjG;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAiB,KAAK,EAAE,GAAG,EAAE,EAAE;IACzD,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;IAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IACvB,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,CAAA;IAChC,MAAM,KAAK,GAAI,WAA6B,CAAC,MAAM,CACjD,CAAC,KAAK,EAAgD,EAAE,CAAC,OAAO,KAAK,EAAE,SAAS,KAAK,QAAQ,CAC9F,CAAA;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAE7C,MAAM,MAAM,GAAqB,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACnD,IAAI,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAChG,OAAO,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YACtC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;YACnD,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,MAAM,SAAS,GAAI,GAAG,CAAC,OAA8C,CACnE,2BAA2B,CACM,CAAA;IAEnC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,2BAA2B;YACjC,MAAM,EACJ,0FAA0F;YAC5F,UAAU,EACR,0HAA0H;SAC7H,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1C,MAAM,MAAM,GAAoB,MAAM,CAAC,MAAM;SAC1C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;SAC7C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,GAAG,GAAkB;YACzB,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;SACjB,CAAA;QACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,CAAA;QACpG,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CAAA;IAEJ,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS;gBAAE,SAAQ;YAChD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,oBAAoB;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,qBAAqB,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;YAC7E,MAAM,EAAE,MAAM;YACd,UAAU,EACR,sKAAsK;SACzK,CAAA;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACvB,CAAC,CAAA;AAED;;;;;;;;;;;;;;;EAeE;AACF,KAAK,UAAU,oBAAoB,CACjC,GAAoB,EACpB,IAAuB,EACvB,KAAkB,EAClB,KAAa;IAEb,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,WAAW,IAAI,KAAK,GAAG,CAAA;IACvD,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,OAAe,EAAiB,EAAE,CAAC,CAAC;QAC/D,QAAQ,EAAE,OAAO;QACjB,IAAI;QACJ,OAAO;QACP,KAAK;KACN,CAAC,CAAA;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAA;IACrD,MAAM,EAAE,GACN,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAE,SAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAC7F,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;QACrD,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,sCAAsC,CAAC,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzC,UAAU,EAAE,IAAI,CAAC,UAA4B;QAC7C,EAAE;QACF,KAAK,EAAE,CAAC;QACR,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,IAAI;KACpB,CAAC,CAAmC,CAAA;IACrC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,0CAA0C,EAAE,qBAAqB,CAAC,CAAC,CAAA;IACrG,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,CAAA;IAC5F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,KAAK,CACH,qBAAqB,EACrB,yCAAyC,IAAI,wEAAwE,CACtH;SACF,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAoB,EAAE,CAAA;IAClC,MAAM,QAAQ,GAAI,GAAG,CAAC,OAA8C,CAClE,0BAA0B,CACc,CAAA;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,QAAQ,EAAE,CAAC,CAAA;QACjG,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,IAAI,CACT,KAAK,CACH,aAAa,EACb,eAAe,IAAI,iDAAiD,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CACnG,CACF,CAAA;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GACT,MAAM,CAAC,UAAU,CAAmF;QACnG,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,CAAA;IAC3B,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC,IAAI,EAAE,CAA4B,CAAA;IACxF,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC,EAAE,CAAC;YAC1E,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,IAAI,gCAAgC,IAAI,iBAAiB,CAAC,CAAC,CAAA;QACvG,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forumone/throughline",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0-pr-296-6143452",
|
|
4
4
|
"description": "Throughline: an editorial platform for Payload CMS. Publishing, approvals, audit, integrations, email and jobs, with every feature reachable over MCP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
"dependencies": {
|
|
167
167
|
"zod": "^3.23.0",
|
|
168
168
|
"zod-to-json-schema": "^3.25.2",
|
|
169
|
-
"@forumone/throughline-design-system": "1.
|
|
169
|
+
"@forumone/throughline-design-system": "1.8.0-pr-296-6143452"
|
|
170
170
|
},
|
|
171
171
|
"devDependencies": {
|
|
172
172
|
"@payloadcms/db-sqlite": "^3.83.0",
|
|
@@ -188,8 +188,8 @@
|
|
|
188
188
|
"resend": "^6.1.4",
|
|
189
189
|
"typescript": "^5.6.0",
|
|
190
190
|
"vitest": "^4.1.10",
|
|
191
|
+
"@forumone/throughline-reference-ds": "0.3.17-pr-296-6143452",
|
|
191
192
|
"@forumone/throughline-eslint-config": "0.0.1",
|
|
192
|
-
"@forumone/throughline-reference-ds": "0.3.16",
|
|
193
193
|
"@forumone/throughline-tsconfig": "0.0.1"
|
|
194
194
|
},
|
|
195
195
|
"scripts": {
|