From 91f2b10bd75a6113180d5f9b5303180fe769aa0d Mon Sep 17 00:00:00 2001 From: Brooks Lybrand Date: Mon, 11 Mar 2024 16:06:03 -0500 Subject: [PATCH 1/4] Remix reveal new entry files --- app/entry.client.tsx | 22 +++--- app/entry.server.tsx | 169 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 159 insertions(+), 32 deletions(-) diff --git a/app/entry.client.tsx b/app/entry.client.tsx index 04918d07..999c0a12 100644 --- a/app/entry.client.tsx +++ b/app/entry.client.tsx @@ -1,14 +1,12 @@ -import * as React from "react"; -import { hydrateRoot } from "react-dom/client"; import { RemixBrowser } from "@remix-run/react"; +import { startTransition, StrictMode } from "react"; +import { hydrateRoot } from "react-dom/client"; -setTimeout(() => { - React.startTransition(() => { - hydrateRoot( - document, - - - , - ); - }); -}, 10); +startTransition(() => { + hydrateRoot( + document, + + + + ); +}); diff --git a/app/entry.server.tsx b/app/entry.server.tsx index c06a3e3d..5005bc69 100644 --- a/app/entry.server.tsx +++ b/app/entry.server.tsx @@ -1,23 +1,152 @@ -import type { HandleDocumentRequestFunction } from "@remix-run/node"; +import { PassThrough } from "node:stream"; + +import type { AppLoadContext, EntryContext } from "@remix-run/node"; +import { createReadableStreamFromReadable } from "@remix-run/node"; import { RemixServer } from "@remix-run/react"; -import { renderToString } from "react-dom/server"; - -let handleDocumentRequest: HandleDocumentRequestFunction = async ( - request, - responseStatusCode, - responseHeaders, - remixContext, -) => { - const markup = renderToString( - , - ); - - responseHeaders.set("Content-Type", "text/html"); - - return new Response("" + markup, { - status: responseStatusCode, - headers: responseHeaders, +import * as isbotModule from "isbot"; +import { renderToPipeableStream } from "react-dom/server"; + +const ABORT_DELAY = 5_000; + +export default function handleRequest( + request: Request, + responseStatusCode: number, + responseHeaders: Headers, + remixContext: EntryContext, + loadContext: AppLoadContext +) { + return isBotRequest(request.headers.get("user-agent")) + ? handleBotRequest( + request, + responseStatusCode, + responseHeaders, + remixContext + ) + : handleBrowserRequest( + request, + responseStatusCode, + responseHeaders, + remixContext + ); +} + +// We have some Remix apps in the wild already running with isbot@3 so we need +// to maintain backwards compatibility even though we want new apps to use +// isbot@4. That way, we can ship this as a minor Semver update to @remix-run/dev. +function isBotRequest(userAgent: string | null) { + if (!userAgent) { + return false; + } + + // isbot >= 3.8.0, >4 + if ("isbot" in isbotModule && typeof isbotModule.isbot === "function") { + return isbotModule.isbot(userAgent); + } + + // isbot < 3.8.0 + if ("default" in isbotModule && typeof isbotModule.default === "function") { + return isbotModule.default(userAgent); + } + + return false; +} + +function handleBotRequest( + request: Request, + responseStatusCode: number, + responseHeaders: Headers, + remixContext: EntryContext +) { + return new Promise((resolve, reject) => { + let shellRendered = false; + const { pipe, abort } = renderToPipeableStream( + , + { + onAllReady() { + shellRendered = true; + const body = new PassThrough(); + const stream = createReadableStreamFromReadable(body); + + responseHeaders.set("Content-Type", "text/html"); + + resolve( + new Response(stream, { + headers: responseHeaders, + status: responseStatusCode, + }) + ); + + pipe(body); + }, + onShellError(error: unknown) { + reject(error); + }, + onError(error: unknown) { + responseStatusCode = 500; + // Log streaming rendering errors from inside the shell. Don't log + // errors encountered during initial shell rendering since they'll + // reject and get logged in handleDocumentRequest. + if (shellRendered) { + console.error(error); + } + }, + } + ); + + setTimeout(abort, ABORT_DELAY); }); -}; +} + +function handleBrowserRequest( + request: Request, + responseStatusCode: number, + responseHeaders: Headers, + remixContext: EntryContext +) { + return new Promise((resolve, reject) => { + let shellRendered = false; + const { pipe, abort } = renderToPipeableStream( + , + { + onShellReady() { + shellRendered = true; + const body = new PassThrough(); + const stream = createReadableStreamFromReadable(body); -export default handleDocumentRequest; + responseHeaders.set("Content-Type", "text/html"); + + resolve( + new Response(stream, { + headers: responseHeaders, + status: responseStatusCode, + }) + ); + + pipe(body); + }, + onShellError(error: unknown) { + reject(error); + }, + onError(error: unknown) { + responseStatusCode = 500; + // Log streaming rendering errors from inside the shell. Don't log + // errors encountered during initial shell rendering since they'll + // reject and get logged in handleDocumentRequest. + if (shellRendered) { + console.error(error); + } + }, + } + ); + + setTimeout(abort, ABORT_DELAY); + }); +} From 0636806cfb8940912346b374bb9e1eab0b96b9f1 Mon Sep 17 00:00:00 2001 From: Brooks Lybrand Date: Mon, 11 Mar 2024 16:06:15 -0500 Subject: [PATCH 2/4] Add experimental release and update vite config --- .npmrc | 1 + package-lock.json | 247 ++++++++++++++++++++++++++++++++++++++-------- package.json | 13 +-- vite.config.mts | 11 ++- 4 files changed, 222 insertions(+), 50 deletions(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..165d6cf0 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +force=true \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 7a46dcae..a176d431 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,9 +10,9 @@ "dependencies": { "@docsearch/css": "^3.5.2", "@docsearch/react": "^3.5.2", - "@remix-run/express": "^2.8.0", - "@remix-run/node": "^2.8.0", - "@remix-run/react": "^2.8.0", + "@remix-run/express": "v0.0.0-experimental-c75407ea4", + "@remix-run/node": "v0.0.0-experimental-c75407ea4", + "@remix-run/react": "v0.0.0-experimental-c75407ea4", "@remix-run/v1-meta": "0.1.3", "@tailwindcss/aspect-ratio": "^0.4.2", "cheerio": "^1.0.0-rc.12", @@ -31,6 +31,7 @@ "front-matter": "^4.0.2", "gray-matter": "^4.0.3", "gunzip-maybe": "^1.4.2", + "isbot": "^4", "iso-639-1": "^3.1.0", "lru-cache": "^10.1.0", "luxon": "^3.4.4", @@ -48,7 +49,7 @@ "remark-html": "^16.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.0", - "remix": "^2.8.0", + "remix": "v0.0.0-experimental-c75407ea4", "satori": "^0.10.11", "semver": "^7.5.4", "shiki": "^0.14.7", @@ -65,8 +66,8 @@ "zod": "^3.22.4" }, "devDependencies": { - "@remix-run/dev": "^2.8.0", - "@remix-run/eslint-config": "^2.8.0", + "@remix-run/dev": "v0.0.0-experimental-c75407ea4", + "@remix-run/eslint-config": "v0.0.0-experimental-c75407ea4", "@testing-library/jest-dom": "^6.2.0", "@types/follow-redirects": "^1.14.4", "@types/gunzip-maybe": "^1.4.2", @@ -2823,9 +2824,9 @@ } }, "node_modules/@remix-run/dev": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@remix-run/dev/-/dev-2.8.0.tgz", - "integrity": "sha512-kZtmK/7vKk7QV8CGCyC9Or3wP7EwL4rOJS9vObmTRAPv8mLyznR8bJxeNVWA7ICnCGejF8s2X3abVJrkEMiFlg==", + "version": "0.0.0-experimental-c75407ea4", + "resolved": "https://registry.npmjs.org/@remix-run/dev/-/dev-0.0.0-experimental-c75407ea4.tgz", + "integrity": "sha512-GtsclMYnJRvt7EarRdS44VPmI7zIRzySkQea2H3vXrt1uaTZ/cmNKXdQhJghLD4IhFcCHOyw4hsEIeD0I93YHg==", "dev": true, "dependencies": { "@babel/core": "^7.21.8", @@ -2838,9 +2839,9 @@ "@babel/types": "^7.22.5", "@mdx-js/mdx": "^2.3.0", "@npmcli/package-json": "^4.0.1", - "@remix-run/node": "2.8.0", - "@remix-run/router": "1.15.2", - "@remix-run/server-runtime": "2.8.0", + "@remix-run/node": "0.0.0-experimental-c75407ea4", + "@remix-run/router": "0.0.0-experimental-71108452", + "@remix-run/server-runtime": "0.0.0-experimental-c75407ea4", "@types/mdx": "^2.0.5", "@vanilla-extract/integration": "^6.2.0", "arg": "^5.0.1", @@ -2889,7 +2890,8 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@remix-run/serve": "^2.8.0", + "@remix-run/react": "^0.0.0-experimental-c75407ea4", + "@remix-run/serve": "^0.0.0-experimental-c75407ea4", "typescript": "^5.1.0", "vite": "^5.1.0", "wrangler": "^3.28.2" @@ -2909,6 +2911,50 @@ } } }, + "node_modules/@remix-run/dev/node_modules/@remix-run/router": { + "version": "0.0.0-experimental-71108452", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-71108452.tgz", + "integrity": "sha512-U+HfaoXuYYPHKKV/K32w3C+SuDWD+MNPlE6slXfK+sLW3g0AXSSxn7FlOdsvnHr79iEZ792L0+sItmN+DTFn3g==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@remix-run/dev/node_modules/@remix-run/server-runtime": { + "version": "0.0.0-experimental-c75407ea4", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-0.0.0-experimental-c75407ea4.tgz", + "integrity": "sha512-TcNTPluhfLSoZuDmjomfO0qXH//iu2A1dES9XEBVEd9DfZ5Qhyr3asAUVkpQ7ud7vBrqINgM856H+uOIytsK5w==", + "dev": true, + "dependencies": { + "@remix-run/router": "0.0.0-experimental-71108452", + "@types/cookie": "^0.6.0", + "@web3-storage/multipart-parser": "^1.0.0", + "cookie": "^0.6.0", + "set-cookie-parser": "^2.4.8", + "source-map": "^0.7.3", + "turbo-stream": "^2.0.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@remix-run/dev/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@remix-run/dev/node_modules/prettier": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", @@ -2925,9 +2971,9 @@ } }, "node_modules/@remix-run/eslint-config": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@remix-run/eslint-config/-/eslint-config-2.8.0.tgz", - "integrity": "sha512-4y5TxhWbivKT2g8d2wciWSns6KhuvJPXoLuuBa2v3At20LxqWdyqErZfPHPrecXHjl/vJpSAGOGXAU1WuS39kg==", + "version": "0.0.0-experimental-c75407ea4", + "resolved": "https://registry.npmjs.org/@remix-run/eslint-config/-/eslint-config-0.0.0-experimental-c75407ea4.tgz", + "integrity": "sha512-8DVhBauNa+ziGosF4cp6gswzjn79Ze5sgWwKIXxphQAECBPsVd8U6AR9yHfSLSKqFweujinhD/IZ2fwFytH+Qg==", "dev": true, "dependencies": { "@babel/core": "^7.21.8", @@ -2962,11 +3008,11 @@ } }, "node_modules/@remix-run/express": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@remix-run/express/-/express-2.8.0.tgz", - "integrity": "sha512-15qnPt+vrvv66pvdcRiodNF5I5Rot07HoKjVlrXYSO4KbSg9WTE0jCPX0rFStD4QNTa2hIl8YftPlmZXjFxQoQ==", + "version": "0.0.0-experimental-c75407ea4", + "resolved": "https://registry.npmjs.org/@remix-run/express/-/express-0.0.0-experimental-c75407ea4.tgz", + "integrity": "sha512-RSXSdq2enkJHhuEj1FrK5YgOF/h7aJQBZzPbM5r0VFodnMUuvS2wr4sI7h0vAFvXm1612r/UZtHq9It7Smicyg==", "dependencies": { - "@remix-run/node": "2.8.0" + "@remix-run/node": "0.0.0-experimental-c75407ea4" }, "engines": { "node": ">=18.0.0" @@ -2982,11 +3028,11 @@ } }, "node_modules/@remix-run/node": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.8.0.tgz", - "integrity": "sha512-UGAckayyhw14v70O1Lcf75Nr/ipLOG5e20tMiMee96sCXWaHGHpv9VbAVoDXiVKqI3sw4dJarNc0qo794zwAbg==", + "version": "0.0.0-experimental-c75407ea4", + "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-0.0.0-experimental-c75407ea4.tgz", + "integrity": "sha512-n9CVLvd7dnRaeuobDTsYJNnnFQetWVGPUiNuyPhsAmK/TzLXE6BAcGHQ/IWIapI9H+9j+13WA8ONXQ3HuSLpkg==", "dependencies": { - "@remix-run/server-runtime": "2.8.0", + "@remix-run/server-runtime": "0.0.0-experimental-c75407ea4", "@remix-run/web-fetch": "^4.4.2", "@remix-run/web-file": "^3.1.0", "@remix-run/web-stream": "^1.1.0", @@ -3007,15 +3053,57 @@ } } }, + "node_modules/@remix-run/node/node_modules/@remix-run/router": { + "version": "0.0.0-experimental-71108452", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-71108452.tgz", + "integrity": "sha512-U+HfaoXuYYPHKKV/K32w3C+SuDWD+MNPlE6slXfK+sLW3g0AXSSxn7FlOdsvnHr79iEZ792L0+sItmN+DTFn3g==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@remix-run/node/node_modules/@remix-run/server-runtime": { + "version": "0.0.0-experimental-c75407ea4", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-0.0.0-experimental-c75407ea4.tgz", + "integrity": "sha512-TcNTPluhfLSoZuDmjomfO0qXH//iu2A1dES9XEBVEd9DfZ5Qhyr3asAUVkpQ7ud7vBrqINgM856H+uOIytsK5w==", + "dependencies": { + "@remix-run/router": "0.0.0-experimental-71108452", + "@types/cookie": "^0.6.0", + "@web3-storage/multipart-parser": "^1.0.0", + "cookie": "^0.6.0", + "set-cookie-parser": "^2.4.8", + "source-map": "^0.7.3", + "turbo-stream": "^2.0.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@remix-run/node/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@remix-run/react": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/@remix-run/react/-/react-2.8.0.tgz", - "integrity": "sha512-QDbdAFOPssVGIlT1Klp/GiS6Sbkmwn9e2tJXXtPwchLCePGCnIlJXtBe/jokFBwcG8ce+oTRzSVmJ75kEEahZA==", + "version": "0.0.0-experimental-c75407ea4", + "resolved": "https://registry.npmjs.org/@remix-run/react/-/react-0.0.0-experimental-c75407ea4.tgz", + "integrity": "sha512-q+YbCyBIvNlO29/9+UuGhw0DVI7HuQIpJW01G/aCR8KLTNdNjbgoYYu+kjXdydedGUCu8tpt3rPPx3Pk0+gXEw==", "dependencies": { - "@remix-run/router": "1.15.2", - "@remix-run/server-runtime": "2.8.0", - "react-router": "6.22.2", - "react-router-dom": "6.22.2" + "@remix-run/router": "0.0.0-experimental-71108452", + "@remix-run/server-runtime": "0.0.0-experimental-c75407ea4", + "react-router": "0.0.0-experimental-71108452", + "react-router-dom": "0.0.0-experimental-71108452", + "turbo-stream": "^2.0.0" }, "engines": { "node": ">=18.0.0" @@ -3031,10 +3119,52 @@ } } }, + "node_modules/@remix-run/react/node_modules/@remix-run/router": { + "version": "0.0.0-experimental-71108452", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-71108452.tgz", + "integrity": "sha512-U+HfaoXuYYPHKKV/K32w3C+SuDWD+MNPlE6slXfK+sLW3g0AXSSxn7FlOdsvnHr79iEZ792L0+sItmN+DTFn3g==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@remix-run/react/node_modules/@remix-run/server-runtime": { + "version": "0.0.0-experimental-c75407ea4", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-0.0.0-experimental-c75407ea4.tgz", + "integrity": "sha512-TcNTPluhfLSoZuDmjomfO0qXH//iu2A1dES9XEBVEd9DfZ5Qhyr3asAUVkpQ7ud7vBrqINgM856H+uOIytsK5w==", + "dependencies": { + "@remix-run/router": "0.0.0-experimental-71108452", + "@types/cookie": "^0.6.0", + "@web3-storage/multipart-parser": "^1.0.0", + "cookie": "^0.6.0", + "set-cookie-parser": "^2.4.8", + "source-map": "^0.7.3", + "turbo-stream": "^2.0.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "typescript": "^5.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@remix-run/react/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/@remix-run/router": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.2.tgz", "integrity": "sha512-+Rnav+CaoTE5QJc4Jcwh5toUpnVLKYbpU6Ys0zqbakqbaLQHeglLVHPfxOiQqdNmUy5C2lXz5dwC6tQNX2JW2Q==", + "peer": true, "engines": { "node": ">=14.0.0" } @@ -3043,6 +3173,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.8.0.tgz", "integrity": "sha512-bb6rRefxEqA1fHGUo2i2s1uMztYqQlxupVCVsAs+sUkzTXtORJW+b0oFIKf5yWyaarBJ4zeLyoPsAMBqVX8P3w==", + "peer": true, "dependencies": { "@remix-run/router": "1.15.2", "@types/cookie": "^0.6.0", @@ -3067,6 +3198,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "peer": true, "engines": { "node": ">= 0.6" } @@ -9845,6 +9977,14 @@ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, + "node_modules/isbot": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-4.4.0.tgz", + "integrity": "sha512-8ZvOWUA68kyJO4hHJdWjyreq7TYNWTS9y15IzeqVdKxR9pPr3P/3r9AHcoIv9M0Rllkao5qWz2v1lmcyKIVCzQ==", + "engines": { + "node": ">=18" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -17304,11 +17444,11 @@ } }, "node_modules/react-router": { - "version": "6.22.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.2.tgz", - "integrity": "sha512-YD3Dzprzpcq+tBMHBS822tCjnWD3iIZbTeSXMY9LPSG541EfoBGyZ3bS25KEnaZjLcmQpw2AVLkFyfgXY8uvcw==", + "version": "0.0.0-experimental-71108452", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-0.0.0-experimental-71108452.tgz", + "integrity": "sha512-TL0c7MPzESSu9VQeVkGU8lzT8zCwpyJHG/1FATmhHNiwLUYyvIOf6EAORmJ6Z/2ACpX65G4SwHZKwawYiaocuw==", "dependencies": { - "@remix-run/router": "1.15.2" + "@remix-run/router": "0.0.0-experimental-71108452" }, "engines": { "node": ">=14.0.0" @@ -17318,12 +17458,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.22.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.2.tgz", - "integrity": "sha512-WgqxD2qySEIBPZ3w0sHH+PUAiamDeszls9tzqMPBDA1YYVucTBXLU7+gtRfcSnhe92A3glPnvSxK2dhNoAVOIQ==", + "version": "0.0.0-experimental-71108452", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-0.0.0-experimental-71108452.tgz", + "integrity": "sha512-vuhSLWHi2qWnUnXfeN5hp26AVZtbMOfrx9hKUN/T1d4zWhDSueZICUQJCUqRoO8GkS/irp2LEc0+CCnmFPR25Q==", "dependencies": { - "@remix-run/router": "1.15.2", - "react-router": "6.22.2" + "@remix-run/router": "0.0.0-experimental-71108452", + "react-router": "0.0.0-experimental-71108452" }, "engines": { "node": ">=14.0.0" @@ -17333,6 +17473,22 @@ "react-dom": ">=16.8" } }, + "node_modules/react-router-dom/node_modules/@remix-run/router": { + "version": "0.0.0-experimental-71108452", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-71108452.tgz", + "integrity": "sha512-U+HfaoXuYYPHKKV/K32w3C+SuDWD+MNPlE6slXfK+sLW3g0AXSSxn7FlOdsvnHr79iEZ792L0+sItmN+DTFn3g==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/react-router/node_modules/@remix-run/router": { + "version": "0.0.0-experimental-71108452", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-71108452.tgz", + "integrity": "sha512-U+HfaoXuYYPHKKV/K32w3C+SuDWD+MNPlE6slXfK+sLW3g0AXSSxn7FlOdsvnHr79iEZ792L0+sItmN+DTFn3g==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -18431,9 +18587,9 @@ } }, "node_modules/remix": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/remix/-/remix-2.8.0.tgz", - "integrity": "sha512-N+tp+1LdddBy7IRM/3WvbT824UKa6gylQTbt/AhjNAlreKxI6oEr+2KH6HtfPBqVD9aKUo7eUj5qNfmxSCXXgw==", + "version": "0.0.0-experimental-c75407ea4", + "resolved": "https://registry.npmjs.org/remix/-/remix-0.0.0-experimental-c75407ea4.tgz", + "integrity": "sha512-bUO1LKyPlvJZEiXBxo8w0xAI8l2bAec78HmXBZzf/oYzYccRBGEWnxsco/ynazUWg/SIo5JK+PoQXN/fp57cTg==", "engines": { "node": ">=18.0.0" } @@ -19995,6 +20151,11 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/turbo-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.0.0.tgz", + "integrity": "sha512-h0dfgRJAoiEh2hdFCoEuOSApsUfnw87gmNuziVS/mYycuBSCTeqpdanypMlHci6CvZibF7b9kvSpbeC7/r2/KA==" + }, "node_modules/tween-functions": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz", diff --git a/package.json b/package.json index 71065c9d..97e10d27 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,9 @@ "dependencies": { "@docsearch/css": "^3.5.2", "@docsearch/react": "^3.5.2", - "@remix-run/express": "^2.8.0", - "@remix-run/node": "^2.8.0", - "@remix-run/react": "^2.8.0", + "@remix-run/express": "v0.0.0-experimental-c75407ea4", + "@remix-run/node": "v0.0.0-experimental-c75407ea4", + "@remix-run/react": "v0.0.0-experimental-c75407ea4", "@remix-run/v1-meta": "0.1.3", "@tailwindcss/aspect-ratio": "^0.4.2", "cheerio": "^1.0.0-rc.12", @@ -43,6 +43,7 @@ "front-matter": "^4.0.2", "gray-matter": "^4.0.3", "gunzip-maybe": "^1.4.2", + "isbot": "^4", "iso-639-1": "^3.1.0", "lru-cache": "^10.1.0", "luxon": "^3.4.4", @@ -60,7 +61,7 @@ "remark-html": "^16.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.0", - "remix": "^2.8.0", + "remix": "v0.0.0-experimental-c75407ea4", "satori": "^0.10.11", "semver": "^7.5.4", "shiki": "^0.14.7", @@ -77,8 +78,8 @@ "zod": "^3.22.4" }, "devDependencies": { - "@remix-run/dev": "^2.8.0", - "@remix-run/eslint-config": "^2.8.0", + "@remix-run/dev": "v0.0.0-experimental-c75407ea4", + "@remix-run/eslint-config": "v0.0.0-experimental-c75407ea4", "@testing-library/jest-dom": "^6.2.0", "@types/follow-redirects": "^1.14.4", "@types/gunzip-maybe": "^1.4.2", diff --git a/vite.config.mts b/vite.config.mts index bb9044b2..a7c73a54 100644 --- a/vite.config.mts +++ b/vite.config.mts @@ -7,5 +7,14 @@ export default defineConfig({ ssr: { noExternal: ["@docsearch/react"], }, - plugins: [tsconfigPaths(), splitVendorChunkPlugin(), arraybuffer(), remix()], + plugins: [ + tsconfigPaths(), + splitVendorChunkPlugin(), + arraybuffer(), + remix({ + future: { + unstable_singleFetch: true, + }, + }), + ], }); From a6325cef9bea7151afa2a10be31a7cd7699e1835 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Tue, 12 Mar 2024 14:31:31 -0400 Subject: [PATCH 3/4] Update to latest --- app/entry.client.tsx | 12 ---- app/entry.server.tsx | 152 ------------------------------------------- package-lock.json | 144 ++++++++++++++++++++-------------------- package.json | 12 ++-- 4 files changed, 78 insertions(+), 242 deletions(-) delete mode 100644 app/entry.client.tsx delete mode 100644 app/entry.server.tsx diff --git a/app/entry.client.tsx b/app/entry.client.tsx deleted file mode 100644 index 999c0a12..00000000 --- a/app/entry.client.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { RemixBrowser } from "@remix-run/react"; -import { startTransition, StrictMode } from "react"; -import { hydrateRoot } from "react-dom/client"; - -startTransition(() => { - hydrateRoot( - document, - - - - ); -}); diff --git a/app/entry.server.tsx b/app/entry.server.tsx deleted file mode 100644 index 5005bc69..00000000 --- a/app/entry.server.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import { PassThrough } from "node:stream"; - -import type { AppLoadContext, EntryContext } from "@remix-run/node"; -import { createReadableStreamFromReadable } from "@remix-run/node"; -import { RemixServer } from "@remix-run/react"; -import * as isbotModule from "isbot"; -import { renderToPipeableStream } from "react-dom/server"; - -const ABORT_DELAY = 5_000; - -export default function handleRequest( - request: Request, - responseStatusCode: number, - responseHeaders: Headers, - remixContext: EntryContext, - loadContext: AppLoadContext -) { - return isBotRequest(request.headers.get("user-agent")) - ? handleBotRequest( - request, - responseStatusCode, - responseHeaders, - remixContext - ) - : handleBrowserRequest( - request, - responseStatusCode, - responseHeaders, - remixContext - ); -} - -// We have some Remix apps in the wild already running with isbot@3 so we need -// to maintain backwards compatibility even though we want new apps to use -// isbot@4. That way, we can ship this as a minor Semver update to @remix-run/dev. -function isBotRequest(userAgent: string | null) { - if (!userAgent) { - return false; - } - - // isbot >= 3.8.0, >4 - if ("isbot" in isbotModule && typeof isbotModule.isbot === "function") { - return isbotModule.isbot(userAgent); - } - - // isbot < 3.8.0 - if ("default" in isbotModule && typeof isbotModule.default === "function") { - return isbotModule.default(userAgent); - } - - return false; -} - -function handleBotRequest( - request: Request, - responseStatusCode: number, - responseHeaders: Headers, - remixContext: EntryContext -) { - return new Promise((resolve, reject) => { - let shellRendered = false; - const { pipe, abort } = renderToPipeableStream( - , - { - onAllReady() { - shellRendered = true; - const body = new PassThrough(); - const stream = createReadableStreamFromReadable(body); - - responseHeaders.set("Content-Type", "text/html"); - - resolve( - new Response(stream, { - headers: responseHeaders, - status: responseStatusCode, - }) - ); - - pipe(body); - }, - onShellError(error: unknown) { - reject(error); - }, - onError(error: unknown) { - responseStatusCode = 500; - // Log streaming rendering errors from inside the shell. Don't log - // errors encountered during initial shell rendering since they'll - // reject and get logged in handleDocumentRequest. - if (shellRendered) { - console.error(error); - } - }, - } - ); - - setTimeout(abort, ABORT_DELAY); - }); -} - -function handleBrowserRequest( - request: Request, - responseStatusCode: number, - responseHeaders: Headers, - remixContext: EntryContext -) { - return new Promise((resolve, reject) => { - let shellRendered = false; - const { pipe, abort } = renderToPipeableStream( - , - { - onShellReady() { - shellRendered = true; - const body = new PassThrough(); - const stream = createReadableStreamFromReadable(body); - - responseHeaders.set("Content-Type", "text/html"); - - resolve( - new Response(stream, { - headers: responseHeaders, - status: responseStatusCode, - }) - ); - - pipe(body); - }, - onShellError(error: unknown) { - reject(error); - }, - onError(error: unknown) { - responseStatusCode = 500; - // Log streaming rendering errors from inside the shell. Don't log - // errors encountered during initial shell rendering since they'll - // reject and get logged in handleDocumentRequest. - if (shellRendered) { - console.error(error); - } - }, - } - ); - - setTimeout(abort, ABORT_DELAY); - }); -} diff --git a/package-lock.json b/package-lock.json index a176d431..066b1131 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,9 +10,9 @@ "dependencies": { "@docsearch/css": "^3.5.2", "@docsearch/react": "^3.5.2", - "@remix-run/express": "v0.0.0-experimental-c75407ea4", - "@remix-run/node": "v0.0.0-experimental-c75407ea4", - "@remix-run/react": "v0.0.0-experimental-c75407ea4", + "@remix-run/express": "0.0.0-experimental-9989381a2", + "@remix-run/node": "0.0.0-experimental-9989381a2", + "@remix-run/react": "0.0.0-experimental-9989381a2", "@remix-run/v1-meta": "0.1.3", "@tailwindcss/aspect-ratio": "^0.4.2", "cheerio": "^1.0.0-rc.12", @@ -49,7 +49,7 @@ "remark-html": "^16.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.0", - "remix": "v0.0.0-experimental-c75407ea4", + "remix": "0.0.0-experimental-9989381a2", "satori": "^0.10.11", "semver": "^7.5.4", "shiki": "^0.14.7", @@ -66,8 +66,8 @@ "zod": "^3.22.4" }, "devDependencies": { - "@remix-run/dev": "v0.0.0-experimental-c75407ea4", - "@remix-run/eslint-config": "v0.0.0-experimental-c75407ea4", + "@remix-run/dev": "0.0.0-experimental-9989381a2", + "@remix-run/eslint-config": "0.0.0-experimental-9989381a2", "@testing-library/jest-dom": "^6.2.0", "@types/follow-redirects": "^1.14.4", "@types/gunzip-maybe": "^1.4.2", @@ -2824,9 +2824,9 @@ } }, "node_modules/@remix-run/dev": { - "version": "0.0.0-experimental-c75407ea4", - "resolved": "https://registry.npmjs.org/@remix-run/dev/-/dev-0.0.0-experimental-c75407ea4.tgz", - "integrity": "sha512-GtsclMYnJRvt7EarRdS44VPmI7zIRzySkQea2H3vXrt1uaTZ/cmNKXdQhJghLD4IhFcCHOyw4hsEIeD0I93YHg==", + "version": "0.0.0-experimental-9989381a2", + "resolved": "https://registry.npmjs.org/@remix-run/dev/-/dev-0.0.0-experimental-9989381a2.tgz", + "integrity": "sha512-0t1xjlhB9ZoqhH/eJXsFMbtEZmUPy5ECV2RdKSUBNH+JosNSTbsSMARzZ1KeyBUB5GyScaG9nIhjpfbKWQl4kQ==", "dev": true, "dependencies": { "@babel/core": "^7.21.8", @@ -2839,9 +2839,9 @@ "@babel/types": "^7.22.5", "@mdx-js/mdx": "^2.3.0", "@npmcli/package-json": "^4.0.1", - "@remix-run/node": "0.0.0-experimental-c75407ea4", - "@remix-run/router": "0.0.0-experimental-71108452", - "@remix-run/server-runtime": "0.0.0-experimental-c75407ea4", + "@remix-run/node": "0.0.0-experimental-9989381a2", + "@remix-run/router": "0.0.0-experimental-c7dd3d3a", + "@remix-run/server-runtime": "0.0.0-experimental-9989381a2", "@types/mdx": "^2.0.5", "@vanilla-extract/integration": "^6.2.0", "arg": "^5.0.1", @@ -2890,8 +2890,8 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@remix-run/react": "^0.0.0-experimental-c75407ea4", - "@remix-run/serve": "^0.0.0-experimental-c75407ea4", + "@remix-run/react": "^0.0.0-experimental-9989381a2", + "@remix-run/serve": "^0.0.0-experimental-9989381a2", "typescript": "^5.1.0", "vite": "^5.1.0", "wrangler": "^3.28.2" @@ -2912,21 +2912,21 @@ } }, "node_modules/@remix-run/dev/node_modules/@remix-run/router": { - "version": "0.0.0-experimental-71108452", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-71108452.tgz", - "integrity": "sha512-U+HfaoXuYYPHKKV/K32w3C+SuDWD+MNPlE6slXfK+sLW3g0AXSSxn7FlOdsvnHr79iEZ792L0+sItmN+DTFn3g==", + "version": "0.0.0-experimental-c7dd3d3a", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-c7dd3d3a.tgz", + "integrity": "sha512-reXnySaRGlEl6cOgF7fSQvIRzyRFUjGsez0kHQk0ok6Z3Y7n1PVTCKNhooSfOI1hBOi0c9cIMurhoTgjYXyxHw==", "dev": true, "engines": { "node": ">=14.0.0" } }, "node_modules/@remix-run/dev/node_modules/@remix-run/server-runtime": { - "version": "0.0.0-experimental-c75407ea4", - "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-0.0.0-experimental-c75407ea4.tgz", - "integrity": "sha512-TcNTPluhfLSoZuDmjomfO0qXH//iu2A1dES9XEBVEd9DfZ5Qhyr3asAUVkpQ7ud7vBrqINgM856H+uOIytsK5w==", + "version": "0.0.0-experimental-9989381a2", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-0.0.0-experimental-9989381a2.tgz", + "integrity": "sha512-dwZxKlQ6WJHeoBRBm9GkR46GcKU8AEqJPss3Fjjgl0cWRWVcg07n8Mo1jXIaNPZg8oohsBzy5p+dHNXeYQs/0g==", "dev": true, "dependencies": { - "@remix-run/router": "0.0.0-experimental-71108452", + "@remix-run/router": "0.0.0-experimental-c7dd3d3a", "@types/cookie": "^0.6.0", "@web3-storage/multipart-parser": "^1.0.0", "cookie": "^0.6.0", @@ -2971,9 +2971,9 @@ } }, "node_modules/@remix-run/eslint-config": { - "version": "0.0.0-experimental-c75407ea4", - "resolved": "https://registry.npmjs.org/@remix-run/eslint-config/-/eslint-config-0.0.0-experimental-c75407ea4.tgz", - "integrity": "sha512-8DVhBauNa+ziGosF4cp6gswzjn79Ze5sgWwKIXxphQAECBPsVd8U6AR9yHfSLSKqFweujinhD/IZ2fwFytH+Qg==", + "version": "0.0.0-experimental-9989381a2", + "resolved": "https://registry.npmjs.org/@remix-run/eslint-config/-/eslint-config-0.0.0-experimental-9989381a2.tgz", + "integrity": "sha512-9tEqG7anJvYOgQWN6J54zGzSqsra4ag4Yp7pvBpMzueIsh17817rSumgwc5pJieVoOuGhwtN3JNuCjl3Faa+Qw==", "dev": true, "dependencies": { "@babel/core": "^7.21.8", @@ -3008,11 +3008,11 @@ } }, "node_modules/@remix-run/express": { - "version": "0.0.0-experimental-c75407ea4", - "resolved": "https://registry.npmjs.org/@remix-run/express/-/express-0.0.0-experimental-c75407ea4.tgz", - "integrity": "sha512-RSXSdq2enkJHhuEj1FrK5YgOF/h7aJQBZzPbM5r0VFodnMUuvS2wr4sI7h0vAFvXm1612r/UZtHq9It7Smicyg==", + "version": "0.0.0-experimental-9989381a2", + "resolved": "https://registry.npmjs.org/@remix-run/express/-/express-0.0.0-experimental-9989381a2.tgz", + "integrity": "sha512-3RFBGytWHmyFnfTncXvzBhQ42HxQn7RQKXklRbrrrnT4prOYPWwddiPbCkY+bE+VlMV7dE1xOMhK+BqMfALMFQ==", "dependencies": { - "@remix-run/node": "0.0.0-experimental-c75407ea4" + "@remix-run/node": "0.0.0-experimental-9989381a2" }, "engines": { "node": ">=18.0.0" @@ -3028,11 +3028,11 @@ } }, "node_modules/@remix-run/node": { - "version": "0.0.0-experimental-c75407ea4", - "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-0.0.0-experimental-c75407ea4.tgz", - "integrity": "sha512-n9CVLvd7dnRaeuobDTsYJNnnFQetWVGPUiNuyPhsAmK/TzLXE6BAcGHQ/IWIapI9H+9j+13WA8ONXQ3HuSLpkg==", + "version": "0.0.0-experimental-9989381a2", + "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-0.0.0-experimental-9989381a2.tgz", + "integrity": "sha512-MuVUoK2fkLgRYKqPFdZ6UdmQElYn1FS3riUSGEfqyyO+QlqKhMlGTdTTXt/GDlEEoITJPncN6VZrbcDPsWx4lw==", "dependencies": { - "@remix-run/server-runtime": "0.0.0-experimental-c75407ea4", + "@remix-run/server-runtime": "0.0.0-experimental-9989381a2", "@remix-run/web-fetch": "^4.4.2", "@remix-run/web-file": "^3.1.0", "@remix-run/web-stream": "^1.1.0", @@ -3054,19 +3054,19 @@ } }, "node_modules/@remix-run/node/node_modules/@remix-run/router": { - "version": "0.0.0-experimental-71108452", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-71108452.tgz", - "integrity": "sha512-U+HfaoXuYYPHKKV/K32w3C+SuDWD+MNPlE6slXfK+sLW3g0AXSSxn7FlOdsvnHr79iEZ792L0+sItmN+DTFn3g==", + "version": "0.0.0-experimental-c7dd3d3a", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-c7dd3d3a.tgz", + "integrity": "sha512-reXnySaRGlEl6cOgF7fSQvIRzyRFUjGsez0kHQk0ok6Z3Y7n1PVTCKNhooSfOI1hBOi0c9cIMurhoTgjYXyxHw==", "engines": { "node": ">=14.0.0" } }, "node_modules/@remix-run/node/node_modules/@remix-run/server-runtime": { - "version": "0.0.0-experimental-c75407ea4", - "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-0.0.0-experimental-c75407ea4.tgz", - "integrity": "sha512-TcNTPluhfLSoZuDmjomfO0qXH//iu2A1dES9XEBVEd9DfZ5Qhyr3asAUVkpQ7ud7vBrqINgM856H+uOIytsK5w==", + "version": "0.0.0-experimental-9989381a2", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-0.0.0-experimental-9989381a2.tgz", + "integrity": "sha512-dwZxKlQ6WJHeoBRBm9GkR46GcKU8AEqJPss3Fjjgl0cWRWVcg07n8Mo1jXIaNPZg8oohsBzy5p+dHNXeYQs/0g==", "dependencies": { - "@remix-run/router": "0.0.0-experimental-71108452", + "@remix-run/router": "0.0.0-experimental-c7dd3d3a", "@types/cookie": "^0.6.0", "@web3-storage/multipart-parser": "^1.0.0", "cookie": "^0.6.0", @@ -3095,14 +3095,14 @@ } }, "node_modules/@remix-run/react": { - "version": "0.0.0-experimental-c75407ea4", - "resolved": "https://registry.npmjs.org/@remix-run/react/-/react-0.0.0-experimental-c75407ea4.tgz", - "integrity": "sha512-q+YbCyBIvNlO29/9+UuGhw0DVI7HuQIpJW01G/aCR8KLTNdNjbgoYYu+kjXdydedGUCu8tpt3rPPx3Pk0+gXEw==", - "dependencies": { - "@remix-run/router": "0.0.0-experimental-71108452", - "@remix-run/server-runtime": "0.0.0-experimental-c75407ea4", - "react-router": "0.0.0-experimental-71108452", - "react-router-dom": "0.0.0-experimental-71108452", + "version": "0.0.0-experimental-9989381a2", + "resolved": "https://registry.npmjs.org/@remix-run/react/-/react-0.0.0-experimental-9989381a2.tgz", + "integrity": "sha512-8yYhampJPY4KEzDi/vjSTn9CywFfmYj6TEaptN5xCmxhO7AAVG0tKG0qVgmBahCyjQ9LLtHj2DofNPe7LLKpdw==", + "dependencies": { + "@remix-run/router": "0.0.0-experimental-c7dd3d3a", + "@remix-run/server-runtime": "0.0.0-experimental-9989381a2", + "react-router": "0.0.0-experimental-c7dd3d3a", + "react-router-dom": "0.0.0-experimental-c7dd3d3a", "turbo-stream": "^2.0.0" }, "engines": { @@ -3120,19 +3120,19 @@ } }, "node_modules/@remix-run/react/node_modules/@remix-run/router": { - "version": "0.0.0-experimental-71108452", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-71108452.tgz", - "integrity": "sha512-U+HfaoXuYYPHKKV/K32w3C+SuDWD+MNPlE6slXfK+sLW3g0AXSSxn7FlOdsvnHr79iEZ792L0+sItmN+DTFn3g==", + "version": "0.0.0-experimental-c7dd3d3a", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-c7dd3d3a.tgz", + "integrity": "sha512-reXnySaRGlEl6cOgF7fSQvIRzyRFUjGsez0kHQk0ok6Z3Y7n1PVTCKNhooSfOI1hBOi0c9cIMurhoTgjYXyxHw==", "engines": { "node": ">=14.0.0" } }, "node_modules/@remix-run/react/node_modules/@remix-run/server-runtime": { - "version": "0.0.0-experimental-c75407ea4", - "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-0.0.0-experimental-c75407ea4.tgz", - "integrity": "sha512-TcNTPluhfLSoZuDmjomfO0qXH//iu2A1dES9XEBVEd9DfZ5Qhyr3asAUVkpQ7ud7vBrqINgM856H+uOIytsK5w==", + "version": "0.0.0-experimental-9989381a2", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-0.0.0-experimental-9989381a2.tgz", + "integrity": "sha512-dwZxKlQ6WJHeoBRBm9GkR46GcKU8AEqJPss3Fjjgl0cWRWVcg07n8Mo1jXIaNPZg8oohsBzy5p+dHNXeYQs/0g==", "dependencies": { - "@remix-run/router": "0.0.0-experimental-71108452", + "@remix-run/router": "0.0.0-experimental-c7dd3d3a", "@types/cookie": "^0.6.0", "@web3-storage/multipart-parser": "^1.0.0", "cookie": "^0.6.0", @@ -17444,11 +17444,11 @@ } }, "node_modules/react-router": { - "version": "0.0.0-experimental-71108452", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-0.0.0-experimental-71108452.tgz", - "integrity": "sha512-TL0c7MPzESSu9VQeVkGU8lzT8zCwpyJHG/1FATmhHNiwLUYyvIOf6EAORmJ6Z/2ACpX65G4SwHZKwawYiaocuw==", + "version": "0.0.0-experimental-c7dd3d3a", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-0.0.0-experimental-c7dd3d3a.tgz", + "integrity": "sha512-biSo7Pmedzrm9DXjC3ScIwCWVt3qVAutf51hJ/POxfcRYvhgi9ENNGHLjpqabBH4oI5IwI53Vh0w7pKOdadC9A==", "dependencies": { - "@remix-run/router": "0.0.0-experimental-71108452" + "@remix-run/router": "0.0.0-experimental-c7dd3d3a" }, "engines": { "node": ">=14.0.0" @@ -17458,12 +17458,12 @@ } }, "node_modules/react-router-dom": { - "version": "0.0.0-experimental-71108452", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-0.0.0-experimental-71108452.tgz", - "integrity": "sha512-vuhSLWHi2qWnUnXfeN5hp26AVZtbMOfrx9hKUN/T1d4zWhDSueZICUQJCUqRoO8GkS/irp2LEc0+CCnmFPR25Q==", + "version": "0.0.0-experimental-c7dd3d3a", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-0.0.0-experimental-c7dd3d3a.tgz", + "integrity": "sha512-pp1l8sk4Rc9vLucHgHU4B2LUL/4e6iwD7ipDGgfc9a08eNVowxaDJXkbtyYE10lpjaZZkXF1DFkdHfGrKeXWQw==", "dependencies": { - "@remix-run/router": "0.0.0-experimental-71108452", - "react-router": "0.0.0-experimental-71108452" + "@remix-run/router": "0.0.0-experimental-c7dd3d3a", + "react-router": "0.0.0-experimental-c7dd3d3a" }, "engines": { "node": ">=14.0.0" @@ -17474,17 +17474,17 @@ } }, "node_modules/react-router-dom/node_modules/@remix-run/router": { - "version": "0.0.0-experimental-71108452", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-71108452.tgz", - "integrity": "sha512-U+HfaoXuYYPHKKV/K32w3C+SuDWD+MNPlE6slXfK+sLW3g0AXSSxn7FlOdsvnHr79iEZ792L0+sItmN+DTFn3g==", + "version": "0.0.0-experimental-c7dd3d3a", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-c7dd3d3a.tgz", + "integrity": "sha512-reXnySaRGlEl6cOgF7fSQvIRzyRFUjGsez0kHQk0ok6Z3Y7n1PVTCKNhooSfOI1hBOi0c9cIMurhoTgjYXyxHw==", "engines": { "node": ">=14.0.0" } }, "node_modules/react-router/node_modules/@remix-run/router": { - "version": "0.0.0-experimental-71108452", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-71108452.tgz", - "integrity": "sha512-U+HfaoXuYYPHKKV/K32w3C+SuDWD+MNPlE6slXfK+sLW3g0AXSSxn7FlOdsvnHr79iEZ792L0+sItmN+DTFn3g==", + "version": "0.0.0-experimental-c7dd3d3a", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-0.0.0-experimental-c7dd3d3a.tgz", + "integrity": "sha512-reXnySaRGlEl6cOgF7fSQvIRzyRFUjGsez0kHQk0ok6Z3Y7n1PVTCKNhooSfOI1hBOi0c9cIMurhoTgjYXyxHw==", "engines": { "node": ">=14.0.0" } @@ -18587,9 +18587,9 @@ } }, "node_modules/remix": { - "version": "0.0.0-experimental-c75407ea4", - "resolved": "https://registry.npmjs.org/remix/-/remix-0.0.0-experimental-c75407ea4.tgz", - "integrity": "sha512-bUO1LKyPlvJZEiXBxo8w0xAI8l2bAec78HmXBZzf/oYzYccRBGEWnxsco/ynazUWg/SIo5JK+PoQXN/fp57cTg==", + "version": "0.0.0-experimental-9989381a2", + "resolved": "https://registry.npmjs.org/remix/-/remix-0.0.0-experimental-9989381a2.tgz", + "integrity": "sha512-5Q0LkDDqArhWrGjyDrwB22h82imOE2O+aAWw54QJzOthLj9yTygl7Mmbofs9omEAmenTz77XN6E6aee9azN63Q==", "engines": { "node": ">=18.0.0" } diff --git a/package.json b/package.json index 97e10d27..893ddbf1 100644 --- a/package.json +++ b/package.json @@ -22,9 +22,9 @@ "dependencies": { "@docsearch/css": "^3.5.2", "@docsearch/react": "^3.5.2", - "@remix-run/express": "v0.0.0-experimental-c75407ea4", - "@remix-run/node": "v0.0.0-experimental-c75407ea4", - "@remix-run/react": "v0.0.0-experimental-c75407ea4", + "@remix-run/express": "0.0.0-experimental-9989381a2", + "@remix-run/node": "0.0.0-experimental-9989381a2", + "@remix-run/react": "0.0.0-experimental-9989381a2", "@remix-run/v1-meta": "0.1.3", "@tailwindcss/aspect-ratio": "^0.4.2", "cheerio": "^1.0.0-rc.12", @@ -61,7 +61,7 @@ "remark-html": "^16.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.0", - "remix": "v0.0.0-experimental-c75407ea4", + "remix": "0.0.0-experimental-9989381a2", "satori": "^0.10.11", "semver": "^7.5.4", "shiki": "^0.14.7", @@ -78,8 +78,8 @@ "zod": "^3.22.4" }, "devDependencies": { - "@remix-run/dev": "v0.0.0-experimental-c75407ea4", - "@remix-run/eslint-config": "v0.0.0-experimental-c75407ea4", + "@remix-run/dev": "0.0.0-experimental-9989381a2", + "@remix-run/eslint-config": "0.0.0-experimental-9989381a2", "@testing-library/jest-dom": "^6.2.0", "@types/follow-redirects": "^1.14.4", "@types/gunzip-maybe": "^1.4.2", From cb5b845f82982edf1a9d6949a0644d58051d76b0 Mon Sep 17 00:00:00 2001 From: Brooks Lybrand Date: Thu, 14 Mar 2024 10:50:22 -0400 Subject: [PATCH 4/4] Fix CI/CD (maybe) --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 57929e48..b36a2d88 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ FROM base as deps WORKDIR /remixapp -ADD package.json package-lock.json ./ +ADD package.json package-lock.json .npmrc ./ RUN npm install --include=dev # Setup production node_modules @@ -24,7 +24,7 @@ FROM base as production-deps WORKDIR /remixapp COPY --from=deps /remixapp/node_modules /remixapp/node_modules -ADD package.json package-lock.json ./ +ADD package.json package-lock.json .npmrc ./ RUN npm prune --omit=dev # Build the app