@plasmicapp/nextjs-app-router 1.0.8 → 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/README.codegen.md +153 -0
- 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
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
This package provides helpers for doing extractPlasmicQueryData() with Next.js App Router.
|
|
2
|
+
|
|
3
|
+
We normally use react-ssr-prepass to fake-render a React tree to gather data requirements. We can't do so in RSC mode, because all the client components are imported as placeholders, so we cannot fake-render them.
|
|
4
|
+
|
|
5
|
+
The idea here is to use the dev server's SSR instead! At SSR time (instead of RSC time), we do have access to imported client components. So... we could do pre-rendering there, gather the data needs, and respond with them. At RSC time, we hit the SSR endpoint, and parse out the data needs.
|
|
6
|
+
|
|
7
|
+
So...
|
|
8
|
+
|
|
9
|
+
1. First update you `plasmic.json` to use the `app` directory for pages and run `plasmic sync` again to automatically move the pages there:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
"nextjsConfig": {
|
|
13
|
+
"pagesDir": "../app"
|
|
14
|
+
},
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
2. Update `app/MyPage/page.tsx` to conditionally wrap the page contents inside `<ExtractPlasmicQueryData>` to extract the query data. It would look something like:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
// app/page.tsx
|
|
21
|
+
|
|
22
|
+
import * as React from "react";
|
|
23
|
+
import { PageParamsProvider as PageParamsProvider__ } from "@plasmicapp/react-web/lib/host";
|
|
24
|
+
import { PlasmicHomepage } from "../components/plasmic/my-plasmic-project/PlasmicHomepage";
|
|
25
|
+
import { PlasmicQueryDataProvider } from "@plasmicapp/react-web/lib/query";
|
|
26
|
+
import { ExtractPlasmicQueryData } from "@plasmicapp/nextjs-app-router";
|
|
27
|
+
import { fetchExtractedQueryData } from "@plasmicapp/nextjs-app-router/react-server";
|
|
28
|
+
|
|
29
|
+
// (Optional: In case you project uses Global Contexts)
|
|
30
|
+
import GlobalContextsProvider from "../components/plasmic/my-plasmic-project/PlasmicGlobalContextsProvider";
|
|
31
|
+
|
|
32
|
+
async function Homepage({
|
|
33
|
+
searchParams,
|
|
34
|
+
}: {
|
|
35
|
+
searchParams?: Record<string, string | string[]>;
|
|
36
|
+
}) {
|
|
37
|
+
return withExtractPlasmicQueryData(
|
|
38
|
+
<GlobalContextsProvider>
|
|
39
|
+
<PageParamsProvider__ route={"/"} query={searchParams}>
|
|
40
|
+
<PlasmicHomepage />
|
|
41
|
+
</PageParamsProvider__>
|
|
42
|
+
</GlobalContextsProvider>,
|
|
43
|
+
{
|
|
44
|
+
pathname: "/",
|
|
45
|
+
searchParams,
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default Homepage;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Helper function to extract Plasmic data.
|
|
54
|
+
*
|
|
55
|
+
* Given React element for your page and current pathname + search
|
|
56
|
+
* params, returns:
|
|
57
|
+
* - The extracted query data, if `plasmicSsr` search param is set
|
|
58
|
+
* - A copy of the page element wraped within PlasmicQueryDataProvider to provide the extracted query data, otherwise
|
|
59
|
+
*/
|
|
60
|
+
async function withExtractPlasmicQueryData(
|
|
61
|
+
pageRootElt: React.ReactElement,
|
|
62
|
+
{
|
|
63
|
+
pathname,
|
|
64
|
+
searchParams,
|
|
65
|
+
}: {
|
|
66
|
+
pathname: string;
|
|
67
|
+
searchParams: Record<string, string | string[]> | undefined;
|
|
68
|
+
}
|
|
69
|
+
) {
|
|
70
|
+
const isPlasmicSsr =
|
|
71
|
+
!!searchParams?.["plasmicSsr"] && searchParams?.["plasmicSsr"] !== "false";
|
|
72
|
+
|
|
73
|
+
// If `plasmicSsr` search param is set, just wrap the page inside
|
|
74
|
+
// <ExtractPlasmicQueryData>
|
|
75
|
+
if (isPlasmicSsr) {
|
|
76
|
+
return <ExtractPlasmicQueryData>{pageRootElt}</ExtractPlasmicQueryData>;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Otherwise, fetch the same endpoint, but setting `plasmicSsr` to extract the
|
|
80
|
+
// query data.
|
|
81
|
+
const prepassHost =
|
|
82
|
+
process.env.PLASMIC_PREPASS_HOST ??
|
|
83
|
+
(process.env.VERCEL_URL && `https://${process.env.VERCEL_URL}`) ??
|
|
84
|
+
`http://localhost:${process.env.PORT ?? 3000}`;
|
|
85
|
+
|
|
86
|
+
// Build a copy of the search params
|
|
87
|
+
const newSearchParams = new URLSearchParams(
|
|
88
|
+
Object.entries(searchParams ?? {}).flatMap(([key, values]) =>
|
|
89
|
+
Array.isArray(values) ? values.map((v) => [key, v]) : [[key, values]]
|
|
90
|
+
)
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
// Set `plasmicSsr` search param to indicate you are using this endpoint
|
|
94
|
+
// to extract query data.
|
|
95
|
+
newSearchParams.set("plasmicSsr", "true");
|
|
96
|
+
|
|
97
|
+
if (process.env.VERCEL_AUTOMATION_BYPASS_SECRET) {
|
|
98
|
+
// If protection bypass is enabled, use it to ensure fetching from
|
|
99
|
+
// the SSR endpoint will not return the authentication page HTML
|
|
100
|
+
newSearchParams.set(
|
|
101
|
+
"x-vercel-protection-bypass",
|
|
102
|
+
process.env.VERCEL_AUTOMATION_BYPASS_SECRET
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Fetch the data from the endpoint using the new search params
|
|
107
|
+
const prefetchedQueryData = await fetchExtractedQueryData(
|
|
108
|
+
`${prepassHost}${pathname}?${newSearchParams.toString()}`
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
// Provide the query data to your page
|
|
112
|
+
return (
|
|
113
|
+
<PlasmicQueryDataProvider prefetchedCache={prefetchedQueryData}>
|
|
114
|
+
{pageRootElt}
|
|
115
|
+
</PlasmicQueryDataProvider>
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
`<ExtractPlasmicQueryData />` is a new client component from this package, which basically performs `extractPlasmicQueryData()` on its children, and then renders a `<script data-plasmic-prefetch-id/>` tag with the json of the extracted data. The helper function `withExtractPlasmicQueryData` will likely be moved into the package in the future.
|
|
122
|
+
|
|
123
|
+
Here, `fetchExtractedQueryData()` basically just hits the same endpoint with `?plasmicSsr=true`, and extracts the data from the json embedded in the `<script/>`.
|
|
124
|
+
|
|
125
|
+
The `prepassHost` to use is read from `PLASMIC_PREPASS_HOST` or `VERCEL_URL`. `VERCEL_URL` is available when your site is deployed on Vercel; it is the generated deployment url.
|
|
126
|
+
|
|
127
|
+
3. If you have static generation at build time, `@plasmicapp/nextjs-app-router` also comes with a `with-plasmic-prepass` command that you can use like this in your package.json:
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
"script": {
|
|
131
|
+
"build": "with-plasmic-prepass -- next build"
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
This script will start up the next dev server at some random port (by running npm run dev), run the passed command, and then kill the dev server. It will run the command with the proper `PLASMIC_PREPASS_HOST` env variable, so the user never needs to think about it. You can choose to use a different package.json script command to start the dev server via `with-plasmic-prepass -c prepass -- next build`.
|
|
136
|
+
|
|
137
|
+
Unfortunately another drawback is that the dev server and the build process will step on each other's toes, so you need to direct them to use different output folders. You do it in `next.config.js`:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
module.exports = {
|
|
141
|
+
distDir: process.env.PLASMIC_PREPASS_SERVER ? ".next-prepass" : ".next"
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
The `PLASMIC_PREPASS_SERVER` environment variable will be set by with-plasmic-prepass.
|
|
146
|
+
|
|
147
|
+
4. If you are deploying to Vercel, make sure to either disable [Vercel Authentication](https://vercel.com/docs/security/deployment-protection/methods-to-protect-deployments/vercel-authentication) or provide the [Protection Bypass](https://vercel.com/docs/security/deployment-protection/methods-to-bypass-deployment-protection/protection-bypass-automation) (Note: this is a paid feature). This is to ensure the SSR endpoint will not return Vercel's page authentication HTML.
|
|
148
|
+
|
|
149
|
+
So...
|
|
150
|
+
|
|
151
|
+
- At dev time, uses itself for extracting query data (hits `localhost:${PORT}`)
|
|
152
|
+
- At build time, we start a parallel dev server via `with-plasmic-prepass`.
|
|
153
|
+
- In production, with revalidation, it will also use itself for extracting query data (using `VERCEL_URL` as the prepass host).
|
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
|
}
|