@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
package/dist/index.js CHANGED
@@ -1,79 +1,166 @@
1
1
  import * as changeCase from 'change-case';
2
- import * as fakerLocaleEN from 'faker/lib/locales/en/index.js';
3
- import Faker from 'faker/lib/index.js';
2
+ import Rand from 'rand-seed';
4
3
  import * as prismicT from '@prismicio/types';
5
4
 
6
- const FAKER_SEED = 1984;
5
+ const wordsString = "lorem ipsum dolor sit amet, consectetur adipiscing elit ut aliquam, purus sit amet luctus venenatis, lectus magna fringilla urna, porttitor rhoncus dolor purus non enim praesent elementum facilisis leo, vel fringilla est ullamcorper eget nulla facilisi etiam dignissim diam quis enim lobortis scelerisque fermentum dui faucibus in ornare quam viverra orci sagittis eu volutpat odio facilisis mauris sit amet massa vitae tortor condimentum lacinia quis vel eros donec ac odio tempor orci dapibus ultrices in iaculis nunc sed augue lacus, viverra vitae congue eu, consequat ac felis donec et odio pellentesque diam volutpat commodo sed egestas egestas fringilla phasellus faucibus scelerisque eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada bibendum arcu vitae elementum curabitur vitae nunc sed velit dignissim sodales ut eu sem integer vitae justo eget magna fermentum iaculis eu non diam phasellus vestibulum lorem sed risus ultricies tristique nulla aliquet enim tortor, at auctor urna nunc id cursus metus aliquam eleifend mi in nulla posuere sollicitudin aliquam ultrices sagittis orci, a scelerisque purus semper eget duis at tellus at urna condimentum mattis pellentesque id nibh tortor, id aliquet lectus proin nibh nisl, condimentum id venenatis a, condimentum vitae sapien pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas sed tempus, urna et pharetra pharetra, massa massa ultricies mi, quis hendrerit dolor magna eget est lorem ipsum dolor sit amet, consectetur adipiscing elit pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas integer eget aliquet nibh praesent tristique magna sit amet purus gravida quis blandit turpis cursus in hac habitasse platea dictumst quisque sagittis, purus sit amet volutpat consequat, mauris nunc congue nisi, vitae suscipit tellus mauris a diam maecenas sed enim ut sem viverra aliquet eget sit amet tellus cras adipiscing enim eu turpis egestas pretium aenean pharetra, magna ac placerat vestibulum, lectus mauris ultrices eros, in cursus turpis massa tincidunt dui ut ornare lectus sit amet est placerat in egestas erat imperdiet sed euismod nisi porta lorem mollis aliquam ut porttitor leo a diam sollicitudin tempor id eu nisl nunc mi ipsum, faucibus vitae aliquet nec, ullamcorper sit amet risus nullam eget felis eget nunc lobortis mattis aliquam faucibus purus in massa tempor nec feugiat nisl pretium fusce id velit ut tortor pretium viverra suspendisse potenti nullam ac tortor vitae purus faucibus ornare suspendisse sed nisi lacus, sed viverra tellus in hac habitasse platea dictumst vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt lobortis feugiat vivamus at augue eget arcu dictum varius duis at consectetur lorem donec massa sapien, faucibus et molestie ac, feugiat sed lectus vestibulum mattis ullamcorper velit sed ullamcorper morbi tincidunt ornare massa, eget egestas purus viverra accumsan in nisl nisi, scelerisque eu ultrices vitae, auctor eu augue ut lectus arcu, bibendum at varius vel, pharetra vel turpis nunc eget lorem dolor, sed viverra ipsum nunc aliquet bibendum enim, facilisis gravida neque convallis a cras semper auctor neque, vitae tempus quam pellentesque nec nam aliquam sem et tortor consequat id porta nibh venenatis cras sed felis eget velit aliquet sagittis id consectetur purus ut faucibus pulvinar elementum integer enim neque, volutpat ac tincidunt vitae, semper quis lectus nulla at volutpat diam ut venenatis tellus in metus vulputate eu scelerisque felis imperdiet proin fermentum leo vel orci porta non pulvinar neque laoreet suspendisse interdum consectetur libero, id faucibus nisl tincidunt eget nullam non nisi est, sit amet facilisis magna etiam tempor, orci eu lobortis elementum, nibh tellus molestie nunc, non blandit massa enim nec dui nunc mattis enim ut tellus elementum sagittis vitae et leo duis ut diam quam nulla porttitor massa id neque aliquam vestibulum morbi blandit cursus risus, at ultrices mi tempus imperdiet nulla malesuada pellentesque elit eget gravida cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus mauris vitae ultricies leo integer malesuada nunc vel risus commodo viverra maecenas accumsan, lacus vel facilisis volutpat, est velit egestas dui, id ornare arcu odio ut sem nulla pharetra diam sit amet nisl suscipit adipiscing bibendum est ultricies integer quis auctor elit sed vulputate mi sit amet mauris commodo quis imperdiet massa tincidunt nunc pulvinar sapien et ligula ullamcorper malesuada proin libero nunc, consequat interdum varius sit amet, mattis vulputate enim nulla aliquet porttitor lacus, luctus accumsan tortor posuere ac ut consequat semper viverra nam libero justo, laoreet sit amet cursus sit amet, dictum sit amet justo donec enim diam, vulputate ut pharetra sit amet, aliquam id diam maecenas ultricies mi eget mauris pharetra et ultrices neque ornare aenean euismod elementum nisi, quis eleifend quam adipiscing vitae proin sagittis, nisl rhoncus mattis rhoncus, urna neque viverra justo, nec ultrices dui sapien eget mi proin sed libero enim, sed faucibus turpis in eu mi bibendum neque egestas congue quisque egestas diam in arcu cursus euismod quis viverra nibh cras pulvinar mattis nunc, sed blandit libero volutpat sed cras ornare arcu dui vivamus arcu felis, bibendum ut tristique et, egestas quis ipsum suspendisse ultrices gravida dictum fusce ut placerat orci nulla pellentesque dignissim enim, sit amet venenatis urna cursus eget nunc scelerisque viverra mauris, in aliquam sem fringilla ut morbi tincidunt augue interdum velit euismod in pellentesque massa placerat duis ultricies lacus sed turpis tincidunt id aliquet risus feugiat in ante metus, dictum at tempor commodo, ullamcorper a lacus vestibulum sed arcu non odio euismod lacinia at quis risus sed vulputate odio ut enim blandit volutpat maecenas volutpat blandit aliquam etiam erat velit, scelerisque in dictum non, consectetur a erat nam at lectus urna duis convallis convallis tellus, id interdum velit laoreet id donec ultrices tincidunt arcu, non sodales neque sodales ut etiam sit amet nisl purus, in mollis nunc sed id semper risus in hendrerit gravida rutrum quisque non tellus orci, ac auctor augue mauris augue neque, gravida in fermentum et, sollicitudin ac orci phasellus egestas tellus rutrum tellus pellentesque eu tincidunt tortor aliquam nulla facilisi cras fermentum, odio eu feugiat pretium, nibh ipsum consequat nisl, vel pretium lectus quam id leo in vitae turpis massa sed elementum tempus egestas sed sed risus pretium quam vulputate dignissim suspendisse in est ante in nibh mauris, cursus mattis molestie a, iaculis at erat pellentesque adipiscing commodo elit, at imperdiet dui accumsan sit amet nulla facilisi morbi tempus iaculis urna, id volutpat lacus laoreet non curabitur gravida arcu ac tortor dignissim convallis aenean et tortor at risus viverra adipiscing at in tellus integer feugiat scelerisque varius morbi enim nunc, faucibus a pellentesque sit amet, porttitor eget dolor morbi non arcu risus, quis varius quam quisque id diam vel quam elementum pulvinar etiam non quam lacus suspendisse faucibus interdum posuere lorem ipsum dolor sit amet, consectetur adipiscing elit duis tristique sollicitudin nibh sit amet commodo nulla facilisi nullam vehicula ipsum a arcu cursus vitae congue mauris rhoncus aenean vel elit scelerisque mauris pellentesque pulvinar pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas maecenas pharetra convallis posuere morbi leo urna, molestie at elementum eu, facilisis sed odio morbi quis commodo odio aenean sed adipiscing diam donec adipiscing tristique risus nec feugiat in fermentum posuere urna nec tincidunt praesent semper feugiat nibh sed pulvinar proin gravida hendrerit lectus a molestie";
6
+ const loremWords = wordsString.split(" ");
7
+ const lorem = (length, wordOffset = 0) => {
8
+ const count = parseInt(length.substring(0, length.length - 1));
9
+ const countType = length.charAt(length.length - 1);
10
+ if (!isNaN(count) && (countType === "w" || countType === "c")) {
11
+ if (!lorem.spaceIndices.length) {
12
+ let startIndex = -1;
13
+ do {
14
+ const index = wordsString.indexOf(" ", startIndex + 1);
15
+ lorem.spaceIndices.push(index);
16
+ startIndex = index;
17
+ } while (startIndex !== -1);
18
+ }
19
+ if (countType === "c") {
20
+ return wordsString.substring(0, count);
21
+ } else {
22
+ let sentence = "";
23
+ const startSpaceIndex = lorem.spaceIndices[wordOffset % lorem.spaceIndices.length - 1];
24
+ const endSpaceIndex = lorem.spaceIndices[(wordOffset % lorem.spaceIndices.length + count) % lorem.spaceIndices.length - 1];
25
+ if (count + wordOffset % lorem.spaceIndices.length > lorem.spaceIndices.length) {
26
+ sentence += wordsString.substring(startSpaceIndex + 1) + " ";
27
+ const wraparoundCounts = Math.floor(count / lorem.spaceIndices.length) - 1;
28
+ for (let i = 0; i < wraparoundCounts; i++) {
29
+ sentence += wordsString + " ";
30
+ }
31
+ sentence += wordsString.substring(0, endSpaceIndex);
32
+ } else {
33
+ sentence = wordsString.substring(startSpaceIndex + 1, endSpaceIndex);
34
+ }
35
+ if (sentence.charAt(sentence.length - 1) === ",") {
36
+ return sentence.substring(0, sentence.length - 1);
37
+ } else {
38
+ return sentence.substring(0, sentence.length);
39
+ }
40
+ }
41
+ }
42
+ throw new Error("Length must be of the form `${number}w` or `${number}c`");
43
+ };
44
+ lorem.spaceIndices = [];
7
45
 
8
- const createFaker = (seed = FAKER_SEED) => {
9
- let normalizedSeed;
10
- if (typeof seed === "string") {
11
- normalizedSeed = seed.split("").map((char) => char.charCodeAt(0));
12
- } else {
13
- normalizedSeed = seed;
46
+ const createFaker = (seed) => {
47
+ return new Faker(seed);
48
+ };
49
+ const DAY_MS = 1e3 * 60 * 60 * 24;
50
+ const YEAR_MS = DAY_MS * 365;
51
+ const YEAR_2022_MS = 52 * (YEAR_MS + DAY_MS / 4);
52
+ class Faker {
53
+ constructor(seed) {
54
+ this.seed = seed;
55
+ this.rand = new Rand(seed.toString());
14
56
  }
15
- const cacheKey = JSON.stringify(normalizedSeed);
16
- if (createFaker.cache[cacheKey]) {
17
- return createFaker.cache[cacheKey];
57
+ boolean() {
58
+ return this.random() >= 0.5;
18
59
  }
19
- const fakerInstance = new Faker();
20
- fakerInstance.locales["en"] = fakerLocaleEN;
21
- fakerInstance.seed(normalizedSeed);
22
- createFaker.cache[cacheKey] = fakerInstance;
23
- return fakerInstance;
24
- };
25
- createFaker.cache = {};
60
+ random() {
61
+ return this.rand.next();
62
+ }
63
+ randomElement(elements) {
64
+ return elements[this.range(0, elements.length)];
65
+ }
66
+ randomElements(elements) {
67
+ const alwaysInclude = this.randomElement(elements);
68
+ return elements.filter((element) => element === alwaysInclude || this.boolean());
69
+ }
70
+ range(min, max) {
71
+ return Math.floor(this.rangeFloat(Math.ceil(min), Math.floor(max)));
72
+ }
73
+ rangeFloat(min, max) {
74
+ return this.random() * (max - min) + min;
75
+ }
76
+ words(length, wordOffset = this.range(0, loremWords.length)) {
77
+ return lorem(`${length}w`, wordOffset);
78
+ }
79
+ word() {
80
+ return this.randomElement(loremWords);
81
+ }
82
+ lorem(length, wordOffset = this.range(0, loremWords.length)) {
83
+ return lorem(length, wordOffset);
84
+ }
85
+ url() {
86
+ return `https://${this.word()}.example`;
87
+ }
88
+ hexColor() {
89
+ return `#${this.hash(6)}`;
90
+ }
91
+ hash(length) {
92
+ let hash = "";
93
+ for (let i = 0; i < length; i++) {
94
+ const chars = this.boolean() ? "abcdef" : "0123456789";
95
+ hash += chars[this.range(0, chars.length)];
96
+ }
97
+ return hash;
98
+ }
99
+ date() {
100
+ return new Date(YEAR_2022_MS + this.range(-YEAR_MS * 3, YEAR_MS * 3));
101
+ }
102
+ dateAfter(date) {
103
+ const timestamp = date.getTime();
104
+ return new Date(this.range(timestamp, timestamp + YEAR_MS * 3));
105
+ }
106
+ dateBefore(date) {
107
+ const timestamp = date.getTime();
108
+ return new Date(this.range(timestamp - YEAR_MS * 3, timestamp));
109
+ }
110
+ dateBetween(min, max) {
111
+ return new Date(this.range(min.getTime(), max.getTime()));
112
+ }
113
+ }
26
114
 
27
115
  const generateTags = (config) => {
28
116
  var _a, _b;
29
- const faker = createFaker(config.seed);
30
- return Array(faker.datatype.number({
31
- min: (_a = config.min) != null ? _a : 0,
32
- max: (_b = config.max) != null ? _b : 2
33
- })).fill(void 0).map(() => changeCase.capitalCase(faker.lorem.words(faker.datatype.number({ min: 1, max: 3 }))));
117
+ const faker = config.faker || createFaker(config.seed);
118
+ return Array.from({ length: faker.range((_a = config.min) != null ? _a : 0, (_b = config.max) != null ? _b : 2) }, () => changeCase.capitalCase(faker.words(faker.range(1, 3))));
34
119
  };
35
120
 
36
- const boolean$1 = (config = {}) => {
37
- const faker = createFaker(config.seed);
38
- return faker.datatype.boolean();
121
+ const boolean$1 = (config) => {
122
+ const faker = config.faker || createFaker(config.seed);
123
+ return faker.boolean();
39
124
  };
40
125
 
41
126
  const valueForModel = (config) => {
127
+ var _a;
128
+ const faker = config.faker || createFaker(config.seed);
42
129
  const model = config.model;
43
130
  switch (model.type) {
44
131
  case prismicT.CustomTypeModelFieldType.Boolean: {
45
132
  return boolean$1({
46
- seed: config.seed,
133
+ faker,
47
134
  model,
48
135
  ...config.config
49
136
  });
50
137
  }
51
138
  case prismicT.CustomTypeModelFieldType.Color: {
52
139
  return color({
53
- seed: config.seed,
140
+ faker,
54
141
  model,
55
142
  ...config.config
56
143
  });
57
144
  }
58
145
  case prismicT.CustomTypeModelFieldType.Link: {
59
- switch (model.config.select) {
146
+ switch ((_a = model.config) == null ? void 0 : _a.select) {
60
147
  case prismicT.CustomTypeModelLinkSelectType.Document: {
61
148
  return contentRelationship({
62
- seed: config.seed,
149
+ faker,
63
150
  model,
64
151
  ...config.config
65
152
  });
66
153
  }
67
154
  case prismicT.CustomTypeModelLinkSelectType.Media: {
68
155
  return linkToMedia({
69
- seed: config.seed,
156
+ faker,
70
157
  model,
71
158
  ...config.config
72
159
  });
73
160
  }
74
161
  default: {
75
162
  return link({
76
- seed: config.seed,
163
+ faker,
77
164
  model,
78
165
  ...config.config
79
166
  });
@@ -82,70 +169,70 @@ const valueForModel = (config) => {
82
169
  }
83
170
  case prismicT.CustomTypeModelFieldType.Date: {
84
171
  return date({
85
- seed: config.seed,
172
+ faker,
86
173
  model,
87
174
  ...config.config
88
175
  });
89
176
  }
90
177
  case prismicT.CustomTypeModelFieldType.Embed: {
91
178
  return embed$1({
92
- seed: config.seed,
179
+ faker,
93
180
  model,
94
181
  ...config.config
95
182
  });
96
183
  }
97
184
  case prismicT.CustomTypeModelFieldType.GeoPoint: {
98
185
  return geoPoint({
99
- seed: config.seed,
186
+ faker,
100
187
  model,
101
188
  ...config.config
102
189
  });
103
190
  }
104
191
  case prismicT.CustomTypeModelFieldType.Image: {
105
192
  return image$1({
106
- seed: config.seed,
193
+ faker,
107
194
  model,
108
195
  ...config.config
109
196
  });
110
197
  }
111
198
  case prismicT.CustomTypeModelFieldType.Text: {
112
199
  return keyText({
113
- seed: config.seed,
200
+ faker,
114
201
  model,
115
202
  ...config.config
116
203
  });
117
204
  }
118
205
  case prismicT.CustomTypeModelFieldType.Number: {
119
206
  return number({
120
- seed: config.seed,
207
+ faker,
121
208
  model,
122
209
  ...config.config
123
210
  });
124
211
  }
125
212
  case prismicT.CustomTypeModelFieldType.Select: {
126
213
  return select({
127
- seed: config.seed,
214
+ faker,
128
215
  model,
129
216
  ...config.config
130
217
  });
131
218
  }
132
219
  case prismicT.CustomTypeModelFieldType.Timestamp: {
133
220
  return timestamp({
134
- seed: config.seed,
221
+ faker,
135
222
  model,
136
223
  ...config.config
137
224
  });
138
225
  }
139
226
  case prismicT.CustomTypeModelFieldType.StructuredText: {
140
- if ("single" in model.config && model.config.single.split(",").every((element) => /heading[1-6]/.test(element.trim()))) {
227
+ if (model.config && "single" in model.config && model.config.single && model.config.single.split(",").every((element) => /heading[1-6]/.test(element.trim()))) {
141
228
  return title({
142
- seed: config.seed,
229
+ faker,
143
230
  model,
144
231
  ...config.config
145
232
  });
146
233
  } else {
147
234
  return richText({
148
- seed: config.seed,
235
+ faker,
149
236
  model,
150
237
  ...config.config
151
238
  });
@@ -153,36 +240,41 @@ const valueForModel = (config) => {
153
240
  }
154
241
  case prismicT.CustomTypeModelFieldType.IntegrationFields: {
155
242
  return integrationFields({
156
- seed: config.seed,
243
+ faker,
157
244
  model,
158
245
  ...config.config
159
246
  });
160
247
  }
161
248
  case prismicT.CustomTypeModelFieldType.UID: {
162
249
  return uid({
163
- seed: config.seed,
250
+ faker,
164
251
  model,
165
252
  ...config.config
166
253
  });
167
254
  }
168
255
  case prismicT.CustomTypeModelFieldType.Group: {
169
256
  return group({
170
- seed: config.seed,
257
+ faker,
171
258
  model,
172
259
  ...config.config
173
260
  });
174
261
  }
262
+ case prismicT.CustomTypeModelFieldType.LegacySlices:
175
263
  case prismicT.CustomTypeModelFieldType.Slices: {
176
264
  return sliceZone({
177
- seed: config.seed,
265
+ faker,
178
266
  model,
179
267
  ...config.config
180
268
  });
181
269
  }
270
+ default: {
271
+ throw new Error(`The "${model.type}" field type is not supported in @prismicio/mock.`);
272
+ }
182
273
  }
183
274
  };
184
275
 
185
276
  const getValueConfigType = (model) => {
277
+ var _a;
186
278
  switch (model.type) {
187
279
  case prismicT.CustomTypeModelFieldType.Boolean:
188
280
  return "boolean";
@@ -199,7 +291,7 @@ const getValueConfigType = (model) => {
199
291
  case prismicT.CustomTypeModelFieldType.Image:
200
292
  return "image";
201
293
  case prismicT.CustomTypeModelFieldType.Link: {
202
- switch (model.config.select) {
294
+ switch ((_a = model.config) == null ? void 0 : _a.select) {
203
295
  case prismicT.CustomTypeModelLinkSelectType.Document:
204
296
  return "contentRelationship";
205
297
  case prismicT.CustomTypeModelLinkSelectType.Media:
@@ -213,7 +305,7 @@ const getValueConfigType = (model) => {
213
305
  case prismicT.CustomTypeModelFieldType.Select:
214
306
  return "select";
215
307
  case prismicT.CustomTypeModelFieldType.StructuredText: {
216
- if ("single" in model.config && model.config.single.split(",").every((element) => /heading{1,6}/.test(element.trim()))) {
308
+ if (model.config && "single" in model.config && model.config.single && model.config.single.split(",").every((element) => /heading{1,6}/.test(element.trim()))) {
217
309
  return "title";
218
310
  } else {
219
311
  return "richText";
@@ -229,17 +321,21 @@ const getValueConfigType = (model) => {
229
321
  return "integrationFields";
230
322
  case prismicT.CustomTypeModelFieldType.Slices:
231
323
  return "sliceZone";
324
+ default: {
325
+ throw new Error(`The "${model.type}" field type is not supported in @prismicio/mock.`);
326
+ }
232
327
  }
233
328
  };
234
329
  const valueForModelMap = (config) => {
235
330
  var _a;
331
+ const faker = config.faker || createFaker(config.seed);
236
332
  const result = {};
237
333
  for (const fieldId in config.map) {
238
334
  const fieldModel = config.map[fieldId];
239
335
  const fieldConfigType = getValueConfigType(fieldModel);
240
336
  const fieldConfig = (_a = config.configs) == null ? void 0 : _a[fieldConfigType];
241
337
  result[fieldId] = valueForModel({
242
- seed: config.seed,
338
+ faker,
243
339
  model: fieldModel,
244
340
  config: fieldConfig
245
341
  });
@@ -247,34 +343,34 @@ const valueForModelMap = (config) => {
247
343
  return result;
248
344
  };
249
345
 
250
- const boolean = (config = {}) => {
251
- const faker = createFaker(config.seed);
346
+ function boolean(config) {
347
+ const faker = config.faker || createFaker(config.seed);
252
348
  return {
253
349
  type: prismicT.CustomTypeModelFieldType.Boolean,
254
350
  config: {
255
- label: changeCase.capitalCase(faker.company.bsNoun())
351
+ label: changeCase.capitalCase(faker.word())
256
352
  }
257
353
  };
258
- };
354
+ }
259
355
 
260
- const color$1 = (config = {}) => {
261
- const faker = createFaker(config.seed);
356
+ const color$1 = (config) => {
357
+ const faker = config.faker || createFaker(config.seed);
262
358
  return {
263
359
  type: prismicT.CustomTypeModelFieldType.Color,
264
360
  config: {
265
- label: changeCase.capitalCase(faker.company.bsNoun()),
266
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
361
+ label: changeCase.capitalCase(faker.word()),
362
+ placeholder: changeCase.sentenceCase(faker.words(3))
267
363
  }
268
364
  };
269
365
  };
270
366
 
271
- const contentRelationship$1 = (config = {}) => {
272
- const faker = createFaker(config.seed);
367
+ const contentRelationship$1 = (config) => {
368
+ const faker = config.faker || createFaker(config.seed);
273
369
  return {
274
370
  type: prismicT.CustomTypeModelFieldType.Link,
275
371
  config: {
276
- label: changeCase.capitalCase(faker.company.bsNoun()),
277
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
372
+ label: changeCase.capitalCase(faker.word()),
373
+ placeholder: changeCase.sentenceCase(faker.words(3)),
278
374
  select: prismicT.CustomTypeModelLinkSelectType.Document,
279
375
  customtypes: config.customTypeIDs,
280
376
  tags: config.tags
@@ -282,10 +378,10 @@ const contentRelationship$1 = (config = {}) => {
282
378
  };
283
379
  };
284
380
 
285
- const customType$1 = (config = {}) => {
381
+ const customType$1 = (config) => {
286
382
  var _a, _b;
287
- const faker = createFaker(config.seed);
288
- let label = config.label || changeCase.capitalCase(faker.company.bsNoun());
383
+ const faker = config.faker || createFaker(config.seed);
384
+ let label = config.label || changeCase.capitalCase(faker.words(faker.range(1, 2)));
289
385
  let id = config.id || changeCase.snakeCase(label);
290
386
  if (config.id && !config.label) {
291
387
  label = changeCase.capitalCase(config.id);
@@ -301,139 +397,139 @@ const customType$1 = (config = {}) => {
301
397
  return {
302
398
  id,
303
399
  label,
304
- status: (_a = config.status) != null ? _a : faker.datatype.boolean(),
305
- repeatable: (_b = config.repeatable) != null ? _b : faker.datatype.boolean(),
400
+ status: (_a = config.status) != null ? _a : faker.boolean(),
401
+ repeatable: (_b = config.repeatable) != null ? _b : faker.boolean(),
306
402
  json
307
403
  };
308
404
  };
309
405
 
310
- const date$1 = (config = {}) => {
311
- const faker = createFaker(config.seed);
406
+ const date$1 = (config) => {
407
+ const faker = config.faker || createFaker(config.seed);
312
408
  return {
313
409
  type: prismicT.CustomTypeModelFieldType.Date,
314
410
  config: {
315
- label: changeCase.capitalCase(faker.company.bsNoun()),
316
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
411
+ label: changeCase.capitalCase(faker.word()),
412
+ placeholder: changeCase.sentenceCase(faker.words(3))
317
413
  }
318
414
  };
319
415
  };
320
416
 
321
- const embed$2 = (config = {}) => {
322
- const faker = createFaker(config.seed);
417
+ const embed$2 = (config) => {
418
+ const faker = config.faker || createFaker(config.seed);
323
419
  return {
324
420
  type: prismicT.CustomTypeModelFieldType.Embed,
325
421
  config: {
326
- label: changeCase.capitalCase(faker.company.bsNoun()),
327
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
422
+ label: changeCase.capitalCase(faker.word()),
423
+ placeholder: changeCase.sentenceCase(faker.words(3))
328
424
  }
329
425
  };
330
426
  };
331
427
 
332
- const geoPoint$1 = (config = {}) => {
333
- const faker = createFaker(config.seed);
428
+ const geoPoint$1 = (config) => {
429
+ const faker = config.faker || createFaker(config.seed);
334
430
  return {
335
431
  type: prismicT.CustomTypeModelFieldType.GeoPoint,
336
432
  config: {
337
- label: changeCase.capitalCase(faker.company.bsNoun())
433
+ label: changeCase.capitalCase(faker.word())
338
434
  }
339
435
  };
340
436
  };
341
437
 
342
- const group$1 = (config = {}) => {
343
- const faker = createFaker(config.seed);
438
+ function group$1(config) {
439
+ const faker = config.faker || createFaker(config.seed);
344
440
  return {
345
441
  type: prismicT.CustomTypeModelFieldType.Group,
346
442
  config: {
347
- label: changeCase.capitalCase(faker.company.bsNoun()),
443
+ label: changeCase.capitalCase(faker.word()),
348
444
  fields: config.fields || {}
349
445
  }
350
446
  };
351
- };
447
+ }
352
448
 
353
- const image$2 = (config = {}) => {
354
- const faker = createFaker(config.seed);
449
+ const image$2 = (config) => {
450
+ const faker = config.faker || createFaker(config.seed);
355
451
  const thumbnails = (config.thumbnailNames || []).map((name) => {
356
452
  return {
357
453
  name,
358
- width: faker.datatype.number({ min: 500, max: 2e3 }),
359
- height: faker.datatype.number({ min: 500, max: 2e3 })
454
+ width: faker.range(500, 2e3),
455
+ height: faker.range(500, 2e3)
360
456
  };
361
457
  });
362
458
  return {
363
459
  type: prismicT.CustomTypeModelFieldType.Image,
364
460
  config: {
365
- label: changeCase.capitalCase(faker.company.bsNoun()),
461
+ label: changeCase.capitalCase(faker.word()),
366
462
  constraint: {
367
- width: config.withConstraint ? faker.datatype.number({ min: 500, max: 2e3 }) : null,
368
- height: config.withConstraint ? faker.datatype.number({ min: 500, max: 2e3 }) : null
463
+ width: config.withConstraint ? faker.range(500, 2e3) : null,
464
+ height: config.withConstraint ? faker.range(500, 2e3) : null
369
465
  },
370
466
  thumbnails
371
467
  }
372
468
  };
373
469
  };
374
470
 
375
- const integrationFields$1 = (config = {}) => {
376
- const faker = createFaker(config.seed);
471
+ const integrationFields$1 = (config) => {
472
+ const faker = config.faker || createFaker(config.seed);
377
473
  return {
378
474
  type: prismicT.CustomTypeModelFieldType.IntegrationFields,
379
475
  config: {
380
- label: changeCase.capitalCase(faker.company.bsNoun()),
381
- catalog: config.catalog || changeCase.snakeCase(faker.lorem.words(4))
476
+ label: changeCase.capitalCase(faker.word()),
477
+ catalog: config.catalog || changeCase.snakeCase(faker.words(2))
382
478
  }
383
479
  };
384
480
  };
385
481
 
386
- const keyText$1 = (config = {}) => {
387
- const faker = createFaker(config.seed);
482
+ const keyText$1 = (config) => {
483
+ const faker = config.faker || createFaker(config.seed);
388
484
  return {
389
485
  type: prismicT.CustomTypeModelFieldType.Text,
390
486
  config: {
391
- label: changeCase.capitalCase(faker.company.bsNoun()),
392
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
487
+ label: changeCase.capitalCase(faker.word()),
488
+ placeholder: changeCase.sentenceCase(faker.words(3))
393
489
  }
394
490
  };
395
491
  };
396
492
 
397
- const link$1 = (config = {}) => {
398
- const faker = createFaker(config.seed);
493
+ const link$1 = (config) => {
494
+ const faker = config.faker || createFaker(config.seed);
399
495
  return {
400
496
  type: prismicT.CustomTypeModelFieldType.Link,
401
497
  config: {
402
- label: changeCase.capitalCase(faker.company.bsNoun()),
403
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
498
+ label: changeCase.capitalCase(faker.word()),
499
+ placeholder: changeCase.sentenceCase(faker.words(3)),
404
500
  select: null,
405
- allowTargetBlank: ("allowTargetBlank" in config ? config.allowTargetBlank : faker.datatype.boolean()) || void 0
501
+ allowTargetBlank: ("allowTargetBlank" in config ? config.allowTargetBlank : faker.boolean()) || void 0
406
502
  }
407
503
  };
408
504
  };
409
505
 
410
- const linkToMedia$1 = (config = {}) => {
411
- const faker = createFaker(config.seed);
506
+ const linkToMedia$1 = (config) => {
507
+ const faker = config.faker || createFaker(config.seed);
412
508
  return {
413
509
  type: prismicT.CustomTypeModelFieldType.Link,
414
510
  config: {
415
- label: changeCase.capitalCase(faker.company.bsNoun()),
416
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
511
+ label: changeCase.capitalCase(faker.word()),
512
+ placeholder: changeCase.sentenceCase(faker.words(3)),
417
513
  select: prismicT.CustomTypeModelLinkSelectType.Media
418
514
  }
419
515
  };
420
516
  };
421
517
 
422
- const number$1 = (config = {}) => {
423
- const faker = createFaker(config.seed);
518
+ const number$1 = (config) => {
519
+ const faker = config.faker || createFaker(config.seed);
424
520
  return {
425
521
  type: prismicT.CustomTypeModelFieldType.Number,
426
522
  config: {
427
- label: changeCase.capitalCase(faker.company.bsNoun()),
428
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
523
+ label: changeCase.capitalCase(faker.word()),
524
+ placeholder: changeCase.sentenceCase(faker.words(3))
429
525
  }
430
526
  };
431
527
  };
432
528
 
433
- const richText$1 = (config = {}) => {
529
+ const richText$1 = (config) => {
434
530
  var _a;
435
- const faker = createFaker(config.seed);
436
- const blockTypes = faker.random.arrayElements([
531
+ const faker = config.faker || createFaker(config.seed);
532
+ const blockTypes = faker.randomElements([
437
533
  prismicT.RichTextNodeType.heading1,
438
534
  prismicT.RichTextNodeType.heading2,
439
535
  prismicT.RichTextNodeType.heading3,
@@ -450,34 +546,34 @@ const richText$1 = (config = {}) => {
450
546
  prismicT.RichTextNodeType.embed,
451
547
  prismicT.RichTextNodeType.hyperlink
452
548
  ]).join(",");
453
- const blockTypeConfig = ((_a = config.withMultipleBlocks) != null ? _a : faker.datatype.boolean()) ? { multi: blockTypes } : { single: blockTypes };
549
+ const blockTypeConfig = ((_a = config.withMultipleBlocks) != null ? _a : faker.boolean()) ? { multi: blockTypes } : { single: blockTypes };
454
550
  return {
455
551
  type: prismicT.CustomTypeModelFieldType.StructuredText,
456
552
  config: {
457
- label: changeCase.capitalCase(faker.company.bsNoun()),
458
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
459
- allowTargetBlank: faker.datatype.boolean() ? true : void 0,
553
+ label: changeCase.capitalCase(faker.word()),
554
+ placeholder: changeCase.sentenceCase(faker.words(3)),
555
+ allowTargetBlank: faker.boolean() ? true : void 0,
460
556
  ...blockTypeConfig
461
557
  }
462
558
  };
463
559
  };
464
560
 
465
- const select$1 = (config = {}) => {
466
- const faker = createFaker(config.seed);
561
+ const select$1 = (config) => {
562
+ const faker = config.faker || createFaker(config.seed);
467
563
  return {
468
564
  type: prismicT.CustomTypeModelFieldType.Select,
469
565
  config: {
470
- label: changeCase.capitalCase(faker.company.bsNoun()),
471
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
566
+ label: changeCase.capitalCase(faker.word()),
567
+ placeholder: changeCase.sentenceCase(faker.words(3)),
472
568
  options: config.options || [],
473
569
  default_value: config.defaultValue || void 0
474
570
  }
475
571
  };
476
572
  };
477
573
 
478
- const sharedSlice$1 = (config = {}) => {
479
- const faker = createFaker(config.seed);
480
- let name = config.name || changeCase.capitalCase(faker.company.bsNoun());
574
+ const sharedSlice$1 = (config) => {
575
+ const faker = config.faker || createFaker(config.seed);
576
+ let name = config.name || changeCase.capitalCase(faker.words(faker.range(1, 2)));
481
577
  let id = config.id || changeCase.snakeCase(name);
482
578
  if (config.id && !config.name) {
483
579
  name = changeCase.pascalCase(config.id);
@@ -488,7 +584,7 @@ const sharedSlice$1 = (config = {}) => {
488
584
  type: prismicT.CustomTypeModelSliceType.SharedSlice,
489
585
  id,
490
586
  name,
491
- description: faker.lorem.sentence(),
587
+ description: changeCase.sentenceCase(faker.words(faker.range(5, 10))),
492
588
  variations: config.variations || []
493
589
  };
494
590
  };
@@ -499,40 +595,129 @@ const sharedSliceChoice = () => {
499
595
  };
500
596
  };
501
597
 
502
- const sharedSliceVariation$1 = (config = {}) => {
503
- const faker = createFaker(config.seed);
504
- let name = config.name || changeCase.capitalCase(faker.company.bsNoun());
598
+ const dataSet$1 = [
599
+ {
600
+ url: "https://images.unsplash.com/photo-1604537529428-15bcbeecfe4d",
601
+ width: 4240,
602
+ height: 2832
603
+ },
604
+ {
605
+ url: "https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05",
606
+ width: 7372,
607
+ height: 4392
608
+ },
609
+ {
610
+ url: "https://images.unsplash.com/photo-1441974231531-c6227db76b6e",
611
+ width: 2560,
612
+ height: 1705
613
+ },
614
+ {
615
+ url: "https://images.unsplash.com/photo-1418065460487-3e41a6c84dc5",
616
+ width: 2200,
617
+ height: 1467
618
+ },
619
+ {
620
+ url: "https://images.unsplash.com/photo-1426604966848-d7adac402bff",
621
+ width: 5616,
622
+ height: 3744
623
+ },
624
+ {
625
+ url: "https://images.unsplash.com/photo-1604537466608-109fa2f16c3b",
626
+ width: 4240,
627
+ height: 2832
628
+ },
629
+ {
630
+ url: "https://images.unsplash.com/photo-1497436072909-60f360e1d4b1",
631
+ width: 2560,
632
+ height: 1440
633
+ },
634
+ {
635
+ url: "https://images.unsplash.com/reserve/HgZuGu3gSD6db21T3lxm_San%20Zenone.jpg",
636
+ width: 6373,
637
+ height: 4253
638
+ },
639
+ {
640
+ url: "https://images.unsplash.com/photo-1504198266287-1659872e6590",
641
+ width: 4272,
642
+ height: 2848
643
+ },
644
+ {
645
+ url: "https://images.unsplash.com/photo-1470770903676-69b98201ea1c",
646
+ width: 4554,
647
+ height: 3036
648
+ },
649
+ {
650
+ url: "https://images.unsplash.com/photo-1587502537745-84b86da1204f",
651
+ width: 6550,
652
+ height: 4367
653
+ },
654
+ {
655
+ url: "https://images.unsplash.com/photo-1431794062232-2a99a5431c6c",
656
+ width: 6e3,
657
+ height: 4e3
658
+ },
659
+ {
660
+ url: "https://images.unsplash.com/photo-1446329813274-7c9036bd9a1f",
661
+ width: 6e3,
662
+ height: 4e3
663
+ },
664
+ {
665
+ url: "https://images.unsplash.com/photo-1504567961542-e24d9439a724",
666
+ width: 4608,
667
+ height: 3456
668
+ },
669
+ {
670
+ url: "https://images.unsplash.com/photo-1444464666168-49d633b86797",
671
+ width: 4844,
672
+ height: 3234
673
+ },
674
+ {
675
+ url: "https://images.unsplash.com/photo-1553531384-397c80973a0b",
676
+ width: 4335,
677
+ height: 6502
678
+ }
679
+ ];
680
+ const getMockImageData = (config) => {
681
+ const faker = config.faker || createFaker(config.seed);
682
+ return faker.randomElement(dataSet$1);
683
+ };
684
+
685
+ const sharedSliceVariation$1 = (config) => {
686
+ const faker = config.faker || createFaker(config.seed);
687
+ let name = config.name || changeCase.capitalCase(faker.words(faker.range(1, 2)));
505
688
  let id = config.id || changeCase.snakeCase(name);
506
689
  if (config.id && !config.name) {
507
690
  name = changeCase.pascalCase(config.id);
508
691
  } else if (config.name && !config.name) {
509
692
  id = changeCase.snakeCase(config.name);
510
693
  }
694
+ const imageData = getMockImageData({ faker });
511
695
  return {
512
696
  id,
513
697
  name,
514
- description: faker.lorem.sentence(),
515
- docURL: faker.internet.url(),
516
- version: faker.git.shortSha(),
698
+ description: changeCase.sentenceCase(faker.words(faker.range(5, 10))),
699
+ docURL: faker.url(),
700
+ version: faker.hash(7),
517
701
  primary: config.primaryFields || {},
518
- items: config.itemsFields || {}
702
+ items: config.itemsFields || {},
703
+ imageUrl: imageData.url
519
704
  };
520
705
  };
521
706
 
522
- const slice$1 = (config = {}) => {
523
- const faker = createFaker(config.seed);
707
+ const slice$1 = (config) => {
708
+ const faker = config.faker || createFaker(config.seed);
524
709
  return {
525
710
  type: prismicT.CustomTypeModelSliceType.Slice,
526
- icon: changeCase.snakeCase(faker.company.bsNoun()),
527
- display: faker.datatype.boolean() ? prismicT.CustomTypeModelSliceDisplay.Grid : prismicT.CustomTypeModelSliceDisplay.List,
528
- fieldset: changeCase.capitalCase(faker.lorem.words()),
529
- description: faker.lorem.sentence(),
711
+ icon: changeCase.snakeCase(faker.word()),
712
+ display: faker.boolean() ? prismicT.CustomTypeModelSliceDisplay.Grid : prismicT.CustomTypeModelSliceDisplay.List,
713
+ fieldset: changeCase.capitalCase(faker.words(2)),
714
+ description: changeCase.sentenceCase(faker.words(faker.range(5, 10))),
530
715
  repeat: config.repeatFields || {},
531
716
  "non-repeat": config.nonRepeatFields || {}
532
717
  };
533
718
  };
534
719
 
535
- const sliceZone$1 = (config = {}) => {
720
+ const sliceZone$1 = (config) => {
536
721
  const labels = {};
537
722
  for (const choiceId in config.choices) {
538
723
  const choice = config.choices[choiceId];
@@ -550,20 +735,20 @@ const sliceZone$1 = (config = {}) => {
550
735
  };
551
736
  };
552
737
 
553
- const timestamp$1 = (config = {}) => {
554
- const faker = createFaker(config.seed);
738
+ const timestamp$1 = (config) => {
739
+ const faker = config.faker || createFaker(config.seed);
555
740
  return {
556
741
  type: prismicT.CustomTypeModelFieldType.Timestamp,
557
742
  config: {
558
- label: changeCase.capitalCase(faker.company.bsNoun()),
559
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
743
+ label: changeCase.capitalCase(faker.word()),
744
+ placeholder: changeCase.sentenceCase(faker.words(3))
560
745
  }
561
746
  };
562
747
  };
563
748
 
564
- const title$1 = (config = {}) => {
565
- const faker = createFaker(config.seed);
566
- const single = faker.random.arrayElements([
749
+ const title$1 = (config) => {
750
+ const faker = config.faker || createFaker(config.seed);
751
+ const single = faker.randomElements([
567
752
  "heading1",
568
753
  "heading2",
569
754
  "heading3",
@@ -574,28 +759,28 @@ const title$1 = (config = {}) => {
574
759
  return {
575
760
  type: prismicT.CustomTypeModelFieldType.StructuredText,
576
761
  config: {
577
- label: changeCase.capitalCase(faker.company.bsNoun()),
578
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
762
+ label: changeCase.capitalCase(faker.word()),
763
+ placeholder: changeCase.sentenceCase(faker.words(3)),
579
764
  single,
580
- allowTargetBlank: faker.datatype.boolean() ? true : void 0
765
+ allowTargetBlank: faker.boolean() || void 0
581
766
  }
582
767
  };
583
768
  };
584
769
 
585
- const uid$1 = (config = {}) => {
586
- const faker = createFaker(config.seed);
770
+ const uid$1 = (config) => {
771
+ const faker = config.faker || createFaker(config.seed);
587
772
  return {
588
773
  type: prismicT.CustomTypeModelFieldType.UID,
589
774
  config: {
590
- label: changeCase.capitalCase(faker.company.bsNoun()),
591
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
775
+ label: changeCase.capitalCase(faker.word()),
776
+ placeholder: changeCase.sentenceCase(faker.words(3))
592
777
  }
593
778
  };
594
779
  };
595
780
 
596
781
  const generateFieldId = (config) => {
597
- const faker = createFaker(config.seed);
598
- return changeCase.snakeCase(faker.lorem.words(faker.datatype.number({ min: 1, max: 3 })));
782
+ const faker = config.faker || createFaker(config.seed);
783
+ return changeCase.snakeCase(faker.words(faker.range(1, 3)));
599
784
  };
600
785
 
601
786
  const mockModelFns = {
@@ -616,18 +801,105 @@ const mockModelFns = {
616
801
  timestamp: timestamp$1,
617
802
  title: title$1
618
803
  };
619
- const buildMockGroupFieldMap = (config = {}) => {
620
- const faker = createFaker(config.seed);
804
+ const buildMockGroupFieldMap = (config) => {
805
+ const faker = config.faker || createFaker(config.seed);
621
806
  const fields = {};
622
- const fieldTypes = faker.random.arrayElements(Object.keys(mockModelFns));
807
+ const fieldTypes = faker.randomElements(Object.keys(mockModelFns));
623
808
  for (const fieldType of fieldTypes) {
624
- const fieldId = generateFieldId({ seed: config.seed });
809
+ const fieldId = generateFieldId({ faker });
625
810
  const mockModelFn = mockModelFns[fieldType];
626
- fields[fieldId] = mockModelFn({ seed: config.seed });
811
+ fields[fieldId] = mockModelFn({ faker });
627
812
  }
628
813
  return fields;
629
814
  };
630
815
 
816
+ const createModelMockFactory = (...args) => {
817
+ return new ModelMockFactory(...args);
818
+ };
819
+ class ModelMockFactory {
820
+ constructor(config) {
821
+ this.faker = "faker" in config ? config.faker : createFaker(config.seed);
822
+ }
823
+ get seed() {
824
+ return this.faker.seed;
825
+ }
826
+ buildMockGroupFieldMap(config) {
827
+ return buildMockGroupFieldMap({ ...config, faker: this.faker });
828
+ }
829
+ boolean(config) {
830
+ return boolean({ ...config, faker: this.faker });
831
+ }
832
+ color(config) {
833
+ return color$1({ ...config, faker: this.faker });
834
+ }
835
+ contentRelationship(config) {
836
+ return contentRelationship$1({ ...config, faker: this.faker });
837
+ }
838
+ customType(config) {
839
+ return customType$1({ ...config, faker: this.faker });
840
+ }
841
+ date(config) {
842
+ return date$1({ ...config, faker: this.faker });
843
+ }
844
+ embed(config) {
845
+ return embed$2({ ...config, faker: this.faker });
846
+ }
847
+ geoPoint(config) {
848
+ return geoPoint$1({ ...config, faker: this.faker });
849
+ }
850
+ group(config) {
851
+ return group$1({ ...config, faker: this.faker });
852
+ }
853
+ image(config) {
854
+ return image$2({ ...config, faker: this.faker });
855
+ }
856
+ integrationFields(config) {
857
+ return integrationFields$1({ ...config, faker: this.faker });
858
+ }
859
+ keyText(config) {
860
+ return keyText$1({ ...config, faker: this.faker });
861
+ }
862
+ link(config) {
863
+ return link$1({ ...config, faker: this.faker });
864
+ }
865
+ linkToMedia(config) {
866
+ return linkToMedia$1({ ...config, faker: this.faker });
867
+ }
868
+ number(config) {
869
+ return number$1({ ...config, faker: this.faker });
870
+ }
871
+ richText(config) {
872
+ return richText$1({ ...config, faker: this.faker });
873
+ }
874
+ select(config) {
875
+ return select$1({ ...config, faker: this.faker });
876
+ }
877
+ sharedSlice(config) {
878
+ return sharedSlice$1({ ...config, faker: this.faker });
879
+ }
880
+ sharedSliceChoice() {
881
+ return sharedSliceChoice();
882
+ }
883
+ sharedSliceVariation(config) {
884
+ return sharedSliceVariation$1({ ...config, faker: this.faker });
885
+ }
886
+ slice(config) {
887
+ return slice$1({ ...config, faker: this.faker });
888
+ }
889
+ sliceZone(config) {
890
+ return sliceZone$1({ ...config, faker: this.faker });
891
+ }
892
+ timestamp(config) {
893
+ return timestamp$1({ ...config, faker: this.faker });
894
+ }
895
+ title(config) {
896
+ return title$1({ ...config, faker: this.faker });
897
+ }
898
+ uid(config) {
899
+ return uid$1({ ...config, faker: this.faker });
900
+ }
901
+ }
902
+
631
903
  var index$2 = /*#__PURE__*/Object.freeze({
632
904
  __proto__: null,
633
905
  boolean: boolean,
@@ -654,14 +926,29 @@ var index$2 = /*#__PURE__*/Object.freeze({
654
926
  timestamp: timestamp$1,
655
927
  title: title$1,
656
928
  uid: uid$1,
657
- buildMockGroupFieldMap: buildMockGroupFieldMap
929
+ buildMockGroupFieldMap: buildMockGroupFieldMap,
930
+ createModelFactory: createModelMockFactory
658
931
  });
659
932
 
660
- const timestamp = (config = {}) => {
661
- const faker = createFaker(config.seed);
662
- const after = config.after || faker.date.past(20, new Date("2021-03-07")).toISOString().split("T")[0];
663
- const before = config.before || faker.date.future(20, new Date("2021-03-07")).toISOString().split("T")[0];
664
- return config.state === "empty" ? null : faker.date.between(after, before).toISOString();
933
+ const timestamp = (config) => {
934
+ const faker = config.faker || createFaker(config.seed);
935
+ if (config.state === "empty") {
936
+ return null;
937
+ } else {
938
+ let date;
939
+ const after = config.after ? new Date(config.after.toISOString().split("T")[0]) : void 0;
940
+ const before = config.before ? new Date(config.before.toISOString().split("T")[0]) : void 0;
941
+ if (after && before) {
942
+ date = faker.dateBetween(after, before);
943
+ } else if (after) {
944
+ date = faker.dateAfter(after);
945
+ } else if (before) {
946
+ date = faker.dateBefore(before);
947
+ } else {
948
+ date = faker.date();
949
+ }
950
+ return date.toISOString();
951
+ }
665
952
  };
666
953
 
667
954
  const buildAlternativeLanguage = (config) => {
@@ -673,10 +960,10 @@ const buildAlternativeLanguage = (config) => {
673
960
  };
674
961
  };
675
962
 
676
- const customType = (config = {}) => {
963
+ const customType = (config) => {
677
964
  var _a;
678
- const faker = createFaker(config.seed);
679
- const model = config.model || customType$1({ seed: config.seed });
965
+ const faker = config.faker || createFaker(config.seed);
966
+ const model = config.model || customType$1({ faker });
680
967
  const fieldModelsMap = Object.assign({}, ...Object.values(model.json));
681
968
  const dataFieldModelsMap = {};
682
969
  for (const key in fieldModelsMap) {
@@ -692,28 +979,28 @@ const customType = (config = {}) => {
692
979
  }));
693
980
  return {
694
981
  type: model.id,
695
- id: faker.git.shortSha(),
696
- uid: hasUID ? changeCase.snakeCase(faker.lorem.words(2)) : null,
697
- url: withURL ? faker.internet.url() : null,
698
- href: faker.internet.url(),
699
- lang: faker.lorem.word(),
700
- tags: generateTags({ seed: config.seed }),
982
+ id: faker.hash(7),
983
+ uid: hasUID ? changeCase.snakeCase(faker.words(faker.range(1, 3))) : null,
984
+ url: withURL ? faker.url() : null,
985
+ href: faker.url(),
986
+ lang: faker.word(),
987
+ tags: generateTags({ faker }),
701
988
  slugs: [],
702
989
  linked_documents: [],
703
990
  alternate_languages: alternateLanguages,
704
- first_publication_date: timestamp({ seed: config.seed }),
705
- last_publication_date: timestamp({ seed: config.seed }),
991
+ first_publication_date: timestamp({ faker }),
992
+ last_publication_date: timestamp({ faker }),
706
993
  data: valueForModelMap({
707
- seed: config.seed,
994
+ faker,
708
995
  map: dataFieldModelsMap,
709
996
  configs: config.configs
710
997
  })
711
998
  };
712
999
  };
713
1000
 
714
- const color = (config = {}) => {
715
- const faker = createFaker(config.seed);
716
- return config.state === "empty" ? null : faker.internet.color().toUpperCase();
1001
+ const color = (config) => {
1002
+ const faker = config.faker || createFaker(config.seed);
1003
+ return config.state === "empty" ? null : faker.hexColor().toUpperCase();
717
1004
  };
718
1005
 
719
1006
  const buildContentRelationshipField = (config) => {
@@ -731,35 +1018,37 @@ const buildContentRelationshipField = (config) => {
731
1018
  };
732
1019
 
733
1020
  const generateCustomTypeId = (config) => {
734
- const faker = createFaker(config.seed);
735
- return changeCase.snakeCase(faker.company.bsNoun());
1021
+ const faker = config.faker || createFaker(config.seed);
1022
+ return changeCase.snakeCase(faker.words(faker.range(1, 3)));
736
1023
  };
737
1024
 
738
- const contentRelationship = (config = {}) => {
739
- const faker = createFaker(config.seed);
1025
+ const contentRelationship = (config) => {
1026
+ var _a, _b;
1027
+ const faker = config.faker || createFaker(config.seed);
740
1028
  if (config.state === "empty") {
741
1029
  return {
742
1030
  link_type: prismicT.LinkType.Document
743
1031
  };
744
1032
  } else {
745
- const model = config.model || contentRelationship$1({ seed: config.seed });
1033
+ const model = config.model || contentRelationship$1({ faker });
746
1034
  const linkableDocuments = config.linkableDocuments ? config.linkableDocuments.filter((document2) => {
1035
+ var _a2, _b2;
747
1036
  let shouldKeep = true;
748
- if (model.config.customtypes) {
1037
+ if ((_a2 = model.config) == null ? void 0 : _a2.customtypes) {
749
1038
  shouldKeep = shouldKeep && model.config.customtypes.includes(document2.type);
750
1039
  }
751
- if (model.config.tags) {
1040
+ if ((_b2 = model.config) == null ? void 0 : _b2.tags) {
752
1041
  shouldKeep = shouldKeep && model.config.tags.some((tag) => document2.tags.includes(tag));
753
1042
  }
754
1043
  return shouldKeep;
755
1044
  }) : [
756
1045
  {
757
- ...customType({ seed: config.seed }),
758
- type: model.config.customtypes ? faker.random.arrayElement(model.config.customtypes) : generateCustomTypeId({ seed: config.seed }),
759
- tags: model.config.tags ? faker.random.arrayElements(model.config.tags) : generateTags({ seed: config.seed })
1046
+ ...customType({ faker }),
1047
+ type: ((_a = model.config) == null ? void 0 : _a.customtypes) ? faker.randomElement(model.config.customtypes) : generateCustomTypeId({ faker }),
1048
+ tags: ((_b = model.config) == null ? void 0 : _b.tags) ? faker.randomElements(model.config.tags) : generateTags({ faker })
760
1049
  }
761
1050
  ];
762
- const document = faker.random.arrayElement(linkableDocuments);
1051
+ const document = faker.randomElement(linkableDocuments);
763
1052
  if (!document) {
764
1053
  throw new Error("A linkable document could not be found.");
765
1054
  }
@@ -769,9 +1058,10 @@ const contentRelationship = (config = {}) => {
769
1058
  }
770
1059
  };
771
1060
 
772
- const date = (config = {}) => {
1061
+ const date = (config) => {
1062
+ const faker = config.faker || createFaker(config.seed);
773
1063
  return config.state === "empty" ? null : timestamp({
774
- seed: config.seed,
1064
+ faker,
775
1065
  after: config.after,
776
1066
  before: config.before,
777
1067
  state: "filled"
@@ -779,118 +1069,132 @@ const date = (config = {}) => {
779
1069
  };
780
1070
 
781
1071
  const buildEmbedField = (config) => {
782
- const faker = createFaker(config.seed);
1072
+ var _a;
1073
+ const faker = config.faker || createFaker(config.seed);
783
1074
  return {
784
- type: faker.datatype.boolean() ? prismicT.EmbedType.Link : prismicT.EmbedType.Rich,
785
- url: config.embedData.url,
786
- html: config.embedData.html,
787
- title: changeCase.capitalCase(faker.lorem.words(3)),
788
- version: faker.datatype.number({ min: 1, max: 3, precision: 10 }).toString(),
789
- cache_age: faker.datatype.number(),
790
- embed_url: config.embedData.embed_url,
791
- author_url: faker.internet.url(),
792
- author_name: faker.company.companyName(),
793
- provider_name: faker.company.companyName(),
794
- thumbnail_width: config.embedData.thumbnail_width,
795
- thumbnail_height: config.embedData.thumbnail_height,
796
- thumbnail_url: config.embedData.thumbnail_url,
797
- width: faker.datatype.number({ min: 200, max: 500 }),
798
- height: faker.datatype.number({ min: 200, max: 500 })
1075
+ embed_url: (_a = config.url) != null ? _a : faker.url(),
1076
+ html: `<div>embed html</div>`,
1077
+ ...config.data
799
1078
  };
800
1079
  };
801
1080
 
802
- const dataSet$1 = [
1081
+ const dataSet = [
803
1082
  {
804
- url: "https://www.youtube.com/watch?v=fiOwHYFkUz0",
1083
+ version: "1.0",
1084
+ type: "video",
805
1085
  embed_url: "https://www.youtube.com/embed/fiOwHYFkUz0",
806
1086
  thumbnail_url: "https://i.ytimg.com/vi/fiOwHYFkUz0/hqdefault.jpg",
807
1087
  thumbnail_height: 360,
808
1088
  thumbnail_width: 480,
809
- html: '<iframe width="200" height="113" src="https://www.youtube.com/embed/fiOwHYFkUz0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'
1089
+ html: '<iframe width="200" height="113" src="https://www.youtube.com/embed/fiOwHYFkUz0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
1090
+ width: 200,
1091
+ height: 113
810
1092
  },
811
1093
  {
812
- url: "https://www.youtube.com/watch?v=c-ATzcy6VkI",
1094
+ version: "1.0",
1095
+ type: "video",
813
1096
  embed_url: "https://www.youtube.com/embed/c-ATzcy6VkI",
814
1097
  thumbnail_url: "https://i.ytimg.com/vi/c-ATzcy6VkI/hqdefault.jpg",
815
1098
  thumbnail_height: 360,
816
1099
  thumbnail_width: 480,
817
- html: '<iframe width="200" height="113" src="https://www.youtube.com/embed/c-ATzcy6VkI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'
1100
+ html: '<iframe width="200" height="113" src="https://www.youtube.com/embed/c-ATzcy6VkI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
1101
+ width: 200,
1102
+ height: 113
818
1103
  },
819
1104
  {
820
- url: "https://www.youtube.com/watch?v=iewZXv94XGY",
1105
+ version: "1.0",
1106
+ type: "video",
821
1107
  embed_url: "https://www.youtube.com/watch?v=fiOwHYFkUz0",
822
1108
  thumbnail_url: "https://i.ytimg.com/vi/iewZXv94XGY/hqdefault.jpg",
823
1109
  thumbnail_height: 360,
824
1110
  thumbnail_width: 480,
825
- html: '<iframe width="200" height="113" src="https://www.youtube.com/embed/iewZXv94XGY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'
1111
+ html: '<iframe width="200" height="113" src="https://www.youtube.com/embed/iewZXv94XGY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>',
1112
+ width: 200,
1113
+ height: 113
826
1114
  },
827
1115
  {
828
- url: "https://twitter.com/prismicio/status/1356293316158095361",
829
- embed_url: "https://www.youtube.com/watch?v=iewZXv94XGY",
1116
+ version: "1.0",
1117
+ type: "rich",
1118
+ embed_url: "https://twitter.com/prismicio/status/1356293316158095361",
830
1119
  thumbnail_url: null,
831
1120
  thumbnail_height: null,
832
1121
  thumbnail_width: null,
833
- html: '<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Gatsby is a popular choice for Prismic users and we work hard on delivering a CMS that plays to its strengths.<br><br>But, what makes <a href="https://twitter.com/GatsbyJS?ref_src=twsrc%5Etfw">@GatsbyJS</a> so popular?<br><br>Here are some of <a href="https://twitter.com/mxstbr?ref_src=twsrc%5Etfw">@mxstbr</a>&#39;s thoughts on Gatsby&#39;s success and how they&#39;re improving developer experience.<a href="https://t.co/ZjCPvsWWUD">https://t.co/ZjCPvsWWUD</a> <a href="https://t.co/EQqzJpeNKl">pic.twitter.com/EQqzJpeNKl</a></p>&mdash; Prismic (@prismicio) <a href="https://twitter.com/prismicio/status/1356293316158095361?ref_src=twsrc%5Etfw">February 1, 2021</a></blockquote>\n<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"><\/script>\n'
1122
+ html: '<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Gatsby is a popular choice for Prismic users and we work hard on delivering a CMS that plays to its strengths.<br><br>But, what makes <a href="https://twitter.com/GatsbyJS?ref_src=twsrc%5Etfw">@GatsbyJS</a> so popular?<br><br>Here are some of <a href="https://twitter.com/mxstbr?ref_src=twsrc%5Etfw">@mxstbr</a>&#39;s thoughts on Gatsby&#39;s success and how they&#39;re improving developer experience.<a href="https://t.co/ZjCPvsWWUD">https://t.co/ZjCPvsWWUD</a> <a href="https://t.co/EQqzJpeNKl">pic.twitter.com/EQqzJpeNKl</a></p>&mdash; Prismic (@prismicio) <a href="https://twitter.com/prismicio/status/1356293316158095361?ref_src=twsrc%5Etfw">February 1, 2021</a></blockquote>\n<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"><\/script>\n',
1123
+ width: 200,
1124
+ height: 113
834
1125
  },
835
1126
  {
836
- url: "https://twitter.com/timbenniks/status/1304146886832594944",
1127
+ type: "rich",
1128
+ version: "1.0",
1129
+ embed_url: "https://twitter.com/timbenniks/status/1304146886832594944",
837
1130
  thumbnail_url: null,
838
1131
  thumbnail_width: null,
839
1132
  thumbnail_height: null,
840
- embed_url: "https://twitter.com/timbenniks/status/1304146886832594944",
841
- html: '<blockquote class="twitter-tweet"><p lang="en" dir="ltr">I\u2019ve been diving deep on <a href="https://twitter.com/prismicio?ref_src=twsrc%5Etfw">@prismicio</a> <a href="https://twitter.com/hashtag/slicemachine?src=hash&amp;ref_src=twsrc%5Etfw">#slicemachine</a> today. I made all my own components and I used custom slices. It works like a charm with <a href="https://twitter.com/nuxt_js?ref_src=twsrc%5Etfw">@nuxt_js</a>. Also: I\u2019m coding with this view. <a href="https://t.co/F0I8X9gz39">pic.twitter.com/F0I8X9gz39</a></p>&mdash; Tim Benniks (@timbenniks) <a href="https://twitter.com/timbenniks/status/1304146886832594944?ref_src=twsrc%5Etfw">September 10, 2020</a></blockquote>\n<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"><\/script>\n'
1133
+ html: '<blockquote class="twitter-tweet"><p lang="en" dir="ltr">I\u2019ve been diving deep on <a href="https://twitter.com/prismicio?ref_src=twsrc%5Etfw">@prismicio</a> <a href="https://twitter.com/hashtag/slicemachine?src=hash&amp;ref_src=twsrc%5Etfw">#slicemachine</a> today. I made all my own components and I used custom slices. It works like a charm with <a href="https://twitter.com/nuxt_js?ref_src=twsrc%5Etfw">@nuxt_js</a>. Also: I\u2019m coding with this view. <a href="https://t.co/F0I8X9gz39">pic.twitter.com/F0I8X9gz39</a></p>&mdash; Tim Benniks (@timbenniks) <a href="https://twitter.com/timbenniks/status/1304146886832594944?ref_src=twsrc%5Etfw">September 10, 2020</a></blockquote>\n<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"><\/script>\n',
1134
+ width: 200,
1135
+ height: 113
842
1136
  },
843
1137
  {
844
- url: "https://twitter.com/prismicio/status/1354112310252630016",
1138
+ version: "1.0",
1139
+ type: "rich",
1140
+ embed_url: "https://twitter.com/prismicio/status/1354112310252630016",
845
1141
  thumbnail_url: null,
846
1142
  thumbnail_width: null,
847
1143
  thumbnail_height: null,
848
- embed_url: "https://twitter.com/prismicio/status/1354112310252630016",
849
- html: '<blockquote class="twitter-tweet"><p lang="en" dir="ltr">We&#39;re launching a new <a href="https://twitter.com/hashtag/SliceContest?src=hash&amp;ref_src=twsrc%5Etfw">#SliceContest</a> tomorrow along with Slice Machine upgrades.<br><br>Want to know more? Join us at tomorrow&#39;s Product Meet-up\u{1F447}<a href="https://t.co/prYSypiAvB">https://t.co/prYSypiAvB</a><br><br>We can&#39;t tell you any further details for now, but here&#39;s a sneak peek at the prizes\u{1F440} <a href="https://t.co/fV1eoGlEBh">pic.twitter.com/fV1eoGlEBh</a></p>&mdash; Prismic (@prismicio) <a href="https://twitter.com/prismicio/status/1354112310252630016?ref_src=twsrc%5Etfw">January 26, 2021</a></blockquote>\n<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"><\/script>\n'
1144
+ html: '<blockquote class="twitter-tweet"><p lang="en" dir="ltr">We&#39;re launching a new <a href="https://twitter.com/hashtag/SliceContest?src=hash&amp;ref_src=twsrc%5Etfw">#SliceContest</a> tomorrow along with Slice Machine upgrades.<br><br>Want to know more? Join us at tomorrow&#39;s Product Meet-up\u{1F447}<a href="https://t.co/prYSypiAvB">https://t.co/prYSypiAvB</a><br><br>We can&#39;t tell you any further details for now, but here&#39;s a sneak peek at the prizes\u{1F440} <a href="https://t.co/fV1eoGlEBh">pic.twitter.com/fV1eoGlEBh</a></p>&mdash; Prismic (@prismicio) <a href="https://twitter.com/prismicio/status/1354112310252630016?ref_src=twsrc%5Etfw">January 26, 2021</a></blockquote>\n<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"><\/script>\n',
1145
+ width: 200,
1146
+ height: 113
850
1147
  },
851
1148
  {
852
- url: "https://twitter.com/prismicio/status/1354835716430319617",
1149
+ version: "1.0",
1150
+ type: "rich",
1151
+ embed_url: "https://twitter.com/prismicio/status/1354835716430319617",
853
1152
  thumbnail_url: null,
854
1153
  thumbnail_width: null,
855
1154
  thumbnail_height: null,
856
- embed_url: "https://twitter.com/prismicio/status/1354835716430319617",
857
- html: '<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Does anyone want to create a wildly popular website for discussing &#39;Wall Street Bets&#39; using Prismic?<br><br>It may or may not have to look a lot like <a href="https://twitter.com/hashtag/reddit?src=hash&amp;ref_src=twsrc%5Etfw">#reddit</a> and we won&#39;t make it private.<br><br>Just asking for some friends...</p>&mdash; Prismic (@prismicio) <a href="https://twitter.com/prismicio/status/1354835716430319617?ref_src=twsrc%5Etfw">January 28, 2021</a></blockquote>\n<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"><\/script>\n'
1155
+ html: '<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Does anyone want to create a wildly popular website for discussing &#39;Wall Street Bets&#39; using Prismic?<br><br>It may or may not have to look a lot like <a href="https://twitter.com/hashtag/reddit?src=hash&amp;ref_src=twsrc%5Etfw">#reddit</a> and we won&#39;t make it private.<br><br>Just asking for some friends...</p>&mdash; Prismic (@prismicio) <a href="https://twitter.com/prismicio/status/1354835716430319617?ref_src=twsrc%5Etfw">January 28, 2021</a></blockquote>\n<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"><\/script>\n',
1156
+ width: 200,
1157
+ height: 113
858
1158
  }
859
1159
  ];
860
1160
  const getMockEmbedData = (config) => {
861
- const faker = createFaker(config.seed);
862
- return faker.random.arrayElement(dataSet$1);
863
- };
864
-
865
- const embed$1 = (config = {}) => {
866
- const embedData = getMockEmbedData({ seed: config.seed });
867
- return config.state === "empty" ? {} : buildEmbedField({ seed: config.seed, embedData });
1161
+ const faker = config.faker || createFaker(config.seed);
1162
+ return faker.randomElement(dataSet);
1163
+ };
1164
+
1165
+ const embed$1 = (config) => {
1166
+ var _a, _b, _c;
1167
+ const faker = config.faker || createFaker(config.seed);
1168
+ const data = (_a = config.data) != null ? _a : getMockEmbedData({ faker });
1169
+ return config.state === "empty" ? {} : buildEmbedField({
1170
+ faker,
1171
+ url: (_b = config.url) != null ? _b : "embed_url" in data ? data.embed_url : void 0,
1172
+ html: (_c = config.html) != null ? _c : "html" in data ? data.html : void 0,
1173
+ data
1174
+ });
868
1175
  };
869
1176
 
870
- const geoPoint = (config = {}) => {
871
- const faker = createFaker(config.seed);
872
- const coordinates = faker.address.nearbyGPSCoordinate();
1177
+ const geoPoint = (config) => {
1178
+ const faker = config.faker || createFaker(config.seed);
873
1179
  return config.state === "empty" ? {} : {
874
- longitude: Number.parseFloat(coordinates[0]),
875
- latitude: Number.parseFloat(coordinates[1])
1180
+ longitude: faker.rangeFloat(-180, 180),
1181
+ latitude: faker.rangeFloat(-90, 90)
876
1182
  };
877
1183
  };
878
1184
 
879
- const group = (config = {}) => {
1185
+ const group = (config) => {
880
1186
  var _a;
881
1187
  if (config.state === "empty") {
882
1188
  return [];
883
1189
  } else {
884
- const faker = createFaker(config.seed);
885
- const model = config.model || group$1({ seed: config.seed });
886
- const itemsCount = (_a = config.itemsCount) != null ? _a : faker.datatype.number({
887
- min: 1,
888
- max: 6
889
- });
1190
+ const faker = config.faker || createFaker(config.seed);
1191
+ const model = config.model || group$1({ faker });
1192
+ const itemsCount = (_a = config.itemsCount) != null ? _a : faker.range(1, 6);
890
1193
  return Array(itemsCount).fill(void 0).map(() => {
1194
+ var _a2;
891
1195
  return valueForModelMap({
892
- seed: config.seed,
893
- map: model.config.fields,
1196
+ faker,
1197
+ map: ((_a2 = model.config) == null ? void 0 : _a2.fields) || {},
894
1198
  configs: config.configs
895
1199
  });
896
1200
  });
@@ -907,7 +1211,7 @@ const buildImageFieldImage = (config) => {
907
1211
  copyright: null
908
1212
  };
909
1213
  } else {
910
- const faker = createFaker(config.seed);
1214
+ const faker = config.faker || createFaker(config.seed);
911
1215
  const url = new URL(config.imageData.url);
912
1216
  const dimensions = {
913
1217
  width: (_b = (_a = config.constraint) == null ? void 0 : _a.width) != null ? _b : config.imageData.width,
@@ -919,142 +1223,52 @@ const buildImageFieldImage = (config) => {
919
1223
  return {
920
1224
  url: url.toString(),
921
1225
  dimensions,
922
- alt: faker.lorem.sentence(),
923
- copyright: faker.lorem.sentence()
1226
+ alt: changeCase.sentenceCase(faker.words(faker.range(5, 15))),
1227
+ copyright: changeCase.sentenceCase(faker.words(faker.range(5, 15)))
924
1228
  };
925
1229
  }
926
1230
  };
927
1231
 
928
- const dataSet = [
929
- {
930
- url: "https://images.unsplash.com/photo-1604537529428-15bcbeecfe4d",
931
- width: 4240,
932
- height: 2832
933
- },
934
- {
935
- url: "https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05",
936
- width: 7372,
937
- height: 4392
938
- },
939
- {
940
- url: "https://images.unsplash.com/photo-1441974231531-c6227db76b6e",
941
- width: 2560,
942
- height: 1705
943
- },
944
- {
945
- url: "https://images.unsplash.com/photo-1418065460487-3e41a6c84dc5",
946
- width: 2200,
947
- height: 1467
948
- },
949
- {
950
- url: "https://images.unsplash.com/photo-1426604966848-d7adac402bff",
951
- width: 5616,
952
- height: 3744
953
- },
954
- {
955
- url: "https://images.unsplash.com/photo-1604537466608-109fa2f16c3b",
956
- width: 4240,
957
- height: 2832
958
- },
959
- {
960
- url: "https://images.unsplash.com/photo-1497436072909-60f360e1d4b1",
961
- width: 2560,
962
- height: 1440
963
- },
964
- {
965
- url: "https://images.unsplash.com/reserve/HgZuGu3gSD6db21T3lxm_San%20Zenone.jpg",
966
- width: 6373,
967
- height: 4253
968
- },
969
- {
970
- url: "https://images.unsplash.com/photo-1504198266287-1659872e6590",
971
- width: 4272,
972
- height: 2848
973
- },
974
- {
975
- url: "https://images.unsplash.com/photo-1470770903676-69b98201ea1c",
976
- width: 4554,
977
- height: 3036
978
- },
979
- {
980
- url: "https://images.unsplash.com/photo-1587502537745-84b86da1204f",
981
- width: 6550,
982
- height: 4367
983
- },
984
- {
985
- url: "https://images.unsplash.com/photo-1431794062232-2a99a5431c6c",
986
- width: 6e3,
987
- height: 4e3
988
- },
989
- {
990
- url: "https://images.unsplash.com/photo-1446329813274-7c9036bd9a1f",
991
- width: 6e3,
992
- height: 4e3
993
- },
994
- {
995
- url: "https://images.unsplash.com/photo-1504567961542-e24d9439a724",
996
- width: 4608,
997
- height: 3456
998
- },
999
- {
1000
- url: "https://images.unsplash.com/photo-1444464666168-49d633b86797",
1001
- width: 4844,
1002
- height: 3234
1003
- },
1004
- {
1005
- url: "https://images.unsplash.com/photo-1553531384-397c80973a0b",
1006
- width: 4335,
1007
- height: 6502
1008
- }
1009
- ];
1010
- const getMockImageData = (config) => {
1011
- const faker = createFaker(config.seed);
1012
- return faker.random.arrayElement(dataSet);
1013
- };
1014
-
1015
- const image$1 = (config = {}) => {
1016
- const model = config.model || image$2({ seed: config.seed });
1017
- const imageData = getMockImageData({ seed: config.seed });
1232
+ const image$1 = (config) => {
1233
+ var _a, _b;
1234
+ const faker = config.faker || createFaker(config.seed);
1235
+ const model = config.model || image$2({ faker });
1236
+ const imageData = getMockImageData({ faker });
1018
1237
  const value = buildImageFieldImage({
1019
- seed: config.seed,
1238
+ faker,
1020
1239
  imageData,
1021
- constraint: model.config.constraint,
1240
+ constraint: (_a = model.config) == null ? void 0 : _a.constraint,
1022
1241
  state: config.state
1023
1242
  });
1024
- for (const thumbnail of model.config.thumbnails) {
1025
- value[thumbnail.name] = buildImageFieldImage({
1026
- seed: config.seed,
1027
- imageData,
1028
- constraint: {
1029
- width: thumbnail.width,
1030
- height: thumbnail.height
1031
- },
1032
- state: config.state
1033
- });
1243
+ if ((_b = model.config) == null ? void 0 : _b.thumbnails) {
1244
+ for (const thumbnail of model.config.thumbnails) {
1245
+ value[thumbnail.name] = buildImageFieldImage({
1246
+ faker,
1247
+ imageData,
1248
+ constraint: {
1249
+ width: thumbnail.width,
1250
+ height: thumbnail.height
1251
+ },
1252
+ state: config.state
1253
+ });
1254
+ }
1034
1255
  }
1035
1256
  return value;
1036
1257
  };
1037
1258
 
1038
- const integrationFields = (config = {}) => {
1039
- const faker = createFaker(config.seed);
1040
- const imageData = getMockImageData({ seed: config.seed });
1041
- return config.state === "empty" ? null : {
1042
- id: faker.git.shortSha(),
1043
- title: changeCase.capitalCase(faker.lorem.words(3)),
1044
- description: faker.lorem.sentence(),
1045
- image_url: imageData.url,
1046
- last_update: faker.date.past(20, new Date("2021-03-07")).getTime(),
1047
- blob: config.data
1048
- };
1259
+ const integrationFields = (config) => {
1260
+ var _a;
1261
+ const data = (_a = config.data) != null ? _a : {};
1262
+ return config.state === "empty" ? null : data;
1049
1263
  };
1050
1264
 
1051
- const keyText = (config = {}) => {
1052
- const faker = createFaker(config.seed);
1053
- return config.state === "empty" ? null : changeCase.sentenceCase(faker.lorem.words(3));
1265
+ const keyText = (config) => {
1266
+ const faker = config.faker || createFaker(config.seed);
1267
+ return config.state === "empty" ? null : changeCase.sentenceCase(faker.words(3));
1054
1268
  };
1055
1269
 
1056
- const linkToMedia = (config = {}) => {
1057
- const faker = createFaker(config.seed);
1270
+ const linkToMedia = (config) => {
1271
+ const faker = config.faker || createFaker(config.seed);
1058
1272
  if (config.state === "empty") {
1059
1273
  return {
1060
1274
  link_type: prismicT.LinkType.Media
@@ -1062,20 +1276,20 @@ const linkToMedia = (config = {}) => {
1062
1276
  } else {
1063
1277
  return {
1064
1278
  link_type: prismicT.LinkType.Media,
1065
- name: faker.system.commonFileName(),
1066
- kind: faker.system.commonFileType(),
1067
- url: faker.internet.url(),
1068
- size: faker.datatype.number().toString(),
1069
- height: faker.datatype.number().toString(),
1070
- width: faker.datatype.number().toString()
1279
+ name: `${changeCase.snakeCase(faker.words(faker.range(1, 2)))}.example`,
1280
+ kind: changeCase.snakeCase(faker.word()),
1281
+ url: faker.url(),
1282
+ size: faker.range(500, 3e3).toString(),
1283
+ height: faker.range(500, 3e3).toString(),
1284
+ width: faker.range(500, 3e3).toString()
1071
1285
  };
1072
1286
  }
1073
1287
  };
1074
1288
 
1075
- const link = (config = {}) => {
1076
- var _a;
1077
- const faker = createFaker(config.seed);
1078
- const type = config.type || faker.random.arrayElement([
1289
+ const link = (config) => {
1290
+ var _a, _b;
1291
+ const faker = config.faker || createFaker(config.seed);
1292
+ const type = config.type || faker.randomElement([
1079
1293
  prismicT.LinkType.Web,
1080
1294
  prismicT.LinkType.Document,
1081
1295
  prismicT.LinkType.Media
@@ -1088,33 +1302,33 @@ const link = (config = {}) => {
1088
1302
  switch (type) {
1089
1303
  case prismicT.LinkType.Document: {
1090
1304
  return contentRelationship({
1091
- seed: config.seed,
1305
+ faker,
1092
1306
  state: config.state,
1093
1307
  linkableDocuments: config.linkableDocuments
1094
1308
  });
1095
1309
  }
1096
1310
  case prismicT.LinkType.Media: {
1097
1311
  return linkToMedia({
1098
- seed: config.seed,
1312
+ faker,
1099
1313
  state: config.state
1100
1314
  });
1101
1315
  }
1102
1316
  case prismicT.LinkType.Web:
1103
1317
  default: {
1104
- const model = config.model || link$1({ seed: config.seed });
1318
+ const model = config.model || link$1({ faker });
1105
1319
  return {
1106
1320
  link_type: prismicT.LinkType.Web,
1107
- url: faker.internet.url(),
1108
- target: ((_a = config.withTargetBlank) != null ? _a : model.config.allowTargetBlank && faker.datatype.boolean()) ? "_blank" : void 0
1321
+ url: faker.url(),
1322
+ target: ((_b = config.withTargetBlank) != null ? _b : ((_a = model.config) == null ? void 0 : _a.allowTargetBlank) && faker.boolean()) ? "_blank" : void 0
1109
1323
  };
1110
1324
  }
1111
1325
  }
1112
1326
  }
1113
1327
  };
1114
1328
 
1115
- const number = (config = {}) => {
1116
- const faker = createFaker(config.seed);
1117
- return config.state === "empty" ? null : faker.datatype.number();
1329
+ const number = (config) => {
1330
+ const faker = config.faker || createFaker(config.seed);
1331
+ return config.state === "empty" ? null : faker.range(1, 100);
1118
1332
  };
1119
1333
 
1120
1334
  const patterns$5 = {
@@ -1131,27 +1345,32 @@ const patterns$5 = {
1131
1345
  maxWords: 12
1132
1346
  }
1133
1347
  };
1134
- const heading = (config = {}) => {
1135
- const faker = createFaker(config.seed);
1136
- const model = config.model || title$1({ seed: config.seed });
1137
- const types = ("single" in model.config ? model.config.single : model.config.multi).split(",").filter((type2) => [
1138
- prismicT.RichTextNodeType.heading1,
1139
- prismicT.RichTextNodeType.heading2,
1140
- prismicT.RichTextNodeType.heading3,
1141
- prismicT.RichTextNodeType.heading4,
1142
- prismicT.RichTextNodeType.heading5,
1143
- prismicT.RichTextNodeType.heading6
1144
- ].includes(type2));
1145
- const type = faker.random.arrayElement(types);
1348
+ const headingNoteTypes = [
1349
+ prismicT.RichTextNodeType.heading1,
1350
+ prismicT.RichTextNodeType.heading2,
1351
+ prismicT.RichTextNodeType.heading3,
1352
+ prismicT.RichTextNodeType.heading4,
1353
+ prismicT.RichTextNodeType.heading5,
1354
+ prismicT.RichTextNodeType.heading6
1355
+ ];
1356
+ const heading = (config) => {
1357
+ const faker = config.faker || createFaker(config.seed);
1358
+ const model = config.model || title$1({ faker });
1359
+ let types = [];
1360
+ if (model.config) {
1361
+ if ("single" in model.config && model.config.single) {
1362
+ types = model.config.single.split(",").filter((type2) => headingNoteTypes.includes(type2));
1363
+ } else if ("multi" in model.config && model.config.multi) {
1364
+ types = model.config.multi.split(",").filter((type2) => headingNoteTypes.includes(type2));
1365
+ }
1366
+ }
1367
+ const type = faker.randomElement(types);
1146
1368
  if (type) {
1147
- const patternKey = config.pattern || faker.random.arrayElement(Object.keys(patterns$5));
1369
+ const patternKey = config.pattern || faker.randomElement(Object.keys(patterns$5));
1148
1370
  const pattern = patterns$5[patternKey];
1149
1371
  return {
1150
1372
  type,
1151
- text: changeCase.capitalCase(faker.lorem.words(faker.datatype.number({
1152
- min: pattern.minWords,
1153
- max: pattern.maxWords
1154
- }))),
1373
+ text: changeCase.capitalCase(faker.words(faker.range(pattern.minWords, pattern.maxWords))),
1155
1374
  spans: []
1156
1375
  };
1157
1376
  } else {
@@ -1170,13 +1389,14 @@ const patterns$4 = {
1170
1389
  sentenceCount: 12
1171
1390
  }
1172
1391
  };
1173
- const paragraph = (config = {}) => {
1174
- const faker = createFaker(config.seed);
1175
- const patternKey = config.pattern || faker.random.arrayElement(Object.keys(patterns$4));
1392
+ const paragraph = (config) => {
1393
+ const faker = config.faker || createFaker(config.seed);
1394
+ const patternKey = config.pattern || faker.randomElement(Object.keys(patterns$4));
1176
1395
  const pattern = patterns$4[patternKey];
1396
+ const text = Array.from({ length: pattern.sentenceCount }, () => changeCase.sentenceCase(faker.words(faker.range(5, 15))) + ".").join(" ");
1177
1397
  return {
1178
1398
  type: prismicT.RichTextNodeType.paragraph,
1179
- text: faker.lorem.paragraph(pattern.sentenceCount),
1399
+ text,
1180
1400
  spans: []
1181
1401
  };
1182
1402
  };
@@ -1192,13 +1412,14 @@ const patterns$3 = {
1192
1412
  sentenceCount: 12
1193
1413
  }
1194
1414
  };
1195
- const preformatted = (config = {}) => {
1196
- const faker = createFaker(config.seed);
1197
- const patternKey = config.pattern || faker.random.arrayElement(Object.keys(patterns$3));
1415
+ const preformatted = (config) => {
1416
+ const faker = config.faker || createFaker(config.seed);
1417
+ const patternKey = config.pattern || faker.randomElement(Object.keys(patterns$3));
1198
1418
  const pattern = patterns$3[patternKey];
1419
+ const text = Array.from({ length: pattern.sentenceCount }, () => changeCase.sentenceCase(faker.words(faker.range(5, 15))) + ".").join(" ");
1199
1420
  return {
1200
1421
  type: prismicT.RichTextNodeType.preformatted,
1201
- text: faker.lorem.paragraph(pattern.sentenceCount),
1422
+ text,
1202
1423
  spans: []
1203
1424
  };
1204
1425
  };
@@ -1217,18 +1438,15 @@ const patterns$2 = {
1217
1438
  maxItems: 12
1218
1439
  }
1219
1440
  };
1220
- const list = (config = {}) => {
1221
- const faker = createFaker(config.seed);
1222
- const patternKey = config.pattern || faker.random.arrayElement(Object.keys(patterns$2));
1441
+ const list = (config) => {
1442
+ const faker = config.faker || createFaker(config.seed);
1443
+ const patternKey = config.pattern || faker.randomElement(Object.keys(patterns$2));
1223
1444
  const pattern = patterns$2[patternKey];
1224
- const itemsCount = faker.datatype.number({
1225
- min: pattern.minItems,
1226
- max: pattern.maxItems
1227
- });
1445
+ const itemsCount = faker.range(pattern.minItems, pattern.maxItems);
1228
1446
  return Array(itemsCount).fill(void 0).map(() => {
1229
1447
  return {
1230
1448
  type: prismicT.RichTextNodeType.listItem,
1231
- text: faker.lorem.sentence(),
1449
+ text: changeCase.sentenceCase(faker.words(faker.range(5, 15))),
1232
1450
  spans: []
1233
1451
  };
1234
1452
  });
@@ -1248,29 +1466,27 @@ const patterns$1 = {
1248
1466
  maxItems: 12
1249
1467
  }
1250
1468
  };
1251
- const oList = (config = {}) => {
1252
- const faker = createFaker(config.seed);
1253
- const patternKey = config.pattern || faker.random.arrayElement(Object.keys(patterns$1));
1469
+ const oList = (config) => {
1470
+ const faker = config.faker || createFaker(config.seed);
1471
+ const patternKey = config.pattern || faker.randomElement(Object.keys(patterns$1));
1254
1472
  const pattern = patterns$1[patternKey];
1255
- const itemsCount = faker.datatype.number({
1256
- min: pattern.minItems,
1257
- max: pattern.maxItems
1258
- });
1473
+ const itemsCount = faker.range(pattern.minItems, pattern.maxItems);
1259
1474
  return Array(itemsCount).fill(void 0).map(() => {
1260
1475
  return {
1261
1476
  type: prismicT.RichTextNodeType.oListItem,
1262
- text: faker.lorem.sentence(),
1477
+ text: changeCase.sentenceCase(faker.words(faker.range(5, 15))),
1263
1478
  spans: []
1264
1479
  };
1265
1480
  });
1266
1481
  };
1267
1482
 
1268
- const image = (config = {}) => {
1269
- const imageData = getMockImageData({ seed: config.seed });
1483
+ const image = (config) => {
1484
+ const faker = config.faker || createFaker(config.seed);
1485
+ const imageData = getMockImageData({ faker });
1270
1486
  const imageField = buildImageFieldImage({
1271
- seed: config.seed,
1487
+ faker,
1272
1488
  imageData,
1273
- state: false
1489
+ state: "filled"
1274
1490
  });
1275
1491
  return {
1276
1492
  type: prismicT.RichTextNodeType.image,
@@ -1281,9 +1497,10 @@ const image = (config = {}) => {
1281
1497
  };
1282
1498
  };
1283
1499
 
1284
- const embed = (config = {}) => {
1285
- const embedData = getMockEmbedData({ seed: config.seed });
1286
- const embedField = buildEmbedField({ seed: config.seed, embedData });
1500
+ const embed = (config) => {
1501
+ const faker = config.faker || createFaker(config.seed);
1502
+ const data = getMockEmbedData({ faker });
1503
+ const embedField = buildEmbedField({ faker, data });
1287
1504
  return {
1288
1505
  type: prismicT.RichTextNodeType.embed,
1289
1506
  oembed: embedField
@@ -1318,105 +1535,109 @@ const generators = {
1318
1535
  [prismicT.RichTextNodeType.image]: image,
1319
1536
  [prismicT.RichTextNodeType.embed]: embed
1320
1537
  };
1321
- const richText = (config = {}) => {
1322
- const faker = createFaker(config.seed);
1323
- const model = config.model || richText$1({
1324
- seed: config.seed,
1325
- withMultipleBlocks: true
1326
- });
1327
- const supportsMultipleBlocks = "multi" in model.config;
1328
- const types = ("multi" in model.config ? model.config.multi : model.config.single).split(",").filter((type) => Object.keys(generators).includes(type));
1329
- if (types.length > 0) {
1330
- const patternKey = config.pattern || faker.random.arrayElement(Object.keys(patterns));
1331
- const pattern = patterns[patternKey];
1332
- const blockCount = supportsMultipleBlocks ? faker.datatype.number({
1333
- min: pattern.blockCountMin,
1334
- max: pattern.blockCountMax
1335
- }) : 1;
1336
- return Array(blockCount).fill(void 0).map(() => {
1337
- const type = faker.random.arrayElement(types);
1338
- const generator = generators[type];
1339
- return generator({ seed: config.seed, model });
1340
- }).flat().filter((block) => block !== void 0).slice(0, blockCount);
1341
- } else {
1538
+ const richText = (config) => {
1539
+ const faker = config.faker || createFaker(config.seed);
1540
+ if (config.state === "empty") {
1342
1541
  return [];
1542
+ } else {
1543
+ const model = config.model || richText$1({
1544
+ faker,
1545
+ withMultipleBlocks: true
1546
+ });
1547
+ const supportsMultipleBlocks = model.config && "multi" in model.config;
1548
+ let types = [];
1549
+ if (model.config) {
1550
+ if ("multi" in model.config && model.config.multi) {
1551
+ types = model.config.multi.split(",").filter((type) => Object.keys(generators).includes(type));
1552
+ } else if ("single" in model.config && model.config.single) {
1553
+ types = model.config.single.split(",").filter((type) => Object.keys(generators).includes(type));
1554
+ }
1555
+ }
1556
+ if (types.length > 0) {
1557
+ const patternKey = config.pattern || faker.randomElement(Object.keys(patterns));
1558
+ const pattern = patterns[patternKey];
1559
+ const blockCount = supportsMultipleBlocks ? faker.range(pattern.blockCountMin, pattern.blockCountMax) : 1;
1560
+ return Array(blockCount).fill(void 0).map(() => {
1561
+ const type = faker.randomElement(types);
1562
+ const generator = generators[type];
1563
+ return generator({ faker, model });
1564
+ }).flat().filter((block) => block !== void 0).slice(0, blockCount);
1565
+ } else {
1566
+ return [];
1567
+ }
1343
1568
  }
1344
1569
  };
1345
1570
 
1346
- const select = (config = {}) => {
1347
- const faker = createFaker(config.seed);
1348
- const model = config.model || select$1({ seed: config.seed });
1349
- const defaultValue = model.config.default_value;
1571
+ const select = (config) => {
1572
+ var _a, _b;
1573
+ const faker = config.faker || createFaker(config.seed);
1574
+ const model = config.model || select$1({ faker });
1575
+ const defaultValue = (_a = model.config) == null ? void 0 : _a.default_value;
1576
+ const options = ((_b = model.config) == null ? void 0 : _b.options) || [];
1350
1577
  if (config.state === "empty") {
1351
1578
  return null;
1352
1579
  } else {
1353
- return typeof defaultValue === "string" && faker.datatype.boolean() ? defaultValue : faker.random.arrayElement(model.config.options);
1580
+ return typeof defaultValue === "string" && faker.boolean() ? defaultValue : faker.randomElement(options);
1354
1581
  }
1355
1582
  };
1356
1583
 
1357
- const slice = (config = {}) => {
1584
+ const slice = (config) => {
1358
1585
  var _a, _b;
1359
- const faker = createFaker(config.seed);
1360
- const model = config.model || slice$1({ seed: config.seed });
1361
- const sliceType = (_a = config.type) != null ? _a : generateFieldId({ seed: config.seed });
1362
- const sliceLabel = config.label !== void 0 ? config.label : changeCase.capitalCase(faker.company.bsNoun());
1363
- const itemsCount = Object.keys(model.repeat).length > 0 ? (_b = config.itemsCount) != null ? _b : faker.datatype.number({
1364
- min: 1,
1365
- max: 6
1366
- }) : 0;
1586
+ const faker = config.faker || createFaker(config.seed);
1587
+ const model = config.model || slice$1({ faker });
1588
+ const sliceType = (_a = config.type) != null ? _a : generateFieldId({ faker });
1589
+ const sliceLabel = config.label !== void 0 ? config.label : changeCase.capitalCase(faker.words(faker.range(1, 2)));
1590
+ const itemsCount = model.repeat && Object.keys(model.repeat).length > 0 ? (_b = config.itemsCount) != null ? _b : faker.range(1, 6) : 0;
1367
1591
  return {
1368
1592
  slice_type: sliceType,
1369
1593
  slice_label: sliceLabel,
1370
1594
  primary: valueForModelMap({
1371
- seed: config.seed,
1372
- map: model["non-repeat"],
1595
+ faker,
1596
+ map: model["non-repeat"] || {},
1373
1597
  configs: config.primaryFieldConfigs
1374
1598
  }),
1375
1599
  items: Array(itemsCount).fill(void 0).map(() => {
1376
1600
  return valueForModelMap({
1377
- seed: config.seed,
1378
- map: model.repeat,
1601
+ faker,
1602
+ map: model.repeat || {},
1379
1603
  configs: config.itemsFieldConfigs
1380
1604
  });
1381
1605
  })
1382
1606
  };
1383
1607
  };
1384
1608
 
1385
- const sharedSliceVariation = (config = {}) => {
1609
+ const sharedSliceVariation = (config) => {
1386
1610
  var _a, _b;
1387
- const faker = createFaker(config.seed);
1388
- const model = config.model || sharedSliceVariation$1({ seed: config.seed });
1389
- const sliceType = (_a = config.type) != null ? _a : generateFieldId({ seed: config.seed });
1390
- const itemsCount = Object.keys(model.items).length > 0 ? (_b = config.itemsCount) != null ? _b : faker.datatype.number({
1391
- min: 1,
1392
- max: 6
1393
- }) : 0;
1611
+ const faker = config.faker || createFaker(config.seed);
1612
+ const model = config.model || sharedSliceVariation$1({ faker });
1613
+ const sliceType = (_a = config.type) != null ? _a : generateFieldId({ faker });
1614
+ const itemsCount = model.items && Object.keys(model.items).length > 0 ? (_b = config.itemsCount) != null ? _b : faker.range(1, 6) : 0;
1394
1615
  return {
1395
1616
  slice_type: sliceType,
1396
1617
  slice_label: null,
1397
1618
  variation: model.id,
1398
- version: faker.git.shortSha(),
1619
+ version: faker.hash(7),
1399
1620
  primary: valueForModelMap({
1400
- seed: config.seed,
1401
- map: model.primary,
1621
+ faker,
1622
+ map: model.primary || {},
1402
1623
  configs: config.primaryFieldConfigs
1403
1624
  }),
1404
1625
  items: Array(itemsCount).fill(void 0).map(() => {
1405
1626
  return valueForModelMap({
1406
- seed: config.seed,
1407
- map: model.items,
1627
+ faker,
1628
+ map: model.items || {},
1408
1629
  configs: config.itemsFieldConfigs
1409
1630
  });
1410
1631
  })
1411
1632
  };
1412
1633
  };
1413
1634
 
1414
- const sharedSlice = (config = {}) => {
1415
- const faker = createFaker(config.seed);
1416
- const model = config.model || sharedSlice$1({ seed: config.seed });
1417
- const variationModel = faker.random.arrayElement(model.variations);
1635
+ const sharedSlice = (config) => {
1636
+ const faker = config.faker || createFaker(config.seed);
1637
+ const model = config.model || sharedSlice$1({ faker });
1638
+ const variationModel = faker.randomElement(model.variations);
1418
1639
  return sharedSliceVariation({
1419
- seed: config.seed,
1640
+ faker,
1420
1641
  model: variationModel,
1421
1642
  itemsCount: config.itemsCount,
1422
1643
  type: model.id,
@@ -1425,28 +1646,25 @@ const sharedSlice = (config = {}) => {
1425
1646
  });
1426
1647
  };
1427
1648
 
1428
- const sliceZone = (config = {}) => {
1429
- var _a;
1649
+ const sliceZone = (config) => {
1650
+ var _a, _b;
1430
1651
  if (config.state === "empty") {
1431
1652
  return [];
1432
1653
  } else {
1433
- const faker = createFaker(config.seed);
1434
- const model = config.model || sliceZone$1({ seed: config.seed });
1435
- if (Object.keys(model.config.choices).length > 0) {
1436
- const itemsCount = (_a = config.itemsCount) != null ? _a : faker.datatype.number({
1437
- min: 1,
1438
- max: 6
1439
- });
1654
+ const faker = config.faker || createFaker(config.seed);
1655
+ const model = config.model || sliceZone$1({ faker });
1656
+ if (((_a = model.config) == null ? void 0 : _a.choices) && Object.keys(model.config.choices).length > 0) {
1657
+ const itemsCount = (_b = config.itemsCount) != null ? _b : faker.range(1, 6);
1440
1658
  return Array(itemsCount).fill(void 0).map(() => {
1441
- var _a2;
1442
- const choices = Object.entries(model.config.choices);
1443
- const [choiceType, choiceModel] = faker.random.arrayElement(choices);
1444
- const choiceLabels = model.config.labels[choiceType] || [];
1445
- const choiceLabel = faker.random.arrayElement(choiceLabels);
1659
+ var _a2, _b2, _c, _d;
1660
+ const choices = ((_a2 = model.config) == null ? void 0 : _a2.choices) && Object.entries(model.config.choices) || [];
1661
+ const [choiceType, choiceModel] = faker.randomElement(choices);
1662
+ const choiceLabels = ((_c = (_b2 = model.config) == null ? void 0 : _b2.labels) == null ? void 0 : _c[choiceType]) || [];
1663
+ const choiceLabel = faker.randomElement(choiceLabels);
1446
1664
  switch (choiceModel.type) {
1447
1665
  case prismicT.CustomTypeModelSliceType.Slice: {
1448
1666
  return slice({
1449
- seed: config.seed,
1667
+ faker,
1450
1668
  model: choiceModel,
1451
1669
  type: choiceType,
1452
1670
  label: choiceLabel ? choiceLabel.name : null,
@@ -1455,10 +1673,10 @@ const sliceZone = (config = {}) => {
1455
1673
  });
1456
1674
  }
1457
1675
  case prismicT.CustomTypeModelSliceType.SharedSlice: {
1458
- const sharedSliceModel = (_a2 = config.sharedSliceModels) == null ? void 0 : _a2.find((sharedSliceModel2) => sharedSliceModel2.id === choiceType);
1676
+ const sharedSliceModel = (_d = config.sharedSliceModels) == null ? void 0 : _d.find((sharedSliceModel2) => sharedSliceModel2.id === choiceType);
1459
1677
  if (sharedSliceModel) {
1460
1678
  return sharedSlice({
1461
- seed: config.seed,
1679
+ faker,
1462
1680
  model: sharedSliceModel,
1463
1681
  primaryFieldConfigs: config.primaryFieldConfigs,
1464
1682
  itemsFieldConfigs: config.itemsFieldConfigs
@@ -1473,13 +1691,14 @@ const sliceZone = (config = {}) => {
1473
1691
  }
1474
1692
  };
1475
1693
 
1476
- const title = (config = {}) => {
1694
+ const title = (config) => {
1695
+ const faker = config.faker || createFaker(config.seed);
1477
1696
  if (config.state === "empty") {
1478
1697
  return [];
1479
1698
  } else {
1480
1699
  return [
1481
1700
  heading({
1482
- seed: config.seed,
1701
+ faker,
1483
1702
  model: config.model,
1484
1703
  pattern: config.pattern
1485
1704
  })
@@ -1487,9 +1706,9 @@ const title = (config = {}) => {
1487
1706
  }
1488
1707
  };
1489
1708
 
1490
- const uid = (config = {}) => {
1491
- const faker = createFaker(config.seed);
1492
- return changeCase.snakeCase(faker.lorem.words(2));
1709
+ const uid = (config) => {
1710
+ const faker = config.faker || createFaker(config.seed);
1711
+ return changeCase.snakeCase(faker.words(faker.range(1, 3)));
1493
1712
  };
1494
1713
 
1495
1714
  var index$1 = /*#__PURE__*/Object.freeze({
@@ -1520,58 +1739,58 @@ var index$1 = /*#__PURE__*/Object.freeze({
1520
1739
  uid: uid
1521
1740
  });
1522
1741
 
1523
- const ref = (config = {}) => {
1742
+ const ref = (config) => {
1524
1743
  var _a;
1525
- const faker = createFaker(config.seed);
1744
+ const faker = config.faker || createFaker(config.seed);
1526
1745
  const value = {
1527
- id: faker.git.shortSha(),
1528
- ref: faker.git.shortSha(),
1746
+ id: faker.hash(16),
1747
+ ref: faker.hash(16),
1529
1748
  isMasterRef: (_a = config.isMasterRef) != null ? _a : false,
1530
- label: config.isMasterRef ? "Master" : changeCase.capitalCase(faker.company.bsNoun())
1749
+ label: config.isMasterRef ? "Master" : changeCase.capitalCase(faker.words(faker.range(1, 3)))
1531
1750
  };
1532
1751
  if (config.isScheduled) {
1533
- value.scheduledAt = timestamp({ seed: config.seed });
1752
+ value.scheduledAt = timestamp({ faker });
1534
1753
  }
1535
1754
  return value;
1536
1755
  };
1537
1756
 
1538
- const repository = (config = {}) => {
1539
- const faker = createFaker(config.seed);
1757
+ const repository = (config) => {
1758
+ const faker = config.faker || createFaker(config.seed);
1540
1759
  const types = (config.customTypeModels || []).reduce((acc, model) => {
1541
- acc[model.id] = model.label;
1760
+ acc[model.id] = model.label || model.id;
1542
1761
  return acc;
1543
1762
  }, {});
1544
1763
  return {
1545
1764
  refs: [
1546
- ref({ seed: config.seed, isMasterRef: true }),
1547
- ...config.withReleases ? [ref({ seed: config.seed }), ref({ seed: config.seed })] : []
1765
+ ref({ faker, isMasterRef: true }),
1766
+ ...config.withReleases ? [ref({ faker }), ref({ faker })] : []
1548
1767
  ],
1549
- integrationFieldsRef: ref({ seed: config.seed }).ref,
1768
+ integrationFieldsRef: ref({ faker }).ref,
1550
1769
  types,
1551
1770
  languages: [
1552
1771
  {
1553
- id: faker.lorem.word(),
1554
- name: changeCase.capitalCase(faker.lorem.word())
1772
+ id: faker.word(),
1773
+ name: changeCase.capitalCase(faker.word())
1555
1774
  }
1556
1775
  ],
1557
1776
  tags: generateTags({
1558
- seed: config.seed,
1777
+ faker,
1559
1778
  min: 1,
1560
1779
  max: 10
1561
1780
  }),
1562
1781
  forms: {},
1563
1782
  license: "All Rights Reserved",
1564
- version: faker.git.shortSha(),
1783
+ version: faker.hash(7),
1565
1784
  bookmarks: {},
1566
1785
  experiments: {},
1567
- oauth_token: faker.internet.url(),
1568
- oauth_initiate: faker.internet.url()
1786
+ oauth_token: faker.url(),
1787
+ oauth_initiate: faker.url()
1569
1788
  };
1570
1789
  };
1571
1790
 
1572
- const query = (config = {}) => {
1791
+ const query = (config) => {
1573
1792
  var _a, _b;
1574
- const faker = createFaker(config.seed);
1793
+ const faker = config.faker || createFaker(config.seed);
1575
1794
  const documents = config.documents || [];
1576
1795
  const page = Math.max(1, (_a = config.page) != null ? _a : 1);
1577
1796
  const pageSize = Math.min(100, Math.max(1, (_b = config.pageSize) != null ? _b : 100));
@@ -1579,8 +1798,8 @@ const query = (config = {}) => {
1579
1798
  const results = documents.slice((page - 1) * pageSize, page * pageSize);
1580
1799
  return {
1581
1800
  page,
1582
- next_page: page < totalPages ? faker.internet.url() : null,
1583
- prev_page: page > 1 ? faker.internet.url() : null,
1801
+ next_page: page < totalPages ? faker.url() : null,
1802
+ prev_page: page > 1 ? faker.url() : null,
1584
1803
  total_pages: totalPages,
1585
1804
  results_size: results.length,
1586
1805
  results_per_page: pageSize,
@@ -1589,9 +1808,10 @@ const query = (config = {}) => {
1589
1808
  };
1590
1809
  };
1591
1810
 
1592
- const tags = (config = {}) => {
1811
+ const tags = (config) => {
1812
+ const faker = config.faker || createFaker(config.seed);
1593
1813
  return generateTags({
1594
- seed: config.seed,
1814
+ faker,
1595
1815
  min: 1,
1596
1816
  max: 10
1597
1817
  });
@@ -1605,5 +1825,128 @@ var index = /*#__PURE__*/Object.freeze({
1605
1825
  tags: tags
1606
1826
  });
1607
1827
 
1608
- export { index as api, index$2 as model, index$1 as value };
1828
+ const createValueMockFactory = (...args) => {
1829
+ return new ValueMockFactory(...args);
1830
+ };
1831
+ class ValueMockFactory {
1832
+ constructor(config) {
1833
+ this.faker = "faker" in config ? config.faker : createFaker(config.seed);
1834
+ }
1835
+ get seed() {
1836
+ return this.faker.seed;
1837
+ }
1838
+ boolean(config) {
1839
+ return boolean$1({ ...config, faker: this.faker });
1840
+ }
1841
+ color(config) {
1842
+ return color({ ...config, faker: this.faker });
1843
+ }
1844
+ contentRelationship(config) {
1845
+ return contentRelationship({ ...config, faker: this.faker });
1846
+ }
1847
+ customType(config) {
1848
+ return customType({ ...config, faker: this.faker });
1849
+ }
1850
+ date(config) {
1851
+ return date({ ...config, faker: this.faker });
1852
+ }
1853
+ document(config) {
1854
+ return customType({ ...config, faker: this.faker });
1855
+ }
1856
+ embed(config) {
1857
+ return embed$1({ ...config, faker: this.faker });
1858
+ }
1859
+ geoPoint(config) {
1860
+ return geoPoint({ ...config, faker: this.faker });
1861
+ }
1862
+ group(config) {
1863
+ return group({ ...config, faker: this.faker });
1864
+ }
1865
+ image(config) {
1866
+ return image$1({ ...config, faker: this.faker });
1867
+ }
1868
+ integrationFields(config) {
1869
+ return integrationFields({ ...config, faker: this.faker });
1870
+ }
1871
+ keyText(config) {
1872
+ return keyText({ ...config, faker: this.faker });
1873
+ }
1874
+ link(config) {
1875
+ return link({ ...config, faker: this.faker });
1876
+ }
1877
+ linkToMedia(config) {
1878
+ return linkToMedia({ ...config, faker: this.faker });
1879
+ }
1880
+ number(config) {
1881
+ return number({ ...config, faker: this.faker });
1882
+ }
1883
+ select(config) {
1884
+ return select({ ...config, faker: this.faker });
1885
+ }
1886
+ sharedSlice(config) {
1887
+ return sharedSlice({ ...config, faker: this.faker });
1888
+ }
1889
+ sharedSliceVariation(config) {
1890
+ return sharedSliceVariation({ ...config, faker: this.faker });
1891
+ }
1892
+ slice(config) {
1893
+ return slice({ ...config, faker: this.faker });
1894
+ }
1895
+ sliceZone(config) {
1896
+ return sliceZone({ ...config, faker: this.faker });
1897
+ }
1898
+ timestamp(config) {
1899
+ return timestamp({ ...config, faker: this.faker });
1900
+ }
1901
+ title(config) {
1902
+ return title({ ...config, faker: this.faker });
1903
+ }
1904
+ uid(config) {
1905
+ return uid({ ...config, faker: this.faker });
1906
+ }
1907
+ richText(config) {
1908
+ return richText({ ...config, faker: this.faker });
1909
+ }
1910
+ }
1911
+
1912
+ const createAPIMockFactory = (...args) => {
1913
+ return new APIMockFactory(...args);
1914
+ };
1915
+ class APIMockFactory {
1916
+ constructor(config) {
1917
+ this.faker = "faker" in config ? config.faker : createFaker(config.seed);
1918
+ }
1919
+ get seed() {
1920
+ return this.faker.seed;
1921
+ }
1922
+ query(config) {
1923
+ return query({ ...config, faker: this.faker });
1924
+ }
1925
+ ref(config) {
1926
+ return ref({ ...config, faker: this.faker });
1927
+ }
1928
+ repository(config) {
1929
+ return repository({ ...config, faker: this.faker });
1930
+ }
1931
+ tags(config) {
1932
+ return tags({ ...config, faker: this.faker });
1933
+ }
1934
+ }
1935
+
1936
+ const createMockFactory = (...args) => {
1937
+ return new MockFactory(...args);
1938
+ };
1939
+ class MockFactory {
1940
+ constructor(config) {
1941
+ this.faker = config.faker || createFaker(config.seed);
1942
+ this.api = createAPIMockFactory({ faker: this.faker });
1943
+ this.model = createModelMockFactory({ faker: this.faker });
1944
+ this.value = createValueMockFactory({ faker: this.faker });
1945
+ }
1946
+ get seed() {
1947
+ return this.faker.seed;
1948
+ }
1949
+ }
1950
+
1951
+ export { APIMockFactory, MockFactory, ModelMockFactory, ValueMockFactory, index as api, createAPIMockFactory, createMockFactory, createModelMockFactory, createValueMockFactory, index$2 as model, index$1 as value };
1609
1952
  //# sourceMappingURL=index.js.map