@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.
- package/README.md +4 -1
- package/dist/api/index.cjs +561 -0
- package/dist/api/index.cjs.map +1 -0
- package/dist/api/index.d.ts +36 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +561 -0
- package/dist/api/index.js.map +1 -0
- package/dist/index.cjs +672 -644
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +228 -262
- package/dist/{index.mjs → index.js} +663 -634
- package/dist/index.js.map +1 -0
- package/dist/model/index.cjs +163 -203
- package/dist/model/index.cjs.map +1 -0
- package/dist/model/index.d.ts +70 -96
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +462 -0
- package/dist/model/index.js.map +1 -0
- package/dist/value/index.cjs +284 -499
- package/dist/value/index.cjs.map +1 -0
- package/dist/value/index.d.ts +60 -120
- package/dist/value/index.d.ts.map +1 -0
- package/dist/value/{index.mjs → index.js} +447 -608
- package/dist/value/index.js.map +1 -0
- package/package.json +25 -20
- package/src/api/index.ts +11 -0
- package/src/api/query.ts +38 -0
- package/src/api/ref.ts +41 -0
- package/src/api/repository.ts +54 -0
- package/src/api/tags.ts +15 -0
- package/src/constants.ts +3 -1
- package/src/index.ts +1 -0
- package/src/lib/buildAlternativeLanguage.ts +18 -0
- package/src/lib/buildContentRelationshipField.ts +12 -5
- package/src/lib/buildEmbedField.ts +1 -1
- package/src/lib/buildImageFieldImage.ts +48 -0
- package/src/lib/createFaker.ts +19 -10
- package/src/lib/generateTags.ts +10 -2
- package/src/lib/valueForModelMap.ts +2 -2
- package/src/model/buildMockGroupFieldMap.ts +65 -0
- package/src/model/contentRelationship.ts +14 -21
- package/src/model/customType.ts +49 -48
- package/src/model/group.ts +8 -15
- package/src/model/image.ts +13 -13
- package/src/model/index.ts +2 -0
- package/src/model/select.ts +11 -16
- package/src/model/sharedSlice.ts +23 -30
- package/src/model/sharedSliceVariation.ts +33 -21
- package/src/model/slice.ts +15 -19
- package/src/model/sliceZone.ts +25 -42
- package/src/types.ts +50 -15
- package/src/value/color.ts +16 -6
- package/src/value/contentRelationship.ts +52 -36
- package/src/value/customType.ts +27 -4
- package/src/value/date.ts +25 -9
- package/src/value/embed.ts +18 -6
- package/src/value/geoPoint.ts +21 -9
- package/src/value/group.ts +7 -27
- package/src/value/image.ts +22 -9
- package/src/value/integrationFields.ts +26 -14
- package/src/value/keyText.ts +18 -6
- package/src/value/link.ts +33 -34
- package/src/value/linkToMedia.ts +15 -20
- package/src/value/number.ts +16 -6
- package/src/value/richText/heading.ts +7 -7
- package/src/value/richText/image.ts +6 -2
- package/src/value/richText/index.ts +1 -1
- package/src/value/select.ts +23 -8
- package/src/value/sharedSlice.ts +2 -2
- package/src/value/sharedSliceVariation.ts +6 -34
- package/src/value/slice.ts +5 -30
- package/src/value/sliceZone.ts +44 -60
- package/src/value/timestamp.ts +19 -6
- package/src/value/title.ts +1 -1
- package/src/value/uid.ts +1 -1
- package/dist/model/index.mjs +0 -448
- package/src/lib/buildImageField.ts +0 -34
- package/src/lib/buildMockGroupFieldMap.ts +0 -84
package/src/model/slice.ts
CHANGED
|
@@ -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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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:
|
|
31
|
-
|
|
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
|
};
|
package/src/model/sliceZone.ts
CHANGED
|
@@ -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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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?:
|
|
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?:
|
|
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?:
|
|
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<
|
|
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<
|
|
180
|
-
prismicT.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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<
|
package/src/value/color.ts
CHANGED
|
@@ -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
|
-
|
|
9
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
10
|
+
> = MockValueConfig<Model> & MockValueStateConfig<State>;
|
|
10
11
|
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
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
|
|
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<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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<
|
|
34
|
-
): MockContentRelationshipValue<
|
|
39
|
+
config: MockContentRelationshipValueConfig<Model, State> = {},
|
|
40
|
+
): MockContentRelationshipValue<Model, State> => {
|
|
35
41
|
const faker = createFaker(config.seed);
|
|
36
42
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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(
|
|
45
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
61
|
+
if (model.config.customtypes) {
|
|
62
|
+
shouldKeep =
|
|
63
|
+
shouldKeep && model.config.customtypes.includes(document.type);
|
|
64
|
+
}
|
|
51
65
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
66
|
+
if (model.config.tags) {
|
|
67
|
+
shouldKeep =
|
|
68
|
+
shouldKeep &&
|
|
69
|
+
model.config.tags.some((tag) => document.tags.includes(tag));
|
|
70
|
+
}
|
|
57
71
|
|
|
58
|
-
|
|
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({
|
|
79
|
-
|
|
80
|
-
|
|
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
|
};
|
package/src/value/customType.ts
CHANGED
|
@@ -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
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
9
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
10
|
+
> = Pick<MockTimestampValueConfig, "after" | "before"> &
|
|
11
|
+
MockValueConfig<Model> &
|
|
12
|
+
MockValueStateConfig<State>;
|
|
10
13
|
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
};
|
package/src/value/embed.ts
CHANGED
|
@@ -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
|
-
|
|
10
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
11
|
+
> = MockValueConfig<Model> & MockValueStateConfig<State>;
|
|
11
12
|
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
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
|
|
25
|
+
return (
|
|
26
|
+
config.state === "empty"
|
|
27
|
+
? {}
|
|
28
|
+
: buildEmbedField({ seed: config.seed, embedData })
|
|
29
|
+
) as MockEmbedValue<State>;
|
|
18
30
|
};
|
package/src/value/geoPoint.ts
CHANGED
|
@@ -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
|
-
|
|
9
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
10
|
+
> = MockValueConfig<Model> & MockValueStateConfig<State>;
|
|
10
11
|
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
|
|
20
|
-
|
|
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
|
};
|
package/src/value/group.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
45
|
-
config.
|
|
46
|
-
faker.
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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)
|