@prismicio/mock 0.0.8 → 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 (97) hide show
  1. package/dist/api/index.cjs +348 -236
  2. package/dist/api/index.cjs.map +1 -1
  3. package/dist/api/index.d.ts +52 -6
  4. package/dist/api/index.js +348 -236
  5. package/dist/api/index.js.map +1 -1
  6. package/dist/index.cjs +893 -543
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +247 -73
  9. package/dist/index.js +885 -542
  10. package/dist/index.js.map +1 -1
  11. package/dist/model/index.cjs +398 -134
  12. package/dist/model/index.cjs.map +1 -1
  13. package/dist/model/index.d.ts +114 -28
  14. package/dist/model/index.js +398 -134
  15. package/dist/model/index.js.map +1 -1
  16. package/dist/value/index.cjs +598 -468
  17. package/dist/value/index.cjs.map +1 -1
  18. package/dist/value/index.d.ts +96 -40
  19. package/dist/value/index.js +598 -468
  20. package/dist/value/index.js.map +1 -1
  21. package/package.json +22 -20
  22. package/src/api/createAPIMockFactory.ts +56 -0
  23. package/src/api/query.ts +4 -4
  24. package/src/api/ref.ts +6 -6
  25. package/src/api/repository.ts +12 -14
  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 +28 -30
  30. package/src/lib/buildImageFieldImage.ts +19 -7
  31. package/src/lib/createFaker.ts +99 -22
  32. package/src/lib/generateCustomTypeId.ts +13 -5
  33. package/src/lib/generateFieldId.ts +13 -7
  34. package/src/lib/generateTags.ts +17 -16
  35. package/src/lib/getMockEmbedData.ts +45 -16
  36. package/src/lib/getMockImageData.ts +13 -5
  37. package/src/lib/lorem.ts +112 -0
  38. package/src/lib/valueForModel.ts +47 -30
  39. package/src/lib/valueForModelMap.ts +24 -4
  40. package/src/model/boolean.ts +6 -6
  41. package/src/model/buildMockGroupFieldMap.ts +5 -5
  42. package/src/model/color.ts +4 -4
  43. package/src/model/contentRelationship.ts +4 -4
  44. package/src/model/createModelMockFactory.ts +213 -0
  45. package/src/model/customType.ts +6 -6
  46. package/src/model/date.ts +4 -4
  47. package/src/model/embed.ts +4 -4
  48. package/src/model/geoPoint.ts +3 -3
  49. package/src/model/group.ts +7 -7
  50. package/src/model/image.ts +8 -12
  51. package/src/model/index.ts +2 -0
  52. package/src/model/integrationFields.ts +4 -4
  53. package/src/model/keyText.ts +4 -4
  54. package/src/model/link.ts +6 -6
  55. package/src/model/linkToMedia.ts +5 -5
  56. package/src/model/number.ts +4 -4
  57. package/src/model/richText.ts +8 -8
  58. package/src/model/select.ts +5 -5
  59. package/src/model/sharedSlice.ts +5 -5
  60. package/src/model/sharedSliceVariation.ts +10 -10
  61. package/src/model/slice.ts +7 -7
  62. package/src/model/sliceZone.ts +7 -4
  63. package/src/model/timestamp.ts +4 -4
  64. package/src/model/title.ts +7 -7
  65. package/src/model/uid.ts +4 -4
  66. package/src/types.ts +70 -31
  67. package/src/value/boolean.ts +4 -6
  68. package/src/value/color.ts +3 -3
  69. package/src/value/contentRelationship.ts +21 -18
  70. package/src/value/createValueMockFactory.ts +236 -0
  71. package/src/value/customType.ts +12 -12
  72. package/src/value/date.ts +6 -2
  73. package/src/value/embed.ts +23 -7
  74. package/src/value/geoPoint.ts +4 -6
  75. package/src/value/group.ts +6 -11
  76. package/src/value/image.ts +26 -18
  77. package/src/value/integrationFields.ts +12 -26
  78. package/src/value/keyText.ts +3 -5
  79. package/src/value/link.ts +11 -9
  80. package/src/value/linkToMedia.ts +9 -8
  81. package/src/value/number.ts +3 -3
  82. package/src/value/richText/embed.ts +6 -3
  83. package/src/value/richText/heading.ts +32 -27
  84. package/src/value/richText/image.ts +9 -8
  85. package/src/value/richText/index.ts +71 -48
  86. package/src/value/richText/list.ts +6 -10
  87. package/src/value/richText/oList.ts +6 -10
  88. package/src/value/richText/paragraph.ts +10 -6
  89. package/src/value/richText/preformatted.ts +11 -7
  90. package/src/value/select.ts +11 -7
  91. package/src/value/sharedSlice.ts +5 -5
  92. package/src/value/sharedSliceVariation.ts +11 -16
  93. package/src/value/slice.ts +11 -15
  94. package/src/value/sliceZone.ts +14 -18
  95. package/src/value/timestamp.ts +31 -18
  96. package/src/value/title.ts +7 -3
  97. package/src/value/uid.ts +6 -4
@@ -17,11 +17,11 @@ export const number = <
17
17
  Model extends prismicT.CustomTypeModelNumberField = prismicT.CustomTypeModelNumberField,
18
18
  State extends prismicT.FieldState = "filled",
19
19
  >(
20
- config: MockNumberValueConfig<Model, State> = {},
20
+ config: MockNumberValueConfig<Model, State>,
21
21
  ): MockNumberValue<State> => {
22
- const faker = createFaker(config.seed);
22
+ const faker = config.faker || createFaker(config.seed);
23
23
 
24
24
  return (
25
- config.state === "empty" ? null : faker.datatype.number()
25
+ config.state === "empty" ? null : faker.range(1, 100)
26
26
  ) as MockNumberValue<State>;
27
27
  };
@@ -1,6 +1,7 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
3
  import { buildEmbedField } from "../../lib/buildEmbedField";
4
+ import { createFaker } from "../../lib/createFaker";
4
5
  import { getMockEmbedData } from "../../lib/getMockEmbedData";
5
6
 
6
7
  import { MockRichTextValueConfig } from "../../types";
@@ -8,10 +9,12 @@ import { MockRichTextValueConfig } from "../../types";
8
9
  type MockRichTextEmbedValueConfig = MockRichTextValueConfig;
9
10
 
10
11
  export const embed = (
11
- config: MockRichTextEmbedValueConfig = {},
12
+ config: MockRichTextEmbedValueConfig,
12
13
  ): prismicT.RTEmbedNode | undefined => {
13
- const embedData = getMockEmbedData({ seed: config.seed });
14
- const embedField = buildEmbedField({ seed: config.seed, embedData });
14
+ const faker = config.faker || createFaker(config.seed);
15
+
16
+ const data = getMockEmbedData({ faker });
17
+ const embedField = buildEmbedField({ faker, data });
15
18
 
16
19
  return {
17
20
  type: prismicT.RichTextNodeType.embed,
@@ -42,46 +42,51 @@ export type MockRichTextHeadingValueConfig = {
42
42
  pattern?: keyof typeof patterns;
43
43
  } & MockRichTextValueConfig;
44
44
 
45
+ const headingNoteTypes = [
46
+ prismicT.RichTextNodeType.heading1,
47
+ prismicT.RichTextNodeType.heading2,
48
+ prismicT.RichTextNodeType.heading3,
49
+ prismicT.RichTextNodeType.heading4,
50
+ prismicT.RichTextNodeType.heading5,
51
+ prismicT.RichTextNodeType.heading6,
52
+ ];
53
+
45
54
  export const heading = (
46
- config: MockRichTextHeadingValueConfig = {},
55
+ config: MockRichTextHeadingValueConfig,
47
56
  ): RTHeadingNode | undefined => {
48
- const faker = createFaker(config.seed);
57
+ const faker = config.faker || createFaker(config.seed);
58
+
59
+ const model = config.model || modelGen.title({ faker });
49
60
 
50
- const model = config.model || modelGen.title({ seed: config.seed });
61
+ let types: RichTextNodeTitleType[] = [];
62
+ if (model.config) {
63
+ if ("single" in model.config && model.config.single) {
64
+ types = model.config.single
65
+ .split(",")
66
+ .filter((type): type is RichTextNodeTitleType =>
67
+ headingNoteTypes.includes(type as RichTextNodeTitleType),
68
+ );
69
+ } else if ("multi" in model.config && model.config.multi) {
70
+ types = model.config.multi
71
+ .split(",")
72
+ .filter((type): type is RichTextNodeTitleType =>
73
+ headingNoteTypes.includes(type as RichTextNodeTitleType),
74
+ );
75
+ }
76
+ }
51
77
 
52
- const types = (
53
- "single" in model.config ? model.config.single : model.config.multi
54
- )
55
- .split(",")
56
- .filter((type) =>
57
- [
58
- prismicT.RichTextNodeType.heading1,
59
- prismicT.RichTextNodeType.heading2,
60
- prismicT.RichTextNodeType.heading3,
61
- prismicT.RichTextNodeType.heading4,
62
- prismicT.RichTextNodeType.heading5,
63
- prismicT.RichTextNodeType.heading6,
64
- ].includes(type as RichTextNodeTitleType),
65
- ) as RichTextNodeTitleType[];
66
- const type = faker.random.arrayElement(types);
78
+ const type = faker.randomElement(types);
67
79
 
68
80
  if (type) {
69
81
  const patternKey =
70
82
  config.pattern ||
71
- faker.random.arrayElement(
72
- Object.keys(patterns) as (keyof typeof patterns)[],
73
- );
83
+ faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
74
84
  const pattern = patterns[patternKey];
75
85
 
76
86
  return {
77
87
  type,
78
88
  text: changeCase.capitalCase(
79
- faker.lorem.words(
80
- faker.datatype.number({
81
- min: pattern.minWords,
82
- max: pattern.maxWords,
83
- }),
84
- ),
89
+ faker.words(faker.range(pattern.minWords, pattern.maxWords)),
85
90
  ),
86
91
  spans: [],
87
92
  };
@@ -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,22 +9,22 @@ 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
- state: false,
20
+ state: "filled",
18
21
  });
19
22
 
20
23
  return {
21
24
  type: prismicT.RichTextNodeType.image,
22
25
  alt: imageField.alt,
23
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
24
- url: imageField.url!,
26
+ url: imageField.url,
25
27
  copyright: imageField.copyright,
26
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
27
- dimensions: imageField.dimensions!,
28
+ dimensions: imageField.dimensions,
28
29
  };
29
30
  };
@@ -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,53 +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.random.arrayElement(
74
- Object.keys(patterns) as (keyof typeof patterns)[],
75
- );
76
- 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;
77
79
 
78
- const blockCount = supportsMultipleBlocks
79
- ? faker.datatype.number({
80
- min: pattern.blockCountMin,
81
- max: pattern.blockCountMax,
82
- })
83
- : 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
+ }
84
96
 
85
- return Array(blockCount)
86
- .fill(undefined)
87
- .map(() => {
88
- const type = faker.random.arrayElement(types);
89
- 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];
90
102
 
91
- return generator({ seed: config.seed, model });
92
- })
93
- .flat()
94
- .filter((block): block is prismicT.RTNode => block !== undefined)
95
- .slice(0, blockCount) as prismicT.RichTextField;
96
- } else {
97
- 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
+ }
98
121
  }
99
122
  };
@@ -1,4 +1,5 @@
1
1
  import * as prismicT from "@prismicio/types";
2
+ import * as changeCase from "change-case";
2
3
 
3
4
  import { createFaker } from "../../lib/createFaker";
4
5
 
@@ -24,28 +25,23 @@ type MockRichTextListValueConfig = {
24
25
  } & MockRichTextValueConfig;
25
26
 
26
27
  export const list = (
27
- config: MockRichTextListValueConfig = {},
28
+ config: MockRichTextListValueConfig,
28
29
  ): prismicT.RTListItemNode[] | undefined => {
29
- const faker = createFaker(config.seed);
30
+ const faker = config.faker || createFaker(config.seed);
30
31
 
31
32
  const patternKey =
32
33
  config.pattern ||
33
- faker.random.arrayElement(
34
- Object.keys(patterns) as (keyof typeof patterns)[],
35
- );
34
+ faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
36
35
  const pattern = patterns[patternKey];
37
36
 
38
- const itemsCount = faker.datatype.number({
39
- min: pattern.minItems,
40
- max: pattern.maxItems,
41
- });
37
+ const itemsCount = faker.range(pattern.minItems, pattern.maxItems);
42
38
 
43
39
  return Array(itemsCount)
44
40
  .fill(undefined)
45
41
  .map(() => {
46
42
  return {
47
43
  type: prismicT.RichTextNodeType.listItem,
48
- text: faker.lorem.sentence(),
44
+ text: changeCase.sentenceCase(faker.words(faker.range(5, 15))),
49
45
  spans: [],
50
46
  };
51
47
  });
@@ -1,4 +1,5 @@
1
1
  import * as prismicT from "@prismicio/types";
2
+ import * as changeCase from "change-case";
2
3
 
3
4
  import { createFaker } from "../../lib/createFaker";
4
5
 
@@ -24,28 +25,23 @@ type MockRichTextOListValueConfig = {
24
25
  } & MockRichTextValueConfig;
25
26
 
26
27
  export const oList = (
27
- config: MockRichTextOListValueConfig = {},
28
+ config: MockRichTextOListValueConfig,
28
29
  ): prismicT.RTOListItemNode[] | undefined => {
29
- const faker = createFaker(config.seed);
30
+ const faker = config.faker || createFaker(config.seed);
30
31
 
31
32
  const patternKey =
32
33
  config.pattern ||
33
- faker.random.arrayElement(
34
- Object.keys(patterns) as (keyof typeof patterns)[],
35
- );
34
+ faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
36
35
  const pattern = patterns[patternKey];
37
36
 
38
- const itemsCount = faker.datatype.number({
39
- min: pattern.minItems,
40
- max: pattern.maxItems,
41
- });
37
+ const itemsCount = faker.range(pattern.minItems, pattern.maxItems);
42
38
 
43
39
  return Array(itemsCount)
44
40
  .fill(undefined)
45
41
  .map(() => {
46
42
  return {
47
43
  type: prismicT.RichTextNodeType.oListItem,
48
- text: faker.lorem.sentence(),
44
+ text: changeCase.sentenceCase(faker.words(faker.range(5, 15))),
49
45
  spans: [],
50
46
  };
51
47
  });
@@ -1,4 +1,5 @@
1
1
  import * as prismicT from "@prismicio/types";
2
+ import * as changeCase from "change-case";
2
3
 
3
4
  import { createFaker } from "../../lib/createFaker";
4
5
 
@@ -21,20 +22,23 @@ type MockRichTextParagraphValueConfig = {
21
22
  } & MockRichTextValueConfig;
22
23
 
23
24
  export const paragraph = (
24
- config: MockRichTextParagraphValueConfig = {},
25
+ config: MockRichTextParagraphValueConfig,
25
26
  ): prismicT.RTParagraphNode | undefined => {
26
- const faker = createFaker(config.seed);
27
+ const faker = config.faker || createFaker(config.seed);
27
28
 
28
29
  const patternKey =
29
30
  config.pattern ||
30
- faker.random.arrayElement(
31
- Object.keys(patterns) as (keyof typeof patterns)[],
32
- );
31
+ faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
33
32
  const pattern = patterns[patternKey];
34
33
 
34
+ const text = Array.from(
35
+ { length: pattern.sentenceCount },
36
+ () => changeCase.sentenceCase(faker.words(faker.range(5, 15))) + ".",
37
+ ).join(" ");
38
+
35
39
  return {
36
40
  type: prismicT.RichTextNodeType.paragraph,
37
- text: faker.lorem.paragraph(pattern.sentenceCount),
41
+ text,
38
42
  spans: [],
39
43
  };
40
44
  };
@@ -1,4 +1,5 @@
1
1
  import * as prismicT from "@prismicio/types";
2
+ import * as changeCase from "change-case";
2
3
 
3
4
  import { createFaker } from "../../lib/createFaker";
4
5
 
@@ -21,21 +22,24 @@ type MockRichTextPreformattedValueConfig = {
21
22
  } & MockRichTextValueConfig;
22
23
 
23
24
  export const preformatted = (
24
- config: MockRichTextPreformattedValueConfig = {},
25
+ config: MockRichTextPreformattedValueConfig,
25
26
  ): prismicT.RTPreformattedNode | undefined => {
26
- const faker = createFaker(config.seed);
27
+ const faker = config.faker || createFaker(config.seed);
27
28
 
28
29
  const patternKey =
29
30
  config.pattern ||
30
- faker.random.arrayElement(
31
- Object.keys(patterns) as (keyof typeof patterns)[],
32
- );
31
+ faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
33
32
  const pattern = patterns[patternKey];
34
33
 
34
+ // TODO: Use code, not lorem ipsum.
35
+ const text = Array.from(
36
+ { length: pattern.sentenceCount },
37
+ () => changeCase.sentenceCase(faker.words(faker.range(5, 15))) + ".",
38
+ ).join(" ");
39
+
35
40
  return {
36
41
  type: prismicT.RichTextNodeType.preformatted,
37
- // TODO: Use code, not lorem ipsum.
38
- text: faker.lorem.paragraph(pattern.sentenceCount),
42
+ text,
39
43
  spans: [],
40
44
  };
41
45
  };
@@ -14,26 +14,30 @@ 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>;
32
36
  } else {
33
37
  return (
34
- typeof defaultValue === "string" && faker.datatype.boolean()
38
+ typeof defaultValue === "string" && faker.boolean()
35
39
  ? defaultValue
36
- : faker.random.arrayElement(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 });
29
- const variationModel = faker.random.arrayElement(model.variations);
28
+ const model = config.model || modelGen.sharedSlice({ faker });
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,40 +24,35 @@ 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
38
- ? config.itemsCount ??
39
- faker.datatype.number({
40
- min: 1,
41
- max: 6,
42
- })
36
+ model.items && Object.keys(model.items).length > 0
37
+ ? config.itemsCount ?? faker.range(1, 6)
43
38
  : 0;
44
39
 
45
40
  return {
46
41
  slice_type: sliceType,
47
42
  slice_label: null,
48
43
  variation: model.id,
49
- version: faker.git.shortSha(),
44
+ version: faker.hash(7),
50
45
  primary: valueForModelMap({
51
- seed: config.seed,
52
- map: model.primary,
46
+ faker,
47
+ map: model.primary || {},
53
48
  configs: config.primaryFieldConfigs,
54
49
  }),
55
50
  items: Array(itemsCount)
56
51
  .fill(undefined)
57
52
  .map(() => {
58
53
  return valueForModelMap({
59
- seed: config.seed,
60
- map: model.items,
54
+ faker,
55
+ map: model.items || {},
61
56
  configs: config.itemsFieldConfigs,
62
57
  });
63
58
  }),
@@ -25,41 +25,37 @@ 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
- : changeCase.capitalCase(faker.company.bsNoun());
38
+ : changeCase.capitalCase(faker.words(faker.range(1, 2)));
39
39
 
40
40
  const itemsCount =
41
- Object.keys(model.repeat).length > 0
42
- ? config.itemsCount ??
43
- faker.datatype.number({
44
- min: 1,
45
- max: 6,
46
- })
41
+ model.repeat && Object.keys(model.repeat).length > 0
42
+ ? config.itemsCount ?? faker.range(1, 6)
47
43
  : 0;
48
44
 
49
45
  return {
50
46
  slice_type: sliceType,
51
47
  slice_label: sliceLabel,
52
48
  primary: valueForModelMap({
53
- seed: config.seed,
54
- map: model["non-repeat"],
49
+ faker,
50
+ map: model["non-repeat"] || {},
55
51
  configs: config.primaryFieldConfigs,
56
52
  }),
57
53
  items: Array(itemsCount)
58
54
  .fill(undefined)
59
55
  .map(() => {
60
56
  return valueForModelMap({
61
- seed: config.seed,
62
- map: model.repeat,
57
+ faker,
58
+ map: model.repeat || {},
63
59
  configs: config.itemsFieldConfigs,
64
60
  });
65
61
  }),