@prismicio/mock 0.0.4 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +4 -1
  2. package/dist/api/index.cjs +54 -35
  3. package/dist/api/index.cjs.map +1 -0
  4. package/dist/api/index.d.ts +4 -2
  5. package/dist/api/index.d.ts.map +1 -0
  6. package/dist/api/{index.mjs → index.js} +116 -63
  7. package/dist/api/index.js.map +1 -0
  8. package/dist/index.cjs +365 -417
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.ts +157 -243
  11. package/dist/{index.mjs → index.js} +359 -409
  12. package/dist/index.js.map +1 -0
  13. package/dist/model/index.cjs +164 -204
  14. package/dist/model/index.cjs.map +1 -0
  15. package/dist/model/index.d.ts +73 -97
  16. package/dist/model/index.d.ts.map +1 -0
  17. package/dist/model/index.js +462 -0
  18. package/dist/model/index.js.map +1 -0
  19. package/dist/value/index.cjs +310 -519
  20. package/dist/value/index.cjs.map +1 -0
  21. package/dist/value/index.d.ts +71 -132
  22. package/dist/value/index.d.ts.map +1 -0
  23. package/dist/value/{index.mjs → index.js} +474 -629
  24. package/dist/value/index.js.map +1 -0
  25. package/package.json +21 -21
  26. package/src/constants.ts +3 -1
  27. package/src/lib/buildAlternativeLanguage.ts +18 -0
  28. package/src/lib/buildContentRelationshipField.ts +12 -5
  29. package/src/lib/buildEmbedField.ts +1 -1
  30. package/src/lib/buildImageFieldImage.ts +48 -0
  31. package/src/lib/createFaker.ts +19 -10
  32. package/src/lib/valueForModelMap.ts +2 -2
  33. package/src/model/buildMockGroupFieldMap.ts +65 -0
  34. package/src/model/contentRelationship.ts +14 -21
  35. package/src/model/customType.ts +49 -48
  36. package/src/model/group.ts +8 -15
  37. package/src/model/image.ts +13 -13
  38. package/src/model/index.ts +2 -0
  39. package/src/model/integrationFields.ts +4 -2
  40. package/src/model/select.ts +11 -16
  41. package/src/model/sharedSlice.ts +23 -30
  42. package/src/model/sharedSliceVariation.ts +33 -21
  43. package/src/model/slice.ts +15 -19
  44. package/src/model/sliceZone.ts +25 -42
  45. package/src/types.ts +130 -83
  46. package/src/value/color.ts +16 -6
  47. package/src/value/contentRelationship.ts +52 -36
  48. package/src/value/customType.ts +22 -3
  49. package/src/value/date.ts +25 -9
  50. package/src/value/embed.ts +18 -6
  51. package/src/value/geoPoint.ts +21 -9
  52. package/src/value/group.ts +35 -44
  53. package/src/value/image.ts +22 -9
  54. package/src/value/integrationFields.ts +26 -14
  55. package/src/value/keyText.ts +18 -6
  56. package/src/value/link.ts +33 -34
  57. package/src/value/linkToMedia.ts +15 -20
  58. package/src/value/number.ts +16 -6
  59. package/src/value/richText/heading.ts +7 -7
  60. package/src/value/richText/image.ts +6 -2
  61. package/src/value/richText/index.ts +1 -1
  62. package/src/value/select.ts +23 -8
  63. package/src/value/sharedSlice.ts +2 -2
  64. package/src/value/sharedSliceVariation.ts +6 -34
  65. package/src/value/slice.ts +5 -30
  66. package/src/value/sliceZone.ts +60 -69
  67. package/src/value/timestamp.ts +19 -6
  68. package/src/value/title.ts +26 -13
  69. package/src/value/uid.ts +1 -1
  70. package/dist/model/index.mjs +0 -448
  71. package/src/lib/buildImageField.ts +0 -34
  72. package/src/lib/buildMockGroupFieldMap.ts +0 -84
@@ -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
- pattern?: keyof typeof patterns;
20
+ itemsCount?: number;
40
21
  primaryFieldConfigs?: ValueForModelMapConfigs;
41
22
  itemsFieldConfigs?: ValueForModelMapConfigs;
42
23
  } & MockValueConfig<Model>;
@@ -50,13 +31,6 @@ 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
@@ -65,9 +39,10 @@ export const slice = <
65
39
 
66
40
  const itemsCount =
67
41
  Object.keys(model.repeat).length > 0
68
- ? faker.datatype.number({
69
- min: pattern.minItems,
70
- max: pattern.maxItems,
42
+ ? config.itemsCount ??
43
+ faker.datatype.number({
44
+ min: 1,
45
+ max: 6,
71
46
  })
72
47
  : 0;
73
48
 
@@ -3,97 +3,88 @@ 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
- pattern?: keyof typeof patterns;
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
- const faker = createFaker(config.seed);
43
-
44
- const model = config.model || modelGen.sliceZone({ seed: config.seed });
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
- const patternKey =
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
- const itemsCount = faker.datatype.number({
54
- min: pattern.minItems,
55
- max: pattern.maxItems,
56
- });
37
+ if (Object.keys(model.config.choices).length > 0) {
38
+ const itemsCount =
39
+ config.itemsCount ??
40
+ faker.datatype.number({
41
+ min: 1,
42
+ max: 6,
43
+ });
57
44
 
58
- return Array(itemsCount)
59
- .fill(undefined)
60
- .map(() => {
61
- const choices = Object.entries(model.config.choices);
62
- const [choiceType, choiceModel] = faker.random.arrayElement(choices);
45
+ return Array(itemsCount)
46
+ .fill(undefined)
47
+ .map(() => {
48
+ const choices = Object.entries(model.config.choices);
49
+ const [choiceType, choiceModel] = faker.random.arrayElement(choices);
63
50
 
64
- const choiceLabels = model.config.labels[choiceType] || [];
65
- const choiceLabel = faker.random.arrayElement(choiceLabels);
51
+ const choiceLabels = model.config.labels[choiceType] || [];
52
+ const choiceLabel = faker.random.arrayElement(choiceLabels);
66
53
 
67
- switch (choiceModel.type) {
68
- case prismicT.CustomTypeModelSliceType.Slice: {
69
- return slice({
70
- seed: config.seed,
71
- model: choiceModel,
72
- type: choiceType,
73
- label: choiceLabel ? choiceLabel.name : null,
74
- primaryFieldConfigs: config.primaryFieldConfigs,
75
- itemsFieldConfigs: config.itemsFieldConfigs,
76
- });
77
- }
54
+ switch (choiceModel.type) {
55
+ case prismicT.CustomTypeModelSliceType.Slice: {
56
+ return slice({
57
+ seed: config.seed,
58
+ model: choiceModel,
59
+ type: choiceType,
60
+ label: choiceLabel ? choiceLabel.name : null,
61
+ primaryFieldConfigs: config.primaryFieldConfigs,
62
+ itemsFieldConfigs: config.itemsFieldConfigs,
63
+ });
64
+ }
78
65
 
79
- case prismicT.CustomTypeModelSliceType.SharedSlice: {
80
- const sharedSliceModel = config.sharedSliceModels?.find(
81
- (sharedSliceModel) => sharedSliceModel.id === choiceType,
82
- );
66
+ case prismicT.CustomTypeModelSliceType.SharedSlice: {
67
+ const sharedSliceModel = config.sharedSliceModels?.find(
68
+ (sharedSliceModel) => sharedSliceModel.id === choiceType,
69
+ );
83
70
 
84
- if (sharedSliceModel) {
85
- return sharedSlice({
86
- seed: config.seed,
87
- model: sharedSliceModel,
88
- primaryFieldConfigs: config.primaryFieldConfigs,
89
- itemsFieldConfigs: config.itemsFieldConfigs,
90
- });
71
+ if (sharedSliceModel) {
72
+ return sharedSlice({
73
+ seed: config.seed,
74
+ model: sharedSliceModel,
75
+ primaryFieldConfigs: config.primaryFieldConfigs,
76
+ itemsFieldConfigs: config.itemsFieldConfigs,
77
+ });
78
+ }
79
+ }
91
80
  }
92
- }
93
- }
94
- })
95
- .filter(
96
- (slice): slice is prismicT.Slice | prismicT.SharedSlice =>
97
- slice !== undefined,
98
- ) as ModelValue<Model>;
81
+ })
82
+ .filter(
83
+ (slice): slice is prismicT.Slice | prismicT.SharedSlice =>
84
+ slice !== undefined,
85
+ ) as ModelValue<Model, State>;
86
+ } else {
87
+ return [] as unknown as ModelValue<Model, State>;
88
+ }
89
+ }
99
90
  };
@@ -2,18 +2,27 @@ 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 const timestamp = (
15
- config: MockTimestampValueConfig = {},
16
- ): prismicT.TimestampField => {
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
28
  // Faker seems to have problems accepting parameters for `faker.date.between`
@@ -26,5 +35,9 @@ export const timestamp = (
26
35
  config.before ||
27
36
  faker.date.future(20, new Date("2021-03-07")).toISOString().split("T")[0];
28
37
 
29
- return faker.date.between(after, before).toISOString();
38
+ return (
39
+ config.state === "empty"
40
+ ? null
41
+ : faker.date.between(after, before).toISOString()
42
+ ) as MockTimestampValue<State>;
30
43
  };
@@ -1,24 +1,37 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
- import { MockValueConfig } from "../types";
3
+ import { MockValueConfig, MockValueStateConfig } from "../types";
4
4
 
5
5
  import { heading, MockRichTextHeadingValueConfig } from "./richText/heading";
6
6
 
7
7
  export type MockTitleValueConfig<
8
8
  Model extends prismicT.CustomTypeModelTitleField = prismicT.CustomTypeModelTitleField,
9
+ State extends prismicT.FieldState = prismicT.FieldState,
9
10
  > = {
10
11
  pattern?: MockRichTextHeadingValueConfig["pattern"];
11
- } & MockValueConfig<Model>;
12
+ } & MockValueConfig<Model> &
13
+ MockValueStateConfig<State>;
12
14
 
13
- export const title = (
14
- config: MockTitleValueConfig = {},
15
- ): prismicT.TitleField => {
16
- return [
17
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
18
- heading({
19
- seed: config.seed,
20
- model: config.model,
21
- pattern: config.pattern,
22
- })!,
23
- ];
15
+ export type MockTitleValue<
16
+ State extends prismicT.FieldState = prismicT.FieldState,
17
+ > = prismicT.TitleField<State>;
18
+
19
+ export const title = <
20
+ Model extends prismicT.CustomTypeModelTitleField = prismicT.CustomTypeModelTitleField,
21
+ State extends prismicT.FieldState = prismicT.FieldState,
22
+ >(
23
+ config: MockTitleValueConfig<Model, State> = {},
24
+ ): MockTitleValue<State> => {
25
+ if (config.state === "empty") {
26
+ return [] as MockTitleValue<State>;
27
+ } else {
28
+ return [
29
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
30
+ heading({
31
+ seed: config.seed,
32
+ model: config.model,
33
+ pattern: config.pattern,
34
+ })!,
35
+ ] as MockTitleValue<State>;
36
+ }
24
37
  };
package/src/value/uid.ts CHANGED
@@ -11,7 +11,7 @@ export type MockUIDValueConfig<
11
11
 
12
12
  export const uid = (
13
13
  config: MockUIDValueConfig = {},
14
- ): prismicT.PrismicDocument["uid"] => {
14
+ ): NonNullable<prismicT.PrismicDocument["uid"]> => {
15
15
  const faker = createFaker(config.seed);
16
16
 
17
17
  return changeCase.snakeCase(faker.lorem.words(2));