Skip to content
This repository was archived by the owner on Jan 28, 2025. It is now read-only.

Commit d3a10b2

Browse files
authored
fix(core): fix renderPageToHtml for work for all next.js versions (#1611)
1 parent 06c5375 commit d3a10b2

File tree

11 files changed

+289
-200
lines changed

11 files changed

+289
-200
lines changed

package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@
5151
"@types/lodash": "^4.14.172",
5252
"@types/node": "^16.7.8",
5353
"@types/node-fetch": "^2.5.10",
54-
"@types/react": "^17.0.19",
55-
"@types/react-dom": "^17.0.6",
5654
"@types/webpack": "^5.28.0",
5755
"@typescript-eslint/eslint-plugin": "^4.30.0",
5856
"@typescript-eslint/parser": "^4.30.0",
@@ -65,7 +63,7 @@
6563
"jest": "^27.1.0",
6664
"lerna": "^4.0.0",
6765
"lint-staged": "^11.1.2",
68-
"next": "^11.1.0",
66+
"next": "^11.1.2",
6967
"prettier": "^2.0.5",
7068
"react": "^17.0.2",
7169
"react-dom": "^17.0.2",

packages/libs/core/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,16 @@
3535
"@hapi/accept": "^5.0.1",
3636
"cookie": "^0.4.1",
3737
"jsonwebtoken": "^8.5.1",
38-
"next": "^11.1.0",
38+
"next": "^11.1.2",
3939
"path-to-regexp": "^6.1.0",
4040
"regex-parser": "^2.2.10"
4141
},
4242
"devDependencies": {
4343
"@types/cookie": "^0.4.0",
4444
"@types/jsonwebtoken": "^8.5.5",
45+
"@types/react": "^17.0.19",
46+
"@types/react-dom": "^17.0.9",
47+
"@types/zen-observable": "^0.8.3",
4548
"rimraf": "^3.0.2",
4649
"typescript": "^4.3.4"
4750
}

packages/libs/core/src/utils/renderUtils.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { resultToChunks } from "next/dist/server/utils";
1+
import { resultsToString } from "next/dist/server/utils";
22
import { IncomingMessage, ServerResponse } from "http";
33

44
/**
@@ -15,14 +15,14 @@ export const renderPageToHtml = async (
1515
renderReqToHTML: (
1616
req: IncomingMessage,
1717
res: ServerResponse,
18-
renderMode: string | boolean
18+
renderMode?: "export" | "passthrough" | true
1919
) =>
2020
| PromiseLike<{ renderOpts: Record<string, any>; html: string }>
2121
| { renderOpts: Record<string, any>; html: string };
2222
},
2323
req: IncomingMessage,
2424
res: ServerResponse,
25-
renderMode: "export" | "passthrough" | true
25+
renderMode?: "export" | "passthrough" | true
2626
): Promise<{ html: string; renderOpts: Record<string, any> }> => {
2727
const { renderOpts, html: htmlResult } = await page.renderReqToHTML(
2828
req,
@@ -31,11 +31,18 @@ export const renderPageToHtml = async (
3131
);
3232

3333
let html;
34-
if (typeof htmlResult === "string") {
35-
html = htmlResult;
36-
} else {
37-
const htmlChunks = htmlResult ? await resultToChunks(htmlResult) : [];
38-
html = htmlChunks.join("");
34+
try {
35+
if (typeof htmlResult === "string") {
36+
html = htmlResult; // Next.js < 11.1
37+
} else {
38+
html = htmlResult ? await resultsToString([htmlResult]) : ""; // Next >= 11.1.1
39+
}
40+
} catch (e) {
41+
// Fallback to using renderReqToHtml without renderMode specified,
42+
// which will render html based on the page's renderReqToHtml,
43+
// which should always work (but adds another *warm* render cost)
44+
console.log("Falling back to using page's rendering function for html");
45+
html = (await page.renderReqToHTML(req, res)) as unknown as string;
3946
}
4047

4148
return { html, renderOpts };

packages/libs/core/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"outDir": "dist",
1212
"sourceMap": true,
1313
"strict": true,
14-
"allowJs": true
14+
"allowJs": true,
15+
"skipLibCheck": true
1516
},
1617
"exclude": ["node_modules"],
1718
"include": ["**/*.ts"]

packages/libs/core/yarn.lock

Lines changed: 100 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@
3535
dependencies:
3636
"@babel/helper-plugin-utils" "^7.14.5"
3737

38-
"@babel/runtime@7.12.5":
39-
version "7.12.5"
40-
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e"
41-
integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==
38+
"@babel/runtime@7.15.3":
39+
version "7.15.3"
40+
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b"
41+
integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==
4242
dependencies:
4343
regenerator-runtime "^0.13.4"
4444

@@ -75,20 +75,20 @@
7575
resolved "https://registry.npmjs.org/@napi-rs/triples/-/triples-1.0.3.tgz#76d6d0c3f4d16013c61e45dfca5ff1e6c31ae53c"
7676
integrity sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==
7777

78-
79-
version "11.1.0"
80-
resolved "https://registry.npmjs.org/@next/env/-/env-11.1.0.tgz#cae83d8e0a65aa9f2af3368f8269ffd9d911746a"
81-
integrity sha512-zPJkMFRenSf7BLlVee8987G0qQXAhxy7k+Lb/5hLAGkPVHAHm+oFFeL+2ipbI2KTEFlazdmGY0M+AlLQn7pWaw==
78+
79+
version "11.1.2"
80+
resolved "https://registry.npmjs.org/@next/env/-/env-11.1.2.tgz#27996efbbc54c5f949f5e8c0a156e3aa48369b99"
81+
integrity sha512-+fteyVdQ7C/OoulfcF6vd1Yk0FEli4453gr8kSFbU8sKseNSizYq6df5MKz/AjwLptsxrUeIkgBdAzbziyJ3mA==
8282

83-
84-
version "11.1.0"
85-
resolved "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.1.0.tgz#ee6b9117a1f9bb137479dfa51d5a9e38e066a62f"
86-
integrity sha512-64EgW8SzJRQls2yJ5DkuljRxgE24o2kYtX/ghTkPUJYsfidHMWzQGwg26IgRbb/uHqTd1G0W5UkKag+Nt8TWaQ==
83+
84+
version "11.1.2"
85+
resolved "https://registry.npmjs.org/@next/polyfill-module/-/polyfill-module-11.1.2.tgz#1fe92c364fdc81add775a16c678f5057c6aace98"
86+
integrity sha512-xZmixqADM3xxtqBV0TpAwSFzWJP0MOQzRfzItHXf1LdQHWb0yofHHC+7eOrPFic8+ZGz5y7BdPkkgR1S25OymA==
8787

88-
89-
version "11.1.0"
90-
resolved "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-11.1.0.tgz#8d4e8020a4cbdacbca431a0bf40c4d28187083af"
91-
integrity sha512-h+ry0sTk1W3mJw+TwEf91aqLbBJ5oqAsxfx+QryqEItNtfW6zLSSjxkyTYTqX8DkgSssQQutQfATkzBVgOR+qQ==
88+
89+
version "11.1.2"
90+
resolved "https://registry.npmjs.org/@next/react-dev-overlay/-/react-dev-overlay-11.1.2.tgz#73795dc5454b7af168bac93df7099965ebb603be"
91+
integrity sha512-rDF/mGY2NC69mMg2vDqzVpCOlWqnwPUXB2zkARhvknUHyS6QJphPYv9ozoPJuoT/QBs49JJd9KWaAzVBvq920A==
9292
dependencies:
9393
"@babel/code-frame" "7.12.11"
9494
anser "1.4.9"
@@ -102,10 +102,30 @@
102102
stacktrace-parser "0.1.10"
103103
strip-ansi "6.0.0"
104104

105-
106-
version "11.1.0"
107-
resolved "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-11.1.0.tgz#60c3c7b127a5dab8b0a2889a7dcf8a90d2c4e592"
108-
integrity sha512-g5DtFTpLTGa36iy9DuZawtJeitI11gysFGKPQQqy+mNbSFazguArcJ10gAYFlbqpIi4boUamWNI5mAoSPx3kog==
105+
106+
version "11.1.2"
107+
resolved "https://registry.npmjs.org/@next/react-refresh-utils/-/react-refresh-utils-11.1.2.tgz#44ea40d8e773e4b77bad85e24f6ac041d5e4b4a5"
108+
integrity sha512-hsoJmPfhVqjZ8w4IFzoo8SyECVnN+8WMnImTbTKrRUHOVJcYMmKLL7xf7T0ft00tWwAl/3f3Q3poWIN2Ueql/Q==
109+
110+
111+
version "11.1.2"
112+
resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-11.1.2.tgz#93226c38db488c4b62b30a53b530e87c969b8251"
113+
integrity sha512-hZuwOlGOwBZADA8EyDYyjx3+4JGIGjSHDHWrmpI7g5rFmQNltjlbaefAbiU5Kk7j3BUSDwt30quJRFv3nyJQ0w==
114+
115+
116+
version "11.1.2"
117+
resolved "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-11.1.2.tgz#792003989f560c00677b5daeff360b35b510db83"
118+
integrity sha512-PGOp0E1GisU+EJJlsmJVGE+aPYD0Uh7zqgsrpD3F/Y3766Ptfbe1lEPPWnRDl+OzSSrSrX1lkyM/Jlmh5OwNvA==
119+
120+
121+
version "11.1.2"
122+
resolved "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-11.1.2.tgz#8216b2ae1f21f0112958735c39dd861088108f37"
123+
integrity sha512-YcDHTJjn/8RqvyJVB6pvEKXihDcdrOwga3GfMv/QtVeLphTouY4BIcEUfrG5+26Nf37MP1ywN3RRl1TxpurAsQ==
124+
125+
126+
version "11.1.2"
127+
resolved "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-11.1.2.tgz#e15824405df137129918205e43cb5e9339589745"
128+
integrity sha512-e/pIKVdB+tGQYa1cW3sAeHm8gzEri/HYLZHT4WZojrUxgWXqx8pk7S7Xs47uBcFTqBDRvK3EcQpPLf3XdVsDdg==
109129

110130
"@node-rs/[email protected]":
111131
version "1.2.1"
@@ -131,6 +151,37 @@
131151
resolved "https://registry.npmjs.org/@types/node/-/node-16.7.2.tgz#0465a39b5456b61a04d98bd5545f8b34be340cb7"
132152
integrity sha512-TbG4TOx9hng8FKxaVrCisdaxKxqEwJ3zwHoCWXZ0Jw6mnvTInpaB99/2Cy4+XxpXtjNv9/TgfGSvZFyfV/t8Fw==
133153

154+
"@types/prop-types@*":
155+
version "15.7.4"
156+
resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"
157+
integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==
158+
159+
"@types/react-dom@^17.0.9":
160+
version "17.0.9"
161+
resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.9.tgz#441a981da9d7be117042e1a6fd3dac4b30f55add"
162+
integrity sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg==
163+
dependencies:
164+
"@types/react" "*"
165+
166+
"@types/react@*", "@types/react@^17.0.19":
167+
version "17.0.19"
168+
resolved "https://registry.npmjs.org/@types/react/-/react-17.0.19.tgz#8f2a85e8180a43b57966b237d26a29481dacc991"
169+
integrity sha512-sX1HisdB1/ZESixMTGnMxH9TDe8Sk709734fEQZzCV/4lSu9kJCPbo2PbTRoZM+53Pp0P10hYVyReUueGwUi4A==
170+
dependencies:
171+
"@types/prop-types" "*"
172+
"@types/scheduler" "*"
173+
csstype "^3.0.2"
174+
175+
"@types/scheduler@*":
176+
version "0.16.2"
177+
resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39"
178+
integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==
179+
180+
"@types/zen-observable@^0.8.3":
181+
version "0.8.3"
182+
resolved "https://registry.npmjs.org/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3"
183+
integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==
184+
134185
135186
version "1.4.9"
136187
resolved "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760"
@@ -551,6 +602,11 @@ [email protected]:
551602
dependencies:
552603
cssnano-preset-simple "^3.0.0"
553604

605+
csstype@^3.0.2:
606+
version "3.0.8"
607+
resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340"
608+
integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==
609+
554610
555611
version "3.0.1"
556612
resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636"
@@ -1239,17 +1295,17 @@ [email protected]:
12391295
dependencies:
12401296
querystring "^0.2.0"
12411297

1242-
next@^11.1.0:
1243-
version "11.1.0"
1244-
resolved "https://registry.npmjs.org/next/-/next-11.1.0.tgz#767d4c4fa0b9b0c768cdbd6c9f03dd86b5d701c0"
1245-
integrity sha512-GHBk/c7Wyr6YbFRFZF37I0X7HKzkHHI8pur/loyXo5AIE8wdkbGPGO0ds3vNAO6f8AxZAKGCRYtAzoGlVLoifA==
1298+
next@^11.1.2:
1299+
version "11.1.2"
1300+
resolved "https://registry.npmjs.org/next/-/next-11.1.2.tgz#527475787a9a362f1bc916962b0c0655cc05bc91"
1301+
integrity sha512-azEYL0L+wFjv8lstLru3bgvrzPvK0P7/bz6B/4EJ9sYkXeW8r5Bjh78D/Ol7VOg0EIPz0CXoe72hzAlSAXo9hw==
12461302
dependencies:
1247-
"@babel/runtime" "7.12.5"
1303+
"@babel/runtime" "7.15.3"
12481304
"@hapi/accept" "5.0.2"
1249-
"@next/env" "11.1.0"
1250-
"@next/polyfill-module" "11.1.0"
1251-
"@next/react-dev-overlay" "11.1.0"
1252-
"@next/react-refresh-utils" "11.1.0"
1305+
"@next/env" "11.1.2"
1306+
"@next/polyfill-module" "11.1.2"
1307+
"@next/react-dev-overlay" "11.1.2"
1308+
"@next/react-refresh-utils" "11.1.2"
12531309
"@node-rs/helper" "1.2.1"
12541310
assert "2.0.0"
12551311
ast-types "0.13.2"
@@ -1287,13 +1343,18 @@ next@^11.1.0:
12871343
stream-browserify "3.0.0"
12881344
stream-http "3.1.1"
12891345
string_decoder "1.3.0"
1290-
styled-jsx "4.0.0"
1346+
styled-jsx "4.0.1"
12911347
timers-browserify "2.0.12"
12921348
tty-browserify "0.0.1"
12931349
use-subscription "1.5.1"
1294-
util "0.12.3"
1350+
util "0.12.4"
12951351
vm-browserify "1.1.2"
12961352
watchpack "2.1.1"
1353+
optionalDependencies:
1354+
"@next/swc-darwin-arm64" "11.1.2"
1355+
"@next/swc-darwin-x64" "11.1.2"
1356+
"@next/swc-linux-x64-gnu" "11.1.2"
1357+
"@next/swc-win32-x64-msvc" "11.1.2"
12971358

12981359
12991360
version "2.6.1"
@@ -1822,10 +1883,10 @@ [email protected]:
18221883
dependencies:
18231884
ansi-regex "^5.0.0"
18241885

1825-
1826-
version "4.0.0"
1827-
resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-4.0.0.tgz#f7b90e7889d0a4f4635f8d1ae9ac32f3acaedc57"
1828-
integrity sha512-2USeoWMoJ/Lx5s2y1PxuvLy/cz2Yrr8cTySV3ILHU1Vmaw1bnV7suKdblLPjnyhMD+qzN7B1SWyh4UZTARn/WA==
1886+
1887+
version "4.0.1"
1888+
resolved "https://registry.npmjs.org/styled-jsx/-/styled-jsx-4.0.1.tgz#ae3f716eacc0792f7050389de88add6d5245b9e9"
1889+
integrity sha512-Gcb49/dRB1k8B4hdK8vhW27Rlb2zujCk1fISrizCcToIs+55B4vmUM0N9Gi4nnVfFZWe55jRdWpAqH1ldAKWvQ==
18291890
dependencies:
18301891
"@babel/plugin-syntax-jsx" "7.14.5"
18311892
"@babel/types" "7.15.0"
@@ -1970,10 +2031,10 @@ [email protected]:
19702031
dependencies:
19712032
inherits "2.0.1"
19722033

1973-
1974-
version "0.12.3"
1975-
resolved "https://registry.npmjs.org/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888"
1976-
integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==
2034+
[email protected].4, util@^0.12.0:
2035+
version "0.12.4"
2036+
resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253"
2037+
integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==
19772038
dependencies:
19782039
inherits "^2.0.3"
19792040
is-arguments "^1.0.4"
@@ -1989,18 +2050,6 @@ util@^0.11.0:
19892050
dependencies:
19902051
inherits "2.0.3"
19912052

1992-
util@^0.12.0:
1993-
version "0.12.4"
1994-
resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253"
1995-
integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==
1996-
dependencies:
1997-
inherits "^2.0.3"
1998-
is-arguments "^1.0.4"
1999-
is-generator-function "^1.0.7"
2000-
is-typed-array "^1.1.3"
2001-
safe-buffer "^5.1.2"
2002-
which-typed-array "^1.1.2"
2003-
20042053
[email protected], vm-browserify@^1.0.1:
20052054
version "1.1.2"
20062055
resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"

packages/libs/lambda-at-edge/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
"@types/node": "^16.7.8",
5151
"@types/node-fetch": "^2.5.7",
5252
"@types/normalize-path": "^3.0.0",
53+
"@types/react": "17.0.19",
54+
"@types/react-dom": "^17.0.9",
5355
"@types/send": "^0.17.0",
5456
"@types/sharp": "^0.28.1",
5557
"fetch-mock-jest": "^1.5.1",

packages/libs/lambda-at-edge/tsconfig.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"outDir": "dist",
1212
"sourceMap": true,
1313
"strict": true,
14-
"allowJs": true
14+
"allowJs": true,
15+
"skipLibCheck": true
1516
},
1617
"exclude": ["node_modules"],
1718
"include": ["**/*.ts"]

0 commit comments

Comments
 (0)