@cmssy/core 14.1.0 → 14.2.0

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/dist/index.cjs CHANGED
@@ -619,6 +619,62 @@ function defineCmssyLayout(layout) {
619
619
  return { regions };
620
620
  }
621
621
 
622
+ // src/manifest.ts
623
+ function propsToSchema(props) {
624
+ const schema = {};
625
+ for (const [key, def] of Object.entries(props)) {
626
+ schema[key] = { ...def, label: def.label || key };
627
+ }
628
+ return schema;
629
+ }
630
+ function blocksToSchemas(blocks) {
631
+ const out = /* @__PURE__ */ Object.create(null);
632
+ for (const block of blocks) out[block.type] = propsToSchema(block.props);
633
+ return out;
634
+ }
635
+ function blocksToMeta(blocks, defaults = {}) {
636
+ const out = /* @__PURE__ */ Object.create(null);
637
+ for (const block of blocks) {
638
+ const category = block.category ?? defaults.category;
639
+ out[block.type] = {
640
+ label: block.label ?? block.type,
641
+ ...category ? { category } : {},
642
+ ...block.icon ? { icon: block.icon } : {},
643
+ ...block.layoutPositions ? { layoutPositions: block.layoutPositions } : {},
644
+ ...block.description ? { description: block.description } : {}
645
+ };
646
+ }
647
+ return out;
648
+ }
649
+ function layoutRegionsToBridge(regions) {
650
+ return regions.map(
651
+ (region) => region.settings ? { ...region, settings: propsToSchema(region.settings) } : { ...region }
652
+ );
653
+ }
654
+ function registryToManifestBlocks(schemas, blockMeta) {
655
+ return Object.entries(schemas).sort(([a], [b]) => a.localeCompare(b)).map(([type, schema]) => {
656
+ const meta = blockMeta?.[type];
657
+ return {
658
+ type,
659
+ label: meta?.label || type,
660
+ ...meta?.category ? { category: meta.category } : {},
661
+ ...meta?.icon ? { icon: meta.icon } : {},
662
+ ...meta?.description ? { description: meta.description } : {},
663
+ ...meta?.layoutPositions?.length ? { layoutPositions: meta.layoutPositions } : {},
664
+ schema
665
+ };
666
+ });
667
+ }
668
+ function buildBlockManifest(blocks, options = {}) {
669
+ return {
670
+ blocks: registryToManifestBlocks(
671
+ blocksToSchemas(blocks),
672
+ blocksToMeta(blocks, { category: options.category })
673
+ ),
674
+ regions: options.regions ? layoutRegionsToBridge(options.regions) : null
675
+ };
676
+ }
677
+
622
678
  // src/data/localize-href.ts
623
679
  var PROTOCOL_OR_RELATIVE = /^([a-z][a-z0-9+.-]*:|\/\/)/i;
624
680
  function isExternalHref(href) {
@@ -1009,6 +1065,9 @@ exports.DEFAULT_CMSSY_EDITOR_ORIGINS = DEFAULT_CMSSY_EDITOR_ORIGINS;
1009
1065
  exports.PROTOCOL_VERSION = PROTOCOL_VERSION;
1010
1066
  exports.SHORTCUT_ACTIONS = SHORTCUT_ACTIONS;
1011
1067
  exports.applyCmssyCsp = applyCmssyCsp;
1068
+ exports.blocksToMeta = blocksToMeta;
1069
+ exports.blocksToSchemas = blocksToSchemas;
1070
+ exports.buildBlockManifest = buildBlockManifest;
1012
1071
  exports.createCmssyClient = createCmssyClient;
1013
1072
  exports.defineCmssyConfig = defineCmssyConfig;
1014
1073
  exports.defineCmssyLayout = defineCmssyLayout;
@@ -1016,6 +1075,7 @@ exports.fields = fields;
1016
1075
  exports.graphqlRequest = graphqlRequest;
1017
1076
  exports.isProtocolCompatible = isProtocolCompatible;
1018
1077
  exports.isVerifiedEditUrl = isVerifiedEditUrl;
1078
+ exports.layoutRegionsToBridge = layoutRegionsToBridge;
1019
1079
  exports.localizeHref = localizeHref;
1020
1080
  exports.mediaAlt = mediaAlt;
1021
1081
  exports.mediaUrl = mediaUrl;
@@ -1023,6 +1083,8 @@ exports.mediaUrls = mediaUrls;
1023
1083
  exports.normalizeOrigin = normalizeOrigin;
1024
1084
  exports.parseEditorMessage = parseEditorMessage;
1025
1085
  exports.postToEditor = postToEditor;
1086
+ exports.propsToSchema = propsToSchema;
1087
+ exports.registryToManifestBlocks = registryToManifestBlocks;
1026
1088
  exports.resolveCmssyLocale = resolveCmssyLocale;
1027
1089
  exports.resolveEditorOrigin = resolveEditorOrigin;
1028
1090
  exports.verifyCmssyWebhook = verifyCmssyWebhook;
package/dist/index.d.cts CHANGED
@@ -2,7 +2,7 @@ export { A as AppToEditorMessage, B as BoundsMessage, C as ClickMessage, a as Cm
2
2
  export { C as CMSSY_LOCALE_HEADER, G as GraphqlRequestOptions, g as graphqlRequest, l as localizeHref, r as resolveCmssyLocale } from './locale-JyBHqpAQ.cjs';
3
3
  export { C as CMSSY_RATE_LIMIT_WINDOW_MS, a as CMSSY_RETRY_MODES, b as CmssyRequestError, c as CmssyRetryMode, D as DEFAULT_CMSSY_API_URL, F as FetchLike, d as FetchLikeResponse, e as FetchPageOptions, R as RetryOption, f as RetryPolicy } from './content-client-65N8ZRq9.cjs';
4
4
  import * as _cmssy_types from '@cmssy/types';
5
- import { FieldOptions, TypedField, ResolvedMediaValue, PageRef, BlockPropsSchema, InferBlockContent, RelationMode, CmssyModelRecord, ResolvedMedia, VerifyCmssyWebhookOptions, CmssyWebhookEvent } from '@cmssy/types';
5
+ import { FieldOptions, TypedField, ResolvedMediaValue, PageRef, BlockPropsSchema, InferBlockContent, RelationMode, CmssyModelRecord, ResolvedMedia, BlockSchema, LayoutRegion, FieldDefinition, BlockMeta, VerifyCmssyWebhookOptions, CmssyWebhookEvent } from '@cmssy/types';
6
6
  export { BlockMeta, BlockPropsSchema, BlockRect, BlockSchema, BuildBlockContextExtra, CmssyBlockAuthContext, CmssyBlockContext, CmssyBlockMember, CmssyBlockPage, CmssyBlockWorkspace, CmssyBranding, CmssyClientConfig, CmssyFormDefinition, CmssyFormField, CmssyFormSettings, CmssyFormSubmitResponse, CmssyLayoutGroup, CmssyLocaleContext, CmssyLocalizedValue, CmssyModelDefinition, CmssyModelRecord, CmssyPageData, CmssyPageMeta, CmssyPageSummary, CmssyRecordList, CmssySiteConfig, CmssyWebhookEvent, CmssyWebhookOrder, FieldCondition, FieldConditionGroup, FieldConditionLogic, FieldControl, FieldDefinition, FieldOptions, FieldType, InferBlockContent, LayoutPosition, LayoutRegion, RawBlock, RawLayoutBlock, SubmitFormInput, TypedField, VerifyCmssyWebhookOptions, evaluateFieldConditionGroup } from '@cmssy/types';
7
7
 
8
8
  /**
@@ -79,6 +79,40 @@ declare function mediaUrl(value: MediaLike): string | null;
79
79
  declare function mediaUrls(value: readonly MediaLike[] | null | undefined): string[];
80
80
  declare function mediaAlt(value: MediaLike): string | undefined;
81
81
 
82
+ interface BlockManifestSource {
83
+ type: string;
84
+ label?: string;
85
+ category?: string;
86
+ icon?: string;
87
+ layoutPositions?: string[];
88
+ description?: string;
89
+ props: Record<string, FieldDefinition>;
90
+ }
91
+ interface BlockManifestBlock {
92
+ type: string;
93
+ label: string;
94
+ category?: string;
95
+ icon?: string;
96
+ description?: string;
97
+ layoutPositions?: string[];
98
+ schema: BlockSchema;
99
+ }
100
+ interface BlockManifest {
101
+ blocks: BlockManifestBlock[];
102
+ regions: LayoutRegion[] | null;
103
+ }
104
+ declare function propsToSchema(props: BlockPropsSchema): BlockSchema;
105
+ declare function blocksToSchemas(blocks: readonly BlockManifestSource[]): Record<string, BlockSchema>;
106
+ declare function blocksToMeta(blocks: readonly BlockManifestSource[], defaults?: {
107
+ category?: string;
108
+ }): Record<string, BlockMeta>;
109
+ declare function layoutRegionsToBridge(regions: readonly LayoutRegion[]): LayoutRegion[];
110
+ declare function registryToManifestBlocks(schemas: Record<string, BlockSchema>, blockMeta: Record<string, BlockMeta> | null): BlockManifestBlock[];
111
+ declare function buildBlockManifest(blocks: readonly BlockManifestSource[], options?: {
112
+ category?: string;
113
+ regions?: readonly LayoutRegion[] | null;
114
+ }): BlockManifest;
115
+
82
116
  declare const CMSSY_EDIT_HEADER = "x-cmssy-edit";
83
117
  declare const CMSSY_EDIT_QUERY_PARAM = "cmssyEdit";
84
118
  declare const CMSSY_SECRET_QUERY_PARAM = "cmssySecret";
@@ -97,4 +131,4 @@ declare class CmssyWebhookError extends Error {
97
131
  }
98
132
  declare function verifyCmssyWebhook(options: VerifyCmssyWebhookOptions): Promise<CmssyWebhookEvent>;
99
133
 
100
- export { CMSSY_EDIT_HEADER, CMSSY_EDIT_QUERY_PARAM, CMSSY_SECRET_QUERY_PARAM, CmssyWebhookError, type MediaLike, fields, isVerifiedEditUrl, mediaAlt, mediaUrl, mediaUrls, verifyCmssyWebhook };
134
+ export { type BlockManifest, type BlockManifestBlock, type BlockManifestSource, CMSSY_EDIT_HEADER, CMSSY_EDIT_QUERY_PARAM, CMSSY_SECRET_QUERY_PARAM, CmssyWebhookError, type MediaLike, blocksToMeta, blocksToSchemas, buildBlockManifest, fields, isVerifiedEditUrl, layoutRegionsToBridge, mediaAlt, mediaUrl, mediaUrls, propsToSchema, registryToManifestBlocks, verifyCmssyWebhook };
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { A as AppToEditorMessage, B as BoundsMessage, C as ClickMessage, a as Cm
2
2
  export { C as CMSSY_LOCALE_HEADER, G as GraphqlRequestOptions, g as graphqlRequest, l as localizeHref, r as resolveCmssyLocale } from './locale-D9KI4bND.js';
3
3
  export { C as CMSSY_RATE_LIMIT_WINDOW_MS, a as CMSSY_RETRY_MODES, b as CmssyRequestError, c as CmssyRetryMode, D as DEFAULT_CMSSY_API_URL, F as FetchLike, d as FetchLikeResponse, e as FetchPageOptions, R as RetryOption, f as RetryPolicy } from './content-client-65N8ZRq9.js';
4
4
  import * as _cmssy_types from '@cmssy/types';
5
- import { FieldOptions, TypedField, ResolvedMediaValue, PageRef, BlockPropsSchema, InferBlockContent, RelationMode, CmssyModelRecord, ResolvedMedia, VerifyCmssyWebhookOptions, CmssyWebhookEvent } from '@cmssy/types';
5
+ import { FieldOptions, TypedField, ResolvedMediaValue, PageRef, BlockPropsSchema, InferBlockContent, RelationMode, CmssyModelRecord, ResolvedMedia, BlockSchema, LayoutRegion, FieldDefinition, BlockMeta, VerifyCmssyWebhookOptions, CmssyWebhookEvent } from '@cmssy/types';
6
6
  export { BlockMeta, BlockPropsSchema, BlockRect, BlockSchema, BuildBlockContextExtra, CmssyBlockAuthContext, CmssyBlockContext, CmssyBlockMember, CmssyBlockPage, CmssyBlockWorkspace, CmssyBranding, CmssyClientConfig, CmssyFormDefinition, CmssyFormField, CmssyFormSettings, CmssyFormSubmitResponse, CmssyLayoutGroup, CmssyLocaleContext, CmssyLocalizedValue, CmssyModelDefinition, CmssyModelRecord, CmssyPageData, CmssyPageMeta, CmssyPageSummary, CmssyRecordList, CmssySiteConfig, CmssyWebhookEvent, CmssyWebhookOrder, FieldCondition, FieldConditionGroup, FieldConditionLogic, FieldControl, FieldDefinition, FieldOptions, FieldType, InferBlockContent, LayoutPosition, LayoutRegion, RawBlock, RawLayoutBlock, SubmitFormInput, TypedField, VerifyCmssyWebhookOptions, evaluateFieldConditionGroup } from '@cmssy/types';
7
7
 
8
8
  /**
@@ -79,6 +79,40 @@ declare function mediaUrl(value: MediaLike): string | null;
79
79
  declare function mediaUrls(value: readonly MediaLike[] | null | undefined): string[];
80
80
  declare function mediaAlt(value: MediaLike): string | undefined;
81
81
 
82
+ interface BlockManifestSource {
83
+ type: string;
84
+ label?: string;
85
+ category?: string;
86
+ icon?: string;
87
+ layoutPositions?: string[];
88
+ description?: string;
89
+ props: Record<string, FieldDefinition>;
90
+ }
91
+ interface BlockManifestBlock {
92
+ type: string;
93
+ label: string;
94
+ category?: string;
95
+ icon?: string;
96
+ description?: string;
97
+ layoutPositions?: string[];
98
+ schema: BlockSchema;
99
+ }
100
+ interface BlockManifest {
101
+ blocks: BlockManifestBlock[];
102
+ regions: LayoutRegion[] | null;
103
+ }
104
+ declare function propsToSchema(props: BlockPropsSchema): BlockSchema;
105
+ declare function blocksToSchemas(blocks: readonly BlockManifestSource[]): Record<string, BlockSchema>;
106
+ declare function blocksToMeta(blocks: readonly BlockManifestSource[], defaults?: {
107
+ category?: string;
108
+ }): Record<string, BlockMeta>;
109
+ declare function layoutRegionsToBridge(regions: readonly LayoutRegion[]): LayoutRegion[];
110
+ declare function registryToManifestBlocks(schemas: Record<string, BlockSchema>, blockMeta: Record<string, BlockMeta> | null): BlockManifestBlock[];
111
+ declare function buildBlockManifest(blocks: readonly BlockManifestSource[], options?: {
112
+ category?: string;
113
+ regions?: readonly LayoutRegion[] | null;
114
+ }): BlockManifest;
115
+
82
116
  declare const CMSSY_EDIT_HEADER = "x-cmssy-edit";
83
117
  declare const CMSSY_EDIT_QUERY_PARAM = "cmssyEdit";
84
118
  declare const CMSSY_SECRET_QUERY_PARAM = "cmssySecret";
@@ -97,4 +131,4 @@ declare class CmssyWebhookError extends Error {
97
131
  }
98
132
  declare function verifyCmssyWebhook(options: VerifyCmssyWebhookOptions): Promise<CmssyWebhookEvent>;
99
133
 
100
- export { CMSSY_EDIT_HEADER, CMSSY_EDIT_QUERY_PARAM, CMSSY_SECRET_QUERY_PARAM, CmssyWebhookError, type MediaLike, fields, isVerifiedEditUrl, mediaAlt, mediaUrl, mediaUrls, verifyCmssyWebhook };
134
+ export { type BlockManifest, type BlockManifestBlock, type BlockManifestSource, CMSSY_EDIT_HEADER, CMSSY_EDIT_QUERY_PARAM, CMSSY_SECRET_QUERY_PARAM, CmssyWebhookError, type MediaLike, blocksToMeta, blocksToSchemas, buildBlockManifest, fields, isVerifiedEditUrl, layoutRegionsToBridge, mediaAlt, mediaUrl, mediaUrls, propsToSchema, registryToManifestBlocks, verifyCmssyWebhook };
package/dist/index.js CHANGED
@@ -618,6 +618,62 @@ function defineCmssyLayout(layout) {
618
618
  return { regions };
619
619
  }
620
620
 
621
+ // src/manifest.ts
622
+ function propsToSchema(props) {
623
+ const schema = {};
624
+ for (const [key, def] of Object.entries(props)) {
625
+ schema[key] = { ...def, label: def.label || key };
626
+ }
627
+ return schema;
628
+ }
629
+ function blocksToSchemas(blocks) {
630
+ const out = /* @__PURE__ */ Object.create(null);
631
+ for (const block of blocks) out[block.type] = propsToSchema(block.props);
632
+ return out;
633
+ }
634
+ function blocksToMeta(blocks, defaults = {}) {
635
+ const out = /* @__PURE__ */ Object.create(null);
636
+ for (const block of blocks) {
637
+ const category = block.category ?? defaults.category;
638
+ out[block.type] = {
639
+ label: block.label ?? block.type,
640
+ ...category ? { category } : {},
641
+ ...block.icon ? { icon: block.icon } : {},
642
+ ...block.layoutPositions ? { layoutPositions: block.layoutPositions } : {},
643
+ ...block.description ? { description: block.description } : {}
644
+ };
645
+ }
646
+ return out;
647
+ }
648
+ function layoutRegionsToBridge(regions) {
649
+ return regions.map(
650
+ (region) => region.settings ? { ...region, settings: propsToSchema(region.settings) } : { ...region }
651
+ );
652
+ }
653
+ function registryToManifestBlocks(schemas, blockMeta) {
654
+ return Object.entries(schemas).sort(([a], [b]) => a.localeCompare(b)).map(([type, schema]) => {
655
+ const meta = blockMeta?.[type];
656
+ return {
657
+ type,
658
+ label: meta?.label || type,
659
+ ...meta?.category ? { category: meta.category } : {},
660
+ ...meta?.icon ? { icon: meta.icon } : {},
661
+ ...meta?.description ? { description: meta.description } : {},
662
+ ...meta?.layoutPositions?.length ? { layoutPositions: meta.layoutPositions } : {},
663
+ schema
664
+ };
665
+ });
666
+ }
667
+ function buildBlockManifest(blocks, options = {}) {
668
+ return {
669
+ blocks: registryToManifestBlocks(
670
+ blocksToSchemas(blocks),
671
+ blocksToMeta(blocks, { category: options.category })
672
+ ),
673
+ regions: options.regions ? layoutRegionsToBridge(options.regions) : null
674
+ };
675
+ }
676
+
621
677
  // src/data/localize-href.ts
622
678
  var PROTOCOL_OR_RELATIVE = /^([a-z][a-z0-9+.-]*:|\/\/)/i;
623
679
  function isExternalHref(href) {
@@ -991,4 +1047,4 @@ async function verifyCmssyWebhook(options) {
991
1047
  return parsed;
992
1048
  }
993
1049
 
994
- export { CMSSY_EDIT_HEADER, CMSSY_EDIT_QUERY_PARAM, CMSSY_LOCALE_HEADER, CMSSY_RATE_LIMIT_WINDOW_MS, CMSSY_RETRY_MODES, CMSSY_SECRET_QUERY_PARAM, CmssyRequestError, CmssyWebhookError, DEFAULT_CMSSY_API_URL, DEFAULT_CMSSY_EDITOR_ORIGINS, PROTOCOL_VERSION, SHORTCUT_ACTIONS, applyCmssyCsp, createCmssyClient, defineCmssyConfig, defineCmssyLayout, fields, graphqlRequest, isProtocolCompatible, isVerifiedEditUrl, localizeHref, mediaAlt, mediaUrl, mediaUrls, normalizeOrigin, parseEditorMessage, postToEditor, resolveCmssyLocale, resolveEditorOrigin, verifyCmssyWebhook };
1050
+ export { CMSSY_EDIT_HEADER, CMSSY_EDIT_QUERY_PARAM, CMSSY_LOCALE_HEADER, CMSSY_RATE_LIMIT_WINDOW_MS, CMSSY_RETRY_MODES, CMSSY_SECRET_QUERY_PARAM, CmssyRequestError, CmssyWebhookError, DEFAULT_CMSSY_API_URL, DEFAULT_CMSSY_EDITOR_ORIGINS, PROTOCOL_VERSION, SHORTCUT_ACTIONS, applyCmssyCsp, blocksToMeta, blocksToSchemas, buildBlockManifest, createCmssyClient, defineCmssyConfig, defineCmssyLayout, fields, graphqlRequest, isProtocolCompatible, isVerifiedEditUrl, layoutRegionsToBridge, localizeHref, mediaAlt, mediaUrl, mediaUrls, normalizeOrigin, parseEditorMessage, postToEditor, propsToSchema, registryToManifestBlocks, resolveCmssyLocale, resolveEditorOrigin, verifyCmssyWebhook };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cmssy/core",
3
- "version": "14.1.0",
3
+ "version": "14.2.0",
4
4
  "description": "Framework-agnostic cmssy gateway: GraphQL client, block/field system, editor protocol. No React, no Next.",
5
5
  "keywords": [
6
6
  "cmssy",