@prismicio/next 1.7.1 → 2.0.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 (150) hide show
  1. package/README.md +5 -3
  2. package/dist/PrismicNextImage.d.ts +7 -8
  3. package/dist/PrismicNextImage.js +8 -8
  4. package/dist/PrismicNextImage.js.map +1 -1
  5. package/dist/PrismicNextLink.d.ts +99 -100
  6. package/dist/PrismicNextLink.js +3 -5
  7. package/dist/PrismicNextLink.js.map +1 -1
  8. package/dist/PrismicPreview.d.ts +5 -13
  9. package/dist/PrismicPreview.js +6 -19
  10. package/dist/PrismicPreview.js.map +1 -1
  11. package/dist/PrismicPreviewClient.d.ts +5 -3
  12. package/dist/PrismicPreviewClient.js +58 -68
  13. package/dist/PrismicPreviewClient.js.map +1 -1
  14. package/dist/createLocaleRedirect.d.ts +8 -15
  15. package/dist/createLocaleRedirect.js +4 -28
  16. package/dist/createLocaleRedirect.js.map +1 -1
  17. package/dist/enableAutoPreviews.d.ts +7 -31
  18. package/dist/enableAutoPreviews.js +24 -35
  19. package/dist/enableAutoPreviews.js.map +1 -1
  20. package/dist/exitPreview.d.ts +4 -46
  21. package/dist/exitPreview.js +8 -15
  22. package/dist/exitPreview.js.map +1 -1
  23. package/dist/imgixLoader.js.map +1 -1
  24. package/dist/index.d.ts +15 -18
  25. package/dist/index.js +2 -4
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib/devMsg.d.ts +1 -1
  28. package/dist/lib/devMsg.js.map +1 -1
  29. package/dist/package.json.js +1 -1
  30. package/dist/pages/PrismicPreview.d.ts +31 -0
  31. package/dist/pages/PrismicPreview.js +64 -0
  32. package/dist/pages/PrismicPreview.js.map +1 -0
  33. package/dist/pages/enableAutoPreviews.d.ts +31 -0
  34. package/dist/pages/enableAutoPreviews.js +19 -0
  35. package/dist/pages/enableAutoPreviews.js.map +1 -0
  36. package/dist/pages/exitPreview.d.ts +33 -0
  37. package/dist/pages/exitPreview.js +10 -0
  38. package/dist/pages/exitPreview.js.map +1 -0
  39. package/dist/pages/index.d.ts +18 -0
  40. package/dist/pages/redirectToPreviewURL.d.ts +43 -0
  41. package/dist/pages/redirectToPreviewURL.js +16 -0
  42. package/dist/pages/redirectToPreviewURL.js.map +1 -0
  43. package/dist/{setPreviewData.d.ts → pages/setPreviewData.d.ts} +3 -9
  44. package/dist/{setPreviewData.js → pages/setPreviewData.js} +2 -2
  45. package/dist/pages/setPreviewData.js.map +1 -0
  46. package/dist/pages/types.d.ts +30 -0
  47. package/dist/pages.js +21 -0
  48. package/dist/pages.js.map +1 -0
  49. package/dist/redirectToPreviewURL.d.ts +11 -41
  50. package/dist/redirectToPreviewURL.js +16 -22
  51. package/dist/redirectToPreviewURL.js.map +1 -1
  52. package/dist/types.d.ts +2 -51
  53. package/package.json +61 -54
  54. package/src/PrismicNextImage.tsx +19 -16
  55. package/src/PrismicNextLink.tsx +17 -13
  56. package/src/PrismicPreview.tsx +20 -50
  57. package/src/PrismicPreviewClient.tsx +112 -138
  58. package/src/createLocaleRedirect.ts +14 -56
  59. package/src/enableAutoPreviews.ts +38 -110
  60. package/src/exitPreview.ts +18 -81
  61. package/src/index.ts +15 -26
  62. package/src/lib/devMsg.ts +1 -1
  63. package/src/pages/PrismicPreview.tsx +145 -0
  64. package/src/pages/enableAutoPreviews.ts +62 -0
  65. package/src/pages/exitPreview.ts +45 -0
  66. package/src/pages/index.ts +27 -0
  67. package/src/pages/redirectToPreviewURL.ts +77 -0
  68. package/src/{setPreviewData.ts → pages/setPreviewData.ts} +5 -11
  69. package/src/pages/types.ts +36 -0
  70. package/src/redirectToPreviewURL.ts +44 -95
  71. package/src/types.ts +2 -56
  72. package/dist/PrismicNextImage.cjs +0 -64
  73. package/dist/PrismicNextImage.cjs.map +0 -1
  74. package/dist/PrismicNextLink.cjs +0 -40
  75. package/dist/PrismicNextLink.cjs.map +0 -1
  76. package/dist/PrismicPreview.cjs +0 -28
  77. package/dist/PrismicPreview.cjs.map +0 -1
  78. package/dist/PrismicPreviewClient.cjs +0 -81
  79. package/dist/PrismicPreviewClient.cjs.map +0 -1
  80. package/dist/_node_modules/@prismicio/client/dist/cookie.cjs +0 -5
  81. package/dist/_node_modules/@prismicio/client/dist/cookie.cjs.map +0 -1
  82. package/dist/_node_modules/@prismicio/client/dist/cookie.js +0 -5
  83. package/dist/_node_modules/@prismicio/client/dist/cookie.js.map +0 -1
  84. package/dist/_node_modules/@prismicio/client/dist/errors/PrismicError.cjs +0 -16
  85. package/dist/_node_modules/@prismicio/client/dist/errors/PrismicError.cjs.map +0 -1
  86. package/dist/_node_modules/@prismicio/client/dist/errors/PrismicError.js +0 -16
  87. package/dist/_node_modules/@prismicio/client/dist/errors/PrismicError.js.map +0 -1
  88. package/dist/_node_modules/@prismicio/client/dist/getToolbarSrc.cjs +0 -13
  89. package/dist/_node_modules/@prismicio/client/dist/getToolbarSrc.cjs.map +0 -1
  90. package/dist/_node_modules/@prismicio/client/dist/getToolbarSrc.js +0 -13
  91. package/dist/_node_modules/@prismicio/client/dist/getToolbarSrc.js.map +0 -1
  92. package/dist/_node_modules/@prismicio/client/dist/helpers/asLink.cjs +0 -47
  93. package/dist/_node_modules/@prismicio/client/dist/helpers/asLink.cjs.map +0 -1
  94. package/dist/_node_modules/@prismicio/client/dist/helpers/asLink.js +0 -47
  95. package/dist/_node_modules/@prismicio/client/dist/helpers/asLink.js.map +0 -1
  96. package/dist/_node_modules/@prismicio/client/dist/helpers/asLinkAttrs.cjs +0 -28
  97. package/dist/_node_modules/@prismicio/client/dist/helpers/asLinkAttrs.cjs.map +0 -1
  98. package/dist/_node_modules/@prismicio/client/dist/helpers/asLinkAttrs.js +0 -28
  99. package/dist/_node_modules/@prismicio/client/dist/helpers/asLinkAttrs.js.map +0 -1
  100. package/dist/_node_modules/@prismicio/client/dist/helpers/documentToLinkField.cjs +0 -27
  101. package/dist/_node_modules/@prismicio/client/dist/helpers/documentToLinkField.cjs.map +0 -1
  102. package/dist/_node_modules/@prismicio/client/dist/helpers/documentToLinkField.js +0 -27
  103. package/dist/_node_modules/@prismicio/client/dist/helpers/documentToLinkField.js.map +0 -1
  104. package/dist/_node_modules/@prismicio/client/dist/helpers/isFilled.cjs +0 -14
  105. package/dist/_node_modules/@prismicio/client/dist/helpers/isFilled.cjs.map +0 -1
  106. package/dist/_node_modules/@prismicio/client/dist/helpers/isFilled.js +0 -14
  107. package/dist/_node_modules/@prismicio/client/dist/helpers/isFilled.js.map +0 -1
  108. package/dist/_node_modules/@prismicio/client/dist/isRepositoryName.cjs +0 -7
  109. package/dist/_node_modules/@prismicio/client/dist/isRepositoryName.cjs.map +0 -1
  110. package/dist/_node_modules/@prismicio/client/dist/isRepositoryName.js +0 -7
  111. package/dist/_node_modules/@prismicio/client/dist/isRepositoryName.js.map +0 -1
  112. package/dist/_node_modules/@prismicio/client/dist/lib/isInternalURL.cjs +0 -9
  113. package/dist/_node_modules/@prismicio/client/dist/lib/isInternalURL.cjs.map +0 -1
  114. package/dist/_node_modules/@prismicio/client/dist/lib/isInternalURL.js +0 -9
  115. package/dist/_node_modules/@prismicio/client/dist/lib/isInternalURL.js.map +0 -1
  116. package/dist/_node_modules/@prismicio/client/dist/types/value/link.cjs +0 -10
  117. package/dist/_node_modules/@prismicio/client/dist/types/value/link.cjs.map +0 -1
  118. package/dist/_node_modules/@prismicio/client/dist/types/value/link.js +0 -10
  119. package/dist/_node_modules/@prismicio/client/dist/types/value/link.js.map +0 -1
  120. package/dist/createLocaleRedirect.cjs +0 -32
  121. package/dist/createLocaleRedirect.cjs.map +0 -1
  122. package/dist/enableAutoPreviews.cjs +0 -40
  123. package/dist/enableAutoPreviews.cjs.map +0 -1
  124. package/dist/exitPreview.cjs +0 -20
  125. package/dist/exitPreview.cjs.map +0 -1
  126. package/dist/imgixLoader.cjs +0 -17
  127. package/dist/imgixLoader.cjs.map +0 -1
  128. package/dist/index.cjs +0 -21
  129. package/dist/index.cjs.map +0 -1
  130. package/dist/lib/devMsg.cjs +0 -8
  131. package/dist/lib/devMsg.cjs.map +0 -1
  132. package/dist/lib/getPreviewCookieRepositoryName.cjs +0 -7
  133. package/dist/lib/getPreviewCookieRepositoryName.cjs.map +0 -1
  134. package/dist/lib/getPreviewCookieRepositoryName.d.ts +0 -9
  135. package/dist/lib/getPreviewCookieRepositoryName.js +0 -7
  136. package/dist/lib/getPreviewCookieRepositoryName.js.map +0 -1
  137. package/dist/lib/getPrismicPreviewCookie.cjs +0 -21
  138. package/dist/lib/getPrismicPreviewCookie.cjs.map +0 -1
  139. package/dist/lib/getPrismicPreviewCookie.d.ts +0 -9
  140. package/dist/lib/getPrismicPreviewCookie.js +0 -21
  141. package/dist/lib/getPrismicPreviewCookie.js.map +0 -1
  142. package/dist/package.json.cjs +0 -5
  143. package/dist/package.json.cjs.map +0 -1
  144. package/dist/redirectToPreviewURL.cjs +0 -30
  145. package/dist/redirectToPreviewURL.cjs.map +0 -1
  146. package/dist/setPreviewData.cjs +0 -11
  147. package/dist/setPreviewData.cjs.map +0 -1
  148. package/dist/setPreviewData.js.map +0 -1
  149. package/src/lib/getPreviewCookieRepositoryName.ts +0 -14
  150. package/src/lib/getPrismicPreviewCookie.ts +0 -33
@@ -1,80 +1,70 @@
1
- 'use client';
2
- 'use client';
1
+ "use client";
3
2
  import { useEffect } from "react";
4
- import { useRouter } from "next/router";
5
- import { useRouter as useRouter$1 } from "next/navigation";
6
- import { getPrismicPreviewCookie } from "./lib/getPrismicPreviewCookie.js";
7
- import { getPreviewCookieRepositoryName } from "./lib/getPreviewCookieRepositoryName.js";
8
- function PrismicPreviewClient({ repositoryName, updatePreviewURL = "/api/preview", exitPreviewURL = "/api/exit-preview", isDraftMode }) {
9
- let isPreviewActive = isDraftMode;
10
- let isAppRouter = true;
11
- let basePath = "";
12
- let refresh;
13
- try {
14
- const router = useRouter();
15
- isAppRouter = false;
16
- basePath = router.basePath;
17
- isPreviewActive || (isPreviewActive = router.isPreview);
18
- refresh = () => router.replace(router.asPath, void 0, { scroll: false });
19
- } catch {
20
- const router = useRouter$1();
21
- refresh = router.refresh;
22
- }
3
+ import { cookie } from "@prismicio/client";
4
+ import { useRouter } from "next/navigation";
5
+ function PrismicPreviewClient(props) {
6
+ const { repositoryName, isDraftMode, updatePreviewURL = "/api/preview", exitPreviewURL = "/api/exit-preview" } = props;
7
+ const { refresh } = useRouter();
23
8
  useEffect(() => {
24
- const startPreviewMode = async () => {
25
- const resolvedUpdatePreviewURL = basePath + updatePreviewURL;
26
- const res = await globalThis.fetch(resolvedUpdatePreviewURL);
27
- if (res.redirected) {
9
+ const controller = new AbortController();
10
+ window.addEventListener("prismicPreviewUpdate", onUpdate, {
11
+ signal: controller.signal
12
+ });
13
+ window.addEventListener("prismicPreviewEnd", onEnd, {
14
+ signal: controller.signal
15
+ });
16
+ const cookie2 = getPrismicPreviewCookie(window.document.cookie);
17
+ const cookieRepositoryName = cookie2 ? (decodeURIComponent(cookie2).match(/"([^"]+)\.prismic\.io"/) || [])[1] : void 0;
18
+ const hasCookieForRepository = cookieRepositoryName === repositoryName;
19
+ if (hasCookieForRepository && !isDraftMode) {
20
+ console.log("starting preview link");
21
+ globalThis.fetch(updatePreviewURL, {
22
+ redirect: "manual",
23
+ signal: controller.signal
24
+ }).then((res) => {
25
+ if (res.type !== "opaqueredirect") {
26
+ console.error(`[<PrismicPreview>] Failed to start the preview using "${updatePreviewURL}". Does it exist?`);
27
+ return;
28
+ }
28
29
  refresh();
29
- } else {
30
- console.error(`[<PrismicPreview>] Failed to start or update Preview Mode using the "${resolvedUpdatePreviewURL}" API endpoint. Does it exist?`);
31
- }
32
- };
33
- const handlePrismicPreviewUpdate = async (event) => {
30
+ }).catch(() => {
31
+ });
32
+ }
33
+ function onUpdate(event) {
34
34
  event.preventDefault();
35
- if (isAppRouter) {
36
- refresh();
37
- } else {
38
- await startPreviewMode();
39
- }
40
- };
41
- const handlePrismicPreviewEnd = async (event) => {
35
+ refresh();
36
+ }
37
+ function onEnd(event) {
42
38
  event.preventDefault();
43
- const resolvedExitPreviewURL = basePath + exitPreviewURL;
44
- const res = await globalThis.fetch(resolvedExitPreviewURL);
45
- if (res.ok) {
46
- refresh();
47
- } else {
48
- console.error(`[<PrismicPreview>] Failed to exit Preview Mode using the "${resolvedExitPreviewURL}" API endpoint. Does it exist?`);
49
- }
50
- };
51
- window.addEventListener("prismicPreviewUpdate", handlePrismicPreviewUpdate);
52
- window.addEventListener("prismicPreviewEnd", handlePrismicPreviewEnd);
53
- if (!isPreviewActive) {
54
- const prismicPreviewCookie = getPrismicPreviewCookie(globalThis.document.cookie);
55
- if (prismicPreviewCookie) {
56
- const locationIsDescendantOfBasePath = window.location.href.startsWith(window.location.origin + basePath);
57
- const prismicPreviewCookieRepositoryName = getPreviewCookieRepositoryName(prismicPreviewCookie);
58
- if (locationIsDescendantOfBasePath && prismicPreviewCookieRepositoryName === repositoryName) {
59
- startPreviewMode();
39
+ globalThis.fetch(exitPreviewURL, { signal: controller.signal }).then((res) => {
40
+ if (!res.ok) {
41
+ console.error(`[<PrismicPreview>] Failed to exit Preview Mode using the "${exitPreviewURL}" API endpoint. Does it exist?`);
42
+ return;
60
43
  }
61
- }
44
+ refresh();
45
+ }).catch(() => {
46
+ });
62
47
  }
63
- return () => {
64
- window.removeEventListener("prismicPreviewUpdate", handlePrismicPreviewUpdate);
65
- window.removeEventListener("prismicPreviewEnd", handlePrismicPreviewEnd);
66
- };
67
- }, [
68
- basePath,
69
- exitPreviewURL,
70
- isAppRouter,
71
- isPreviewActive,
72
- refresh,
73
- repositoryName,
74
- updatePreviewURL
75
- ]);
48
+ return () => controller.abort();
49
+ }, [repositoryName, isDraftMode, updatePreviewURL, exitPreviewURL, refresh]);
76
50
  return null;
77
51
  }
52
+ function getPrismicPreviewCookie(cookieJar) {
53
+ function readValue(value2) {
54
+ return value2.replace(/%3B/g, ";");
55
+ }
56
+ const cookies = cookieJar.split("; ");
57
+ let value;
58
+ for (const cookie$1 of cookies) {
59
+ const parts = cookie$1.split("=");
60
+ const name = readValue(parts[0]).replace(/%3D/g, "=");
61
+ if (name === cookie.preview) {
62
+ value = readValue(parts.slice(1).join("="));
63
+ continue;
64
+ }
65
+ }
66
+ return value;
67
+ }
78
68
  export {
79
69
  PrismicPreviewClient
80
70
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PrismicPreviewClient.js","sources":["../../src/PrismicPreviewClient.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\nimport { useRouter as usePagesRouter } from \"next/router\";\nimport { useRouter } from \"next/navigation\";\n\nimport { getPrismicPreviewCookie } from \"./lib/getPrismicPreviewCookie\";\nimport { getPreviewCookieRepositoryName } from \"./lib/getPreviewCookieRepositoryName\";\n\nimport { PrismicPreviewProps } from \"./PrismicPreview\";\n\ntype PrismicPreviewClientProps = Omit<PrismicPreviewProps, \"children\"> & {\n\tisDraftMode: boolean;\n};\n\nexport function PrismicPreviewClient({\n\trepositoryName,\n\tupdatePreviewURL = \"/api/preview\",\n\texitPreviewURL = \"/api/exit-preview\",\n\tisDraftMode,\n}: PrismicPreviewClientProps): null {\n\tlet isPreviewActive = isDraftMode;\n\tlet isAppRouter = true;\n\tlet basePath = \"\";\n\tlet refresh: () => void;\n\n\ttry {\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tconst router = usePagesRouter();\n\n\t\tisAppRouter = false;\n\t\tbasePath = router.basePath;\n\t\tisPreviewActive ||= router.isPreview;\n\t\trefresh = () => router.replace(router.asPath, undefined, { scroll: false });\n\t} catch {\n\t\t// Assume we are in App Router. Ignore the error.\n\n\t\t// eslint-disable-next-line react-hooks/rules-of-hooks\n\t\tconst router = useRouter();\n\n\t\trefresh = router.refresh;\n\t}\n\n\tuseEffect(() => {\n\t\t/**\n\t\t * Starts Preview Mode and refreshes the page's props.\n\t\t */\n\t\tconst startPreviewMode = async () => {\n\t\t\tconst resolvedUpdatePreviewURL = basePath + updatePreviewURL;\n\n\t\t\t// Start Next.js Preview Mode via the given preview API endpoint.\n\t\t\tconst res = await globalThis.fetch(resolvedUpdatePreviewURL);\n\n\t\t\t// We check for `res.redirected` rather than `res.ok`\n\t\t\t// since the update preview endpoint may redirect to a\n\t\t\t// 404 page. As long as it redirects, we know the\n\t\t\t// endpoint exists and at least attempted to set\n\t\t\t// preview data.\n\t\t\tif (res.redirected) {\n\t\t\t\trefresh();\n\t\t\t} else {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`[<PrismicPreview>] Failed to start or update Preview Mode using the \"${resolvedUpdatePreviewURL}\" API endpoint. Does it exist?`,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst handlePrismicPreviewUpdate = async (event: Event) => {\n\t\t\t// Prevent the toolbar from reloading the page.\n\t\t\tevent.preventDefault();\n\n\t\t\tif (isAppRouter) {\n\t\t\t\trefresh();\n\t\t\t} else {\n\t\t\t\tawait startPreviewMode();\n\t\t\t}\n\t\t};\n\n\t\tconst handlePrismicPreviewEnd = async (event: Event) => {\n\t\t\t// Prevent the toolbar from reloading the page.\n\t\t\tevent.preventDefault();\n\n\t\t\tconst resolvedExitPreviewURL = basePath + exitPreviewURL;\n\n\t\t\t// Exit Next.js Preview Mode via the given preview API endpoint.\n\t\t\tconst res = await globalThis.fetch(resolvedExitPreviewURL);\n\n\t\t\tif (res.ok) {\n\t\t\t\trefresh();\n\t\t\t} else {\n\t\t\t\tconsole.error(\n\t\t\t\t\t`[<PrismicPreview>] Failed to exit Preview Mode using the \"${resolvedExitPreviewURL}\" API endpoint. Does it exist?`,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"prismicPreviewUpdate\", handlePrismicPreviewUpdate);\n\t\twindow.addEventListener(\"prismicPreviewEnd\", handlePrismicPreviewEnd);\n\n\t\tif (!isPreviewActive) {\n\t\t\tconst prismicPreviewCookie = getPrismicPreviewCookie(\n\t\t\t\tglobalThis.document.cookie,\n\t\t\t);\n\n\t\t\tif (prismicPreviewCookie) {\n\t\t\t\t// If a Prismic preview cookie is present, but Next.js Preview\n\t\t\t\t// Mode is not active, we must activate Preview Mode manually.\n\t\t\t\t//\n\t\t\t\t// This will happen when a visitor accesses the page using a\n\t\t\t\t// Prismic preview share link.\n\n\t\t\t\t/**\n\t\t\t\t * Determines if the current location is a descendant of the app's base\n\t\t\t\t * path.\n\t\t\t\t *\n\t\t\t\t * This is used to prevent infinite refrehes; when\n\t\t\t\t * `isDescendantOfBasePath` is `false`, `router.isPreview` is also\n\t\t\t\t * `false`.\n\t\t\t\t *\n\t\t\t\t * If the app does not have a base path, this should always be `true`.\n\t\t\t\t */\n\t\t\t\tconst locationIsDescendantOfBasePath = window.location.href.startsWith(\n\t\t\t\t\twindow.location.origin + basePath,\n\t\t\t\t);\n\n\t\t\t\tconst prismicPreviewCookieRepositoryName =\n\t\t\t\t\tgetPreviewCookieRepositoryName(prismicPreviewCookie);\n\n\t\t\t\tif (\n\t\t\t\t\tlocationIsDescendantOfBasePath &&\n\t\t\t\t\tprismicPreviewCookieRepositoryName === repositoryName\n\t\t\t\t) {\n\t\t\t\t\tstartPreviewMode();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\n\t\t\t\t\"prismicPreviewUpdate\",\n\t\t\t\thandlePrismicPreviewUpdate,\n\t\t\t);\n\t\t\twindow.removeEventListener(\"prismicPreviewEnd\", handlePrismicPreviewEnd);\n\t\t};\n\t}, [\n\t\tbasePath,\n\t\texitPreviewURL,\n\t\tisAppRouter,\n\t\tisPreviewActive,\n\t\trefresh,\n\t\trepositoryName,\n\t\tupdatePreviewURL,\n\t]);\n\n\treturn null;\n}\n"],"names":[],"mappings":";;;;;;;AAegB;AAMf;AACA;AACA;AACI;AAEA;AAEH;AAEc;AACd;AACA;AACU;AAAgE;AAK1E;AAEA;AAAiB;AAGlB;AAIC;AACC;AAGA;AAOA;;;AAGS;AACyH;AAEjI;AAGI;AAEL;AAEA;;;AAGC;;AACA;AAGI;AAEL;AAEA;AAGA;AAEA;;;AAGS;AAC4G;AAEpH;AAGK;AACA;AAEP;AACC;AAIA;AAiBO;AAIA;AAIL;;;AAIA;AACD;AAGF;AACQ;AAIA;AAAgE;AAAA;AAEtE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AAGM;AACR;;;;"}
1
+ {"version":3,"file":"PrismicPreviewClient.js","sources":["../src/PrismicPreviewClient.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect } from \"react\";\nimport { cookie as prismicCookie } from \"@prismicio/client\";\nimport { useRouter } from \"next/navigation\";\n\ntype PrismicPreviewClientProps = {\n\trepositoryName: string;\n\tisDraftMode: boolean;\n\tupdatePreviewURL?: string;\n\texitPreviewURL?: string;\n};\n\nexport function PrismicPreviewClient(props: PrismicPreviewClientProps): null {\n\tconst {\n\t\trepositoryName,\n\t\tisDraftMode,\n\t\tupdatePreviewURL = \"/api/preview\",\n\t\texitPreviewURL = \"/api/exit-preview\",\n\t} = props;\n\n\tconst { refresh } = useRouter();\n\n\tuseEffect(() => {\n\t\tconst controller = new AbortController();\n\n\t\twindow.addEventListener(\"prismicPreviewUpdate\", onUpdate, {\n\t\t\tsignal: controller.signal,\n\t\t});\n\t\twindow.addEventListener(\"prismicPreviewEnd\", onEnd, {\n\t\t\tsignal: controller.signal,\n\t\t});\n\n\t\tconst cookie = getPrismicPreviewCookie(window.document.cookie);\n\t\tconst cookieRepositoryName = cookie\n\t\t\t? (decodeURIComponent(cookie).match(/\"([^\"]+)\\.prismic\\.io\"/) || [])[1]\n\t\t\t: undefined;\n\t\tconst hasCookieForRepository = cookieRepositoryName === repositoryName;\n\n\t\t// Start the preview for preview share links. Previews from\n\t\t// share links do not go to the `updatePreviewURL` like a normal\n\t\t// preview.\n\t\tif (hasCookieForRepository && !isDraftMode) {\n\t\t\tconsole.log(\"starting preview link\");\n\n\t\t\t// We check `opaqueredirect` because we don't care if\n\t\t\t// the redirect was successful or not. As long as it\n\t\t\t// redirects, we know the endpoint exists and draft mode\n\t\t\t// is active.\n\t\t\tglobalThis\n\t\t\t\t.fetch(updatePreviewURL, {\n\t\t\t\t\tredirect: \"manual\",\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t})\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (res.type !== \"opaqueredirect\") {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`[<PrismicPreview>] Failed to start the preview using \"${updatePreviewURL}\". Does it exist?`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\trefresh();\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\t// noop\n\t\t\t\t});\n\t\t}\n\n\t\tfunction onUpdate(event: Event) {\n\t\t\tevent.preventDefault();\n\t\t\trefresh();\n\t\t}\n\n\t\tfunction onEnd(event: Event) {\n\t\t\tevent.preventDefault();\n\t\t\tglobalThis\n\t\t\t\t.fetch(exitPreviewURL, { signal: controller.signal })\n\t\t\t\t.then((res) => {\n\t\t\t\t\tif (!res.ok) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`[<PrismicPreview>] Failed to exit Preview Mode using the \"${exitPreviewURL}\" API endpoint. Does it exist?`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\trefresh();\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\t// noop\n\t\t\t\t});\n\t\t}\n\n\t\treturn () => controller.abort();\n\t}, [repositoryName, isDraftMode, updatePreviewURL, exitPreviewURL, refresh]);\n\n\treturn null;\n}\n\n/**\n * Returns the value of a cookie from a given cookie store.\n *\n * @param cookieJar - The stringified cookie store from which to read the\n * cookie.\n *\n * @returns The value of the cookie, if it exists.\n */\nfunction getPrismicPreviewCookie(cookieJar: string): string | undefined {\n\tfunction readValue(value: string): string {\n\t\treturn value.replace(/%3B/g, \";\");\n\t}\n\n\tconst cookies = cookieJar.split(\"; \");\n\n\tlet value: string | undefined;\n\n\tfor (const cookie of cookies) {\n\t\tconst parts = cookie.split(\"=\");\n\t\tconst name = readValue(parts[0]).replace(/%3D/g, \"=\");\n\n\t\tif (name === prismicCookie.preview) {\n\t\t\tvalue = readValue(parts.slice(1).join(\"=\"));\n\t\t\tcontinue;\n\t\t}\n\t}\n\n\treturn value;\n}\n"],"names":["cookie","value","prismicCookie"],"mappings":";;;;AAaM,SAAU,qBAAqB,OAAgC;AACpE,QAAM,EACL,gBACA,aACA,mBAAmB,gBACnB,iBAAiB,wBACd;AAEE,QAAA,EAAE,QAAO,IAAK;AAEpB,YAAU,MAAK;AACR,UAAA,aAAa,IAAI;AAEhB,WAAA,iBAAiB,wBAAwB,UAAU;AAAA,MACzD,QAAQ,WAAW;AAAA,IAAA,CACnB;AACM,WAAA,iBAAiB,qBAAqB,OAAO;AAAA,MACnD,QAAQ,WAAW;AAAA,IAAA,CACnB;AAED,UAAMA,UAAS,wBAAwB,OAAO,SAAS,MAAM;AACvD,UAAA,uBAAuBA,WACzB,mBAAmBA,OAAM,EAAE,MAAM,wBAAwB,KAAK,CAAA,GAAI,CAAC,IACpE;AACH,UAAM,yBAAyB,yBAAyB;AAKpD,QAAA,0BAA0B,CAAC,aAAa;AAC3C,cAAQ,IAAI,uBAAuB;AAMnC,iBACE,MAAM,kBAAkB;AAAA,QACxB,UAAU;AAAA,QACV,QAAQ,WAAW;AAAA,MAAA,CACnB,EACA,KAAK,CAAC,QAAO;AACT,YAAA,IAAI,SAAS,kBAAkB;AAC1B,kBAAA,MACP,yDAAyD,gBAAgB,mBAAmB;AAG7F;AAAA,QAAA;;OAID,EACA,MAAM,MAAK;AAAA,MAAA,CAEX;AAAA,IAAA;AAGH,aAAS,SAAS,OAAY;AAC7B,YAAM,eAAc;;;AAIrB,aAAS,MAAM,OAAY;AAC1B,YAAM,eAAc;AAElB,iBAAA,MAAM,gBAAgB,EAAE,QAAQ,WAAW,QAAQ,EACnD,KAAK,CAAC,QAAO;AACT,YAAA,CAAC,IAAI,IAAI;AACJ,kBAAA,MACP,6DAA6D,cAAc,gCAAgC;AAG5G;AAAA,QAAA;;OAID,EACA,MAAM,MAAK;AAAA,MAAA,CAEX;AAAA,IAAA;AAGI,WAAA,MAAM,WAAW;KACtB,CAAC,gBAAgB,aAAa,kBAAkB,gBAAgB,OAAO,CAAC;AAEpE,SAAA;AACR;AAUA,SAAS,wBAAwB,WAAiB;AACjD,WAAS,UAAUC,QAAa;AACxBA,WAAAA,OAAM,QAAQ,QAAQ,GAAG;AAAA,EAAA;AAG3B,QAAA,UAAU,UAAU,MAAM,IAAI;AAEhC,MAAA;AAEJ,aAAWD,YAAU,SAAS;AACvB,UAAA,QAAQA,SAAO,MAAM,GAAG;AACxB,UAAA,OAAO,UAAU,MAAM,CAAC,CAAC,EAAE,QAAQ,QAAQ,GAAG;AAEhD,QAAA,SAASE,OAAc,SAAS;AACnC,cAAQ,UAAU,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,CAAC;AAC1C;AAAA,IAAA;AAAA,EACD;AAGM,SAAA;AACR;"}
@@ -1,17 +1,10 @@
1
- import * as prismic from "@prismicio/client";
2
- import { NextRequestLike } from "./types";
3
- export type CreateLocaleRedirectConfig = {
4
- request: NextRequestLike;
5
- client: Pick<prismic.Client, "getRepository">;
6
- localeOverrides?: Record<string, string>;
7
- omitDefaultLocale?: boolean;
8
- };
9
1
  /**
10
- * Creates a `Response` that redirects a request to the requester's preferred
11
- * locale. This function returns `undefined` if the request already contains a
12
- * locale.
13
- *
14
- * @returns A `Response` if the request should be redirected, `undefined`
15
- * otherwise.
2
+ * @deprecated `createLocaleRedirect()` has been removed due to performance
3
+ * issues.
16
4
  */
17
- export declare const createLocaleRedirect: (config: CreateLocaleRedirectConfig) => Promise<Response | undefined>;
5
+ export declare function createLocaleRedirect(): void;
6
+ /**
7
+ * @deprecated `createLocaleRedirect()` has been removed due to performance
8
+ * issues.
9
+ */
10
+ export type CreateLocaleRedirectConfig = never;
@@ -1,31 +1,7 @@
1
- import Negotiator from "negotiator";
2
- import { match } from "@formatjs/intl-localematcher";
3
- const createLocaleRedirect = async (config) => {
4
- const repository = await config.client.getRepository();
5
- const locales = repository.languages.map((language) => {
6
- var _a;
7
- return ((_a = config.localeOverrides) == null ? void 0 : _a[language.id]) ?? language.id;
8
- });
9
- const defaultLocale = locales[0];
10
- const { pathname } = config.request.nextUrl;
11
- const pathnameHasLocale = locales.some((locale2) => pathname.startsWith(`/${locale2}/`) || pathname === `/${locale2}`);
12
- if (pathnameHasLocale) {
13
- return;
14
- }
15
- let locale = defaultLocale;
16
- const headers = {
17
- "accept-language": config.request.headers.get("accept-language") ?? void 0
18
- };
19
- if (headers["accept-language"]) {
20
- const languages = new Negotiator({ headers }).languages();
21
- locale = match(languages, locales, defaultLocale);
22
- }
23
- if (locale === defaultLocale && config.omitDefaultLocale) {
24
- return;
25
- }
26
- config.request.nextUrl.pathname = `/${locale}${pathname}`;
27
- return Response.redirect(config.request.nextUrl);
28
- };
1
+ import { devMsg } from "./lib/devMsg.js";
2
+ function createLocaleRedirect() {
3
+ throw new Error(`createLocaleRedirect() has been removed due to performance issues. See ${devMsg("replace-createLocaleRedirect")} for more details.`);
4
+ }
29
5
  export {
30
6
  createLocaleRedirect
31
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"createLocaleRedirect.js","sources":["../../src/createLocaleRedirect.ts"],"sourcesContent":["import Negotiator from \"negotiator\";\nimport { match } from \"@formatjs/intl-localematcher\";\nimport * as prismic from \"@prismicio/client\";\n\nimport { NextRequestLike } from \"./types\";\n\nexport type CreateLocaleRedirectConfig = {\n\trequest: NextRequestLike;\n\tclient: Pick<prismic.Client, \"getRepository\">;\n\tlocaleOverrides?: Record<string, string>;\n\tomitDefaultLocale?: boolean;\n};\n\n/**\n * Creates a `Response` that redirects a request to the requester's preferred\n * locale. This function returns `undefined` if the request already contains a\n * locale.\n *\n * @returns A `Response` if the request should be redirected, `undefined`\n * otherwise.\n */\nexport const createLocaleRedirect = async (\n\tconfig: CreateLocaleRedirectConfig,\n): Promise<Response | undefined> => {\n\tconst repository = await config.client.getRepository();\n\n\tconst locales = repository.languages.map((language) => {\n\t\treturn config.localeOverrides?.[language.id] ?? language.id;\n\t});\n\tconst defaultLocale = locales[0];\n\n\tconst { pathname } = config.request.nextUrl;\n\tconst pathnameHasLocale = locales.some(\n\t\t(locale) => pathname.startsWith(`/${locale}/`) || pathname === `/${locale}`,\n\t);\n\n\tif (pathnameHasLocale) {\n\t\treturn;\n\t}\n\n\tlet locale = defaultLocale;\n\n\tconst headers = {\n\t\t\"accept-language\":\n\t\t\tconfig.request.headers.get(\"accept-language\") ?? undefined,\n\t};\n\n\tif (headers[\"accept-language\"]) {\n\t\tconst languages = new Negotiator({ headers }).languages();\n\t\tlocale = match(languages, locales, defaultLocale);\n\t}\n\n\tif (locale === defaultLocale && config.omitDefaultLocale) {\n\t\treturn;\n\t}\n\n\tconfig.request.nextUrl.pathname = `/${locale}${pathname}`;\n\n\treturn Response.redirect(config.request.nextUrl as URL);\n};\n"],"names":["locale"],"mappings":";;AAqBa,MAAA,uBAAuB,OACnC,WACkC;AAClC,QAAM,aAAa,MAAM,OAAO,OAAO,cAAa;AAEpD,QAAM,UAAU,WAAW,UAAU,IAAI,CAAC,aAAY;;AACrD,aAAO,YAAO,oBAAP,mBAAyB,SAAS,QAAO,SAAS;AAAA,EAAA,CACzD;AACK,QAAA,gBAAgB,QAAQ,CAAC;AAE/B,QAAM,EAAE,SAAa,IAAA,OAAO,QAAQ;AACpC,QAAM,oBAAoB,QAAQ,KACjC,CAACA,YAAW,SAAS,WAAW,IAAIA,OAAM,GAAG,KAAK,aAAa,IAAIA,OAAM,EAAE;AAG5E,MAAI,mBAAmB;AACtB;AAAA,EACA;AAED,MAAI,SAAS;AAEb,QAAM,UAAU;AAAA,IACf,mBACC,OAAO,QAAQ,QAAQ,IAAI,iBAAiB,KAAK;AAAA,EAAA;AAG/C,MAAA,QAAQ,iBAAiB,GAAG;AAC/B,UAAM,YAAY,IAAI,WAAW,EAAE,QAAS,CAAA,EAAE;AACrC,aAAA,MAAM,WAAW,SAAS,aAAa;AAAA,EAChD;AAEG,MAAA,WAAW,iBAAiB,OAAO,mBAAmB;AACzD;AAAA,EACA;AAED,SAAO,QAAQ,QAAQ,WAAW,IAAI,MAAM,GAAG,QAAQ;AAEvD,SAAO,SAAS,SAAS,OAAO,QAAQ,OAAc;AACvD;"}
1
+ {"version":3,"file":"createLocaleRedirect.js","sources":["../src/createLocaleRedirect.ts"],"sourcesContent":["import { devMsg } from \"./lib/devMsg.js\";\n\n/**\n * @deprecated `createLocaleRedirect()` has been removed due to performance\n * issues.\n */\nexport function createLocaleRedirect() {\n\tthrow new Error(\n\t\t`createLocaleRedirect() has been removed due to performance issues. See ${devMsg(\n\t\t\t\"replace-createLocaleRedirect\",\n\t\t)} for more details.`,\n\t);\n}\n/**\n * @deprecated `createLocaleRedirect()` has been removed due to performance\n * issues.\n */\nexport type CreateLocaleRedirectConfig = never;\n"],"names":[],"mappings":";SAMgB,uBAAoB;AACnC,QAAM,IAAI,MACT,0EAA0E,OACzE,8BAA8B,CAC9B,oBAAoB;AAEvB;"}
@@ -1,37 +1,13 @@
1
- import { PreviewData } from "next";
2
- import * as prismic from "@prismicio/client";
3
- import { NextApiRequestLike } from "./types";
4
- /**
5
- * Configuration for `enableAutoPreviews`.
6
- *
7
- * @typeParam TPreviewData - Next.js preview data object.
8
- */
9
- export type EnableAutoPreviewsConfig<TPreviewData extends PreviewData = PreviewData> = {
10
- /**
11
- * Prismic client with which automatic previews will be enabled.
12
- */
13
- client: Pick<prismic.Client, "queryContentFromRef" | "enableAutoPreviewsFromReq">;
14
- /**
15
- * **Only used in the Pages Directory (/pages).**
16
- *
17
- * The `previewData` object provided in the `getStaticProps()` or
18
- * `getServerSideProps()` context object.
19
- */
20
- previewData?: TPreviewData;
21
- /**
22
- * **Only used in the Pages Directory (/pages).**
23
- *
24
- * The `req` object from a Next.js API route.
25
- *
26
- * @see Next.js API route docs: \<https://nextjs.org/docs/api-routes/introduction\>
27
- */
28
- req?: NextApiRequestLike;
1
+ import { type Client } from "@prismicio/client";
2
+ /** Configuration for `enableAutoPreviews`. */
3
+ export type EnableAutoPreviewsConfig = {
4
+ /** Prismic client with which automatic previews will be enabled. */
5
+ client: Pick<Client, "queryContentFromRef" | "enableAutoPreviewsFromReq">;
29
6
  };
30
7
  /**
31
8
  * Configures a Prismic client to automatically query draft content during a
32
- * preview session. It either takes in a Next.js `getStaticProps` context object
33
- * or a Next.js API endpoint request object.
9
+ * preview session.
34
10
  *
35
11
  * @param config - Configuration for the function.
36
12
  */
37
- export declare const enableAutoPreviews: <TPreviewData extends PreviewData>(config: EnableAutoPreviewsConfig<TPreviewData>) => void;
13
+ export declare function enableAutoPreviews(config: EnableAutoPreviewsConfig): void;
@@ -1,39 +1,28 @@
1
- import { draftMode, cookies } from "next/headers";
2
- import { preview } from './_node_modules/@prismicio/client/dist/cookie.js';
3
- const isPrismicPreviewData = (input) => {
4
- return typeof input === "object" && input !== null && "ref" in input;
5
- };
6
- const enableAutoPreviews = (config) => {
7
- if ("previewData" in config && config.previewData) {
8
- if (isPrismicPreviewData(config.previewData)) {
9
- config.client.queryContentFromRef(config.previewData.ref);
1
+ import { cookie } from "@prismicio/client";
2
+ function enableAutoPreviews(config) {
3
+ config.client.queryContentFromRef(async () => {
4
+ var _a;
5
+ const { cookies, draftMode } = await import("next/headers");
6
+ let isDraftModeEnabled = false;
7
+ try {
8
+ isDraftModeEnabled = (await draftMode()).isEnabled;
9
+ } catch {
10
+ return;
10
11
  }
11
- } else if ("req" in config && config.req) {
12
- config.client.enableAutoPreviewsFromReq(config.req);
13
- } else {
14
- config.client.queryContentFromRef(async () => {
15
- var _a;
16
- let isDraftModeEnabled = false;
17
- try {
18
- isDraftModeEnabled = (await draftMode()).isEnabled;
19
- } catch {
20
- return;
21
- }
22
- if (!isDraftModeEnabled) {
23
- return;
24
- }
25
- let cookie;
26
- try {
27
- cookie = (_a = (await cookies()).get(preview)) == null ? void 0 : _a.value;
28
- } catch {
29
- return;
30
- }
31
- if (cookie && /\.prismic\.io/.test(cookie)) {
32
- return cookie;
33
- }
34
- });
35
- }
36
- };
12
+ if (!isDraftModeEnabled) {
13
+ return;
14
+ }
15
+ const cookie$1 = (_a = (await cookies()).get(cookie.preview)) == null ? void 0 : _a.value;
16
+ if (!cookie$1) {
17
+ return;
18
+ }
19
+ const isActiveCookie = cookie$1.includes("websitePreviewId=");
20
+ if (!isActiveCookie) {
21
+ return;
22
+ }
23
+ return cookie$1;
24
+ });
25
+ }
37
26
  export {
38
27
  enableAutoPreviews
39
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"enableAutoPreviews.js","sources":["../../src/enableAutoPreviews.ts"],"sourcesContent":["import { draftMode, cookies } from \"next/headers\";\nimport { PreviewData } from \"next\";\nimport * as prismic from \"@prismicio/client\";\n\nimport { NextApiRequestLike, PrismicPreviewData } from \"./types\";\n\n/**\n * Configuration for `enableAutoPreviews`.\n *\n * @typeParam TPreviewData - Next.js preview data object.\n */\nexport type EnableAutoPreviewsConfig<\n\tTPreviewData extends PreviewData = PreviewData,\n> = {\n\t/**\n\t * Prismic client with which automatic previews will be enabled.\n\t */\n\t// `Pick` is used to use the smallest possible subset of\n\t// `prismic.Client`. Doing this reduces the surface area for breaking\n\t// type changes.\n\tclient: Pick<\n\t\tprismic.Client,\n\t\t\"queryContentFromRef\" | \"enableAutoPreviewsFromReq\"\n\t>;\n\n\t/**\n\t * **Only used in the Pages Directory (/pages).**\n\t *\n\t * The `previewData` object provided in the `getStaticProps()` or\n\t * `getServerSideProps()` context object.\n\t */\n\tpreviewData?: TPreviewData;\n\n\t/**\n\t * **Only used in the Pages Directory (/pages).**\n\t *\n\t * The `req` object from a Next.js API route.\n\t *\n\t * @see Next.js API route docs: \\<https://nextjs.org/docs/api-routes/introduction\\>\n\t */\n\treq?: NextApiRequestLike;\n};\n\nconst isPrismicPreviewData = (input: unknown): input is PrismicPreviewData => {\n\treturn typeof input === \"object\" && input !== null && \"ref\" in input;\n};\n\n/**\n * Configures a Prismic client to automatically query draft content during a\n * preview session. It either takes in a Next.js `getStaticProps` context object\n * or a Next.js API endpoint request object.\n *\n * @param config - Configuration for the function.\n */\nexport const enableAutoPreviews = <TPreviewData extends PreviewData>(\n\tconfig: EnableAutoPreviewsConfig<TPreviewData>,\n): void => {\n\tif (\"previewData\" in config && config.previewData) {\n\t\t// Assume we are in `getStaticProps()` or\n\t\t// `getServerSideProps()` with active Preview Mode (`pages`\n\t\t// directory).\n\n\t\tif (isPrismicPreviewData(config.previewData)) {\n\t\t\tconfig.client.queryContentFromRef(config.previewData.ref);\n\t\t}\n\t} else if (\"req\" in config && config.req) {\n\t\t// Assume we are in an API Route (`pages` directory).\n\n\t\tconfig.client.enableAutoPreviewsFromReq(config.req);\n\t} else {\n\t\t// Assume we are in App Router (`app` directory) OR\n\t\t// `getStaticProps()`/`getServerSideProps()` with an inactive\n\t\t// Preview Mode (`pages` directory).\n\n\t\t// We use a function value so the cookie is checked on every\n\t\t// request. We don't have a static value to read from.\n\t\tconfig.client.queryContentFromRef(async () => {\n\t\t\tlet isDraftModeEnabled = false;\n\t\t\ttry {\n\t\t\t\tisDraftModeEnabled = (await draftMode()).isEnabled;\n\t\t\t} catch {\n\t\t\t\t// This catch block may be reached if\n\t\t\t\t// `draftMode()` is called in a place that does\n\t\t\t\t// not have access to its async storage. We can\n\t\t\t\t// ignore this case.\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!isDraftModeEnabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet cookie: string | undefined;\n\t\t\ttry {\n\t\t\t\tcookie = (await cookies()).get(prismic.cookie.preview)?.value;\n\t\t\t} catch {\n\t\t\t\t// We are probably in `getStaticProps()` or\n\t\t\t\t// `getServerSideProps()` with inactive Preview\n\t\t\t\t// Mode where `cookies()` does not work. We\n\t\t\t\t// don't need to do any preview handling.\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We only return the cookie if a Prismic Preview session is active.\n\t\t\t//\n\t\t\t// An inactive cookie looks like this (URL encoded):\n\t\t\t// \t{\n\t\t\t// \t\t\"_tracker\": \"abc123\"\n\t\t\t// \t}\n\t\t\t//\n\t\t\t// An active cookie looks like this (URL encoded):\n\t\t\t// \t{\n\t\t\t// \t\t\"_tracker\": \"abc123\",\n\t\t\t// \t\t\"example-prismic-repo.prismic.io\": {\n\t\t\t// \t\t\tpreview: \"https://example-prismic-repo.prismic.io/previews/abc:123?websitePreviewId=xyz\"\n\t\t\t// \t\t}\n\t\t\t// \t}\n\t\t\tif (cookie && /\\.prismic\\.io/.test(cookie)) {\n\t\t\t\treturn cookie;\n\t\t\t}\n\t\t});\n\t}\n};\n"],"names":["prismic.cookie.preview"],"mappings":";;AA2CA,MAAM,uBAAuB,CAAC,UAA+C;AAC5E,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,SAAS;AAChE;AASa,MAAA,qBAAqB,CACjC,WACS;AACL,MAAA,iBAAiB,UAAU,OAAO,aAAa;AAK9C,QAAA,qBAAqB,OAAO,WAAW,GAAG;AAC7C,aAAO,OAAO,oBAAoB,OAAO,YAAY,GAAG;AAAA,IACxD;AAAA,EACS,WAAA,SAAS,UAAU,OAAO,KAAK;AAGlC,WAAA,OAAO,0BAA0B,OAAO,GAAG;AAAA,EAAA,OAC5C;AAOC,WAAA,OAAO,oBAAoB,YAAW;;AAC5C,UAAI,qBAAqB;AACrB,UAAA;AACmB,8BAAA,MAAM,UAAa,GAAA;AAAA,MAAA,QAClC;AAMP;AAAA,MACA;AAED,UAAI,CAAC,oBAAoB;AACxB;AAAA,MACA;AAEG,UAAA;AACA,UAAA;AACH,kBAAU,YAAM,QAAO,GAAI,IAAIA,OAAsB,MAA3C,mBAA8C;AAAA,MAAA,QACjD;AAMP;AAAA,MACA;AAgBD,UAAI,UAAU,gBAAgB,KAAK,MAAM,GAAG;AACpC,eAAA;AAAA,MACP;AAAA,IAAA,CACD;AAAA,EACD;AACF;"}
1
+ {"version":3,"file":"enableAutoPreviews.js","sources":["../src/enableAutoPreviews.ts"],"sourcesContent":["import { type Client, cookie as prismicCookie } from \"@prismicio/client\";\n\n/** Configuration for `enableAutoPreviews`. */\nexport type EnableAutoPreviewsConfig = {\n\t/** Prismic client with which automatic previews will be enabled. */\n\t// `Pick` is used to use the smallest possible subset of\n\t// `prismic.Client`. Doing this reduces the surface area for breaking\n\t// type changes.\n\tclient: Pick<Client, \"queryContentFromRef\" | \"enableAutoPreviewsFromReq\">;\n};\n\n/**\n * Configures a Prismic client to automatically query draft content during a\n * preview session.\n *\n * @param config - Configuration for the function.\n */\nexport function enableAutoPreviews(config: EnableAutoPreviewsConfig): void {\n\t// We use a function value so the cookie is checked on every\n\t// request. We don't have a static value to read from.\n\tconfig.client.queryContentFromRef(async () => {\n\t\t// Need this to avoid the following Next.js build-time error:\n\t\t// You're importing a component that needs next/headers. That only works\n\t\t// in a Server Component which is not supported in the pages/ directory.\n\t\tconst { cookies, draftMode } = await import(\"next/headers\");\n\n\t\tlet isDraftModeEnabled = false;\n\t\ttry {\n\t\t\tisDraftModeEnabled = (await draftMode()).isEnabled;\n\t\t} catch {\n\t\t\t// `draftMode()` may have been called in a palce that\n\t\t\t// does not have access to its async storage. This\n\t\t\t// occurs in places like `generateStaticParams()`. We\n\t\t\t// can ignore this case.\n\t\t\treturn;\n\t\t}\n\t\tif (!isDraftModeEnabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cookie = (await cookies()).get(prismicCookie.preview)?.value;\n\t\tif (!cookie) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst isActiveCookie = cookie.includes(\"websitePreviewId=\");\n\t\tif (!isActiveCookie) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn cookie;\n\t});\n}\n"],"names":["cookie","prismicCookie"],"mappings":";AAiBM,SAAU,mBAAmB,QAAgC;AAG3D,SAAA,OAAO,oBAAoB,YAAW;;AAI5C,UAAM,EAAE,SAAS,cAAc,MAAM,OAAO,cAAc;AAE1D,QAAI,qBAAqB;AACrB,QAAA;AACmB,4BAAA,MAAM,aAAa;AAAA,IAAA,QAClC;AAKP;AAAA,IAAA;AAED,QAAI,CAAC,oBAAoB;AACxB;AAAA,IAAA;AAGD,UAAMA,YAAU,YAAM,QAAA,GAAW,IAAIC,OAAc,OAAO,MAA1C,mBAA6C;AAC7D,QAAI,CAACD,UAAQ;AACZ;AAAA,IAAA;AAGK,UAAA,iBAAiBA,SAAO,SAAS,mBAAmB;AAC1D,QAAI,CAAC,gBAAgB;AACpB;AAAA,IAAA;AAGM,WAAAA;AAAAA,EAAA,CACP;AACF;"}
@@ -1,59 +1,17 @@
1
- import { NextApiRequestLike, NextApiResponseLike } from "./types";
2
- /**
3
- * @deprecated Use `ExitPreviewAPIRouteConfig` instead when `exitPreview()` is
4
- * used in a Pages Router API endpoint. `exitPreview()` does not require any
5
- * configuration when used in an App Router Route Handler.
6
- */
7
- export type ExitPreviewConfig = ExitPreviewAPIRouteConfig;
8
- /**
9
- * Configuration for `exitPreview()` when used in a Pages Router API route.
10
- */
11
- export type ExitPreviewAPIRouteConfig = {
12
- /**
13
- * **Only use this parameter in the Pages Directory (/pages).**
14
- *
15
- * The `req` object from a Next.js API route.
16
- *
17
- * @see Next.js API route docs: \<https://nextjs.org/docs/api-routes/introduction\>
18
- */
19
- req?: NextApiRequestLike;
20
- /**
21
- * **Only use this parameter in the Pages Directory (/pages).**
22
- *
23
- * The `res` object from a Next.js API route.
24
- *
25
- * @see Next.js API route docs: \<https://nextjs.org/docs/api-routes/introduction\>
26
- */
27
- res?: NextApiResponseLike;
28
- };
29
1
  /**
30
2
  * Ends a Prismic preview session within a Next.js app. This function should be
31
- * used in a Router Handler or an API route, depending on whether you are using
32
- * the App Router or Pages Router.
3
+ * used in a Router Handler.
33
4
  *
34
- * @example Usage within an App Router Route Handler.
5
+ * @example
35
6
  *
36
7
  * ```typescript
37
8
  * // src/app/api/exit-preview/route.js
38
9
  *
39
10
  * import { exitPreview } from "@prismicio/next";
40
11
  *
41
- * export function GET() {
42
- * return exitPreview();
43
- * }
44
- * ```
45
- *
46
- * @example Usage within a Pages Router API Route.
47
- *
48
- * ```typescript
49
- * // src/pages/api/exit-preview.js
50
- *
51
- * import { exitPreview } from "@prismicio/next";
52
- *
53
- * export default function handler(req, res) {
54
- * exitPreview({ req, res });
12
+ * export async function GET() {
13
+ * return await exitPreview();
55
14
  * }
56
15
  * ```
57
16
  */
58
17
  export declare function exitPreview(): Promise<Response>;
59
- export declare function exitPreview(config: ExitPreviewAPIRouteConfig): Promise<void>;
@@ -1,18 +1,11 @@
1
- import { draftMode } from "next/headers";
2
- async function exitPreview(config) {
3
- if (config == null ? void 0 : config.res) {
4
- config.res.clearPreviewData();
5
- config.res.setHeader("Cache-Control", "no-store");
6
- config.res.json({ success: true });
7
- return;
8
- } else {
9
- (await draftMode()).disable();
10
- return new Response(JSON.stringify({ success: true }), {
11
- headers: {
12
- "Cache-Control": "no-store"
13
- }
14
- });
15
- }
1
+ async function exitPreview() {
2
+ const { draftMode } = await import("next/headers");
3
+ (await draftMode()).disable();
4
+ return new Response(JSON.stringify({ success: true }), {
5
+ headers: {
6
+ "Cache-Control": "no-store"
7
+ }
8
+ });
16
9
  }
17
10
  export {
18
11
  exitPreview
@@ -1 +1 @@
1
- {"version":3,"file":"exitPreview.js","sources":["../../src/exitPreview.ts"],"sourcesContent":["import { draftMode } from \"next/headers\";\n\nimport { NextApiRequestLike, NextApiResponseLike } from \"./types\";\n\n/**\n * @deprecated Use `ExitPreviewAPIRouteConfig` instead when `exitPreview()` is\n * used in a Pages Router API endpoint. `exitPreview()` does not require any\n * configuration when used in an App Router Route Handler.\n */\nexport type ExitPreviewConfig = ExitPreviewAPIRouteConfig;\n\n/**\n * Configuration for `exitPreview()` when used in a Pages Router API route.\n */\nexport type ExitPreviewAPIRouteConfig = {\n\t/**\n\t * **Only use this parameter in the Pages Directory (/pages).**\n\t *\n\t * The `req` object from a Next.js API route.\n\t *\n\t * @see Next.js API route docs: \\<https://nextjs.org/docs/api-routes/introduction\\>\n\t */\n\treq?: NextApiRequestLike;\n\n\t/**\n\t * **Only use this parameter in the Pages Directory (/pages).**\n\t *\n\t * The `res` object from a Next.js API route.\n\t *\n\t * @see Next.js API route docs: \\<https://nextjs.org/docs/api-routes/introduction\\>\n\t */\n\tres?: NextApiResponseLike;\n};\n\n/**\n * Ends a Prismic preview session within a Next.js app. This function should be\n * used in a Router Handler or an API route, depending on whether you are using\n * the App Router or Pages Router.\n *\n * @example Usage within an App Router Route Handler.\n *\n * ```typescript\n * // src/app/api/exit-preview/route.js\n *\n * import { exitPreview } from \"@prismicio/next\";\n *\n * export function GET() {\n * \treturn exitPreview();\n * }\n * ```\n *\n * @example Usage within a Pages Router API Route.\n *\n * ```typescript\n * // src/pages/api/exit-preview.js\n *\n * import { exitPreview } from \"@prismicio/next\";\n *\n * export default function handler(req, res) {\n * \texitPreview({ req, res });\n * }\n * ```\n */\nexport async function exitPreview(): Promise<Response>;\nexport async function exitPreview(\n\tconfig: ExitPreviewAPIRouteConfig,\n): Promise<void>;\nexport async function exitPreview(\n\tconfig?: ExitPreviewAPIRouteConfig,\n): Promise<Response | void> {\n\tif (config?.res) {\n\t\t// Assume Preview Mode is being used.\n\n\t\tconfig.res.clearPreviewData();\n\n\t\t// `Cache-Control` header is used to prevent CDN-level caching.\n\t\tconfig.res.setHeader(\"Cache-Control\", \"no-store\");\n\n\t\tconfig.res.json({ success: true });\n\n\t\treturn;\n\t} else {\n\t\t// Assume Draft Mode is being used.\n\n\t\t(await draftMode()).disable();\n\n\t\t// `Cache-Control` header is used to prevent CDN-level caching.\n\t\treturn new Response(JSON.stringify({ success: true }), {\n\t\t\theaders: {\n\t\t\t\t\"Cache-Control\": \"no-store\",\n\t\t\t},\n\t\t});\n\t}\n}\n"],"names":[],"mappings":";AAmEA,eAAsB,YACrB,QAAkC;AAElC,MAAI,iCAAQ,KAAK;AAGhB,WAAO,IAAI;AAGJ,WAAA,IAAI,UAAU,iBAAiB,UAAU;AAEhD,WAAO,IAAI,KAAK,EAAE,SAAS,KAAM,CAAA;AAEjC;AAAA,EAAA,OACM;AAGL,KAAA,MAAM,aAAa;AAGb,WAAA,IAAI,SAAS,KAAK,UAAU,EAAE,SAAS,KAAA,CAAM,GAAG;AAAA,MACtD,SAAS;AAAA,QACR,iBAAiB;AAAA,MACjB;AAAA,IAAA,CACD;AAAA,EACD;AACF;"}
1
+ {"version":3,"file":"exitPreview.js","sources":["../src/exitPreview.ts"],"sourcesContent":["/**\n * Ends a Prismic preview session within a Next.js app. This function should be\n * used in a Router Handler.\n *\n * @example\n *\n * ```typescript\n * // src/app/api/exit-preview/route.js\n *\n * import { exitPreview } from \"@prismicio/next\";\n *\n * export async function GET() {\n * \treturn await exitPreview();\n * }\n * ```\n */\nexport async function exitPreview(): Promise<Response> {\n\t// Need this to avoid the following Next.js build-time error:\n\t// You're importing a component that needs next/headers. That only works\n\t// in a Server Component which is not supported in the pages/ directory.\n\tconst { draftMode } = await import(\"next/headers\");\n\n\t(await draftMode()).disable();\n\n\t// `Cache-Control` header is used to prevent CDN-level caching.\n\treturn new Response(JSON.stringify({ success: true }), {\n\t\theaders: {\n\t\t\t\"Cache-Control\": \"no-store\",\n\t\t},\n\t});\n}\n"],"names":[],"mappings":"AAgBA,eAAsB,cAAW;AAIhC,QAAM,EAAE,UAAA,IAAc,MAAM,OAAO,cAAc;AAEhD,GAAA,MAAM,UAAS,GAAI;AAGb,SAAA,IAAI,SAAS,KAAK,UAAU,EAAE,SAAS,KAAA,CAAM,GAAG;AAAA,IACtD,SAAS;AAAA,MACR,iBAAiB;AAAA,IAAA;AAAA,EACjB,CACD;AACF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"imgixLoader.js","sources":["../../src/imgixLoader.ts"],"sourcesContent":["import { ImageLoaderProps } from \"next/image\";\nimport { buildURL, ImgixURLParams } from \"imgix-url-builder\";\n\n/**\n * A `next/image` loader for Imgix, which Prismic uses, with an optional\n * collection of default Imgix parameters.\n *\n * @see To learn about `next/image` loaders: https://nextjs.org/docs/api-reference/next/image#loader\n * @see To learn about Imgix's URL API: https://docs.imgix.com/apis/rendering\n */\nexport const imgixLoader = (args: ImageLoaderProps): string => {\n\tconst url = new URL(args.src);\n\n\tconst params: ImgixURLParams = {\n\t\tfit: (url.searchParams.get(\"fit\") as ImgixURLParams[\"fit\"]) || \"max\",\n\t\tw: args.width,\n\t\th: undefined,\n\t};\n\n\tif (args.quality) {\n\t\tparams.q = args.quality;\n\t}\n\n\treturn buildURL(args.src, params);\n};\n"],"names":[],"mappings":";AAUa,MAAA,cAAc,CAAC,SAAkC;AAC7D,QAAM,MAAM,IAAI,IAAI,KAAK,GAAG;AAE5B,QAAM,SAAyB;AAAA,IAC9B,KAAM,IAAI,aAAa,IAAI,KAAK,KAA+B;AAAA,IAC/D,GAAG,KAAK;AAAA,IACR,GAAG;AAAA,EAAA;AAGJ,MAAI,KAAK,SAAS;AACjB,WAAO,IAAI,KAAK;AAAA,EAChB;AAEM,SAAA,SAAS,KAAK,KAAK,MAAM;AACjC;"}
1
+ {"version":3,"file":"imgixLoader.js","sources":["../src/imgixLoader.ts"],"sourcesContent":["import { ImageLoaderProps } from \"next/image\";\nimport { buildURL, ImgixURLParams } from \"imgix-url-builder\";\n\n/**\n * A `next/image` loader for Imgix, which Prismic uses, with an optional\n * collection of default Imgix parameters.\n *\n * @see To learn about `next/image` loaders: https://nextjs.org/docs/api-reference/next/image#loader\n * @see To learn about Imgix's URL API: https://docs.imgix.com/apis/rendering\n */\nexport const imgixLoader = (args: ImageLoaderProps): string => {\n\tconst url = new URL(args.src);\n\n\tconst params: ImgixURLParams = {\n\t\tfit: (url.searchParams.get(\"fit\") as ImgixURLParams[\"fit\"]) || \"max\",\n\t\tw: args.width,\n\t\th: undefined,\n\t};\n\n\tif (args.quality) {\n\t\tparams.q = args.quality;\n\t}\n\n\treturn buildURL(args.src, params);\n};\n"],"names":[],"mappings":";AAUa,MAAA,cAAc,CAAC,SAAkC;AAC7D,QAAM,MAAM,IAAI,IAAI,KAAK,GAAG;AAE5B,QAAM,SAAyB;AAAA,IAC9B,KAAM,IAAI,aAAa,IAAI,KAAK,KAA+B;AAAA,IAC/D,GAAG,KAAK;AAAA,IACR,GAAG;AAAA;AAGJ,MAAI,KAAK,SAAS;AACjB,WAAO,IAAI,KAAK;AAAA,EAAA;AAGV,SAAA,SAAS,KAAK,KAAK,MAAM;AACjC;"}
package/dist/index.d.ts CHANGED
@@ -1,18 +1,15 @@
1
- export { setPreviewData } from "./setPreviewData";
2
- export type { SetPreviewDataConfig } from "./setPreviewData";
3
- export { exitPreview } from "./exitPreview";
4
- export type { ExitPreviewConfig, ExitPreviewAPIRouteConfig, } from "./exitPreview";
5
- export { PrismicPreview } from "./PrismicPreview";
6
- export type { PrismicPreviewProps } from "./PrismicPreview";
7
- export { PrismicNextLink } from "./PrismicNextLink";
8
- export type { PrismicNextLinkProps } from "./PrismicNextLink";
9
- export { enableAutoPreviews } from "./enableAutoPreviews";
10
- export type { EnableAutoPreviewsConfig } from "./enableAutoPreviews";
11
- export { redirectToPreviewURL } from "./redirectToPreviewURL";
12
- export type { RedirectToPreviewURLConfig, RedirectToPreviewURLRouteHandlerConfig, RedirectToPreviewURLAPIEndpointConfig, } from "./redirectToPreviewURL";
13
- export { createLocaleRedirect } from "./createLocaleRedirect";
14
- export type { CreateLocaleRedirectConfig } from "./createLocaleRedirect";
15
- export { PrismicNextImage } from "./PrismicNextImage";
16
- export type { PrismicNextImageProps } from "./PrismicNextImage";
17
- export { imgixLoader } from "./imgixLoader";
18
- export type { CreateClientConfig, PrismicPreviewData } from "./types";
1
+ export { exitPreview } from "./exitPreview.js";
2
+ export { PrismicPreview } from "./PrismicPreview.js";
3
+ export type { PrismicPreviewProps } from "./PrismicPreview.js";
4
+ export { PrismicNextLink } from "./PrismicNextLink.js";
5
+ export type { PrismicNextLinkProps } from "./PrismicNextLink.js";
6
+ export { enableAutoPreviews } from "./enableAutoPreviews.js";
7
+ export type { EnableAutoPreviewsConfig } from "./enableAutoPreviews.js";
8
+ export { redirectToPreviewURL } from "./redirectToPreviewURL.js";
9
+ export type { RedirectToPreviewURLConfig } from "./redirectToPreviewURL.js";
10
+ export { PrismicNextImage } from "./PrismicNextImage.js";
11
+ export type { PrismicNextImageProps } from "./PrismicNextImage.js";
12
+ export { imgixLoader } from "./imgixLoader.js";
13
+ export type { CreateClientConfig } from "./types.js";
14
+ export { createLocaleRedirect } from "./createLocaleRedirect.js";
15
+ export type { CreateLocaleRedirectConfig } from "./createLocaleRedirect.js";
package/dist/index.js CHANGED
@@ -1,12 +1,11 @@
1
- import { setPreviewData } from "./setPreviewData.js";
2
1
  import { exitPreview } from "./exitPreview.js";
3
2
  import { PrismicPreview } from "./PrismicPreview.js";
4
3
  import { PrismicNextLink } from "./PrismicNextLink.js";
5
4
  import { enableAutoPreviews } from "./enableAutoPreviews.js";
6
5
  import { redirectToPreviewURL } from "./redirectToPreviewURL.js";
7
- import { createLocaleRedirect } from "./createLocaleRedirect.js";
8
6
  import { PrismicNextImage } from "./PrismicNextImage.js";
9
7
  import { imgixLoader } from "./imgixLoader.js";
8
+ import { createLocaleRedirect } from "./createLocaleRedirect.js";
10
9
  export {
11
10
  PrismicNextImage,
12
11
  PrismicNextLink,
@@ -15,7 +14,6 @@ export {
15
14
  enableAutoPreviews,
16
15
  exitPreview,
17
16
  imgixLoader,
18
- redirectToPreviewURL,
19
- setPreviewData
17
+ redirectToPreviewURL
20
18
  };
21
19
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * ```ts
7
7
  * devMsg("missing-param");
8
- * // => "https://prismic.dev/msg/next/v1.2.3/missing-param.md"
8
+ * // => "https://prismic.dev/msg/next/v1.2.3/missing-param"
9
9
  * ```
10
10
  *
11
11
  * @param slug - Slug for the message. This corresponds to a Markdown file in
@@ -1 +1 @@
1
- {"version":3,"file":"devMsg.js","sources":["../../../src/lib/devMsg.ts"],"sourcesContent":["import { version } from \"../../package.json\";\n\n/**\n * Returns a `prismic.dev/msg` URL for a given message slug.\n *\n * @example\n *\n * ```ts\n * devMsg(\"missing-param\");\n * // => \"https://prismic.dev/msg/next/v1.2.3/missing-param.md\"\n * ```\n *\n * @param slug - Slug for the message. This corresponds to a Markdown file in\n * the Git repository's `/messages` directory.\n *\n * @returns The `prismic.dev/msg` URL for the given slug.\n */\nexport const devMsg = (slug: string) => {\n\treturn `https://prismic.dev/msg/next/v${version}/${slug}`;\n};\n"],"names":[],"mappings":";AAiBa,MAAA,SAAS,CAAC,SAAgB;AAC/B,SAAA,iCAAiC,OAAO,IAAI,IAAI;AACxD;"}
1
+ {"version":3,"file":"devMsg.js","sources":["../../src/lib/devMsg.ts"],"sourcesContent":["import { version } from \"../../package.json\";\n\n/**\n * Returns a `prismic.dev/msg` URL for a given message slug.\n *\n * @example\n *\n * ```ts\n * devMsg(\"missing-param\");\n * // => \"https://prismic.dev/msg/next/v1.2.3/missing-param\"\n * ```\n *\n * @param slug - Slug for the message. This corresponds to a Markdown file in\n * the Git repository's `/messages` directory.\n *\n * @returns The `prismic.dev/msg` URL for the given slug.\n */\nexport const devMsg = (slug: string) => {\n\treturn `https://prismic.dev/msg/next/v${version}/${slug}`;\n};\n"],"names":[],"mappings":";AAiBa,MAAA,SAAS,CAAC,SAAgB;AAC/B,SAAA,iCAAiC,OAAO,IAAI,IAAI;AACxD;"}
@@ -1,4 +1,4 @@
1
- const version = "1.7.1";
1
+ const version = "2.0.0-alpha.1";
2
2
  export {
3
3
  version
4
4
  };