@prismicio/mock 0.0.6 → 0.0.9

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 (99) hide show
  1. package/README.md +4 -1
  2. package/dist/api/index.cjs +242 -122
  3. package/dist/api/index.cjs.map +1 -0
  4. package/dist/api/index.d.ts +3 -2
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/index.js +669 -0
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/index.cjs +581 -571
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.ts +155 -247
  11. package/dist/{index.mjs → index.js} +574 -561
  12. package/dist/index.js.map +1 -0
  13. package/dist/model/index.cjs +294 -257
  14. package/dist/model/index.cjs.map +1 -0
  15. package/dist/model/index.d.ts +72 -106
  16. package/dist/model/index.d.ts.map +1 -0
  17. package/dist/model/index.js +556 -0
  18. package/dist/model/index.js.map +1 -0
  19. package/dist/value/index.cjs +500 -647
  20. package/dist/value/index.cjs.map +1 -0
  21. package/dist/value/index.d.ts +71 -129
  22. package/dist/value/index.d.ts.map +1 -0
  23. package/dist/value/index.js +1461 -0
  24. package/dist/value/index.js.map +1 -0
  25. package/package.json +30 -27
  26. package/src/api/query.ts +2 -2
  27. package/src/api/ref.ts +3 -3
  28. package/src/api/repository.ts +5 -5
  29. package/src/lib/buildContentRelationshipField.ts +6 -1
  30. package/src/lib/buildEmbedField.ts +16 -27
  31. package/src/lib/buildImageFieldImage.ts +49 -0
  32. package/src/lib/createFaker.ts +98 -20
  33. package/src/lib/generateCustomTypeId.ts +1 -1
  34. package/src/lib/generateFieldId.ts +1 -3
  35. package/src/lib/generateTags.ts +4 -12
  36. package/src/lib/getMockEmbedData.ts +33 -12
  37. package/src/lib/getMockImageData.ts +1 -1
  38. package/src/lib/lorem.ts +112 -0
  39. package/src/model/boolean.ts +1 -1
  40. package/src/model/buildMockGroupFieldMap.ts +65 -0
  41. package/src/model/color.ts +2 -2
  42. package/src/model/contentRelationship.ts +16 -23
  43. package/src/model/customType.ts +49 -48
  44. package/src/model/date.ts +2 -2
  45. package/src/model/embed.ts +2 -2
  46. package/src/model/geoPoint.ts +1 -1
  47. package/src/model/group.ts +9 -16
  48. package/src/model/image.ts +16 -20
  49. package/src/model/index.ts +2 -0
  50. package/src/model/integrationFields.ts +5 -3
  51. package/src/model/keyText.ts +2 -2
  52. package/src/model/link.ts +3 -3
  53. package/src/model/linkToMedia.ts +2 -2
  54. package/src/model/number.ts +2 -2
  55. package/src/model/richText.ts +6 -6
  56. package/src/model/select.ts +13 -18
  57. package/src/model/sharedSlice.ts +15 -42
  58. package/src/model/sharedSliceVariation.ts +36 -24
  59. package/src/model/slice.ts +19 -23
  60. package/src/model/sliceZone.ts +23 -59
  61. package/src/model/timestamp.ts +2 -2
  62. package/src/model/title.ts +5 -5
  63. package/src/model/uid.ts +2 -2
  64. package/src/types.ts +130 -88
  65. package/src/value/boolean.ts +1 -1
  66. package/src/value/color.ts +16 -6
  67. package/src/value/contentRelationship.ts +54 -39
  68. package/src/value/customType.ts +5 -5
  69. package/src/value/date.ts +25 -9
  70. package/src/value/embed.ts +32 -7
  71. package/src/value/geoPoint.ts +21 -11
  72. package/src/value/group.ts +31 -45
  73. package/src/value/image.ts +22 -9
  74. package/src/value/integrationFields.ts +26 -14
  75. package/src/value/keyText.ts +16 -6
  76. package/src/value/link.ts +36 -37
  77. package/src/value/linkToMedia.ts +19 -23
  78. package/src/value/number.ts +16 -6
  79. package/src/value/richText/embed.ts +2 -2
  80. package/src/value/richText/heading.ts +10 -17
  81. package/src/value/richText/image.ts +8 -6
  82. package/src/value/richText/index.ts +4 -9
  83. package/src/value/richText/list.ts +4 -8
  84. package/src/value/richText/oList.ts +4 -8
  85. package/src/value/richText/paragraph.ts +8 -4
  86. package/src/value/richText/preformatted.ts +9 -5
  87. package/src/value/select.ts +23 -8
  88. package/src/value/sharedSlice.ts +3 -3
  89. package/src/value/sharedSliceVariation.ts +4 -36
  90. package/src/value/slice.ts +3 -32
  91. package/src/value/sliceZone.ts +54 -69
  92. package/src/value/timestamp.ts +42 -16
  93. package/src/value/title.ts +26 -13
  94. package/src/value/uid.ts +2 -2
  95. package/dist/api/index.mjs +0 -515
  96. package/dist/model/index.mjs +0 -465
  97. package/dist/value/index.mjs +0 -1554
  98. package/src/lib/buildImageField.ts +0 -34
  99. package/src/lib/buildMockGroupFieldMap.ts +0 -84
@@ -1,74 +1,75 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
  import * as changeCase from "change-case";
3
3
 
4
- import {
5
- buildMockGroupFieldMap,
6
- BuildMockGroupFieldMapConfig,
7
- } from "../lib/buildMockGroupFieldMap";
8
4
  import { createFaker } from "../lib/createFaker";
9
- import { generateCustomTypeId } from "../lib/generateCustomTypeId";
10
- import { generateFieldId } from "../lib/generateFieldId";
11
5
 
12
6
  import { MockModelConfig } from "../types";
13
7
 
14
- import { uid } from "./uid";
15
- import { sliceZone } from "./sliceZone";
16
-
17
- type MockCustomTypeModelConfig = {
18
- tabsCount?: number;
19
- withUID?: boolean;
20
- configs?: BuildMockGroupFieldMapConfig["configs"];
8
+ type MockCustomTypeModelConfig<
9
+ Definition extends
10
+ | prismicT.CustomTypeModelTab
11
+ | prismicT.CustomTypeModelDefinition =
12
+ | prismicT.CustomTypeModelTab
13
+ | prismicT.CustomTypeModelDefinition,
14
+ > = {
15
+ id?: string;
16
+ label?: string;
17
+ status?: boolean;
18
+ repeatable?: boolean;
21
19
  } & (
22
20
  | {
23
- withSliceZones?: false;
21
+ fields?: Definition;
22
+ tabs?: never;
24
23
  }
25
24
  | {
26
- withSliceZones: true;
27
- withSharedSlices?: boolean;
25
+ tabs?: Definition;
26
+ fields?: never;
28
27
  }
29
28
  ) &
30
29
  MockModelConfig;
31
30
 
32
- export const customType = (
33
- config: MockCustomTypeModelConfig = {},
34
- ): prismicT.CustomTypeModel => {
35
- const faker = createFaker(config.seed);
36
-
37
- const tabsCount =
38
- config.tabsCount ?? faker.datatype.number({ min: 1, max: 3 });
39
-
40
- const json: prismicT.CustomTypeModelDefinition = {};
41
- for (let i = 0; i < tabsCount; i++) {
42
- const tabName = changeCase.capitalCase(faker.lorem.word());
43
- const tabFields: prismicT.CustomTypeModelTab = buildMockGroupFieldMap({
44
- seed: config.seed,
45
- configs: config.configs,
46
- });
31
+ type MockCustomTypeModel<
32
+ Definition extends
33
+ | prismicT.CustomTypeModelTab
34
+ | prismicT.CustomTypeModelDefinition,
35
+ > = Definition extends prismicT.CustomTypeModelTab
36
+ ? prismicT.CustomTypeModel<string, Record<"Main", Definition>>
37
+ : Definition extends prismicT.CustomTypeModelDefinition
38
+ ? prismicT.CustomTypeModel<string, Definition>
39
+ : never;
47
40
 
48
- if (i === 0 && config.withUID) {
49
- const fieldId = generateFieldId({ seed: config.seed });
41
+ export const customType = <
42
+ Definition extends
43
+ | prismicT.CustomTypeModelTab
44
+ | prismicT.CustomTypeModelDefinition,
45
+ >(
46
+ config: MockCustomTypeModelConfig<Definition> = {},
47
+ ): MockCustomTypeModel<Definition> => {
48
+ const faker = createFaker(config.seed);
50
49
 
51
- tabFields[fieldId] = uid();
52
- }
50
+ let label: string =
51
+ config.label || changeCase.capitalCase(faker.words(faker.range(1, 2)));
52
+ let id: string = config.id || changeCase.snakeCase(label);
53
53
 
54
- if (config.withSliceZones) {
55
- const sliceZoneId = generateFieldId({ seed: config.seed });
54
+ if (config.id && !config.label) {
55
+ label = changeCase.capitalCase(config.id);
56
+ } else if (config.label && !config.label) {
57
+ id = changeCase.snakeCase(config.label);
58
+ }
56
59
 
57
- tabFields[sliceZoneId] = sliceZone({
58
- withSharedSlices: config.withSharedSlices,
59
- });
60
- }
60
+ let json = {} as MockCustomTypeModel<Definition>["json"];
61
61
 
62
- json[tabName] = tabFields;
62
+ if ("fields" in config && config.fields) {
63
+ json = { Main: config.fields } as typeof json;
64
+ } else if ("tabs" in config && config.tabs) {
65
+ json = config.tabs as typeof json;
63
66
  }
64
67
 
65
- const id = generateCustomTypeId({ seed: config.seed });
66
-
67
68
  return {
68
69
  id,
69
- label: changeCase.capitalCase(id),
70
- status: faker.datatype.boolean(),
71
- repeatable: faker.datatype.boolean(),
70
+ label,
71
+ status: config.status ?? faker.boolean(),
72
+ repeatable: config.repeatable ?? faker.boolean(),
72
73
  json,
73
- };
74
+ } as MockCustomTypeModel<Definition>;
74
75
  };
package/src/model/date.ts CHANGED
@@ -15,8 +15,8 @@ export const date = (
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.Date,
17
17
  config: {
18
- label: changeCase.capitalCase(faker.company.bsNoun()),
19
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
18
+ label: changeCase.capitalCase(faker.word()),
19
+ placeholder: changeCase.sentenceCase(faker.words(3)),
20
20
  },
21
21
  };
22
22
  };
@@ -15,8 +15,8 @@ export const embed = (
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.Embed,
17
17
  config: {
18
- label: changeCase.capitalCase(faker.company.bsNoun()),
19
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
18
+ label: changeCase.capitalCase(faker.word()),
19
+ placeholder: changeCase.sentenceCase(faker.words(3)),
20
20
  },
21
21
  };
22
22
  };
@@ -15,7 +15,7 @@ export const geoPoint = (
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.GeoPoint,
17
17
  config: {
18
- label: changeCase.capitalCase(faker.company.bsNoun()),
18
+ label: changeCase.capitalCase(faker.word()),
19
19
  },
20
20
  };
21
21
  };
@@ -1,31 +1,24 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
  import * as changeCase from "change-case";
3
3
 
4
- import {
5
- buildMockGroupFieldMap,
6
- BuildMockGroupFieldMapConfig,
7
- } from "../lib/buildMockGroupFieldMap";
8
4
  import { createFaker } from "../lib/createFaker";
9
5
 
10
- import { MockModelConfig } from "../types";
6
+ import { GroupFieldModelMap, MockModelConfig } from "../types";
11
7
 
12
- type MockGroupModelConfig = BuildMockGroupFieldMapConfig & MockModelConfig;
8
+ type MockGroupModelConfig<Fields extends GroupFieldModelMap> = {
9
+ fields?: Fields;
10
+ } & MockModelConfig;
13
11
 
14
- export const group = (
15
- config: MockGroupModelConfig = {},
16
- ): prismicT.CustomTypeModelGroupField => {
12
+ export const group = <Fields extends GroupFieldModelMap>(
13
+ config: MockGroupModelConfig<Fields> = {},
14
+ ): prismicT.CustomTypeModelGroupField<Fields> => {
17
15
  const faker = createFaker(config.seed);
18
16
 
19
- const fields = buildMockGroupFieldMap({
20
- seed: config.seed,
21
- configs: config.configs,
22
- });
23
-
24
17
  return {
25
18
  type: prismicT.CustomTypeModelFieldType.Group,
26
19
  config: {
27
- label: changeCase.capitalCase(faker.company.bsNoun()),
28
- fields,
20
+ label: changeCase.capitalCase(faker.word()),
21
+ fields: config.fields || ({} as Fields),
29
22
  },
30
23
  };
31
24
  };
@@ -5,37 +5,33 @@ import { createFaker } from "../lib/createFaker";
5
5
 
6
6
  import { MockModelConfig } from "../types";
7
7
 
8
- type MockImageModelConfig = {
8
+ type MockImageModelConfig<ThumbnailNames extends string = string> = {
9
9
  withConstraint?: boolean;
10
- thumbnailsCount?: number;
10
+ thumbnailNames?: readonly ThumbnailNames[];
11
11
  } & MockModelConfig;
12
12
 
13
- export const image = (
14
- config: MockImageModelConfig = {},
15
- ): prismicT.CustomTypeModelImageField => {
13
+ export const image = <ThumbnailNames extends string = string>(
14
+ config: MockImageModelConfig<ThumbnailNames> = {},
15
+ ): prismicT.CustomTypeModelImageField<ThumbnailNames> => {
16
16
  const faker = createFaker(config.seed);
17
17
 
18
- const thumbnailsCount = config.thumbnailsCount ?? faker.datatype.number(3);
18
+ const thumbnails = (config.thumbnailNames || []).map((name) => {
19
+ return {
20
+ name,
21
+ width: faker.range(500, 2000),
22
+ height: faker.range(500, 2000),
23
+ };
24
+ });
19
25
 
20
26
  return {
21
27
  type: prismicT.CustomTypeModelFieldType.Image,
22
28
  config: {
23
- label: changeCase.capitalCase(faker.company.bsNoun()),
29
+ label: changeCase.capitalCase(faker.word()),
24
30
  constraint: {
25
- width: config.withConstraint
26
- ? faker.datatype.number({ min: 500, max: 2000 })
27
- : null,
28
- height: config.withConstraint
29
- ? faker.datatype.number({ min: 500, max: 2000 })
30
- : null,
31
+ width: config.withConstraint ? faker.range(500, 2000) : null,
32
+ height: config.withConstraint ? faker.range(500, 2000) : null,
31
33
  },
32
- thumbnails: Array(thumbnailsCount)
33
- .fill(undefined)
34
- .map(() => ({
35
- name: changeCase.pascalCase(faker.company.bsNoun()),
36
- width: faker.datatype.number({ min: 500, max: 2000 }),
37
- height: faker.datatype.number({ min: 500, max: 2000 }),
38
- })),
34
+ thumbnails,
39
35
  },
40
36
  };
41
37
  };
@@ -22,3 +22,5 @@ export { sliceZone } from "./sliceZone";
22
22
  export { timestamp } from "./timestamp";
23
23
  export { title } from "./title";
24
24
  export { uid } from "./uid";
25
+
26
+ export { buildMockGroupFieldMap } from "./buildMockGroupFieldMap";
@@ -5,7 +5,9 @@ import { createFaker } from "../lib/createFaker";
5
5
 
6
6
  import { MockModelConfig } from "../types";
7
7
 
8
- export type MockIntegrationFieldsModelConfig = MockModelConfig;
8
+ export type MockIntegrationFieldsModelConfig = {
9
+ catalog?: string;
10
+ } & MockModelConfig;
9
11
 
10
12
  export const integrationFields = (
11
13
  config: MockIntegrationFieldsModelConfig = {},
@@ -15,8 +17,8 @@ export const integrationFields = (
15
17
  return {
16
18
  type: prismicT.CustomTypeModelFieldType.IntegrationFields,
17
19
  config: {
18
- label: changeCase.capitalCase(faker.company.bsNoun()),
19
- catalog: changeCase.snakeCase(faker.lorem.words(4)),
20
+ label: changeCase.capitalCase(faker.word()),
21
+ catalog: config.catalog || changeCase.snakeCase(faker.words(2)),
20
22
  },
21
23
  };
22
24
  };
@@ -15,8 +15,8 @@ export const keyText = (
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.Text,
17
17
  config: {
18
- label: changeCase.capitalCase(faker.company.bsNoun()),
19
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
18
+ label: changeCase.capitalCase(faker.word()),
19
+ placeholder: changeCase.sentenceCase(faker.words(3)),
20
20
  },
21
21
  };
22
22
  };
package/src/model/link.ts CHANGED
@@ -28,13 +28,13 @@ export const link = <AllowTargetBlank extends boolean = boolean>(
28
28
  return {
29
29
  type: prismicT.CustomTypeModelFieldType.Link,
30
30
  config: {
31
- label: changeCase.capitalCase(faker.company.bsNoun()),
32
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
31
+ label: changeCase.capitalCase(faker.word()),
32
+ placeholder: changeCase.sentenceCase(faker.words(3)),
33
33
  select: null,
34
34
  allowTargetBlank:
35
35
  ("allowTargetBlank" in config
36
36
  ? config.allowTargetBlank
37
- : faker.datatype.boolean()) || undefined,
37
+ : faker.boolean()) || undefined,
38
38
  },
39
39
  } as MockLinkModel<AllowTargetBlank>;
40
40
  };
@@ -15,8 +15,8 @@ export const linkToMedia = (
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.Link,
17
17
  config: {
18
- label: changeCase.capitalCase(faker.company.bsNoun()),
19
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
18
+ label: changeCase.capitalCase(faker.word()),
19
+ placeholder: changeCase.sentenceCase(faker.words(3)),
20
20
  select: prismicT.CustomTypeModelLinkSelectType.Media,
21
21
  },
22
22
  };
@@ -15,8 +15,8 @@ export const number = (
15
15
  return {
16
16
  type: prismicT.CustomTypeModelFieldType.Number,
17
17
  config: {
18
- label: changeCase.capitalCase(faker.company.bsNoun()),
19
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
18
+ label: changeCase.capitalCase(faker.word()),
19
+ placeholder: changeCase.sentenceCase(faker.words(3)),
20
20
  },
21
21
  };
22
22
  };
@@ -18,8 +18,8 @@ export const richText = <WithMultipleBlocks extends boolean = boolean>(
18
18
  : prismicT.CustomTypeModelRichTextSingleField => {
19
19
  const faker = createFaker(config.seed);
20
20
 
21
- const blockTypes = faker.random
22
- .arrayElements([
21
+ const blockTypes = faker
22
+ .randomElements([
23
23
  prismicT.RichTextNodeType.heading1,
24
24
  prismicT.RichTextNodeType.heading2,
25
25
  prismicT.RichTextNodeType.heading3,
@@ -39,16 +39,16 @@ export const richText = <WithMultipleBlocks extends boolean = boolean>(
39
39
  .join(",");
40
40
 
41
41
  const blockTypeConfig =
42
- config.withMultipleBlocks ?? faker.datatype.boolean()
42
+ config.withMultipleBlocks ?? faker.boolean()
43
43
  ? { multi: blockTypes }
44
44
  : { single: blockTypes };
45
45
 
46
46
  return {
47
47
  type: prismicT.CustomTypeModelFieldType.StructuredText,
48
48
  config: {
49
- label: changeCase.capitalCase(faker.company.bsNoun()),
50
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
51
- allowTargetBlank: faker.datatype.boolean() ? true : undefined,
49
+ label: changeCase.capitalCase(faker.word()),
50
+ placeholder: changeCase.sentenceCase(faker.words(3)),
51
+ allowTargetBlank: faker.boolean() ? true : undefined,
52
52
  ...blockTypeConfig,
53
53
  },
54
54
  } as WithMultipleBlocks extends true
@@ -5,31 +5,26 @@ import { createFaker } from "../lib/createFaker";
5
5
 
6
6
  import { MockModelConfig } from "../types";
7
7
 
8
- type MockSelectModelConfig = {
9
- optionsCount?: number;
10
- withDefaultValue?: boolean;
8
+ type MockSelectModelConfig<
9
+ Option extends string = string,
10
+ DefaultOption extends Option = Option,
11
+ > = {
12
+ options?: Option[];
13
+ defaultValue?: DefaultOption;
11
14
  } & MockModelConfig;
12
15
 
13
- export const select = (
14
- config: MockSelectModelConfig = {},
15
- ): prismicT.CustomTypeModelSelectField => {
16
+ export const select = <Option extends string, DefaultOption extends Option>(
17
+ config: MockSelectModelConfig<Option, DefaultOption> = {},
18
+ ): prismicT.CustomTypeModelSelectField<Option, DefaultOption> => {
16
19
  const faker = createFaker(config.seed);
17
20
 
18
- const optionsCount =
19
- config.optionsCount ?? faker.datatype.number({ min: 1, max: 5 });
20
- const options = Array(optionsCount)
21
- .fill(undefined)
22
- .map(() => changeCase.capitalCase(faker.company.bsBuzz()));
23
-
24
21
  return {
25
22
  type: prismicT.CustomTypeModelFieldType.Select,
26
23
  config: {
27
- label: changeCase.capitalCase(faker.company.bsNoun()),
28
- placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
29
- options,
30
- default_value: config.withDefaultValue
31
- ? faker.random.arrayElement(options)
32
- : undefined,
24
+ label: changeCase.capitalCase(faker.word()),
25
+ placeholder: changeCase.sentenceCase(faker.words(3)),
26
+ options: config.options || [],
27
+ default_value: config.defaultValue || undefined,
33
28
  },
34
29
  };
35
30
  };
@@ -5,28 +5,13 @@ import { createFaker } from "../lib/createFaker";
5
5
 
6
6
  import { MockModelConfig } from "../types";
7
7
 
8
- import {
9
- MockSharedSliceVariationModelConfig,
10
- sharedSliceVariation,
11
- } from "./sharedSliceVariation";
12
-
13
8
  type MockSharedSliceModelConfig<
14
9
  Variation extends prismicT.SharedSliceModelVariation,
15
- > = (
16
- | {
17
- variations?: Variation[];
18
- variationsCount?: never;
19
- }
20
- | {
21
- variations?: never;
22
- variationsCount?: number;
23
- }
24
- ) &
25
- Pick<
26
- MockSharedSliceVariationModelConfig,
27
- "itemsFieldConfig" | "primaryFieldConfig"
28
- > &
29
- MockModelConfig;
10
+ > = {
11
+ id?: string;
12
+ name?: string;
13
+ variations?: Variation[];
14
+ } & MockModelConfig;
30
15
 
31
16
  export const sharedSlice = <
32
17
  Variation extends prismicT.SharedSliceModelVariation,
@@ -35,33 +20,21 @@ export const sharedSlice = <
35
20
  ): prismicT.SharedSliceModel<string, Variation> => {
36
21
  const faker = createFaker(config.seed);
37
22
 
38
- const name = changeCase.capitalCase(faker.company.bsNoun());
39
-
40
- let variations: Variation[] = [];
41
-
42
- if ("variations" in config) {
43
- variations = config.variations || [];
44
- } else {
45
- const variationsCount =
46
- config.variationsCount ?? faker.datatype.number({ min: 1, max: 3 });
23
+ let name: string =
24
+ config.name || changeCase.capitalCase(faker.words(faker.range(1, 2)));
25
+ let id: string = config.id || changeCase.snakeCase(name);
47
26
 
48
- variations = Array(variationsCount)
49
- .fill(undefined)
50
- .map(
51
- () =>
52
- sharedSliceVariation({
53
- seed: config.seed,
54
- itemsFieldConfig: config.itemsFieldConfig,
55
- primaryFieldConfig: config.primaryFieldConfig,
56
- }) as Variation,
57
- );
27
+ if (config.id && !config.name) {
28
+ name = changeCase.pascalCase(config.id);
29
+ } else if (config.name && !config.name) {
30
+ id = changeCase.snakeCase(config.name);
58
31
  }
59
32
 
60
33
  return {
61
34
  type: prismicT.CustomTypeModelSliceType.SharedSlice,
62
- id: changeCase.snakeCase(name),
35
+ id,
63
36
  name,
64
- description: faker.lorem.sentence(),
65
- variations,
37
+ description: changeCase.sentenceCase(faker.words(faker.range(5, 10))),
38
+ variations: config.variations || ([] as Variation[]),
66
39
  };
67
40
  };
@@ -2,38 +2,50 @@ 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 {
6
- buildMockGroupFieldMap,
7
- BuildMockGroupFieldMapConfig,
8
- } from "../lib/buildMockGroupFieldMap";
9
5
 
10
- import { MockModelConfig } from "../types";
6
+ import { GroupFieldModelMap, MockModelConfig } from "../types";
11
7
 
12
- export type MockSharedSliceVariationModelConfig = {
13
- primaryFieldConfig?: BuildMockGroupFieldMapConfig;
14
- itemsFieldConfig?: BuildMockGroupFieldMapConfig;
8
+ export type MockSharedSliceVariationModelConfig<
9
+ ID extends string = string,
10
+ PrimaryFields extends GroupFieldModelMap = GroupFieldModelMap,
11
+ ItemsFields extends GroupFieldModelMap = GroupFieldModelMap,
12
+ > = {
13
+ id?: ID;
14
+ name?: string;
15
+ primaryFields?: PrimaryFields;
16
+ itemsFields?: ItemsFields;
15
17
  } & MockModelConfig;
16
18
 
17
- export const sharedSliceVariation = (
18
- config: MockSharedSliceVariationModelConfig = {},
19
- ): prismicT.SharedSliceModelVariation => {
19
+ export const sharedSliceVariation = <
20
+ ID extends string,
21
+ PrimaryFields extends GroupFieldModelMap,
22
+ ItemsFields extends GroupFieldModelMap,
23
+ >(
24
+ config: MockSharedSliceVariationModelConfig<
25
+ ID,
26
+ PrimaryFields,
27
+ ItemsFields
28
+ > = {},
29
+ ): prismicT.SharedSliceModelVariation<ID, PrimaryFields, ItemsFields> => {
20
30
  const faker = createFaker(config.seed);
21
31
 
22
- const name = changeCase.capitalCase(faker.company.bsNoun());
32
+ let name: string =
33
+ config.name || changeCase.capitalCase(faker.words(faker.range(1, 2)));
34
+ let id: ID = config.id || (changeCase.snakeCase(name) as ID);
35
+
36
+ if (config.id && !config.name) {
37
+ name = changeCase.pascalCase(config.id);
38
+ } else if (config.name && !config.name) {
39
+ id = changeCase.snakeCase(config.name) as ID;
40
+ }
23
41
 
24
42
  return {
25
- id: changeCase.snakeCase(name),
43
+ id,
26
44
  name,
27
- description: faker.lorem.sentence(),
28
- docURL: faker.internet.url(),
29
- version: faker.git.shortSha(),
30
- primary: buildMockGroupFieldMap({
31
- seed: config.primaryFieldConfig?.seed ?? config.seed,
32
- configs: config.primaryFieldConfig?.configs,
33
- }),
34
- items: buildMockGroupFieldMap({
35
- seed: config.itemsFieldConfig?.seed ?? config.seed,
36
- configs: config.itemsFieldConfig?.configs,
37
- }),
45
+ description: changeCase.sentenceCase(faker.words(faker.range(5, 10))),
46
+ docURL: faker.url(),
47
+ version: faker.hash(7),
48
+ primary: config.primaryFields || ({} as PrimaryFields),
49
+ items: config.itemsFields || ({} as ItemsFields),
38
50
  };
39
51
  };
@@ -2,38 +2,34 @@ 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 {
6
- buildMockGroupFieldMap,
7
- BuildMockGroupFieldMapConfig,
8
- } from "../lib/buildMockGroupFieldMap";
9
5
 
10
- import { MockModelConfig } from "../types";
6
+ import { GroupFieldModelMap, MockModelConfig } from "../types";
11
7
 
12
- type MockSliceModelConfig = {
13
- repeatFieldConfig?: BuildMockGroupFieldMapConfig;
14
- nonRepeatFieldConfig?: BuildMockGroupFieldMapConfig;
8
+ type MockSliceModelConfig<
9
+ NonRepeatFields extends GroupFieldModelMap = GroupFieldModelMap,
10
+ RepeatFields extends GroupFieldModelMap = GroupFieldModelMap,
11
+ > = {
12
+ nonRepeatFields?: NonRepeatFields;
13
+ repeatFields?: RepeatFields;
15
14
  } & MockModelConfig;
16
15
 
17
- export const slice = (
18
- config: MockSliceModelConfig = {},
19
- ): prismicT.CustomTypeModelSlice => {
16
+ export const slice = <
17
+ NonRepeatFields extends GroupFieldModelMap,
18
+ RepeatFields extends GroupFieldModelMap,
19
+ >(
20
+ config: MockSliceModelConfig<NonRepeatFields, RepeatFields> = {},
21
+ ): prismicT.CustomTypeModelSlice<NonRepeatFields, RepeatFields> => {
20
22
  const faker = createFaker(config.seed);
21
23
 
22
24
  return {
23
25
  type: prismicT.CustomTypeModelSliceType.Slice,
24
- icon: changeCase.snakeCase(faker.company.bsNoun()),
25
- display: faker.datatype.boolean()
26
+ icon: changeCase.snakeCase(faker.word()),
27
+ display: faker.boolean()
26
28
  ? prismicT.CustomTypeModelSliceDisplay.Grid
27
29
  : prismicT.CustomTypeModelSliceDisplay.List,
28
- fieldset: changeCase.capitalCase(faker.lorem.words()),
29
- description: faker.lorem.sentence(),
30
- repeat: buildMockGroupFieldMap({
31
- seed: config.repeatFieldConfig?.seed ?? config.seed,
32
- configs: config.repeatFieldConfig?.configs,
33
- }),
34
- "non-repeat": buildMockGroupFieldMap({
35
- seed: config.nonRepeatFieldConfig?.seed ?? config.seed,
36
- configs: config.nonRepeatFieldConfig?.configs,
37
- }),
30
+ fieldset: changeCase.capitalCase(faker.words(2)),
31
+ description: changeCase.sentenceCase(faker.words(faker.range(5, 10))),
32
+ repeat: config.repeatFields || ({} as RepeatFields),
33
+ "non-repeat": config.nonRepeatFields || ({} as NonRepeatFields),
38
34
  };
39
35
  };