@prismicio/mock 0.0.6 → 0.0.7

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 (66) hide show
  1. package/README.md +4 -1
  2. package/dist/api/index.cjs +39 -27
  3. package/dist/api/index.cjs.map +1 -0
  4. package/dist/api/index.d.ts +2 -1
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/{index.mjs → index.js} +104 -58
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/index.cjs +293 -393
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.ts +132 -230
  11. package/dist/{index.mjs → index.js} +286 -384
  12. package/dist/index.js.map +1 -0
  13. package/dist/model/index.cjs +148 -205
  14. package/dist/model/index.cjs.map +1 -0
  15. package/dist/model/index.d.ts +68 -104
  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 +238 -495
  20. package/dist/value/index.cjs.map +1 -0
  21. package/dist/value/index.d.ts +54 -116
  22. package/dist/value/index.d.ts.map +1 -0
  23. package/dist/value/{index.mjs → index.js} +407 -610
  24. package/dist/value/index.js.map +1 -0
  25. package/package.json +21 -21
  26. package/src/lib/buildContentRelationshipField.ts +6 -1
  27. package/src/lib/buildEmbedField.ts +1 -1
  28. package/src/lib/buildImageFieldImage.ts +48 -0
  29. package/src/model/buildMockGroupFieldMap.ts +65 -0
  30. package/src/model/contentRelationship.ts +14 -21
  31. package/src/model/customType.ts +49 -48
  32. package/src/model/group.ts +8 -15
  33. package/src/model/image.ts +13 -13
  34. package/src/model/index.ts +2 -0
  35. package/src/model/select.ts +11 -16
  36. package/src/model/sharedSlice.ts +14 -41
  37. package/src/model/sharedSliceVariation.ts +33 -21
  38. package/src/model/slice.ts +15 -19
  39. package/src/model/sliceZone.ts +23 -59
  40. package/src/types.ts +41 -12
  41. package/src/value/color.ts +16 -6
  42. package/src/value/contentRelationship.ts +51 -36
  43. package/src/value/date.ts +25 -9
  44. package/src/value/embed.ts +18 -6
  45. package/src/value/geoPoint.ts +21 -9
  46. package/src/value/group.ts +7 -27
  47. package/src/value/image.ts +22 -9
  48. package/src/value/integrationFields.ts +26 -14
  49. package/src/value/keyText.ts +18 -6
  50. package/src/value/link.ts +33 -34
  51. package/src/value/linkToMedia.ts +15 -20
  52. package/src/value/number.ts +16 -6
  53. package/src/value/richText/heading.ts +7 -7
  54. package/src/value/richText/image.ts +6 -2
  55. package/src/value/richText/index.ts +1 -1
  56. package/src/value/select.ts +23 -8
  57. package/src/value/sharedSlice.ts +2 -2
  58. package/src/value/sharedSliceVariation.ts +6 -34
  59. package/src/value/slice.ts +5 -30
  60. package/src/value/sliceZone.ts +44 -60
  61. package/src/value/timestamp.ts +19 -6
  62. package/src/value/title.ts +1 -1
  63. package/src/value/uid.ts +1 -1
  64. package/dist/model/index.mjs +0 -465
  65. package/src/lib/buildImageField.ts +0 -34
  66. package/src/lib/buildMockGroupFieldMap.ts +0 -84
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/constants.ts","../../src/lib/createFaker.ts","../../src/value/boolean.ts","../../src/lib/generateTags.ts","../../src/lib/valueForModel.ts","../../src/lib/valueForModelMap.ts","../../src/model/contentRelationship.ts","../../src/model/customType.ts","../../src/model/group.ts","../../src/model/image.ts","../../src/model/link.ts","../../src/model/richText.ts","../../src/model/select.ts","../../src/model/sharedSlice.ts","../../src/model/sharedSliceVariation.ts","../../src/model/slice.ts","../../src/model/sliceZone.ts","../../src/model/title.ts","../../src/lib/generateFieldId.ts","../../src/value/timestamp.ts","../../src/lib/buildAlternativeLanguage.ts","../../src/value/customType.ts","../../src/value/color.ts","../../src/lib/buildContentRelationshipField.ts","../../src/lib/generateCustomTypeId.ts","../../src/value/contentRelationship.ts","../../src/value/date.ts","../../src/lib/buildEmbedField.ts","../../src/lib/getMockEmbedData.ts","../../src/value/embed.ts","../../src/value/geoPoint.ts","../../src/value/group.ts","../../src/lib/buildImageFieldImage.ts","../../src/lib/getMockImageData.ts","../../src/value/image.ts","../../src/value/integrationFields.ts","../../src/value/keyText.ts","../../src/value/linkToMedia.ts","../../src/value/link.ts","../../src/value/number.ts","../../src/value/richText/heading.ts","../../src/value/richText/paragraph.ts","../../src/value/richText/preformatted.ts","../../src/value/richText/list.ts","../../src/value/richText/oList.ts","../../src/value/richText/image.ts","../../src/value/richText/embed.ts","../../src/value/richText/index.ts","../../src/value/select.ts","../../src/value/slice.ts","../../src/value/sharedSliceVariation.ts","../../src/value/sharedSlice.ts","../../src/value/sliceZone.ts","../../src/value/title.ts","../../src/value/uid.ts"],"sourcesContent":["import { Seed } from \"./types\";\n\nexport const FAKER_SEED: Seed = 1984;\n","import * as fakerStatic from \"faker\";\n// @ts-expect-error - Missing .d.ts\nimport * as fakerLocaleEN from \"faker/lib/locales/en/index.js\";\n// @ts-expect-error - Missing .d.ts\nimport Faker from \"faker/lib/index.js\";\n\nimport { FAKER_SEED } from \"../constants\";\n\nexport const createFaker = (seed = FAKER_SEED): typeof fakerStatic => {\n\tlet normalizedSeed: number | number[];\n\tif (typeof seed === \"string\") {\n\t\tnormalizedSeed = seed.split(\"\").map((char) => char.charCodeAt(0));\n\t} else {\n\t\tnormalizedSeed = seed;\n\t}\n\n\tconst cacheKey = JSON.stringify(normalizedSeed);\n\n\tif (createFaker.cache[cacheKey]) {\n\t\treturn createFaker.cache[cacheKey];\n\t}\n\n\tconst fakerInstance = new Faker();\n\tfakerInstance.locales[\"en\"] = fakerLocaleEN;\n\tfakerInstance.seed(normalizedSeed);\n\n\tcreateFaker.cache[cacheKey] = fakerInstance;\n\n\treturn fakerInstance;\n};\ncreateFaker.cache = {} as Record<string, typeof fakerStatic>;\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueConfig } from \"../types\";\n\nexport type MockBooleanValueConfig<\n\tModel extends prismicT.CustomTypeModelBooleanField = prismicT.CustomTypeModelBooleanField,\n> = MockValueConfig<Model>;\n\nexport const boolean = <\n\tModel extends prismicT.CustomTypeModelBooleanField = prismicT.CustomTypeModelBooleanField,\n>(\n\tconfig: MockBooleanValueConfig<Model> = {},\n): prismicT.BooleanField => {\n\tconst faker = createFaker(config.seed);\n\n\treturn faker.datatype.boolean();\n};\n","import * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueConfig } from \"../types\";\n\ntype GenerateTagsConfig = {\n\tmin?: number;\n\tmax?: number;\n} & Pick<MockValueConfig, \"seed\">;\n\nexport const generateTags = (config: GenerateTagsConfig): string[] => {\n\tconst faker = createFaker(config.seed);\n\n\treturn Array(\n\t\tfaker.datatype.number({\n\t\t\tmin: config.min ?? 0,\n\t\t\tmax: config.max ?? 2,\n\t\t}),\n\t)\n\t\t.fill(undefined)\n\t\t.map(() =>\n\t\t\tchangeCase.capitalCase(\n\t\t\t\tfaker.lorem.words(faker.datatype.number({ min: 1, max: 3 })),\n\t\t\t),\n\t\t);\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport {\n\tMockValueConfig,\n\tMockValueConfigForModel,\n\tModelValue,\n\tSetRequired,\n} from \"../types\";\n\ntype ValueForModelConfig<Model extends prismicT.CustomTypeModelField> = {\n\tconfig?: Omit<MockValueConfigForModel<Model>, \"seed\" | \"model\">;\n} & SetRequired<MockValueConfig<Model>, \"model\">;\n\nimport * as value from \"../value\";\n\nexport const valueForModel = <Model extends prismicT.CustomTypeModelField>(\n\tconfig: ValueForModelConfig<Model>,\n): ModelValue<Model> => {\n\tconst model = config.model;\n\n\tswitch (model.type) {\n\t\tcase prismicT.CustomTypeModelFieldType.Boolean: {\n\t\t\treturn value.boolean({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Color: {\n\t\t\treturn value.color({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Link: {\n\t\t\tswitch (model.config.select) {\n\t\t\t\tcase prismicT.CustomTypeModelLinkSelectType.Document: {\n\t\t\t\t\treturn value.contentRelationship({\n\t\t\t\t\t\tseed: config.seed,\n\t\t\t\t\t\tmodel: model as prismicT.CustomTypeModelContentRelationshipField,\n\t\t\t\t\t\t...config.config,\n\t\t\t\t\t}) as ModelValue<Model>;\n\t\t\t\t}\n\n\t\t\t\tcase prismicT.CustomTypeModelLinkSelectType.Media: {\n\t\t\t\t\treturn value.linkToMedia({\n\t\t\t\t\t\tseed: config.seed,\n\t\t\t\t\t\tmodel: model as prismicT.CustomTypeModelLinkToMediaField,\n\t\t\t\t\t\t...config.config,\n\t\t\t\t\t}) as ModelValue<Model>;\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\treturn value.link({\n\t\t\t\t\t\tseed: config.seed,\n\t\t\t\t\t\tmodel: model as prismicT.CustomTypeModelLinkField,\n\t\t\t\t\t\t...config.config,\n\t\t\t\t\t}) as ModelValue<Model>;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Date: {\n\t\t\treturn value.date({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Embed: {\n\t\t\treturn value.embed({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.GeoPoint: {\n\t\t\treturn value.geoPoint({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Image: {\n\t\t\treturn value.image({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Text: {\n\t\t\treturn value.keyText({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Number: {\n\t\t\treturn value.number({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Select: {\n\t\t\treturn value.select({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Timestamp: {\n\t\t\treturn value.timestamp({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.StructuredText: {\n\t\t\tif (\n\t\t\t\t\"single\" in model.config &&\n\t\t\t\tmodel.config.single\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.every((element) => /heading[1-6]/.test(element.trim()))\n\t\t\t) {\n\t\t\t\treturn value.title({\n\t\t\t\t\tseed: config.seed,\n\t\t\t\t\tmodel: model as prismicT.CustomTypeModelTitleField,\n\t\t\t\t\t...config.config,\n\t\t\t\t}) as ModelValue<Model>;\n\t\t\t} else {\n\t\t\t\treturn value.richText({\n\t\t\t\t\tseed: config.seed,\n\t\t\t\t\tmodel,\n\t\t\t\t\t...config.config,\n\t\t\t\t}) as ModelValue<Model>;\n\t\t\t}\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.IntegrationFields: {\n\t\t\treturn value.integrationFields({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.UID: {\n\t\t\treturn value.uid({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Group: {\n\t\t\treturn value.group({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Slices: {\n\t\t\treturn value.sliceZone({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmodel,\n\t\t\t\t...config.config,\n\t\t\t}) as ModelValue<Model>;\n\t\t}\n\t}\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { MockValueConfig, ModelValue, ModelValueMap } from \"../types\";\nimport {\n\tMockBooleanValueConfig,\n\tMockColorValueConfig,\n\tMockContentRelationshipValueConfig,\n\tMockDateValueConfig,\n\tMockEmbedValueConfig,\n\tMockGeoPointValueConfig,\n\tMockGroupValueConfig,\n\tMockImageValueConfig,\n\tMockIntegrationFieldsValueConfig,\n\tMockKeyTextValueConfig,\n\tMockLinkToMediaValueConfig,\n\tMockLinkValueConfig,\n\tMockNumberValueConfig,\n\tMockRichTextValueConfig,\n\tMockSelectValueConfig,\n\tMockSliceZoneValueConfig,\n\tMockTimestampValueConfig,\n\tMockTitleValueConfig,\n\tMockUIDValueConfig,\n} from \"../value\";\n\nimport { valueForModel } from \"./valueForModel\";\n\nconst getValueConfigType = <Model extends prismicT.CustomTypeModelField>(\n\tmodel: Model,\n): keyof ValueForModelMapConfigs => {\n\tswitch (model.type) {\n\t\tcase prismicT.CustomTypeModelFieldType.Boolean:\n\t\t\treturn \"boolean\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.Color:\n\t\t\treturn \"color\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.Date:\n\t\t\treturn \"date\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.Embed:\n\t\t\treturn \"embed\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.GeoPoint:\n\t\t\treturn \"geoPoint\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.Group:\n\t\t\treturn \"group\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.Image:\n\t\t\treturn \"image\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.Link: {\n\t\t\tswitch (model.config.select) {\n\t\t\t\tcase prismicT.CustomTypeModelLinkSelectType.Document:\n\t\t\t\t\treturn \"contentRelationship\";\n\t\t\t\tcase prismicT.CustomTypeModelLinkSelectType.Media:\n\t\t\t\t\treturn \"linkToMedia\";\n\t\t\t\tdefault:\n\t\t\t\t\treturn \"link\";\n\t\t\t}\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Number:\n\t\t\treturn \"number\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.Select:\n\t\t\treturn \"select\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.StructuredText: {\n\t\t\tif (\n\t\t\t\t\"single\" in model.config &&\n\t\t\t\tmodel.config.single\n\t\t\t\t\t.split(\",\")\n\t\t\t\t\t.every((element) => /heading{1,6}/.test(element.trim()))\n\t\t\t) {\n\t\t\t\treturn \"title\";\n\t\t\t} else {\n\t\t\t\treturn \"richText\";\n\t\t\t}\n\t\t}\n\n\t\tcase prismicT.CustomTypeModelFieldType.Text:\n\t\t\treturn \"keyText\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.Timestamp:\n\t\t\treturn \"timestamp\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.UID:\n\t\t\treturn \"uid\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.IntegrationFields:\n\t\t\treturn \"integrationFields\";\n\n\t\tcase prismicT.CustomTypeModelFieldType.Slices:\n\t\t\treturn \"sliceZone\";\n\t}\n};\n\nexport type ValueForModelMapConfigs = {\n\tboolean?: MockBooleanValueConfig;\n\tcolor?: MockColorValueConfig;\n\tcontentRelationship?: MockContentRelationshipValueConfig;\n\tdate?: MockDateValueConfig;\n\tembed?: MockEmbedValueConfig;\n\tgeoPoint?: MockGeoPointValueConfig;\n\tgroup?: MockGroupValueConfig;\n\timage?: MockImageValueConfig;\n\tintegrationFields?: MockIntegrationFieldsValueConfig;\n\tkeyText?: MockKeyTextValueConfig;\n\tlink?: MockLinkValueConfig;\n\tlinkToMedia?: MockLinkToMediaValueConfig;\n\tnumber?: MockNumberValueConfig;\n\trichText?: MockRichTextValueConfig;\n\tselect?: MockSelectValueConfig;\n\tsliceZone?: MockSliceZoneValueConfig;\n\ttimestamp?: MockTimestampValueConfig;\n\ttitle?: MockTitleValueConfig;\n\tuid?: MockUIDValueConfig;\n};\n\ntype ValueForModelMapConfig<\n\tModelMap extends Record<string, prismicT.CustomTypeModelField>,\n> = {\n\tmap: ModelMap;\n\tconfigs?: ValueForModelMapConfigs;\n} & Omit<MockValueConfig, \"model\">;\n\nexport const valueForModelMap = <\n\tModelMap extends Record<string, prismicT.CustomTypeModelField>,\n>(\n\tconfig: ValueForModelMapConfig<ModelMap>,\n): ModelValueMap<ModelMap> => {\n\tconst result = {} as ModelValueMap<ModelMap>;\n\n\tfor (const fieldId in config.map) {\n\t\tconst fieldModel = config.map[fieldId];\n\t\tconst fieldConfigType = getValueConfigType(fieldModel);\n\t\tconst fieldConfig = config.configs?.[fieldConfigType];\n\n\t\tresult[fieldId] = valueForModel({\n\t\t\tseed: config.seed,\n\t\t\tmodel: fieldModel as prismicT.CustomTypeModelField,\n\t\t\tconfig: fieldConfig,\n\t\t}) as ModelValue<typeof fieldModel>;\n\t}\n\n\treturn result;\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockModelConfig } from \"../types\";\n\nexport type MockContentRelationshipModelConfig<\n\tCustomTypeIDs extends string = string,\n\tTags extends string = string,\n> = {\n\tcustomTypeIDs?: readonly CustomTypeIDs[];\n\ttags?: readonly Tags[];\n} & MockModelConfig;\n\nexport const contentRelationship = <\n\tCustomTypeIDs extends string,\n\tTags extends string,\n>(\n\tconfig: MockContentRelationshipModelConfig<CustomTypeIDs, Tags> = {},\n): prismicT.CustomTypeModelContentRelationshipField<CustomTypeIDs, Tags> => {\n\tconst faker = createFaker(config.seed);\n\n\treturn {\n\t\ttype: prismicT.CustomTypeModelFieldType.Link,\n\t\tconfig: {\n\t\t\tlabel: changeCase.capitalCase(faker.company.bsNoun()),\n\t\t\tplaceholder: changeCase.sentenceCase(faker.lorem.words(3)),\n\t\t\tselect: prismicT.CustomTypeModelLinkSelectType.Document,\n\t\t\tcustomtypes: config.customTypeIDs,\n\t\t\ttags: config.tags,\n\t\t},\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockModelConfig } from \"../types\";\n\ntype MockCustomTypeModelConfig<\n\tDefinition extends\n\t\t| prismicT.CustomTypeModelTab\n\t\t| prismicT.CustomTypeModelDefinition =\n\t\t| prismicT.CustomTypeModelTab\n\t\t| prismicT.CustomTypeModelDefinition,\n> = {\n\tid?: string;\n\tlabel?: string;\n\tstatus?: boolean;\n\trepeatable?: boolean;\n} & (\n\t| {\n\t\t\tfields?: Definition;\n\t\t\ttabs?: never;\n\t }\n\t| {\n\t\t\ttabs?: Definition;\n\t\t\tfields?: never;\n\t }\n) &\n\tMockModelConfig;\n\ntype MockCustomTypeModel<\n\tDefinition extends\n\t\t| prismicT.CustomTypeModelTab\n\t\t| prismicT.CustomTypeModelDefinition,\n> = Definition extends prismicT.CustomTypeModelTab\n\t? prismicT.CustomTypeModel<string, Record<\"Main\", Definition>>\n\t: Definition extends prismicT.CustomTypeModelDefinition\n\t? prismicT.CustomTypeModel<string, Definition>\n\t: never;\n\nexport const customType = <\n\tDefinition extends\n\t\t| prismicT.CustomTypeModelTab\n\t\t| prismicT.CustomTypeModelDefinition,\n>(\n\tconfig: MockCustomTypeModelConfig<Definition> = {},\n): MockCustomTypeModel<Definition> => {\n\tconst faker = createFaker(config.seed);\n\n\tlet label: string =\n\t\tconfig.label || changeCase.capitalCase(faker.company.bsNoun());\n\tlet id: string = config.id || changeCase.snakeCase(label);\n\n\tif (config.id && !config.label) {\n\t\tlabel = changeCase.capitalCase(config.id);\n\t} else if (config.label && !config.label) {\n\t\tid = changeCase.snakeCase(config.label);\n\t}\n\n\tlet json = {} as MockCustomTypeModel<Definition>[\"json\"];\n\n\tif (\"fields\" in config && config.fields) {\n\t\tjson = { Main: config.fields } as typeof json;\n\t} else if (\"tabs\" in config && config.tabs) {\n\t\tjson = config.tabs as typeof json;\n\t}\n\n\treturn {\n\t\tid,\n\t\tlabel,\n\t\tstatus: config.status ?? faker.datatype.boolean(),\n\t\trepeatable: config.repeatable ?? faker.datatype.boolean(),\n\t\tjson,\n\t} as MockCustomTypeModel<Definition>;\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { GroupFieldModelMap, MockModelConfig } from \"../types\";\n\ntype MockGroupModelConfig<Fields extends GroupFieldModelMap> = {\n\tfields?: Fields;\n} & MockModelConfig;\n\nexport const group = <Fields extends GroupFieldModelMap>(\n\tconfig: MockGroupModelConfig<Fields> = {},\n): prismicT.CustomTypeModelGroupField<Fields> => {\n\tconst faker = createFaker(config.seed);\n\n\treturn {\n\t\ttype: prismicT.CustomTypeModelFieldType.Group,\n\t\tconfig: {\n\t\t\tlabel: changeCase.capitalCase(faker.company.bsNoun()),\n\t\t\tfields: config.fields || ({} as Fields),\n\t\t},\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockModelConfig } from \"../types\";\n\ntype MockImageModelConfig<ThumbnailNames extends string = string> = {\n\twithConstraint?: boolean;\n\tthumbnailNames?: readonly ThumbnailNames[];\n} & MockModelConfig;\n\nexport const image = <ThumbnailNames extends string = string>(\n\tconfig: MockImageModelConfig<ThumbnailNames> = {},\n): prismicT.CustomTypeModelImageField<ThumbnailNames> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst thumbnails = (config.thumbnailNames || []).map((name) => {\n\t\treturn {\n\t\t\tname,\n\t\t\twidth: faker.datatype.number({ min: 500, max: 2000 }),\n\t\t\theight: faker.datatype.number({ min: 500, max: 2000 }),\n\t\t};\n\t});\n\n\treturn {\n\t\ttype: prismicT.CustomTypeModelFieldType.Image,\n\t\tconfig: {\n\t\t\tlabel: changeCase.capitalCase(faker.company.bsNoun()),\n\t\t\tconstraint: {\n\t\t\t\twidth: config.withConstraint\n\t\t\t\t\t? faker.datatype.number({ min: 500, max: 2000 })\n\t\t\t\t\t: null,\n\t\t\t\theight: config.withConstraint\n\t\t\t\t\t? faker.datatype.number({ min: 500, max: 2000 })\n\t\t\t\t\t: null,\n\t\t\t},\n\t\t\tthumbnails,\n\t\t},\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockModelConfig } from \"../types\";\n\ntype MockLinkModel<AllowTargetBlank extends boolean = boolean> =\n\tprismicT.CustomTypeModelLinkField & {\n\t\tconfig: AllowTargetBlank extends true\n\t\t\t? {\n\t\t\t\t\tallowTargetBlank: true;\n\t\t\t }\n\t\t\t: {\n\t\t\t\t\tallowTargetBlank?: undefined;\n\t\t\t };\n\t};\n\nexport type MockLinkModelConfig<AllowTargetBlank extends boolean = boolean> = {\n\tallowTargetBlank?: AllowTargetBlank;\n} & MockModelConfig;\n\nexport const link = <AllowTargetBlank extends boolean = boolean>(\n\tconfig: MockLinkModelConfig<AllowTargetBlank> = {},\n): MockLinkModel<AllowTargetBlank> => {\n\tconst faker = createFaker(config.seed);\n\n\treturn {\n\t\ttype: prismicT.CustomTypeModelFieldType.Link,\n\t\tconfig: {\n\t\t\tlabel: changeCase.capitalCase(faker.company.bsNoun()),\n\t\t\tplaceholder: changeCase.sentenceCase(faker.lorem.words(3)),\n\t\t\tselect: null,\n\t\t\tallowTargetBlank:\n\t\t\t\t(\"allowTargetBlank\" in config\n\t\t\t\t\t? config.allowTargetBlank\n\t\t\t\t\t: faker.datatype.boolean()) || undefined,\n\t\t},\n\t} as MockLinkModel<AllowTargetBlank>;\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockModelConfig } from \"../types\";\n\nexport type MockRichTextModelConfig<\n\tWithMultipleBlocks extends boolean = boolean,\n> = {\n\twithMultipleBlocks?: WithMultipleBlocks;\n} & MockModelConfig;\n\nexport const richText = <WithMultipleBlocks extends boolean = boolean>(\n\tconfig: MockRichTextModelConfig<WithMultipleBlocks> = {},\n): WithMultipleBlocks extends true\n\t? prismicT.CustomTypeModelRichTextMultiField\n\t: prismicT.CustomTypeModelRichTextSingleField => {\n\tconst faker = createFaker(config.seed);\n\n\tconst blockTypes = faker.random\n\t\t.arrayElements([\n\t\t\tprismicT.RichTextNodeType.heading1,\n\t\t\tprismicT.RichTextNodeType.heading2,\n\t\t\tprismicT.RichTextNodeType.heading3,\n\t\t\tprismicT.RichTextNodeType.heading4,\n\t\t\tprismicT.RichTextNodeType.heading5,\n\t\t\tprismicT.RichTextNodeType.heading6,\n\t\t\tprismicT.RichTextNodeType.paragraph,\n\t\t\tprismicT.RichTextNodeType.preformatted,\n\t\t\tprismicT.RichTextNodeType.strong,\n\t\t\tprismicT.RichTextNodeType.em,\n\t\t\tprismicT.RichTextNodeType.listItem,\n\t\t\tprismicT.RichTextNodeType.oListItem,\n\t\t\tprismicT.RichTextNodeType.image,\n\t\t\tprismicT.RichTextNodeType.embed,\n\t\t\tprismicT.RichTextNodeType.hyperlink,\n\t\t])\n\t\t.join(\",\");\n\n\tconst blockTypeConfig =\n\t\tconfig.withMultipleBlocks ?? faker.datatype.boolean()\n\t\t\t? { multi: blockTypes }\n\t\t\t: { single: blockTypes };\n\n\treturn {\n\t\ttype: prismicT.CustomTypeModelFieldType.StructuredText,\n\t\tconfig: {\n\t\t\tlabel: changeCase.capitalCase(faker.company.bsNoun()),\n\t\t\tplaceholder: changeCase.sentenceCase(faker.lorem.words(3)),\n\t\t\tallowTargetBlank: faker.datatype.boolean() ? true : undefined,\n\t\t\t...blockTypeConfig,\n\t\t},\n\t} as WithMultipleBlocks extends true\n\t\t? prismicT.CustomTypeModelRichTextMultiField\n\t\t: prismicT.CustomTypeModelRichTextSingleField;\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockModelConfig } from \"../types\";\n\ntype MockSelectModelConfig<\n\tOption extends string = string,\n\tDefaultOption extends Option = Option,\n> = {\n\toptions?: Option[];\n\tdefaultValue?: DefaultOption;\n} & MockModelConfig;\n\nexport const select = <Option extends string, DefaultOption extends Option>(\n\tconfig: MockSelectModelConfig<Option, DefaultOption> = {},\n): prismicT.CustomTypeModelSelectField<Option, DefaultOption> => {\n\tconst faker = createFaker(config.seed);\n\n\treturn {\n\t\ttype: prismicT.CustomTypeModelFieldType.Select,\n\t\tconfig: {\n\t\t\tlabel: changeCase.capitalCase(faker.company.bsNoun()),\n\t\t\tplaceholder: changeCase.sentenceCase(faker.lorem.words(3)),\n\t\t\toptions: config.options || [],\n\t\t\tdefault_value: config.defaultValue || undefined,\n\t\t},\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockModelConfig } from \"../types\";\n\ntype MockSharedSliceModelConfig<\n\tVariation extends prismicT.SharedSliceModelVariation,\n> = {\n\tid?: string;\n\tname?: string;\n\tvariations?: Variation[];\n} & MockModelConfig;\n\nexport const sharedSlice = <\n\tVariation extends prismicT.SharedSliceModelVariation,\n>(\n\tconfig: MockSharedSliceModelConfig<Variation> = {},\n): prismicT.SharedSliceModel<string, Variation> => {\n\tconst faker = createFaker(config.seed);\n\n\tlet name: string =\n\t\tconfig.name || changeCase.capitalCase(faker.company.bsNoun());\n\tlet id: string = config.id || changeCase.snakeCase(name);\n\n\tif (config.id && !config.name) {\n\t\tname = changeCase.pascalCase(config.id);\n\t} else if (config.name && !config.name) {\n\t\tid = changeCase.snakeCase(config.name);\n\t}\n\n\treturn {\n\t\ttype: prismicT.CustomTypeModelSliceType.SharedSlice,\n\t\tid,\n\t\tname,\n\t\tdescription: faker.lorem.sentence(),\n\t\tvariations: config.variations || ([] as Variation[]),\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { GroupFieldModelMap, MockModelConfig } from \"../types\";\n\nexport type MockSharedSliceVariationModelConfig<\n\tID extends string = string,\n\tPrimaryFields extends GroupFieldModelMap = GroupFieldModelMap,\n\tItemsFields extends GroupFieldModelMap = GroupFieldModelMap,\n> = {\n\tid?: ID;\n\tname?: string;\n\tprimaryFields?: PrimaryFields;\n\titemsFields?: ItemsFields;\n} & MockModelConfig;\n\nexport const sharedSliceVariation = <\n\tID extends string,\n\tPrimaryFields extends GroupFieldModelMap,\n\tItemsFields extends GroupFieldModelMap,\n>(\n\tconfig: MockSharedSliceVariationModelConfig<\n\t\tID,\n\t\tPrimaryFields,\n\t\tItemsFields\n\t> = {},\n): prismicT.SharedSliceModelVariation<ID, PrimaryFields, ItemsFields> => {\n\tconst faker = createFaker(config.seed);\n\n\tlet name: string =\n\t\tconfig.name || changeCase.capitalCase(faker.company.bsNoun());\n\tlet id: ID = config.id || (changeCase.snakeCase(name) as ID);\n\n\tif (config.id && !config.name) {\n\t\tname = changeCase.pascalCase(config.id);\n\t} else if (config.name && !config.name) {\n\t\tid = changeCase.snakeCase(config.name) as ID;\n\t}\n\n\treturn {\n\t\tid,\n\t\tname,\n\t\tdescription: faker.lorem.sentence(),\n\t\tdocURL: faker.internet.url(),\n\t\tversion: faker.git.shortSha(),\n\t\tprimary: config.primaryFields || ({} as PrimaryFields),\n\t\titems: config.itemsFields || ({} as ItemsFields),\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { GroupFieldModelMap, MockModelConfig } from \"../types\";\n\ntype MockSliceModelConfig<\n\tNonRepeatFields extends GroupFieldModelMap = GroupFieldModelMap,\n\tRepeatFields extends GroupFieldModelMap = GroupFieldModelMap,\n> = {\n\tnonRepeatFields?: NonRepeatFields;\n\trepeatFields?: RepeatFields;\n} & MockModelConfig;\n\nexport const slice = <\n\tNonRepeatFields extends GroupFieldModelMap,\n\tRepeatFields extends GroupFieldModelMap,\n>(\n\tconfig: MockSliceModelConfig<NonRepeatFields, RepeatFields> = {},\n): prismicT.CustomTypeModelSlice<NonRepeatFields, RepeatFields> => {\n\tconst faker = createFaker(config.seed);\n\n\treturn {\n\t\ttype: prismicT.CustomTypeModelSliceType.Slice,\n\t\ticon: changeCase.snakeCase(faker.company.bsNoun()),\n\t\tdisplay: faker.datatype.boolean()\n\t\t\t? prismicT.CustomTypeModelSliceDisplay.Grid\n\t\t\t: prismicT.CustomTypeModelSliceDisplay.List,\n\t\tfieldset: changeCase.capitalCase(faker.lorem.words()),\n\t\tdescription: faker.lorem.sentence(),\n\t\trepeat: config.repeatFields || ({} as RepeatFields),\n\t\t\"non-repeat\": config.nonRepeatFields || ({} as NonRepeatFields),\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { MockModelConfig } from \"../types\";\n\ntype MockSliceZoneModelConfig<\n\tSlices extends Record<\n\t\tstring,\n\t\tprismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice\n\t> = Record<\n\t\tstring,\n\t\tprismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice\n\t>,\n> = {\n\tchoices?: Slices;\n} & MockModelConfig;\n\nexport const sliceZone = <\n\tSlices extends Record<\n\t\tstring,\n\t\tprismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice\n\t>,\n>(\n\tconfig: MockSliceZoneModelConfig<Slices> = {},\n): prismicT.CustomTypeModelSliceZoneField<Slices> => {\n\tconst labels =\n\t\t{} as prismicT.CustomTypeModelSliceZoneField<Slices>[\"config\"][\"labels\"];\n\n\tfor (const choiceId in config.choices) {\n\t\tconst choice = config.choices[choiceId];\n\n\t\tif (choice.type === prismicT.CustomTypeModelSliceType.Slice) {\n\t\t\tlabels[choiceId as unknown as keyof typeof labels] = [];\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: prismicT.CustomTypeModelFieldType.Slices,\n\t\tfieldset: \"Slice zone\",\n\t\tconfig: {\n\t\t\tlabels,\n\t\t\tchoices: config.choices || ({} as Slices),\n\t\t},\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockModelConfig } from \"../types\";\n\nexport type MockTitleModelConfig = MockModelConfig;\n\nexport const title = (\n\tconfig: MockTitleModelConfig = {},\n): prismicT.CustomTypeModelTitleField => {\n\tconst faker = createFaker(config.seed);\n\n\tconst single = faker.random\n\t\t.arrayElements([\n\t\t\t\"heading1\",\n\t\t\t\"heading2\",\n\t\t\t\"heading3\",\n\t\t\t\"heading4\",\n\t\t\t\"heading5\",\n\t\t\t\"heading6\",\n\t\t])\n\t\t.join(\",\");\n\n\treturn {\n\t\ttype: prismicT.CustomTypeModelFieldType.StructuredText,\n\t\tconfig: {\n\t\t\tlabel: changeCase.capitalCase(faker.company.bsNoun()),\n\t\t\tplaceholder: changeCase.sentenceCase(faker.lorem.words(3)),\n\t\t\tsingle,\n\t\t\tallowTargetBlank: faker.datatype.boolean() ? true : undefined,\n\t\t},\n\t};\n};\n","import * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockModelConfig } from \"../types\";\n\ntype GenerateFieldIdConfig = Pick<MockModelConfig, \"seed\">;\n\nexport const generateFieldId = (config: GenerateFieldIdConfig): string => {\n\tconst faker = createFaker(config.seed);\n\n\treturn changeCase.snakeCase(\n\t\tfaker.lorem.words(faker.datatype.number({ min: 1, max: 3 })),\n\t);\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nexport type MockTimestampValueConfig<\n\tModel extends prismicT.CustomTypeModelTimestampField = prismicT.CustomTypeModelTimestampField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = {\n\tafter?: Date;\n\tbefore?: Date;\n} & MockValueConfig<Model> &\n\tMockValueStateConfig<State>;\n\nexport type MockTimestampValue<\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.TimestampField<State>;\n\nexport const timestamp = <\n\tModel extends prismicT.CustomTypeModelTimestampField = prismicT.CustomTypeModelTimestampField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockTimestampValueConfig<Model, State> = {},\n): MockTimestampValue<State> => {\n\tconst faker = createFaker(config.seed);\n\n\t// Faker seems to have problems accepting parameters for `faker.date.between`\n\t// if the parameters are too precise. We can get around this by only using\n\t// generated dates, not timestamps.\n\tconst after =\n\t\tconfig.after ||\n\t\tfaker.date.past(20, new Date(\"2021-03-07\")).toISOString().split(\"T\")[0];\n\tconst before =\n\t\tconfig.before ||\n\t\tfaker.date.future(20, new Date(\"2021-03-07\")).toISOString().split(\"T\")[0];\n\n\treturn (\n\t\tconfig.state === \"empty\"\n\t\t\t? null\n\t\t\t: faker.date.between(after, before).toISOString()\n\t) as MockTimestampValue<State>;\n};\n","import * as prismicT from \"@prismicio/types\";\n\ntype BuildEmbedFieldConfig<Document extends prismicT.PrismicDocument> = {\n\tdocument: Document;\n};\n\nexport const buildAlternativeLanguage = <\n\tDocument extends prismicT.PrismicDocument,\n>(\n\tconfig: BuildEmbedFieldConfig<Document>,\n): prismicT.AlternateLanguage<Document[\"type\"], Document[\"lang\"]> => {\n\treturn {\n\t\tid: config.document.id,\n\t\ttype: config.document.type,\n\t\tlang: config.document.lang,\n\t\tuid: config.document.uid || undefined,\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\nimport { generateTags } from \"../lib/generateTags\";\nimport {\n\tvalueForModelMap,\n\tValueForModelMapConfigs,\n} from \"../lib/valueForModelMap\";\n\nimport { MockValueConfig, ModelValue } from \"../types\";\n\nimport * as modelGen from \"../model\";\n\nimport { timestamp } from \"./timestamp\";\nimport { buildAlternativeLanguage } from \"../lib/buildAlternativeLanguage\";\n\nexport type MockCustomTypeValueConfig<\n\tModel extends prismicT.CustomTypeModel = prismicT.CustomTypeModel,\n> = {\n\twithURL?: boolean;\n\talternateLanguages?: prismicT.PrismicDocument[];\n\tconfigs?: ValueForModelMapConfigs;\n} & MockValueConfig<Model>;\n\nexport const customType = <\n\tModel extends prismicT.CustomTypeModel = prismicT.CustomTypeModel,\n>(\n\tconfig: MockCustomTypeValueConfig<Model> = {},\n): ModelValue<Model> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst model = config.model || modelGen.customType({ seed: config.seed });\n\n\tconst fieldModelsMap = Object.assign(\n\t\t{},\n\t\t...Object.values(model.json),\n\t) as prismicT.CustomTypeModelTab;\n\n\tconst dataFieldModelsMap: prismicT.CustomTypeModelTab = {};\n\tfor (const key in fieldModelsMap) {\n\t\tconst fieldModel = fieldModelsMap[key];\n\n\t\t// UID fields must be filtered out since they are not represented in\n\t\t// the document's `data` field.\n\t\tif (fieldModel.type !== prismicT.CustomTypeModelFieldType.UID) {\n\t\t\tdataFieldModelsMap[key] = fieldModel;\n\t\t}\n\t}\n\n\tconst hasUID = Object.values(fieldModelsMap).some(\n\t\t(fieldModel) => fieldModel.type === prismicT.CustomTypeModelFieldType.UID,\n\t);\n\n\tconst withURL = config.withURL ?? true;\n\n\tconst alternateLanguages = (config.alternateLanguages || []).map(\n\t\t(alternateLanguageDocument) =>\n\t\t\tbuildAlternativeLanguage({\n\t\t\t\tdocument: alternateLanguageDocument,\n\t\t\t}),\n\t);\n\n\treturn {\n\t\ttype: model.id,\n\t\tid: faker.git.shortSha(),\n\t\tuid: hasUID ? changeCase.snakeCase(faker.lorem.words(2)) : null,\n\t\turl: withURL ? faker.internet.url() : null,\n\t\thref: faker.internet.url(),\n\t\tlang: faker.lorem.word(),\n\t\ttags: generateTags({ seed: config.seed }),\n\t\tslugs: [] as prismicT.PrismicDocument[\"slugs\"],\n\t\tlinked_documents: [] as prismicT.PrismicDocument[\"linked_documents\"],\n\t\talternate_languages: alternateLanguages,\n\t\tfirst_publication_date: timestamp({ seed: config.seed }),\n\t\tlast_publication_date: timestamp({ seed: config.seed }),\n\t\tdata: valueForModelMap({\n\t\t\tseed: config.seed,\n\t\t\tmap: dataFieldModelsMap,\n\t\t\tconfigs: config.configs,\n\t\t}),\n\t} as ModelValue<Model>;\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nexport type MockColorValueConfig<\n\tModel extends prismicT.CustomTypeModelColorField = prismicT.CustomTypeModelColorField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = MockValueConfig<Model> & MockValueStateConfig<State>;\n\nexport type MockColorValue<\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.ColorField<State>;\n\nexport const color = <\n\tModel extends prismicT.CustomTypeModelColorField = prismicT.CustomTypeModelColorField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockColorValueConfig<Model, State> = {},\n): MockColorValue<State> => {\n\tconst faker = createFaker(config.seed);\n\n\treturn (\n\t\tconfig.state === \"empty\" ? null : faker.internet.color().toUpperCase()\n\t) as MockColorValue<State>;\n};\n","import * as prismicT from \"@prismicio/types\";\n\ntype BuildEmbedFieldConfig<Document extends prismicT.PrismicDocument> = {\n\tdocument: Document;\n};\n\nexport const buildContentRelationshipField = <\n\tDocument extends prismicT.PrismicDocument,\n>(\n\tconfig: BuildEmbedFieldConfig<Document>,\n): prismicT.RelationField<\n\tDocument[\"type\"],\n\tDocument[\"lang\"],\n\tnever,\n\t\"filled\"\n> => {\n\treturn {\n\t\tlink_type: prismicT.LinkType.Document,\n\t\tid: config.document.id,\n\t\tuid: config.document.uid || undefined,\n\t\ttype: config.document.type,\n\t\ttags: config.document.tags,\n\t\tlang: config.document.lang,\n\t\turl: config.document.url || undefined,\n\t\tslug: config.document.slugs[0],\n\t\tisBroken: false,\n\t};\n};\n","import * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockModelConfig } from \"../types\";\n\ntype GenerateFieldIdConfig = Pick<MockModelConfig, \"seed\">;\n\nexport const generateCustomTypeId = (config: GenerateFieldIdConfig): string => {\n\tconst faker = createFaker(config.seed);\n\n\treturn changeCase.snakeCase(faker.company.bsNoun());\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { buildContentRelationshipField } from \"../lib/buildContentRelationshipField\";\nimport { createFaker } from \"../lib/createFaker\";\nimport { generateCustomTypeId } from \"../lib/generateCustomTypeId\";\nimport { generateTags } from \"../lib/generateTags\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nimport * as modelGen from \"../model\";\n\nimport { document as documentGen } from \"./document\";\n\nexport type MockContentRelationshipValueConfig<\n\tModel extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = {\n\t/**\n\t * A list of potential documents to which the field can be linked.\n\t */\n\tlinkableDocuments?: prismicT.PrismicDocument[];\n} & MockValueConfig<Model> &\n\tMockValueStateConfig<State>;\n\ntype MockContentRelationshipValue<\n\tModel extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.RelationField<\n\tModel[\"config\"][\"customtypes\"],\n\tstring,\n\tnever,\n\tState\n>;\n\nexport const contentRelationship = <\n\tModel extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockContentRelationshipValueConfig<Model, State> = {},\n): MockContentRelationshipValue<Model, State> => {\n\tconst faker = createFaker(config.seed);\n\n\tif (config.state === \"empty\") {\n\t\treturn {\n\t\t\tlink_type: prismicT.LinkType.Document,\n\t\t} as MockContentRelationshipValue<Model, State>;\n\t} else {\n\t\tconst model =\n\t\t\tconfig.model || modelGen.contentRelationship({ seed: config.seed });\n\n\t\tconst linkableDocuments = config.linkableDocuments\n\t\t\t? config.linkableDocuments.filter(\n\t\t\t\t\t(\n\t\t\t\t\t\tdocument,\n\t\t\t\t\t): document is prismicT.PrismicDocument<\n\t\t\t\t\t\tnever,\n\t\t\t\t\t\tNonNullable<Model[\"config\"][\"customtypes\"]>[number]\n\t\t\t\t\t> => {\n\t\t\t\t\t\tlet shouldKeep = true;\n\n\t\t\t\t\t\tif (model.config.customtypes) {\n\t\t\t\t\t\t\tshouldKeep =\n\t\t\t\t\t\t\t\tshouldKeep && model.config.customtypes.includes(document.type);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (model.config.tags) {\n\t\t\t\t\t\t\tshouldKeep =\n\t\t\t\t\t\t\t\tshouldKeep &&\n\t\t\t\t\t\t\t\tmodel.config.tags.some((tag) => document.tags.includes(tag));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn shouldKeep;\n\t\t\t\t\t},\n\t\t\t )\n\t\t\t: [\n\t\t\t\t\t{\n\t\t\t\t\t\t...documentGen({ seed: config.seed }),\n\t\t\t\t\t\ttype: model.config.customtypes\n\t\t\t\t\t\t\t? faker.random.arrayElement(model.config.customtypes)\n\t\t\t\t\t\t\t: generateCustomTypeId({ seed: config.seed }),\n\t\t\t\t\t\ttags: model.config.tags\n\t\t\t\t\t\t\t? faker.random.arrayElements(model.config.tags)\n\t\t\t\t\t\t\t: generateTags({ seed: config.seed }),\n\t\t\t\t\t} as prismicT.PrismicDocument<\n\t\t\t\t\t\tnever,\n\t\t\t\t\t\tNonNullable<Model[\"config\"][\"customtypes\"]>[number]\n\t\t\t\t\t>,\n\t\t\t ];\n\n\t\tconst document = faker.random.arrayElement(linkableDocuments);\n\n\t\tif (!document) {\n\t\t\tthrow new Error(\"A linkable document could not be found.\");\n\t\t}\n\n\t\treturn buildContentRelationshipField({\n\t\t\tdocument,\n\t\t}) as unknown as MockContentRelationshipValue<Model, State>;\n\t}\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nimport { MockTimestampValueConfig, timestamp } from \"./timestamp\";\n\nexport type MockDateValueConfig<\n\tModel extends prismicT.CustomTypeModelDateField = prismicT.CustomTypeModelDateField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = Pick<MockTimestampValueConfig, \"after\" | \"before\"> &\n\tMockValueConfig<Model> &\n\tMockValueStateConfig<State>;\n\nexport type MockDateValue<\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.DateField<State>;\n\nexport const date = <\n\tModel extends prismicT.CustomTypeModelDateField = prismicT.CustomTypeModelDateField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockDateValueConfig<Model, State> = {},\n): MockDateValue<State> => {\n\treturn (\n\t\tconfig.state === \"empty\"\n\t\t\t? null\n\t\t\t: timestamp({\n\t\t\t\t\tseed: config.seed,\n\t\t\t\t\tafter: config.after,\n\t\t\t\t\tbefore: config.before,\n\t\t\t\t\tstate: \"filled\",\n\t\t\t }).split(\"T\")[0]\n\t) as MockDateValue<State>;\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockEmbedData, MockValueConfig } from \"../types\";\n\ntype BuildEmbedFieldConfig = {\n\tembedData: MockEmbedData;\n} & Pick<MockValueConfig, \"seed\">;\n\nexport const buildEmbedField = (\n\tconfig: BuildEmbedFieldConfig,\n): prismicT.EmbedField<false> => {\n\tconst faker = createFaker(config.seed);\n\n\treturn {\n\t\ttype: faker.datatype.boolean()\n\t\t\t? prismicT.EmbedType.Link\n\t\t\t: prismicT.EmbedType.Rich,\n\t\turl: config.embedData.url,\n\t\thtml: config.embedData.html,\n\t\ttitle: changeCase.capitalCase(faker.lorem.words(3)),\n\t\tversion: faker.datatype\n\t\t\t.number({ min: 1, max: 3, precision: 10 })\n\t\t\t.toString(),\n\t\tcache_age: faker.datatype.number(),\n\t\tembed_url: config.embedData.embed_url,\n\t\tauthor_url: faker.internet.url(),\n\t\tauthor_name: faker.company.companyName(),\n\t\tprovider_name: faker.company.companyName(),\n\t\tthumbnail_width: config.embedData.thumbnail_width,\n\t\tthumbnail_height: config.embedData.thumbnail_height,\n\t\tthumbnail_url: config.embedData.thumbnail_url,\n\t\twidth: faker.datatype.number({ min: 200, max: 500 }),\n\t\theight: faker.datatype.number({ min: 200, max: 500 }),\n\t};\n};\n","import { createFaker } from \"../lib/createFaker\";\n\nimport { MockEmbedData, MockValueConfig } from \"../types\";\n\nconst dataSet: MockEmbedData[] = [\n\t{\n\t\turl: \"https://www.youtube.com/watch?v=fiOwHYFkUz0\",\n\t\tembed_url: \"https://www.youtube.com/embed/fiOwHYFkUz0\",\n\t\tthumbnail_url: \"https://i.ytimg.com/vi/fiOwHYFkUz0/hqdefault.jpg\",\n\t\tthumbnail_height: 360,\n\t\tthumbnail_width: 480,\n\t\thtml: '<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>',\n\t},\n\t{\n\t\turl: \"https://www.youtube.com/watch?v=c-ATzcy6VkI\",\n\t\tembed_url: \"https://www.youtube.com/embed/c-ATzcy6VkI\",\n\t\tthumbnail_url: \"https://i.ytimg.com/vi/c-ATzcy6VkI/hqdefault.jpg\",\n\t\tthumbnail_height: 360,\n\t\tthumbnail_width: 480,\n\t\thtml: '<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>',\n\t},\n\t{\n\t\turl: \"https://www.youtube.com/watch?v=iewZXv94XGY\",\n\t\tembed_url: \"https://www.youtube.com/watch?v=fiOwHYFkUz0\",\n\t\tthumbnail_url: \"https://i.ytimg.com/vi/iewZXv94XGY/hqdefault.jpg\",\n\t\tthumbnail_height: 360,\n\t\tthumbnail_width: 480,\n\t\thtml: '<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>',\n\t},\n\t{\n\t\turl: \"https://twitter.com/prismicio/status/1356293316158095361\",\n\t\tembed_url: \"https://www.youtube.com/watch?v=iewZXv94XGY\",\n\t\tthumbnail_url: null,\n\t\tthumbnail_height: null,\n\t\tthumbnail_width: null,\n\t\thtml: '<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',\n\t},\n\t{\n\t\turl: \"https://twitter.com/timbenniks/status/1304146886832594944\",\n\t\tthumbnail_url: null,\n\t\tthumbnail_width: null,\n\t\tthumbnail_height: null,\n\t\tembed_url: \"https://twitter.com/timbenniks/status/1304146886832594944\",\n\t\thtml: '<blockquote class=\"twitter-tweet\"><p lang=\"en\" dir=\"ltr\">I’ve 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’m 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',\n\t},\n\t{\n\t\turl: \"https://twitter.com/prismicio/status/1354112310252630016\",\n\t\tthumbnail_url: null,\n\t\tthumbnail_width: null,\n\t\tthumbnail_height: null,\n\t\tembed_url: \"https://twitter.com/prismicio/status/1354112310252630016\",\n\t\thtml: '<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👇<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👀 <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',\n\t},\n\t{\n\t\turl: \"https://twitter.com/prismicio/status/1354835716430319617\",\n\t\tthumbnail_url: null,\n\t\tthumbnail_width: null,\n\t\tthumbnail_height: null,\n\t\tembed_url: \"https://twitter.com/prismicio/status/1354835716430319617\",\n\t\thtml: '<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',\n\t},\n];\ntype GetMockEmbedDataConfig = Pick<MockValueConfig, \"seed\">;\n\nexport const getMockEmbedData = (\n\tconfig: GetMockEmbedDataConfig,\n): MockEmbedData => {\n\tconst faker = createFaker(config.seed);\n\n\treturn faker.random.arrayElement(dataSet);\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { buildEmbedField } from \"../lib/buildEmbedField\";\nimport { getMockEmbedData } from \"../lib/getMockEmbedData\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nexport type MockEmbedValueConfig<\n\tModel extends prismicT.CustomTypeModelEmbedField = prismicT.CustomTypeModelEmbedField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = MockValueConfig<Model> & MockValueStateConfig<State>;\n\nexport type MockEmbedValue<\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.EmbedField<prismicT.AnyOEmbed & prismicT.OEmbedExtra, State>;\n\nexport const embed = <\n\tModel extends prismicT.CustomTypeModelEmbedField = prismicT.CustomTypeModelEmbedField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockEmbedValueConfig<Model, State> = {},\n): MockEmbedValue<State> => {\n\tconst embedData = getMockEmbedData({ seed: config.seed });\n\n\treturn (\n\t\tconfig.state === \"empty\"\n\t\t\t? {}\n\t\t\t: buildEmbedField({ seed: config.seed, embedData })\n\t) as MockEmbedValue<State>;\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nexport type MockGeoPointValueConfig<\n\tModel extends prismicT.CustomTypeModelGeoPointField = prismicT.CustomTypeModelGeoPointField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = MockValueConfig<Model> & MockValueStateConfig<State>;\n\nexport type MockGeoPointValue<\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.GeoPointField<State>;\n\nexport const geoPoint = <\n\tModel extends prismicT.CustomTypeModelGeoPointField = prismicT.CustomTypeModelGeoPointField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockGeoPointValueConfig<Model, State> = {},\n): MockGeoPointValue<State> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst coordinates = faker.address.nearbyGPSCoordinate();\n\n\treturn (\n\t\tconfig.state === \"empty\"\n\t\t\t? {}\n\t\t\t: {\n\t\t\t\t\tlongitude: Number.parseFloat(coordinates[0]),\n\t\t\t\t\tlatitude: Number.parseFloat(coordinates[1]),\n\t\t\t }\n\t) as MockGeoPointValue<State>;\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\nimport {\n\tvalueForModelMap,\n\tValueForModelMapConfigs,\n} from \"../lib/valueForModelMap\";\n\nimport { MockValueConfig, ModelValue } from \"../types\";\n\nimport * as modelGen from \"../model\";\n\nexport type MockGroupValueConfig<\n\tModel extends prismicT.CustomTypeModelGroupField = prismicT.CustomTypeModelGroupField,\n> = {\n\titemsCount?: number;\n\tconfigs?: ValueForModelMapConfigs;\n} & MockValueConfig<Model>;\n\nexport const group = <\n\tModel extends prismicT.CustomTypeModelGroupField = prismicT.CustomTypeModelGroupField,\n>(\n\tconfig: MockGroupValueConfig<Model> = {},\n): ModelValue<Model> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst model = config.model || modelGen.group({ seed: config.seed });\n\n\tconst itemsCount =\n\t\tconfig.itemsCount ??\n\t\tfaker.datatype.number({\n\t\t\tmin: 1,\n\t\t\tmax: 6,\n\t\t});\n\n\treturn Array(itemsCount)\n\t\t.fill(undefined)\n\t\t.map(() => {\n\t\t\treturn valueForModelMap({\n\t\t\t\tseed: config.seed,\n\t\t\t\tmap: model.config.fields,\n\t\t\t\tconfigs: config.configs,\n\t\t\t});\n\t\t}) as ModelValue<Model>;\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueStateConfig, MockImageData, MockValueConfig } from \"../types\";\n\ntype BuildImageFieldConfig<\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = {\n\timageData: MockImageData;\n\tconstraint?: prismicT.CustomTypeModelImageField[\"config\"][\"constraint\"];\n} & Pick<MockValueConfig, \"seed\"> &\n\tPick<MockValueStateConfig<State>, \"state\">;\n\nexport const buildImageFieldImage = <\n\tState extends prismicT.FieldState = prismicT.FieldState,\n>(\n\tconfig: BuildImageFieldConfig<State>,\n): prismicT.ImageFieldImage<State> => {\n\tif (config.state === \"empty\") {\n\t\treturn {\n\t\t\turl: null,\n\t\t\tdimensions: null,\n\t\t\talt: null,\n\t\t\tcopyright: null,\n\t\t} as prismicT.ImageFieldImage<State>;\n\t} else {\n\t\tconst faker = createFaker(config.seed);\n\n\t\tconst url = new URL(config.imageData.url);\n\n\t\tconst dimensions = {\n\t\t\twidth: config.constraint?.width ?? config.imageData.width,\n\t\t\theight: config.constraint?.height ?? config.imageData.height,\n\t\t};\n\n\t\turl.searchParams.set(\"w\", dimensions.width.toString());\n\t\turl.searchParams.set(\"h\", dimensions.height.toString());\n\t\turl.searchParams.set(\"fit\", \"crop\");\n\n\t\treturn {\n\t\t\turl: url.toString(),\n\t\t\tdimensions,\n\t\t\talt: faker.lorem.sentence(),\n\t\t\tcopyright: faker.lorem.sentence(),\n\t\t} as prismicT.ImageFieldImage<State>;\n\t}\n};\n","import { createFaker } from \"../lib/createFaker\";\n\nimport { MockImageData, MockValueConfig } from \"../types\";\n\nconst dataSet: MockImageData[] = [\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1604537529428-15bcbeecfe4d\",\n\t\twidth: 4240,\n\t\theight: 2832,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05\",\n\t\twidth: 7372,\n\t\theight: 4392,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1441974231531-c6227db76b6e\",\n\t\twidth: 2560,\n\t\theight: 1705,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1418065460487-3e41a6c84dc5\",\n\t\twidth: 2200,\n\t\theight: 1467,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1426604966848-d7adac402bff\",\n\t\twidth: 5616,\n\t\theight: 3744,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1604537466608-109fa2f16c3b\",\n\t\twidth: 4240,\n\t\theight: 2832,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1497436072909-60f360e1d4b1\",\n\t\twidth: 2560,\n\t\theight: 1440,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/reserve/HgZuGu3gSD6db21T3lxm_San%20Zenone.jpg\",\n\t\twidth: 6373,\n\t\theight: 4253,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1504198266287-1659872e6590\",\n\t\twidth: 4272,\n\t\theight: 2848,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1470770903676-69b98201ea1c\",\n\t\twidth: 4554,\n\t\theight: 3036,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1587502537745-84b86da1204f\",\n\t\twidth: 6550,\n\t\theight: 4367,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1431794062232-2a99a5431c6c\",\n\t\twidth: 6000,\n\t\theight: 4000,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1446329813274-7c9036bd9a1f\",\n\t\twidth: 6000,\n\t\theight: 4000,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1504567961542-e24d9439a724\",\n\t\twidth: 4608,\n\t\theight: 3456,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1444464666168-49d633b86797\",\n\t\twidth: 4844,\n\t\theight: 3234,\n\t},\n\t{\n\t\turl: \"https://images.unsplash.com/photo-1553531384-397c80973a0b\",\n\t\twidth: 4335,\n\t\theight: 6502,\n\t},\n];\n\ntype GetMockImageDataConfig = Pick<MockValueConfig, \"seed\">;\n\nexport const getMockImageData = (\n\tconfig: GetMockImageDataConfig,\n): MockImageData => {\n\tconst faker = createFaker(config.seed);\n\n\treturn faker.random.arrayElement(dataSet);\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { buildImageFieldImage } from \"../lib/buildImageFieldImage\";\nimport { getMockImageData } from \"../lib/getMockImageData\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nimport * as modelGen from \"../model\";\n\nexport type MockImageValueConfig<\n\tModel extends prismicT.CustomTypeModelImageField = prismicT.CustomTypeModelImageField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = MockValueConfig<Model> & MockValueStateConfig<State>;\n\nexport type MockImageValue<\n\tModel extends prismicT.CustomTypeModelImageField = prismicT.CustomTypeModelImageField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.ImageField<Model[\"config\"][\"thumbnails\"][number][\"name\"], State>;\n\nexport const image = <\n\tModel extends prismicT.CustomTypeModelImageField = prismicT.CustomTypeModelImageField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockImageValueConfig<Model, State> = {},\n): MockImageValue<Model, State> => {\n\tconst model = config.model || modelGen.image({ seed: config.seed });\n\tconst imageData = getMockImageData({ seed: config.seed });\n\n\tconst value = buildImageFieldImage({\n\t\tseed: config.seed,\n\t\timageData,\n\t\tconstraint: model.config.constraint,\n\t\tstate: config.state,\n\t}) as MockImageValue<Model, State>;\n\n\tfor (const thumbnail of model.config.thumbnails) {\n\t\t// TODO: Resolve the following type error\n\t\t// @ts-expect-error - Unsure how to fix this type mismatch\n\t\tvalue[thumbnail.name as keyof typeof value] = buildImageFieldImage({\n\t\t\tseed: config.seed,\n\t\t\timageData,\n\t\t\tconstraint: {\n\t\t\t\twidth: thumbnail.width,\n\t\t\t\theight: thumbnail.height,\n\t\t\t},\n\t\t\tstate: config.state,\n\t\t});\n\t}\n\n\treturn value;\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\nimport { getMockImageData } from \"../lib/getMockImageData\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nexport type MockIntegrationFieldsValueConfig<\n\tModel extends prismicT.CustomTypeModelIntegrationFieldsField = prismicT.CustomTypeModelIntegrationFieldsField,\n\tBlob = unknown,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = {\n\tdata?: Blob;\n} & MockValueConfig<Model> &\n\tMockValueStateConfig<State>;\n\nexport type MockIntegrationFieldsValue<\n\tBlob = unknown,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.IntegrationFields<Blob, State>;\n\nexport const integrationFields = <\n\tModel extends prismicT.CustomTypeModelIntegrationFieldsField = prismicT.CustomTypeModelIntegrationFieldsField,\n\tBlob = unknown,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockIntegrationFieldsValueConfig<Model, Blob, State> = {},\n): MockIntegrationFieldsValue<Blob, State> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst imageData = getMockImageData({ seed: config.seed });\n\n\treturn (\n\t\tconfig.state === \"empty\"\n\t\t\t? null\n\t\t\t: {\n\t\t\t\t\tid: faker.git.shortSha(),\n\t\t\t\t\ttitle: changeCase.capitalCase(faker.lorem.words(3)),\n\t\t\t\t\tdescription: faker.lorem.sentence(),\n\t\t\t\t\timage_url: imageData.url,\n\t\t\t\t\tlast_update: faker.date.past(20, new Date(\"2021-03-07\")).getTime(),\n\t\t\t\t\tblob: config.data as Blob,\n\t\t\t }\n\t) as MockIntegrationFieldsValue<Blob, State>;\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nexport type MockKeyTextValueConfig<\n\tModel extends prismicT.CustomTypeModelKeyTextField = prismicT.CustomTypeModelKeyTextField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = MockValueConfig<Model> & MockValueStateConfig<State>;\n\nexport type MockKeyTextValue<\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.KeyTextField<State>;\n\nexport const keyText = <\n\tModel extends prismicT.CustomTypeModelKeyTextField = prismicT.CustomTypeModelKeyTextField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockKeyTextValueConfig<Model, State> = {},\n): MockKeyTextValue<State> => {\n\tconst faker = createFaker(config.seed);\n\n\treturn (\n\t\tconfig.state === \"empty\"\n\t\t\t? null\n\t\t\t: changeCase.sentenceCase(faker.lorem.words(3))\n\t) as MockKeyTextValue<State>;\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nexport type MockLinkToMediaValueConfig<\n\tModel extends prismicT.CustomTypeModelLinkToMediaField = prismicT.CustomTypeModelLinkToMediaField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = MockValueConfig<Model> & MockValueStateConfig<State>;\n\ntype MockLinkToMediaValue<\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.LinkToMediaField<State>;\n\nexport const linkToMedia = <\n\tModel extends prismicT.CustomTypeModelLinkToMediaField = prismicT.CustomTypeModelLinkToMediaField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockLinkToMediaValueConfig<Model, State> = {},\n): MockLinkToMediaValue<State> => {\n\tconst faker = createFaker(config.seed);\n\n\tif (config.state === \"empty\") {\n\t\treturn {\n\t\t\tlink_type: prismicT.LinkType.Media,\n\t\t} as MockLinkToMediaValue<State>;\n\t} else {\n\t\treturn {\n\t\t\tlink_type: prismicT.LinkType.Media,\n\t\t\tname: faker.system.commonFileName(),\n\t\t\tkind: faker.system.commonFileType(),\n\t\t\turl: faker.internet.url(),\n\t\t\tsize: faker.datatype.number().toString(),\n\t\t\theight: faker.datatype.number().toString(),\n\t\t\twidth: faker.datatype.number().toString(),\n\t\t} as MockLinkToMediaValue<State>;\n\t}\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nimport * as modelGen from \"../model\";\n\nimport { contentRelationship } from \"./contentRelationship\";\nimport { linkToMedia } from \"./linkToMedia\";\n\nexport type MockLinkValueConfig<\n\tLinkType extends typeof prismicT.LinkType[keyof typeof prismicT.LinkType] = typeof prismicT.LinkType[keyof typeof prismicT.LinkType],\n\tModel extends prismicT.CustomTypeModelLinkField = prismicT.CustomTypeModelLinkField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = {\n\ttype?: LinkType;\n\twithTargetBlank?: Model[\"config\"][\"allowTargetBlank\"] extends undefined\n\t\t? false\n\t\t: boolean;\n\t/**\n\t * A list of potential documents to which the field can be linked.\n\t */\n\tlinkableDocuments?: LinkType extends typeof prismicT.LinkType.Document\n\t\t? prismicT.PrismicDocument[]\n\t\t: never;\n} & MockValueConfig<Model> &\n\tMockValueStateConfig<State>;\n\ntype MockLinkValue<\n\tLinkType extends typeof prismicT.LinkType[keyof typeof prismicT.LinkType] = typeof prismicT.LinkType[keyof typeof prismicT.LinkType],\n\tState extends prismicT.FieldState = \"filled\",\n> = State extends \"empty\"\n\t? prismicT.EmptyLinkField<LinkType>\n\t: LinkType extends typeof prismicT.LinkType.Web\n\t? prismicT.FilledLinkToWebField\n\t: LinkType extends typeof prismicT.LinkType.Media\n\t? prismicT.FilledLinkToMediaField\n\t: LinkType extends typeof prismicT.LinkType.Document\n\t? prismicT.FilledLinkToDocumentField\n\t: never;\n\nexport const link = <\n\tLinkType extends typeof prismicT.LinkType[keyof typeof prismicT.LinkType] = typeof prismicT.LinkType[keyof typeof prismicT.LinkType],\n\tModel extends prismicT.CustomTypeModelLinkField = prismicT.CustomTypeModelLinkField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockLinkValueConfig<LinkType, Model, State> = {},\n): MockLinkValue<LinkType, State> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst type =\n\t\tconfig.type ||\n\t\tfaker.random.arrayElement([\n\t\t\tprismicT.LinkType.Web,\n\t\t\tprismicT.LinkType.Document,\n\t\t\tprismicT.LinkType.Media,\n\t\t]);\n\n\tif (config.state === \"empty\") {\n\t\treturn {\n\t\t\tlink_type: type,\n\t\t} as MockLinkValue<LinkType, State>;\n\t} else {\n\t\tswitch (type) {\n\t\t\tcase prismicT.LinkType.Document: {\n\t\t\t\treturn contentRelationship({\n\t\t\t\t\tseed: config.seed,\n\t\t\t\t\tstate: config.state,\n\t\t\t\t\tlinkableDocuments: config.linkableDocuments,\n\t\t\t\t}) as unknown as MockLinkValue<LinkType, State>;\n\t\t\t}\n\n\t\t\tcase prismicT.LinkType.Media: {\n\t\t\t\treturn linkToMedia({\n\t\t\t\t\tseed: config.seed,\n\t\t\t\t\tstate: config.state,\n\t\t\t\t}) as MockLinkValue<LinkType, State>;\n\t\t\t}\n\n\t\t\tcase prismicT.LinkType.Web:\n\t\t\tdefault: {\n\t\t\t\tconst model = config.model || modelGen.link({ seed: config.seed });\n\n\t\t\t\treturn {\n\t\t\t\t\tlink_type: prismicT.LinkType.Web,\n\t\t\t\t\turl: faker.internet.url(),\n\t\t\t\t\ttarget:\n\t\t\t\t\t\tconfig.withTargetBlank ??\n\t\t\t\t\t\t(model.config.allowTargetBlank && faker.datatype.boolean())\n\t\t\t\t\t\t\t? \"_blank\"\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t} as MockLinkValue<LinkType, State>;\n\t\t\t}\n\t\t}\n\t}\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nexport type MockNumberValueConfig<\n\tModel extends prismicT.CustomTypeModelNumberField = prismicT.CustomTypeModelNumberField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = MockValueConfig<Model> & MockValueStateConfig<State>;\n\nexport type MockNumberValue<\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.NumberField<State>;\n\nexport const number = <\n\tModel extends prismicT.CustomTypeModelNumberField = prismicT.CustomTypeModelNumberField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockNumberValueConfig<Model, State> = {},\n): MockNumberValue<State> => {\n\tconst faker = createFaker(config.seed);\n\n\treturn (\n\t\tconfig.state === \"empty\" ? null : faker.datatype.number()\n\t) as MockNumberValue<State>;\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../../lib/createFaker\";\n\nimport { MockRichTextValueConfig } from \"../../types\";\n\nimport * as modelGen from \"../../model\";\n\ntype RichTextNodeTitleType =\n\t| typeof prismicT.RichTextNodeType.heading1\n\t| typeof prismicT.RichTextNodeType.heading2\n\t| typeof prismicT.RichTextNodeType.heading3\n\t| typeof prismicT.RichTextNodeType.heading4\n\t| typeof prismicT.RichTextNodeType.heading5\n\t| typeof prismicT.RichTextNodeType.heading6;\n\ntype RTHeadingNode =\n\t| prismicT.RTHeading1Node\n\t| prismicT.RTHeading2Node\n\t| prismicT.RTHeading3Node\n\t| prismicT.RTHeading4Node\n\t| prismicT.RTHeading5Node\n\t| prismicT.RTHeading6Node;\n\nconst patterns = {\n\tshort: {\n\t\tminWords: 1,\n\t\tmaxWords: 3,\n\t},\n\tmedium: {\n\t\tminWords: 3,\n\t\tmaxWords: 6,\n\t},\n\tlong: {\n\t\tminWords: 6,\n\t\tmaxWords: 12,\n\t},\n} as const;\n\nexport type MockRichTextHeadingValueConfig = {\n\tpattern?: keyof typeof patterns;\n} & MockRichTextValueConfig;\n\nexport const heading = (\n\tconfig: MockRichTextHeadingValueConfig = {},\n): RTHeadingNode | undefined => {\n\tconst faker = createFaker(config.seed);\n\n\tconst model = config.model || modelGen.title({ seed: config.seed });\n\n\tconst types = (\n\t\t\"single\" in model.config ? model.config.single : model.config.multi\n\t)\n\t\t.split(\",\")\n\t\t.filter((type) =>\n\t\t\t[\n\t\t\t\tprismicT.RichTextNodeType.heading1,\n\t\t\t\tprismicT.RichTextNodeType.heading2,\n\t\t\t\tprismicT.RichTextNodeType.heading3,\n\t\t\t\tprismicT.RichTextNodeType.heading4,\n\t\t\t\tprismicT.RichTextNodeType.heading5,\n\t\t\t\tprismicT.RichTextNodeType.heading6,\n\t\t\t].includes(type as RichTextNodeTitleType),\n\t\t) as RichTextNodeTitleType[];\n\tconst type = faker.random.arrayElement(types);\n\n\tif (type) {\n\t\tconst patternKey =\n\t\t\tconfig.pattern ||\n\t\t\tfaker.random.arrayElement(\n\t\t\t\tObject.keys(patterns) as (keyof typeof patterns)[],\n\t\t\t);\n\t\tconst pattern = patterns[patternKey];\n\n\t\treturn {\n\t\t\ttype,\n\t\t\ttext: changeCase.capitalCase(\n\t\t\t\tfaker.lorem.words(\n\t\t\t\t\tfaker.datatype.number({\n\t\t\t\t\t\tmin: pattern.minWords,\n\t\t\t\t\t\tmax: pattern.maxWords,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t\tspans: [],\n\t\t};\n\t} else {\n\t\treturn undefined;\n\t}\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../../lib/createFaker\";\n\nimport { MockRichTextValueConfig } from \"../../types\";\n\nconst patterns = {\n\tshort: {\n\t\tsentenceCount: 2,\n\t},\n\tmedium: {\n\t\tsentenceCount: 6,\n\t},\n\tlong: {\n\t\tsentenceCount: 12,\n\t},\n} as const;\n\ntype MockRichTextParagraphValueConfig = {\n\tpattern?: keyof typeof patterns;\n} & MockRichTextValueConfig;\n\nexport const paragraph = (\n\tconfig: MockRichTextParagraphValueConfig = {},\n): prismicT.RTParagraphNode | undefined => {\n\tconst faker = createFaker(config.seed);\n\n\tconst patternKey =\n\t\tconfig.pattern ||\n\t\tfaker.random.arrayElement(\n\t\t\tObject.keys(patterns) as (keyof typeof patterns)[],\n\t\t);\n\tconst pattern = patterns[patternKey];\n\n\treturn {\n\t\ttype: prismicT.RichTextNodeType.paragraph,\n\t\ttext: faker.lorem.paragraph(pattern.sentenceCount),\n\t\tspans: [],\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../../lib/createFaker\";\n\nimport { MockRichTextValueConfig } from \"../../types\";\n\nconst patterns = {\n\tshort: {\n\t\tsentenceCount: 2,\n\t},\n\tmedium: {\n\t\tsentenceCount: 6,\n\t},\n\tlong: {\n\t\tsentenceCount: 12,\n\t},\n} as const;\n\ntype MockRichTextPreformattedValueConfig = {\n\tpattern?: keyof typeof patterns;\n} & MockRichTextValueConfig;\n\nexport const preformatted = (\n\tconfig: MockRichTextPreformattedValueConfig = {},\n): prismicT.RTPreformattedNode | undefined => {\n\tconst faker = createFaker(config.seed);\n\n\tconst patternKey =\n\t\tconfig.pattern ||\n\t\tfaker.random.arrayElement(\n\t\t\tObject.keys(patterns) as (keyof typeof patterns)[],\n\t\t);\n\tconst pattern = patterns[patternKey];\n\n\treturn {\n\t\ttype: prismicT.RichTextNodeType.preformatted,\n\t\t// TODO: Use code, not lorem ipsum.\n\t\ttext: faker.lorem.paragraph(pattern.sentenceCount),\n\t\tspans: [],\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../../lib/createFaker\";\n\nimport { MockRichTextValueConfig } from \"../../types\";\n\nconst patterns = {\n\tshort: {\n\t\tminItems: 1,\n\t\tmaxItems: 3,\n\t},\n\tmedium: {\n\t\tminItems: 3,\n\t\tmaxItems: 6,\n\t},\n\tlong: {\n\t\tminItems: 6,\n\t\tmaxItems: 12,\n\t},\n} as const;\n\ntype MockRichTextListValueConfig = {\n\tpattern?: keyof typeof patterns;\n} & MockRichTextValueConfig;\n\nexport const list = (\n\tconfig: MockRichTextListValueConfig = {},\n): prismicT.RTListItemNode[] | undefined => {\n\tconst faker = createFaker(config.seed);\n\n\tconst patternKey =\n\t\tconfig.pattern ||\n\t\tfaker.random.arrayElement(\n\t\t\tObject.keys(patterns) as (keyof typeof patterns)[],\n\t\t);\n\tconst pattern = patterns[patternKey];\n\n\tconst itemsCount = faker.datatype.number({\n\t\tmin: pattern.minItems,\n\t\tmax: pattern.maxItems,\n\t});\n\n\treturn Array(itemsCount)\n\t\t.fill(undefined)\n\t\t.map(() => {\n\t\t\treturn {\n\t\t\t\ttype: prismicT.RichTextNodeType.listItem,\n\t\t\t\ttext: faker.lorem.sentence(),\n\t\t\t\tspans: [],\n\t\t\t};\n\t\t});\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../../lib/createFaker\";\n\nimport { MockRichTextValueConfig } from \"../../types\";\n\nconst patterns = {\n\tshort: {\n\t\tminItems: 1,\n\t\tmaxItems: 3,\n\t},\n\tmedium: {\n\t\tminItems: 3,\n\t\tmaxItems: 6,\n\t},\n\tlong: {\n\t\tminItems: 6,\n\t\tmaxItems: 12,\n\t},\n} as const;\n\ntype MockRichTextOListValueConfig = {\n\tpattern?: keyof typeof patterns;\n} & MockRichTextValueConfig;\n\nexport const oList = (\n\tconfig: MockRichTextOListValueConfig = {},\n): prismicT.RTOListItemNode[] | undefined => {\n\tconst faker = createFaker(config.seed);\n\n\tconst patternKey =\n\t\tconfig.pattern ||\n\t\tfaker.random.arrayElement(\n\t\t\tObject.keys(patterns) as (keyof typeof patterns)[],\n\t\t);\n\tconst pattern = patterns[patternKey];\n\n\tconst itemsCount = faker.datatype.number({\n\t\tmin: pattern.minItems,\n\t\tmax: pattern.maxItems,\n\t});\n\n\treturn Array(itemsCount)\n\t\t.fill(undefined)\n\t\t.map(() => {\n\t\t\treturn {\n\t\t\t\ttype: prismicT.RichTextNodeType.oListItem,\n\t\t\t\ttext: faker.lorem.sentence(),\n\t\t\t\tspans: [],\n\t\t\t};\n\t\t});\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { buildImageFieldImage } from \"../../lib/buildImageFieldImage\";\nimport { getMockImageData } from \"../../lib/getMockImageData\";\n\nimport { MockRichTextValueConfig } from \"../../types\";\n\ntype MockRichTextImageValueConfig = MockRichTextValueConfig;\n\nexport const image = (\n\tconfig: MockRichTextImageValueConfig = {},\n): prismicT.RTImageNode | undefined => {\n\tconst imageData = getMockImageData({ seed: config.seed });\n\tconst imageField = buildImageFieldImage({\n\t\tseed: config.seed,\n\t\timageData,\n\t\tstate: false,\n\t});\n\n\treturn {\n\t\ttype: prismicT.RichTextNodeType.image,\n\t\talt: imageField.alt,\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\turl: imageField.url!,\n\t\tcopyright: imageField.copyright,\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\tdimensions: imageField.dimensions!,\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { buildEmbedField } from \"../../lib/buildEmbedField\";\nimport { getMockEmbedData } from \"../../lib/getMockEmbedData\";\n\nimport { MockRichTextValueConfig } from \"../../types\";\n\ntype MockRichTextEmbedValueConfig = MockRichTextValueConfig;\n\nexport const embed = (\n\tconfig: MockRichTextEmbedValueConfig = {},\n): prismicT.RTEmbedNode | undefined => {\n\tconst embedData = getMockEmbedData({ seed: config.seed });\n\tconst embedField = buildEmbedField({ seed: config.seed, embedData });\n\n\treturn {\n\t\ttype: prismicT.RichTextNodeType.embed,\n\t\toembed: embedField,\n\t};\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../../lib/createFaker\";\n\nimport { MockRichTextValueConfig as BaseMockRichTextValueConfig } from \"../../types\";\n\nimport * as modelGen from \"../../model\";\nimport { heading } from \"./heading\";\nimport { paragraph } from \"./paragraph\";\nimport { preformatted } from \"./preformatted\";\nimport { list } from \"./list\";\nimport { oList } from \"./oList\";\nimport { image } from \"./image\";\nimport { embed } from \"./embed\";\n\nconst patterns = {\n\tshort: {\n\t\tblockCountMin: 1,\n\t\tblockCountMax: 2,\n\t},\n\tmedium: {\n\t\tblockCountMin: 2,\n\t\tblockCountMax: 4,\n\t},\n\tlong: {\n\t\tblockCountMin: 4,\n\t\tblockCountMax: 8,\n\t},\n} as const;\n\nexport type MockRichTextValueConfig = {\n\tpattern?: keyof typeof patterns;\n} & BaseMockRichTextValueConfig<prismicT.CustomTypeModelRichTextField>;\n\nconst generators = {\n\t[prismicT.RichTextNodeType.heading1]: heading,\n\t[prismicT.RichTextNodeType.heading2]: heading,\n\t[prismicT.RichTextNodeType.heading3]: heading,\n\t[prismicT.RichTextNodeType.heading4]: heading,\n\t[prismicT.RichTextNodeType.heading5]: heading,\n\t[prismicT.RichTextNodeType.heading6]: heading,\n\t[prismicT.RichTextNodeType.paragraph]: paragraph,\n\t[prismicT.RichTextNodeType.preformatted]: preformatted,\n\t[prismicT.RichTextNodeType.listItem]: list,\n\t[prismicT.RichTextNodeType.oListItem]: oList,\n\t[prismicT.RichTextNodeType.image]: image,\n\t[prismicT.RichTextNodeType.embed]: embed,\n};\n\nexport const richText = (\n\tconfig: MockRichTextValueConfig = {},\n): prismicT.RichTextField => {\n\tconst faker = createFaker(config.seed);\n\n\tconst model =\n\t\tconfig.model ||\n\t\tmodelGen.richText({\n\t\t\tseed: config.seed,\n\t\t\twithMultipleBlocks: true,\n\t\t});\n\tconst supportsMultipleBlocks = \"multi\" in model.config;\n\tconst types = (\n\t\t\"multi\" in model.config ? model.config.multi : model.config.single\n\t)\n\t\t.split(\",\")\n\t\t.filter((type) =>\n\t\t\tObject.keys(generators).includes(type),\n\t\t) as prismicT.RTNode[\"type\"][];\n\n\tif (types.length > 0) {\n\t\tconst patternKey =\n\t\t\tconfig.pattern ||\n\t\t\tfaker.random.arrayElement(\n\t\t\t\tObject.keys(patterns) as (keyof typeof patterns)[],\n\t\t\t);\n\t\tconst pattern = patterns[patternKey];\n\n\t\tconst blockCount = supportsMultipleBlocks\n\t\t\t? faker.datatype.number({\n\t\t\t\t\tmin: pattern.blockCountMin,\n\t\t\t\t\tmax: pattern.blockCountMax,\n\t\t\t })\n\t\t\t: 1;\n\n\t\treturn Array(blockCount)\n\t\t\t.fill(undefined)\n\t\t\t.map(() => {\n\t\t\t\tconst type = faker.random.arrayElement(types);\n\t\t\t\tconst generator = generators[type];\n\n\t\t\t\treturn generator({ seed: config.seed, model });\n\t\t\t})\n\t\t\t.flat()\n\t\t\t.filter((block): block is prismicT.RTNode => block !== undefined)\n\t\t\t.slice(0, blockCount) as prismicT.RichTextField;\n\t} else {\n\t\treturn [];\n\t}\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueStateConfig, MockValueConfig } from \"../types\";\n\nimport * as modelGen from \"../model\";\n\nexport type MockSelectValueConfig<\n\tModel extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = MockValueConfig<Model> & MockValueStateConfig<State>;\n\nexport type MockSelectValue<\n\tModel extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,\n\tState extends prismicT.FieldState = prismicT.FieldState,\n> = prismicT.SelectField<Model[\"config\"][\"options\"][number], State>;\n\nexport const select = <\n\tModel extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,\n\tState extends prismicT.FieldState = \"filled\",\n>(\n\tconfig: MockSelectValueConfig<Model, State> = {},\n): MockSelectValue<Model, State> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst model = config.model || modelGen.select({ seed: config.seed });\n\tconst defaultValue = model.config.default_value;\n\n\tif (config.state === \"empty\") {\n\t\treturn null as MockSelectValue<Model, State>;\n\t} else {\n\t\treturn (\n\t\t\ttypeof defaultValue === \"string\" && faker.datatype.boolean()\n\t\t\t\t? defaultValue\n\t\t\t\t: faker.random.arrayElement(model.config.options)\n\t\t) as MockSelectValue<Model, State>;\n\t}\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { MockValueConfig, ModelValue } from \"../types\";\n\nimport { createFaker } from \"../lib/createFaker\";\nimport { generateFieldId } from \"../lib/generateFieldId\";\nimport {\n\tvalueForModelMap,\n\tValueForModelMapConfigs,\n} from \"../lib/valueForModelMap\";\n\nimport * as modelGen from \"../model\";\n\nexport type MockSliceValueConfig<\n\tModel extends prismicT.CustomTypeModelSlice = prismicT.CustomTypeModelSlice,\n> = {\n\ttype?: string;\n\tlabel?: string | null;\n\titemsCount?: number;\n\tprimaryFieldConfigs?: ValueForModelMapConfigs;\n\titemsFieldConfigs?: ValueForModelMapConfigs;\n} & MockValueConfig<Model>;\n\nexport const slice = <\n\tModel extends prismicT.CustomTypeModelSlice = prismicT.CustomTypeModelSlice,\n>(\n\tconfig: MockSliceValueConfig<Model> = {},\n): ModelValue<Model> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst model = config.model || modelGen.slice({ seed: config.seed });\n\n\tconst sliceType = config.type ?? generateFieldId({ seed: config.seed });\n\tconst sliceLabel =\n\t\tconfig.label !== undefined\n\t\t\t? config.label\n\t\t\t: changeCase.capitalCase(faker.company.bsNoun());\n\n\tconst itemsCount =\n\t\tObject.keys(model.repeat).length > 0\n\t\t\t? config.itemsCount ??\n\t\t\t faker.datatype.number({\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: 6,\n\t\t\t })\n\t\t\t: 0;\n\n\treturn {\n\t\tslice_type: sliceType,\n\t\tslice_label: sliceLabel,\n\t\tprimary: valueForModelMap({\n\t\t\tseed: config.seed,\n\t\t\tmap: model[\"non-repeat\"],\n\t\t\tconfigs: config.primaryFieldConfigs,\n\t\t}),\n\t\titems: Array(itemsCount)\n\t\t\t.fill(undefined)\n\t\t\t.map(() => {\n\t\t\t\treturn valueForModelMap({\n\t\t\t\t\tseed: config.seed,\n\t\t\t\t\tmap: model.repeat,\n\t\t\t\t\tconfigs: config.itemsFieldConfigs,\n\t\t\t\t});\n\t\t\t}),\n\t} as ModelValue<Model>;\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { MockValueConfig, ModelValue } from \"../types\";\n\nimport { createFaker } from \"../lib/createFaker\";\nimport { generateFieldId } from \"../lib/generateFieldId\";\nimport {\n\tvalueForModelMap,\n\tValueForModelMapConfigs,\n} from \"../lib/valueForModelMap\";\n\nimport * as modelGen from \"../model\";\n\nexport type MockSharedSliceVariationValueConfig<\n\tModel extends prismicT.SharedSliceModelVariation = prismicT.SharedSliceModelVariation,\n> = {\n\ttype?: string;\n\tlabel?: string;\n\titemsCount?: number;\n\tprimaryFieldConfigs?: ValueForModelMapConfigs;\n\titemsFieldConfigs?: ValueForModelMapConfigs;\n} & MockValueConfig<Model>;\n\nexport const sharedSliceVariation = <\n\tModel extends prismicT.SharedSliceModelVariation = prismicT.SharedSliceModelVariation,\n>(\n\tconfig: MockSharedSliceVariationValueConfig<Model> = {},\n): ModelValue<Model> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst model =\n\t\tconfig.model || modelGen.sharedSliceVariation({ seed: config.seed });\n\n\tconst sliceType = config.type ?? generateFieldId({ seed: config.seed });\n\n\tconst itemsCount =\n\t\tObject.keys(model.items).length > 0\n\t\t\t? config.itemsCount ??\n\t\t\t faker.datatype.number({\n\t\t\t\t\tmin: 1,\n\t\t\t\t\tmax: 6,\n\t\t\t })\n\t\t\t: 0;\n\n\treturn {\n\t\tslice_type: sliceType,\n\t\tslice_label: null,\n\t\tvariation: model.id,\n\t\tversion: faker.git.shortSha(),\n\t\tprimary: valueForModelMap({\n\t\t\tseed: config.seed,\n\t\t\tmap: model.primary,\n\t\t\tconfigs: config.primaryFieldConfigs,\n\t\t}),\n\t\titems: Array(itemsCount)\n\t\t\t.fill(undefined)\n\t\t\t.map(() => {\n\t\t\t\treturn valueForModelMap({\n\t\t\t\t\tseed: config.seed,\n\t\t\t\t\tmap: model.items,\n\t\t\t\t\tconfigs: config.itemsFieldConfigs,\n\t\t\t\t});\n\t\t\t}),\n\t} as ModelValue<Model>;\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueConfig, ModelValue } from \"../types\";\n\nimport * as modelGen from \"../model\";\nimport {\n\tsharedSliceVariation,\n\tMockSharedSliceVariationValueConfig,\n} from \"./sharedSliceVariation\";\n\nexport type MockSharedSliceValueConfig<\n\tModel extends prismicT.SharedSliceModel = prismicT.SharedSliceModel,\n> = Pick<\n\tMockSharedSliceVariationValueConfig,\n\t\"itemsCount\" | \"primaryFieldConfigs\" | \"itemsFieldConfigs\"\n> &\n\tMockValueConfig<Model>;\n\nexport const sharedSlice = <\n\tModel extends prismicT.SharedSliceModel = prismicT.SharedSliceModel,\n>(\n\tconfig: MockSharedSliceValueConfig<Model> = {},\n): ModelValue<Model> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst model = config.model || modelGen.sharedSlice({ seed: config.seed });\n\tconst variationModel = faker.random.arrayElement(model.variations);\n\n\treturn sharedSliceVariation({\n\t\tseed: config.seed,\n\t\tmodel: variationModel,\n\t\titemsCount: config.itemsCount,\n\t\ttype: model.id,\n\t\tprimaryFieldConfigs: config.primaryFieldConfigs,\n\t\titemsFieldConfigs: config.itemsFieldConfigs,\n\t}) as ModelValue<Model>;\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { createFaker } from \"../lib/createFaker\";\nimport { ValueForModelMapConfigs } from \"../lib/valueForModelMap\";\n\nimport { MockValueConfig, ModelValue } from \"../types\";\n\nimport * as modelGen from \"../model\";\n\nimport { slice } from \"./slice\";\nimport { sharedSlice } from \"./sharedSlice\";\n\nexport type MockSliceZoneValueConfig<\n\tModel extends prismicT.CustomTypeModelSliceZoneField = prismicT.CustomTypeModelSliceZoneField,\n> = {\n\tsharedSliceModels?: prismicT.SharedSliceModel[];\n\titemsCount?: number;\n\tprimaryFieldConfigs?: ValueForModelMapConfigs;\n\titemsFieldConfigs?: ValueForModelMapConfigs;\n} & MockValueConfig<Model>;\n\nexport const sliceZone = <\n\tModel extends prismicT.CustomTypeModelSliceZoneField = prismicT.CustomTypeModelSliceZoneField,\n>(\n\tconfig: MockSliceZoneValueConfig<Model> = {},\n): ModelValue<Model> => {\n\tconst faker = createFaker(config.seed);\n\n\tconst model = config.model || modelGen.sliceZone({ seed: config.seed });\n\n\tif (Object.keys(model.config.choices).length > 0) {\n\t\tconst itemsCount =\n\t\t\tconfig.itemsCount ??\n\t\t\tfaker.datatype.number({\n\t\t\t\tmin: 1,\n\t\t\t\tmax: 6,\n\t\t\t});\n\n\t\treturn Array(itemsCount)\n\t\t\t.fill(undefined)\n\t\t\t.map(() => {\n\t\t\t\tconst choices = Object.entries(model.config.choices);\n\t\t\t\tconst [choiceType, choiceModel] = faker.random.arrayElement(choices);\n\n\t\t\t\tconst choiceLabels = model.config.labels[choiceType] || [];\n\t\t\t\tconst choiceLabel = faker.random.arrayElement(choiceLabels);\n\n\t\t\t\tswitch (choiceModel.type) {\n\t\t\t\t\tcase prismicT.CustomTypeModelSliceType.Slice: {\n\t\t\t\t\t\treturn slice({\n\t\t\t\t\t\t\tseed: config.seed,\n\t\t\t\t\t\t\tmodel: choiceModel,\n\t\t\t\t\t\t\ttype: choiceType,\n\t\t\t\t\t\t\tlabel: choiceLabel ? choiceLabel.name : null,\n\t\t\t\t\t\t\tprimaryFieldConfigs: config.primaryFieldConfigs,\n\t\t\t\t\t\t\titemsFieldConfigs: config.itemsFieldConfigs,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tcase prismicT.CustomTypeModelSliceType.SharedSlice: {\n\t\t\t\t\t\tconst sharedSliceModel = config.sharedSliceModels?.find(\n\t\t\t\t\t\t\t(sharedSliceModel) => sharedSliceModel.id === choiceType,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (sharedSliceModel) {\n\t\t\t\t\t\t\treturn sharedSlice({\n\t\t\t\t\t\t\t\tseed: config.seed,\n\t\t\t\t\t\t\t\tmodel: sharedSliceModel,\n\t\t\t\t\t\t\t\tprimaryFieldConfigs: config.primaryFieldConfigs,\n\t\t\t\t\t\t\t\titemsFieldConfigs: config.itemsFieldConfigs,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter(\n\t\t\t\t(slice): slice is prismicT.Slice | prismicT.SharedSlice =>\n\t\t\t\t\tslice !== undefined,\n\t\t\t) as ModelValue<Model>;\n\t} else {\n\t\treturn [] as unknown as ModelValue<Model>;\n\t}\n};\n","import * as prismicT from \"@prismicio/types\";\n\nimport { MockValueConfig } from \"../types\";\n\nimport { heading, MockRichTextHeadingValueConfig } from \"./richText/heading\";\n\nexport type MockTitleValueConfig<\n\tModel extends prismicT.CustomTypeModelTitleField = prismicT.CustomTypeModelTitleField,\n> = {\n\tpattern?: MockRichTextHeadingValueConfig[\"pattern\"];\n} & MockValueConfig<Model>;\n\nexport const title = (\n\tconfig: MockTitleValueConfig = {},\n): prismicT.TitleField => {\n\treturn [\n\t\t// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\t\theading({\n\t\t\tseed: config.seed,\n\t\t\tmodel: config.model,\n\t\t\tpattern: config.pattern,\n\t\t})!,\n\t] as prismicT.TitleField;\n};\n","import * as prismicT from \"@prismicio/types\";\nimport * as changeCase from \"change-case\";\n\nimport { createFaker } from \"../lib/createFaker\";\n\nimport { MockValueConfig } from \"../types\";\n\nexport type MockUIDValueConfig<\n\tModel extends prismicT.CustomTypeModelUIDField = prismicT.CustomTypeModelUIDField,\n> = MockValueConfig<Model>;\n\nexport const uid = (\n\tconfig: MockUIDValueConfig = {},\n): NonNullable<prismicT.PrismicDocument[\"uid\"]> => {\n\tconst faker = createFaker(config.seed);\n\n\treturn changeCase.snakeCase(faker.lorem.words(2));\n};\n"],"names":["Faker","fakerLocaleEN","changeCase","prismicT","value.boolean","value.color","value.contentRelationship","value.linkToMedia","value.link","value.date","value.embed","value.geoPoint","value.image","value.keyText","value.number","value.select","value.timestamp","value.title","value.richText","value.integrationFields","value.uid","value.group","value.sliceZone","contentRelationship","customType","group","image","link","richText","select","sharedSlice","sharedSliceVariation","slice","sliceZone","title","modelGen.customType","modelGen.contentRelationship","documentGen","dataSet","embed","modelGen.group","modelGen.image","modelGen.link","patterns","modelGen.title","modelGen.richText","modelGen.select","modelGen.slice","modelGen.sharedSliceVariation","modelGen.sharedSlice","modelGen.sliceZone"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prismicio/mock",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Generate mock Prismic documents, fields, Slices, and models for development and testing environments",
5
5
  "keywords": [
6
6
  "typescript",
@@ -20,24 +20,24 @@
20
20
  "exports": {
21
21
  ".": {
22
22
  "require": "./dist/index.cjs",
23
- "import": "./dist/index.mjs"
23
+ "import": "./dist/index.js"
24
24
  },
25
25
  "./api": {
26
26
  "require": "./dist/api/index.cjs",
27
- "import": "./dist/api/index.mjs"
27
+ "import": "./dist/api/index.js"
28
28
  },
29
29
  "./model": {
30
30
  "require": "./dist/model/index.cjs",
31
- "import": "./dist/model/index.mjs"
31
+ "import": "./dist/model/index.js"
32
32
  },
33
33
  "./value": {
34
34
  "require": "./dist/value/index.cjs",
35
- "import": "./dist/value/index.mjs"
35
+ "import": "./dist/value/index.js"
36
36
  },
37
37
  "./package.json": "./package.json"
38
38
  },
39
39
  "main": "dist/index.cjs",
40
- "module": "dist/index.mjs",
40
+ "module": "dist/index.js",
41
41
  "types": "dist/index.d.ts",
42
42
  "files": [
43
43
  "dist",
@@ -47,36 +47,36 @@
47
47
  "build": "siroc build",
48
48
  "dev": "siroc build --watch",
49
49
  "format": "prettier --write .",
50
+ "lint": "eslint --ext .js,.ts .",
50
51
  "prepare": "npm run build",
51
52
  "release": "npm run build && npm run test && standard-version && git push --follow-tags && npm run build && npm publish",
52
- "release:dry": "standard-version --dry-run",
53
53
  "release:alpha": "npm run build && npm run test && standard-version --release-as major --prerelease alpha && git push --follow-tags && npm run build && npm publish --tag alpha",
54
54
  "release:alpha:dry": "standard-version --release-as major --prerelease alpha --dry-run",
55
- "lint": "eslint --ext .js,.ts .",
56
- "unit": "nyc --reporter=lcovonly --reporter=text --exclude-after-remap=false ava",
57
- "test": "npm run lint && npm run unit"
55
+ "release:dry": "standard-version --dry-run",
56
+ "test": "npm run lint && npm run unit",
57
+ "unit": "nyc --reporter=lcovonly --reporter=text --exclude-after-remap=false ava"
58
58
  },
59
59
  "dependencies": {
60
- "@prismicio/types": "^0.1.6",
60
+ "@prismicio/types": "^0.1.25",
61
61
  "change-case": "^4.1.2",
62
62
  "faker": "^5.5.3"
63
63
  },
64
64
  "devDependencies": {
65
- "@types/faker": "^5.5.7",
66
- "@typescript-eslint/eslint-plugin": "^4.29.1",
67
- "@typescript-eslint/parser": "^4.29.1",
65
+ "@types/faker": "^5.5.8",
66
+ "@typescript-eslint/eslint-plugin": "^5.12.0",
67
+ "@typescript-eslint/parser": "^5.12.0",
68
68
  "ava": "^3.15.0",
69
- "eslint": "^7.32.0",
69
+ "eslint": "^8.9.0",
70
70
  "eslint-config-prettier": "^8.3.0",
71
- "eslint-plugin-prettier": "^3.4.0",
71
+ "eslint-plugin-prettier": "^4.0.0",
72
72
  "eslint-plugin-tsdoc": "^0.2.14",
73
73
  "nyc": "^15.1.0",
74
- "prettier": "^2.3.2",
75
- "prettier-plugin-jsdoc": "^0.3.23",
76
- "siroc": "^0.15.0",
77
- "standard-version": "^9.3.1",
74
+ "prettier": "^2.5.1",
75
+ "prettier-plugin-jsdoc": "^0.3.30",
76
+ "siroc": "^0.16.0",
77
+ "standard-version": "^9.3.2",
78
78
  "ts-eager": "^2.0.2",
79
- "typescript": "^4.3.5"
79
+ "typescript": "^4.5.5"
80
80
  },
81
81
  "engines": {
82
82
  "node": ">=12.7.0"
@@ -8,7 +8,12 @@ export const buildContentRelationshipField = <
8
8
  Document extends prismicT.PrismicDocument,
9
9
  >(
10
10
  config: BuildEmbedFieldConfig<Document>,
11
- ): prismicT.FilledLinkToDocumentField<Document["type"], Document["lang"]> => {
11
+ ): prismicT.RelationField<
12
+ Document["type"],
13
+ Document["lang"],
14
+ never,
15
+ "filled"
16
+ > => {
12
17
  return {
13
18
  link_type: prismicT.LinkType.Document,
14
19
  id: config.document.id,
@@ -11,7 +11,7 @@ type BuildEmbedFieldConfig = {
11
11
 
12
12
  export const buildEmbedField = (
13
13
  config: BuildEmbedFieldConfig,
14
- ): prismicT.EmbedField => {
14
+ ): prismicT.EmbedField<false> => {
15
15
  const faker = createFaker(config.seed);
16
16
 
17
17
  return {
@@ -0,0 +1,48 @@
1
+ import * as prismicT from "@prismicio/types";
2
+
3
+ import { createFaker } from "../lib/createFaker";
4
+
5
+ import { MockValueStateConfig, MockImageData, MockValueConfig } from "../types";
6
+
7
+ type BuildImageFieldConfig<
8
+ State extends prismicT.FieldState = prismicT.FieldState,
9
+ > = {
10
+ imageData: MockImageData;
11
+ constraint?: prismicT.CustomTypeModelImageField["config"]["constraint"];
12
+ } & Pick<MockValueConfig, "seed"> &
13
+ Pick<MockValueStateConfig<State>, "state">;
14
+
15
+ export const buildImageFieldImage = <
16
+ State extends prismicT.FieldState = prismicT.FieldState,
17
+ >(
18
+ config: BuildImageFieldConfig<State>,
19
+ ): prismicT.ImageFieldImage<State> => {
20
+ if (config.state === "empty") {
21
+ return {
22
+ url: null,
23
+ dimensions: null,
24
+ alt: null,
25
+ copyright: null,
26
+ } as prismicT.ImageFieldImage<State>;
27
+ } else {
28
+ const faker = createFaker(config.seed);
29
+
30
+ const url = new URL(config.imageData.url);
31
+
32
+ const dimensions = {
33
+ width: config.constraint?.width ?? config.imageData.width,
34
+ height: config.constraint?.height ?? config.imageData.height,
35
+ };
36
+
37
+ url.searchParams.set("w", dimensions.width.toString());
38
+ url.searchParams.set("h", dimensions.height.toString());
39
+ url.searchParams.set("fit", "crop");
40
+
41
+ return {
42
+ url: url.toString(),
43
+ dimensions,
44
+ alt: faker.lorem.sentence(),
45
+ copyright: faker.lorem.sentence(),
46
+ } as prismicT.ImageFieldImage<State>;
47
+ }
48
+ };
@@ -0,0 +1,65 @@
1
+ import { GroupFieldModelMap, MockModelConfig, ValueOf } from "../types";
2
+
3
+ import { boolean } from "../model/boolean";
4
+ import { color } from "../model/color";
5
+ import { contentRelationship } from "../model/contentRelationship";
6
+ import { date } from "../model/date";
7
+ import { embed } from "../model/embed";
8
+ import { geoPoint } from "../model/geoPoint";
9
+ import { image } from "../model/image";
10
+ import { integrationFields } from "../model/integrationFields";
11
+ import { keyText } from "../model/keyText";
12
+ import { link } from "../model/link";
13
+ import { linkToMedia } from "../model/linkToMedia";
14
+ import { number } from "../model/number";
15
+ import { richText } from "../model/richText";
16
+ import { select } from "../model/select";
17
+ import { timestamp } from "../model/timestamp";
18
+ import { title } from "../model/title";
19
+
20
+ import { createFaker } from "../lib/createFaker";
21
+ import { generateFieldId } from "../lib/generateFieldId";
22
+
23
+ const mockModelFns = {
24
+ boolean,
25
+ color,
26
+ contentRelationship,
27
+ date,
28
+ embed,
29
+ geoPoint,
30
+ image,
31
+ integrationFields,
32
+ keyText,
33
+ link,
34
+ linkToMedia,
35
+ number,
36
+ richText,
37
+ select,
38
+ timestamp,
39
+ title,
40
+ };
41
+
42
+ export type BuildMockGroupFieldMapConfig = MockModelConfig;
43
+
44
+ export const buildMockGroupFieldMap = (
45
+ config: BuildMockGroupFieldMapConfig = {},
46
+ ): GroupFieldModelMap => {
47
+ const faker = createFaker(config.seed);
48
+
49
+ const fields: GroupFieldModelMap = {};
50
+
51
+ const fieldTypes = faker.random.arrayElements(
52
+ Object.keys(mockModelFns) as (keyof typeof mockModelFns)[],
53
+ );
54
+
55
+ for (const fieldType of fieldTypes) {
56
+ const fieldId = generateFieldId({ seed: config.seed });
57
+ const mockModelFn = mockModelFns[fieldType] as (
58
+ config: MockModelConfig,
59
+ ) => ValueOf<GroupFieldModelMap>;
60
+
61
+ fields[fieldId] = mockModelFn({ seed: config.seed });
62
+ }
63
+
64
+ return fields;
65
+ };
@@ -2,18 +2,23 @@ import * as prismicT from "@prismicio/types";
2
2
  import * as changeCase from "change-case";
3
3
 
4
4
  import { createFaker } from "../lib/createFaker";
5
- import { generateCustomTypeId } from "../lib/generateCustomTypeId";
6
5
 
7
6
  import { MockModelConfig } from "../types";
8
7
 
9
- export type MockContentRelationshipModelConfig = {
10
- constrainCustomTypes?: boolean;
11
- constrainTags?: boolean;
8
+ export type MockContentRelationshipModelConfig<
9
+ CustomTypeIDs extends string = string,
10
+ Tags extends string = string,
11
+ > = {
12
+ customTypeIDs?: readonly CustomTypeIDs[];
13
+ tags?: readonly Tags[];
12
14
  } & MockModelConfig;
13
15
 
14
- export const contentRelationship = (
15
- config: MockContentRelationshipModelConfig = {},
16
- ): prismicT.CustomTypeModelContentRelationshipField => {
16
+ export const contentRelationship = <
17
+ CustomTypeIDs extends string,
18
+ Tags extends string,
19
+ >(
20
+ config: MockContentRelationshipModelConfig<CustomTypeIDs, Tags> = {},
21
+ ): prismicT.CustomTypeModelContentRelationshipField<CustomTypeIDs, Tags> => {
17
22
  const faker = createFaker(config.seed);
18
23
 
19
24
  return {
@@ -22,20 +27,8 @@ export const contentRelationship = (
22
27
  label: changeCase.capitalCase(faker.company.bsNoun()),
23
28
  placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
24
29
  select: prismicT.CustomTypeModelLinkSelectType.Document,
25
- customtypes: config.constrainCustomTypes
26
- ? Array(faker.datatype.number({ min: 1, max: 3 }))
27
- .fill(undefined)
28
- .map(() => generateCustomTypeId({ seed: config.seed }))
29
- : undefined,
30
- tags: config.constrainTags
31
- ? Array(faker.datatype.number({ min: 1, max: 3 }))
32
- .fill(undefined)
33
- .map(() =>
34
- changeCase.capitalCase(
35
- faker.lorem.words(faker.datatype.number({ min: 1, max: 3 })),
36
- ),
37
- )
38
- : undefined,
30
+ customtypes: config.customTypeIDs,
31
+ tags: config.tags,
39
32
  },
40
33
  };
41
34
  };