@storyblok/schema 0.1.0-alpha.1 → 0.1.0-alpha.3
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/field-plugins/index.cjs +4 -0
- package/dist/field-plugins/index.d.cts +2 -0
- package/dist/field-plugins/index.d.mts +2 -0
- package/dist/field-plugins/index.mjs +3 -0
- package/dist/field-plugins/storyblok-color-field.cjs +32 -0
- package/dist/field-plugins/storyblok-color-field.cjs.map +1 -0
- package/dist/field-plugins/storyblok-color-field.d.cts +16 -0
- package/dist/field-plugins/storyblok-color-field.d.mts +16 -0
- package/dist/field-plugins/storyblok-color-field.mjs +32 -0
- package/dist/field-plugins/storyblok-color-field.mjs.map +1 -0
- package/dist/generated/overlay/zod.gen.cjs +0 -2
- package/dist/generated/overlay/zod.gen.cjs.map +1 -1
- package/dist/generated/overlay/zod.gen.mjs +228 -229
- package/dist/generated/overlay/zod.gen.mjs.map +1 -1
- package/dist/generated/types/block.d.cts +6 -0
- package/dist/generated/types/block.d.mts +6 -0
- package/dist/generated/types/field.d.cts +53 -18
- package/dist/generated/types/field.d.mts +53 -18
- package/dist/generated/types/mapi-story.d.cts +4 -4
- package/dist/generated/types/mapi-story.d.mts +4 -4
- package/dist/generated/types/story.d.cts +3 -3
- package/dist/generated/types/story.d.mts +3 -3
- package/dist/helpers/define-block.cjs +6 -1
- package/dist/helpers/define-block.cjs.map +1 -1
- package/dist/helpers/define-block.d.cts +14 -4
- package/dist/helpers/define-block.d.mts +14 -4
- package/dist/helpers/define-block.mjs +6 -1
- package/dist/helpers/define-block.mjs.map +1 -1
- package/dist/helpers/define-field-plugin.cjs +21 -0
- package/dist/helpers/define-field-plugin.cjs.map +1 -0
- package/dist/helpers/define-field-plugin.d.cts +33 -0
- package/dist/helpers/define-field-plugin.d.mts +33 -0
- package/dist/helpers/define-field-plugin.mjs +20 -0
- package/dist/helpers/define-field-plugin.mjs.map +1 -0
- package/dist/helpers/define-field.cjs +8 -1
- package/dist/helpers/define-field.cjs.map +1 -1
- package/dist/helpers/define-field.d.cts +12 -3
- package/dist/helpers/define-field.d.mts +12 -3
- package/dist/helpers/define-field.mjs +8 -1
- package/dist/helpers/define-field.mjs.map +1 -1
- package/dist/helpers/define-folder.cjs +19 -0
- package/dist/helpers/define-folder.cjs.map +1 -0
- package/dist/helpers/define-folder.d.cts +39 -0
- package/dist/helpers/define-folder.d.mts +39 -0
- package/dist/helpers/define-folder.mjs +18 -0
- package/dist/helpers/define-folder.mjs.map +1 -0
- package/dist/helpers/define-schema.cjs +23 -0
- package/dist/helpers/define-schema.cjs.map +1 -0
- package/dist/helpers/define-schema.d.cts +31 -0
- package/dist/helpers/define-schema.d.mts +31 -0
- package/dist/helpers/define-schema.mjs +22 -0
- package/dist/helpers/define-schema.mjs.map +1 -0
- package/dist/helpers/schema-type.d.cts +16 -8
- package/dist/helpers/schema-type.d.mts +16 -8
- package/dist/index.cjs +6 -0
- package/dist/index.d.cts +4 -1
- package/dist/index.d.mts +4 -1
- package/dist/index.mjs +4 -1
- package/dist/utils/slugify-folder-path.cjs +21 -0
- package/dist/utils/slugify-folder-path.cjs.map +1 -0
- package/dist/utils/slugify-folder-path.mjs +20 -0
- package/dist/utils/slugify-folder-path.mjs.map +1 -0
- package/dist/validators/internal-schemas.mjs +1 -1
- package/dist/validators/shapes.cjs.map +1 -1
- package/dist/validators/shapes.d.cts +16 -3
- package/dist/validators/shapes.d.mts +16 -3
- package/dist/validators/shapes.mjs.map +1 -1
- package/dist/validators/validate-schema.cjs +21 -1
- package/dist/validators/validate-schema.cjs.map +1 -1
- package/dist/validators/validate-schema.d.cts +2 -1
- package/dist/validators/validate-schema.d.mts +2 -1
- package/dist/validators/validate-schema.mjs +21 -1
- package/dist/validators/validate-schema.mjs.map +1 -1
- package/dist/validators/validate-story.cjs +96 -32
- package/dist/validators/validate-story.cjs.map +1 -1
- package/dist/validators/validate-story.mjs +96 -33
- package/dist/validators/validate-story.mjs.map +1 -1
- package/package.json +13 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod.gen.mjs","names":[],"sources":["../../../src/generated/overlay/zod.gen.ts"],"sourcesContent":["// Generated by @storyblok/openapi-codegen. Do not edit by hand.\n// Internal Zod v4 schemas — imported only by runtime validators, never by public types.\n\n// This file is auto-generated by @hey-api/openapi-ts\n\nimport * as z from 'zod';\n\n/**\n * Universal identity and display properties shared by every field type\n */\nexport const zBaseFieldRoot = z.object({\n type: z.optional(z.string()),\n id: z.optional(z.string()),\n display_name: z.optional(z.string()),\n description: z.optional(z.string()),\n tooltip: z.optional(z.boolean()),\n pos: z.optional(z.int()),\n conditional_settings: z.optional(z.array(z.record(z.string(), z.unknown())))\n});\n\nexport const zSectionFieldRoot = zBaseFieldRoot.and(z.object({\n type: z.enum(['section']),\n keys: z.optional(z.array(z.string())),\n fieldset: z.optional(z.object({\n title: z.optional(z.string()),\n description: z.optional(z.string()),\n collapsible: z.optional(z.boolean()),\n collapsed: z.optional(z.boolean())\n }))\n}));\n\nexport const zTabFieldRoot = zBaseFieldRoot.and(z.object({\n type: z.enum(['tab']),\n keys: z.optional(z.array(z.string()))\n}));\n\n/**\n * Properties shared by content-bearing fields (i.e. fields that hold a value).\n * Layout-only field types like `section` and `tab` do not include these.\n *\n */\nexport const zValueFieldRoot = z.object({\n required: z.optional(z.boolean()),\n regex: z.optional(z.string()),\n default_value: z.optional(z.string()),\n translatable: z.optional(z.boolean()),\n no_translate: z.optional(z.boolean()),\n exclude_from_ai_translation: z.optional(z.boolean()),\n exclude_from_merge: z.optional(z.boolean()),\n exclude_from_overwrite: z.optional(z.boolean()),\n force_merge: z.optional(z.boolean())\n});\n\nexport const zAssetFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['asset']),\n filetypes: z.optional(z.array(z.string())),\n asset_folder_id: z.optional(z.int()),\n allow_external_url: z.optional(z.boolean()),\n height: z.optional(z.int()),\n width: z.optional(z.int()),\n restrict_assets: z.optional(z.boolean()),\n asset_whitelist: z.optional(z.array(z.string()))\n}));\n\nexport const zBloksFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['bloks']),\n restrict_type: z.optional(z.string()),\n restrict_components: z.optional(z.boolean()),\n component_whitelist: z.optional(z.array(z.string())),\n component_denylist: z.optional(z.array(z.string())),\n component_tag_whitelist: z.optional(z.array(z.int())),\n component_tag_denylist: z.optional(z.array(z.int())),\n component_group_whitelist: z.optional(z.array(z.string())),\n component_group_denylist: z.optional(z.array(z.string())),\n minimum: z.optional(z.int()),\n maximum: z.optional(z.int()),\n maximum_entries: z.optional(z.int()),\n minimum_entries: z.optional(z.int())\n}));\n\nexport const zBooleanFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['boolean']),\n inline_label: z.optional(z.boolean())\n}));\n\nexport const zCustomFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['custom']),\n field_type: z.optional(z.string()),\n options: z.optional(z.array(z.object({\n name: z.optional(z.string()),\n value: z.optional(z.string())\n }))),\n required_fields: z.optional(z.string()),\n source: z.optional(z.enum(['self', 'internal'])),\n datasource_slug: z.optional(z.string()),\n external_datasource: z.optional(z.string())\n}));\n\nexport const zDatetimeFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['datetime']),\n disable_time: z.optional(z.boolean())\n}));\n\nexport const zMarkdownFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['markdown']),\n rich_markdown: z.optional(z.boolean()),\n rtl: z.optional(z.boolean()),\n customize_toolbar: z.optional(z.boolean()),\n toolbar: z.optional(z.array(z.enum([\n 'bold',\n 'italic',\n 'inlinecode',\n 'code',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'list',\n 'olist',\n 'quote',\n 'hrule',\n 'link',\n 'image',\n 'paragraph',\n 'help',\n 'toggle-richtext',\n 'auto',\n 'ltr',\n 'rtl'\n ]))),\n allow_multiline: z.optional(z.boolean()),\n max_length: z.optional(z.int())\n}));\n\nexport const zMultiassetFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['multiasset']),\n filetypes: z.optional(z.array(z.string())),\n asset_folder_id: z.optional(z.int()),\n allow_external_url: z.optional(z.boolean()),\n height: z.optional(z.int()),\n width: z.optional(z.int()),\n restrict_assets: z.optional(z.boolean()),\n asset_whitelist: z.optional(z.array(z.string())),\n maximum_entries: z.optional(z.int()),\n minimum_entries: z.optional(z.int())\n}));\n\nexport const zMultilinkFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['multilink']),\n restrict_content_types: z.optional(z.boolean()),\n component_whitelist: z.optional(z.array(z.string())),\n allow_target_blank: z.optional(z.boolean()),\n allow_custom_attributes: z.optional(z.boolean()),\n force_link_scope: z.optional(z.boolean()),\n link_scope: z.optional(z.string()),\n show_anchor: z.optional(z.boolean()),\n email_link_type: z.optional(z.boolean()),\n asset_link_type: z.optional(z.boolean())\n}));\n\nexport const zNumberFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['number']),\n min_value: z.optional(z.number()),\n max_value: z.optional(z.number()),\n decimals: z.optional(z.int()),\n steps: z.optional(z.number())\n}));\n\nexport const zOptionFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['option']),\n options: z.optional(z.array(z.object({\n _uid: z.optional(z.string()),\n name: z.optional(z.string()),\n value: z.optional(z.string())\n }))),\n source: z.optional(z.string()),\n datasource_slug: z.optional(z.string()),\n external_datasource: z.optional(z.string()),\n folder_slug: z.optional(z.string()),\n filter_content_type: z.optional(z.array(z.string())),\n exclude_empty_option: z.optional(z.boolean()),\n include_empty_option: z.optional(z.boolean()),\n use_uuid: z.optional(z.boolean()),\n entry_appearance: z.optional(z.string()),\n allow_advanced_search: z.optional(z.boolean()),\n max_options: z.optional(z.string()),\n min_options: z.optional(z.string()),\n multiple: z.optional(z.boolean())\n}));\n\nexport const zOptionsFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['options']),\n options: z.optional(z.array(z.object({\n _uid: z.optional(z.string()),\n name: z.optional(z.string()),\n value: z.optional(z.string())\n }))),\n source: z.optional(z.string()),\n datasource_slug: z.optional(z.string()),\n external_datasource: z.optional(z.string()),\n folder_slug: z.optional(z.string()),\n filter_content_type: z.optional(z.array(z.string())),\n use_uuid: z.optional(z.boolean()),\n is_reference_type: z.optional(z.boolean()),\n entry_appearance: z.optional(z.string()),\n allow_advanced_search: z.optional(z.boolean()),\n max_options: z.optional(z.string()),\n min_options: z.optional(z.string()),\n multiple: z.optional(z.boolean())\n}));\n\nexport const zRichtextFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['richtext']),\n customize_toolbar: z.optional(z.boolean()),\n toolbar: z.optional(z.array(z.enum([\n 'ai-complete',\n 'ai-shorten',\n 'ai-extend',\n 'ai-rephrase',\n 'ai-summarize',\n 'ai-simplify',\n 'ai-tone',\n 'ai-emoji',\n 'ai-translate',\n 'ai-tldr',\n 'ai-spelling',\n 'blok',\n 'ltr',\n 'rtl',\n 'export',\n 'import',\n 'bold',\n 'list',\n 'inlinecode',\n 'code',\n 'color',\n 'copy',\n 'cut',\n 'emoji',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'highlight',\n 'unset',\n 'hrule',\n 'image',\n 'italic',\n 'link',\n 'anchor',\n 'olist',\n 'paragraph',\n 'paste-action',\n 'paste',\n 'quote',\n 'redo',\n 'strike',\n 'subscript',\n 'superscript',\n 'underline',\n 'undo',\n 'align-left',\n 'align-center',\n 'align-right',\n 'align-justify'\n ]))),\n style_options: z.optional(z.array(z.object({\n _uid: z.optional(z.string()),\n name: z.optional(z.string()),\n value: z.optional(z.string())\n }))),\n restrict_type: z.optional(z.string()),\n restrict_components: z.optional(z.boolean()),\n component_whitelist: z.optional(z.array(z.string())),\n component_denylist: z.optional(z.array(z.string())),\n component_tag_whitelist: z.optional(z.array(z.int())),\n component_tag_denylist: z.optional(z.array(z.int())),\n component_group_whitelist: z.optional(z.array(z.string())),\n component_group_denylist: z.optional(z.array(z.string())),\n allow_target_blank: z.optional(z.boolean()),\n allow_custom_attributes: z.optional(z.boolean())\n}));\n\nexport const zTableFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['table'])\n}));\n\nexport const zTextFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['text']),\n max_length: z.optional(z.int()),\n maxlength: z.optional(z.int()),\n minlength: z.optional(z.int()),\n size: z.optional(z.string()),\n rtl: z.optional(z.boolean())\n}));\n\nexport const zTextareaFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['textarea']),\n max_length: z.optional(z.int()),\n maxlength: z.optional(z.int()),\n minlength: z.optional(z.int()),\n size: z.optional(z.string()),\n rtl: z.optional(z.boolean()),\n rich_text: z.optional(z.boolean()),\n markdown: z.optional(z.boolean())\n}));\n\n/**\n * A component schema field. Discriminated by the literal `type` enum on each variant.\n */\nexport const zComponentSchemaField = z.union([\n zTextFieldRoot,\n zTextareaFieldRoot,\n zRichtextFieldRoot,\n zMarkdownFieldRoot,\n zNumberFieldRoot,\n zDatetimeFieldRoot,\n zBooleanFieldRoot,\n zOptionFieldRoot,\n zOptionsFieldRoot,\n zAssetFieldRoot,\n zMultiassetFieldRoot,\n zMultilinkFieldRoot,\n zBloksFieldRoot,\n zTableFieldRoot,\n zSectionFieldRoot,\n zTabFieldRoot,\n zCustomFieldRoot\n]);\n\n/**\n * Asset field type - single asset (image, video, audio, or document)\n */\nexport const zAssetFieldValueRoot = z.object({\n fieldtype: z.enum(['asset']),\n id: z.union([\n z.int(),\n z.null()\n ]),\n alt: z.union([\n z.string(),\n z.null()\n ]),\n name: z.optional(z.string()),\n focus: z.optional(z.union([\n z.string(),\n z.null()\n ])),\n title: z.optional(z.union([\n z.string(),\n z.null()\n ])),\n source: z.optional(z.union([\n z.string(),\n z.null()\n ])),\n filename: z.string(),\n copyright: z.optional(z.union([\n z.string(),\n z.null()\n ])),\n meta_data: z.optional(z.record(z.string(), z.unknown())),\n is_external_url: z.optional(z.boolean())\n});\n\nexport const zAssetFieldValue = zAssetFieldValueRoot;\n\n/**\n * Multilink field type - link to internal stories, external URLs, emails, etc.\n */\nexport const zMultilinkFieldValueRoot = z.object({\n fieldtype: z.enum(['multilink']),\n id: z.string(),\n url: z.string(),\n linktype: z.enum([\n 'story',\n 'url',\n 'email',\n 'asset'\n ]),\n cached_url: z.string(),\n anchor: z.optional(z.union([\n z.string(),\n z.null()\n ])),\n target: z.optional(z.union([\n z.literal('_self'),\n z.literal('_blank'),\n z.null()\n ]))\n});\n\nexport const zMultilinkFieldValue = zMultilinkFieldValueRoot;\n\n/**\n * Plugin/Custom field type - field plugin with custom structure\n */\nexport const zPluginFieldValueRoot = z.object({\n plugin: z.string(),\n _uid: z.optional(z.uuid())\n});\n\nexport const zPluginFieldValue = zPluginFieldValueRoot;\n\n/**\n * Richtext field type - structured rich text document (ProseMirror format)\n */\nexport const zRichtextFieldValueRoot = z.object({\n type: z.enum(['doc']),\n content: z.optional(z.array(z.record(z.string(), z.unknown())))\n});\n\nexport const zRichtextFieldValue = zRichtextFieldValueRoot;\n\n/**\n * Table field type - structured table data\n */\nexport const zTableFieldValueRoot = z.object({\n thead: z.array(z.object({\n _uid: z.string(),\n component: z.enum(['_table_head']),\n value: z.optional(z.string())\n })),\n tbody: z.array(z.object({\n _uid: z.string(),\n component: z.enum(['_table_row']),\n body: z.optional(z.array(z.object({\n _uid: z.string(),\n component: z.enum(['_table_col']),\n value: z.optional(z.string())\n })))\n }))\n});\n\nexport const zTableFieldValue = zTableFieldValueRoot;\n\n/**\n * Content object for creating or updating a component instance. Contains a component technical name and dynamic fields whose values depend on the component's schema field types. The _uid is optional — Storyblok will auto-generate one if not provided.\n */\nexport const zBlockContentInputRoot = z.object({\n _uid: z.optional(z.string()),\n component: z.string(),\n _editable: z.optional(z.string())\n});\n\nexport const zBlockContentInput = zBlockContentInputRoot;\n\n/**\n * Content object representing a component instance. Contains a _uid, a component technical name, and dynamic fields whose values depend on the component's schema field types (text, textarea, richtext, markdown, number, datetime, boolean, option, options, asset, multiasset, multilink, bloks, table, section, custom/plugin).\n */\nexport const zBlockContentRoot = z.object({\n _uid: z.string(),\n component: z.string(),\n _editable: z.optional(z.string())\n});\n\nexport const zBlockContent = zBlockContentRoot;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"zod.gen.mjs","names":["z"],"sources":["../../../src/generated/overlay/zod.gen.ts"],"sourcesContent":["// Generated by @storyblok/openapi-codegen. Do not edit by hand.\n// Internal Zod v4 schemas — imported only by runtime validators, never by public types.\n\n// This file is auto-generated by @hey-api/openapi-ts\n\nimport * as z from 'zod';\n\n/**\n * Universal identity and display properties shared by every field type\n */\nexport const zBaseFieldRoot = z.object({\n type: z.optional(z.string()),\n id: z.optional(z.string()),\n display_name: z.optional(z.string()),\n description: z.optional(z.string()),\n tooltip: z.optional(z.boolean()),\n pos: z.optional(z.int()),\n conditional_settings: z.optional(z.array(z.record(z.string(), z.unknown())))\n});\n\nexport const zSectionFieldRoot = zBaseFieldRoot.and(z.object({\n type: z.enum(['section']),\n keys: z.optional(z.array(z.string())),\n fieldset: z.optional(z.object({\n title: z.optional(z.string()),\n description: z.optional(z.string()),\n collapsible: z.optional(z.boolean()),\n collapsed: z.optional(z.boolean())\n }))\n}));\n\nexport const zTabFieldRoot = zBaseFieldRoot.and(z.object({\n type: z.enum(['tab']),\n keys: z.optional(z.array(z.string()))\n}));\n\n/**\n * Properties shared by content-bearing fields (i.e. fields that hold a value).\n * Layout-only field types like `section` and `tab` do not include these.\n *\n */\nexport const zValueFieldRoot = z.object({\n required: z.optional(z.boolean()),\n regex: z.optional(z.string()),\n default_value: z.optional(z.string()),\n translatable: z.optional(z.boolean()),\n no_translate: z.optional(z.boolean()),\n exclude_from_ai_translation: z.optional(z.boolean()),\n exclude_from_merge: z.optional(z.boolean()),\n exclude_from_overwrite: z.optional(z.boolean()),\n force_merge: z.optional(z.boolean())\n});\n\nexport const zAssetFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['asset']),\n filetypes: z.optional(z.array(z.string())),\n asset_folder_id: z.optional(z.int()),\n allow_external_url: z.optional(z.boolean()),\n height: z.optional(z.int()),\n width: z.optional(z.int()),\n restrict_assets: z.optional(z.boolean()),\n asset_whitelist: z.optional(z.array(z.string()))\n}));\n\nexport const zBloksFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['bloks']),\n restrict_type: z.optional(z.string()),\n restrict_components: z.optional(z.boolean()),\n component_whitelist: z.optional(z.array(z.string())),\n component_denylist: z.optional(z.array(z.string())),\n component_tag_whitelist: z.optional(z.array(z.int())),\n component_tag_denylist: z.optional(z.array(z.int())),\n component_group_whitelist: z.optional(z.array(z.string())),\n component_group_denylist: z.optional(z.array(z.string())),\n minimum: z.optional(z.int()),\n maximum: z.optional(z.int()),\n maximum_entries: z.optional(z.int()),\n minimum_entries: z.optional(z.int())\n}));\n\nexport const zBooleanFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['boolean']),\n inline_label: z.optional(z.boolean())\n}));\n\nexport const zCustomFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['custom']),\n field_type: z.optional(z.string()),\n options: z.optional(z.array(z.object({\n name: z.optional(z.string()),\n value: z.optional(z.string())\n }))),\n required_fields: z.optional(z.string()),\n source: z.optional(z.enum(['self', 'internal'])),\n datasource_slug: z.optional(z.string()),\n external_datasource: z.optional(z.string())\n}));\n\nexport const zDatetimeFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['datetime']),\n disable_time: z.optional(z.boolean())\n}));\n\nexport const zMarkdownFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['markdown']),\n rich_markdown: z.optional(z.boolean()),\n rtl: z.optional(z.boolean()),\n customize_toolbar: z.optional(z.boolean()),\n toolbar: z.optional(z.array(z.enum([\n 'bold',\n 'italic',\n 'inlinecode',\n 'code',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'list',\n 'olist',\n 'quote',\n 'hrule',\n 'link',\n 'image',\n 'paragraph',\n 'help',\n 'toggle-richtext',\n 'auto',\n 'ltr',\n 'rtl'\n ]))),\n allow_multiline: z.optional(z.boolean()),\n max_length: z.optional(z.int())\n}));\n\nexport const zMultiassetFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['multiasset']),\n filetypes: z.optional(z.array(z.string())),\n asset_folder_id: z.optional(z.int()),\n allow_external_url: z.optional(z.boolean()),\n height: z.optional(z.int()),\n width: z.optional(z.int()),\n restrict_assets: z.optional(z.boolean()),\n asset_whitelist: z.optional(z.array(z.string())),\n maximum_entries: z.optional(z.int()),\n minimum_entries: z.optional(z.int())\n}));\n\nexport const zMultilinkFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['multilink']),\n restrict_content_types: z.optional(z.boolean()),\n component_whitelist: z.optional(z.array(z.string())),\n allow_target_blank: z.optional(z.boolean()),\n allow_custom_attributes: z.optional(z.boolean()),\n force_link_scope: z.optional(z.boolean()),\n link_scope: z.optional(z.string()),\n show_anchor: z.optional(z.boolean()),\n email_link_type: z.optional(z.boolean()),\n asset_link_type: z.optional(z.boolean())\n}));\n\nexport const zNumberFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['number']),\n min_value: z.optional(z.number()),\n max_value: z.optional(z.number()),\n decimals: z.optional(z.int()),\n steps: z.optional(z.number())\n}));\n\nexport const zOptionFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['option']),\n options: z.optional(z.array(z.object({\n _uid: z.optional(z.string()),\n name: z.optional(z.string()),\n value: z.optional(z.string())\n }))),\n source: z.optional(z.string()),\n datasource_slug: z.optional(z.string()),\n external_datasource: z.optional(z.string()),\n folder_slug: z.optional(z.string()),\n filter_content_type: z.optional(z.array(z.string())),\n exclude_empty_option: z.optional(z.boolean()),\n include_empty_option: z.optional(z.boolean()),\n use_uuid: z.optional(z.boolean()),\n entry_appearance: z.optional(z.string()),\n allow_advanced_search: z.optional(z.boolean()),\n max_options: z.optional(z.string()),\n min_options: z.optional(z.string()),\n multiple: z.optional(z.boolean())\n}));\n\nexport const zOptionsFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['options']),\n options: z.optional(z.array(z.object({\n _uid: z.optional(z.string()),\n name: z.optional(z.string()),\n value: z.optional(z.string())\n }))),\n source: z.optional(z.string()),\n datasource_slug: z.optional(z.string()),\n external_datasource: z.optional(z.string()),\n folder_slug: z.optional(z.string()),\n filter_content_type: z.optional(z.array(z.string())),\n use_uuid: z.optional(z.boolean()),\n is_reference_type: z.optional(z.boolean()),\n entry_appearance: z.optional(z.string()),\n allow_advanced_search: z.optional(z.boolean()),\n max_options: z.optional(z.string()),\n min_options: z.optional(z.string()),\n multiple: z.optional(z.boolean())\n}));\n\nexport const zRichtextFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['richtext']),\n customize_toolbar: z.optional(z.boolean()),\n toolbar: z.optional(z.array(z.enum([\n 'ai-complete',\n 'ai-shorten',\n 'ai-extend',\n 'ai-rephrase',\n 'ai-summarize',\n 'ai-simplify',\n 'ai-tone',\n 'ai-emoji',\n 'ai-translate',\n 'ai-tldr',\n 'ai-spelling',\n 'blok',\n 'ltr',\n 'rtl',\n 'export',\n 'import',\n 'bold',\n 'list',\n 'inlinecode',\n 'code',\n 'color',\n 'copy',\n 'cut',\n 'emoji',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'highlight',\n 'unset',\n 'hrule',\n 'image',\n 'italic',\n 'link',\n 'anchor',\n 'olist',\n 'paragraph',\n 'paste-action',\n 'paste',\n 'quote',\n 'redo',\n 'strike',\n 'subscript',\n 'superscript',\n 'underline',\n 'undo',\n 'align-left',\n 'align-center',\n 'align-right',\n 'align-justify'\n ]))),\n style_options: z.optional(z.array(z.object({\n _uid: z.optional(z.string()),\n name: z.optional(z.string()),\n value: z.optional(z.string())\n }))),\n restrict_type: z.optional(z.string()),\n restrict_components: z.optional(z.boolean()),\n component_whitelist: z.optional(z.array(z.string())),\n component_denylist: z.optional(z.array(z.string())),\n component_tag_whitelist: z.optional(z.array(z.int())),\n component_tag_denylist: z.optional(z.array(z.int())),\n component_group_whitelist: z.optional(z.array(z.string())),\n component_group_denylist: z.optional(z.array(z.string())),\n allow_target_blank: z.optional(z.boolean()),\n allow_custom_attributes: z.optional(z.boolean())\n}));\n\nexport const zTableFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['table'])\n}));\n\nexport const zTextFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['text']),\n max_length: z.optional(z.int()),\n maxlength: z.optional(z.int()),\n minlength: z.optional(z.int()),\n size: z.optional(z.string()),\n rtl: z.optional(z.boolean())\n}));\n\nexport const zTextareaFieldRoot = zBaseFieldRoot.and(zValueFieldRoot).and(z.object({\n type: z.enum(['textarea']),\n max_length: z.optional(z.int()),\n maxlength: z.optional(z.int()),\n minlength: z.optional(z.int()),\n size: z.optional(z.string()),\n rtl: z.optional(z.boolean()),\n rich_text: z.optional(z.boolean()),\n markdown: z.optional(z.boolean())\n}));\n\n/**\n * A component schema field. Discriminated by the literal `type` enum on each variant.\n */\nexport const zComponentSchemaField = z.union([\n zTextFieldRoot,\n zTextareaFieldRoot,\n zRichtextFieldRoot,\n zMarkdownFieldRoot,\n zNumberFieldRoot,\n zDatetimeFieldRoot,\n zBooleanFieldRoot,\n zOptionFieldRoot,\n zOptionsFieldRoot,\n zAssetFieldRoot,\n zMultiassetFieldRoot,\n zMultilinkFieldRoot,\n zBloksFieldRoot,\n zTableFieldRoot,\n zSectionFieldRoot,\n zTabFieldRoot,\n zCustomFieldRoot\n]);\n\n/**\n * Asset field type - single asset (image, video, audio, or document)\n */\nexport const zAssetFieldValueRoot = z.object({\n fieldtype: z.enum(['asset']),\n id: z.union([\n z.int(),\n z.null()\n ]),\n alt: z.union([\n z.string(),\n z.null()\n ]),\n name: z.optional(z.string()),\n focus: z.optional(z.union([\n z.string(),\n z.null()\n ])),\n title: z.optional(z.union([\n z.string(),\n z.null()\n ])),\n source: z.optional(z.union([\n z.string(),\n z.null()\n ])),\n filename: z.string(),\n copyright: z.optional(z.union([\n z.string(),\n z.null()\n ])),\n meta_data: z.optional(z.record(z.string(), z.unknown())),\n is_external_url: z.optional(z.boolean())\n});\n\nexport const zAssetFieldValue = zAssetFieldValueRoot;\n\n/**\n * Multilink field type - link to internal stories, external URLs, emails, etc.\n */\nexport const zMultilinkFieldValueRoot = z.object({\n fieldtype: z.enum(['multilink']),\n id: z.string(),\n url: z.string(),\n linktype: z.enum([\n 'story',\n 'url',\n 'email',\n 'asset'\n ]),\n cached_url: z.string(),\n anchor: z.optional(z.union([\n z.string(),\n z.null()\n ])),\n target: z.optional(z.union([\n z.literal('_self'),\n z.literal('_blank'),\n z.null()\n ]))\n});\n\nexport const zMultilinkFieldValue = zMultilinkFieldValueRoot;\n\n/**\n * Plugin/Custom field type - field plugin with custom structure\n */\nexport const zPluginFieldValueRoot = z.object({\n plugin: z.string(),\n _uid: z.optional(z.uuid())\n});\n\nexport const zPluginFieldValue = zPluginFieldValueRoot;\n\n/**\n * Richtext field type - structured rich text document (ProseMirror format)\n */\nexport const zRichtextFieldValueRoot = z.object({\n type: z.enum(['doc']),\n content: z.optional(z.array(z.record(z.string(), z.unknown())))\n});\n\nexport const zRichtextFieldValue = zRichtextFieldValueRoot;\n\n/**\n * Table field type - structured table data\n */\nexport const zTableFieldValueRoot = z.object({\n thead: z.array(z.object({\n _uid: z.string(),\n component: z.enum(['_table_head']),\n value: z.optional(z.string())\n })),\n tbody: z.array(z.object({\n _uid: z.string(),\n component: z.enum(['_table_row']),\n body: z.optional(z.array(z.object({\n _uid: z.string(),\n component: z.enum(['_table_col']),\n value: z.optional(z.string())\n })))\n }))\n});\n\nexport const zTableFieldValue = zTableFieldValueRoot;\n\n/**\n * Content object for creating or updating a component instance. Contains a component technical name and dynamic fields whose values depend on the component's schema field types. The _uid is optional — Storyblok will auto-generate one if not provided.\n */\nexport const zBlockContentInputRoot = z.object({\n _uid: z.optional(z.string()),\n component: z.string(),\n _editable: z.optional(z.string())\n});\n\nexport const zBlockContentInput = zBlockContentInputRoot;\n\n/**\n * Content object representing a component instance. Contains a _uid, a component technical name, and dynamic fields whose values depend on the component's schema field types (text, textarea, richtext, markdown, number, datetime, boolean, option, options, asset, multiasset, multilink, bloks, table, section, custom/plugin).\n */\nexport const zBlockContentRoot = z.object({\n _uid: z.string(),\n component: z.string(),\n _editable: z.optional(z.string())\n});\n\nexport const zBlockContent = zBlockContentRoot;\n"],"mappings":"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"}
|
|
@@ -34,6 +34,12 @@ type Block<TName extends string = string, TFields extends BlockFields = BlockFie
|
|
|
34
34
|
* directory layout.
|
|
35
35
|
*/
|
|
36
36
|
component_group_uuid?: string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Folder membership as a display name path (e.g. `'Layout/Heros'`); `null` =
|
|
39
|
+
* explicitly ungrouped (push clears the group). Absent = unmanaged (push
|
|
40
|
+
* leaves the remote group untouched).
|
|
41
|
+
*/
|
|
42
|
+
folder?: string | null;
|
|
37
43
|
}>;
|
|
38
44
|
/**
|
|
39
45
|
* A root {@link Block} (`is_root: true`). Given a union of blocks, narrows to
|
|
@@ -34,6 +34,12 @@ type Block<TName extends string = string, TFields extends BlockFields = BlockFie
|
|
|
34
34
|
* directory layout.
|
|
35
35
|
*/
|
|
36
36
|
component_group_uuid?: string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Folder membership as a display name path (e.g. `'Layout/Heros'`); `null` =
|
|
39
|
+
* explicitly ungrouped (push clears the group). Absent = unmanaged (push
|
|
40
|
+
* leaves the remote group untouched).
|
|
41
|
+
*/
|
|
42
|
+
folder?: string | null;
|
|
37
43
|
}>;
|
|
38
44
|
/**
|
|
39
45
|
* A root {@link Block} (`is_root: true`). Given a union of blocks, narrows to
|
|
@@ -16,35 +16,35 @@ type IsBaseBlock<T> = [Block] extends [T] ? true : false;
|
|
|
16
16
|
* required (`required: true`) from optional fields. Each `F` is a member of the
|
|
17
17
|
* field union, so it provably satisfies `FieldValue`'s `Field` constraint.
|
|
18
18
|
*/
|
|
19
|
-
type ContentFields<TFields extends BlockFields, TBlocks
|
|
19
|
+
type ContentFields<TFields extends BlockFields, TBlocks, TFieldPlugins = Record<never, never>> = Prettify<{ [F in TFields[number] as F extends {
|
|
20
20
|
required: true;
|
|
21
|
-
} ? F['name'] : never]: FieldValue<F, TBlocks> } & { [F in TFields[number] as F extends {
|
|
21
|
+
} ? F['name'] : never]: FieldValue<F, TBlocks, TFieldPlugins> } & { [F in TFields[number] as F extends {
|
|
22
22
|
required: true;
|
|
23
|
-
} ? never : F['name']]?: FieldValue<F, TBlocks> | null }>;
|
|
23
|
+
} ? never : F['name']]?: FieldValue<F, TBlocks, TFieldPlugins> | null }>;
|
|
24
24
|
/** Input (write) variant of {@link ContentFields}, resolving each field via {@link FieldValueInput}. */
|
|
25
|
-
type ContentFieldsInput<TFields extends BlockFields, TBlocks
|
|
25
|
+
type ContentFieldsInput<TFields extends BlockFields, TBlocks, TFieldPlugins = Record<never, never>> = Prettify<{ [F in TFields[number] as F extends {
|
|
26
26
|
required: true;
|
|
27
|
-
} ? F['name'] : never]: FieldValueInput<F, TBlocks> } & { [F in TFields[number] as F extends {
|
|
27
|
+
} ? F['name'] : never]: FieldValueInput<F, TBlocks, TFieldPlugins> } & { [F in TFields[number] as F extends {
|
|
28
28
|
required: true;
|
|
29
|
-
} ? never : F['name']]?: FieldValueInput<F, TBlocks> | null }>;
|
|
29
|
+
} ? never : F['name']]?: FieldValueInput<F, TBlocks, TFieldPlugins> | null }>;
|
|
30
30
|
/**
|
|
31
31
|
* Content object for a single block instance as returned by the Storyblok
|
|
32
32
|
* Content Delivery API. Without a `TBlock` argument, this is the loose
|
|
33
33
|
* runtime shape (any block, `_editable` optional). With a schema-typed
|
|
34
34
|
* `TBlock`, fields are narrowed per the block's `fields`.
|
|
35
35
|
*/
|
|
36
|
-
type BlockContent<TBlock extends Block = Block, TBlocks = NoBlocks
|
|
36
|
+
type BlockContent<TBlock extends Block = Block, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = IsBaseBlock<TBlock> extends true ? BlockContentBase : TBlock extends any ? Prettify<{
|
|
37
37
|
_uid: string;
|
|
38
38
|
component: TBlock['name'];
|
|
39
39
|
_editable?: string;
|
|
40
|
-
} & ContentFields<TBlock['fields'], TBlocks>> : never;
|
|
40
|
+
} & ContentFields<TBlock['fields'], TBlocks, TFieldPlugins>> : never;
|
|
41
41
|
/** Input variant of {@link BlockContent} for write operations (creating/updating stories via the MAPI). `_uid` is optional. */
|
|
42
|
-
type BlockContentInput<TBlock extends Block = Block, TBlocks = NoBlocks
|
|
42
|
+
type BlockContentInput<TBlock extends Block = Block, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = IsBaseBlock<TBlock> extends true ? BlockContentInputBase : TBlock extends any ? Prettify<{
|
|
43
43
|
_uid?: string;
|
|
44
44
|
component: TBlock['name'];
|
|
45
45
|
_editable?: string;
|
|
46
|
-
} & ContentFieldsInput<TBlock['fields'], TBlocks>> : never;
|
|
47
|
-
type BlocksFieldValue<TBlock extends Block = Block, TBlocks = NoBlocks
|
|
46
|
+
} & ContentFieldsInput<TBlock['fields'], TBlocks, TFieldPlugins>> : never;
|
|
47
|
+
type BlocksFieldValue<TBlock extends Block = Block, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = BlockContent<TBlock, TBlocks, TFieldPlugins>[];
|
|
48
48
|
/** Union of all valid Storyblok field type discriminants (e.g., `text`, `bloks`). */
|
|
49
49
|
type FieldType = Field['type'];
|
|
50
50
|
interface FieldTypeValueMap {
|
|
@@ -71,19 +71,54 @@ type IsNestable<T> = T extends {
|
|
|
71
71
|
} ? false : T extends {
|
|
72
72
|
is_nestable: true;
|
|
73
73
|
} ? true : true;
|
|
74
|
+
type AllowEntry = string | {
|
|
75
|
+
folder: string;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Keeps `TBlock` when its `folder` is `TFolder` or any nested subfolder (mirrors
|
|
79
|
+
* the editor's `isAnywhereInFolder`). This is a best-effort compile-time check,
|
|
80
|
+
* compared case-insensitively via `Lowercase` so `folder: 'blog'` and a `Blog`
|
|
81
|
+
* folder ref narrow the same. TypeScript cannot replicate the CLI's full slug at
|
|
82
|
+
* the type level, so separator/symbol drift (`'My Layout'` vs `'my-layout'`) is
|
|
83
|
+
* only reconciled at push/validate time — full folder identity is enforced
|
|
84
|
+
* there, not here. To rely on narrowing, prefer a `defineFolder` ref over a
|
|
85
|
+
* string path on both the block's `folder` and the field's `allow`: a shared ref
|
|
86
|
+
* carries the exact path on both sides, so no drift is possible.
|
|
87
|
+
*/
|
|
88
|
+
type MatchesFolder<TBlock, TFolder extends string> = TBlock extends {
|
|
89
|
+
folder: infer BF extends string;
|
|
90
|
+
} ? Lowercase<BF> extends Lowercase<TFolder> | `${Lowercase<TFolder>}/${string}` ? TBlock : never : never;
|
|
74
91
|
type ApplyAllow<TField, TBlocks> = TField extends {
|
|
75
|
-
allow: ReadonlyArray<infer TAllowed extends
|
|
76
|
-
} ? Extract<TBlocks, {
|
|
92
|
+
allow: ReadonlyArray<infer TAllowed extends AllowEntry>;
|
|
93
|
+
} ? TAllowed extends string ? Extract<TBlocks, {
|
|
77
94
|
name: TAllowed;
|
|
78
|
-
}> :
|
|
95
|
+
}> : TAllowed extends {
|
|
96
|
+
folder: infer F extends string;
|
|
97
|
+
} ? TBlocks extends any ? MatchesFolder<TBlocks, F> : never : never : TBlocks extends any ? IsNestable<TBlocks> extends true ? TBlocks : never : never;
|
|
98
|
+
/**
|
|
99
|
+
* Resolves a `custom` field to its registered plugin value. When the field's
|
|
100
|
+
* `field_type` is a key of `TFieldPlugins`, the validator output is merged with
|
|
101
|
+
* the plugin envelope (`plugin`, optional `_uid`); otherwise it falls back to
|
|
102
|
+
* the untyped {@link PluginFieldValue}. Same shape for read and write.
|
|
103
|
+
*/
|
|
104
|
+
type ResolveCustom<TField, TFieldPlugins> = TField extends {
|
|
105
|
+
field_type: infer F extends string;
|
|
106
|
+
} ? F extends keyof TFieldPlugins ? Prettify<TFieldPlugins[F] & {
|
|
107
|
+
plugin: string;
|
|
108
|
+
_uid?: string;
|
|
109
|
+
}> : PluginFieldValue : PluginFieldValue;
|
|
79
110
|
/** Resolves a field definition to its runtime content value type (read). */
|
|
80
|
-
type FieldValue<TField extends Field = Field, TBlocks = NoBlocks
|
|
111
|
+
type FieldValue<TField extends Field = Field, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = Prettify<TField extends {
|
|
81
112
|
type: 'bloks';
|
|
82
|
-
} ? [TBlocks] extends [never] ? BlockContentBase[] : [TBlocks] extends [Block] ? BlockContent<ApplyAllow<TField, TBlocks>, TBlocks>[] : BlockContentBase[] :
|
|
113
|
+
} ? [TBlocks] extends [never] ? BlockContentBase[] : [TBlocks] extends [Block] ? BlockContent<ApplyAllow<TField, TBlocks>, TBlocks, TFieldPlugins>[] : BlockContentBase[] : TField extends {
|
|
114
|
+
type: 'custom';
|
|
115
|
+
} ? ResolveCustom<TField, TFieldPlugins> : FieldTypeValueMap[TField['type']]>;
|
|
83
116
|
/** Resolves a field definition to its input value type (write). */
|
|
84
|
-
type FieldValueInput<TField extends Field = Field, TBlocks = NoBlocks
|
|
117
|
+
type FieldValueInput<TField extends Field = Field, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = Prettify<TField extends {
|
|
85
118
|
type: 'bloks';
|
|
86
|
-
} ? [TBlocks] extends [never] ? BlockContentInputBase[] : [TBlocks] extends [Block] ? BlockContentInput<ApplyAllow<TField, TBlocks>, TBlocks>[] : BlockContentInputBase[] :
|
|
119
|
+
} ? [TBlocks] extends [never] ? BlockContentInputBase[] : [TBlocks] extends [Block] ? BlockContentInput<ApplyAllow<TField, TBlocks>, TBlocks, TFieldPlugins>[] : BlockContentInputBase[] : TField extends {
|
|
120
|
+
type: 'custom';
|
|
121
|
+
} ? ResolveCustom<TField, TFieldPlugins> : FieldTypeValueMap[TField['type']]>;
|
|
87
122
|
//#endregion
|
|
88
123
|
export { BlockContent, BlockContentInput, BlocksFieldValue, FieldType, FieldValue, FieldValueInput };
|
|
89
124
|
//# sourceMappingURL=field.d.cts.map
|
|
@@ -16,35 +16,35 @@ type IsBaseBlock<T> = [Block] extends [T] ? true : false;
|
|
|
16
16
|
* required (`required: true`) from optional fields. Each `F` is a member of the
|
|
17
17
|
* field union, so it provably satisfies `FieldValue`'s `Field` constraint.
|
|
18
18
|
*/
|
|
19
|
-
type ContentFields<TFields extends BlockFields, TBlocks
|
|
19
|
+
type ContentFields<TFields extends BlockFields, TBlocks, TFieldPlugins = Record<never, never>> = Prettify<{ [F in TFields[number] as F extends {
|
|
20
20
|
required: true;
|
|
21
|
-
} ? F['name'] : never]: FieldValue<F, TBlocks> } & { [F in TFields[number] as F extends {
|
|
21
|
+
} ? F['name'] : never]: FieldValue<F, TBlocks, TFieldPlugins> } & { [F in TFields[number] as F extends {
|
|
22
22
|
required: true;
|
|
23
|
-
} ? never : F['name']]?: FieldValue<F, TBlocks> | null }>;
|
|
23
|
+
} ? never : F['name']]?: FieldValue<F, TBlocks, TFieldPlugins> | null }>;
|
|
24
24
|
/** Input (write) variant of {@link ContentFields}, resolving each field via {@link FieldValueInput}. */
|
|
25
|
-
type ContentFieldsInput<TFields extends BlockFields, TBlocks
|
|
25
|
+
type ContentFieldsInput<TFields extends BlockFields, TBlocks, TFieldPlugins = Record<never, never>> = Prettify<{ [F in TFields[number] as F extends {
|
|
26
26
|
required: true;
|
|
27
|
-
} ? F['name'] : never]: FieldValueInput<F, TBlocks> } & { [F in TFields[number] as F extends {
|
|
27
|
+
} ? F['name'] : never]: FieldValueInput<F, TBlocks, TFieldPlugins> } & { [F in TFields[number] as F extends {
|
|
28
28
|
required: true;
|
|
29
|
-
} ? never : F['name']]?: FieldValueInput<F, TBlocks> | null }>;
|
|
29
|
+
} ? never : F['name']]?: FieldValueInput<F, TBlocks, TFieldPlugins> | null }>;
|
|
30
30
|
/**
|
|
31
31
|
* Content object for a single block instance as returned by the Storyblok
|
|
32
32
|
* Content Delivery API. Without a `TBlock` argument, this is the loose
|
|
33
33
|
* runtime shape (any block, `_editable` optional). With a schema-typed
|
|
34
34
|
* `TBlock`, fields are narrowed per the block's `fields`.
|
|
35
35
|
*/
|
|
36
|
-
type BlockContent<TBlock extends Block = Block, TBlocks = NoBlocks
|
|
36
|
+
type BlockContent<TBlock extends Block = Block, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = IsBaseBlock<TBlock> extends true ? BlockContentBase : TBlock extends any ? Prettify<{
|
|
37
37
|
_uid: string;
|
|
38
38
|
component: TBlock['name'];
|
|
39
39
|
_editable?: string;
|
|
40
|
-
} & ContentFields<TBlock['fields'], TBlocks>> : never;
|
|
40
|
+
} & ContentFields<TBlock['fields'], TBlocks, TFieldPlugins>> : never;
|
|
41
41
|
/** Input variant of {@link BlockContent} for write operations (creating/updating stories via the MAPI). `_uid` is optional. */
|
|
42
|
-
type BlockContentInput<TBlock extends Block = Block, TBlocks = NoBlocks
|
|
42
|
+
type BlockContentInput<TBlock extends Block = Block, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = IsBaseBlock<TBlock> extends true ? BlockContentInputBase : TBlock extends any ? Prettify<{
|
|
43
43
|
_uid?: string;
|
|
44
44
|
component: TBlock['name'];
|
|
45
45
|
_editable?: string;
|
|
46
|
-
} & ContentFieldsInput<TBlock['fields'], TBlocks>> : never;
|
|
47
|
-
type BlocksFieldValue<TBlock extends Block = Block, TBlocks = NoBlocks
|
|
46
|
+
} & ContentFieldsInput<TBlock['fields'], TBlocks, TFieldPlugins>> : never;
|
|
47
|
+
type BlocksFieldValue<TBlock extends Block = Block, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = BlockContent<TBlock, TBlocks, TFieldPlugins>[];
|
|
48
48
|
/** Union of all valid Storyblok field type discriminants (e.g., `text`, `bloks`). */
|
|
49
49
|
type FieldType = Field['type'];
|
|
50
50
|
interface FieldTypeValueMap {
|
|
@@ -71,19 +71,54 @@ type IsNestable<T> = T extends {
|
|
|
71
71
|
} ? false : T extends {
|
|
72
72
|
is_nestable: true;
|
|
73
73
|
} ? true : true;
|
|
74
|
+
type AllowEntry = string | {
|
|
75
|
+
folder: string;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Keeps `TBlock` when its `folder` is `TFolder` or any nested subfolder (mirrors
|
|
79
|
+
* the editor's `isAnywhereInFolder`). This is a best-effort compile-time check,
|
|
80
|
+
* compared case-insensitively via `Lowercase` so `folder: 'blog'` and a `Blog`
|
|
81
|
+
* folder ref narrow the same. TypeScript cannot replicate the CLI's full slug at
|
|
82
|
+
* the type level, so separator/symbol drift (`'My Layout'` vs `'my-layout'`) is
|
|
83
|
+
* only reconciled at push/validate time — full folder identity is enforced
|
|
84
|
+
* there, not here. To rely on narrowing, prefer a `defineFolder` ref over a
|
|
85
|
+
* string path on both the block's `folder` and the field's `allow`: a shared ref
|
|
86
|
+
* carries the exact path on both sides, so no drift is possible.
|
|
87
|
+
*/
|
|
88
|
+
type MatchesFolder<TBlock, TFolder extends string> = TBlock extends {
|
|
89
|
+
folder: infer BF extends string;
|
|
90
|
+
} ? Lowercase<BF> extends Lowercase<TFolder> | `${Lowercase<TFolder>}/${string}` ? TBlock : never : never;
|
|
74
91
|
type ApplyAllow<TField, TBlocks> = TField extends {
|
|
75
|
-
allow: ReadonlyArray<infer TAllowed extends
|
|
76
|
-
} ? Extract<TBlocks, {
|
|
92
|
+
allow: ReadonlyArray<infer TAllowed extends AllowEntry>;
|
|
93
|
+
} ? TAllowed extends string ? Extract<TBlocks, {
|
|
77
94
|
name: TAllowed;
|
|
78
|
-
}> :
|
|
95
|
+
}> : TAllowed extends {
|
|
96
|
+
folder: infer F extends string;
|
|
97
|
+
} ? TBlocks extends any ? MatchesFolder<TBlocks, F> : never : never : TBlocks extends any ? IsNestable<TBlocks> extends true ? TBlocks : never : never;
|
|
98
|
+
/**
|
|
99
|
+
* Resolves a `custom` field to its registered plugin value. When the field's
|
|
100
|
+
* `field_type` is a key of `TFieldPlugins`, the validator output is merged with
|
|
101
|
+
* the plugin envelope (`plugin`, optional `_uid`); otherwise it falls back to
|
|
102
|
+
* the untyped {@link PluginFieldValue}. Same shape for read and write.
|
|
103
|
+
*/
|
|
104
|
+
type ResolveCustom<TField, TFieldPlugins> = TField extends {
|
|
105
|
+
field_type: infer F extends string;
|
|
106
|
+
} ? F extends keyof TFieldPlugins ? Prettify<TFieldPlugins[F] & {
|
|
107
|
+
plugin: string;
|
|
108
|
+
_uid?: string;
|
|
109
|
+
}> : PluginFieldValue : PluginFieldValue;
|
|
79
110
|
/** Resolves a field definition to its runtime content value type (read). */
|
|
80
|
-
type FieldValue<TField extends Field = Field, TBlocks = NoBlocks
|
|
111
|
+
type FieldValue<TField extends Field = Field, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = Prettify<TField extends {
|
|
81
112
|
type: 'bloks';
|
|
82
|
-
} ? [TBlocks] extends [never] ? BlockContentBase[] : [TBlocks] extends [Block] ? BlockContent<ApplyAllow<TField, TBlocks>, TBlocks>[] : BlockContentBase[] :
|
|
113
|
+
} ? [TBlocks] extends [never] ? BlockContentBase[] : [TBlocks] extends [Block] ? BlockContent<ApplyAllow<TField, TBlocks>, TBlocks, TFieldPlugins>[] : BlockContentBase[] : TField extends {
|
|
114
|
+
type: 'custom';
|
|
115
|
+
} ? ResolveCustom<TField, TFieldPlugins> : FieldTypeValueMap[TField['type']]>;
|
|
83
116
|
/** Resolves a field definition to its input value type (write). */
|
|
84
|
-
type FieldValueInput<TField extends Field = Field, TBlocks = NoBlocks
|
|
117
|
+
type FieldValueInput<TField extends Field = Field, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = Prettify<TField extends {
|
|
85
118
|
type: 'bloks';
|
|
86
|
-
} ? [TBlocks] extends [never] ? BlockContentInputBase[] : [TBlocks] extends [Block] ? BlockContentInput<ApplyAllow<TField, TBlocks>, TBlocks>[] : BlockContentInputBase[] :
|
|
119
|
+
} ? [TBlocks] extends [never] ? BlockContentInputBase[] : [TBlocks] extends [Block] ? BlockContentInput<ApplyAllow<TField, TBlocks>, TBlocks, TFieldPlugins>[] : BlockContentInputBase[] : TField extends {
|
|
120
|
+
type: 'custom';
|
|
121
|
+
} ? ResolveCustom<TField, TFieldPlugins> : FieldTypeValueMap[TField['type']]>;
|
|
87
122
|
//#endregion
|
|
88
123
|
export { BlockContent, BlockContentInput, BlocksFieldValue, FieldType, FieldValue, FieldValueInput };
|
|
89
124
|
//# sourceMappingURL=field.d.mts.map
|
|
@@ -14,12 +14,12 @@ type NoBlocks = false;
|
|
|
14
14
|
* Base (un-narrowed) `RootBlock` means no schema was supplied, so the generated
|
|
15
15
|
* story passes through unchanged.
|
|
16
16
|
*/
|
|
17
|
-
type MapiStoryWithSchemaContent<TStory extends MapiStory$1 | StoryCreate | StoryUpdate, TBlock extends RootBlock = RootBlock, TBlocks = NoBlocks
|
|
18
|
-
content: TStory extends StoryCreate | StoryUpdate ? BlockContentInput<TBlock, TBlocks> : BlockContent<TBlock, TBlocks>;
|
|
17
|
+
type MapiStoryWithSchemaContent<TStory extends MapiStory$1 | StoryCreate | StoryUpdate, TBlock extends RootBlock = RootBlock, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = RootBlock extends TBlock ? TStory : Override<TStory, {
|
|
18
|
+
content: TStory extends StoryCreate | StoryUpdate ? BlockContentInput<TBlock, TBlocks, TFieldPlugins> : BlockContent<TBlock, TBlocks, TFieldPlugins>;
|
|
19
19
|
}>;
|
|
20
|
-
type MakeMapiStory<TStory extends MapiStory$1 | StoryCreate | StoryUpdate, TBlockOrBlocks extends RootBlock | Block = RootBlock, TBlocks = NoBlocks> = Prettify<[TBlockOrBlocks] extends [RootBlock] ? MapiStoryWithSchemaContent<TStory, TBlockOrBlocks, TBlocks> : TBlocks extends NoBlocks ? MapiStoryWithSchemaContent<TStory, Extract<TBlockOrBlocks, RootBlock>, TBlockOrBlocks> : never>;
|
|
20
|
+
type MakeMapiStory<TStory extends MapiStory$1 | StoryCreate | StoryUpdate, TBlockOrBlocks extends RootBlock | Block = RootBlock, TFieldPlugins = Record<never, never>, TBlocks = NoBlocks> = Prettify<[TBlockOrBlocks] extends [RootBlock] ? MapiStoryWithSchemaContent<TStory, TBlockOrBlocks, TBlocks, TFieldPlugins> : TBlocks extends NoBlocks ? MapiStoryWithSchemaContent<TStory, Extract<TBlockOrBlocks, RootBlock>, TBlockOrBlocks, TFieldPlugins> : never>;
|
|
21
21
|
/** A Storyblok MAPI story. */
|
|
22
|
-
type MapiStory<TBlockOrBlocks extends RootBlock | Block = RootBlock, TBlocks = NoBlocks> = MakeMapiStory<MapiStory$1, TBlockOrBlocks, TBlocks>;
|
|
22
|
+
type MapiStory<TBlockOrBlocks extends RootBlock | Block = RootBlock, TFieldPlugins = Record<never, never>, TBlocks = NoBlocks> = MakeMapiStory<MapiStory$1, TBlockOrBlocks, TFieldPlugins, TBlocks>;
|
|
23
23
|
//#endregion
|
|
24
24
|
export { MapiStory };
|
|
25
25
|
//# sourceMappingURL=mapi-story.d.cts.map
|
|
@@ -14,12 +14,12 @@ type NoBlocks = false;
|
|
|
14
14
|
* Base (un-narrowed) `RootBlock` means no schema was supplied, so the generated
|
|
15
15
|
* story passes through unchanged.
|
|
16
16
|
*/
|
|
17
|
-
type MapiStoryWithSchemaContent<TStory extends MapiStory$1 | StoryCreate | StoryUpdate, TBlock extends RootBlock = RootBlock, TBlocks = NoBlocks
|
|
18
|
-
content: TStory extends StoryCreate | StoryUpdate ? BlockContentInput<TBlock, TBlocks> : BlockContent<TBlock, TBlocks>;
|
|
17
|
+
type MapiStoryWithSchemaContent<TStory extends MapiStory$1 | StoryCreate | StoryUpdate, TBlock extends RootBlock = RootBlock, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = RootBlock extends TBlock ? TStory : Override<TStory, {
|
|
18
|
+
content: TStory extends StoryCreate | StoryUpdate ? BlockContentInput<TBlock, TBlocks, TFieldPlugins> : BlockContent<TBlock, TBlocks, TFieldPlugins>;
|
|
19
19
|
}>;
|
|
20
|
-
type MakeMapiStory<TStory extends MapiStory$1 | StoryCreate | StoryUpdate, TBlockOrBlocks extends RootBlock | Block = RootBlock, TBlocks = NoBlocks> = Prettify<[TBlockOrBlocks] extends [RootBlock] ? MapiStoryWithSchemaContent<TStory, TBlockOrBlocks, TBlocks> : TBlocks extends NoBlocks ? MapiStoryWithSchemaContent<TStory, Extract<TBlockOrBlocks, RootBlock>, TBlockOrBlocks> : never>;
|
|
20
|
+
type MakeMapiStory<TStory extends MapiStory$1 | StoryCreate | StoryUpdate, TBlockOrBlocks extends RootBlock | Block = RootBlock, TFieldPlugins = Record<never, never>, TBlocks = NoBlocks> = Prettify<[TBlockOrBlocks] extends [RootBlock] ? MapiStoryWithSchemaContent<TStory, TBlockOrBlocks, TBlocks, TFieldPlugins> : TBlocks extends NoBlocks ? MapiStoryWithSchemaContent<TStory, Extract<TBlockOrBlocks, RootBlock>, TBlockOrBlocks, TFieldPlugins> : never>;
|
|
21
21
|
/** A Storyblok MAPI story. */
|
|
22
|
-
type MapiStory<TBlockOrBlocks extends RootBlock | Block = RootBlock, TBlocks = NoBlocks> = MakeMapiStory<MapiStory$1, TBlockOrBlocks, TBlocks>;
|
|
22
|
+
type MapiStory<TBlockOrBlocks extends RootBlock | Block = RootBlock, TFieldPlugins = Record<never, never>, TBlocks = NoBlocks> = MakeMapiStory<MapiStory$1, TBlockOrBlocks, TFieldPlugins, TBlocks>;
|
|
23
23
|
//#endregion
|
|
24
24
|
export { MapiStory };
|
|
25
25
|
//# sourceMappingURL=mapi-story.d.mts.map
|
|
@@ -9,11 +9,11 @@ import { BlockContent } from "./field.cjs";
|
|
|
9
9
|
* `NoBlocks` (the default) leaves nested content loose (`BlockContentBase`).
|
|
10
10
|
*/
|
|
11
11
|
type NoBlocks = false;
|
|
12
|
-
type CapiStoryWithSchemaContent<TBlock extends RootBlock = RootBlock, TBlocks = NoBlocks
|
|
13
|
-
content: BlockContent<TBlock, TBlocks>;
|
|
12
|
+
type CapiStoryWithSchemaContent<TBlock extends RootBlock = RootBlock, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = Override<CapiStory, {
|
|
13
|
+
content: BlockContent<TBlock, TBlocks, TFieldPlugins>;
|
|
14
14
|
}>;
|
|
15
15
|
/** A Storyblok CDN (CAPI) story. */
|
|
16
|
-
type Story<TBlockOrBlocks extends RootBlock | Block = RootBlock, TBlocks = NoBlocks> = Prettify<[TBlockOrBlocks] extends [RootBlock] ? CapiStoryWithSchemaContent<TBlockOrBlocks, TBlocks> : TBlocks extends NoBlocks ? CapiStoryWithSchemaContent<Extract<TBlockOrBlocks, RootBlock>, TBlockOrBlocks> : never>;
|
|
16
|
+
type Story<TBlockOrBlocks extends RootBlock | Block = RootBlock, TFieldPlugins = Record<never, never>, TBlocks = NoBlocks> = Prettify<[TBlockOrBlocks] extends [RootBlock] ? CapiStoryWithSchemaContent<TBlockOrBlocks, TBlocks, TFieldPlugins> : TBlocks extends NoBlocks ? CapiStoryWithSchemaContent<Extract<TBlockOrBlocks, RootBlock>, TBlockOrBlocks, TFieldPlugins> : never>;
|
|
17
17
|
//#endregion
|
|
18
18
|
export { Story };
|
|
19
19
|
//# sourceMappingURL=story.d.cts.map
|
|
@@ -9,11 +9,11 @@ import { BlockContent } from "./field.mjs";
|
|
|
9
9
|
* `NoBlocks` (the default) leaves nested content loose (`BlockContentBase`).
|
|
10
10
|
*/
|
|
11
11
|
type NoBlocks = false;
|
|
12
|
-
type CapiStoryWithSchemaContent<TBlock extends RootBlock = RootBlock, TBlocks = NoBlocks
|
|
13
|
-
content: BlockContent<TBlock, TBlocks>;
|
|
12
|
+
type CapiStoryWithSchemaContent<TBlock extends RootBlock = RootBlock, TBlocks = NoBlocks, TFieldPlugins = Record<never, never>> = Override<CapiStory, {
|
|
13
|
+
content: BlockContent<TBlock, TBlocks, TFieldPlugins>;
|
|
14
14
|
}>;
|
|
15
15
|
/** A Storyblok CDN (CAPI) story. */
|
|
16
|
-
type Story<TBlockOrBlocks extends RootBlock | Block = RootBlock, TBlocks = NoBlocks> = Prettify<[TBlockOrBlocks] extends [RootBlock] ? CapiStoryWithSchemaContent<TBlockOrBlocks, TBlocks> : TBlocks extends NoBlocks ? CapiStoryWithSchemaContent<Extract<TBlockOrBlocks, RootBlock>, TBlockOrBlocks> : never>;
|
|
16
|
+
type Story<TBlockOrBlocks extends RootBlock | Block = RootBlock, TFieldPlugins = Record<never, never>, TBlocks = NoBlocks> = Prettify<[TBlockOrBlocks] extends [RootBlock] ? CapiStoryWithSchemaContent<TBlockOrBlocks, TBlocks, TFieldPlugins> : TBlocks extends NoBlocks ? CapiStoryWithSchemaContent<Extract<TBlockOrBlocks, RootBlock>, TBlockOrBlocks, TFieldPlugins> : never>;
|
|
17
17
|
//#endregion
|
|
18
18
|
export { Story };
|
|
19
19
|
//# sourceMappingURL=story.d.mts.map
|
|
@@ -21,9 +21,14 @@ function defineBlock(block) {
|
|
|
21
21
|
pos: index
|
|
22
22
|
};
|
|
23
23
|
});
|
|
24
|
+
const { folder, ...restBlock } = block ?? {};
|
|
25
|
+
if (folder !== void 0 && typeof restBlock.component_group_uuid === "string") throw new Error(`defineBlock: block "${block?.name ?? ""}" sets both "folder" and "component_group_uuid"; use one`);
|
|
26
|
+
if (typeof folder === "string" && !folder.split("/").some((segment) => segment.trim() !== "")) throw new Error(`defineBlock: block "${block?.name ?? ""}" has an empty "folder" path`);
|
|
27
|
+
const normalizedFolder = folder === void 0 ? void 0 : folder !== null && typeof folder === "object" ? folder.path : folder;
|
|
24
28
|
return {
|
|
25
29
|
...BLOCK_DEFAULTS,
|
|
26
|
-
...
|
|
30
|
+
...restBlock,
|
|
31
|
+
...folder !== void 0 && { folder: normalizedFolder },
|
|
27
32
|
fields
|
|
28
33
|
};
|
|
29
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-block.cjs","names":[],"sources":["../../src/helpers/define-block.ts"],"sourcesContent":["import type {\n Block,\n BlockFields,\n NestableBlock,\n RootBlock,\n} from '../generated/types/block';\nimport type { Prettify } from '../utils/prettify';\n\nexport type { Block, BlockFields, NestableBlock, RootBlock };\n\nconst BLOCK_DEFAULTS = {\n id: 1,\n created_at: '',\n updated_at: '',\n is_root: false,\n is_nestable: true,\n};\n\n/** Fields that have safe defaults and may be omitted from block input. */\ntype BlockOptional = keyof typeof BLOCK_DEFAULTS;\n\ntype BlockInput<\n TName extends string = string,\n TFields extends BlockFields = BlockFields,\n TIsRoot extends boolean = false,\n TIsNestable extends boolean = true,\n> = Prettify<\n Omit<Block, 'name' | 'fields' | 'is_root' | 'is_nestable' | BlockOptional> & {\n name: TName;\n fields: TFields;\n is_root?: TIsRoot;\n is_nestable?: TIsNestable;\n } & Partial<Pick<Block, Exclude<BlockOptional, 'is_root' | 'is_nestable'>>>\n>;\n\ntype DefinedBlock<\n TName extends string,\n TFields extends BlockFields,\n TIsRoot extends boolean,\n TIsNestable extends boolean,\n> = Prettify<\n Omit<Block, 'name' | 'fields' | 'is_root' | 'is_nestable'> & {\n name: TName;\n fields: TFields;\n is_root: TIsRoot;\n is_nestable: TIsNestable;\n }\n>;\n\n/**\n * Returns a {@link Block} content-shape definition. The user-facing input is an\n * ordered array of `defineField` calls under `fields`; the array index becomes\n * each field's `pos`. A thin, strongly-typed helper — it does not map to the\n * MAPI wire shape (the CLI owns the DSL→wire mapping). Throws only on duplicate\n * field names (a programming error).\n *\n * @example\n * const pageBlock = defineBlock({\n * name: 'page',\n * is_root: true,\n * fields: [\n * defineField('headline', { type: 'text', required: true }),\n * ],\n * });\n */\nexport function defineBlock<\n TName extends string,\n const TFields extends BlockFields,\n TIsRoot extends boolean = false,\n TIsNestable extends boolean = true,\n>(\n block: BlockInput<TName, TFields, TIsRoot, TIsNestable>,\n): DefinedBlock<TName, TFields, TIsRoot, TIsNestable>;\n\nexport function defineBlock(block: any) {\n const inputFields = Array.isArray(block?.fields) ? block.fields : [];\n const seen = new Set<string>();\n const fields = inputFields.map((field: any, index: number) => {\n const name = field?.name;\n if (typeof name === 'string') {\n if (seen.has(name)) {\n throw new Error(`defineBlock: duplicate field name \"${name}\" in block \"${block?.name ?? ''}\"`);\n }\n seen.add(name);\n }\n return { ...field, pos: index };\n });\n
|
|
1
|
+
{"version":3,"file":"define-block.cjs","names":[],"sources":["../../src/helpers/define-block.ts"],"sourcesContent":["import type {\n Block,\n BlockFields,\n NestableBlock,\n RootBlock,\n} from '../generated/types/block';\nimport type { BlockFolder } from './define-folder';\nimport type { Prettify } from '../utils/prettify';\n\nexport type { Block, BlockFields, NestableBlock, RootBlock };\n\nconst BLOCK_DEFAULTS = {\n id: 1,\n created_at: '',\n updated_at: '',\n is_root: false,\n is_nestable: true,\n};\n\n/** Fields that have safe defaults and may be omitted from block input. */\ntype BlockOptional = keyof typeof BLOCK_DEFAULTS;\n\n/** Accepted input for a block's `folder`: a folder ref, a raw path string, or `null` to explicitly ungroup. */\ntype FolderInput = BlockFolder | string | null;\n\n/** Normalizes a folder input type to the display path literal it resolves to. */\ntype NormalizeFolder<T> = T extends { path: infer P extends string } ? P : T;\n\ntype BlockInput<\n TName extends string = string,\n TFields extends BlockFields = BlockFields,\n TIsRoot extends boolean = false,\n TIsNestable extends boolean = true,\n TFolder extends FolderInput | undefined = undefined,\n> = Prettify<\n Omit<Block, 'name' | 'fields' | 'is_root' | 'is_nestable' | 'folder' | BlockOptional> & {\n name: TName;\n fields: TFields;\n is_root?: TIsRoot;\n is_nestable?: TIsNestable;\n folder?: TFolder;\n } & Partial<Pick<Block, Exclude<BlockOptional, 'is_root' | 'is_nestable'>>>\n>;\n\ntype DefinedBlock<\n TName extends string,\n TFields extends BlockFields,\n TIsRoot extends boolean,\n TIsNestable extends boolean,\n TFolder extends FolderInput | undefined = undefined,\n> = Prettify<\n Omit<Block, 'name' | 'fields' | 'is_root' | 'is_nestable' | 'folder'> & {\n name: TName;\n fields: TFields;\n is_root: TIsRoot;\n is_nestable: TIsNestable;\n } & (TFolder extends undefined ? unknown : { folder: NormalizeFolder<TFolder> })\n>;\n\n/**\n * Returns a {@link Block} content-shape definition. The user-facing input is an\n * ordered array of `defineField` calls under `fields`; the array index becomes\n * each field's `pos`. A thin, strongly-typed helper — it does not map to the\n * MAPI wire shape (the CLI owns the DSL→wire mapping). Throws only on duplicate\n * field names (a programming error).\n *\n * @example\n * const pageBlock = defineBlock({\n * name: 'page',\n * is_root: true,\n * fields: [\n * defineField('headline', { type: 'text', required: true }),\n * ],\n * });\n */\nexport function defineBlock<\n TName extends string,\n const TFields extends BlockFields,\n TIsRoot extends boolean = false,\n TIsNestable extends boolean = true,\n const TFolder extends FolderInput | undefined = undefined,\n>(\n block: BlockInput<TName, TFields, TIsRoot, TIsNestable, TFolder>,\n): DefinedBlock<TName, TFields, TIsRoot, TIsNestable, TFolder>;\n\nexport function defineBlock(block: any) {\n const inputFields = Array.isArray(block?.fields) ? block.fields : [];\n const seen = new Set<string>();\n const fields = inputFields.map((field: any, index: number) => {\n const name = field?.name;\n if (typeof name === 'string') {\n if (seen.has(name)) {\n throw new Error(`defineBlock: duplicate field name \"${name}\" in block \"${block?.name ?? ''}\"`);\n }\n seen.add(name);\n }\n return { ...field, pos: index };\n });\n\n const { folder, ...restBlock } = block ?? {};\n if (folder !== undefined && typeof restBlock.component_group_uuid === 'string') {\n throw new Error(`defineBlock: block \"${block?.name ?? ''}\" sets both \"folder\" and \"component_group_uuid\"; use one`);\n }\n if (typeof folder === 'string' && !folder.split('/').some(segment => segment.trim() !== '')) {\n throw new Error(`defineBlock: block \"${block?.name ?? ''}\" has an empty \"folder\" path`);\n }\n const normalizedFolder = folder === undefined\n ? undefined\n : (folder !== null && typeof folder === 'object' ? folder.path : folder);\n\n return {\n ...BLOCK_DEFAULTS,\n ...restBlock,\n ...(folder !== undefined && { folder: normalizedFolder }),\n fields,\n };\n}\n"],"mappings":";;AAWA,MAAM,iBAAiB;CACrB,IAAI;CACJ,YAAY;CACZ,YAAY;CACZ,SAAS;CACT,aAAa;CACd;AAoED,SAAgB,YAAY,OAAY;CACtC,MAAM,cAAc,MAAM,QAAQ,OAAO,OAAO,GAAG,MAAM,SAAS,EAAE;CACpE,MAAM,uBAAO,IAAI,KAAa;CAC9B,MAAM,SAAS,YAAY,KAAK,OAAY,UAAkB;EAC5D,MAAM,OAAO,OAAO;AACpB,MAAI,OAAO,SAAS,UAAU;AAC5B,OAAI,KAAK,IAAI,KAAK,CAChB,OAAM,IAAI,MAAM,sCAAsC,KAAK,cAAc,OAAO,QAAQ,GAAG,GAAG;AAEhG,QAAK,IAAI,KAAK;;AAEhB,SAAO;GAAE,GAAG;GAAO,KAAK;GAAO;GAC/B;CAEF,MAAM,EAAE,QAAQ,GAAG,cAAc,SAAS,EAAE;AAC5C,KAAI,WAAW,UAAa,OAAO,UAAU,yBAAyB,SACpE,OAAM,IAAI,MAAM,uBAAuB,OAAO,QAAQ,GAAG,0DAA0D;AAErH,KAAI,OAAO,WAAW,YAAY,CAAC,OAAO,MAAM,IAAI,CAAC,MAAK,YAAW,QAAQ,MAAM,KAAK,GAAG,CACzF,OAAM,IAAI,MAAM,uBAAuB,OAAO,QAAQ,GAAG,8BAA8B;CAEzF,MAAM,mBAAmB,WAAW,SAChC,SACC,WAAW,QAAQ,OAAO,WAAW,WAAW,OAAO,OAAO;AAEnE,QAAO;EACL,GAAG;EACH,GAAG;EACH,GAAI,WAAW,UAAa,EAAE,QAAQ,kBAAkB;EACxD;EACD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Block, BlockFields, NestableBlock, RootBlock } from "../generated/types/block.cjs";
|
|
2
2
|
import { Prettify } from "../utils/prettify.cjs";
|
|
3
|
+
import { BlockFolder } from "./define-folder.cjs";
|
|
3
4
|
|
|
4
5
|
//#region src/helpers/define-block.d.ts
|
|
5
6
|
declare const BLOCK_DEFAULTS: {
|
|
@@ -11,18 +12,27 @@ declare const BLOCK_DEFAULTS: {
|
|
|
11
12
|
};
|
|
12
13
|
/** Fields that have safe defaults and may be omitted from block input. */
|
|
13
14
|
type BlockOptional = keyof typeof BLOCK_DEFAULTS;
|
|
14
|
-
|
|
15
|
+
/** Accepted input for a block's `folder`: a folder ref, a raw path string, or `null` to explicitly ungroup. */
|
|
16
|
+
type FolderInput = BlockFolder | string | null;
|
|
17
|
+
/** Normalizes a folder input type to the display path literal it resolves to. */
|
|
18
|
+
type NormalizeFolder<T> = T extends {
|
|
19
|
+
path: infer P extends string;
|
|
20
|
+
} ? P : T;
|
|
21
|
+
type BlockInput<TName extends string = string, TFields extends BlockFields = BlockFields, TIsRoot extends boolean = false, TIsNestable extends boolean = true, TFolder extends FolderInput | undefined = undefined> = Prettify<Omit<Block, 'name' | 'fields' | 'is_root' | 'is_nestable' | 'folder' | BlockOptional> & {
|
|
15
22
|
name: TName;
|
|
16
23
|
fields: TFields;
|
|
17
24
|
is_root?: TIsRoot;
|
|
18
25
|
is_nestable?: TIsNestable;
|
|
26
|
+
folder?: TFolder;
|
|
19
27
|
} & Partial<Pick<Block, Exclude<BlockOptional, 'is_root' | 'is_nestable'>>>>;
|
|
20
|
-
type DefinedBlock<TName extends string, TFields extends BlockFields, TIsRoot extends boolean, TIsNestable extends boolean> = Prettify<Omit<Block, 'name' | 'fields' | 'is_root' | 'is_nestable'> & {
|
|
28
|
+
type DefinedBlock<TName extends string, TFields extends BlockFields, TIsRoot extends boolean, TIsNestable extends boolean, TFolder extends FolderInput | undefined = undefined> = Prettify<Omit<Block, 'name' | 'fields' | 'is_root' | 'is_nestable' | 'folder'> & {
|
|
21
29
|
name: TName;
|
|
22
30
|
fields: TFields;
|
|
23
31
|
is_root: TIsRoot;
|
|
24
32
|
is_nestable: TIsNestable;
|
|
25
|
-
}
|
|
33
|
+
} & (TFolder extends undefined ? unknown : {
|
|
34
|
+
folder: NormalizeFolder<TFolder>;
|
|
35
|
+
})>;
|
|
26
36
|
/**
|
|
27
37
|
* Returns a {@link Block} content-shape definition. The user-facing input is an
|
|
28
38
|
* ordered array of `defineField` calls under `fields`; the array index becomes
|
|
@@ -39,7 +49,7 @@ type DefinedBlock<TName extends string, TFields extends BlockFields, TIsRoot ext
|
|
|
39
49
|
* ],
|
|
40
50
|
* });
|
|
41
51
|
*/
|
|
42
|
-
declare function defineBlock<TName extends string, const TFields extends BlockFields, TIsRoot extends boolean = false, TIsNestable extends boolean = true>(block: BlockInput<TName, TFields, TIsRoot, TIsNestable>): DefinedBlock<TName, TFields, TIsRoot, TIsNestable>;
|
|
52
|
+
declare function defineBlock<TName extends string, const TFields extends BlockFields, TIsRoot extends boolean = false, TIsNestable extends boolean = true, const TFolder extends FolderInput | undefined = undefined>(block: BlockInput<TName, TFields, TIsRoot, TIsNestable, TFolder>): DefinedBlock<TName, TFields, TIsRoot, TIsNestable, TFolder>;
|
|
43
53
|
//#endregion
|
|
44
54
|
export { defineBlock };
|
|
45
55
|
//# sourceMappingURL=define-block.d.cts.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Block, BlockFields, NestableBlock, RootBlock } from "../generated/types/block.mjs";
|
|
2
2
|
import { Prettify } from "../utils/prettify.mjs";
|
|
3
|
+
import { BlockFolder } from "./define-folder.mjs";
|
|
3
4
|
|
|
4
5
|
//#region src/helpers/define-block.d.ts
|
|
5
6
|
declare const BLOCK_DEFAULTS: {
|
|
@@ -11,18 +12,27 @@ declare const BLOCK_DEFAULTS: {
|
|
|
11
12
|
};
|
|
12
13
|
/** Fields that have safe defaults and may be omitted from block input. */
|
|
13
14
|
type BlockOptional = keyof typeof BLOCK_DEFAULTS;
|
|
14
|
-
|
|
15
|
+
/** Accepted input for a block's `folder`: a folder ref, a raw path string, or `null` to explicitly ungroup. */
|
|
16
|
+
type FolderInput = BlockFolder | string | null;
|
|
17
|
+
/** Normalizes a folder input type to the display path literal it resolves to. */
|
|
18
|
+
type NormalizeFolder<T> = T extends {
|
|
19
|
+
path: infer P extends string;
|
|
20
|
+
} ? P : T;
|
|
21
|
+
type BlockInput<TName extends string = string, TFields extends BlockFields = BlockFields, TIsRoot extends boolean = false, TIsNestable extends boolean = true, TFolder extends FolderInput | undefined = undefined> = Prettify<Omit<Block, 'name' | 'fields' | 'is_root' | 'is_nestable' | 'folder' | BlockOptional> & {
|
|
15
22
|
name: TName;
|
|
16
23
|
fields: TFields;
|
|
17
24
|
is_root?: TIsRoot;
|
|
18
25
|
is_nestable?: TIsNestable;
|
|
26
|
+
folder?: TFolder;
|
|
19
27
|
} & Partial<Pick<Block, Exclude<BlockOptional, 'is_root' | 'is_nestable'>>>>;
|
|
20
|
-
type DefinedBlock<TName extends string, TFields extends BlockFields, TIsRoot extends boolean, TIsNestable extends boolean> = Prettify<Omit<Block, 'name' | 'fields' | 'is_root' | 'is_nestable'> & {
|
|
28
|
+
type DefinedBlock<TName extends string, TFields extends BlockFields, TIsRoot extends boolean, TIsNestable extends boolean, TFolder extends FolderInput | undefined = undefined> = Prettify<Omit<Block, 'name' | 'fields' | 'is_root' | 'is_nestable' | 'folder'> & {
|
|
21
29
|
name: TName;
|
|
22
30
|
fields: TFields;
|
|
23
31
|
is_root: TIsRoot;
|
|
24
32
|
is_nestable: TIsNestable;
|
|
25
|
-
}
|
|
33
|
+
} & (TFolder extends undefined ? unknown : {
|
|
34
|
+
folder: NormalizeFolder<TFolder>;
|
|
35
|
+
})>;
|
|
26
36
|
/**
|
|
27
37
|
* Returns a {@link Block} content-shape definition. The user-facing input is an
|
|
28
38
|
* ordered array of `defineField` calls under `fields`; the array index becomes
|
|
@@ -39,7 +49,7 @@ type DefinedBlock<TName extends string, TFields extends BlockFields, TIsRoot ext
|
|
|
39
49
|
* ],
|
|
40
50
|
* });
|
|
41
51
|
*/
|
|
42
|
-
declare function defineBlock<TName extends string, const TFields extends BlockFields, TIsRoot extends boolean = false, TIsNestable extends boolean = true>(block: BlockInput<TName, TFields, TIsRoot, TIsNestable>): DefinedBlock<TName, TFields, TIsRoot, TIsNestable>;
|
|
52
|
+
declare function defineBlock<TName extends string, const TFields extends BlockFields, TIsRoot extends boolean = false, TIsNestable extends boolean = true, const TFolder extends FolderInput | undefined = undefined>(block: BlockInput<TName, TFields, TIsRoot, TIsNestable, TFolder>): DefinedBlock<TName, TFields, TIsRoot, TIsNestable, TFolder>;
|
|
43
53
|
//#endregion
|
|
44
54
|
export { defineBlock };
|
|
45
55
|
//# sourceMappingURL=define-block.d.mts.map
|
|
@@ -20,9 +20,14 @@ function defineBlock(block) {
|
|
|
20
20
|
pos: index
|
|
21
21
|
};
|
|
22
22
|
});
|
|
23
|
+
const { folder, ...restBlock } = block ?? {};
|
|
24
|
+
if (folder !== void 0 && typeof restBlock.component_group_uuid === "string") throw new Error(`defineBlock: block "${block?.name ?? ""}" sets both "folder" and "component_group_uuid"; use one`);
|
|
25
|
+
if (typeof folder === "string" && !folder.split("/").some((segment) => segment.trim() !== "")) throw new Error(`defineBlock: block "${block?.name ?? ""}" has an empty "folder" path`);
|
|
26
|
+
const normalizedFolder = folder === void 0 ? void 0 : folder !== null && typeof folder === "object" ? folder.path : folder;
|
|
23
27
|
return {
|
|
24
28
|
...BLOCK_DEFAULTS,
|
|
25
|
-
...
|
|
29
|
+
...restBlock,
|
|
30
|
+
...folder !== void 0 && { folder: normalizedFolder },
|
|
26
31
|
fields
|
|
27
32
|
};
|
|
28
33
|
}
|