@prismicio/mock 0.0.8 → 0.1.0
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 +348 -236
- package/dist/api/index.cjs.map +1 -1
- package/dist/api/index.d.ts +52 -6
- package/dist/api/index.js +348 -236
- package/dist/api/index.js.map +1 -1
- package/dist/index.cjs +893 -543
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +247 -73
- package/dist/index.js +885 -542
- package/dist/index.js.map +1 -1
- package/dist/model/index.cjs +398 -134
- package/dist/model/index.cjs.map +1 -1
- package/dist/model/index.d.ts +114 -28
- package/dist/model/index.js +398 -134
- package/dist/model/index.js.map +1 -1
- package/dist/value/index.cjs +598 -468
- package/dist/value/index.cjs.map +1 -1
- package/dist/value/index.d.ts +96 -40
- package/dist/value/index.js +598 -468
- package/dist/value/index.js.map +1 -1
- package/package.json +22 -20
- package/src/api/createAPIMockFactory.ts +56 -0
- package/src/api/query.ts +4 -4
- package/src/api/ref.ts +6 -6
- package/src/api/repository.ts +12 -14
- package/src/api/tags.ts +5 -2
- package/src/createMockFactory.ts +52 -0
- package/src/index.ts +15 -0
- package/src/lib/buildEmbedField.ts +28 -30
- package/src/lib/buildImageFieldImage.ts +19 -7
- package/src/lib/createFaker.ts +99 -22
- package/src/lib/generateCustomTypeId.ts +13 -5
- package/src/lib/generateFieldId.ts +13 -7
- package/src/lib/generateTags.ts +17 -16
- package/src/lib/getMockEmbedData.ts +45 -16
- package/src/lib/getMockImageData.ts +13 -5
- package/src/lib/lorem.ts +112 -0
- package/src/lib/valueForModel.ts +47 -30
- package/src/lib/valueForModelMap.ts +24 -4
- package/src/model/boolean.ts +6 -6
- package/src/model/buildMockGroupFieldMap.ts +5 -5
- package/src/model/color.ts +4 -4
- package/src/model/contentRelationship.ts +4 -4
- package/src/model/createModelMockFactory.ts +213 -0
- package/src/model/customType.ts +6 -6
- package/src/model/date.ts +4 -4
- package/src/model/embed.ts +4 -4
- package/src/model/geoPoint.ts +3 -3
- package/src/model/group.ts +7 -7
- package/src/model/image.ts +8 -12
- package/src/model/index.ts +2 -0
- package/src/model/integrationFields.ts +4 -4
- package/src/model/keyText.ts +4 -4
- package/src/model/link.ts +6 -6
- package/src/model/linkToMedia.ts +5 -5
- package/src/model/number.ts +4 -4
- package/src/model/richText.ts +8 -8
- package/src/model/select.ts +5 -5
- package/src/model/sharedSlice.ts +5 -5
- package/src/model/sharedSliceVariation.ts +10 -10
- package/src/model/slice.ts +7 -7
- package/src/model/sliceZone.ts +7 -4
- package/src/model/timestamp.ts +4 -4
- package/src/model/title.ts +7 -7
- package/src/model/uid.ts +4 -4
- package/src/types.ts +70 -31
- package/src/value/boolean.ts +4 -6
- package/src/value/color.ts +3 -3
- package/src/value/contentRelationship.ts +21 -18
- package/src/value/createValueMockFactory.ts +236 -0
- package/src/value/customType.ts +12 -12
- package/src/value/date.ts +6 -2
- package/src/value/embed.ts +23 -7
- package/src/value/geoPoint.ts +4 -6
- package/src/value/group.ts +6 -11
- package/src/value/image.ts +26 -18
- package/src/value/integrationFields.ts +12 -26
- package/src/value/keyText.ts +3 -5
- package/src/value/link.ts +11 -9
- package/src/value/linkToMedia.ts +9 -8
- package/src/value/number.ts +3 -3
- package/src/value/richText/embed.ts +6 -3
- package/src/value/richText/heading.ts +32 -27
- package/src/value/richText/image.ts +9 -8
- package/src/value/richText/index.ts +71 -48
- package/src/value/richText/list.ts +6 -10
- package/src/value/richText/oList.ts +6 -10
- package/src/value/richText/paragraph.ts +10 -6
- package/src/value/richText/preformatted.ts +11 -7
- package/src/value/select.ts +11 -7
- package/src/value/sharedSlice.ts +5 -5
- package/src/value/sharedSliceVariation.ts +11 -16
- package/src/value/slice.ts +11 -15
- package/src/value/sliceZone.ts +14 -18
- package/src/value/timestamp.ts +31 -18
- package/src/value/title.ts +7 -3
- package/src/value/uid.ts +6 -4
package/src/value/number.ts
CHANGED
|
@@ -17,11 +17,11 @@ export const number = <
|
|
|
17
17
|
Model extends prismicT.CustomTypeModelNumberField = prismicT.CustomTypeModelNumberField,
|
|
18
18
|
State extends prismicT.FieldState = "filled",
|
|
19
19
|
>(
|
|
20
|
-
config: MockNumberValueConfig<Model, State
|
|
20
|
+
config: MockNumberValueConfig<Model, State>,
|
|
21
21
|
): MockNumberValue<State> => {
|
|
22
|
-
const faker = createFaker(config.seed);
|
|
22
|
+
const faker = config.faker || createFaker(config.seed);
|
|
23
23
|
|
|
24
24
|
return (
|
|
25
|
-
config.state === "empty" ? null : faker.
|
|
25
|
+
config.state === "empty" ? null : faker.range(1, 100)
|
|
26
26
|
) as MockNumberValue<State>;
|
|
27
27
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as prismicT from "@prismicio/types";
|
|
2
2
|
|
|
3
3
|
import { buildEmbedField } from "../../lib/buildEmbedField";
|
|
4
|
+
import { createFaker } from "../../lib/createFaker";
|
|
4
5
|
import { getMockEmbedData } from "../../lib/getMockEmbedData";
|
|
5
6
|
|
|
6
7
|
import { MockRichTextValueConfig } from "../../types";
|
|
@@ -8,10 +9,12 @@ import { MockRichTextValueConfig } from "../../types";
|
|
|
8
9
|
type MockRichTextEmbedValueConfig = MockRichTextValueConfig;
|
|
9
10
|
|
|
10
11
|
export const embed = (
|
|
11
|
-
config: MockRichTextEmbedValueConfig
|
|
12
|
+
config: MockRichTextEmbedValueConfig,
|
|
12
13
|
): prismicT.RTEmbedNode | undefined => {
|
|
13
|
-
const
|
|
14
|
-
|
|
14
|
+
const faker = config.faker || createFaker(config.seed);
|
|
15
|
+
|
|
16
|
+
const data = getMockEmbedData({ faker });
|
|
17
|
+
const embedField = buildEmbedField({ faker, data });
|
|
15
18
|
|
|
16
19
|
return {
|
|
17
20
|
type: prismicT.RichTextNodeType.embed,
|
|
@@ -42,46 +42,51 @@ export type MockRichTextHeadingValueConfig = {
|
|
|
42
42
|
pattern?: keyof typeof patterns;
|
|
43
43
|
} & MockRichTextValueConfig;
|
|
44
44
|
|
|
45
|
+
const headingNoteTypes = [
|
|
46
|
+
prismicT.RichTextNodeType.heading1,
|
|
47
|
+
prismicT.RichTextNodeType.heading2,
|
|
48
|
+
prismicT.RichTextNodeType.heading3,
|
|
49
|
+
prismicT.RichTextNodeType.heading4,
|
|
50
|
+
prismicT.RichTextNodeType.heading5,
|
|
51
|
+
prismicT.RichTextNodeType.heading6,
|
|
52
|
+
];
|
|
53
|
+
|
|
45
54
|
export const heading = (
|
|
46
|
-
config: MockRichTextHeadingValueConfig
|
|
55
|
+
config: MockRichTextHeadingValueConfig,
|
|
47
56
|
): RTHeadingNode | undefined => {
|
|
48
|
-
const faker = createFaker(config.seed);
|
|
57
|
+
const faker = config.faker || createFaker(config.seed);
|
|
58
|
+
|
|
59
|
+
const model = config.model || modelGen.title({ faker });
|
|
49
60
|
|
|
50
|
-
|
|
61
|
+
let types: RichTextNodeTitleType[] = [];
|
|
62
|
+
if (model.config) {
|
|
63
|
+
if ("single" in model.config && model.config.single) {
|
|
64
|
+
types = model.config.single
|
|
65
|
+
.split(",")
|
|
66
|
+
.filter((type): type is RichTextNodeTitleType =>
|
|
67
|
+
headingNoteTypes.includes(type as RichTextNodeTitleType),
|
|
68
|
+
);
|
|
69
|
+
} else if ("multi" in model.config && model.config.multi) {
|
|
70
|
+
types = model.config.multi
|
|
71
|
+
.split(",")
|
|
72
|
+
.filter((type): type is RichTextNodeTitleType =>
|
|
73
|
+
headingNoteTypes.includes(type as RichTextNodeTitleType),
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
51
77
|
|
|
52
|
-
const
|
|
53
|
-
"single" in model.config ? model.config.single : model.config.multi
|
|
54
|
-
)
|
|
55
|
-
.split(",")
|
|
56
|
-
.filter((type) =>
|
|
57
|
-
[
|
|
58
|
-
prismicT.RichTextNodeType.heading1,
|
|
59
|
-
prismicT.RichTextNodeType.heading2,
|
|
60
|
-
prismicT.RichTextNodeType.heading3,
|
|
61
|
-
prismicT.RichTextNodeType.heading4,
|
|
62
|
-
prismicT.RichTextNodeType.heading5,
|
|
63
|
-
prismicT.RichTextNodeType.heading6,
|
|
64
|
-
].includes(type as RichTextNodeTitleType),
|
|
65
|
-
) as RichTextNodeTitleType[];
|
|
66
|
-
const type = faker.random.arrayElement(types);
|
|
78
|
+
const type = faker.randomElement(types);
|
|
67
79
|
|
|
68
80
|
if (type) {
|
|
69
81
|
const patternKey =
|
|
70
82
|
config.pattern ||
|
|
71
|
-
faker.
|
|
72
|
-
Object.keys(patterns) as (keyof typeof patterns)[],
|
|
73
|
-
);
|
|
83
|
+
faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
|
|
74
84
|
const pattern = patterns[patternKey];
|
|
75
85
|
|
|
76
86
|
return {
|
|
77
87
|
type,
|
|
78
88
|
text: changeCase.capitalCase(
|
|
79
|
-
faker.
|
|
80
|
-
faker.datatype.number({
|
|
81
|
-
min: pattern.minWords,
|
|
82
|
-
max: pattern.maxWords,
|
|
83
|
-
}),
|
|
84
|
-
),
|
|
89
|
+
faker.words(faker.range(pattern.minWords, pattern.maxWords)),
|
|
85
90
|
),
|
|
86
91
|
spans: [],
|
|
87
92
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as prismicT from "@prismicio/types";
|
|
2
2
|
|
|
3
3
|
import { buildImageFieldImage } from "../../lib/buildImageFieldImage";
|
|
4
|
+
import { createFaker } from "../../lib/createFaker";
|
|
4
5
|
import { getMockImageData } from "../../lib/getMockImageData";
|
|
5
6
|
|
|
6
7
|
import { MockRichTextValueConfig } from "../../types";
|
|
@@ -8,22 +9,22 @@ import { MockRichTextValueConfig } from "../../types";
|
|
|
8
9
|
type MockRichTextImageValueConfig = MockRichTextValueConfig;
|
|
9
10
|
|
|
10
11
|
export const image = (
|
|
11
|
-
config: MockRichTextImageValueConfig
|
|
12
|
+
config: MockRichTextImageValueConfig,
|
|
12
13
|
): prismicT.RTImageNode | undefined => {
|
|
13
|
-
const
|
|
14
|
+
const faker = config.faker || createFaker(config.seed);
|
|
15
|
+
|
|
16
|
+
const imageData = getMockImageData({ faker });
|
|
14
17
|
const imageField = buildImageFieldImage({
|
|
15
|
-
|
|
18
|
+
faker,
|
|
16
19
|
imageData,
|
|
17
|
-
state:
|
|
20
|
+
state: "filled",
|
|
18
21
|
});
|
|
19
22
|
|
|
20
23
|
return {
|
|
21
24
|
type: prismicT.RichTextNodeType.image,
|
|
22
25
|
alt: imageField.alt,
|
|
23
|
-
|
|
24
|
-
url: imageField.url!,
|
|
26
|
+
url: imageField.url,
|
|
25
27
|
copyright: imageField.copyright,
|
|
26
|
-
|
|
27
|
-
dimensions: imageField.dimensions!,
|
|
28
|
+
dimensions: imageField.dimensions,
|
|
28
29
|
};
|
|
29
30
|
};
|
|
@@ -2,7 +2,10 @@ import * as prismicT from "@prismicio/types";
|
|
|
2
2
|
|
|
3
3
|
import { createFaker } from "../../lib/createFaker";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
MockRichTextValueConfig as BaseMockRichTextValueConfig,
|
|
7
|
+
MockValueStateConfig,
|
|
8
|
+
} from "../../types";
|
|
6
9
|
|
|
7
10
|
import * as modelGen from "../../model";
|
|
8
11
|
import { heading } from "./heading";
|
|
@@ -28,10 +31,6 @@ const patterns = {
|
|
|
28
31
|
},
|
|
29
32
|
} as const;
|
|
30
33
|
|
|
31
|
-
export type MockRichTextValueConfig = {
|
|
32
|
-
pattern?: keyof typeof patterns;
|
|
33
|
-
} & BaseMockRichTextValueConfig<prismicT.CustomTypeModelRichTextField>;
|
|
34
|
-
|
|
35
34
|
const generators = {
|
|
36
35
|
[prismicT.RichTextNodeType.heading1]: heading,
|
|
37
36
|
[prismicT.RichTextNodeType.heading2]: heading,
|
|
@@ -47,53 +46,77 @@ const generators = {
|
|
|
47
46
|
[prismicT.RichTextNodeType.embed]: embed,
|
|
48
47
|
};
|
|
49
48
|
|
|
50
|
-
export
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
export type MockRichTextValueConfig<
|
|
50
|
+
Model extends prismicT.CustomTypeModelRichTextField = prismicT.CustomTypeModelRichTextField,
|
|
51
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
52
|
+
> = {
|
|
53
|
+
pattern?: keyof typeof patterns;
|
|
54
|
+
} & BaseMockRichTextValueConfig<Model> &
|
|
55
|
+
MockValueStateConfig<State>;
|
|
56
|
+
|
|
57
|
+
export type MockRichTextValue<
|
|
58
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
59
|
+
> = prismicT.RichTextField<State>;
|
|
54
60
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
const types = (
|
|
63
|
-
"multi" in model.config ? model.config.multi : model.config.single
|
|
64
|
-
)
|
|
65
|
-
.split(",")
|
|
66
|
-
.filter((type) =>
|
|
67
|
-
Object.keys(generators).includes(type),
|
|
68
|
-
) as prismicT.RTNode["type"][];
|
|
61
|
+
export const richText = <
|
|
62
|
+
Model extends prismicT.CustomTypeModelRichTextField = prismicT.CustomTypeModelRichTextField,
|
|
63
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
64
|
+
>(
|
|
65
|
+
config: MockRichTextValueConfig<Model, State>,
|
|
66
|
+
): MockRichTextValue<State> => {
|
|
67
|
+
const faker = config.faker || createFaker(config.seed);
|
|
69
68
|
|
|
70
|
-
if (
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
69
|
+
if (config.state === "empty") {
|
|
70
|
+
return [] as MockRichTextValue<State>;
|
|
71
|
+
} else {
|
|
72
|
+
const model =
|
|
73
|
+
config.model ||
|
|
74
|
+
modelGen.richText({
|
|
75
|
+
faker,
|
|
76
|
+
withMultipleBlocks: true,
|
|
77
|
+
});
|
|
78
|
+
const supportsMultipleBlocks = model.config && "multi" in model.config;
|
|
77
79
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
let types: prismicT.RTNode["type"][] = [];
|
|
81
|
+
if (model.config) {
|
|
82
|
+
if ("multi" in model.config && model.config.multi) {
|
|
83
|
+
types = model.config.multi
|
|
84
|
+
.split(",")
|
|
85
|
+
.filter((type): type is prismicT.RTNode["type"] =>
|
|
86
|
+
Object.keys(generators).includes(type),
|
|
87
|
+
);
|
|
88
|
+
} else if ("single" in model.config && model.config.single) {
|
|
89
|
+
types = model.config.single
|
|
90
|
+
.split(",")
|
|
91
|
+
.filter((type): type is prismicT.RTNode["type"] =>
|
|
92
|
+
Object.keys(generators).includes(type),
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
84
96
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
97
|
+
if (types.length > 0) {
|
|
98
|
+
const patternKey =
|
|
99
|
+
config.pattern ||
|
|
100
|
+
faker.randomElement(Object.keys(patterns) as (keyof typeof patterns)[]);
|
|
101
|
+
const pattern = patterns[patternKey];
|
|
90
102
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
103
|
+
const blockCount = supportsMultipleBlocks
|
|
104
|
+
? faker.range(pattern.blockCountMin, pattern.blockCountMax)
|
|
105
|
+
: 1;
|
|
106
|
+
|
|
107
|
+
return Array(blockCount)
|
|
108
|
+
.fill(undefined)
|
|
109
|
+
.map(() => {
|
|
110
|
+
const type = faker.randomElement(types);
|
|
111
|
+
const generator = generators[type];
|
|
112
|
+
|
|
113
|
+
return generator({ faker, model });
|
|
114
|
+
})
|
|
115
|
+
.flat()
|
|
116
|
+
.filter((block): block is prismicT.RTNode => block !== undefined)
|
|
117
|
+
.slice(0, blockCount) as MockRichTextValue<State>;
|
|
118
|
+
} else {
|
|
119
|
+
return [] as MockRichTextValue<State>;
|
|
120
|
+
}
|
|
98
121
|
}
|
|
99
122
|
};
|
|
@@ -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
|
|
|
@@ -24,28 +25,23 @@ type MockRichTextListValueConfig = {
|
|
|
24
25
|
} & MockRichTextValueConfig;
|
|
25
26
|
|
|
26
27
|
export const list = (
|
|
27
|
-
config: MockRichTextListValueConfig
|
|
28
|
+
config: MockRichTextListValueConfig,
|
|
28
29
|
): prismicT.RTListItemNode[] | undefined => {
|
|
29
|
-
const faker = createFaker(config.seed);
|
|
30
|
+
const faker = config.faker || createFaker(config.seed);
|
|
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
|
|
|
@@ -24,28 +25,23 @@ type MockRichTextOListValueConfig = {
|
|
|
24
25
|
} & MockRichTextValueConfig;
|
|
25
26
|
|
|
26
27
|
export const oList = (
|
|
27
|
-
config: MockRichTextOListValueConfig
|
|
28
|
+
config: MockRichTextOListValueConfig,
|
|
28
29
|
): prismicT.RTOListItemNode[] | undefined => {
|
|
29
|
-
const faker = createFaker(config.seed);
|
|
30
|
+
const faker = config.faker || createFaker(config.seed);
|
|
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
|
|
|
@@ -21,20 +22,23 @@ type MockRichTextParagraphValueConfig = {
|
|
|
21
22
|
} & MockRichTextValueConfig;
|
|
22
23
|
|
|
23
24
|
export const paragraph = (
|
|
24
|
-
config: MockRichTextParagraphValueConfig
|
|
25
|
+
config: MockRichTextParagraphValueConfig,
|
|
25
26
|
): prismicT.RTParagraphNode | undefined => {
|
|
26
|
-
const faker = createFaker(config.seed);
|
|
27
|
+
const faker = config.faker || createFaker(config.seed);
|
|
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
|
|
|
@@ -21,21 +22,24 @@ type MockRichTextPreformattedValueConfig = {
|
|
|
21
22
|
} & MockRichTextValueConfig;
|
|
22
23
|
|
|
23
24
|
export const preformatted = (
|
|
24
|
-
config: MockRichTextPreformattedValueConfig
|
|
25
|
+
config: MockRichTextPreformattedValueConfig,
|
|
25
26
|
): prismicT.RTPreformattedNode | undefined => {
|
|
26
|
-
const faker = createFaker(config.seed);
|
|
27
|
+
const faker = config.faker || createFaker(config.seed);
|
|
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
|
@@ -14,26 +14,30 @@ export type MockSelectValueConfig<
|
|
|
14
14
|
export type MockSelectValue<
|
|
15
15
|
Model extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,
|
|
16
16
|
State extends prismicT.FieldState = prismicT.FieldState,
|
|
17
|
-
> = prismicT.SelectField<
|
|
17
|
+
> = prismicT.SelectField<
|
|
18
|
+
NonNullable<NonNullable<Model["config"]>["options"]>[number],
|
|
19
|
+
State
|
|
20
|
+
>;
|
|
18
21
|
|
|
19
22
|
export const select = <
|
|
20
23
|
Model extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,
|
|
21
24
|
State extends prismicT.FieldState = "filled",
|
|
22
25
|
>(
|
|
23
|
-
config: MockSelectValueConfig<Model, State
|
|
26
|
+
config: MockSelectValueConfig<Model, State>,
|
|
24
27
|
): MockSelectValue<Model, State> => {
|
|
25
|
-
const faker = createFaker(config.seed);
|
|
28
|
+
const faker = config.faker || createFaker(config.seed);
|
|
26
29
|
|
|
27
|
-
const model = config.model || modelGen.select({
|
|
28
|
-
const defaultValue = model.config
|
|
30
|
+
const model = config.model || modelGen.select({ faker });
|
|
31
|
+
const defaultValue = model.config?.default_value;
|
|
32
|
+
const options = model.config?.options || [];
|
|
29
33
|
|
|
30
34
|
if (config.state === "empty") {
|
|
31
35
|
return null as MockSelectValue<Model, State>;
|
|
32
36
|
} else {
|
|
33
37
|
return (
|
|
34
|
-
typeof defaultValue === "string" && faker.
|
|
38
|
+
typeof defaultValue === "string" && faker.boolean()
|
|
35
39
|
? defaultValue
|
|
36
|
-
: faker.
|
|
40
|
+
: faker.randomElement(options)
|
|
37
41
|
) as MockSelectValue<Model, State>;
|
|
38
42
|
}
|
|
39
43
|
};
|
package/src/value/sharedSlice.ts
CHANGED
|
@@ -21,15 +21,15 @@ export type MockSharedSliceValueConfig<
|
|
|
21
21
|
export const sharedSlice = <
|
|
22
22
|
Model extends prismicT.SharedSliceModel = prismicT.SharedSliceModel,
|
|
23
23
|
>(
|
|
24
|
-
config: MockSharedSliceValueConfig<Model
|
|
24
|
+
config: MockSharedSliceValueConfig<Model>,
|
|
25
25
|
): ModelValue<Model> => {
|
|
26
|
-
const faker = createFaker(config.seed);
|
|
26
|
+
const faker = config.faker || createFaker(config.seed);
|
|
27
27
|
|
|
28
|
-
const model = config.model || modelGen.sharedSlice({
|
|
29
|
-
const variationModel = faker.
|
|
28
|
+
const model = config.model || modelGen.sharedSlice({ faker });
|
|
29
|
+
const variationModel = faker.randomElement(model.variations);
|
|
30
30
|
|
|
31
31
|
return sharedSliceVariation({
|
|
32
|
-
|
|
32
|
+
faker,
|
|
33
33
|
model: variationModel,
|
|
34
34
|
itemsCount: config.itemsCount,
|
|
35
35
|
type: model.id,
|
|
@@ -24,40 +24,35 @@ export type MockSharedSliceVariationValueConfig<
|
|
|
24
24
|
export const sharedSliceVariation = <
|
|
25
25
|
Model extends prismicT.SharedSliceModelVariation = prismicT.SharedSliceModelVariation,
|
|
26
26
|
>(
|
|
27
|
-
config: MockSharedSliceVariationValueConfig<Model
|
|
27
|
+
config: MockSharedSliceVariationValueConfig<Model>,
|
|
28
28
|
): ModelValue<Model> => {
|
|
29
|
-
const faker = createFaker(config.seed);
|
|
29
|
+
const faker = config.faker || createFaker(config.seed);
|
|
30
30
|
|
|
31
|
-
const model =
|
|
32
|
-
config.model || modelGen.sharedSliceVariation({ seed: config.seed });
|
|
31
|
+
const model = config.model || modelGen.sharedSliceVariation({ faker });
|
|
33
32
|
|
|
34
|
-
const sliceType = config.type ?? generateFieldId({
|
|
33
|
+
const sliceType = config.type ?? generateFieldId({ faker });
|
|
35
34
|
|
|
36
35
|
const itemsCount =
|
|
37
|
-
Object.keys(model.items).length > 0
|
|
38
|
-
? config.itemsCount ??
|
|
39
|
-
faker.datatype.number({
|
|
40
|
-
min: 1,
|
|
41
|
-
max: 6,
|
|
42
|
-
})
|
|
36
|
+
model.items && Object.keys(model.items).length > 0
|
|
37
|
+
? config.itemsCount ?? faker.range(1, 6)
|
|
43
38
|
: 0;
|
|
44
39
|
|
|
45
40
|
return {
|
|
46
41
|
slice_type: sliceType,
|
|
47
42
|
slice_label: null,
|
|
48
43
|
variation: model.id,
|
|
49
|
-
version: faker.
|
|
44
|
+
version: faker.hash(7),
|
|
50
45
|
primary: valueForModelMap({
|
|
51
|
-
|
|
52
|
-
map: model.primary,
|
|
46
|
+
faker,
|
|
47
|
+
map: model.primary || {},
|
|
53
48
|
configs: config.primaryFieldConfigs,
|
|
54
49
|
}),
|
|
55
50
|
items: Array(itemsCount)
|
|
56
51
|
.fill(undefined)
|
|
57
52
|
.map(() => {
|
|
58
53
|
return valueForModelMap({
|
|
59
|
-
|
|
60
|
-
map: model.items,
|
|
54
|
+
faker,
|
|
55
|
+
map: model.items || {},
|
|
61
56
|
configs: config.itemsFieldConfigs,
|
|
62
57
|
});
|
|
63
58
|
}),
|
package/src/value/slice.ts
CHANGED
|
@@ -25,41 +25,37 @@ export type MockSliceValueConfig<
|
|
|
25
25
|
export const slice = <
|
|
26
26
|
Model extends prismicT.CustomTypeModelSlice = prismicT.CustomTypeModelSlice,
|
|
27
27
|
>(
|
|
28
|
-
config: MockSliceValueConfig<Model
|
|
28
|
+
config: MockSliceValueConfig<Model>,
|
|
29
29
|
): ModelValue<Model> => {
|
|
30
|
-
const faker = createFaker(config.seed);
|
|
30
|
+
const faker = config.faker || createFaker(config.seed);
|
|
31
31
|
|
|
32
|
-
const model = config.model || modelGen.slice({
|
|
32
|
+
const model = config.model || modelGen.slice({ faker });
|
|
33
33
|
|
|
34
|
-
const sliceType = config.type ?? generateFieldId({
|
|
34
|
+
const sliceType = config.type ?? generateFieldId({ faker });
|
|
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
|
-
Object.keys(model.repeat).length > 0
|
|
42
|
-
? config.itemsCount ??
|
|
43
|
-
faker.datatype.number({
|
|
44
|
-
min: 1,
|
|
45
|
-
max: 6,
|
|
46
|
-
})
|
|
41
|
+
model.repeat && Object.keys(model.repeat).length > 0
|
|
42
|
+
? config.itemsCount ?? faker.range(1, 6)
|
|
47
43
|
: 0;
|
|
48
44
|
|
|
49
45
|
return {
|
|
50
46
|
slice_type: sliceType,
|
|
51
47
|
slice_label: sliceLabel,
|
|
52
48
|
primary: valueForModelMap({
|
|
53
|
-
|
|
54
|
-
map: model["non-repeat"],
|
|
49
|
+
faker,
|
|
50
|
+
map: model["non-repeat"] || {},
|
|
55
51
|
configs: config.primaryFieldConfigs,
|
|
56
52
|
}),
|
|
57
53
|
items: Array(itemsCount)
|
|
58
54
|
.fill(undefined)
|
|
59
55
|
.map(() => {
|
|
60
56
|
return valueForModelMap({
|
|
61
|
-
|
|
62
|
-
map: model.repeat,
|
|
57
|
+
faker,
|
|
58
|
+
map: model.repeat || {},
|
|
63
59
|
configs: config.itemsFieldConfigs,
|
|
64
60
|
});
|
|
65
61
|
}),
|