@prismicio/mock 0.0.3 → 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 (78) hide show
  1. package/README.md +4 -1
  2. package/dist/api/index.cjs +561 -0
  3. package/dist/api/index.cjs.map +1 -0
  4. package/dist/api/index.d.ts +36 -0
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/index.js +561 -0
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/index.cjs +672 -644
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.ts +228 -262
  11. package/dist/{index.mjs → index.js} +663 -634
  12. package/dist/index.js.map +1 -0
  13. package/dist/model/index.cjs +163 -203
  14. package/dist/model/index.cjs.map +1 -0
  15. package/dist/model/index.d.ts +70 -96
  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 +284 -499
  20. package/dist/value/index.cjs.map +1 -0
  21. package/dist/value/index.d.ts +60 -120
  22. package/dist/value/index.d.ts.map +1 -0
  23. package/dist/value/{index.mjs → index.js} +447 -608
  24. package/dist/value/index.js.map +1 -0
  25. package/package.json +25 -20
  26. package/src/api/index.ts +11 -0
  27. package/src/api/query.ts +38 -0
  28. package/src/api/ref.ts +41 -0
  29. package/src/api/repository.ts +54 -0
  30. package/src/api/tags.ts +15 -0
  31. package/src/constants.ts +3 -1
  32. package/src/index.ts +1 -0
  33. package/src/lib/buildAlternativeLanguage.ts +18 -0
  34. package/src/lib/buildContentRelationshipField.ts +12 -5
  35. package/src/lib/buildEmbedField.ts +1 -1
  36. package/src/lib/buildImageFieldImage.ts +48 -0
  37. package/src/lib/createFaker.ts +19 -10
  38. package/src/lib/generateTags.ts +10 -2
  39. package/src/lib/valueForModelMap.ts +2 -2
  40. package/src/model/buildMockGroupFieldMap.ts +65 -0
  41. package/src/model/contentRelationship.ts +14 -21
  42. package/src/model/customType.ts +49 -48
  43. package/src/model/group.ts +8 -15
  44. package/src/model/image.ts +13 -13
  45. package/src/model/index.ts +2 -0
  46. package/src/model/select.ts +11 -16
  47. package/src/model/sharedSlice.ts +23 -30
  48. package/src/model/sharedSliceVariation.ts +33 -21
  49. package/src/model/slice.ts +15 -19
  50. package/src/model/sliceZone.ts +25 -42
  51. package/src/types.ts +50 -15
  52. package/src/value/color.ts +16 -6
  53. package/src/value/contentRelationship.ts +52 -36
  54. package/src/value/customType.ts +27 -4
  55. package/src/value/date.ts +25 -9
  56. package/src/value/embed.ts +18 -6
  57. package/src/value/geoPoint.ts +21 -9
  58. package/src/value/group.ts +7 -27
  59. package/src/value/image.ts +22 -9
  60. package/src/value/integrationFields.ts +26 -14
  61. package/src/value/keyText.ts +18 -6
  62. package/src/value/link.ts +33 -34
  63. package/src/value/linkToMedia.ts +15 -20
  64. package/src/value/number.ts +16 -6
  65. package/src/value/richText/heading.ts +7 -7
  66. package/src/value/richText/image.ts +6 -2
  67. package/src/value/richText/index.ts +1 -1
  68. package/src/value/select.ts +23 -8
  69. package/src/value/sharedSlice.ts +2 -2
  70. package/src/value/sharedSliceVariation.ts +6 -34
  71. package/src/value/slice.ts +5 -30
  72. package/src/value/sliceZone.ts +44 -60
  73. package/src/value/timestamp.ts +19 -6
  74. package/src/value/title.ts +1 -1
  75. package/src/value/uid.ts +1 -1
  76. package/dist/model/index.mjs +0 -448
  77. package/src/lib/buildImageField.ts +0 -34
  78. package/src/lib/buildMockGroupFieldMap.ts +0 -84
@@ -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,52 +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
- choicesCount?: number;
14
- withSharedSlices?: boolean;
5
+ type MockSliceZoneModelConfig<
6
+ Slices extends Record<
7
+ string,
8
+ prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
9
+ > = Record<
10
+ string,
11
+ prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
12
+ >,
13
+ > = {
14
+ choices?: Slices;
15
15
  } & MockModelConfig;
16
16
 
17
- export const sliceZone = (
18
- config: MockSliceZoneModelConfig = {},
19
- ): prismicT.CustomTypeModelSliceZoneField => {
20
- const faker = createFaker(config.seed);
21
-
22
- const choicesCount =
23
- config.choicesCount ?? faker.datatype.number({ min: 2, max: 6 });
24
-
25
- const choices: Record<
17
+ export const sliceZone = <
18
+ Slices extends Record<
26
19
  string,
27
20
  prismicT.CustomTypeModelSlice | prismicT.CustomTypeModelSharedSlice
28
- > = {};
29
- for (let i = 0; i < choicesCount; i++) {
30
- const choiceId = generateFieldId({ seed: config.seed });
31
-
32
- choices[choiceId] = config.withSharedSlices
33
- ? sharedSliceChoice()
34
- : slice({ seed: config.seed });
35
- }
36
-
37
- const labels: Record<string, prismicT.CustomTypeModelSliceLabel[]> = {};
38
- if (!config.withSharedSlices) {
39
- for (const choiceId in choices) {
40
- const labelsCount = faker.datatype.number({ min: 0, max: 3 });
41
-
42
- labels[choiceId] = Array(labelsCount)
43
- .fill(undefined)
44
- .map(() => ({
45
- name: changeCase.capitalCase(faker.company.bsNoun()),
46
- display: faker.datatype.boolean()
47
- ? prismicT.CustomTypeModelSliceDisplay.Grid
48
- : prismicT.CustomTypeModelSliceDisplay.List,
49
- }));
21
+ >,
22
+ >(
23
+ config: MockSliceZoneModelConfig<Slices> = {},
24
+ ): prismicT.CustomTypeModelSliceZoneField<Slices> => {
25
+ const labels =
26
+ {} as prismicT.CustomTypeModelSliceZoneField<Slices>["config"]["labels"];
27
+
28
+ for (const choiceId in config.choices) {
29
+ const choice = config.choices[choiceId];
30
+
31
+ if (choice.type === prismicT.CustomTypeModelSliceType.Slice) {
32
+ labels[choiceId as unknown as keyof typeof labels] = [];
50
33
  }
51
34
  }
52
35
 
@@ -55,7 +38,7 @@ export const sliceZone = (
55
38
  fieldset: "Slice zone",
56
39
  config: {
57
40
  labels,
58
- choices,
41
+ choices: config.choices || ({} as Slices),
59
42
  },
60
43
  };
61
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<
@@ -27,6 +25,8 @@ export type SetRequired<BaseType, Keys extends keyof BaseType> = Simplify<
27
25
  Required<Pick<BaseType, Keys>>
28
26
  >;
29
27
 
28
+ export type Seed = string | number | number[];
29
+
30
30
  export interface MockImageData {
31
31
  url: string;
32
32
  width: number;
@@ -42,8 +42,12 @@ export interface MockEmbedData {
42
42
  thumbnail_width: number | null;
43
43
  }
44
44
 
45
+ export type MockRestApiConfig = {
46
+ seed?: Seed;
47
+ };
48
+
45
49
  export type MockModelConfig = {
46
- seed?: number;
50
+ seed?: Seed;
47
51
  };
48
52
 
49
53
  // TODO: Add to @prismicio/types
@@ -54,11 +58,22 @@ export type PrismicModel =
54
58
  | prismicT.SharedSliceModel
55
59
  | prismicT.SharedSliceModelVariation;
56
60
 
61
+ export type GroupFieldModelMap = Record<
62
+ string,
63
+ prismicT.CustomTypeModelFieldForGroup
64
+ >;
65
+
57
66
  export type MockValueConfig<Model extends PrismicModel = PrismicModel> = {
58
- seed?: number;
67
+ seed?: Seed;
59
68
  model?: Model;
60
69
  };
61
70
 
71
+ export type MockValueStateConfig<
72
+ State extends prismicT.FieldState = prismicT.FieldState,
73
+ > = {
74
+ state?: State;
75
+ };
76
+
62
77
  export type MockValueConfigForModel<Model extends PrismicModel> =
63
78
  Model extends prismicT.CustomTypeModelBooleanField
64
79
  ? value.MockBooleanValueConfig
@@ -101,7 +116,7 @@ type CustomTypeModelStructuredTextField =
101
116
  export type MockRichTextValueConfig<
102
117
  Model extends CustomTypeModelStructuredTextField = CustomTypeModelStructuredTextField,
103
118
  > = {
104
- seed?: number;
119
+ seed?: Seed;
105
120
  model?: Model;
106
121
  };
107
122
 
@@ -121,7 +136,17 @@ export type ModelValue<T extends PrismicModel> =
121
136
  : T extends prismicT.CustomTypeModelGroupField
122
137
  ? CustomTypeModelGroupFieldValue<T>
123
138
  : T extends prismicT.CustomTypeModelSliceZoneField
124
- ? 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
+ >
125
150
  : T extends prismicT.CustomTypeModelSlice
126
151
  ? CustomTypeModelSliceValue<T>
127
152
  : T extends prismicT.CustomTypeModelSharedSlice
@@ -134,7 +159,15 @@ export type ModelValue<T extends PrismicModel> =
134
159
  : never;
135
160
 
136
161
  type CustomTypeModelValue<T extends prismicT.CustomTypeModel> =
137
- 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
+ >;
138
171
 
139
172
  type CustomTypeModelFieldForGroupValue<
140
173
  T extends prismicT.CustomTypeModelFieldForGroup,
@@ -176,12 +209,14 @@ type CustomTypeModelGroupFieldValue<
176
209
  T extends prismicT.CustomTypeModelGroupField,
177
210
  > = prismicT.GroupField<ModelValueMap<T["config"]["fields"]>>;
178
211
 
179
- type CustomTypeModelSliceValue<T extends prismicT.CustomTypeModelSlice> =
180
- prismicT.Slice<
181
- string,
182
- ModelValueMap<T["non-repeat"]>,
183
- ModelValueMap<T["repeat"]>
184
- >;
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
+ >;
185
220
 
186
221
  type SharedSliceModelValue<T extends prismicT.SharedSliceModel> =
187
222
  prismicT.SharedSlice<
@@ -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 MockColorValueConfig<
8
8
  Model extends prismicT.CustomTypeModelColorField = prismicT.CustomTypeModelColorField,
9
- > = MockValueConfig<Model>;
9
+ State extends prismicT.FieldState = prismicT.FieldState,
10
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
10
11
 
11
- export const color = (
12
- config: MockColorValueConfig = {},
13
- ): prismicT.ColorField => {
12
+ export type MockColorValue<
13
+ State extends prismicT.FieldState = prismicT.FieldState,
14
+ > = prismicT.ColorField<State>;
15
+
16
+ export const color = <
17
+ Model extends prismicT.CustomTypeModelColorField = prismicT.CustomTypeModelColorField,
18
+ State extends prismicT.FieldState = "filled",
19
+ >(
20
+ config: MockColorValueConfig<Model, State> = {},
21
+ ): MockColorValue<State> => {
14
22
  const faker = createFaker(config.seed);
15
23
 
16
- return faker.internet.color().toUpperCase() as prismicT.ColorField;
24
+ return (
25
+ config.state === "empty" ? null : faker.internet.color().toUpperCase()
26
+ ) as MockColorValue<State>;
17
27
  };
@@ -1,62 +1,77 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
+ import { buildContentRelationshipField } from "../lib/buildContentRelationshipField";
3
4
  import { createFaker } from "../lib/createFaker";
5
+ import { generateCustomTypeId } from "../lib/generateCustomTypeId";
6
+ import { generateTags } from "../lib/generateTags";
4
7
 
5
- import { MockValueConfig } from "../types";
8
+ import { MockValueStateConfig, MockValueConfig } from "../types";
6
9
 
7
10
  import * as modelGen from "../model";
11
+
8
12
  import { document as documentGen } from "./document";
9
- import { buildContentRelationshipField } from "../lib/buildContentRelationshipField";
10
- import { generateCustomTypeId } from "../lib/generateCustomTypeId";
11
- import { generateTags } from "../lib/generateTags";
12
13
 
13
14
  export type MockContentRelationshipValueConfig<
14
- IsFilled extends boolean = boolean,
15
15
  Model extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,
16
+ State extends prismicT.FieldState = prismicT.FieldState,
16
17
  > = {
17
- isFilled?: IsFilled;
18
18
  /**
19
19
  * A list of potential documents to which the field can be linked.
20
20
  */
21
21
  linkableDocuments?: prismicT.PrismicDocument[];
22
- } & MockValueConfig<Model>;
22
+ } & MockValueConfig<Model> &
23
+ MockValueStateConfig<State>;
23
24
 
24
- type MockContentRelationshipValue<IsFilled extends boolean = boolean> =
25
- IsFilled extends true
26
- ? prismicT.FilledLinkToDocumentField
27
- : prismicT.EmptyLinkField<prismicT.LinkType.Document>;
25
+ type MockContentRelationshipValue<
26
+ Model extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,
27
+ State extends prismicT.FieldState = prismicT.FieldState,
28
+ > = prismicT.RelationField<
29
+ Model["config"]["customtypes"],
30
+ string,
31
+ never,
32
+ State
33
+ >;
28
34
 
29
35
  export const contentRelationship = <
30
- IsFilled extends boolean = true,
31
36
  Model extends prismicT.CustomTypeModelContentRelationshipField = prismicT.CustomTypeModelContentRelationshipField,
37
+ State extends prismicT.FieldState = "filled",
32
38
  >(
33
- config: MockContentRelationshipValueConfig<IsFilled, Model> = {},
34
- ): MockContentRelationshipValue<IsFilled> => {
39
+ config: MockContentRelationshipValueConfig<Model, State> = {},
40
+ ): MockContentRelationshipValue<Model, State> => {
35
41
  const faker = createFaker(config.seed);
36
42
 
37
- const isFilled = config.isFilled ?? true;
38
-
39
- if (isFilled) {
43
+ if (config.state === "empty") {
44
+ return {
45
+ link_type: prismicT.LinkType.Document,
46
+ } as MockContentRelationshipValue<Model, State>;
47
+ } else {
40
48
  const model =
41
49
  config.model || modelGen.contentRelationship({ seed: config.seed });
42
50
 
43
51
  const linkableDocuments = config.linkableDocuments
44
- ? config.linkableDocuments.filter((document) => {
45
- let shouldKeep = true;
52
+ ? config.linkableDocuments.filter(
53
+ (
54
+ document,
55
+ ): document is prismicT.PrismicDocument<
56
+ never,
57
+ NonNullable<Model["config"]["customtypes"]>[number]
58
+ > => {
59
+ let shouldKeep = true;
46
60
 
47
- if (model.config.customtypes) {
48
- shouldKeep =
49
- shouldKeep && model.config.customtypes.includes(document.type);
50
- }
61
+ if (model.config.customtypes) {
62
+ shouldKeep =
63
+ shouldKeep && model.config.customtypes.includes(document.type);
64
+ }
51
65
 
52
- if (model.config.tags) {
53
- shouldKeep =
54
- shouldKeep &&
55
- model.config.tags.some((tag) => document.tags.includes(tag));
56
- }
66
+ if (model.config.tags) {
67
+ shouldKeep =
68
+ shouldKeep &&
69
+ model.config.tags.some((tag) => document.tags.includes(tag));
70
+ }
57
71
 
58
- return shouldKeep;
59
- })
72
+ return shouldKeep;
73
+ },
74
+ )
60
75
  : [
61
76
  {
62
77
  ...documentGen({ seed: config.seed }),
@@ -66,7 +81,10 @@ export const contentRelationship = <
66
81
  tags: model.config.tags
67
82
  ? faker.random.arrayElements(model.config.tags)
68
83
  : generateTags({ seed: config.seed }),
69
- },
84
+ } as prismicT.PrismicDocument<
85
+ never,
86
+ NonNullable<Model["config"]["customtypes"]>[number]
87
+ >,
70
88
  ];
71
89
 
72
90
  const document = faker.random.arrayElement(linkableDocuments);
@@ -75,10 +93,8 @@ export const contentRelationship = <
75
93
  throw new Error("A linkable document could not be found.");
76
94
  }
77
95
 
78
- return buildContentRelationshipField({ document });
79
- } else {
80
- return {
81
- link_type: prismicT.LinkType.Document,
82
- } as MockContentRelationshipValue<IsFilled>;
96
+ return buildContentRelationshipField({
97
+ document,
98
+ }) as unknown as MockContentRelationshipValue<Model, State>;
83
99
  }
84
100
  };
@@ -13,11 +13,13 @@ import { MockValueConfig, ModelValue } from "../types";
13
13
  import * as modelGen from "../model";
14
14
 
15
15
  import { timestamp } from "./timestamp";
16
+ import { buildAlternativeLanguage } from "../lib/buildAlternativeLanguage";
16
17
 
17
18
  export type MockCustomTypeValueConfig<
18
19
  Model extends prismicT.CustomTypeModel = prismicT.CustomTypeModel,
19
20
  > = {
20
- sharedSliceModels?: prismicT.SharedSliceModel[];
21
+ withURL?: boolean;
22
+ alternateLanguages?: prismicT.PrismicDocument[];
21
23
  configs?: ValueForModelMapConfigs;
22
24
  } & MockValueConfig<Model>;
23
25
 
@@ -34,26 +36,47 @@ export const customType = <
34
36
  {},
35
37
  ...Object.values(model.json),
36
38
  ) as prismicT.CustomTypeModelTab;
39
+
40
+ const dataFieldModelsMap: prismicT.CustomTypeModelTab = {};
41
+ for (const key in fieldModelsMap) {
42
+ const fieldModel = fieldModelsMap[key];
43
+
44
+ // UID fields must be filtered out since they are not represented in
45
+ // the document's `data` field.
46
+ if (fieldModel.type !== prismicT.CustomTypeModelFieldType.UID) {
47
+ dataFieldModelsMap[key] = fieldModel;
48
+ }
49
+ }
50
+
37
51
  const hasUID = Object.values(fieldModelsMap).some(
38
52
  (fieldModel) => fieldModel.type === prismicT.CustomTypeModelFieldType.UID,
39
53
  );
40
54
 
55
+ const withURL = config.withURL ?? true;
56
+
57
+ const alternateLanguages = (config.alternateLanguages || []).map(
58
+ (alternateLanguageDocument) =>
59
+ buildAlternativeLanguage({
60
+ document: alternateLanguageDocument,
61
+ }),
62
+ );
63
+
41
64
  return {
42
65
  type: model.id,
43
66
  id: faker.git.shortSha(),
44
67
  uid: hasUID ? changeCase.snakeCase(faker.lorem.words(2)) : null,
45
- url: faker.internet.url(),
68
+ url: withURL ? faker.internet.url() : null,
46
69
  href: faker.internet.url(),
47
70
  lang: faker.lorem.word(),
48
71
  tags: generateTags({ seed: config.seed }),
49
72
  slugs: [] as prismicT.PrismicDocument["slugs"],
50
73
  linked_documents: [] as prismicT.PrismicDocument["linked_documents"],
51
- alternate_languages: [] as prismicT.PrismicDocument["alternate_languages"],
74
+ alternate_languages: alternateLanguages,
52
75
  first_publication_date: timestamp({ seed: config.seed }),
53
76
  last_publication_date: timestamp({ seed: config.seed }),
54
77
  data: valueForModelMap({
55
78
  seed: config.seed,
56
- map: fieldModelsMap,
79
+ map: dataFieldModelsMap,
57
80
  configs: config.configs,
58
81
  }),
59
82
  } as ModelValue<Model>;
package/src/value/date.ts CHANGED
@@ -1,18 +1,34 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
- import { MockValueConfig } from "../types";
3
+ import { MockValueStateConfig, MockValueConfig } from "../types";
4
4
 
5
5
  import { MockTimestampValueConfig, timestamp } from "./timestamp";
6
6
 
7
7
  export type MockDateValueConfig<
8
8
  Model extends prismicT.CustomTypeModelDateField = prismicT.CustomTypeModelDateField,
9
- > = Pick<MockTimestampValueConfig, "after" | "before"> & MockValueConfig<Model>;
9
+ State extends prismicT.FieldState = prismicT.FieldState,
10
+ > = Pick<MockTimestampValueConfig, "after" | "before"> &
11
+ MockValueConfig<Model> &
12
+ MockValueStateConfig<State>;
10
13
 
11
- export const date = (config: MockDateValueConfig = {}): prismicT.DateField => {
12
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
13
- return timestamp({
14
- seed: config.seed,
15
- after: config.after,
16
- before: config.before,
17
- })!.split("T")[0];
14
+ export type MockDateValue<
15
+ State extends prismicT.FieldState = prismicT.FieldState,
16
+ > = prismicT.DateField<State>;
17
+
18
+ export const date = <
19
+ Model extends prismicT.CustomTypeModelDateField = prismicT.CustomTypeModelDateField,
20
+ State extends prismicT.FieldState = "filled",
21
+ >(
22
+ config: MockDateValueConfig<Model, State> = {},
23
+ ): MockDateValue<State> => {
24
+ return (
25
+ config.state === "empty"
26
+ ? null
27
+ : timestamp({
28
+ seed: config.seed,
29
+ after: config.after,
30
+ before: config.before,
31
+ state: "filled",
32
+ }).split("T")[0]
33
+ ) as MockDateValue<State>;
18
34
  };
@@ -3,16 +3,28 @@ import * as prismicT from "@prismicio/types";
3
3
  import { buildEmbedField } from "../lib/buildEmbedField";
4
4
  import { getMockEmbedData } from "../lib/getMockEmbedData";
5
5
 
6
- import { MockValueConfig } from "../types";
6
+ import { MockValueStateConfig, MockValueConfig } from "../types";
7
7
 
8
8
  export type MockEmbedValueConfig<
9
9
  Model extends prismicT.CustomTypeModelEmbedField = prismicT.CustomTypeModelEmbedField,
10
- > = MockValueConfig<Model>;
10
+ State extends prismicT.FieldState = prismicT.FieldState,
11
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
11
12
 
12
- export const embed = (
13
- config: MockEmbedValueConfig = {},
14
- ): prismicT.EmbedField => {
13
+ export type MockEmbedValue<
14
+ State extends prismicT.FieldState = prismicT.FieldState,
15
+ > = prismicT.EmbedField<prismicT.AnyOEmbed & prismicT.OEmbedExtra, State>;
16
+
17
+ export const embed = <
18
+ Model extends prismicT.CustomTypeModelEmbedField = prismicT.CustomTypeModelEmbedField,
19
+ State extends prismicT.FieldState = "filled",
20
+ >(
21
+ config: MockEmbedValueConfig<Model, State> = {},
22
+ ): MockEmbedValue<State> => {
15
23
  const embedData = getMockEmbedData({ seed: config.seed });
16
24
 
17
- return buildEmbedField({ seed: config.seed, embedData });
25
+ return (
26
+ config.state === "empty"
27
+ ? {}
28
+ : buildEmbedField({ seed: config.seed, embedData })
29
+ ) as MockEmbedValue<State>;
18
30
  };
@@ -2,21 +2,33 @@ 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 MockGeoPointValueConfig<
8
8
  Model extends prismicT.CustomTypeModelGeoPointField = prismicT.CustomTypeModelGeoPointField,
9
- > = MockValueConfig<Model>;
9
+ State extends prismicT.FieldState = prismicT.FieldState,
10
+ > = MockValueConfig<Model> & MockValueStateConfig<State>;
10
11
 
11
- export const geoPoint = (
12
- config: MockGeoPointValueConfig = {},
13
- ): prismicT.GeoPointField => {
12
+ export type MockGeoPointValue<
13
+ State extends prismicT.FieldState = prismicT.FieldState,
14
+ > = prismicT.GeoPointField<State>;
15
+
16
+ export const geoPoint = <
17
+ Model extends prismicT.CustomTypeModelGeoPointField = prismicT.CustomTypeModelGeoPointField,
18
+ State extends prismicT.FieldState = "filled",
19
+ >(
20
+ config: MockGeoPointValueConfig<Model, State> = {},
21
+ ): MockGeoPointValue<State> => {
14
22
  const faker = createFaker(config.seed);
15
23
 
16
24
  const coordinates = faker.address.nearbyGPSCoordinate();
17
25
 
18
- return {
19
- longitude: Number.parseFloat(coordinates[0]),
20
- latitude: Number.parseFloat(coordinates[1]),
21
- };
26
+ return (
27
+ config.state === "empty"
28
+ ? {}
29
+ : {
30
+ longitude: Number.parseFloat(coordinates[0]),
31
+ latitude: Number.parseFloat(coordinates[1]),
32
+ }
33
+ ) as MockGeoPointValue<State>;
22
34
  };
@@ -10,25 +10,10 @@ import { MockValueConfig, 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,
30
15
  > = {
31
- pattern?: keyof typeof patterns;
16
+ itemsCount?: number;
32
17
  configs?: ValueForModelMapConfigs;
33
18
  } & MockValueConfig<Model>;
34
19
 
@@ -41,17 +26,12 @@ export const group = <
41
26
 
42
27
  const model = config.model || modelGen.group({ seed: config.seed });
43
28
 
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
- });
29
+ const itemsCount =
30
+ config.itemsCount ??
31
+ faker.datatype.number({
32
+ min: 1,
33
+ max: 6,
34
+ });
55
35
 
56
36
  return Array(itemsCount)
57
37
  .fill(undefined)