@prismicio/mock 0.0.4 → 0.0.8

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 (72) hide show
  1. package/README.md +4 -1
  2. package/dist/api/index.cjs +54 -35
  3. package/dist/api/index.cjs.map +1 -0
  4. package/dist/api/index.d.ts +4 -2
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/{index.mjs → index.js} +116 -63
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/index.cjs +365 -417
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.ts +157 -243
  11. package/dist/{index.mjs → index.js} +359 -409
  12. package/dist/index.js.map +1 -0
  13. package/dist/model/index.cjs +164 -204
  14. package/dist/model/index.cjs.map +1 -0
  15. package/dist/model/index.d.ts +73 -97
  16. package/dist/model/index.d.ts.map +1 -0
  17. package/dist/model/index.js +462 -0
  18. package/dist/model/index.js.map +1 -0
  19. package/dist/value/index.cjs +310 -519
  20. package/dist/value/index.cjs.map +1 -0
  21. package/dist/value/index.d.ts +71 -132
  22. package/dist/value/index.d.ts.map +1 -0
  23. package/dist/value/{index.mjs → index.js} +474 -629
  24. package/dist/value/index.js.map +1 -0
  25. package/package.json +21 -21
  26. package/src/constants.ts +3 -1
  27. package/src/lib/buildAlternativeLanguage.ts +18 -0
  28. package/src/lib/buildContentRelationshipField.ts +12 -5
  29. package/src/lib/buildEmbedField.ts +1 -1
  30. package/src/lib/buildImageFieldImage.ts +48 -0
  31. package/src/lib/createFaker.ts +19 -10
  32. package/src/lib/valueForModelMap.ts +2 -2
  33. package/src/model/buildMockGroupFieldMap.ts +65 -0
  34. package/src/model/contentRelationship.ts +14 -21
  35. package/src/model/customType.ts +49 -48
  36. package/src/model/group.ts +8 -15
  37. package/src/model/image.ts +13 -13
  38. package/src/model/index.ts +2 -0
  39. package/src/model/integrationFields.ts +4 -2
  40. package/src/model/select.ts +11 -16
  41. package/src/model/sharedSlice.ts +23 -30
  42. package/src/model/sharedSliceVariation.ts +33 -21
  43. package/src/model/slice.ts +15 -19
  44. package/src/model/sliceZone.ts +25 -42
  45. package/src/types.ts +130 -83
  46. package/src/value/color.ts +16 -6
  47. package/src/value/contentRelationship.ts +52 -36
  48. package/src/value/customType.ts +22 -3
  49. package/src/value/date.ts +25 -9
  50. package/src/value/embed.ts +18 -6
  51. package/src/value/geoPoint.ts +21 -9
  52. package/src/value/group.ts +35 -44
  53. package/src/value/image.ts +22 -9
  54. package/src/value/integrationFields.ts +26 -14
  55. package/src/value/keyText.ts +18 -6
  56. package/src/value/link.ts +33 -34
  57. package/src/value/linkToMedia.ts +15 -20
  58. package/src/value/number.ts +16 -6
  59. package/src/value/richText/heading.ts +7 -7
  60. package/src/value/richText/image.ts +6 -2
  61. package/src/value/richText/index.ts +1 -1
  62. package/src/value/select.ts +23 -8
  63. package/src/value/sharedSlice.ts +2 -2
  64. package/src/value/sharedSliceVariation.ts +6 -34
  65. package/src/value/slice.ts +5 -30
  66. package/src/value/sliceZone.ts +60 -69
  67. package/src/value/timestamp.ts +19 -6
  68. package/src/value/title.ts +26 -13
  69. package/src/value/uid.ts +1 -1
  70. package/dist/model/index.mjs +0 -448
  71. package/src/lib/buildImageField.ts +0 -34
  72. package/src/lib/buildMockGroupFieldMap.ts +0 -84
package/src/types.ts CHANGED
@@ -27,6 +27,8 @@ export type SetRequired<BaseType, Keys extends keyof BaseType> = Simplify<
27
27
  Required<Pick<BaseType, Keys>>
28
28
  >;
29
29
 
30
+ export type Seed = string | number | number[];
31
+
30
32
  export interface MockImageData {
31
33
  url: string;
32
34
  width: number;
@@ -43,11 +45,11 @@ export interface MockEmbedData {
43
45
  }
44
46
 
45
47
  export type MockRestApiConfig = {
46
- seed?: number;
48
+ seed?: Seed;
47
49
  };
48
50
 
49
51
  export type MockModelConfig = {
50
- seed?: number;
52
+ seed?: Seed;
51
53
  };
52
54
 
53
55
  // TODO: Add to @prismicio/types
@@ -58,45 +60,62 @@ export type PrismicModel =
58
60
  | prismicT.SharedSliceModel
59
61
  | prismicT.SharedSliceModelVariation;
60
62
 
63
+ export type GroupFieldModelMap = Record<
64
+ string,
65
+ prismicT.CustomTypeModelFieldForGroup
66
+ >;
67
+
61
68
  export type MockValueConfig<Model extends PrismicModel = PrismicModel> = {
62
- seed?: number;
69
+ seed?: Seed;
63
70
  model?: Model;
64
71
  };
65
72
 
66
- export type MockValueConfigForModel<Model extends PrismicModel> =
67
- Model extends prismicT.CustomTypeModelBooleanField
68
- ? value.MockBooleanValueConfig
69
- : Model extends prismicT.CustomTypeModelColorField
70
- ? value.MockColorValueConfig
71
- : Model extends prismicT.CustomTypeModelContentRelationshipField
72
- ? value.MockContentRelationshipValueConfig
73
- : Model extends prismicT.CustomTypeModelDateField
74
- ? value.MockDateValueConfig
75
- : Model extends prismicT.CustomTypeModelEmbedField
76
- ? value.MockEmbedValueConfig
77
- : Model extends prismicT.CustomTypeModelGeoPointField
78
- ? value.MockGeoPointValueConfig
79
- : Model extends prismicT.CustomTypeModelImageField
80
- ? value.MockImageValueConfig
81
- : Model extends prismicT.CustomTypeModelKeyTextField
82
- ? value.MockKeyTextValueConfig
83
- : Model extends prismicT.CustomTypeModelLinkField
84
- ? value.MockLinkValueConfig
85
- : Model extends prismicT.CustomTypeModelLinkToMediaField
86
- ? value.MockLinkToMediaValueConfig
87
- : Model extends prismicT.CustomTypeModelNumberField
88
- ? value.MockNumberValueConfig
89
- : Model extends prismicT.CustomTypeModelRichTextField
90
- ? value.MockRichTextValueConfig
91
- : Model extends prismicT.CustomTypeModelSelectField
92
- ? value.MockSelectValueConfig
93
- : Model extends prismicT.CustomTypeModelTimestampField
94
- ? value.MockTimestampValueConfig
95
- : Model extends prismicT.CustomTypeModelTitleField
96
- ? value.MockTitleValueConfig
97
- : Model extends prismicT.CustomTypeModelUIDField
98
- ? value.MockUIDValueConfig
99
- : never;
73
+ export type MockValueStateConfig<
74
+ State extends prismicT.FieldState = prismicT.FieldState,
75
+ > = {
76
+ state?: State;
77
+ };
78
+
79
+ export type MockValueConfigForModel<
80
+ Model extends PrismicModel,
81
+ State extends prismicT.FieldState = prismicT.FieldState,
82
+ > = Model extends prismicT.CustomTypeModelBooleanField
83
+ ? value.MockBooleanValueConfig<Model>
84
+ : Model extends prismicT.CustomTypeModelColorField
85
+ ? value.MockColorValueConfig<Model, State>
86
+ : Model extends prismicT.CustomTypeModelContentRelationshipField
87
+ ? value.MockContentRelationshipValueConfig<Model, State>
88
+ : Model extends prismicT.CustomTypeModelDateField
89
+ ? value.MockDateValueConfig<Model, State>
90
+ : Model extends prismicT.CustomTypeModelEmbedField
91
+ ? value.MockEmbedValueConfig<Model, State>
92
+ : Model extends prismicT.CustomTypeModelGeoPointField
93
+ ? value.MockGeoPointValueConfig<Model, State>
94
+ : Model extends prismicT.CustomTypeModelImageField
95
+ ? value.MockImageValueConfig<Model, State>
96
+ : Model extends prismicT.CustomTypeModelKeyTextField
97
+ ? value.MockKeyTextValueConfig<Model, State>
98
+ : Model extends prismicT.CustomTypeModelLinkField
99
+ ? value.MockLinkValueConfig<
100
+ typeof prismicT.LinkType[keyof typeof prismicT.LinkType],
101
+ Model,
102
+ State
103
+ >
104
+ : Model extends prismicT.CustomTypeModelLinkToMediaField
105
+ ? value.MockLinkToMediaValueConfig<Model, State>
106
+ : Model extends prismicT.CustomTypeModelNumberField
107
+ ? value.MockNumberValueConfig<Model, State>
108
+ : Model extends prismicT.CustomTypeModelRichTextField
109
+ ? value.MockRichTextValueConfig
110
+ : Model extends prismicT.CustomTypeModelSelectField
111
+ ? value.MockSelectValueConfig<Model, State>
112
+ : Model extends prismicT.CustomTypeModelTimestampField
113
+ ? value.MockTimestampValueConfig<Model, State>
114
+ : Model extends prismicT.CustomTypeModelTitleField
115
+ ? value.MockTitleValueConfig<Model, State>
116
+ : Model extends prismicT.CustomTypeModelUIDField
117
+ ? value.MockUIDValueConfig<Model>
118
+ : never;
100
119
 
101
120
  type CustomTypeModelStructuredTextField =
102
121
  | prismicT.CustomTypeModelRichTextField
@@ -105,7 +124,7 @@ type CustomTypeModelStructuredTextField =
105
124
  export type MockRichTextValueConfig<
106
125
  Model extends CustomTypeModelStructuredTextField = CustomTypeModelStructuredTextField,
107
126
  > = {
108
- seed?: number;
127
+ seed?: Seed;
109
128
  model?: Model;
110
129
  };
111
130
 
@@ -115,77 +134,105 @@ export type ModelValueMap<
115
134
  [P in keyof T]: ModelValue<T[P]>;
116
135
  };
117
136
 
118
- export type ModelValue<T extends PrismicModel> =
119
- T extends prismicT.CustomTypeModel
120
- ? CustomTypeModelValue<T>
121
- : T extends prismicT.CustomTypeModelUIDField
122
- ? prismicT.PrismicDocument["uid"]
123
- : T extends prismicT.CustomTypeModelFieldForGroup
124
- ? CustomTypeModelFieldForGroupValue<T>
125
- : T extends prismicT.CustomTypeModelGroupField
126
- ? CustomTypeModelGroupFieldValue<T>
127
- : T extends prismicT.CustomTypeModelSliceZoneField
128
- ? prismicT.SliceZone
129
- : T extends prismicT.CustomTypeModelSlice
130
- ? CustomTypeModelSliceValue<T>
131
- : T extends prismicT.CustomTypeModelSharedSlice
132
- ? // TODO: Allow providing a union of of Shared Slices
133
- prismicT.SharedSlice
134
- : T extends prismicT.SharedSliceModel
135
- ? SharedSliceModelValue<T>
136
- : T extends prismicT.SharedSliceModelVariation
137
- ? SharedSliceModelVariationValue<T>
138
- : never;
137
+ export type ModelValue<
138
+ T extends PrismicModel,
139
+ State extends prismicT.FieldState = prismicT.FieldState,
140
+ > = T extends prismicT.CustomTypeModel
141
+ ? CustomTypeModelValue<T>
142
+ : T extends prismicT.CustomTypeModelUIDField
143
+ ? prismicT.PrismicDocument["uid"]
144
+ : T extends prismicT.CustomTypeModelFieldForGroup
145
+ ? CustomTypeModelFieldForGroupValue<T, State>
146
+ : T extends prismicT.CustomTypeModelGroupField
147
+ ? CustomTypeModelGroupFieldValue<T, State>
148
+ : T extends prismicT.CustomTypeModelSliceZoneField
149
+ ? prismicT.SliceZone<
150
+ ValueOf<{
151
+ [P in keyof T["config"]["choices"] as P extends string
152
+ ? P
153
+ : never]: T["config"]["choices"][P] extends prismicT.CustomTypeModelSlice
154
+ ? CustomTypeModelSliceValue<
155
+ T["config"]["choices"][P],
156
+ P extends string ? P : string
157
+ >
158
+ : T["config"]["choices"][P] extends prismicT.CustomTypeModelSharedSlice
159
+ ? prismicT.SharedSlice<P extends string ? P : string>
160
+ : never;
161
+ }>,
162
+ State
163
+ >
164
+ : T extends prismicT.CustomTypeModelSlice
165
+ ? CustomTypeModelSliceValue<T>
166
+ : T extends prismicT.CustomTypeModelSharedSlice
167
+ ? // TODO: Allow providing a union of of Shared Slices
168
+ prismicT.SharedSlice
169
+ : T extends prismicT.SharedSliceModel
170
+ ? SharedSliceModelValue<T>
171
+ : T extends prismicT.SharedSliceModelVariation
172
+ ? SharedSliceModelVariationValue<T>
173
+ : never;
139
174
 
140
175
  type CustomTypeModelValue<T extends prismicT.CustomTypeModel> =
141
- prismicT.PrismicDocument<ModelValueMap<ValueOf<T["json"]>>>;
176
+ prismicT.PrismicDocument<
177
+ ModelValueMap<{
178
+ [P in keyof ValueOf<T["json"]> as ValueOf<
179
+ T["json"]
180
+ >[P]["type"] extends typeof prismicT.CustomTypeModelFieldType.UID
181
+ ? never
182
+ : P]: ValueOf<T["json"]>[P];
183
+ }>
184
+ >;
142
185
 
143
186
  type CustomTypeModelFieldForGroupValue<
144
187
  T extends prismicT.CustomTypeModelFieldForGroup,
188
+ State extends prismicT.FieldState = prismicT.FieldState,
145
189
  > = T extends prismicT.CustomTypeModelBooleanField
146
190
  ? prismicT.BooleanField
147
191
  : T extends prismicT.CustomTypeModelColorField
148
- ? prismicT.ColorField
192
+ ? prismicT.ColorField<State>
149
193
  : T extends prismicT.CustomTypeModelTitleField
150
- ? prismicT.TitleField
194
+ ? prismicT.TitleField<State>
151
195
  : T extends prismicT.CustomTypeModelRichTextField
152
- ? prismicT.RichTextField
196
+ ? prismicT.RichTextField<State>
153
197
  : T extends prismicT.CustomTypeModelImageField
154
- ? prismicT.ImageField
198
+ ? prismicT.ImageField<string | null, State>
155
199
  : T extends prismicT.CustomTypeModelLinkField
156
- ? prismicT.LinkField
200
+ ? prismicT.LinkField<string, string, never, State>
157
201
  : T extends prismicT.CustomTypeModelLinkToMediaField
158
- ? prismicT.LinkToMediaField
202
+ ? prismicT.LinkToMediaField<State>
159
203
  : T extends prismicT.CustomTypeModelContentRelationshipField
160
- ? prismicT.RelationField
204
+ ? prismicT.RelationField<string, string, never, State>
161
205
  : T extends prismicT.CustomTypeModelDateField
162
- ? prismicT.DateField
206
+ ? prismicT.DateField<State>
163
207
  : T extends prismicT.CustomTypeModelTimestampField
164
- ? prismicT.TimestampField
208
+ ? prismicT.TimestampField<State>
165
209
  : T extends prismicT.CustomTypeModelNumberField
166
- ? prismicT.NumberField
210
+ ? prismicT.NumberField<State>
167
211
  : T extends prismicT.CustomTypeModelKeyTextField
168
- ? prismicT.KeyTextField
212
+ ? prismicT.KeyTextField<State>
169
213
  : T extends prismicT.CustomTypeModelSelectField
170
- ? prismicT.SelectField
214
+ ? prismicT.SelectField<string, State>
171
215
  : T extends prismicT.CustomTypeModelEmbedField
172
- ? prismicT.EmbedField
216
+ ? prismicT.EmbedField<prismicT.AnyOEmbed & prismicT.OEmbedExtra, State>
173
217
  : T extends prismicT.CustomTypeModelGeoPointField
174
- ? prismicT.GeoPointField
218
+ ? prismicT.GeoPointField<State>
175
219
  : T extends prismicT.CustomTypeModelIntegrationFieldsField
176
- ? prismicT.IntegrationFields
220
+ ? prismicT.IntegrationFields<unknown, State>
177
221
  : never;
178
222
 
179
223
  type CustomTypeModelGroupFieldValue<
180
224
  T extends prismicT.CustomTypeModelGroupField,
181
- > = prismicT.GroupField<ModelValueMap<T["config"]["fields"]>>;
182
-
183
- type CustomTypeModelSliceValue<T extends prismicT.CustomTypeModelSlice> =
184
- prismicT.Slice<
185
- string,
186
- ModelValueMap<T["non-repeat"]>,
187
- ModelValueMap<T["repeat"]>
188
- >;
225
+ State extends prismicT.FieldState = prismicT.FieldState,
226
+ > = prismicT.GroupField<ModelValueMap<T["config"]["fields"]>, State>;
227
+
228
+ type CustomTypeModelSliceValue<
229
+ T extends prismicT.CustomTypeModelSlice,
230
+ SliceType = string,
231
+ > = prismicT.Slice<
232
+ SliceType,
233
+ ModelValueMap<T["non-repeat"]>,
234
+ ModelValueMap<T["repeat"]>
235
+ >;
189
236
 
190
237
  type SharedSliceModelValue<T extends prismicT.SharedSliceModel> =
191
238
  prismicT.SharedSlice<
@@ -2,16 +2,26 @@ import * as prismicT from "@prismicio/types";
2
2
 
3
3
  import { createFaker } from "../lib/createFaker";
4
4
 
5
- import { MockValueConfig } from "../types";
5
+ import { MockValueStateConfig, MockValueConfig } from "../types";
6
6
 
7
7
  export type MockColorValueConfig<
8
8
  Model extends prismicT.CustomTypeModelColorField = prismicT.CustomTypeModelColorField,
9
- > = MockValueConfig<Model>;
9
+ State extends prismicT.FieldState = prismicT.FieldState,
10
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
10
11
 
11
- export const color = (
12
- config: MockColorValueConfig = {},
13
- ): prismicT.ColorField => {
12
+ export type MockColorValue<
13
+ State extends prismicT.FieldState = prismicT.FieldState,
14
+ > = prismicT.ColorField<State>;
15
+
16
+ export const color = <
17
+ Model extends prismicT.CustomTypeModelColorField = prismicT.CustomTypeModelColorField,
18
+ State extends prismicT.FieldState = "filled",
19
+ >(
20
+ config: MockColorValueConfig<Model, State> = {},
21
+ ): MockColorValue<State> => {
14
22
  const faker = createFaker(config.seed);
15
23
 
16
- return faker.internet.color().toUpperCase() as prismicT.ColorField;
24
+ return (
25
+ config.state === "empty" ? null : faker.internet.color().toUpperCase()
26
+ ) as MockColorValue<State>;
17
27
  };
@@ -1,62 +1,77 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
+ import { buildContentRelationshipField } from "../lib/buildContentRelationshipField";
3
4
  import { createFaker } from "../lib/createFaker";
5
+ import { generateCustomTypeId } from "../lib/generateCustomTypeId";
6
+ import { generateTags } from "../lib/generateTags";
4
7
 
5
- import { MockValueConfig } from "../types";
8
+ import { MockValueStateConfig, MockValueConfig } from "../types";
6
9
 
7
10
  import * as modelGen from "../model";
11
+
8
12
  import { document as documentGen } from "./document";
9
- import { buildContentRelationshipField } from "../lib/buildContentRelationshipField";
10
- import { generateCustomTypeId } from "../lib/generateCustomTypeId";
11
- import { generateTags } from "../lib/generateTags";
12
13
 
13
14
  export type MockContentRelationshipValueConfig<
14
- IsFilled extends boolean = boolean,
15
15
  Model extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,
16
+ State extends prismicT.FieldState = prismicT.FieldState,
16
17
  > = {
17
- isFilled?: IsFilled;
18
18
  /**
19
19
  * A list of potential documents to which the field can be linked.
20
20
  */
21
21
  linkableDocuments?: prismicT.PrismicDocument[];
22
- } & MockValueConfig<Model>;
22
+ } & MockValueConfig<Model> &
23
+ MockValueStateConfig<State>;
23
24
 
24
- type MockContentRelationshipValue<IsFilled extends boolean = boolean> =
25
- IsFilled extends true
26
- ? prismicT.FilledLinkToDocumentField
27
- : prismicT.EmptyLinkField<prismicT.LinkType.Document>;
25
+ type MockContentRelationshipValue<
26
+ Model extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,
27
+ State extends prismicT.FieldState = prismicT.FieldState,
28
+ > = prismicT.RelationField<
29
+ Model["config"]["customtypes"],
30
+ string,
31
+ never,
32
+ State
33
+ >;
28
34
 
29
35
  export const contentRelationship = <
30
- IsFilled extends boolean = true,
31
36
  Model extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,
37
+ State extends prismicT.FieldState = "filled",
32
38
  >(
33
- config: MockContentRelationshipValueConfig<IsFilled, Model> = {},
34
- ): MockContentRelationshipValue<IsFilled> => {
39
+ config: MockContentRelationshipValueConfig<Model, State> = {},
40
+ ): MockContentRelationshipValue<Model, State> => {
35
41
  const faker = createFaker(config.seed);
36
42
 
37
- const isFilled = config.isFilled ?? true;
38
-
39
- if (isFilled) {
43
+ if (config.state === "empty") {
44
+ return {
45
+ link_type: prismicT.LinkType.Document,
46
+ } as MockContentRelationshipValue<Model, State>;
47
+ } else {
40
48
  const model =
41
49
  config.model || modelGen.contentRelationship({ seed: config.seed });
42
50
 
43
51
  const linkableDocuments = config.linkableDocuments
44
- ? config.linkableDocuments.filter((document) => {
45
- let shouldKeep = true;
52
+ ? config.linkableDocuments.filter(
53
+ (
54
+ document,
55
+ ): document is prismicT.PrismicDocument<
56
+ never,
57
+ NonNullable<Model["config"]["customtypes"]>[number]
58
+ > => {
59
+ let shouldKeep = true;
46
60
 
47
- if (model.config.customtypes) {
48
- shouldKeep =
49
- shouldKeep && model.config.customtypes.includes(document.type);
50
- }
61
+ if (model.config.customtypes) {
62
+ shouldKeep =
63
+ shouldKeep && model.config.customtypes.includes(document.type);
64
+ }
51
65
 
52
- if (model.config.tags) {
53
- shouldKeep =
54
- shouldKeep &&
55
- model.config.tags.some((tag) => document.tags.includes(tag));
56
- }
66
+ if (model.config.tags) {
67
+ shouldKeep =
68
+ shouldKeep &&
69
+ model.config.tags.some((tag) => document.tags.includes(tag));
70
+ }
57
71
 
58
- return shouldKeep;
59
- })
72
+ return shouldKeep;
73
+ },
74
+ )
60
75
  : [
61
76
  {
62
77
  ...documentGen({ seed: config.seed }),
@@ -66,7 +81,10 @@ export const contentRelationship = <
66
81
  tags: model.config.tags
67
82
  ? faker.random.arrayElements(model.config.tags)
68
83
  : generateTags({ seed: config.seed }),
69
- },
84
+ } as prismicT.PrismicDocument<
85
+ never,
86
+ NonNullable<Model["config"]["customtypes"]>[number]
87
+ >,
70
88
  ];
71
89
 
72
90
  const document = faker.random.arrayElement(linkableDocuments);
@@ -75,10 +93,8 @@ export const contentRelationship = <
75
93
  throw new Error("A linkable document could not be found.");
76
94
  }
77
95
 
78
- return buildContentRelationshipField({ document });
79
- } else {
80
- return {
81
- link_type: prismicT.LinkType.Document,
82
- } as MockContentRelationshipValue<IsFilled>;
96
+ return buildContentRelationshipField({
97
+ document,
98
+ }) as unknown as MockContentRelationshipValue<Model, State>;
83
99
  }
84
100
  };
@@ -13,12 +13,13 @@ import { MockValueConfig, ModelValue } from "../types";
13
13
  import * as modelGen from "../model";
14
14
 
15
15
  import { timestamp } from "./timestamp";
16
+ import { buildAlternativeLanguage } from "../lib/buildAlternativeLanguage";
16
17
 
17
18
  export type MockCustomTypeValueConfig<
18
19
  Model extends prismicT.CustomTypeModel = prismicT.CustomTypeModel,
19
20
  > = {
20
21
  withURL?: boolean;
21
- sharedSliceModels?: prismicT.SharedSliceModel[];
22
+ alternateLanguages?: prismicT.PrismicDocument[];
22
23
  configs?: ValueForModelMapConfigs;
23
24
  } & MockValueConfig<Model>;
24
25
 
@@ -36,12 +37,30 @@ export const customType = <
36
37
  ...Object.values(model.json),
37
38
  ) as prismicT.CustomTypeModelTab;
38
39
 
40
+ const dataFieldModelsMap: prismicT.CustomTypeModelTab = {};
41
+ for (const key in fieldModelsMap) {
42
+ const fieldModel = fieldModelsMap[key];
43
+
44
+ // UID fields must be filtered out since they are not represented in
45
+ // the document's `data` field.
46
+ if (fieldModel.type !== prismicT.CustomTypeModelFieldType.UID) {
47
+ dataFieldModelsMap[key] = fieldModel;
48
+ }
49
+ }
50
+
39
51
  const hasUID = Object.values(fieldModelsMap).some(
40
52
  (fieldModel) => fieldModel.type === prismicT.CustomTypeModelFieldType.UID,
41
53
  );
42
54
 
43
55
  const withURL = config.withURL ?? true;
44
56
 
57
+ const alternateLanguages = (config.alternateLanguages || []).map(
58
+ (alternateLanguageDocument) =>
59
+ buildAlternativeLanguage({
60
+ document: alternateLanguageDocument,
61
+ }),
62
+ );
63
+
45
64
  return {
46
65
  type: model.id,
47
66
  id: faker.git.shortSha(),
@@ -52,12 +71,12 @@ export const customType = <
52
71
  tags: generateTags({ seed: config.seed }),
53
72
  slugs: [] as prismicT.PrismicDocument["slugs"],
54
73
  linked_documents: [] as prismicT.PrismicDocument["linked_documents"],
55
- alternate_languages: [] as prismicT.PrismicDocument["alternate_languages"],
74
+ alternate_languages: alternateLanguages,
56
75
  first_publication_date: timestamp({ seed: config.seed }),
57
76
  last_publication_date: timestamp({ seed: config.seed }),
58
77
  data: valueForModelMap({
59
78
  seed: config.seed,
60
- map: fieldModelsMap,
79
+ map: dataFieldModelsMap,
61
80
  configs: config.configs,
62
81
  }),
63
82
  } as ModelValue<Model>;
package/src/value/date.ts CHANGED
@@ -1,18 +1,34 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
- import { MockValueConfig } from "../types";
3
+ import { MockValueStateConfig, MockValueConfig } from "../types";
4
4
 
5
5
  import { MockTimestampValueConfig, timestamp } from "./timestamp";
6
6
 
7
7
  export type MockDateValueConfig<
8
8
  Model extends prismicT.CustomTypeModelDateField = prismicT.CustomTypeModelDateField,
9
- > = Pick<MockTimestampValueConfig, "after" | "before"> & MockValueConfig<Model>;
9
+ State extends prismicT.FieldState = prismicT.FieldState,
10
+ > = Pick<MockTimestampValueConfig, "after" | "before"> &
11
+ MockValueConfig<Model> &
12
+ MockValueStateConfig<State>;
10
13
 
11
- export const date = (config: MockDateValueConfig = {}): prismicT.DateField => {
12
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
13
- return timestamp({
14
- seed: config.seed,
15
- after: config.after,
16
- before: config.before,
17
- })!.split("T")[0];
14
+ export type MockDateValue<
15
+ State extends prismicT.FieldState = prismicT.FieldState,
16
+ > = prismicT.DateField<State>;
17
+
18
+ export const date = <
19
+ Model extends prismicT.CustomTypeModelDateField = prismicT.CustomTypeModelDateField,
20
+ State extends prismicT.FieldState = "filled",
21
+ >(
22
+ config: MockDateValueConfig<Model, State> = {},
23
+ ): MockDateValue<State> => {
24
+ return (
25
+ config.state === "empty"
26
+ ? null
27
+ : timestamp({
28
+ seed: config.seed,
29
+ after: config.after,
30
+ before: config.before,
31
+ state: "filled",
32
+ }).split("T")[0]
33
+ ) as MockDateValue<State>;
18
34
  };
@@ -3,16 +3,28 @@ import * as prismicT from "@prismicio/types";
3
3
  import { buildEmbedField } from "../lib/buildEmbedField";
4
4
  import { getMockEmbedData } from "../lib/getMockEmbedData";
5
5
 
6
- import { MockValueConfig } from "../types";
6
+ import { MockValueStateConfig, MockValueConfig } from "../types";
7
7
 
8
8
  export type MockEmbedValueConfig<
9
9
  Model extends prismicT.CustomTypeModelEmbedField = prismicT.CustomTypeModelEmbedField,
10
- > = MockValueConfig<Model>;
10
+ State extends prismicT.FieldState = prismicT.FieldState,
11
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
11
12
 
12
- export const embed = (
13
- config: MockEmbedValueConfig = {},
14
- ): prismicT.EmbedField => {
13
+ export type MockEmbedValue<
14
+ State extends prismicT.FieldState = prismicT.FieldState,
15
+ > = prismicT.EmbedField<prismicT.AnyOEmbed & prismicT.OEmbedExtra, State>;
16
+
17
+ export const embed = <
18
+ Model extends prismicT.CustomTypeModelEmbedField = prismicT.CustomTypeModelEmbedField,
19
+ State extends prismicT.FieldState = "filled",
20
+ >(
21
+ config: MockEmbedValueConfig<Model, State> = {},
22
+ ): MockEmbedValue<State> => {
15
23
  const embedData = getMockEmbedData({ seed: config.seed });
16
24
 
17
- return buildEmbedField({ seed: config.seed, embedData });
25
+ return (
26
+ config.state === "empty"
27
+ ? {}
28
+ : buildEmbedField({ seed: config.seed, embedData })
29
+ ) as MockEmbedValue<State>;
18
30
  };
@@ -2,21 +2,33 @@ import * as prismicT from "@prismicio/types";
2
2
 
3
3
  import { createFaker } from "../lib/createFaker";
4
4
 
5
- import { MockValueConfig } from "../types";
5
+ import { MockValueStateConfig, MockValueConfig } from "../types";
6
6
 
7
7
  export type MockGeoPointValueConfig<
8
8
  Model extends prismicT.CustomTypeModelGeoPointField = prismicT.CustomTypeModelGeoPointField,
9
- > = MockValueConfig<Model>;
9
+ State extends prismicT.FieldState = prismicT.FieldState,
10
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
10
11
 
11
- export const geoPoint = (
12
- config: MockGeoPointValueConfig = {},
13
- ): prismicT.GeoPointField => {
12
+ export type MockGeoPointValue<
13
+ State extends prismicT.FieldState = prismicT.FieldState,
14
+ > = prismicT.GeoPointField<State>;
15
+
16
+ export const geoPoint = <
17
+ Model extends prismicT.CustomTypeModelGeoPointField = prismicT.CustomTypeModelGeoPointField,
18
+ State extends prismicT.FieldState = "filled",
19
+ >(
20
+ config: MockGeoPointValueConfig<Model, State> = {},
21
+ ): MockGeoPointValue<State> => {
14
22
  const faker = createFaker(config.seed);
15
23
 
16
24
  const coordinates = faker.address.nearbyGPSCoordinate();
17
25
 
18
- return {
19
- longitude: Number.parseFloat(coordinates[0]),
20
- latitude: Number.parseFloat(coordinates[1]),
21
- };
26
+ return (
27
+ config.state === "empty"
28
+ ? {}
29
+ : {
30
+ longitude: Number.parseFloat(coordinates[0]),
31
+ latitude: Number.parseFloat(coordinates[1]),
32
+ }
33
+ ) as MockGeoPointValue<State>;
22
34
  };