Skip to content

Commit

Permalink
chore: use undici / native node fetch (#11364)
Browse files Browse the repository at this point in the history
* chore: use undici / native node fetch

* revert snapshot change
  • Loading branch information
jacob-ebey committed Mar 22, 2024
1 parent 6b856bc commit e977d54
Show file tree
Hide file tree
Showing 10 changed files with 46 additions and 758 deletions.
611 changes: 0 additions & 611 deletions examples/ssr-data-router/package-lock.json

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion examples/ssr-data-router/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
"debug": "node --inspect-brk server.js"
},
"dependencies": {
"@remix-run/node": "^1.12.0",
"@remix-run/router": "^1.8.0",
"compression": "1.7.4",
"cross-env": "^7.0.3",
Expand Down
4 changes: 0 additions & 4 deletions examples/ssr-data-router/server.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
let path = require("path");
let fsp = require("fs/promises");
let express = require("express");
let { installGlobals } = require("@remix-run/node");

// Polyfill Web Fetch API
installGlobals();

let root = process.cwd();
let isProduction = process.env.NODE_ENV === "production";
Expand Down
8 changes: 0 additions & 8 deletions jest/jest.config.shared.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,6 @@ const ignorePatterns = [
/** @type {import('jest').Config} */
module.exports = {
moduleNameMapper: {
"^@remix-run/web-blob$": require.resolve("@remix-run/web-blob"),
"^@remix-run/web-fetch$": require.resolve("@remix-run/web-fetch"),
"^@remix-run/web-form-data$": require.resolve("@remix-run/web-form-data"),
"^@remix-run/web-stream$": require.resolve("@remix-run/web-stream"),
"^@web3-storage/multipart-parser$": require.resolve(
"@web3-storage/multipart-parser"
),

"^@remix-run/router$": "<rootDir>/../router/index.ts",
"^react-router$": "<rootDir>/../react-router/index.ts",
"^react-router-dom$": "<rootDir>/../react-router-dom/index.tsx",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@
"@octokit/plugin-paginate-rest": "^2.21.3",
"@octokit/rest": "^18.12.0",
"@remix-run/changelog-github": "^0.0.5",
"@remix-run/web-fetch": "4.3.6",
"@rollup/plugin-babel": "^5.3.1",
"@rollup/plugin-replace": "^4.0.0",
"@rollup/plugin-typescript": "^8.5.0",
Expand Down Expand Up @@ -102,6 +101,7 @@
"semver": "^7.5.4",
"type-fest": "^2.19.0",
"typescript": "^5.1.6",
"undici": "^6.10.1",
"unified": "^10.1.2",
"unist-util-remove": "^3.1.0"
},
Expand Down
21 changes: 12 additions & 9 deletions packages/react-router-dom/__tests__/setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,28 @@ import {
TextEncoder as NodeTextEncoder,
TextDecoder as NodeTextDecoder,
} from "util";
import { fetch, Request, Response, Headers } from "@remix-run/web-fetch";
import { AbortController as NodeAbortController } from "abort-controller";

// https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html#configuring-your-testing-environment
globalThis.IS_REACT_ACT_ENVIRONMENT = true;

if (!globalThis.fetch) {
// Built-in lib.dom.d.ts expects `fetch(Request | string, ...)` but the web
// fetch API allows a URL so @remix-run/web-fetch defines
// `fetch(string | URL | Request, ...)`
// @ts-expect-error
const { TextDecoder, TextEncoder } = require("node:util");
global.TextDecoder = TextDecoder;
global.TextEncoder = TextEncoder;

const { ReadableStream, WritableStream } = require("node:stream/web");
global.ReadableStream = ReadableStream;
global.WritableStream = WritableStream;

const { fetch, FormData, Request, Response, Headers } = require("undici");

globalThis.fetch = fetch;
// Same as above, lib.dom.d.ts doesn't allow a URL to the Request constructor
// @ts-expect-error
globalThis.Request = Request;
// web-std/fetch Response does not currently implement Response.error()
// @ts-expect-error
globalThis.Response = Response;
globalThis.Headers = Headers;

global.FormData = global.FormData || FormData;
}

if (!globalThis.AbortController) {
Expand Down
22 changes: 12 additions & 10 deletions packages/react-router/__tests__/setup.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
import { fetch, Request, Response, Headers } from "@remix-run/web-fetch";

// https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html#configuring-your-testing-environment
globalThis.IS_REACT_ACT_ENVIRONMENT = true;

if (!globalThis.fetch) {
// Built-in lib.dom.d.ts expects `fetch(Request | string, ...)` but the web
// fetch API allows a URL so @remix-run/web-fetch defines
// `fetch(string | URL | Request, ...)`
// @ts-expect-error
const { TextDecoder, TextEncoder } = require("node:util");
global.TextDecoder = TextDecoder;
global.TextEncoder = TextEncoder;

const { ReadableStream, WritableStream } = require("node:stream/web");
global.ReadableStream = ReadableStream;
global.WritableStream = WritableStream;

const { fetch, FormData, Request, Response, Headers } = require("undici");

globalThis.fetch = fetch;
// Same as above, lib.dom.d.ts doesn't allow a URL to the Request constructor
// @ts-expect-error
globalThis.Request = Request;
// web-std/fetch Response does not currently implement Response.error()
// @ts-expect-error
globalThis.Response = Response;
globalThis.Headers = Headers;

global.FormData = global.FormData || FormData;
}
2 changes: 1 addition & 1 deletion packages/router/__tests__/router-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1892,7 +1892,7 @@ describe("a router", () => {
expect(
A.actions.root.stub.mock.calls[0][0].request.headers.get("Content-Type")
).toMatch(
/^multipart\/form-data; boundary=NodeFetchFormDataBoundary[a-z0-9]+/
/^multipart\/form-data; boundary=----formdata-undici-[a-z0-9]+/
);
});

Expand Down
31 changes: 12 additions & 19 deletions packages/router/__tests__/setup.ts
Original file line number Diff line number Diff line change
@@ -1,32 +1,25 @@
import {
TextEncoder as NodeTextEncoder,
TextDecoder as NodeTextDecoder,
} from "util";
import { fetch, Request, Response, Headers } from "@remix-run/web-fetch";
import { AbortController as NodeAbortController } from "abort-controller";

if (!globalThis.fetch) {
// Built-in lib.dom.d.ts expects `fetch(Request | string, ...)` but the web
// fetch API allows a URL so @remix-run/web-fetch defines
// `fetch(string | URL | Request, ...)`
// @ts-expect-error
const { TextDecoder, TextEncoder } = require("node:util");
global.TextDecoder = global.TextDecoder || TextDecoder;
global.TextEncoder = global.TextEncoder || TextEncoder;

const { ReadableStream, WritableStream } = require("node:stream/web");
global.ReadableStream = ReadableStream;
global.WritableStream = WritableStream;

const { fetch, FormData, Request, Response, Headers } = require("undici");

globalThis.fetch = fetch;
// Same as above, lib.dom.d.ts doesn't allow a URL to the Request constructor
// @ts-expect-error
globalThis.Request = Request;
// web-std/fetch Response does not currently implement Response.error()
// @ts-expect-error
globalThis.Response = Response;
globalThis.Headers = Headers;

global.FormData = global.FormData || FormData;
}

if (!globalThis.AbortController) {
// @ts-expect-error
globalThis.AbortController = NodeAbortController;
}

if (!globalThis.TextEncoder || !globalThis.TextDecoder) {
globalThis.TextEncoder = NodeTextEncoder;
// @ts-expect-error
globalThis.TextDecoder = NodeTextDecoder;
}
102 changes: 8 additions & 94 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit e977d54

Please sign in to comment.