@prismicio/mock 0.0.10 → 0.1.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 (96) hide show
  1. package/dist/api/index.cjs +153 -149
  2. package/dist/api/index.cjs.map +1 -1
  3. package/dist/api/index.d.ts +51 -5
  4. package/dist/api/index.js +153 -149
  5. package/dist/api/index.js.map +1 -1
  6. package/dist/index.cjs +609 -357
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +240 -70
  9. package/dist/index.js +602 -358
  10. package/dist/index.js.map +1 -1
  11. package/dist/model/index.cjs +236 -66
  12. package/dist/model/index.cjs.map +1 -1
  13. package/dist/model/index.d.ts +113 -27
  14. package/dist/model/index.js +236 -66
  15. package/dist/model/index.js.map +1 -1
  16. package/dist/value/index.cjs +347 -315
  17. package/dist/value/index.cjs.map +1 -1
  18. package/dist/value/index.d.ts +90 -38
  19. package/dist/value/index.js +347 -315
  20. package/dist/value/index.js.map +1 -1
  21. package/package.json +14 -14
  22. package/src/api/createAPIMockFactory.ts +56 -0
  23. package/src/api/query.ts +2 -2
  24. package/src/api/ref.ts +3 -3
  25. package/src/api/repository.ts +7 -9
  26. package/src/api/tags.ts +5 -2
  27. package/src/createMockFactory.ts +52 -0
  28. package/src/index.ts +15 -0
  29. package/src/lib/buildEmbedField.ts +13 -4
  30. package/src/lib/buildImageFieldImage.ts +16 -5
  31. package/src/lib/createFaker.ts +14 -15
  32. package/src/lib/generateCustomTypeId.ts +12 -4
  33. package/src/lib/generateFieldId.ts +12 -4
  34. package/src/lib/generateTags.ts +13 -4
  35. package/src/lib/getMockEmbedData.ts +12 -4
  36. package/src/lib/getMockImageData.ts +12 -4
  37. package/src/lib/valueForModel.ts +47 -30
  38. package/src/lib/valueForModelMap.ts +24 -4
  39. package/src/model/boolean.ts +5 -5
  40. package/src/model/buildMockGroupFieldMap.ts +4 -4
  41. package/src/model/color.ts +2 -2
  42. package/src/model/contentRelationship.ts +2 -2
  43. package/src/model/createModelMockFactory.ts +213 -0
  44. package/src/model/customType.ts +3 -3
  45. package/src/model/date.ts +2 -2
  46. package/src/model/embed.ts +2 -2
  47. package/src/model/geoPoint.ts +2 -2
  48. package/src/model/group.ts +6 -6
  49. package/src/model/image.ts +3 -3
  50. package/src/model/index.ts +2 -0
  51. package/src/model/integrationFields.ts +2 -2
  52. package/src/model/keyText.ts +2 -2
  53. package/src/model/link.ts +3 -3
  54. package/src/model/linkToMedia.ts +3 -3
  55. package/src/model/number.ts +2 -2
  56. package/src/model/richText.ts +2 -2
  57. package/src/model/select.ts +3 -3
  58. package/src/model/sharedSlice.ts +3 -3
  59. package/src/model/sharedSliceVariation.ts +6 -6
  60. package/src/model/slice.ts +3 -3
  61. package/src/model/sliceZone.ts +7 -4
  62. package/src/model/timestamp.ts +2 -2
  63. package/src/model/title.ts +2 -2
  64. package/src/model/uid.ts +2 -2
  65. package/src/types.ts +63 -21
  66. package/src/value/boolean.ts +3 -5
  67. package/src/value/color.ts +2 -2
  68. package/src/value/contentRelationship.ts +18 -15
  69. package/src/value/createValueMockFactory.ts +236 -0
  70. package/src/value/customType.ts +7 -7
  71. package/src/value/date.ts +6 -2
  72. package/src/value/embed.ts +6 -3
  73. package/src/value/geoPoint.ts +2 -2
  74. package/src/value/group.ts +5 -5
  75. package/src/value/image.ts +26 -18
  76. package/src/value/integrationFields.ts +12 -26
  77. package/src/value/keyText.ts +2 -2
  78. package/src/value/link.ts +9 -7
  79. package/src/value/linkToMedia.ts +2 -2
  80. package/src/value/number.ts +2 -2
  81. package/src/value/richText/embed.ts +6 -3
  82. package/src/value/richText/heading.ts +29 -17
  83. package/src/value/richText/image.ts +6 -3
  84. package/src/value/richText/index.ts +71 -43
  85. package/src/value/richText/list.ts +2 -2
  86. package/src/value/richText/oList.ts +2 -2
  87. package/src/value/richText/paragraph.ts +2 -2
  88. package/src/value/richText/preformatted.ts +2 -2
  89. package/src/value/select.ts +10 -6
  90. package/src/value/sharedSlice.ts +4 -4
  91. package/src/value/sharedSliceVariation.ts +9 -10
  92. package/src/value/slice.ts +9 -9
  93. package/src/value/sliceZone.ts +10 -8
  94. package/src/value/timestamp.ts +2 -2
  95. package/src/value/title.ts +7 -3
  96. package/src/value/uid.ts +5 -3
@@ -5,15 +5,15 @@ import { createFaker } from "../lib/createFaker";
5
5
 
6
6
  import { MockModelConfig } from "../types";
7
7
 
8
- type MockImageModelConfig<ThumbnailNames extends string = string> = {
8
+ export type MockImageModelConfig<ThumbnailNames extends string = string> = {
9
9
  withConstraint?: boolean;
10
10
  thumbnailNames?: readonly ThumbnailNames[];
11
11
  } & MockModelConfig;
12
12
 
13
13
  export const image = <ThumbnailNames extends string = string>(
14
- config: MockImageModelConfig<ThumbnailNames> = {},
14
+ config: MockImageModelConfig<ThumbnailNames>,
15
15
  ): prismicT.CustomTypeModelImageField<ThumbnailNames> => {
16
- const faker = createFaker(config.seed);
16
+ const faker = config.faker || createFaker(config.seed);
17
17
 
18
18
  const thumbnails = (config.thumbnailNames || []).map((name) => {
19
19
  return {
@@ -24,3 +24,5 @@ export { title } from "./title";
24
24
  export { uid } from "./uid";
25
25
 
26
26
  export { buildMockGroupFieldMap } from "./buildMockGroupFieldMap";
27
+
28
+ export { createModelMockFactory as createModelFactory } from "./createModelMockFactory";
@@ -10,9 +10,9 @@ export type MockIntegrationFieldsModelConfig = {
10
10
  } & MockModelConfig;
11
11
 
12
12
  export const integrationFields = (
13
- config: MockIntegrationFieldsModelConfig = {},
13
+ config: MockIntegrationFieldsModelConfig,
14
14
  ): prismicT.CustomTypeModelIntegrationFieldsField => {
15
- const faker = createFaker(config.seed);
15
+ const faker = config.faker || createFaker(config.seed);
16
16
 
17
17
  return {
18
18
  type: prismicT.CustomTypeModelFieldType.IntegrationFields,
@@ -8,9 +8,9 @@ import { MockModelConfig } from "../types";
8
8
  export type MockKeyTextModelConfig = MockModelConfig;
9
9
 
10
10
  export const keyText = (
11
- config: MockKeyTextModelConfig = {},
11
+ config: MockKeyTextModelConfig,
12
12
  ): prismicT.CustomTypeModelKeyTextField => {
13
- const faker = createFaker(config.seed);
13
+ const faker = config.faker || createFaker(config.seed);
14
14
 
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.Text,
package/src/model/link.ts CHANGED
@@ -5,7 +5,7 @@ import { createFaker } from "../lib/createFaker";
5
5
 
6
6
  import { MockModelConfig } from "../types";
7
7
 
8
- type MockLinkModel<AllowTargetBlank extends boolean = boolean> =
8
+ export type MockLinkModel<AllowTargetBlank extends boolean = boolean> =
9
9
  prismicT.CustomTypeModelLinkField & {
10
10
  config: AllowTargetBlank extends true
11
11
  ? {
@@ -21,9 +21,9 @@ export type MockLinkModelConfig<AllowTargetBlank extends boolean = boolean> = {
21
21
  } & MockModelConfig;
22
22
 
23
23
  export const link = <AllowTargetBlank extends boolean = boolean>(
24
- config: MockLinkModelConfig<AllowTargetBlank> = {},
24
+ config: MockLinkModelConfig<AllowTargetBlank>,
25
25
  ): MockLinkModel<AllowTargetBlank> => {
26
- const faker = createFaker(config.seed);
26
+ const faker = config.faker || createFaker(config.seed);
27
27
 
28
28
  return {
29
29
  type: prismicT.CustomTypeModelFieldType.Link,
@@ -5,12 +5,12 @@ import { createFaker } from "../lib/createFaker";
5
5
 
6
6
  import { MockModelConfig } from "../types";
7
7
 
8
- export type MockLinkTomediaModelConfig = MockModelConfig;
8
+ export type MockLinkToMediaModelConfig = MockModelConfig;
9
9
 
10
10
  export const linkToMedia = (
11
- config: MockLinkTomediaModelConfig = {},
11
+ config: MockLinkToMediaModelConfig,
12
12
  ): prismicT.CustomTypeModelLinkToMediaField => {
13
- const faker = createFaker(config.seed);
13
+ const faker = config.faker || createFaker(config.seed);
14
14
 
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.Link,
@@ -8,9 +8,9 @@ import { MockModelConfig } from "../types";
8
8
  export type MockNumberModelConfig = MockModelConfig;
9
9
 
10
10
  export const number = (
11
- config: MockNumberModelConfig = {},
11
+ config: MockNumberModelConfig,
12
12
  ): prismicT.CustomTypeModelNumberField => {
13
- const faker = createFaker(config.seed);
13
+ const faker = config.faker || createFaker(config.seed);
14
14
 
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.Number,
@@ -12,11 +12,11 @@ export type MockRichTextModelConfig<
12
12
  } & MockModelConfig;
13
13
 
14
14
  export const richText = <WithMultipleBlocks extends boolean = boolean>(
15
- config: MockRichTextModelConfig<WithMultipleBlocks> = {},
15
+ config: MockRichTextModelConfig<WithMultipleBlocks>,
16
16
  ): WithMultipleBlocks extends true
17
17
  ? prismicT.CustomTypeModelRichTextMultiField
18
18
  : prismicT.CustomTypeModelRichTextSingleField => {
19
- const faker = createFaker(config.seed);
19
+ const faker = config.faker || createFaker(config.seed);
20
20
 
21
21
  const blockTypes = faker
22
22
  .randomElements([
@@ -5,7 +5,7 @@ import { createFaker } from "../lib/createFaker";
5
5
 
6
6
  import { MockModelConfig } from "../types";
7
7
 
8
- type MockSelectModelConfig<
8
+ export type MockSelectModelConfig<
9
9
  Option extends string = string,
10
10
  DefaultOption extends Option = Option,
11
11
  > = {
@@ -14,9 +14,9 @@ type MockSelectModelConfig<
14
14
  } & MockModelConfig;
15
15
 
16
16
  export const select = <Option extends string, DefaultOption extends Option>(
17
- config: MockSelectModelConfig<Option, DefaultOption> = {},
17
+ config: MockSelectModelConfig<Option, DefaultOption>,
18
18
  ): prismicT.CustomTypeModelSelectField<Option, DefaultOption> => {
19
- const faker = createFaker(config.seed);
19
+ const faker = config.faker || createFaker(config.seed);
20
20
 
21
21
  return {
22
22
  type: prismicT.CustomTypeModelFieldType.Select,
@@ -5,7 +5,7 @@ import { createFaker } from "../lib/createFaker";
5
5
 
6
6
  import { MockModelConfig } from "../types";
7
7
 
8
- type MockSharedSliceModelConfig<
8
+ export type MockSharedSliceModelConfig<
9
9
  Variation extends prismicT.SharedSliceModelVariation,
10
10
  > = {
11
11
  id?: string;
@@ -16,9 +16,9 @@ type MockSharedSliceModelConfig<
16
16
  export const sharedSlice = <
17
17
  Variation extends prismicT.SharedSliceModelVariation,
18
18
  >(
19
- config: MockSharedSliceModelConfig<Variation> = {},
19
+ config: MockSharedSliceModelConfig<Variation>,
20
20
  ): prismicT.SharedSliceModel<string, Variation> => {
21
- const faker = createFaker(config.seed);
21
+ const faker = config.faker || createFaker(config.seed);
22
22
 
23
23
  let name: string =
24
24
  config.name || changeCase.capitalCase(faker.words(faker.range(1, 2)));
@@ -2,6 +2,7 @@ import * as prismicT from "@prismicio/types";
2
2
  import * as changeCase from "change-case";
3
3
 
4
4
  import { createFaker } from "../lib/createFaker";
5
+ import { getMockImageData } from "../lib/getMockImageData";
5
6
 
6
7
  import { GroupFieldModelMap, MockModelConfig } from "../types";
7
8
 
@@ -21,13 +22,9 @@ export const sharedSliceVariation = <
21
22
  PrimaryFields extends GroupFieldModelMap,
22
23
  ItemsFields extends GroupFieldModelMap,
23
24
  >(
24
- config: MockSharedSliceVariationModelConfig<
25
- ID,
26
- PrimaryFields,
27
- ItemsFields
28
- > = {},
25
+ config: MockSharedSliceVariationModelConfig<ID, PrimaryFields, ItemsFields>,
29
26
  ): prismicT.SharedSliceModelVariation<ID, PrimaryFields, ItemsFields> => {
30
- const faker = createFaker(config.seed);
27
+ const faker = config.faker || createFaker(config.seed);
31
28
 
32
29
  let name: string =
33
30
  config.name || changeCase.capitalCase(faker.words(faker.range(1, 2)));
@@ -39,6 +36,8 @@ export const sharedSliceVariation = <
39
36
  id = changeCase.snakeCase(config.name) as ID;
40
37
  }
41
38
 
39
+ const imageData = getMockImageData({ faker });
40
+
42
41
  return {
43
42
  id,
44
43
  name,
@@ -47,5 +46,6 @@ export const sharedSliceVariation = <
47
46
  version: faker.hash(7),
48
47
  primary: config.primaryFields || ({} as PrimaryFields),
49
48
  items: config.itemsFields || ({} as ItemsFields),
49
+ imageUrl: imageData.url,
50
50
  };
51
51
  };
@@ -5,7 +5,7 @@ import { createFaker } from "../lib/createFaker";
5
5
 
6
6
  import { GroupFieldModelMap, MockModelConfig } from "../types";
7
7
 
8
- type MockSliceModelConfig<
8
+ export type MockSliceModelConfig<
9
9
  NonRepeatFields extends GroupFieldModelMap = GroupFieldModelMap,
10
10
  RepeatFields extends GroupFieldModelMap = GroupFieldModelMap,
11
11
  > = {
@@ -17,9 +17,9 @@ export const slice = <
17
17
  NonRepeatFields extends GroupFieldModelMap,
18
18
  RepeatFields extends GroupFieldModelMap,
19
19
  >(
20
- config: MockSliceModelConfig<NonRepeatFields, RepeatFields> = {},
20
+ config: MockSliceModelConfig<NonRepeatFields, RepeatFields>,
21
21
  ): prismicT.CustomTypeModelSlice<NonRepeatFields, RepeatFields> => {
22
- const faker = createFaker(config.seed);
22
+ const faker = config.faker || createFaker(config.seed);
23
23
 
24
24
  return {
25
25
  type: prismicT.CustomTypeModelSliceType.Slice,
@@ -2,7 +2,7 @@ import * as prismicT from "@prismicio/types";
2
2
 
3
3
  import { MockModelConfig } from "../types";
4
4
 
5
- type MockSliceZoneModelConfig<
5
+ export type MockSliceZoneModelConfig<
6
6
  Slices extends Record<
7
7
  string,
8
8
  prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
@@ -20,10 +20,13 @@ export const sliceZone = <
20
20
  prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
21
21
  >,
22
22
  >(
23
- config: MockSliceZoneModelConfig<Slices> = {},
23
+ config: MockSliceZoneModelConfig<Slices>,
24
24
  ): prismicT.CustomTypeModelSliceZoneField<Slices> => {
25
- const labels =
26
- {} as prismicT.CustomTypeModelSliceZoneField<Slices>["config"]["labels"];
25
+ const labels = {} as NonNullable<
26
+ NonNullable<
27
+ prismicT.CustomTypeModelSliceZoneField<Slices>["config"]
28
+ >["labels"]
29
+ >;
27
30
 
28
31
  for (const choiceId in config.choices) {
29
32
  const choice = config.choices[choiceId];
@@ -8,9 +8,9 @@ import { MockModelConfig } from "../types";
8
8
  export type MockTimestampModelConfig = MockModelConfig;
9
9
 
10
10
  export const timestamp = (
11
- config: MockTimestampModelConfig = {},
11
+ config: MockTimestampModelConfig,
12
12
  ): prismicT.CustomTypeModelTimestampField => {
13
- const faker = createFaker(config.seed);
13
+ const faker = config.faker || createFaker(config.seed);
14
14
 
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.Timestamp,
@@ -8,9 +8,9 @@ import { MockModelConfig } from "../types";
8
8
  export type MockTitleModelConfig = MockModelConfig;
9
9
 
10
10
  export const title = (
11
- config: MockTitleModelConfig = {},
11
+ config: MockTitleModelConfig,
12
12
  ): prismicT.CustomTypeModelTitleField => {
13
- const faker = createFaker(config.seed);
13
+ const faker = config.faker || createFaker(config.seed);
14
14
 
15
15
  const single = faker
16
16
  .randomElements([
package/src/model/uid.ts CHANGED
@@ -8,9 +8,9 @@ import { MockModelConfig } from "../types";
8
8
  export type MockUIDModelConfig = MockModelConfig;
9
9
 
10
10
  export const uid = (
11
- config: MockUIDModelConfig = {},
11
+ config: MockUIDModelConfig,
12
12
  ): prismicT.CustomTypeModelUIDField => {
13
- const faker = createFaker(config.seed);
13
+ const faker = config.faker || createFaker(config.seed);
14
14
 
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.UID,
package/src/types.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as prismicT from "@prismicio/types";
2
+ import { Faker } from "./lib/createFaker";
2
3
 
3
4
  import * as value from "./value";
4
5
 
@@ -29,6 +30,10 @@ export type SetRequired<BaseType, Keys extends keyof BaseType> = Simplify<
29
30
 
30
31
  export type Seed = string | number;
31
32
 
33
+ export type WithoutFakerConfig<T> = {
34
+ [P in keyof T as P extends "seed" | "faker" ? never : P]: T[P];
35
+ };
36
+
32
37
  export interface MockImageData {
33
38
  url: string;
34
39
  width: number;
@@ -41,13 +46,25 @@ export type MockEmbedData = prismicT.AnyOEmbed &
41
46
  html: string;
42
47
  };
43
48
 
44
- export type MockRestApiConfig = {
45
- seed?: Seed;
46
- };
49
+ export type MockRestApiConfig =
50
+ | {
51
+ seed: Seed;
52
+ faker?: never;
53
+ }
54
+ | {
55
+ faker: Faker;
56
+ seed?: never;
57
+ };
47
58
 
48
- export type MockModelConfig = {
49
- seed?: Seed;
50
- };
59
+ export type MockModelConfig =
60
+ | {
61
+ seed: Seed;
62
+ faker?: never;
63
+ }
64
+ | {
65
+ faker: Faker;
66
+ seed?: never;
67
+ };
51
68
 
52
69
  // TODO: Add to @prismicio/types
53
70
  export type PrismicModel =
@@ -63,9 +80,17 @@ export type GroupFieldModelMap = Record<
63
80
  >;
64
81
 
65
82
  export type MockValueConfig<Model extends PrismicModel = PrismicModel> = {
66
- seed?: Seed;
67
83
  model?: Model;
68
- };
84
+ } & (
85
+ | {
86
+ seed: Seed;
87
+ faker?: never;
88
+ }
89
+ | {
90
+ faker: Faker;
91
+ seed?: never;
92
+ }
93
+ );
69
94
 
70
95
  export type MockValueStateConfig<
71
96
  State extends prismicT.FieldState = prismicT.FieldState,
@@ -121,9 +146,17 @@ type CustomTypeModelStructuredTextField =
121
146
  export type MockRichTextValueConfig<
122
147
  Model extends CustomTypeModelStructuredTextField = CustomTypeModelStructuredTextField,
123
148
  > = {
124
- seed?: Seed;
125
149
  model?: Model;
126
- };
150
+ } & (
151
+ | {
152
+ seed: Seed;
153
+ faker?: never;
154
+ }
155
+ | {
156
+ faker: Faker;
157
+ seed?: never;
158
+ }
159
+ );
127
160
 
128
161
  export type ModelValueMap<
129
162
  T extends Record<string, prismicT.CustomTypeModelField>,
@@ -145,14 +178,18 @@ export type ModelValue<
145
178
  : T extends prismicT.CustomTypeModelSliceZoneField
146
179
  ? prismicT.SliceZone<
147
180
  ValueOf<{
148
- [P in keyof T["config"]["choices"] as P extends string
181
+ [P in keyof NonNullable<T["config"]>["choices"] as P extends string
149
182
  ? P
150
- : never]: T["config"]["choices"][P] extends prismicT.CustomTypeModelSlice
183
+ : never]: NonNullable<
184
+ T["config"]
185
+ >["choices"][P] extends prismicT.CustomTypeModelSlice
151
186
  ? CustomTypeModelSliceValue<
152
- T["config"]["choices"][P],
187
+ NonNullable<T["config"]>["choices"][P],
153
188
  P extends string ? P : string
154
189
  >
155
- : T["config"]["choices"][P] extends prismicT.CustomTypeModelSharedSlice
190
+ : NonNullable<
191
+ T["config"]
192
+ >["choices"][P] extends prismicT.CustomTypeModelSharedSlice
156
193
  ? prismicT.SharedSlice<P extends string ? P : string>
157
194
  : never;
158
195
  }>,
@@ -214,27 +251,32 @@ type CustomTypeModelFieldForGroupValue<
214
251
  : T extends prismicT.CustomTypeModelGeoPointField
215
252
  ? prismicT.GeoPointField<State>
216
253
  : T extends prismicT.CustomTypeModelIntegrationFieldsField
217
- ? prismicT.IntegrationFields<unknown, State>
254
+ ? prismicT.IntegrationFields<Record<string, unknown>, State>
218
255
  : never;
219
256
 
220
257
  type CustomTypeModelGroupFieldValue<
221
258
  T extends prismicT.CustomTypeModelGroupField,
222
259
  State extends prismicT.FieldState = prismicT.FieldState,
223
- > = prismicT.GroupField<ModelValueMap<T["config"]["fields"]>, State>;
260
+ > = prismicT.GroupField<
261
+ ModelValueMap<NonNullable<NonNullable<T["config"]>["fields"]>>,
262
+ State
263
+ >;
224
264
 
225
265
  type CustomTypeModelSliceValue<
226
266
  T extends prismicT.CustomTypeModelSlice,
227
267
  SliceType = string,
228
268
  > = prismicT.Slice<
229
269
  SliceType,
230
- ModelValueMap<T["non-repeat"]>,
231
- ModelValueMap<T["repeat"]>
270
+ ModelValueMap<NonNullable<T["non-repeat"]>>,
271
+ ModelValueMap<NonNullable<T["repeat"]>>
232
272
  >;
233
273
 
234
274
  type SharedSliceModelValue<T extends prismicT.SharedSliceModel> =
235
275
  prismicT.SharedSlice<
236
276
  T["id"],
237
- SharedSliceModelVariationValue<IterableElement<T["variations"]>>
277
+ SharedSliceModelVariationValue<
278
+ IterableElement<NonNullable<T["variations"]>>
279
+ >
238
280
  >;
239
281
 
240
282
  type SharedSliceModelVariationValue<
@@ -243,7 +285,7 @@ type SharedSliceModelVariationValue<
243
285
  string,
244
286
  prismicT.SharedSliceVariation<
245
287
  T["id"],
246
- ModelValueMap<T["primary"]>,
247
- ModelValueMap<T["items"]>
288
+ ModelValueMap<NonNullable<T["primary"]>>,
289
+ ModelValueMap<NonNullable<T["items"]>>
248
290
  >
249
291
  >;
@@ -8,12 +8,10 @@ export type MockBooleanValueConfig<
8
8
  Model extends prismicT.CustomTypeModelBooleanField = prismicT.CustomTypeModelBooleanField,
9
9
  > = MockValueConfig<Model>;
10
10
 
11
- export const boolean = <
12
- Model extends prismicT.CustomTypeModelBooleanField = prismicT.CustomTypeModelBooleanField,
13
- >(
14
- config: MockBooleanValueConfig<Model> = {},
11
+ export const boolean = <Model extends prismicT.CustomTypeModelBooleanField>(
12
+ config: MockBooleanValueConfig<Model>,
15
13
  ): prismicT.BooleanField => {
16
- const faker = createFaker(config.seed);
14
+ const faker = config.faker || createFaker(config.seed);
17
15
 
18
16
  return faker.boolean();
19
17
  };
@@ -17,9 +17,9 @@ export const color = <
17
17
  Model extends prismicT.CustomTypeModelColorField = prismicT.CustomTypeModelColorField,
18
18
  State extends prismicT.FieldState = "filled",
19
19
  >(
20
- config: MockColorValueConfig<Model, State> = {},
20
+ config: MockColorValueConfig<Model, State>,
21
21
  ): MockColorValue<State> => {
22
- const faker = createFaker(config.seed);
22
+ const faker = config.faker || createFaker(config.seed);
23
23
 
24
24
  return (
25
25
  config.state === "empty" ? null : faker.hexColor().toUpperCase()
@@ -5,7 +5,11 @@ import { createFaker } from "../lib/createFaker";
5
5
  import { generateCustomTypeId } from "../lib/generateCustomTypeId";
6
6
  import { generateTags } from "../lib/generateTags";
7
7
 
8
- import { MockValueStateConfig, MockValueConfig } from "../types";
8
+ import {
9
+ MockValueStateConfig,
10
+ MockValueConfig,
11
+ IterableElement,
12
+ } from "../types";
9
13
 
10
14
  import * as modelGen from "../model";
11
15
 
@@ -26,7 +30,7 @@ type MockContentRelationshipValue<
26
30
  Model extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,
27
31
  State extends prismicT.FieldState = prismicT.FieldState,
28
32
  > = prismicT.RelationField<
29
- Model["config"]["customtypes"],
33
+ IterableElement<NonNullable<Model["config"]>["customtypes"]>,
30
34
  string,
31
35
  never,
32
36
  State
@@ -36,17 +40,16 @@ export const contentRelationship = <
36
40
  Model extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,
37
41
  State extends prismicT.FieldState = "filled",
38
42
  >(
39
- config: MockContentRelationshipValueConfig<Model, State> = {},
43
+ config: MockContentRelationshipValueConfig<Model, State>,
40
44
  ): MockContentRelationshipValue<Model, State> => {
41
- const faker = createFaker(config.seed);
45
+ const faker = config.faker || createFaker(config.seed);
42
46
 
43
47
  if (config.state === "empty") {
44
48
  return {
45
49
  link_type: prismicT.LinkType.Document,
46
50
  } as MockContentRelationshipValue<Model, State>;
47
51
  } else {
48
- const model =
49
- config.model || modelGen.contentRelationship({ seed: config.seed });
52
+ const model = config.model || modelGen.contentRelationship({ faker });
50
53
 
51
54
  const linkableDocuments = config.linkableDocuments
52
55
  ? config.linkableDocuments.filter(
@@ -54,16 +57,16 @@ export const contentRelationship = <
54
57
  document,
55
58
  ): document is prismicT.PrismicDocument<
56
59
  never,
57
- NonNullable<Model["config"]["customtypes"]>[number]
60
+ NonNullable<NonNullable<Model["config"]>["customtypes"]>[number]
58
61
  > => {
59
62
  let shouldKeep = true;
60
63
 
61
- if (model.config.customtypes) {
64
+ if (model.config?.customtypes) {
62
65
  shouldKeep =
63
66
  shouldKeep && model.config.customtypes.includes(document.type);
64
67
  }
65
68
 
66
- if (model.config.tags) {
69
+ if (model.config?.tags) {
67
70
  shouldKeep =
68
71
  shouldKeep &&
69
72
  model.config.tags.some((tag) => document.tags.includes(tag));
@@ -74,16 +77,16 @@ export const contentRelationship = <
74
77
  )
75
78
  : [
76
79
  {
77
- ...documentGen({ seed: config.seed }),
78
- type: model.config.customtypes
80
+ ...documentGen({ faker }),
81
+ type: model.config?.customtypes
79
82
  ? faker.randomElement(model.config.customtypes)
80
- : generateCustomTypeId({ seed: config.seed }),
81
- tags: model.config.tags
83
+ : generateCustomTypeId({ faker }),
84
+ tags: model.config?.tags
82
85
  ? faker.randomElements(model.config.tags)
83
- : generateTags({ seed: config.seed }),
86
+ : generateTags({ faker }),
84
87
  } as prismicT.PrismicDocument<
85
88
  never,
86
- NonNullable<Model["config"]["customtypes"]>[number]
89
+ NonNullable<NonNullable<Model["config"]>["customtypes"]>[number]
87
90
  >,
88
91
  ];
89
92