@prismicio/mock 0.0.10 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/api/index.cjs +153 -149
  2. package/dist/api/index.cjs.map +1 -1
  3. package/dist/api/index.d.ts +51 -5
  4. package/dist/api/index.js +153 -149
  5. package/dist/api/index.js.map +1 -1
  6. package/dist/index.cjs +609 -357
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +240 -70
  9. package/dist/index.js +602 -358
  10. package/dist/index.js.map +1 -1
  11. package/dist/model/index.cjs +236 -66
  12. package/dist/model/index.cjs.map +1 -1
  13. package/dist/model/index.d.ts +113 -27
  14. package/dist/model/index.js +236 -66
  15. package/dist/model/index.js.map +1 -1
  16. package/dist/value/index.cjs +347 -315
  17. package/dist/value/index.cjs.map +1 -1
  18. package/dist/value/index.d.ts +90 -38
  19. package/dist/value/index.js +347 -315
  20. package/dist/value/index.js.map +1 -1
  21. package/package.json +14 -14
  22. package/src/api/createAPIMockFactory.ts +56 -0
  23. package/src/api/query.ts +2 -2
  24. package/src/api/ref.ts +3 -3
  25. package/src/api/repository.ts +7 -9
  26. package/src/api/tags.ts +5 -2
  27. package/src/createMockFactory.ts +52 -0
  28. package/src/index.ts +15 -0
  29. package/src/lib/buildEmbedField.ts +13 -4
  30. package/src/lib/buildImageFieldImage.ts +16 -5
  31. package/src/lib/createFaker.ts +14 -15
  32. package/src/lib/generateCustomTypeId.ts +12 -4
  33. package/src/lib/generateFieldId.ts +12 -4
  34. package/src/lib/generateTags.ts +13 -4
  35. package/src/lib/getMockEmbedData.ts +12 -4
  36. package/src/lib/getMockImageData.ts +12 -4
  37. package/src/lib/valueForModel.ts +47 -30
  38. package/src/lib/valueForModelMap.ts +24 -4
  39. package/src/model/boolean.ts +5 -5
  40. package/src/model/buildMockGroupFieldMap.ts +4 -4
  41. package/src/model/color.ts +2 -2
  42. package/src/model/contentRelationship.ts +2 -2
  43. package/src/model/createModelMockFactory.ts +213 -0
  44. package/src/model/customType.ts +3 -3
  45. package/src/model/date.ts +2 -2
  46. package/src/model/embed.ts +2 -2
  47. package/src/model/geoPoint.ts +2 -2
  48. package/src/model/group.ts +6 -6
  49. package/src/model/image.ts +3 -3
  50. package/src/model/index.ts +2 -0
  51. package/src/model/integrationFields.ts +2 -2
  52. package/src/model/keyText.ts +2 -2
  53. package/src/model/link.ts +3 -3
  54. package/src/model/linkToMedia.ts +3 -3
  55. package/src/model/number.ts +2 -2
  56. package/src/model/richText.ts +2 -2
  57. package/src/model/select.ts +3 -3
  58. package/src/model/sharedSlice.ts +3 -3
  59. package/src/model/sharedSliceVariation.ts +6 -6
  60. package/src/model/slice.ts +3 -3
  61. package/src/model/sliceZone.ts +7 -4
  62. package/src/model/timestamp.ts +2 -2
  63. package/src/model/title.ts +2 -2
  64. package/src/model/uid.ts +2 -2
  65. package/src/types.ts +63 -21
  66. package/src/value/boolean.ts +3 -5
  67. package/src/value/color.ts +2 -2
  68. package/src/value/contentRelationship.ts +18 -15
  69. package/src/value/createValueMockFactory.ts +236 -0
  70. package/src/value/customType.ts +7 -7
  71. package/src/value/date.ts +6 -2
  72. package/src/value/embed.ts +6 -3
  73. package/src/value/geoPoint.ts +2 -2
  74. package/src/value/group.ts +5 -5
  75. package/src/value/image.ts +26 -18
  76. package/src/value/integrationFields.ts +12 -26
  77. package/src/value/keyText.ts +2 -2
  78. package/src/value/link.ts +9 -7
  79. package/src/value/linkToMedia.ts +2 -2
  80. package/src/value/number.ts +2 -2
  81. package/src/value/richText/embed.ts +6 -3
  82. package/src/value/richText/heading.ts +29 -17
  83. package/src/value/richText/image.ts +6 -3
  84. package/src/value/richText/index.ts +71 -43
  85. package/src/value/richText/list.ts +2 -2
  86. package/src/value/richText/oList.ts +2 -2
  87. package/src/value/richText/paragraph.ts +2 -2
  88. package/src/value/richText/preformatted.ts +2 -2
  89. package/src/value/select.ts +10 -6
  90. package/src/value/sharedSlice.ts +4 -4
  91. package/src/value/sharedSliceVariation.ts +9 -10
  92. package/src/value/slice.ts +9 -9
  93. package/src/value/sliceZone.ts +10 -8
  94. package/src/value/timestamp.ts +2 -2
  95. package/src/value/title.ts +7 -3
  96. package/src/value/uid.ts +5 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prismicio/mock",
3
- "version": "0.0.10",
3
+ "version": "0.1.0",
4
4
  "description": "Generate mock Prismic documents, fields, Slices, and models for development and testing environments",
5
5
  "keywords": [
6
6
  "typescript",
@@ -57,28 +57,28 @@
57
57
  "unit": "nyc --reporter=lcovonly --reporter=text --exclude-after-remap=false ava"
58
58
  },
59
59
  "dependencies": {
60
- "@prismicio/types": "^0.1.27",
60
+ "@prismicio/types": "^0.2.0",
61
61
  "change-case": "^4.1.2",
62
62
  "rand-seed": "^1.0.1"
63
63
  },
64
64
  "devDependencies": {
65
65
  "@size-limit/preset-small-lib": "^7.0.8",
66
- "@typescript-eslint/eslint-plugin": "^5.15.0",
67
- "@typescript-eslint/parser": "^5.15.0",
68
- "ava": "^4.1.0",
69
- "esbuild": "^0.14.27",
70
- "esbuild-register": "^3.3.2",
71
- "eslint": "^8.11.0",
66
+ "@typescript-eslint/eslint-plugin": "^5.30.5",
67
+ "@typescript-eslint/parser": "^5.30.5",
68
+ "ava": "^4.3.0",
69
+ "esbuild": "^0.14.48",
70
+ "esbuild-register": "^3.3.3",
71
+ "eslint": "^8.19.0",
72
72
  "eslint-config-prettier": "^8.5.0",
73
- "eslint-plugin-prettier": "^4.0.0",
74
- "eslint-plugin-tsdoc": "^0.2.14",
73
+ "eslint-plugin-prettier": "^4.2.1",
74
+ "eslint-plugin-tsdoc": "^0.2.16",
75
75
  "nyc": "^15.1.0",
76
- "prettier": "^2.6.0",
77
- "prettier-plugin-jsdoc": "^0.3.31",
76
+ "prettier": "^2.7.1",
77
+ "prettier-plugin-jsdoc": "^0.3.38",
78
78
  "siroc": "^0.16.0",
79
79
  "size-limit": "^7.0.8",
80
- "standard-version": "^9.3.2",
81
- "typescript": "^4.6.2"
80
+ "standard-version": "^9.5.0",
81
+ "typescript": "^4.7.4"
82
82
  },
83
83
  "engines": {
84
84
  "node": ">=12.7.0"
@@ -0,0 +1,56 @@
1
+ import * as prismicT from "@prismicio/types";
2
+
3
+ import { createFaker, Faker } from "../lib/createFaker";
4
+
5
+ import { Seed, WithoutFakerConfig } from "../types";
6
+
7
+ import { query, MockRestApiQueryConfig } from "./query";
8
+ import { ref, MockRestApiRefConfig } from "./ref";
9
+ import { repository, MockRestApiRepositoryConfig } from "./repository";
10
+ import { tags, MockRestApiTagsConfig } from "./tags";
11
+
12
+ export const createAPIMockFactory = (
13
+ ...args: ConstructorParameters<typeof APIMockFactory>
14
+ ): APIMockFactory => {
15
+ return new APIMockFactory(...args);
16
+ };
17
+
18
+ type APIMockFactoryConfig =
19
+ | {
20
+ seed: Seed;
21
+ }
22
+ | {
23
+ faker: Faker;
24
+ };
25
+
26
+ export class APIMockFactory {
27
+ private faker: Faker;
28
+
29
+ constructor(config: APIMockFactoryConfig) {
30
+ this.faker = "faker" in config ? config.faker : createFaker(config.seed);
31
+ }
32
+
33
+ get seed() {
34
+ return this.faker.seed;
35
+ }
36
+
37
+ query<Document extends prismicT.PrismicDocument = prismicT.PrismicDocument>(
38
+ config?: WithoutFakerConfig<MockRestApiQueryConfig<Document>>,
39
+ ) {
40
+ return query({ ...config, faker: this.faker });
41
+ }
42
+
43
+ ref<IsScheduled extends boolean = false>(
44
+ config?: WithoutFakerConfig<MockRestApiRefConfig<IsScheduled>>,
45
+ ) {
46
+ return ref({ ...config, faker: this.faker });
47
+ }
48
+
49
+ repository(config?: WithoutFakerConfig<MockRestApiRepositoryConfig>) {
50
+ return repository({ ...config, faker: this.faker });
51
+ }
52
+
53
+ tags(config?: WithoutFakerConfig<MockRestApiTagsConfig>) {
54
+ return tags({ ...config, faker: this.faker });
55
+ }
56
+ }
package/src/api/query.ts CHANGED
@@ -15,9 +15,9 @@ export type MockRestApiQueryConfig<
15
15
  export const query = <
16
16
  Document extends prismicT.PrismicDocument = prismicT.PrismicDocument,
17
17
  >(
18
- config: MockRestApiQueryConfig<Document> = {},
18
+ config: MockRestApiQueryConfig<Document>,
19
19
  ): prismicT.Query<Document> => {
20
- const faker = createFaker(config.seed);
20
+ const faker = config.faker || createFaker(config.seed);
21
21
 
22
22
  const documents = config.documents || [];
23
23
  const page = Math.max(1, config.page ?? 1);
package/src/api/ref.ts CHANGED
@@ -19,9 +19,9 @@ export type MockRestApiRefValue<IsScheduled extends boolean = false> = Omit<
19
19
  : { scheduledAt?: never });
20
20
 
21
21
  export const ref = <IsScheduled extends boolean = false>(
22
- config: MockRestApiRefConfig<IsScheduled> = {},
22
+ config: MockRestApiRefConfig<IsScheduled>,
23
23
  ): MockRestApiRefValue<IsScheduled> => {
24
- const faker = createFaker(config.seed);
24
+ const faker = config.faker || createFaker(config.seed);
25
25
 
26
26
  const value: prismicT.Ref = {
27
27
  id: faker.hash(16),
@@ -34,7 +34,7 @@ export const ref = <IsScheduled extends boolean = false>(
34
34
 
35
35
  if (config.isScheduled) {
36
36
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
37
- value.scheduledAt = timestamp({ seed: config.seed })!;
37
+ value.scheduledAt = timestamp({ faker })!;
38
38
  }
39
39
 
40
40
  return value as MockRestApiRefValue<IsScheduled>;
@@ -13,24 +13,22 @@ export type MockRestApiRepositoryConfig = {
13
13
  } & MockRestApiConfig;
14
14
 
15
15
  export const repository = (
16
- config: MockRestApiRepositoryConfig = {},
16
+ config: MockRestApiRepositoryConfig,
17
17
  ): prismicT.Repository => {
18
- const faker = createFaker(config.seed);
18
+ const faker = config.faker || createFaker(config.seed);
19
19
 
20
20
  const types = (config.customTypeModels || []).reduce((acc, model) => {
21
- acc[model.id] = model.label;
21
+ acc[model.id] = model.label || model.id;
22
22
 
23
23
  return acc;
24
24
  }, {} as prismicT.Repository["types"]);
25
25
 
26
26
  return {
27
27
  refs: [
28
- ref({ seed: config.seed, isMasterRef: true }),
29
- ...(config.withReleases
30
- ? [ref({ seed: config.seed }), ref({ seed: config.seed })]
31
- : []),
28
+ ref({ faker, isMasterRef: true }),
29
+ ...(config.withReleases ? [ref({ faker }), ref({ faker })] : []),
32
30
  ],
33
- integrationFieldsRef: ref({ seed: config.seed }).ref,
31
+ integrationFieldsRef: ref({ faker }).ref,
34
32
  types,
35
33
  languages: [
36
34
  {
@@ -39,7 +37,7 @@ export const repository = (
39
37
  },
40
38
  ],
41
39
  tags: generateTags({
42
- seed: config.seed,
40
+ faker,
43
41
  min: 1,
44
42
  max: 10,
45
43
  }),
package/src/api/tags.ts CHANGED
@@ -1,14 +1,17 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
+ import { createFaker } from "../lib/createFaker";
3
4
  import { generateTags } from "../lib/generateTags";
4
5
 
5
6
  import { MockRestApiConfig } from "../types";
6
7
 
7
8
  export type MockRestApiTagsConfig = MockRestApiConfig;
8
9
 
9
- export const tags = (config: MockRestApiTagsConfig = {}): prismicT.Tags => {
10
+ export const tags = (config: MockRestApiTagsConfig): prismicT.Tags => {
11
+ const faker = config.faker || createFaker(config.seed);
12
+
10
13
  return generateTags({
11
- seed: config.seed,
14
+ faker,
12
15
  min: 1,
13
16
  max: 10,
14
17
  });
@@ -0,0 +1,52 @@
1
+ import { createFaker, Faker } from "./lib/createFaker";
2
+
3
+ import { Seed } from "./types";
4
+
5
+ import {
6
+ createModelMockFactory,
7
+ ModelMockFactory,
8
+ } from "./model/createModelMockFactory";
9
+ import {
10
+ createValueMockFactory,
11
+ ValueMockFactory,
12
+ } from "./value/createValueMockFactory";
13
+ import {
14
+ createAPIMockFactory,
15
+ APIMockFactory,
16
+ } from "./api/createAPIMockFactory";
17
+
18
+ export const createMockFactory = (
19
+ ...args: ConstructorParameters<typeof MockFactory>
20
+ ): MockFactory => {
21
+ return new MockFactory(...args);
22
+ };
23
+
24
+ type PrismicMockConfig =
25
+ | {
26
+ seed: Seed;
27
+ faker?: never;
28
+ }
29
+ | {
30
+ faker: Faker;
31
+ seed?: never;
32
+ };
33
+
34
+ export class MockFactory {
35
+ private faker: Faker;
36
+
37
+ api: APIMockFactory;
38
+ model: ModelMockFactory;
39
+ value: ValueMockFactory;
40
+
41
+ constructor(config: PrismicMockConfig) {
42
+ this.faker = config.faker || createFaker(config.seed);
43
+
44
+ this.api = createAPIMockFactory({ faker: this.faker });
45
+ this.model = createModelMockFactory({ faker: this.faker });
46
+ this.value = createValueMockFactory({ faker: this.faker });
47
+ }
48
+
49
+ get seed() {
50
+ return this.faker.seed;
51
+ }
52
+ }
package/src/index.ts CHANGED
@@ -1,3 +1,18 @@
1
1
  export * as api from "./api";
2
2
  export * as model from "./model";
3
3
  export * as value from "./value";
4
+
5
+ export { createMockFactory, MockFactory } from "./createMockFactory";
6
+
7
+ export {
8
+ createAPIMockFactory,
9
+ APIMockFactory,
10
+ } from "./api/createAPIMockFactory";
11
+ export {
12
+ createModelMockFactory,
13
+ ModelMockFactory,
14
+ } from "./model/createModelMockFactory";
15
+ export {
16
+ createValueMockFactory,
17
+ ValueMockFactory,
18
+ } from "./value/createValueMockFactory";
@@ -1,8 +1,8 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
- import { createFaker } from "../lib/createFaker";
3
+ import { createFaker, Faker } from "../lib/createFaker";
4
4
 
5
- import { MockValueConfig } from "../types";
5
+ import { Seed } from "../types";
6
6
 
7
7
  type BuildEmbedFieldConfig<
8
8
  Data extends prismicT.AnyOEmbed = prismicT.AnyOEmbed,
@@ -10,14 +10,23 @@ type BuildEmbedFieldConfig<
10
10
  url?: string;
11
11
  html?: string;
12
12
  data: Data;
13
- } & Pick<MockValueConfig, "seed">;
13
+ } & (
14
+ | {
15
+ seed: Seed;
16
+ faker?: never;
17
+ }
18
+ | {
19
+ faker: Faker;
20
+ seed?: never;
21
+ }
22
+ );
14
23
 
15
24
  export const buildEmbedField = <
16
25
  Data extends prismicT.AnyOEmbed = prismicT.AnyOEmbed,
17
26
  >(
18
27
  config: BuildEmbedFieldConfig<Data>,
19
28
  ): prismicT.EmbedField<Data, "filled"> => {
20
- const faker = createFaker(config.seed);
29
+ const faker = config.faker || createFaker(config.seed);
21
30
 
22
31
  return {
23
32
  embed_url: config.url ?? faker.url(),
@@ -1,16 +1,27 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
  import * as changeCase from "change-case";
3
3
 
4
- import { createFaker } from "../lib/createFaker";
4
+ import { createFaker, Faker } from "../lib/createFaker";
5
5
 
6
- import { MockValueStateConfig, MockImageData, MockValueConfig } from "../types";
6
+ import { MockValueStateConfig, MockImageData, Seed } from "../types";
7
7
 
8
8
  type BuildImageFieldConfig<
9
9
  State extends prismicT.FieldState = prismicT.FieldState,
10
10
  > = {
11
11
  imageData: MockImageData;
12
- constraint?: prismicT.CustomTypeModelImageField["config"]["constraint"];
13
- } & Pick<MockValueConfig, "seed"> &
12
+ constraint?: NonNullable<
13
+ prismicT.CustomTypeModelImageField["config"]
14
+ >["constraint"];
15
+ } & (
16
+ | {
17
+ seed: Seed;
18
+ faker?: never;
19
+ }
20
+ | {
21
+ faker: Faker;
22
+ seed?: never;
23
+ }
24
+ ) &
14
25
  Pick<MockValueStateConfig<State>, "state">;
15
26
 
16
27
  export const buildImageFieldImage = <
@@ -26,7 +37,7 @@ export const buildImageFieldImage = <
26
37
  copyright: null,
27
38
  } as prismicT.ImageFieldImage<State>;
28
39
  } else {
29
- const faker = createFaker(config.seed);
40
+ const faker = config.faker || createFaker(config.seed);
30
41
 
31
42
  const url = new URL(config.imageData.url);
32
43
 
@@ -1,31 +1,26 @@
1
1
  import Rand from "rand-seed";
2
2
 
3
3
  import { Seed } from "../types";
4
- import { FAKER_SEED } from "../constants";
5
- import { lorem, loremWords } from "./lorem";
6
-
7
- export const createFaker = (seed: Seed = FAKER_SEED) => {
8
- const normalizedSeed = seed.toString();
9
4
 
10
- if (createFaker.cache[normalizedSeed]) {
11
- return createFaker.cache[normalizedSeed];
12
- } else {
13
- const faker = new Faker(normalizedSeed);
5
+ import { lorem, loremWords } from "./lorem";
14
6
 
15
- return (createFaker.cache[normalizedSeed] = faker);
16
- }
7
+ export const createFaker = (seed: Seed): Faker => {
8
+ return new Faker(seed);
17
9
  };
18
- createFaker.cache = {} as Record<string, Faker>;
19
10
 
20
11
  const DAY_MS = 1000 * 60 * 60 * 24;
21
12
  const YEAR_MS = DAY_MS * 365;
22
13
  const YEAR_2022_MS = 52 * (YEAR_MS + DAY_MS / 4);
23
14
 
24
15
  export class Faker {
16
+ seed: Seed;
17
+
25
18
  private rand: Rand;
26
19
 
27
- constructor(seed: string) {
28
- this.rand = new Rand(seed);
20
+ constructor(seed: Seed) {
21
+ this.seed = seed;
22
+
23
+ this.rand = new Rand(seed.toString());
29
24
  }
30
25
 
31
26
  boolean(): boolean {
@@ -41,7 +36,11 @@ export class Faker {
41
36
  }
42
37
 
43
38
  randomElements<T>(elements: readonly T[]): T[] {
44
- return elements.filter(() => this.boolean());
39
+ const alwaysInclude = this.randomElement(elements);
40
+
41
+ return elements.filter(
42
+ (element) => element === alwaysInclude || this.boolean(),
43
+ );
45
44
  }
46
45
 
47
46
  range(min: number, max: number): number {
@@ -1,13 +1,21 @@
1
1
  import * as changeCase from "change-case";
2
2
 
3
- import { createFaker } from "../lib/createFaker";
3
+ import { createFaker, Faker } from "../lib/createFaker";
4
4
 
5
- import { MockModelConfig } from "../types";
5
+ import { Seed } from "../types";
6
6
 
7
- type GenerateFieldIdConfig = Pick<MockModelConfig, "seed">;
7
+ type GenerateFieldIdConfig =
8
+ | {
9
+ seed: Seed;
10
+ faker?: never;
11
+ }
12
+ | {
13
+ faker: Faker;
14
+ seed?: never;
15
+ };
8
16
 
9
17
  export const generateCustomTypeId = (config: GenerateFieldIdConfig): string => {
10
- const faker = createFaker(config.seed);
18
+ const faker = config.faker || createFaker(config.seed);
11
19
 
12
20
  return changeCase.snakeCase(faker.words(faker.range(1, 3)));
13
21
  };
@@ -1,13 +1,21 @@
1
1
  import * as changeCase from "change-case";
2
2
 
3
- import { createFaker } from "../lib/createFaker";
3
+ import { createFaker, Faker } from "../lib/createFaker";
4
4
 
5
- import { MockModelConfig } from "../types";
5
+ import { Seed } from "../types";
6
6
 
7
- type GenerateFieldIdConfig = Pick<MockModelConfig, "seed">;
7
+ type GenerateFieldIdConfig =
8
+ | {
9
+ seed: Seed;
10
+ faker?: never;
11
+ }
12
+ | {
13
+ faker: Faker;
14
+ seed?: never;
15
+ };
8
16
 
9
17
  export const generateFieldId = (config: GenerateFieldIdConfig): string => {
10
- const faker = createFaker(config.seed);
18
+ const faker = config.faker || createFaker(config.seed);
11
19
 
12
20
  return changeCase.snakeCase(faker.words(faker.range(1, 3)));
13
21
  };
@@ -1,16 +1,25 @@
1
1
  import * as changeCase from "change-case";
2
2
 
3
- import { createFaker } from "../lib/createFaker";
3
+ import { createFaker, Faker } from "../lib/createFaker";
4
4
 
5
- import { MockValueConfig } from "../types";
5
+ import { Seed } from "../types";
6
6
 
7
7
  type GenerateTagsConfig = {
8
8
  min?: number;
9
9
  max?: number;
10
- } & Pick<MockValueConfig, "seed">;
10
+ } & (
11
+ | {
12
+ seed: Seed;
13
+ faker?: never;
14
+ }
15
+ | {
16
+ faker: Faker;
17
+ seed?: never;
18
+ }
19
+ );
11
20
 
12
21
  export const generateTags = (config: GenerateTagsConfig): string[] => {
13
- const faker = createFaker(config.seed);
22
+ const faker = config.faker || createFaker(config.seed);
14
23
 
15
24
  return Array.from(
16
25
  { length: faker.range(config.min ?? 0, config.max ?? 2) },
@@ -1,6 +1,6 @@
1
- import { createFaker } from "../lib/createFaker";
1
+ import { createFaker, Faker } from "../lib/createFaker";
2
2
 
3
- import { MockEmbedData, MockValueConfig } from "../types";
3
+ import { MockEmbedData, Seed } from "../types";
4
4
 
5
5
  const dataSet: MockEmbedData[] = [
6
6
  {
@@ -81,12 +81,20 @@ const dataSet: MockEmbedData[] = [
81
81
  height: 113,
82
82
  },
83
83
  ];
84
- type GetMockEmbedDataConfig = Pick<MockValueConfig, "seed">;
84
+ type GetMockEmbedDataConfig =
85
+ | {
86
+ seed: Seed;
87
+ faker?: never;
88
+ }
89
+ | {
90
+ faker: Faker;
91
+ seed?: never;
92
+ };
85
93
 
86
94
  export const getMockEmbedData = (
87
95
  config: GetMockEmbedDataConfig,
88
96
  ): MockEmbedData => {
89
- const faker = createFaker(config.seed);
97
+ const faker = config.faker || createFaker(config.seed);
90
98
 
91
99
  return faker.randomElement(dataSet);
92
100
  };
@@ -1,6 +1,6 @@
1
- import { createFaker } from "../lib/createFaker";
1
+ import { createFaker, Faker } from "../lib/createFaker";
2
2
 
3
- import { MockImageData, MockValueConfig } from "../types";
3
+ import { MockImageData, Seed } from "../types";
4
4
 
5
5
  const dataSet: MockImageData[] = [
6
6
  {
@@ -85,12 +85,20 @@ const dataSet: MockImageData[] = [
85
85
  },
86
86
  ];
87
87
 
88
- type GetMockImageDataConfig = Pick<MockValueConfig, "seed">;
88
+ type GetMockImageDataConfig =
89
+ | {
90
+ seed: Seed;
91
+ faker?: never;
92
+ }
93
+ | {
94
+ faker: Faker;
95
+ seed?: never;
96
+ };
89
97
 
90
98
  export const getMockImageData = (
91
99
  config: GetMockImageDataConfig,
92
100
  ): MockImageData => {
93
- const faker = createFaker(config.seed);
101
+ const faker = config.faker || createFaker(config.seed);
94
102
 
95
103
  return faker.randomElement(dataSet);
96
104
  };