@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.
Files changed (97) hide show
  1. package/dist/api/index.cjs +348 -236
  2. package/dist/api/index.cjs.map +1 -1
  3. package/dist/api/index.d.ts +52 -6
  4. package/dist/api/index.js +348 -236
  5. package/dist/api/index.js.map +1 -1
  6. package/dist/index.cjs +893 -543
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +247 -73
  9. package/dist/index.js +885 -542
  10. package/dist/index.js.map +1 -1
  11. package/dist/model/index.cjs +398 -134
  12. package/dist/model/index.cjs.map +1 -1
  13. package/dist/model/index.d.ts +114 -28
  14. package/dist/model/index.js +398 -134
  15. package/dist/model/index.js.map +1 -1
  16. package/dist/value/index.cjs +598 -468
  17. package/dist/value/index.cjs.map +1 -1
  18. package/dist/value/index.d.ts +96 -40
  19. package/dist/value/index.js +598 -468
  20. package/dist/value/index.js.map +1 -1
  21. package/package.json +22 -20
  22. package/src/api/createAPIMockFactory.ts +56 -0
  23. package/src/api/query.ts +4 -4
  24. package/src/api/ref.ts +6 -6
  25. package/src/api/repository.ts +12 -14
  26. package/src/api/tags.ts +5 -2
  27. package/src/createMockFactory.ts +52 -0
  28. package/src/index.ts +15 -0
  29. package/src/lib/buildEmbedField.ts +28 -30
  30. package/src/lib/buildImageFieldImage.ts +19 -7
  31. package/src/lib/createFaker.ts +99 -22
  32. package/src/lib/generateCustomTypeId.ts +13 -5
  33. package/src/lib/generateFieldId.ts +13 -7
  34. package/src/lib/generateTags.ts +17 -16
  35. package/src/lib/getMockEmbedData.ts +45 -16
  36. package/src/lib/getMockImageData.ts +13 -5
  37. package/src/lib/lorem.ts +112 -0
  38. package/src/lib/valueForModel.ts +47 -30
  39. package/src/lib/valueForModelMap.ts +24 -4
  40. package/src/model/boolean.ts +6 -6
  41. package/src/model/buildMockGroupFieldMap.ts +5 -5
  42. package/src/model/color.ts +4 -4
  43. package/src/model/contentRelationship.ts +4 -4
  44. package/src/model/createModelMockFactory.ts +213 -0
  45. package/src/model/customType.ts +6 -6
  46. package/src/model/date.ts +4 -4
  47. package/src/model/embed.ts +4 -4
  48. package/src/model/geoPoint.ts +3 -3
  49. package/src/model/group.ts +7 -7
  50. package/src/model/image.ts +8 -12
  51. package/src/model/index.ts +2 -0
  52. package/src/model/integrationFields.ts +4 -4
  53. package/src/model/keyText.ts +4 -4
  54. package/src/model/link.ts +6 -6
  55. package/src/model/linkToMedia.ts +5 -5
  56. package/src/model/number.ts +4 -4
  57. package/src/model/richText.ts +8 -8
  58. package/src/model/select.ts +5 -5
  59. package/src/model/sharedSlice.ts +5 -5
  60. package/src/model/sharedSliceVariation.ts +10 -10
  61. package/src/model/slice.ts +7 -7
  62. package/src/model/sliceZone.ts +7 -4
  63. package/src/model/timestamp.ts +4 -4
  64. package/src/model/title.ts +7 -7
  65. package/src/model/uid.ts +4 -4
  66. package/src/types.ts +70 -31
  67. package/src/value/boolean.ts +4 -6
  68. package/src/value/color.ts +3 -3
  69. package/src/value/contentRelationship.ts +21 -18
  70. package/src/value/createValueMockFactory.ts +236 -0
  71. package/src/value/customType.ts +12 -12
  72. package/src/value/date.ts +6 -2
  73. package/src/value/embed.ts +23 -7
  74. package/src/value/geoPoint.ts +4 -6
  75. package/src/value/group.ts +6 -11
  76. package/src/value/image.ts +26 -18
  77. package/src/value/integrationFields.ts +12 -26
  78. package/src/value/keyText.ts +3 -5
  79. package/src/value/link.ts +11 -9
  80. package/src/value/linkToMedia.ts +9 -8
  81. package/src/value/number.ts +3 -3
  82. package/src/value/richText/embed.ts +6 -3
  83. package/src/value/richText/heading.ts +32 -27
  84. package/src/value/richText/image.ts +9 -8
  85. package/src/value/richText/index.ts +71 -48
  86. package/src/value/richText/list.ts +6 -10
  87. package/src/value/richText/oList.ts +6 -10
  88. package/src/value/richText/paragraph.ts +10 -6
  89. package/src/value/richText/preformatted.ts +11 -7
  90. package/src/value/select.ts +11 -7
  91. package/src/value/sharedSlice.ts +5 -5
  92. package/src/value/sharedSliceVariation.ts +11 -16
  93. package/src/value/slice.ts +11 -15
  94. package/src/value/sliceZone.ts +14 -18
  95. package/src/value/timestamp.ts +31 -18
  96. package/src/value/title.ts +7 -3
  97. package/src/value/uid.ts +6 -4
@@ -25,36 +25,33 @@ export const sliceZone = <
25
25
  Model extends prismicT.CustomTypeModelSliceZoneField = prismicT.CustomTypeModelSliceZoneField,
26
26
  State extends prismicT.FieldState = prismicT.FieldState,
27
27
  >(
28
- config: MockSliceZoneValueConfig<Model, State> = {},
28
+ config: MockSliceZoneValueConfig<Model, State>,
29
29
  ): ModelValue<Model, State> => {
30
30
  if (config.state === "empty") {
31
31
  return [] as ModelValue<Model, State>;
32
32
  } else {
33
- const faker = createFaker(config.seed);
33
+ const faker = config.faker || createFaker(config.seed);
34
34
 
35
- const model = config.model || modelGen.sliceZone({ seed: config.seed });
35
+ const model = config.model || modelGen.sliceZone({ faker });
36
36
 
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
- });
37
+ if (model.config?.choices && Object.keys(model.config.choices).length > 0) {
38
+ const itemsCount = config.itemsCount ?? faker.range(1, 6);
44
39
 
45
40
  return Array(itemsCount)
46
41
  .fill(undefined)
47
42
  .map(() => {
48
- const choices = Object.entries(model.config.choices);
49
- const [choiceType, choiceModel] = faker.random.arrayElement(choices);
43
+ const choices =
44
+ (model.config?.choices && Object.entries(model.config.choices)) ||
45
+ [];
46
+ const [choiceType, choiceModel] = faker.randomElement(choices);
50
47
 
51
- const choiceLabels = model.config.labels[choiceType] || [];
52
- const choiceLabel = faker.random.arrayElement(choiceLabels);
48
+ const choiceLabels = model.config?.labels?.[choiceType] || [];
49
+ const choiceLabel = faker.randomElement(choiceLabels);
53
50
 
54
51
  switch (choiceModel.type) {
55
52
  case prismicT.CustomTypeModelSliceType.Slice: {
56
53
  return slice({
57
- seed: config.seed,
54
+ faker,
58
55
  model: choiceModel,
59
56
  type: choiceType,
60
57
  label: choiceLabel ? choiceLabel.name : null,
@@ -70,7 +67,7 @@ export const sliceZone = <
70
67
 
71
68
  if (sharedSliceModel) {
72
69
  return sharedSlice({
73
- seed: config.seed,
70
+ faker,
74
71
  model: sharedSliceModel,
75
72
  primaryFieldConfigs: config.primaryFieldConfigs,
76
73
  itemsFieldConfigs: config.itemsFieldConfigs,
@@ -80,8 +77,7 @@ export const sliceZone = <
80
77
  }
81
78
  })
82
79
  .filter(
83
- (slice): slice is prismicT.Slice | prismicT.SharedSlice =>
84
- slice !== undefined,
80
+ (slice): slice is NonNullable<typeof slice> => slice !== undefined,
85
81
  ) as ModelValue<Model, State>;
86
82
  } else {
87
83
  return [] as unknown as ModelValue<Model, State>;
@@ -21,23 +21,36 @@ export const timestamp = <
21
21
  Model extends prismicT.CustomTypeModelTimestampField = prismicT.CustomTypeModelTimestampField,
22
22
  State extends prismicT.FieldState = "filled",
23
23
  >(
24
- config: MockTimestampValueConfig<Model, State> = {},
24
+ config: MockTimestampValueConfig<Model, State>,
25
25
  ): MockTimestampValue<State> => {
26
- const faker = createFaker(config.seed);
27
-
28
- // Faker seems to have problems accepting parameters for `faker.date.between`
29
- // if the parameters are too precise. We can get around this by only using
30
- // generated dates, not timestamps.
31
- const after =
32
- config.after ||
33
- faker.date.past(20, new Date("2021-03-07")).toISOString().split("T")[0];
34
- const before =
35
- config.before ||
36
- faker.date.future(20, new Date("2021-03-07")).toISOString().split("T")[0];
37
-
38
- return (
39
- config.state === "empty"
40
- ? null
41
- : faker.date.between(after, before).toISOString()
42
- ) as MockTimestampValue<State>;
26
+ const faker = config.faker || createFaker(config.seed);
27
+
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
+ }
43
56
  };
@@ -1,5 +1,7 @@
1
1
  import * as prismicT from "@prismicio/types";
2
2
 
3
+ import { createFaker } from "../lib/createFaker";
4
+
3
5
  import { MockValueConfig, MockValueStateConfig } from "../types";
4
6
 
5
7
  import { heading, MockRichTextHeadingValueConfig } from "./richText/heading";
@@ -18,17 +20,19 @@ export type MockTitleValue<
18
20
 
19
21
  export const title = <
20
22
  Model extends prismicT.CustomTypeModelTitleField = prismicT.CustomTypeModelTitleField,
21
- State extends prismicT.FieldState = prismicT.FieldState,
23
+ State extends prismicT.FieldState = "filled",
22
24
  >(
23
- config: MockTitleValueConfig<Model, State> = {},
25
+ config: MockTitleValueConfig<Model, State>,
24
26
  ): MockTitleValue<State> => {
27
+ const faker = config.faker || createFaker(config.seed);
28
+
25
29
  if (config.state === "empty") {
26
30
  return [] as MockTitleValue<State>;
27
31
  } else {
28
32
  return [
29
33
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
30
34
  heading({
31
- seed: config.seed,
35
+ faker,
32
36
  model: config.model,
33
37
  pattern: config.pattern,
34
38
  })!,
package/src/value/uid.ts CHANGED
@@ -9,10 +9,12 @@ export type MockUIDValueConfig<
9
9
  Model extends prismicT.CustomTypeModelUIDField = prismicT.CustomTypeModelUIDField,
10
10
  > = MockValueConfig<Model>;
11
11
 
12
- export const uid = (
13
- config: MockUIDValueConfig = {},
12
+ export const uid = <
13
+ Model extends prismicT.CustomTypeModelUIDField = prismicT.CustomTypeModelUIDField,
14
+ >(
15
+ config: MockUIDValueConfig<Model>,
14
16
  ): NonNullable<prismicT.PrismicDocument["uid"]> => {
15
- const faker = createFaker(config.seed);
17
+ const faker = config.faker || createFaker(config.seed);
16
18
 
17
- return changeCase.snakeCase(faker.lorem.words(2));
19
+ return changeCase.snakeCase(faker.words(faker.range(1, 3)));
18
20
  };