From 860f42d35e0686df9432351e171ada9d3048fdab Mon Sep 17 00:00:00 2001 From: Jacob Ebey Date: Mon, 31 Jul 2023 13:21:08 -0700 Subject: [PATCH 1/5] feat!: remove auto globals install --- .changeset/v2-remove-auto-globals-install.md | 27 ++++++++++++++++++++ docs/pages/v2.md | 23 +++++++++++++++++ packages/remix-architect/globals.ts | 2 -- packages/remix-architect/index.ts | 2 -- packages/remix-express/globals.ts | 2 -- packages/remix-express/index.ts | 2 -- packages/remix-netlify/globals.ts | 2 -- packages/remix-netlify/index.ts | 2 -- packages/remix-node/index.ts | 4 --- packages/remix-node/package.json | 4 +-- packages/remix-serve/cli.ts | 3 +++ packages/remix-serve/package.json | 6 +++-- packages/remix-vercel/globals.ts | 2 -- packages/remix-vercel/index.ts | 2 -- templates/arc/package.json | 4 ++- templates/arc/server.ts | 2 ++ templates/express/package.json | 4 ++- templates/express/server.js | 2 ++ templates/netlify/package.json | 4 ++- templates/netlify/server.ts | 2 ++ templates/vercel/package.json | 4 ++- templates/vercel/server.ts | 2 ++ yarn.lock | 8 +++--- 23 files changed, 82 insertions(+), 33 deletions(-) create mode 100644 .changeset/v2-remove-auto-globals-install.md delete mode 100644 packages/remix-architect/globals.ts delete mode 100644 packages/remix-express/globals.ts delete mode 100644 packages/remix-netlify/globals.ts delete mode 100644 packages/remix-vercel/globals.ts diff --git a/.changeset/v2-remove-auto-globals-install.md b/.changeset/v2-remove-auto-globals-install.md new file mode 100644 index 00000000000..4bd8f9bdb4c --- /dev/null +++ b/.changeset/v2-remove-auto-globals-install.md @@ -0,0 +1,27 @@ +--- +"@remix-run/architect": major +"@remix-run/express": major +"@remix-run/netlify": major +"@remix-run/node": major +"@remix-run/serve": major +"@remix-run/vercel": major +--- + +For preparation of using Node's built in fetch implementation, installing the fetch globals is now a responsibility of the app server. If you are using `remix-serve`, nothing is required. If you are using your own app server, you will need to install the globals yourself. + +```js filename=server.js +import { installGlobals } from "@remix-run/node"; + +installGlobals(); +``` + +source-map-support is now a responsibility of the app server. If you are using `remix-serve`, nothing is required. If you are using your own app server, you will need to install [`source-map-support`](https://www.npmjs.com/package/source-map-support) yourself. + +```sh +npm i source-map-support +``` + +```js filename=server.js +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); +``` diff --git a/docs/pages/v2.md b/docs/pages/v2.md index f0a10f08456..aa8cbcd2627 100644 --- a/docs/pages/v2.md +++ b/docs/pages/v2.md @@ -860,6 +860,29 @@ remix dev --manual -c 'node ./server.js' Check out the [manual mode guide][manual-mode] for more details. +## `installGlobals` + +For preparation of using Node's built in fetch implementation, installing the fetch globals is now a responsibility of the app server. If you are using `remix-serve`, nothing is required. If you are using your own app server, you will need to install the globals yourself. + +```js filename=server.js +import { installGlobals } from "@remix-run/node"; + +installGlobals(); +``` + +## `source-map-support` + +Source map support is now a responsibility of the app server. If you are using `remix-serve`, nothing is required. If you are using your own app server, you will need to install [`source-map-support`](https://www.npmjs.com/package/source-map-support) yourself. + +```sh +npm i source-map-support +``` + +```js filename=server.js +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); +``` + [future-flags]: ./api-development-strategy [remix-config]: ../file-conventions/remix-config [flat-routes]: https://github.com/remix-run/remix/discussions/4482 diff --git a/packages/remix-architect/globals.ts b/packages/remix-architect/globals.ts deleted file mode 100644 index 917305ac938..00000000000 --- a/packages/remix-architect/globals.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { installGlobals } from "@remix-run/node"; -installGlobals(); diff --git a/packages/remix-architect/index.ts b/packages/remix-architect/index.ts index 92b76da294d..c66f26f5676 100644 --- a/packages/remix-architect/index.ts +++ b/packages/remix-architect/index.ts @@ -1,5 +1,3 @@ -import "./globals"; - export { createArcTableSessionStorage } from "./sessions/arcTableSessionStorage"; export type { GetLoadContextFunction, RequestHandler } from "./server"; diff --git a/packages/remix-express/globals.ts b/packages/remix-express/globals.ts deleted file mode 100644 index 917305ac938..00000000000 --- a/packages/remix-express/globals.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { installGlobals } from "@remix-run/node"; -installGlobals(); diff --git a/packages/remix-express/index.ts b/packages/remix-express/index.ts index fb640bf4799..8d8383f2cf3 100644 --- a/packages/remix-express/index.ts +++ b/packages/remix-express/index.ts @@ -1,4 +1,2 @@ -import "./globals"; - export type { GetLoadContextFunction, RequestHandler } from "./server"; export { createRequestHandler } from "./server"; diff --git a/packages/remix-netlify/globals.ts b/packages/remix-netlify/globals.ts deleted file mode 100644 index 917305ac938..00000000000 --- a/packages/remix-netlify/globals.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { installGlobals } from "@remix-run/node"; -installGlobals(); diff --git a/packages/remix-netlify/index.ts b/packages/remix-netlify/index.ts index fb640bf4799..8d8383f2cf3 100644 --- a/packages/remix-netlify/index.ts +++ b/packages/remix-netlify/index.ts @@ -1,4 +1,2 @@ -import "./globals"; - export type { GetLoadContextFunction, RequestHandler } from "./server"; export { createRequestHandler } from "./server"; diff --git a/packages/remix-node/index.ts b/packages/remix-node/index.ts index c42cd61c626..e6e7e8b617b 100644 --- a/packages/remix-node/index.ts +++ b/packages/remix-node/index.ts @@ -1,7 +1,3 @@ -import sourceMapSupport from "source-map-support"; - -sourceMapSupport.install(); - export { AbortController } from "abort-controller"; export type { diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index c4f18f247ac..e521e6373ef 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -24,12 +24,10 @@ "@web3-storage/multipart-parser": "^1.0.0", "abort-controller": "^3.0.0", "cookie-signature": "^1.1.0", - "source-map-support": "^0.5.21", "stream-slice": "^0.1.2" }, "devDependencies": { - "@types/cookie-signature": "^1.0.3", - "@types/source-map-support": "^0.5.4" + "@types/cookie-signature": "^1.0.3" }, "engines": { "node": ">=18.0.0" diff --git a/packages/remix-serve/cli.ts b/packages/remix-serve/cli.ts index 3b5e5712a91..580d015077a 100644 --- a/packages/remix-serve/cli.ts +++ b/packages/remix-serve/cli.ts @@ -2,9 +2,12 @@ import "./env"; import path from "path"; import os from "os"; import { broadcastDevReady } from "@remix-run/node"; +import sourceMapSupport from "source-map-support"; import { createApp } from "./index"; +sourceMapSupport.install(); + let port = process.env.PORT ? Number(process.env.PORT) : 3000; if (Number.isNaN(port)) port = 3000; diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index 6d6ddf3afab..769b43588c7 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -21,12 +21,14 @@ "@remix-run/node": "1.19.1", "compression": "^1.7.4", "express": "^4.17.1", - "morgan": "^1.10.0" + "morgan": "^1.10.0", + "source-map-support": "^0.5.21" }, "devDependencies": { "@types/compression": "^1.7.0", "@types/express": "^4.17.9", - "@types/morgan": "^1.9.2" + "@types/morgan": "^1.9.2", + "@types/source-map-support": "^0.5.6" }, "engines": { "node": ">=18.0.0" diff --git a/packages/remix-vercel/globals.ts b/packages/remix-vercel/globals.ts deleted file mode 100644 index 917305ac938..00000000000 --- a/packages/remix-vercel/globals.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { installGlobals } from "@remix-run/node"; -installGlobals(); diff --git a/packages/remix-vercel/index.ts b/packages/remix-vercel/index.ts index 74cbdf5c001..b6e4eedca7d 100644 --- a/packages/remix-vercel/index.ts +++ b/packages/remix-vercel/index.ts @@ -1,5 +1,3 @@ -import "./globals"; - const alreadyWarned: Record = {}; const warnOnce = (message: string, key = message) => { if (!alreadyWarned[key]) { diff --git a/templates/arc/package.json b/templates/arc/package.json index a8c5cf4d99a..0965797a79d 100644 --- a/templates/arc/package.json +++ b/templates/arc/package.json @@ -16,7 +16,8 @@ "cross-env": "^7.0.3", "isbot": "^3.6.8", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "source-map-support": "^0.5.21" }, "devDependencies": { "@architect/architect": "^10.12.1", @@ -24,6 +25,7 @@ "@remix-run/eslint-config": "*", "@types/react": "^18.0.35", "@types/react-dom": "^18.0.11", + "@types/source-map-support": "^0.5.6", "eslint": "^8.38.0", "typescript": "^5.0.4" }, diff --git a/templates/arc/server.ts b/templates/arc/server.ts index f182b6fd2dd..dee2e3177cf 100644 --- a/templates/arc/server.ts +++ b/templates/arc/server.ts @@ -1,7 +1,9 @@ import { createRequestHandler } from "@remix-run/architect"; import * as build from "@remix-run/dev/server-build"; import { installGlobals } from "@remix-run/node"; +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); installGlobals(); export const handler = createRequestHandler({ diff --git a/templates/express/package.json b/templates/express/package.json index b10d7394c90..c9495d88c96 100644 --- a/templates/express/package.json +++ b/templates/express/package.json @@ -19,7 +19,8 @@ "isbot": "^3.6.8", "morgan": "^1.10.0", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "source-map-support": "^0.5.21" }, "devDependencies": { "@remix-run/dev": "*", @@ -29,6 +30,7 @@ "@types/morgan": "^1.9.4", "@types/react": "^18.0.35", "@types/react-dom": "^18.0.11", + "@types/source-map-support": "^0.5.6", "chokidar": "^3.5.3", "eslint": "^8.38.0", "typescript": "^5.0.4" diff --git a/templates/express/server.js b/templates/express/server.js index 10b59924ea4..3c8f90a8423 100644 --- a/templates/express/server.js +++ b/templates/express/server.js @@ -6,7 +6,9 @@ import chokidar from "chokidar"; import compression from "compression"; import express from "express"; import morgan from "morgan"; +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); installGlobals(); const BUILD_PATH = "./build/index.js"; diff --git a/templates/netlify/package.json b/templates/netlify/package.json index 8c017162d70..bf12286c1be 100644 --- a/templates/netlify/package.json +++ b/templates/netlify/package.json @@ -16,7 +16,8 @@ "cross-env": "^7.0.3", "isbot": "^3.6.8", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "source-map-support": "^0.5.21" }, "devDependencies": { "@remix-run/dev": "*", @@ -24,6 +25,7 @@ "@remix-run/serve": "*", "@types/react": "^18.0.35", "@types/react-dom": "^18.0.11", + "@types/source-map-support": "^0.5.6", "eslint": "^8.38.0", "typescript": "^5.0.4" }, diff --git a/templates/netlify/server.ts b/templates/netlify/server.ts index c6e862f8245..9b0e4bd08dd 100644 --- a/templates/netlify/server.ts +++ b/templates/netlify/server.ts @@ -1,7 +1,9 @@ import * as build from "@remix-run/dev/server-build"; import { createRequestHandler } from "@remix-run/netlify"; import { installGlobals } from "@remix-run/node"; +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); installGlobals(); export const handler = createRequestHandler({ diff --git a/templates/vercel/package.json b/templates/vercel/package.json index be657ae86a2..09c988335c3 100644 --- a/templates/vercel/package.json +++ b/templates/vercel/package.json @@ -14,7 +14,8 @@ "@vercel/node": "^2.10.3", "isbot": "^3.6.8", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "source-map-support": "^0.5.21" }, "devDependencies": { "@remix-run/dev": "*", @@ -22,6 +23,7 @@ "@remix-run/serve": "*", "@types/react": "^18.0.35", "@types/react-dom": "^18.0.11", + "@types/source-map-support": "^0.5.6", "eslint": "^8.38.0", "typescript": "^5.0.4" }, diff --git a/templates/vercel/server.ts b/templates/vercel/server.ts index 319f8e3c470..de593c1b0ae 100644 --- a/templates/vercel/server.ts +++ b/templates/vercel/server.ts @@ -1,7 +1,9 @@ import * as build from "@remix-run/dev/server-build"; import { installGlobals } from "@remix-run/node"; import { createRequestHandler } from "@remix-run/vercel"; +import sourceMapSupport from "source-map-support"; +sourceMapSupport.install(); installGlobals(); export default createRequestHandler({ build, mode: process.env.NODE_ENV }); diff --git a/yarn.lock b/yarn.lock index b735663f103..aa473f23519 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3398,10 +3398,10 @@ resolved "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz" integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== -"@types/source-map-support@^0.5.4": - version "0.5.4" - resolved "https://registry.npmjs.org/@types/source-map-support/-/source-map-support-0.5.4.tgz" - integrity sha512-9zGujX1sOPg32XLyfgEB/0G9ZnrjthL/Iv1ZfuAjj8LEilHZEpQSQs1scpRXPhHzGYgWiLz9ldF1cI8JhL+yMw== +"@types/source-map-support@^0.5.6": + version "0.5.6" + resolved "https://registry.npmjs.org/@types/source-map-support/-/source-map-support-0.5.6.tgz#aa4a8c98ec73a1f1f30a813573a9b2154a6eb39a" + integrity sha512-b2nJ9YyXmkhGaa2b8VLM0kJ04xxwNyijcq12/kDoomCt43qbHBeK2SLNJ9iJmETaAj+bKUT05PQUu3Q66GvLhQ== dependencies: source-map "^0.6.0" From 8ba910653fbe2bd0cbbd1480d78aeeb17b344274 Mon Sep 17 00:00:00 2001 From: Jacob Ebey Date: Mon, 31 Jul 2023 18:47:31 -0700 Subject: [PATCH 2/5] install globals in remix-serve --- packages/remix-serve/cli.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/remix-serve/cli.ts b/packages/remix-serve/cli.ts index 580d015077a..8cf3b726c04 100644 --- a/packages/remix-serve/cli.ts +++ b/packages/remix-serve/cli.ts @@ -1,12 +1,13 @@ import "./env"; import path from "path"; import os from "os"; -import { broadcastDevReady } from "@remix-run/node"; +import { broadcastDevReady, installGlobals } from "@remix-run/node"; import sourceMapSupport from "source-map-support"; import { createApp } from "./index"; sourceMapSupport.install(); +installGlobals(); let port = process.env.PORT ? Number(process.env.PORT) : 3000; if (Number.isNaN(port)) port = 3000; From 12565a1c98079bd70eef32c601fcf852d5c0d6f2 Mon Sep 17 00:00:00 2001 From: Jacob Ebey Date: Tue, 1 Aug 2023 00:42:59 -0700 Subject: [PATCH 3/5] install globals in integration fixture env --- integration/helpers/create-fixture.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/integration/helpers/create-fixture.ts b/integration/helpers/create-fixture.ts index 3c2e31ed9ca..bf7984b518d 100644 --- a/integration/helpers/create-fixture.ts +++ b/integration/helpers/create-fixture.ts @@ -14,6 +14,7 @@ import { ServerMode } from "@remix-run/server-runtime/mode"; import type { ServerBuild } from "../../build/node_modules/@remix-run/server-runtime"; import { createRequestHandler } from "../../build/node_modules/@remix-run/server-runtime"; import { createRequestHandler as createExpressHandler } from "../../build/node_modules/@remix-run/express"; +import { installGlobals } from "../../build/node_modules/@remix-run/node"; const TMP_DIR = path.join(process.cwd(), ".tmp", "integration"); @@ -37,6 +38,7 @@ export function json(value: JsonObject) { } export async function createFixture(init: FixtureInit, mode?: ServerMode) { + installGlobals(); let projectDir = await createFixtureProject(init, mode); let buildPath = path.resolve(projectDir, "build"); let app: ServerBuild = await import(buildPath); From 26e60afe5317ccc0de35b6fb960a1c994e93ca9d Mon Sep 17 00:00:00 2001 From: Jacob Ebey Date: Wed, 2 Aug 2023 10:49:50 -0700 Subject: [PATCH 4/5] ignore --- integration/helpers/create-fixture.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/integration/helpers/create-fixture.ts b/integration/helpers/create-fixture.ts index bf7984b518d..510d5c48297 100644 --- a/integration/helpers/create-fixture.ts +++ b/integration/helpers/create-fixture.ts @@ -11,9 +11,13 @@ import type { JsonObject } from "type-fest"; import type { AppConfig } from "@remix-run/dev"; import { ServerMode } from "@remix-run/server-runtime/mode"; +// @ts-ignore import type { ServerBuild } from "../../build/node_modules/@remix-run/server-runtime"; +// @ts-ignore import { createRequestHandler } from "../../build/node_modules/@remix-run/server-runtime"; +// @ts-ignore import { createRequestHandler as createExpressHandler } from "../../build/node_modules/@remix-run/express"; +// @ts-ignore import { installGlobals } from "../../build/node_modules/@remix-run/node"; const TMP_DIR = path.join(process.cwd(), ".tmp", "integration"); From e214b5129cf6259a545ea9a33d218760a2d5b36f Mon Sep 17 00:00:00 2001 From: Jacob Ebey Date: Wed, 2 Aug 2023 11:09:14 -0700 Subject: [PATCH 5/5] install globals in HMR tests --- integration/hmr-log-test.ts | 4 +++- integration/hmr-test.ts | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/integration/hmr-log-test.ts b/integration/hmr-log-test.ts index 7a469ad5dde..eca69ffc157 100644 --- a/integration/hmr-log-test.ts +++ b/integration/hmr-log-test.ts @@ -50,7 +50,9 @@ let fixture = (options: { appPort: number; devPort: number }): FixtureInit => ({ let path = require("node:path"); let express = require("express"); let { createRequestHandler } = require("@remix-run/express"); - let { logDevReady } = require("@remix-run/node"); + let { logDevReady, installGlobals } = require("@remix-run/node"); + + installGlobals(); const app = express(); app.use(express.static("public", { immutable: true, maxAge: "1y" })); diff --git a/integration/hmr-test.ts b/integration/hmr-test.ts index 5e42f1f7dad..69231d25384 100644 --- a/integration/hmr-test.ts +++ b/integration/hmr-test.ts @@ -51,7 +51,9 @@ let fixture = (options: { appPort: number; devPort: number }): FixtureInit => ({ let path = require("node:path"); let express = require("express"); let { createRequestHandler } = require("@remix-run/express"); - let { broadcastDevReady } = require("@remix-run/node"); + let { broadcastDevReady, installGlobals } = require("@remix-run/node"); + + installGlobals(); const app = express(); app.use(express.static("public", { immutable: true, maxAge: "1y" }));