@datocms/cma-client 5.1.3 → 5.1.4

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 (84) hide show
  1. package/dist/cjs/fieldTypes/lat_lon.js +6 -6
  2. package/dist/cjs/fieldTypes/lat_lon.js.map +1 -1
  3. package/dist/cjs/fieldTypes/rich_text.js.map +1 -1
  4. package/dist/cjs/fieldTypes/single_block.js.map +1 -1
  5. package/dist/cjs/fieldTypes/structured_text.js.map +1 -1
  6. package/dist/cjs/generated/Client.js +1 -1
  7. package/dist/cjs/generated/resources/Item.js +41 -23
  8. package/dist/cjs/generated/resources/Item.js.map +1 -1
  9. package/dist/cjs/generated/resources/ScheduledPublication.js +4 -2
  10. package/dist/cjs/generated/resources/ScheduledPublication.js.map +1 -1
  11. package/dist/cjs/generated/resources/ScheduledUnpublishing.js +4 -2
  12. package/dist/cjs/generated/resources/ScheduledUnpublishing.js.map +1 -1
  13. package/dist/cjs/generated/resources/Upload.js +4 -2
  14. package/dist/cjs/generated/resources/Upload.js.map +1 -1
  15. package/dist/cjs/index.js +1 -0
  16. package/dist/cjs/index.js.map +1 -1
  17. package/dist/cjs/utilities/buildBlockRecord.js.map +1 -1
  18. package/dist/cjs/utilities/itemDefinition.js +3 -0
  19. package/dist/cjs/utilities/itemDefinition.js.map +1 -0
  20. package/dist/esm/fieldTypes/lat_lon.d.ts +5 -5
  21. package/dist/esm/fieldTypes/lat_lon.js +3 -3
  22. package/dist/esm/fieldTypes/lat_lon.js.map +1 -1
  23. package/dist/esm/fieldTypes/rich_text.d.ts +8 -7
  24. package/dist/esm/fieldTypes/rich_text.js.map +1 -1
  25. package/dist/esm/fieldTypes/single_block.d.ts +15 -14
  26. package/dist/esm/fieldTypes/single_block.js.map +1 -1
  27. package/dist/esm/fieldTypes/structured_text.d.ts +13 -12
  28. package/dist/esm/fieldTypes/structured_text.js.map +1 -1
  29. package/dist/esm/generated/ApiTypes.d.ts +67 -62
  30. package/dist/esm/generated/Client.js +1 -1
  31. package/dist/esm/generated/RawApiTypes.d.ts +116 -121
  32. package/dist/esm/generated/resources/Field.d.ts +230 -230
  33. package/dist/esm/generated/resources/Item.d.ts +42 -24
  34. package/dist/esm/generated/resources/Item.js +41 -23
  35. package/dist/esm/generated/resources/Item.js.map +1 -1
  36. package/dist/esm/generated/resources/ItemVersion.d.ts +1 -1
  37. package/dist/esm/generated/resources/ScheduledPublication.d.ts +5 -2
  38. package/dist/esm/generated/resources/ScheduledPublication.js +4 -2
  39. package/dist/esm/generated/resources/ScheduledPublication.js.map +1 -1
  40. package/dist/esm/generated/resources/ScheduledUnpublishing.d.ts +5 -2
  41. package/dist/esm/generated/resources/ScheduledUnpublishing.js +4 -2
  42. package/dist/esm/generated/resources/ScheduledUnpublishing.js.map +1 -1
  43. package/dist/esm/generated/resources/Upload.d.ts +10 -2
  44. package/dist/esm/generated/resources/Upload.js +4 -2
  45. package/dist/esm/generated/resources/Upload.js.map +1 -1
  46. package/dist/esm/index.d.ts +1 -0
  47. package/dist/esm/index.js +1 -0
  48. package/dist/esm/index.js.map +1 -1
  49. package/dist/esm/utilities/buildBlockRecord.d.ts +5 -31
  50. package/dist/esm/utilities/buildBlockRecord.js.map +1 -1
  51. package/dist/esm/utilities/itemDefinition.d.ts +74 -0
  52. package/dist/esm/utilities/itemDefinition.js +2 -0
  53. package/dist/esm/utilities/itemDefinition.js.map +1 -0
  54. package/dist/types/fieldTypes/lat_lon.d.ts +5 -5
  55. package/dist/types/fieldTypes/rich_text.d.ts +8 -7
  56. package/dist/types/fieldTypes/single_block.d.ts +15 -14
  57. package/dist/types/fieldTypes/structured_text.d.ts +13 -12
  58. package/dist/types/generated/ApiTypes.d.ts +67 -62
  59. package/dist/types/generated/RawApiTypes.d.ts +116 -121
  60. package/dist/types/generated/resources/Field.d.ts +230 -230
  61. package/dist/types/generated/resources/Item.d.ts +42 -24
  62. package/dist/types/generated/resources/ItemVersion.d.ts +1 -1
  63. package/dist/types/generated/resources/ScheduledPublication.d.ts +5 -2
  64. package/dist/types/generated/resources/ScheduledUnpublishing.d.ts +5 -2
  65. package/dist/types/generated/resources/Upload.d.ts +10 -2
  66. package/dist/types/index.d.ts +1 -0
  67. package/dist/types/utilities/buildBlockRecord.d.ts +5 -31
  68. package/dist/types/utilities/itemDefinition.d.ts +74 -0
  69. package/package.json +5 -5
  70. package/resources.json +564 -0
  71. package/src/fieldTypes/lat_lon.ts +7 -9
  72. package/src/fieldTypes/rich_text.ts +22 -13
  73. package/src/fieldTypes/single_block.ts +42 -32
  74. package/src/fieldTypes/structured_text.ts +60 -23
  75. package/src/generated/ApiTypes.ts +110 -70
  76. package/src/generated/Client.ts +1 -1
  77. package/src/generated/RawApiTypes.ts +160 -138
  78. package/src/generated/resources/Item.ts +360 -108
  79. package/src/generated/resources/ScheduledPublication.ts +31 -11
  80. package/src/generated/resources/ScheduledUnpublishing.ts +31 -11
  81. package/src/generated/resources/Upload.ts +54 -12
  82. package/src/index.ts +1 -0
  83. package/src/utilities/buildBlockRecord.ts +19 -3
  84. package/src/utilities/itemDefinition.ts +229 -0
@@ -1,8 +1,16 @@
1
1
  import * as Utils from '@datocms/rest-client-utils';
2
2
  import BaseResource from '../../BaseResource';
3
+ import type {
4
+ ItemTypeDefinition,
5
+ ItemTypeDefinitionToItemDefinition,
6
+ ItemTypeDefinitionToItemDefinitionAsRequest,
7
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks,
8
+ } from '../../utilities/itemDefinition';
3
9
  import type * as ApiTypes from '../ApiTypes';
4
10
  import type * as RawApiTypes from '../RawApiTypes';
5
11
 
12
+ type NoInfer<T> = [T][T extends any ? 0 : never];
13
+
6
14
  export default class ScheduledPublication extends BaseResource {
7
15
  static readonly TYPE = 'scheduled_publication' as const;
8
16
 
@@ -64,11 +72,15 @@ export default class ScheduledPublication extends BaseResource {
64
72
  * @throws {ApiError}
65
73
  * @throws {TimeoutError}
66
74
  */
67
- destroy(itemId: string | ApiTypes.ItemData) {
68
- return this.rawDestroy(Utils.toId(itemId)).then((body) =>
69
- Utils.deserializeResponseBody<ApiTypes.ScheduledPublicationDestroyTargetSchema>(
70
- body,
71
- ),
75
+ destroy<D extends ItemTypeDefinition = ItemTypeDefinition>(
76
+ itemId: string | ApiTypes.ItemData,
77
+ ) {
78
+ return this.rawDestroy<D>(Utils.toId(itemId)).then((body) =>
79
+ Utils.deserializeResponseBody<
80
+ ApiTypes.ScheduledPublicationDestroyTargetSchema<
81
+ ItemTypeDefinitionToItemDefinition<NoInfer<D>>
82
+ >
83
+ >(body),
72
84
  );
73
85
  }
74
86
 
@@ -80,14 +92,22 @@ export default class ScheduledPublication extends BaseResource {
80
92
  * @throws {ApiError}
81
93
  * @throws {TimeoutError}
82
94
  */
83
- rawDestroy(
95
+ rawDestroy<D extends ItemTypeDefinition = ItemTypeDefinition>(
84
96
  itemId: string,
85
- ): Promise<RawApiTypes.ScheduledPublicationDestroyTargetSchema> {
86
- return this.client.request<RawApiTypes.ScheduledPublicationDestroyTargetSchema>(
87
- {
97
+ ): Promise<
98
+ RawApiTypes.ScheduledPublicationDestroyTargetSchema<
99
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<NoInfer<D>>
100
+ >
101
+ > {
102
+ return this.client
103
+ .request({
88
104
  method: 'DELETE',
89
105
  url: `/items/${itemId}/scheduled-publication`,
90
- },
91
- );
106
+ })
107
+ .then<
108
+ RawApiTypes.ScheduledPublicationDestroyTargetSchema<
109
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<NoInfer<D>>
110
+ >
111
+ >(Utils.deserializeRawResponseBodyWithItems);
92
112
  }
93
113
  }
@@ -1,8 +1,16 @@
1
1
  import * as Utils from '@datocms/rest-client-utils';
2
2
  import BaseResource from '../../BaseResource';
3
+ import type {
4
+ ItemTypeDefinition,
5
+ ItemTypeDefinitionToItemDefinition,
6
+ ItemTypeDefinitionToItemDefinitionAsRequest,
7
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks,
8
+ } from '../../utilities/itemDefinition';
3
9
  import type * as ApiTypes from '../ApiTypes';
4
10
  import type * as RawApiTypes from '../RawApiTypes';
5
11
 
12
+ type NoInfer<T> = [T][T extends any ? 0 : never];
13
+
6
14
  export default class ScheduledUnpublishing extends BaseResource {
7
15
  static readonly TYPE = 'scheduled_unpublishing' as const;
8
16
 
@@ -64,11 +72,15 @@ export default class ScheduledUnpublishing extends BaseResource {
64
72
  * @throws {ApiError}
65
73
  * @throws {TimeoutError}
66
74
  */
67
- destroy(itemId: string | ApiTypes.ItemData) {
68
- return this.rawDestroy(Utils.toId(itemId)).then((body) =>
69
- Utils.deserializeResponseBody<ApiTypes.ScheduledUnpublishingDestroyTargetSchema>(
70
- body,
71
- ),
75
+ destroy<D extends ItemTypeDefinition = ItemTypeDefinition>(
76
+ itemId: string | ApiTypes.ItemData,
77
+ ) {
78
+ return this.rawDestroy<D>(Utils.toId(itemId)).then((body) =>
79
+ Utils.deserializeResponseBody<
80
+ ApiTypes.ScheduledUnpublishingDestroyTargetSchema<
81
+ ItemTypeDefinitionToItemDefinition<NoInfer<D>>
82
+ >
83
+ >(body),
72
84
  );
73
85
  }
74
86
 
@@ -80,14 +92,22 @@ export default class ScheduledUnpublishing extends BaseResource {
80
92
  * @throws {ApiError}
81
93
  * @throws {TimeoutError}
82
94
  */
83
- rawDestroy(
95
+ rawDestroy<D extends ItemTypeDefinition = ItemTypeDefinition>(
84
96
  itemId: string,
85
- ): Promise<RawApiTypes.ScheduledUnpublishingDestroyTargetSchema> {
86
- return this.client.request<RawApiTypes.ScheduledUnpublishingDestroyTargetSchema>(
87
- {
97
+ ): Promise<
98
+ RawApiTypes.ScheduledUnpublishingDestroyTargetSchema<
99
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<NoInfer<D>>
100
+ >
101
+ > {
102
+ return this.client
103
+ .request({
88
104
  method: 'DELETE',
89
105
  url: `/items/${itemId}/scheduled-unpublishing`,
90
- },
91
- );
106
+ })
107
+ .then<
108
+ RawApiTypes.ScheduledUnpublishingDestroyTargetSchema<
109
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<NoInfer<D>>
110
+ >
111
+ >(Utils.deserializeRawResponseBodyWithItems);
92
112
  }
93
113
  }
@@ -1,8 +1,16 @@
1
1
  import * as Utils from '@datocms/rest-client-utils';
2
2
  import BaseResource from '../../BaseResource';
3
+ import type {
4
+ ItemTypeDefinition,
5
+ ItemTypeDefinitionToItemDefinition,
6
+ ItemTypeDefinitionToItemDefinitionAsRequest,
7
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks,
8
+ } from '../../utilities/itemDefinition';
3
9
  import type * as ApiTypes from '../ApiTypes';
4
10
  import type * as RawApiTypes from '../RawApiTypes';
5
11
 
12
+ type NoInfer<T> = [T][T extends any ? 0 : never];
13
+
6
14
  export default class Upload extends BaseResource {
7
15
  static readonly TYPE = 'upload' as const;
8
16
 
@@ -256,14 +264,38 @@ export default class Upload extends BaseResource {
256
264
  * @throws {ApiError}
257
265
  * @throws {TimeoutError}
258
266
  */
259
- references(
267
+ references<D extends ItemTypeDefinition = ItemTypeDefinition>(
268
+ uploadId: string | ApiTypes.UploadData,
269
+ queryParams: ApiTypes.UploadReferencesHrefSchema & { nested: true },
270
+ ): Promise<
271
+ ApiTypes.UploadReferencesTargetSchema<
272
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<NoInfer<D>>
273
+ >
274
+ >;
275
+ references<D extends ItemTypeDefinition = ItemTypeDefinition>(
276
+ uploadId: string | ApiTypes.UploadData,
277
+ queryParams?: ApiTypes.UploadReferencesHrefSchema & {
278
+ nested?: false | undefined;
279
+ },
280
+ ): Promise<
281
+ ApiTypes.UploadReferencesTargetSchema<
282
+ ItemTypeDefinitionToItemDefinition<NoInfer<D>>
283
+ >
284
+ >;
285
+ /**
286
+ * Referenced records
287
+ *
288
+ * Read more: https://www.datocms.com/docs/content-management-api/resources/upload/references
289
+ *
290
+ * @throws {ApiError}
291
+ * @throws {TimeoutError}
292
+ */
293
+ references<D extends ItemTypeDefinition = ItemTypeDefinition>(
260
294
  uploadId: string | ApiTypes.UploadData,
261
295
  queryParams?: ApiTypes.UploadReferencesHrefSchema,
262
296
  ) {
263
- return this.rawReferences(Utils.toId(uploadId), queryParams).then((body) =>
264
- Utils.deserializeResponseBody<ApiTypes.UploadReferencesTargetSchema>(
265
- body,
266
- ),
297
+ return this.rawReferences<D>(Utils.toId(uploadId), queryParams).then(
298
+ (body) => Utils.deserializeResponseBody(body),
267
299
  );
268
300
  }
269
301
 
@@ -275,15 +307,25 @@ export default class Upload extends BaseResource {
275
307
  * @throws {ApiError}
276
308
  * @throws {TimeoutError}
277
309
  */
278
- rawReferences(
310
+ rawReferences<D extends ItemTypeDefinition = ItemTypeDefinition>(
279
311
  uploadId: string,
280
312
  queryParams?: RawApiTypes.UploadReferencesHrefSchema,
281
- ): Promise<RawApiTypes.UploadReferencesTargetSchema> {
282
- return this.client.request<RawApiTypes.UploadReferencesTargetSchema>({
283
- method: 'GET',
284
- url: `/uploads/${uploadId}/references`,
285
- queryParams,
286
- });
313
+ ): Promise<
314
+ RawApiTypes.UploadReferencesTargetSchema<
315
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<NoInfer<D>>
316
+ >
317
+ > {
318
+ return this.client
319
+ .request({
320
+ method: 'GET',
321
+ url: `/uploads/${uploadId}/references`,
322
+ queryParams,
323
+ })
324
+ .then<
325
+ RawApiTypes.UploadReferencesTargetSchema<
326
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<NoInfer<D>>
327
+ >
328
+ >(Utils.deserializeRawResponseBodyWithItems);
287
329
  }
288
330
 
289
331
  /**
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 './utilities/itemDefinition';
13
14
  export * from './fieldTypes';
14
15
  export type { ApiTypes, RawApiTypes };
15
16
  // Legacy names
@@ -1,10 +1,26 @@
1
1
  import * as Utils from '@datocms/rest-client-utils';
2
+ import type { NewBlockInARequest } from '../fieldTypes';
2
3
  import type * as ApiTypes from '../generated/ApiTypes';
3
- import type * as RawApiTypes from '../generated/RawApiTypes';
4
4
  import { Item } from '../generated/resources';
5
+ import type {
6
+ ItemTypeDefinition,
7
+ ItemTypeDefinitionToItemDefinitionAsRequest,
8
+ } from './itemDefinition';
5
9
 
6
- export function buildBlockRecord(body: ApiTypes.ItemUpdateSchema) {
7
- return Utils.serializeRequestBody<RawApiTypes.ItemUpdateSchema>(body, {
10
+ type NoInfer<T> = [T][T extends any ? 0 : never];
11
+
12
+ export function buildBlockRecord<
13
+ D extends ItemTypeDefinition = ItemTypeDefinition,
14
+ >(
15
+ body: ApiTypes.ItemUpdateSchema<
16
+ ItemTypeDefinitionToItemDefinitionAsRequest<NoInfer<D>>
17
+ >,
18
+ ): NewBlockInARequest<ItemTypeDefinitionToItemDefinitionAsRequest<NoInfer<D>>> {
19
+ return Utils.serializeRequestBody<{
20
+ data: NewBlockInARequest<
21
+ ItemTypeDefinitionToItemDefinitionAsRequest<NoInfer<D>>
22
+ >;
23
+ }>(body, {
8
24
  type: Item.TYPE,
9
25
  attributes: '*',
10
26
  relationships: ['item_type'],
@@ -0,0 +1,229 @@
1
+ import type {
2
+ BooleanFieldValue,
3
+ ColorFieldValue,
4
+ DateFieldValue,
5
+ DateTimeFieldValue,
6
+ FileFieldValue,
7
+ FloatFieldValue,
8
+ GalleryFieldValue,
9
+ IntegerFieldValue,
10
+ JsonFieldValue,
11
+ LatLonFieldValue,
12
+ LinkFieldValue,
13
+ LinksFieldValue,
14
+ RichTextFieldValue,
15
+ RichTextFieldValueAsRequest,
16
+ RichTextFieldValueWithNestedBlocks,
17
+ SeoFieldValue,
18
+ SingleBlockFieldValue,
19
+ SingleBlockFieldValueAsRequest,
20
+ SingleBlockFieldValueWithNestedBlocks,
21
+ SlugFieldValue,
22
+ StringFieldValue,
23
+ StructuredTextFieldValue,
24
+ StructuredTextFieldValueAsRequest,
25
+ StructuredTextFieldValueWithNestedBlocks,
26
+ TextFieldValue,
27
+ VideoFieldValue,
28
+ } from '../fieldTypes';
29
+ import type { LocalizedFieldValue } from './fieldValue';
30
+
31
+ /** Base field definition */
32
+ type BaseFieldDefinition<Type extends string> = {
33
+ type: Type;
34
+ localized?: boolean;
35
+ };
36
+
37
+ type RichTextFieldDefinition<
38
+ AllowedBlocks extends ItemTypeDefinition = ItemTypeDefinition,
39
+ > = BaseFieldDefinition<'rich_text'> & { blocks: AllowedBlocks };
40
+ type SingleBlockFieldDefinition<
41
+ AllowedBlocks extends ItemTypeDefinition = ItemTypeDefinition,
42
+ > = BaseFieldDefinition<'single_block'> & { blocks: AllowedBlocks };
43
+ type StructuredTextFieldDefinition<
44
+ AllowedBlocks extends ItemTypeDefinition = ItemTypeDefinition,
45
+ AllowedInlineBlocks extends ItemTypeDefinition = ItemTypeDefinition,
46
+ > = BaseFieldDefinition<'structured_text'> & {
47
+ blocks: AllowedBlocks;
48
+ inline_blocks: AllowedInlineBlocks;
49
+ };
50
+
51
+ /** Field definition union */
52
+ export type FieldDefinition =
53
+ | BaseFieldDefinition<
54
+ | 'boolean'
55
+ | 'color'
56
+ | 'date'
57
+ | 'date_time'
58
+ | 'file'
59
+ | 'float'
60
+ | 'gallery'
61
+ | 'integer'
62
+ | 'json'
63
+ | 'lat_lon'
64
+ | 'link'
65
+ | 'links'
66
+ | 'seo'
67
+ | 'slug'
68
+ | 'string'
69
+ | 'text'
70
+ | 'video'
71
+ | 'unknown'
72
+ >
73
+ | RichTextFieldDefinition
74
+ | SingleBlockFieldDefinition
75
+ | StructuredTextFieldDefinition;
76
+
77
+ /** Item type definition */
78
+ export type ItemTypeDefinition<
79
+ ItemTypeId extends string = string,
80
+ FieldDefinitions extends Record<string, FieldDefinition> = {},
81
+ > = {
82
+ itemTypeId: ItemTypeId;
83
+ fields: FieldDefinitions;
84
+ };
85
+
86
+ /** Item definition */
87
+ export type ItemDefinition<
88
+ ItemTypeId extends string = string,
89
+ FieldValues extends Record<string, unknown> = Record<string, unknown>,
90
+ > = {
91
+ itemTypeId: ItemTypeId;
92
+ fields: FieldValues;
93
+ };
94
+
95
+ /** Standard field values */
96
+ type FieldTypeToValue = {
97
+ boolean: BooleanFieldValue;
98
+ color: ColorFieldValue;
99
+ date: DateFieldValue;
100
+ date_time: DateTimeFieldValue;
101
+ file: FileFieldValue;
102
+ float: FloatFieldValue;
103
+ gallery: GalleryFieldValue;
104
+ integer: IntegerFieldValue;
105
+ json: JsonFieldValue;
106
+ lat_lon: LatLonFieldValue;
107
+ link: LinkFieldValue;
108
+ links: LinksFieldValue;
109
+ rich_text: RichTextFieldValue;
110
+ seo: SeoFieldValue;
111
+ single_block: SingleBlockFieldValue;
112
+ slug: SlugFieldValue;
113
+ string: StringFieldValue;
114
+ structured_text: StructuredTextFieldValue;
115
+ text: TextFieldValue;
116
+ video: VideoFieldValue;
117
+ unknown: unknown;
118
+ };
119
+
120
+ /** Localized wrapper */
121
+ type LocalizeIfNeeded<T extends FieldDefinition, Value> = T extends {
122
+ localized: true;
123
+ }
124
+ ? LocalizedFieldValue<Value>
125
+ : Value;
126
+
127
+ /** Standard mapping */
128
+ type FieldDefinitionToFieldValue<T extends FieldDefinition> = LocalizeIfNeeded<
129
+ T,
130
+ FieldTypeToValue[T['type']]
131
+ >;
132
+
133
+ /** AsRequest mapping (block fields become generic over allowed blocks) */
134
+ type FieldDefinitionToFieldValueAsRequest<T extends FieldDefinition> =
135
+ T extends RichTextFieldDefinition<infer B>
136
+ ? LocalizeIfNeeded<
137
+ T,
138
+ RichTextFieldValueAsRequest<
139
+ ItemTypeDefinitionToItemDefinitionAsRequest<B>
140
+ >
141
+ >
142
+ : T extends SingleBlockFieldDefinition<infer B>
143
+ ? LocalizeIfNeeded<
144
+ T,
145
+ SingleBlockFieldValueAsRequest<
146
+ ItemTypeDefinitionToItemDefinitionAsRequest<B>
147
+ >
148
+ >
149
+ : T extends StructuredTextFieldDefinition<infer B, infer I>
150
+ ? LocalizeIfNeeded<
151
+ T,
152
+ StructuredTextFieldValueAsRequest<
153
+ ItemTypeDefinitionToItemDefinitionAsRequest<B>,
154
+ ItemTypeDefinitionToItemDefinitionAsRequest<I>
155
+ >
156
+ >
157
+ : LocalizeIfNeeded<T, FieldTypeToValue[T['type']]>;
158
+
159
+ type FieldDefinitionToFieldValueWithNestedBlocks<T extends FieldDefinition> =
160
+ T extends RichTextFieldDefinition<infer B>
161
+ ? LocalizeIfNeeded<
162
+ T,
163
+ RichTextFieldValueWithNestedBlocks<
164
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<B>
165
+ >
166
+ >
167
+ : T extends SingleBlockFieldDefinition<infer B>
168
+ ? LocalizeIfNeeded<
169
+ T,
170
+ SingleBlockFieldValueWithNestedBlocks<
171
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<B>
172
+ >
173
+ >
174
+ : T extends StructuredTextFieldDefinition<infer B, infer I>
175
+ ? LocalizeIfNeeded<
176
+ T,
177
+ StructuredTextFieldValueWithNestedBlocks<
178
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<B>,
179
+ ItemTypeDefinitionToItemDefinitionWithNestedBlocks<I>
180
+ >
181
+ >
182
+ : LocalizeIfNeeded<T, FieldTypeToValue[T['type']]>;
183
+
184
+ /** Transformers */
185
+ export type ItemTypeDefinitionToItemDefinition<T extends ItemTypeDefinition> =
186
+ T extends ItemTypeDefinition
187
+ ? keyof T['fields'] extends never
188
+ ? ItemDefinition<T['itemTypeId']>
189
+ : ItemDefinition<
190
+ T['itemTypeId'],
191
+ {
192
+ [K in keyof T['fields']]: T['fields'][K] extends FieldDefinition
193
+ ? FieldDefinitionToFieldValue<T['fields'][K]>
194
+ : never;
195
+ }
196
+ >
197
+ : never;
198
+
199
+ export type ItemTypeDefinitionToItemDefinitionAsRequest<
200
+ T extends ItemTypeDefinition,
201
+ > = T extends ItemTypeDefinition
202
+ ? keyof T['fields'] extends never
203
+ ? ItemDefinition<T['itemTypeId']>
204
+ : ItemDefinition<
205
+ T['itemTypeId'],
206
+ Partial<{
207
+ [K in keyof T['fields']]: T['fields'][K] extends FieldDefinition
208
+ ? FieldDefinitionToFieldValueAsRequest<T['fields'][K]>
209
+ : never;
210
+ }>
211
+ >
212
+ : never;
213
+
214
+ export type ItemTypeDefinitionToItemDefinitionWithNestedBlocks<
215
+ T extends ItemTypeDefinition,
216
+ > = T extends ItemTypeDefinition
217
+ ? keyof T['fields'] extends never
218
+ ? ItemDefinition<T['itemTypeId']>
219
+ : ItemDefinition<
220
+ T['itemTypeId'],
221
+ {
222
+ [K in keyof T['fields']]: T['fields'][K] extends FieldDefinition
223
+ ? FieldDefinitionToFieldValueWithNestedBlocks<T['fields'][K]>
224
+ : never;
225
+ }
226
+ >
227
+ : never;
228
+
229
+ export type UnknownField = Record<string, unknown>;