@prismicio/mock 0.0.6 → 0.0.9
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 +242 -122
- package/dist/api/index.cjs.map +1 -0
- package/dist/api/index.d.ts +3 -2
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +669 -0
- package/dist/api/index.js.map +1 -0
- package/dist/index.cjs +581 -571
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +155 -247
- package/dist/{index.mjs → index.js} +574 -561
- package/dist/index.js.map +1 -0
- package/dist/model/index.cjs +294 -257
- package/dist/model/index.cjs.map +1 -0
- package/dist/model/index.d.ts +72 -106
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +556 -0
- package/dist/model/index.js.map +1 -0
- package/dist/value/index.cjs +500 -647
- package/dist/value/index.cjs.map +1 -0
- package/dist/value/index.d.ts +71 -129
- package/dist/value/index.d.ts.map +1 -0
- package/dist/value/index.js +1461 -0
- package/dist/value/index.js.map +1 -0
- package/package.json +30 -27
- package/src/api/query.ts +2 -2
- package/src/api/ref.ts +3 -3
- package/src/api/repository.ts +5 -5
- package/src/lib/buildContentRelationshipField.ts +6 -1
- package/src/lib/buildEmbedField.ts +16 -27
- package/src/lib/buildImageFieldImage.ts +49 -0
- 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 +65 -0
- package/src/model/color.ts +2 -2
- package/src/model/contentRelationship.ts +16 -23
- package/src/model/customType.ts +49 -48
- 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 +9 -16
- package/src/model/image.ts +16 -20
- package/src/model/index.ts +2 -0
- 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 +13 -18
- package/src/model/sharedSlice.ts +15 -42
- package/src/model/sharedSliceVariation.ts +36 -24
- package/src/model/slice.ts +19 -23
- package/src/model/sliceZone.ts +23 -59
- 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 +130 -88
- package/src/value/boolean.ts +1 -1
- package/src/value/color.ts +16 -6
- package/src/value/contentRelationship.ts +54 -39
- package/src/value/customType.ts +5 -5
- package/src/value/date.ts +25 -9
- package/src/value/embed.ts +32 -7
- package/src/value/geoPoint.ts +21 -11
- package/src/value/group.ts +31 -45
- package/src/value/image.ts +22 -9
- package/src/value/integrationFields.ts +26 -14
- package/src/value/keyText.ts +16 -6
- package/src/value/link.ts +36 -37
- package/src/value/linkToMedia.ts +19 -23
- package/src/value/number.ts +16 -6
- package/src/value/richText/embed.ts +2 -2
- package/src/value/richText/heading.ts +10 -17
- package/src/value/richText/image.ts +8 -6
- package/src/value/richText/index.ts +4 -9
- 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 +23 -8
- package/src/value/sharedSlice.ts +3 -3
- package/src/value/sharedSliceVariation.ts +4 -36
- package/src/value/slice.ts +3 -32
- package/src/value/sliceZone.ts +54 -69
- package/src/value/timestamp.ts +42 -16
- package/src/value/title.ts +26 -13
- package/src/value/uid.ts +2 -2
- package/dist/api/index.mjs +0 -515
- package/dist/model/index.mjs +0 -465
- package/dist/value/index.mjs +0 -1554
- package/src/lib/buildImageField.ts +0 -34
- package/src/lib/buildMockGroupFieldMap.ts +0 -84
|
@@ -8,12 +8,12 @@ import { MockRichTextValueConfig } from "../../types";
|
|
|
8
8
|
import * as modelGen from "../../model";
|
|
9
9
|
|
|
10
10
|
type RichTextNodeTitleType =
|
|
11
|
-
| prismicT.RichTextNodeType.heading1
|
|
12
|
-
| prismicT.RichTextNodeType.heading2
|
|
13
|
-
| prismicT.RichTextNodeType.heading3
|
|
14
|
-
| prismicT.RichTextNodeType.heading4
|
|
15
|
-
| prismicT.RichTextNodeType.heading5
|
|
16
|
-
| prismicT.RichTextNodeType.heading6;
|
|
11
|
+
| typeof prismicT.RichTextNodeType.heading1
|
|
12
|
+
| typeof prismicT.RichTextNodeType.heading2
|
|
13
|
+
| typeof prismicT.RichTextNodeType.heading3
|
|
14
|
+
| typeof prismicT.RichTextNodeType.heading4
|
|
15
|
+
| typeof prismicT.RichTextNodeType.heading5
|
|
16
|
+
| typeof prismicT.RichTextNodeType.heading6;
|
|
17
17
|
|
|
18
18
|
type RTHeadingNode =
|
|
19
19
|
| prismicT.RTHeading1Node
|
|
@@ -61,27 +61,20 @@ export const heading = (
|
|
|
61
61
|
prismicT.RichTextNodeType.heading4,
|
|
62
62
|
prismicT.RichTextNodeType.heading5,
|
|
63
63
|
prismicT.RichTextNodeType.heading6,
|
|
64
|
-
].includes(type as
|
|
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
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as prismicT from "@prismicio/types";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { buildImageFieldImage } from "../../lib/buildImageFieldImage";
|
|
4
4
|
import { getMockImageData } from "../../lib/getMockImageData";
|
|
5
5
|
|
|
6
6
|
import { MockRichTextValueConfig } from "../../types";
|
|
@@ -11,15 +11,17 @@ export const image = (
|
|
|
11
11
|
config: MockRichTextImageValueConfig = {},
|
|
12
12
|
): prismicT.RTImageNode | undefined => {
|
|
13
13
|
const imageData = getMockImageData({ seed: config.seed });
|
|
14
|
-
const imageField =
|
|
14
|
+
const imageField = buildImageFieldImage({
|
|
15
|
+
seed: config.seed,
|
|
16
|
+
imageData,
|
|
17
|
+
state: "filled",
|
|
18
|
+
});
|
|
15
19
|
|
|
16
20
|
return {
|
|
17
21
|
type: prismicT.RichTextNodeType.image,
|
|
18
22
|
alt: imageField.alt,
|
|
19
|
-
|
|
20
|
-
url: imageField.url!,
|
|
23
|
+
url: imageField.url,
|
|
21
24
|
copyright: imageField.copyright,
|
|
22
|
-
|
|
23
|
-
dimensions: imageField.dimensions!,
|
|
25
|
+
dimensions: imageField.dimensions,
|
|
24
26
|
};
|
|
25
27
|
};
|
|
@@ -70,29 +70,24 @@ 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 });
|
|
92
87
|
})
|
|
93
88
|
.flat()
|
|
94
89
|
.filter((block): block is prismicT.RTNode => block !== undefined)
|
|
95
|
-
.slice(0, blockCount);
|
|
90
|
+
.slice(0, blockCount) as prismicT.RichTextField;
|
|
96
91
|
} else {
|
|
97
92
|
return [];
|
|
98
93
|
}
|
|
@@ -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
|
@@ -2,23 +2,38 @@ 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
|
import * as modelGen from "../model";
|
|
8
8
|
|
|
9
9
|
export type MockSelectValueConfig<
|
|
10
10
|
Model extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,
|
|
11
|
-
|
|
11
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
12
|
+
> = MockValueConfig<Model> & MockValueStateConfig<State>;
|
|
12
13
|
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
export type MockSelectValue<
|
|
15
|
+
Model extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,
|
|
16
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
17
|
+
> = prismicT.SelectField<Model["config"]["options"][number], State>;
|
|
18
|
+
|
|
19
|
+
export const select = <
|
|
20
|
+
Model extends prismicT.CustomTypeModelSelectField = prismicT.CustomTypeModelSelectField,
|
|
21
|
+
State extends prismicT.FieldState = "filled",
|
|
22
|
+
>(
|
|
23
|
+
config: MockSelectValueConfig<Model, State> = {},
|
|
24
|
+
): MockSelectValue<Model, State> => {
|
|
16
25
|
const faker = createFaker(config.seed);
|
|
17
26
|
|
|
18
27
|
const model = config.model || modelGen.select({ seed: config.seed });
|
|
19
28
|
const defaultValue = model.config.default_value;
|
|
20
29
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
30
|
+
if (config.state === "empty") {
|
|
31
|
+
return null as MockSelectValue<Model, State>;
|
|
32
|
+
} else {
|
|
33
|
+
return (
|
|
34
|
+
typeof defaultValue === "string" && faker.boolean()
|
|
35
|
+
? defaultValue
|
|
36
|
+
: faker.randomElement(model.config.options)
|
|
37
|
+
) as MockSelectValue<Model, State>;
|
|
38
|
+
}
|
|
24
39
|
};
|
package/src/value/sharedSlice.ts
CHANGED
|
@@ -14,7 +14,7 @@ export type MockSharedSliceValueConfig<
|
|
|
14
14
|
Model extends prismicT.SharedSliceModel = prismicT.SharedSliceModel,
|
|
15
15
|
> = Pick<
|
|
16
16
|
MockSharedSliceVariationValueConfig,
|
|
17
|
-
"
|
|
17
|
+
"itemsCount" | "primaryFieldConfigs" | "itemsFieldConfigs"
|
|
18
18
|
> &
|
|
19
19
|
MockValueConfig<Model>;
|
|
20
20
|
|
|
@@ -26,12 +26,12 @@ 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,
|
|
33
33
|
model: variationModel,
|
|
34
|
-
|
|
34
|
+
itemsCount: config.itemsCount,
|
|
35
35
|
type: model.id,
|
|
36
36
|
primaryFieldConfigs: config.primaryFieldConfigs,
|
|
37
37
|
itemsFieldConfigs: config.itemsFieldConfigs,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as prismicT from "@prismicio/types";
|
|
2
|
-
import * as changeCase from "change-case";
|
|
3
2
|
|
|
4
3
|
import { MockValueConfig, ModelValue } from "../types";
|
|
5
4
|
|
|
@@ -12,31 +11,12 @@ import {
|
|
|
12
11
|
|
|
13
12
|
import * as modelGen from "../model";
|
|
14
13
|
|
|
15
|
-
const patterns = {
|
|
16
|
-
none: {
|
|
17
|
-
minItems: 0,
|
|
18
|
-
maxItems: 0,
|
|
19
|
-
},
|
|
20
|
-
short: {
|
|
21
|
-
minItems: 1,
|
|
22
|
-
maxItems: 3,
|
|
23
|
-
},
|
|
24
|
-
medium: {
|
|
25
|
-
minItems: 3,
|
|
26
|
-
maxItems: 6,
|
|
27
|
-
},
|
|
28
|
-
long: {
|
|
29
|
-
minItems: 6,
|
|
30
|
-
maxItems: 12,
|
|
31
|
-
},
|
|
32
|
-
} as const;
|
|
33
|
-
|
|
34
14
|
export type MockSharedSliceVariationValueConfig<
|
|
35
15
|
Model extends prismicT.SharedSliceModelVariation = prismicT.SharedSliceModelVariation,
|
|
36
16
|
> = {
|
|
37
17
|
type?: string;
|
|
38
18
|
label?: string;
|
|
39
|
-
|
|
19
|
+
itemsCount?: number;
|
|
40
20
|
primaryFieldConfigs?: ValueForModelMapConfigs;
|
|
41
21
|
itemsFieldConfigs?: ValueForModelMapConfigs;
|
|
42
22
|
} & MockValueConfig<Model>;
|
|
@@ -51,30 +31,18 @@ export const sharedSliceVariation = <
|
|
|
51
31
|
const model =
|
|
52
32
|
config.model || modelGen.sharedSliceVariation({ seed: config.seed });
|
|
53
33
|
|
|
54
|
-
const patternKey =
|
|
55
|
-
config.pattern ||
|
|
56
|
-
faker.random.arrayElement(
|
|
57
|
-
Object.keys(patterns) as (keyof typeof patterns)[],
|
|
58
|
-
);
|
|
59
|
-
const pattern = patterns[patternKey];
|
|
60
|
-
|
|
61
34
|
const sliceType = config.type ?? generateFieldId({ seed: config.seed });
|
|
62
|
-
const sliceLabel =
|
|
63
|
-
config.label ?? changeCase.capitalCase(faker.company.bsNoun());
|
|
64
35
|
|
|
65
36
|
const itemsCount =
|
|
66
37
|
Object.keys(model.items).length > 0
|
|
67
|
-
? faker.
|
|
68
|
-
min: pattern.minItems,
|
|
69
|
-
max: pattern.maxItems,
|
|
70
|
-
})
|
|
38
|
+
? config.itemsCount ?? faker.range(1, 6)
|
|
71
39
|
: 0;
|
|
72
40
|
|
|
73
41
|
return {
|
|
74
42
|
slice_type: sliceType,
|
|
75
|
-
slice_label:
|
|
43
|
+
slice_label: null,
|
|
76
44
|
variation: model.id,
|
|
77
|
-
version: faker.
|
|
45
|
+
version: faker.hash(7),
|
|
78
46
|
primary: valueForModelMap({
|
|
79
47
|
seed: config.seed,
|
|
80
48
|
map: model.primary,
|
package/src/value/slice.ts
CHANGED
|
@@ -12,31 +12,12 @@ import {
|
|
|
12
12
|
|
|
13
13
|
import * as modelGen from "../model";
|
|
14
14
|
|
|
15
|
-
const patterns = {
|
|
16
|
-
none: {
|
|
17
|
-
minItems: 0,
|
|
18
|
-
maxItems: 0,
|
|
19
|
-
},
|
|
20
|
-
short: {
|
|
21
|
-
minItems: 1,
|
|
22
|
-
maxItems: 3,
|
|
23
|
-
},
|
|
24
|
-
medium: {
|
|
25
|
-
minItems: 3,
|
|
26
|
-
maxItems: 6,
|
|
27
|
-
},
|
|
28
|
-
long: {
|
|
29
|
-
minItems: 6,
|
|
30
|
-
maxItems: 12,
|
|
31
|
-
},
|
|
32
|
-
} as const;
|
|
33
|
-
|
|
34
15
|
export type MockSliceValueConfig<
|
|
35
16
|
Model extends prismicT.CustomTypeModelSlice = prismicT.CustomTypeModelSlice,
|
|
36
17
|
> = {
|
|
37
18
|
type?: string;
|
|
38
19
|
label?: string | null;
|
|
39
|
-
|
|
20
|
+
itemsCount?: number;
|
|
40
21
|
primaryFieldConfigs?: ValueForModelMapConfigs;
|
|
41
22
|
itemsFieldConfigs?: ValueForModelMapConfigs;
|
|
42
23
|
} & MockValueConfig<Model>;
|
|
@@ -50,25 +31,15 @@ export const slice = <
|
|
|
50
31
|
|
|
51
32
|
const model = config.model || modelGen.slice({ seed: config.seed });
|
|
52
33
|
|
|
53
|
-
const patternKey =
|
|
54
|
-
config.pattern ||
|
|
55
|
-
faker.random.arrayElement(
|
|
56
|
-
Object.keys(patterns) as (keyof typeof patterns)[],
|
|
57
|
-
);
|
|
58
|
-
const pattern = patterns[patternKey];
|
|
59
|
-
|
|
60
34
|
const sliceType = config.type ?? generateFieldId({ seed: config.seed });
|
|
61
35
|
const sliceLabel =
|
|
62
36
|
config.label !== undefined
|
|
63
37
|
? config.label
|
|
64
|
-
: changeCase.capitalCase(faker.
|
|
38
|
+
: changeCase.capitalCase(faker.words(faker.range(1, 2)));
|
|
65
39
|
|
|
66
40
|
const itemsCount =
|
|
67
41
|
Object.keys(model.repeat).length > 0
|
|
68
|
-
? faker.
|
|
69
|
-
min: pattern.minItems,
|
|
70
|
-
max: pattern.maxItems,
|
|
71
|
-
})
|
|
42
|
+
? config.itemsCount ?? faker.range(1, 6)
|
|
72
43
|
: 0;
|
|
73
44
|
|
|
74
45
|
return {
|
package/src/value/sliceZone.ts
CHANGED
|
@@ -3,97 +3,82 @@ 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
|
|
|
10
10
|
import { slice } from "./slice";
|
|
11
11
|
import { sharedSlice } from "./sharedSlice";
|
|
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 MockSliceZoneValueConfig<
|
|
29
14
|
Model extends prismicT.CustomTypeModelSliceZoneField = prismicT.CustomTypeModelSliceZoneField,
|
|
15
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
30
16
|
> = {
|
|
31
17
|
sharedSliceModels?: prismicT.SharedSliceModel[];
|
|
32
|
-
|
|
18
|
+
itemsCount?: State extends "empty" ? 0 : number;
|
|
33
19
|
primaryFieldConfigs?: ValueForModelMapConfigs;
|
|
34
20
|
itemsFieldConfigs?: ValueForModelMapConfigs;
|
|
35
|
-
} & MockValueConfig<Model
|
|
21
|
+
} & MockValueConfig<Model> &
|
|
22
|
+
MockValueStateConfig<State>;
|
|
36
23
|
|
|
37
24
|
export const sliceZone = <
|
|
38
25
|
Model extends prismicT.CustomTypeModelSliceZoneField = prismicT.CustomTypeModelSliceZoneField,
|
|
26
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
39
27
|
>(
|
|
40
|
-
config: MockSliceZoneValueConfig<Model> = {},
|
|
41
|
-
): ModelValue<Model> => {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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);
|
|
45
34
|
|
|
46
|
-
|
|
47
|
-
config.pattern ||
|
|
48
|
-
faker.random.arrayElement(
|
|
49
|
-
Object.keys(patterns) as (keyof typeof patterns)[],
|
|
50
|
-
);
|
|
51
|
-
const pattern = patterns[patternKey];
|
|
35
|
+
const model = config.model || modelGen.sliceZone({ seed: config.seed });
|
|
52
36
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
max: pattern.maxItems,
|
|
56
|
-
});
|
|
37
|
+
if (Object.keys(model.config.choices).length > 0) {
|
|
38
|
+
const itemsCount = config.itemsCount ?? faker.range(1, 6);
|
|
57
39
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
40
|
+
return Array(itemsCount)
|
|
41
|
+
.fill(undefined)
|
|
42
|
+
.map(() => {
|
|
43
|
+
const choices = Object.entries(model.config.choices);
|
|
44
|
+
const [choiceType, choiceModel] = faker.randomElement(choices);
|
|
63
45
|
|
|
64
|
-
|
|
65
|
-
|
|
46
|
+
const choiceLabels = model.config.labels[choiceType] || [];
|
|
47
|
+
const choiceLabel = faker.randomElement(choiceLabels);
|
|
66
48
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
49
|
+
switch (choiceModel.type) {
|
|
50
|
+
case prismicT.CustomTypeModelSliceType.Slice: {
|
|
51
|
+
return slice({
|
|
52
|
+
seed: config.seed,
|
|
53
|
+
model: choiceModel,
|
|
54
|
+
type: choiceType,
|
|
55
|
+
label: choiceLabel ? choiceLabel.name : null,
|
|
56
|
+
primaryFieldConfigs: config.primaryFieldConfigs,
|
|
57
|
+
itemsFieldConfigs: config.itemsFieldConfigs,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
78
60
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
61
|
+
case prismicT.CustomTypeModelSliceType.SharedSlice: {
|
|
62
|
+
const sharedSliceModel = config.sharedSliceModels?.find(
|
|
63
|
+
(sharedSliceModel) => sharedSliceModel.id === choiceType,
|
|
64
|
+
);
|
|
83
65
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
66
|
+
if (sharedSliceModel) {
|
|
67
|
+
return sharedSlice({
|
|
68
|
+
seed: config.seed,
|
|
69
|
+
model: sharedSliceModel,
|
|
70
|
+
primaryFieldConfigs: config.primaryFieldConfigs,
|
|
71
|
+
itemsFieldConfigs: config.itemsFieldConfigs,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
91
75
|
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
+
}
|
|
83
|
+
}
|
|
99
84
|
};
|
package/src/value/timestamp.ts
CHANGED
|
@@ -2,29 +2,55 @@ 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 MockTimestampValueConfig<
|
|
8
8
|
Model extends prismicT.CustomTypeModelTimestampField = prismicT.CustomTypeModelTimestampField,
|
|
9
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
9
10
|
> = {
|
|
10
11
|
after?: Date;
|
|
11
12
|
before?: Date;
|
|
12
|
-
} & MockValueConfig<Model
|
|
13
|
+
} & MockValueConfig<Model> &
|
|
14
|
+
MockValueStateConfig<State>;
|
|
13
15
|
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
export type MockTimestampValue<
|
|
17
|
+
State extends prismicT.FieldState = prismicT.FieldState,
|
|
18
|
+
> = prismicT.TimestampField<State>;
|
|
19
|
+
|
|
20
|
+
export const timestamp = <
|
|
21
|
+
Model extends prismicT.CustomTypeModelTimestampField = prismicT.CustomTypeModelTimestampField,
|
|
22
|
+
State extends prismicT.FieldState = "filled",
|
|
23
|
+
>(
|
|
24
|
+
config: MockTimestampValueConfig<Model, State> = {},
|
|
25
|
+
): MockTimestampValue<State> => {
|
|
17
26
|
const faker = createFaker(config.seed);
|
|
18
27
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
if (config.state === "empty") {
|
|
29
|
+
return null as MockTimestampValue<State>;
|
|
30
|
+
} else {
|
|
31
|
+
let date: Date;
|
|
32
|
+
|
|
33
|
+
// Working with Date objects produces non-deterministic values;
|
|
34
|
+
// machines can return different values due to differing
|
|
35
|
+
// timezones and other unknown factors. To get around this, we
|
|
36
|
+
// can can remove time from the given values and only use their dates.
|
|
37
|
+
const after = config.after
|
|
38
|
+
? new Date(config.after.toISOString().split("T")[0])
|
|
39
|
+
: undefined;
|
|
40
|
+
const before = config.before
|
|
41
|
+
? new Date(config.before.toISOString().split("T")[0])
|
|
42
|
+
: undefined;
|
|
43
|
+
|
|
44
|
+
if (after && before) {
|
|
45
|
+
date = faker.dateBetween(after, before);
|
|
46
|
+
} else if (after) {
|
|
47
|
+
date = faker.dateAfter(after);
|
|
48
|
+
} else if (before) {
|
|
49
|
+
date = faker.dateBefore(before);
|
|
50
|
+
} else {
|
|
51
|
+
date = faker.date();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return date.toISOString() as MockTimestampValue<State>;
|
|
55
|
+
}
|
|
30
56
|
};
|