@storyblok/schema 0.1.0-alpha.0 → 0.1.0-alpha.2

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.
Files changed (170) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  2. package/dist/field-plugins/index.cjs +4 -0
  3. package/dist/field-plugins/index.d.cts +2 -0
  4. package/dist/field-plugins/index.d.mts +2 -0
  5. package/dist/field-plugins/index.mjs +3 -0
  6. package/dist/field-plugins/storyblok-color-field.cjs +32 -0
  7. package/dist/field-plugins/storyblok-color-field.cjs.map +1 -0
  8. package/dist/field-plugins/storyblok-color-field.d.cts +16 -0
  9. package/dist/field-plugins/storyblok-color-field.d.mts +16 -0
  10. package/dist/field-plugins/storyblok-color-field.mjs +32 -0
  11. package/dist/field-plugins/storyblok-color-field.mjs.map +1 -0
  12. package/dist/generated/capi/types.gen.d.cts +1 -126
  13. package/dist/generated/capi/types.gen.d.mts +1 -126
  14. package/dist/generated/mapi/_internal.gen.d.cts +1 -171
  15. package/dist/generated/mapi/_internal.gen.d.mts +1 -171
  16. package/dist/generated/overlay/zod.gen.cjs +407 -0
  17. package/dist/generated/overlay/zod.gen.cjs.map +1 -0
  18. package/dist/generated/overlay/zod.gen.mjs +402 -0
  19. package/dist/generated/overlay/zod.gen.mjs.map +1 -0
  20. package/dist/generated/types/block.d.cts +27 -14
  21. package/dist/generated/types/block.d.mts +27 -14
  22. package/dist/generated/types/field.d.cts +48 -17
  23. package/dist/generated/types/field.d.mts +48 -17
  24. package/dist/generated/types/mapi-story.d.cts +6 -10
  25. package/dist/generated/types/mapi-story.d.mts +6 -10
  26. package/dist/generated/types/story.d.cts +3 -3
  27. package/dist/generated/types/story.d.mts +3 -3
  28. package/dist/helpers/define-block.cjs +10 -28
  29. package/dist/helpers/define-block.cjs.map +1 -1
  30. package/dist/helpers/define-block.d.cts +14 -31
  31. package/dist/helpers/define-block.d.mts +14 -31
  32. package/dist/helpers/define-block.mjs +11 -27
  33. package/dist/helpers/define-block.mjs.map +1 -1
  34. package/dist/helpers/define-datasource.cjs +0 -16
  35. package/dist/helpers/define-datasource.cjs.map +1 -1
  36. package/dist/helpers/define-datasource.d.cts +14 -23
  37. package/dist/helpers/define-datasource.d.mts +14 -23
  38. package/dist/helpers/define-datasource.mjs +1 -15
  39. package/dist/helpers/define-datasource.mjs.map +1 -1
  40. package/dist/helpers/define-field-plugin.cjs +21 -0
  41. package/dist/helpers/define-field-plugin.cjs.map +1 -0
  42. package/dist/helpers/define-field-plugin.d.cts +33 -0
  43. package/dist/helpers/define-field-plugin.d.mts +33 -0
  44. package/dist/helpers/define-field-plugin.mjs +20 -0
  45. package/dist/helpers/define-field-plugin.mjs.map +1 -0
  46. package/dist/helpers/define-field.cjs +11 -11
  47. package/dist/helpers/define-field.cjs.map +1 -1
  48. package/dist/helpers/define-field.d.cts +46 -85
  49. package/dist/helpers/define-field.d.mts +46 -85
  50. package/dist/helpers/define-field.mjs +12 -11
  51. package/dist/helpers/define-field.mjs.map +1 -1
  52. package/dist/helpers/define-schema.cjs +22 -0
  53. package/dist/helpers/define-schema.cjs.map +1 -0
  54. package/dist/helpers/define-schema.d.cts +28 -0
  55. package/dist/helpers/define-schema.d.mts +28 -0
  56. package/dist/helpers/define-schema.mjs +21 -0
  57. package/dist/helpers/define-schema.mjs.map +1 -0
  58. package/dist/helpers/schema-type.d.cts +21 -17
  59. package/dist/helpers/schema-type.d.mts +21 -17
  60. package/dist/index.cjs +10 -47
  61. package/dist/index.d.cts +13 -20
  62. package/dist/index.d.mts +13 -20
  63. package/dist/index.mjs +8 -15
  64. package/dist/utils/is-record.cjs +10 -0
  65. package/dist/utils/is-record.cjs.map +1 -0
  66. package/dist/utils/is-record.mjs +9 -0
  67. package/dist/utils/is-record.mjs.map +1 -0
  68. package/dist/validators/create-story-validator.cjs +37 -0
  69. package/dist/validators/create-story-validator.cjs.map +1 -0
  70. package/dist/validators/create-story-validator.d.cts +18 -0
  71. package/dist/validators/create-story-validator.d.mts +18 -0
  72. package/dist/validators/create-story-validator.mjs +37 -0
  73. package/dist/validators/create-story-validator.mjs.map +1 -0
  74. package/dist/validators/internal-schemas.cjs +1 -0
  75. package/dist/validators/internal-schemas.mjs +3 -0
  76. package/dist/validators/shapes.cjs +12 -0
  77. package/dist/validators/shapes.cjs.map +1 -0
  78. package/dist/validators/shapes.d.cts +71 -0
  79. package/dist/validators/shapes.d.mts +71 -0
  80. package/dist/validators/shapes.mjs +12 -0
  81. package/dist/validators/shapes.mjs.map +1 -0
  82. package/dist/validators/types.d.cts +25 -0
  83. package/dist/validators/types.d.mts +25 -0
  84. package/dist/validators/validate-schema.cjs +145 -0
  85. package/dist/validators/validate-schema.cjs.map +1 -0
  86. package/dist/validators/validate-schema.d.cts +19 -0
  87. package/dist/validators/validate-schema.d.mts +19 -0
  88. package/dist/validators/validate-schema.mjs +145 -0
  89. package/dist/validators/validate-schema.mjs.map +1 -0
  90. package/dist/validators/validate-story.cjs +285 -0
  91. package/dist/validators/validate-story.cjs.map +1 -0
  92. package/dist/validators/validate-story.d.cts +17 -0
  93. package/dist/validators/validate-story.d.mts +17 -0
  94. package/dist/validators/validate-story.mjs +284 -0
  95. package/dist/validators/validate-story.mjs.map +1 -0
  96. package/package.json +17 -2
  97. package/dist/generated/mapi/types.gen.d.cts +0 -1272
  98. package/dist/generated/mapi/types.gen.d.mts +0 -1272
  99. package/dist/helpers/create-story-helpers.cjs +0 -42
  100. package/dist/helpers/create-story-helpers.cjs.map +0 -1
  101. package/dist/helpers/create-story-helpers.d.cts +0 -50
  102. package/dist/helpers/create-story-helpers.d.mts +0 -50
  103. package/dist/helpers/create-story-helpers.mjs +0 -42
  104. package/dist/helpers/create-story-helpers.mjs.map +0 -1
  105. package/dist/helpers/define-asset-folder.cjs +0 -46
  106. package/dist/helpers/define-asset-folder.cjs.map +0 -1
  107. package/dist/helpers/define-asset-folder.d.cts +0 -33
  108. package/dist/helpers/define-asset-folder.d.mts +0 -33
  109. package/dist/helpers/define-asset-folder.mjs +0 -43
  110. package/dist/helpers/define-asset-folder.mjs.map +0 -1
  111. package/dist/helpers/define-asset.cjs +0 -60
  112. package/dist/helpers/define-asset.cjs.map +0 -1
  113. package/dist/helpers/define-asset.d.cts +0 -32
  114. package/dist/helpers/define-asset.d.mts +0 -32
  115. package/dist/helpers/define-asset.mjs +0 -57
  116. package/dist/helpers/define-asset.mjs.map +0 -1
  117. package/dist/helpers/define-block-folder.cjs +0 -44
  118. package/dist/helpers/define-block-folder.cjs.map +0 -1
  119. package/dist/helpers/define-block-folder.d.cts +0 -34
  120. package/dist/helpers/define-block-folder.d.mts +0 -34
  121. package/dist/helpers/define-block-folder.mjs +0 -41
  122. package/dist/helpers/define-block-folder.mjs.map +0 -1
  123. package/dist/helpers/define-datasource-entry.cjs +0 -47
  124. package/dist/helpers/define-datasource-entry.cjs.map +0 -1
  125. package/dist/helpers/define-datasource-entry.d.cts +0 -49
  126. package/dist/helpers/define-datasource-entry.d.mts +0 -49
  127. package/dist/helpers/define-datasource-entry.mjs +0 -43
  128. package/dist/helpers/define-datasource-entry.mjs.map +0 -1
  129. package/dist/helpers/define-internal-tag.cjs +0 -41
  130. package/dist/helpers/define-internal-tag.cjs.map +0 -1
  131. package/dist/helpers/define-internal-tag.d.cts +0 -34
  132. package/dist/helpers/define-internal-tag.d.mts +0 -34
  133. package/dist/helpers/define-internal-tag.mjs +0 -38
  134. package/dist/helpers/define-internal-tag.mjs.map +0 -1
  135. package/dist/helpers/define-link.cjs +0 -23
  136. package/dist/helpers/define-link.cjs.map +0 -1
  137. package/dist/helpers/define-link.d.cts +0 -32
  138. package/dist/helpers/define-link.d.mts +0 -32
  139. package/dist/helpers/define-link.mjs +0 -22
  140. package/dist/helpers/define-link.mjs.map +0 -1
  141. package/dist/helpers/define-preset.cjs +0 -44
  142. package/dist/helpers/define-preset.cjs.map +0 -1
  143. package/dist/helpers/define-preset.d.cts +0 -35
  144. package/dist/helpers/define-preset.d.mts +0 -35
  145. package/dist/helpers/define-preset.mjs +0 -41
  146. package/dist/helpers/define-preset.mjs.map +0 -1
  147. package/dist/helpers/define-space.cjs +0 -47
  148. package/dist/helpers/define-space.cjs.map +0 -1
  149. package/dist/helpers/define-space.d.cts +0 -31
  150. package/dist/helpers/define-space.d.mts +0 -31
  151. package/dist/helpers/define-space.mjs +0 -44
  152. package/dist/helpers/define-space.mjs.map +0 -1
  153. package/dist/helpers/define-story.cjs +0 -122
  154. package/dist/helpers/define-story.cjs.map +0 -1
  155. package/dist/helpers/define-story.d.cts +0 -135
  156. package/dist/helpers/define-story.d.mts +0 -135
  157. package/dist/helpers/define-story.mjs +0 -118
  158. package/dist/helpers/define-story.mjs.map +0 -1
  159. package/dist/helpers/define-tag.cjs +0 -13
  160. package/dist/helpers/define-tag.cjs.map +0 -1
  161. package/dist/helpers/define-tag.d.cts +0 -23
  162. package/dist/helpers/define-tag.d.mts +0 -23
  163. package/dist/helpers/define-tag.mjs +0 -12
  164. package/dist/helpers/define-tag.mjs.map +0 -1
  165. package/dist/helpers/define-user.cjs +0 -50
  166. package/dist/helpers/define-user.cjs.map +0 -1
  167. package/dist/helpers/define-user.d.cts +0 -26
  168. package/dist/helpers/define-user.d.mts +0 -26
  169. package/dist/helpers/define-user.mjs +0 -48
  170. package/dist/helpers/define-user.mjs.map +0 -1
@@ -1,99 +1,60 @@
1
1
  import { AssetFieldValue, Field, MultilinkFieldValue, PluginFieldValue, RichtextFieldValue, TableFieldValue } from "../generated/overlay/_internal.gen.mjs";
2
- import { Block } from "../generated/types/block.mjs";
2
+ import { BlockContent, BlockContentInput, BlocksFieldValue, FieldType, FieldValue, FieldValueInput } from "../generated/types/field.mjs";
3
3
  import { Prettify } from "../utils/prettify.mjs";
4
4
 
5
5
  //#region src/helpers/define-field.d.ts
6
- /** Loose variant of the generated `BlokContent` with `_uid` optional used as the fallback for write operations when no block union is provided. */
7
- type BlokContentLoose = {
8
- _uid?: string;
9
- component: string;
10
- _editable?: string | undefined;
11
- } & {
12
- [key: string]: string | number | boolean | Array<string | AssetFieldValue | BlokContentLoose> | AssetFieldValue | MultilinkFieldValue | TableFieldValue | RichtextFieldValue | PluginFieldValue | undefined;
6
+ /** A block reference for `allow`: a defined block object or its name. */
7
+ type AllowRef = string | {
8
+ name: string;
13
9
  };
14
- /** Keys in a schema record that have `required: true`. */
15
- type RequiredFieldKeys<T> = { [K in keyof T]: T[K] extends {
16
- required: true;
17
- } ? K : never }[keyof T];
18
- /** Keys in a schema record that do NOT have `required: true`. */
19
- type OptionalFieldKeys<T> = Exclude<keyof T, RequiredFieldKeys<T>>;
20
- /**
21
- * Builds the content object for a single block instance as returned by the
22
- * Storyblok Content Delivery API. Includes `_uid` (always present in API
23
- * responses) and respects required/optional field semantics.
24
- *
25
- * For write operations (creating/updating stories), use {@link BlockContentInput}
26
- * instead, which omits `_uid` since Storyblok generates it automatically.
27
- */
28
- type BlockContent<TBlock extends Block = Block, TBlocks = false> = TBlock extends any ? {
29
- _uid: string;
30
- component: TBlock['name'];
31
- } & { [K in RequiredFieldKeys<TBlock['schema']>]: FieldValue<NonNullable<TBlock['schema'][K]>, TBlocks> } & { [K in OptionalFieldKeys<TBlock['schema']>]?: FieldValue<NonNullable<TBlock['schema'][K]>, TBlocks> | null } : never;
32
- /**
33
- * Input variant of {@link BlockContent} for write operations (creating/updating
34
- * stories via the MAPI). `_uid` is optional — Storyblok generates it
35
- * automatically when omitted. Nested bloks fields also use this input variant
36
- * so that deeply nested blocks do not require `_uid` either.
37
- */
38
- type BlockContentInput<TBlock extends Block = Block, TBlocks = false> = TBlock extends any ? {
39
- _uid?: string;
40
- component: TBlock['name'];
41
- } & { [K in RequiredFieldKeys<TBlock['schema']>]: FieldValueInput<NonNullable<TBlock['schema'][K]>, TBlocks> } & { [K in OptionalFieldKeys<TBlock['schema']>]?: FieldValueInput<NonNullable<TBlock['schema'][K]>, TBlocks> | null } : never;
42
- type BlocksFieldValue<TBlock extends Block = Block, TBlocks = false> = BlockContent<TBlock, TBlocks>[];
43
- /** Union of all valid Storyblok field type discriminants (e.g., `text`, `bloks`). */
44
- type FieldType = Field['type'];
45
- /** Maps each field type discriminant to its runtime content value type. */
46
- interface FieldTypeValueMap {
47
- text: string;
48
- textarea: string;
49
- richtext: RichtextFieldValue;
50
- markdown: string;
51
- number: number;
52
- datetime: string;
53
- boolean: boolean;
54
- option: string;
55
- options: string[];
56
- asset: AssetFieldValue;
57
- multiasset: AssetFieldValue[];
58
- multilink: MultilinkFieldValue;
59
- bloks: BlockContent[];
60
- table: TableFieldValue;
61
- section: never;
62
- tab: never;
63
- custom: PluginFieldValue;
64
- }
10
+ /** A datasource reference for `datasource`: a defined datasource object or its slug. */
11
+ type DatasourceRef = string | {
12
+ slug: string;
13
+ };
14
+ type NameOf<T> = T extends string ? T : T extends {
15
+ name: infer N extends string;
16
+ } ? N : never;
17
+ type SlugOf<T> = T extends string ? T : T extends {
18
+ slug: infer S extends string;
19
+ } ? S : never;
20
+ /** Normalizes an `allow` input (ref, name, or array thereof) to a tuple of block-name strings. */
21
+ type NormalizeAllow<T> = T extends readonly any[] ? { [I in keyof T]: NameOf<T[I]> } : readonly [NameOf<T>];
65
22
  /**
66
- * Checks whether a block is nestable, defaulting to `true` when
67
- * `is_nestable` is absent or undefined.
23
+ * Field config accepted by {@link defineField}: the content-shape field plus the
24
+ * DSL reference keys. `allow` replaces the wire `component_whitelist`; `datasource`
25
+ * holds the datasource ref/slug (the wire `source` selector still passes through).
68
26
  */
69
- type IsNestable<T> = T extends {
70
- is_nestable: false;
71
- } ? false : T extends {
72
- is_nestable: true;
73
- } ? true : true;
74
- type ApplyWhitelist<TField, TBlocks> = TField extends {
75
- component_whitelist: ReadonlyArray<infer TWhitelisted extends string>;
76
- } ? TBlocks extends {
77
- name: TWhitelisted;
78
- } ? TBlocks : never : TBlocks extends any ? IsNestable<TBlocks> extends true ? TBlocks : never : never;
79
- /** Resolves a field definition to its runtime content value type (read). */
80
- type FieldValue<TField extends Field = Field, TBlocks = false> = Prettify<TField extends {
81
- type: 'bloks';
82
- } ? [TBlocks] extends [never] ? BlockContent[] : [TBlocks] extends [Block] ? BlockContent<ApplyWhitelist<TField, TBlocks>, TBlocks>[] : BlockContent[] : FieldTypeValueMap[TField['type']]>;
83
- /** Resolves a field definition to its input value type (write). Nested bloks use {@link BlockContentInput}. */
84
- type FieldValueInput<TField extends Field = Field, TBlocks = false> = Prettify<TField extends {
85
- type: 'bloks';
86
- } ? [TBlocks] extends [never] ? BlokContentLoose[] : [TBlocks] extends [Block] ? BlockContentInput<ApplyWhitelist<TField, TBlocks>, TBlocks>[] : BlokContentLoose[] : FieldTypeValueMap[TField['type']]>;
27
+ type FieldInput = Field & {
28
+ allow?: AllowRef | readonly AllowRef[];
29
+ datasource?: DatasourceRef;
30
+ required?: boolean;
31
+ };
32
+ /** Result of {@link defineField}: the field stamped with `name`, with refs normalized to strings. */
33
+ type DefinedField<TName extends string, TField extends FieldInput> = Prettify<Omit<TField, 'allow' | 'datasource' | 'name'> & {
34
+ name: TName;
35
+ } & (TField extends {
36
+ allow: infer A;
37
+ } ? {
38
+ allow: NormalizeAllow<A>;
39
+ } : unknown) & (TField extends {
40
+ datasource: infer D;
41
+ } ? {
42
+ datasource: SlugOf<D>;
43
+ } : unknown)>;
87
44
  /**
88
- * Returns a {@link Field} stamped with the given `name`. Use inside a
89
- * {@link defineBlock} `schema` array `pos` is inferred from array index.
45
+ * Returns a {@link Field} stamped with the given `name`, normalizing reference
46
+ * keys to strings so everything downstream sees plain names/slugs. A thin,
47
+ * strongly-typed identity helper — it does not validate or throw.
48
+ *
49
+ * Use inside a {@link defineBlock} `fields` array — `pos` is injected from the
50
+ * array index by `defineBlock`.
90
51
  *
91
52
  * @example
92
53
  * defineField('headline', { type: 'text', max_length: 100, required: true });
54
+ * defineField('body', { type: 'bloks', allow: [heroBlock, 'teaser'] });
55
+ * defineField('theme', { type: 'option', source: 'internal', datasource: colors });
93
56
  */
94
- declare const defineField: <const TName extends string, const TField extends Field>(name: TName, field: TField) => Omit<TField, "name"> & {
95
- name: TName;
96
- };
57
+ declare function defineField<const TName extends string, const TField extends FieldInput>(name: TName, field: TField): DefinedField<TName, TField>;
97
58
  //#endregion
98
- export { BlockContent, BlockContentInput, BlocksFieldValue, FieldType, FieldValue, FieldValueInput, defineField };
59
+ export { DefinedField, FieldInput, defineField };
99
60
  //# sourceMappingURL=define-field.d.mts.map
@@ -1,15 +1,16 @@
1
+ import { isRecord } from "../utils/is-record.mjs";
2
+
1
3
  //#region src/helpers/define-field.ts
2
- /**
3
- * Returns a {@link Field} stamped with the given `name`. Use inside a
4
- * {@link defineBlock} `schema` array — `pos` is inferred from array index.
5
- *
6
- * @example
7
- * defineField('headline', { type: 'text', max_length: 100, required: true });
8
- */
9
- const defineField = (name, field) => ({
10
- ...field,
11
- name
12
- });
4
+ function defineField(name, field) {
5
+ const { allow, datasource, ...rest } = field;
6
+ const normalized = {
7
+ ...rest,
8
+ name
9
+ };
10
+ if (allow !== void 0) normalized.allow = (Array.isArray(allow) ? allow : [allow]).map((ref) => typeof ref === "string" ? ref : isRecord(ref) ? ref.name : void 0);
11
+ if (datasource !== void 0) normalized.datasource = typeof datasource === "string" ? datasource : isRecord(datasource) ? datasource.slug : void 0;
12
+ return normalized;
13
+ }
13
14
 
14
15
  //#endregion
15
16
  export { defineField };
@@ -1 +1 @@
1
- {"version":3,"file":"define-field.mjs","names":[],"sources":["../../src/helpers/define-field.ts"],"sourcesContent":["import type {\n AssetFieldValue,\n Field,\n MultilinkFieldValue,\n PluginFieldValue,\n RichtextFieldValue,\n TableFieldValue,\n} from '../generated/types/field';\nimport type { Block } from './define-block';\nimport type { Prettify } from '../utils/prettify';\n\nexport type { Field };\n\n/** Loose variant of the generated `BlokContent` with `_uid` optional used as the fallback for write operations when no block union is provided. */\ntype BlokContentLoose = {\n _uid?: string;\n component: string;\n _editable?: string | undefined;\n} & {\n [key: string]:\n | string\n | number\n | boolean\n | Array<string | AssetFieldValue | BlokContentLoose>\n | AssetFieldValue\n | MultilinkFieldValue\n | TableFieldValue\n | RichtextFieldValue\n | PluginFieldValue\n | undefined;\n};\n\n/** Keys in a schema record that have `required: true`. */\ntype RequiredFieldKeys<T> = {\n [K in keyof T]: T[K] extends { required: true } ? K : never\n}[keyof T];\n\n/** Keys in a schema record that do NOT have `required: true`. */\ntype OptionalFieldKeys<T> = Exclude<keyof T, RequiredFieldKeys<T>>;\n\n/**\n * Builds the content object for a single block instance as returned by the\n * Storyblok Content Delivery API. Includes `_uid` (always present in API\n * responses) and respects required/optional field semantics.\n *\n * For write operations (creating/updating stories), use {@link BlockContentInput}\n * instead, which omits `_uid` since Storyblok generates it automatically.\n */\nexport type BlockContent<TBlock extends Block = Block, TBlocks = false> = TBlock extends any\n ? { _uid: string; component: TBlock['name'] }\n & {\n [K in RequiredFieldKeys<TBlock['schema']>]: FieldValue<NonNullable<TBlock['schema'][K]>, TBlocks>\n }\n & {\n [K in OptionalFieldKeys<TBlock['schema']>]?: FieldValue<NonNullable<TBlock['schema'][K]>, TBlocks> | null\n }\n : never;\n\n/**\n * Input variant of {@link BlockContent} for write operations (creating/updating\n * stories via the MAPI). `_uid` is optional Storyblok generates it\n * automatically when omitted. Nested bloks fields also use this input variant\n * so that deeply nested blocks do not require `_uid` either.\n */\nexport type BlockContentInput<TBlock extends Block = Block, TBlocks = false> = TBlock extends any\n ? { _uid?: string; component: TBlock['name'] }\n & {\n [K in RequiredFieldKeys<TBlock['schema']>]: FieldValueInput<NonNullable<TBlock['schema'][K]>, TBlocks>\n }\n & {\n [K in OptionalFieldKeys<TBlock['schema']>]?: FieldValueInput<NonNullable<TBlock['schema'][K]>, TBlocks> | null\n }\n : never;\n\nexport type BlocksFieldValue<\n TBlock extends Block = Block,\n TBlocks = false,\n> = BlockContent<TBlock, TBlocks>[];\n\nexport type { AssetFieldValue, MultilinkFieldValue, PluginFieldValue, RichtextFieldValue, TableFieldValue };\n\n/** Union of all valid Storyblok field type discriminants (e.g., `text`, `bloks`). */\nexport type FieldType = Field['type'];\n\n/** Maps each field type discriminant to its runtime content value type. */\ninterface FieldTypeValueMap {\n text: string;\n textarea: string;\n richtext: RichtextFieldValue;\n markdown: string;\n number: number;\n datetime: string;\n boolean: boolean;\n option: string;\n options: string[];\n asset: AssetFieldValue;\n multiasset: AssetFieldValue[];\n multilink: MultilinkFieldValue;\n bloks: BlockContent[];\n table: TableFieldValue;\n section: never;\n tab: never;\n custom: PluginFieldValue;\n}\n\n/**\n * Checks whether a block is nestable, defaulting to `true` when\n * `is_nestable` is absent or undefined.\n */\ntype IsNestable<T> =\n T extends { is_nestable: false } ? false\n : T extends { is_nestable: true } ? true\n : true; // default: nestable when is_nestable is not specified\n\ntype ApplyWhitelist<TField, TBlocks> = TField extends { component_whitelist: ReadonlyArray<infer TWhitelisted extends string> }\n // With whitelist: filter by block name (distributive over TBlocks)\n ? TBlocks extends { name: TWhitelisted } ? TBlocks : never\n // No whitelist: filter by nestability (distributive over TBlocks)\n : TBlocks extends any\n ? IsNestable<TBlocks> extends true ? TBlocks : never\n : never;\n\n/** Resolves a field definition to its runtime content value type (read). */\nexport type FieldValue<\n TField extends Field = Field,\n TBlocks = false,\n> = Prettify<\n TField extends { type: 'bloks' }\n // Bloks fieldguard against `never` first (it satisfies `[never] extends [X]`\n // for all X, which would incorrectly enter the typed path with empty results).\n ? [TBlocks] extends [never]\n ? BlockContent[]\n : [TBlocks] extends [Block]\n ? BlockContent<ApplyWhitelist<TField, TBlocks>, TBlocks>[]\n : BlockContent[]\n // No bloks field\n : FieldTypeValueMap[TField['type']]\n>;\n\n/** Resolves a field definition to its input value type (write). Nested bloks use {@link BlockContentInput}. */\nexport type FieldValueInput<\n TField extends Field = Field,\n TBlocks = false,\n> = Prettify<\n TField extends { type: 'bloks' }\n ? [TBlocks] extends [never]\n ? BlokContentLoose[]\n : [TBlocks] extends [Block]\n ? BlockContentInput<ApplyWhitelist<TField, TBlocks>, TBlocks>[]\n : BlokContentLoose[]\n : FieldTypeValueMap[TField['type']]\n>;\n\n/**\n * Returns a {@link Field} stamped with the given `name`. Use inside a\n * {@link defineBlock} `schema` array `pos` is inferred from array index.\n *\n * @example\n * defineField('headline', { type: 'text', max_length: 100, required: true });\n */\nexport const defineField = <\n const TName extends string,\n const TField extends Field,\n>(\n name: TName,\n field: TField,\n): Omit<TField, 'name'> & { name: TName } => ({ ...field, name });\n"],"mappings":";;;;;;;;AAgKA,MAAa,eAIX,MACA,WAC4C;CAAE,GAAG;CAAO;CAAM"}
1
+ {"version":3,"file":"define-field.mjs","names":[],"sources":["../../src/helpers/define-field.ts"],"sourcesContent":["import type {\n AssetFieldValue,\n BlockContent,\n BlockContentInput,\n BlocksFieldValue,\n Field,\n FieldType,\n FieldValue,\n FieldValueInput,\n MultilinkFieldValue,\n PluginFieldValue,\n RichtextFieldValue,\n TableFieldValue,\n} from '../generated/types/field';\nimport type { Prettify } from '../utils/prettify';\nimport { isRecord } from '../utils/is-record';\n\nexport type {\n AssetFieldValue,\n BlockContent,\n BlockContentInput,\n BlocksFieldValue,\n Field,\n FieldType,\n FieldValue,\n FieldValueInput,\n MultilinkFieldValue,\n PluginFieldValue,\n RichtextFieldValue,\n TableFieldValue,\n};\n\n/** A block reference for `allow`: a defined block object or its name. */\ntype AllowRef = string | { name: string };\n/** A datasource reference for `datasource`: a defined datasource object or its slug. */\ntype DatasourceRef = string | { slug: string };\n\ntype NameOf<T> = T extends string ? T : T extends { name: infer N extends string } ? N : never;\ntype SlugOf<T> = T extends string ? T : T extends { slug: infer S extends string } ? S : never;\n\n/** Normalizes an `allow` input (ref, name, or array thereof) to a tuple of block-name strings. */\ntype NormalizeAllow<T> = T extends readonly any[]\n ? { [I in keyof T]: NameOf<T[I]> }\n : readonly [NameOf<T>];\n\n/**\n * Field config accepted by {@link defineField}: the content-shape field plus the\n * DSL reference keys. `allow` replaces the wire `component_whitelist`; `datasource`\n * holds the datasource ref/slug (the wire `source` selector still passes through).\n */\nexport type FieldInput = Field & {\n allow?: AllowRef | readonly AllowRef[];\n datasource?: DatasourceRef;\n required?: boolean;\n};\n\n/** Result of {@link defineField}: the field stamped with `name`, with refs normalized to strings. */\nexport type DefinedField<TName extends string, TField extends FieldInput> = Prettify<\n Omit<TField, 'allow' | 'datasource' | 'name'>\n & { name: TName }\n & (TField extends { allow: infer A } ? { allow: NormalizeAllow<A> } : unknown)\n & (TField extends { datasource: infer D } ? { datasource: SlugOf<D> } : unknown)\n>;\n\n/**\n * Returns a {@link Field} stamped with the given `name`, normalizing reference\n * keys to strings so everything downstream sees plain names/slugs. A thin,\n * strongly-typed identity helper it does not validate or throw.\n *\n * Use inside a {@link defineBlock} `fields` array — `pos` is injected from the\n * array index by `defineBlock`.\n *\n * @example\n * defineField('headline', { type: 'text', max_length: 100, required: true });\n * defineField('body', { type: 'bloks', allow: [heroBlock, 'teaser'] });\n * defineField('theme', { type: 'option', source: 'internal', datasource: colors });\n */\nexport function defineField<\n const TName extends string,\n const TField extends FieldInput,\n>(name: TName, field: TField): DefinedField<TName, TField>;\nexport function defineField(name: string, field: Record<string, unknown>): Record<string, unknown> {\n const { allow, datasource, ...rest } = field;\n const normalized: Record<string, unknown> = { ...rest, name };\n if (allow !== undefined) {\n const refs = Array.isArray(allow) ? allow : [allow];\n normalized.allow = refs.map(ref => (typeof ref === 'string' ? ref : isRecord(ref) ? ref.name : undefined));\n }\n if (datasource !== undefined) {\n normalized.datasource = typeof datasource === 'string' ? datasource : isRecord(datasource) ? datasource.slug : undefined;\n }\n return normalized;\n}\n"],"mappings":";;;AAiFA,SAAgB,YAAY,MAAc,OAAyD;CACjG,MAAM,EAAE,OAAO,YAAY,GAAG,SAAS;CACvC,MAAM,aAAsC;EAAE,GAAG;EAAM;EAAM;AAC7D,KAAI,UAAU,OAEZ,YAAW,SADE,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,MAAM,EAC3B,KAAI,QAAQ,OAAO,QAAQ,WAAW,MAAM,SAAS,IAAI,GAAG,IAAI,OAAO,OAAW;AAE5G,KAAI,eAAe,OACjB,YAAW,aAAa,OAAO,eAAe,WAAW,aAAa,SAAS,WAAW,GAAG,WAAW,OAAO;AAEjH,QAAO"}
@@ -0,0 +1,22 @@
1
+
2
+ //#region src/helpers/define-schema.ts
3
+ /**
4
+ * Typed identity wrapper for a schema object, consistent with the other
5
+ * `define*` helpers. Preserves the exact literal shape via `const` inference so
6
+ * {@link Schema} can derive block, datasource, and field-plugin types from
7
+ * `typeof schema`. Does not validate or transform.
8
+ *
9
+ * @example
10
+ * export const schema = defineSchema({
11
+ * blocks: { pageBlock, heroBlock },
12
+ * datasources: { colorsDatasource },
13
+ * fieldPlugins: { colorPicker },
14
+ * });
15
+ */
16
+ function defineSchema(schema) {
17
+ return schema;
18
+ }
19
+
20
+ //#endregion
21
+ exports.defineSchema = defineSchema;
22
+ //# sourceMappingURL=define-schema.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-schema.cjs","names":[],"sources":["../../src/helpers/define-schema.ts"],"sourcesContent":["import type { Block } from './define-block';\nimport type { Datasource } from './define-datasource';\nimport type { FieldPlugin } from './define-field-plugin';\n\n/** Minimal shape accepted by {@link defineSchema}; extra keys pass through unchanged. */\nexport interface SchemaConfig {\n blocks: Record<string, Block>;\n datasources?: Record<string, Datasource>;\n fieldPlugins?: Record<string, FieldPlugin>;\n}\n\n/**\n * Typed identity wrapper for a schema object, consistent with the other\n * `define*` helpers. Preserves the exact literal shape via `const` inference so\n * {@link Schema} can derive block, datasource, and field-plugin types from\n * `typeof schema`. Does not validate or transform.\n *\n * @example\n * export const schema = defineSchema({\n * blocks: { pageBlock, heroBlock },\n * datasources: { colorsDatasource },\n * fieldPlugins: { colorPicker },\n * });\n */\nexport function defineSchema<const T extends SchemaConfig>(schema: T): T {\n return schema;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAwBA,SAAgB,aAA2C,QAAc;AACvE,QAAO"}
@@ -0,0 +1,28 @@
1
+ import { Block } from "../generated/types/block.cjs";
2
+ import { Datasource } from "./define-datasource.cjs";
3
+ import { FieldPlugin } from "./define-field-plugin.cjs";
4
+
5
+ //#region src/helpers/define-schema.d.ts
6
+ /** Minimal shape accepted by {@link defineSchema}; extra keys pass through unchanged. */
7
+ interface SchemaConfig {
8
+ blocks: Record<string, Block>;
9
+ datasources?: Record<string, Datasource>;
10
+ fieldPlugins?: Record<string, FieldPlugin>;
11
+ }
12
+ /**
13
+ * Typed identity wrapper for a schema object, consistent with the other
14
+ * `define*` helpers. Preserves the exact literal shape via `const` inference so
15
+ * {@link Schema} can derive block, datasource, and field-plugin types from
16
+ * `typeof schema`. Does not validate or transform.
17
+ *
18
+ * @example
19
+ * export const schema = defineSchema({
20
+ * blocks: { pageBlock, heroBlock },
21
+ * datasources: { colorsDatasource },
22
+ * fieldPlugins: { colorPicker },
23
+ * });
24
+ */
25
+ declare function defineSchema<const T extends SchemaConfig>(schema: T): T;
26
+ //#endregion
27
+ export { SchemaConfig, defineSchema };
28
+ //# sourceMappingURL=define-schema.d.cts.map
@@ -0,0 +1,28 @@
1
+ import { Block } from "../generated/types/block.mjs";
2
+ import { Datasource } from "./define-datasource.mjs";
3
+ import { FieldPlugin } from "./define-field-plugin.mjs";
4
+
5
+ //#region src/helpers/define-schema.d.ts
6
+ /** Minimal shape accepted by {@link defineSchema}; extra keys pass through unchanged. */
7
+ interface SchemaConfig {
8
+ blocks: Record<string, Block>;
9
+ datasources?: Record<string, Datasource>;
10
+ fieldPlugins?: Record<string, FieldPlugin>;
11
+ }
12
+ /**
13
+ * Typed identity wrapper for a schema object, consistent with the other
14
+ * `define*` helpers. Preserves the exact literal shape via `const` inference so
15
+ * {@link Schema} can derive block, datasource, and field-plugin types from
16
+ * `typeof schema`. Does not validate or transform.
17
+ *
18
+ * @example
19
+ * export const schema = defineSchema({
20
+ * blocks: { pageBlock, heroBlock },
21
+ * datasources: { colorsDatasource },
22
+ * fieldPlugins: { colorPicker },
23
+ * });
24
+ */
25
+ declare function defineSchema<const T extends SchemaConfig>(schema: T): T;
26
+ //#endregion
27
+ export { SchemaConfig, defineSchema };
28
+ //# sourceMappingURL=define-schema.d.mts.map
@@ -0,0 +1,21 @@
1
+ //#region src/helpers/define-schema.ts
2
+ /**
3
+ * Typed identity wrapper for a schema object, consistent with the other
4
+ * `define*` helpers. Preserves the exact literal shape via `const` inference so
5
+ * {@link Schema} can derive block, datasource, and field-plugin types from
6
+ * `typeof schema`. Does not validate or transform.
7
+ *
8
+ * @example
9
+ * export const schema = defineSchema({
10
+ * blocks: { pageBlock, heroBlock },
11
+ * datasources: { colorsDatasource },
12
+ * fieldPlugins: { colorPicker },
13
+ * });
14
+ */
15
+ function defineSchema(schema) {
16
+ return schema;
17
+ }
18
+
19
+ //#endregion
20
+ export { defineSchema };
21
+ //# sourceMappingURL=define-schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-schema.mjs","names":[],"sources":["../../src/helpers/define-schema.ts"],"sourcesContent":["import type { Block } from './define-block';\nimport type { Datasource } from './define-datasource';\nimport type { FieldPlugin } from './define-field-plugin';\n\n/** Minimal shape accepted by {@link defineSchema}; extra keys pass through unchanged. */\nexport interface SchemaConfig {\n blocks: Record<string, Block>;\n datasources?: Record<string, Datasource>;\n fieldPlugins?: Record<string, FieldPlugin>;\n}\n\n/**\n * Typed identity wrapper for a schema object, consistent with the other\n * `define*` helpers. Preserves the exact literal shape via `const` inference so\n * {@link Schema} can derive block, datasource, and field-plugin types from\n * `typeof schema`. Does not validate or transform.\n *\n * @example\n * export const schema = defineSchema({\n * blocks: { pageBlock, heroBlock },\n * datasources: { colorsDatasource },\n * fieldPlugins: { colorPicker },\n * });\n */\nexport function defineSchema<const T extends SchemaConfig>(schema: T): T {\n return schema;\n}\n"],"mappings":";;;;;;;;;;;;;;AAwBA,SAAgB,aAA2C,QAAc;AACvE,QAAO"}
@@ -1,39 +1,43 @@
1
- import { Block } from "../generated/types/block.cjs";
2
- import { Datasource } from "../generated/capi/types.gen.cjs";
3
- import { ComponentFolder } from "../generated/mapi/types.gen.cjs";
1
+ import { Datasource } from "./define-datasource.cjs";
2
+ import { FieldPlugin } from "./define-field-plugin.cjs";
3
+ import { SchemaConfig } from "./define-schema.cjs";
4
+ import { StandardSchemaV1 } from "@standard-schema/spec";
4
5
 
5
6
  //#region src/helpers/schema-type.d.ts
7
+ /**
8
+ * Derives a `fieldType → validator output` map from a `fieldPlugins` record.
9
+ * Record keys are cosmetic labels; the map is keyed by each plugin's
10
+ * `fieldType`. Resolves to `{}` when no plugins are registered.
11
+ */
12
+ type FieldPluginMap<TPlugins> = TPlugins extends Record<string, FieldPlugin> ? { [K in keyof TPlugins as TPlugins[K]['fieldType']]: StandardSchemaV1.InferOutput<TPlugins[K]['value']> } : Record<never, never>;
6
13
  /**
7
14
  * Derives a schema types interface from a schema object.
8
15
  *
9
- * Accepts the `typeof` a schema object whose `blocks` property is a
10
- * record of `defineBlock()` results, and optionally `blockFolders`
11
- * and `datasources` records, and produces a type with unions of those types.
16
+ * Accepts the `typeof` a schema object whose `blocks` property is a record of
17
+ * `defineBlock()` results, and optionally a `datasources` record, and produces
18
+ * a type with unions of those types. A schema describes content shapes only;
19
+ * component groups are a UI concern and not part of it.
12
20
  *
13
21
  * @example
14
22
  * ```ts
23
+ * import { defineSchema } from '@storyblok/schema';
15
24
  * import type { Schema as InferSchema } from '@storyblok/schema';
16
25
  *
17
- * export const schema = {
26
+ * export const schema = defineSchema({
18
27
  * blocks: { pageBlock, heroBlock },
19
- * blockFolders: { layoutFolder },
20
28
  * datasources: { colorsDatasource },
21
- * };
29
+ * fieldPlugins: { storyblokColorField },
30
+ * });
22
31
  *
23
32
  * export type Schema = InferSchema<typeof schema>;
24
33
  * export type Blocks = Schema['blocks'];
25
- * export type BlockFolders = Schema['blockFolders'];
26
- * export type Datasources = Schema['datasources'];
34
+ * export type FieldPlugins = Schema['fieldPlugins'];
27
35
  * ```
28
36
  */
29
- interface Schema<T extends {
30
- blocks: Record<string, Block>;
31
- blockFolders?: Record<string, ComponentFolder>;
32
- datasources?: Record<string, Datasource>;
33
- }> {
37
+ interface Schema<T extends SchemaConfig> {
34
38
  blocks: T['blocks'][keyof T['blocks']];
35
- blockFolders: T['blockFolders'] extends Record<string, ComponentFolder> ? T['blockFolders'][keyof T['blockFolders']] : never;
36
39
  datasources: T['datasources'] extends Record<string, Datasource> ? T['datasources'][keyof T['datasources']] : never;
40
+ fieldPlugins: FieldPluginMap<T['fieldPlugins']>;
37
41
  }
38
42
  //#endregion
39
43
  export { Schema };
@@ -1,39 +1,43 @@
1
- import { Block } from "../generated/types/block.mjs";
2
- import { Datasource } from "../generated/capi/types.gen.mjs";
3
- import { ComponentFolder } from "../generated/mapi/types.gen.mjs";
1
+ import { Datasource } from "./define-datasource.mjs";
2
+ import { FieldPlugin } from "./define-field-plugin.mjs";
3
+ import { SchemaConfig } from "./define-schema.mjs";
4
+ import { StandardSchemaV1 } from "@standard-schema/spec";
4
5
 
5
6
  //#region src/helpers/schema-type.d.ts
7
+ /**
8
+ * Derives a `fieldType → validator output` map from a `fieldPlugins` record.
9
+ * Record keys are cosmetic labels; the map is keyed by each plugin's
10
+ * `fieldType`. Resolves to `{}` when no plugins are registered.
11
+ */
12
+ type FieldPluginMap<TPlugins> = TPlugins extends Record<string, FieldPlugin> ? { [K in keyof TPlugins as TPlugins[K]['fieldType']]: StandardSchemaV1.InferOutput<TPlugins[K]['value']> } : Record<never, never>;
6
13
  /**
7
14
  * Derives a schema types interface from a schema object.
8
15
  *
9
- * Accepts the `typeof` a schema object whose `blocks` property is a
10
- * record of `defineBlock()` results, and optionally `blockFolders`
11
- * and `datasources` records, and produces a type with unions of those types.
16
+ * Accepts the `typeof` a schema object whose `blocks` property is a record of
17
+ * `defineBlock()` results, and optionally a `datasources` record, and produces
18
+ * a type with unions of those types. A schema describes content shapes only;
19
+ * component groups are a UI concern and not part of it.
12
20
  *
13
21
  * @example
14
22
  * ```ts
23
+ * import { defineSchema } from '@storyblok/schema';
15
24
  * import type { Schema as InferSchema } from '@storyblok/schema';
16
25
  *
17
- * export const schema = {
26
+ * export const schema = defineSchema({
18
27
  * blocks: { pageBlock, heroBlock },
19
- * blockFolders: { layoutFolder },
20
28
  * datasources: { colorsDatasource },
21
- * };
29
+ * fieldPlugins: { storyblokColorField },
30
+ * });
22
31
  *
23
32
  * export type Schema = InferSchema<typeof schema>;
24
33
  * export type Blocks = Schema['blocks'];
25
- * export type BlockFolders = Schema['blockFolders'];
26
- * export type Datasources = Schema['datasources'];
34
+ * export type FieldPlugins = Schema['fieldPlugins'];
27
35
  * ```
28
36
  */
29
- interface Schema<T extends {
30
- blocks: Record<string, Block>;
31
- blockFolders?: Record<string, ComponentFolder>;
32
- datasources?: Record<string, Datasource>;
33
- }> {
37
+ interface Schema<T extends SchemaConfig> {
34
38
  blocks: T['blocks'][keyof T['blocks']];
35
- blockFolders: T['blockFolders'] extends Record<string, ComponentFolder> ? T['blockFolders'][keyof T['blockFolders']] : never;
36
39
  datasources: T['datasources'] extends Record<string, Datasource> ? T['datasources'][keyof T['datasources']] : never;
40
+ fieldPlugins: FieldPluginMap<T['fieldPlugins']>;
37
41
  }
38
42
  //#endregion
39
43
  export { Schema };
package/dist/index.cjs CHANGED
@@ -1,55 +1,18 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_define_story = require('./helpers/define-story.cjs');
3
- const require_create_story_helpers = require('./helpers/create-story-helpers.cjs');
4
- const require_define_asset = require('./helpers/define-asset.cjs');
5
- const require_define_asset_folder = require('./helpers/define-asset-folder.cjs');
6
2
  const require_define_block = require('./helpers/define-block.cjs');
7
- const require_define_block_folder = require('./helpers/define-block-folder.cjs');
8
3
  const require_define_datasource = require('./helpers/define-datasource.cjs');
9
- const require_define_datasource_entry = require('./helpers/define-datasource-entry.cjs');
10
4
  const require_define_field = require('./helpers/define-field.cjs');
11
- const require_define_internal_tag = require('./helpers/define-internal-tag.cjs');
12
- const require_define_link = require('./helpers/define-link.cjs');
13
- const require_define_preset = require('./helpers/define-preset.cjs');
14
- const require_define_space = require('./helpers/define-space.cjs');
15
- const require_define_tag = require('./helpers/define-tag.cjs');
16
- const require_define_user = require('./helpers/define-user.cjs');
5
+ const require_define_field_plugin = require('./helpers/define-field-plugin.cjs');
6
+ const require_define_schema = require('./helpers/define-schema.cjs');
7
+ const require_validate_story = require('./validators/validate-story.cjs');
8
+ const require_create_story_validator = require('./validators/create-story-validator.cjs');
9
+ const require_validate_schema = require('./validators/validate-schema.cjs');
17
10
 
18
- exports.createStoryHelpers = require_create_story_helpers.createStoryHelpers;
19
- exports.defineAssetCreate = require_define_asset.defineAssetCreate;
20
- exports.defineAssetFolder = require_define_asset_folder.defineAssetFolder;
21
- exports.defineAssetFolderCreate = require_define_asset_folder.defineAssetFolderCreate;
22
- exports.defineAssetFolderUpdate = require_define_asset_folder.defineAssetFolderUpdate;
23
- exports.defineAssetUpdate = require_define_asset.defineAssetUpdate;
11
+ exports.createStoryValidator = require_create_story_validator.createStoryValidator;
24
12
  exports.defineBlock = require_define_block.defineBlock;
25
- exports.defineBlockCreate = require_define_block.defineBlockCreate;
26
- exports.defineBlockFolder = require_define_block_folder.defineBlockFolder;
27
- exports.defineBlockFolderCreate = require_define_block_folder.defineBlockFolderCreate;
28
- exports.defineBlockFolderUpdate = require_define_block_folder.defineBlockFolderUpdate;
29
- exports.defineBlockUpdate = require_define_block.defineBlockUpdate;
30
13
  exports.defineDatasource = require_define_datasource.defineDatasource;
31
- exports.defineDatasourceCreate = require_define_datasource.defineDatasourceCreate;
32
- exports.defineDatasourceEntry = require_define_datasource_entry.defineDatasourceEntry;
33
- exports.defineDatasourceEntryCreate = require_define_datasource_entry.defineDatasourceEntryCreate;
34
- exports.defineDatasourceEntryUpdate = require_define_datasource_entry.defineDatasourceEntryUpdate;
35
- exports.defineDatasourceUpdate = require_define_datasource.defineDatasourceUpdate;
36
14
  exports.defineField = require_define_field.defineField;
37
- exports.defineInternalTag = require_define_internal_tag.defineInternalTag;
38
- exports.defineInternalTagCreate = require_define_internal_tag.defineInternalTagCreate;
39
- exports.defineInternalTagUpdate = require_define_internal_tag.defineInternalTagUpdate;
40
- exports.defineLink = require_define_link.defineLink;
41
- exports.defineMapiAsset = require_define_asset.defineMapiAsset;
42
- exports.defineMapiDatasourceEntry = require_define_datasource_entry.defineMapiDatasourceEntry;
43
- exports.defineMapiStory = require_define_story.defineMapiStory;
44
- exports.definePreset = require_define_preset.definePreset;
45
- exports.definePresetCreate = require_define_preset.definePresetCreate;
46
- exports.definePresetUpdate = require_define_preset.definePresetUpdate;
47
- exports.defineSpace = require_define_space.defineSpace;
48
- exports.defineSpaceCreate = require_define_space.defineSpaceCreate;
49
- exports.defineSpaceUpdate = require_define_space.defineSpaceUpdate;
50
- exports.defineStory = require_define_story.defineStory;
51
- exports.defineStoryCreate = require_define_story.defineStoryCreate;
52
- exports.defineStoryUpdate = require_define_story.defineStoryUpdate;
53
- exports.defineTag = require_define_tag.defineTag;
54
- exports.defineUser = require_define_user.defineUser;
55
- exports.defineUserUpdate = require_define_user.defineUserUpdate;
15
+ exports.defineFieldPlugin = require_define_field_plugin.defineFieldPlugin;
16
+ exports.defineSchema = require_define_schema.defineSchema;
17
+ exports.validateSchema = require_validate_schema.validateSchema;
18
+ exports.validateStory = require_validate_story.validateStory;
package/dist/index.d.cts CHANGED
@@ -1,23 +1,16 @@
1
1
  import { AssetFieldValue, Field, MultilinkFieldValue, PluginFieldValue, RichtextFieldValue, TableFieldValue } from "./generated/overlay/_internal.gen.cjs";
2
- import { Block, BlockSchema, NestableBlock, RootBlock } from "./generated/types/block.cjs";
3
- import { defineBlock, defineBlockCreate, defineBlockUpdate } from "./helpers/define-block.cjs";
4
- import { Datasource, Link, StoryAlternate, Tag } from "./generated/capi/types.gen.cjs";
5
- import { AssetCreate, AssetFolder, AssetFolderCreate, AssetFolderUpdate, AssetUpdate, ComponentFolder, ComponentFolderCreate, ComponentFolderUpdate, DatasourceCreate, DatasourceEntryCreate, DatasourceEntryUpdate, DatasourceUpdate, InternalTag, InternalTagCreate, InternalTagUpdate, Preset, PresetCreate, PresetUpdate, Space, SpaceCreate, SpaceUpdate, StoryLocalizedPath, StoryTranslatedSlug, User, UserUpdate } from "./generated/mapi/types.gen.cjs";
6
- import { MapiStory, StoryCreate, StoryUpdate } from "./generated/types/mapi-story.cjs";
2
+ import { Block, BlockFields, NestableBlock, RootBlock } from "./generated/types/block.cjs";
3
+ import { BlockContent, BlockContentInput, BlocksFieldValue, FieldType, FieldValue, FieldValueInput } from "./generated/types/field.cjs";
4
+ import { MapiStory } from "./generated/types/mapi-story.cjs";
7
5
  import { Story } from "./generated/types/story.cjs";
8
- import { BlockContent, BlockContentInput, BlocksFieldValue, FieldType, FieldValue, FieldValueInput, defineField } from "./helpers/define-field.cjs";
9
- import { defineMapiStory, defineStory, defineStoryCreate, defineStoryUpdate } from "./helpers/define-story.cjs";
10
- import { createStoryHelpers } from "./helpers/create-story-helpers.cjs";
11
- import { MapiAsset, defineAssetCreate, defineAssetUpdate, defineMapiAsset } from "./helpers/define-asset.cjs";
12
- import { defineAssetFolder, defineAssetFolderCreate, defineAssetFolderUpdate } from "./helpers/define-asset-folder.cjs";
13
- import { defineBlockFolder, defineBlockFolderCreate, defineBlockFolderUpdate } from "./helpers/define-block-folder.cjs";
14
- import { defineDatasource, defineDatasourceCreate, defineDatasourceUpdate } from "./helpers/define-datasource.cjs";
15
- import { DatasourceEntry, MapiDatasourceEntry, defineDatasourceEntry, defineDatasourceEntryCreate, defineDatasourceEntryUpdate, defineMapiDatasourceEntry } from "./helpers/define-datasource-entry.cjs";
16
- import { defineInternalTag, defineInternalTagCreate, defineInternalTagUpdate } from "./helpers/define-internal-tag.cjs";
17
- import { defineLink } from "./helpers/define-link.cjs";
18
- import { definePreset, definePresetCreate, definePresetUpdate } from "./helpers/define-preset.cjs";
19
- import { defineSpace, defineSpaceCreate, defineSpaceUpdate } from "./helpers/define-space.cjs";
20
- import { defineTag } from "./helpers/define-tag.cjs";
21
- import { defineUser, defineUserUpdate } from "./helpers/define-user.cjs";
6
+ import { defineBlock } from "./helpers/define-block.cjs";
7
+ import { Datasource, defineDatasource } from "./helpers/define-datasource.cjs";
8
+ import { DefinedField, FieldInput, defineField } from "./helpers/define-field.cjs";
9
+ import { FieldPlugin, defineFieldPlugin } from "./helpers/define-field-plugin.cjs";
10
+ import { defineSchema } from "./helpers/define-schema.cjs";
22
11
  import { Schema } from "./helpers/schema-type.cjs";
23
- export { type AssetCreate, type AssetFieldValue, type AssetFolder, type AssetFolderCreate, type AssetFolderUpdate, type AssetUpdate, type Block, type BlockContent, type BlockContentInput, type BlockSchema, type BlocksFieldValue, type ComponentFolder, type ComponentFolderCreate, type ComponentFolderUpdate, type Datasource, type DatasourceCreate, type DatasourceEntry, type DatasourceEntryCreate, type DatasourceEntryUpdate, type DatasourceUpdate, type Field, type FieldType, type FieldValue, type FieldValueInput, type InternalTag, type InternalTagCreate, type InternalTagUpdate, type Link, type MapiAsset, type MapiDatasourceEntry, type MapiStory, type MultilinkFieldValue, type NestableBlock, type PluginFieldValue, type Preset, type PresetCreate, type PresetUpdate, type RichtextFieldValue, type RootBlock, type Schema, type Space, type SpaceCreate, type SpaceUpdate, type Story, type StoryAlternate, type StoryCreate, type StoryLocalizedPath, type StoryTranslatedSlug, type StoryUpdate, type TableFieldValue, type Tag, type User, type UserUpdate, createStoryHelpers, defineAssetCreate, defineAssetFolder, defineAssetFolderCreate, defineAssetFolderUpdate, defineAssetUpdate, defineBlock, defineBlockCreate, defineBlockFolder, defineBlockFolderCreate, defineBlockFolderUpdate, defineBlockUpdate, defineDatasource, defineDatasourceCreate, defineDatasourceEntry, defineDatasourceEntryCreate, defineDatasourceEntryUpdate, defineDatasourceUpdate, defineField, defineInternalTag, defineInternalTagCreate, defineInternalTagUpdate, defineLink, defineMapiAsset, defineMapiDatasourceEntry, defineMapiStory, definePreset, definePresetCreate, definePresetUpdate, defineSpace, defineSpaceCreate, defineSpaceUpdate, defineStory, defineStoryCreate, defineStoryUpdate, defineTag, defineUser, defineUserUpdate };
12
+ import { createStoryValidator } from "./validators/create-story-validator.cjs";
13
+ import { ValidationIssue, ValidationResult, ValidationSeverity } from "./validators/types.cjs";
14
+ import { validateSchema } from "./validators/validate-schema.cjs";
15
+ import { validateStory } from "./validators/validate-story.cjs";
16
+ export { type AssetFieldValue, type Block, type BlockContent, type BlockContentInput, type BlockFields, type BlocksFieldValue, type Datasource, type DefinedField, type Field, type FieldInput, type FieldPlugin, type FieldType, type FieldValue, type FieldValueInput, type MapiStory, type MultilinkFieldValue, type NestableBlock, type PluginFieldValue, type RichtextFieldValue, type RootBlock, type Schema, type Story, type TableFieldValue, type ValidationIssue, type ValidationResult, type ValidationSeverity, createStoryValidator, defineBlock, defineDatasource, defineField, defineFieldPlugin, defineSchema, validateSchema, validateStory };
package/dist/index.d.mts CHANGED
@@ -1,23 +1,16 @@
1
1
  import { AssetFieldValue, Field, MultilinkFieldValue, PluginFieldValue, RichtextFieldValue, TableFieldValue } from "./generated/overlay/_internal.gen.mjs";
2
- import { Block, BlockSchema, NestableBlock, RootBlock } from "./generated/types/block.mjs";
3
- import { defineBlock, defineBlockCreate, defineBlockUpdate } from "./helpers/define-block.mjs";
4
- import { Datasource, Link, StoryAlternate, Tag } from "./generated/capi/types.gen.mjs";
5
- import { AssetCreate, AssetFolder, AssetFolderCreate, AssetFolderUpdate, AssetUpdate, ComponentFolder, ComponentFolderCreate, ComponentFolderUpdate, DatasourceCreate, DatasourceEntryCreate, DatasourceEntryUpdate, DatasourceUpdate, InternalTag, InternalTagCreate, InternalTagUpdate, Preset, PresetCreate, PresetUpdate, Space, SpaceCreate, SpaceUpdate, StoryLocalizedPath, StoryTranslatedSlug, User, UserUpdate } from "./generated/mapi/types.gen.mjs";
6
- import { MapiStory, StoryCreate, StoryUpdate } from "./generated/types/mapi-story.mjs";
2
+ import { Block, BlockFields, NestableBlock, RootBlock } from "./generated/types/block.mjs";
3
+ import { BlockContent, BlockContentInput, BlocksFieldValue, FieldType, FieldValue, FieldValueInput } from "./generated/types/field.mjs";
4
+ import { MapiStory } from "./generated/types/mapi-story.mjs";
7
5
  import { Story } from "./generated/types/story.mjs";
8
- import { BlockContent, BlockContentInput, BlocksFieldValue, FieldType, FieldValue, FieldValueInput, defineField } from "./helpers/define-field.mjs";
9
- import { defineMapiStory, defineStory, defineStoryCreate, defineStoryUpdate } from "./helpers/define-story.mjs";
10
- import { createStoryHelpers } from "./helpers/create-story-helpers.mjs";
11
- import { MapiAsset, defineAssetCreate, defineAssetUpdate, defineMapiAsset } from "./helpers/define-asset.mjs";
12
- import { defineAssetFolder, defineAssetFolderCreate, defineAssetFolderUpdate } from "./helpers/define-asset-folder.mjs";
13
- import { defineBlockFolder, defineBlockFolderCreate, defineBlockFolderUpdate } from "./helpers/define-block-folder.mjs";
14
- import { defineDatasource, defineDatasourceCreate, defineDatasourceUpdate } from "./helpers/define-datasource.mjs";
15
- import { DatasourceEntry, MapiDatasourceEntry, defineDatasourceEntry, defineDatasourceEntryCreate, defineDatasourceEntryUpdate, defineMapiDatasourceEntry } from "./helpers/define-datasource-entry.mjs";
16
- import { defineInternalTag, defineInternalTagCreate, defineInternalTagUpdate } from "./helpers/define-internal-tag.mjs";
17
- import { defineLink } from "./helpers/define-link.mjs";
18
- import { definePreset, definePresetCreate, definePresetUpdate } from "./helpers/define-preset.mjs";
19
- import { defineSpace, defineSpaceCreate, defineSpaceUpdate } from "./helpers/define-space.mjs";
20
- import { defineTag } from "./helpers/define-tag.mjs";
21
- import { defineUser, defineUserUpdate } from "./helpers/define-user.mjs";
6
+ import { defineBlock } from "./helpers/define-block.mjs";
7
+ import { Datasource, defineDatasource } from "./helpers/define-datasource.mjs";
8
+ import { DefinedField, FieldInput, defineField } from "./helpers/define-field.mjs";
9
+ import { FieldPlugin, defineFieldPlugin } from "./helpers/define-field-plugin.mjs";
10
+ import { defineSchema } from "./helpers/define-schema.mjs";
22
11
  import { Schema } from "./helpers/schema-type.mjs";
23
- export { type AssetCreate, type AssetFieldValue, type AssetFolder, type AssetFolderCreate, type AssetFolderUpdate, type AssetUpdate, type Block, type BlockContent, type BlockContentInput, type BlockSchema, type BlocksFieldValue, type ComponentFolder, type ComponentFolderCreate, type ComponentFolderUpdate, type Datasource, type DatasourceCreate, type DatasourceEntry, type DatasourceEntryCreate, type DatasourceEntryUpdate, type DatasourceUpdate, type Field, type FieldType, type FieldValue, type FieldValueInput, type InternalTag, type InternalTagCreate, type InternalTagUpdate, type Link, type MapiAsset, type MapiDatasourceEntry, type MapiStory, type MultilinkFieldValue, type NestableBlock, type PluginFieldValue, type Preset, type PresetCreate, type PresetUpdate, type RichtextFieldValue, type RootBlock, type Schema, type Space, type SpaceCreate, type SpaceUpdate, type Story, type StoryAlternate, type StoryCreate, type StoryLocalizedPath, type StoryTranslatedSlug, type StoryUpdate, type TableFieldValue, type Tag, type User, type UserUpdate, createStoryHelpers, defineAssetCreate, defineAssetFolder, defineAssetFolderCreate, defineAssetFolderUpdate, defineAssetUpdate, defineBlock, defineBlockCreate, defineBlockFolder, defineBlockFolderCreate, defineBlockFolderUpdate, defineBlockUpdate, defineDatasource, defineDatasourceCreate, defineDatasourceEntry, defineDatasourceEntryCreate, defineDatasourceEntryUpdate, defineDatasourceUpdate, defineField, defineInternalTag, defineInternalTagCreate, defineInternalTagUpdate, defineLink, defineMapiAsset, defineMapiDatasourceEntry, defineMapiStory, definePreset, definePresetCreate, definePresetUpdate, defineSpace, defineSpaceCreate, defineSpaceUpdate, defineStory, defineStoryCreate, defineStoryUpdate, defineTag, defineUser, defineUserUpdate };
12
+ import { createStoryValidator } from "./validators/create-story-validator.mjs";
13
+ import { ValidationIssue, ValidationResult, ValidationSeverity } from "./validators/types.mjs";
14
+ import { validateSchema } from "./validators/validate-schema.mjs";
15
+ import { validateStory } from "./validators/validate-story.mjs";
16
+ export { type AssetFieldValue, type Block, type BlockContent, type BlockContentInput, type BlockFields, type BlocksFieldValue, type Datasource, type DefinedField, type Field, type FieldInput, type FieldPlugin, type FieldType, type FieldValue, type FieldValueInput, type MapiStory, type MultilinkFieldValue, type NestableBlock, type PluginFieldValue, type RichtextFieldValue, type RootBlock, type Schema, type Story, type TableFieldValue, type ValidationIssue, type ValidationResult, type ValidationSeverity, createStoryValidator, defineBlock, defineDatasource, defineField, defineFieldPlugin, defineSchema, validateSchema, validateStory };