@plasmicapp/nextjs-app-router 1.0.9 → 1.0.10
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/index.esm.js +16 -5
- package/dist/index.esm.js.map +2 -2
- package/dist/index.js +15 -4
- package/dist/index.js.map +2 -2
- package/dist/react-server.d.ts +15 -0
- package/dist/react-server.esm.js +79 -1
- package/dist/react-server.esm.js.map +2 -2
- package/dist/react-server.js +79 -1
- package/dist/react-server.js.map +2 -2
- package/dist/with-plasmic-prepass.cjs.js +0 -1
- package/package.json +5 -3
package/dist/index.esm.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
// src/ExtractPlasmicQueryData.tsx
|
|
4
|
-
import {
|
|
4
|
+
import { plasmicPrepassExtract } from "@plasmicapp/prepass";
|
|
5
5
|
import * as React from "react";
|
|
6
6
|
function ExtractPlasmicQueryData(props) {
|
|
7
7
|
const { children } = props;
|
|
@@ -12,17 +12,28 @@ function ExtractPlasmicQueryData(props) {
|
|
|
12
12
|
}
|
|
13
13
|
const scriptId = `plasmic-prefetch-${React["useId"]()}`;
|
|
14
14
|
if (typeof window === "undefined") {
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const {
|
|
16
|
+
queryData,
|
|
17
|
+
headMetadata
|
|
18
|
+
} = React["use"](plasmicPrepassExtract(/* @__PURE__ */ React.createElement(React.Fragment, null, children)));
|
|
18
19
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
19
20
|
"script",
|
|
20
21
|
{
|
|
21
22
|
type: "application/json",
|
|
22
|
-
dangerouslySetInnerHTML: { __html: JSON.stringify(
|
|
23
|
+
dangerouslySetInnerHTML: { __html: JSON.stringify(queryData) },
|
|
23
24
|
"data-plasmic-prefetch-id": scriptId,
|
|
24
25
|
suppressHydrationWarning: true
|
|
25
26
|
}
|
|
27
|
+
), headMetadata && /* @__PURE__ */ React.createElement(
|
|
28
|
+
"script",
|
|
29
|
+
{
|
|
30
|
+
type: "application/json",
|
|
31
|
+
dangerouslySetInnerHTML: {
|
|
32
|
+
__html: JSON.stringify(headMetadata)
|
|
33
|
+
},
|
|
34
|
+
"data-plasmic-head-metadata-id": scriptId,
|
|
35
|
+
suppressHydrationWarning: true
|
|
36
|
+
}
|
|
26
37
|
));
|
|
27
38
|
} else {
|
|
28
39
|
return null;
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/ExtractPlasmicQueryData.tsx"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": ";;;AAAA,SAAS
|
|
4
|
+
"sourcesContent": ["import { plasmicPrepassExtract } from \"@plasmicapp/prepass\";\nimport type { HeadMetadata } from \"@plasmicapp/query\";\nimport * as React from \"react\";\n\n/**\n * EXPERIMENTAL\n *\n * A component that serves the same purpose as extractPlasmicQueryData(), but from\n * React server components. This only works from frameworks that support\n * React.useId() and React.use() (like Next.js 13).\n *\n * The children of this component will be run through `extractPlasmicQueryData()`.\n */\nexport function ExtractPlasmicQueryData(props: { children?: React.ReactNode }) {\n const { children } = props;\n if (!(\"useId\" in React) || !(\"use\" in React)) {\n throw new Error(\n `You can only use <ExtractPlasmicQueryData /> from server components.`\n );\n }\n const scriptId = `plasmic-prefetch-${(React as any)[\"\" + \"useId\"]()}`;\n if (typeof window === \"undefined\") {\n const {\n queryData,\n headMetadata,\n }: { queryData: Record<string, any>; headMetadata: HeadMetadata } = (\n React as any\n )[\"\" + \"use\"](plasmicPrepassExtract(<>{children}</>));\n return (\n <>\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(queryData) }}\n data-plasmic-prefetch-id={scriptId}\n suppressHydrationWarning={true}\n />\n {headMetadata && (\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{\n __html: JSON.stringify(headMetadata),\n }}\n data-plasmic-head-metadata-id={scriptId}\n suppressHydrationWarning={true}\n />\n )}\n </>\n );\n } else {\n return null;\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;AAAA,SAAS,6BAA6B;AAEtC,YAAY,WAAW;AAWhB,SAAS,wBAAwB,OAAuC;AAC7E,QAAM,EAAE,SAAS,IAAI;AACrB,MAAI,EAAE,WAAW,UAAU,EAAE,SAAS,QAAQ;AAC5C,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,oBAAmC,eAAc;AAClE,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,IAEE,aAAY,sBAAsB,0DAAG,QAAS,CAAG,CAAC;AACpD,WACE,0DACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,yBAAyB,EAAE,QAAQ,KAAK,UAAU,SAAS,EAAE;AAAA,QAC7D,4BAA0B;AAAA,QAC1B,0BAA0B;AAAA;AAAA,IAC5B,GACC,gBACC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,yBAAyB;AAAA,UACvB,QAAQ,KAAK,UAAU,YAAY;AAAA,QACrC;AAAA,QACA,iCAA+B;AAAA,QAC/B,0BAA0B;AAAA;AAAA,IAC5B,CAEJ;AAAA,EAEJ,OAAO;AACL,WAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/index.js
CHANGED
|
@@ -47,17 +47,28 @@ function ExtractPlasmicQueryData(props) {
|
|
|
47
47
|
}
|
|
48
48
|
const scriptId = `plasmic-prefetch-${React["useId"]()}`;
|
|
49
49
|
if (typeof window === "undefined") {
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
const {
|
|
51
|
+
queryData,
|
|
52
|
+
headMetadata
|
|
53
|
+
} = React["use"]((0, import_prepass.plasmicPrepassExtract)(/* @__PURE__ */ React.createElement(React.Fragment, null, children)));
|
|
53
54
|
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
54
55
|
"script",
|
|
55
56
|
{
|
|
56
57
|
type: "application/json",
|
|
57
|
-
dangerouslySetInnerHTML: { __html: JSON.stringify(
|
|
58
|
+
dangerouslySetInnerHTML: { __html: JSON.stringify(queryData) },
|
|
58
59
|
"data-plasmic-prefetch-id": scriptId,
|
|
59
60
|
suppressHydrationWarning: true
|
|
60
61
|
}
|
|
62
|
+
), headMetadata && /* @__PURE__ */ React.createElement(
|
|
63
|
+
"script",
|
|
64
|
+
{
|
|
65
|
+
type: "application/json",
|
|
66
|
+
dangerouslySetInnerHTML: {
|
|
67
|
+
__html: JSON.stringify(headMetadata)
|
|
68
|
+
},
|
|
69
|
+
"data-plasmic-head-metadata-id": scriptId,
|
|
70
|
+
suppressHydrationWarning: true
|
|
71
|
+
}
|
|
61
72
|
));
|
|
62
73
|
} else {
|
|
63
74
|
return null;
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/ExtractPlasmicQueryData.tsx"],
|
|
4
|
-
"sourcesContent": ["export * from \"./ExtractPlasmicQueryData\";\n", "import {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,
|
|
4
|
+
"sourcesContent": ["export * from \"./ExtractPlasmicQueryData\";\n", "import { plasmicPrepassExtract } from \"@plasmicapp/prepass\";\nimport type { HeadMetadata } from \"@plasmicapp/query\";\nimport * as React from \"react\";\n\n/**\n * EXPERIMENTAL\n *\n * A component that serves the same purpose as extractPlasmicQueryData(), but from\n * React server components. This only works from frameworks that support\n * React.useId() and React.use() (like Next.js 13).\n *\n * The children of this component will be run through `extractPlasmicQueryData()`.\n */\nexport function ExtractPlasmicQueryData(props: { children?: React.ReactNode }) {\n const { children } = props;\n if (!(\"useId\" in React) || !(\"use\" in React)) {\n throw new Error(\n `You can only use <ExtractPlasmicQueryData /> from server components.`\n );\n }\n const scriptId = `plasmic-prefetch-${(React as any)[\"\" + \"useId\"]()}`;\n if (typeof window === \"undefined\") {\n const {\n queryData,\n headMetadata,\n }: { queryData: Record<string, any>; headMetadata: HeadMetadata } = (\n React as any\n )[\"\" + \"use\"](plasmicPrepassExtract(<>{children}</>));\n return (\n <>\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(queryData) }}\n data-plasmic-prefetch-id={scriptId}\n suppressHydrationWarning={true}\n />\n {headMetadata && (\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{\n __html: JSON.stringify(headMetadata),\n }}\n data-plasmic-head-metadata-id={scriptId}\n suppressHydrationWarning={true}\n />\n )}\n </>\n );\n } else {\n return null;\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,qBAAsC;AAEtC,YAAuB;AAWhB,SAAS,wBAAwB,OAAuC;AAC7E,QAAM,EAAE,SAAS,IAAI;AACrB,MAAI,EAAE,WAAW,UAAU,EAAE,SAAS,QAAQ;AAC5C,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,WAAW,oBAAmC,eAAc;AAClE,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,IAEE,iBAAY,sCAAsB,0DAAG,QAAS,CAAG,CAAC;AACpD,WACE,0DACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,yBAAyB,EAAE,QAAQ,KAAK,UAAU,SAAS,EAAE;AAAA,QAC7D,4BAA0B;AAAA,QAC1B,0BAA0B;AAAA;AAAA,IAC5B,GACC,gBACC;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,yBAAyB;AAAA,UACvB,QAAQ,KAAK,UAAU,YAAY;AAAA,QACrC;AAAA,QACA,iCAA+B;AAAA,QAC/B,0BAA0B;AAAA;AAAA,IAC5B,CAEJ;AAAA,EAEJ,OAAO;AACL,WAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/react-server.d.ts
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
import type { HeadMetadata } from '@plasmicapp/query';
|
|
2
|
+
|
|
3
|
+
export declare function fetchExtractedHeadMetadata(url: string): Promise<HeadMetadata | undefined>;
|
|
4
|
+
|
|
1
5
|
export declare function fetchExtractedQueryData(url: string): Promise<any>;
|
|
2
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Helper function to extract Head metadata from Plasmic pages.
|
|
9
|
+
*
|
|
10
|
+
* Given current pathname + search params, returns an object compatible with
|
|
11
|
+
* Next.js Metadata interface with SEO metadata.
|
|
12
|
+
*/
|
|
13
|
+
export declare function withPlasmicMetadata({ pathname, searchParams, }: {
|
|
14
|
+
pathname: string;
|
|
15
|
+
searchParams: Record<string, string | string[]> | undefined;
|
|
16
|
+
}): Promise<object>;
|
|
17
|
+
|
|
3
18
|
export { }
|
package/dist/react-server.esm.js
CHANGED
|
@@ -36,7 +36,85 @@ function fetchExtractedQueryData(url) {
|
|
|
36
36
|
return void 0;
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
|
+
function fetchExtractedHeadMetadata(url) {
|
|
40
|
+
return __async(this, null, function* () {
|
|
41
|
+
const res = yield fetch(url);
|
|
42
|
+
if (res.status !== 200) {
|
|
43
|
+
return void 0;
|
|
44
|
+
}
|
|
45
|
+
const html = yield res.text();
|
|
46
|
+
const root = parseHtml(html);
|
|
47
|
+
const script = root.querySelector("script[data-plasmic-head-metadata-id]");
|
|
48
|
+
if (script) {
|
|
49
|
+
return JSON.parse(script.innerHTML);
|
|
50
|
+
}
|
|
51
|
+
return void 0;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function withPlasmicMetadata(_0) {
|
|
55
|
+
return __async(this, arguments, function* ({
|
|
56
|
+
pathname,
|
|
57
|
+
searchParams
|
|
58
|
+
}) {
|
|
59
|
+
var _a, _b, _c;
|
|
60
|
+
const isPlasmicSsr = !!(searchParams == null ? void 0 : searchParams["plasmicSsr"]) && (searchParams == null ? void 0 : searchParams["plasmicSsr"]) !== "false";
|
|
61
|
+
if (isPlasmicSsr) {
|
|
62
|
+
return {};
|
|
63
|
+
}
|
|
64
|
+
const prepassHost = (_c = (_a = process.env.PLASMIC_PREPASS_HOST) != null ? _a : process.env.VERCEL_URL && `https://${process.env.VERCEL_URL}`) != null ? _c : `http://localhost:${(_b = process.env.PORT) != null ? _b : 3e3}`;
|
|
65
|
+
const newSearchParams = new URLSearchParams(
|
|
66
|
+
Object.entries(searchParams != null ? searchParams : {}).flatMap(
|
|
67
|
+
([key, values]) => Array.isArray(values) ? values.map((v) => [key, v]) : [[key, values]]
|
|
68
|
+
)
|
|
69
|
+
);
|
|
70
|
+
newSearchParams.set("plasmicSsr", "true");
|
|
71
|
+
if (process.env.VERCEL_AUTOMATION_BYPASS_SECRET) {
|
|
72
|
+
newSearchParams.set(
|
|
73
|
+
"x-vercel-protection-bypass",
|
|
74
|
+
process.env.VERCEL_AUTOMATION_BYPASS_SECRET
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
const prefetchedHeadMetadata = yield fetchExtractedHeadMetadata(
|
|
78
|
+
`${prepassHost}${pathname}?${newSearchParams.toString()}`
|
|
79
|
+
);
|
|
80
|
+
const headMetadata = {};
|
|
81
|
+
if (prefetchedHeadMetadata && Object.keys(prefetchedHeadMetadata).length > 0) {
|
|
82
|
+
if (prefetchedHeadMetadata.image) {
|
|
83
|
+
headMetadata.twitter = {
|
|
84
|
+
card: "summary_large_image",
|
|
85
|
+
images: [prefetchedHeadMetadata.image]
|
|
86
|
+
};
|
|
87
|
+
headMetadata.openGraph = {
|
|
88
|
+
images: [prefetchedHeadMetadata.image]
|
|
89
|
+
};
|
|
90
|
+
} else {
|
|
91
|
+
headMetadata.twitter = {
|
|
92
|
+
card: "summary"
|
|
93
|
+
};
|
|
94
|
+
headMetadata.openGraph = {};
|
|
95
|
+
}
|
|
96
|
+
if (prefetchedHeadMetadata.title) {
|
|
97
|
+
headMetadata.title = prefetchedHeadMetadata.title;
|
|
98
|
+
headMetadata.twitter.title = prefetchedHeadMetadata.title;
|
|
99
|
+
headMetadata.openGraph.title = prefetchedHeadMetadata.title;
|
|
100
|
+
}
|
|
101
|
+
if (prefetchedHeadMetadata.description) {
|
|
102
|
+
headMetadata.description = prefetchedHeadMetadata.description;
|
|
103
|
+
headMetadata.twitter.description = prefetchedHeadMetadata.description;
|
|
104
|
+
headMetadata.openGraph.description = prefetchedHeadMetadata.description;
|
|
105
|
+
}
|
|
106
|
+
if (prefetchedHeadMetadata.canonical) {
|
|
107
|
+
headMetadata.alternates = {
|
|
108
|
+
canonical: prefetchedHeadMetadata.canonical
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return headMetadata;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
39
115
|
export {
|
|
40
|
-
|
|
116
|
+
fetchExtractedHeadMetadata,
|
|
117
|
+
fetchExtractedQueryData,
|
|
118
|
+
withPlasmicMetadata
|
|
41
119
|
};
|
|
42
120
|
//# sourceMappingURL=react-server.esm.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/extracted-data-fetcher.ts"],
|
|
4
|
-
"sourcesContent": ["import { parse as parseHtml } from \"node-html-parser\";\n\nexport async function fetchExtractedQueryData(url: string) {\n const res = await fetch(url);\n if (res.status !== 200) {\n return undefined;\n }\n\n const html = await res.text();\n const root = parseHtml(html);\n const script = root.querySelector(\"script[data-plasmic-prefetch-id]\");\n if (script) {\n return JSON.parse(script.innerHTML);\n }\n return undefined;\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;
|
|
4
|
+
"sourcesContent": ["import type { HeadMetadata } from \"@plasmicapp/query\";\nimport { parse as parseHtml } from \"node-html-parser\";\nimport { Metadata } from \"next\";\n\nexport async function fetchExtractedQueryData(url: string) {\n const res = await fetch(url);\n if (res.status !== 200) {\n return undefined;\n }\n\n const html = await res.text();\n const root = parseHtml(html);\n const script = root.querySelector(\"script[data-plasmic-prefetch-id]\");\n if (script) {\n return JSON.parse(script.innerHTML);\n }\n return undefined;\n}\n\nexport async function fetchExtractedHeadMetadata(\n url: string\n): Promise<HeadMetadata | undefined> {\n const res = await fetch(url);\n if (res.status !== 200) {\n return undefined;\n }\n\n const html = await res.text();\n const root = parseHtml(html);\n const script = root.querySelector(\"script[data-plasmic-head-metadata-id]\");\n if (script) {\n return JSON.parse(script.innerHTML);\n }\n return undefined;\n}\n\n/**\n * Helper function to extract Head metadata from Plasmic pages.\n *\n * Given current pathname + search params, returns an object compatible with\n * Next.js Metadata interface with SEO metadata.\n */\nexport async function withPlasmicMetadata({\n pathname,\n searchParams,\n}: {\n pathname: string;\n searchParams: Record<string, string | string[]> | undefined;\n}): Promise<object> {\n const isPlasmicSsr =\n !!searchParams?.[\"plasmicSsr\"] && searchParams?.[\"plasmicSsr\"] !== \"false\";\n\n if (isPlasmicSsr) {\n // We're building the metadata for SSR endpoint here; this endpoint is not\n // exposed for users, so we can just return an empty object.\n return {};\n }\n\n // Fetch the same page from SSR endpoint to retrieve Head metadata\n const prepassHost =\n process.env.PLASMIC_PREPASS_HOST ??\n (process.env.VERCEL_URL && `https://${process.env.VERCEL_URL}`) ??\n `http://localhost:${process.env.PORT ?? 3000}`;\n\n // Build a copy of the search params\n const newSearchParams = new URLSearchParams(\n Object.entries(searchParams ?? {}).flatMap(([key, values]) =>\n Array.isArray(values) ? values.map((v) => [key, v]) : [[key, values]]\n )\n );\n\n // Set `plasmicSsr` search param to indicate you are using the SSR endpoint.\n newSearchParams.set(\"plasmicSsr\", \"true\");\n\n if (process.env.VERCEL_AUTOMATION_BYPASS_SECRET) {\n // If protection bypass is enabled, use it to ensure fetching from\n // the SSR endpoint will not return the authentication page HTML\n newSearchParams.set(\n \"x-vercel-protection-bypass\",\n process.env.VERCEL_AUTOMATION_BYPASS_SECRET\n );\n }\n\n // Fetch and return the data from the endpoint using the new search params\n const prefetchedHeadMetadata = await fetchExtractedHeadMetadata(\n `${prepassHost}${pathname}?${newSearchParams.toString()}`\n );\n\n // Create metadata object\n const headMetadata: Metadata = {};\n if (\n prefetchedHeadMetadata &&\n Object.keys(prefetchedHeadMetadata).length > 0\n ) {\n if (prefetchedHeadMetadata.image) {\n headMetadata.twitter = {\n card: \"summary_large_image\",\n images: [prefetchedHeadMetadata.image],\n };\n headMetadata.openGraph = {\n images: [prefetchedHeadMetadata.image],\n };\n } else {\n headMetadata.twitter = {\n card: \"summary\",\n };\n headMetadata.openGraph = {};\n }\n if (prefetchedHeadMetadata.title) {\n headMetadata.title = prefetchedHeadMetadata.title;\n headMetadata.twitter.title = prefetchedHeadMetadata.title;\n headMetadata.openGraph.title = prefetchedHeadMetadata.title;\n }\n if (prefetchedHeadMetadata.description) {\n headMetadata.description = prefetchedHeadMetadata.description;\n headMetadata.twitter.description = prefetchedHeadMetadata.description;\n headMetadata.openGraph.description = prefetchedHeadMetadata.description;\n }\n if (prefetchedHeadMetadata.canonical) {\n headMetadata.alternates = {\n canonical: prefetchedHeadMetadata.canonical,\n };\n }\n }\n\n return headMetadata;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AACA,SAAS,SAAS,iBAAiB;AAGnC,SAAsB,wBAAwB,KAAa;AAAA;AACzD,UAAM,MAAM,MAAM,MAAM,GAAG;AAC3B,QAAI,IAAI,WAAW,KAAK;AACtB,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAM,OAAO,UAAU,IAAI;AAC3B,UAAM,SAAS,KAAK,cAAc,kCAAkC;AACpE,QAAI,QAAQ;AACV,aAAO,KAAK,MAAM,OAAO,SAAS;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA;AAEA,SAAsB,2BACpB,KACmC;AAAA;AACnC,UAAM,MAAM,MAAM,MAAM,GAAG;AAC3B,QAAI,IAAI,WAAW,KAAK;AACtB,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAM,OAAO,UAAU,IAAI;AAC3B,UAAM,SAAS,KAAK,cAAc,uCAAuC;AACzE,QAAI,QAAQ;AACV,aAAO,KAAK,MAAM,OAAO,SAAS;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAAA;AAQA,SAAsB,oBAAoB,IAMtB;AAAA,6CANsB;AAAA,IACxC;AAAA,IACA;AAAA,EACF,GAGoB;AAhDpB;AAiDE,UAAM,eACJ,CAAC,EAAC,6CAAe,mBAAiB,6CAAe,mBAAkB;AAErE,QAAI,cAAc;AAGhB,aAAO,CAAC;AAAA,IACV;AAGA,UAAM,eACJ,mBAAQ,IAAI,yBAAZ,YACC,QAAQ,IAAI,cAAc,WAAW,QAAQ,IAAI,iBADlD,YAEA,qBAAoB,aAAQ,IAAI,SAAZ,YAAoB;AAG1C,UAAM,kBAAkB,IAAI;AAAA,MAC1B,OAAO,QAAQ,sCAAgB,CAAC,CAAC,EAAE;AAAA,QAAQ,CAAC,CAAC,KAAK,MAAM,MACtD,MAAM,QAAQ,MAAM,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,MAAM,CAAC;AAAA,MACtE;AAAA,IACF;AAGA,oBAAgB,IAAI,cAAc,MAAM;AAExC,QAAI,QAAQ,IAAI,iCAAiC;AAG/C,sBAAgB;AAAA,QACd;AAAA,QACA,QAAQ,IAAI;AAAA,MACd;AAAA,IACF;AAGA,UAAM,yBAAyB,MAAM;AAAA,MACnC,GAAG,cAAc,YAAY,gBAAgB,SAAS;AAAA,IACxD;AAGA,UAAM,eAAyB,CAAC;AAChC,QACE,0BACA,OAAO,KAAK,sBAAsB,EAAE,SAAS,GAC7C;AACA,UAAI,uBAAuB,OAAO;AAChC,qBAAa,UAAU;AAAA,UACrB,MAAM;AAAA,UACN,QAAQ,CAAC,uBAAuB,KAAK;AAAA,QACvC;AACA,qBAAa,YAAY;AAAA,UACvB,QAAQ,CAAC,uBAAuB,KAAK;AAAA,QACvC;AAAA,MACF,OAAO;AACL,qBAAa,UAAU;AAAA,UACrB,MAAM;AAAA,QACR;AACA,qBAAa,YAAY,CAAC;AAAA,MAC5B;AACA,UAAI,uBAAuB,OAAO;AAChC,qBAAa,QAAQ,uBAAuB;AAC5C,qBAAa,QAAQ,QAAQ,uBAAuB;AACpD,qBAAa,UAAU,QAAQ,uBAAuB;AAAA,MACxD;AACA,UAAI,uBAAuB,aAAa;AACtC,qBAAa,cAAc,uBAAuB;AAClD,qBAAa,QAAQ,cAAc,uBAAuB;AAC1D,qBAAa,UAAU,cAAc,uBAAuB;AAAA,MAC9D;AACA,UAAI,uBAAuB,WAAW;AACpC,qBAAa,aAAa;AAAA,UACxB,WAAW,uBAAuB;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/react-server.js
CHANGED
|
@@ -40,7 +40,9 @@ var __async = (__this, __arguments, generator) => {
|
|
|
40
40
|
// src/react-server.ts
|
|
41
41
|
var react_server_exports = {};
|
|
42
42
|
__export(react_server_exports, {
|
|
43
|
-
|
|
43
|
+
fetchExtractedHeadMetadata: () => fetchExtractedHeadMetadata,
|
|
44
|
+
fetchExtractedQueryData: () => fetchExtractedQueryData,
|
|
45
|
+
withPlasmicMetadata: () => withPlasmicMetadata
|
|
44
46
|
});
|
|
45
47
|
module.exports = __toCommonJS(react_server_exports);
|
|
46
48
|
|
|
@@ -61,4 +63,80 @@ function fetchExtractedQueryData(url) {
|
|
|
61
63
|
return void 0;
|
|
62
64
|
});
|
|
63
65
|
}
|
|
66
|
+
function fetchExtractedHeadMetadata(url) {
|
|
67
|
+
return __async(this, null, function* () {
|
|
68
|
+
const res = yield fetch(url);
|
|
69
|
+
if (res.status !== 200) {
|
|
70
|
+
return void 0;
|
|
71
|
+
}
|
|
72
|
+
const html = yield res.text();
|
|
73
|
+
const root = (0, import_node_html_parser.parse)(html);
|
|
74
|
+
const script = root.querySelector("script[data-plasmic-head-metadata-id]");
|
|
75
|
+
if (script) {
|
|
76
|
+
return JSON.parse(script.innerHTML);
|
|
77
|
+
}
|
|
78
|
+
return void 0;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function withPlasmicMetadata(_0) {
|
|
82
|
+
return __async(this, arguments, function* ({
|
|
83
|
+
pathname,
|
|
84
|
+
searchParams
|
|
85
|
+
}) {
|
|
86
|
+
var _a, _b, _c;
|
|
87
|
+
const isPlasmicSsr = !!(searchParams == null ? void 0 : searchParams["plasmicSsr"]) && (searchParams == null ? void 0 : searchParams["plasmicSsr"]) !== "false";
|
|
88
|
+
if (isPlasmicSsr) {
|
|
89
|
+
return {};
|
|
90
|
+
}
|
|
91
|
+
const prepassHost = (_c = (_a = process.env.PLASMIC_PREPASS_HOST) != null ? _a : process.env.VERCEL_URL && `https://${process.env.VERCEL_URL}`) != null ? _c : `http://localhost:${(_b = process.env.PORT) != null ? _b : 3e3}`;
|
|
92
|
+
const newSearchParams = new URLSearchParams(
|
|
93
|
+
Object.entries(searchParams != null ? searchParams : {}).flatMap(
|
|
94
|
+
([key, values]) => Array.isArray(values) ? values.map((v) => [key, v]) : [[key, values]]
|
|
95
|
+
)
|
|
96
|
+
);
|
|
97
|
+
newSearchParams.set("plasmicSsr", "true");
|
|
98
|
+
if (process.env.VERCEL_AUTOMATION_BYPASS_SECRET) {
|
|
99
|
+
newSearchParams.set(
|
|
100
|
+
"x-vercel-protection-bypass",
|
|
101
|
+
process.env.VERCEL_AUTOMATION_BYPASS_SECRET
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
const prefetchedHeadMetadata = yield fetchExtractedHeadMetadata(
|
|
105
|
+
`${prepassHost}${pathname}?${newSearchParams.toString()}`
|
|
106
|
+
);
|
|
107
|
+
const headMetadata = {};
|
|
108
|
+
if (prefetchedHeadMetadata && Object.keys(prefetchedHeadMetadata).length > 0) {
|
|
109
|
+
if (prefetchedHeadMetadata.image) {
|
|
110
|
+
headMetadata.twitter = {
|
|
111
|
+
card: "summary_large_image",
|
|
112
|
+
images: [prefetchedHeadMetadata.image]
|
|
113
|
+
};
|
|
114
|
+
headMetadata.openGraph = {
|
|
115
|
+
images: [prefetchedHeadMetadata.image]
|
|
116
|
+
};
|
|
117
|
+
} else {
|
|
118
|
+
headMetadata.twitter = {
|
|
119
|
+
card: "summary"
|
|
120
|
+
};
|
|
121
|
+
headMetadata.openGraph = {};
|
|
122
|
+
}
|
|
123
|
+
if (prefetchedHeadMetadata.title) {
|
|
124
|
+
headMetadata.title = prefetchedHeadMetadata.title;
|
|
125
|
+
headMetadata.twitter.title = prefetchedHeadMetadata.title;
|
|
126
|
+
headMetadata.openGraph.title = prefetchedHeadMetadata.title;
|
|
127
|
+
}
|
|
128
|
+
if (prefetchedHeadMetadata.description) {
|
|
129
|
+
headMetadata.description = prefetchedHeadMetadata.description;
|
|
130
|
+
headMetadata.twitter.description = prefetchedHeadMetadata.description;
|
|
131
|
+
headMetadata.openGraph.description = prefetchedHeadMetadata.description;
|
|
132
|
+
}
|
|
133
|
+
if (prefetchedHeadMetadata.canonical) {
|
|
134
|
+
headMetadata.alternates = {
|
|
135
|
+
canonical: prefetchedHeadMetadata.canonical
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return headMetadata;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
64
142
|
//# sourceMappingURL=react-server.js.map
|
package/dist/react-server.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/react-server.ts", "../src/extracted-data-fetcher.ts"],
|
|
4
|
-
"sourcesContent": ["export * from \"./extracted-data-fetcher\";\n", "import { parse as parseHtml } from \"node-html-parser\";\n\nexport async function fetchExtractedQueryData(url: string) {\n const res = await fetch(url);\n if (res.status !== 200) {\n return undefined;\n }\n\n const html = await res.text();\n const root = parseHtml(html);\n const script = root.querySelector(\"script[data-plasmic-prefetch-id]\");\n if (script) {\n return JSON.parse(script.innerHTML);\n }\n return undefined;\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;
|
|
4
|
+
"sourcesContent": ["export * from \"./extracted-data-fetcher\";\n", "import type { HeadMetadata } from \"@plasmicapp/query\";\nimport { parse as parseHtml } from \"node-html-parser\";\nimport { Metadata } from \"next\";\n\nexport async function fetchExtractedQueryData(url: string) {\n const res = await fetch(url);\n if (res.status !== 200) {\n return undefined;\n }\n\n const html = await res.text();\n const root = parseHtml(html);\n const script = root.querySelector(\"script[data-plasmic-prefetch-id]\");\n if (script) {\n return JSON.parse(script.innerHTML);\n }\n return undefined;\n}\n\nexport async function fetchExtractedHeadMetadata(\n url: string\n): Promise<HeadMetadata | undefined> {\n const res = await fetch(url);\n if (res.status !== 200) {\n return undefined;\n }\n\n const html = await res.text();\n const root = parseHtml(html);\n const script = root.querySelector(\"script[data-plasmic-head-metadata-id]\");\n if (script) {\n return JSON.parse(script.innerHTML);\n }\n return undefined;\n}\n\n/**\n * Helper function to extract Head metadata from Plasmic pages.\n *\n * Given current pathname + search params, returns an object compatible with\n * Next.js Metadata interface with SEO metadata.\n */\nexport async function withPlasmicMetadata({\n pathname,\n searchParams,\n}: {\n pathname: string;\n searchParams: Record<string, string | string[]> | undefined;\n}): Promise<object> {\n const isPlasmicSsr =\n !!searchParams?.[\"plasmicSsr\"] && searchParams?.[\"plasmicSsr\"] !== \"false\";\n\n if (isPlasmicSsr) {\n // We're building the metadata for SSR endpoint here; this endpoint is not\n // exposed for users, so we can just return an empty object.\n return {};\n }\n\n // Fetch the same page from SSR endpoint to retrieve Head metadata\n const prepassHost =\n process.env.PLASMIC_PREPASS_HOST ??\n (process.env.VERCEL_URL && `https://${process.env.VERCEL_URL}`) ??\n `http://localhost:${process.env.PORT ?? 3000}`;\n\n // Build a copy of the search params\n const newSearchParams = new URLSearchParams(\n Object.entries(searchParams ?? {}).flatMap(([key, values]) =>\n Array.isArray(values) ? values.map((v) => [key, v]) : [[key, values]]\n )\n );\n\n // Set `plasmicSsr` search param to indicate you are using the SSR endpoint.\n newSearchParams.set(\"plasmicSsr\", \"true\");\n\n if (process.env.VERCEL_AUTOMATION_BYPASS_SECRET) {\n // If protection bypass is enabled, use it to ensure fetching from\n // the SSR endpoint will not return the authentication page HTML\n newSearchParams.set(\n \"x-vercel-protection-bypass\",\n process.env.VERCEL_AUTOMATION_BYPASS_SECRET\n );\n }\n\n // Fetch and return the data from the endpoint using the new search params\n const prefetchedHeadMetadata = await fetchExtractedHeadMetadata(\n `${prepassHost}${pathname}?${newSearchParams.toString()}`\n );\n\n // Create metadata object\n const headMetadata: Metadata = {};\n if (\n prefetchedHeadMetadata &&\n Object.keys(prefetchedHeadMetadata).length > 0\n ) {\n if (prefetchedHeadMetadata.image) {\n headMetadata.twitter = {\n card: \"summary_large_image\",\n images: [prefetchedHeadMetadata.image],\n };\n headMetadata.openGraph = {\n images: [prefetchedHeadMetadata.image],\n };\n } else {\n headMetadata.twitter = {\n card: \"summary\",\n };\n headMetadata.openGraph = {};\n }\n if (prefetchedHeadMetadata.title) {\n headMetadata.title = prefetchedHeadMetadata.title;\n headMetadata.twitter.title = prefetchedHeadMetadata.title;\n headMetadata.openGraph.title = prefetchedHeadMetadata.title;\n }\n if (prefetchedHeadMetadata.description) {\n headMetadata.description = prefetchedHeadMetadata.description;\n headMetadata.twitter.description = prefetchedHeadMetadata.description;\n headMetadata.openGraph.description = prefetchedHeadMetadata.description;\n }\n if (prefetchedHeadMetadata.canonical) {\n headMetadata.alternates = {\n canonical: prefetchedHeadMetadata.canonical,\n };\n }\n }\n\n return headMetadata;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["parseHtml"]
|
|
7
7
|
}
|
|
@@ -7603,7 +7603,6 @@ async function main() {
|
|
|
7603
7603
|
import_process.default.exit(commandProcess.exitCode ?? void 0);
|
|
7604
7604
|
}).catch((err) => {
|
|
7605
7605
|
console.error(`Plasmic: Failed to kill dev server: ${err}`);
|
|
7606
|
-
import_process.default.exit(1);
|
|
7607
7606
|
});
|
|
7608
7607
|
};
|
|
7609
7608
|
const command2 = argv._.map((x) => `${x}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plasmicapp/nextjs-app-router",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"types": "./dist/index.d.ts",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.esm.js",
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"prepare": "if-env PREPARE_NO_BUILD=true || yarn build"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@plasmicapp/prepass": "1.0.
|
|
28
|
+
"@plasmicapp/prepass": "1.0.17",
|
|
29
|
+
"@plasmicapp/query": "0.1.79",
|
|
29
30
|
"fkill": "^8.1.0",
|
|
30
31
|
"get-port": "^7.0.0",
|
|
31
32
|
"node-html-parser": "^6.1.5",
|
|
@@ -67,8 +68,9 @@
|
|
|
67
68
|
"@types/node": "^20.8.9",
|
|
68
69
|
"@types/react": "^18.0.27",
|
|
69
70
|
"@types/yargs": "^17.0.32",
|
|
71
|
+
"next": "^13.2.0",
|
|
70
72
|
"react": "^18.2.0",
|
|
71
73
|
"typescript": "^5.2.2"
|
|
72
74
|
},
|
|
73
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "2f8ee12f8f9c75c0f0af3834b8302b0bea542cbd"
|
|
74
76
|
}
|