@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
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export interface FieldLike {
|
|
2
|
+
type?: string;
|
|
3
|
+
name?: string;
|
|
4
|
+
label?: unknown;
|
|
5
|
+
labels?: {
|
|
6
|
+
singular?: unknown;
|
|
7
|
+
plural?: unknown;
|
|
8
|
+
};
|
|
9
|
+
fields?: readonly FieldLike[];
|
|
10
|
+
tabs?: readonly TabLike[];
|
|
11
|
+
blocks?: readonly BlockLike[];
|
|
12
|
+
blockReferences?: ReadonlyArray<string | BlockLike>;
|
|
13
|
+
}
|
|
14
|
+
interface TabLike {
|
|
15
|
+
name?: string;
|
|
16
|
+
label?: unknown;
|
|
17
|
+
fields?: readonly FieldLike[];
|
|
18
|
+
}
|
|
19
|
+
export interface BlockLike {
|
|
20
|
+
slug: string;
|
|
21
|
+
labels?: {
|
|
22
|
+
singular?: unknown;
|
|
23
|
+
};
|
|
24
|
+
fields?: readonly FieldLike[];
|
|
25
|
+
}
|
|
26
|
+
/** The parts of the config a description is read from. */
|
|
27
|
+
export interface FieldConfig {
|
|
28
|
+
fields: readonly FieldLike[];
|
|
29
|
+
/** Blocks declared once at the top of the config and referenced by slug. */
|
|
30
|
+
blocks?: readonly BlockLike[] | ReadonlyMap<string, BlockLike>;
|
|
31
|
+
/** A blocks field whose own label goes without saying: the collection's layout. */
|
|
32
|
+
layoutField?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* `layout[2].image` → `Block 3 (Image Hero) › Image`. `undefined` when the
|
|
36
|
+
* path's first step is not a field the config has.
|
|
37
|
+
*/
|
|
38
|
+
export declare function describeFieldPath(path: string, config: FieldConfig, document: Record<string, unknown>): string | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* The field called `name` in `fields`, looking through the containers that
|
|
41
|
+
* have no name of their own and so store their fields at this level — rows,
|
|
42
|
+
* collapsibles, unnamed groups, unnamed tabs. An unnamed tab is named in the
|
|
43
|
+
* result, because it is where an editor has to click to find the field.
|
|
44
|
+
*/
|
|
45
|
+
export declare function findField(fields: readonly FieldLike[], name: string): {
|
|
46
|
+
field: FieldLike;
|
|
47
|
+
tabs: string[];
|
|
48
|
+
} | undefined;
|
|
49
|
+
/** The config of the block `type` in a blocks field, inline or by reference. */
|
|
50
|
+
export declare function findBlock(field: FieldLike, type: string, config: Pick<FieldConfig, 'blocks'>): BlockLike | undefined;
|
|
51
|
+
/** A label as Payload allows it: a string, or one per language. A function says nothing here. */
|
|
52
|
+
export declare function labelText(label: unknown): string | undefined;
|
|
53
|
+
/** `metaTitle` → `Meta title`, the way Payload labels a field it was given no label for. */
|
|
54
|
+
export declare function humanizeName(name: string): string;
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=field-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-path.d.ts","sourceRoot":"","sources":["../../src/utils/field-path.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IACjD,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC7B,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC7B,eAAe,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CACpD;AAED,UAAU,OAAO;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IAC/B,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;CAC9B;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,SAAS,EAAE,CAAA;IAC5B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,SAAS,SAAS,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC9D,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,MAAM,GAAG,SAAS,CAwDpB;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,IAAI,EAAE,MAAM,GACX;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CA4BlD;AAED,gFAAgF;AAChF,wBAAgB,SAAS,CACvB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAClC,SAAS,GAAG,SAAS,CAWvB;AAmBD,iGAAiG;AACjG,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAU5D;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { componentDisplayName } from '@forumone/throughline-design-system/contract';
|
|
2
|
+
/**
|
|
3
|
+
* `layout[2].image` → `Block 3 (Image Hero) › Image`. `undefined` when the
|
|
4
|
+
* path's first step is not a field the config has.
|
|
5
|
+
*/
|
|
6
|
+
export function describeFieldPath(path, config, document) {
|
|
7
|
+
const segments = path
|
|
8
|
+
.replace(/\[(\d+)\]/g, '.$1')
|
|
9
|
+
.split('.')
|
|
10
|
+
.filter((s) => s !== '' && s !== '(root)');
|
|
11
|
+
const parts = [];
|
|
12
|
+
let fields = config.fields;
|
|
13
|
+
let data = document;
|
|
14
|
+
let i = 0;
|
|
15
|
+
while (fields && i < segments.length) {
|
|
16
|
+
const found = findField(fields, segments[i]);
|
|
17
|
+
if (!found)
|
|
18
|
+
break;
|
|
19
|
+
parts.push(...found.tabs);
|
|
20
|
+
const field = found.field;
|
|
21
|
+
const isLayout = i === 0 && field.name === config.layoutField;
|
|
22
|
+
data = child(data, segments[i]);
|
|
23
|
+
i++;
|
|
24
|
+
fields = undefined;
|
|
25
|
+
const index = i < segments.length && /^\d+$/.test(segments[i]) ? Number(segments[i]) : null;
|
|
26
|
+
if (field.type === 'blocks') {
|
|
27
|
+
if (!isLayout)
|
|
28
|
+
parts.push(labelOf(field));
|
|
29
|
+
if (index === null)
|
|
30
|
+
break;
|
|
31
|
+
const row = child(data, String(index));
|
|
32
|
+
const type = typeof row?.blockType === 'string' ? row.blockType : undefined;
|
|
33
|
+
const block = type ? findBlock(field, type, config) : undefined;
|
|
34
|
+
const name = block ? labelText(block.labels?.singular) ?? componentDisplayName(type) : undefined;
|
|
35
|
+
parts.push(name ? `Block ${index + 1} (${name})` : `Block ${index + 1}`);
|
|
36
|
+
data = row;
|
|
37
|
+
fields = block?.fields;
|
|
38
|
+
i++;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (field.type === 'array') {
|
|
42
|
+
if (index === null) {
|
|
43
|
+
parts.push(labelOf(field));
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
parts.push(`${labelText(field.labels?.singular) ?? labelOf(field)} ${index + 1}`);
|
|
47
|
+
data = child(data, String(index));
|
|
48
|
+
fields = field.fields;
|
|
49
|
+
i++;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
parts.push(labelOf(field));
|
|
53
|
+
// A named group or tab: its fields are the next step. Anything else — a
|
|
54
|
+
// relationship, an upload, rich text — is as far as the config goes.
|
|
55
|
+
if (field.type === 'group' || field.type === 'tab')
|
|
56
|
+
fields = field.fields;
|
|
57
|
+
}
|
|
58
|
+
return parts.length > 0 ? parts.join(' › ') : undefined;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The field called `name` in `fields`, looking through the containers that
|
|
62
|
+
* have no name of their own and so store their fields at this level — rows,
|
|
63
|
+
* collapsibles, unnamed groups, unnamed tabs. An unnamed tab is named in the
|
|
64
|
+
* result, because it is where an editor has to click to find the field.
|
|
65
|
+
*/
|
|
66
|
+
export function findField(fields, name) {
|
|
67
|
+
for (const field of fields) {
|
|
68
|
+
if (field.type === 'tabs') {
|
|
69
|
+
for (const tab of field.tabs ?? []) {
|
|
70
|
+
if (tab.name) {
|
|
71
|
+
if (tab.name === name) {
|
|
72
|
+
return {
|
|
73
|
+
field: { type: 'tab', name: tab.name, label: tab.label, fields: tab.fields ?? [] },
|
|
74
|
+
tabs: [],
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const inner = findField(tab.fields ?? [], name);
|
|
80
|
+
if (inner) {
|
|
81
|
+
const label = labelText(tab.label);
|
|
82
|
+
return { field: inner.field, tabs: [...(label ? [label] : []), ...inner.tabs] };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (field.name === name)
|
|
88
|
+
return { field, tabs: [] };
|
|
89
|
+
if (!field.name && Array.isArray(field.fields)) {
|
|
90
|
+
const inner = findField(field.fields, name);
|
|
91
|
+
if (inner)
|
|
92
|
+
return inner;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
/** The config of the block `type` in a blocks field, inline or by reference. */
|
|
98
|
+
export function findBlock(field, type, config) {
|
|
99
|
+
const inline = field.blocks?.find((b) => b.slug === type);
|
|
100
|
+
if (inline)
|
|
101
|
+
return inline;
|
|
102
|
+
for (const ref of field.blockReferences ?? []) {
|
|
103
|
+
if (typeof ref === 'string') {
|
|
104
|
+
if (ref === type)
|
|
105
|
+
return registered(config.blocks, type);
|
|
106
|
+
}
|
|
107
|
+
else if (ref.slug === type) {
|
|
108
|
+
return ref;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
function registered(blocks, slug) {
|
|
114
|
+
if (!blocks)
|
|
115
|
+
return undefined;
|
|
116
|
+
if (blocks instanceof Map)
|
|
117
|
+
return blocks.get(slug);
|
|
118
|
+
return blocks.find((b) => b.slug === slug);
|
|
119
|
+
}
|
|
120
|
+
function child(data, key) {
|
|
121
|
+
return data && typeof data === 'object' ? data[key] : undefined;
|
|
122
|
+
}
|
|
123
|
+
function labelOf(field) {
|
|
124
|
+
return labelText(field.label) ?? humanizeName(field.name ?? '');
|
|
125
|
+
}
|
|
126
|
+
/** A label as Payload allows it: a string, or one per language. A function says nothing here. */
|
|
127
|
+
export function labelText(label) {
|
|
128
|
+
if (typeof label === 'string' && label.trim() !== '')
|
|
129
|
+
return label;
|
|
130
|
+
if (label && typeof label === 'object') {
|
|
131
|
+
const byLanguage = label;
|
|
132
|
+
const en = byLanguage['en'];
|
|
133
|
+
if (typeof en === 'string' && en.trim() !== '')
|
|
134
|
+
return en;
|
|
135
|
+
const first = Object.values(byLanguage).find((v) => typeof v === 'string' && v.trim() !== '');
|
|
136
|
+
if (typeof first === 'string')
|
|
137
|
+
return first;
|
|
138
|
+
}
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
/** `metaTitle` → `Meta title`, the way Payload labels a field it was given no label for. */
|
|
142
|
+
export function humanizeName(name) {
|
|
143
|
+
const spaced = name.replace(/([a-z0-9])([A-Z])/g, '$1 $2').replace(/[_-]+/g, ' ').toLowerCase();
|
|
144
|
+
return spaced.charAt(0).toUpperCase() + spaced.slice(1);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=field-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-path.js","sourceRoot":"","sources":["../../src/utils/field-path.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forumone/throughline",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0-next-623d42c",
|
|
4
4
|
"description": "Throughline: an editorial platform for Payload CMS. Publishing, approvals, audit, integrations, email and jobs, with every feature reachable over MCP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
"dependencies": {
|
|
167
167
|
"zod": "^3.23.0",
|
|
168
168
|
"zod-to-json-schema": "^3.25.2",
|
|
169
|
-
"@forumone/throughline-design-system": "2.
|
|
169
|
+
"@forumone/throughline-design-system": "2.2.0-next-623d42c"
|
|
170
170
|
},
|
|
171
171
|
"devDependencies": {
|
|
172
172
|
"@payloadcms/db-sqlite": "^3.83.0",
|
|
@@ -181,6 +181,7 @@
|
|
|
181
181
|
"@vercel/blob": "2.3.1",
|
|
182
182
|
"eslint": "^10.11.0",
|
|
183
183
|
"inngest": "^4.2.0",
|
|
184
|
+
"jsdom": "^29.1.1",
|
|
184
185
|
"next": "^16.2.4",
|
|
185
186
|
"payload": "^3.83.0",
|
|
186
187
|
"react": "^19.2.0",
|
|
@@ -188,9 +189,9 @@
|
|
|
188
189
|
"resend": "^6.1.4",
|
|
189
190
|
"typescript": "^5.6.0",
|
|
190
191
|
"vitest": "^4.1.10",
|
|
191
|
-
"@forumone/throughline-
|
|
192
|
-
"@forumone/throughline-
|
|
193
|
-
"@forumone/throughline-
|
|
192
|
+
"@forumone/throughline-reference-ds": "0.3.22-next-623d42c",
|
|
193
|
+
"@forumone/throughline-tsconfig": "0.0.1",
|
|
194
|
+
"@forumone/throughline-eslint-config": "0.0.1"
|
|
194
195
|
},
|
|
195
196
|
"scripts": {
|
|
196
197
|
"build": "tsc -b",
|