@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.
@@ -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 { extractPlasmicQueryData } from "@plasmicapp/prepass";
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 data = React["use"](
16
- extractPlasmicQueryData(/* @__PURE__ */ React.createElement(React.Fragment, null, children))
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(data) },
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;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/ExtractPlasmicQueryData.tsx"],
4
- "sourcesContent": ["import { extractPlasmicQueryData } from \"@plasmicapp/prepass\";\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 data: Record<string, any> = (React as any)[\"\" + \"use\"](\n extractPlasmicQueryData(<>{children}</>)\n );\n return (\n <>\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}\n data-plasmic-prefetch-id={scriptId}\n suppressHydrationWarning={true}\n />\n </>\n );\n } else {\n return null;\n }\n}\n"],
5
- "mappings": ";;;AAAA,SAAS,+BAA+B;AACxC,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,OAA2C;AAAA,MAC/C,wBAAwB,0DAAG,QAAS,CAAG;AAAA,IACzC;AACA,WACE,0DACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,yBAAyB,EAAE,QAAQ,KAAK,UAAU,IAAI,EAAE;AAAA,QACxD,4BAA0B;AAAA,QAC1B,0BAA0B;AAAA;AAAA,IAC5B,CACF;AAAA,EAEJ,OAAO;AACL,WAAO;AAAA,EACT;AACF;",
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 data = React["use"](
51
- (0, import_prepass.extractPlasmicQueryData)(/* @__PURE__ */ React.createElement(React.Fragment, null, children))
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(data) },
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 { extractPlasmicQueryData } from \"@plasmicapp/prepass\";\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 data: Record<string, any> = (React as any)[\"\" + \"use\"](\n extractPlasmicQueryData(<>{children}</>)\n );\n return (\n <>\n <script\n type=\"application/json\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}\n data-plasmic-prefetch-id={scriptId}\n suppressHydrationWarning={true}\n />\n </>\n );\n } else {\n return null;\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,qBAAwC;AACxC,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,OAA2C;AAAA,UAC/C,wCAAwB,0DAAG,QAAS,CAAG;AAAA,IACzC;AACA,WACE,0DACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAK;AAAA,QACL,yBAAyB,EAAE,QAAQ,KAAK,UAAU,IAAI,EAAE;AAAA,QACxD,4BAA0B;AAAA,QAC1B,0BAA0B;AAAA;AAAA,IAC5B,CACF;AAAA,EAEJ,OAAO;AACL,WAAO;AAAA,EACT;AACF;",
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
  }
@@ -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 { }
@@ -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
- fetchExtractedQueryData
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": ";;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,SAAS,iBAAiB;AAEnC,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;",
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
  }
@@ -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
- fetchExtractedQueryData: () => fetchExtractedQueryData
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
@@ -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;;;ACAA,8BAAmC;AAEnC,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,WAAO,wBAAAA,OAAU,IAAI;AAC3B,UAAM,SAAS,KAAK,cAAc,kCAAkC;AACpE,QAAI,QAAQ;AACV,aAAO,KAAK,MAAM,OAAO,SAAS;AAAA,IACpC;AACA,WAAO;AAAA,EACT;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.8",
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.16",
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": "0597c84c0fa0df12523bfdbc1ba21ce81d34d63c"
75
+ "gitHead": "2f8ee12f8f9c75c0f0af3834b8302b0bea542cbd"
74
76
  }