@prismicio/react 2.5.2 → 2.6.0-alpha.1

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 (82) hide show
  1. package/dist/PrismicImage.cjs +7 -11
  2. package/dist/PrismicImage.cjs.map +1 -1
  3. package/dist/PrismicImage.d.ts +14 -15
  4. package/dist/PrismicImage.js +6 -10
  5. package/dist/PrismicImage.js.map +1 -1
  6. package/dist/PrismicLink.cjs +4 -66
  7. package/dist/PrismicLink.cjs.map +1 -1
  8. package/dist/PrismicLink.d.ts +5 -104
  9. package/dist/PrismicLink.js +4 -65
  10. package/dist/PrismicLink.js.map +1 -1
  11. package/dist/PrismicProvider.cjs.map +1 -1
  12. package/dist/PrismicProvider.d.ts +8 -9
  13. package/dist/PrismicProvider.js.map +1 -1
  14. package/dist/PrismicRichText.cjs +4 -71
  15. package/dist/PrismicRichText.cjs.map +1 -1
  16. package/dist/PrismicRichText.d.ts +4 -116
  17. package/dist/PrismicRichText.js +5 -70
  18. package/dist/PrismicRichText.js.map +1 -1
  19. package/dist/PrismicText.cjs +4 -4
  20. package/dist/PrismicText.cjs.map +1 -1
  21. package/dist/PrismicText.d.ts +2 -2
  22. package/dist/PrismicText.js +3 -3
  23. package/dist/PrismicText.js.map +1 -1
  24. package/dist/PrismicToolbar.cjs +6 -4
  25. package/dist/PrismicToolbar.cjs.map +1 -1
  26. package/dist/PrismicToolbar.d.ts +3 -1
  27. package/dist/PrismicToolbar.js +6 -4
  28. package/dist/PrismicToolbar.js.map +1 -1
  29. package/dist/SliceZone.cjs +4 -17
  30. package/dist/SliceZone.cjs.map +1 -1
  31. package/dist/SliceZone.d.ts +4 -65
  32. package/dist/SliceZone.js +4 -17
  33. package/dist/SliceZone.js.map +1 -1
  34. package/dist/index.cjs +0 -2
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.ts +2 -27
  37. package/dist/index.js +1 -4
  38. package/dist/index.js.map +1 -1
  39. package/dist/package.json.cjs +1 -1
  40. package/dist/package.json.js +1 -1
  41. package/dist/react-server/PrismicLink.cjs +59 -0
  42. package/dist/react-server/PrismicLink.cjs.map +1 -0
  43. package/dist/react-server/PrismicLink.d.ts +72 -0
  44. package/dist/react-server/PrismicLink.js +42 -0
  45. package/dist/react-server/PrismicLink.js.map +1 -0
  46. package/dist/react-server/PrismicRichText.cjs +92 -0
  47. package/dist/react-server/PrismicRichText.cjs.map +1 -0
  48. package/dist/react-server/PrismicRichText.d.ts +104 -0
  49. package/dist/react-server/PrismicRichText.js +73 -0
  50. package/dist/react-server/PrismicRichText.js.map +1 -0
  51. package/dist/react-server/index.d.ts +4 -0
  52. package/dist/react-server/unsupported.cjs +97 -0
  53. package/dist/react-server/unsupported.cjs.map +1 -0
  54. package/dist/react-server/unsupported.d.ts +22 -0
  55. package/dist/react-server/unsupported.js +97 -0
  56. package/dist/react-server/unsupported.js.map +1 -0
  57. package/dist/react-server.cjs +44 -0
  58. package/dist/react-server.cjs.map +1 -0
  59. package/dist/react-server.js +41 -0
  60. package/dist/react-server.js.map +1 -0
  61. package/dist/useStatefulPrismicClientMethod.cjs +6 -0
  62. package/dist/useStatefulPrismicClientMethod.cjs.map +1 -1
  63. package/dist/useStatefulPrismicClientMethod.d.ts +1 -1
  64. package/dist/useStatefulPrismicClientMethod.js +6 -0
  65. package/dist/useStatefulPrismicClientMethod.js.map +1 -1
  66. package/package.json +42 -47
  67. package/src/PrismicImage.tsx +30 -37
  68. package/src/PrismicLink.tsx +29 -258
  69. package/src/PrismicProvider.tsx +9 -8
  70. package/src/PrismicRichText.tsx +28 -275
  71. package/src/PrismicText.tsx +4 -5
  72. package/src/PrismicToolbar.tsx +7 -6
  73. package/src/SliceZone.tsx +8 -129
  74. package/src/index.ts +1 -9
  75. package/src/react-server/PrismicLink.tsx +179 -0
  76. package/src/react-server/PrismicRichText.tsx +267 -0
  77. package/src/react-server/index.ts +38 -0
  78. package/src/react-server/unsupported.ts +98 -0
  79. package/dist/lib/pascalCase.cjs +0 -10
  80. package/dist/lib/pascalCase.cjs.map +0 -1
  81. package/dist/lib/pascalCase.js +0 -10
  82. package/dist/lib/pascalCase.js.map +0 -1
@@ -0,0 +1,97 @@
1
+ function buildErrorMessage(fnName) {
2
+ return `${fnName} is not supported in Server Components. Remove all uses of ${fnName} in Server Components.`;
3
+ }
4
+ function buildHookErrorMessage(fnName) {
5
+ return `${fnName} is not supported in Server Components. Replace all uses of ${fnName} in Server Components with direct use of \`@prismicio/client\`.`;
6
+ }
7
+ function PrismicProvider() {
8
+ throw new Error(buildErrorMessage("<PrismicProvider>"));
9
+ }
10
+ function usePrismicContext() {
11
+ throw new Error(buildErrorMessage("usePrismicContext()"));
12
+ }
13
+ function usePrismicClient() {
14
+ throw new Error(buildHookErrorMessage("usePrismicClient()"));
15
+ }
16
+ function usePrismicPreviewResolver() {
17
+ throw new Error(buildHookErrorMessage("usePrismicPreviewResolver()"));
18
+ }
19
+ function useAllPrismicDocumentsDangerously() {
20
+ throw new Error(buildHookErrorMessage("useAllPrismicDocumentsDangerously()"));
21
+ }
22
+ function useAllPrismicDocumentsByEveryTag() {
23
+ throw new Error(buildHookErrorMessage("useAllPrismicDocumentsByEveryTag()"));
24
+ }
25
+ function useAllPrismicDocumentsByIDs() {
26
+ throw new Error(buildHookErrorMessage("useAllPrismicDocumentsByIDs()"));
27
+ }
28
+ function useAllPrismicDocumentsBySomeTags() {
29
+ throw new Error(buildHookErrorMessage("useAllPrismicDocumentsBySomeTags()"));
30
+ }
31
+ function useAllPrismicDocumentsByTag() {
32
+ throw new Error(buildHookErrorMessage("useAllPrismicDocumentsByTag()"));
33
+ }
34
+ function useAllPrismicDocumentsByType() {
35
+ throw new Error(buildHookErrorMessage("useAllPrismicDocumentsByType()"));
36
+ }
37
+ function useAllPrismicDocumentsByUIDs() {
38
+ throw new Error(buildHookErrorMessage("useAllPrismicDocumentsByUIDs()"));
39
+ }
40
+ function useFirstPrismicDocument() {
41
+ throw new Error(buildHookErrorMessage("useFirstPrismicDocument()"));
42
+ }
43
+ function usePrismicDocumentByID() {
44
+ throw new Error(buildHookErrorMessage("usePrismicDocumentByID()"));
45
+ }
46
+ function usePrismicDocumentByUID() {
47
+ throw new Error(buildHookErrorMessage("usePrismicDocumentByUID()"));
48
+ }
49
+ function usePrismicDocuments() {
50
+ throw new Error(buildHookErrorMessage("usePrismicDocuments()"));
51
+ }
52
+ function usePrismicDocumentsByEveryTag() {
53
+ throw new Error(buildHookErrorMessage("usePrismicDocumentsByEveryTag()"));
54
+ }
55
+ function usePrismicDocumentsByIDs() {
56
+ throw new Error(buildHookErrorMessage("usePrismicDocumentsByIDs()"));
57
+ }
58
+ function usePrismicDocumentsBySomeTags() {
59
+ throw new Error(buildHookErrorMessage("usePrismicDocumentsBySomeTags()"));
60
+ }
61
+ function usePrismicDocumentsByTag() {
62
+ throw new Error(buildHookErrorMessage("usePrismicDocumentsByTag()"));
63
+ }
64
+ function usePrismicDocumentsByType() {
65
+ throw new Error(buildHookErrorMessage("usePrismicDocumentsByType()"));
66
+ }
67
+ function usePrismicDocumentsByUIDs() {
68
+ throw new Error(buildHookErrorMessage("usePrismicDocumentsByUIDs()"));
69
+ }
70
+ function useSinglePrismicDocument() {
71
+ throw new Error(buildHookErrorMessage("useSinglePrismicDocument()"));
72
+ }
73
+ export {
74
+ PrismicProvider,
75
+ useAllPrismicDocumentsByEveryTag,
76
+ useAllPrismicDocumentsByIDs,
77
+ useAllPrismicDocumentsBySomeTags,
78
+ useAllPrismicDocumentsByTag,
79
+ useAllPrismicDocumentsByType,
80
+ useAllPrismicDocumentsByUIDs,
81
+ useAllPrismicDocumentsDangerously,
82
+ useFirstPrismicDocument,
83
+ usePrismicClient,
84
+ usePrismicContext,
85
+ usePrismicDocumentByID,
86
+ usePrismicDocumentByUID,
87
+ usePrismicDocuments,
88
+ usePrismicDocumentsByEveryTag,
89
+ usePrismicDocumentsByIDs,
90
+ usePrismicDocumentsBySomeTags,
91
+ usePrismicDocumentsByTag,
92
+ usePrismicDocumentsByType,
93
+ usePrismicDocumentsByUIDs,
94
+ usePrismicPreviewResolver,
95
+ useSinglePrismicDocument
96
+ };
97
+ //# sourceMappingURL=unsupported.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unsupported.js","sources":["../../../src/react-server/unsupported.ts"],"sourcesContent":["// Exports in this file are unsupported in the react-server environment.\n// All environments should export the same functions to maintian API compatability.\n\nfunction buildErrorMessage(fnName: string) {\n\treturn `${fnName} is not supported in Server Components. Remove all uses of ${fnName} in Server Components.`;\n}\n\nfunction buildHookErrorMessage(fnName: string) {\n\treturn `${fnName} is not supported in Server Components. Replace all uses of ${fnName} in Server Components with direct use of \\`@prismicio/client\\`.`;\n}\n\nexport function PrismicProvider(): JSX.Element {\n\tthrow new Error(buildErrorMessage(\"<PrismicProvider>\"));\n}\n\nexport function usePrismicContext() {\n\tthrow new Error(buildErrorMessage(\"usePrismicContext()\"));\n}\n\nexport function usePrismicClient() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicClient()\"));\n}\n\nexport function usePrismicPreviewResolver() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicPreviewResolver()\"));\n}\n\nexport function useAllPrismicDocumentsDangerously() {\n\tthrow new Error(buildHookErrorMessage(\"useAllPrismicDocumentsDangerously()\"));\n}\n\nexport function useAllPrismicDocumentsByEveryTag() {\n\tthrow new Error(buildHookErrorMessage(\"useAllPrismicDocumentsByEveryTag()\"));\n}\n\nexport function useAllPrismicDocumentsByIDs() {\n\tthrow new Error(buildHookErrorMessage(\"useAllPrismicDocumentsByIDs()\"));\n}\n\nexport function useAllPrismicDocumentsBySomeTags() {\n\tthrow new Error(buildHookErrorMessage(\"useAllPrismicDocumentsBySomeTags()\"));\n}\n\nexport function useAllPrismicDocumentsByTag() {\n\tthrow new Error(buildHookErrorMessage(\"useAllPrismicDocumentsByTag()\"));\n}\n\nexport function useAllPrismicDocumentsByType() {\n\tthrow new Error(buildHookErrorMessage(\"useAllPrismicDocumentsByType()\"));\n}\n\nexport function useAllPrismicDocumentsByUIDs() {\n\tthrow new Error(buildHookErrorMessage(\"useAllPrismicDocumentsByUIDs()\"));\n}\n\nexport function useFirstPrismicDocument() {\n\tthrow new Error(buildHookErrorMessage(\"useFirstPrismicDocument()\"));\n}\n\nexport function usePrismicDocumentByID() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicDocumentByID()\"));\n}\n\nexport function usePrismicDocumentByUID() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicDocumentByUID()\"));\n}\n\nexport function usePrismicDocuments() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicDocuments()\"));\n}\n\nexport function usePrismicDocumentsByEveryTag() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicDocumentsByEveryTag()\"));\n}\n\nexport function usePrismicDocumentsByIDs() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicDocumentsByIDs()\"));\n}\n\nexport function usePrismicDocumentsBySomeTags() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicDocumentsBySomeTags()\"));\n}\n\nexport function usePrismicDocumentsByTag() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicDocumentsByTag()\"));\n}\n\nexport function usePrismicDocumentsByType() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicDocumentsByType()\"));\n}\n\nexport function usePrismicDocumentsByUIDs() {\n\tthrow new Error(buildHookErrorMessage(\"usePrismicDocumentsByUIDs()\"));\n}\n\nexport function useSinglePrismicDocument() {\n\tthrow new Error(buildHookErrorMessage(\"useSinglePrismicDocument()\"));\n}\n"],"names":[],"mappings":"AAGA,SAAS,kBAAkB,QAAc;AACxC,SAAO,GAAG,oEAAoE;AAC/E;AAEA,SAAS,sBAAsB,QAAc;AAC5C,SAAO,GAAG,qEAAqE;AAChF;SAEgB,kBAAe;AAC9B,QAAM,IAAI,MAAM,kBAAkB,mBAAmB,CAAC;AACvD;SAEgB,oBAAiB;AAChC,QAAM,IAAI,MAAM,kBAAkB,qBAAqB,CAAC;AACzD;SAEgB,mBAAgB;AAC/B,QAAM,IAAI,MAAM,sBAAsB,oBAAoB,CAAC;AAC5D;SAEgB,4BAAyB;AACxC,QAAM,IAAI,MAAM,sBAAsB,6BAA6B,CAAC;AACrE;SAEgB,oCAAiC;AAChD,QAAM,IAAI,MAAM,sBAAsB,qCAAqC,CAAC;AAC7E;SAEgB,mCAAgC;AAC/C,QAAM,IAAI,MAAM,sBAAsB,oCAAoC,CAAC;AAC5E;SAEgB,8BAA2B;AAC1C,QAAM,IAAI,MAAM,sBAAsB,+BAA+B,CAAC;AACvE;SAEgB,mCAAgC;AAC/C,QAAM,IAAI,MAAM,sBAAsB,oCAAoC,CAAC;AAC5E;SAEgB,8BAA2B;AAC1C,QAAM,IAAI,MAAM,sBAAsB,+BAA+B,CAAC;AACvE;SAEgB,+BAA4B;AAC3C,QAAM,IAAI,MAAM,sBAAsB,gCAAgC,CAAC;AACxE;SAEgB,+BAA4B;AAC3C,QAAM,IAAI,MAAM,sBAAsB,gCAAgC,CAAC;AACxE;SAEgB,0BAAuB;AACtC,QAAM,IAAI,MAAM,sBAAsB,2BAA2B,CAAC;AACnE;SAEgB,yBAAsB;AACrC,QAAM,IAAI,MAAM,sBAAsB,0BAA0B,CAAC;AAClE;SAEgB,0BAAuB;AACtC,QAAM,IAAI,MAAM,sBAAsB,2BAA2B,CAAC;AACnE;SAEgB,sBAAmB;AAClC,QAAM,IAAI,MAAM,sBAAsB,uBAAuB,CAAC;AAC/D;SAEgB,gCAA6B;AAC5C,QAAM,IAAI,MAAM,sBAAsB,iCAAiC,CAAC;AACzE;SAEgB,2BAAwB;AACvC,QAAM,IAAI,MAAM,sBAAsB,4BAA4B,CAAC;AACpE;SAEgB,gCAA6B;AAC5C,QAAM,IAAI,MAAM,sBAAsB,iCAAiC,CAAC;AACzE;SAEgB,2BAAwB;AACvC,QAAM,IAAI,MAAM,sBAAsB,4BAA4B,CAAC;AACpE;SAEgB,4BAAyB;AACxC,QAAM,IAAI,MAAM,sBAAsB,6BAA6B,CAAC;AACrE;SAEgB,4BAAyB;AACxC,QAAM,IAAI,MAAM,sBAAsB,6BAA6B,CAAC;AACrE;SAEgB,2BAAwB;AACvC,QAAM,IAAI,MAAM,sBAAsB,4BAA4B,CAAC;AACpE;"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const PrismicLink = require("./react-server/PrismicLink.cjs");
4
+ const PrismicRichText = require("./react-server/PrismicRichText.cjs");
5
+ const unsupported = require("./react-server/unsupported.cjs");
6
+ const PrismicText = require("./PrismicText.cjs");
7
+ const prismicR = require("@prismicio/richtext");
8
+ const PrismicImage = require("./PrismicImage.cjs");
9
+ const SliceZone = require("./SliceZone.cjs");
10
+ const PrismicToolbar = require("./PrismicToolbar.cjs");
11
+ exports.PrismicLink = PrismicLink.PrismicLink;
12
+ exports.PrismicRichText = PrismicRichText.PrismicRichText;
13
+ exports.PrismicProvider = unsupported.PrismicProvider;
14
+ exports.useAllPrismicDocumentsByEveryTag = unsupported.useAllPrismicDocumentsByEveryTag;
15
+ exports.useAllPrismicDocumentsByIDs = unsupported.useAllPrismicDocumentsByIDs;
16
+ exports.useAllPrismicDocumentsBySomeTags = unsupported.useAllPrismicDocumentsBySomeTags;
17
+ exports.useAllPrismicDocumentsByTag = unsupported.useAllPrismicDocumentsByTag;
18
+ exports.useAllPrismicDocumentsByType = unsupported.useAllPrismicDocumentsByType;
19
+ exports.useAllPrismicDocumentsByUIDs = unsupported.useAllPrismicDocumentsByUIDs;
20
+ exports.useAllPrismicDocumentsDangerously = unsupported.useAllPrismicDocumentsDangerously;
21
+ exports.useFirstPrismicDocument = unsupported.useFirstPrismicDocument;
22
+ exports.usePrismicClient = unsupported.usePrismicClient;
23
+ exports.usePrismicContext = unsupported.usePrismicContext;
24
+ exports.usePrismicDocumentByID = unsupported.usePrismicDocumentByID;
25
+ exports.usePrismicDocumentByUID = unsupported.usePrismicDocumentByUID;
26
+ exports.usePrismicDocuments = unsupported.usePrismicDocuments;
27
+ exports.usePrismicDocumentsByEveryTag = unsupported.usePrismicDocumentsByEveryTag;
28
+ exports.usePrismicDocumentsByIDs = unsupported.usePrismicDocumentsByIDs;
29
+ exports.usePrismicDocumentsBySomeTags = unsupported.usePrismicDocumentsBySomeTags;
30
+ exports.usePrismicDocumentsByTag = unsupported.usePrismicDocumentsByTag;
31
+ exports.usePrismicDocumentsByType = unsupported.usePrismicDocumentsByType;
32
+ exports.usePrismicDocumentsByUIDs = unsupported.usePrismicDocumentsByUIDs;
33
+ exports.usePrismicPreviewResolver = unsupported.usePrismicPreviewResolver;
34
+ exports.useSinglePrismicDocument = unsupported.useSinglePrismicDocument;
35
+ exports.PrismicText = PrismicText.PrismicText;
36
+ Object.defineProperty(exports, "Element", {
37
+ enumerable: true,
38
+ get: () => prismicR.Element
39
+ });
40
+ exports.PrismicImage = PrismicImage.PrismicImage;
41
+ exports.SliceZone = SliceZone.SliceZone;
42
+ exports.TODOSliceComponent = SliceZone.TODOSliceComponent;
43
+ exports.PrismicToolbar = PrismicToolbar.PrismicToolbar;
44
+ //# sourceMappingURL=react-server.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-server.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,41 @@
1
+ import { PrismicLink } from "./react-server/PrismicLink.js";
2
+ import { PrismicRichText } from "./react-server/PrismicRichText.js";
3
+ import { PrismicProvider, useAllPrismicDocumentsByEveryTag, useAllPrismicDocumentsByIDs, useAllPrismicDocumentsBySomeTags, useAllPrismicDocumentsByTag, useAllPrismicDocumentsByType, useAllPrismicDocumentsByUIDs, useAllPrismicDocumentsDangerously, useFirstPrismicDocument, usePrismicClient, usePrismicContext, usePrismicDocumentByID, usePrismicDocumentByUID, usePrismicDocuments, usePrismicDocumentsByEveryTag, usePrismicDocumentsByIDs, usePrismicDocumentsBySomeTags, usePrismicDocumentsByTag, usePrismicDocumentsByType, usePrismicDocumentsByUIDs, usePrismicPreviewResolver, useSinglePrismicDocument } from "./react-server/unsupported.js";
4
+ import { PrismicText } from "./PrismicText.js";
5
+ import { Element } from "@prismicio/richtext";
6
+ import { PrismicImage } from "./PrismicImage.js";
7
+ import { SliceZone, TODOSliceComponent } from "./SliceZone.js";
8
+ import { PrismicToolbar } from "./PrismicToolbar.js";
9
+ export {
10
+ Element,
11
+ PrismicImage,
12
+ PrismicLink,
13
+ PrismicProvider,
14
+ PrismicRichText,
15
+ PrismicText,
16
+ PrismicToolbar,
17
+ SliceZone,
18
+ TODOSliceComponent,
19
+ useAllPrismicDocumentsByEveryTag,
20
+ useAllPrismicDocumentsByIDs,
21
+ useAllPrismicDocumentsBySomeTags,
22
+ useAllPrismicDocumentsByTag,
23
+ useAllPrismicDocumentsByType,
24
+ useAllPrismicDocumentsByUIDs,
25
+ useAllPrismicDocumentsDangerously,
26
+ useFirstPrismicDocument,
27
+ usePrismicClient,
28
+ usePrismicContext,
29
+ usePrismicDocumentByID,
30
+ usePrismicDocumentByUID,
31
+ usePrismicDocuments,
32
+ usePrismicDocumentsByEveryTag,
33
+ usePrismicDocumentsByIDs,
34
+ usePrismicDocumentsBySomeTags,
35
+ usePrismicDocumentsByTag,
36
+ usePrismicDocumentsByType,
37
+ usePrismicDocumentsByUIDs,
38
+ usePrismicPreviewResolver,
39
+ useSinglePrismicDocument
40
+ };
41
+ //# sourceMappingURL=react-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -69,11 +69,17 @@ const useStatefulPrismicClientMethod = (methodName, args, explicitClient) => {
69
69
  });
70
70
  }
71
71
  },
72
+ // We must disable exhaustive-deps since we are using
73
+ // JSON.stringify on params (effectively a deep equality check).
74
+ // We want this effect to run again anytime params change.
75
+ // eslint-disable-next-line react-hooks/exhaustive-deps
72
76
  [
73
77
  client,
74
78
  methodName,
75
79
  skip,
80
+ // eslint-disable-next-line react-hooks/exhaustive-deps
76
81
  JSON.stringify(argsWithoutParams),
82
+ // eslint-disable-next-line react-hooks/exhaustive-deps
77
83
  JSON.stringify(params)
78
84
  ]
79
85
  );
@@ -1 +1 @@
1
- {"version":3,"file":"useStatefulPrismicClientMethod.cjs","sources":["../../src/useStatefulPrismicClientMethod.ts"],"sourcesContent":["import type * as prismic from \"@prismicio/client\";\n\nimport * as React from \"react\";\n\nimport { PrismicClientHookState } from \"./types\";\nimport { usePrismicClient } from \"./usePrismicClient\";\n\ntype StateMachineState<TData> = {\n\tstate: PrismicClientHookState;\n\tdata?: TData;\n\terror?: Error;\n};\n\ntype StateMachineAction<TData> =\n\t| [type: \"start\"]\n\t| [type: \"succeed\", payload: TData]\n\t| [type: \"fail\", payload: Error];\n\nconst reducer = <TData>(\n\tstate: StateMachineState<TData>,\n\taction: StateMachineAction<TData>,\n): StateMachineState<TData> => {\n\tswitch (action[0]) {\n\t\tcase \"start\": {\n\t\t\treturn { state: \"loading\" };\n\t\t}\n\n\t\tcase \"succeed\": {\n\t\t\treturn { state: \"loaded\", data: action[1] };\n\t\t}\n\n\t\tcase \"fail\": {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tstate: \"failed\",\n\t\t\t\terror: action[1],\n\t\t\t};\n\t\t}\n\t}\n};\n\nconst initialState: StateMachineState<never> = {\n\tstate: \"idle\",\n};\n\ntype UnwrapPromise<T> = T extends Promise<infer U> ? U : T;\n\ntype ClientPrototype = typeof prismic.Client.prototype;\n\ntype ClientMethod<MethodName extends keyof ClientPrototype> =\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tClientPrototype[MethodName] extends (...args: any[]) => any\n\t\t? ClientPrototype[MethodName]\n\t\t: never;\n\ntype ClientMethodName = keyof {\n\t[P in keyof prismic.Client as prismic.Client[P] extends (\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t...args: any[]\n\t) => // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tPromise<any>\n\t\t? P\n\t\t: never]: unknown;\n};\n\nexport type ClientMethodParameters<MethodName extends keyof ClientPrototype> =\n\tParameters<ClientMethod<MethodName>>;\n\nexport type HookOnlyParameters = {\n\tclient?: prismic.Client;\n\tskip?: boolean;\n};\n\n/**\n * Determines if a value is a `@prismicio/client` params object.\n *\n * @param value - The value to check.\n *\n * @returns `true` if `value` is a `@prismicio/client` params object, `false`\n * otherwise.\n */\nconst isParams = (\n\tvalue: unknown,\n): value is ClientMethodParameters<\"get\">[0] & HookOnlyParameters => {\n\t// This is a *very* naive check.\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\n/**\n * The return value of a `@prismicio/client` React hook.\n *\n * @typeParam TData - Data returned by the client.\n */\nexport type ClientHookReturnType<TData = unknown> = [\n\t/**\n\t * Data returned by the client.\n\t */\n\tdata: TData | undefined,\n\n\t/**\n\t * The current state of the hook's client method call.\n\t */\n\tstate: Pick<StateMachineState<TData>, \"state\" | \"error\">,\n];\n\n/**\n * Creates a React hook that forwards arguments to a specific method of a\n * `@prismicio/client` instance. The created hook has its own internal state\n * manager to report async status, such as pending or error statuses.\n *\n * @param methodName - The `@prismicio/client` method to which hook arguments\n * will be forwarded.\n *\n * @returns A new React hook configured for the provided method.\n *\n * @internal\n */\nexport const useStatefulPrismicClientMethod = <\n\tTMethodName extends ClientMethodName,\n\tTArgs extends Parameters<ClientMethod<TMethodName>>,\n\tTData extends UnwrapPromise<ReturnType<ClientMethod<TMethodName>>>,\n>(\n\tmethodName: TMethodName,\n\targs: TArgs,\n\texplicitClient?: prismic.Client,\n): ClientHookReturnType<TData> => {\n\tconst lastArg = args[args.length - 1];\n\tconst {\n\t\tclient: lastArgExplicitClient,\n\t\tskip,\n\t\t...params\n\t} = isParams(lastArg) ? lastArg : ({} as HookOnlyParameters);\n\tconst argsWithoutParams = isParams(lastArg) ? args.slice(0, -1) : args;\n\n\tconst client = usePrismicClient(explicitClient || lastArgExplicitClient);\n\n\tconst [state, dispatch] = React.useReducer<\n\t\tReact.Reducer<StateMachineState<TData>, StateMachineAction<TData>>\n\t>(reducer, initialState);\n\n\tReact.useEffect(\n\t\t() => {\n\t\t\t// Used to prevent dispatching an action if the hook was cleaned up.\n\t\t\tlet didCancel = false;\n\n\t\t\tif (!skip) {\n\t\t\t\tif (!didCancel) {\n\t\t\t\t\tdispatch([\"start\"]);\n\t\t\t\t}\n\n\t\t\t\tclient[methodName]\n\t\t\t\t\t.call(\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\t// @ts-expect-error - Merging method arg types is too complex\n\t\t\t\t\t\t...argsWithoutParams,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t)\n\t\t\t\t\t.then((result) => {\n\t\t\t\t\t\tif (!didCancel) {\n\t\t\t\t\t\t\tdispatch([\"succeed\", result as TData]);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tif (!didCancel) {\n\t\t\t\t\t\t\tdispatch([\"fail\", error]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Ensure we don't dispatch an action if the hook is cleaned up.\n\t\t\t() => {\n\t\t\t\tdidCancel = true;\n\t\t\t};\n\t\t},\n\t\t// We must disable exhaustive-deps since we are using\n\t\t// JSON.stringify on params (effectively a deep equality check).\n\t\t// We want this effect to run again anytime params change.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[\n\t\t\tclient,\n\t\t\tmethodName,\n\t\t\tskip,\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t\tJSON.stringify(argsWithoutParams),\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t\tJSON.stringify(params),\n\t\t],\n\t);\n\n\treturn React.useMemo(\n\t\t() => [\n\t\t\tstate.data,\n\t\t\t{\n\t\t\t\tstate: state.state,\n\t\t\t\terror: state.error,\n\t\t\t},\n\t\t],\n\t\t[state],\n\t);\n};\n"],"names":["usePrismicClient","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkBA,MAAM,UAAU,CACf,OACA,WAC6B;AAC7B,UAAQ,OAAO,IAAI;AAAA,IAClB,KAAK,SAAS;AACN,aAAA,EAAE,OAAO;IAChB;AAAA,IAED,KAAK,WAAW;AACf,aAAO,EAAE,OAAO,UAAU,MAAM,OAAO;IACvC;AAAA,IAED,KAAK,QAAQ;AACL,aAAA;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,MAAA;AAAA,IAEf;AAAA,EACD;AACF;AAEA,MAAM,eAAyC;AAAA,EAC9C,OAAO;;AAuCR,MAAM,WAAW,CAChB,UACmE;AAE5D,SAAA,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC3E;AA+BO,MAAM,iCAAiC,CAK7C,YACA,MACA,mBACgC;AAC1B,QAAA,UAAU,KAAK,KAAK,SAAS;AAC7B,QAAA,EACL,QAAQ,uBACR,SACG,WACA,SAAS,OAAO,IAAI,UAAW;AAC7B,QAAA,oBAAoB,SAAS,OAAO,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI;AAE5D,QAAA,SAASA,iBAAAA,iBAAiB,kBAAkB,qBAAqB;AAEvE,QAAM,CAAC,OAAO,QAAQ,IAAIC,iBAAM,WAE9B,SAAS,YAAY;AAEjBA,mBAAA;AAAA,IACL,MAAK;AAIJ,UAAI,CAAC,MAAM;AACM;AACN,mBAAA,CAAC,OAAO,CAAC;AAAA,QAClB;AAED,eAAO,YACL;AAAA,UACA;AAAA,UAEA,GAAG;AAAA,UACH;AAAA,QAAA,EAEA,KAAK,CAAC,WAAU;AACA;AACN,qBAAA,CAAC,WAAW,MAAe,CAAC;AAAA,UACrC;AAAA,QAAA,CACD,EACA,MAAM,CAAC,UAAS;AACA;AACN,qBAAA,CAAC,QAAQ,KAAK,CAAC;AAAA,UACxB;AAAA,QAAA,CACD;AAAA,MACF;AAAA,IAMF;AAAA,IAKA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MAEA,KAAK,UAAU,iBAAiB;AAAA,MAEhC,KAAK,UAAU,MAAM;AAAA,IACrB;AAAA,EAAA;AAGK,SAAAA,iBAAM,QACZ,MAAM;AAAA,IACL,MAAM;AAAA,IACN;AAAA,MACC,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACb;AAAA,EAAA,GAEF,CAAC,KAAK,CAAC;AAET;;"}
1
+ {"version":3,"file":"useStatefulPrismicClientMethod.cjs","sources":["../../src/useStatefulPrismicClientMethod.ts"],"sourcesContent":["import type * as prismic from \"@prismicio/client\";\n\nimport * as React from \"react\";\n\nimport { PrismicClientHookState } from \"./types\";\nimport { usePrismicClient } from \"./usePrismicClient\";\n\ntype StateMachineState<TData> = {\n\tstate: PrismicClientHookState;\n\tdata?: TData;\n\terror?: Error;\n};\n\ntype StateMachineAction<TData> =\n\t| [type: \"start\"]\n\t| [type: \"succeed\", payload: TData]\n\t| [type: \"fail\", payload: Error];\n\nconst reducer = <TData>(\n\tstate: StateMachineState<TData>,\n\taction: StateMachineAction<TData>,\n): StateMachineState<TData> => {\n\tswitch (action[0]) {\n\t\tcase \"start\": {\n\t\t\treturn { state: \"loading\" };\n\t\t}\n\n\t\tcase \"succeed\": {\n\t\t\treturn { state: \"loaded\", data: action[1] };\n\t\t}\n\n\t\tcase \"fail\": {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tstate: \"failed\",\n\t\t\t\terror: action[1],\n\t\t\t};\n\t\t}\n\t}\n};\n\nconst initialState: StateMachineState<never> = {\n\tstate: \"idle\",\n};\n\ntype UnwrapPromise<T> = T extends Promise<infer U> ? U : T;\n\ntype ClientPrototype = typeof prismic.Client.prototype;\n\ntype ClientMethod<MethodName extends keyof ClientPrototype> =\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tClientPrototype[MethodName] extends (...args: any[]) => any\n\t\t? ClientPrototype[MethodName]\n\t\t: never;\n\ntype ClientMethodName = keyof {\n\t[P in keyof prismic.Client as prismic.Client[P] extends (\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t...args: any[]\n\t) => // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tPromise<any>\n\t\t? P\n\t\t: never]: unknown;\n};\n\nexport type ClientMethodParameters<MethodName extends keyof ClientPrototype> =\n\tParameters<ClientMethod<MethodName>>;\n\nexport type HookOnlyParameters = {\n\tclient?: prismic.Client;\n\tskip?: boolean;\n};\n\n/**\n * Determines if a value is a `@prismicio/client` params object.\n *\n * @param value - The value to check.\n *\n * @returns `true` if `value` is a `@prismicio/client` params object, `false`\n * otherwise.\n */\nconst isParams = (\n\tvalue: unknown,\n): value is ClientMethodParameters<\"get\">[0] & HookOnlyParameters => {\n\t// This is a *very* naive check.\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\n/**\n * The return value of a `@prismicio/client` React hook.\n *\n * @typeParam TData - Data returned by the client.\n */\nexport type ClientHookReturnType<TData = unknown> = [\n\t/**\n\t * Data returned by the client.\n\t */\n\tdata: TData | undefined,\n\n\t/**\n\t * The current state of the hook's client method call.\n\t */\n\tstate: Pick<StateMachineState<TData>, \"state\" | \"error\">,\n];\n\n/**\n * Creates a React hook that forwards arguments to a specific method of a\n * `@prismicio/client` instance. The created hook has its own internal state\n * manager to report async status, such as pending or error statuses.\n *\n * @param methodName - The `@prismicio/client` method to which hook arguments\n * will be forwarded.\n *\n * @returns A new React hook configured for the provided method.\n *\n * @internal\n */\nexport const useStatefulPrismicClientMethod = <\n\tTMethodName extends ClientMethodName,\n\tTArgs extends Parameters<ClientMethod<TMethodName>>,\n\tTData extends UnwrapPromise<ReturnType<ClientMethod<TMethodName>>>,\n>(\n\tmethodName: TMethodName,\n\targs: TArgs,\n\texplicitClient?: prismic.Client,\n): ClientHookReturnType<TData> => {\n\tconst lastArg = args[args.length - 1];\n\tconst {\n\t\tclient: lastArgExplicitClient,\n\t\tskip,\n\t\t...params\n\t} = isParams(lastArg) ? lastArg : ({} as HookOnlyParameters);\n\tconst argsWithoutParams = isParams(lastArg) ? args.slice(0, -1) : args;\n\n\tconst client = usePrismicClient(explicitClient || lastArgExplicitClient);\n\n\tconst [state, dispatch] = React.useReducer<\n\t\tReact.Reducer<StateMachineState<TData>, StateMachineAction<TData>>\n\t>(reducer, initialState);\n\n\tReact.useEffect(\n\t\t() => {\n\t\t\t// Used to prevent dispatching an action if the hook was cleaned up.\n\t\t\tlet didCancel = false;\n\n\t\t\tif (!skip) {\n\t\t\t\tif (!didCancel) {\n\t\t\t\t\tdispatch([\"start\"]);\n\t\t\t\t}\n\n\t\t\t\tclient[methodName]\n\t\t\t\t\t.call(\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\t// @ts-expect-error - Merging method arg types is too complex\n\t\t\t\t\t\t...argsWithoutParams,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t)\n\t\t\t\t\t.then((result) => {\n\t\t\t\t\t\tif (!didCancel) {\n\t\t\t\t\t\t\tdispatch([\"succeed\", result as TData]);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tif (!didCancel) {\n\t\t\t\t\t\t\tdispatch([\"fail\", error]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Ensure we don't dispatch an action if the hook is cleaned up.\n\t\t\t() => {\n\t\t\t\tdidCancel = true;\n\t\t\t};\n\t\t},\n\t\t// We must disable exhaustive-deps since we are using\n\t\t// JSON.stringify on params (effectively a deep equality check).\n\t\t// We want this effect to run again anytime params change.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[\n\t\t\tclient,\n\t\t\tmethodName,\n\t\t\tskip,\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t\tJSON.stringify(argsWithoutParams),\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t\tJSON.stringify(params),\n\t\t],\n\t);\n\n\treturn React.useMemo(\n\t\t() => [\n\t\t\tstate.data,\n\t\t\t{\n\t\t\t\tstate: state.state,\n\t\t\t\terror: state.error,\n\t\t\t},\n\t\t],\n\t\t[state],\n\t);\n};\n"],"names":["usePrismicClient","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkBA,MAAM,UAAU,CACf,OACA,WAC6B;AACrB,UAAA,OAAO,CAAC,GAAG;AAAA,IAClB,KAAK,SAAS;AACN,aAAA,EAAE,OAAO;IAChB;AAAA,IAED,KAAK,WAAW;AACf,aAAO,EAAE,OAAO,UAAU,MAAM,OAAO,CAAC;IACxC;AAAA,IAED,KAAK,QAAQ;AACL,aAAA;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,OAAO,OAAO,CAAC;AAAA,MAAA;AAAA,IAEhB;AAAA,EACD;AACF;AAEA,MAAM,eAAyC;AAAA,EAC9C,OAAO;;AAuCR,MAAM,WAAW,CAChB,UACmE;AAE5D,SAAA,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC3E;AA+BO,MAAM,iCAAiC,CAK7C,YACA,MACA,mBACgC;AAChC,QAAM,UAAU,KAAK,KAAK,SAAS,CAAC;AAC9B,QAAA,EACL,QAAQ,uBACR,MACA,GAAG,WACA,SAAS,OAAO,IAAI,UAAW;AAC7B,QAAA,oBAAoB,SAAS,OAAO,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI;AAE5D,QAAA,SAASA,iBAAAA,iBAAiB,kBAAkB,qBAAqB;AAEvE,QAAM,CAAC,OAAO,QAAQ,IAAIC,iBAAM,WAE9B,SAAS,YAAY;AAEjBA,mBAAA;AAAA,IACL,MAAK;AAIJ,UAAI,CAAC,MAAM;AACM;AACN,mBAAA,CAAC,OAAO,CAAC;AAAA,QAClB;AAED,eAAO,UAAU,EACf;AAAA,UACA;AAAA,UAEA,GAAG;AAAA,UACH;AAAA,QAAA,EAEA,KAAK,CAAC,WAAU;AACA;AACN,qBAAA,CAAC,WAAW,MAAe,CAAC;AAAA,UACrC;AAAA,QAAA,CACD,EACA,MAAM,CAAC,UAAS;AACA;AACN,qBAAA,CAAC,QAAQ,KAAK,CAAC;AAAA,UACxB;AAAA,QAAA,CACD;AAAA,MACF;AAAA,IAMF;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA,KAAK,UAAU,iBAAiB;AAAA;AAAA,MAEhC,KAAK,UAAU,MAAM;AAAA,IACrB;AAAA,EAAA;AAGK,SAAAA,iBAAM,QACZ,MAAM;AAAA,IACL,MAAM;AAAA,IACN;AAAA,MACC,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACb;AAAA,EAAA,GAEF,CAAC,KAAK,CAAC;AAET;;"}
@@ -40,5 +40,5 @@ export type ClientHookReturnType<TData = unknown> = [
40
40
  *
41
41
  * @internal
42
42
  */
43
- export declare const useStatefulPrismicClientMethod: <TMethodName extends "fetchFn" | "query" | "get" | "getFirst" | "dangerouslyGetAll" | "getByID" | "getByIDs" | "getAllByIDs" | "getByUID" | "getByUIDs" | "getAllByUIDs" | "getSingle" | "getByType" | "getAllByType" | "getByTag" | "getAllByTag" | "getByEveryTag" | "getAllByEveryTag" | "getBySomeTags" | "getAllBySomeTags" | "getRepository" | "getRefs" | "getRefByID" | "getRefByLabel" | "getMasterRef" | "getReleases" | "getReleaseByID" | "getReleaseByLabel" | "getTags" | "buildQueryURL" | "resolvePreviewURL" | "graphqlFetch" | "graphQLFetch", TArgs extends Parameters<ClientMethod<TMethodName>>, TData extends UnwrapPromise<ReturnType<ClientMethod<TMethodName>>>>(methodName: TMethodName, args: TArgs, explicitClient?: prismic.Client) => ClientHookReturnType<TData>;
43
+ export declare const useStatefulPrismicClientMethod: <TMethodName extends "fetchFn" | "get" | "getFirst" | "dangerouslyGetAll" | "getByID" | "getByIDs" | "getAllByIDs" | "getByUID" | "getByUIDs" | "getAllByUIDs" | "getSingle" | "getByType" | "getAllByType" | "getByTag" | "getAllByTag" | "getByEveryTag" | "getAllByEveryTag" | "getBySomeTags" | "getAllBySomeTags" | "getRepository" | "getRefs" | "getRefByID" | "getRefByLabel" | "getMasterRef" | "getReleases" | "getReleaseByID" | "getReleaseByLabel" | "getTags" | "buildQueryURL" | "resolvePreviewURL" | "graphQLFetch", TArgs extends Parameters<ClientMethod<TMethodName>>, TData extends UnwrapPromise<ReturnType<ClientMethod<TMethodName>>>>(methodName: TMethodName, args: TArgs, explicitClient?: prismic.Client) => ClientHookReturnType<TData>;
44
44
  export {};
@@ -50,11 +50,17 @@ const useStatefulPrismicClientMethod = (methodName, args, explicitClient) => {
50
50
  });
51
51
  }
52
52
  },
53
+ // We must disable exhaustive-deps since we are using
54
+ // JSON.stringify on params (effectively a deep equality check).
55
+ // We want this effect to run again anytime params change.
56
+ // eslint-disable-next-line react-hooks/exhaustive-deps
53
57
  [
54
58
  client,
55
59
  methodName,
56
60
  skip,
61
+ // eslint-disable-next-line react-hooks/exhaustive-deps
57
62
  JSON.stringify(argsWithoutParams),
63
+ // eslint-disable-next-line react-hooks/exhaustive-deps
58
64
  JSON.stringify(params)
59
65
  ]
60
66
  );
@@ -1 +1 @@
1
- {"version":3,"file":"useStatefulPrismicClientMethod.js","sources":["../../src/useStatefulPrismicClientMethod.ts"],"sourcesContent":["import type * as prismic from \"@prismicio/client\";\n\nimport * as React from \"react\";\n\nimport { PrismicClientHookState } from \"./types\";\nimport { usePrismicClient } from \"./usePrismicClient\";\n\ntype StateMachineState<TData> = {\n\tstate: PrismicClientHookState;\n\tdata?: TData;\n\terror?: Error;\n};\n\ntype StateMachineAction<TData> =\n\t| [type: \"start\"]\n\t| [type: \"succeed\", payload: TData]\n\t| [type: \"fail\", payload: Error];\n\nconst reducer = <TData>(\n\tstate: StateMachineState<TData>,\n\taction: StateMachineAction<TData>,\n): StateMachineState<TData> => {\n\tswitch (action[0]) {\n\t\tcase \"start\": {\n\t\t\treturn { state: \"loading\" };\n\t\t}\n\n\t\tcase \"succeed\": {\n\t\t\treturn { state: \"loaded\", data: action[1] };\n\t\t}\n\n\t\tcase \"fail\": {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tstate: \"failed\",\n\t\t\t\terror: action[1],\n\t\t\t};\n\t\t}\n\t}\n};\n\nconst initialState: StateMachineState<never> = {\n\tstate: \"idle\",\n};\n\ntype UnwrapPromise<T> = T extends Promise<infer U> ? U : T;\n\ntype ClientPrototype = typeof prismic.Client.prototype;\n\ntype ClientMethod<MethodName extends keyof ClientPrototype> =\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tClientPrototype[MethodName] extends (...args: any[]) => any\n\t\t? ClientPrototype[MethodName]\n\t\t: never;\n\ntype ClientMethodName = keyof {\n\t[P in keyof prismic.Client as prismic.Client[P] extends (\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t...args: any[]\n\t) => // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tPromise<any>\n\t\t? P\n\t\t: never]: unknown;\n};\n\nexport type ClientMethodParameters<MethodName extends keyof ClientPrototype> =\n\tParameters<ClientMethod<MethodName>>;\n\nexport type HookOnlyParameters = {\n\tclient?: prismic.Client;\n\tskip?: boolean;\n};\n\n/**\n * Determines if a value is a `@prismicio/client` params object.\n *\n * @param value - The value to check.\n *\n * @returns `true` if `value` is a `@prismicio/client` params object, `false`\n * otherwise.\n */\nconst isParams = (\n\tvalue: unknown,\n): value is ClientMethodParameters<\"get\">[0] & HookOnlyParameters => {\n\t// This is a *very* naive check.\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\n/**\n * The return value of a `@prismicio/client` React hook.\n *\n * @typeParam TData - Data returned by the client.\n */\nexport type ClientHookReturnType<TData = unknown> = [\n\t/**\n\t * Data returned by the client.\n\t */\n\tdata: TData | undefined,\n\n\t/**\n\t * The current state of the hook's client method call.\n\t */\n\tstate: Pick<StateMachineState<TData>, \"state\" | \"error\">,\n];\n\n/**\n * Creates a React hook that forwards arguments to a specific method of a\n * `@prismicio/client` instance. The created hook has its own internal state\n * manager to report async status, such as pending or error statuses.\n *\n * @param methodName - The `@prismicio/client` method to which hook arguments\n * will be forwarded.\n *\n * @returns A new React hook configured for the provided method.\n *\n * @internal\n */\nexport const useStatefulPrismicClientMethod = <\n\tTMethodName extends ClientMethodName,\n\tTArgs extends Parameters<ClientMethod<TMethodName>>,\n\tTData extends UnwrapPromise<ReturnType<ClientMethod<TMethodName>>>,\n>(\n\tmethodName: TMethodName,\n\targs: TArgs,\n\texplicitClient?: prismic.Client,\n): ClientHookReturnType<TData> => {\n\tconst lastArg = args[args.length - 1];\n\tconst {\n\t\tclient: lastArgExplicitClient,\n\t\tskip,\n\t\t...params\n\t} = isParams(lastArg) ? lastArg : ({} as HookOnlyParameters);\n\tconst argsWithoutParams = isParams(lastArg) ? args.slice(0, -1) : args;\n\n\tconst client = usePrismicClient(explicitClient || lastArgExplicitClient);\n\n\tconst [state, dispatch] = React.useReducer<\n\t\tReact.Reducer<StateMachineState<TData>, StateMachineAction<TData>>\n\t>(reducer, initialState);\n\n\tReact.useEffect(\n\t\t() => {\n\t\t\t// Used to prevent dispatching an action if the hook was cleaned up.\n\t\t\tlet didCancel = false;\n\n\t\t\tif (!skip) {\n\t\t\t\tif (!didCancel) {\n\t\t\t\t\tdispatch([\"start\"]);\n\t\t\t\t}\n\n\t\t\t\tclient[methodName]\n\t\t\t\t\t.call(\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\t// @ts-expect-error - Merging method arg types is too complex\n\t\t\t\t\t\t...argsWithoutParams,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t)\n\t\t\t\t\t.then((result) => {\n\t\t\t\t\t\tif (!didCancel) {\n\t\t\t\t\t\t\tdispatch([\"succeed\", result as TData]);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tif (!didCancel) {\n\t\t\t\t\t\t\tdispatch([\"fail\", error]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Ensure we don't dispatch an action if the hook is cleaned up.\n\t\t\t() => {\n\t\t\t\tdidCancel = true;\n\t\t\t};\n\t\t},\n\t\t// We must disable exhaustive-deps since we are using\n\t\t// JSON.stringify on params (effectively a deep equality check).\n\t\t// We want this effect to run again anytime params change.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[\n\t\t\tclient,\n\t\t\tmethodName,\n\t\t\tskip,\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t\tJSON.stringify(argsWithoutParams),\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t\tJSON.stringify(params),\n\t\t],\n\t);\n\n\treturn React.useMemo(\n\t\t() => [\n\t\t\tstate.data,\n\t\t\t{\n\t\t\t\tstate: state.state,\n\t\t\t\terror: state.error,\n\t\t\t},\n\t\t],\n\t\t[state],\n\t);\n};\n"],"names":[],"mappings":";;AAkBA,MAAM,UAAU,CACf,OACA,WAC6B;AAC7B,UAAQ,OAAO,IAAI;AAAA,IAClB,KAAK,SAAS;AACN,aAAA,EAAE,OAAO;IAChB;AAAA,IAED,KAAK,WAAW;AACf,aAAO,EAAE,OAAO,UAAU,MAAM,OAAO;IACvC;AAAA,IAED,KAAK,QAAQ;AACL,aAAA;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,MAAA;AAAA,IAEf;AAAA,EACD;AACF;AAEA,MAAM,eAAyC;AAAA,EAC9C,OAAO;;AAuCR,MAAM,WAAW,CAChB,UACmE;AAE5D,SAAA,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC3E;AA+BO,MAAM,iCAAiC,CAK7C,YACA,MACA,mBACgC;AAC1B,QAAA,UAAU,KAAK,KAAK,SAAS;AAC7B,QAAA,EACL,QAAQ,uBACR,SACG,WACA,SAAS,OAAO,IAAI,UAAW;AAC7B,QAAA,oBAAoB,SAAS,OAAO,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI;AAE5D,QAAA,SAAS,iBAAiB,kBAAkB,qBAAqB;AAEvE,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,WAE9B,SAAS,YAAY;AAEjB,QAAA;AAAA,IACL,MAAK;AAIJ,UAAI,CAAC,MAAM;AACM;AACN,mBAAA,CAAC,OAAO,CAAC;AAAA,QAClB;AAED,eAAO,YACL;AAAA,UACA;AAAA,UAEA,GAAG;AAAA,UACH;AAAA,QAAA,EAEA,KAAK,CAAC,WAAU;AACA;AACN,qBAAA,CAAC,WAAW,MAAe,CAAC;AAAA,UACrC;AAAA,QAAA,CACD,EACA,MAAM,CAAC,UAAS;AACA;AACN,qBAAA,CAAC,QAAQ,KAAK,CAAC;AAAA,UACxB;AAAA,QAAA,CACD;AAAA,MACF;AAAA,IAMF;AAAA,IAKA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MAEA,KAAK,UAAU,iBAAiB;AAAA,MAEhC,KAAK,UAAU,MAAM;AAAA,IACrB;AAAA,EAAA;AAGK,SAAA,MAAM,QACZ,MAAM;AAAA,IACL,MAAM;AAAA,IACN;AAAA,MACC,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACb;AAAA,EAAA,GAEF,CAAC,KAAK,CAAC;AAET;"}
1
+ {"version":3,"file":"useStatefulPrismicClientMethod.js","sources":["../../src/useStatefulPrismicClientMethod.ts"],"sourcesContent":["import type * as prismic from \"@prismicio/client\";\n\nimport * as React from \"react\";\n\nimport { PrismicClientHookState } from \"./types\";\nimport { usePrismicClient } from \"./usePrismicClient\";\n\ntype StateMachineState<TData> = {\n\tstate: PrismicClientHookState;\n\tdata?: TData;\n\terror?: Error;\n};\n\ntype StateMachineAction<TData> =\n\t| [type: \"start\"]\n\t| [type: \"succeed\", payload: TData]\n\t| [type: \"fail\", payload: Error];\n\nconst reducer = <TData>(\n\tstate: StateMachineState<TData>,\n\taction: StateMachineAction<TData>,\n): StateMachineState<TData> => {\n\tswitch (action[0]) {\n\t\tcase \"start\": {\n\t\t\treturn { state: \"loading\" };\n\t\t}\n\n\t\tcase \"succeed\": {\n\t\t\treturn { state: \"loaded\", data: action[1] };\n\t\t}\n\n\t\tcase \"fail\": {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tstate: \"failed\",\n\t\t\t\terror: action[1],\n\t\t\t};\n\t\t}\n\t}\n};\n\nconst initialState: StateMachineState<never> = {\n\tstate: \"idle\",\n};\n\ntype UnwrapPromise<T> = T extends Promise<infer U> ? U : T;\n\ntype ClientPrototype = typeof prismic.Client.prototype;\n\ntype ClientMethod<MethodName extends keyof ClientPrototype> =\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tClientPrototype[MethodName] extends (...args: any[]) => any\n\t\t? ClientPrototype[MethodName]\n\t\t: never;\n\ntype ClientMethodName = keyof {\n\t[P in keyof prismic.Client as prismic.Client[P] extends (\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t...args: any[]\n\t) => // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tPromise<any>\n\t\t? P\n\t\t: never]: unknown;\n};\n\nexport type ClientMethodParameters<MethodName extends keyof ClientPrototype> =\n\tParameters<ClientMethod<MethodName>>;\n\nexport type HookOnlyParameters = {\n\tclient?: prismic.Client;\n\tskip?: boolean;\n};\n\n/**\n * Determines if a value is a `@prismicio/client` params object.\n *\n * @param value - The value to check.\n *\n * @returns `true` if `value` is a `@prismicio/client` params object, `false`\n * otherwise.\n */\nconst isParams = (\n\tvalue: unknown,\n): value is ClientMethodParameters<\"get\">[0] & HookOnlyParameters => {\n\t// This is a *very* naive check.\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n};\n\n/**\n * The return value of a `@prismicio/client` React hook.\n *\n * @typeParam TData - Data returned by the client.\n */\nexport type ClientHookReturnType<TData = unknown> = [\n\t/**\n\t * Data returned by the client.\n\t */\n\tdata: TData | undefined,\n\n\t/**\n\t * The current state of the hook's client method call.\n\t */\n\tstate: Pick<StateMachineState<TData>, \"state\" | \"error\">,\n];\n\n/**\n * Creates a React hook that forwards arguments to a specific method of a\n * `@prismicio/client` instance. The created hook has its own internal state\n * manager to report async status, such as pending or error statuses.\n *\n * @param methodName - The `@prismicio/client` method to which hook arguments\n * will be forwarded.\n *\n * @returns A new React hook configured for the provided method.\n *\n * @internal\n */\nexport const useStatefulPrismicClientMethod = <\n\tTMethodName extends ClientMethodName,\n\tTArgs extends Parameters<ClientMethod<TMethodName>>,\n\tTData extends UnwrapPromise<ReturnType<ClientMethod<TMethodName>>>,\n>(\n\tmethodName: TMethodName,\n\targs: TArgs,\n\texplicitClient?: prismic.Client,\n): ClientHookReturnType<TData> => {\n\tconst lastArg = args[args.length - 1];\n\tconst {\n\t\tclient: lastArgExplicitClient,\n\t\tskip,\n\t\t...params\n\t} = isParams(lastArg) ? lastArg : ({} as HookOnlyParameters);\n\tconst argsWithoutParams = isParams(lastArg) ? args.slice(0, -1) : args;\n\n\tconst client = usePrismicClient(explicitClient || lastArgExplicitClient);\n\n\tconst [state, dispatch] = React.useReducer<\n\t\tReact.Reducer<StateMachineState<TData>, StateMachineAction<TData>>\n\t>(reducer, initialState);\n\n\tReact.useEffect(\n\t\t() => {\n\t\t\t// Used to prevent dispatching an action if the hook was cleaned up.\n\t\t\tlet didCancel = false;\n\n\t\t\tif (!skip) {\n\t\t\t\tif (!didCancel) {\n\t\t\t\t\tdispatch([\"start\"]);\n\t\t\t\t}\n\n\t\t\t\tclient[methodName]\n\t\t\t\t\t.call(\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\t// @ts-expect-error - Merging method arg types is too complex\n\t\t\t\t\t\t...argsWithoutParams,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t)\n\t\t\t\t\t.then((result) => {\n\t\t\t\t\t\tif (!didCancel) {\n\t\t\t\t\t\t\tdispatch([\"succeed\", result as TData]);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\tif (!didCancel) {\n\t\t\t\t\t\t\tdispatch([\"fail\", error]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Ensure we don't dispatch an action if the hook is cleaned up.\n\t\t\t() => {\n\t\t\t\tdidCancel = true;\n\t\t\t};\n\t\t},\n\t\t// We must disable exhaustive-deps since we are using\n\t\t// JSON.stringify on params (effectively a deep equality check).\n\t\t// We want this effect to run again anytime params change.\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[\n\t\t\tclient,\n\t\t\tmethodName,\n\t\t\tskip,\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t\tJSON.stringify(argsWithoutParams),\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t\tJSON.stringify(params),\n\t\t],\n\t);\n\n\treturn React.useMemo(\n\t\t() => [\n\t\t\tstate.data,\n\t\t\t{\n\t\t\t\tstate: state.state,\n\t\t\t\terror: state.error,\n\t\t\t},\n\t\t],\n\t\t[state],\n\t);\n};\n"],"names":[],"mappings":";;AAkBA,MAAM,UAAU,CACf,OACA,WAC6B;AACrB,UAAA,OAAO,CAAC,GAAG;AAAA,IAClB,KAAK,SAAS;AACN,aAAA,EAAE,OAAO;IAChB;AAAA,IAED,KAAK,WAAW;AACf,aAAO,EAAE,OAAO,UAAU,MAAM,OAAO,CAAC;IACxC;AAAA,IAED,KAAK,QAAQ;AACL,aAAA;AAAA,QACN,GAAG;AAAA,QACH,OAAO;AAAA,QACP,OAAO,OAAO,CAAC;AAAA,MAAA;AAAA,IAEhB;AAAA,EACD;AACF;AAEA,MAAM,eAAyC;AAAA,EAC9C,OAAO;;AAuCR,MAAM,WAAW,CAChB,UACmE;AAE5D,SAAA,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC3E;AA+BO,MAAM,iCAAiC,CAK7C,YACA,MACA,mBACgC;AAChC,QAAM,UAAU,KAAK,KAAK,SAAS,CAAC;AAC9B,QAAA,EACL,QAAQ,uBACR,MACA,GAAG,WACA,SAAS,OAAO,IAAI,UAAW;AAC7B,QAAA,oBAAoB,SAAS,OAAO,IAAI,KAAK,MAAM,GAAG,EAAE,IAAI;AAE5D,QAAA,SAAS,iBAAiB,kBAAkB,qBAAqB;AAEvE,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,WAE9B,SAAS,YAAY;AAEjB,QAAA;AAAA,IACL,MAAK;AAIJ,UAAI,CAAC,MAAM;AACM;AACN,mBAAA,CAAC,OAAO,CAAC;AAAA,QAClB;AAED,eAAO,UAAU,EACf;AAAA,UACA;AAAA,UAEA,GAAG;AAAA,UACH;AAAA,QAAA,EAEA,KAAK,CAAC,WAAU;AACA;AACN,qBAAA,CAAC,WAAW,MAAe,CAAC;AAAA,UACrC;AAAA,QAAA,CACD,EACA,MAAM,CAAC,UAAS;AACA;AACN,qBAAA,CAAC,QAAQ,KAAK,CAAC;AAAA,UACxB;AAAA,QAAA,CACD;AAAA,MACF;AAAA,IAMF;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA,KAAK,UAAU,iBAAiB;AAAA;AAAA,MAEhC,KAAK,UAAU,MAAM;AAAA,IACrB;AAAA,EAAA;AAGK,SAAA,MAAM,QACZ,MAAM;AAAA,IACL,MAAM;AAAA,IACN;AAAA,MACC,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACb;AAAA,EAAA,GAEF,CAAC,KAAK,CAAC;AAET;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prismicio/react",
3
- "version": "2.5.2",
3
+ "version": "2.6.0-alpha.1",
4
4
  "description": "React components and hooks to fetch and present Prismic content",
5
5
  "keywords": [
6
6
  "typescript",
@@ -18,15 +18,21 @@
18
18
  "sideEffects": false,
19
19
  "exports": {
20
20
  ".": {
21
- "require": "./dist/index.cjs",
22
- "import": "./dist/index.js"
21
+ "react-server": {
22
+ "import": "./dist/react-server.js",
23
+ "require": "./dist/react-server.cjs"
24
+ },
25
+ "default": {
26
+ "import": "./dist/index.js",
27
+ "require": "./dist/index.cjs"
28
+ }
23
29
  },
24
30
  "./package.json": "./package.json"
25
31
  },
26
- "main": "dist/index.cjs",
27
- "module": "dist/index.js",
28
- "react-native": "dist/index.js",
29
- "types": "dist/index.d.ts",
32
+ "main": "./dist/index.cjs",
33
+ "module": "./dist/index.js",
34
+ "react-native": "./dist/index.js",
35
+ "types": "./dist/index.d.ts",
30
36
  "files": [
31
37
  "dist",
32
38
  "src"
@@ -36,68 +42,57 @@
36
42
  "dev": "vite build --watch",
37
43
  "format": "prettier --write .",
38
44
  "lint": "eslint --ext .js,.jsx,.ts,.tsx .",
45
+ "types": "tsc --noEmit",
39
46
  "prepare": "npm run build",
40
47
  "release": "npm run build && npm run test && standard-version && git push --follow-tags && npm run build && npm publish",
41
48
  "release:alpha": "npm run build && npm run test && standard-version --release-as minor --prerelease alpha && git push --follow-tags && npm run build && npm publish --tag alpha",
42
49
  "release:alpha:dry": "standard-version --release-as minor --prerelease alpha --dry-run",
43
50
  "release:dry": "standard-version --dry-run",
44
- "unit": "nyc --reporter=lcovonly --reporter=text --exclude-after-remap=false ava",
51
+ "unit": "vitest run --coverage",
52
+ "unit:watch": "vitest watch",
45
53
  "size": "size-limit",
46
- "test": "npm run lint && npm run unit && npm run build && npm run size"
54
+ "test": "npm run lint && npm run types && npm run unit && npm run build && npm run size"
47
55
  },
48
56
  "dependencies": {
49
- "@prismicio/helpers": "^2.3.8",
50
- "@prismicio/richtext": "^2.1.3",
51
- "@prismicio/types": "^0.2.7"
57
+ "@prismicio/client": "^7.0.0-alpha.2",
58
+ "@prismicio/richtext": "^2.1.4"
52
59
  },
53
60
  "devDependencies": {
54
- "@prismicio/client": "^6.7.3",
55
- "@prismicio/mock": "^0.1.1",
56
- "@size-limit/preset-small-lib": "^8.1.0",
57
- "@testing-library/react": "^13.4.0",
58
- "@types/jsdom": "^20.0.1",
61
+ "@prismicio/mock": "^0.2.0",
62
+ "@size-limit/preset-small-lib": "^8.2.4",
63
+ "@testing-library/react": "^14.0.0",
59
64
  "@types/node-fetch": "^3.0.3",
60
- "@types/react": "^18.0.26",
65
+ "@types/react": "^18.0.38",
61
66
  "@types/react-test-renderer": "^18.0.0",
62
- "@types/sinon": "^10.0.13",
63
- "@typescript-eslint/eslint-plugin": "^5.47.0",
64
- "@typescript-eslint/parser": "^5.47.0",
65
- "@vitejs/plugin-react": "^3.0.0",
66
- "ava": "^5.1.0",
67
- "browser-env": "^3.3.0",
68
- "esbuild": "^0.16.9",
69
- "esbuild-register": "^3.4.2",
70
- "eslint": "^8.30.0",
71
- "eslint-config-prettier": "^8.5.0",
67
+ "@typescript-eslint/eslint-plugin": "^5.59.0",
68
+ "@typescript-eslint/parser": "^5.59.0",
69
+ "@vitejs/plugin-react": "^4.0.0",
70
+ "@vitest/coverage-c8": "^0.30.1",
71
+ "eslint": "^8.39.0",
72
+ "eslint-config-prettier": "^8.8.0",
72
73
  "eslint-plugin-prettier": "^4.2.1",
73
- "eslint-plugin-react": "^7.31.11",
74
+ "eslint-plugin-react": "^7.32.2",
74
75
  "eslint-plugin-react-hooks": "^4.6.0",
75
76
  "eslint-plugin-tsdoc": "^0.2.17",
76
- "global-jsdom": "^8.6.0",
77
- "jsdom": "^20.0.3",
78
- "msw": "^0.49.2",
79
- "node-fetch": "^3.3.0",
80
- "nyc": "^15.1.0",
81
- "prettier": "^2.8.1",
77
+ "happy-dom": "^9.9.2",
78
+ "msw": "^1.2.1",
79
+ "node-fetch": "^3.3.1",
80
+ "prettier": "^2.8.7",
82
81
  "prettier-plugin-jsdoc": "^0.4.2",
83
82
  "react": "^18.2.0",
84
83
  "react-dom": "^18.2.0",
85
84
  "react-test-renderer": "^18.2.0",
86
- "sinon": "^15.0.1",
87
- "size-limit": "^8.1.0",
85
+ "rollup-plugin-preserve-directives": "^0.1.0",
86
+ "size-limit": "^8.2.4",
88
87
  "standard-version": "^9.5.0",
89
- "typescript": "^4.9.4",
90
- "vite": "^4.0.2",
91
- "vite-plugin-sdk": "^0.1.0"
88
+ "typescript": "^5.0.4",
89
+ "vite": "^4.3.1",
90
+ "vite-plugin-sdk": "^0.1.1",
91
+ "vitest": "^0.30.1"
92
92
  },
93
93
  "peerDependencies": {
94
- "@prismicio/client": "^6",
95
- "react": "^16.8 || ^17 || ^18"
96
- },
97
- "peerDependenciesMeta": {
98
- "@prismicio/client": {
99
- "optional": true
100
- }
94
+ "@prismicio/client": "^6 || ^7",
95
+ "react": "^18"
101
96
  },
102
97
  "engines": {
103
98
  "node": ">=12.7.0"
@@ -1,6 +1,5 @@
1
1
  import * as React from "react";
2
- import * as prismicT from "@prismicio/types";
3
- import * as prismicH from "@prismicio/helpers";
2
+ import * as prismic from "@prismicio/client";
4
3
 
5
4
  import { __PRODUCTION__ } from "./lib/__PRODUCTION__";
6
5
  import { devMsg } from "./lib/devMsg";
@@ -18,14 +17,14 @@ export type PrismicImageProps = Omit<
18
17
  /**
19
18
  * The Prismic Image field or thumbnail to render.
20
19
  */
21
- field: prismicT.ImageFieldImage | null | undefined;
20
+ field: prismic.ImageFieldImage | null | undefined;
22
21
 
23
22
  /**
24
23
  * An object of Imgix URL API parameters to transform the image.
25
24
  *
26
25
  * See: https://docs.imgix.com/apis/rendering
27
26
  */
28
- imgixParams?: Parameters<typeof prismicH.asImageSrc>[1];
27
+ imgixParams?: Parameters<typeof prismic.asImageSrc>[1];
29
28
 
30
29
  /**
31
30
  * Declare an image as decorative by providing `alt=""`.
@@ -58,7 +57,7 @@ export type PrismicImageProps = Omit<
58
57
  */
59
58
  widths?:
60
59
  | NonNullable<
61
- Parameters<typeof prismicH.asImageWidthSrcSet>[1]
60
+ Parameters<typeof prismic.asImageWidthSrcSet>[1]
62
61
  >["widths"]
63
62
  | "defaults";
64
63
  /**
@@ -79,16 +78,35 @@ export type PrismicImageProps = Omit<
79
78
  */
80
79
  pixelDensities:
81
80
  | NonNullable<
82
- Parameters<typeof prismicH.asImagePixelDensitySrcSet>[1]
81
+ Parameters<typeof prismic.asImagePixelDensitySrcSet>[1]
83
82
  >["pixelDensities"]
84
83
  | "defaults";
85
84
  }
86
85
  );
87
86
 
88
- const _PrismicImage = (
87
+ /**
88
+ * React component that renders an image from a Prismic Image field or one of
89
+ * its thumbnails. It will automatically set the `alt` attribute using the Image
90
+ * field's `alt` property.
91
+ *
92
+ * By default, a widths-based srcset will be used to support responsive images.
93
+ * This ensures only the smallest image needed for a browser is downloaded.
94
+ *
95
+ * To use a pixel-density-based srcset, use the `pixelDensities` prop. Default
96
+ * pixel densities can be used by using `pixelDensities="defaults"`.
97
+ *
98
+ * **Note**: If you are using a framework that has a native image component,
99
+ * such as Next.js and Gatsby, prefer using those image components instead. They
100
+ * can provide deeper framework integration than `<PrismicImage>`.
101
+ *
102
+ * @param props - Props for the component.
103
+ *
104
+ * @returns A responsive image component for the given Image field.
105
+ */
106
+ export const PrismicImage = React.forwardRef(function PrismicImage(
89
107
  props: PrismicImageProps,
90
108
  ref: React.ForwardedRef<HTMLImageElement>,
91
- ): JSX.Element | null => {
109
+ ): JSX.Element | null {
92
110
  const {
93
111
  field,
94
112
  alt,
@@ -123,12 +141,12 @@ const _PrismicImage = (
123
141
  }
124
142
  }
125
143
 
126
- if (prismicH.isFilled.imageThumbnail(field)) {
144
+ if (prismic.isFilled.imageThumbnail(field)) {
127
145
  let src: string | undefined;
128
146
  let srcSet: string | undefined;
129
147
 
130
148
  if (widths || !pixelDensities) {
131
- const res = prismicH.asImageWidthSrcSet(field, {
149
+ const res = prismic.asImageWidthSrcSet(field, {
132
150
  ...imgixParams,
133
151
  widths: widths === "defaults" ? undefined : widths,
134
152
  });
@@ -136,7 +154,7 @@ const _PrismicImage = (
136
154
  src = res.src;
137
155
  srcSet = res.srcset;
138
156
  } else if (pixelDensities) {
139
- const res = prismicH.asImagePixelDensitySrcSet(field, {
157
+ const res = prismic.asImagePixelDensitySrcSet(field, {
140
158
  ...imgixParams,
141
159
  pixelDensities:
142
160
  pixelDensities === "defaults" ? undefined : pixelDensities,
@@ -158,29 +176,4 @@ const _PrismicImage = (
158
176
  } else {
159
177
  return null;
160
178
  }
161
- };
162
-
163
- if (!__PRODUCTION__) {
164
- _PrismicImage.displayName = "PrismicImage";
165
- }
166
-
167
- /**
168
- * React component that renders an image from a Prismic Image field or one of
169
- * its thumbnails. It will automatically set the `alt` attribute using the Image
170
- * field's `alt` property.
171
- *
172
- * By default, a widths-based srcset will be used to support responsive images.
173
- * This ensures only the smallest image needed for a browser is downloaded.
174
- *
175
- * To use a pixel-density-based srcset, use the `pixelDensities` prop. Default
176
- * pixel densities can be used by using `pixelDensities="defaults"`.
177
- *
178
- * **Note**: If you are using a framework that has a native image component,
179
- * such as Next.js and Gatsby, prefer using those image components instead. They
180
- * can provide deeper framework integration than `<PrismicImage>`.
181
- *
182
- * @param props - Props for the component.
183
- *
184
- * @returns A responsive image component for the given Image field.
185
- */
186
- export const PrismicImage = React.forwardRef(_PrismicImage);
179
+ });