@prismicio/mock 0.0.7 → 0.0.10
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/dist/api/index.cjs +208 -100
- package/dist/api/index.cjs.map +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.js +208 -100
- package/dist/api/index.js.map +1 -1
- package/dist/index.cjs +365 -255
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +36 -30
- package/dist/index.js +364 -253
- package/dist/index.js.map +1 -1
- package/dist/model/index.cjs +168 -74
- package/dist/model/index.cjs.map +1 -1
- package/dist/model/index.d.ts +4 -2
- package/dist/model/index.js +168 -74
- package/dist/model/index.js.map +1 -1
- package/dist/value/index.cjs +334 -224
- package/dist/value/index.cjs.map +1 -1
- package/dist/value/index.d.ts +29 -25
- package/dist/value/index.js +334 -224
- package/dist/value/index.js.map +1 -1
- package/package.json +19 -17
- package/src/api/query.ts +2 -2
- package/src/api/ref.ts +3 -3
- package/src/api/repository.ts +5 -5
- package/src/lib/buildEmbedField.ts +16 -27
- package/src/lib/buildImageFieldImage.ts +3 -2
- package/src/lib/createFaker.ts +98 -20
- package/src/lib/generateCustomTypeId.ts +1 -1
- package/src/lib/generateFieldId.ts +1 -3
- package/src/lib/generateTags.ts +4 -12
- package/src/lib/getMockEmbedData.ts +33 -12
- package/src/lib/getMockImageData.ts +1 -1
- package/src/lib/lorem.ts +112 -0
- package/src/model/boolean.ts +1 -1
- package/src/model/buildMockGroupFieldMap.ts +1 -1
- package/src/model/color.ts +2 -2
- package/src/model/contentRelationship.ts +2 -2
- package/src/model/customType.ts +3 -3
- package/src/model/date.ts +2 -2
- package/src/model/embed.ts +2 -2
- package/src/model/geoPoint.ts +1 -1
- package/src/model/group.ts +1 -1
- package/src/model/image.ts +5 -9
- package/src/model/integrationFields.ts +5 -3
- package/src/model/keyText.ts +2 -2
- package/src/model/link.ts +3 -3
- package/src/model/linkToMedia.ts +2 -2
- package/src/model/number.ts +2 -2
- package/src/model/richText.ts +6 -6
- package/src/model/select.ts +2 -2
- package/src/model/sharedSlice.ts +2 -2
- package/src/model/sharedSliceVariation.ts +4 -4
- package/src/model/slice.ts +4 -4
- package/src/model/timestamp.ts +2 -2
- package/src/model/title.ts +5 -5
- package/src/model/uid.ts +2 -2
- package/src/types.ts +105 -92
- package/src/value/boolean.ts +1 -1
- package/src/value/color.ts +1 -1
- package/src/value/contentRelationship.ts +3 -3
- package/src/value/customType.ts +5 -5
- package/src/value/embed.ts +20 -7
- package/src/value/geoPoint.ts +2 -4
- package/src/value/group.ts +31 -25
- package/src/value/integrationFields.ts +4 -4
- package/src/value/keyText.ts +1 -3
- package/src/value/link.ts +3 -3
- package/src/value/linkToMedia.ts +7 -6
- package/src/value/number.ts +1 -1
- package/src/value/richText/embed.ts +2 -2
- package/src/value/richText/heading.ts +3 -10
- package/src/value/richText/image.ts +3 -5
- package/src/value/richText/index.ts +3 -8
- package/src/value/richText/list.ts +4 -8
- package/src/value/richText/oList.ts +4 -8
- package/src/value/richText/paragraph.ts +8 -4
- package/src/value/richText/preformatted.ts +9 -5
- package/src/value/select.ts +2 -2
- package/src/value/sharedSlice.ts +1 -1
- package/src/value/sharedSliceVariation.ts +2 -6
- package/src/value/slice.ts +2 -6
- package/src/value/sliceZone.ts +50 -49
- package/src/value/timestamp.ts +28 -15
- package/src/value/title.ts +26 -13
- package/src/value/uid.ts +1 -1
package/src/value/embed.ts
CHANGED
|
@@ -7,24 +7,37 @@ import { MockValueStateConfig, MockValueConfig } from "../types";
|
|
|
7
7
|
|
|
8
8
|
export type MockEmbedValueConfig<
|
|
9
9
|
Model extends prismicT.CustomTypeModelEmbedField = prismicT.CustomTypeModelEmbedField,
|
|
10
|
+
Data extends prismicT.AnyOEmbed = prismicT.AnyOEmbed,
|
|
10
11
|
State extends prismicT.FieldState = prismicT.FieldState,
|
|
11
|
-
> =
|
|
12
|
+
> = {
|
|
13
|
+
url?: string;
|
|
14
|
+
html?: string;
|
|
15
|
+
data?: Data;
|
|
16
|
+
} & MockValueConfig<Model> &
|
|
17
|
+
MockValueStateConfig<State>;
|
|
12
18
|
|
|
13
19
|
export type MockEmbedValue<
|
|
20
|
+
Data extends prismicT.AnyOEmbed = prismicT.AnyOEmbed,
|
|
14
21
|
State extends prismicT.FieldState = prismicT.FieldState,
|
|
15
|
-
> = prismicT.EmbedField<
|
|
22
|
+
> = prismicT.EmbedField<Data, State>;
|
|
16
23
|
|
|
17
24
|
export const embed = <
|
|
18
25
|
Model extends prismicT.CustomTypeModelEmbedField = prismicT.CustomTypeModelEmbedField,
|
|
26
|
+
Data extends prismicT.AnyOEmbed = prismicT.AnyOEmbed,
|
|
19
27
|
State extends prismicT.FieldState = "filled",
|
|
20
28
|
>(
|
|
21
|
-
config: MockEmbedValueConfig<Model, State> = {},
|
|
22
|
-
): MockEmbedValue<State> => {
|
|
23
|
-
const
|
|
29
|
+
config: MockEmbedValueConfig<Model, Data, State> = {},
|
|
30
|
+
): MockEmbedValue<Data, State> => {
|
|
31
|
+
const data = config.data ?? getMockEmbedData({ seed: config.seed });
|
|
24
32
|
|
|
25
33
|
return (
|
|
26
34
|
config.state === "empty"
|
|
27
35
|
? {}
|
|
28
|
-
: buildEmbedField({
|
|
29
|
-
|
|
36
|
+
: buildEmbedField({
|
|
37
|
+
seed: config.seed,
|
|
38
|
+
url: config.url ?? ("embed_url" in data ? data.embed_url : undefined),
|
|
39
|
+
html: config.html ?? ("html" in data ? data.html : undefined),
|
|
40
|
+
data,
|
|
41
|
+
})
|
|
42
|
+
) as MockEmbedValue<Data, State>;
|
|
30
43
|
};
|
package/src/value/geoPoint.ts
CHANGED
|
@@ -21,14 +21,12 @@ export const geoPoint = <
|
|
|
21
21
|
): MockGeoPointValue<State> => {
|
|
22
22
|
const faker = createFaker(config.seed);
|
|
23
23
|
|
|
24
|
-
const coordinates = faker.address.nearbyGPSCoordinate();
|
|
25
|
-
|
|
26
24
|
return (
|
|
27
25
|
config.state === "empty"
|
|
28
26
|
? {}
|
|
29
27
|
: {
|
|
30
|
-
longitude:
|
|
31
|
-
latitude:
|
|
28
|
+
longitude: faker.rangeFloat(-180, 180),
|
|
29
|
+
latitude: faker.rangeFloat(-90, 90),
|
|
32
30
|
}
|
|
33
31
|
) as MockGeoPointValue<State>;
|
|
34
32
|
};
|
package/src/value/group.ts
CHANGED
|
@@ -6,40 +6,46 @@ 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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
config.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}) as ModelValue<Model>;
|
|
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 = config.itemsCount ?? faker.range(1, 6);
|
|
40
|
+
|
|
41
|
+
return Array(itemsCount)
|
|
42
|
+
.fill(undefined)
|
|
43
|
+
.map(() => {
|
|
44
|
+
return valueForModelMap({
|
|
45
|
+
seed: config.seed,
|
|
46
|
+
map: model.config.fields,
|
|
47
|
+
configs: config.configs,
|
|
48
|
+
});
|
|
49
|
+
}) as ModelValue<Model, State>;
|
|
50
|
+
}
|
|
45
51
|
};
|
|
@@ -35,11 +35,11 @@ export const integrationFields = <
|
|
|
35
35
|
config.state === "empty"
|
|
36
36
|
? null
|
|
37
37
|
: {
|
|
38
|
-
id: faker.
|
|
39
|
-
title: changeCase.capitalCase(faker.
|
|
40
|
-
description: faker.
|
|
38
|
+
id: faker.hash(7),
|
|
39
|
+
title: changeCase.capitalCase(faker.words(faker.range(1, 3))),
|
|
40
|
+
description: changeCase.sentenceCase(faker.words(faker.range(5, 10))),
|
|
41
41
|
image_url: imageData.url,
|
|
42
|
-
last_update: faker.date
|
|
42
|
+
last_update: faker.date().getTime(),
|
|
43
43
|
blob: config.data as Blob,
|
|
44
44
|
}
|
|
45
45
|
) as MockIntegrationFieldsValue<Blob, State>;
|
package/src/value/keyText.ts
CHANGED
|
@@ -23,8 +23,6 @@ export const keyText = <
|
|
|
23
23
|
const faker = createFaker(config.seed);
|
|
24
24
|
|
|
25
25
|
return (
|
|
26
|
-
config.state === "empty"
|
|
27
|
-
? null
|
|
28
|
-
: changeCase.sentenceCase(faker.lorem.words(3))
|
|
26
|
+
config.state === "empty" ? null : changeCase.sentenceCase(faker.words(3))
|
|
29
27
|
) as MockKeyTextValue<State>;
|
|
30
28
|
};
|
package/src/value/link.ts
CHANGED
|
@@ -51,7 +51,7 @@ export const link = <
|
|
|
51
51
|
|
|
52
52
|
const type =
|
|
53
53
|
config.type ||
|
|
54
|
-
faker.
|
|
54
|
+
faker.randomElement([
|
|
55
55
|
prismicT.LinkType.Web,
|
|
56
56
|
prismicT.LinkType.Document,
|
|
57
57
|
prismicT.LinkType.Media,
|
|
@@ -84,10 +84,10 @@ export const link = <
|
|
|
84
84
|
|
|
85
85
|
return {
|
|
86
86
|
link_type: prismicT.LinkType.Web,
|
|
87
|
-
url: faker.
|
|
87
|
+
url: faker.url(),
|
|
88
88
|
target:
|
|
89
89
|
config.withTargetBlank ??
|
|
90
|
-
(model.config.allowTargetBlank && faker.
|
|
90
|
+
(model.config.allowTargetBlank && faker.boolean())
|
|
91
91
|
? "_blank"
|
|
92
92
|
: undefined,
|
|
93
93
|
} as MockLinkValue<LinkType, State>;
|
package/src/value/linkToMedia.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as prismicT from "@prismicio/types";
|
|
2
|
+
import * as changeCase from "change-case";
|
|
2
3
|
|
|
3
4
|
import { createFaker } from "../lib/createFaker";
|
|
4
5
|
|
|
@@ -28,12 +29,12 @@ export const linkToMedia = <
|
|
|
28
29
|
} else {
|
|
29
30
|
return {
|
|
30
31
|
link_type: prismicT.LinkType.Media,
|
|
31
|
-
name: faker.
|
|
32
|
-
kind: faker.
|
|
33
|
-
url: faker.
|
|
34
|
-
size: faker.
|
|
35
|
-
height: faker.
|
|
36
|
-
width: faker.
|
|
32
|
+
name: `${changeCase.snakeCase(faker.words(faker.range(1, 2)))}.example`,
|
|
33
|
+
kind: changeCase.snakeCase(faker.word()),
|
|
34
|
+
url: faker.url(),
|
|
35
|
+
size: faker.range(500, 3000).toString(),
|
|
36
|
+
height: faker.range(500, 3000).toString(),
|
|
37
|
+
width: faker.range(500, 3000).toString(),
|
|
37
38
|
} as MockLinkToMediaValue<State>;
|
|
38
39
|
}
|
|
39
40
|
};
|
package/src/value/number.ts
CHANGED
|
@@ -10,8 +10,8 @@ type MockRichTextEmbedValueConfig = MockRichTextValueConfig;
|
|
|
10
10
|
export const embed = (
|
|
11
11
|
config: MockRichTextEmbedValueConfig = {},
|
|
12
12
|
): prismicT.RTEmbedNode | undefined => {
|
|
13
|
-
const
|
|
14
|
-
const embedField = buildEmbedField({ seed: config.seed,
|
|
13
|
+
const data = getMockEmbedData({ seed: config.seed });
|
|
14
|
+
const embedField = buildEmbedField({ seed: config.seed, data });
|
|
15
15
|
|
|
16
16
|
return {
|
|
17
17
|
type: prismicT.RichTextNodeType.embed,
|
|
@@ -63,25 +63,18 @@ export const heading = (
|
|
|
63
63
|
prismicT.RichTextNodeType.heading6,
|
|
64
64
|
].includes(type as RichTextNodeTitleType),
|
|
65
65
|
) as RichTextNodeTitleType[];
|
|
66
|
-
const type = faker.
|
|
66
|
+
const type = faker.randomElement(types);
|
|
67
67
|
|
|
68
68
|
if (type) {
|
|
69
69
|
const patternKey =
|
|
70
70
|
config.pattern ||
|
|
71
|
-
faker.
|
|
72
|
-
Object.keys(patterns) as (keyof typeof patterns)[],
|
|
73
|
-
);
|
|
71
|
+
faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
|
|
74
72
|
const pattern = patterns[patternKey];
|
|
75
73
|
|
|
76
74
|
return {
|
|
77
75
|
type,
|
|
78
76
|
text: changeCase.capitalCase(
|
|
79
|
-
faker.
|
|
80
|
-
faker.datatype.number({
|
|
81
|
-
min: pattern.minWords,
|
|
82
|
-
max: pattern.maxWords,
|
|
83
|
-
}),
|
|
84
|
-
),
|
|
77
|
+
faker.words(faker.range(pattern.minWords, pattern.maxWords)),
|
|
85
78
|
),
|
|
86
79
|
spans: [],
|
|
87
80
|
};
|
|
@@ -14,16 +14,14 @@ export const image = (
|
|
|
14
14
|
const imageField = buildImageFieldImage({
|
|
15
15
|
seed: config.seed,
|
|
16
16
|
imageData,
|
|
17
|
-
state:
|
|
17
|
+
state: "filled",
|
|
18
18
|
});
|
|
19
19
|
|
|
20
20
|
return {
|
|
21
21
|
type: prismicT.RichTextNodeType.image,
|
|
22
22
|
alt: imageField.alt,
|
|
23
|
-
|
|
24
|
-
url: imageField.url!,
|
|
23
|
+
url: imageField.url,
|
|
25
24
|
copyright: imageField.copyright,
|
|
26
|
-
|
|
27
|
-
dimensions: imageField.dimensions!,
|
|
25
|
+
dimensions: imageField.dimensions,
|
|
28
26
|
};
|
|
29
27
|
};
|
|
@@ -70,22 +70,17 @@ export const richText = (
|
|
|
70
70
|
if (types.length > 0) {
|
|
71
71
|
const patternKey =
|
|
72
72
|
config.pattern ||
|
|
73
|
-
faker.
|
|
74
|
-
Object.keys(patterns) as (keyof typeof patterns)[],
|
|
75
|
-
);
|
|
73
|
+
faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
|
|
76
74
|
const pattern = patterns[patternKey];
|
|
77
75
|
|
|
78
76
|
const blockCount = supportsMultipleBlocks
|
|
79
|
-
? faker.
|
|
80
|
-
min: pattern.blockCountMin,
|
|
81
|
-
max: pattern.blockCountMax,
|
|
82
|
-
})
|
|
77
|
+
? faker.range(pattern.blockCountMin, pattern.blockCountMax)
|
|
83
78
|
: 1;
|
|
84
79
|
|
|
85
80
|
return Array(blockCount)
|
|
86
81
|
.fill(undefined)
|
|
87
82
|
.map(() => {
|
|
88
|
-
const type = faker.
|
|
83
|
+
const type = faker.randomElement(types);
|
|
89
84
|
const generator = generators[type];
|
|
90
85
|
|
|
91
86
|
return generator({ seed: config.seed, model });
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as prismicT from "@prismicio/types";
|
|
2
|
+
import * as changeCase from "change-case";
|
|
2
3
|
|
|
3
4
|
import { createFaker } from "../../lib/createFaker";
|
|
4
5
|
|
|
@@ -30,22 +31,17 @@ export const list = (
|
|
|
30
31
|
|
|
31
32
|
const patternKey =
|
|
32
33
|
config.pattern ||
|
|
33
|
-
faker.
|
|
34
|
-
Object.keys(patterns) as (keyof typeof patterns)[],
|
|
35
|
-
);
|
|
34
|
+
faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
|
|
36
35
|
const pattern = patterns[patternKey];
|
|
37
36
|
|
|
38
|
-
const itemsCount = faker.
|
|
39
|
-
min: pattern.minItems,
|
|
40
|
-
max: pattern.maxItems,
|
|
41
|
-
});
|
|
37
|
+
const itemsCount = faker.range(pattern.minItems, pattern.maxItems);
|
|
42
38
|
|
|
43
39
|
return Array(itemsCount)
|
|
44
40
|
.fill(undefined)
|
|
45
41
|
.map(() => {
|
|
46
42
|
return {
|
|
47
43
|
type: prismicT.RichTextNodeType.listItem,
|
|
48
|
-
text: faker.
|
|
44
|
+
text: changeCase.sentenceCase(faker.words(faker.range(5, 15))),
|
|
49
45
|
spans: [],
|
|
50
46
|
};
|
|
51
47
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as prismicT from "@prismicio/types";
|
|
2
|
+
import * as changeCase from "change-case";
|
|
2
3
|
|
|
3
4
|
import { createFaker } from "../../lib/createFaker";
|
|
4
5
|
|
|
@@ -30,22 +31,17 @@ export const oList = (
|
|
|
30
31
|
|
|
31
32
|
const patternKey =
|
|
32
33
|
config.pattern ||
|
|
33
|
-
faker.
|
|
34
|
-
Object.keys(patterns) as (keyof typeof patterns)[],
|
|
35
|
-
);
|
|
34
|
+
faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
|
|
36
35
|
const pattern = patterns[patternKey];
|
|
37
36
|
|
|
38
|
-
const itemsCount = faker.
|
|
39
|
-
min: pattern.minItems,
|
|
40
|
-
max: pattern.maxItems,
|
|
41
|
-
});
|
|
37
|
+
const itemsCount = faker.range(pattern.minItems, pattern.maxItems);
|
|
42
38
|
|
|
43
39
|
return Array(itemsCount)
|
|
44
40
|
.fill(undefined)
|
|
45
41
|
.map(() => {
|
|
46
42
|
return {
|
|
47
43
|
type: prismicT.RichTextNodeType.oListItem,
|
|
48
|
-
text: faker.
|
|
44
|
+
text: changeCase.sentenceCase(faker.words(faker.range(5, 15))),
|
|
49
45
|
spans: [],
|
|
50
46
|
};
|
|
51
47
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as prismicT from "@prismicio/types";
|
|
2
|
+
import * as changeCase from "change-case";
|
|
2
3
|
|
|
3
4
|
import { createFaker } from "../../lib/createFaker";
|
|
4
5
|
|
|
@@ -27,14 +28,17 @@ export const paragraph = (
|
|
|
27
28
|
|
|
28
29
|
const patternKey =
|
|
29
30
|
config.pattern ||
|
|
30
|
-
faker.
|
|
31
|
-
Object.keys(patterns) as (keyof typeof patterns)[],
|
|
32
|
-
);
|
|
31
|
+
faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
|
|
33
32
|
const pattern = patterns[patternKey];
|
|
34
33
|
|
|
34
|
+
const text = Array.from(
|
|
35
|
+
{ length: pattern.sentenceCount },
|
|
36
|
+
() => changeCase.sentenceCase(faker.words(faker.range(5, 15))) + ".",
|
|
37
|
+
).join(" ");
|
|
38
|
+
|
|
35
39
|
return {
|
|
36
40
|
type: prismicT.RichTextNodeType.paragraph,
|
|
37
|
-
text
|
|
41
|
+
text,
|
|
38
42
|
spans: [],
|
|
39
43
|
};
|
|
40
44
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as prismicT from "@prismicio/types";
|
|
2
|
+
import * as changeCase from "change-case";
|
|
2
3
|
|
|
3
4
|
import { createFaker } from "../../lib/createFaker";
|
|
4
5
|
|
|
@@ -27,15 +28,18 @@ export const preformatted = (
|
|
|
27
28
|
|
|
28
29
|
const patternKey =
|
|
29
30
|
config.pattern ||
|
|
30
|
-
faker.
|
|
31
|
-
Object.keys(patterns) as (keyof typeof patterns)[],
|
|
32
|
-
);
|
|
31
|
+
faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
|
|
33
32
|
const pattern = patterns[patternKey];
|
|
34
33
|
|
|
34
|
+
// TODO: Use code, not lorem ipsum.
|
|
35
|
+
const text = Array.from(
|
|
36
|
+
{ length: pattern.sentenceCount },
|
|
37
|
+
() => changeCase.sentenceCase(faker.words(faker.range(5, 15))) + ".",
|
|
38
|
+
).join(" ");
|
|
39
|
+
|
|
35
40
|
return {
|
|
36
41
|
type: prismicT.RichTextNodeType.preformatted,
|
|
37
|
-
|
|
38
|
-
text: faker.lorem.paragraph(pattern.sentenceCount),
|
|
42
|
+
text,
|
|
39
43
|
spans: [],
|
|
40
44
|
};
|
|
41
45
|
};
|
package/src/value/select.ts
CHANGED
|
@@ -31,9 +31,9 @@ export const select = <
|
|
|
31
31
|
return null as MockSelectValue<Model, State>;
|
|
32
32
|
} else {
|
|
33
33
|
return (
|
|
34
|
-
typeof defaultValue === "string" && faker.
|
|
34
|
+
typeof defaultValue === "string" && faker.boolean()
|
|
35
35
|
? defaultValue
|
|
36
|
-
: faker.
|
|
36
|
+
: faker.randomElement(model.config.options)
|
|
37
37
|
) as MockSelectValue<Model, State>;
|
|
38
38
|
}
|
|
39
39
|
};
|
package/src/value/sharedSlice.ts
CHANGED
|
@@ -26,7 +26,7 @@ export const sharedSlice = <
|
|
|
26
26
|
const faker = createFaker(config.seed);
|
|
27
27
|
|
|
28
28
|
const model = config.model || modelGen.sharedSlice({ seed: config.seed });
|
|
29
|
-
const variationModel = faker.
|
|
29
|
+
const variationModel = faker.randomElement(model.variations);
|
|
30
30
|
|
|
31
31
|
return sharedSliceVariation({
|
|
32
32
|
seed: config.seed,
|
|
@@ -35,18 +35,14 @@ export const sharedSliceVariation = <
|
|
|
35
35
|
|
|
36
36
|
const itemsCount =
|
|
37
37
|
Object.keys(model.items).length > 0
|
|
38
|
-
? config.itemsCount ??
|
|
39
|
-
faker.datatype.number({
|
|
40
|
-
min: 1,
|
|
41
|
-
max: 6,
|
|
42
|
-
})
|
|
38
|
+
? config.itemsCount ?? faker.range(1, 6)
|
|
43
39
|
: 0;
|
|
44
40
|
|
|
45
41
|
return {
|
|
46
42
|
slice_type: sliceType,
|
|
47
43
|
slice_label: null,
|
|
48
44
|
variation: model.id,
|
|
49
|
-
version: faker.
|
|
45
|
+
version: faker.hash(7),
|
|
50
46
|
primary: valueForModelMap({
|
|
51
47
|
seed: config.seed,
|
|
52
48
|
map: model.primary,
|
package/src/value/slice.ts
CHANGED
|
@@ -35,15 +35,11 @@ export const slice = <
|
|
|
35
35
|
const sliceLabel =
|
|
36
36
|
config.label !== undefined
|
|
37
37
|
? config.label
|
|
38
|
-
: changeCase.capitalCase(faker.
|
|
38
|
+
: changeCase.capitalCase(faker.words(faker.range(1, 2)));
|
|
39
39
|
|
|
40
40
|
const itemsCount =
|
|
41
41
|
Object.keys(model.repeat).length > 0
|
|
42
|
-
? config.itemsCount ??
|
|
43
|
-
faker.datatype.number({
|
|
44
|
-
min: 1,
|
|
45
|
-
max: 6,
|
|
46
|
-
})
|
|
42
|
+
? config.itemsCount ?? faker.range(1, 6)
|
|
47
43
|
: 0;
|
|
48
44
|
|
|
49
45
|
return {
|
package/src/value/sliceZone.ts
CHANGED
|
@@ -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,73 @@ 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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
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
|
-
|
|
46
|
-
|
|
37
|
+
if (Object.keys(model.config.choices).length > 0) {
|
|
38
|
+
const itemsCount = config.itemsCount ?? faker.range(1, 6);
|
|
47
39
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
type: choiceType,
|
|
54
|
-
label: choiceLabel ? choiceLabel.name : null,
|
|
55
|
-
primaryFieldConfigs: config.primaryFieldConfigs,
|
|
56
|
-
itemsFieldConfigs: config.itemsFieldConfigs,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
40
|
+
return Array(itemsCount)
|
|
41
|
+
.fill(undefined)
|
|
42
|
+
.map(() => {
|
|
43
|
+
const choices = Object.entries(model.config.choices);
|
|
44
|
+
const [choiceType, choiceModel] = faker.randomElement(choices);
|
|
59
45
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
(sharedSliceModel) => sharedSliceModel.id === choiceType,
|
|
63
|
-
);
|
|
46
|
+
const choiceLabels = model.config.labels[choiceType] || [];
|
|
47
|
+
const choiceLabel = faker.randomElement(choiceLabels);
|
|
64
48
|
|
|
65
|
-
|
|
66
|
-
|
|
49
|
+
switch (choiceModel.type) {
|
|
50
|
+
case prismicT.CustomTypeModelSliceType.Slice: {
|
|
51
|
+
return slice({
|
|
67
52
|
seed: config.seed,
|
|
68
|
-
model:
|
|
53
|
+
model: choiceModel,
|
|
54
|
+
type: choiceType,
|
|
55
|
+
label: choiceLabel ? choiceLabel.name : null,
|
|
69
56
|
primaryFieldConfigs: config.primaryFieldConfigs,
|
|
70
57
|
itemsFieldConfigs: config.itemsFieldConfigs,
|
|
71
58
|
});
|
|
72
59
|
}
|
|
60
|
+
|
|
61
|
+
case prismicT.CustomTypeModelSliceType.SharedSlice: {
|
|
62
|
+
const sharedSliceModel = config.sharedSliceModels?.find(
|
|
63
|
+
(sharedSliceModel) => sharedSliceModel.id === choiceType,
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
if (sharedSliceModel) {
|
|
67
|
+
return sharedSlice({
|
|
68
|
+
seed: config.seed,
|
|
69
|
+
model: sharedSliceModel,
|
|
70
|
+
primaryFieldConfigs: config.primaryFieldConfigs,
|
|
71
|
+
itemsFieldConfigs: config.itemsFieldConfigs,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
73
75
|
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
return [] as unknown as ModelValue<Model>;
|
|
76
|
+
})
|
|
77
|
+
.filter(
|
|
78
|
+
(slice): slice is NonNullable<typeof slice> => slice !== undefined,
|
|
79
|
+
) as ModelValue<Model, State>;
|
|
80
|
+
} else {
|
|
81
|
+
return [] as unknown as ModelValue<Model, State>;
|
|
82
|
+
}
|
|
82
83
|
}
|
|
83
84
|
};
|