@prismicio/mock 0.0.7 → 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.
@@ -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 = {},
@@ -16,7 +18,7 @@ export const integrationFields = (
16
18
  type: prismicT.CustomTypeModelFieldType.IntegrationFields,
17
19
  config: {
18
20
  label: changeCase.capitalCase(faker.company.bsNoun()),
19
- catalog: changeCase.snakeCase(faker.lorem.words(4)),
21
+ catalog: config.catalog || changeCase.snakeCase(faker.lorem.words(4)),
20
22
  },
21
23
  };
22
24
  };
package/src/types.ts CHANGED
@@ -10,8 +10,10 @@ export type IterableElement<TargetIterable> = TargetIterable extends Iterable<
10
10
  ? ElementType
11
11
  : never;
12
12
 
13
- export type ValueOf<ObjectType extends Record<string, unknown>> =
14
- ObjectType[string];
13
+ export type ValueOf<
14
+ ObjectType,
15
+ ValueType extends keyof ObjectType = keyof ObjectType,
16
+ > = ObjectType[ValueType];
15
17
 
16
18
  type Simplify<T> = { [KeyType in keyof T]: T[KeyType] };
17
19
  type Except<ObjectType, KeysType extends keyof ObjectType> = Pick<
@@ -74,40 +76,46 @@ export type MockValueStateConfig<
74
76
  state?: State;
75
77
  };
76
78
 
77
- export type MockValueConfigForModel<Model extends PrismicModel> =
78
- Model extends prismicT.CustomTypeModelBooleanField
79
- ? value.MockBooleanValueConfig
80
- : Model extends prismicT.CustomTypeModelColorField
81
- ? value.MockColorValueConfig
82
- : Model extends prismicT.CustomTypeModelContentRelationshipField
83
- ? value.MockContentRelationshipValueConfig
84
- : Model extends prismicT.CustomTypeModelDateField
85
- ? value.MockDateValueConfig
86
- : Model extends prismicT.CustomTypeModelEmbedField
87
- ? value.MockEmbedValueConfig
88
- : Model extends prismicT.CustomTypeModelGeoPointField
89
- ? value.MockGeoPointValueConfig
90
- : Model extends prismicT.CustomTypeModelImageField
91
- ? value.MockImageValueConfig
92
- : Model extends prismicT.CustomTypeModelKeyTextField
93
- ? value.MockKeyTextValueConfig
94
- : Model extends prismicT.CustomTypeModelLinkField
95
- ? value.MockLinkValueConfig
96
- : Model extends prismicT.CustomTypeModelLinkToMediaField
97
- ? value.MockLinkToMediaValueConfig
98
- : Model extends prismicT.CustomTypeModelNumberField
99
- ? value.MockNumberValueConfig
100
- : Model extends prismicT.CustomTypeModelRichTextField
101
- ? value.MockRichTextValueConfig
102
- : Model extends prismicT.CustomTypeModelSelectField
103
- ? value.MockSelectValueConfig
104
- : Model extends prismicT.CustomTypeModelTimestampField
105
- ? value.MockTimestampValueConfig
106
- : Model extends prismicT.CustomTypeModelTitleField
107
- ? value.MockTitleValueConfig
108
- : Model extends prismicT.CustomTypeModelUIDField
109
- ? value.MockUIDValueConfig
110
- : never;
79
+ export type MockValueConfigForModel<
80
+ Model extends PrismicModel,
81
+ State extends prismicT.FieldState = prismicT.FieldState,
82
+ > = Model extends prismicT.CustomTypeModelBooleanField
83
+ ? value.MockBooleanValueConfig<Model>
84
+ : Model extends prismicT.CustomTypeModelColorField
85
+ ? value.MockColorValueConfig<Model, State>
86
+ : Model extends prismicT.CustomTypeModelContentRelationshipField
87
+ ? value.MockContentRelationshipValueConfig<Model, State>
88
+ : Model extends prismicT.CustomTypeModelDateField
89
+ ? value.MockDateValueConfig<Model, State>
90
+ : Model extends prismicT.CustomTypeModelEmbedField
91
+ ? value.MockEmbedValueConfig<Model, State>
92
+ : Model extends prismicT.CustomTypeModelGeoPointField
93
+ ? value.MockGeoPointValueConfig<Model, State>
94
+ : Model extends prismicT.CustomTypeModelImageField
95
+ ? value.MockImageValueConfig<Model, State>
96
+ : Model extends prismicT.CustomTypeModelKeyTextField
97
+ ? value.MockKeyTextValueConfig<Model, State>
98
+ : Model extends prismicT.CustomTypeModelLinkField
99
+ ? value.MockLinkValueConfig<
100
+ typeof prismicT.LinkType[keyof typeof prismicT.LinkType],
101
+ Model,
102
+ State
103
+ >
104
+ : Model extends prismicT.CustomTypeModelLinkToMediaField
105
+ ? value.MockLinkToMediaValueConfig<Model, State>
106
+ : Model extends prismicT.CustomTypeModelNumberField
107
+ ? value.MockNumberValueConfig<Model, State>
108
+ : Model extends prismicT.CustomTypeModelRichTextField
109
+ ? value.MockRichTextValueConfig
110
+ : Model extends prismicT.CustomTypeModelSelectField
111
+ ? value.MockSelectValueConfig<Model, State>
112
+ : Model extends prismicT.CustomTypeModelTimestampField
113
+ ? value.MockTimestampValueConfig<Model, State>
114
+ : Model extends prismicT.CustomTypeModelTitleField
115
+ ? value.MockTitleValueConfig<Model, State>
116
+ : Model extends prismicT.CustomTypeModelUIDField
117
+ ? value.MockUIDValueConfig<Model>
118
+ : never;
111
119
 
112
120
  type CustomTypeModelStructuredTextField =
113
121
  | prismicT.CustomTypeModelRichTextField
@@ -126,37 +134,43 @@ export type ModelValueMap<
126
134
  [P in keyof T]: ModelValue<T[P]>;
127
135
  };
128
136
 
129
- export type ModelValue<T extends PrismicModel> =
130
- T extends prismicT.CustomTypeModel
131
- ? CustomTypeModelValue<T>
132
- : T extends prismicT.CustomTypeModelUIDField
133
- ? prismicT.PrismicDocument["uid"]
134
- : T extends prismicT.CustomTypeModelFieldForGroup
135
- ? CustomTypeModelFieldForGroupValue<T>
136
- : T extends prismicT.CustomTypeModelGroupField
137
- ? CustomTypeModelGroupFieldValue<T>
138
- : T extends prismicT.CustomTypeModelSliceZoneField
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
- >
150
- : T extends prismicT.CustomTypeModelSlice
151
- ? CustomTypeModelSliceValue<T>
152
- : T extends prismicT.CustomTypeModelSharedSlice
153
- ? // TODO: Allow providing a union of of Shared Slices
154
- prismicT.SharedSlice
155
- : T extends prismicT.SharedSliceModel
156
- ? SharedSliceModelValue<T>
157
- : T extends prismicT.SharedSliceModelVariation
158
- ? SharedSliceModelVariationValue<T>
159
- : never;
137
+ export type ModelValue<
138
+ T extends PrismicModel,
139
+ State extends prismicT.FieldState = prismicT.FieldState,
140
+ > = T extends prismicT.CustomTypeModel
141
+ ? CustomTypeModelValue<T>
142
+ : T extends prismicT.CustomTypeModelUIDField
143
+ ? prismicT.PrismicDocument["uid"]
144
+ : T extends prismicT.CustomTypeModelFieldForGroup
145
+ ? CustomTypeModelFieldForGroupValue<T, State>
146
+ : T extends prismicT.CustomTypeModelGroupField
147
+ ? CustomTypeModelGroupFieldValue<T, State>
148
+ : T extends prismicT.CustomTypeModelSliceZoneField
149
+ ? prismicT.SliceZone<
150
+ ValueOf<{
151
+ [P in keyof T["config"]["choices"] as P extends string
152
+ ? P
153
+ : never]: T["config"]["choices"][P] extends prismicT.CustomTypeModelSlice
154
+ ? CustomTypeModelSliceValue<
155
+ T["config"]["choices"][P],
156
+ P extends string ? P : string
157
+ >
158
+ : T["config"]["choices"][P] extends prismicT.CustomTypeModelSharedSlice
159
+ ? prismicT.SharedSlice<P extends string ? P : string>
160
+ : never;
161
+ }>,
162
+ State
163
+ >
164
+ : T extends prismicT.CustomTypeModelSlice
165
+ ? CustomTypeModelSliceValue<T>
166
+ : T extends prismicT.CustomTypeModelSharedSlice
167
+ ? // TODO: Allow providing a union of of Shared Slices
168
+ prismicT.SharedSlice
169
+ : T extends prismicT.SharedSliceModel
170
+ ? SharedSliceModelValue<T>
171
+ : T extends prismicT.SharedSliceModelVariation
172
+ ? SharedSliceModelVariationValue<T>
173
+ : never;
160
174
 
161
175
  type CustomTypeModelValue<T extends prismicT.CustomTypeModel> =
162
176
  prismicT.PrismicDocument<
@@ -171,43 +185,45 @@ type CustomTypeModelValue<T extends prismicT.CustomTypeModel> =
171
185
 
172
186
  type CustomTypeModelFieldForGroupValue<
173
187
  T extends prismicT.CustomTypeModelFieldForGroup,
188
+ State extends prismicT.FieldState = prismicT.FieldState,
174
189
  > = T extends prismicT.CustomTypeModelBooleanField
175
190
  ? prismicT.BooleanField
176
191
  : T extends prismicT.CustomTypeModelColorField
177
- ? prismicT.ColorField
192
+ ? prismicT.ColorField<State>
178
193
  : T extends prismicT.CustomTypeModelTitleField
179
- ? prismicT.TitleField
194
+ ? prismicT.TitleField<State>
180
195
  : T extends prismicT.CustomTypeModelRichTextField
181
- ? prismicT.RichTextField
196
+ ? prismicT.RichTextField<State>
182
197
  : T extends prismicT.CustomTypeModelImageField
183
- ? prismicT.ImageField
198
+ ? prismicT.ImageField<string | null, State>
184
199
  : T extends prismicT.CustomTypeModelLinkField
185
- ? prismicT.LinkField
200
+ ? prismicT.LinkField<string, string, never, State>
186
201
  : T extends prismicT.CustomTypeModelLinkToMediaField
187
- ? prismicT.LinkToMediaField
202
+ ? prismicT.LinkToMediaField<State>
188
203
  : T extends prismicT.CustomTypeModelContentRelationshipField
189
- ? prismicT.RelationField
204
+ ? prismicT.RelationField<string, string, never, State>
190
205
  : T extends prismicT.CustomTypeModelDateField
191
- ? prismicT.DateField
206
+ ? prismicT.DateField<State>
192
207
  : T extends prismicT.CustomTypeModelTimestampField
193
- ? prismicT.TimestampField
208
+ ? prismicT.TimestampField<State>
194
209
  : T extends prismicT.CustomTypeModelNumberField
195
- ? prismicT.NumberField
210
+ ? prismicT.NumberField<State>
196
211
  : T extends prismicT.CustomTypeModelKeyTextField
197
- ? prismicT.KeyTextField
212
+ ? prismicT.KeyTextField<State>
198
213
  : T extends prismicT.CustomTypeModelSelectField
199
- ? prismicT.SelectField
214
+ ? prismicT.SelectField<string, State>
200
215
  : T extends prismicT.CustomTypeModelEmbedField
201
- ? prismicT.EmbedField
216
+ ? prismicT.EmbedField<prismicT.AnyOEmbed & prismicT.OEmbedExtra, State>
202
217
  : T extends prismicT.CustomTypeModelGeoPointField
203
- ? prismicT.GeoPointField
218
+ ? prismicT.GeoPointField<State>
204
219
  : T extends prismicT.CustomTypeModelIntegrationFieldsField
205
- ? prismicT.IntegrationFields
220
+ ? prismicT.IntegrationFields<unknown, State>
206
221
  : never;
207
222
 
208
223
  type CustomTypeModelGroupFieldValue<
209
224
  T extends prismicT.CustomTypeModelGroupField,
210
- > = prismicT.GroupField<ModelValueMap<T["config"]["fields"]>>;
225
+ State extends prismicT.FieldState = prismicT.FieldState,
226
+ > = prismicT.GroupField<ModelValueMap<T["config"]["fields"]>, State>;
211
227
 
212
228
  type CustomTypeModelSliceValue<
213
229
  T extends prismicT.CustomTypeModelSlice,
@@ -6,40 +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
13
  export type MockGroupValueConfig<
14
14
  Model extends prismicT.CustomTypeModelGroupField = prismicT.CustomTypeModelGroupField,
15
+ State extends prismicT.FieldState = prismicT.FieldState,
15
16
  > = {
16
- itemsCount?: number;
17
+ itemsCount?: State extends "empty" ? 0 : number;
17
18
  configs?: ValueForModelMapConfigs;
18
- } & MockValueConfig<Model>;
19
+ } & MockValueConfig<Model> &
20
+ MockValueStateConfig<State>;
21
+
22
+ export type MockGroupValue<
23
+ State extends prismicT.FieldState = prismicT.FieldState,
24
+ > = prismicT.DateField<State>;
19
25
 
20
26
  export const group = <
21
27
  Model extends prismicT.CustomTypeModelGroupField = prismicT.CustomTypeModelGroupField,
28
+ State extends prismicT.FieldState = "filled",
22
29
  >(
23
- config: MockGroupValueConfig<Model> = {},
24
- ): ModelValue<Model> => {
25
- const faker = createFaker(config.seed);
26
-
27
- const model = config.model || modelGen.group({ seed: config.seed });
28
-
29
- const itemsCount =
30
- config.itemsCount ??
31
- faker.datatype.number({
32
- min: 1,
33
- max: 6,
34
- });
35
-
36
- return Array(itemsCount)
37
- .fill(undefined)
38
- .map(() => {
39
- return valueForModelMap({
40
- seed: config.seed,
41
- map: model.config.fields,
42
- 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,
43
44
  });
44
- }) 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
+ }
45
56
  };
@@ -3,7 +3,7 @@ import * as prismicT from "@prismicio/types";
3
3
  import { createFaker } from "../lib/createFaker";
4
4
  import { ValueForModelMapConfigs } from "../lib/valueForModelMap";
5
5
 
6
- import { MockValueConfig, ModelValue } from "../types";
6
+ import { MockValueConfig, MockValueStateConfig, ModelValue } from "../types";
7
7
 
8
8
  import * as modelGen from "../model";
9
9
 
@@ -12,72 +12,79 @@ import { sharedSlice } from "./sharedSlice";
12
12
 
13
13
  export type MockSliceZoneValueConfig<
14
14
  Model extends prismicT.CustomTypeModelSliceZoneField = prismicT.CustomTypeModelSliceZoneField,
15
+ State extends prismicT.FieldState = prismicT.FieldState,
15
16
  > = {
16
17
  sharedSliceModels?: prismicT.SharedSliceModel[];
17
- itemsCount?: number;
18
+ itemsCount?: State extends "empty" ? 0 : number;
18
19
  primaryFieldConfigs?: ValueForModelMapConfigs;
19
20
  itemsFieldConfigs?: ValueForModelMapConfigs;
20
- } & MockValueConfig<Model>;
21
+ } & MockValueConfig<Model> &
22
+ MockValueStateConfig<State>;
21
23
 
22
24
  export const sliceZone = <
23
25
  Model extends prismicT.CustomTypeModelSliceZoneField = prismicT.CustomTypeModelSliceZoneField,
26
+ State extends prismicT.FieldState = prismicT.FieldState,
24
27
  >(
25
- config: MockSliceZoneValueConfig<Model> = {},
26
- ): ModelValue<Model> => {
27
- const faker = createFaker(config.seed);
28
-
29
- const model = config.model || modelGen.sliceZone({ seed: config.seed });
30
-
31
- if (Object.keys(model.config.choices).length > 0) {
32
- const itemsCount =
33
- config.itemsCount ??
34
- faker.datatype.number({
35
- min: 1,
36
- max: 6,
37
- });
28
+ config: MockSliceZoneValueConfig<Model, State> = {},
29
+ ): ModelValue<Model, State> => {
30
+ if (config.state === "empty") {
31
+ return [] as ModelValue<Model, State>;
32
+ } else {
33
+ const faker = createFaker(config.seed);
38
34
 
39
- return Array(itemsCount)
40
- .fill(undefined)
41
- .map(() => {
42
- const choices = Object.entries(model.config.choices);
43
- const [choiceType, choiceModel] = faker.random.arrayElement(choices);
35
+ const model = config.model || modelGen.sliceZone({ seed: config.seed });
44
36
 
45
- const choiceLabels = model.config.labels[choiceType] || [];
46
- const choiceLabel = faker.random.arrayElement(choiceLabels);
37
+ if (Object.keys(model.config.choices).length > 0) {
38
+ const itemsCount =
39
+ config.itemsCount ??
40
+ faker.datatype.number({
41
+ min: 1,
42
+ max: 6,
43
+ });
47
44
 
48
- switch (choiceModel.type) {
49
- case prismicT.CustomTypeModelSliceType.Slice: {
50
- return slice({
51
- seed: config.seed,
52
- model: choiceModel,
53
- type: choiceType,
54
- label: choiceLabel ? choiceLabel.name : null,
55
- primaryFieldConfigs: config.primaryFieldConfigs,
56
- itemsFieldConfigs: config.itemsFieldConfigs,
57
- });
58
- }
45
+ return Array(itemsCount)
46
+ .fill(undefined)
47
+ .map(() => {
48
+ const choices = Object.entries(model.config.choices);
49
+ const [choiceType, choiceModel] = faker.random.arrayElement(choices);
59
50
 
60
- case prismicT.CustomTypeModelSliceType.SharedSlice: {
61
- const sharedSliceModel = config.sharedSliceModels?.find(
62
- (sharedSliceModel) => sharedSliceModel.id === choiceType,
63
- );
51
+ const choiceLabels = model.config.labels[choiceType] || [];
52
+ const choiceLabel = faker.random.arrayElement(choiceLabels);
64
53
 
65
- if (sharedSliceModel) {
66
- return sharedSlice({
54
+ switch (choiceModel.type) {
55
+ case prismicT.CustomTypeModelSliceType.Slice: {
56
+ return slice({
67
57
  seed: config.seed,
68
- model: sharedSliceModel,
58
+ model: choiceModel,
59
+ type: choiceType,
60
+ label: choiceLabel ? choiceLabel.name : null,
69
61
  primaryFieldConfigs: config.primaryFieldConfigs,
70
62
  itemsFieldConfigs: config.itemsFieldConfigs,
71
63
  });
72
64
  }
65
+
66
+ case prismicT.CustomTypeModelSliceType.SharedSlice: {
67
+ const sharedSliceModel = config.sharedSliceModels?.find(
68
+ (sharedSliceModel) => sharedSliceModel.id === choiceType,
69
+ );
70
+
71
+ if (sharedSliceModel) {
72
+ return sharedSlice({
73
+ seed: config.seed,
74
+ model: sharedSliceModel,
75
+ primaryFieldConfigs: config.primaryFieldConfigs,
76
+ itemsFieldConfigs: config.itemsFieldConfigs,
77
+ });
78
+ }
79
+ }
73
80
  }
74
- }
75
- })
76
- .filter(
77
- (slice): slice is prismicT.Slice | prismicT.SharedSlice =>
78
- slice !== undefined,
79
- ) as ModelValue<Model>;
80
- } else {
81
- return [] as unknown as ModelValue<Model>;
81
+ })
82
+ .filter(
83
+ (slice): slice is prismicT.Slice | prismicT.SharedSlice =>
84
+ slice !== undefined,
85
+ ) as ModelValue<Model, State>;
86
+ } else {
87
+ return [] as unknown as ModelValue<Model, State>;
88
+ }
82
89
  }
83
90
  };
@@ -1,24 +1,37 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
- import { MockValueConfig } from "../types";
3
+ import { MockValueConfig, MockValueStateConfig } from "../types";
4
4
 
5
5
  import { heading, MockRichTextHeadingValueConfig } from "./richText/heading";
6
6
 
7
7
  export type MockTitleValueConfig<
8
8
  Model extends prismicT.CustomTypeModelTitleField = prismicT.CustomTypeModelTitleField,
9
+ State extends prismicT.FieldState = prismicT.FieldState,
9
10
  > = {
10
11
  pattern?: MockRichTextHeadingValueConfig["pattern"];
11
- } & MockValueConfig<Model>;
12
+ } & MockValueConfig<Model> &
13
+ MockValueStateConfig<State>;
12
14
 
13
- export const title = (
14
- config: MockTitleValueConfig = {},
15
- ): prismicT.TitleField => {
16
- return [
17
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
18
- heading({
19
- seed: config.seed,
20
- model: config.model,
21
- pattern: config.pattern,
22
- })!,
23
- ] as prismicT.TitleField;
15
+ export type MockTitleValue<
16
+ State extends prismicT.FieldState = prismicT.FieldState,
17
+ > = prismicT.TitleField<State>;
18
+
19
+ export const title = <
20
+ Model extends prismicT.CustomTypeModelTitleField = prismicT.CustomTypeModelTitleField,
21
+ State extends prismicT.FieldState = prismicT.FieldState,
22
+ >(
23
+ config: MockTitleValueConfig<Model, State> = {},
24
+ ): MockTitleValue<State> => {
25
+ if (config.state === "empty") {
26
+ return [] as MockTitleValue<State>;
27
+ } else {
28
+ return [
29
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
30
+ heading({
31
+ seed: config.seed,
32
+ model: config.model,
33
+ pattern: config.pattern,
34
+ })!,
35
+ ] as MockTitleValue<State>;
36
+ }
24
37
  };