@prismicio/types-internal 2.2.0-alpha.8 → 2.2.0-traverse.alpha-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/lib/_internal/utils.d.ts +17 -0
  2. package/lib/_internal/utils.js +9 -0
  3. package/lib/common/Asset.d.ts +3 -4
  4. package/lib/common/Embed.d.ts +1 -2
  5. package/lib/common/UUID.d.ts +7 -0
  6. package/lib/common/UUID.js +8 -0
  7. package/lib/common/index.d.ts +1 -0
  8. package/lib/common/index.js +1 -0
  9. package/lib/content/Document.d.ts +22 -3
  10. package/lib/content/Document.js +71 -1
  11. package/lib/content/fields/GroupContent.d.ts +7 -0
  12. package/lib/content/fields/GroupContent.js +34 -1
  13. package/lib/content/fields/WidgetContent.d.ts +6 -6
  14. package/lib/content/fields/nestable/NestableContent.d.ts +2 -0
  15. package/lib/content/fields/nestable/NestableContent.js +29 -1
  16. package/lib/content/fields/slices/Slice/CompositeSliceContent.d.ts +8 -0
  17. package/lib/content/fields/slices/Slice/CompositeSliceContent.js +56 -1
  18. package/lib/content/fields/slices/Slice/RepeatableContent.js +0 -1
  19. package/lib/content/fields/slices/Slice/SharedSliceContent.d.ts +8 -0
  20. package/lib/content/fields/slices/Slice/SharedSliceContent.js +58 -1
  21. package/lib/content/fields/slices/SlicesContent.d.ts +7 -0
  22. package/lib/content/fields/slices/SlicesContent.js +70 -1
  23. package/lib/customtypes/CustomType.d.ts +1 -0
  24. package/lib/customtypes/CustomType.js +8 -1
  25. package/lib/customtypes/widgets/slices/CompositeSlice.d.ts +2 -0
  26. package/lib/customtypes/widgets/slices/CompositeSlice.js +5 -1
  27. package/lib/customtypes/widgets/slices/LegacySlice.d.ts +2 -0
  28. package/lib/customtypes/widgets/slices/LegacySlice.js +5 -1
  29. package/lib/customtypes/widgets/slices/SharedSlice.d.ts +4 -0
  30. package/lib/customtypes/widgets/slices/SharedSlice.js +9 -1
  31. package/lib/import/converters/Document.d.ts +2 -2
  32. package/lib/import/converters/Document.js +6 -6
  33. package/lib/import/converters/fields/Slices/SharedSlice.d.ts +4 -0
  34. package/lib/import/converters/fields/Slices/SharedSlice.js +19 -0
  35. package/lib/import/converters/fields/Slices/SharedSliceContent.d.ts +10 -0
  36. package/lib/import/converters/fields/Slices/SharedSliceContent.js +58 -0
  37. package/lib/import/converters/fields/Slices/Slices.d.ts +4 -0
  38. package/lib/import/converters/fields/Slices/Slices.js +16 -0
  39. package/lib/import/converters/fields/Slices/index.d.ts +1 -0
  40. package/lib/import/converters/fields/Slices/index.js +4 -0
  41. package/lib/import/converters/fields/UID.d.ts +1 -1
  42. package/lib/import/converters/fields/UID.js +0 -2
  43. package/lib/import/converters/fields/index.d.ts +1 -0
  44. package/lib/import/converters/fields/index.js +1 -0
  45. package/lib/import/converters/fields/nestable/Embed.d.ts +2 -1
  46. package/lib/import/converters/fields/nestable/Embed.js +24 -5
  47. package/lib/import/converters/fields/nestable/Image.d.ts +2 -2
  48. package/lib/import/converters/fields/nestable/Image.js +8 -8
  49. package/lib/import/converters/fields/nestable/Link.d.ts +1 -1
  50. package/lib/import/converters/fields/nestable/Link.js +6 -6
  51. package/lib/import/converters/fields/nestable/Nestable.d.ts +4 -3
  52. package/lib/import/converters/fields/nestable/Nestable.js +2 -2
  53. package/lib/import/validators/Document.js +2 -2
  54. package/lib/import/validators/fields/ImportField.d.ts +17 -68
  55. package/lib/import/validators/fields/ImportField.js +8 -4
  56. package/lib/import/validators/fields/ImportSlices/ImportSlices.d.ts +8 -0
  57. package/lib/import/validators/fields/ImportSlices/ImportSlices.js +29 -0
  58. package/lib/import/validators/fields/ImportSlices/SharedSlice/SharedSlice.d.ts +14 -0
  59. package/lib/import/validators/fields/ImportSlices/SharedSlice/SharedSlice.js +61 -0
  60. package/lib/import/validators/fields/ImportSlices/SharedSlice/errors.d.ts +4 -0
  61. package/lib/import/validators/fields/ImportSlices/SharedSlice/errors.js +7 -0
  62. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/OptionalSharedSliceId.d.ts +2 -0
  63. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/OptionalSharedSliceId.js +15 -0
  64. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/SharedSliceContent.d.ts +17 -0
  65. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/SharedSliceContent.js +30 -0
  66. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/SharedSliceContentEntry.d.ts +43 -0
  67. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/SharedSliceContentEntry.js +69 -0
  68. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/errors.d.ts +4 -0
  69. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/errors.js +6 -0
  70. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/index.d.ts +2 -0
  71. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/index.js +5 -0
  72. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/types.d.ts +1 -0
  73. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/types.js +2 -0
  74. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceId.d.ts +9 -0
  75. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceId.js +39 -0
  76. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceType.d.ts +11 -0
  77. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceType.js +24 -0
  78. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceVariation.d.ts +11 -0
  79. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceVariation.js +24 -0
  80. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/index.d.ts +5 -0
  81. package/lib/import/validators/fields/ImportSlices/SharedSlice/fields/index.js +8 -0
  82. package/lib/import/validators/fields/ImportSlices/SharedSlice/index.d.ts +3 -0
  83. package/lib/import/validators/fields/ImportSlices/SharedSlice/index.js +6 -0
  84. package/lib/import/validators/fields/ImportSlices/SharedSlice/utils.d.ts +339 -0
  85. package/lib/import/validators/fields/ImportSlices/SharedSlice/utils.js +11 -0
  86. package/lib/import/validators/fields/ImportSlices/index.d.ts +1 -0
  87. package/lib/import/validators/fields/ImportSlices/index.js +4 -0
  88. package/lib/import/validators/fields/ImportSlices/utils.d.ts +4 -0
  89. package/lib/import/validators/fields/ImportSlices/utils.js +35 -0
  90. package/lib/import/validators/fields/UID.d.ts +2 -2
  91. package/lib/import/validators/fields/UID.js +1 -1
  92. package/lib/import/validators/fields/nestable/Embed.d.ts +6 -23
  93. package/lib/import/validators/fields/nestable/Embed.js +7 -25
  94. package/lib/import/validators/fields/nestable/GeoPoint.js +1 -1
  95. package/lib/import/validators/fields/nestable/Image/Decoder.d.ts +26 -0
  96. package/lib/import/validators/fields/nestable/Image/Decoder.js +40 -0
  97. package/lib/import/validators/fields/nestable/Image/Validator.d.ts +33 -0
  98. package/lib/import/validators/fields/nestable/Image/Validator.js +27 -0
  99. package/lib/import/validators/fields/nestable/Image/index.d.ts +26 -0
  100. package/lib/import/validators/fields/nestable/Image/index.js +41 -0
  101. package/lib/import/validators/fields/nestable/Image/model.d.ts +18 -0
  102. package/lib/import/validators/fields/nestable/Image/model.js +2 -0
  103. package/lib/import/validators/fields/nestable/Link.js +2 -2
  104. package/lib/import/validators/fields/nestable/Nestable.d.ts +9 -60
  105. package/lib/import/validators/fields/nestable/index.d.ts +1 -0
  106. package/lib/import/validators/fields/nestable/index.js +1 -0
  107. package/lib/utils/DocumentId.d.ts +2 -1
  108. package/lib/utils/DocumentId.js +3 -3
  109. package/lib/utils/io-ts.d.ts +2 -0
  110. package/lib/utils/io-ts.js +22 -0
  111. package/lib/validators/BasicTypes.d.ts +0 -1
  112. package/lib/validators/BasicTypes.js +7 -8
  113. package/lib/validators/DefaultOrElse.js +1 -1
  114. package/lib/validators/NonEmptyString.js +1 -1
  115. package/lib/validators/NullOrT.d.ts +2 -0
  116. package/lib/validators/NullOrT.js +12 -0
  117. package/lib/validators/function.d.ts +4 -4
  118. package/lib/validators/function.js +6 -6
  119. package/package.json +4 -2
  120. package/src/_internal/utils.ts +39 -0
  121. package/src/common/Asset.ts +4 -5
  122. package/src/common/Embed.ts +22 -0
  123. package/src/common/UUID.ts +19 -0
  124. package/src/common/index.ts +1 -0
  125. package/src/content/Document.ts +96 -1
  126. package/src/content/fields/GroupContent.ts +47 -0
  127. package/src/content/fields/nestable/NestableContent.ts +32 -0
  128. package/src/content/fields/slices/Slice/CompositeSliceContent.ts +77 -0
  129. package/src/content/fields/slices/Slice/RepeatableContent.ts +0 -1
  130. package/src/content/fields/slices/Slice/SharedSliceContent.ts +82 -0
  131. package/src/content/fields/slices/SlicesContent.ts +96 -0
  132. package/src/customtypes/CustomType.ts +17 -0
  133. package/src/customtypes/widgets/slices/CompositeSlice.ts +7 -0
  134. package/src/customtypes/widgets/slices/LegacySlice.ts +7 -0
  135. package/src/customtypes/widgets/slices/SharedSlice.ts +12 -0
  136. package/src/import/converters/Document.ts +10 -8
  137. package/src/import/converters/fields/Slices/SharedSlice.ts +24 -0
  138. package/src/import/converters/fields/Slices/SharedSliceContent.ts +94 -0
  139. package/src/import/converters/fields/Slices/Slices.ts +20 -0
  140. package/src/import/converters/fields/Slices/index.ts +1 -0
  141. package/src/import/converters/fields/UID.ts +1 -5
  142. package/src/import/converters/fields/index.ts +1 -0
  143. package/src/import/converters/fields/nestable/Embed.ts +29 -7
  144. package/src/import/converters/fields/nestable/Image.ts +6 -6
  145. package/src/import/converters/fields/nestable/Link.ts +5 -5
  146. package/src/import/converters/fields/nestable/Nestable.ts +7 -5
  147. package/src/import/validators/Document.ts +3 -3
  148. package/src/import/validators/fields/ImportField.ts +12 -6
  149. package/src/import/validators/fields/ImportSlices/ImportSlices.ts +54 -0
  150. package/src/import/validators/fields/ImportSlices/SharedSlice/SharedSlice.ts +116 -0
  151. package/src/import/validators/fields/ImportSlices/SharedSlice/errors.ts +6 -0
  152. package/src/import/validators/fields/ImportSlices/SharedSlice/fields/OptionalSharedSliceId.ts +20 -0
  153. package/src/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/SharedSliceContent.ts +64 -0
  154. package/src/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/SharedSliceContentEntry.ts +100 -0
  155. package/src/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/errors.ts +10 -0
  156. package/src/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/index.ts +2 -0
  157. package/src/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceContent/types.ts +1 -0
  158. package/src/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceId.ts +65 -0
  159. package/src/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceType.ts +45 -0
  160. package/src/import/validators/fields/ImportSlices/SharedSlice/fields/SharedSliceVariation.ts +45 -0
  161. package/src/import/validators/fields/ImportSlices/SharedSlice/fields/index.ts +5 -0
  162. package/src/import/validators/fields/ImportSlices/SharedSlice/index.ts +3 -0
  163. package/src/import/validators/fields/ImportSlices/SharedSlice/utils.ts +21 -0
  164. package/src/import/validators/fields/ImportSlices/index.ts +1 -0
  165. package/src/import/validators/fields/ImportSlices/utils.ts +43 -0
  166. package/src/import/validators/fields/UID.ts +2 -2
  167. package/src/import/validators/fields/nestable/Embed.ts +9 -41
  168. package/src/import/validators/fields/nestable/GeoPoint.ts +2 -2
  169. package/src/import/validators/fields/nestable/Image/Decoder.ts +61 -0
  170. package/src/import/validators/fields/nestable/Image/Validator.ts +38 -0
  171. package/src/import/validators/fields/nestable/Image/index.ts +75 -0
  172. package/src/import/validators/fields/nestable/Image/model.ts +18 -0
  173. package/src/import/validators/fields/nestable/Link.ts +2 -2
  174. package/src/import/validators/fields/nestable/index.ts +1 -0
  175. package/src/utils/DocumentId.ts +4 -5
  176. package/src/utils/io-ts.ts +29 -0
  177. package/src/validators/BasicTypes.ts +13 -11
  178. package/src/validators/DefaultOrElse.ts +1 -1
  179. package/src/validators/NonEmptyString.ts +4 -5
  180. package/src/validators/function.ts +4 -4
  181. package/lib/import/validators/fields/nestable/Image.d.ts +0 -60
  182. package/lib/import/validators/fields/nestable/Image.js +0 -72
  183. package/src/import/validators/fields/nestable/Image.ts +0 -128
@@ -78,19 +78,19 @@ export function addType<A, O extends object, I, T extends string>(
78
78
  *
79
79
  * @example
80
80
  * expect(
81
- * withFallbackMessage(
82
- * t.type({age: withMessage(t.number, () => 'Invalid child')}),
81
+ * withCustomError(
82
+ * t.type({age: withCustomError(t.number, () => 'Invalid child')}),
83
83
  * () => "Invalid parent"
84
84
  * )
85
85
  * ).toSubsetEqualLeft([{message: "Invalid child"}])
86
86
  * expect(
87
- * withFallbackMessage(
87
+ * withCustomError(
88
88
  * t.type({age: t.number}),
89
89
  * () => "Invalid parent"
90
90
  * )
91
91
  * ).toSubsetEqualLeft([{message: "Invalid parent"}])
92
92
  */
93
- export function withFallbackMessage<C extends t.Any>(
93
+ export function withCustomError<C extends t.Any>(
94
94
  codec: C,
95
95
  message: (i: t.InputOf<C>, c: t.Context) => string,
96
96
  ): C {
@@ -1,60 +0,0 @@
1
- import * as t from "io-ts";
2
- export declare type ImageField = {
3
- id: string;
4
- width?: number;
5
- height?: number;
6
- edit: {
7
- x: number;
8
- y: number;
9
- zoom: number;
10
- background?: string;
11
- };
12
- credit?: string | null;
13
- alt?: string | null;
14
- };
15
- declare type ImageFieldWithThumbnails = ImageField & {
16
- thumbnails: Record<string, ImageField>;
17
- };
18
- declare const ImageFieldWithThumbnails: (field?: ({
19
- type: "Image";
20
- } & {
21
- fieldset?: string | null | undefined;
22
- config?: {
23
- label?: string | null | undefined;
24
- placeholder?: string;
25
- constraint?: {
26
- width?: number | null;
27
- height?: number | null;
28
- };
29
- thumbnails?: readonly ({
30
- name: string;
31
- } & {
32
- width?: number | null;
33
- height?: number | null;
34
- })[];
35
- };
36
- }) | undefined) => t.Type<ImageFieldWithThumbnails, ImageFieldWithThumbnails, unknown>;
37
- export declare const ImportImage: (field?: ({
38
- type: "Image";
39
- } & {
40
- fieldset?: string | null | undefined;
41
- config?: {
42
- label?: string | null | undefined;
43
- placeholder?: string;
44
- constraint?: {
45
- width?: number | null;
46
- height?: number | null;
47
- };
48
- thumbnails?: readonly ({
49
- name: string;
50
- } & {
51
- width?: number | null;
52
- height?: number | null;
53
- })[];
54
- };
55
- }) | undefined) => t.Type<{
56
- type: "Image";
57
- value: ImageFieldWithThumbnails | null;
58
- }, ImageFieldWithThumbnails | undefined, unknown>;
59
- export declare type ImportImage = t.TypeOf<ReturnType<typeof ImportImage>>;
60
- export {};
@@ -1,72 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImportImage = void 0;
4
- const tslib_1 = require("tslib");
5
- const Either_1 = require("fp-ts/Either");
6
- const function_1 = require("fp-ts/lib/function");
7
- const t = (0, tslib_1.__importStar)(require("io-ts"));
8
- const validators_1 = require("../../../../validators");
9
- const validators_2 = require("../../../../validators");
10
- const ImportContent_1 = require("../ImportContent");
11
- const ImageFieldValidator = validators_1.AnyObject.pipe(t.intersection([
12
- t.type({
13
- id: validators_2.String,
14
- }),
15
- t.partial({
16
- width: validators_1.Number,
17
- height: validators_1.Number,
18
- edit: validators_1.AnyObject.pipe(t.partial({
19
- x: validators_1.Number,
20
- y: validators_1.Number,
21
- zoom: validators_1.Number,
22
- background: validators_2.String,
23
- })),
24
- credit: validators_2.StringOrNull,
25
- alt: validators_2.StringOrNull,
26
- }),
27
- ]));
28
- const ThumbnailsValidator = t.record(t.string, ImageFieldValidator);
29
- const encodeImageField = (image, mainImage, constraints) => {
30
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
31
- const background = (_a = image === null || image === void 0 ? void 0 : image.edit) === null || _a === void 0 ? void 0 : _a.background;
32
- const width = (_b = constraints === null || constraints === void 0 ? void 0 : constraints.width) !== null && _b !== void 0 ? _b : image === null || image === void 0 ? void 0 : image.width;
33
- const height = (_c = constraints === null || constraints === void 0 ? void 0 : constraints.height) !== null && _c !== void 0 ? _c : image === null || image === void 0 ? void 0 : image.height;
34
- const alt = image === null || image === void 0 ? void 0 : image.alt;
35
- const credit = image === null || image === void 0 ? void 0 : image.credit;
36
- return {
37
- id: (_d = image === null || image === void 0 ? void 0 : image.id) !== null && _d !== void 0 ? _d : mainImage === null || mainImage === void 0 ? void 0 : mainImage.id,
38
- edit: {
39
- x: (_f = (_e = image === null || image === void 0 ? void 0 : image.edit) === null || _e === void 0 ? void 0 : _e.x) !== null && _f !== void 0 ? _f : 0,
40
- y: (_h = (_g = image === null || image === void 0 ? void 0 : image.edit) === null || _g === void 0 ? void 0 : _g.y) !== null && _h !== void 0 ? _h : 0,
41
- zoom: (_k = (_j = image === null || image === void 0 ? void 0 : image.edit) === null || _j === void 0 ? void 0 : _j.zoom) !== null && _k !== void 0 ? _k : 1,
42
- ...(background !== undefined ? { background } : {}),
43
- },
44
- ...(width !== undefined ? { width } : {}),
45
- ...(height !== undefined ? { height } : {}),
46
- ...(alt !== undefined ? { alt } : {}),
47
- ...(credit !== undefined ? { credit } : {}),
48
- };
49
- };
50
- const encodeThumbnails = (mainImage, thumbnails, field) => {
51
- var _a, _b, _c;
52
- return (_c = (_b = (_a = field === null || field === void 0 ? void 0 : field.config) === null || _a === void 0 ? void 0 : _a.thumbnails) === null || _b === void 0 ? void 0 : _b.reduce((acc, thumbnail) => ({
53
- ...acc,
54
- [thumbnail.name]: encodeImageField(thumbnails[thumbnail.name], mainImage, thumbnail),
55
- }), {})) !== null && _c !== void 0 ? _c : {};
56
- };
57
- const ImageFieldWithThumbnails = (field) => new t.Type("ImageFieldWithThumbnails", (u) => ImageFieldValidator.is(u) &&
58
- "thumbnails" in u &&
59
- ThumbnailsValidator.is(u["thumbnails"]), (u, ctx) => {
60
- return (0, function_1.pipe)(ImageFieldValidator.validate(u, ctx), (0, Either_1.chain)((mainImage) => {
61
- const { id, width, height, edit, credit, alt, ...maybeThumbnails } = mainImage;
62
- return (0, function_1.pipe)(ThumbnailsValidator.validate(maybeThumbnails, ctx), (0, Either_1.map)((thumbnails) => {
63
- var _a;
64
- return ({
65
- ...encodeImageField(mainImage, mainImage, (_a = field === null || field === void 0 ? void 0 : field.config) === null || _a === void 0 ? void 0 : _a.constraint),
66
- thumbnails: encodeThumbnails(mainImage, thumbnails, field),
67
- });
68
- }));
69
- }));
70
- }, t.identity);
71
- const ImportImage = (field) => (0, ImportContent_1.ImportContent)("Image", (0, validators_1.NullOrElse)(ImageFieldWithThumbnails(field)));
72
- exports.ImportImage = ImportImage;
@@ -1,128 +0,0 @@
1
- import { chain, map } from "fp-ts/Either"
2
- import { pipe } from "fp-ts/lib/function"
3
- import type { Validation } from "io-ts"
4
- import * as t from "io-ts"
5
-
6
- import type { Image } from "../../../../customtypes"
7
- import type ImageConstraint from "../../../../customtypes/widgets/shared/ImageConstraint"
8
- import { AnyObject, NullOrElse, Number } from "../../../../validators"
9
- import { String, StringOrNull } from "../../../../validators"
10
- import { ImportContent } from "../ImportContent"
11
-
12
- const ImageFieldValidator = AnyObject.pipe(
13
- t.intersection([
14
- t.type({
15
- id: String,
16
- }),
17
- t.partial({
18
- width: Number,
19
- height: Number,
20
- edit: AnyObject.pipe(
21
- t.partial({
22
- x: Number,
23
- y: Number,
24
- zoom: Number,
25
- background: String,
26
- }),
27
- ),
28
- credit: StringOrNull,
29
- alt: StringOrNull,
30
- }),
31
- ]),
32
- )
33
-
34
- const ThumbnailsValidator = t.record(t.string, ImageFieldValidator)
35
-
36
- export type ImageField = {
37
- id: string
38
- width?: number
39
- height?: number
40
- edit: {
41
- x: number
42
- y: number
43
- zoom: number
44
- background?: string
45
- }
46
- credit?: string | null
47
- alt?: string | null
48
- }
49
- type ImageFieldWithThumbnails = ImageField & {
50
- thumbnails: Record<string, ImageField>
51
- }
52
-
53
- const encodeImageField = (
54
- image: t.TypeOf<typeof ImageFieldValidator> | undefined,
55
- mainImage: t.TypeOf<typeof ImageFieldValidator>,
56
- constraints?: ImageConstraint,
57
- ): ImageField => {
58
- const background = image?.edit?.background
59
- const width = constraints?.width ?? image?.width
60
- const height = constraints?.height ?? image?.height
61
- const alt = image?.alt
62
- const credit = image?.credit
63
-
64
- return {
65
- id: image?.id ?? mainImage?.id,
66
- edit: {
67
- x: image?.edit?.x ?? 0,
68
- y: image?.edit?.y ?? 0,
69
- zoom: image?.edit?.zoom ?? 1,
70
- ...(background !== undefined ? { background } : {}),
71
- },
72
- ...(width !== undefined ? { width } : {}),
73
- ...(height !== undefined ? { height } : {}),
74
- ...(alt !== undefined ? { alt } : {}),
75
- ...(credit !== undefined ? { credit } : {}),
76
- }
77
- }
78
-
79
- const encodeThumbnails = (
80
- mainImage: t.TypeOf<typeof ImageFieldValidator>,
81
- thumbnails: t.TypeOf<typeof ThumbnailsValidator>,
82
- field?: Image,
83
- ) =>
84
- field?.config?.thumbnails?.reduce(
85
- (acc, thumbnail) => ({
86
- ...acc,
87
- [thumbnail.name]: encodeImageField(
88
- thumbnails[thumbnail.name],
89
- mainImage,
90
- thumbnail,
91
- ),
92
- }),
93
- {},
94
- ) ?? {}
95
-
96
- const ImageFieldWithThumbnails = (field?: Image) =>
97
- new t.Type<ImageFieldWithThumbnails>(
98
- "ImageFieldWithThumbnails",
99
- (u: unknown): u is ImageFieldWithThumbnails =>
100
- ImageFieldValidator.is(u) &&
101
- "thumbnails" in u &&
102
- ThumbnailsValidator.is(u["thumbnails"]),
103
- (u: unknown, ctx): Validation<ImageFieldWithThumbnails> => {
104
- return pipe(
105
- ImageFieldValidator.validate(u, ctx),
106
- chain((mainImage) => {
107
- const { id, width, height, edit, credit, alt, ...maybeThumbnails } =
108
- mainImage
109
- return pipe(
110
- ThumbnailsValidator.validate(maybeThumbnails, ctx),
111
- map((thumbnails) => ({
112
- ...encodeImageField(
113
- mainImage,
114
- mainImage,
115
- field?.config?.constraint,
116
- ),
117
- thumbnails: encodeThumbnails(mainImage, thumbnails, field),
118
- })),
119
- )
120
- }),
121
- )
122
- },
123
- t.identity,
124
- )
125
-
126
- export const ImportImage = (field?: Image) =>
127
- ImportContent("Image", NullOrElse(ImageFieldWithThumbnails(field)))
128
- export type ImportImage = t.TypeOf<ReturnType<typeof ImportImage>>