@prismicio/mock 0.0.9 → 0.1.1

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 -15
  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 +67 -25
  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
@@ -1,6 +1,7 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
3
  import { buildImageFieldImage } from "../../lib/buildImageFieldImage";
4
+ import { createFaker } from "../../lib/createFaker";
4
5
  import { getMockImageData } from "../../lib/getMockImageData";
5
6
 
6
7
  import { MockRichTextValueConfig } from "../../types";
@@ -8,11 +9,13 @@ import { MockRichTextValueConfig } from "../../types";
8
9
  type MockRichTextImageValueConfig = MockRichTextValueConfig;
9
10
 
10
11
  export const image = (
11
- config: MockRichTextImageValueConfig = {},
12
+ config: MockRichTextImageValueConfig,
12
13
  ): prismicT.RTImageNode | undefined => {
13
- const imageData = getMockImageData({ seed: config.seed });
14
+ const faker = config.faker || createFaker(config.seed);
15
+
16
+ const imageData = getMockImageData({ faker });
14
17
  const imageField = buildImageFieldImage({
15
- seed: config.seed,
18
+ faker,
16
19
  imageData,
17
20
  state: "filled",
18
21
  });
@@ -2,7 +2,10 @@ import * as prismicT from "@prismicio/types";
2
2
 
3
3
  import { createFaker } from "../../lib/createFaker";
4
4
 
5
- import { MockRichTextValueConfig as BaseMockRichTextValueConfig } from "../../types";
5
+ import {
6
+ MockRichTextValueConfig as BaseMockRichTextValueConfig,
7
+ MockValueStateConfig,
8
+ } from "../../types";
6
9
 
7
10
  import * as modelGen from "../../model";
8
11
  import { heading } from "./heading";
@@ -28,10 +31,6 @@ const patterns = {
28
31
  },
29
32
  } as const;
30
33
 
31
- export type MockRichTextValueConfig = {
32
- pattern?: keyof typeof patterns;
33
- } & BaseMockRichTextValueConfig<prismicT.CustomTypeModelRichTextField>;
34
-
35
34
  const generators = {
36
35
  [prismicT.RichTextNodeType.heading1]: heading,
37
36
  [prismicT.RichTextNodeType.heading2]: heading,
@@ -47,48 +46,77 @@ const generators = {
47
46
  [prismicT.RichTextNodeType.embed]: embed,
48
47
  };
49
48
 
50
- export const richText = (
51
- config: MockRichTextValueConfig = {},
52
- ): prismicT.RichTextField => {
53
- const faker = createFaker(config.seed);
49
+ export type MockRichTextValueConfig<
50
+ Model extends prismicT.CustomTypeModelRichTextField = prismicT.CustomTypeModelRichTextField,
51
+ State extends prismicT.FieldState = prismicT.FieldState,
52
+ > = {
53
+ pattern?: keyof typeof patterns;
54
+ } & BaseMockRichTextValueConfig<Model> &
55
+ MockValueStateConfig<State>;
56
+
57
+ export type MockRichTextValue<
58
+ State extends prismicT.FieldState = prismicT.FieldState,
59
+ > = prismicT.RichTextField<State>;
54
60
 
55
- const model =
56
- config.model ||
57
- modelGen.richText({
58
- seed: config.seed,
59
- withMultipleBlocks: true,
60
- });
61
- const supportsMultipleBlocks = "multi" in model.config;
62
- const types = (
63
- "multi" in model.config ? model.config.multi : model.config.single
64
- )
65
- .split(",")
66
- .filter((type) =>
67
- Object.keys(generators).includes(type),
68
- ) as prismicT.RTNode["type"][];
61
+ export const richText = <
62
+ Model extends prismicT.CustomTypeModelRichTextField = prismicT.CustomTypeModelRichTextField,
63
+ State extends prismicT.FieldState = prismicT.FieldState,
64
+ >(
65
+ config: MockRichTextValueConfig<Model, State>,
66
+ ): MockRichTextValue<State> => {
67
+ const faker = config.faker || createFaker(config.seed);
69
68
 
70
- if (types.length > 0) {
71
- const patternKey =
72
- config.pattern ||
73
- faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
74
- const pattern = patterns[patternKey];
69
+ if (config.state === "empty") {
70
+ return [] as MockRichTextValue<State>;
71
+ } else {
72
+ const model =
73
+ config.model ||
74
+ modelGen.richText({
75
+ faker,
76
+ withMultipleBlocks: true,
77
+ });
78
+ const supportsMultipleBlocks = model.config && "multi" in model.config;
75
79
 
76
- const blockCount = supportsMultipleBlocks
77
- ? faker.range(pattern.blockCountMin, pattern.blockCountMax)
78
- : 1;
80
+ let types: prismicT.RTNode["type"][] = [];
81
+ if (model.config) {
82
+ if ("multi" in model.config && model.config.multi) {
83
+ types = model.config.multi
84
+ .split(",")
85
+ .filter((type): type is prismicT.RTNode["type"] =>
86
+ Object.keys(generators).includes(type),
87
+ );
88
+ } else if ("single" in model.config && model.config.single) {
89
+ types = model.config.single
90
+ .split(",")
91
+ .filter((type): type is prismicT.RTNode["type"] =>
92
+ Object.keys(generators).includes(type),
93
+ );
94
+ }
95
+ }
79
96
 
80
- return Array(blockCount)
81
- .fill(undefined)
82
- .map(() => {
83
- const type = faker.randomElement(types);
84
- const generator = generators[type];
97
+ if (types.length > 0) {
98
+ const patternKey =
99
+ config.pattern ||
100
+ faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
101
+ const pattern = patterns[patternKey];
85
102
 
86
- return generator({ seed: config.seed, model });
87
- })
88
- .flat()
89
- .filter((block): block is prismicT.RTNode => block !== undefined)
90
- .slice(0, blockCount) as prismicT.RichTextField;
91
- } else {
92
- return [];
103
+ const blockCount = supportsMultipleBlocks
104
+ ? faker.range(pattern.blockCountMin, pattern.blockCountMax)
105
+ : 1;
106
+
107
+ return Array(blockCount)
108
+ .fill(undefined)
109
+ .map(() => {
110
+ const type = faker.randomElement(types);
111
+ const generator = generators[type];
112
+
113
+ return generator({ faker, model });
114
+ })
115
+ .flat()
116
+ .filter((block): block is prismicT.RTNode => block !== undefined)
117
+ .slice(0, blockCount) as MockRichTextValue<State>;
118
+ } else {
119
+ return [] as MockRichTextValue<State>;
120
+ }
93
121
  }
94
122
  };
@@ -25,9 +25,9 @@ type MockRichTextListValueConfig = {
25
25
  } & MockRichTextValueConfig;
26
26
 
27
27
  export const list = (
28
- config: MockRichTextListValueConfig = {},
28
+ config: MockRichTextListValueConfig,
29
29
  ): prismicT.RTListItemNode[] | undefined => {
30
- const faker = createFaker(config.seed);
30
+ const faker = config.faker || createFaker(config.seed);
31
31
 
32
32
  const patternKey =
33
33
  config.pattern ||
@@ -25,9 +25,9 @@ type MockRichTextOListValueConfig = {
25
25
  } & MockRichTextValueConfig;
26
26
 
27
27
  export const oList = (
28
- config: MockRichTextOListValueConfig = {},
28
+ config: MockRichTextOListValueConfig,
29
29
  ): prismicT.RTOListItemNode[] | undefined => {
30
- const faker = createFaker(config.seed);
30
+ const faker = config.faker || createFaker(config.seed);
31
31
 
32
32
  const patternKey =
33
33
  config.pattern ||
@@ -22,9 +22,9 @@ type MockRichTextParagraphValueConfig = {
22
22
  } & MockRichTextValueConfig;
23
23
 
24
24
  export const paragraph = (
25
- config: MockRichTextParagraphValueConfig = {},
25
+ config: MockRichTextParagraphValueConfig,
26
26
  ): prismicT.RTParagraphNode | undefined => {
27
- const faker = createFaker(config.seed);
27
+ const faker = config.faker || createFaker(config.seed);
28
28
 
29
29
  const patternKey =
30
30
  config.pattern ||
@@ -22,9 +22,9 @@ type MockRichTextPreformattedValueConfig = {
22
22
  } & MockRichTextValueConfig;
23
23
 
24
24
  export const preformatted = (
25
- config: MockRichTextPreformattedValueConfig = {},
25
+ config: MockRichTextPreformattedValueConfig,
26
26
  ): prismicT.RTPreformattedNode | undefined => {
27
- const faker = createFaker(config.seed);
27
+ const faker = config.faker || createFaker(config.seed);
28
28
 
29
29
  const patternKey =
30
30
  config.pattern ||
@@ -14,18 +14,22 @@ export type MockSelectValueConfig<
14
14
  export type MockSelectValue<
15
15
  Model extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,
16
16
  State extends prismicT.FieldState = prismicT.FieldState,
17
- > = prismicT.SelectField<Model["config"]["options"][number], State>;
17
+ > = prismicT.SelectField<
18
+ NonNullable<NonNullable<Model["config"]>["options"]>[number],
19
+ State
20
+ >;
18
21
 
19
22
  export const select = <
20
23
  Model extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,
21
24
  State extends prismicT.FieldState = "filled",
22
25
  >(
23
- config: MockSelectValueConfig<Model, State> = {},
26
+ config: MockSelectValueConfig<Model, State>,
24
27
  ): MockSelectValue<Model, State> => {
25
- const faker = createFaker(config.seed);
28
+ const faker = config.faker || createFaker(config.seed);
26
29
 
27
- const model = config.model || modelGen.select({ seed: config.seed });
28
- const defaultValue = model.config.default_value;
30
+ const model = config.model || modelGen.select({ faker });
31
+ const defaultValue = model.config?.default_value;
32
+ const options = model.config?.options || [];
29
33
 
30
34
  if (config.state === "empty") {
31
35
  return null as MockSelectValue<Model, State>;
@@ -33,7 +37,7 @@ export const select = <
33
37
  return (
34
38
  typeof defaultValue === "string" && faker.boolean()
35
39
  ? defaultValue
36
- : faker.randomElement(model.config.options)
40
+ : faker.randomElement(options)
37
41
  ) as MockSelectValue<Model, State>;
38
42
  }
39
43
  };
@@ -21,15 +21,15 @@ export type MockSharedSliceValueConfig<
21
21
  export const sharedSlice = <
22
22
  Model extends prismicT.SharedSliceModel = prismicT.SharedSliceModel,
23
23
  >(
24
- config: MockSharedSliceValueConfig<Model> = {},
24
+ config: MockSharedSliceValueConfig<Model>,
25
25
  ): ModelValue<Model> => {
26
- const faker = createFaker(config.seed);
26
+ const faker = config.faker || createFaker(config.seed);
27
27
 
28
- const model = config.model || modelGen.sharedSlice({ seed: config.seed });
28
+ const model = config.model || modelGen.sharedSlice({ faker });
29
29
  const variationModel = faker.randomElement(model.variations);
30
30
 
31
31
  return sharedSliceVariation({
32
- seed: config.seed,
32
+ faker,
33
33
  model: variationModel,
34
34
  itemsCount: config.itemsCount,
35
35
  type: model.id,
@@ -24,17 +24,16 @@ export type MockSharedSliceVariationValueConfig<
24
24
  export const sharedSliceVariation = <
25
25
  Model extends prismicT.SharedSliceModelVariation = prismicT.SharedSliceModelVariation,
26
26
  >(
27
- config: MockSharedSliceVariationValueConfig<Model> = {},
27
+ config: MockSharedSliceVariationValueConfig<Model>,
28
28
  ): ModelValue<Model> => {
29
- const faker = createFaker(config.seed);
29
+ const faker = config.faker || createFaker(config.seed);
30
30
 
31
- const model =
32
- config.model || modelGen.sharedSliceVariation({ seed: config.seed });
31
+ const model = config.model || modelGen.sharedSliceVariation({ faker });
33
32
 
34
- const sliceType = config.type ?? generateFieldId({ seed: config.seed });
33
+ const sliceType = config.type ?? generateFieldId({ faker });
35
34
 
36
35
  const itemsCount =
37
- Object.keys(model.items).length > 0
36
+ model.items && Object.keys(model.items).length > 0
38
37
  ? config.itemsCount ?? faker.range(1, 6)
39
38
  : 0;
40
39
 
@@ -44,16 +43,16 @@ export const sharedSliceVariation = <
44
43
  variation: model.id,
45
44
  version: faker.hash(7),
46
45
  primary: valueForModelMap({
47
- seed: config.seed,
48
- map: model.primary,
46
+ faker,
47
+ map: model.primary || {},
49
48
  configs: config.primaryFieldConfigs,
50
49
  }),
51
50
  items: Array(itemsCount)
52
51
  .fill(undefined)
53
52
  .map(() => {
54
53
  return valueForModelMap({
55
- seed: config.seed,
56
- map: model.items,
54
+ faker,
55
+ map: model.items || {},
57
56
  configs: config.itemsFieldConfigs,
58
57
  });
59
58
  }),
@@ -25,20 +25,20 @@ export type MockSliceValueConfig<
25
25
  export const slice = <
26
26
  Model extends prismicT.CustomTypeModelSlice = prismicT.CustomTypeModelSlice,
27
27
  >(
28
- config: MockSliceValueConfig<Model> = {},
28
+ config: MockSliceValueConfig<Model>,
29
29
  ): ModelValue<Model> => {
30
- const faker = createFaker(config.seed);
30
+ const faker = config.faker || createFaker(config.seed);
31
31
 
32
- const model = config.model || modelGen.slice({ seed: config.seed });
32
+ const model = config.model || modelGen.slice({ faker });
33
33
 
34
- const sliceType = config.type ?? generateFieldId({ seed: config.seed });
34
+ const sliceType = config.type ?? generateFieldId({ faker });
35
35
  const sliceLabel =
36
36
  config.label !== undefined
37
37
  ? config.label
38
38
  : changeCase.capitalCase(faker.words(faker.range(1, 2)));
39
39
 
40
40
  const itemsCount =
41
- Object.keys(model.repeat).length > 0
41
+ model.repeat && Object.keys(model.repeat).length > 0
42
42
  ? config.itemsCount ?? faker.range(1, 6)
43
43
  : 0;
44
44
 
@@ -46,16 +46,16 @@ export const slice = <
46
46
  slice_type: sliceType,
47
47
  slice_label: sliceLabel,
48
48
  primary: valueForModelMap({
49
- seed: config.seed,
50
- map: model["non-repeat"],
49
+ faker,
50
+ map: model["non-repeat"] || {},
51
51
  configs: config.primaryFieldConfigs,
52
52
  }),
53
53
  items: Array(itemsCount)
54
54
  .fill(undefined)
55
55
  .map(() => {
56
56
  return valueForModelMap({
57
- seed: config.seed,
58
- map: model.repeat,
57
+ faker,
58
+ map: model.repeat || {},
59
59
  configs: config.itemsFieldConfigs,
60
60
  });
61
61
  }),
@@ -25,31 +25,33 @@ export const sliceZone = <
25
25
  Model extends prismicT.CustomTypeModelSliceZoneField = prismicT.CustomTypeModelSliceZoneField,
26
26
  State extends prismicT.FieldState = prismicT.FieldState,
27
27
  >(
28
- config: MockSliceZoneValueConfig<Model, State> = {},
28
+ config: MockSliceZoneValueConfig<Model, State>,
29
29
  ): ModelValue<Model, State> => {
30
30
  if (config.state === "empty") {
31
31
  return [] as ModelValue<Model, State>;
32
32
  } else {
33
- const faker = createFaker(config.seed);
33
+ const faker = config.faker || createFaker(config.seed);
34
34
 
35
- const model = config.model || modelGen.sliceZone({ seed: config.seed });
35
+ const model = config.model || modelGen.sliceZone({ faker });
36
36
 
37
- if (Object.keys(model.config.choices).length > 0) {
37
+ if (model.config?.choices && Object.keys(model.config.choices).length > 0) {
38
38
  const itemsCount = config.itemsCount ?? faker.range(1, 6);
39
39
 
40
40
  return Array(itemsCount)
41
41
  .fill(undefined)
42
42
  .map(() => {
43
- const choices = Object.entries(model.config.choices);
43
+ const choices =
44
+ (model.config?.choices && Object.entries(model.config.choices)) ||
45
+ [];
44
46
  const [choiceType, choiceModel] = faker.randomElement(choices);
45
47
 
46
- const choiceLabels = model.config.labels[choiceType] || [];
48
+ const choiceLabels = model.config?.labels?.[choiceType] || [];
47
49
  const choiceLabel = faker.randomElement(choiceLabels);
48
50
 
49
51
  switch (choiceModel.type) {
50
52
  case prismicT.CustomTypeModelSliceType.Slice: {
51
53
  return slice({
52
- seed: config.seed,
54
+ faker,
53
55
  model: choiceModel,
54
56
  type: choiceType,
55
57
  label: choiceLabel ? choiceLabel.name : null,
@@ -65,7 +67,7 @@ export const sliceZone = <
65
67
 
66
68
  if (sharedSliceModel) {
67
69
  return sharedSlice({
68
- seed: config.seed,
70
+ faker,
69
71
  model: sharedSliceModel,
70
72
  primaryFieldConfigs: config.primaryFieldConfigs,
71
73
  itemsFieldConfigs: config.itemsFieldConfigs,
@@ -21,9 +21,9 @@ export const timestamp = <
21
21
  Model extends prismicT.CustomTypeModelTimestampField = prismicT.CustomTypeModelTimestampField,
22
22
  State extends prismicT.FieldState = "filled",
23
23
  >(
24
- config: MockTimestampValueConfig<Model, State> = {},
24
+ config: MockTimestampValueConfig<Model, State>,
25
25
  ): MockTimestampValue<State> => {
26
- const faker = createFaker(config.seed);
26
+ const faker = config.faker || createFaker(config.seed);
27
27
 
28
28
  if (config.state === "empty") {
29
29
  return null as MockTimestampValue<State>;
@@ -1,5 +1,7 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
+ import { createFaker } from "../lib/createFaker";
4
+
3
5
  import { MockValueConfig, MockValueStateConfig } from "../types";
4
6
 
5
7
  import { heading, MockRichTextHeadingValueConfig } from "./richText/heading";
@@ -18,17 +20,19 @@ export type MockTitleValue<
18
20
 
19
21
  export const title = <
20
22
  Model extends prismicT.CustomTypeModelTitleField = prismicT.CustomTypeModelTitleField,
21
- State extends prismicT.FieldState = prismicT.FieldState,
23
+ State extends prismicT.FieldState = "filled",
22
24
  >(
23
- config: MockTitleValueConfig<Model, State> = {},
25
+ config: MockTitleValueConfig<Model, State>,
24
26
  ): MockTitleValue<State> => {
27
+ const faker = config.faker || createFaker(config.seed);
28
+
25
29
  if (config.state === "empty") {
26
30
  return [] as MockTitleValue<State>;
27
31
  } else {
28
32
  return [
29
33
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
30
34
  heading({
31
- seed: config.seed,
35
+ faker,
32
36
  model: config.model,
33
37
  pattern: config.pattern,
34
38
  })!,
package/src/value/uid.ts CHANGED
@@ -9,10 +9,12 @@ export type MockUIDValueConfig<
9
9
  Model extends prismicT.CustomTypeModelUIDField = prismicT.CustomTypeModelUIDField,
10
10
  > = MockValueConfig<Model>;
11
11
 
12
- export const uid = (
13
- config: MockUIDValueConfig = {},
12
+ export const uid = <
13
+ Model extends prismicT.CustomTypeModelUIDField = prismicT.CustomTypeModelUIDField,
14
+ >(
15
+ config: MockUIDValueConfig<Model>,
14
16
  ): NonNullable<prismicT.PrismicDocument["uid"]> => {
15
- const faker = createFaker(config.seed);
17
+ const faker = config.faker || createFaker(config.seed);
16
18
 
17
19
  return changeCase.snakeCase(faker.words(faker.range(1, 3)));
18
20
  };