Skip to content
Draft

v8 #14927

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .changeset/esm-only-packages.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
"@react-router/architect": major
"@react-router/cloudflare": major
"@react-router/dev": major
"@react-router/express": major
"@react-router/fs-routes": major
"@react-router/node": major
"@react-router/remix-routes-option-adapter": major
"@react-router/serve": major
"create-react-router": major
"react-router": major
"react-router-dom": major
---

Switch the published packages in `packages/` to ESM-only.
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
22
24
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Prettier ignore patterns.
/fixtures/
node_modules/
pnpm-lock.yaml
Expand Down
6 changes: 4 additions & 2 deletions docs/prettier.config.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
/**
* @type {import('prettier').Options}
*/
module.exports = {
...require("../prettier.config"),
import config from "../prettier.config.js";

export default {
...config,
printWidth: 60,
};
4 changes: 2 additions & 2 deletions integration/helpers/vite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import type { Page } from "@playwright/test";
import { test as base, expect } from "@playwright/test";
import type { Config } from "@react-router/dev/config";

const require = createRequire(import.meta.url);
const nodeRequire = createRequire(import.meta.url);

const reactRouterBin = "node_modules/@react-router/dev/bin.js";
const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
Expand Down Expand Up @@ -354,7 +354,7 @@ export const wranglerPagesDev = async ({
port: number;
}) => {
let nodeBin = process.argv[0];
let wranglerBin = require.resolve("wrangler/bin/wrangler.js", {
let wranglerBin = nodeRequire.resolve("wrangler/bin/wrangler.js", {
paths: [cwd],
});

Expand Down
6 changes: 4 additions & 2 deletions integration/vite-spa-mode-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -638,7 +638,9 @@ test.describe("SPA Mode", () => {
<Links />
</head>
<body>
{children}
<div data-layout>
{children}
</div>
<ScrollRestoration />
<Scripts />
</body>
Expand Down Expand Up @@ -666,7 +668,7 @@ test.describe("SPA Mode", () => {
expect(html.match(/<html/g)?.length).toBe(1);
expect(html.match(/<\/html/g)?.length).toBe(1);
expect(html.match(/window.__reactRouterContext =/g)?.length).toBe(1);
expect(html.match(/💿 Hey developer 👋/g)?.length).toBe(1);
expect(html).toMatch('<div data-layout="true">');
});

test("does not inherit single fetch revalidation behavior", async ({
Expand Down
11 changes: 6 additions & 5 deletions jest/jest.config.shared.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { fileURLToPath } from "node:url";

const ignorePatterns = [
"\\/build\\/",
"\\/coverage\\/",
Expand All @@ -7,21 +9,20 @@ const ignorePatterns = [
];

/** @type {import('jest').Config} */
module.exports = {
export default {
moduleNameMapper: {
"@react-router/dev$": "<rootDir>/../react-router-dev/index.ts",
"@react-router/express$": "<rootDir>/../react-router-express/index.ts",
"@react-router/node$": "<rootDir>/../react-router-node/index.ts",
"@react-router/serve$": "<rootDir>/../react-router-serve/index.ts",
"^react-router$": "<rootDir>/../react-router/index.ts",
"^@web3-storage/multipart-parser$": require.resolve(
"@web3-storage/multipart-parser",
),
},
modulePathIgnorePatterns: ignorePatterns,
extensionsToTreatAsEsm: [".ts", ".tsx"],
setupFiles: [fileURLToPath(new URL("./setup-globals.js", import.meta.url))],
testMatch: ["<rootDir>/**/*-test.[jt]s?(x)"],
transform: {
"\\.[jt]sx?$": require.resolve("./transform"),
"\\.[jt]sx?$": fileURLToPath(new URL("./transform.js", import.meta.url)),
},
watchPathIgnorePatterns: [...ignorePatterns, "\\/node_modules\\/"],
globals: {
Expand Down
3 changes: 3 additions & 0 deletions jest/setup-globals.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { jest } from "@jest/globals";

globalThis.jest = jest;
23 changes: 5 additions & 18 deletions jest/transform.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,12 @@
let { default: babelJest } = require("babel-jest");
import babelJest from "babel-jest";

/**
* Replace `import.meta` with `undefined`
*
* Needed to support server-side CJS in Jest
* when `import.meta.hot` is used for HMR.
*/
let metaPlugin = ({ types: t }) => ({
visitor: {
MetaProperty: (path) => {
path.replaceWith(t.identifier("undefined"));
},
},
});

module.exports = babelJest.createTransformer({
export default babelJest.createTransformer({
babelrc: false,
configFile: false,
presets: [
["@babel/preset-env", { loose: true }],
["@babel/preset-env", { targets: { node: "current" }, modules: false }],
"@babel/preset-react",
"@babel/preset-typescript",
],
plugins: ["babel-plugin-dev-expression", metaPlugin],
plugins: ["babel-plugin-dev-expression"],
});
17 changes: 10 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
{
"name": "@remix-run/react-router",
"private": true,
"type": "module",
"scripts": {
"build": "pnpm run --filter=\"./packages/**/*\" build",
"watch": "pnpm build && pnpm run --filter=\"./packages/**/*\" --parallel build --watch",
Expand All @@ -25,8 +26,8 @@
"pr-preview": "node ./scripts/pr-preview.ts",
"release-comments": "node scripts/release-comments.ts",
"setup-installable-branch": "node scripts/setup-installable-branch.ts",
"test": "jest",
"test:inspect": "node --inspect-brk ./node_modules/.bin/jest",
"test": "node --experimental-vm-modules ./node_modules/jest/bin/jest.js",
"test:inspect": "node --experimental-vm-modules --inspect-brk ./node_modules/jest/bin/jest.js",
"typegen": "pnpm run --recursive --parallel typegen",
"typecheck": "pnpm run --recursive --parallel typecheck",
"test:integration:run": "pnpm playwright:integration",
Expand All @@ -49,8 +50,7 @@
"resolutions": {
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
"@types/react-test-renderer": "^18.3.1",
"jsdom": "22.1.0"
"@types/react-test-renderer": "^18.3.1"
},
"dependencies": {
"@babel/core": "^7.27.7",
Expand All @@ -61,14 +61,15 @@
"@manypkg/get-packages": "^1.1.3",
"@mdx-js/rollup": "^3.1.0",
"@playwright/test": "^1.58.2",
"@types/jest": "^29.5.4",
"@remix-run/changelog-github": "^0.0.5",
"@types/jest": "^30.0.0",
"@types/jsdom": "^21.1.1",
"@types/react": "catalog:",
"@types/react-dom": "catalog:",
"@types/react-test-renderer": "^19.0.0",
"@typescript-eslint/eslint-plugin": "^8.57.1",
"@typescript-eslint/parser": "^8.57.1",
"babel-jest": "^29.7.0",
"babel-jest": "^30.3.0",
"babel-plugin-dev-expression": "^0.2.3",
"dox": "^1.0.0",
"eslint": "^10.0.3",
Expand All @@ -82,7 +83,9 @@
"eslint-plugin-react-hooks": "next",
"fast-glob": "3.2.11",
"isbot": "^5.1.11",
"jest": "^29.6.4",
"jest": "^30.3.0",
"jest-environment-jsdom": "^29.6.2",
"jsdom": "^29.0.0",
"jsonfile": "^6.1.0",
"picocolors": "^1.1.1",
"prettier": "^3.6.2",
Expand Down
Loading
Loading