@prismicio/mock 0.0.6 → 0.0.9

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 (99) hide show
  1. package/README.md +4 -1
  2. package/dist/api/index.cjs +242 -122
  3. package/dist/api/index.cjs.map +1 -0
  4. package/dist/api/index.d.ts +3 -2
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/index.js +669 -0
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/index.cjs +581 -571
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.ts +155 -247
  11. package/dist/{index.mjs → index.js} +574 -561
  12. package/dist/index.js.map +1 -0
  13. package/dist/model/index.cjs +294 -257
  14. package/dist/model/index.cjs.map +1 -0
  15. package/dist/model/index.d.ts +72 -106
  16. package/dist/model/index.d.ts.map +1 -0
  17. package/dist/model/index.js +556 -0
  18. package/dist/model/index.js.map +1 -0
  19. package/dist/value/index.cjs +500 -647
  20. package/dist/value/index.cjs.map +1 -0
  21. package/dist/value/index.d.ts +71 -129
  22. package/dist/value/index.d.ts.map +1 -0
  23. package/dist/value/index.js +1461 -0
  24. package/dist/value/index.js.map +1 -0
  25. package/package.json +30 -27
  26. package/src/api/query.ts +2 -2
  27. package/src/api/ref.ts +3 -3
  28. package/src/api/repository.ts +5 -5
  29. package/src/lib/buildContentRelationshipField.ts +6 -1
  30. package/src/lib/buildEmbedField.ts +16 -27
  31. package/src/lib/buildImageFieldImage.ts +49 -0
  32. package/src/lib/createFaker.ts +98 -20
  33. package/src/lib/generateCustomTypeId.ts +1 -1
  34. package/src/lib/generateFieldId.ts +1 -3
  35. package/src/lib/generateTags.ts +4 -12
  36. package/src/lib/getMockEmbedData.ts +33 -12
  37. package/src/lib/getMockImageData.ts +1 -1
  38. package/src/lib/lorem.ts +112 -0
  39. package/src/model/boolean.ts +1 -1
  40. package/src/model/buildMockGroupFieldMap.ts +65 -0
  41. package/src/model/color.ts +2 -2
  42. package/src/model/contentRelationship.ts +16 -23
  43. package/src/model/customType.ts +49 -48
  44. package/src/model/date.ts +2 -2
  45. package/src/model/embed.ts +2 -2
  46. package/src/model/geoPoint.ts +1 -1
  47. package/src/model/group.ts +9 -16
  48. package/src/model/image.ts +16 -20
  49. package/src/model/index.ts +2 -0
  50. package/src/model/integrationFields.ts +5 -3
  51. package/src/model/keyText.ts +2 -2
  52. package/src/model/link.ts +3 -3
  53. package/src/model/linkToMedia.ts +2 -2
  54. package/src/model/number.ts +2 -2
  55. package/src/model/richText.ts +6 -6
  56. package/src/model/select.ts +13 -18
  57. package/src/model/sharedSlice.ts +15 -42
  58. package/src/model/sharedSliceVariation.ts +36 -24
  59. package/src/model/slice.ts +19 -23
  60. package/src/model/sliceZone.ts +23 -59
  61. package/src/model/timestamp.ts +2 -2
  62. package/src/model/title.ts +5 -5
  63. package/src/model/uid.ts +2 -2
  64. package/src/types.ts +130 -88
  65. package/src/value/boolean.ts +1 -1
  66. package/src/value/color.ts +16 -6
  67. package/src/value/contentRelationship.ts +54 -39
  68. package/src/value/customType.ts +5 -5
  69. package/src/value/date.ts +25 -9
  70. package/src/value/embed.ts +32 -7
  71. package/src/value/geoPoint.ts +21 -11
  72. package/src/value/group.ts +31 -45
  73. package/src/value/image.ts +22 -9
  74. package/src/value/integrationFields.ts +26 -14
  75. package/src/value/keyText.ts +16 -6
  76. package/src/value/link.ts +36 -37
  77. package/src/value/linkToMedia.ts +19 -23
  78. package/src/value/number.ts +16 -6
  79. package/src/value/richText/embed.ts +2 -2
  80. package/src/value/richText/heading.ts +10 -17
  81. package/src/value/richText/image.ts +8 -6
  82. package/src/value/richText/index.ts +4 -9
  83. package/src/value/richText/list.ts +4 -8
  84. package/src/value/richText/oList.ts +4 -8
  85. package/src/value/richText/paragraph.ts +8 -4
  86. package/src/value/richText/preformatted.ts +9 -5
  87. package/src/value/select.ts +23 -8
  88. package/src/value/sharedSlice.ts +3 -3
  89. package/src/value/sharedSliceVariation.ts +4 -36
  90. package/src/value/slice.ts +3 -32
  91. package/src/value/sliceZone.ts +54 -69
  92. package/src/value/timestamp.ts +42 -16
  93. package/src/value/title.ts +26 -13
  94. package/src/value/uid.ts +2 -2
  95. package/dist/api/index.mjs +0 -515
  96. package/dist/model/index.mjs +0 -465
  97. package/dist/value/index.mjs +0 -1554
  98. package/src/lib/buildImageField.ts +0 -34
  99. package/src/lib/buildMockGroupFieldMap.ts +0 -84
@@ -1,71 +1,35 @@
1
1
  import * as prismicT from "@prismicio/types";
2
- import * as changeCase from "change-case";
3
-
4
- import { createFaker } from "../lib/createFaker";
5
- import { generateFieldId } from "../lib/generateFieldId";
6
2
 
7
3
  import { MockModelConfig } from "../types";
8
4
 
9
- import { sharedSliceChoice } from "./sharedSliceChoice";
10
- import { slice } from "./slice";
11
-
12
- type MockSliceZoneModelConfig = (
13
- | {
14
- choices?: Record<
15
- string,
16
- prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
17
- >;
18
- choicesCount?: never;
19
- withSharedSlices?: never;
20
- }
21
- | {
22
- choices?: never;
23
- choicesCount?: number;
24
- withSharedSlices?: boolean;
25
- }
26
- ) &
27
- MockModelConfig;
28
-
29
- export const sliceZone = (
30
- config: MockSliceZoneModelConfig = {},
31
- ): prismicT.CustomTypeModelSliceZoneField => {
32
- const faker = createFaker(config.seed);
33
-
34
- let choices: Record<
5
+ type MockSliceZoneModelConfig<
6
+ Slices extends Record<
35
7
  string,
36
8
  prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
37
- > = {};
38
-
39
- if ("choices" in config) {
40
- choices = config.choices || {};
41
- } else {
42
- const choicesCount =
43
- config.choicesCount ?? faker.datatype.number({ min: 2, max: 6 });
44
-
45
- for (let i = 0; i < choicesCount; i++) {
46
- const choiceId = generateFieldId({ seed: config.seed });
9
+ > = Record<
10
+ string,
11
+ prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
12
+ >,
13
+ > = {
14
+ choices?: Slices;
15
+ } & MockModelConfig;
47
16
 
48
- choices[choiceId] = config.withSharedSlices
49
- ? sharedSliceChoice()
50
- : slice({ seed: config.seed });
51
- }
52
- }
17
+ export const sliceZone = <
18
+ Slices extends Record<
19
+ string,
20
+ prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
21
+ >,
22
+ >(
23
+ config: MockSliceZoneModelConfig<Slices> = {},
24
+ ): prismicT.CustomTypeModelSliceZoneField<Slices> => {
25
+ const labels =
26
+ {} as prismicT.CustomTypeModelSliceZoneField<Slices>["config"]["labels"];
53
27
 
54
- const labels: Record<string, prismicT.CustomTypeModelSliceLabel[]> = {};
55
- for (const choiceId in choices) {
56
- const choice = choices[choiceId];
28
+ for (const choiceId in config.choices) {
29
+ const choice = config.choices[choiceId];
57
30
 
58
31
  if (choice.type === prismicT.CustomTypeModelSliceType.Slice) {
59
- const labelsCount = faker.datatype.number({ min: 0, max: 3 });
60
-
61
- labels[choiceId] = Array(labelsCount)
62
- .fill(undefined)
63
- .map(() => ({
64
- name: changeCase.capitalCase(faker.company.bsNoun()),
65
- display: faker.datatype.boolean()
66
- ? prismicT.CustomTypeModelSliceDisplay.Grid
67
- : prismicT.CustomTypeModelSliceDisplay.List,
68
- }));
32
+ labels[choiceId as unknown as keyof typeof labels] = [];
69
33
  }
70
34
  }
71
35
 
@@ -74,7 +38,7 @@ export const sliceZone = (
74
38
  fieldset: "Slice zone",
75
39
  config: {
76
40
  labels,
77
- choices,
41
+ choices: config.choices || ({} as Slices),
78
42
  },
79
43
  };
80
44
  };
@@ -15,8 +15,8 @@ export const timestamp = (
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.Timestamp,
17
17
  config: {
18
- label: changeCase.capitalCase(faker.company.bsNoun()),
19
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
18
+ label: changeCase.capitalCase(faker.word()),
19
+ placeholder: changeCase.sentenceCase(faker.words(3)),
20
20
  },
21
21
  };
22
22
  };
@@ -12,8 +12,8 @@ export const title = (
12
12
  ): prismicT.CustomTypeModelTitleField => {
13
13
  const faker = createFaker(config.seed);
14
14
 
15
- const single = faker.random
16
- .arrayElements([
15
+ const single = faker
16
+ .randomElements([
17
17
  "heading1",
18
18
  "heading2",
19
19
  "heading3",
@@ -26,10 +26,10 @@ export const title = (
26
26
  return {
27
27
  type: prismicT.CustomTypeModelFieldType.StructuredText,
28
28
  config: {
29
- label: changeCase.capitalCase(faker.company.bsNoun()),
30
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
29
+ label: changeCase.capitalCase(faker.word()),
30
+ placeholder: changeCase.sentenceCase(faker.words(3)),
31
31
  single,
32
- allowTargetBlank: faker.datatype.boolean() ? true : undefined,
32
+ allowTargetBlank: faker.boolean() || undefined,
33
33
  },
34
34
  };
35
35
  };
package/src/model/uid.ts CHANGED
@@ -15,8 +15,8 @@ export const uid = (
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.UID,
17
17
  config: {
18
- label: changeCase.capitalCase(faker.company.bsNoun()),
19
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
18
+ label: changeCase.capitalCase(faker.word()),
19
+ placeholder: changeCase.sentenceCase(faker.words(3)),
20
20
  },
21
21
  };
22
22
  };
package/src/types.ts CHANGED
@@ -27,7 +27,7 @@ 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[];
30
+ export type Seed = string | number;
31
31
 
32
32
  export interface MockImageData {
33
33
  url: string;
@@ -35,14 +35,11 @@ export interface MockImageData {
35
35
  height: number;
36
36
  }
37
37
 
38
- export interface MockEmbedData {
39
- url: string;
40
- embed_url: string;
41
- html: string;
42
- thumbnail_url: string | null;
43
- thumbnail_height: number | null;
44
- thumbnail_width: number | null;
45
- }
38
+ export type MockEmbedData = prismicT.AnyOEmbed &
39
+ prismicT.OEmbedExtra & {
40
+ embed_url: string;
41
+ html: string;
42
+ };
46
43
 
47
44
  export type MockRestApiConfig = {
48
45
  seed?: Seed;
@@ -60,45 +57,62 @@ export type PrismicModel =
60
57
  | prismicT.SharedSliceModel
61
58
  | prismicT.SharedSliceModelVariation;
62
59
 
60
+ export type GroupFieldModelMap = Record<
61
+ string,
62
+ prismicT.CustomTypeModelFieldForGroup
63
+ >;
64
+
63
65
  export type MockValueConfig<Model extends PrismicModel = PrismicModel> = {
64
66
  seed?: Seed;
65
67
  model?: Model;
66
68
  };
67
69
 
68
- export type MockValueConfigForModel<Model extends PrismicModel> =
69
- Model extends prismicT.CustomTypeModelBooleanField
70
- ? value.MockBooleanValueConfig
71
- : Model extends prismicT.CustomTypeModelColorField
72
- ? value.MockColorValueConfig
73
- : Model extends prismicT.CustomTypeModelContentRelationshipField
74
- ? value.MockContentRelationshipValueConfig
75
- : Model extends prismicT.CustomTypeModelDateField
76
- ? value.MockDateValueConfig
77
- : Model extends prismicT.CustomTypeModelEmbedField
78
- ? value.MockEmbedValueConfig
79
- : Model extends prismicT.CustomTypeModelGeoPointField
80
- ? value.MockGeoPointValueConfig
81
- : Model extends prismicT.CustomTypeModelImageField
82
- ? value.MockImageValueConfig
83
- : Model extends prismicT.CustomTypeModelKeyTextField
84
- ? value.MockKeyTextValueConfig
85
- : Model extends prismicT.CustomTypeModelLinkField
86
- ? value.MockLinkValueConfig
87
- : Model extends prismicT.CustomTypeModelLinkToMediaField
88
- ? value.MockLinkToMediaValueConfig
89
- : Model extends prismicT.CustomTypeModelNumberField
90
- ? value.MockNumberValueConfig
91
- : Model extends prismicT.CustomTypeModelRichTextField
92
- ? value.MockRichTextValueConfig
93
- : Model extends prismicT.CustomTypeModelSelectField
94
- ? value.MockSelectValueConfig
95
- : Model extends prismicT.CustomTypeModelTimestampField
96
- ? value.MockTimestampValueConfig
97
- : Model extends prismicT.CustomTypeModelTitleField
98
- ? value.MockTitleValueConfig
99
- : Model extends prismicT.CustomTypeModelUIDField
100
- ? value.MockUIDValueConfig
101
- : never;
70
+ export type MockValueStateConfig<
71
+ State extends prismicT.FieldState = prismicT.FieldState,
72
+ > = {
73
+ state?: State;
74
+ };
75
+
76
+ export type MockValueConfigForModel<
77
+ Model extends PrismicModel,
78
+ State extends prismicT.FieldState = prismicT.FieldState,
79
+ > = Model extends prismicT.CustomTypeModelBooleanField
80
+ ? value.MockBooleanValueConfig<Model>
81
+ : Model extends prismicT.CustomTypeModelColorField
82
+ ? value.MockColorValueConfig<Model, State>
83
+ : Model extends prismicT.CustomTypeModelContentRelationshipField
84
+ ? value.MockContentRelationshipValueConfig<Model, State>
85
+ : Model extends prismicT.CustomTypeModelDateField
86
+ ? value.MockDateValueConfig<Model, State>
87
+ : Model extends prismicT.CustomTypeModelEmbedField
88
+ ? value.MockEmbedValueConfig<Model, prismicT.AnyOEmbed, State>
89
+ : Model extends prismicT.CustomTypeModelGeoPointField
90
+ ? value.MockGeoPointValueConfig<Model, State>
91
+ : Model extends prismicT.CustomTypeModelImageField
92
+ ? value.MockImageValueConfig<Model, State>
93
+ : Model extends prismicT.CustomTypeModelKeyTextField
94
+ ? value.MockKeyTextValueConfig<Model, State>
95
+ : Model extends prismicT.CustomTypeModelLinkField
96
+ ? value.MockLinkValueConfig<
97
+ typeof prismicT.LinkType[keyof typeof prismicT.LinkType],
98
+ Model,
99
+ State
100
+ >
101
+ : Model extends prismicT.CustomTypeModelLinkToMediaField
102
+ ? value.MockLinkToMediaValueConfig<Model, State>
103
+ : Model extends prismicT.CustomTypeModelNumberField
104
+ ? value.MockNumberValueConfig<Model, State>
105
+ : Model extends prismicT.CustomTypeModelRichTextField
106
+ ? value.MockRichTextValueConfig
107
+ : Model extends prismicT.CustomTypeModelSelectField
108
+ ? value.MockSelectValueConfig<Model, State>
109
+ : Model extends prismicT.CustomTypeModelTimestampField
110
+ ? value.MockTimestampValueConfig<Model, State>
111
+ : Model extends prismicT.CustomTypeModelTitleField
112
+ ? value.MockTitleValueConfig<Model, State>
113
+ : Model extends prismicT.CustomTypeModelUIDField
114
+ ? value.MockUIDValueConfig<Model>
115
+ : never;
102
116
 
103
117
  type CustomTypeModelStructuredTextField =
104
118
  | prismicT.CustomTypeModelRichTextField
@@ -117,77 +131,105 @@ export type ModelValueMap<
117
131
  [P in keyof T]: ModelValue<T[P]>;
118
132
  };
119
133
 
120
- export type ModelValue<T extends PrismicModel> =
121
- T extends prismicT.CustomTypeModel
122
- ? CustomTypeModelValue<T>
123
- : T extends prismicT.CustomTypeModelUIDField
124
- ? prismicT.PrismicDocument["uid"]
125
- : T extends prismicT.CustomTypeModelFieldForGroup
126
- ? CustomTypeModelFieldForGroupValue<T>
127
- : T extends prismicT.CustomTypeModelGroupField
128
- ? CustomTypeModelGroupFieldValue<T>
129
- : T extends prismicT.CustomTypeModelSliceZoneField
130
- ? prismicT.SliceZone
131
- : T extends prismicT.CustomTypeModelSlice
132
- ? CustomTypeModelSliceValue<T>
133
- : T extends prismicT.CustomTypeModelSharedSlice
134
- ? // TODO: Allow providing a union of of Shared Slices
135
- prismicT.SharedSlice
136
- : T extends prismicT.SharedSliceModel
137
- ? SharedSliceModelValue<T>
138
- : T extends prismicT.SharedSliceModelVariation
139
- ? SharedSliceModelVariationValue<T>
140
- : never;
134
+ export type ModelValue<
135
+ T extends PrismicModel,
136
+ State extends prismicT.FieldState = prismicT.FieldState,
137
+ > = T extends prismicT.CustomTypeModel
138
+ ? CustomTypeModelValue<T>
139
+ : T extends prismicT.CustomTypeModelUIDField
140
+ ? prismicT.PrismicDocument["uid"]
141
+ : T extends prismicT.CustomTypeModelFieldForGroup
142
+ ? CustomTypeModelFieldForGroupValue<T, State>
143
+ : T extends prismicT.CustomTypeModelGroupField
144
+ ? CustomTypeModelGroupFieldValue<T, State>
145
+ : T extends prismicT.CustomTypeModelSliceZoneField
146
+ ? prismicT.SliceZone<
147
+ ValueOf<{
148
+ [P in keyof T["config"]["choices"] as P extends string
149
+ ? P
150
+ : never]: T["config"]["choices"][P] extends prismicT.CustomTypeModelSlice
151
+ ? CustomTypeModelSliceValue<
152
+ T["config"]["choices"][P],
153
+ P extends string ? P : string
154
+ >
155
+ : T["config"]["choices"][P] extends prismicT.CustomTypeModelSharedSlice
156
+ ? prismicT.SharedSlice<P extends string ? P : string>
157
+ : never;
158
+ }>,
159
+ State
160
+ >
161
+ : T extends prismicT.CustomTypeModelSlice
162
+ ? CustomTypeModelSliceValue<T>
163
+ : T extends prismicT.CustomTypeModelSharedSlice
164
+ ? // TODO: Allow providing a union of of Shared Slices
165
+ prismicT.SharedSlice
166
+ : T extends prismicT.SharedSliceModel
167
+ ? SharedSliceModelValue<T>
168
+ : T extends prismicT.SharedSliceModelVariation
169
+ ? SharedSliceModelVariationValue<T>
170
+ : never;
141
171
 
142
172
  type CustomTypeModelValue<T extends prismicT.CustomTypeModel> =
143
- prismicT.PrismicDocument<ModelValueMap<ValueOf<T["json"]>>>;
173
+ prismicT.PrismicDocument<
174
+ ModelValueMap<{
175
+ [P in keyof ValueOf<T["json"]> as ValueOf<
176
+ T["json"]
177
+ >[P]["type"] extends typeof prismicT.CustomTypeModelFieldType.UID
178
+ ? never
179
+ : P]: ValueOf<T["json"]>[P];
180
+ }>
181
+ >;
144
182
 
145
183
  type CustomTypeModelFieldForGroupValue<
146
184
  T extends prismicT.CustomTypeModelFieldForGroup,
185
+ State extends prismicT.FieldState = prismicT.FieldState,
147
186
  > = T extends prismicT.CustomTypeModelBooleanField
148
187
  ? prismicT.BooleanField
149
188
  : T extends prismicT.CustomTypeModelColorField
150
- ? prismicT.ColorField
189
+ ? prismicT.ColorField<State>
151
190
  : T extends prismicT.CustomTypeModelTitleField
152
- ? prismicT.TitleField
191
+ ? prismicT.TitleField<State>
153
192
  : T extends prismicT.CustomTypeModelRichTextField
154
- ? prismicT.RichTextField
193
+ ? prismicT.RichTextField<State>
155
194
  : T extends prismicT.CustomTypeModelImageField
156
- ? prismicT.ImageField
195
+ ? prismicT.ImageField<string | null, State>
157
196
  : T extends prismicT.CustomTypeModelLinkField
158
- ? prismicT.LinkField
197
+ ? prismicT.LinkField<string, string, never, State>
159
198
  : T extends prismicT.CustomTypeModelLinkToMediaField
160
- ? prismicT.LinkToMediaField
199
+ ? prismicT.LinkToMediaField<State>
161
200
  : T extends prismicT.CustomTypeModelContentRelationshipField
162
- ? prismicT.RelationField
201
+ ? prismicT.RelationField<string, string, never, State>
163
202
  : T extends prismicT.CustomTypeModelDateField
164
- ? prismicT.DateField
203
+ ? prismicT.DateField<State>
165
204
  : T extends prismicT.CustomTypeModelTimestampField
166
- ? prismicT.TimestampField
205
+ ? prismicT.TimestampField<State>
167
206
  : T extends prismicT.CustomTypeModelNumberField
168
- ? prismicT.NumberField
207
+ ? prismicT.NumberField<State>
169
208
  : T extends prismicT.CustomTypeModelKeyTextField
170
- ? prismicT.KeyTextField
209
+ ? prismicT.KeyTextField<State>
171
210
  : T extends prismicT.CustomTypeModelSelectField
172
- ? prismicT.SelectField
211
+ ? prismicT.SelectField<string, State>
173
212
  : T extends prismicT.CustomTypeModelEmbedField
174
- ? prismicT.EmbedField
213
+ ? prismicT.EmbedField<prismicT.AnyOEmbed & prismicT.OEmbedExtra, State>
175
214
  : T extends prismicT.CustomTypeModelGeoPointField
176
- ? prismicT.GeoPointField
215
+ ? prismicT.GeoPointField<State>
177
216
  : T extends prismicT.CustomTypeModelIntegrationFieldsField
178
- ? prismicT.IntegrationFields
217
+ ? prismicT.IntegrationFields<unknown, State>
179
218
  : never;
180
219
 
181
220
  type CustomTypeModelGroupFieldValue<
182
221
  T extends prismicT.CustomTypeModelGroupField,
183
- > = prismicT.GroupField<ModelValueMap<T["config"]["fields"]>>;
184
-
185
- type CustomTypeModelSliceValue<T extends prismicT.CustomTypeModelSlice> =
186
- prismicT.Slice<
187
- string,
188
- ModelValueMap<T["non-repeat"]>,
189
- ModelValueMap<T["repeat"]>
190
- >;
222
+ State extends prismicT.FieldState = prismicT.FieldState,
223
+ > = prismicT.GroupField<ModelValueMap<T["config"]["fields"]>, State>;
224
+
225
+ type CustomTypeModelSliceValue<
226
+ T extends prismicT.CustomTypeModelSlice,
227
+ SliceType = string,
228
+ > = prismicT.Slice<
229
+ SliceType,
230
+ ModelValueMap<T["non-repeat"]>,
231
+ ModelValueMap<T["repeat"]>
232
+ >;
191
233
 
192
234
  type SharedSliceModelValue<T extends prismicT.SharedSliceModel> =
193
235
  prismicT.SharedSlice<
@@ -15,5 +15,5 @@ export const boolean = <
15
15
  ): prismicT.BooleanField => {
16
16
  const faker = createFaker(config.seed);
17
17
 
18
- return faker.datatype.boolean();
18
+ return faker.boolean();
19
19
  };
@@ -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.hexColor().toUpperCase()
26
+ ) as MockColorValue<State>;
17
27
  };
@@ -5,81 +5,96 @@ import { createFaker } from "../lib/createFaker";
5
5
  import { generateCustomTypeId } from "../lib/generateCustomTypeId";
6
6
  import { generateTags } from "../lib/generateTags";
7
7
 
8
- import { MockValueConfig } from "../types";
8
+ import { MockValueStateConfig, MockValueConfig } from "../types";
9
9
 
10
10
  import * as modelGen from "../model";
11
11
 
12
12
  import { document as documentGen } from "./document";
13
13
 
14
14
  export type MockContentRelationshipValueConfig<
15
- IsFilled extends boolean = boolean,
16
15
  Model extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,
16
+ State extends prismicT.FieldState = prismicT.FieldState,
17
17
  > = {
18
- isFilled?: IsFilled;
19
18
  /**
20
19
  * A list of potential documents to which the field can be linked.
21
20
  */
22
21
  linkableDocuments?: prismicT.PrismicDocument[];
23
- } & MockValueConfig<Model>;
22
+ } & MockValueConfig<Model> &
23
+ MockValueStateConfig<State>;
24
24
 
25
- type MockContentRelationshipValue<IsFilled extends boolean = boolean> =
26
- IsFilled extends true
27
- ? prismicT.FilledLinkToDocumentField
28
- : 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
+ >;
29
34
 
30
35
  export const contentRelationship = <
31
- IsFilled extends boolean = true,
32
36
  Model extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,
37
+ State extends prismicT.FieldState = "filled",
33
38
  >(
34
- config: MockContentRelationshipValueConfig<IsFilled, Model> = {},
35
- ): MockContentRelationshipValue<IsFilled> => {
39
+ config: MockContentRelationshipValueConfig<Model, State> = {},
40
+ ): MockContentRelationshipValue<Model, State> => {
36
41
  const faker = createFaker(config.seed);
37
42
 
38
- const isFilled = config.isFilled ?? true;
39
-
40
- if (isFilled) {
43
+ if (config.state === "empty") {
44
+ return {
45
+ link_type: prismicT.LinkType.Document,
46
+ } as MockContentRelationshipValue<Model, State>;
47
+ } else {
41
48
  const model =
42
49
  config.model || modelGen.contentRelationship({ seed: config.seed });
43
50
 
44
51
  const linkableDocuments = config.linkableDocuments
45
- ? config.linkableDocuments.filter((document) => {
46
- let shouldKeep = true;
47
-
48
- if (model.config.customtypes) {
49
- shouldKeep =
50
- shouldKeep && model.config.customtypes.includes(document.type);
51
- }
52
-
53
- if (model.config.tags) {
54
- shouldKeep =
55
- shouldKeep &&
56
- model.config.tags.some((tag) => document.tags.includes(tag));
57
- }
58
-
59
- return shouldKeep;
60
- })
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;
60
+
61
+ if (model.config.customtypes) {
62
+ shouldKeep =
63
+ shouldKeep && model.config.customtypes.includes(document.type);
64
+ }
65
+
66
+ if (model.config.tags) {
67
+ shouldKeep =
68
+ shouldKeep &&
69
+ model.config.tags.some((tag) => document.tags.includes(tag));
70
+ }
71
+
72
+ return shouldKeep;
73
+ },
74
+ )
61
75
  : [
62
76
  {
63
77
  ...documentGen({ seed: config.seed }),
64
78
  type: model.config.customtypes
65
- ? faker.random.arrayElement(model.config.customtypes)
79
+ ? faker.randomElement(model.config.customtypes)
66
80
  : generateCustomTypeId({ seed: config.seed }),
67
81
  tags: model.config.tags
68
- ? faker.random.arrayElements(model.config.tags)
82
+ ? faker.randomElements(model.config.tags)
69
83
  : generateTags({ seed: config.seed }),
70
- },
84
+ } as prismicT.PrismicDocument<
85
+ never,
86
+ NonNullable<Model["config"]["customtypes"]>[number]
87
+ >,
71
88
  ];
72
89
 
73
- const document = faker.random.arrayElement(linkableDocuments);
90
+ const document = faker.randomElement(linkableDocuments);
74
91
 
75
92
  if (!document) {
76
93
  throw new Error("A linkable document could not be found.");
77
94
  }
78
95
 
79
- return buildContentRelationshipField({ document });
80
- } else {
81
- return {
82
- link_type: prismicT.LinkType.Document,
83
- } as MockContentRelationshipValue<IsFilled>;
96
+ return buildContentRelationshipField({
97
+ document,
98
+ }) as unknown as MockContentRelationshipValue<Model, State>;
84
99
  }
85
100
  };
@@ -63,11 +63,11 @@ export const customType = <
63
63
 
64
64
  return {
65
65
  type: model.id,
66
- id: faker.git.shortSha(),
67
- uid: hasUID ? changeCase.snakeCase(faker.lorem.words(2)) : null,
68
- url: withURL ? faker.internet.url() : null,
69
- href: faker.internet.url(),
70
- lang: faker.lorem.word(),
66
+ id: faker.hash(7),
67
+ uid: hasUID ? changeCase.snakeCase(faker.words(faker.range(1, 3))) : null,
68
+ url: withURL ? faker.url() : null,
69
+ href: faker.url(),
70
+ lang: faker.word(),
71
71
  tags: generateTags({ seed: config.seed }),
72
72
  slugs: [] as prismicT.PrismicDocument["slugs"],
73
73
  linked_documents: [] as prismicT.PrismicDocument["linked_documents"],