@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
@@ -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.company.bsNoun());
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.datatype.boolean(),
72
+ repeatable: config.repeatable ?? faker.datatype.boolean(),
72
73
  json,
73
- };
74
+ } as MockCustomTypeModel<Definition>;
74
75
  };
@@ -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
20
  label: changeCase.capitalCase(faker.company.bsNoun()),
28
- fields,
21
+ fields: config.fields || ({} as Fields),
29
22
  },
30
23
  };
31
24
  };
@@ -5,17 +5,23 @@ 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.datatype.number({ min: 500, max: 2000 }),
22
+ height: faker.datatype.number({ min: 500, max: 2000 }),
23
+ };
24
+ });
19
25
 
20
26
  return {
21
27
  type: prismicT.CustomTypeModelFieldType.Image,
@@ -29,13 +35,7 @@ export const image = (
29
35
  ? faker.datatype.number({ min: 500, max: 2000 })
30
36
  : null,
31
37
  },
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
- })),
38
+ thumbnails,
39
39
  },
40
40
  };
41
41
  };
@@ -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,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
24
  label: changeCase.capitalCase(faker.company.bsNoun()),
28
25
  placeholder: changeCase.sentenceCase(faker.lorem.words(3)),
29
- options,
30
- default_value: config.withDefaultValue
31
- ? faker.random.arrayElement(options)
32
- : undefined,
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.company.bsNoun());
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
37
  description: faker.lorem.sentence(),
65
- variations,
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.company.bsNoun());
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
45
  description: faker.lorem.sentence(),
28
46
  docURL: faker.internet.url(),
29
47
  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
- }),
48
+ primary: config.primaryFields || ({} as PrimaryFields),
49
+ items: config.itemsFields || ({} as ItemsFields),
38
50
  };
39
51
  };
@@ -2,21 +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 {
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 {
@@ -27,13 +29,7 @@ export const slice = (
27
29
  : prismicT.CustomTypeModelSliceDisplay.List,
28
30
  fieldset: changeCase.capitalCase(faker.lorem.words()),
29
31
  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
- }),
32
+ repeat: config.repeatFields || ({} as RepeatFields),
33
+ "non-repeat": config.nonRepeatFields || ({} as NonRepeatFields),
38
34
  };
39
35
  };
@@ -1,71 +1,35 @@
1
1
  import * as prismicT from "@prismicio/types";
2
- import * as changeCase from "change-case";
3
-
4
- import { createFaker } from "../lib/createFaker";
5
- import { generateFieldId } from "../lib/generateFieldId";
6
2
 
7
3
  import { MockModelConfig } from "../types";
8
4
 
9
- import { sharedSliceChoice } from "./sharedSliceChoice";
10
- import { slice } from "./slice";
11
-
12
- type MockSliceZoneModelConfig = (
13
- | {
14
- choices?: Record<
15
- string,
16
- prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
17
- >;
18
- choicesCount?: never;
19
- withSharedSlices?: never;
20
- }
21
- | {
22
- choices?: never;
23
- choicesCount?: number;
24
- withSharedSlices?: boolean;
25
- }
26
- ) &
27
- MockModelConfig;
28
-
29
- export const sliceZone = (
30
- config: MockSliceZoneModelConfig = {},
31
- ): prismicT.CustomTypeModelSliceZoneField => {
32
- const faker = createFaker(config.seed);
33
-
34
- let choices: Record<
5
+ type MockSliceZoneModelConfig<
6
+ Slices extends Record<
35
7
  string,
36
8
  prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
37
- > = {};
38
-
39
- if ("choices" in config) {
40
- choices = config.choices || {};
41
- } else {
42
- const choicesCount =
43
- config.choicesCount ?? faker.datatype.number({ min: 2, max: 6 });
44
-
45
- for (let i = 0; i < choicesCount; i++) {
46
- const choiceId = generateFieldId({ seed: config.seed });
9
+ > = Record<
10
+ string,
11
+ prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
12
+ >,
13
+ > = {
14
+ choices?: Slices;
15
+ } & MockModelConfig;
47
16
 
48
- choices[choiceId] = config.withSharedSlices
49
- ? sharedSliceChoice()
50
- : slice({ seed: config.seed });
51
- }
52
- }
17
+ export const sliceZone = <
18
+ Slices extends Record<
19
+ string,
20
+ prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
21
+ >,
22
+ >(
23
+ config: MockSliceZoneModelConfig<Slices> = {},
24
+ ): prismicT.CustomTypeModelSliceZoneField<Slices> => {
25
+ const labels =
26
+ {} as prismicT.CustomTypeModelSliceZoneField<Slices>["config"]["labels"];
53
27
 
54
- const labels: Record<string, prismicT.CustomTypeModelSliceLabel[]> = {};
55
- for (const choiceId in choices) {
56
- const choice = choices[choiceId];
28
+ for (const choiceId in config.choices) {
29
+ const choice = config.choices[choiceId];
57
30
 
58
31
  if (choice.type === prismicT.CustomTypeModelSliceType.Slice) {
59
- const labelsCount = faker.datatype.number({ min: 0, max: 3 });
60
-
61
- labels[choiceId] = Array(labelsCount)
62
- .fill(undefined)
63
- .map(() => ({
64
- name: changeCase.capitalCase(faker.company.bsNoun()),
65
- display: faker.datatype.boolean()
66
- ? prismicT.CustomTypeModelSliceDisplay.Grid
67
- : prismicT.CustomTypeModelSliceDisplay.List,
68
- }));
32
+ labels[choiceId as unknown as keyof typeof labels] = [];
69
33
  }
70
34
  }
71
35
 
@@ -74,7 +38,7 @@ export const sliceZone = (
74
38
  fieldset: "Slice zone",
75
39
  config: {
76
40
  labels,
77
- choices,
41
+ choices: config.choices || ({} as Slices),
78
42
  },
79
43
  };
80
44
  };
package/src/types.ts CHANGED
@@ -10,10 +10,8 @@ export type IterableElement<TargetIterable> = TargetIterable extends Iterable<
10
10
  ? ElementType
11
11
  : never;
12
12
 
13
- export type ValueOf<
14
- ObjectType,
15
- ValueType extends keyof ObjectType = keyof ObjectType,
16
- > = ObjectType[ValueType];
13
+ export type ValueOf<ObjectType extends Record<string, unknown>> =
14
+ ObjectType[string];
17
15
 
18
16
  type Simplify<T> = { [KeyType in keyof T]: T[KeyType] };
19
17
  type Except<ObjectType, KeysType extends keyof ObjectType> = Pick<
@@ -60,11 +58,22 @@ export type PrismicModel =
60
58
  | prismicT.SharedSliceModel
61
59
  | prismicT.SharedSliceModelVariation;
62
60
 
61
+ export type GroupFieldModelMap = Record<
62
+ string,
63
+ prismicT.CustomTypeModelFieldForGroup
64
+ >;
65
+
63
66
  export type MockValueConfig<Model extends PrismicModel = PrismicModel> = {
64
67
  seed?: Seed;
65
68
  model?: Model;
66
69
  };
67
70
 
71
+ export type MockValueStateConfig<
72
+ State extends prismicT.FieldState = prismicT.FieldState,
73
+ > = {
74
+ state?: State;
75
+ };
76
+
68
77
  export type MockValueConfigForModel<Model extends PrismicModel> =
69
78
  Model extends prismicT.CustomTypeModelBooleanField
70
79
  ? value.MockBooleanValueConfig
@@ -127,7 +136,17 @@ export type ModelValue<T extends PrismicModel> =
127
136
  : T extends prismicT.CustomTypeModelGroupField
128
137
  ? CustomTypeModelGroupFieldValue<T>
129
138
  : T extends prismicT.CustomTypeModelSliceZoneField
130
- ? prismicT.SliceZone
139
+ ? prismicT.SliceZone<
140
+ ValueOf<{
141
+ [P in keyof T["config"]["choices"] as P extends string
142
+ ? P
143
+ : never]: T["config"]["choices"][P] extends prismicT.CustomTypeModelSlice
144
+ ? CustomTypeModelSliceValue<T["config"]["choices"][P], P>
145
+ : T["config"]["choices"][P] extends prismicT.CustomTypeModelSharedSlice
146
+ ? prismicT.SharedSlice<P>
147
+ : never;
148
+ }>
149
+ >
131
150
  : T extends prismicT.CustomTypeModelSlice
132
151
  ? CustomTypeModelSliceValue<T>
133
152
  : T extends prismicT.CustomTypeModelSharedSlice
@@ -140,7 +159,15 @@ export type ModelValue<T extends PrismicModel> =
140
159
  : never;
141
160
 
142
161
  type CustomTypeModelValue<T extends prismicT.CustomTypeModel> =
143
- prismicT.PrismicDocument<ModelValueMap<ValueOf<T["json"]>>>;
162
+ prismicT.PrismicDocument<
163
+ ModelValueMap<{
164
+ [P in keyof ValueOf<T["json"]> as ValueOf<
165
+ T["json"]
166
+ >[P]["type"] extends typeof prismicT.CustomTypeModelFieldType.UID
167
+ ? never
168
+ : P]: ValueOf<T["json"]>[P];
169
+ }>
170
+ >;
144
171
 
145
172
  type CustomTypeModelFieldForGroupValue<
146
173
  T extends prismicT.CustomTypeModelFieldForGroup,
@@ -182,12 +209,14 @@ type CustomTypeModelGroupFieldValue<
182
209
  T extends prismicT.CustomTypeModelGroupField,
183
210
  > = prismicT.GroupField<ModelValueMap<T["config"]["fields"]>>;
184
211
 
185
- type CustomTypeModelSliceValue<T extends prismicT.CustomTypeModelSlice> =
186
- prismicT.Slice<
187
- string,
188
- ModelValueMap<T["non-repeat"]>,
189
- ModelValueMap<T["repeat"]>
190
- >;
212
+ type CustomTypeModelSliceValue<
213
+ T extends prismicT.CustomTypeModelSlice,
214
+ SliceType = string,
215
+ > = prismicT.Slice<
216
+ SliceType,
217
+ ModelValueMap<T["non-repeat"]>,
218
+ ModelValueMap<T["repeat"]>
219
+ >;
191
220
 
192
221
  type SharedSliceModelValue<T extends prismicT.SharedSliceModel> =
193
222
  prismicT.SharedSlice<