@prismicio/react 2.5.0 → 2.5.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.
- package/dist/PrismicImage.cjs +67 -0
- package/dist/PrismicImage.cjs.map +1 -0
- package/dist/PrismicImage.d.ts +163 -0
- package/dist/PrismicImage.js +49 -0
- package/dist/PrismicImage.js.map +1 -0
- package/dist/PrismicLink.cjs +91 -0
- package/dist/PrismicLink.cjs.map +1 -0
- package/dist/PrismicLink.d.ts +105 -0
- package/dist/PrismicLink.js +73 -0
- package/dist/PrismicLink.js.map +1 -0
- package/dist/PrismicProvider.cjs +41 -0
- package/dist/PrismicProvider.cjs.map +1 -0
- package/dist/PrismicProvider.d.ts +84 -0
- package/dist/PrismicProvider.js +24 -0
- package/dist/PrismicProvider.js.map +1 -0
- package/dist/PrismicRichText.cjs +97 -0
- package/dist/PrismicRichText.cjs.map +1 -0
- package/dist/PrismicRichText.d.ts +116 -0
- package/dist/PrismicRichText.js +78 -0
- package/dist/PrismicRichText.js.map +1 -0
- package/dist/PrismicText.cjs +42 -0
- package/dist/PrismicText.cjs.map +1 -0
- package/dist/PrismicText.d.ts +39 -0
- package/dist/PrismicText.js +24 -0
- package/dist/PrismicText.js.map +1 -0
- package/dist/PrismicToolbar.cjs +41 -0
- package/dist/PrismicToolbar.cjs.map +1 -0
- package/dist/PrismicToolbar.d.ts +21 -0
- package/dist/PrismicToolbar.js +24 -0
- package/dist/PrismicToolbar.js.map +1 -0
- package/dist/SliceZone.cjs +58 -0
- package/dist/SliceZone.cjs.map +1 -0
- package/dist/SliceZone.d.ts +188 -0
- package/dist/SliceZone.js +41 -0
- package/dist/SliceZone.js.map +1 -0
- package/dist/clientHooks.cjs +40 -0
- package/dist/clientHooks.cjs.map +1 -0
- package/dist/clientHooks.d.ts +357 -0
- package/dist/clientHooks.js +40 -0
- package/dist/clientHooks.js.map +1 -0
- package/dist/index.cjs +46 -574
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +46 -1290
- package/dist/index.js +46 -519
- package/dist/index.js.map +1 -1
- package/dist/lib/__PRODUCTION__.cjs +8 -0
- package/dist/lib/__PRODUCTION__.cjs.map +1 -0
- package/dist/lib/__PRODUCTION__.d.ts +7 -0
- package/dist/lib/__PRODUCTION__.js +8 -0
- package/dist/lib/__PRODUCTION__.js.map +1 -0
- package/dist/lib/devMsg.cjs +8 -0
- package/dist/lib/devMsg.cjs.map +1 -0
- package/dist/lib/devMsg.d.ts +16 -0
- package/dist/lib/devMsg.js +8 -0
- package/dist/lib/devMsg.js.map +1 -0
- package/dist/lib/invariant.cjs +15 -0
- package/dist/lib/invariant.cjs.map +1 -0
- package/dist/lib/invariant.d.ts +24 -0
- package/dist/lib/invariant.js +15 -0
- package/dist/lib/invariant.js.map +1 -0
- package/dist/lib/isInternalURL.cjs +9 -0
- package/dist/lib/isInternalURL.cjs.map +1 -0
- package/dist/lib/isInternalURL.d.ts +8 -0
- package/dist/lib/isInternalURL.js +9 -0
- package/dist/lib/isInternalURL.js.map +1 -0
- package/dist/lib/pascalCase.cjs +10 -0
- package/dist/lib/pascalCase.cjs.map +1 -0
- package/dist/lib/pascalCase.d.ts +26 -0
- package/dist/lib/pascalCase.js +10 -0
- package/dist/lib/pascalCase.js.map +1 -0
- package/dist/package.json.cjs +5 -0
- package/dist/package.json.cjs.map +1 -0
- package/dist/package.json.js +5 -0
- package/dist/package.json.js.map +1 -0
- package/dist/types.d.ts +19 -0
- package/dist/usePrismicClient.cjs +12 -0
- package/dist/usePrismicClient.cjs.map +1 -0
- package/dist/usePrismicClient.d.ts +11 -0
- package/dist/usePrismicClient.js +12 -0
- package/dist/usePrismicClient.js.map +1 -0
- package/dist/usePrismicContext.cjs +26 -0
- package/dist/usePrismicContext.cjs.map +1 -0
- package/dist/usePrismicContext.d.ts +8 -0
- package/dist/usePrismicContext.js +9 -0
- package/dist/usePrismicContext.js.map +1 -0
- package/dist/usePrismicPreviewResolver.cjs +44 -0
- package/dist/usePrismicPreviewResolver.cjs.map +1 -0
- package/dist/usePrismicPreviewResolver.d.ts +45 -0
- package/dist/usePrismicPreviewResolver.js +27 -0
- package/dist/usePrismicPreviewResolver.js.map +1 -0
- package/dist/useStatefulPrismicClientMethod.cjs +89 -0
- package/dist/useStatefulPrismicClientMethod.cjs.map +1 -0
- package/dist/useStatefulPrismicClientMethod.d.ts +44 -0
- package/dist/useStatefulPrismicClientMethod.js +72 -0
- package/dist/useStatefulPrismicClientMethod.js.map +1 -0
- package/package.json +43 -41
- package/src/PrismicImage.tsx +2 -1
- package/src/PrismicProvider.tsx +6 -3
- package/src/PrismicText.tsx +2 -1
- package/src/SliceZone.tsx +8 -4
- package/src/clientHooks.ts +52 -44
- package/src/useStatefulPrismicClientMethod.ts +2 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { invariant } from "./lib/invariant.js";
|
|
2
|
+
import { usePrismicContext } from "./usePrismicContext.js";
|
|
3
|
+
const usePrismicClient = (explicitClient) => {
|
|
4
|
+
const context = usePrismicContext();
|
|
5
|
+
const client = explicitClient || (context == null ? void 0 : context.client);
|
|
6
|
+
invariant(client, "A @prismicio/client is required to query documents. Provide a client to the hook or to a <PrismicProvider> higher in your component tree.");
|
|
7
|
+
return client;
|
|
8
|
+
};
|
|
9
|
+
export {
|
|
10
|
+
usePrismicClient
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=usePrismicClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePrismicClient.js","sources":["../../src/usePrismicClient.ts"],"sourcesContent":["import type * as prismic from \"@prismicio/client\";\n\nimport { invariant } from \"./lib/invariant\";\n\nimport { usePrismicContext } from \"./usePrismicContext\";\n\n/**\n * Retrieve the `@prismicio/client` instance provided to `<PrismicProvider>`\n * higher in the React tree.\n *\n * @param explicitClient - An optional `@prismicio/client` instance to override\n * the Client provided to `<PrismicProvider>`.\n *\n * @returns The `@prismicio/client` instance provided to `<PrismicProvider>`.\n */\nexport const usePrismicClient = (\n\texplicitClient?: prismic.Client,\n): prismic.Client => {\n\tconst context = usePrismicContext();\n\n\tconst client = explicitClient || context?.client;\n\tinvariant(\n\t\tclient,\n\t\t\"A @prismicio/client is required to query documents. Provide a client to the hook or to a <PrismicProvider> higher in your component tree.\",\n\t);\n\n\treturn client;\n};\n"],"names":[],"mappings":";;AAea,MAAA,mBAAmB,CAC/B,mBACmB;AACnB,QAAM,UAAU;AAEV,QAAA,SAAS,mBAAkB,mCAAS;AAC1C,YACC,QACA,2IAA2I;AAGrI,SAAA;AACR;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const PrismicProvider = require("./PrismicProvider.cjs");
|
|
5
|
+
function _interopNamespaceDefault(e) {
|
|
6
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
7
|
+
if (e) {
|
|
8
|
+
for (const k in e) {
|
|
9
|
+
if (k !== "default") {
|
|
10
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
11
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: () => e[k]
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
n.default = e;
|
|
19
|
+
return Object.freeze(n);
|
|
20
|
+
}
|
|
21
|
+
const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
|
|
22
|
+
const usePrismicContext = () => {
|
|
23
|
+
return React__namespace.useContext(PrismicProvider.PrismicContext) || {};
|
|
24
|
+
};
|
|
25
|
+
exports.usePrismicContext = usePrismicContext;
|
|
26
|
+
//# sourceMappingURL=usePrismicContext.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePrismicContext.cjs","sources":["../../src/usePrismicContext.ts"],"sourcesContent":["import * as React from \"react\";\n\nimport { PrismicContext, PrismicContextValue } from \"./PrismicProvider\";\n\n/**\n * React hook used to read shared configuration for `@prismicio/react`\n * components and hooks.\n *\n * @returns The closest `<PrismicProvider>` context value.\n */\nexport const usePrismicContext = (): PrismicContextValue => {\n\treturn React.useContext(PrismicContext) || {};\n};\n"],"names":["React","PrismicContext"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAUO,MAAM,oBAAoB,MAA0B;AAC1D,SAAOA,iBAAM,WAAWC,gBAAc,cAAA,KAAK,CAAA;AAC5C;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PrismicContextValue } from "./PrismicProvider";
|
|
2
|
+
/**
|
|
3
|
+
* React hook used to read shared configuration for `@prismicio/react`
|
|
4
|
+
* components and hooks.
|
|
5
|
+
*
|
|
6
|
+
* @returns The closest `<PrismicProvider>` context value.
|
|
7
|
+
*/
|
|
8
|
+
export declare const usePrismicContext: () => PrismicContextValue;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePrismicContext.js","sources":["../../src/usePrismicContext.ts"],"sourcesContent":["import * as React from \"react\";\n\nimport { PrismicContext, PrismicContextValue } from \"./PrismicProvider\";\n\n/**\n * React hook used to read shared configuration for `@prismicio/react`\n * components and hooks.\n *\n * @returns The closest `<PrismicProvider>` context value.\n */\nexport const usePrismicContext = (): PrismicContextValue => {\n\treturn React.useContext(PrismicContext) || {};\n};\n"],"names":[],"mappings":";;AAUO,MAAM,oBAAoB,MAA0B;AAC1D,SAAO,MAAM,WAAW,cAAc,KAAK,CAAA;AAC5C;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const usePrismicContext = require("./usePrismicContext.cjs");
|
|
5
|
+
const useStatefulPrismicClientMethod = require("./useStatefulPrismicClientMethod.cjs");
|
|
6
|
+
function _interopNamespaceDefault(e) {
|
|
7
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
8
|
+
if (e) {
|
|
9
|
+
for (const k in e) {
|
|
10
|
+
if (k !== "default") {
|
|
11
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: () => e[k]
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
n.default = e;
|
|
20
|
+
return Object.freeze(n);
|
|
21
|
+
}
|
|
22
|
+
const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
|
|
23
|
+
const usePrismicPreviewResolver = (args = {}) => {
|
|
24
|
+
const context = usePrismicContext.usePrismicContext();
|
|
25
|
+
const linkResolver = args.linkResolver || context.linkResolver;
|
|
26
|
+
const result = useStatefulPrismicClientMethod.useStatefulPrismicClientMethod("resolvePreviewURL", [
|
|
27
|
+
{
|
|
28
|
+
linkResolver,
|
|
29
|
+
defaultURL: args.defaultURL || "/",
|
|
30
|
+
previewToken: args.previewToken,
|
|
31
|
+
documentID: args.documentID
|
|
32
|
+
}
|
|
33
|
+
], args.client);
|
|
34
|
+
const [resolvedURL] = result;
|
|
35
|
+
const { navigate } = args;
|
|
36
|
+
React__namespace.useEffect(() => {
|
|
37
|
+
if (resolvedURL && navigate) {
|
|
38
|
+
navigate(resolvedURL);
|
|
39
|
+
}
|
|
40
|
+
}, [resolvedURL, navigate]);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
exports.usePrismicPreviewResolver = usePrismicPreviewResolver;
|
|
44
|
+
//# sourceMappingURL=usePrismicPreviewResolver.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePrismicPreviewResolver.cjs","sources":["../../src/usePrismicPreviewResolver.ts"],"sourcesContent":["import type * as prismic from \"@prismicio/client\";\n\nimport * as React from \"react\";\n\nimport { usePrismicContext } from \"./usePrismicContext\";\nimport {\n\tClientHookReturnType,\n\tuseStatefulPrismicClientMethod,\n} from \"./useStatefulPrismicClientMethod\";\n\nexport type UsePrismicPreviewResolverArgs = {\n\t/**\n\t * An optional `@prismicio/client` instance to override the Client provided to\n\t * `<PrismicProvider>`\n\t */\n\tclient?: prismic.Client;\n\n\t/**\n\t * A function that maps a Prismic document to a URL within your app.\n\t */\n\tlinkResolver?: Parameters<\n\t\tprismic.Client[\"resolvePreviewURL\"]\n\t>[0][\"linkResolver\"];\n\n\t/**\n\t * A fallback URL if the Link Resolver does not return a value.\n\t */\n\tdefaultURL?: Parameters<prismic.Client[\"resolvePreviewURL\"]>[0][\"defaultURL\"];\n\n\t/**\n\t * The preview token (also known as a ref) that will be used to query preview\n\t * content from the Prismic repository.\n\t */\n\tpreviewToken?: Parameters<\n\t\tprismic.Client[\"resolvePreviewURL\"]\n\t>[0][\"previewToken\"];\n\n\t/**\n\t * The previewed document that will be used to determine the destination URL.\n\t */\n\tdocumentID?: Parameters<prismic.Client[\"resolvePreviewURL\"]>[0][\"documentID\"];\n\n\t/**\n\t * A function to automatically navigate to the resolved URL. If a function is\n\t * not provded, `usePreviewResolver` will not navigate to the URL.\n\t *\n\t * @param url - The resolved preview URL.\n\t */\n\tnavigate?: (url: string) => unknown;\n};\n\n/**\n * Resolve a preview session's URL. The resolved URL can be used to redirect to\n * the previewed document.\n *\n * If a `navigate` function is provided, the hook will automatically navigate to\n * the previewed document's URL.\n *\n * @param args - Arguments to configure how a URL is resolved.\n *\n * @returns A tuple containing the resolved URL and the hook's state.\n */\nexport const usePrismicPreviewResolver = (\n\targs: UsePrismicPreviewResolverArgs = {},\n): ClientHookReturnType<string> => {\n\tconst context = usePrismicContext();\n\n\tconst linkResolver = args.linkResolver || context.linkResolver;\n\n\tconst result = useStatefulPrismicClientMethod(\n\t\t\"resolvePreviewURL\",\n\t\t[\n\t\t\t{\n\t\t\t\tlinkResolver,\n\t\t\t\tdefaultURL: args.defaultURL || \"/\",\n\t\t\t\tpreviewToken: args.previewToken,\n\t\t\t\tdocumentID: args.documentID,\n\t\t\t},\n\t\t],\n\t\targs.client,\n\t);\n\n\tconst [resolvedURL] = result;\n\tconst { navigate } = args;\n\n\tReact.useEffect(() => {\n\t\tif (resolvedURL && navigate) {\n\t\t\tnavigate(resolvedURL);\n\t\t}\n\t}, [resolvedURL, navigate]);\n\n\treturn result;\n};\n"],"names":["usePrismicContext","useStatefulPrismicClientMethod","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA8DO,MAAM,4BAA4B,CACxC,OAAsC,OACL;AACjC,QAAM,UAAUA,kBAAAA;AAEV,QAAA,eAAe,KAAK,gBAAgB,QAAQ;AAE5C,QAAA,SAASC,8DACd,qBACA;AAAA,IACC;AAAA,MACC;AAAA,MACA,YAAY,KAAK,cAAc;AAAA,MAC/B,cAAc,KAAK;AAAA,MACnB,YAAY,KAAK;AAAA,IACjB;AAAA,EAAA,GAEF,KAAK,MAAM;AAGN,QAAA,CAAC,WAAW,IAAI;AAChB,QAAA,EAAE,SAAa,IAAA;AAErBC,mBAAM,UAAU,MAAK;AACpB,QAAI,eAAe,UAAU;AAC5B,eAAS,WAAW;AAAA,IACpB;AAAA,EAAA,GACC,CAAC,aAAa,QAAQ,CAAC;AAEnB,SAAA;AACR;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type * as prismic from "@prismicio/client";
|
|
2
|
+
import { ClientHookReturnType } from "./useStatefulPrismicClientMethod";
|
|
3
|
+
export type UsePrismicPreviewResolverArgs = {
|
|
4
|
+
/**
|
|
5
|
+
* An optional `@prismicio/client` instance to override the Client provided to
|
|
6
|
+
* `<PrismicProvider>`
|
|
7
|
+
*/
|
|
8
|
+
client?: prismic.Client;
|
|
9
|
+
/**
|
|
10
|
+
* A function that maps a Prismic document to a URL within your app.
|
|
11
|
+
*/
|
|
12
|
+
linkResolver?: Parameters<prismic.Client["resolvePreviewURL"]>[0]["linkResolver"];
|
|
13
|
+
/**
|
|
14
|
+
* A fallback URL if the Link Resolver does not return a value.
|
|
15
|
+
*/
|
|
16
|
+
defaultURL?: Parameters<prismic.Client["resolvePreviewURL"]>[0]["defaultURL"];
|
|
17
|
+
/**
|
|
18
|
+
* The preview token (also known as a ref) that will be used to query preview
|
|
19
|
+
* content from the Prismic repository.
|
|
20
|
+
*/
|
|
21
|
+
previewToken?: Parameters<prismic.Client["resolvePreviewURL"]>[0]["previewToken"];
|
|
22
|
+
/**
|
|
23
|
+
* The previewed document that will be used to determine the destination URL.
|
|
24
|
+
*/
|
|
25
|
+
documentID?: Parameters<prismic.Client["resolvePreviewURL"]>[0]["documentID"];
|
|
26
|
+
/**
|
|
27
|
+
* A function to automatically navigate to the resolved URL. If a function is
|
|
28
|
+
* not provded, `usePreviewResolver` will not navigate to the URL.
|
|
29
|
+
*
|
|
30
|
+
* @param url - The resolved preview URL.
|
|
31
|
+
*/
|
|
32
|
+
navigate?: (url: string) => unknown;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Resolve a preview session's URL. The resolved URL can be used to redirect to
|
|
36
|
+
* the previewed document.
|
|
37
|
+
*
|
|
38
|
+
* If a `navigate` function is provided, the hook will automatically navigate to
|
|
39
|
+
* the previewed document's URL.
|
|
40
|
+
*
|
|
41
|
+
* @param args - Arguments to configure how a URL is resolved.
|
|
42
|
+
*
|
|
43
|
+
* @returns A tuple containing the resolved URL and the hook's state.
|
|
44
|
+
*/
|
|
45
|
+
export declare const usePrismicPreviewResolver: (args?: UsePrismicPreviewResolverArgs) => ClientHookReturnType<string>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { usePrismicContext } from "./usePrismicContext.js";
|
|
3
|
+
import { useStatefulPrismicClientMethod } from "./useStatefulPrismicClientMethod.js";
|
|
4
|
+
const usePrismicPreviewResolver = (args = {}) => {
|
|
5
|
+
const context = usePrismicContext();
|
|
6
|
+
const linkResolver = args.linkResolver || context.linkResolver;
|
|
7
|
+
const result = useStatefulPrismicClientMethod("resolvePreviewURL", [
|
|
8
|
+
{
|
|
9
|
+
linkResolver,
|
|
10
|
+
defaultURL: args.defaultURL || "/",
|
|
11
|
+
previewToken: args.previewToken,
|
|
12
|
+
documentID: args.documentID
|
|
13
|
+
}
|
|
14
|
+
], args.client);
|
|
15
|
+
const [resolvedURL] = result;
|
|
16
|
+
const { navigate } = args;
|
|
17
|
+
React.useEffect(() => {
|
|
18
|
+
if (resolvedURL && navigate) {
|
|
19
|
+
navigate(resolvedURL);
|
|
20
|
+
}
|
|
21
|
+
}, [resolvedURL, navigate]);
|
|
22
|
+
return result;
|
|
23
|
+
};
|
|
24
|
+
export {
|
|
25
|
+
usePrismicPreviewResolver
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=usePrismicPreviewResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePrismicPreviewResolver.js","sources":["../../src/usePrismicPreviewResolver.ts"],"sourcesContent":["import type * as prismic from \"@prismicio/client\";\n\nimport * as React from \"react\";\n\nimport { usePrismicContext } from \"./usePrismicContext\";\nimport {\n\tClientHookReturnType,\n\tuseStatefulPrismicClientMethod,\n} from \"./useStatefulPrismicClientMethod\";\n\nexport type UsePrismicPreviewResolverArgs = {\n\t/**\n\t * An optional `@prismicio/client` instance to override the Client provided to\n\t * `<PrismicProvider>`\n\t */\n\tclient?: prismic.Client;\n\n\t/**\n\t * A function that maps a Prismic document to a URL within your app.\n\t */\n\tlinkResolver?: Parameters<\n\t\tprismic.Client[\"resolvePreviewURL\"]\n\t>[0][\"linkResolver\"];\n\n\t/**\n\t * A fallback URL if the Link Resolver does not return a value.\n\t */\n\tdefaultURL?: Parameters<prismic.Client[\"resolvePreviewURL\"]>[0][\"defaultURL\"];\n\n\t/**\n\t * The preview token (also known as a ref) that will be used to query preview\n\t * content from the Prismic repository.\n\t */\n\tpreviewToken?: Parameters<\n\t\tprismic.Client[\"resolvePreviewURL\"]\n\t>[0][\"previewToken\"];\n\n\t/**\n\t * The previewed document that will be used to determine the destination URL.\n\t */\n\tdocumentID?: Parameters<prismic.Client[\"resolvePreviewURL\"]>[0][\"documentID\"];\n\n\t/**\n\t * A function to automatically navigate to the resolved URL. If a function is\n\t * not provded, `usePreviewResolver` will not navigate to the URL.\n\t *\n\t * @param url - The resolved preview URL.\n\t */\n\tnavigate?: (url: string) => unknown;\n};\n\n/**\n * Resolve a preview session's URL. The resolved URL can be used to redirect to\n * the previewed document.\n *\n * If a `navigate` function is provided, the hook will automatically navigate to\n * the previewed document's URL.\n *\n * @param args - Arguments to configure how a URL is resolved.\n *\n * @returns A tuple containing the resolved URL and the hook's state.\n */\nexport const usePrismicPreviewResolver = (\n\targs: UsePrismicPreviewResolverArgs = {},\n): ClientHookReturnType<string> => {\n\tconst context = usePrismicContext();\n\n\tconst linkResolver = args.linkResolver || context.linkResolver;\n\n\tconst result = useStatefulPrismicClientMethod(\n\t\t\"resolvePreviewURL\",\n\t\t[\n\t\t\t{\n\t\t\t\tlinkResolver,\n\t\t\t\tdefaultURL: args.defaultURL || \"/\",\n\t\t\t\tpreviewToken: args.previewToken,\n\t\t\t\tdocumentID: args.documentID,\n\t\t\t},\n\t\t],\n\t\targs.client,\n\t);\n\n\tconst [resolvedURL] = result;\n\tconst { navigate } = args;\n\n\tReact.useEffect(() => {\n\t\tif (resolvedURL && navigate) {\n\t\t\tnavigate(resolvedURL);\n\t\t}\n\t}, [resolvedURL, navigate]);\n\n\treturn result;\n};\n"],"names":[],"mappings":";;;AA8DO,MAAM,4BAA4B,CACxC,OAAsC,OACL;AACjC,QAAM,UAAU;AAEV,QAAA,eAAe,KAAK,gBAAgB,QAAQ;AAE5C,QAAA,SAAS,+BACd,qBACA;AAAA,IACC;AAAA,MACC;AAAA,MACA,YAAY,KAAK,cAAc;AAAA,MAC/B,cAAc,KAAK;AAAA,MACnB,YAAY,KAAK;AAAA,IACjB;AAAA,EAAA,GAEF,KAAK,MAAM;AAGN,QAAA,CAAC,WAAW,IAAI;AAChB,QAAA,EAAE,SAAa,IAAA;AAErB,QAAM,UAAU,MAAK;AACpB,QAAI,eAAe,UAAU;AAC5B,eAAS,WAAW;AAAA,IACpB;AAAA,EAAA,GACC,CAAC,aAAa,QAAQ,CAAC;AAEnB,SAAA;AACR;"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const React = require("react");
|
|
4
|
+
const usePrismicClient = require("./usePrismicClient.cjs");
|
|
5
|
+
function _interopNamespaceDefault(e) {
|
|
6
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
7
|
+
if (e) {
|
|
8
|
+
for (const k in e) {
|
|
9
|
+
if (k !== "default") {
|
|
10
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
11
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: () => e[k]
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
n.default = e;
|
|
19
|
+
return Object.freeze(n);
|
|
20
|
+
}
|
|
21
|
+
const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
|
|
22
|
+
const reducer = (state, action) => {
|
|
23
|
+
switch (action[0]) {
|
|
24
|
+
case "start": {
|
|
25
|
+
return { state: "loading" };
|
|
26
|
+
}
|
|
27
|
+
case "succeed": {
|
|
28
|
+
return { state: "loaded", data: action[1] };
|
|
29
|
+
}
|
|
30
|
+
case "fail": {
|
|
31
|
+
return {
|
|
32
|
+
...state,
|
|
33
|
+
state: "failed",
|
|
34
|
+
error: action[1]
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const initialState = {
|
|
40
|
+
state: "idle"
|
|
41
|
+
};
|
|
42
|
+
const isParams = (value) => {
|
|
43
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
44
|
+
};
|
|
45
|
+
const useStatefulPrismicClientMethod = (methodName, args, explicitClient) => {
|
|
46
|
+
const lastArg = args[args.length - 1];
|
|
47
|
+
const { client: lastArgExplicitClient, skip, ...params } = isParams(lastArg) ? lastArg : {};
|
|
48
|
+
const argsWithoutParams = isParams(lastArg) ? args.slice(0, -1) : args;
|
|
49
|
+
const client = usePrismicClient.usePrismicClient(explicitClient || lastArgExplicitClient);
|
|
50
|
+
const [state, dispatch] = React__namespace.useReducer(reducer, initialState);
|
|
51
|
+
React__namespace.useEffect(
|
|
52
|
+
() => {
|
|
53
|
+
if (!skip) {
|
|
54
|
+
{
|
|
55
|
+
dispatch(["start"]);
|
|
56
|
+
}
|
|
57
|
+
client[methodName].call(
|
|
58
|
+
client,
|
|
59
|
+
...argsWithoutParams,
|
|
60
|
+
params
|
|
61
|
+
).then((result) => {
|
|
62
|
+
{
|
|
63
|
+
dispatch(["succeed", result]);
|
|
64
|
+
}
|
|
65
|
+
}).catch((error) => {
|
|
66
|
+
{
|
|
67
|
+
dispatch(["fail", error]);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
[
|
|
73
|
+
client,
|
|
74
|
+
methodName,
|
|
75
|
+
skip,
|
|
76
|
+
JSON.stringify(argsWithoutParams),
|
|
77
|
+
JSON.stringify(params)
|
|
78
|
+
]
|
|
79
|
+
);
|
|
80
|
+
return React__namespace.useMemo(() => [
|
|
81
|
+
state.data,
|
|
82
|
+
{
|
|
83
|
+
state: state.state,
|
|
84
|
+
error: state.error
|
|
85
|
+
}
|
|
86
|
+
], [state]);
|
|
87
|
+
};
|
|
88
|
+
exports.useStatefulPrismicClientMethod = useStatefulPrismicClientMethod;
|
|
89
|
+
//# sourceMappingURL=useStatefulPrismicClientMethod.cjs.map
|
|
@@ -0,0 +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;;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type * as prismic from "@prismicio/client";
|
|
2
|
+
import { PrismicClientHookState } from "./types";
|
|
3
|
+
type StateMachineState<TData> = {
|
|
4
|
+
state: PrismicClientHookState;
|
|
5
|
+
data?: TData;
|
|
6
|
+
error?: Error;
|
|
7
|
+
};
|
|
8
|
+
type UnwrapPromise<T> = T extends Promise<infer U> ? U : T;
|
|
9
|
+
type ClientPrototype = typeof prismic.Client.prototype;
|
|
10
|
+
type ClientMethod<MethodName extends keyof ClientPrototype> = ClientPrototype[MethodName] extends (...args: any[]) => any ? ClientPrototype[MethodName] : never;
|
|
11
|
+
export type ClientMethodParameters<MethodName extends keyof ClientPrototype> = Parameters<ClientMethod<MethodName>>;
|
|
12
|
+
export type HookOnlyParameters = {
|
|
13
|
+
client?: prismic.Client;
|
|
14
|
+
skip?: boolean;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The return value of a `@prismicio/client` React hook.
|
|
18
|
+
*
|
|
19
|
+
* @typeParam TData - Data returned by the client.
|
|
20
|
+
*/
|
|
21
|
+
export type ClientHookReturnType<TData = unknown> = [
|
|
22
|
+
/**
|
|
23
|
+
* Data returned by the client.
|
|
24
|
+
*/
|
|
25
|
+
data: TData | undefined,
|
|
26
|
+
/**
|
|
27
|
+
* The current state of the hook's client method call.
|
|
28
|
+
*/
|
|
29
|
+
state: Pick<StateMachineState<TData>, "state" | "error">
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Creates a React hook that forwards arguments to a specific method of a
|
|
33
|
+
* `@prismicio/client` instance. The created hook has its own internal state
|
|
34
|
+
* manager to report async status, such as pending or error statuses.
|
|
35
|
+
*
|
|
36
|
+
* @param methodName - The `@prismicio/client` method to which hook arguments
|
|
37
|
+
* will be forwarded.
|
|
38
|
+
*
|
|
39
|
+
* @returns A new React hook configured for the provided method.
|
|
40
|
+
*
|
|
41
|
+
* @internal
|
|
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>;
|
|
44
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { usePrismicClient } from "./usePrismicClient.js";
|
|
3
|
+
const reducer = (state, action) => {
|
|
4
|
+
switch (action[0]) {
|
|
5
|
+
case "start": {
|
|
6
|
+
return { state: "loading" };
|
|
7
|
+
}
|
|
8
|
+
case "succeed": {
|
|
9
|
+
return { state: "loaded", data: action[1] };
|
|
10
|
+
}
|
|
11
|
+
case "fail": {
|
|
12
|
+
return {
|
|
13
|
+
...state,
|
|
14
|
+
state: "failed",
|
|
15
|
+
error: action[1]
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const initialState = {
|
|
21
|
+
state: "idle"
|
|
22
|
+
};
|
|
23
|
+
const isParams = (value) => {
|
|
24
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
25
|
+
};
|
|
26
|
+
const useStatefulPrismicClientMethod = (methodName, args, explicitClient) => {
|
|
27
|
+
const lastArg = args[args.length - 1];
|
|
28
|
+
const { client: lastArgExplicitClient, skip, ...params } = isParams(lastArg) ? lastArg : {};
|
|
29
|
+
const argsWithoutParams = isParams(lastArg) ? args.slice(0, -1) : args;
|
|
30
|
+
const client = usePrismicClient(explicitClient || lastArgExplicitClient);
|
|
31
|
+
const [state, dispatch] = React.useReducer(reducer, initialState);
|
|
32
|
+
React.useEffect(
|
|
33
|
+
() => {
|
|
34
|
+
if (!skip) {
|
|
35
|
+
{
|
|
36
|
+
dispatch(["start"]);
|
|
37
|
+
}
|
|
38
|
+
client[methodName].call(
|
|
39
|
+
client,
|
|
40
|
+
...argsWithoutParams,
|
|
41
|
+
params
|
|
42
|
+
).then((result) => {
|
|
43
|
+
{
|
|
44
|
+
dispatch(["succeed", result]);
|
|
45
|
+
}
|
|
46
|
+
}).catch((error) => {
|
|
47
|
+
{
|
|
48
|
+
dispatch(["fail", error]);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
[
|
|
54
|
+
client,
|
|
55
|
+
methodName,
|
|
56
|
+
skip,
|
|
57
|
+
JSON.stringify(argsWithoutParams),
|
|
58
|
+
JSON.stringify(params)
|
|
59
|
+
]
|
|
60
|
+
);
|
|
61
|
+
return React.useMemo(() => [
|
|
62
|
+
state.data,
|
|
63
|
+
{
|
|
64
|
+
state: state.state,
|
|
65
|
+
error: state.error
|
|
66
|
+
}
|
|
67
|
+
], [state]);
|
|
68
|
+
};
|
|
69
|
+
export {
|
|
70
|
+
useStatefulPrismicClientMethod
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=useStatefulPrismicClientMethod.js.map
|
|
@@ -0,0 +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;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prismicio/react",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.1",
|
|
4
4
|
"description": "React components and hooks to fetch and present Prismic content",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"src"
|
|
33
33
|
],
|
|
34
34
|
"scripts": {
|
|
35
|
-
"build": "
|
|
36
|
-
"dev": "
|
|
35
|
+
"build": "vite build",
|
|
36
|
+
"dev": "vite build --watch",
|
|
37
37
|
"format": "prettier --write .",
|
|
38
38
|
"lint": "eslint --ext .js,.jsx,.ts,.tsx .",
|
|
39
39
|
"prepare": "npm run build",
|
|
@@ -41,55 +41,57 @@
|
|
|
41
41
|
"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
42
|
"release:alpha:dry": "standard-version --release-as minor --prerelease alpha --dry-run",
|
|
43
43
|
"release:dry": "standard-version --dry-run",
|
|
44
|
+
"unit": "nyc --reporter=lcovonly --reporter=text --exclude-after-remap=false ava",
|
|
44
45
|
"size": "size-limit",
|
|
45
|
-
"test": "npm run lint && npm run unit && npm run build && npm run size"
|
|
46
|
-
"unit": "nyc --reporter=lcovonly --reporter=text --exclude-after-remap=false ava"
|
|
46
|
+
"test": "npm run lint && npm run unit && npm run build && npm run size"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@prismicio/helpers": "^2.3.
|
|
50
|
-
"@prismicio/richtext": "^2.
|
|
49
|
+
"@prismicio/helpers": "^2.3.8",
|
|
50
|
+
"@prismicio/richtext": "^2.1.3",
|
|
51
|
+
"@prismicio/types": "^0.2.7"
|
|
51
52
|
},
|
|
52
53
|
"devDependencies": {
|
|
53
|
-
"@prismicio/client": "^6.
|
|
54
|
-
"@prismicio/mock": "^0.
|
|
55
|
-
"@
|
|
56
|
-
"@
|
|
57
|
-
"@
|
|
58
|
-
"@testing-library/react-hooks": "^7.0.2",
|
|
59
|
-
"@types/jsdom": "^16.2.14",
|
|
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",
|
|
60
59
|
"@types/node-fetch": "^3.0.3",
|
|
61
|
-
"@types/react": "^
|
|
62
|
-
"@types/react-test-renderer": "^
|
|
63
|
-
"@types/sinon": "^10.0.
|
|
64
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
65
|
-
"@typescript-eslint/parser": "^5.
|
|
66
|
-
"
|
|
60
|
+
"@types/react": "^18.0.26",
|
|
61
|
+
"@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
67
|
"browser-env": "^3.3.0",
|
|
68
|
-
"esbuild": "^0.
|
|
69
|
-
"esbuild-register": "^3.
|
|
70
|
-
"eslint": "^8.
|
|
68
|
+
"esbuild": "^0.16.9",
|
|
69
|
+
"esbuild-register": "^3.4.2",
|
|
70
|
+
"eslint": "^8.30.0",
|
|
71
71
|
"eslint-config-prettier": "^8.5.0",
|
|
72
|
-
"eslint-plugin-prettier": "^4.
|
|
73
|
-
"eslint-plugin-react": "^7.
|
|
74
|
-
"eslint-plugin-react-hooks": "^4.
|
|
75
|
-
"eslint-plugin-tsdoc": "^0.2.
|
|
76
|
-
"global-jsdom": "^8.
|
|
77
|
-
"jsdom": "^
|
|
78
|
-
"msw": "^0.
|
|
79
|
-
"node-fetch": "^3.
|
|
72
|
+
"eslint-plugin-prettier": "^4.2.1",
|
|
73
|
+
"eslint-plugin-react": "^7.31.11",
|
|
74
|
+
"eslint-plugin-react-hooks": "^4.6.0",
|
|
75
|
+
"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
80
|
"nyc": "^15.1.0",
|
|
81
|
-
"prettier": "^2.
|
|
82
|
-
"prettier-plugin-jsdoc": "^0.
|
|
83
|
-
"react": "^18.
|
|
84
|
-
"react-
|
|
85
|
-
"
|
|
86
|
-
"
|
|
87
|
-
"size-limit": "^
|
|
88
|
-
"standard-version": "^9.
|
|
89
|
-
"typescript": "^4.
|
|
81
|
+
"prettier": "^2.8.1",
|
|
82
|
+
"prettier-plugin-jsdoc": "^0.4.2",
|
|
83
|
+
"react": "^18.2.0",
|
|
84
|
+
"react-dom": "^18.2.0",
|
|
85
|
+
"react-test-renderer": "^18.2.0",
|
|
86
|
+
"sinon": "^15.0.1",
|
|
87
|
+
"size-limit": "^8.1.0",
|
|
88
|
+
"standard-version": "^9.5.0",
|
|
89
|
+
"typescript": "^4.9.4",
|
|
90
|
+
"vite": "^4.0.2",
|
|
91
|
+
"vite-plugin-sdk": "^0.1.0"
|
|
90
92
|
},
|
|
91
93
|
"peerDependencies": {
|
|
92
|
-
"@prismicio/client": "^6
|
|
94
|
+
"@prismicio/client": "^6",
|
|
93
95
|
"react": "^16.8 || ^17 || ^18"
|
|
94
96
|
},
|
|
95
97
|
"peerDependenciesMeta": {
|
package/src/PrismicImage.tsx
CHANGED
|
@@ -49,7 +49,8 @@ export type PrismicImageProps = Omit<
|
|
|
49
49
|
* Widths used to build a `srcset` value for the Image field.
|
|
50
50
|
*
|
|
51
51
|
* If a `widths` prop is not given or `"defaults"` is passed, the
|
|
52
|
-
* following widths will be used: 640, 750, 828, 1080, 1200, 1920, 2048,
|
|
52
|
+
* following widths will be used: 640, 750, 828, 1080, 1200, 1920, 2048,
|
|
53
|
+
* 3840.
|
|
53
54
|
*
|
|
54
55
|
* If the Image field contains responsive views, each responsive view
|
|
55
56
|
* can be used as a width in the resulting `srcset` by passing
|
package/src/PrismicProvider.tsx
CHANGED
|
@@ -22,7 +22,8 @@ export type PrismicContextValue<
|
|
|
22
22
|
client?: prismic.Client;
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* A Link Resolver used to resolve links for `<PrismicLink>` and
|
|
25
|
+
* A Link Resolver used to resolve links for `<PrismicLink>` and
|
|
26
|
+
* `<PrismicRichText>`.
|
|
26
27
|
*
|
|
27
28
|
* @remarks
|
|
28
29
|
* If your app uses Route Resolvers when querying for your Prismic
|
|
@@ -60,12 +61,14 @@ export type PrismicContextValue<
|
|
|
60
61
|
richTextComponents?: JSXMapSerializer | JSXFunctionSerializer;
|
|
61
62
|
|
|
62
63
|
/**
|
|
63
|
-
* The component rendered by `<PrismicLink>` for internal URLs. Defaults to
|
|
64
|
+
* The component rendered by `<PrismicLink>` for internal URLs. Defaults to
|
|
65
|
+
* `<a>`.
|
|
64
66
|
*/
|
|
65
67
|
internalLinkComponent?: React.ElementType<LinkProps>;
|
|
66
68
|
|
|
67
69
|
/**
|
|
68
|
-
* The component rendered by `<PrismicLink>` for external URLs. Defaults to
|
|
70
|
+
* The component rendered by `<PrismicLink>` for external URLs. Defaults to
|
|
71
|
+
* `<a>`.
|
|
69
72
|
*/
|
|
70
73
|
externalLinkComponent?: React.ElementType<LinkProps>;
|
|
71
74
|
|
package/src/PrismicText.tsx
CHANGED
|
@@ -27,7 +27,8 @@ export type PrismicTextProps = {
|
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
* React component that renders content from a Prismic Rich Text field as plain
|
|
30
|
+
* React component that renders content from a Prismic Rich Text field as plain
|
|
31
|
+
* text.
|
|
31
32
|
*
|
|
32
33
|
* @remarks
|
|
33
34
|
* This component returns a React fragment with no wrapping element around the
|