@prismicio/mock 0.0.4 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +4 -1
  2. package/dist/api/index.cjs +54 -35
  3. package/dist/api/index.cjs.map +1 -0
  4. package/dist/api/index.d.ts +4 -2
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/{index.mjs → index.js} +116 -63
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/index.cjs +365 -417
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.ts +157 -243
  11. package/dist/{index.mjs → index.js} +359 -409
  12. package/dist/index.js.map +1 -0
  13. package/dist/model/index.cjs +164 -204
  14. package/dist/model/index.cjs.map +1 -0
  15. package/dist/model/index.d.ts +73 -97
  16. package/dist/model/index.d.ts.map +1 -0
  17. package/dist/model/index.js +462 -0
  18. package/dist/model/index.js.map +1 -0
  19. package/dist/value/index.cjs +310 -519
  20. package/dist/value/index.cjs.map +1 -0
  21. package/dist/value/index.d.ts +71 -132
  22. package/dist/value/index.d.ts.map +1 -0
  23. package/dist/value/{index.mjs → index.js} +474 -629
  24. package/dist/value/index.js.map +1 -0
  25. package/package.json +21 -21
  26. package/src/constants.ts +3 -1
  27. package/src/lib/buildAlternativeLanguage.ts +18 -0
  28. package/src/lib/buildContentRelationshipField.ts +12 -5
  29. package/src/lib/buildEmbedField.ts +1 -1
  30. package/src/lib/buildImageFieldImage.ts +48 -0
  31. package/src/lib/createFaker.ts +19 -10
  32. package/src/lib/valueForModelMap.ts +2 -2
  33. package/src/model/buildMockGroupFieldMap.ts +65 -0
  34. package/src/model/contentRelationship.ts +14 -21
  35. package/src/model/customType.ts +49 -48
  36. package/src/model/group.ts +8 -15
  37. package/src/model/image.ts +13 -13
  38. package/src/model/index.ts +2 -0
  39. package/src/model/integrationFields.ts +4 -2
  40. package/src/model/select.ts +11 -16
  41. package/src/model/sharedSlice.ts +23 -30
  42. package/src/model/sharedSliceVariation.ts +33 -21
  43. package/src/model/slice.ts +15 -19
  44. package/src/model/sliceZone.ts +25 -42
  45. package/src/types.ts +130 -83
  46. package/src/value/color.ts +16 -6
  47. package/src/value/contentRelationship.ts +52 -36
  48. package/src/value/customType.ts +22 -3
  49. package/src/value/date.ts +25 -9
  50. package/src/value/embed.ts +18 -6
  51. package/src/value/geoPoint.ts +21 -9
  52. package/src/value/group.ts +35 -44
  53. package/src/value/image.ts +22 -9
  54. package/src/value/integrationFields.ts +26 -14
  55. package/src/value/keyText.ts +18 -6
  56. package/src/value/link.ts +33 -34
  57. package/src/value/linkToMedia.ts +15 -20
  58. package/src/value/number.ts +16 -6
  59. package/src/value/richText/heading.ts +7 -7
  60. package/src/value/richText/image.ts +6 -2
  61. package/src/value/richText/index.ts +1 -1
  62. package/src/value/select.ts +23 -8
  63. package/src/value/sharedSlice.ts +2 -2
  64. package/src/value/sharedSliceVariation.ts +6 -34
  65. package/src/value/slice.ts +5 -30
  66. package/src/value/sliceZone.ts +60 -69
  67. package/src/value/timestamp.ts +19 -6
  68. package/src/value/title.ts +26 -13
  69. package/src/value/uid.ts +1 -1
  70. package/dist/model/index.mjs +0 -448
  71. package/src/lib/buildImageField.ts +0 -34
  72. package/src/lib/buildMockGroupFieldMap.ts +0 -84
@@ -6,60 +6,51 @@ import {
6
6
  ValueForModelMapConfigs,
7
7
  } from "../lib/valueForModelMap";
8
8
 
9
- import { MockValueConfig, ModelValue } from "../types";
9
+ import { MockValueConfig, MockValueStateConfig, ModelValue } from "../types";
10
10
 
11
11
  import * as modelGen from "../model";
12
12
 
13
- const patterns = {
14
- short: {
15
- minItems: 1,
16
- maxItems: 3,
17
- },
18
- medium: {
19
- minItems: 3,
20
- maxItems: 6,
21
- },
22
- long: {
23
- minItems: 6,
24
- maxItems: 12,
25
- },
26
- } as const;
27
-
28
13
  export type MockGroupValueConfig<
29
14
  Model extends prismicT.CustomTypeModelGroupField = prismicT.CustomTypeModelGroupField,
15
+ State extends prismicT.FieldState = prismicT.FieldState,
30
16
  > = {
31
- pattern?: keyof typeof patterns;
17
+ itemsCount?: State extends "empty" ? 0 : number;
32
18
  configs?: ValueForModelMapConfigs;
33
- } & MockValueConfig<Model>;
19
+ } & MockValueConfig<Model> &
20
+ MockValueStateConfig<State>;
21
+
22
+ export type MockGroupValue<
23
+ State extends prismicT.FieldState = prismicT.FieldState,
24
+ > = prismicT.DateField<State>;
34
25
 
35
26
  export const group = <
36
27
  Model extends prismicT.CustomTypeModelGroupField = prismicT.CustomTypeModelGroupField,
28
+ State extends prismicT.FieldState = "filled",
37
29
  >(
38
- config: MockGroupValueConfig<Model> = {},
39
- ): ModelValue<Model> => {
40
- const faker = createFaker(config.seed);
41
-
42
- const model = config.model || modelGen.group({ seed: config.seed });
43
-
44
- const patternKey =
45
- config.pattern ||
46
- faker.random.arrayElement(
47
- Object.keys(patterns) as (keyof typeof patterns)[],
48
- );
49
- const pattern = patterns[patternKey];
50
-
51
- const itemsCount = faker.datatype.number({
52
- min: pattern.minItems,
53
- max: pattern.maxItems,
54
- });
55
-
56
- return Array(itemsCount)
57
- .fill(undefined)
58
- .map(() => {
59
- return valueForModelMap({
60
- seed: config.seed,
61
- map: model.config.fields,
62
- configs: config.configs,
30
+ config: MockGroupValueConfig<Model, State> = {},
31
+ ): ModelValue<Model, State> => {
32
+ if (config.state === "empty") {
33
+ return [] as ModelValue<Model, State>;
34
+ } else {
35
+ const faker = createFaker(config.seed);
36
+
37
+ const model = config.model || modelGen.group({ seed: config.seed });
38
+
39
+ const itemsCount =
40
+ config.itemsCount ??
41
+ faker.datatype.number({
42
+ min: 1,
43
+ max: 6,
63
44
  });
64
- }) as ModelValue<Model>;
45
+
46
+ return Array(itemsCount)
47
+ .fill(undefined)
48
+ .map(() => {
49
+ return valueForModelMap({
50
+ seed: config.seed,
51
+ map: model.config.fields,
52
+ configs: config.configs,
53
+ });
54
+ }) as ModelValue<Model, State>;
55
+ }
65
56
  };
@@ -1,36 +1,49 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
- import { buildImageField } from "../lib/buildImageField";
3
+ import { buildImageFieldImage } from "../lib/buildImageFieldImage";
4
4
  import { getMockImageData } from "../lib/getMockImageData";
5
5
 
6
- import { MockValueConfig } from "../types";
6
+ import { MockValueStateConfig, MockValueConfig } from "../types";
7
7
 
8
8
  import * as modelGen from "../model";
9
9
 
10
10
  export type MockImageValueConfig<
11
11
  Model extends prismicT.CustomTypeModelImageField = prismicT.CustomTypeModelImageField,
12
- > = MockValueConfig<Model>;
12
+ State extends prismicT.FieldState = prismicT.FieldState,
13
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
13
14
 
14
- export const image = (
15
- config: MockImageValueConfig = {},
16
- ): prismicT.ImageField => {
15
+ export type MockImageValue<
16
+ Model extends prismicT.CustomTypeModelImageField = prismicT.CustomTypeModelImageField,
17
+ State extends prismicT.FieldState = prismicT.FieldState,
18
+ > = prismicT.ImageField<Model["config"]["thumbnails"][number]["name"], State>;
19
+
20
+ export const image = <
21
+ Model extends prismicT.CustomTypeModelImageField = prismicT.CustomTypeModelImageField,
22
+ State extends prismicT.FieldState = "filled",
23
+ >(
24
+ config: MockImageValueConfig<Model, State> = {},
25
+ ): MockImageValue<Model, State> => {
17
26
  const model = config.model || modelGen.image({ seed: config.seed });
18
27
  const imageData = getMockImageData({ seed: config.seed });
19
28
 
20
- const value = buildImageField({
29
+ const value = buildImageFieldImage({
21
30
  seed: config.seed,
22
31
  imageData,
23
32
  constraint: model.config.constraint,
24
- });
33
+ state: config.state,
34
+ }) as MockImageValue<Model, State>;
25
35
 
26
36
  for (const thumbnail of model.config.thumbnails) {
27
- value[thumbnail.name] = buildImageField({
37
+ // TODO: Resolve the following type error
38
+ // @ts-expect-error - Unsure how to fix this type mismatch
39
+ value[thumbnail.name as keyof typeof value] = buildImageFieldImage({
28
40
  seed: config.seed,
29
41
  imageData,
30
42
  constraint: {
31
43
  width: thumbnail.width,
32
44
  height: thumbnail.height,
33
45
  },
46
+ state: config.state,
34
47
  });
35
48
  }
36
49
 
@@ -4,31 +4,43 @@ import * as changeCase from "change-case";
4
4
  import { createFaker } from "../lib/createFaker";
5
5
  import { getMockImageData } from "../lib/getMockImageData";
6
6
 
7
- import { MockValueConfig } from "../types";
7
+ import { MockValueStateConfig, MockValueConfig } from "../types";
8
8
 
9
9
  export type MockIntegrationFieldsValueConfig<
10
10
  Model extends prismicT.CustomTypeModelIntegrationFieldsField = prismicT.CustomTypeModelIntegrationFieldsField,
11
- Blob extends unknown = unknown,
11
+ Blob = unknown,
12
+ State extends prismicT.FieldState = prismicT.FieldState,
12
13
  > = {
13
14
  data?: Blob;
14
- } & MockValueConfig<Model>;
15
+ } & MockValueConfig<Model> &
16
+ MockValueStateConfig<State>;
17
+
18
+ export type MockIntegrationFieldsValue<
19
+ Blob = unknown,
20
+ State extends prismicT.FieldState = prismicT.FieldState,
21
+ > = prismicT.IntegrationFields<Blob, State>;
15
22
 
16
23
  export const integrationFields = <
17
24
  Model extends prismicT.CustomTypeModelIntegrationFieldsField = prismicT.CustomTypeModelIntegrationFieldsField,
18
- Blob extends unknown = unknown,
25
+ Blob = unknown,
26
+ State extends prismicT.FieldState = "filled",
19
27
  >(
20
- config: MockIntegrationFieldsValueConfig<Model, Blob> = {},
21
- ): prismicT.IntegrationFields<Blob> => {
28
+ config: MockIntegrationFieldsValueConfig<Model, Blob, State> = {},
29
+ ): MockIntegrationFieldsValue<Blob, State> => {
22
30
  const faker = createFaker(config.seed);
23
31
 
24
32
  const imageData = getMockImageData({ seed: config.seed });
25
33
 
26
- return {
27
- id: faker.git.shortSha(),
28
- title: changeCase.capitalCase(faker.lorem.words(3)),
29
- description: faker.lorem.sentence(),
30
- image_url: imageData.url,
31
- last_update: faker.date.past(20, new Date("2021-03-07")).getTime(),
32
- blob: config.data as Blob,
33
- };
34
+ return (
35
+ config.state === "empty"
36
+ ? null
37
+ : {
38
+ id: faker.git.shortSha(),
39
+ title: changeCase.capitalCase(faker.lorem.words(3)),
40
+ description: faker.lorem.sentence(),
41
+ image_url: imageData.url,
42
+ last_update: faker.date.past(20, new Date("2021-03-07")).getTime(),
43
+ blob: config.data as Blob,
44
+ }
45
+ ) as MockIntegrationFieldsValue<Blob, State>;
34
46
  };
@@ -3,16 +3,28 @@ import * as changeCase from "change-case";
3
3
 
4
4
  import { createFaker } from "../lib/createFaker";
5
5
 
6
- import { MockValueConfig } from "../types";
6
+ import { MockValueStateConfig, MockValueConfig } from "../types";
7
7
 
8
8
  export type MockKeyTextValueConfig<
9
9
  Model extends prismicT.CustomTypeModelKeyTextField = prismicT.CustomTypeModelKeyTextField,
10
- > = MockValueConfig<Model>;
10
+ State extends prismicT.FieldState = prismicT.FieldState,
11
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
11
12
 
12
- export const keyText = (
13
- config: MockKeyTextValueConfig = {},
14
- ): prismicT.KeyTextField => {
13
+ export type MockKeyTextValue<
14
+ State extends prismicT.FieldState = prismicT.FieldState,
15
+ > = prismicT.KeyTextField<State>;
16
+
17
+ export const keyText = <
18
+ Model extends prismicT.CustomTypeModelKeyTextField = prismicT.CustomTypeModelKeyTextField,
19
+ State extends prismicT.FieldState = "filled",
20
+ >(
21
+ config: MockKeyTextValueConfig<Model, State> = {},
22
+ ): MockKeyTextValue<State> => {
15
23
  const faker = createFaker(config.seed);
16
24
 
17
- return changeCase.sentenceCase(faker.lorem.words(3));
25
+ return (
26
+ config.state === "empty"
27
+ ? null
28
+ : changeCase.sentenceCase(faker.lorem.words(3))
29
+ ) as MockKeyTextValue<State>;
18
30
  };
package/src/value/link.ts CHANGED
@@ -2,7 +2,7 @@ import * as prismicT from "@prismicio/types";
2
2
 
3
3
  import { createFaker } from "../lib/createFaker";
4
4
 
5
- import { MockValueConfig } from "../types";
5
+ import { MockValueStateConfig, MockValueConfig } from "../types";
6
6
 
7
7
  import * as modelGen from "../model";
8
8
 
@@ -10,47 +10,45 @@ import { contentRelationship } from "./contentRelationship";
10
10
  import { linkToMedia } from "./linkToMedia";
11
11
 
12
12
  export type MockLinkValueConfig<
13
- LinkType extends prismicT.LinkType = prismicT.LinkType,
14
- IsFilled extends boolean = true,
13
+ LinkType extends typeof prismicT.LinkType[keyof typeof prismicT.LinkType] = typeof prismicT.LinkType[keyof typeof prismicT.LinkType],
15
14
  Model extends prismicT.CustomTypeModelLinkField = prismicT.CustomTypeModelLinkField,
15
+ State extends prismicT.FieldState = prismicT.FieldState,
16
16
  > = {
17
17
  type?: LinkType;
18
- isFilled?: IsFilled;
19
18
  withTargetBlank?: Model["config"]["allowTargetBlank"] extends undefined
20
19
  ? false
21
20
  : boolean;
22
21
  /**
23
22
  * A list of potential documents to which the field can be linked.
24
23
  */
25
- linkableDocuments?: LinkType extends prismicT.LinkType.Document
24
+ linkableDocuments?: LinkType extends typeof prismicT.LinkType.Document
26
25
  ? prismicT.PrismicDocument[]
27
26
  : never;
28
- } & MockValueConfig<Model>;
27
+ } & MockValueConfig<Model> &
28
+ MockValueStateConfig<State>;
29
29
 
30
30
  type MockLinkValue<
31
- LinkType extends prismicT.LinkType = prismicT.LinkType,
32
- IsFilled extends boolean = true,
33
- > = IsFilled extends true
34
- ? LinkType extends prismicT.LinkType.Web
35
- ? prismicT.FilledLinkToWebField
36
- : LinkType extends prismicT.LinkType.Media
37
- ? prismicT.FilledLinkToMediaField
38
- : LinkType extends prismicT.LinkType.Document
39
- ? prismicT.FilledLinkToDocumentField
40
- : never
41
- : prismicT.EmptyLinkField<LinkType>;
31
+ LinkType extends typeof prismicT.LinkType[keyof typeof prismicT.LinkType] = typeof prismicT.LinkType[keyof typeof prismicT.LinkType],
32
+ State extends prismicT.FieldState = "filled",
33
+ > = State extends "empty"
34
+ ? prismicT.EmptyLinkField<LinkType>
35
+ : LinkType extends typeof prismicT.LinkType.Web
36
+ ? prismicT.FilledLinkToWebField
37
+ : LinkType extends typeof prismicT.LinkType.Media
38
+ ? prismicT.FilledLinkToMediaField
39
+ : LinkType extends typeof prismicT.LinkType.Document
40
+ ? prismicT.FilledLinkToDocumentField
41
+ : never;
42
42
 
43
43
  export const link = <
44
- LinkType extends prismicT.LinkType = prismicT.LinkType,
45
- IsFilled extends boolean = true,
44
+ LinkType extends typeof prismicT.LinkType[keyof typeof prismicT.LinkType] = typeof prismicT.LinkType[keyof typeof prismicT.LinkType],
46
45
  Model extends prismicT.CustomTypeModelLinkField = prismicT.CustomTypeModelLinkField,
46
+ State extends prismicT.FieldState = "filled",
47
47
  >(
48
- config: MockLinkValueConfig<LinkType, IsFilled, Model> = {},
49
- ): MockLinkValue<LinkType, IsFilled> => {
48
+ config: MockLinkValueConfig<LinkType, Model, State> = {},
49
+ ): MockLinkValue<LinkType, State> => {
50
50
  const faker = createFaker(config.seed);
51
51
 
52
- const isFilled = config.isFilled ?? true;
53
-
54
52
  const type =
55
53
  config.type ||
56
54
  faker.random.arrayElement([
@@ -59,24 +57,29 @@ export const link = <
59
57
  prismicT.LinkType.Media,
60
58
  ]);
61
59
 
62
- if (isFilled) {
60
+ if (config.state === "empty") {
61
+ return {
62
+ link_type: type,
63
+ } as MockLinkValue<LinkType, State>;
64
+ } else {
63
65
  switch (type) {
64
66
  case prismicT.LinkType.Document: {
65
67
  return contentRelationship({
66
68
  seed: config.seed,
67
- isFilled,
69
+ state: config.state,
68
70
  linkableDocuments: config.linkableDocuments,
69
- }) as MockLinkValue<LinkType, IsFilled>;
71
+ }) as unknown as MockLinkValue<LinkType, State>;
70
72
  }
71
73
 
72
74
  case prismicT.LinkType.Media: {
73
75
  return linkToMedia({
74
76
  seed: config.seed,
75
- isFilled,
76
- }) as MockLinkValue<LinkType, IsFilled>;
77
+ state: config.state,
78
+ }) as MockLinkValue<LinkType, State>;
77
79
  }
78
80
 
79
- case prismicT.LinkType.Web: {
81
+ case prismicT.LinkType.Web:
82
+ default: {
80
83
  const model = config.model || modelGen.link({ seed: config.seed });
81
84
 
82
85
  return {
@@ -87,12 +90,8 @@ export const link = <
87
90
  (model.config.allowTargetBlank && faker.datatype.boolean())
88
91
  ? "_blank"
89
92
  : undefined,
90
- } as MockLinkValue<LinkType, IsFilled>;
93
+ } as MockLinkValue<LinkType, State>;
91
94
  }
92
95
  }
93
96
  }
94
-
95
- return {
96
- link_type: type,
97
- } as MockLinkValue<LinkType, IsFilled>;
98
97
  };
@@ -2,31 +2,30 @@ import * as prismicT from "@prismicio/types";
2
2
 
3
3
  import { createFaker } from "../lib/createFaker";
4
4
 
5
- import { MockValueConfig } from "../types";
5
+ import { MockValueStateConfig, MockValueConfig } from "../types";
6
6
 
7
7
  export type MockLinkToMediaValueConfig<
8
- IsFilled extends boolean = true,
9
8
  Model extends prismicT.CustomTypeModelLinkToMediaField = prismicT.CustomTypeModelLinkToMediaField,
10
- > = {
11
- isFilled?: IsFilled;
12
- } & MockValueConfig<Model>;
9
+ State extends prismicT.FieldState = prismicT.FieldState,
10
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
13
11
 
14
- type MockLinkToMediaValue<IsFilled extends boolean = true> =
15
- IsFilled extends true
16
- ? prismicT.FilledLinkToMediaField
17
- : prismicT.EmptyLinkField<prismicT.LinkType.Media>;
12
+ type MockLinkToMediaValue<
13
+ State extends prismicT.FieldState = prismicT.FieldState,
14
+ > = prismicT.LinkToMediaField<State>;
18
15
 
19
16
  export const linkToMedia = <
20
- IsFilled extends boolean = true,
21
17
  Model extends prismicT.CustomTypeModelLinkToMediaField = prismicT.CustomTypeModelLinkToMediaField,
18
+ State extends prismicT.FieldState = "filled",
22
19
  >(
23
- config: MockLinkToMediaValueConfig<IsFilled, Model> = {},
24
- ): MockLinkToMediaValue<IsFilled> => {
20
+ config: MockLinkToMediaValueConfig<Model, State> = {},
21
+ ): MockLinkToMediaValue<State> => {
25
22
  const faker = createFaker(config.seed);
26
23
 
27
- const isFilled = config.isFilled ?? true;
28
-
29
- if (isFilled) {
24
+ if (config.state === "empty") {
25
+ return {
26
+ link_type: prismicT.LinkType.Media,
27
+ } as MockLinkToMediaValue<State>;
28
+ } else {
30
29
  return {
31
30
  link_type: prismicT.LinkType.Media,
32
31
  name: faker.system.commonFileName(),
@@ -35,10 +34,6 @@ export const linkToMedia = <
35
34
  size: faker.datatype.number().toString(),
36
35
  height: faker.datatype.number().toString(),
37
36
  width: faker.datatype.number().toString(),
38
- } as prismicT.FilledLinkToMediaField;
39
- } else {
40
- return {
41
- link_type: prismicT.LinkType.Media,
42
- } as MockLinkToMediaValue<IsFilled>;
37
+ } as MockLinkToMediaValue<State>;
43
38
  }
44
39
  };
@@ -2,16 +2,26 @@ import * as prismicT from "@prismicio/types";
2
2
 
3
3
  import { createFaker } from "../lib/createFaker";
4
4
 
5
- import { MockValueConfig } from "../types";
5
+ import { MockValueStateConfig, MockValueConfig } from "../types";
6
6
 
7
7
  export type MockNumberValueConfig<
8
8
  Model extends prismicT.CustomTypeModelNumberField = prismicT.CustomTypeModelNumberField,
9
- > = MockValueConfig<Model>;
9
+ State extends prismicT.FieldState = prismicT.FieldState,
10
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
10
11
 
11
- export const number = (
12
- config: MockNumberValueConfig = {},
13
- ): prismicT.NumberField => {
12
+ export type MockNumberValue<
13
+ State extends prismicT.FieldState = prismicT.FieldState,
14
+ > = prismicT.NumberField<State>;
15
+
16
+ export const number = <
17
+ Model extends prismicT.CustomTypeModelNumberField = prismicT.CustomTypeModelNumberField,
18
+ State extends prismicT.FieldState = "filled",
19
+ >(
20
+ config: MockNumberValueConfig<Model, State> = {},
21
+ ): MockNumberValue<State> => {
14
22
  const faker = createFaker(config.seed);
15
23
 
16
- return faker.datatype.number();
24
+ return (
25
+ config.state === "empty" ? null : faker.datatype.number()
26
+ ) as MockNumberValue<State>;
17
27
  };
@@ -8,12 +8,12 @@ import { MockRichTextValueConfig } from "../../types";
8
8
  import * as modelGen from "../../model";
9
9
 
10
10
  type RichTextNodeTitleType =
11
- | prismicT.RichTextNodeType.heading1
12
- | prismicT.RichTextNodeType.heading2
13
- | prismicT.RichTextNodeType.heading3
14
- | prismicT.RichTextNodeType.heading4
15
- | prismicT.RichTextNodeType.heading5
16
- | prismicT.RichTextNodeType.heading6;
11
+ | typeof prismicT.RichTextNodeType.heading1
12
+ | typeof prismicT.RichTextNodeType.heading2
13
+ | typeof prismicT.RichTextNodeType.heading3
14
+ | typeof prismicT.RichTextNodeType.heading4
15
+ | typeof prismicT.RichTextNodeType.heading5
16
+ | typeof prismicT.RichTextNodeType.heading6;
17
17
 
18
18
  type RTHeadingNode =
19
19
  | prismicT.RTHeading1Node
@@ -61,7 +61,7 @@ export const heading = (
61
61
  prismicT.RichTextNodeType.heading4,
62
62
  prismicT.RichTextNodeType.heading5,
63
63
  prismicT.RichTextNodeType.heading6,
64
- ].includes(type as prismicT.RichTextNodeType),
64
+ ].includes(type as RichTextNodeTitleType),
65
65
  ) as RichTextNodeTitleType[];
66
66
  const type = faker.random.arrayElement(types);
67
67
 
@@ -1,6 +1,6 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
- import { buildImageField } from "../../lib/buildImageField";
3
+ import { buildImageFieldImage } from "../../lib/buildImageFieldImage";
4
4
  import { getMockImageData } from "../../lib/getMockImageData";
5
5
 
6
6
  import { MockRichTextValueConfig } from "../../types";
@@ -11,7 +11,11 @@ export const image = (
11
11
  config: MockRichTextImageValueConfig = {},
12
12
  ): prismicT.RTImageNode | undefined => {
13
13
  const imageData = getMockImageData({ seed: config.seed });
14
- const imageField = buildImageField({ seed: config.seed, imageData });
14
+ const imageField = buildImageFieldImage({
15
+ seed: config.seed,
16
+ imageData,
17
+ state: false,
18
+ });
15
19
 
16
20
  return {
17
21
  type: prismicT.RichTextNodeType.image,
@@ -92,7 +92,7 @@ export const richText = (
92
92
  })
93
93
  .flat()
94
94
  .filter((block): block is prismicT.RTNode => block !== undefined)
95
- .slice(0, blockCount);
95
+ .slice(0, blockCount) as prismicT.RichTextField;
96
96
  } else {
97
97
  return [];
98
98
  }
@@ -2,23 +2,38 @@ import * as prismicT from "@prismicio/types";
2
2
 
3
3
  import { createFaker } from "../lib/createFaker";
4
4
 
5
- import { MockValueConfig } from "../types";
5
+ import { MockValueStateConfig, MockValueConfig } from "../types";
6
6
 
7
7
  import * as modelGen from "../model";
8
8
 
9
9
  export type MockSelectValueConfig<
10
10
  Model extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,
11
- > = MockValueConfig<Model>;
11
+ State extends prismicT.FieldState = prismicT.FieldState,
12
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
12
13
 
13
- export const select = (
14
- config: MockSelectValueConfig = {},
15
- ): prismicT.SelectField => {
14
+ export type MockSelectValue<
15
+ Model extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,
16
+ State extends prismicT.FieldState = prismicT.FieldState,
17
+ > = prismicT.SelectField<Model["config"]["options"][number], State>;
18
+
19
+ export const select = <
20
+ Model extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,
21
+ State extends prismicT.FieldState = "filled",
22
+ >(
23
+ config: MockSelectValueConfig<Model, State> = {},
24
+ ): MockSelectValue<Model, State> => {
16
25
  const faker = createFaker(config.seed);
17
26
 
18
27
  const model = config.model || modelGen.select({ seed: config.seed });
19
28
  const defaultValue = model.config.default_value;
20
29
 
21
- return typeof defaultValue === "string" && faker.datatype.boolean()
22
- ? defaultValue
23
- : faker.random.arrayElement(model.config.options);
30
+ if (config.state === "empty") {
31
+ return null as MockSelectValue<Model, State>;
32
+ } else {
33
+ return (
34
+ typeof defaultValue === "string" && faker.datatype.boolean()
35
+ ? defaultValue
36
+ : faker.random.arrayElement(model.config.options)
37
+ ) as MockSelectValue<Model, State>;
38
+ }
24
39
  };
@@ -14,7 +14,7 @@ export type MockSharedSliceValueConfig<
14
14
  Model extends prismicT.SharedSliceModel = prismicT.SharedSliceModel,
15
15
  > = Pick<
16
16
  MockSharedSliceVariationValueConfig,
17
- "pattern" | "primaryFieldConfigs" | "itemsFieldConfigs"
17
+ "itemsCount" | "primaryFieldConfigs" | "itemsFieldConfigs"
18
18
  > &
19
19
  MockValueConfig<Model>;
20
20
 
@@ -31,7 +31,7 @@ export const sharedSlice = <
31
31
  return sharedSliceVariation({
32
32
  seed: config.seed,
33
33
  model: variationModel,
34
- pattern: config.pattern,
34
+ itemsCount: config.itemsCount,
35
35
  type: model.id,
36
36
  primaryFieldConfigs: config.primaryFieldConfigs,
37
37
  itemsFieldConfigs: config.itemsFieldConfigs,
@@ -1,5 +1,4 @@
1
1
  import * as prismicT from "@prismicio/types";
2
- import * as changeCase from "change-case";
3
2
 
4
3
  import { MockValueConfig, ModelValue } from "../types";
5
4
 
@@ -12,31 +11,12 @@ import {
12
11
 
13
12
  import * as modelGen from "../model";
14
13
 
15
- const patterns = {
16
- none: {
17
- minItems: 0,
18
- maxItems: 0,
19
- },
20
- short: {
21
- minItems: 1,
22
- maxItems: 3,
23
- },
24
- medium: {
25
- minItems: 3,
26
- maxItems: 6,
27
- },
28
- long: {
29
- minItems: 6,
30
- maxItems: 12,
31
- },
32
- } as const;
33
-
34
14
  export type MockSharedSliceVariationValueConfig<
35
15
  Model extends prismicT.SharedSliceModelVariation = prismicT.SharedSliceModelVariation,
36
16
  > = {
37
17
  type?: string;
38
18
  label?: string;
39
- pattern?: keyof typeof patterns;
19
+ itemsCount?: number;
40
20
  primaryFieldConfigs?: ValueForModelMapConfigs;
41
21
  itemsFieldConfigs?: ValueForModelMapConfigs;
42
22
  } & MockValueConfig<Model>;
@@ -51,28 +31,20 @@ export const sharedSliceVariation = <
51
31
  const model =
52
32
  config.model || modelGen.sharedSliceVariation({ seed: config.seed });
53
33
 
54
- const patternKey =
55
- config.pattern ||
56
- faker.random.arrayElement(
57
- Object.keys(patterns) as (keyof typeof patterns)[],
58
- );
59
- const pattern = patterns[patternKey];
60
-
61
34
  const sliceType = config.type ?? generateFieldId({ seed: config.seed });
62
- const sliceLabel =
63
- config.label ?? changeCase.capitalCase(faker.company.bsNoun());
64
35
 
65
36
  const itemsCount =
66
37
  Object.keys(model.items).length > 0
67
- ? faker.datatype.number({
68
- min: pattern.minItems,
69
- max: pattern.maxItems,
38
+ ? config.itemsCount ??
39
+ faker.datatype.number({
40
+ min: 1,
41
+ max: 6,
70
42
  })
71
43
  : 0;
72
44
 
73
45
  return {
74
46
  slice_type: sliceType,
75
- slice_label: sliceLabel,
47
+ slice_label: null,
76
48
  variation: model.id,
77
49
  version: faker.git.shortSha(),
78
50
  primary: valueForModelMap({