@datocms/cma-client 5.1.2 → 5.1.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.
Files changed (156) hide show
  1. package/dist/cjs/fieldTypes/boolean.js +7 -1
  2. package/dist/cjs/fieldTypes/boolean.js.map +1 -1
  3. package/dist/cjs/fieldTypes/color.js +7 -1
  4. package/dist/cjs/fieldTypes/color.js.map +1 -1
  5. package/dist/cjs/fieldTypes/date.js +7 -1
  6. package/dist/cjs/fieldTypes/date.js.map +1 -1
  7. package/dist/cjs/fieldTypes/date_time.js +7 -1
  8. package/dist/cjs/fieldTypes/date_time.js.map +1 -1
  9. package/dist/cjs/fieldTypes/file.js +7 -1
  10. package/dist/cjs/fieldTypes/file.js.map +1 -1
  11. package/dist/cjs/fieldTypes/float.js +7 -1
  12. package/dist/cjs/fieldTypes/float.js.map +1 -1
  13. package/dist/cjs/fieldTypes/gallery.js +7 -1
  14. package/dist/cjs/fieldTypes/gallery.js.map +1 -1
  15. package/dist/cjs/fieldTypes/integer.js +7 -1
  16. package/dist/cjs/fieldTypes/integer.js.map +1 -1
  17. package/dist/cjs/fieldTypes/json.js +7 -1
  18. package/dist/cjs/fieldTypes/json.js.map +1 -1
  19. package/dist/cjs/fieldTypes/lat_lon.js +7 -1
  20. package/dist/cjs/fieldTypes/lat_lon.js.map +1 -1
  21. package/dist/cjs/fieldTypes/link.js +7 -1
  22. package/dist/cjs/fieldTypes/link.js.map +1 -1
  23. package/dist/cjs/fieldTypes/links.js +7 -1
  24. package/dist/cjs/fieldTypes/links.js.map +1 -1
  25. package/dist/cjs/fieldTypes/rich_text.js +19 -1
  26. package/dist/cjs/fieldTypes/rich_text.js.map +1 -1
  27. package/dist/cjs/fieldTypes/seo.js +7 -1
  28. package/dist/cjs/fieldTypes/seo.js.map +1 -1
  29. package/dist/cjs/fieldTypes/single_block.js +19 -1
  30. package/dist/cjs/fieldTypes/single_block.js.map +1 -1
  31. package/dist/cjs/fieldTypes/slug.js +8 -2
  32. package/dist/cjs/fieldTypes/slug.js.map +1 -1
  33. package/dist/cjs/fieldTypes/string.js +7 -1
  34. package/dist/cjs/fieldTypes/string.js.map +1 -1
  35. package/dist/cjs/fieldTypes/structured_text.js +19 -1
  36. package/dist/cjs/fieldTypes/structured_text.js.map +1 -1
  37. package/dist/cjs/fieldTypes/text.js +7 -1
  38. package/dist/cjs/fieldTypes/text.js.map +1 -1
  39. package/dist/cjs/fieldTypes/video.js +7 -1
  40. package/dist/cjs/fieldTypes/video.js.map +1 -1
  41. package/dist/cjs/generated/Client.js +1 -1
  42. package/dist/cjs/index.js +1 -0
  43. package/dist/cjs/index.js.map +1 -1
  44. package/dist/esm/fieldTypes/boolean.d.ts +2 -0
  45. package/dist/esm/fieldTypes/boolean.js +5 -0
  46. package/dist/esm/fieldTypes/boolean.js.map +1 -1
  47. package/dist/esm/fieldTypes/color.d.ts +2 -0
  48. package/dist/esm/fieldTypes/color.js +5 -0
  49. package/dist/esm/fieldTypes/color.js.map +1 -1
  50. package/dist/esm/fieldTypes/date.d.ts +2 -0
  51. package/dist/esm/fieldTypes/date.js +5 -0
  52. package/dist/esm/fieldTypes/date.js.map +1 -1
  53. package/dist/esm/fieldTypes/date_time.d.ts +2 -0
  54. package/dist/esm/fieldTypes/date_time.js +5 -0
  55. package/dist/esm/fieldTypes/date_time.js.map +1 -1
  56. package/dist/esm/fieldTypes/file.d.ts +2 -0
  57. package/dist/esm/fieldTypes/file.js +5 -0
  58. package/dist/esm/fieldTypes/file.js.map +1 -1
  59. package/dist/esm/fieldTypes/float.d.ts +2 -0
  60. package/dist/esm/fieldTypes/float.js +5 -0
  61. package/dist/esm/fieldTypes/float.js.map +1 -1
  62. package/dist/esm/fieldTypes/gallery.d.ts +2 -0
  63. package/dist/esm/fieldTypes/gallery.js +5 -0
  64. package/dist/esm/fieldTypes/gallery.js.map +1 -1
  65. package/dist/esm/fieldTypes/integer.d.ts +2 -0
  66. package/dist/esm/fieldTypes/integer.js +5 -0
  67. package/dist/esm/fieldTypes/integer.js.map +1 -1
  68. package/dist/esm/fieldTypes/json.d.ts +2 -0
  69. package/dist/esm/fieldTypes/json.js +5 -0
  70. package/dist/esm/fieldTypes/json.js.map +1 -1
  71. package/dist/esm/fieldTypes/lat_lon.d.ts +2 -0
  72. package/dist/esm/fieldTypes/lat_lon.js +5 -0
  73. package/dist/esm/fieldTypes/lat_lon.js.map +1 -1
  74. package/dist/esm/fieldTypes/link.d.ts +2 -0
  75. package/dist/esm/fieldTypes/link.js +5 -0
  76. package/dist/esm/fieldTypes/link.js.map +1 -1
  77. package/dist/esm/fieldTypes/links.d.ts +2 -0
  78. package/dist/esm/fieldTypes/links.js +5 -0
  79. package/dist/esm/fieldTypes/links.js.map +1 -1
  80. package/dist/esm/fieldTypes/rich_text.d.ts +7 -3
  81. package/dist/esm/fieldTypes/rich_text.js +15 -0
  82. package/dist/esm/fieldTypes/rich_text.js.map +1 -1
  83. package/dist/esm/fieldTypes/seo.d.ts +2 -0
  84. package/dist/esm/fieldTypes/seo.js +5 -0
  85. package/dist/esm/fieldTypes/seo.js.map +1 -1
  86. package/dist/esm/fieldTypes/single_block.d.ts +4 -0
  87. package/dist/esm/fieldTypes/single_block.js +15 -0
  88. package/dist/esm/fieldTypes/single_block.js.map +1 -1
  89. package/dist/esm/fieldTypes/slug.d.ts +2 -0
  90. package/dist/esm/fieldTypes/slug.js +6 -1
  91. package/dist/esm/fieldTypes/slug.js.map +1 -1
  92. package/dist/esm/fieldTypes/string.d.ts +2 -0
  93. package/dist/esm/fieldTypes/string.js +5 -0
  94. package/dist/esm/fieldTypes/string.js.map +1 -1
  95. package/dist/esm/fieldTypes/structured_text.d.ts +4 -0
  96. package/dist/esm/fieldTypes/structured_text.js +15 -0
  97. package/dist/esm/fieldTypes/structured_text.js.map +1 -1
  98. package/dist/esm/fieldTypes/text.d.ts +2 -0
  99. package/dist/esm/fieldTypes/text.js +5 -0
  100. package/dist/esm/fieldTypes/text.js.map +1 -1
  101. package/dist/esm/fieldTypes/video.d.ts +2 -0
  102. package/dist/esm/fieldTypes/video.js +5 -0
  103. package/dist/esm/fieldTypes/video.js.map +1 -1
  104. package/dist/esm/generated/Client.js +1 -1
  105. package/dist/esm/generated/resources/Field.d.ts +500 -500
  106. package/dist/esm/index.d.ts +1 -0
  107. package/dist/esm/index.js +1 -0
  108. package/dist/esm/index.js.map +1 -1
  109. package/dist/esm/utilities/fieldValue.d.ts +1 -1
  110. package/dist/types/fieldTypes/boolean.d.ts +2 -0
  111. package/dist/types/fieldTypes/color.d.ts +2 -0
  112. package/dist/types/fieldTypes/date.d.ts +2 -0
  113. package/dist/types/fieldTypes/date_time.d.ts +2 -0
  114. package/dist/types/fieldTypes/file.d.ts +2 -0
  115. package/dist/types/fieldTypes/float.d.ts +2 -0
  116. package/dist/types/fieldTypes/gallery.d.ts +2 -0
  117. package/dist/types/fieldTypes/integer.d.ts +2 -0
  118. package/dist/types/fieldTypes/json.d.ts +2 -0
  119. package/dist/types/fieldTypes/lat_lon.d.ts +2 -0
  120. package/dist/types/fieldTypes/link.d.ts +2 -0
  121. package/dist/types/fieldTypes/links.d.ts +2 -0
  122. package/dist/types/fieldTypes/rich_text.d.ts +7 -3
  123. package/dist/types/fieldTypes/seo.d.ts +2 -0
  124. package/dist/types/fieldTypes/single_block.d.ts +4 -0
  125. package/dist/types/fieldTypes/slug.d.ts +2 -0
  126. package/dist/types/fieldTypes/string.d.ts +2 -0
  127. package/dist/types/fieldTypes/structured_text.d.ts +4 -0
  128. package/dist/types/fieldTypes/text.d.ts +2 -0
  129. package/dist/types/fieldTypes/video.d.ts +2 -0
  130. package/dist/types/generated/resources/Field.d.ts +500 -500
  131. package/dist/types/index.d.ts +1 -0
  132. package/dist/types/utilities/fieldValue.d.ts +1 -1
  133. package/package.json +2 -2
  134. package/src/fieldTypes/boolean.ts +11 -0
  135. package/src/fieldTypes/color.ts +11 -0
  136. package/src/fieldTypes/date.ts +11 -0
  137. package/src/fieldTypes/date_time.ts +11 -0
  138. package/src/fieldTypes/file.ts +11 -0
  139. package/src/fieldTypes/float.ts +11 -0
  140. package/src/fieldTypes/gallery.ts +11 -0
  141. package/src/fieldTypes/integer.ts +11 -0
  142. package/src/fieldTypes/json.ts +11 -0
  143. package/src/fieldTypes/lat_lon.ts +11 -0
  144. package/src/fieldTypes/link.ts +11 -0
  145. package/src/fieldTypes/links.ts +11 -0
  146. package/src/fieldTypes/rich_text.ts +33 -3
  147. package/src/fieldTypes/seo.ts +11 -0
  148. package/src/fieldTypes/single_block.ts +31 -0
  149. package/src/fieldTypes/slug.ts +12 -1
  150. package/src/fieldTypes/string.ts +11 -0
  151. package/src/fieldTypes/structured_text.ts +31 -0
  152. package/src/fieldTypes/text.ts +11 -0
  153. package/src/fieldTypes/video.ts +11 -0
  154. package/src/generated/Client.ts +1 -1
  155. package/src/index.ts +1 -0
  156. package/src/utilities/fieldValue.ts +1 -1
@@ -10,6 +10,7 @@ export * from './utilities/fieldValue';
10
10
  export * from './utilities/id';
11
11
  export * from './utilities/recursiveBlocks';
12
12
  export * from './utilities/schemaRepository';
13
+ export * from './fieldTypes';
13
14
  export type { ApiTypes, RawApiTypes };
14
15
  export type { ApiTypes as SchemaTypes, RawApiTypes as SimpleSchemaTypes };
15
16
  import type * as ApiTypes from './generated/ApiTypes';
@@ -7,7 +7,7 @@ import type * as RawApiTypes from '../generated/RawApiTypes';
7
7
  * for various locales structured as an object, such as
8
8
  * `{ "en": "Hello", "it": "Ciao" }`
9
9
  */
10
- export type LocalizedFieldValue = Record<string, unknown>;
10
+ export type LocalizedFieldValue<T = unknown> = Record<string, T>;
11
11
  /**
12
12
  * Determines whether a DatoCMS field is localized or not.
13
13
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datocms/cma-client",
3
- "version": "5.1.2",
3
+ "version": "5.1.3",
4
4
  "description": "JS client for DatoCMS REST Content Management API",
5
5
  "keywords": [
6
6
  "datocms",
@@ -45,5 +45,5 @@
45
45
  "@datocms/dashboard-client": "^5.1.2",
46
46
  "@types/uuid": "^9.0.7"
47
47
  },
48
- "gitHead": "f4f7e2dcb5508f3d4680d242a9805c826706b855"
48
+ "gitHead": "69bf5360c450dc20913dbafd63c12e1306c230b3"
49
49
  }
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { BooleanEditorConfiguration } from './appearance/boolean';
2
3
  import type { BooleanRadioGroupEditorConfiguration } from './appearance/boolean_radio_group';
3
4
 
@@ -9,6 +10,16 @@ export function isBooleanFieldValue(
9
10
  return typeof value === 'boolean' || value === null;
10
11
  }
11
12
 
13
+ export function isLocalizedBooleanFieldValue(
14
+ value: unknown,
15
+ ): value is LocalizedFieldValue<BooleanFieldValue> {
16
+ return (
17
+ typeof value === 'object' &&
18
+ value !== null &&
19
+ Object.values(value).every(isBooleanFieldValue)
20
+ );
21
+ }
22
+
12
23
  export type BooleanFieldValidators = Record<string, never>;
13
24
 
14
25
  export type BooleanFieldAppearance =
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { ColorPickerEditorConfiguration } from './appearance/color_picker';
2
3
  import type { RequiredValidator } from './validators/required';
3
4
 
@@ -20,6 +21,16 @@ export function isColorFieldValue(value: unknown): value is ColorFieldValue {
20
21
  );
21
22
  }
22
23
 
24
+ export function isLocalizedColorFieldValue(
25
+ value: unknown,
26
+ ): value is LocalizedFieldValue<ColorFieldValue> {
27
+ return (
28
+ typeof value === 'object' &&
29
+ value !== null &&
30
+ Object.values(value).every(isColorFieldValue)
31
+ );
32
+ }
33
+
23
34
  export type ColorFieldValidators = {
24
35
  /** Value must be specified or it won't be valid */
25
36
  required?: RequiredValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { DatePickerEditorConfiguration } from './appearance/date_picker';
2
3
  import type { DateRangeValidator } from './validators/date_range';
3
4
  import type { RequiredValidator } from './validators/required';
@@ -9,6 +10,16 @@ export function isDateFieldValue(value: unknown): value is DateFieldValue {
9
10
  return typeof value === 'string' && /^\d{4}-\d{2}-\d{2}$/.test(value);
10
11
  }
11
12
 
13
+ export function isLocalizedDateFieldValue(
14
+ value: unknown,
15
+ ): value is LocalizedFieldValue<DateFieldValue> {
16
+ return (
17
+ typeof value === 'object' &&
18
+ value !== null &&
19
+ Object.values(value).every(isDateFieldValue)
20
+ );
21
+ }
22
+
12
23
  export type DateFieldValidators = {
13
24
  /** Value must be specified or it won't be valid */
14
25
  required?: RequiredValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { DateTimePickerEditorConfiguration } from './appearance/date_time_picker';
2
3
  import type { DateTimeRangeValidator } from './validators/date_time_range';
3
4
  import type { RequiredValidator } from './validators/required';
@@ -14,6 +15,16 @@ export function isDateTimeFieldValue(
14
15
  );
15
16
  }
16
17
 
18
+ export function isLocalizedDateTimeFieldValue(
19
+ value: unknown,
20
+ ): value is LocalizedFieldValue<DateTimeFieldValue> {
21
+ return (
22
+ typeof value === 'object' &&
23
+ value !== null &&
24
+ Object.values(value).every(isDateTimeFieldValue)
25
+ );
26
+ }
27
+
17
28
  export type DateTimeFieldValidators = {
18
29
  /** Value must be specified or it won't be valid */
19
30
  required?: RequiredValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { FileEditorConfiguration } from './appearance/file';
2
3
  import type { ExtensionValidator } from './validators/extension';
3
4
  import type { FileSizeValidator } from './validators/file_size';
@@ -22,6 +23,16 @@ export function isFileFieldValue(value: unknown): value is FileFieldValue {
22
23
  return typeof value === 'object' && value !== null && 'upload_id' in value;
23
24
  }
24
25
 
26
+ export function isLocalizedFileFieldValue(
27
+ value: unknown,
28
+ ): value is LocalizedFieldValue<FileFieldValue> {
29
+ return (
30
+ typeof value === 'object' &&
31
+ value !== null &&
32
+ Object.values(value).every(isFileFieldValue)
33
+ );
34
+ }
35
+
25
36
  export type FileFieldValidators = {
26
37
  /** Value must be specified or it won't be valid */
27
38
  required?: RequiredValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { FloatEditorConfiguration } from './appearance/float';
2
3
  import type { NumberRangeValidator } from './validators/number_range';
3
4
  import type { RequiredValidator } from './validators/required';
@@ -8,6 +9,16 @@ export function isFloatFieldValue(value: unknown): value is FloatFieldValue {
8
9
  return typeof value === 'number' || value === null;
9
10
  }
10
11
 
12
+ export function isLocalizedFloatFieldValue(
13
+ value: unknown,
14
+ ): value is LocalizedFieldValue<FloatFieldValue> {
15
+ return (
16
+ typeof value === 'object' &&
17
+ value !== null &&
18
+ Object.values(value).every(isFloatFieldValue)
19
+ );
20
+ }
21
+
11
22
  export type FloatFieldValidators = {
12
23
  /** Value must be specified or it won't be valid */
13
24
  required?: RequiredValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { GalleryEditorConfiguration } from './appearance/gallery';
2
3
  import type { ExtensionValidator } from './validators/extension';
3
4
  import type { FileSizeValidator } from './validators/file_size';
@@ -30,6 +31,16 @@ export function isGalleryFieldValue(
30
31
  );
31
32
  }
32
33
 
34
+ export function isLocalizedGalleryFieldValue(
35
+ value: unknown,
36
+ ): value is LocalizedFieldValue<GalleryFieldValue> {
37
+ return (
38
+ typeof value === 'object' &&
39
+ value !== null &&
40
+ Object.values(value).every(isGalleryFieldValue)
41
+ );
42
+ }
43
+
33
44
  export type GalleryFieldValidators = {
34
45
  /** Only accept a number of items within the specified range */
35
46
  size?: SizeValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { IntegerEditorConfiguration } from './appearance/integer';
2
3
  import type { NumberRangeValidator } from './validators/number_range';
3
4
  import type { RequiredValidator } from './validators/required';
@@ -10,6 +11,16 @@ export function isIntegerFieldValue(
10
11
  return typeof value === 'number' || value === null;
11
12
  }
12
13
 
14
+ export function isLocalizedIntegerFieldValue(
15
+ value: unknown,
16
+ ): value is LocalizedFieldValue<IntegerFieldValue> {
17
+ return (
18
+ typeof value === 'object' &&
19
+ value !== null &&
20
+ Object.values(value).every(isIntegerFieldValue)
21
+ );
22
+ }
23
+
13
24
  export type IntegerFieldValidators = {
14
25
  /** Value must be specified or it won't be valid */
15
26
  required?: RequiredValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { JsonEditorConfiguration } from './appearance/json';
2
3
  import type { StringCheckboxGroupEditorConfiguration } from './appearance/string_checkbox_group';
3
4
  import type { StringMultiSelectEditorConfiguration } from './appearance/string_multi_select';
@@ -16,6 +17,16 @@ export function isJsonFieldValue(value: unknown): value is JsonFieldValue {
16
17
  }
17
18
  }
18
19
 
20
+ export function isLocalizedJsonFieldValue(
21
+ value: unknown,
22
+ ): value is LocalizedFieldValue<JsonFieldValue> {
23
+ return (
24
+ typeof value === 'object' &&
25
+ value !== null &&
26
+ Object.values(value).every(isJsonFieldValue)
27
+ );
28
+ }
29
+
19
30
  export type JsonFieldValidators = {
20
31
  /** Value must be specified or it won't be valid */
21
32
  required?: RequiredValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { MapEditorConfiguration } from './appearance/map';
2
3
  import type { RequiredValidator } from './validators/required';
3
4
 
@@ -18,6 +19,16 @@ export function isLocationFieldValue(
18
19
  );
19
20
  }
20
21
 
22
+ export function isLocalizedLocationFieldValue(
23
+ value: unknown,
24
+ ): value is LocalizedFieldValue<LocationFieldValue> {
25
+ return (
26
+ typeof value === 'object' &&
27
+ value !== null &&
28
+ Object.values(value).every(isLocationFieldValue)
29
+ );
30
+ }
31
+
21
32
  export type LocationFieldValidators = {
22
33
  /** Value must be specified or it won't be valid */
23
34
  required?: RequiredValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { LinkEmbedEditorConfiguration } from './appearance/link_embed';
2
3
  import type { LinkSelectEditorConfiguration } from './appearance/link_select';
3
4
  import type { ItemItemTypeValidator } from './validators/item_item_type';
@@ -10,6 +11,16 @@ export function isLinkFieldValue(value: unknown): value is LinkFieldValue {
10
11
  return typeof value === 'string' || value === null;
11
12
  }
12
13
 
14
+ export function isLocalizedLinkFieldValue(
15
+ value: unknown,
16
+ ): value is LocalizedFieldValue<LinkFieldValue> {
17
+ return (
18
+ typeof value === 'object' &&
19
+ value !== null &&
20
+ Object.values(value).every(isLinkFieldValue)
21
+ );
22
+ }
23
+
13
24
  export type LinkFieldValidators = {
14
25
  /** Only accept references to records of the specified models */
15
26
  item_item_type: ItemItemTypeValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { LinksEmbedEditorConfiguration } from './appearance/links_embed';
2
3
  import type { LinksSelectEditorConfiguration } from './appearance/links_select';
3
4
  import type { ItemsItemTypeValidator } from './validators/items_item_type';
@@ -12,6 +13,16 @@ export function isLinksFieldValue(value: unknown): value is LinksFieldValue {
12
13
  );
13
14
  }
14
15
 
16
+ export function isLocalizedLinksFieldValue(
17
+ value: unknown,
18
+ ): value is LocalizedFieldValue<LinksFieldValue> {
19
+ return (
20
+ typeof value === 'object' &&
21
+ value !== null &&
22
+ Object.values(value).every(isLinksFieldValue)
23
+ );
24
+ }
25
+
15
26
  export type LinksFieldValidators = {
16
27
  /** Only accept references to records of the specified models */
17
28
  items_item_type: ItemsItemTypeValidator;
@@ -1,10 +1,14 @@
1
1
  import type * as RawApiTypes from '../generated/RawApiTypes';
2
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
3
+ import type { RichTextEditorConfiguration } from './appearance/rich_text';
2
4
  import {
3
5
  type BlockItemInARequest,
4
6
  isItemId,
5
7
  isItemWithOptionalIdAndMeta,
6
8
  isItemWithOptionalMeta,
7
9
  } from './single_block';
10
+ import type { RichTextBlocksValidator } from './validators/rich_text_blocks';
11
+ import type { SizeValidator } from './validators/size';
8
12
 
9
13
  /**
10
14
  * MODULAR CONTENT FIELD TYPE SYSTEM FOR DATOCMS
@@ -93,6 +97,16 @@ export function isRichTextFieldValue(
93
97
  );
94
98
  }
95
99
 
100
+ export function isLocalizedRichTextFieldValue(
101
+ value: unknown,
102
+ ): value is LocalizedFieldValue<RichTextFieldValue> {
103
+ return (
104
+ typeof value === 'object' &&
105
+ value !== null &&
106
+ Object.values(value).every(isRichTextFieldValue)
107
+ );
108
+ }
109
+
96
110
  /**
97
111
  * Type guard for Modular Content field values in API request format.
98
112
  * Allows blocks as string IDs, full objects with IDs, or objects without IDs.
@@ -113,6 +127,16 @@ export function isRichTextFieldValueAsRequest(
113
127
  });
114
128
  }
115
129
 
130
+ export function isLocalizedRichTextFieldValueAsRequest(
131
+ value: unknown,
132
+ ): value is LocalizedFieldValue<RichTextFieldValueAsRequest> {
133
+ return (
134
+ typeof value === 'object' &&
135
+ value !== null &&
136
+ Object.values(value).every(isRichTextFieldValueAsRequest)
137
+ );
138
+ }
139
+
116
140
  /**
117
141
  * Type guard for Modular Content field values with nested blocks (?nested=true format).
118
142
  * Ensures all blocks are full RawApiTypes.Item objects with complete data.
@@ -130,9 +154,15 @@ export function isRichTextFieldValueWithNestedBlocks(
130
154
  });
131
155
  }
132
156
 
133
- import type { RichTextEditorConfiguration } from './appearance/rich_text';
134
- import type { RichTextBlocksValidator } from './validators/rich_text_blocks';
135
- import type { SizeValidator } from './validators/size';
157
+ export function isLocalizedRichTextFieldValueWithNestedBlocks(
158
+ value: unknown,
159
+ ): value is LocalizedFieldValue<RichTextFieldValueWithNestedBlocks> {
160
+ return (
161
+ typeof value === 'object' &&
162
+ value !== null &&
163
+ Object.values(value).every(isRichTextFieldValueWithNestedBlocks)
164
+ );
165
+ }
136
166
 
137
167
  export type RichTextFieldValidators = {
138
168
  /** Only accept references to block records of the specified block models */
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { SeoEditorConfiguration } from './appearance/seo';
2
3
  import type { DescriptionLengthValidator } from './validators/description_length';
3
4
  import type { FileSizeValidator } from './validators/file_size';
@@ -27,6 +28,16 @@ export function isSeoFieldValue(value: unknown): value is SeoFieldValue {
27
28
  );
28
29
  }
29
30
 
31
+ export function isLocalizedSeoFieldValue(
32
+ value: unknown,
33
+ ): value is LocalizedFieldValue<SeoFieldValue> {
34
+ return (
35
+ typeof value === 'object' &&
36
+ value !== null &&
37
+ Object.values(value).every(isSeoFieldValue)
38
+ );
39
+ }
40
+
30
41
  export type SeoFieldValidators = {
31
42
  /** SEO field has to specify one or more properties, or it won't be valid */
32
43
  required_seo_fields?: RequiredSeoFieldsValidator;
@@ -1,4 +1,5 @@
1
1
  import type * as RawApiTypes from '../generated/RawApiTypes';
2
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
2
3
 
3
4
  import type { FramedSingleBlockEditorConfiguration } from './appearance/framed_single_block';
4
5
  import type { FramelessSingleBlockEditorConfiguration } from './appearance/frameless_single_block';
@@ -159,6 +160,16 @@ export function isSingleBlockFieldValue(
159
160
  return typeof value === 'string' || value === null;
160
161
  }
161
162
 
163
+ export function isLocalizedSingleBlockFieldValue(
164
+ value: unknown,
165
+ ): value is LocalizedFieldValue<SingleBlockFieldValue> {
166
+ return (
167
+ typeof value === 'object' &&
168
+ value !== null &&
169
+ Object.values(value).every(isSingleBlockFieldValue)
170
+ );
171
+ }
172
+
162
173
  /**
163
174
  * Type guard for Single Block field values in API request format.
164
175
  * Allows block as string ID, full object with ID, or object without ID.
@@ -175,6 +186,16 @@ export function isSingleBlockFieldValueAsRequest(
175
186
  return isItemWithOptionalIdAndMeta(value);
176
187
  }
177
188
 
189
+ export function isLocalizedSingleBlockFieldValueAsRequest(
190
+ value: unknown,
191
+ ): value is LocalizedFieldValue<SingleBlockFieldValueAsRequest> {
192
+ return (
193
+ typeof value === 'object' &&
194
+ value !== null &&
195
+ Object.values(value).every(isSingleBlockFieldValueAsRequest)
196
+ );
197
+ }
198
+
178
199
  /**
179
200
  * Type guard for Single Block field values with nested blocks (?nested=true format).
180
201
  * Ensures block is a full RawApiTypes.Item object with complete data.
@@ -188,6 +209,16 @@ export function isSingleBlockFieldValueWithNestedBlocks(
188
209
  return isItemWithOptionalMeta(value);
189
210
  }
190
211
 
212
+ export function isLocalizedSingleBlockFieldValueWithNestedBlocks(
213
+ value: unknown,
214
+ ): value is LocalizedFieldValue<SingleBlockFieldValueWithNestedBlocks> {
215
+ return (
216
+ typeof value === 'object' &&
217
+ value !== null &&
218
+ Object.values(value).every(isSingleBlockFieldValueWithNestedBlocks)
219
+ );
220
+ }
221
+
191
222
  export type SingleBlockFieldValidators = {
192
223
  /** Only accept references to block records of the specified block models */
193
224
  single_block_blocks: SingleBlockBlocksValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { SlugEditorConfiguration } from './appearance/slug';
2
3
  import type { LengthValidator } from './validators/length';
3
4
  import type { RequiredValidator } from './validators/required';
@@ -8,7 +9,17 @@ export type SlugFieldValue = string | null;
8
9
 
9
10
  export function isSlugFieldValue(value: unknown): value is SlugFieldValue {
10
11
  if (value === null) return true;
11
- return typeof value === 'string' && /^[a-z0-9_]+(?:-[a-z0-9]+)*$/.test(value);
12
+ return typeof value === 'string';
13
+ }
14
+
15
+ export function isLocalizedSlugFieldValue(
16
+ value: unknown,
17
+ ): value is LocalizedFieldValue<SlugFieldValue> {
18
+ return (
19
+ typeof value === 'object' &&
20
+ value !== null &&
21
+ Object.values(value).every(isSlugFieldValue)
22
+ );
12
23
  }
13
24
 
14
25
  export type SlugFieldValidators = {
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { SingleLineEditorConfiguration } from './appearance/single_line';
2
3
  import type { StringRadioGroupEditorConfiguration } from './appearance/string_radio_group';
3
4
  import type { StringSelectEditorConfiguration } from './appearance/string_select';
@@ -13,6 +14,16 @@ export function isStringFieldValue(value: unknown): value is StringFieldValue {
13
14
  return typeof value === 'string' || value === null;
14
15
  }
15
16
 
17
+ export function isLocalizedStringFieldValue(
18
+ value: unknown,
19
+ ): value is LocalizedFieldValue<StringFieldValue> {
20
+ return (
21
+ typeof value === 'object' &&
22
+ value !== null &&
23
+ Object.values(value).every(isStringFieldValue)
24
+ );
25
+ }
26
+
16
27
  export type StringFieldValidators = {
17
28
  /** Value must be specified or it won't be valid */
18
29
  required?: RequiredValidator;
@@ -9,6 +9,7 @@ import {
9
9
  isInlineBlock,
10
10
  } from 'datocms-structured-text-utils';
11
11
  import type * as RawApiTypes from '../generated/RawApiTypes';
12
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
12
13
  import type { StructuredTextEditorConfiguration } from './appearance/structured_text';
13
14
  import {
14
15
  type BlockItemInARequest,
@@ -144,6 +145,16 @@ export function isStructuredTextFieldValue(
144
145
  });
145
146
  }
146
147
 
148
+ export function isLocalizedStructuredTextFieldValue(
149
+ value: unknown,
150
+ ): value is LocalizedFieldValue<StructuredTextFieldValue> {
151
+ return (
152
+ typeof value === 'object' &&
153
+ value !== null &&
154
+ Object.values(value).every(isStructuredTextFieldValue)
155
+ );
156
+ }
157
+
147
158
  /**
148
159
  * Type guard for structured text field values in API request format.
149
160
  * Allows blocks as string IDs, full objects with IDs, or objects without IDs.
@@ -169,6 +180,16 @@ export function isStructuredTextFieldValueAsRequest(
169
180
  });
170
181
  }
171
182
 
183
+ export function isLocalizedStructuredTextFieldValueAsRequest(
184
+ value: unknown,
185
+ ): value is LocalizedFieldValue<StructuredTextFieldValueAsRequest> {
186
+ return (
187
+ typeof value === 'object' &&
188
+ value !== null &&
189
+ Object.values(value).every(isStructuredTextFieldValueAsRequest)
190
+ );
191
+ }
192
+
172
193
  /**
173
194
  * Type guard for structured text field values with nested blocks (?nested=true format).
174
195
  * Ensures all block/inlineBlock nodes have full RawApiTypes.Item objects.
@@ -191,6 +212,16 @@ export function isStructuredTextFieldValueWithNestedBlocks(
191
212
  });
192
213
  }
193
214
 
215
+ export function isLocalizedStructuredTextFieldValueWithNestedBlocks(
216
+ value: unknown,
217
+ ): value is LocalizedFieldValue<StructuredTextFieldValueWithNestedBlocks> {
218
+ return (
219
+ typeof value === 'object' &&
220
+ value !== null &&
221
+ Object.values(value).every(isStructuredTextFieldValueWithNestedBlocks)
222
+ );
223
+ }
224
+
194
225
  export type StructuredTextFieldValidators = {
195
226
  /** Only accept references to block records of the specified block models */
196
227
  structured_text_blocks: StructuredTextBlocksValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { MarkdownEditorConfiguration } from './appearance/markdown';
2
3
  import type { TextareaEditorConfiguration } from './appearance/textarea';
3
4
  import type { WysiwygEditorConfiguration } from './appearance/wysiwyg';
@@ -12,6 +13,16 @@ export function isTextFieldValue(value: unknown): value is TextFieldValue {
12
13
  return typeof value === 'string' || value === null;
13
14
  }
14
15
 
16
+ export function isLocalizedTextFieldValue(
17
+ value: unknown,
18
+ ): value is LocalizedFieldValue<TextFieldValue> {
19
+ return (
20
+ typeof value === 'object' &&
21
+ value !== null &&
22
+ Object.values(value).every(isTextFieldValue)
23
+ );
24
+ }
25
+
15
26
  export type TextFieldValidators = {
16
27
  /** Value must be specified or it won't be valid */
17
28
  required?: RequiredValidator;
@@ -1,3 +1,4 @@
1
+ import type { LocalizedFieldValue } from '../utilities/fieldValue';
1
2
  import type { VideoEditorConfiguration } from './appearance/video';
2
3
  import type { RequiredValidator } from './validators/required';
3
4
 
@@ -22,6 +23,16 @@ export function isVideoFieldValue(value: unknown): value is VideoFieldValue {
22
23
  );
23
24
  }
24
25
 
26
+ export function isLocalizedVideoFieldValue(
27
+ value: unknown,
28
+ ): value is LocalizedFieldValue<VideoFieldValue> {
29
+ return (
30
+ typeof value === 'object' &&
31
+ value !== null &&
32
+ Object.values(value).every(isVideoFieldValue)
33
+ );
34
+ }
35
+
25
36
  export type VideoFieldValidators = {
26
37
  /** Value must be specified or it won't be valid */
27
38
  required?: RequiredValidator;
@@ -147,7 +147,7 @@ export class Client {
147
147
  ...this.config,
148
148
  ...options,
149
149
  logFn: this.config.logFn || console.log,
150
- userAgent: '@datocms/cma-client v5.1.2',
150
+ userAgent: '@datocms/cma-client v5.1.3',
151
151
  baseUrl: this.baseUrl,
152
152
  preCallStack: new Error().stack,
153
153
  extraHeaders: {
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@ export * from './utilities/fieldValue';
10
10
  export * from './utilities/id';
11
11
  export * from './utilities/recursiveBlocks';
12
12
  export * from './utilities/schemaRepository';
13
+ export * from './fieldTypes';
13
14
  export type { ApiTypes, RawApiTypes };
14
15
  // Legacy names
15
16
  export type { ApiTypes as SchemaTypes, RawApiTypes as SimpleSchemaTypes };
@@ -27,7 +27,7 @@ import type * as RawApiTypes from '../generated/RawApiTypes';
27
27
  * for various locales structured as an object, such as
28
28
  * `{ "en": "Hello", "it": "Ciao" }`
29
29
  */
30
- export type LocalizedFieldValue = Record<string, unknown>;
30
+ export type LocalizedFieldValue<T = unknown> = Record<string, T>;
31
31
 
32
32
  /**
33
33
  * Determines whether a DatoCMS field is localized or not.