@prismicio/mock 0.0.4 → 0.0.8

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 (72) hide show
  1. package/README.md +4 -1
  2. package/dist/api/index.cjs +54 -35
  3. package/dist/api/index.cjs.map +1 -0
  4. package/dist/api/index.d.ts +4 -2
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/{index.mjs → index.js} +116 -63
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/index.cjs +365 -417
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.ts +157 -243
  11. package/dist/{index.mjs → index.js} +359 -409
  12. package/dist/index.js.map +1 -0
  13. package/dist/model/index.cjs +164 -204
  14. package/dist/model/index.cjs.map +1 -0
  15. package/dist/model/index.d.ts +73 -97
  16. package/dist/model/index.d.ts.map +1 -0
  17. package/dist/model/index.js +462 -0
  18. package/dist/model/index.js.map +1 -0
  19. package/dist/value/index.cjs +310 -519
  20. package/dist/value/index.cjs.map +1 -0
  21. package/dist/value/index.d.ts +71 -132
  22. package/dist/value/index.d.ts.map +1 -0
  23. package/dist/value/{index.mjs → index.js} +474 -629
  24. package/dist/value/index.js.map +1 -0
  25. package/package.json +21 -21
  26. package/src/constants.ts +3 -1
  27. package/src/lib/buildAlternativeLanguage.ts +18 -0
  28. package/src/lib/buildContentRelationshipField.ts +12 -5
  29. package/src/lib/buildEmbedField.ts +1 -1
  30. package/src/lib/buildImageFieldImage.ts +48 -0
  31. package/src/lib/createFaker.ts +19 -10
  32. package/src/lib/valueForModelMap.ts +2 -2
  33. package/src/model/buildMockGroupFieldMap.ts +65 -0
  34. package/src/model/contentRelationship.ts +14 -21
  35. package/src/model/customType.ts +49 -48
  36. package/src/model/group.ts +8 -15
  37. package/src/model/image.ts +13 -13
  38. package/src/model/index.ts +2 -0
  39. package/src/model/integrationFields.ts +4 -2
  40. package/src/model/select.ts +11 -16
  41. package/src/model/sharedSlice.ts +23 -30
  42. package/src/model/sharedSliceVariation.ts +33 -21
  43. package/src/model/slice.ts +15 -19
  44. package/src/model/sliceZone.ts +25 -42
  45. package/src/types.ts +130 -83
  46. package/src/value/color.ts +16 -6
  47. package/src/value/contentRelationship.ts +52 -36
  48. package/src/value/customType.ts +22 -3
  49. package/src/value/date.ts +25 -9
  50. package/src/value/embed.ts +18 -6
  51. package/src/value/geoPoint.ts +21 -9
  52. package/src/value/group.ts +35 -44
  53. package/src/value/image.ts +22 -9
  54. package/src/value/integrationFields.ts +26 -14
  55. package/src/value/keyText.ts +18 -6
  56. package/src/value/link.ts +33 -34
  57. package/src/value/linkToMedia.ts +15 -20
  58. package/src/value/number.ts +16 -6
  59. package/src/value/richText/heading.ts +7 -7
  60. package/src/value/richText/image.ts +6 -2
  61. package/src/value/richText/index.ts +1 -1
  62. package/src/value/select.ts +23 -8
  63. package/src/value/sharedSlice.ts +2 -2
  64. package/src/value/sharedSliceVariation.ts +6 -34
  65. package/src/value/slice.ts +5 -30
  66. package/src/value/sliceZone.ts +60 -69
  67. package/src/value/timestamp.ts +19 -6
  68. package/src/value/title.ts +26 -13
  69. package/src/value/uid.ts +1 -1
  70. package/dist/model/index.mjs +0 -448
  71. package/src/lib/buildImageField.ts +0 -34
  72. package/src/lib/buildMockGroupFieldMap.ts +0 -84
@@ -1,448 +0,0 @@
1
- import * as prismicT from '@prismicio/types';
2
- import * as changeCase from 'change-case';
3
- import * as fakerLocaleEN from 'faker/lib/locales/en';
4
- import Faker from 'faker/lib';
5
-
6
- const FAKER_SEED = 1984;
7
-
8
- const createFaker = (seed = FAKER_SEED) => {
9
- if (createFaker.cache[seed]) {
10
- return createFaker.cache[seed];
11
- }
12
- const seededFaker = new Faker();
13
- seededFaker.seed(seed);
14
- seededFaker.locales["en"] = fakerLocaleEN;
15
- createFaker.cache[seed] = seededFaker;
16
- return seededFaker;
17
- };
18
- createFaker.cache = {};
19
-
20
- const boolean = (config = {}) => {
21
- const faker = createFaker(config.seed);
22
- return {
23
- type: prismicT.CustomTypeModelFieldType.Boolean,
24
- config: {
25
- label: changeCase.capitalCase(faker.company.bsNoun())
26
- }
27
- };
28
- };
29
-
30
- const color = (config = {}) => {
31
- const faker = createFaker(config.seed);
32
- return {
33
- type: prismicT.CustomTypeModelFieldType.Color,
34
- config: {
35
- label: changeCase.capitalCase(faker.company.bsNoun()),
36
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
37
- }
38
- };
39
- };
40
-
41
- const generateCustomTypeId = (config) => {
42
- const faker = createFaker(config.seed);
43
- return changeCase.snakeCase(faker.company.bsNoun());
44
- };
45
-
46
- const contentRelationship = (config = {}) => {
47
- const faker = createFaker(config.seed);
48
- return {
49
- type: prismicT.CustomTypeModelFieldType.Link,
50
- config: {
51
- label: changeCase.capitalCase(faker.company.bsNoun()),
52
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
53
- select: prismicT.CustomTypeModelLinkSelectType.Document,
54
- customtypes: config.constrainCustomTypes ? Array(faker.datatype.number({ min: 1, max: 3 })).fill(void 0).map(() => generateCustomTypeId({ seed: config.seed })) : void 0,
55
- tags: config.constrainTags ? Array(faker.datatype.number({ min: 1, max: 3 })).fill(void 0).map(() => changeCase.capitalCase(faker.lorem.words(faker.datatype.number({ min: 1, max: 3 })))) : void 0
56
- }
57
- };
58
- };
59
-
60
- const date = (config = {}) => {
61
- const faker = createFaker(config.seed);
62
- return {
63
- type: prismicT.CustomTypeModelFieldType.Date,
64
- config: {
65
- label: changeCase.capitalCase(faker.company.bsNoun()),
66
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
67
- }
68
- };
69
- };
70
-
71
- const embed = (config = {}) => {
72
- const faker = createFaker(config.seed);
73
- return {
74
- type: prismicT.CustomTypeModelFieldType.Embed,
75
- config: {
76
- label: changeCase.capitalCase(faker.company.bsNoun()),
77
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
78
- }
79
- };
80
- };
81
-
82
- const geoPoint = (config = {}) => {
83
- const faker = createFaker(config.seed);
84
- return {
85
- type: prismicT.CustomTypeModelFieldType.GeoPoint,
86
- config: {
87
- label: changeCase.capitalCase(faker.company.bsNoun())
88
- }
89
- };
90
- };
91
-
92
- const image = (config = {}) => {
93
- var _a;
94
- const faker = createFaker(config.seed);
95
- const thumbnailsCount = (_a = config.thumbnailsCount) != null ? _a : faker.datatype.number(3);
96
- return {
97
- type: prismicT.CustomTypeModelFieldType.Image,
98
- config: {
99
- label: changeCase.capitalCase(faker.company.bsNoun()),
100
- constraint: {
101
- width: config.withConstraint ? faker.datatype.number({ min: 500, max: 2e3 }) : null,
102
- height: config.withConstraint ? faker.datatype.number({ min: 500, max: 2e3 }) : null
103
- },
104
- thumbnails: Array(thumbnailsCount).fill(void 0).map(() => ({
105
- name: changeCase.capitalCase(faker.company.bsNoun()),
106
- width: faker.datatype.number({ min: 500, max: 2e3 }),
107
- height: faker.datatype.number({ min: 500, max: 2e3 })
108
- }))
109
- }
110
- };
111
- };
112
-
113
- const integrationFields = (config = {}) => {
114
- const faker = createFaker(config.seed);
115
- return {
116
- type: prismicT.CustomTypeModelFieldType.IntegrationFields,
117
- config: {
118
- label: changeCase.capitalCase(faker.company.bsNoun()),
119
- catalog: changeCase.snakeCase(faker.lorem.words(4))
120
- }
121
- };
122
- };
123
-
124
- const keyText = (config = {}) => {
125
- const faker = createFaker(config.seed);
126
- return {
127
- type: prismicT.CustomTypeModelFieldType.Text,
128
- config: {
129
- label: changeCase.capitalCase(faker.company.bsNoun()),
130
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
131
- }
132
- };
133
- };
134
-
135
- const link = (config = {}) => {
136
- const faker = createFaker(config.seed);
137
- return {
138
- type: prismicT.CustomTypeModelFieldType.Link,
139
- config: {
140
- label: changeCase.capitalCase(faker.company.bsNoun()),
141
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
142
- select: null,
143
- allowTargetBlank: ("allowTargetBlank" in config ? config.allowTargetBlank : faker.datatype.boolean()) || void 0
144
- }
145
- };
146
- };
147
-
148
- const linkToMedia = (config = {}) => {
149
- const faker = createFaker(config.seed);
150
- return {
151
- type: prismicT.CustomTypeModelFieldType.Link,
152
- config: {
153
- label: changeCase.capitalCase(faker.company.bsNoun()),
154
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
155
- select: prismicT.CustomTypeModelLinkSelectType.Media
156
- }
157
- };
158
- };
159
-
160
- const number = (config = {}) => {
161
- const faker = createFaker(config.seed);
162
- return {
163
- type: prismicT.CustomTypeModelFieldType.Number,
164
- config: {
165
- label: changeCase.capitalCase(faker.company.bsNoun()),
166
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
167
- }
168
- };
169
- };
170
-
171
- const richText = (config = {}) => {
172
- var _a;
173
- const faker = createFaker(config.seed);
174
- const blockTypes = faker.random.arrayElements([
175
- prismicT.RichTextNodeType.heading1,
176
- prismicT.RichTextNodeType.heading2,
177
- prismicT.RichTextNodeType.heading3,
178
- prismicT.RichTextNodeType.heading4,
179
- prismicT.RichTextNodeType.heading5,
180
- prismicT.RichTextNodeType.heading6,
181
- prismicT.RichTextNodeType.paragraph,
182
- prismicT.RichTextNodeType.preformatted,
183
- prismicT.RichTextNodeType.strong,
184
- prismicT.RichTextNodeType.em,
185
- prismicT.RichTextNodeType.listItem,
186
- prismicT.RichTextNodeType.oListItem,
187
- prismicT.RichTextNodeType.image,
188
- prismicT.RichTextNodeType.embed,
189
- prismicT.RichTextNodeType.hyperlink
190
- ]).join(",");
191
- const blockTypeConfig = ((_a = config.withMultipleBlocks) != null ? _a : faker.datatype.boolean()) ? { multi: blockTypes } : { single: blockTypes };
192
- return {
193
- type: prismicT.CustomTypeModelFieldType.StructuredText,
194
- config: {
195
- label: changeCase.capitalCase(faker.company.bsNoun()),
196
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
197
- allowTargetBlank: faker.datatype.boolean() ? true : void 0,
198
- ...blockTypeConfig
199
- }
200
- };
201
- };
202
-
203
- const select = (config = {}) => {
204
- var _a;
205
- const faker = createFaker(config.seed);
206
- const optionsCount = (_a = config.optionsCount) != null ? _a : faker.datatype.number({ min: 1, max: 5 });
207
- const options = Array(optionsCount).fill(void 0).map(() => changeCase.capitalCase(faker.company.bsBuzz()));
208
- return {
209
- type: prismicT.CustomTypeModelFieldType.Select,
210
- config: {
211
- label: changeCase.capitalCase(faker.company.bsNoun()),
212
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
213
- options,
214
- default_value: config.withDefaultValue ? faker.random.arrayElement(options) : void 0
215
- }
216
- };
217
- };
218
-
219
- const timestamp = (config = {}) => {
220
- const faker = createFaker(config.seed);
221
- return {
222
- type: prismicT.CustomTypeModelFieldType.Timestamp,
223
- config: {
224
- label: changeCase.capitalCase(faker.company.bsNoun()),
225
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
226
- }
227
- };
228
- };
229
-
230
- const title = (config = {}) => {
231
- const faker = createFaker(config.seed);
232
- const single = faker.random.arrayElements([
233
- "heading1",
234
- "heading2",
235
- "heading3",
236
- "heading4",
237
- "heading5",
238
- "heading6"
239
- ]).join(",");
240
- return {
241
- type: prismicT.CustomTypeModelFieldType.StructuredText,
242
- config: {
243
- label: changeCase.capitalCase(faker.company.bsNoun()),
244
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
245
- single,
246
- allowTargetBlank: faker.datatype.boolean() ? true : void 0
247
- }
248
- };
249
- };
250
-
251
- const generateFieldId = (config) => {
252
- const faker = createFaker(config.seed);
253
- return changeCase.snakeCase(faker.lorem.words(faker.datatype.number({ min: 1, max: 3 })));
254
- };
255
-
256
- const mockModelFns = {
257
- boolean,
258
- color,
259
- contentRelationship,
260
- date,
261
- embed,
262
- geoPoint,
263
- image,
264
- integrationFields,
265
- keyText,
266
- link,
267
- linkToMedia,
268
- number,
269
- richText,
270
- select,
271
- timestamp,
272
- title
273
- };
274
- const buildMockGroupFieldMap = (config = {}) => {
275
- var _a;
276
- const faker = createFaker(config.seed);
277
- const configs = config.configs || {};
278
- const fields = {};
279
- for (const mockModelType in mockModelFns) {
280
- const mockModelFn = mockModelFns[mockModelType];
281
- const mockModelMapConfig = configs[mockModelType] || {};
282
- const count = (_a = mockModelMapConfig.count) != null ? _a : faker.random.arrayElement([0, 0, 0, 1]);
283
- for (let i = 0; i < count; i++) {
284
- const fieldId = generateFieldId({ seed: config.seed });
285
- fields[fieldId] = mockModelFn({
286
- seed: config.seed,
287
- ...mockModelMapConfig.config
288
- });
289
- }
290
- }
291
- return fields;
292
- };
293
-
294
- const uid = (config = {}) => {
295
- const faker = createFaker(config.seed);
296
- return {
297
- type: prismicT.CustomTypeModelFieldType.UID,
298
- config: {
299
- label: changeCase.capitalCase(faker.company.bsNoun()),
300
- placeholder: changeCase.sentenceCase(faker.lorem.words(3))
301
- }
302
- };
303
- };
304
-
305
- const sharedSliceChoice = () => {
306
- return {
307
- type: prismicT.CustomTypeModelSliceType.SharedSlice
308
- };
309
- };
310
-
311
- const slice = (config = {}) => {
312
- var _a, _b, _c, _d, _e, _f;
313
- const faker = createFaker(config.seed);
314
- return {
315
- type: prismicT.CustomTypeModelSliceType.Slice,
316
- icon: changeCase.snakeCase(faker.company.bsNoun()),
317
- display: faker.datatype.boolean() ? prismicT.CustomTypeModelSliceDisplay.Grid : prismicT.CustomTypeModelSliceDisplay.List,
318
- fieldset: changeCase.capitalCase(faker.lorem.words()),
319
- description: faker.lorem.sentence(),
320
- repeat: buildMockGroupFieldMap({
321
- seed: (_b = (_a = config.repeatFieldConfig) == null ? void 0 : _a.seed) != null ? _b : config.seed,
322
- configs: (_c = config.repeatFieldConfig) == null ? void 0 : _c.configs
323
- }),
324
- "non-repeat": buildMockGroupFieldMap({
325
- seed: (_e = (_d = config.nonRepeatFieldConfig) == null ? void 0 : _d.seed) != null ? _e : config.seed,
326
- configs: (_f = config.nonRepeatFieldConfig) == null ? void 0 : _f.configs
327
- })
328
- };
329
- };
330
-
331
- const sliceZone = (config = {}) => {
332
- var _a;
333
- const faker = createFaker(config.seed);
334
- const choicesCount = (_a = config.choicesCount) != null ? _a : faker.datatype.number({ min: 2, max: 6 });
335
- const choices = {};
336
- for (let i = 0; i < choicesCount; i++) {
337
- const choiceId = generateFieldId({ seed: config.seed });
338
- choices[choiceId] = config.withSharedSlices ? sharedSliceChoice() : slice({ seed: config.seed });
339
- }
340
- const labels = {};
341
- if (!config.withSharedSlices) {
342
- for (const choiceId in choices) {
343
- const labelsCount = faker.datatype.number({ min: 0, max: 3 });
344
- labels[choiceId] = Array(labelsCount).fill(void 0).map(() => ({
345
- name: changeCase.capitalCase(faker.company.bsNoun()),
346
- display: faker.datatype.boolean() ? prismicT.CustomTypeModelSliceDisplay.Grid : prismicT.CustomTypeModelSliceDisplay.List
347
- }));
348
- }
349
- }
350
- return {
351
- type: prismicT.CustomTypeModelFieldType.Slices,
352
- fieldset: "Slice zone",
353
- config: {
354
- labels,
355
- choices
356
- }
357
- };
358
- };
359
-
360
- const customType = (config = {}) => {
361
- var _a;
362
- const faker = createFaker(config.seed);
363
- const tabsCount = (_a = config.tabsCount) != null ? _a : faker.datatype.number({ min: 1, max: 3 });
364
- const json = {};
365
- for (let i = 0; i < tabsCount; i++) {
366
- const tabName = changeCase.capitalCase(faker.company.bsNoun());
367
- const tabFields = buildMockGroupFieldMap({
368
- seed: config.seed,
369
- configs: config.configs
370
- });
371
- if (i === 0 && config.withUID) {
372
- const fieldId = generateFieldId({ seed: config.seed });
373
- tabFields[fieldId] = uid();
374
- }
375
- if (config.withSliceZones) {
376
- const sliceZoneId = generateFieldId({ seed: config.seed });
377
- tabFields[sliceZoneId] = sliceZone({
378
- withSharedSlices: config.withSharedSlices
379
- });
380
- }
381
- json[tabName] = tabFields;
382
- }
383
- const id = generateCustomTypeId({ seed: config.seed });
384
- return {
385
- id,
386
- label: changeCase.capitalCase(id),
387
- status: faker.datatype.boolean(),
388
- repeatable: faker.datatype.boolean(),
389
- json
390
- };
391
- };
392
-
393
- const group = (config = {}) => {
394
- const faker = createFaker(config.seed);
395
- const fields = buildMockGroupFieldMap({
396
- seed: config.seed,
397
- configs: config.configs
398
- });
399
- return {
400
- type: prismicT.CustomTypeModelFieldType.Group,
401
- config: {
402
- label: changeCase.capitalCase(faker.company.bsNoun()),
403
- fields
404
- }
405
- };
406
- };
407
-
408
- const sharedSliceVariation = (config = {}) => {
409
- var _a, _b, _c, _d, _e, _f;
410
- const faker = createFaker(config.seed);
411
- const name = changeCase.capitalCase(faker.company.bsNoun());
412
- return {
413
- id: changeCase.snakeCase(name),
414
- name,
415
- description: faker.lorem.sentence(),
416
- docURL: faker.internet.url(),
417
- version: faker.git.shortSha(),
418
- primary: buildMockGroupFieldMap({
419
- seed: (_b = (_a = config.primaryFieldConfig) == null ? void 0 : _a.seed) != null ? _b : config.seed,
420
- configs: (_c = config.primaryFieldConfig) == null ? void 0 : _c.configs
421
- }),
422
- items: buildMockGroupFieldMap({
423
- seed: (_e = (_d = config.itemsFieldConfig) == null ? void 0 : _d.seed) != null ? _e : config.seed,
424
- configs: (_f = config.itemsFieldConfig) == null ? void 0 : _f.configs
425
- })
426
- };
427
- };
428
-
429
- const sharedSlice = (config = {}) => {
430
- var _a;
431
- const faker = createFaker(config.seed);
432
- const variationsCount = (_a = config.variationsCount) != null ? _a : faker.datatype.number({ min: 1, max: 3 });
433
- const name = changeCase.capitalCase(faker.company.bsNoun());
434
- const variations = Array(variationsCount).fill(void 0).map(() => sharedSliceVariation({
435
- seed: config.seed,
436
- itemsFieldConfig: config.itemsFieldConfig,
437
- primaryFieldConfig: config.primaryFieldConfig
438
- }));
439
- return {
440
- type: prismicT.CustomTypeModelSliceType.SharedSlice,
441
- id: changeCase.snakeCase(name),
442
- name,
443
- description: faker.lorem.sentence(),
444
- variations
445
- };
446
- };
447
-
448
- export { boolean, color, contentRelationship, customType, date, embed, geoPoint, group, image, integrationFields, keyText, link, linkToMedia, number, richText, select, sharedSlice, sharedSliceChoice, sharedSliceVariation, slice, sliceZone, timestamp, title, uid };
@@ -1,34 +0,0 @@
1
- import * as prismicT from "@prismicio/types";
2
-
3
- import { createFaker } from "../lib/createFaker";
4
-
5
- import { MockImageData, MockValueConfig } from "../types";
6
-
7
- type BuildImageFieldConfig = {
8
- imageData: MockImageData;
9
- constraint?: prismicT.CustomTypeModelImageField["config"]["constraint"];
10
- } & Pick<MockValueConfig, "seed">;
11
-
12
- export const buildImageField = (
13
- config: BuildImageFieldConfig,
14
- ): prismicT.ImageField => {
15
- const faker = createFaker(config.seed);
16
-
17
- const url = new URL(config.imageData.url);
18
-
19
- const dimensions = {
20
- width: config.constraint?.width ?? config.imageData.width,
21
- height: config.constraint?.height ?? config.imageData.height,
22
- };
23
-
24
- url.searchParams.set("w", dimensions.width.toString());
25
- url.searchParams.set("h", dimensions.height.toString());
26
- url.searchParams.set("fit", "crop");
27
-
28
- return {
29
- url: url.toString(),
30
- dimensions,
31
- alt: faker.lorem.sentence(),
32
- copyright: faker.lorem.sentence(),
33
- };
34
- };
@@ -1,84 +0,0 @@
1
- import * as prismicT from "@prismicio/types";
2
-
3
- import { MockModelConfig } from "../types";
4
-
5
- import { boolean } from "../model/boolean";
6
- import { color } from "../model/color";
7
- import { contentRelationship } from "../model/contentRelationship";
8
- import { date } from "../model/date";
9
- import { embed } from "../model/embed";
10
- import { geoPoint } from "../model/geoPoint";
11
- import { image } from "../model/image";
12
- import { integrationFields } from "../model/integrationFields";
13
- import { keyText } from "../model/keyText";
14
- import { link } from "../model/link";
15
- import { linkToMedia } from "../model/linkToMedia";
16
- import { number } from "../model/number";
17
- import { richText } from "../model/richText";
18
- import { select } from "../model/select";
19
- import { timestamp } from "../model/timestamp";
20
- import { title } from "../model/title";
21
-
22
- import { createFaker } from "./createFaker";
23
- import { generateFieldId } from "./generateFieldId";
24
-
25
- const mockModelFns = {
26
- boolean,
27
- color,
28
- contentRelationship,
29
- date,
30
- embed,
31
- geoPoint,
32
- image,
33
- integrationFields,
34
- keyText,
35
- link,
36
- linkToMedia,
37
- number,
38
- richText,
39
- select,
40
- timestamp,
41
- title,
42
- } as const;
43
-
44
- type MockModelFns = typeof mockModelFns;
45
- type MockModelTypes = keyof MockModelFns;
46
-
47
- export type BuildMockGroupFieldMapConfig = {
48
- configs?: {
49
- [P in keyof MockModelFns]?: {
50
- count?: number;
51
- config?: Parameters<MockModelFns[P]>[0];
52
- };
53
- };
54
- } & MockModelConfig;
55
-
56
- export const buildMockGroupFieldMap = (
57
- config: BuildMockGroupFieldMapConfig = {},
58
- ): Record<string, prismicT.CustomTypeModelFieldForGroup> => {
59
- const faker = createFaker(config.seed);
60
-
61
- const configs =
62
- config.configs ||
63
- ({} as NonNullable<BuildMockGroupFieldMapConfig["configs"]>);
64
-
65
- const fields: Record<string, prismicT.CustomTypeModelFieldForGroup> = {};
66
-
67
- for (const mockModelType in mockModelFns) {
68
- const mockModelFn = mockModelFns[mockModelType as MockModelTypes];
69
- const mockModelMapConfig = configs[mockModelType as MockModelTypes] || {};
70
- const count =
71
- mockModelMapConfig.count ?? faker.random.arrayElement([0, 0, 0, 1]);
72
-
73
- for (let i = 0; i < count; i++) {
74
- const fieldId = generateFieldId({ seed: config.seed });
75
-
76
- fields[fieldId] = mockModelFn({
77
- seed: config.seed,
78
- ...mockModelMapConfig.config,
79
- });
80
- }
81
- }
82
-
83
- return fields;
84
- };