From 71c02f318682d66c7eebba09639ad128b7874180 Mon Sep 17 00:00:00 2001 From: Chance Strickland <hi@chance.dev> Date: Tue, 20 Dec 2022 09:34:46 -0800 Subject: [PATCH 01/41] chore: enter pre-release --- .changeset/pre.json | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .changeset/pre.json diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 00000000000..45c4d5061ac --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,24 @@ +{ + "mode": "pre", + "tag": "pre", + "initialVersions": { + "create-remix": "1.9.0", + "remix": "1.9.0", + "@remix-run/architect": "1.9.0", + "@remix-run/cloudflare": "1.9.0", + "@remix-run/cloudflare-pages": "1.9.0", + "@remix-run/cloudflare-workers": "1.9.0", + "@remix-run/deno": "1.9.0", + "@remix-run/dev": "1.9.0", + "@remix-run/eslint-config": "1.9.0", + "@remix-run/express": "1.9.0", + "@remix-run/netlify": "1.9.0", + "@remix-run/node": "1.9.0", + "@remix-run/react": "1.9.0", + "@remix-run/serve": "1.9.0", + "@remix-run/server-runtime": "1.9.0", + "@remix-run/testing": "1.9.0", + "@remix-run/vercel": "1.9.0" + }, + "changesets": [] +} From d1ea65b90f7c99f14b23d28106debee003b8d4c3 Mon Sep 17 00:00:00 2001 From: Remix Run Bot <72662859+remix-run-bot@users.noreply.github.com> Date: Tue, 20 Dec 2022 10:48:21 -0700 Subject: [PATCH 02/41] chore: Update version for release (pre) (#4927) --- .changeset/pre.json | 8 +++++++- packages/create-remix/CHANGELOG.md | 7 +++++++ packages/create-remix/package.json | 4 ++-- packages/remix-architect/CHANGELOG.md | 11 ++++++++++ packages/remix-architect/package.json | 4 ++-- packages/remix-cloudflare-pages/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-pages/package.json | 4 ++-- .../remix-cloudflare-workers/CHANGELOG.md | 7 +++++++ .../remix-cloudflare-workers/package.json | 4 ++-- packages/remix-cloudflare/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare/package.json | 4 ++-- packages/remix-deno/CHANGELOG.md | 7 +++++++ packages/remix-deno/package.json | 4 ++-- packages/remix-dev/CHANGELOG.md | 20 +++++++++++++++++++ packages/remix-dev/package.json | 8 ++++---- packages/remix-eslint-config/CHANGELOG.md | 2 ++ packages/remix-eslint-config/package.json | 2 +- packages/remix-express/CHANGELOG.md | 7 +++++++ packages/remix-express/package.json | 4 ++-- packages/remix-netlify/CHANGELOG.md | 11 ++++++++++ packages/remix-netlify/package.json | 4 ++-- packages/remix-node/CHANGELOG.md | 7 +++++++ packages/remix-node/package.json | 4 ++-- packages/remix-react/CHANGELOG.md | 6 ++++++ packages/remix-react/package.json | 4 ++-- packages/remix-serve/CHANGELOG.md | 7 +++++++ packages/remix-serve/package.json | 4 ++-- packages/remix-server-runtime/CHANGELOG.md | 6 ++++++ packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/CHANGELOG.md | 10 ++++++++++ packages/remix-testing/package.json | 8 ++++---- packages/remix-vercel/CHANGELOG.md | 7 +++++++ packages/remix-vercel/package.json | 4 ++-- packages/remix/package.json | 2 +- 34 files changed, 171 insertions(+), 36 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 45c4d5061ac..22a9d9f916f 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -20,5 +20,11 @@ "@remix-run/testing": "1.9.0", "@remix-run/vercel": "1.9.0" }, - "changesets": [] + "changesets": [ + "late-bottles-shop", + "many-zebras-arrive", + "mighty-rules-drum", + "quick-cats-fix", + "thirty-eels-taste" + ] } diff --git a/packages/create-remix/CHANGELOG.md b/packages/create-remix/CHANGELOG.md index 7f837940deb..9634c6cd97a 100644 --- a/packages/create-remix/CHANGELOG.md +++ b/packages/create-remix/CHANGELOG.md @@ -1,5 +1,12 @@ # `create-remix` +## 1.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/dev@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/create-remix/package.json b/packages/create-remix/package.json index 9ea29391f6d..a0807222124 100644 --- a/packages/create-remix/package.json +++ b/packages/create-remix/package.json @@ -1,6 +1,6 @@ { "name": "create-remix", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Create a new Remix app", "homepage": "https://remix.run", "bugs": { @@ -17,7 +17,7 @@ "create-remix": "dist/cli.js" }, "dependencies": { - "@remix-run/dev": "1.9.0" + "@remix-run/dev": "1.10.0-pre.0" }, "engines": { "node": ">=14" diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md index 0567befd662..fd0b66ea190 100644 --- a/packages/remix-architect/CHANGELOG.md +++ b/packages/remix-architect/CHANGELOG.md @@ -1,5 +1,16 @@ # `@remix-run/architect` +## 1.10.0-pre.0 + +### Patch Changes + +- improve performance of `isBinaryType` in the netlify and architect adapters ([#4761](https://github.com/remix-run/remix/pull/4761)) + + previous implementation from arc itself has a complexity of O(N\*includesComplexity), where as now it is O(includesComplexity). + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json index 2d2bd7beb95..ae64ccf2e42 100644 --- a/packages/remix-architect/package.json +++ b/packages/remix-architect/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/architect", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Architect server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@architect/functions": "^5.0.2", - "@remix-run/node": "1.9.0", + "@remix-run/node": "1.10.0-pre.0", "@types/aws-lambda": "^8.10.82" }, "devDependencies": { diff --git a/packages/remix-cloudflare-pages/CHANGELOG.md b/packages/remix-cloudflare-pages/CHANGELOG.md index 0181bb3c645..2402c4a6c59 100644 --- a/packages/remix-cloudflare-pages/CHANGELOG.md +++ b/packages/remix-cloudflare-pages/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-pages` +## 1.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-cloudflare-pages/package.json b/packages/remix-cloudflare-pages/package.json index 7993e6ceeb2..e55c3edccd3 100644 --- a/packages/remix-cloudflare-pages/package.json +++ b/packages/remix-cloudflare-pages/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-pages", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Cloudflare Pages request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/cloudflare": "1.9.0" + "@remix-run/cloudflare": "1.10.0-pre.0" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0", diff --git a/packages/remix-cloudflare-workers/CHANGELOG.md b/packages/remix-cloudflare-workers/CHANGELOG.md index 184f8b9c069..d99b86dcedd 100644 --- a/packages/remix-cloudflare-workers/CHANGELOG.md +++ b/packages/remix-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-workers` +## 1.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-cloudflare-workers/package.json b/packages/remix-cloudflare-workers/package.json index b21868f9016..bdc31dc37cc 100644 --- a/packages/remix-cloudflare-workers/package.json +++ b/packages/remix-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-workers", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Cloudflare worker request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -16,7 +16,7 @@ "module": "dist/esm/index.js", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/cloudflare": "1.9.0" + "@remix-run/cloudflare": "1.10.0-pre.0" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md index 2cb2bf18a7b..47226c2b682 100644 --- a/packages/remix-cloudflare/CHANGELOG.md +++ b/packages/remix-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare` +## 1.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-cloudflare/package.json b/packages/remix-cloudflare/package.json index 3b338ca6066..546483d004d 100644 --- a/packages/remix-cloudflare/package.json +++ b/packages/remix-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Cloudflare platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/server-runtime": "1.9.0" + "@remix-run/server-runtime": "1.10.0-pre.0" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index 790e9a99dff..9d8436c8f17 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/deno` +## 1.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-deno/package.json b/packages/remix-deno/package.json index eb98285cc9e..13fa5cc3d4e 100644 --- a/packages/remix-deno/package.json +++ b/packages/remix-deno/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/deno", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Deno platform abstractions for Remix", "homepage": "https://remix.run", "main": "./index.ts", @@ -15,7 +15,7 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.9.0", + "@remix-run/server-runtime": "1.10.0-pre.0", "mime": "^3.0.0" }, "engines": { diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md index 23db12d3e75..8bc89313a25 100644 --- a/packages/remix-dev/CHANGELOG.md +++ b/packages/remix-dev/CHANGELOG.md @@ -1,5 +1,25 @@ # `@remix-run/dev` +## 1.10.0-pre.0 + +### Patch Changes + +- Fix TS->JS conversion when creating a new Remix project via the CLI ([#4891](https://github.com/remix-run/remix/pull/4891)) + + The TS->JS migration was removed from the CLI codemod options, but still + used for TS->JS conversion when creating a new Remix project from the + CLI. The TS modules responsible for the TS->JS conversion were + incorrectly removed from the Rollup build, resulting in the + corresponding built JS modules being absent. That caused the CLI to + error when trying to perform TS->JS conversion. This changes + reintroduces the wiring to build the modules responsible for the TS->JS + conversion. + +- Resolve asset entry full path to support monorepo import of styles ([#4855](https://github.com/remix-run/remix/pull/4855)) +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.0` + - `@remix-run/serve@1.10.0-pre.0` + ## 1.9.0 ### Minor Changes diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index 85cdec11552..87804cbce32 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/dev", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Dev tools and CLI for Remix", "homepage": "https://remix.run", "bugs": { @@ -26,7 +26,7 @@ "@babel/types": "^7.20.2", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@npmcli/package-json": "^2.0.0", - "@remix-run/server-runtime": "1.9.0", + "@remix-run/server-runtime": "1.10.0-pre.0", "arg": "^5.0.1", "cacache": "^15.0.5", "chalk": "^4.1.2", @@ -63,7 +63,7 @@ "xdm": "^2.0.0" }, "devDependencies": { - "@remix-run/serve": "1.9.0", + "@remix-run/serve": "1.10.0-pre.0", "@types/cacache": "^15.0.0", "@types/gunzip-maybe": "^1.4.0", "@types/inquirer": "^8.2.0", @@ -82,7 +82,7 @@ "type-fest": "^2.16.0" }, "peerDependencies": { - "@remix-run/serve": "^1.9.0" + "@remix-run/serve": "^1.10.0-pre.0" }, "peerDependenciesMeta": { "@remix-run/serve": { diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md index ea5f93ddcc8..40166253695 100644 --- a/packages/remix-eslint-config/CHANGELOG.md +++ b/packages/remix-eslint-config/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/eslint-config` +## 1.10.0-pre.0 + ## 1.9.0 No significant changes to this package were made in this release. [See the releases page on GitHub](https://github.com/remix-run/remix/releases/tag/remix%401.9.0) for an overview of all changes in v1.9.0. diff --git a/packages/remix-eslint-config/package.json b/packages/remix-eslint-config/package.json index 2d0064f5442..e1d6c023eb7 100644 --- a/packages/remix-eslint-config/package.json +++ b/packages/remix-eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/eslint-config", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "ESLint configuration for Remix projects", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-express/CHANGELOG.md b/packages/remix-express/CHANGELOG.md index be431301383..4b62fa20566 100644 --- a/packages/remix-express/CHANGELOG.md +++ b/packages/remix-express/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/express` +## 1.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json index 6833e20c401..3e9db30860b 100644 --- a/packages/remix-express/package.json +++ b/packages/remix-express/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/express", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Express server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.9.0" + "@remix-run/node": "1.10.0-pre.0" }, "devDependencies": { "@types/express": "^4.17.9", diff --git a/packages/remix-netlify/CHANGELOG.md b/packages/remix-netlify/CHANGELOG.md index 133965c78fd..eff59986ca2 100644 --- a/packages/remix-netlify/CHANGELOG.md +++ b/packages/remix-netlify/CHANGELOG.md @@ -1,5 +1,16 @@ # `@remix-run/netlify` +## 1.10.0-pre.0 + +### Patch Changes + +- improve performance of `isBinaryType` in the netlify and architect adapters ([#4761](https://github.com/remix-run/remix/pull/4761)) + + previous implementation from arc itself has a complexity of O(N\*includesComplexity), where as now it is O(includesComplexity). + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-netlify/package.json b/packages/remix-netlify/package.json index 5cb813300a3..2573ba757e6 100644 --- a/packages/remix-netlify/package.json +++ b/packages/remix-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/netlify", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Netlify server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.9.0" + "@remix-run/node": "1.10.0-pre.0" }, "devDependencies": { "@netlify/functions": "^1.0.0" diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md index 48f7cc39d29..5a36f714adc 100644 --- a/packages/remix-node/CHANGELOG.md +++ b/packages/remix-node/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/node` +## 1.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index 6a621e8341e..dc3a76f494a 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/node", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Node.js platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.9.0", + "@remix-run/server-runtime": "1.10.0-pre.0", "@remix-run/web-fetch": "^4.3.2", "@remix-run/web-file": "^3.0.2", "@remix-run/web-stream": "^1.0.3", diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md index 52f328b0b7e..af0f4f25735 100644 --- a/packages/remix-react/CHANGELOG.md +++ b/packages/remix-react/CHANGELOG.md @@ -1,5 +1,11 @@ # `@remix-run/react` +## 1.10.0-pre.0 + +### Minor Changes + +- Update Remix to use React Router 6.4+ data APIs ([#4900](https://github.com/remix-run/remix/pull/4900)) + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index 9f7cb62aeff..e5a059123f5 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/react", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "React DOM bindings for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -20,7 +20,7 @@ "react-router-dom": "6.6.0-pre.0" }, "devDependencies": { - "@remix-run/server-runtime": "1.9.0", + "@remix-run/server-runtime": "1.10.0-pre.0", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^13.3.0", "abort-controller": "^3.0.0", diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md index 0704790764a..7f1ddc1cbeb 100644 --- a/packages/remix-serve/CHANGELOG.md +++ b/packages/remix-serve/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/serve` +## 1.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/express@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index 29547742f0f..e3f82439074 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/serve", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Production application server for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -17,7 +17,7 @@ "remix-serve": "dist/cli.js" }, "dependencies": { - "@remix-run/express": "1.9.0", + "@remix-run/express": "1.10.0-pre.0", "compression": "^1.7.4", "express": "^4.17.1", "morgan": "^1.10.0" diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md index b1343cc1e9c..2e3627e6927 100644 --- a/packages/remix-server-runtime/CHANGELOG.md +++ b/packages/remix-server-runtime/CHANGELOG.md @@ -1,5 +1,11 @@ # `@remix-run/server-runtime` +## 1.10.0-pre.0 + +### Minor Changes + +- Update Remix to use React Router 6.4+ data APIs ([#4900](https://github.com/remix-run/remix/pull/4900)) + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index f9695110d0e..c998304126d 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/server-runtime", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Server runtime for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index 4c7dfb2df66..408115a6a2b 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -1,5 +1,15 @@ # @remix-run/testing +## 1.10.0-pre.0 + +### Patch Changes + +- remove internal `installGlobals` function now that `@remix-run/web-form-data` includes support for passing a `HTMLFormElement` ([#4755](https://github.com/remix-run/remix/pull/4755)) +- Updated dependencies: + - `@remix-run/react@1.10.0-pre.0` + - `@remix-run/server-runtime@1.10.0-pre.0` + - `@remix-run/node@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index e0ccc5972c4..ba349b59a00 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/testing", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Testing utilities for Remix apps", "homepage": "https://remix.run", "bugs": { @@ -16,10 +16,10 @@ "typings": "./dist/index.d.ts", "module": "./dist/esm/index.js", "dependencies": { - "@remix-run/node": "1.9.0", - "@remix-run/react": "1.9.0", + "@remix-run/node": "1.10.0-pre.0", + "@remix-run/react": "1.10.0-pre.0", "@remix-run/router": "1.1.0", - "@remix-run/server-runtime": "1.9.0", + "@remix-run/server-runtime": "1.10.0-pre.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/packages/remix-vercel/CHANGELOG.md b/packages/remix-vercel/CHANGELOG.md index 51d39c0bc5b..36e799b783c 100644 --- a/packages/remix-vercel/CHANGELOG.md +++ b/packages/remix-vercel/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/vercel` +## 1.10.0-pre.0 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.0` + ## 1.9.0 ### Patch Changes diff --git a/packages/remix-vercel/package.json b/packages/remix-vercel/package.json index 49addd697a6..6abf1ea432e 100644 --- a/packages/remix-vercel/package.json +++ b/packages/remix-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/vercel", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "Vercel server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.9.0" + "@remix-run/node": "1.10.0-pre.0" }, "devDependencies": { "@types/supertest": "^2.0.10", diff --git a/packages/remix/package.json b/packages/remix/package.json index ff46428dd1c..1c4c7a9789c 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "remix", - "version": "1.9.0", + "version": "1.10.0-pre.0", "description": "A framework for building better websites", "homepage": "https://remix.run", "bugs": { From da9ca8a1eaaa3d0dac380e6cd45327645d441260 Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Wed, 21 Dec 2022 12:51:38 -0500 Subject: [PATCH 03/41] Add a few missed re-exports and back-compat (#4933) --- integration/fetcher-state-test.ts | 28 ++++++++++++++++++++++++++++ packages/remix-react/components.tsx | 19 +++++++++++++++++-- packages/remix-react/index.tsx | 2 ++ packages/remix-react/transition.ts | 16 ++++++++++++++++ 4 files changed, 63 insertions(+), 2 deletions(-) diff --git a/integration/fetcher-state-test.ts b/integration/fetcher-state-test.ts index b74147389ca..1f136006385 100644 --- a/integration/fetcher-state-test.ts +++ b/integration/fetcher-state-test.ts @@ -35,6 +35,10 @@ test.describe("fetcher states", () => { savedStates.push({ state: fetcher.state, type: fetcher.type, + formMethod: fetcher.formMethod, + formAction: fetcher.formAction, + formData:fetcher.formData ? Object.fromEntries(fetcher.formData.entries()) : undefined, + formEncType: fetcher.formEncType, submission: fetcher.submission ? { ...fetcher.submission, formData: Object.fromEntries(fetcher.submission.formData.entries()), @@ -87,6 +91,10 @@ test.describe("fetcher states", () => { JSON.stringify({ state: fetcher.state, type: fetcher.type, + formMethod: fetcher.formMethod, + formAction: fetcher.formAction, + formData: fetcher.formData, + formEncType: fetcher.formEncType, submission: fetcher.submission, data: fetcher.data, }) @@ -157,6 +165,10 @@ test.describe("fetcher states", () => { { state: "submitting", type: "actionSubmission", + formData: { key: "value" }, + formAction: "/page", + formMethod: "POST", + formEncType: "application/x-www-form-urlencoded", submission: { formData: { key: "value" }, action: "/page", @@ -167,6 +179,10 @@ test.describe("fetcher states", () => { { state: "loading", type: "actionReload", + formData: { key: "value" }, + formAction: "/page", + formMethod: "POST", + formEncType: "application/x-www-form-urlencoded", submission: { formData: { key: "value" }, action: "/page", @@ -197,6 +213,10 @@ test.describe("fetcher states", () => { { state: "submitting", type: "loaderSubmission", + formData: { key: "value" }, + formAction: "/page", + formMethod: "GET", + formEncType: "application/x-www-form-urlencoded", submission: { formData: { key: "value" }, // Note: This is a bug in Remix but we're going to keep it that way @@ -227,6 +247,10 @@ test.describe("fetcher states", () => { { state: "submitting", type: "actionSubmission", + formData: { redirect: "yes" }, + formAction: "/page", + formMethod: "POST", + formEncType: "application/x-www-form-urlencoded", submission: { formData: { redirect: "yes" }, action: "/page", @@ -237,6 +261,10 @@ test.describe("fetcher states", () => { { state: "loading", type: "actionRedirect", + formData: { redirect: "yes" }, + formAction: "/page", + formMethod: "POST", + formEncType: "application/x-www-form-urlencoded", submission: { formData: { redirect: "yes" }, action: "/page", diff --git a/packages/remix-react/components.tsx b/packages/remix-react/components.tsx index 13815fd3efc..39670915caf 100644 --- a/packages/remix-react/components.tsx +++ b/packages/remix-react/components.tsx @@ -1191,6 +1191,10 @@ function convertRouterFetcherToRemixFetcher( let fetcher: FetcherStates["SubmittingAction"] = { state, type: "actionSubmission", + formMethod: formMethod.toUpperCase() as ActionSubmission["method"], + formAction: formAction, + formEncType: formEncType, + formData: formData, submission: { method: formMethod.toUpperCase() as ActionSubmission["method"], action: formAction, @@ -1218,6 +1222,10 @@ function convertRouterFetcherToRemixFetcher( let fetcher: FetcherStates["ReloadingAction"] = { state, type: "actionReload", + formMethod: formMethod.toUpperCase() as ActionSubmission["method"], + formAction: formAction, + formEncType: formEncType, + formData: formData, submission: { method: formMethod.toUpperCase() as ActionSubmission["method"], action: formAction, @@ -1232,13 +1240,16 @@ function convertRouterFetcherToRemixFetcher( let fetcher: FetcherStates["LoadingActionRedirect"] = { state, type: "actionRedirect", + formMethod: formMethod.toUpperCase() as ActionSubmission["method"], + formAction: formAction, + formEncType: formEncType, + formData: formData, submission: { method: formMethod.toUpperCase() as ActionSubmission["method"], action: formAction, encType: formEncType, formData: formData, - // TODO??? - key: "todo-what-is-this?", + key: "", }, data: undefined, }; @@ -1263,6 +1274,10 @@ function convertRouterFetcherToRemixFetcher( let fetcher: FetcherStates["SubmittingLoader"] = { state: "submitting", type: "loaderSubmission", + formMethod: formMethod.toUpperCase() as LoaderSubmission["method"], + formAction: formAction, + formEncType: formEncType, + formData: formData, submission: { method: formMethod.toUpperCase() as LoaderSubmission["method"], action: url.pathname + url.search, diff --git a/packages/remix-react/index.tsx b/packages/remix-react/index.tsx index a571864c16f..ac7a7d0fce9 100644 --- a/packages/remix-react/index.tsx +++ b/packages/remix-react/index.tsx @@ -6,6 +6,7 @@ export type { NavigateFunction, Params, Path, + ShouldRevalidateFunction, SubmitFunction, SubmitOptions, } from "react-router-dom"; @@ -24,6 +25,7 @@ export { useParams, useResolvedPath, useRevalidator, + useRouteLoaderData, useSearchParams, useSubmit, } from "react-router-dom"; diff --git a/packages/remix-react/transition.ts b/packages/remix-react/transition.ts index 5355d45d342..fb052fc8523 100644 --- a/packages/remix-react/transition.ts +++ b/packages/remix-react/transition.ts @@ -115,24 +115,40 @@ export type FetcherStates<TData = any> = { SubmittingAction: { state: "submitting"; type: "actionSubmission"; + formMethod: ActionSubmission["method"]; + formAction: string; + formData: FormData; + formEncType: string; submission: ActionSubmission; data: undefined; }; SubmittingLoader: { state: "submitting"; type: "loaderSubmission"; + formMethod: LoaderSubmission["method"]; + formAction: string; + formData: FormData; + formEncType: string; submission: LoaderSubmission; data: TData | undefined; }; ReloadingAction: { state: "loading"; type: "actionReload"; + formMethod: ActionSubmission["method"]; + formAction: string; + formData: FormData; + formEncType: string; submission: ActionSubmission; data: TData; }; LoadingActionRedirect: { state: "loading"; type: "actionRedirect"; + formMethod: ActionSubmission["method"]; + formAction: string; + formData: FormData; + formEncType: string; submission: ActionSubmission; data: undefined; }; From dc079d29b373d3ebe3781facc7da637c64ce81c3 Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Wed, 21 Dec 2022 12:55:04 -0500 Subject: [PATCH 04/41] Add changeset --- .changeset/honest-phones-visit.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/honest-phones-visit.md diff --git a/.changeset/honest-phones-visit.md b/.changeset/honest-phones-visit.md new file mode 100644 index 00000000000..0dea055942c --- /dev/null +++ b/.changeset/honest-phones-visit.md @@ -0,0 +1,5 @@ +--- +"@remix-run/react": patch +--- + +Add a few missed re-exports and back-compat From 5da4e2ad1612a38bf80051c70377541271025552 Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Wed, 21 Dec 2022 14:41:36 -0500 Subject: [PATCH 05/41] Update to Rr 6.6.0 deps (#4935) --- .changeset/shaggy-garlics-confess.md | 6 +++++ packages/remix-react/package.json | 4 +-- packages/remix-server-runtime/package.json | 2 +- yarn.lock | 30 +++++++++++----------- 4 files changed, 24 insertions(+), 18 deletions(-) create mode 100644 .changeset/shaggy-garlics-confess.md diff --git a/.changeset/shaggy-garlics-confess.md b/.changeset/shaggy-garlics-confess.md new file mode 100644 index 00000000000..4d458bbea19 --- /dev/null +++ b/.changeset/shaggy-garlics-confess.md @@ -0,0 +1,6 @@ +--- +"@remix-run/react": patch +"@remix-run/server-runtime": patch +--- + +Lock into RR 6.6.0 diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index e5a059123f5..6399cd171a2 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -16,8 +16,8 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/router": "1.2.0-pre.0", - "react-router-dom": "6.6.0-pre.0" + "@remix-run/router": "1.2.0", + "react-router-dom": "6.6.0" }, "devDependencies": { "@remix-run/server-runtime": "1.10.0-pre.0", diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index c998304126d..68458daf1f0 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -16,7 +16,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/router": "1.2.0-pre.0", + "@remix-run/router": "1.2.0", "@types/cookie": "^0.4.0", "@web3-storage/multipart-parser": "^1.0.0", "cookie": "^0.4.1", diff --git a/yarn.lock b/yarn.lock index d8b2b1eb8a1..840a5130e13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2179,10 +2179,10 @@ resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.1.0.tgz#b48db8148c8a888e50580a8152b6f68161c49406" integrity sha512-rGl+jH/7x1KBCQScz9p54p0dtPLNeKGb3e0wD2H5/oZj41bwQUnXdzbj2TbUAFhvD7cp9EyEQA4dEgpUFa1O7Q== -"@remix-run/router@1.2.0-pre.0": - version "1.2.0-pre.0" - resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.2.0-pre.0.tgz#bfe7372f391b7584311482b310cae5687dccf0ff" - integrity sha512-MMwAKk7CmPInZs1OzIlv+BOx+lNxsse3pD2RdJYpN63zb8S5jaDDKk5FGWp5D1twlgPYW6cs1zPjMwq0n5ktOA== +"@remix-run/router@1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.2.0.tgz#54eff8306938b64c521f4a9ed313d33a91ef019a" + integrity sha512-GO82KYYTWPRCgdNtnheaZG3LcViUlxRFlHM7ykh7N+ufoXi6PVIHoP+9RUG/vuzl2hr9i/h6EA1Eq+2HpqJ0gQ== "@remix-run/web-blob@^3.0.3", "@remix-run/web-blob@^3.0.4": version "3.0.4" @@ -10535,20 +10535,20 @@ react-is@^17.0.1: resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-router-dom@6.6.0-pre.0: - version "6.6.0-pre.0" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.0-pre.0.tgz#771be887d4ac1813df4b3b57db754c532d37ee75" - integrity sha512-xYyyVGC7BxD3PW5QglIaDBqWeFE7ABPMJCLFvabrZYE4ZDXxhQje7FgcxPpaEAROgwlhQV0v1E6Yx3ZpPlul4w== +react-router-dom@6.6.0: + version "6.6.0" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.0.tgz#ad20b37b69e9fe7c6389663a0767ba40a19f71fe" + integrity sha512-qC4jnvpfCPKVle1mKLD75IvZLcbVJyFMlSn16WY9ZiOed3dgSmqhslCf/u3tmSccWOujkdsT/OwGq12bELmvjg== dependencies: - "@remix-run/router" "1.2.0-pre.0" - react-router "6.6.0-pre.0" + "@remix-run/router" "1.2.0" + react-router "6.6.0" -react-router@6.6.0-pre.0: - version "6.6.0-pre.0" - resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.0-pre.0.tgz#bcbef11c4b9391bf2c18dd8b9a4c912b9190711f" - integrity sha512-BHVRImhzJ5Cu/qjmGvmeYH8m9ep4LOScFDGbF1CLzJHOnTiZDsEejitb9lGFV683aUlj52y5p+V3kf+lH+1Tng== +react-router@6.6.0: + version "6.6.0" + resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.0.tgz#9ae27cfc6bf7f2b28e1f028fe01fdbec96a3a41d" + integrity sha512-+VPfCIaFbkW7BAiB/2oeprxKAt1KLbl+zXZ10CXOYezKWgBmTKyh8XjI53eLqY5kd7uY+V4rh3UW44FclwUU+Q== dependencies: - "@remix-run/router" "1.2.0-pre.0" + "@remix-run/router" "1.2.0" react@^18.2.0: version "18.2.0" From 23c85e17737c5dfdfd42712fbd294bed0c34672c Mon Sep 17 00:00:00 2001 From: Remix Run Bot <72662859+remix-run-bot@users.noreply.github.com> Date: Wed, 21 Dec 2022 13:01:45 -0700 Subject: [PATCH 06/41] chore: Update version for release (pre) (#4938) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> --- .changeset/pre.json | 2 ++ packages/create-remix/CHANGELOG.md | 7 +++++++ packages/create-remix/package.json | 4 ++-- packages/remix-architect/CHANGELOG.md | 7 +++++++ packages/remix-architect/package.json | 4 ++-- packages/remix-cloudflare-pages/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-pages/package.json | 4 ++-- packages/remix-cloudflare-workers/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-workers/package.json | 4 ++-- packages/remix-cloudflare/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare/package.json | 4 ++-- packages/remix-deno/CHANGELOG.md | 7 +++++++ packages/remix-deno/package.json | 4 ++-- packages/remix-dev/CHANGELOG.md | 7 +++++++ packages/remix-dev/package.json | 6 +++--- packages/remix-eslint-config/CHANGELOG.md | 2 ++ packages/remix-eslint-config/package.json | 2 +- packages/remix-express/CHANGELOG.md | 7 +++++++ packages/remix-express/package.json | 4 ++-- packages/remix-netlify/CHANGELOG.md | 7 +++++++ packages/remix-netlify/package.json | 4 ++-- packages/remix-node/CHANGELOG.md | 7 +++++++ packages/remix-node/package.json | 4 ++-- packages/remix-react/CHANGELOG.md | 7 +++++++ packages/remix-react/package.json | 4 ++-- packages/remix-serve/CHANGELOG.md | 7 +++++++ packages/remix-serve/package.json | 4 ++-- packages/remix-server-runtime/CHANGELOG.md | 6 ++++++ packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/CHANGELOG.md | 9 +++++++++ packages/remix-testing/package.json | 8 ++++---- packages/remix-vercel/CHANGELOG.md | 7 +++++++ packages/remix-vercel/package.json | 4 ++-- packages/remix/package.json | 2 +- 34 files changed, 144 insertions(+), 34 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 22a9d9f916f..a0fe59b14fd 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -21,10 +21,12 @@ "@remix-run/vercel": "1.9.0" }, "changesets": [ + "honest-phones-visit", "late-bottles-shop", "many-zebras-arrive", "mighty-rules-drum", "quick-cats-fix", + "shaggy-garlics-confess", "thirty-eels-taste" ] } diff --git a/packages/create-remix/CHANGELOG.md b/packages/create-remix/CHANGELOG.md index 9634c6cd97a..450fa11aade 100644 --- a/packages/create-remix/CHANGELOG.md +++ b/packages/create-remix/CHANGELOG.md @@ -1,5 +1,12 @@ # `create-remix` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/dev@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/create-remix/package.json b/packages/create-remix/package.json index a0807222124..e67cc02063b 100644 --- a/packages/create-remix/package.json +++ b/packages/create-remix/package.json @@ -1,6 +1,6 @@ { "name": "create-remix", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Create a new Remix app", "homepage": "https://remix.run", "bugs": { @@ -17,7 +17,7 @@ "create-remix": "dist/cli.js" }, "dependencies": { - "@remix-run/dev": "1.10.0-pre.0" + "@remix-run/dev": "1.10.0-pre.1" }, "engines": { "node": ">=14" diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md index fd0b66ea190..ed4b8326eec 100644 --- a/packages/remix-architect/CHANGELOG.md +++ b/packages/remix-architect/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/architect` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json index ae64ccf2e42..d879d78bd85 100644 --- a/packages/remix-architect/package.json +++ b/packages/remix-architect/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/architect", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Architect server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@architect/functions": "^5.0.2", - "@remix-run/node": "1.10.0-pre.0", + "@remix-run/node": "1.10.0-pre.1", "@types/aws-lambda": "^8.10.82" }, "devDependencies": { diff --git a/packages/remix-cloudflare-pages/CHANGELOG.md b/packages/remix-cloudflare-pages/CHANGELOG.md index 2402c4a6c59..42506760e1e 100644 --- a/packages/remix-cloudflare-pages/CHANGELOG.md +++ b/packages/remix-cloudflare-pages/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-pages` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-cloudflare-pages/package.json b/packages/remix-cloudflare-pages/package.json index e55c3edccd3..c6df5e1f010 100644 --- a/packages/remix-cloudflare-pages/package.json +++ b/packages/remix-cloudflare-pages/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-pages", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Cloudflare Pages request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/cloudflare": "1.10.0-pre.0" + "@remix-run/cloudflare": "1.10.0-pre.1" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0", diff --git a/packages/remix-cloudflare-workers/CHANGELOG.md b/packages/remix-cloudflare-workers/CHANGELOG.md index d99b86dcedd..7d75b3901ad 100644 --- a/packages/remix-cloudflare-workers/CHANGELOG.md +++ b/packages/remix-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-workers` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-cloudflare-workers/package.json b/packages/remix-cloudflare-workers/package.json index bdc31dc37cc..637f1009450 100644 --- a/packages/remix-cloudflare-workers/package.json +++ b/packages/remix-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-workers", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Cloudflare worker request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -16,7 +16,7 @@ "module": "dist/esm/index.js", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/cloudflare": "1.10.0-pre.0" + "@remix-run/cloudflare": "1.10.0-pre.1" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md index 47226c2b682..5c3aa0b2e71 100644 --- a/packages/remix-cloudflare/CHANGELOG.md +++ b/packages/remix-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-cloudflare/package.json b/packages/remix-cloudflare/package.json index 546483d004d..7b18eb172c7 100644 --- a/packages/remix-cloudflare/package.json +++ b/packages/remix-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Cloudflare platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/server-runtime": "1.10.0-pre.0" + "@remix-run/server-runtime": "1.10.0-pre.1" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index 9d8436c8f17..3e2bc3694da 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/deno` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-deno/package.json b/packages/remix-deno/package.json index 13fa5cc3d4e..3a4fde4e2c0 100644 --- a/packages/remix-deno/package.json +++ b/packages/remix-deno/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/deno", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Deno platform abstractions for Remix", "homepage": "https://remix.run", "main": "./index.ts", @@ -15,7 +15,7 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.0", + "@remix-run/server-runtime": "1.10.0-pre.1", "mime": "^3.0.0" }, "engines": { diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md index 8bc89313a25..24aaeebc088 100644 --- a/packages/remix-dev/CHANGELOG.md +++ b/packages/remix-dev/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/dev` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index 87804cbce32..c3c2c357eda 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/dev", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Dev tools and CLI for Remix", "homepage": "https://remix.run", "bugs": { @@ -26,7 +26,7 @@ "@babel/types": "^7.20.2", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@npmcli/package-json": "^2.0.0", - "@remix-run/server-runtime": "1.10.0-pre.0", + "@remix-run/server-runtime": "1.10.0-pre.1", "arg": "^5.0.1", "cacache": "^15.0.5", "chalk": "^4.1.2", @@ -63,7 +63,7 @@ "xdm": "^2.0.0" }, "devDependencies": { - "@remix-run/serve": "1.10.0-pre.0", + "@remix-run/serve": "1.10.0-pre.1", "@types/cacache": "^15.0.0", "@types/gunzip-maybe": "^1.4.0", "@types/inquirer": "^8.2.0", diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md index 40166253695..242fa0ec50f 100644 --- a/packages/remix-eslint-config/CHANGELOG.md +++ b/packages/remix-eslint-config/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/eslint-config` +## 1.10.0-pre.1 + ## 1.10.0-pre.0 ## 1.9.0 diff --git a/packages/remix-eslint-config/package.json b/packages/remix-eslint-config/package.json index e1d6c023eb7..8e46f7a7375 100644 --- a/packages/remix-eslint-config/package.json +++ b/packages/remix-eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/eslint-config", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "ESLint configuration for Remix projects", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-express/CHANGELOG.md b/packages/remix-express/CHANGELOG.md index 4b62fa20566..83dc0d2a7ca 100644 --- a/packages/remix-express/CHANGELOG.md +++ b/packages/remix-express/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/express` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json index 3e9db30860b..362978e1f4c 100644 --- a/packages/remix-express/package.json +++ b/packages/remix-express/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/express", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Express server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.0" + "@remix-run/node": "1.10.0-pre.1" }, "devDependencies": { "@types/express": "^4.17.9", diff --git a/packages/remix-netlify/CHANGELOG.md b/packages/remix-netlify/CHANGELOG.md index eff59986ca2..6fde8ff5df1 100644 --- a/packages/remix-netlify/CHANGELOG.md +++ b/packages/remix-netlify/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/netlify` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-netlify/package.json b/packages/remix-netlify/package.json index 2573ba757e6..755104285c8 100644 --- a/packages/remix-netlify/package.json +++ b/packages/remix-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/netlify", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Netlify server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.0" + "@remix-run/node": "1.10.0-pre.1" }, "devDependencies": { "@netlify/functions": "^1.0.0" diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md index 5a36f714adc..1bd03b9ea54 100644 --- a/packages/remix-node/CHANGELOG.md +++ b/packages/remix-node/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/node` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index dc3a76f494a..d16cd63469a 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/node", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Node.js platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.0", + "@remix-run/server-runtime": "1.10.0-pre.1", "@remix-run/web-fetch": "^4.3.2", "@remix-run/web-file": "^3.0.2", "@remix-run/web-stream": "^1.0.3", diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md index af0f4f25735..24d967b8863 100644 --- a/packages/remix-react/CHANGELOG.md +++ b/packages/remix-react/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/react` +## 1.10.0-pre.1 + +### Patch Changes + +- Add a few missed re-exports and back-compat ([`dc079d29b`](https://github.com/remix-run/remix/commit/dc079d29b373d3ebe3781facc7da637c64ce81c3)) +- Lock into RR 6.6.0 ([#4935](https://github.com/remix-run/remix/pull/4935)) + ## 1.10.0-pre.0 ### Minor Changes diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index 6399cd171a2..e70a7e65365 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/react", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "React DOM bindings for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -20,7 +20,7 @@ "react-router-dom": "6.6.0" }, "devDependencies": { - "@remix-run/server-runtime": "1.10.0-pre.0", + "@remix-run/server-runtime": "1.10.0-pre.1", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^13.3.0", "abort-controller": "^3.0.0", diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md index 7f1ddc1cbeb..bf5bf89577d 100644 --- a/packages/remix-serve/CHANGELOG.md +++ b/packages/remix-serve/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/serve` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/express@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index e3f82439074..f9f0c748fbe 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/serve", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Production application server for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -17,7 +17,7 @@ "remix-serve": "dist/cli.js" }, "dependencies": { - "@remix-run/express": "1.10.0-pre.0", + "@remix-run/express": "1.10.0-pre.1", "compression": "^1.7.4", "express": "^4.17.1", "morgan": "^1.10.0" diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md index 2e3627e6927..19a074db4d5 100644 --- a/packages/remix-server-runtime/CHANGELOG.md +++ b/packages/remix-server-runtime/CHANGELOG.md @@ -1,5 +1,11 @@ # `@remix-run/server-runtime` +## 1.10.0-pre.1 + +### Patch Changes + +- Lock into RR 6.6.0 ([#4935](https://github.com/remix-run/remix/pull/4935)) + ## 1.10.0-pre.0 ### Minor Changes diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index 68458daf1f0..7bc4a70c95b 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/server-runtime", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Server runtime for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index 408115a6a2b..b512b1ed37a 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -1,5 +1,14 @@ # @remix-run/testing +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/react@1.10.0-pre.1` + - `@remix-run/server-runtime@1.10.0-pre.1` + - `@remix-run/node@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index ba349b59a00..0199fa15df5 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/testing", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Testing utilities for Remix apps", "homepage": "https://remix.run", "bugs": { @@ -16,10 +16,10 @@ "typings": "./dist/index.d.ts", "module": "./dist/esm/index.js", "dependencies": { - "@remix-run/node": "1.10.0-pre.0", - "@remix-run/react": "1.10.0-pre.0", + "@remix-run/node": "1.10.0-pre.1", + "@remix-run/react": "1.10.0-pre.1", "@remix-run/router": "1.1.0", - "@remix-run/server-runtime": "1.10.0-pre.0", + "@remix-run/server-runtime": "1.10.0-pre.1", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/packages/remix-vercel/CHANGELOG.md b/packages/remix-vercel/CHANGELOG.md index 36e799b783c..7cb8dd957ba 100644 --- a/packages/remix-vercel/CHANGELOG.md +++ b/packages/remix-vercel/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/vercel` +## 1.10.0-pre.1 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.1` + ## 1.10.0-pre.0 ### Patch Changes diff --git a/packages/remix-vercel/package.json b/packages/remix-vercel/package.json index 6abf1ea432e..44abca81fb5 100644 --- a/packages/remix-vercel/package.json +++ b/packages/remix-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/vercel", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "Vercel server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.0" + "@remix-run/node": "1.10.0-pre.1" }, "devDependencies": { "@types/supertest": "^2.0.10", diff --git a/packages/remix/package.json b/packages/remix/package.json index 1c4c7a9789c..8d244c0ded9 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "remix", - "version": "1.10.0-pre.0", + "version": "1.10.0-pre.1", "description": "A framework for building better websites", "homepage": "https://remix.run", "bugs": { From 722de318d99bbe6adac7660cdb71b7d875575777 Mon Sep 17 00:00:00 2001 From: Logan McAnsh <logan@mcan.sh> Date: Thu, 22 Dec 2022 10:43:31 -0500 Subject: [PATCH 07/41] chore(remix-testing): utilize react-router 6.5+ (#4915) Signed-off-by: Logan McAnsh <logan@mcan.sh> --- .changeset/silver-ducks-protect.md | 6 + packages/remix-react/index.tsx | 18 +- packages/remix-testing/create-remix-stub.tsx | 250 ++++--------------- packages/remix-testing/package.json | 4 +- yarn.lock | 5 - 5 files changed, 64 insertions(+), 219 deletions(-) create mode 100644 .changeset/silver-ducks-protect.md diff --git a/.changeset/silver-ducks-protect.md b/.changeset/silver-ducks-protect.md new file mode 100644 index 00000000000..04f476e3d0d --- /dev/null +++ b/.changeset/silver-ducks-protect.md @@ -0,0 +1,6 @@ +--- +"remix": patch +"@remix-run/testing": patch +--- + +use react router apis directly diff --git a/packages/remix-react/index.tsx b/packages/remix-react/index.tsx index ac7a7d0fce9..58a13d7524e 100644 --- a/packages/remix-react/index.tsx +++ b/packages/remix-react/index.tsx @@ -42,7 +42,6 @@ export { Scripts, Link, NavLink, - RemixEntry, PrefetchPageLinks, LiveReload, useTransition, @@ -51,6 +50,7 @@ export { useLoaderData, useMatches, useActionData, + RemixContext as UNSAFE_RemixContext, } from "./components"; export type { FormMethod, FormEncType } from "./data"; @@ -61,8 +61,7 @@ export { useCatch } from "./errorBoundaries"; export type { HtmlLinkDescriptor } from "./links"; export type { HtmlMetaDescriptor, - CatchBoundaryComponent, - RouteModules, + RouteModules as UNSAFE_RouteModules, } from "./routeModules"; export { ScrollRestoration } from "./scroll-restoration"; @@ -72,6 +71,13 @@ export { RemixServer } from "./server"; export type { Fetcher } from "./transition"; -export type { AssetsManifest, EntryContext } from "./entry"; -export type { RouteData } from "./routeData"; -export type { EntryRoute, RouteManifest } from "./routes"; +export type { + FutureConfig as UNSAFE_FutureConfig, + AssetsManifest as UNSAFE_AssetsManifest, + RemixContextObject as UNSAFE_RemixContextObject, +} from "./entry"; + +export type { + EntryRoute as UNSAFE_EntryRoute, + RouteManifest as UNSAFE_RouteManifest, +} from "./routes"; diff --git a/packages/remix-testing/create-remix-stub.tsx b/packages/remix-testing/create-remix-stub.tsx index d2fb47495fc..b0a9861ab85 100644 --- a/packages/remix-testing/create-remix-stub.tsx +++ b/packages/remix-testing/create-remix-stub.tsx @@ -1,35 +1,16 @@ import * as React from "react"; +import type { HydrationState, InitialEntry, Router } from "@remix-run/router"; +import { UNSAFE_RemixContext as RemixContext } from "@remix-run/react"; import type { - AssetsManifest, - EntryContext, - EntryRoute, - RouteData, - RouteManifest, - RouteModules, + UNSAFE_FutureConfig as FutureConfig, + UNSAFE_AssetsManifest as AssetsManifest, + UNSAFE_EntryRoute as EntryRoute, + UNSAFE_RouteManifest as RouteManifest, + UNSAFE_RouteModules as RouteModules, + UNSAFE_RemixContextObject as RemixContextObject, } from "@remix-run/react"; -import { RemixEntry } from "@remix-run/react"; -import type { - Action, - AgnosticDataRouteObject, - AgnosticIndexRouteObject, - AgnosticNonIndexRouteObject, - AgnosticRouteMatch, - InitialEntry, - Location, - MemoryHistory, - StaticHandler, -} from "@remix-run/router"; -import { - createMemoryHistory, - matchRoutes, - unstable_createStaticHandler as createStaticHandler, -} from "@remix-run/router"; -import { json } from "@remix-run/server-runtime"; - -type Update = { - action: Action; - location: Location; -}; +import type { RouteObject } from "react-router-dom"; +import { createMemoryRouter, RouterProvider } from "react-router-dom"; type RemixStubOptions = { /** @@ -41,16 +22,13 @@ type RemixStubOptions = { initialEntries?: InitialEntry[]; /** - * Used to set the route's initial loader data. - * e.g. initialLoaderData={{ "/contact": { locale: "en-US" } }} - */ - initialLoaderData?: RouteData; - - /** - * Used to set the route's initial action data. - * e.g. initialActionData={{ "/login": { errors: { email: "invalid email" } }} + * Used to set the route's initial loader and action data. + * e.g. hydrationData={{ + * loaderData: { "/contact": { locale: "en-US" } }, + * actionData: { "/login": { errors: { email: "invalid email" } }} + * }} */ - initialActionData?: RouteData; + hydrationData?: HydrationState; /** * The initial index in the history stack to render. This allows you to start a test at a specific entry. @@ -60,113 +38,48 @@ type RemixStubOptions = { * initialIndex: 1 // start at "/events/123" */ initialIndex?: number; -}; - -type IndexStubRouteObject = AgnosticIndexRouteObject & { - element?: React.ReactNode; - children?: undefined; -}; -type NonIndexStubRouteObject = AgnosticNonIndexRouteObject & { - element?: React.ReactNode; - children?: StubRouteObject[]; + remixConfigFuture?: Partial<FutureConfig>; }; -// TODO: once Remix is on RR@6.4 we can just use the native type -type StubRouteObject = IndexStubRouteObject | NonIndexStubRouteObject; - -type RemixConfigFuture = Partial<EntryContext["future"]>; - -export function createRemixStub( - routes: StubRouteObject[], - remixConfigFuture?: RemixConfigFuture -) { - // Setup request handler to handle requests to the mock routes - let { dataRoutes, queryRoute } = createStaticHandler(routes); +export function createRemixStub(routes: RouteObject[]) { return function RemixStub({ initialEntries, - initialLoaderData = {}, - initialActionData, initialIndex, + hydrationData, + remixConfigFuture, }: RemixStubOptions) { - let historyRef = React.useRef<MemoryHistory>(); - if (historyRef.current == null) { - historyRef.current = createMemoryHistory({ + let routerRef = React.useRef<Router>(); + let remixContextRef = React.useRef<RemixContextObject>(); + + if (routerRef.current == null) { + routerRef.current = createMemoryRouter(routes, { initialEntries, initialIndex, - v5Compat: true, + hydrationData, }); } - let history = historyRef.current; - - let [state, dispatch] = React.useReducer( - (_: Update, update: Update) => update, - { action: history.action, location: history.location } - ); - - React.useLayoutEffect(() => history.listen(dispatch), [history]); - - // Convert path based ids in user supplied initial loader/action data to data route ids - let loaderData = convertRouteData(dataRoutes, initialLoaderData); - let actionData = convertRouteData(dataRoutes, initialActionData); - - // Create mock remix context - let remixContext = createRemixContext( - dataRoutes, - state.location, - loaderData, - actionData, - remixConfigFuture - ); - - // Patch fetch so that mock routes can handle action/loader requests - monkeyPatchFetch(queryRoute, dataRoutes); + if (remixContextRef.current == null) { + remixContextRef.current = { + future: { + v2_meta: false, + ...remixConfigFuture, + }, + manifest: createManifest(routes), + routeModules: createRouteModules(routes), + }; + } return ( - <RemixEntry - context={remixContext} - action={state.action} - location={state.location} - navigator={history} - /> + <RemixContext.Provider value={remixContextRef.current}> + <RouterProvider router={routerRef.current} /> + </RemixContext.Provider> ); }; } -function createRemixContext( - routes: AgnosticDataRouteObject[], - currentLocation: Location, - initialLoaderData?: RouteData, - initialActionData?: RouteData, - future?: RemixConfigFuture -): EntryContext { - let manifest = createManifest(routes); - let matches = matchRoutes(routes, currentLocation) || []; - - return { - // TODO: Check with Logan on how to handle the update heree - // @ts-expect-error - actionData: initialActionData, - appState: { - trackBoundaries: true, - trackCatchBoundaries: true, - catchBoundaryRouteId: null, - renderBoundaryRouteId: null, - loaderBoundaryRouteId: null, - }, - future: { - v2_meta: false, - ...future, - }, - matches: convertToEntryRouteMatch(matches), - routeData: initialLoaderData || {}, - manifest, - routeModules: createRouteModules(routes), - }; -} - -function createManifest(routes: AgnosticDataRouteObject[]): AssetsManifest { +function createManifest(routes: RouteObject[]): AssetsManifest { return { routes: createRouteManifest(routes), entry: { imports: [], module: "" }, @@ -176,7 +89,7 @@ function createManifest(routes: AgnosticDataRouteObject[]): AssetsManifest { } function createRouteManifest( - routes: AgnosticDataRouteObject[], + routes: RouteObject[], manifest?: RouteManifest<EntryRoute>, parentId?: string ): RouteManifest<EntryRoute> { @@ -190,7 +103,7 @@ function createRouteManifest( } function createRouteModules( - routes: AgnosticDataRouteObject[], + routes: RouteObject[], routeModules?: RouteModules ): RouteModules { return routes.reduce((modules, route) => { @@ -206,50 +119,14 @@ function createRouteModules( handle: route.handle, links: undefined, meta: undefined, - // TODO: Check with Logan on how to handle the update here - // @ts-expect-error - unstable_shouldReload: undefined, + shouldRevalidate: undefined, }; return modules; }, routeModules || {}); } -const originalFetch = - typeof global !== "undefined" ? global.fetch : window.fetch; - -function monkeyPatchFetch( - queryRoute: StaticHandler["queryRoute"], - dataRoutes: StaticHandler["dataRoutes"] -) { - let fetchPatch = async ( - input: RequestInfo | URL, - init: RequestInit = {} - ): Promise<Response> => { - let request = new Request(input, init); - let url = new URL(request.url); - - // if we have matches, send the request to mock routes via @remix-run/router rather than the normal - // @remix-run/server-runtime so that stubs can also be used in browser environments. - let matches = matchRoutes(dataRoutes, url); - if (matches && matches.length > 0) { - let response = await queryRoute(request); - - if (response instanceof Response) { - return response; - } - - return json(response); - } - - // if no matches, passthrough to the original fetch as mock routes couldn't handle the request. - return originalFetch(request, init); - }; - - globalThis.fetch = fetchPatch; -} - function convertToEntryRoute( - route: AgnosticDataRouteObject, + route: RouteObject, parentId?: string ): EntryRoute { return { @@ -265,42 +142,3 @@ function convertToEntryRoute( hasErrorBoundary: false, }; } - -function convertToEntryRouteMatch( - routes: AgnosticRouteMatch<string, AgnosticDataRouteObject>[] -) { - return routes.map((match) => { - return { - params: match.params, - pathname: match.pathname, - route: convertToEntryRoute(match.route), - }; - }); -} - -// Converts route data from a path based index to a route id index value. -// e.g. { "/post/:postId": post } to { "0": post } -// TODO: may not need -function convertRouteData( - routes: AgnosticDataRouteObject[], - initialRouteData?: RouteData, - routeData: RouteData = {} -): RouteData | undefined { - if (!initialRouteData) return undefined; - return routes.reduce<RouteData>((data, route) => { - if (route.children) { - convertRouteData(route.children, initialRouteData, data); - } - // Check if any of the initial route data entries match this route - Object.keys(initialRouteData).forEach((routePath) => { - if ( - routePath === route.path || - // Let '/' refer to the root routes data - (routePath === "/" && route.id === "0" && !route.path) - ) { - data[route.id!] = initialRouteData[routePath]; - } - }); - return data; - }, routeData); -} diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index 0199fa15df5..dbbcea0c745 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -18,8 +18,8 @@ "dependencies": { "@remix-run/node": "1.10.0-pre.1", "@remix-run/react": "1.10.0-pre.1", - "@remix-run/router": "1.1.0", - "@remix-run/server-runtime": "1.10.0-pre.1", + "@remix-run/router": "1.2.0", + "react-router-dom": "6.6.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/yarn.lock b/yarn.lock index 840a5130e13..9975a8b15f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2174,11 +2174,6 @@ "@changesets/types" "^5.0.0" dotenv "^8.1.0" -"@remix-run/router@1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.1.0.tgz#b48db8148c8a888e50580a8152b6f68161c49406" - integrity sha512-rGl+jH/7x1KBCQScz9p54p0dtPLNeKGb3e0wD2H5/oZj41bwQUnXdzbj2TbUAFhvD7cp9EyEQA4dEgpUFa1O7Q== - "@remix-run/router@1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.2.0.tgz#54eff8306938b64c521f4a9ed313d33a91ef019a" From f12bc09e45978af420f63fccda8e161f80afcbf5 Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Thu, 22 Dec 2022 14:24:37 -0500 Subject: [PATCH 08/41] Bump to react router 6.6.1 pre versions (#4944) * Bump to react router 6.6.1 pre versions * Bump to pre.1 --- .changeset/gentle-yaks-lick.md | 7 +++++ packages/remix-react/package.json | 4 +-- packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/package.json | 6 ++--- yarn.lock | 30 +++++++++++----------- 5 files changed, 28 insertions(+), 21 deletions(-) create mode 100644 .changeset/gentle-yaks-lick.md diff --git a/.changeset/gentle-yaks-lick.md b/.changeset/gentle-yaks-lick.md new file mode 100644 index 00000000000..fb05b008796 --- /dev/null +++ b/.changeset/gentle-yaks-lick.md @@ -0,0 +1,7 @@ +--- +"@remix-run/react": patch +"@remix-run/server-runtime": patch +"@remix-run/testing": patch +--- + +Bump to react-router 6.6.1 pre versions diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index e70a7e65365..6b3a85dbd72 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -16,8 +16,8 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/router": "1.2.0", - "react-router-dom": "6.6.0" + "@remix-run/router": "1.2.1-pre.1", + "react-router-dom": "6.6.1-pre.1" }, "devDependencies": { "@remix-run/server-runtime": "1.10.0-pre.1", diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index 7bc4a70c95b..7c480d0233a 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -16,7 +16,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/router": "1.2.0", + "@remix-run/router": "1.2.1-pre.1", "@types/cookie": "^0.4.0", "@web3-storage/multipart-parser": "^1.0.0", "cookie": "^0.4.1", diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index dbbcea0c745..d49327230d8 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -18,10 +18,10 @@ "dependencies": { "@remix-run/node": "1.10.0-pre.1", "@remix-run/react": "1.10.0-pre.1", - "@remix-run/router": "1.2.0", - "react-router-dom": "6.6.0", + "@remix-run/router": "1.2.1-pre.1", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "6.6.1-pre.1" }, "devDependencies": { "@types/node": "^18.11.9", diff --git a/yarn.lock b/yarn.lock index 9975a8b15f7..a4a7d6371e0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2174,10 +2174,10 @@ "@changesets/types" "^5.0.0" dotenv "^8.1.0" -"@remix-run/router@1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.2.0.tgz#54eff8306938b64c521f4a9ed313d33a91ef019a" - integrity sha512-GO82KYYTWPRCgdNtnheaZG3LcViUlxRFlHM7ykh7N+ufoXi6PVIHoP+9RUG/vuzl2hr9i/h6EA1Eq+2HpqJ0gQ== +"@remix-run/router@1.2.1-pre.1": + version "1.2.1-pre.1" + resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1-pre.1.tgz#a3e2ce6fd671c81d51d48441782d669fa808f755" + integrity sha512-6mohjuXG82dAmUAD3cCIVcE2I1zRGvmQoUbJvKPcWtsM6F6izwq8ajhi2WMaycUburB4QKXcBZUsn8XqrBeX6Q== "@remix-run/web-blob@^3.0.3", "@remix-run/web-blob@^3.0.4": version "3.0.4" @@ -10530,20 +10530,20 @@ react-is@^17.0.1: resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-router-dom@6.6.0: - version "6.6.0" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.0.tgz#ad20b37b69e9fe7c6389663a0767ba40a19f71fe" - integrity sha512-qC4jnvpfCPKVle1mKLD75IvZLcbVJyFMlSn16WY9ZiOed3dgSmqhslCf/u3tmSccWOujkdsT/OwGq12bELmvjg== +react-router-dom@6.6.1-pre.1: + version "6.6.1-pre.1" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.1-pre.1.tgz#c12aa081535ccd94585932412b2db69a59b1e397" + integrity sha512-WHJqy+buZ73u8BykryQDTElcj+iyycixebDwyII9Is2bHQh6LjVgiXa3GyrxWTkFx/sid4+ira3t1TLaZdJSbg== dependencies: - "@remix-run/router" "1.2.0" - react-router "6.6.0" + "@remix-run/router" "1.2.1-pre.1" + react-router "6.6.1-pre.1" -react-router@6.6.0: - version "6.6.0" - resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.0.tgz#9ae27cfc6bf7f2b28e1f028fe01fdbec96a3a41d" - integrity sha512-+VPfCIaFbkW7BAiB/2oeprxKAt1KLbl+zXZ10CXOYezKWgBmTKyh8XjI53eLqY5kd7uY+V4rh3UW44FclwUU+Q== +react-router@6.6.1-pre.1: + version "6.6.1-pre.1" + resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.1-pre.1.tgz#53927bdc03818575743e781f489d9f4107ff1dbe" + integrity sha512-iQZ+45GR/l3//NIwYGQbbwy/NeAdk6QsHJKBUPd8PNS1SJFeiXpCbeli9WkY5/WKh/cN9Ezqld69iT/Z26oc+Q== dependencies: - "@remix-run/router" "1.2.0" + "@remix-run/router" "1.2.1-pre.1" react@^18.2.0: version "18.2.0" From 6371018bb2fd70ecca6c0b0b922887df4a747a1e Mon Sep 17 00:00:00 2001 From: Logan McAnsh <logan@mcan.sh> Date: Thu, 22 Dec 2022 16:23:28 -0500 Subject: [PATCH 09/41] fix: re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages (#4943) * fix: re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages Signed-off-by: Logan McAnsh <logan@mcan.sh> * Create lucky-chairs-remember.md Signed-off-by: Logan McAnsh <logan@mcan.sh> --- .changeset/lucky-chairs-remember.md | 10 ++++++++++ packages/remix-cloudflare/index.ts | 4 +++- packages/remix-deno/index.ts | 2 ++ packages/remix-node/index.ts | 4 +++- packages/remix-server-runtime/index.ts | 2 ++ packages/remix-server-runtime/reexport.ts | 2 ++ 6 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 .changeset/lucky-chairs-remember.md diff --git a/.changeset/lucky-chairs-remember.md b/.changeset/lucky-chairs-remember.md new file mode 100644 index 00000000000..b64a97f4dce --- /dev/null +++ b/.changeset/lucky-chairs-remember.md @@ -0,0 +1,10 @@ +--- +"remix": patch +"@remix-run/cloudflare": patch +"@remix-run/deno": patch +"@remix-run/node": patch +"@remix-run/serve": patch +"@remix-run/server-runtime": patch +--- + +re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages diff --git a/packages/remix-cloudflare/index.ts b/packages/remix-cloudflare/index.ts index e695c246ffe..0daeb97dbcf 100644 --- a/packages/remix-cloudflare/index.ts +++ b/packages/remix-cloudflare/index.ts @@ -40,6 +40,7 @@ export type { HeadersFunction, HtmlLinkDescriptor, HtmlMetaDescriptor, + V2_HtmlMetaDescriptor, LinkDescriptor, LinksFunction, LoaderArgs, @@ -48,6 +49,7 @@ export type { MemoryUploadHandlerOptions, MetaDescriptor, MetaFunction, + V2_MetaFunction, PageLinkDescriptor, RequestHandler, RouteComponent, @@ -62,6 +64,6 @@ export type { SignFunction, TypedResponse, UnsignFunction, - UploadHandlerPart, UploadHandler, + UploadHandlerPart, } from "@remix-run/server-runtime"; diff --git a/packages/remix-deno/index.ts b/packages/remix-deno/index.ts index 492c93ecdda..27e4fee709d 100644 --- a/packages/remix-deno/index.ts +++ b/packages/remix-deno/index.ts @@ -43,6 +43,7 @@ export type { HeadersFunction, HtmlLinkDescriptor, HtmlMetaDescriptor, + V2_HtmlMetaDescriptor, LinkDescriptor, LinksFunction, LoaderArgs, @@ -51,6 +52,7 @@ export type { MemoryUploadHandlerOptions, MetaDescriptor, MetaFunction, + V2_MetaFunction, PageLinkDescriptor, RequestHandler, RouteComponent, diff --git a/packages/remix-node/index.ts b/packages/remix-node/index.ts index 01098e494cb..7454b9995c2 100644 --- a/packages/remix-node/index.ts +++ b/packages/remix-node/index.ts @@ -67,6 +67,7 @@ export type { HeadersFunction, HtmlLinkDescriptor, HtmlMetaDescriptor, + V2_HtmlMetaDescriptor, LinkDescriptor, LinksFunction, LoaderArgs, @@ -75,6 +76,7 @@ export type { MemoryUploadHandlerOptions, MetaDescriptor, MetaFunction, + V2_MetaFunction, PageLinkDescriptor, RequestHandler, RouteComponent, @@ -89,6 +91,6 @@ export type { SignFunction, TypedResponse, UnsignFunction, - UploadHandlerPart, UploadHandler, + UploadHandlerPart, } from "@remix-run/server-runtime"; diff --git a/packages/remix-server-runtime/index.ts b/packages/remix-server-runtime/index.ts index ab11dc4f6f8..dc3d491bab9 100644 --- a/packages/remix-server-runtime/index.ts +++ b/packages/remix-server-runtime/index.ts @@ -49,6 +49,7 @@ export type { HeadersFunction, HtmlLinkDescriptor, HtmlMetaDescriptor, + V2_HtmlMetaDescriptor, LinkDescriptor, LinksFunction, LoaderArgs, @@ -57,6 +58,7 @@ export type { MemoryUploadHandlerOptions, MetaDescriptor, MetaFunction, + V2_MetaFunction, PageLinkDescriptor, RequestHandler, RouteComponent, diff --git a/packages/remix-server-runtime/reexport.ts b/packages/remix-server-runtime/reexport.ts index ccd50d894cd..de82631534c 100644 --- a/packages/remix-server-runtime/reexport.ts +++ b/packages/remix-server-runtime/reexport.ts @@ -40,11 +40,13 @@ export type { ErrorBoundaryComponent, HeadersFunction, HtmlMetaDescriptor, + V2_HtmlMetaDescriptor, LinksFunction, LoaderArgs, LoaderFunction, MetaDescriptor, MetaFunction, + V2_MetaFunction, RouteComponent, RouteHandle, } from "./routeModules"; From 5cef5f1439b6ac06ac0b59031b3199aabc712604 Mon Sep 17 00:00:00 2001 From: Remix Run Bot <72662859+remix-run-bot@users.noreply.github.com> Date: Thu, 22 Dec 2022 14:53:18 -0700 Subject: [PATCH 10/41] chore: Update version for release (pre) (#4946) --- .changeset/pre.json | 3 +++ packages/create-remix/CHANGELOG.md | 7 +++++++ packages/create-remix/package.json | 4 ++-- packages/remix-architect/CHANGELOG.md | 7 +++++++ packages/remix-architect/package.json | 4 ++-- packages/remix-cloudflare-pages/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-pages/package.json | 4 ++-- packages/remix-cloudflare-workers/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-workers/package.json | 4 ++-- packages/remix-cloudflare/CHANGELOG.md | 8 ++++++++ packages/remix-cloudflare/package.json | 4 ++-- packages/remix-deno/CHANGELOG.md | 8 ++++++++ packages/remix-deno/package.json | 4 ++-- packages/remix-dev/CHANGELOG.md | 7 +++++++ packages/remix-dev/package.json | 6 +++--- packages/remix-eslint-config/CHANGELOG.md | 2 ++ packages/remix-eslint-config/package.json | 2 +- packages/remix-express/CHANGELOG.md | 7 +++++++ packages/remix-express/package.json | 4 ++-- packages/remix-netlify/CHANGELOG.md | 7 +++++++ packages/remix-netlify/package.json | 4 ++-- packages/remix-node/CHANGELOG.md | 8 ++++++++ packages/remix-node/package.json | 4 ++-- packages/remix-react/CHANGELOG.md | 6 ++++++ packages/remix-react/package.json | 4 ++-- packages/remix-serve/CHANGELOG.md | 8 ++++++++ packages/remix-serve/package.json | 4 ++-- packages/remix-server-runtime/CHANGELOG.md | 7 +++++++ packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/CHANGELOG.md | 10 ++++++++++ packages/remix-testing/package.json | 6 +++--- packages/remix-vercel/CHANGELOG.md | 7 +++++++ packages/remix-vercel/package.json | 4 ++-- packages/remix/package.json | 2 +- 34 files changed, 149 insertions(+), 33 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index a0fe59b14fd..70497be6453 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -21,12 +21,15 @@ "@remix-run/vercel": "1.9.0" }, "changesets": [ + "gentle-yaks-lick", "honest-phones-visit", "late-bottles-shop", + "lucky-chairs-remember", "many-zebras-arrive", "mighty-rules-drum", "quick-cats-fix", "shaggy-garlics-confess", + "silver-ducks-protect", "thirty-eels-taste" ] } diff --git a/packages/create-remix/CHANGELOG.md b/packages/create-remix/CHANGELOG.md index 450fa11aade..e3fae71d3eb 100644 --- a/packages/create-remix/CHANGELOG.md +++ b/packages/create-remix/CHANGELOG.md @@ -1,5 +1,12 @@ # `create-remix` +## 1.10.0-pre.2 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/dev@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/create-remix/package.json b/packages/create-remix/package.json index e67cc02063b..2fcee30d2b5 100644 --- a/packages/create-remix/package.json +++ b/packages/create-remix/package.json @@ -1,6 +1,6 @@ { "name": "create-remix", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Create a new Remix app", "homepage": "https://remix.run", "bugs": { @@ -17,7 +17,7 @@ "create-remix": "dist/cli.js" }, "dependencies": { - "@remix-run/dev": "1.10.0-pre.1" + "@remix-run/dev": "1.10.0-pre.2" }, "engines": { "node": ">=14" diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md index ed4b8326eec..8444ab658a0 100644 --- a/packages/remix-architect/CHANGELOG.md +++ b/packages/remix-architect/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/architect` +## 1.10.0-pre.2 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json index d879d78bd85..04109c5069d 100644 --- a/packages/remix-architect/package.json +++ b/packages/remix-architect/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/architect", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Architect server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@architect/functions": "^5.0.2", - "@remix-run/node": "1.10.0-pre.1", + "@remix-run/node": "1.10.0-pre.2", "@types/aws-lambda": "^8.10.82" }, "devDependencies": { diff --git a/packages/remix-cloudflare-pages/CHANGELOG.md b/packages/remix-cloudflare-pages/CHANGELOG.md index 42506760e1e..4a231ce77b5 100644 --- a/packages/remix-cloudflare-pages/CHANGELOG.md +++ b/packages/remix-cloudflare-pages/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-pages` +## 1.10.0-pre.2 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-cloudflare-pages/package.json b/packages/remix-cloudflare-pages/package.json index c6df5e1f010..700da7c71d1 100644 --- a/packages/remix-cloudflare-pages/package.json +++ b/packages/remix-cloudflare-pages/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-pages", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Cloudflare Pages request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/cloudflare": "1.10.0-pre.1" + "@remix-run/cloudflare": "1.10.0-pre.2" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0", diff --git a/packages/remix-cloudflare-workers/CHANGELOG.md b/packages/remix-cloudflare-workers/CHANGELOG.md index 7d75b3901ad..6c07780b934 100644 --- a/packages/remix-cloudflare-workers/CHANGELOG.md +++ b/packages/remix-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-workers` +## 1.10.0-pre.2 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-cloudflare-workers/package.json b/packages/remix-cloudflare-workers/package.json index 637f1009450..ebae8e00e79 100644 --- a/packages/remix-cloudflare-workers/package.json +++ b/packages/remix-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-workers", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Cloudflare worker request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -16,7 +16,7 @@ "module": "dist/esm/index.js", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/cloudflare": "1.10.0-pre.1" + "@remix-run/cloudflare": "1.10.0-pre.2" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md index 5c3aa0b2e71..de7c83ac764 100644 --- a/packages/remix-cloudflare/CHANGELOG.md +++ b/packages/remix-cloudflare/CHANGELOG.md @@ -1,5 +1,13 @@ # `@remix-run/cloudflare` +## 1.10.0-pre.2 + +### Patch Changes + +- re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-cloudflare/package.json b/packages/remix-cloudflare/package.json index 7b18eb172c7..562e99efaa5 100644 --- a/packages/remix-cloudflare/package.json +++ b/packages/remix-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Cloudflare platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/server-runtime": "1.10.0-pre.1" + "@remix-run/server-runtime": "1.10.0-pre.2" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index 3e2bc3694da..693e77f25f1 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -1,5 +1,13 @@ # `@remix-run/deno` +## 1.10.0-pre.2 + +### Patch Changes + +- re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-deno/package.json b/packages/remix-deno/package.json index 3a4fde4e2c0..d4cda9c62a6 100644 --- a/packages/remix-deno/package.json +++ b/packages/remix-deno/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/deno", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Deno platform abstractions for Remix", "homepage": "https://remix.run", "main": "./index.ts", @@ -15,7 +15,7 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.1", + "@remix-run/server-runtime": "1.10.0-pre.2", "mime": "^3.0.0" }, "engines": { diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md index 24aaeebc088..84996bb7d84 100644 --- a/packages/remix-dev/CHANGELOG.md +++ b/packages/remix-dev/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/dev` +## 1.10.0-pre.2 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index c3c2c357eda..b9c1dfba518 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/dev", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Dev tools and CLI for Remix", "homepage": "https://remix.run", "bugs": { @@ -26,7 +26,7 @@ "@babel/types": "^7.20.2", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@npmcli/package-json": "^2.0.0", - "@remix-run/server-runtime": "1.10.0-pre.1", + "@remix-run/server-runtime": "1.10.0-pre.2", "arg": "^5.0.1", "cacache": "^15.0.5", "chalk": "^4.1.2", @@ -63,7 +63,7 @@ "xdm": "^2.0.0" }, "devDependencies": { - "@remix-run/serve": "1.10.0-pre.1", + "@remix-run/serve": "1.10.0-pre.2", "@types/cacache": "^15.0.0", "@types/gunzip-maybe": "^1.4.0", "@types/inquirer": "^8.2.0", diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md index 242fa0ec50f..8dbe65e2d7f 100644 --- a/packages/remix-eslint-config/CHANGELOG.md +++ b/packages/remix-eslint-config/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/eslint-config` +## 1.10.0-pre.2 + ## 1.10.0-pre.1 ## 1.10.0-pre.0 diff --git a/packages/remix-eslint-config/package.json b/packages/remix-eslint-config/package.json index 8e46f7a7375..6ff13c2bf2d 100644 --- a/packages/remix-eslint-config/package.json +++ b/packages/remix-eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/eslint-config", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "ESLint configuration for Remix projects", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-express/CHANGELOG.md b/packages/remix-express/CHANGELOG.md index 83dc0d2a7ca..a0a2d485de8 100644 --- a/packages/remix-express/CHANGELOG.md +++ b/packages/remix-express/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/express` +## 1.10.0-pre.2 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json index 362978e1f4c..b420c7f7ef0 100644 --- a/packages/remix-express/package.json +++ b/packages/remix-express/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/express", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Express server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.1" + "@remix-run/node": "1.10.0-pre.2" }, "devDependencies": { "@types/express": "^4.17.9", diff --git a/packages/remix-netlify/CHANGELOG.md b/packages/remix-netlify/CHANGELOG.md index 6fde8ff5df1..a9a8782ae1a 100644 --- a/packages/remix-netlify/CHANGELOG.md +++ b/packages/remix-netlify/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/netlify` +## 1.10.0-pre.2 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-netlify/package.json b/packages/remix-netlify/package.json index 755104285c8..57f30650d5a 100644 --- a/packages/remix-netlify/package.json +++ b/packages/remix-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/netlify", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Netlify server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.1" + "@remix-run/node": "1.10.0-pre.2" }, "devDependencies": { "@netlify/functions": "^1.0.0" diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md index 1bd03b9ea54..1cf5b369a68 100644 --- a/packages/remix-node/CHANGELOG.md +++ b/packages/remix-node/CHANGELOG.md @@ -1,5 +1,13 @@ # `@remix-run/node` +## 1.10.0-pre.2 + +### Patch Changes + +- re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index d16cd63469a..028e4f7f9c6 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/node", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Node.js platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.1", + "@remix-run/server-runtime": "1.10.0-pre.2", "@remix-run/web-fetch": "^4.3.2", "@remix-run/web-file": "^3.0.2", "@remix-run/web-stream": "^1.0.3", diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md index 24d967b8863..feb2a2ce81e 100644 --- a/packages/remix-react/CHANGELOG.md +++ b/packages/remix-react/CHANGELOG.md @@ -1,5 +1,11 @@ # `@remix-run/react` +## 1.10.0-pre.2 + +### Patch Changes + +- Bump to react-router 6.6.1 pre versions ([#4944](https://github.com/remix-run/remix/pull/4944)) + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index 6b3a85dbd72..29a2d6230e4 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/react", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "React DOM bindings for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -20,7 +20,7 @@ "react-router-dom": "6.6.1-pre.1" }, "devDependencies": { - "@remix-run/server-runtime": "1.10.0-pre.1", + "@remix-run/server-runtime": "1.10.0-pre.2", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^13.3.0", "abort-controller": "^3.0.0", diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md index bf5bf89577d..23fd35e96bf 100644 --- a/packages/remix-serve/CHANGELOG.md +++ b/packages/remix-serve/CHANGELOG.md @@ -1,5 +1,13 @@ # `@remix-run/serve` +## 1.10.0-pre.2 + +### Patch Changes + +- re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) +- Updated dependencies: + - `@remix-run/express@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index f9f0c748fbe..99900f240da 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/serve", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Production application server for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -17,7 +17,7 @@ "remix-serve": "dist/cli.js" }, "dependencies": { - "@remix-run/express": "1.10.0-pre.1", + "@remix-run/express": "1.10.0-pre.2", "compression": "^1.7.4", "express": "^4.17.1", "morgan": "^1.10.0" diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md index 19a074db4d5..7adeae9b54f 100644 --- a/packages/remix-server-runtime/CHANGELOG.md +++ b/packages/remix-server-runtime/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/server-runtime` +## 1.10.0-pre.2 + +### Patch Changes + +- Bump to react-router 6.6.1 pre versions ([#4944](https://github.com/remix-run/remix/pull/4944)) +- re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index 7c480d0233a..d00ec20cc56 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/server-runtime", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Server runtime for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index b512b1ed37a..e0b59570bac 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -1,5 +1,15 @@ # @remix-run/testing +## 1.10.0-pre.2 + +### Patch Changes + +- Bump to react-router 6.6.1 pre versions ([#4944](https://github.com/remix-run/remix/pull/4944)) +- use react router apis directly ([#4915](https://github.com/remix-run/remix/pull/4915)) +- Updated dependencies: + - `@remix-run/react@1.10.0-pre.2` + - `@remix-run/node@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index d49327230d8..74b8541eb67 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/testing", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Testing utilities for Remix apps", "homepage": "https://remix.run", "bugs": { @@ -16,8 +16,8 @@ "typings": "./dist/index.d.ts", "module": "./dist/esm/index.js", "dependencies": { - "@remix-run/node": "1.10.0-pre.1", - "@remix-run/react": "1.10.0-pre.1", + "@remix-run/node": "1.10.0-pre.2", + "@remix-run/react": "1.10.0-pre.2", "@remix-run/router": "1.2.1-pre.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/remix-vercel/CHANGELOG.md b/packages/remix-vercel/CHANGELOG.md index 7cb8dd957ba..b6311b4f57b 100644 --- a/packages/remix-vercel/CHANGELOG.md +++ b/packages/remix-vercel/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/vercel` +## 1.10.0-pre.2 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.2` + ## 1.10.0-pre.1 ### Patch Changes diff --git a/packages/remix-vercel/package.json b/packages/remix-vercel/package.json index 44abca81fb5..dff76adec26 100644 --- a/packages/remix-vercel/package.json +++ b/packages/remix-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/vercel", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "Vercel server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.1" + "@remix-run/node": "1.10.0-pre.2" }, "devDependencies": { "@types/supertest": "^2.0.10", diff --git a/packages/remix/package.json b/packages/remix/package.json index 8d244c0ded9..269e7b935a7 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "remix", - "version": "1.10.0-pre.1", + "version": "1.10.0-pre.2", "description": "A framework for building better websites", "homepage": "https://remix.run", "bugs": { From 8eea6c61b5e7b554f6a1db87c6236ee6f3fa47e9 Mon Sep 17 00:00:00 2001 From: Logan McAnsh <logan@mcan.sh> Date: Thu, 22 Dec 2022 19:47:33 -0500 Subject: [PATCH 11/41] fix: `V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` (#4947) --- .changeset/rotten-bulldogs-reply.md | 7 +++++++ packages/remix-server-runtime/routeModules.ts | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .changeset/rotten-bulldogs-reply.md diff --git a/.changeset/rotten-bulldogs-reply.md b/.changeset/rotten-bulldogs-reply.md new file mode 100644 index 00000000000..b36812e43a2 --- /dev/null +++ b/.changeset/rotten-bulldogs-reply.md @@ -0,0 +1,7 @@ +--- +"remix": patch +"@remix-run/serve": patch +"@remix-run/server-runtime": patch +--- + +`V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` diff --git a/packages/remix-server-runtime/routeModules.ts b/packages/remix-server-runtime/routeModules.ts index 8ad76e3ea51..933a2390ee3 100644 --- a/packages/remix-server-runtime/routeModules.ts +++ b/packages/remix-server-runtime/routeModules.ts @@ -178,7 +178,7 @@ export interface V2_MetaFunction< params: Params; location: Location; matches: RouteMatchWithMeta<ClientRoute>[]; - }): HtmlMetaDescriptor; + }): V2_HtmlMetaDescriptor[]; } /** From f3ac6480c69643b945c93f2ad22116bab6977d1d Mon Sep 17 00:00:00 2001 From: Remix Run Bot <72662859+remix-run-bot@users.noreply.github.com> Date: Fri, 23 Dec 2022 07:44:53 -0700 Subject: [PATCH 12/41] chore: Update version for release (pre) (#4948) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> --- .changeset/pre.json | 1 + packages/create-remix/CHANGELOG.md | 7 +++++++ packages/create-remix/package.json | 4 ++-- packages/remix-architect/CHANGELOG.md | 7 +++++++ packages/remix-architect/package.json | 4 ++-- packages/remix-cloudflare-pages/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-pages/package.json | 4 ++-- packages/remix-cloudflare-workers/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-workers/package.json | 4 ++-- packages/remix-cloudflare/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare/package.json | 4 ++-- packages/remix-deno/CHANGELOG.md | 7 +++++++ packages/remix-deno/package.json | 4 ++-- packages/remix-dev/CHANGELOG.md | 7 +++++++ packages/remix-dev/package.json | 6 +++--- packages/remix-eslint-config/CHANGELOG.md | 2 ++ packages/remix-eslint-config/package.json | 2 +- packages/remix-express/CHANGELOG.md | 7 +++++++ packages/remix-express/package.json | 4 ++-- packages/remix-netlify/CHANGELOG.md | 7 +++++++ packages/remix-netlify/package.json | 4 ++-- packages/remix-node/CHANGELOG.md | 7 +++++++ packages/remix-node/package.json | 4 ++-- packages/remix-react/CHANGELOG.md | 2 ++ packages/remix-react/package.json | 4 ++-- packages/remix-serve/CHANGELOG.md | 8 ++++++++ packages/remix-serve/package.json | 4 ++-- packages/remix-server-runtime/CHANGELOG.md | 6 ++++++ packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/CHANGELOG.md | 8 ++++++++ packages/remix-testing/package.json | 6 +++--- packages/remix-vercel/CHANGELOG.md | 7 +++++++ packages/remix-vercel/package.json | 4 ++-- packages/remix/package.json | 2 +- 34 files changed, 137 insertions(+), 33 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 70497be6453..0d792b4b877 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -28,6 +28,7 @@ "many-zebras-arrive", "mighty-rules-drum", "quick-cats-fix", + "rotten-bulldogs-reply", "shaggy-garlics-confess", "silver-ducks-protect", "thirty-eels-taste" diff --git a/packages/create-remix/CHANGELOG.md b/packages/create-remix/CHANGELOG.md index e3fae71d3eb..c753de68a0e 100644 --- a/packages/create-remix/CHANGELOG.md +++ b/packages/create-remix/CHANGELOG.md @@ -1,5 +1,12 @@ # `create-remix` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/dev@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/create-remix/package.json b/packages/create-remix/package.json index 2fcee30d2b5..733b581c796 100644 --- a/packages/create-remix/package.json +++ b/packages/create-remix/package.json @@ -1,6 +1,6 @@ { "name": "create-remix", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Create a new Remix app", "homepage": "https://remix.run", "bugs": { @@ -17,7 +17,7 @@ "create-remix": "dist/cli.js" }, "dependencies": { - "@remix-run/dev": "1.10.0-pre.2" + "@remix-run/dev": "1.10.0-pre.3" }, "engines": { "node": ">=14" diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md index 8444ab658a0..219f3b16ef8 100644 --- a/packages/remix-architect/CHANGELOG.md +++ b/packages/remix-architect/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/architect` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json index 04109c5069d..b8a4f6bdd2e 100644 --- a/packages/remix-architect/package.json +++ b/packages/remix-architect/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/architect", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Architect server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@architect/functions": "^5.0.2", - "@remix-run/node": "1.10.0-pre.2", + "@remix-run/node": "1.10.0-pre.3", "@types/aws-lambda": "^8.10.82" }, "devDependencies": { diff --git a/packages/remix-cloudflare-pages/CHANGELOG.md b/packages/remix-cloudflare-pages/CHANGELOG.md index 4a231ce77b5..236cf7f8d5d 100644 --- a/packages/remix-cloudflare-pages/CHANGELOG.md +++ b/packages/remix-cloudflare-pages/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-pages` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-cloudflare-pages/package.json b/packages/remix-cloudflare-pages/package.json index 700da7c71d1..4ecbcfca3e8 100644 --- a/packages/remix-cloudflare-pages/package.json +++ b/packages/remix-cloudflare-pages/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-pages", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Cloudflare Pages request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/cloudflare": "1.10.0-pre.2" + "@remix-run/cloudflare": "1.10.0-pre.3" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0", diff --git a/packages/remix-cloudflare-workers/CHANGELOG.md b/packages/remix-cloudflare-workers/CHANGELOG.md index 6c07780b934..3b38914bc21 100644 --- a/packages/remix-cloudflare-workers/CHANGELOG.md +++ b/packages/remix-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-workers` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-cloudflare-workers/package.json b/packages/remix-cloudflare-workers/package.json index ebae8e00e79..72508f63ef9 100644 --- a/packages/remix-cloudflare-workers/package.json +++ b/packages/remix-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-workers", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Cloudflare worker request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -16,7 +16,7 @@ "module": "dist/esm/index.js", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/cloudflare": "1.10.0-pre.2" + "@remix-run/cloudflare": "1.10.0-pre.3" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md index de7c83ac764..6588115c8fa 100644 --- a/packages/remix-cloudflare/CHANGELOG.md +++ b/packages/remix-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-cloudflare/package.json b/packages/remix-cloudflare/package.json index 562e99efaa5..0d94a9b5441 100644 --- a/packages/remix-cloudflare/package.json +++ b/packages/remix-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Cloudflare platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/server-runtime": "1.10.0-pre.2" + "@remix-run/server-runtime": "1.10.0-pre.3" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index 693e77f25f1..0c59961cf63 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/deno` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-deno/package.json b/packages/remix-deno/package.json index d4cda9c62a6..36ac7adc241 100644 --- a/packages/remix-deno/package.json +++ b/packages/remix-deno/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/deno", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Deno platform abstractions for Remix", "homepage": "https://remix.run", "main": "./index.ts", @@ -15,7 +15,7 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.2", + "@remix-run/server-runtime": "1.10.0-pre.3", "mime": "^3.0.0" }, "engines": { diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md index 84996bb7d84..0bd8f954f17 100644 --- a/packages/remix-dev/CHANGELOG.md +++ b/packages/remix-dev/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/dev` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index b9c1dfba518..c121c10b3b1 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/dev", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Dev tools and CLI for Remix", "homepage": "https://remix.run", "bugs": { @@ -26,7 +26,7 @@ "@babel/types": "^7.20.2", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@npmcli/package-json": "^2.0.0", - "@remix-run/server-runtime": "1.10.0-pre.2", + "@remix-run/server-runtime": "1.10.0-pre.3", "arg": "^5.0.1", "cacache": "^15.0.5", "chalk": "^4.1.2", @@ -63,7 +63,7 @@ "xdm": "^2.0.0" }, "devDependencies": { - "@remix-run/serve": "1.10.0-pre.2", + "@remix-run/serve": "1.10.0-pre.3", "@types/cacache": "^15.0.0", "@types/gunzip-maybe": "^1.4.0", "@types/inquirer": "^8.2.0", diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md index 8dbe65e2d7f..d2db9148d80 100644 --- a/packages/remix-eslint-config/CHANGELOG.md +++ b/packages/remix-eslint-config/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/eslint-config` +## 1.10.0-pre.3 + ## 1.10.0-pre.2 ## 1.10.0-pre.1 diff --git a/packages/remix-eslint-config/package.json b/packages/remix-eslint-config/package.json index 6ff13c2bf2d..b8b7d4bff55 100644 --- a/packages/remix-eslint-config/package.json +++ b/packages/remix-eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/eslint-config", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "ESLint configuration for Remix projects", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-express/CHANGELOG.md b/packages/remix-express/CHANGELOG.md index a0a2d485de8..3acbdebd66a 100644 --- a/packages/remix-express/CHANGELOG.md +++ b/packages/remix-express/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/express` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json index b420c7f7ef0..0988f1d9d28 100644 --- a/packages/remix-express/package.json +++ b/packages/remix-express/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/express", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Express server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.2" + "@remix-run/node": "1.10.0-pre.3" }, "devDependencies": { "@types/express": "^4.17.9", diff --git a/packages/remix-netlify/CHANGELOG.md b/packages/remix-netlify/CHANGELOG.md index a9a8782ae1a..a9566a49e7d 100644 --- a/packages/remix-netlify/CHANGELOG.md +++ b/packages/remix-netlify/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/netlify` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-netlify/package.json b/packages/remix-netlify/package.json index 57f30650d5a..a595a83a5e2 100644 --- a/packages/remix-netlify/package.json +++ b/packages/remix-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/netlify", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Netlify server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.2" + "@remix-run/node": "1.10.0-pre.3" }, "devDependencies": { "@netlify/functions": "^1.0.0" diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md index 1cf5b369a68..9875ed807b5 100644 --- a/packages/remix-node/CHANGELOG.md +++ b/packages/remix-node/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/node` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index 028e4f7f9c6..b9190370672 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/node", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Node.js platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.2", + "@remix-run/server-runtime": "1.10.0-pre.3", "@remix-run/web-fetch": "^4.3.2", "@remix-run/web-file": "^3.0.2", "@remix-run/web-stream": "^1.0.3", diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md index feb2a2ce81e..79d95f11ca2 100644 --- a/packages/remix-react/CHANGELOG.md +++ b/packages/remix-react/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/react` +## 1.10.0-pre.3 + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index 29a2d6230e4..445dbddca13 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/react", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "React DOM bindings for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -20,7 +20,7 @@ "react-router-dom": "6.6.1-pre.1" }, "devDependencies": { - "@remix-run/server-runtime": "1.10.0-pre.2", + "@remix-run/server-runtime": "1.10.0-pre.3", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^13.3.0", "abort-controller": "^3.0.0", diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md index 23fd35e96bf..305dd648076 100644 --- a/packages/remix-serve/CHANGELOG.md +++ b/packages/remix-serve/CHANGELOG.md @@ -1,5 +1,13 @@ # `@remix-run/serve` +## 1.10.0-pre.3 + +### Patch Changes + +- `V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` ([#4947](https://github.com/remix-run/remix/pull/4947)) +- Updated dependencies: + - `@remix-run/express@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index 99900f240da..b6f17bbc27c 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/serve", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Production application server for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -17,7 +17,7 @@ "remix-serve": "dist/cli.js" }, "dependencies": { - "@remix-run/express": "1.10.0-pre.2", + "@remix-run/express": "1.10.0-pre.3", "compression": "^1.7.4", "express": "^4.17.1", "morgan": "^1.10.0" diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md index 7adeae9b54f..94950897494 100644 --- a/packages/remix-server-runtime/CHANGELOG.md +++ b/packages/remix-server-runtime/CHANGELOG.md @@ -1,5 +1,11 @@ # `@remix-run/server-runtime` +## 1.10.0-pre.3 + +### Patch Changes + +- `V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` ([#4947](https://github.com/remix-run/remix/pull/4947)) + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index d00ec20cc56..ae47d7ae91f 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/server-runtime", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Server runtime for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index e0b59570bac..f960e67961f 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -1,5 +1,13 @@ # @remix-run/testing +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.3` + - `@remix-run/react@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index 74b8541eb67..34c83ce0137 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/testing", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Testing utilities for Remix apps", "homepage": "https://remix.run", "bugs": { @@ -16,8 +16,8 @@ "typings": "./dist/index.d.ts", "module": "./dist/esm/index.js", "dependencies": { - "@remix-run/node": "1.10.0-pre.2", - "@remix-run/react": "1.10.0-pre.2", + "@remix-run/node": "1.10.0-pre.3", + "@remix-run/react": "1.10.0-pre.3", "@remix-run/router": "1.2.1-pre.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/remix-vercel/CHANGELOG.md b/packages/remix-vercel/CHANGELOG.md index b6311b4f57b..b5ebfeb4e3e 100644 --- a/packages/remix-vercel/CHANGELOG.md +++ b/packages/remix-vercel/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/vercel` +## 1.10.0-pre.3 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.3` + ## 1.10.0-pre.2 ### Patch Changes diff --git a/packages/remix-vercel/package.json b/packages/remix-vercel/package.json index dff76adec26..d575bd16193 100644 --- a/packages/remix-vercel/package.json +++ b/packages/remix-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/vercel", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "Vercel server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.2" + "@remix-run/node": "1.10.0-pre.3" }, "devDependencies": { "@types/supertest": "^2.0.10", diff --git a/packages/remix/package.json b/packages/remix/package.json index 269e7b935a7..ac9a1b97fa7 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "remix", - "version": "1.10.0-pre.2", + "version": "1.10.0-pre.3", "description": "A framework for building better websites", "homepage": "https://remix.run", "bugs": { From 5e724a36ba2ad492dfc82437b8e40c4034bc2b5c Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Fri, 23 Dec 2022 12:07:18 -0500 Subject: [PATCH 13/41] Bump router versions to stable (#4952) --- .changeset/metal-birds-tease.md | 7 +++++ packages/remix-react/package.json | 4 +-- packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/package.json | 4 +-- yarn.lock | 30 +++++++++++----------- 5 files changed, 27 insertions(+), 20 deletions(-) create mode 100644 .changeset/metal-birds-tease.md diff --git a/.changeset/metal-birds-tease.md b/.changeset/metal-birds-tease.md new file mode 100644 index 00000000000..4418fed4fa7 --- /dev/null +++ b/.changeset/metal-birds-tease.md @@ -0,0 +1,7 @@ +--- +"@remix-run/react": patch +"@remix-run/server-runtime": patch +"@remix-run/testing": patch +--- + +Bump react router version to latest diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index 445dbddca13..f5eccffe13f 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -16,8 +16,8 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/router": "1.2.1-pre.1", - "react-router-dom": "6.6.1-pre.1" + "@remix-run/router": "1.2.1", + "react-router-dom": "6.6.1" }, "devDependencies": { "@remix-run/server-runtime": "1.10.0-pre.3", diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index ae47d7ae91f..5e3ecc49af3 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -16,7 +16,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/router": "1.2.1-pre.1", + "@remix-run/router": "1.2.1", "@types/cookie": "^0.4.0", "@web3-storage/multipart-parser": "^1.0.0", "cookie": "^0.4.1", diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index 34c83ce0137..c29687c421f 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -18,10 +18,10 @@ "dependencies": { "@remix-run/node": "1.10.0-pre.3", "@remix-run/react": "1.10.0-pre.3", - "@remix-run/router": "1.2.1-pre.1", + "@remix-run/router": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "6.6.1-pre.1" + "react-router-dom": "6.6.1" }, "devDependencies": { "@types/node": "^18.11.9", diff --git a/yarn.lock b/yarn.lock index a4a7d6371e0..518b5d0f4a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2174,10 +2174,10 @@ "@changesets/types" "^5.0.0" dotenv "^8.1.0" -"@remix-run/router@1.2.1-pre.1": - version "1.2.1-pre.1" - resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1-pre.1.tgz#a3e2ce6fd671c81d51d48441782d669fa808f755" - integrity sha512-6mohjuXG82dAmUAD3cCIVcE2I1zRGvmQoUbJvKPcWtsM6F6izwq8ajhi2WMaycUburB4QKXcBZUsn8XqrBeX6Q== +"@remix-run/router@1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz#812edd4104a15a493dda1ccac0b352270d7a188c" + integrity sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ== "@remix-run/web-blob@^3.0.3", "@remix-run/web-blob@^3.0.4": version "3.0.4" @@ -10530,20 +10530,20 @@ react-is@^17.0.1: resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-router-dom@6.6.1-pre.1: - version "6.6.1-pre.1" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.1-pre.1.tgz#c12aa081535ccd94585932412b2db69a59b1e397" - integrity sha512-WHJqy+buZ73u8BykryQDTElcj+iyycixebDwyII9Is2bHQh6LjVgiXa3GyrxWTkFx/sid4+ira3t1TLaZdJSbg== +react-router-dom@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.1.tgz#1b96ec0b2cefa7319f1251383ea5b41295ee260d" + integrity sha512-u+8BKUtelStKbZD5UcY0NY90WOzktrkJJhyhNg7L0APn9t1qJNLowzrM9CHdpB6+rcPt6qQrlkIXsTvhuXP68g== dependencies: - "@remix-run/router" "1.2.1-pre.1" - react-router "6.6.1-pre.1" + "@remix-run/router" "1.2.1" + react-router "6.6.1" -react-router@6.6.1-pre.1: - version "6.6.1-pre.1" - resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.1-pre.1.tgz#53927bdc03818575743e781f489d9f4107ff1dbe" - integrity sha512-iQZ+45GR/l3//NIwYGQbbwy/NeAdk6QsHJKBUPd8PNS1SJFeiXpCbeli9WkY5/WKh/cN9Ezqld69iT/Z26oc+Q== +react-router@6.6.1: + version "6.6.1" + resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.1.tgz#17de6cf285f2d1c9721a3afca999c984e5558854" + integrity sha512-YkvlYRusnI/IN0kDtosUCgxqHeulN5je+ew8W+iA1VvFhf86kA+JEI/X/8NqYcr11hCDDp906S+SGMpBheNeYQ== dependencies: - "@remix-run/router" "1.2.1-pre.1" + "@remix-run/router" "1.2.1" react@^18.2.0: version "18.2.0" From 3845410fd9519214a483614f4f5d6357666370f4 Mon Sep 17 00:00:00 2001 From: Jacob Ebey <jacob.ebey@live.com> Date: Fri, 23 Dec 2022 10:24:54 -0800 Subject: [PATCH 14/41] fix: pass through request abort signal (#4954) --- .changeset/big-geese-cry.md | 6 ++++++ packages/remix-react/data.ts | 3 +++ 2 files changed, 9 insertions(+) create mode 100644 .changeset/big-geese-cry.md diff --git a/.changeset/big-geese-cry.md b/.changeset/big-geese-cry.md new file mode 100644 index 00000000000..546bb760bc8 --- /dev/null +++ b/.changeset/big-geese-cry.md @@ -0,0 +1,6 @@ +--- +"remix": patch +"@remix-run/react": patch +--- + +fix: pass through request abort signal diff --git a/packages/remix-react/data.ts b/packages/remix-react/data.ts index 34ee8f7c9c5..7f635609d9d 100644 --- a/packages/remix-react/data.ts +++ b/packages/remix-react/data.ts @@ -42,7 +42,10 @@ export async function fetchData( init = { method: request.method, body: await request.formData(), + signal: request.signal, }; + } else { + init = { signal: request.signal }; } let response = await fetch(url.href, init); From 0dc58d101bba872f1625c03bb1ddd1ed92c8b461 Mon Sep 17 00:00:00 2001 From: Remix Run Bot <72662859+remix-run-bot@users.noreply.github.com> Date: Fri, 23 Dec 2022 12:12:55 -0700 Subject: [PATCH 15/41] chore: Update version for release (pre) (#4953) --- .changeset/pre.json | 2 ++ packages/create-remix/CHANGELOG.md | 7 +++++++ packages/create-remix/package.json | 4 ++-- packages/remix-architect/CHANGELOG.md | 7 +++++++ packages/remix-architect/package.json | 4 ++-- packages/remix-cloudflare-pages/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-pages/package.json | 4 ++-- packages/remix-cloudflare-workers/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-workers/package.json | 4 ++-- packages/remix-cloudflare/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare/package.json | 4 ++-- packages/remix-deno/CHANGELOG.md | 7 +++++++ packages/remix-deno/package.json | 4 ++-- packages/remix-dev/CHANGELOG.md | 7 +++++++ packages/remix-dev/package.json | 6 +++--- packages/remix-eslint-config/CHANGELOG.md | 2 ++ packages/remix-eslint-config/package.json | 2 +- packages/remix-express/CHANGELOG.md | 7 +++++++ packages/remix-express/package.json | 4 ++-- packages/remix-netlify/CHANGELOG.md | 7 +++++++ packages/remix-netlify/package.json | 4 ++-- packages/remix-node/CHANGELOG.md | 7 +++++++ packages/remix-node/package.json | 4 ++-- packages/remix-react/CHANGELOG.md | 7 +++++++ packages/remix-react/package.json | 4 ++-- packages/remix-serve/CHANGELOG.md | 7 +++++++ packages/remix-serve/package.json | 4 ++-- packages/remix-server-runtime/CHANGELOG.md | 6 ++++++ packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/CHANGELOG.md | 9 +++++++++ packages/remix-testing/package.json | 6 +++--- packages/remix-vercel/CHANGELOG.md | 7 +++++++ packages/remix-vercel/package.json | 4 ++-- packages/remix/package.json | 2 +- 34 files changed, 143 insertions(+), 33 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 0d792b4b877..b1d7c067452 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -21,11 +21,13 @@ "@remix-run/vercel": "1.9.0" }, "changesets": [ + "big-geese-cry", "gentle-yaks-lick", "honest-phones-visit", "late-bottles-shop", "lucky-chairs-remember", "many-zebras-arrive", + "metal-birds-tease", "mighty-rules-drum", "quick-cats-fix", "rotten-bulldogs-reply", diff --git a/packages/create-remix/CHANGELOG.md b/packages/create-remix/CHANGELOG.md index c753de68a0e..c8a6d1210f1 100644 --- a/packages/create-remix/CHANGELOG.md +++ b/packages/create-remix/CHANGELOG.md @@ -1,5 +1,12 @@ # `create-remix` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/dev@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/create-remix/package.json b/packages/create-remix/package.json index 733b581c796..ae7ca3a5fa2 100644 --- a/packages/create-remix/package.json +++ b/packages/create-remix/package.json @@ -1,6 +1,6 @@ { "name": "create-remix", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Create a new Remix app", "homepage": "https://remix.run", "bugs": { @@ -17,7 +17,7 @@ "create-remix": "dist/cli.js" }, "dependencies": { - "@remix-run/dev": "1.10.0-pre.3" + "@remix-run/dev": "1.10.0-pre.4" }, "engines": { "node": ">=14" diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md index 219f3b16ef8..3319594d266 100644 --- a/packages/remix-architect/CHANGELOG.md +++ b/packages/remix-architect/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/architect` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json index b8a4f6bdd2e..2e31ed26c03 100644 --- a/packages/remix-architect/package.json +++ b/packages/remix-architect/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/architect", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Architect server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@architect/functions": "^5.0.2", - "@remix-run/node": "1.10.0-pre.3", + "@remix-run/node": "1.10.0-pre.4", "@types/aws-lambda": "^8.10.82" }, "devDependencies": { diff --git a/packages/remix-cloudflare-pages/CHANGELOG.md b/packages/remix-cloudflare-pages/CHANGELOG.md index 236cf7f8d5d..7753fab0b57 100644 --- a/packages/remix-cloudflare-pages/CHANGELOG.md +++ b/packages/remix-cloudflare-pages/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-pages` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-cloudflare-pages/package.json b/packages/remix-cloudflare-pages/package.json index 4ecbcfca3e8..9f5437398ce 100644 --- a/packages/remix-cloudflare-pages/package.json +++ b/packages/remix-cloudflare-pages/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-pages", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Cloudflare Pages request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/cloudflare": "1.10.0-pre.3" + "@remix-run/cloudflare": "1.10.0-pre.4" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0", diff --git a/packages/remix-cloudflare-workers/CHANGELOG.md b/packages/remix-cloudflare-workers/CHANGELOG.md index 3b38914bc21..f7d7d40f700 100644 --- a/packages/remix-cloudflare-workers/CHANGELOG.md +++ b/packages/remix-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-workers` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-cloudflare-workers/package.json b/packages/remix-cloudflare-workers/package.json index 72508f63ef9..617e881f344 100644 --- a/packages/remix-cloudflare-workers/package.json +++ b/packages/remix-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-workers", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Cloudflare worker request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -16,7 +16,7 @@ "module": "dist/esm/index.js", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/cloudflare": "1.10.0-pre.3" + "@remix-run/cloudflare": "1.10.0-pre.4" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md index 6588115c8fa..4d518dffe74 100644 --- a/packages/remix-cloudflare/CHANGELOG.md +++ b/packages/remix-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-cloudflare/package.json b/packages/remix-cloudflare/package.json index 0d94a9b5441..61e79e49fdc 100644 --- a/packages/remix-cloudflare/package.json +++ b/packages/remix-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Cloudflare platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/server-runtime": "1.10.0-pre.3" + "@remix-run/server-runtime": "1.10.0-pre.4" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index 0c59961cf63..fbdcabae6f0 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/deno` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-deno/package.json b/packages/remix-deno/package.json index 36ac7adc241..217b5b41abd 100644 --- a/packages/remix-deno/package.json +++ b/packages/remix-deno/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/deno", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Deno platform abstractions for Remix", "homepage": "https://remix.run", "main": "./index.ts", @@ -15,7 +15,7 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.3", + "@remix-run/server-runtime": "1.10.0-pre.4", "mime": "^3.0.0" }, "engines": { diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md index 0bd8f954f17..eeda364cedf 100644 --- a/packages/remix-dev/CHANGELOG.md +++ b/packages/remix-dev/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/dev` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index c121c10b3b1..788658740d1 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/dev", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Dev tools and CLI for Remix", "homepage": "https://remix.run", "bugs": { @@ -26,7 +26,7 @@ "@babel/types": "^7.20.2", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@npmcli/package-json": "^2.0.0", - "@remix-run/server-runtime": "1.10.0-pre.3", + "@remix-run/server-runtime": "1.10.0-pre.4", "arg": "^5.0.1", "cacache": "^15.0.5", "chalk": "^4.1.2", @@ -63,7 +63,7 @@ "xdm": "^2.0.0" }, "devDependencies": { - "@remix-run/serve": "1.10.0-pre.3", + "@remix-run/serve": "1.10.0-pre.4", "@types/cacache": "^15.0.0", "@types/gunzip-maybe": "^1.4.0", "@types/inquirer": "^8.2.0", diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md index d2db9148d80..9ddb5901de9 100644 --- a/packages/remix-eslint-config/CHANGELOG.md +++ b/packages/remix-eslint-config/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/eslint-config` +## 1.10.0-pre.4 + ## 1.10.0-pre.3 ## 1.10.0-pre.2 diff --git a/packages/remix-eslint-config/package.json b/packages/remix-eslint-config/package.json index b8b7d4bff55..863599060d5 100644 --- a/packages/remix-eslint-config/package.json +++ b/packages/remix-eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/eslint-config", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "ESLint configuration for Remix projects", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-express/CHANGELOG.md b/packages/remix-express/CHANGELOG.md index 3acbdebd66a..16d3e1647ea 100644 --- a/packages/remix-express/CHANGELOG.md +++ b/packages/remix-express/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/express` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json index 0988f1d9d28..591606a0155 100644 --- a/packages/remix-express/package.json +++ b/packages/remix-express/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/express", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Express server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.3" + "@remix-run/node": "1.10.0-pre.4" }, "devDependencies": { "@types/express": "^4.17.9", diff --git a/packages/remix-netlify/CHANGELOG.md b/packages/remix-netlify/CHANGELOG.md index a9566a49e7d..6b8249869ce 100644 --- a/packages/remix-netlify/CHANGELOG.md +++ b/packages/remix-netlify/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/netlify` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-netlify/package.json b/packages/remix-netlify/package.json index a595a83a5e2..7a083195548 100644 --- a/packages/remix-netlify/package.json +++ b/packages/remix-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/netlify", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Netlify server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.3" + "@remix-run/node": "1.10.0-pre.4" }, "devDependencies": { "@netlify/functions": "^1.0.0" diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md index 9875ed807b5..b939a9a2b77 100644 --- a/packages/remix-node/CHANGELOG.md +++ b/packages/remix-node/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/node` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index b9190370672..3b6462ad3c0 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/node", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Node.js platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.3", + "@remix-run/server-runtime": "1.10.0-pre.4", "@remix-run/web-fetch": "^4.3.2", "@remix-run/web-file": "^3.0.2", "@remix-run/web-stream": "^1.0.3", diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md index 79d95f11ca2..b5283710864 100644 --- a/packages/remix-react/CHANGELOG.md +++ b/packages/remix-react/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/react` +## 1.10.0-pre.4 + +### Patch Changes + +- fix: pass through request abort signal ([#4954](https://github.com/remix-run/remix/pull/4954)) +- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) + ## 1.10.0-pre.3 ## 1.10.0-pre.2 diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index f5eccffe13f..eec5ff835b9 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/react", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "React DOM bindings for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -20,7 +20,7 @@ "react-router-dom": "6.6.1" }, "devDependencies": { - "@remix-run/server-runtime": "1.10.0-pre.3", + "@remix-run/server-runtime": "1.10.0-pre.4", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^13.3.0", "abort-controller": "^3.0.0", diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md index 305dd648076..af0aba8c645 100644 --- a/packages/remix-serve/CHANGELOG.md +++ b/packages/remix-serve/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/serve` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/express@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index b6f17bbc27c..7f5ce85f8bd 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/serve", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Production application server for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -17,7 +17,7 @@ "remix-serve": "dist/cli.js" }, "dependencies": { - "@remix-run/express": "1.10.0-pre.3", + "@remix-run/express": "1.10.0-pre.4", "compression": "^1.7.4", "express": "^4.17.1", "morgan": "^1.10.0" diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md index 94950897494..c920af9ba4a 100644 --- a/packages/remix-server-runtime/CHANGELOG.md +++ b/packages/remix-server-runtime/CHANGELOG.md @@ -1,5 +1,11 @@ # `@remix-run/server-runtime` +## 1.10.0-pre.4 + +### Patch Changes + +- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index 5e3ecc49af3..dc04489d03b 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/server-runtime", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Server runtime for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index f960e67961f..447234301de 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -1,5 +1,14 @@ # @remix-run/testing +## 1.10.0-pre.4 + +### Patch Changes + +- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) +- Updated dependencies: + - `@remix-run/react@1.10.0-pre.4` + - `@remix-run/node@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index c29687c421f..9724be0c1a0 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/testing", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Testing utilities for Remix apps", "homepage": "https://remix.run", "bugs": { @@ -16,8 +16,8 @@ "typings": "./dist/index.d.ts", "module": "./dist/esm/index.js", "dependencies": { - "@remix-run/node": "1.10.0-pre.3", - "@remix-run/react": "1.10.0-pre.3", + "@remix-run/node": "1.10.0-pre.4", + "@remix-run/react": "1.10.0-pre.4", "@remix-run/router": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/remix-vercel/CHANGELOG.md b/packages/remix-vercel/CHANGELOG.md index b5ebfeb4e3e..8e5dc77355e 100644 --- a/packages/remix-vercel/CHANGELOG.md +++ b/packages/remix-vercel/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/vercel` +## 1.10.0-pre.4 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.4` + ## 1.10.0-pre.3 ### Patch Changes diff --git a/packages/remix-vercel/package.json b/packages/remix-vercel/package.json index d575bd16193..e9108aa7576 100644 --- a/packages/remix-vercel/package.json +++ b/packages/remix-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/vercel", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "Vercel server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.3" + "@remix-run/node": "1.10.0-pre.4" }, "devDependencies": { "@types/supertest": "^2.0.10", diff --git a/packages/remix/package.json b/packages/remix/package.json index ac9a1b97fa7..89b9176c44c 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "remix", - "version": "1.10.0-pre.3", + "version": "1.10.0-pre.4", "description": "A framework for building better websites", "homepage": "https://remix.run", "bugs": { From 28ccd99739fa36a93a6f26a300f9f83baf02b896 Mon Sep 17 00:00:00 2001 From: Chance Strickland <hi@chance.dev> Date: Fri, 23 Dec 2022 12:30:50 -0800 Subject: [PATCH 16/41] add back ShouldReloadFunction type --- .changeset/rude-colts-fold.md | 5 +++++ packages/remix-react/index.tsx | 1 + packages/remix-react/routeModules.ts | 23 +++++++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 .changeset/rude-colts-fold.md diff --git a/.changeset/rude-colts-fold.md b/.changeset/rude-colts-fold.md new file mode 100644 index 00000000000..de4402a88d6 --- /dev/null +++ b/.changeset/rude-colts-fold.md @@ -0,0 +1,5 @@ +--- +"@remix-run/react": patch +--- + +Add back `ShouldReloadFunction` type with deprecated notice diff --git a/packages/remix-react/index.tsx b/packages/remix-react/index.tsx index 58a13d7524e..5af30425e82 100644 --- a/packages/remix-react/index.tsx +++ b/packages/remix-react/index.tsx @@ -62,6 +62,7 @@ export type { HtmlLinkDescriptor } from "./links"; export type { HtmlMetaDescriptor, RouteModules as UNSAFE_RouteModules, + ShouldReloadFunction, } from "./routeModules"; export { ScrollRestoration } from "./scroll-restoration"; diff --git a/packages/remix-react/routeModules.ts b/packages/remix-react/routeModules.ts index d7539a5e57b..db5496ce288 100644 --- a/packages/remix-react/routeModules.ts +++ b/packages/remix-react/routeModules.ts @@ -150,3 +150,26 @@ export async function loadRouteModule( }); } } + +/** + * @deprecated The `unstable_shouldReload` function has been removed, so this + * function will never run and route data will be revalidated on every request. + * Please update the function name to `shouldRevalidate` and use the + * `ShouldRevalidateFunction` interface. + */ +export interface ShouldReloadFunction { + (args: { + url: URL; + prevUrl: URL; + params: Params; + submission?: Submission; + }): boolean; +} + +interface Submission { + action: string; + method: string; + formData: FormData; + encType: string; + key: string; +} From 213d65138dc2ad78b107917e35556bb053a2c788 Mon Sep 17 00:00:00 2001 From: Remix Run Bot <72662859+remix-run-bot@users.noreply.github.com> Date: Fri, 23 Dec 2022 13:33:52 -0700 Subject: [PATCH 17/41] chore: Update version for release (pre) (#4955) --- .changeset/pre.json | 1 + packages/create-remix/CHANGELOG.md | 7 +++++++ packages/create-remix/package.json | 4 ++-- packages/remix-architect/CHANGELOG.md | 7 +++++++ packages/remix-architect/package.json | 4 ++-- packages/remix-cloudflare-pages/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-pages/package.json | 4 ++-- packages/remix-cloudflare-workers/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-workers/package.json | 4 ++-- packages/remix-cloudflare/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare/package.json | 4 ++-- packages/remix-deno/CHANGELOG.md | 7 +++++++ packages/remix-deno/package.json | 4 ++-- packages/remix-dev/CHANGELOG.md | 7 +++++++ packages/remix-dev/package.json | 6 +++--- packages/remix-eslint-config/CHANGELOG.md | 2 ++ packages/remix-eslint-config/package.json | 2 +- packages/remix-express/CHANGELOG.md | 7 +++++++ packages/remix-express/package.json | 4 ++-- packages/remix-netlify/CHANGELOG.md | 7 +++++++ packages/remix-netlify/package.json | 4 ++-- packages/remix-node/CHANGELOG.md | 7 +++++++ packages/remix-node/package.json | 4 ++-- packages/remix-react/CHANGELOG.md | 6 ++++++ packages/remix-react/package.json | 4 ++-- packages/remix-serve/CHANGELOG.md | 7 +++++++ packages/remix-serve/package.json | 4 ++-- packages/remix-server-runtime/CHANGELOG.md | 2 ++ packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/CHANGELOG.md | 8 ++++++++ packages/remix-testing/package.json | 6 +++--- packages/remix-vercel/CHANGELOG.md | 7 +++++++ packages/remix-vercel/package.json | 4 ++-- packages/remix/package.json | 2 +- 34 files changed, 136 insertions(+), 33 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index b1d7c067452..16a6ff6f7d5 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -31,6 +31,7 @@ "mighty-rules-drum", "quick-cats-fix", "rotten-bulldogs-reply", + "rude-colts-fold", "shaggy-garlics-confess", "silver-ducks-protect", "thirty-eels-taste" diff --git a/packages/create-remix/CHANGELOG.md b/packages/create-remix/CHANGELOG.md index c8a6d1210f1..2285827b2c6 100644 --- a/packages/create-remix/CHANGELOG.md +++ b/packages/create-remix/CHANGELOG.md @@ -1,5 +1,12 @@ # `create-remix` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/dev@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/create-remix/package.json b/packages/create-remix/package.json index ae7ca3a5fa2..e415e759b60 100644 --- a/packages/create-remix/package.json +++ b/packages/create-remix/package.json @@ -1,6 +1,6 @@ { "name": "create-remix", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Create a new Remix app", "homepage": "https://remix.run", "bugs": { @@ -17,7 +17,7 @@ "create-remix": "dist/cli.js" }, "dependencies": { - "@remix-run/dev": "1.10.0-pre.4" + "@remix-run/dev": "1.10.0-pre.5" }, "engines": { "node": ">=14" diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md index 3319594d266..9302b035eb3 100644 --- a/packages/remix-architect/CHANGELOG.md +++ b/packages/remix-architect/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/architect` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json index 2e31ed26c03..a76b8fc2180 100644 --- a/packages/remix-architect/package.json +++ b/packages/remix-architect/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/architect", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Architect server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@architect/functions": "^5.0.2", - "@remix-run/node": "1.10.0-pre.4", + "@remix-run/node": "1.10.0-pre.5", "@types/aws-lambda": "^8.10.82" }, "devDependencies": { diff --git a/packages/remix-cloudflare-pages/CHANGELOG.md b/packages/remix-cloudflare-pages/CHANGELOG.md index 7753fab0b57..1d9449a5818 100644 --- a/packages/remix-cloudflare-pages/CHANGELOG.md +++ b/packages/remix-cloudflare-pages/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-pages` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-cloudflare-pages/package.json b/packages/remix-cloudflare-pages/package.json index 9f5437398ce..d5e87f973fd 100644 --- a/packages/remix-cloudflare-pages/package.json +++ b/packages/remix-cloudflare-pages/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-pages", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Cloudflare Pages request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/cloudflare": "1.10.0-pre.4" + "@remix-run/cloudflare": "1.10.0-pre.5" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0", diff --git a/packages/remix-cloudflare-workers/CHANGELOG.md b/packages/remix-cloudflare-workers/CHANGELOG.md index f7d7d40f700..0949721c8e7 100644 --- a/packages/remix-cloudflare-workers/CHANGELOG.md +++ b/packages/remix-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-workers` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-cloudflare-workers/package.json b/packages/remix-cloudflare-workers/package.json index 617e881f344..aa4de4b22b3 100644 --- a/packages/remix-cloudflare-workers/package.json +++ b/packages/remix-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-workers", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Cloudflare worker request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -16,7 +16,7 @@ "module": "dist/esm/index.js", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/cloudflare": "1.10.0-pre.4" + "@remix-run/cloudflare": "1.10.0-pre.5" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md index 4d518dffe74..2aa97c06009 100644 --- a/packages/remix-cloudflare/CHANGELOG.md +++ b/packages/remix-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-cloudflare/package.json b/packages/remix-cloudflare/package.json index 61e79e49fdc..fc282bd3490 100644 --- a/packages/remix-cloudflare/package.json +++ b/packages/remix-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Cloudflare platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/server-runtime": "1.10.0-pre.4" + "@remix-run/server-runtime": "1.10.0-pre.5" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index fbdcabae6f0..1bf52f0ba90 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/deno` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-deno/package.json b/packages/remix-deno/package.json index 217b5b41abd..1bac9135848 100644 --- a/packages/remix-deno/package.json +++ b/packages/remix-deno/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/deno", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Deno platform abstractions for Remix", "homepage": "https://remix.run", "main": "./index.ts", @@ -15,7 +15,7 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.4", + "@remix-run/server-runtime": "1.10.0-pre.5", "mime": "^3.0.0" }, "engines": { diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md index eeda364cedf..672924ad3d9 100644 --- a/packages/remix-dev/CHANGELOG.md +++ b/packages/remix-dev/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/dev` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index 788658740d1..d83b407c434 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/dev", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Dev tools and CLI for Remix", "homepage": "https://remix.run", "bugs": { @@ -26,7 +26,7 @@ "@babel/types": "^7.20.2", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@npmcli/package-json": "^2.0.0", - "@remix-run/server-runtime": "1.10.0-pre.4", + "@remix-run/server-runtime": "1.10.0-pre.5", "arg": "^5.0.1", "cacache": "^15.0.5", "chalk": "^4.1.2", @@ -63,7 +63,7 @@ "xdm": "^2.0.0" }, "devDependencies": { - "@remix-run/serve": "1.10.0-pre.4", + "@remix-run/serve": "1.10.0-pre.5", "@types/cacache": "^15.0.0", "@types/gunzip-maybe": "^1.4.0", "@types/inquirer": "^8.2.0", diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md index 9ddb5901de9..dd8b4ef9cc2 100644 --- a/packages/remix-eslint-config/CHANGELOG.md +++ b/packages/remix-eslint-config/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/eslint-config` +## 1.10.0-pre.5 + ## 1.10.0-pre.4 ## 1.10.0-pre.3 diff --git a/packages/remix-eslint-config/package.json b/packages/remix-eslint-config/package.json index 863599060d5..1a87c2d4723 100644 --- a/packages/remix-eslint-config/package.json +++ b/packages/remix-eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/eslint-config", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "ESLint configuration for Remix projects", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-express/CHANGELOG.md b/packages/remix-express/CHANGELOG.md index 16d3e1647ea..f72695350b2 100644 --- a/packages/remix-express/CHANGELOG.md +++ b/packages/remix-express/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/express` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json index 591606a0155..9d0461174f2 100644 --- a/packages/remix-express/package.json +++ b/packages/remix-express/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/express", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Express server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.4" + "@remix-run/node": "1.10.0-pre.5" }, "devDependencies": { "@types/express": "^4.17.9", diff --git a/packages/remix-netlify/CHANGELOG.md b/packages/remix-netlify/CHANGELOG.md index 6b8249869ce..2746b59fb45 100644 --- a/packages/remix-netlify/CHANGELOG.md +++ b/packages/remix-netlify/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/netlify` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-netlify/package.json b/packages/remix-netlify/package.json index 7a083195548..67721ec0dad 100644 --- a/packages/remix-netlify/package.json +++ b/packages/remix-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/netlify", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Netlify server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.4" + "@remix-run/node": "1.10.0-pre.5" }, "devDependencies": { "@netlify/functions": "^1.0.0" diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md index b939a9a2b77..1180ef16e08 100644 --- a/packages/remix-node/CHANGELOG.md +++ b/packages/remix-node/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/node` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index 3b6462ad3c0..f30c1a5e7ea 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/node", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Node.js platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.4", + "@remix-run/server-runtime": "1.10.0-pre.5", "@remix-run/web-fetch": "^4.3.2", "@remix-run/web-file": "^3.0.2", "@remix-run/web-stream": "^1.0.3", diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md index b5283710864..087f3fd0081 100644 --- a/packages/remix-react/CHANGELOG.md +++ b/packages/remix-react/CHANGELOG.md @@ -1,5 +1,11 @@ # `@remix-run/react` +## 1.10.0-pre.5 + +### Patch Changes + +- Add back `ShouldReloadFunction` type with deprecated notice ([`28ccd9973`](https://github.com/remix-run/remix/commit/28ccd99739fa36a93a6f26a300f9f83baf02b896)) + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index eec5ff835b9..80e2e0361b2 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/react", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "React DOM bindings for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -20,7 +20,7 @@ "react-router-dom": "6.6.1" }, "devDependencies": { - "@remix-run/server-runtime": "1.10.0-pre.4", + "@remix-run/server-runtime": "1.10.0-pre.5", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^13.3.0", "abort-controller": "^3.0.0", diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md index af0aba8c645..d89a7c1f9ce 100644 --- a/packages/remix-serve/CHANGELOG.md +++ b/packages/remix-serve/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/serve` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/express@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index 7f5ce85f8bd..cbe43920ee0 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/serve", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Production application server for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -17,7 +17,7 @@ "remix-serve": "dist/cli.js" }, "dependencies": { - "@remix-run/express": "1.10.0-pre.4", + "@remix-run/express": "1.10.0-pre.5", "compression": "^1.7.4", "express": "^4.17.1", "morgan": "^1.10.0" diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md index c920af9ba4a..bc87eeaa9ba 100644 --- a/packages/remix-server-runtime/CHANGELOG.md +++ b/packages/remix-server-runtime/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/server-runtime` +## 1.10.0-pre.5 + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index dc04489d03b..a86cfa55cb7 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/server-runtime", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Server runtime for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index 447234301de..b12df3b25c3 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -1,5 +1,13 @@ # @remix-run/testing +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/react@1.10.0-pre.5` + - `@remix-run/node@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index 9724be0c1a0..de584e94b95 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/testing", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Testing utilities for Remix apps", "homepage": "https://remix.run", "bugs": { @@ -16,8 +16,8 @@ "typings": "./dist/index.d.ts", "module": "./dist/esm/index.js", "dependencies": { - "@remix-run/node": "1.10.0-pre.4", - "@remix-run/react": "1.10.0-pre.4", + "@remix-run/node": "1.10.0-pre.5", + "@remix-run/react": "1.10.0-pre.5", "@remix-run/router": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/remix-vercel/CHANGELOG.md b/packages/remix-vercel/CHANGELOG.md index 8e5dc77355e..588ce73e2e1 100644 --- a/packages/remix-vercel/CHANGELOG.md +++ b/packages/remix-vercel/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/vercel` +## 1.10.0-pre.5 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.5` + ## 1.10.0-pre.4 ### Patch Changes diff --git a/packages/remix-vercel/package.json b/packages/remix-vercel/package.json index e9108aa7576..8f75bd26e7d 100644 --- a/packages/remix-vercel/package.json +++ b/packages/remix-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/vercel", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "Vercel server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.4" + "@remix-run/node": "1.10.0-pre.5" }, "devDependencies": { "@types/supertest": "^2.0.10", diff --git a/packages/remix/package.json b/packages/remix/package.json index 89b9176c44c..d9aaa42e099 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "remix", - "version": "1.10.0-pre.4", + "version": "1.10.0-pre.5", "description": "A framework for building better websites", "homepage": "https://remix.run", "bugs": { From 6ac858b0d832cf5c4382650fcc93e8b15a798567 Mon Sep 17 00:00:00 2001 From: Logan McAnsh <logan@mcan.sh> Date: Tue, 3 Jan 2023 14:50:18 -0500 Subject: [PATCH 18/41] ci(nightly): revert to comparing sha instead of checking for changes against dev (#4966) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit changed to check against changes to dev here https://github.com/remix-run/remix/pull/4072/files#diff-0d5658b415099a82c11c03a06ca4ec765b4003a1f4b2f3f1943980a882cf8aa6, but that causes a new nightly every day as we dont ever compare against the previous nightly 😅 closes #4965 (cherry picked from commit e40a2a7665deb6bb7d604709ed79d42d9b0460c9) --- .github/workflows/nightly.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 695880b1efc..c61a9941601 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -53,19 +53,18 @@ jobs: # get latest nightly tag LATEST_NIGHTLY_TAG=$(git tag -l v0.0.0-nightly-\* --sort=-committerdate | head -n 1) - # get changes since last nightly - CHANGES=$(git diff --name-only $LATEST_NIGHTLY_TAG..dev -- ./packages/ -- ':!packages/**/package.json') - - # check if there are changes to ./packages - if [[ -n $CHANGES ]]; then + # check if last commit to dev starts would be the nightly tag we're about to create (minus the date) + # if it is, we'll skip the nightly creation + # if not, we'll create a new nightly tag + if [[ ${LATEST_NIGHTLY_TAG} == v0.0.0-nightly-${SHORT_SHA}-* ]]; then + echo "🛑 Latest nightly tag is the same as the latest commit sha, skipping nightly release" + else # yyyyMMdd format (e.g. 20221207) DATE=$(date '+%Y%m%d') # v0.0.0-nightly-<short sha>-<date> NEXT_VERSION=0.0.0-nightly-${SHORT_SHA}-${DATE} # set output so it can be used in other jobs echo "NEXT_VERSION=${NEXT_VERSION}" >> $GITHUB_OUTPUT - else - echo "🛑 no changes since last nightly, skipping..." fi - name: ⤴️ Update version From 768db367280c9f6f6c8d92e1e1675516a7c4f793 Mon Sep 17 00:00:00 2001 From: Leo Singer <leo.p.singer@nasa.gov> Date: Tue, 3 Jan 2023 21:11:04 +0100 Subject: [PATCH 19/41] refactor(remix-architect): use `@architect/functions`' built-in types (#4898) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(deps): use @architect/functions built-in types As of @architect/functions@5.2.0, types are included in the package itself and there is no longer a need for @types/architect__functions. * chore: update `yarn.lock` * Create modern-pumas-hide.md Co-authored-by: Michaël De Boey <info@michaeldeboey.be> Co-authored-by: Logan McAnsh <logan@mcan.sh> --- .changeset/modern-pumas-hide.md | 6 +++++ packages/remix-architect/package.json | 3 +-- .../sessions/arcTableSessionStorage.ts | 10 ++++--- yarn.lock | 26 ++++++++----------- 4 files changed, 25 insertions(+), 20 deletions(-) create mode 100644 .changeset/modern-pumas-hide.md diff --git a/.changeset/modern-pumas-hide.md b/.changeset/modern-pumas-hide.md new file mode 100644 index 00000000000..cd11003ddae --- /dev/null +++ b/.changeset/modern-pumas-hide.md @@ -0,0 +1,6 @@ +--- +"remix": patch +"@remix-run/architect": patch +--- + +use `@architect/functions`' built-in types diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json index 2d2bd7beb95..2162cadf707 100644 --- a/packages/remix-architect/package.json +++ b/packages/remix-architect/package.json @@ -14,12 +14,11 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@architect/functions": "^5.0.2", + "@architect/functions": "^5.2.0", "@remix-run/node": "1.9.0", "@types/aws-lambda": "^8.10.82" }, "devDependencies": { - "@types/architect__functions": "^3.13.6", "@types/lambda-tester": "^3.6.1", "lambda-tester": "^4.0.1" }, diff --git a/packages/remix-architect/sessions/arcTableSessionStorage.ts b/packages/remix-architect/sessions/arcTableSessionStorage.ts index a91f20245df..9c2909886e9 100644 --- a/packages/remix-architect/sessions/arcTableSessionStorage.ts +++ b/packages/remix-architect/sessions/arcTableSessionStorage.ts @@ -1,8 +1,12 @@ import * as crypto from "crypto"; -import type { SessionStorage, SessionIdStorageStrategy } from "@remix-run/node"; +import type { + SessionData, + SessionStorage, + SessionIdStorageStrategy, +} from "@remix-run/node"; import { createSessionStorage } from "@remix-run/node"; import arc from "@architect/functions"; -import type { ArcTable } from "@architect/functions/tables"; +import type { ArcTable } from "@architect/functions/types/tables"; interface ArcTableSessionStorageOptions { /** @@ -15,7 +19,7 @@ interface ArcTableSessionStorageOptions { * The table used to store sessions, or its name as it appears in your * project's app.arc file. */ - table: ArcTable | string; + table: ArcTable<SessionData> | string; /** * The name of the DynamoDB attribute used to store the session ID. diff --git a/yarn.lock b/yarn.lock index d8b2b1eb8a1..c184e8d82aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,12 +9,12 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" -"@architect/functions@^5.0.2": - version "5.0.3" - resolved "https://registry.npmjs.org/@architect/functions/-/functions-5.0.3.tgz" - integrity sha512-C9+yqNAthyhXfhKl0BxLabNlbLo3ReefN598pr7OidMXU/wkSjR72xlpBmr/pnnZYGlJ8+yNr9OxU99d4S/hZQ== +"@architect/functions@^5.2.0": + version "5.3.3" + resolved "https://registry.npmjs.org/@architect/functions/-/functions-5.3.3.tgz#b70d20c723e62dd984da90b23a51495ebbdc551e" + integrity sha512-q9ePtpw7SIl14B0KFIJGm4StL6jOWWYgGpD1HR7zkTKKiUIL/W0tkrAZnBhU8WPXRHPmpf5BcEjIXHQKyvz9Hg== dependencies: - cookie "^0.4.2" + cookie "^0.5.0" cookie-signature "^1.2.0" csrf "^3.1.0" node-webtokens "^1.0.4" @@ -2399,15 +2399,6 @@ dependencies: "@types/estree" "*" -"@types/architect__functions@^3.13.6": - version "3.13.6" - resolved "https://registry.npmjs.org/@types/architect__functions/-/architect__functions-3.13.6.tgz" - integrity sha512-1XggtRqhJ7Hy47gAg3qcPZMSDeJuQNp3obL5OJEVt2oo+8CsfU4vk1GU385AHs/xkBGOp1cfgKcDTyBrDbqJdA== - dependencies: - "@types/aws-lambda" "*" - "@types/express" "*" - aws-sdk "^2.820.0" - "@types/aria-query@^4.2.0": version "4.2.2" resolved "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz" @@ -3804,7 +3795,7 @@ available-typed-arrays@^1.0.5: resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== -aws-sdk@^2.1055.0, aws-sdk@^2.820.0: +aws-sdk@^2.1055.0: version "2.1069.0" resolved "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1069.0.tgz" integrity sha512-AF7/5JotrVd8g/D3WWHgQto+IryB1V7iudIYm+H+qxmkGOU3xvL63ChhEoLTY/CxuK/diayg0oWILEsXUn3dfw== @@ -4703,6 +4694,11 @@ cookie@0.4.2, cookie@^0.4.1, cookie@^0.4.2: resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +cookie@^0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + cookiejar@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz" From 3d58b0ac62436278a03b005b3b624c77dba37c94 Mon Sep 17 00:00:00 2001 From: Mark Dalgleish <mark.john.dalgleish@gmail.com> Date: Wed, 4 Jan 2023 11:10:22 +1100 Subject: [PATCH 20/41] feat: add CSS Modules support (#4852) Co-authored-by: Chance Strickland <hi@chance.dev> --- .changeset/little-avocados-fetch.md | 9 + docs/guides/migrating-react-router-app.md | 5 +- docs/guides/styling.md | 68 ++ integration/css-modules-test.ts | 694 ++++++++++++++++++ .../deterministic-build-output-test.ts | 40 +- package.json | 1 + packages/remix-css-bundle/README.md | 9 + packages/remix-css-bundle/browser.ts | 5 + packages/remix-css-bundle/package.json | 25 + packages/remix-css-bundle/rollup.config.js | 71 ++ packages/remix-css-bundle/server.ts | 3 + packages/remix-css-bundle/tsconfig.json | 18 + .../remix-dev/__tests__/readConfig-test.ts | 2 + packages/remix-dev/assets-manifest.d.ts | 6 + packages/remix-dev/compiler/assets.ts | 18 +- packages/remix-dev/compiler/compileBrowser.ts | 170 ++++- packages/remix-dev/compiler/compilerServer.ts | 22 + .../plugins/cssBundleEntryModulePlugin.ts | 43 ++ .../compiler/plugins/cssModulesPlugin.ts | 122 +++ .../plugins/serverBareModulesPlugin.ts | 5 + packages/remix-dev/config.ts | 2 + packages/remix-dev/index.ts | 1 + packages/remix-dev/modules.ts | 4 + packages/remix-dev/package.json | 3 + packages/remix-react/entry.ts | 1 + packages/remix-server-runtime/entry.ts | 1 + packages/remix-testing/create-remix-stub.tsx | 1 + scripts/publish.js | 1 + scripts/utils.js | 9 +- tsconfig.json | 1 + yarn.lock | 113 ++- 31 files changed, 1434 insertions(+), 39 deletions(-) create mode 100644 .changeset/little-avocados-fetch.md create mode 100644 integration/css-modules-test.ts create mode 100644 packages/remix-css-bundle/README.md create mode 100644 packages/remix-css-bundle/browser.ts create mode 100644 packages/remix-css-bundle/package.json create mode 100644 packages/remix-css-bundle/rollup.config.js create mode 100644 packages/remix-css-bundle/server.ts create mode 100644 packages/remix-css-bundle/tsconfig.json create mode 100644 packages/remix-dev/assets-manifest.d.ts create mode 100644 packages/remix-dev/compiler/plugins/cssBundleEntryModulePlugin.ts create mode 100644 packages/remix-dev/compiler/plugins/cssModulesPlugin.ts diff --git a/.changeset/little-avocados-fetch.md b/.changeset/little-avocados-fetch.md new file mode 100644 index 00000000000..a090ecb9575 --- /dev/null +++ b/.changeset/little-avocados-fetch.md @@ -0,0 +1,9 @@ +--- +"@remix-run/css-bundle": minor +"@remix-run/dev": minor +"@remix-run/react": minor +"@remix-run/server-runtime": minor +"@remix-run/testing": minor +--- + +Add unstable support for CSS Modules via `future.unstable_cssModules` feature flag diff --git a/docs/guides/migrating-react-router-app.md b/docs/guides/migrating-react-router-app.md index f1ce489c32b..c2240325978 100644 --- a/docs/guides/migrating-react-router-app.md +++ b/docs/guides/migrating-react-router-app.md @@ -492,7 +492,7 @@ The answer to all of these questions is up to your bundler, _not you_. We think **Note:** Remix does not currently support CSS processing directly. If you use preprocessors like Sass, Less, or PostCSS, you can run those as a separate process in development. -We also do not yet support CSS Modules, as that requires compiler integration and current approaches are not aligned with our design philosophy. We are actively working on a solution and plan to have an API for CSS Modules very soon. +We do process [CSS Modules][css-modules], but support is currently [opt-in behind a feature flag][css-modules]. </docs-info> @@ -642,4 +642,5 @@ Now then, go off and _remix your app_. We think you'll like what you build along [routing-in-remix]: ./routing [styling-in-remix]: ./styling [frequently-asked-questions]: ../pages/faq -[common-gotchas]: ../pages/gotchas +[common-gotchas]: ../pages/currently +[css-modules]: ./styling#css-modules diff --git a/docs/guides/styling.md b/docs/guides/styling.md index 4d817c3a0af..a7e362b7950 100644 --- a/docs/guides/styling.md +++ b/docs/guides/styling.md @@ -766,6 +766,73 @@ Other CSS-in-JS libraries will have a similar setup. If you've got a CSS framewo NOTE: You may run into hydration warnings when using Styled Components. Hopefully [this issue][styled-components-issue] will be fixed soon. +## CSS Modules + +<docs-warning>This feature is unstable and currently only available behind a feature flag. We're confident in the use cases it solves but the API and implementation may change in the future.</docs-warning> + +To enable [CSS Modules], set the `future.unstable_cssModules` feature flag in `remix.config.js`. + +```js filename=remix.config.js +/** @type {import('@remix-run/dev').AppConfig} */ +module.exports = { + future: { + unstable_cssModules: true, + }, + // ... +}; +``` + +With this feature flag enabled, the Remix compiler will now generate a single CSS file containing all CSS Modules styles in your application. Note that any [regular stylesheet imports](#regular-stylesheets) will remain as separate files. + +Unlike many other tools in the React ecosystem, we do not insert the CSS bundle into the page automatically. Instead, we ensure that you always have control over the link tags on your page. This lets you decide where the CSS file is loaded relative to other stylesheets in your app. + +To get access to the CSS bundle, first install the `@remix-run/css-bundle` package. + +```sh +npm install @remix-run/css-bundle +``` + +Then, import `cssBundleHref` and add it to a link descriptor—most likely in `root.tsx` so that it applies to your entire application. + +```tsx filename=root.tsx lines=[2,6] +import type { LinksFunction } from "@remix-run/node"; // or cloudflare/deno +import { cssBundleHref } from "@remix-run/css-bundle"; + +export const links: LinksFunction = () => { + return [ + { rel: "stylesheet", href: cssBundleHref }, + // ... + ]; +}; +``` + +You're all set! You can now opt into CSS Modules via the `.module.css` file name convention. For example: + +```css filename=app/components/button/styles.module.css +.root { + border: solid 1px; + background: white; + color: #454545; +} +``` + +```tsx filename=app/components/button/index.js lines=[1,9] +import styles from "./styles.module.css"; + +export const Button = React.forwardRef( + ({ children, ...props }, ref) => { + return ( + <button + {...props} + ref={ref} + className={styles.root} + /> + ); + } +); +Button.displayName = "Button"; +``` + [custom-properties]: https://developer.mozilla.org/en-US/docs/Web/CSS/--* [link]: ../components/link [route-module-links]: ../route/links @@ -774,3 +841,4 @@ NOTE: You may run into hydration warnings when using Styled Components. Hopefull [styled-components-issue]: https://github.com/styled-components/styled-components/issues/3660 [tailwind]: https://tailwindcss.com [tailwind-intelli-sense-extension]: https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss +[css modules]: https://github.com/css-modules/css-modules diff --git a/integration/css-modules-test.ts b/integration/css-modules-test.ts new file mode 100644 index 00000000000..5cc8a2d1c14 --- /dev/null +++ b/integration/css-modules-test.ts @@ -0,0 +1,694 @@ +import { test, expect } from "@playwright/test"; +import globby from "globby"; +import fse from "fs-extra"; + +import { PlaywrightFixture } from "./helpers/playwright-fixture"; +import type { Fixture, AppFixture } from "./helpers/create-fixture"; +import { + createAppFixture, + createFixture, + css, + js, +} from "./helpers/create-fixture"; + +const TEST_PADDING_VALUE = "20px"; + +test.describe("CSS Modules", () => { + let fixture: Fixture; + let appFixture: AppFixture; + + test.beforeAll(async () => { + fixture = await createFixture({ + files: { + "remix.config.js": js` + module.exports = { + future: { + unstable_cssModules: true, + }, + }; + `, + "app/root.jsx": js` + import { Links, Outlet } from "@remix-run/react"; + import { cssBundleHref } from "@remix-run/css-bundle"; + export function links() { + return [{ rel: "stylesheet", href: cssBundleHref }]; + } + export default function Root() { + return ( + <html> + <head> + <Links /> + </head> + <body> + <Outlet /> + </body> + </html> + ) + } + `, + ...basicStylesFixture(), + ...globalSelectorsFixture(), + ...nestedGlobalSelectorsFixture(), + ...localClassCompositionFixture(), + ...importedClassCompositionFixture(), + ...rootRelativeImportedClassCompositionFixture(), + ...globalClassCompositionFixture(), + ...localValueFixture(), + ...importedValueFixture(), + ...rootRelativeImportedValueFixture(), + ...imageUrlsFixture(), + ...rootRelativeImageUrlsFixture(), + ...clientEntrySideEffectsFixture(), + ...deduplicatedCssFixture(), + ...uniqueClassNamesFixture(), + }, + }); + appFixture = await createAppFixture(fixture); + }); + + test.afterAll(async () => { + await appFixture.close(); + }); + + let basicStylesFixture = () => ({ + "app/routes/basic-styles-test.jsx": js` + import { Test } from "~/test-components/basic-styles"; + export default function() { + return <Test />; + } + `, + "app/test-components/basic-styles/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="basic-styles" className={styles.root}> + Basic styles test + </div> + ); + } + `, + "app/test-components/basic-styles/styles.module.css": css` + .root { + background: peachpuff; + padding: ${TEST_PADDING_VALUE}; + } + `, + }); + test("basic styles", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/basic-styles-test"); + let locator = await page.locator("[data-testid='basic-styles']"); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let globalSelectorsFixture = () => ({ + "app/routes/global-selector-test.jsx": js` + import { Test } from "~/test-components/global-selector"; + export default function() { + return <Test />; + } + `, + "app/test-components/global-selector/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div className="global_container"> + <div data-testid="global-selector" className={styles.root}> + Nested global selector test + </div> + </div> + ); + } + `, + "app/test-components/global-selector/styles.module.css": css` + :global(.global_container) .root { + background: peachpuff; + padding: ${TEST_PADDING_VALUE}; + } + `, + }); + test("global selectors", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/global-selector-test"); + let locator = await page.locator("[data-testid='global-selector']"); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let nestedGlobalSelectorsFixture = () => ({ + "app/routes/nested-global-selector-test.jsx": js` + import { Test } from "~/test-components/nested-global-selector"; + export default function() { + return <Test />; + } + `, + "app/test-components/nested-global-selector/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div className="global_container"> + <div data-testid="nested-global-selector" className={styles.root}> + Nested global selector test + </div> + </div> + ); + } + `, + "app/test-components/nested-global-selector/styles.module.css": css` + :global .global_container :local .root { + background: peachpuff; + padding: ${TEST_PADDING_VALUE}; + } + `, + }); + test("nested global selectors", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/nested-global-selector-test"); + let locator = await page.locator("[data-testid='nested-global-selector']"); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let localClassCompositionFixture = () => ({ + "app/routes/local-class-composition-test.jsx": js` + import { Test } from "~/test-components/local-class-composition"; + export default function() { + return <Test />; + } + `, + "app/test-components/local-class-composition/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="local-class-composition" className={styles.root}> + Local composes test + </div> + ); + } + `, + "app/test-components/local-class-composition/styles.module.css": css` + .padding { + padding: ${TEST_PADDING_VALUE}; + } + .root { + background: peachpuff; + composes: padding; + } + `, + }); + test("local class composition", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/local-class-composition-test"); + let locator = await page.locator("[data-testid='local-class-composition']"); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let importedClassCompositionFixture = () => ({ + "app/routes/imported-class-composition-test.jsx": js` + import { Test } from "~/test-components/imported-class-composition"; + export default function() { + return <Test />; + } + `, + "app/test-components/imported-class-composition/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="imported-class-composition" className={styles.root}> + Imported class composition test + </div> + ); + } + `, + "app/test-components/imported-class-composition/styles.module.css": css` + .root { + background: peachpuff; + composes: padding from "./import.module.css"; + } + `, + "app/test-components/imported-class-composition/import.module.css": css` + .padding { + padding: ${TEST_PADDING_VALUE}; + } + `, + }); + test("imported class composition", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/imported-class-composition-test"); + let locator = await page.locator( + "[data-testid='imported-class-composition']" + ); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let rootRelativeImportedClassCompositionFixture = () => ({ + "app/routes/root-relative-imported-class-composition-test.jsx": js` + import { Test } from "~/test-components/root-relative-imported-class-composition"; + export default function() { + return <Test />; + } + `, + "app/test-components/root-relative-imported-class-composition/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="root-relative-imported-class-composition" className={styles.root}> + Root relative imported class composition test + </div> + ); + } + `, + "app/test-components/root-relative-imported-class-composition/styles.module.css": css` + .root { + background: peachpuff; + composes: padding from "~/test-components/root-relative-imported-class-composition/import.module.css"; + } + `, + "app/test-components/root-relative-imported-class-composition/import.module.css": css` + .padding { + padding: ${TEST_PADDING_VALUE}; + } + `, + }); + test("root relative imported class composition", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/root-relative-imported-class-composition-test"); + let locator = await page.locator( + "[data-testid='root-relative-imported-class-composition']" + ); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let globalClassCompositionFixture = () => ({ + "app/routes/global-class-composition-test.jsx": js` + import { Test } from "~/test-components/global-class-composition"; + export default function() { + return <Test />; + } + `, + "app/test-components/global-class-composition/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="global-class-composition" className={styles.root}> + Global class composition test + </div> + ); + } + `, + "app/test-components/global-class-composition/styles.module.css": css` + .root { + background: peachpuff; + composes: padding from global; + } + :global(.padding) { + padding: ${TEST_PADDING_VALUE}; + } + `, + }); + test("global class composition", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/global-class-composition-test"); + let locator = await page.locator( + "[data-testid='global-class-composition']" + ); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let localValueFixture = () => ({ + "app/routes/local-value-test.jsx": js` + import { Test } from "~/test-components/local-value"; + export default function() { + return <Test />; + } + `, + "app/test-components/local-value/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="local-value" className={styles.root}> + Local @value test + </div> + ); + } + `, + "app/test-components/local-value/styles.module.css": css` + @value padding: ${TEST_PADDING_VALUE}; + .root { + background: peachpuff; + padding: padding; + } + `, + }); + test("local @value", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/local-value-test"); + let locator = await page.locator("[data-testid='local-value']"); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let importedValueFixture = () => ({ + "app/routes/imported-value-test.jsx": js` + import { Test } from "~/test-components/imported-value"; + export default function() { + return <Test />; + } + `, + "app/test-components/imported-value/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="imported-value" className={styles.root}> + Imported @value test + </div> + ); + } + `, + "app/test-components/imported-value/styles.module.css": css` + @value padding from "./values.module.css"; + .root { + background: peachpuff; + padding: padding; + } + `, + "app/test-components/imported-value/values.module.css": css` + @value padding: ${TEST_PADDING_VALUE}; + `, + }); + test("imported @value", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/imported-value-test"); + let locator = await page.locator("[data-testid='imported-value']"); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let rootRelativeImportedValueFixture = () => ({ + "app/routes/root-relative-imported-value-test.jsx": js` + import { Test } from "~/test-components/root-relative-imported-value"; + export default function() { + return <Test />; + } + `, + "app/test-components/root-relative-imported-value/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="root-relative-imported-value" className={styles.root}> + Root relative imported @value test + </div> + ); + } + `, + "app/test-components/root-relative-imported-value/styles.module.css": css` + @value padding from "~/test-components/root-relative-imported-value/values.module.css"; + .root { + background: peachpuff; + padding: padding; + } + `, + "app/test-components/root-relative-imported-value/values.module.css": css` + @value padding: ${TEST_PADDING_VALUE}; + `, + }); + test("root relative imported @value", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/root-relative-imported-value-test"); + let locator = await page.locator( + "[data-testid='root-relative-imported-value']" + ); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let imageUrlsFixture = () => ({ + "app/routes/image-urls-test.jsx": js` + import { Test } from "~/test-components/image-urls"; + export default function() { + return <Test />; + } + `, + "app/test-components/image-urls/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="image-urls" className={styles.root}> + Image URLs test + </div> + ); + } + `, + "app/test-components/image-urls/styles.module.css": css` + .root { + background-color: peachpuff; + background-image: url(./image.svg); + padding: ${TEST_PADDING_VALUE}; + } + `, + "app/test-components/image-urls/image.svg": ` + <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <circle cx="50" cy="50" r="50" fill="coral" /> + </svg> + `, + }); + test("image URLs", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/image-urls-test"); + let locator = await page.locator("[data-testid='image-urls']"); + let backgroundImage = await locator.evaluate( + (element) => window.getComputedStyle(element).backgroundImage + ); + expect(backgroundImage).toContain(".svg"); + }); + + let rootRelativeImageUrlsFixture = () => ({ + "app/routes/root-relative-image-urls-test.jsx": js` + import { Test } from "~/test-components/root-relative-image-urls"; + export default function() { + return <Test />; + } + `, + "app/test-components/root-relative-image-urls/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="root-relative-image-urls" className={styles.root}> + Root relative image URLs test + </div> + ); + } + `, + "app/test-components/root-relative-image-urls/styles.module.css": css` + .root { + background-color: peachpuff; + background-image: url(~/test-components/root-relative-image-urls/image.svg); + padding: ${TEST_PADDING_VALUE}; + } + `, + "app/test-components/root-relative-image-urls/image.svg": ` + <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <circle cx="50" cy="50" r="50" fill="coral" /> + </svg> + `, + }); + test("root relative image URLs", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/root-relative-image-urls-test"); + let locator = await page.locator( + "[data-testid='root-relative-image-urls']" + ); + let backgroundImage = await locator.evaluate( + (element) => window.getComputedStyle(element).backgroundImage + ); + expect(backgroundImage).toContain(".svg"); + }); + + let clientEntrySideEffectsFixture = () => ({ + "app/entry.client.jsx": js` + import { RemixBrowser } from "@remix-run/react"; + import { startTransition, StrictMode } from "react"; + import { hydrateRoot } from "react-dom/client"; + import "./entry.client.module.css"; + const hydrate = () => { + startTransition(() => { + hydrateRoot( + document, + <StrictMode> + <RemixBrowser /> + </StrictMode> + ); + }); + }; + if (window.requestIdleCallback) { + window.requestIdleCallback(hydrate); + } else { + // Safari doesn't support requestIdleCallback + // https://caniuse.com/requestidlecallback + window.setTimeout(hydrate, 1); + } + `, + "app/entry.client.module.css": css` + :global(.clientEntry) { + padding: ${TEST_PADDING_VALUE}; + } + `, + "app/routes/client-entry-side-effects-test.jsx": js` + export default function() { + return ( + <div data-testid="client-entry-side-effects" className="clientEntry"> + Client entry side effects test + </div> + ); + } + `, + }); + test("client entry side effects", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/client-entry-side-effects-test"); + let locator = await page.locator( + "[data-testid='client-entry-side-effects']" + ); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let deduplicatedCssFixture = () => ({ + "app/routes/deduplicated-css-test.jsx": js` + import { Test } from "~/test-components/deduplicated-css"; + export default function() { + return <Test />; + } + `, + "app/test-components/deduplicated-css/index.jsx": js` + import styles_1 from "./styles_1.module.css"; + import styles_2 from "./styles_2.module.css"; + import sharedStyles from "./shared.module.css"; + export function Test() { + return ( + <div + data-testid="deduplicated-css" + data-deduplicated-class-name={sharedStyles.deduplicated} + className={[ + styles_1.root, + styles_2.root, + ].join(' ')} + > + Deduplicated CSS test + </div> + ); + } + `, + "app/test-components/deduplicated-css/styles_1.module.css": css` + .root { + composes: deduplicated from "./shared.module.css"; + } + `, + "app/test-components/deduplicated-css/styles_2.module.css": css` + .root { + composes: deduplicated from "./shared.module.css"; + } + `, + "app/test-components/deduplicated-css/shared.module.css": css` + .deduplicated { + background: peachpuff; + } + `, + }); + test("deduplicated CSS", async ({ page }) => { + // Using `composes: xxx from "./another.module.css"` leads + // to duplicate CSS in the final bundle prior to optimization. + // This test ensures the optimization does in fact happen, + // otherwise it could lead to very large CSS files if this + // feature is used heavily. + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/deduplicated-css-test"); + + let element = await app.getElement("[data-testid='deduplicated-css']"); + let deduplicatedClassName = element.data().deduplicatedClassName; + + if (typeof deduplicatedClassName !== "string") { + throw new Error( + "Couldn't find data-deduplicated-class-name value on test element" + ); + } + + let [cssBundlePath] = await globby(["public/build/css-bundle-*.css"], { + cwd: fixture.projectDir, + absolute: true, + }); + + if (!cssBundlePath) { + throw new Error("Couldn't find CSS bundle"); + } + + let cssBundleContents = await fse.readFile(cssBundlePath, "utf8"); + + let deduplicatedClassNameUsages = cssBundleContents.match( + new RegExp(`\\.${deduplicatedClassName}`, "g") + ); + + expect(deduplicatedClassNameUsages?.length).toBe(1); + }); + + let uniqueClassNamesFixture = () => ({ + "app/routes/unique-class-names-test.jsx": js` + import { Test } from "~/test-components/unique-class-names"; + export default function() { + return <Test />; + } + `, + "app/test-components/unique-class-names/index.jsx": js` + import styles from "./styles.module.css"; + export function Test() { + return ( + <div data-testid="unique-class-names" className={[styles.background, styles.color].join(' ')}> + Unique class names test + </div> + ); + } + `, + "app/test-components/unique-class-names/styles.module.css": css` + .background { + background: peachpuff; + } + .color { + color: coral; + } + `, + }); + test("unique class names", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/unique-class-names-test"); + let element = await app.getElement("[data-testid='unique-class-names']"); + let classNames = element.attr("class")?.split(" "); + expect(new Set(classNames).size).toBe(2); + }); +}); diff --git a/integration/deterministic-build-output-test.ts b/integration/deterministic-build-output-test.ts index b57e25232c6..e0b6fe54d74 100644 --- a/integration/deterministic-build-output-test.ts +++ b/integration/deterministic-build-output-test.ts @@ -3,7 +3,7 @@ import globby from "globby"; import fs from "fs"; import path from "path"; -import { createFixtureProject, js } from "./helpers/create-fixture"; +import { createFixtureProject, js, css } from "./helpers/create-fixture"; test("builds deterministically under different paths", async () => { // This test validates various flavors of remix virtual modules to ensure @@ -15,6 +15,8 @@ test("builds deterministically under different paths", async () => { // Virtual modules tested: // * browserRouteModulesPlugin (implicitly tested by root route) + // * cssEntryModulePlugin (implicitly tested by build) + // * cssModulesPlugin (via app/routes/foo.tsx' CSS Modules import) // * emptyModulesPlugin (via app/routes/foo.tsx' server import) // * mdx (via app/routes/index.mdx) // * serverAssetsManifestPlugin (implicitly tested by build) @@ -22,12 +24,42 @@ test("builds deterministically under different paths", async () => { // * serverRouteModulesPlugin (implicitly tested by build) let init = { files: { + "remix.config.js": js` + module.exports = { + future: { + unstable_cssModules: true, + }, + }; + `, "app/routes/index.mdx": "# hello world", "app/routes/foo.tsx": js` export * from "~/foo/bar.server"; - export default () => "YAY"; + import styles from "~/styles/foo.module.css"; + export default () => <div className={styles.foo}>YAY</div>; `, "app/foo/bar.server.ts": "export const meta = () => []", + "app/styles/foo.module.css": css` + .foo { + background-image: url(~/images/foo.svg); + composes: bar from "~/styles/bar.module.css"; + composes: baz from "./baz.module.css"; + } + `, + "app/styles/bar.module.css": css` + .bar { + background-color: peachpuff; + } + `, + "app/styles/baz.module.css": css` + .baz { + color: coral; + } + `, + "app/images/foo.svg": ` + <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <circle cx="50" cy="50" r="50" fill="coral" /> + </svg> + `, }, }; let dir1 = await createFixtureProject(init); @@ -35,11 +67,11 @@ test("builds deterministically under different paths", async () => { expect(dir1).not.toEqual(dir2); - let files1 = await globby(["build/index.js", "public/build/**/*.js"], { + let files1 = await globby(["build/index.js", "public/build/**/*.{js,css}"], { cwd: dir1, }); files1 = files1.sort(); - let files2 = await globby(["build/index.js", "public/build/**/*.js"], { + let files2 = await globby(["build/index.js", "public/build/**/*.{js,css}"], { cwd: dir2, }); files2 = files2.sort(); diff --git a/package.json b/package.json index 071dac997ff..bc1b981a393 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "packages/remix-cloudflare", "packages/remix-cloudflare-pages", "packages/remix-cloudflare-workers", + "packages/remix-css-bundle", "packages/remix-deno", "packages/remix-dev", "packages/remix-eslint-config", diff --git a/packages/remix-css-bundle/README.md b/packages/remix-css-bundle/README.md new file mode 100644 index 00000000000..877d476cd6e --- /dev/null +++ b/packages/remix-css-bundle/README.md @@ -0,0 +1,9 @@ +# @remix-run/css-bundle + +This package provides access to the `href` of the generated CSS file when using CSS bundling features in [Remix](https://remix.run). + +```sh +npm install @remix-run/css-bundle +``` + +For more, see the [Remix docs](https://remix.run/docs/). diff --git a/packages/remix-css-bundle/browser.ts b/packages/remix-css-bundle/browser.ts new file mode 100644 index 00000000000..e17c8ce3d10 --- /dev/null +++ b/packages/remix-css-bundle/browser.ts @@ -0,0 +1,5 @@ +import type { AssetsManifest } from "@remix-run/dev/assets-manifest"; + +let assetsManifest: AssetsManifest = (window as any).__remixManifest; + +export const cssBundleHref = assetsManifest.cssBundleHref; diff --git a/packages/remix-css-bundle/package.json b/packages/remix-css-bundle/package.json new file mode 100644 index 00000000000..360fa7a6d07 --- /dev/null +++ b/packages/remix-css-bundle/package.json @@ -0,0 +1,25 @@ +{ + "name": "@remix-run/css-bundle", + "version": "1.9.0", + "description": "CSS bundle href when using CSS bundling features in Remix", + "homepage": "https://remix.run", + "bugs": { + "url": "https://github.com/remix-run/remix/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/remix-run/remix", + "directory": "packages/remix-css-bundle" + }, + "license": "MIT", + "main": "./dist/server.js", + "module": "./dist/esm/server.js", + "typings": "./dist/server.d.ts", + "browser": { + "./dist/server.js": "./dist/browser.js", + "./dist/esm/server.js": "./dist/esm/browser.js" + }, + "dependencies": { + "@remix-run/dev": "1.9.0" + } +} diff --git a/packages/remix-css-bundle/rollup.config.js b/packages/remix-css-bundle/rollup.config.js new file mode 100644 index 00000000000..d394baeca85 --- /dev/null +++ b/packages/remix-css-bundle/rollup.config.js @@ -0,0 +1,71 @@ +const path = require("path"); +const babel = require("@rollup/plugin-babel").default; +const nodeResolve = require("@rollup/plugin-node-resolve").default; +const copy = require("rollup-plugin-copy"); + +const { + copyToPlaygrounds, + createBanner, + getOutputDir, + isBareModuleId, +} = require("../../rollup.utils"); +const { name: packageName, version } = require("./package.json"); + +/** @returns {import("rollup").RollupOptions[]} */ +module.exports = function rollup() { + let sourceDir = "packages/remix-css-bundle"; + let outputDir = getOutputDir(packageName); + let outputDist = path.join(outputDir, "dist"); + + return [ + { + external(id) { + return isBareModuleId(id); + }, + input: [`${sourceDir}/browser.ts`, `${sourceDir}/server.ts`], + output: { + banner: createBanner(packageName, version), + dir: outputDist, + format: "cjs", + preserveModules: true, + exports: "named", + }, + plugins: [ + babel({ + babelHelpers: "bundled", + exclude: /node_modules/, + extensions: [".ts"], + }), + nodeResolve({ extensions: [".ts"] }), + copy({ + targets: [ + { src: `LICENSE.md`, dest: outputDir }, + { src: `${sourceDir}/package.json`, dest: outputDir }, + { src: `${sourceDir}/README.md`, dest: outputDir }, + ], + }), + ], + }, + { + external(id) { + return isBareModuleId(id); + }, + input: [`${sourceDir}/browser.ts`, `${sourceDir}/server.ts`], + output: { + banner: createBanner(packageName, version), + dir: `${outputDist}/esm`, + format: "esm", + preserveModules: true, + }, + plugins: [ + babel({ + babelHelpers: "bundled", + exclude: /node_modules/, + extensions: [".ts"], + }), + nodeResolve({ extensions: [".ts"] }), + copyToPlaygrounds(), + ], + }, + ]; +}; diff --git a/packages/remix-css-bundle/server.ts b/packages/remix-css-bundle/server.ts new file mode 100644 index 00000000000..15f996fc7d2 --- /dev/null +++ b/packages/remix-css-bundle/server.ts @@ -0,0 +1,3 @@ +import assetsManifest from "@remix-run/dev/assets-manifest"; + +export const cssBundleHref = assetsManifest.cssBundleHref; diff --git a/packages/remix-css-bundle/tsconfig.json b/packages/remix-css-bundle/tsconfig.json new file mode 100644 index 00000000000..908cd884dcf --- /dev/null +++ b/packages/remix-css-bundle/tsconfig.json @@ -0,0 +1,18 @@ +{ + "include": ["**/*.ts"], + "exclude": ["dist", "__tests__", "node_modules"], + "compilerOptions": { + "lib": ["ES2019", "DOM.Iterable"], + "target": "ES2019", + "module": "CommonJS", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "strict": true, + "declaration": true, + "emitDeclarationOnly": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "outDir": "../../build/node_modules/@remix-run/css-bundle/dist", + "rootDir": "." + } +} diff --git a/packages/remix-dev/__tests__/readConfig-test.ts b/packages/remix-dev/__tests__/readConfig-test.ts index a6cdea1f44e..2c0c77490c2 100644 --- a/packages/remix-dev/__tests__/readConfig-test.ts +++ b/packages/remix-dev/__tests__/readConfig-test.ts @@ -23,6 +23,7 @@ describe("readConfig", () => { relativeAssetsBuildDirectory: expect.any(String), tsconfigPath: expect.any(String), future: { + unstable_cssModules: expect.any(Boolean), v2_meta: expect.any(Boolean), }, }, @@ -36,6 +37,7 @@ describe("readConfig", () => { "entryClientFile": "entry.client.tsx", "entryServerFile": "entry.server.tsx", "future": Object { + "unstable_cssModules": Any<Boolean>, "v2_meta": Any<Boolean>, }, "mdx": undefined, diff --git a/packages/remix-dev/assets-manifest.d.ts b/packages/remix-dev/assets-manifest.d.ts new file mode 100644 index 00000000000..a4c114c241d --- /dev/null +++ b/packages/remix-dev/assets-manifest.d.ts @@ -0,0 +1,6 @@ +import type { AssetsManifest } from "@remix-run/dev"; + +declare const manifest: AssetsManifest; + +export type { AssetsManifest }; +export default manifest; diff --git a/packages/remix-dev/compiler/assets.ts b/packages/remix-dev/compiler/assets.ts index 60be5b6da73..3c2944590a6 100644 --- a/packages/remix-dev/compiler/assets.ts +++ b/packages/remix-dev/compiler/assets.ts @@ -31,12 +31,18 @@ export interface AssetsManifest { hasErrorBoundary: boolean; }; }; + cssBundleHref?: string; } -export async function createAssetsManifest( - config: RemixConfig, - metafile: esbuild.Metafile -): Promise<AssetsManifest> { +export async function createAssetsManifest({ + config, + metafile, + cssBundlePath, +}: { + config: RemixConfig; + metafile: esbuild.Metafile; + cssBundlePath?: string; +}): Promise<AssetsManifest> { function resolveUrl(outputPath: string): string { return createUrl( config.publicPath, @@ -115,7 +121,9 @@ export async function createAssetsManifest( optimizeRoutes(routes, entry.imports); let version = getHash(JSON.stringify({ entry, routes })).slice(0, 8); - return { version, entry, routes }; + let cssBundleHref = cssBundlePath ? resolveUrl(cssBundlePath) : undefined; + + return { version, entry, routes, cssBundleHref }; } type ImportsCache = { [routeId: string]: string[] }; diff --git a/packages/remix-dev/compiler/compileBrowser.ts b/packages/remix-dev/compiler/compileBrowser.ts index 2c4fdc4d76a..fe45679bfed 100644 --- a/packages/remix-dev/compiler/compileBrowser.ts +++ b/packages/remix-dev/compiler/compileBrowser.ts @@ -1,7 +1,10 @@ import * as path from "path"; +import * as fse from "fs-extra"; import { builtinModules as nodeBuiltins } from "module"; import * as esbuild from "esbuild"; import { NodeModulesPolyfillPlugin } from "@esbuild-plugins/node-modules-polyfill"; +import postcss from "postcss"; +import postcssDiscardDuplicates from "postcss-discard-duplicates"; import type { WriteChannel } from "../channel"; import type { RemixConfig } from "../config"; @@ -16,6 +19,11 @@ import { deprecatedRemixPackagePlugin } from "./plugins/deprecatedRemixPackagePl import { emptyModulesPlugin } from "./plugins/emptyModulesPlugin"; import { mdxPlugin } from "./plugins/mdx"; import { urlImportsPlugin } from "./plugins/urlImportsPlugin"; +import { cssModulesPlugin } from "./plugins/cssModulesPlugin"; +import { + cssBundleEntryModulePlugin, + cssBundleEntryModuleId, +} from "./plugins/cssBundleEntryModulePlugin"; import { writeFileSafe } from "./utils/fs"; import invariant from "../invariant"; @@ -59,21 +67,42 @@ const writeAssetsManifest = async ( }; const createEsbuildConfig = ( + build: "app" | "css", config: RemixConfig, options: CompileOptions ): esbuild.BuildOptions | esbuild.BuildIncremental => { - let entryPoints: esbuild.BuildOptions["entryPoints"] = { - "entry.client": path.resolve(config.appDirectory, config.entryClientFile), - }; - for (let id of Object.keys(config.routes)) { - // All route entry points are virtual modules that will be loaded by the - // browserEntryPointsPlugin. This allows us to tree-shake server-only code - // that we don't want to run in the browser (i.e. action & loader). - entryPoints[id] = config.routes[id].file + "?browser"; + let isCssBuild = build === "css"; + let entryPoints: esbuild.BuildOptions["entryPoints"]; + + if (isCssBuild) { + entryPoints = { + "css-bundle": cssBundleEntryModuleId, + }; + } else { + entryPoints = { + "entry.client": path.resolve(config.appDirectory, config.entryClientFile), + }; + + for (let id of Object.keys(config.routes)) { + // All route entry points are virtual modules that will be loaded by the + // browserEntryPointsPlugin. This allows us to tree-shake server-only code + // that we don't want to run in the browser (i.e. action & loader). + entryPoints[id] = config.routes[id].file + "?browser"; + } } let plugins: esbuild.Plugin[] = [ deprecatedRemixPackagePlugin(options.onWarning), + ...(config.future.unstable_cssModules + ? [ + ...(isCssBuild ? [cssBundleEntryModulePlugin(config)] : []), + cssModulesPlugin({ + mode: options.mode, + rootDirectory: config.rootDirectory, + outputCss: isCssBuild, + }), + ] + : []), cssFilePlugin({ mode: options.mode, rootDirectory: config.rootDirectory, @@ -94,7 +123,7 @@ const createEsbuildConfig = ( loader: loaders, bundle: true, logLevel: "silent", - splitting: true, + splitting: !isCssBuild, sourcemap: options.sourcemap, // As pointed out by https://github.com/evanw/esbuild/issues/2440, when tsconfig is set to // `undefined`, esbuild will keep looking for a tsconfig.json recursively up. This unwanted @@ -123,29 +152,118 @@ export const createBrowserCompiler = ( remixConfig: RemixConfig, options: CompileOptions ): BrowserCompiler => { - let compiler: esbuild.BuildIncremental; - let esbuildConfig = createEsbuildConfig(remixConfig, options); + let appCompiler: esbuild.BuildIncremental; + let cssCompiler: esbuild.BuildIncremental; + let compile = async (manifestChannel: WriteChannel<AssetsManifest>) => { - let metafile: esbuild.Metafile; - if (compiler === undefined) { - compiler = await esbuild.build({ - ...esbuildConfig, - metafile: true, - incremental: true, + let appBuildTask = async () => { + appCompiler = await (!appCompiler + ? esbuild.build({ + ...createEsbuildConfig("app", remixConfig, options), + metafile: true, + incremental: true, + }) + : appCompiler.rebuild()); + + invariant( + appCompiler.metafile, + "Expected app compiler metafile to be defined. This is likely a bug in Remix. Please open an issue at https://github.com/remix-run/remix/issues/new" + ); + }; + + let cssBuildTask = async () => { + if (!remixConfig.future.unstable_cssModules) { + return; + } + + // The types aren't great when combining write: false and incremental: true + // so we need to assert that it's an incremental build + cssCompiler = (await (!cssCompiler + ? esbuild.build({ + ...createEsbuildConfig("css", remixConfig, options), + metafile: true, + incremental: true, + write: false, + }) + : cssCompiler.rebuild())) as esbuild.BuildIncremental; + + invariant( + cssCompiler.metafile, + "Expected CSS compiler metafile to be defined. This is likely a bug in Remix. Please open an issue at https://github.com/remix-run/remix/issues/new" + ); + + let outputFiles = cssCompiler.outputFiles || []; + + let isCssBundleFile = ( + outputFile: esbuild.OutputFile, + extension: ".css" | ".css.map" + ): boolean => { + return ( + path.dirname(outputFile.path) === remixConfig.assetsBuildDirectory && + path.basename(outputFile.path).startsWith("css-bundle") && + outputFile.path.endsWith(extension) + ); + }; + + let cssBundleFile = outputFiles.find((outputFile) => + isCssBundleFile(outputFile, ".css") + ); + + if (!cssBundleFile) { + return; + } + + let cssBundlePath = cssBundleFile.path; + + // Get esbuild's existing CSS source map so we can pass it to PostCSS + let cssBundleSourceMap = outputFiles.find((outputFile) => + isCssBundleFile(outputFile, ".css.map") + )?.text; + + let { css, map } = await postcss([ + // We need to discard duplicate rules since "composes" + // in CSS Modules can result in duplicate styles + postcssDiscardDuplicates(), + ]).process(cssBundleFile.text, { + from: cssBundlePath, + to: cssBundlePath, + map: { + prev: cssBundleSourceMap, + inline: false, + annotation: false, + sourcesContent: true, + }, }); - invariant(compiler.metafile, "Expected metafile to be defined"); - metafile = compiler.metafile; - } else { - let rebuild = await compiler.rebuild(); - invariant(rebuild.metafile, "Expected metafile to be defined"); - metafile = rebuild.metafile; - } - let manifest = await createAssetsManifest(remixConfig, metafile); + + await fse.ensureDir(path.dirname(cssBundlePath)); + + await Promise.all([ + fse.writeFile(cssBundlePath, css), + options.mode !== "production" && map + ? fse.writeFile(`${cssBundlePath}.map`, map.toString()) // Write our updated source map rather than esbuild's + : null, + ]); + + // Return the CSS bundle path so we can use it to generate the manifest + return cssBundlePath; + }; + + let [cssBundlePath] = await Promise.all([cssBuildTask(), appBuildTask()]); + + let manifest = await createAssetsManifest({ + config: remixConfig, + metafile: appCompiler.metafile!, + cssBundlePath, + }); manifestChannel.write(manifest); await writeAssetsManifest(remixConfig, manifest); }; + return { compile, - dispose: () => compiler?.rebuild.dispose(), + dispose: () => { + appCompiler?.rebuild.dispose(); + cssCompiler?.rebuild.dispose(); + }, }; }; diff --git a/packages/remix-dev/compiler/compilerServer.ts b/packages/remix-dev/compiler/compilerServer.ts index 808f330f283..8147e1405ac 100644 --- a/packages/remix-dev/compiler/compilerServer.ts +++ b/packages/remix-dev/compiler/compilerServer.ts @@ -8,6 +8,7 @@ import type { RemixConfig } from "../config"; import type { AssetsManifest } from "./assets"; import { loaders } from "./loaders"; import type { CompileOptions } from "./options"; +import { cssModulesPlugin } from "./plugins/cssModulesPlugin"; import { cssFilePlugin } from "./plugins/cssFilePlugin"; import { deprecatedRemixPackagePlugin } from "./plugins/deprecatedRemixPackagePlugin"; import { emptyModulesPlugin } from "./plugins/emptyModulesPlugin"; @@ -49,6 +50,15 @@ const createEsbuildConfig = ( let plugins: esbuild.Plugin[] = [ deprecatedRemixPackagePlugin(options.onWarning), + ...(config.future.unstable_cssModules + ? [ + cssModulesPlugin({ + mode: options.mode, + rootDirectory: config.rootDirectory, + outputCss: false, + }), + ] + : []), cssFilePlugin({ mode: options.mode, rootDirectory: config.rootDirectory, @@ -134,6 +144,11 @@ async function writeServerBuildResult( contents = contents.replace(new RegExp(pattern), `$1${filename}`); await fse.writeFile(file.path, contents); } else if (file.path.endsWith(".map")) { + // Don't write CSS source maps to server build output + if (file.path.endsWith(".css.map")) { + break; + } + // remove route: prefix from source filenames so breakpoints work let contents = Buffer.from(file.contents).toString("utf-8"); contents = contents.replace(/"route:/gm, '"'); @@ -143,6 +158,13 @@ async function writeServerBuildResult( config.assetsBuildDirectory, file.path.replace(path.dirname(config.serverBuildPath), "") ); + + // Don't write CSS bundle from server build to browser assets directory, + // especially since the file name doesn't contain a content hash + if (assetPath === path.join(config.assetsBuildDirectory, "index.css")) { + break; + } + await fse.ensureDir(path.dirname(assetPath)); await fse.writeFile(assetPath, file.contents); } diff --git a/packages/remix-dev/compiler/plugins/cssBundleEntryModulePlugin.ts b/packages/remix-dev/compiler/plugins/cssBundleEntryModulePlugin.ts new file mode 100644 index 00000000000..20130009915 --- /dev/null +++ b/packages/remix-dev/compiler/plugins/cssBundleEntryModulePlugin.ts @@ -0,0 +1,43 @@ +import type { Plugin } from "esbuild"; + +import type { RemixConfig } from "../../config"; + +export const cssBundleEntryModuleId = "__remix_cssBundleEntryModule__"; +const filter = new RegExp(`^${cssBundleEntryModuleId}$`); + +/** + * Creates a virtual module that imports all browser build entry points so that + * all reachable CSS can be included in a single file at the end of the build. + */ +export function cssBundleEntryModulePlugin(config: RemixConfig): Plugin { + return { + name: "css-bundle-entry-module", + setup(build) { + build.onResolve({ filter }, ({ path }) => { + return { + path, + namespace: "css-bundle-entry-module", + }; + }); + + build.onLoad({ filter }, async () => { + return { + resolveDir: config.appDirectory, + loader: "js", + contents: [ + // These need to be exports to avoid tree shaking + `export * as entryClient from ${JSON.stringify( + `./${config.entryClientFile}` + )};`, + ...Object.keys(config.routes).map((key, index) => { + let route = config.routes[key]; + return `export * as route${index} from ${JSON.stringify( + `./${route.file}` + )};`; + }), + ].join("\n"), + }; + }); + }, + }; +} diff --git a/packages/remix-dev/compiler/plugins/cssModulesPlugin.ts b/packages/remix-dev/compiler/plugins/cssModulesPlugin.ts new file mode 100644 index 00000000000..f21e031bac2 --- /dev/null +++ b/packages/remix-dev/compiler/plugins/cssModulesPlugin.ts @@ -0,0 +1,122 @@ +import path from "path"; +import type { Plugin, PluginBuild } from "esbuild"; +import fse from "fs-extra"; +import postcss from "postcss"; +import postcssModules from "postcss-modules"; + +import type { CompileOptions } from "../options"; + +const pluginName = "css-modules-plugin"; +const namespace = `${pluginName}-ns`; +const cssModulesFilter = /\.module\.css$/; +const compiledCssQuery = "?css-modules-plugin-compiled-css"; +const compiledCssFilter = /\?css-modules-plugin-compiled-css$/; + +interface PluginData { + resolveDir: string; + compiledCss: string; +} + +export const cssModulesPlugin = (options: { + mode: CompileOptions["mode"]; + rootDirectory: string; + outputCss: boolean; +}): Plugin => { + return { + name: pluginName, + setup: async (build: PluginBuild) => { + build.onResolve( + { filter: cssModulesFilter, namespace: "file" }, + async (args) => { + let resolvedPath = ( + await build.resolve(args.path, { + resolveDir: args.resolveDir, + kind: args.kind, + }) + ).path; + + return { + path: resolvedPath, + }; + } + ); + + build.onLoad({ filter: cssModulesFilter }, async (args) => { + let { path: absolutePath } = args; + let resolveDir = path.dirname(absolutePath); + + let fileContents = await fse.readFile(absolutePath, "utf8"); + let exports: Record<string, string> = {}; + + let { css: compiledCss } = await postcss([ + postcssModules({ + generateScopedName: + options.mode === "production" + ? "[hash:base64:5]" + : "[name]__[local]__[hash:base64:5]", + getJSON: function (_, json) { + exports = json; + }, + async resolve(id, importer) { + return ( + await build.resolve(id, { + resolveDir: path.dirname(importer), + kind: "require-resolve", + }) + ).path; + }, + }), + ]).process(fileContents, { + from: absolutePath, + to: absolutePath, + }); + + // Each .module.css file ultimately resolves as a JS file that imports + // a virtual CSS file containing the compiled CSS, and exports the + // object that maps local names to generated class names. The compiled + // CSS file contents are passed to the virtual CSS file via pluginData. + let contents = [ + options.outputCss + ? `import "./${path.basename(absolutePath)}${compiledCssQuery}";` + : null, + `export default ${JSON.stringify(exports)};`, + ] + .filter(Boolean) + .join("\n"); + + let pluginData: PluginData = { + resolveDir, + compiledCss, + }; + + return { + contents, + loader: "js" as const, + pluginData, + }; + }); + + build.onResolve({ filter: compiledCssFilter }, async (args) => { + let pluginData: PluginData = args.pluginData; + let absolutePath = path.resolve(args.resolveDir, args.path); + + return { + namespace, + path: path.relative(options.rootDirectory, absolutePath), + pluginData, + }; + }); + + build.onLoad({ filter: compiledCssFilter, namespace }, async (args) => { + let pluginData: PluginData = args.pluginData; + let { resolveDir, compiledCss } = pluginData; + + return { + resolveDir, + contents: compiledCss, + loader: "css" as const, + }; + }); + }, + }; +}; diff --git a/packages/remix-dev/compiler/plugins/serverBareModulesPlugin.ts b/packages/remix-dev/compiler/plugins/serverBareModulesPlugin.ts index 79e043af935..3cb5135181b 100644 --- a/packages/remix-dev/compiler/plugins/serverBareModulesPlugin.ts +++ b/packages/remix-dev/compiler/plugins/serverBareModulesPlugin.ts @@ -45,6 +45,11 @@ export function serverBareModulesPlugin( return undefined; } + // Always bundle @remix-run/css-bundle + if (path === "@remix-run/css-bundle") { + return undefined; + } + // To prevent `import xxx from "remix"` from ending up in the bundle // we "bundle" remix but the other modules where the code lives. if (path === "remix") { diff --git a/packages/remix-dev/config.ts b/packages/remix-dev/config.ts index 922a6247641..797b909c726 100644 --- a/packages/remix-dev/config.ts +++ b/packages/remix-dev/config.ts @@ -32,6 +32,7 @@ export type ServerModuleFormat = "esm" | "cjs"; export type ServerPlatform = "node" | "neutral"; interface FutureConfig { + unstable_cssModules: boolean; v2_meta: boolean; } @@ -481,6 +482,7 @@ export async function readConfig( } let future = { + unstable_cssModules: appConfig.future?.unstable_cssModules === true, v2_meta: appConfig.future?.v2_meta === true, }; diff --git a/packages/remix-dev/index.ts b/packages/remix-dev/index.ts index ba236fd8bc6..206f30f194b 100644 --- a/packages/remix-dev/index.ts +++ b/packages/remix-dev/index.ts @@ -6,4 +6,5 @@ export * as cli from "./cli/index"; export { createApp } from "./cli/create"; export { CliError } from "./cli/error"; +export type { AssetsManifest } from "./compiler/assets"; export { getDependenciesToBundle } from "./compiler/dependencies"; diff --git a/packages/remix-dev/modules.ts b/packages/remix-dev/modules.ts index db6c7eba031..153e7884238 100644 --- a/packages/remix-dev/modules.ts +++ b/packages/remix-dev/modules.ts @@ -6,6 +6,10 @@ declare module "*.avif" { let asset: string; export default asset; } +declare module "*.module.css" { + let styles: { readonly [key: string]: string }; + export default styles; +} declare module "*.css" { let asset: string; export default asset; diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index 85cdec11552..f7d27ba3393 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -49,6 +49,9 @@ "minimatch": "^3.0.4", "node-fetch": "^2.6.7", "ora": "^5.4.1", + "postcss": "^8.4.19", + "postcss-discard-duplicates": "^5.1.0", + "postcss-modules": "^6.0.0", "prettier": "2.7.1", "pretty-ms": "^7.0.1", "proxy-agent": "^5.0.0", diff --git a/packages/remix-react/entry.ts b/packages/remix-react/entry.ts index c062126e9bd..f3c0be0df62 100644 --- a/packages/remix-react/entry.ts +++ b/packages/remix-react/entry.ts @@ -18,6 +18,7 @@ export interface EntryContext extends RemixContextObject { } export interface FutureConfig { + unstable_cssModules: boolean; v2_meta: boolean; } diff --git a/packages/remix-server-runtime/entry.ts b/packages/remix-server-runtime/entry.ts index a97284b6916..8510afe5d6e 100644 --- a/packages/remix-server-runtime/entry.ts +++ b/packages/remix-server-runtime/entry.ts @@ -12,6 +12,7 @@ export interface EntryContext { } export interface FutureConfig { + unstable_cssModules: true; v2_meta: boolean; } diff --git a/packages/remix-testing/create-remix-stub.tsx b/packages/remix-testing/create-remix-stub.tsx index d2fb47495fc..9066471f5f5 100644 --- a/packages/remix-testing/create-remix-stub.tsx +++ b/packages/remix-testing/create-remix-stub.tsx @@ -156,6 +156,7 @@ function createRemixContext( loaderBoundaryRouteId: null, }, future: { + unstable_cssModules: false, v2_meta: false, ...future, }, diff --git a/scripts/publish.js b/scripts/publish.js index 3b540f16061..09f087f2382 100644 --- a/scripts/publish.js +++ b/scripts/publish.js @@ -56,6 +56,7 @@ async function run() { "netlify", "react", "serve", + "css-bundle", "testing", ]) { publish(path.join(buildDir, "@remix-run", name), tag); diff --git a/scripts/utils.js b/scripts/utils.js index d42d8e22eea..18dbaa342ca 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -17,7 +17,14 @@ let remixPackages = { "vercel", ], runtimes: ["cloudflare", "deno", "node"], - core: ["dev", "server-runtime", "react", "eslint-config", "testing"], + core: [ + "dev", + "server-runtime", + "react", + "eslint-config", + "css-bundle", + "testing", + ], get all() { return [...this.adapters, ...this.runtimes, ...this.core, "serve"]; }, diff --git a/tsconfig.json b/tsconfig.json index f5fc85cc8ad..9ac1dcf8c4a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,7 @@ { "path": "packages/remix-cloudflare" }, { "path": "packages/remix-cloudflare-pages" }, { "path": "packages/remix-cloudflare-workers" }, + { "path": "packages/remix-css-bundle" }, { "path": "packages/remix-dev" }, { "path": "packages/remix-express" }, { "path": "packages/remix-netlify" }, diff --git a/yarn.lock b/yarn.lock index c184e8d82aa..6267adb4242 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4795,6 +4795,11 @@ css@^3.0.0: source-map "^0.6.1" source-map-resolve "^0.6.0" +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + cssom@^0.4.4: version "0.4.4" resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" @@ -6490,6 +6495,13 @@ functions-have-names@^1.2.2: resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== +generic-names@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz#0bd8a2fd23fe8ea16cbd0a279acd69c06933d9a3" + integrity sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A== + dependencies: + loader-utils "^3.2.0" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" @@ -6986,6 +6998,11 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + ieee754@1.1.13, ieee754@^1.1.13, ieee754@^1.1.4: version "1.1.13" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz" @@ -8447,6 +8464,11 @@ loader-utils@^2.0.0: emojis-list "^3.0.0" json5 "^2.1.2" +loader-utils@^3.2.0: + version "3.2.1" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" @@ -8469,6 +8491,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" @@ -9526,6 +9553,11 @@ mute-stream@0.0.8: resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" @@ -10219,6 +10251,75 @@ posix-character-classes@^0.1.0: resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-modules@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/postcss-modules/-/postcss-modules-6.0.0.tgz#cac283dbabbbdc2558c45391cbd0e2df9ec50118" + integrity sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ== + dependencies: + generic-names "^4.0.0" + icss-utils "^5.1.0" + lodash.camelcase "^4.3.0" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + string-hash "^1.1.1" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.11" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.1.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.4.19: + version "8.4.19" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc" + integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + preferred-pm@^3.0.0: version "3.0.3" resolved "https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz" @@ -11394,6 +11495,11 @@ sort-package-json@^1.55.0: is-plain-obj "2.1.0" sort-object-keys "^1.1.3" +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" @@ -11573,6 +11679,11 @@ strict-event-emitter@^0.2.0: dependencies: events "^3.3.0" +string-hash@^1.1.1: + version "1.1.3" + resolved "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" + integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" @@ -12515,7 +12626,7 @@ use@^3.1.0: resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= From 4805dd757019732d48b4ec57e23d03242aee57ce Mon Sep 17 00:00:00 2001 From: Remix Run Bot <hello@remix.run> Date: Wed, 4 Jan 2023 00:12:16 +0000 Subject: [PATCH 21/41] chore: format --- docs/guides/styling.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/guides/styling.md b/docs/guides/styling.md index a7e362b7950..07171e72872 100644 --- a/docs/guides/styling.md +++ b/docs/guides/styling.md @@ -782,7 +782,7 @@ module.exports = { }; ``` -With this feature flag enabled, the Remix compiler will now generate a single CSS file containing all CSS Modules styles in your application. Note that any [regular stylesheet imports](#regular-stylesheets) will remain as separate files. +With this feature flag enabled, the Remix compiler will now generate a single CSS file containing all CSS Modules styles in your application. Note that any [regular stylesheet imports][regular-stylesheet-imports] will remain as separate files. Unlike many other tools in the React ecosystem, we do not insert the CSS bundle into the page automatically. Instead, we ensure that you always have control over the link tags on your page. This lets you decide where the CSS file is loaded relative to other stylesheets in your app. @@ -842,3 +842,4 @@ Button.displayName = "Button"; [tailwind]: https://tailwindcss.com [tailwind-intelli-sense-extension]: https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss [css modules]: https://github.com/css-modules/css-modules +[regular-stylesheet-imports]: #regular-stylesheets From 26f33eee13f7cc0752216a96e0ca4f5b1affd225 Mon Sep 17 00:00:00 2001 From: Mark Dalgleish <mark.john.dalgleish@gmail.com> Date: Wed, 4 Jan 2023 13:16:59 +1100 Subject: [PATCH 22/41] feat: support CSS side-effect imports (#4919) --- .changeset/hungry-owls-greet.md | 8 + docs/file-conventions/remix-config.md | 3 +- docs/guides/styling.md | 76 ++++- integration/css-modules-test.ts | 3 + integration/css-side-effect-imports-test.ts | 273 ++++++++++++++++++ .../deterministic-build-output-test.ts | 8 + .../__tests__/cssSideEffectsPlugin-test.ts | 225 +++++++++++++++ .../remix-dev/__tests__/readConfig-test.ts | 2 + packages/remix-dev/compiler/compileBrowser.ts | 39 ++- packages/remix-dev/compiler/compilerServer.ts | 29 +- .../plugins/cssSideEffectImportsPlugin.ts | 170 +++++++++++ .../plugins/serverBareModulesPlugin.ts | 6 + packages/remix-dev/config.ts | 3 + packages/remix-dev/package.json | 5 + packages/remix-react/entry.ts | 1 + packages/remix-server-runtime/entry.ts | 1 + packages/remix-testing/create-remix-stub.tsx | 1 + yarn.lock | 28 ++ 18 files changed, 835 insertions(+), 46 deletions(-) create mode 100644 .changeset/hungry-owls-greet.md create mode 100644 integration/css-side-effect-imports-test.ts create mode 100644 packages/remix-dev/__tests__/cssSideEffectsPlugin-test.ts create mode 100644 packages/remix-dev/compiler/plugins/cssSideEffectImportsPlugin.ts diff --git a/.changeset/hungry-owls-greet.md b/.changeset/hungry-owls-greet.md new file mode 100644 index 00000000000..3257dafd368 --- /dev/null +++ b/.changeset/hungry-owls-greet.md @@ -0,0 +1,8 @@ +--- +"@remix-run/dev": minor +"@remix-run/react": minor +"@remix-run/server-runtime": minor +"@remix-run/testing": minor +--- + +Add unstable support for CSS side-effect imports via `future.unstable_cssSideEffectImports` feature flag diff --git a/docs/file-conventions/remix-config.md b/docs/file-conventions/remix-config.md index eccd70d76e4..a37bc5b1bbe 100644 --- a/docs/file-conventions/remix-config.md +++ b/docs/file-conventions/remix-config.md @@ -132,7 +132,7 @@ The `serverBuildTarget` can be one of the following: ## serverDependenciesToBundle -A list of regex patterns that determines if a module is transpiled and included in the server bundle. This can be useful when consuming ESM only packages in a CJS build. +A list of regex patterns that determines if a module is transpiled and included in the server bundle. This can be useful when consuming ESM only packages in a CJS build, or when consuming packages with [CSS side-effect imports][css-side-effect-imports]. For example, the `unified` ecosystem is all ESM-only. Let's also say we're using a `@sindresorhus/slugify` which is ESM-only as well. Here's how you would be able to consume those packages in a CJS app without having to use dynamic imports: @@ -186,3 +186,4 @@ There are a few conventions that Remix uses you should be aware of. [an-awesome-visualization]: https://remix-routing-demo.netlify.app [remix-dev]: ../other-api/dev#remix-dev [app-directory]: #appDirectory +[css-side-effect-imports]: ../guides/styling#css-side-effect-imports diff --git a/docs/guides/styling.md b/docs/guides/styling.md index 07171e72872..a84c1414217 100644 --- a/docs/guides/styling.md +++ b/docs/guides/styling.md @@ -766,23 +766,13 @@ Other CSS-in-JS libraries will have a similar setup. If you've got a CSS framewo NOTE: You may run into hydration warnings when using Styled Components. Hopefully [this issue][styled-components-issue] will be fixed soon. -## CSS Modules +## CSS Bundling -<docs-warning>This feature is unstable and currently only available behind a feature flag. We're confident in the use cases it solves but the API and implementation may change in the future.</docs-warning> +<docs-warning>CSS bundling features are unstable and currently only available behind feature flags. We're confident in the use cases they solve but the API and implementation may change in the future.</docs-warning> -To enable [CSS Modules], set the `future.unstable_cssModules` feature flag in `remix.config.js`. +Many common approaches to CSS within the React community are only possible when bundling CSS, meaning that the CSS files you write during development are collected into a separate bundle as part of the build process. -```js filename=remix.config.js -/** @type {import('@remix-run/dev').AppConfig} */ -module.exports = { - future: { - unstable_cssModules: true, - }, - // ... -}; -``` - -With this feature flag enabled, the Remix compiler will now generate a single CSS file containing all CSS Modules styles in your application. Note that any [regular stylesheet imports][regular-stylesheet-imports] will remain as separate files. +When using CSS bundling features, the Remix compiler will generate a single CSS file containing all bundled styles in your application. Note that any [regular stylesheet imports](#regular-stylesheets) will remain as separate files. Unlike many other tools in the React ecosystem, we do not insert the CSS bundle into the page automatically. Instead, we ensure that you always have control over the link tags on your page. This lets you decide where the CSS file is loaded relative to other stylesheets in your app. @@ -806,7 +796,27 @@ export const links: LinksFunction = () => { }; ``` -You're all set! You can now opt into CSS Modules via the `.module.css` file name convention. For example: +With this link tag inserted into the page, you're now ready to start using the various CSS bundling features built into Remix. + +### CSS Modules + +<docs-warning>This feature is unstable and currently only available behind a feature flag. We're confident in the use cases it solves but the API and implementation may change in the future.</docs-warning> + +First, ensure you've set up [CSS bundling](#css-bundling) in your application. + +Then, to enable [CSS Modules], set the `future.unstable_cssModules` feature flag in `remix.config.js`. + +```js filename=remix.config.js +/** @type {import('@remix-run/dev').AppConfig} */ +module.exports = { + future: { + unstable_cssModules: true, + }, + // ... +}; +``` + +With this feature flag enabled, you can now opt into CSS Modules via the `.module.css` file name convention. For example: ```css filename=app/components/button/styles.module.css .root { @@ -833,6 +843,41 @@ export const Button = React.forwardRef( Button.displayName = "Button"; ``` +### CSS Side-Effect Imports + +<docs-warning>This feature is unstable and currently only available behind a feature flag. We're confident in the use cases it solves but the API and implementation may change in the future.</docs-warning> + +Some NPM packages use side-effect imports of plain CSS files (e.g. `import "./styles.css"`) to declare the CSS dependencies of JavaScript files. If you want to consume one of these packages, first ensure you've set up [CSS bundling](#css-bundling) in your application. + +Then, set the `future.unstable_cssSideEffectImports` feature flag in `remix.config.js`. + +```js filename=remix.config.js +/** @type {import('@remix-run/dev').AppConfig} */ +module.exports = { + future: { + unstable_cssSideEffectImports: true, + }, + // ... +}; +``` + +Finally, since JavaScript runtimes don't support importing CSS in this way, you'll also need to add any relevant packages to the [`serverDependenciesToBundle`][server-dependencies-to-bundle] option in your `remix.config.js` file. This ensures that any CSS imports are compiled out of your code before running it on the server. For example, to use React Spectrum: + +```js filename=remix.config.js +/** @type {import('@remix-run/dev').AppConfig} */ +module.exports = { + serverDependenciesToBundle: [ + /^@adobe\/react-spectrum/, + /^@react-spectrum/, + /^@spectrum-icons/, + ], + future: { + unstable_cssSideEffectImports: true, + }, + // ... +}; +``` + [custom-properties]: https://developer.mozilla.org/en-US/docs/Web/CSS/--* [link]: ../components/link [route-module-links]: ../route/links @@ -843,3 +888,4 @@ Button.displayName = "Button"; [tailwind-intelli-sense-extension]: https://marketplace.visualstudio.com/items?itemName=bradlc.vscode-tailwindcss [css modules]: https://github.com/css-modules/css-modules [regular-stylesheet-imports]: #regular-stylesheets +[server-dependencies-to-bundle]: ../file-conventions/remix-config#serverdependenciestobundle diff --git a/integration/css-modules-test.ts b/integration/css-modules-test.ts index 5cc8a2d1c14..ecba714980e 100644 --- a/integration/css-modules-test.ts +++ b/integration/css-modules-test.ts @@ -23,7 +23,10 @@ test.describe("CSS Modules", () => { "remix.config.js": js` module.exports = { future: { + // Enable all CSS future flags to + // ensure features don't clash unstable_cssModules: true, + unstable_cssSideEffectImports: true, }, }; `, diff --git a/integration/css-side-effect-imports-test.ts b/integration/css-side-effect-imports-test.ts new file mode 100644 index 00000000000..fc4c0997382 --- /dev/null +++ b/integration/css-side-effect-imports-test.ts @@ -0,0 +1,273 @@ +import { test, expect } from "@playwright/test"; + +import { PlaywrightFixture } from "./helpers/playwright-fixture"; +import type { Fixture, AppFixture } from "./helpers/create-fixture"; +import { + createAppFixture, + createFixture, + css, + js, +} from "./helpers/create-fixture"; + +const TEST_PADDING_VALUE = "20px"; + +test.describe("CSS side-effect imports", () => { + let fixture: Fixture; + let appFixture: AppFixture; + + test.beforeAll(async () => { + fixture = await createFixture({ + files: { + "remix.config.js": js` + module.exports = { + serverDependenciesToBundle: [/@test-package/], + future: { + // Enable all CSS future flags to + // ensure features don't clash + unstable_cssModules: true, + unstable_cssSideEffectImports: true, + }, + }; + `, + "app/root.jsx": js` + import { Links, Outlet } from "@remix-run/react"; + import { cssBundleHref } from "@remix-run/css-bundle"; + export function links() { + return [{ rel: "stylesheet", href: cssBundleHref }]; + } + export default function Root() { + return ( + <html> + <head> + <Links /> + </head> + <body> + <Outlet /> + </body> + </html> + ) + } + `, + ...basicSideEffectFixture(), + ...rootRelativeFixture(), + ...imageUrlsFixture(), + ...rootRelativeImageUrlsFixture(), + ...commonJsPackageFixture(), + ...esmPackageFixture(), + }, + }); + appFixture = await createAppFixture(fixture); + }); + + test.afterAll(async () => { + await appFixture.close(); + }); + + let basicSideEffectFixture = () => ({ + "app/basicSideEffect/styles.css": css` + .basicSideEffect { + background: peachpuff; + padding: ${TEST_PADDING_VALUE}; + } + `, + "app/routes/basic-side-effect-test.jsx": js` + import "../basicSideEffect/styles.css"; + + export default function() { + return ( + <div data-testid="basic-side-effect" className="basicSideEffect"> + Basic side effect test + </div> + ) + } + `, + }); + test("basic side effect", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/basic-side-effect-test"); + let locator = await page.locator("[data-testid='basic-side-effect']"); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let rootRelativeFixture = () => ({ + "app/rootRelative/styles.css": css` + .rootRelative { + background: peachpuff; + padding: ${TEST_PADDING_VALUE}; + } + `, + "app/routes/root-relative-test.jsx": js` + import "~/rootRelative/styles.css"; + + export default function() { + return ( + <div data-testid="root-relative" className="rootRelative"> + Root relative import test + </div> + ) + } + `, + }); + test("root relative", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/root-relative-test"); + let locator = await page.locator("[data-testid='root-relative']"); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let imageUrlsFixture = () => ({ + "app/imageUrls/styles.css": css` + .imageUrls { + background-color: peachpuff; + background-image: url(./image.svg); + padding: ${TEST_PADDING_VALUE}; + } + `, + "app/imageUrls/image.svg": ` + <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <circle cx="50" cy="50" r="50" fill="coral" /> + </svg> + `, + "app/routes/image-urls-test.jsx": js` + import "../imageUrls/styles.css"; + + export default function() { + return ( + <div data-testid="image-urls" className="imageUrls"> + Image URLs test + </div> + ) + } + `, + }); + test("image URLs", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/image-urls-test"); + let locator = await page.locator("[data-testid='image-urls']"); + let backgroundImage = await locator.evaluate( + (element) => window.getComputedStyle(element).backgroundImage + ); + expect(backgroundImage).toContain(".svg"); + }); + + let rootRelativeImageUrlsFixture = () => ({ + "app/rootRelativeImageUrls/styles.css": css` + .rootRelativeImageUrls { + background-color: peachpuff; + background-image: url(~/rootRelativeImageUrls/image.svg); + padding: ${TEST_PADDING_VALUE}; + } + `, + "app/rootRelativeImageUrls/image.svg": ` + <svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"> + <circle cx="50" cy="50" r="50" fill="coral" /> + </svg> + `, + "app/routes/root-relative-image-urls-test.jsx": js` + import "../rootRelativeImageUrls/styles.css"; + + export default function() { + return ( + <div data-testid="root-relative-image-urls" className="rootRelativeImageUrls"> + Image URLs test + </div> + ) + } + `, + }); + test("root relative image URLs", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/root-relative-image-urls-test"); + let locator = await page.locator( + "[data-testid='root-relative-image-urls']" + ); + let backgroundImage = await locator.evaluate( + (element) => window.getComputedStyle(element).backgroundImage + ); + expect(backgroundImage).toContain(".svg"); + }); + + let commonJsPackageFixture = () => ({ + "node_modules/@test-package/commonjs/styles.css": css` + .commonJsPackage { + background: peachpuff; + padding: ${TEST_PADDING_VALUE}; + } + `, + "node_modules/@test-package/commonjs/index.js": js` + var React = require('react'); + require('./styles.css'); + + exports.Test = function() { + return React.createElement( + 'div', + { + 'data-testid': 'commonjs-package', + 'className': 'commonJsPackage' + }, + 'CommonJS package test', + ); + }; + `, + "app/routes/commonjs-package-test.jsx": js` + import { Test } from "@test-package/commonjs"; + export default function() { + return <Test />; + } + `, + }); + test("CommonJS package", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/commonjs-package-test"); + let locator = await page.locator("[data-testid='commonjs-package']"); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); + + let esmPackageFixture = () => ({ + "node_modules/@test-package/esm/styles.css": css` + .esmPackage { + background: peachpuff; + padding: ${TEST_PADDING_VALUE}; + } + `, + "node_modules/@test-package/esm/index.js": js` + import React from 'react'; + import './styles.css'; + + export function Test() { + return React.createElement( + 'div', + { + 'data-testid': 'esm-package', + 'className': 'esmPackage' + }, + 'ESM package test', + ); + }; + `, + "app/routes/esm-package-test.jsx": js` + import { Test } from "@test-package/esm"; + export default function() { + return <Test />; + } + `, + }); + test("ESM package", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/esm-package-test"); + let locator = await page.locator("[data-testid='esm-package']"); + let padding = await locator.evaluate( + (element) => window.getComputedStyle(element).padding + ); + expect(padding).toBe(TEST_PADDING_VALUE); + }); +}); diff --git a/integration/deterministic-build-output-test.ts b/integration/deterministic-build-output-test.ts index e0b6fe54d74..0e47ebbe6e2 100644 --- a/integration/deterministic-build-output-test.ts +++ b/integration/deterministic-build-output-test.ts @@ -17,6 +17,7 @@ test("builds deterministically under different paths", async () => { // * browserRouteModulesPlugin (implicitly tested by root route) // * cssEntryModulePlugin (implicitly tested by build) // * cssModulesPlugin (via app/routes/foo.tsx' CSS Modules import) + // * cssSideEffectImportsPlugin (via app/routes/foo.tsx' CSS side-effect import) // * emptyModulesPlugin (via app/routes/foo.tsx' server import) // * mdx (via app/routes/index.mdx) // * serverAssetsManifestPlugin (implicitly tested by build) @@ -28,6 +29,7 @@ test("builds deterministically under different paths", async () => { module.exports = { future: { unstable_cssModules: true, + unstable_cssSideEffectImports: true, }, }; `, @@ -35,6 +37,7 @@ test("builds deterministically under different paths", async () => { "app/routes/foo.tsx": js` export * from "~/foo/bar.server"; import styles from "~/styles/foo.module.css"; + import "~/styles/side-effect.css"; export default () => <div className={styles.foo}>YAY</div>; `, "app/foo/bar.server.ts": "export const meta = () => []", @@ -60,6 +63,11 @@ test("builds deterministically under different paths", async () => { <circle cx="50" cy="50" r="50" fill="coral" /> </svg> `, + "app/styles/side-effect.css": css` + .side-effect { + color: mintcream; + } + `, }, }; let dir1 = await createFixtureProject(init); diff --git a/packages/remix-dev/__tests__/cssSideEffectsPlugin-test.ts b/packages/remix-dev/__tests__/cssSideEffectsPlugin-test.ts new file mode 100644 index 00000000000..7c67d4a031f --- /dev/null +++ b/packages/remix-dev/__tests__/cssSideEffectsPlugin-test.ts @@ -0,0 +1,225 @@ +import dedent from "dedent"; + +import { addSuffixToCssSideEffectImports } from "../compiler/plugins/cssSideEffectImportsPlugin"; + +describe("addSuffixToCssSideEffectImports", () => { + describe("adds suffix", () => { + test("side-effect require", () => { + let code = dedent` + require("./foo.css"); + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"require(\\"./foo.css?__remix_sideEffect__\\");"` + ); + }); + + test("side-effect import", () => { + let code = dedent` + import "./foo.css"; + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"import \\"./foo.css?__remix_sideEffect__\\";"` + ); + }); + + test("side-effect import with JSX", () => { + let code = dedent` + import "./foo.css"; + + export const Foo = () => <div />; + `; + + expect(addSuffixToCssSideEffectImports("jsx", code)) + .toMatchInlineSnapshot(` + "import \\"./foo.css?__remix_sideEffect__\\"; + + export const Foo = () => <div />;" + `); + }); + + test("side-effect import in TypeScript", () => { + let code = dedent` + require("./foo.css"); + + export const foo: string = 'foo' satisfies string; + `; + + expect(addSuffixToCssSideEffectImports("ts", code)) + .toMatchInlineSnapshot(` + "require(\\"./foo.css?__remix_sideEffect__\\"); + + export const foo: string = ('foo' satisfies string);" + `); + }); + + test("side-effect import in TypeScript with JSX", () => { + let code = dedent` + require("./foo.css"); + + export const foo: string = 'foo' satisfies string; + export const Bar = () => <div>{foo}</div>; + `; + + expect(addSuffixToCssSideEffectImports("tsx", code)) + .toMatchInlineSnapshot(` + "require(\\"./foo.css?__remix_sideEffect__\\"); + + export const foo: string = ('foo' satisfies string); + export const Bar = () => <div>{foo}</div>;" + `); + }); + + test("conditional side-effect require", () => { + let code = dedent` + if (process.env.NODE_ENV === "production") { + require("./foo.min.css"); + } else { + require("./foo.css"); + } + `; + + expect(addSuffixToCssSideEffectImports("js", code)) + .toMatchInlineSnapshot(` + "if (process.env.NODE_ENV === \\"production\\") { + require(\\"./foo.min.css?__remix_sideEffect__\\"); + } else { + require(\\"./foo.css?__remix_sideEffect__\\"); + }" + `); + }); + + test("conditional side-effect require via ternary", () => { + let code = dedent` + process.env.NODE_ENV === "production" ? require("./foo.min.css") : require("./foo.css"); + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"process.env.NODE_ENV === \\"production\\" ? require(\\"./foo.min.css?__remix_sideEffect__\\") : require(\\"./foo.css?__remix_sideEffect__\\");"` + ); + }); + + test("conditional side-effect require via && operator", () => { + let code = dedent` + process.env.NODE_ENV === "development" && require("./debug.css"); + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"process.env.NODE_ENV === \\"development\\" && require(\\"./debug.css?__remix_sideEffect__\\");"` + ); + }); + + test("conditional side-effect require via || operator", () => { + let code = dedent` + process.env.NODE_ENV === "production" || require("./debug.css"); + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"process.env.NODE_ENV === \\"production\\" || require(\\"./debug.css?__remix_sideEffect__\\");"` + ); + }); + }); + + describe("doesn't add suffix", () => { + test("ignores non side-effect require of CSS", () => { + let code = dedent` + const href = require("./foo.css"); + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"const href = require(\\"./foo.css\\");"` + ); + }); + + test("ignores default import of CSS", () => { + let code = dedent` + import href from "./foo.css"; + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"import href from \\"./foo.css\\";"` + ); + }); + + test("ignores named import of CSS", () => { + let code = dedent` + import { foo } from "./foo.css"; + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"import { foo } from \\"./foo.css\\";"` + ); + }); + + test("ignores namespace import of CSS", () => { + let code = dedent` + import * as foo from "./foo.css"; + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"import * as foo from \\"./foo.css\\";"` + ); + }); + + test("ignores conditional non side-effect require of CSS", () => { + let code = dedent` + const href = process.env.NODE_ENV === "production" ? + require("./foo.min.css") : + require("./foo.css"); + `; + + expect(addSuffixToCssSideEffectImports("js", code)) + .toMatchInlineSnapshot(` + "const href = process.env.NODE_ENV === \\"production\\" ? + require(\\"./foo.min.css\\") : + require(\\"./foo.css\\");" + `); + }); + + test("ignores conditional non side-effect require of CSS via logical operators", () => { + let code = dedent` + const href = (process.env.NODE_ENV === "production" && require("./foo.min.css")) || require("./foo.css"); + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"const href = process.env.NODE_ENV === \\"production\\" && require(\\"./foo.min.css\\") || require(\\"./foo.css\\");"` + ); + }); + + test("ignores side-effect require of non-CSS", () => { + let code = dedent` + require("./foo"); + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"require(\\"./foo\\");"` + ); + }); + + test("ignores side-effect import of non-CSS", () => { + let code = dedent` + import "./foo"; + `; + + expect(addSuffixToCssSideEffectImports("js", code)).toMatchInlineSnapshot( + `"import \\"./foo\\";"` + ); + }); + + test("ignores dynamic import", () => { + let code = dedent` + export const foo = async () => { + await import("./foo.css"); + } + `; + + expect(addSuffixToCssSideEffectImports("js", code)) + .toMatchInlineSnapshot(` + "export const foo = async () => { + await import(\\"./foo.css\\"); + };" + `); + }); + }); +}); diff --git a/packages/remix-dev/__tests__/readConfig-test.ts b/packages/remix-dev/__tests__/readConfig-test.ts index 2c0c77490c2..1b79226fb30 100644 --- a/packages/remix-dev/__tests__/readConfig-test.ts +++ b/packages/remix-dev/__tests__/readConfig-test.ts @@ -24,6 +24,7 @@ describe("readConfig", () => { tsconfigPath: expect.any(String), future: { unstable_cssModules: expect.any(Boolean), + unstable_cssSideEffectImports: expect.any(Boolean), v2_meta: expect.any(Boolean), }, }, @@ -38,6 +39,7 @@ describe("readConfig", () => { "entryServerFile": "entry.server.tsx", "future": Object { "unstable_cssModules": Any<Boolean>, + "unstable_cssSideEffectImports": Any<Boolean>, "v2_meta": Any<Boolean>, }, "mdx": undefined, diff --git a/packages/remix-dev/compiler/compileBrowser.ts b/packages/remix-dev/compiler/compileBrowser.ts index fe45679bfed..c6b38d2f913 100644 --- a/packages/remix-dev/compiler/compileBrowser.ts +++ b/packages/remix-dev/compiler/compileBrowser.ts @@ -20,6 +20,7 @@ import { emptyModulesPlugin } from "./plugins/emptyModulesPlugin"; import { mdxPlugin } from "./plugins/mdx"; import { urlImportsPlugin } from "./plugins/urlImportsPlugin"; import { cssModulesPlugin } from "./plugins/cssModulesPlugin"; +import { cssSideEffectImportsPlugin } from "./plugins/cssSideEffectImportsPlugin"; import { cssBundleEntryModulePlugin, cssBundleEntryModuleId, @@ -66,6 +67,10 @@ const writeAssetsManifest = async ( ); }; +const isCssBundlingEnabled = (config: RemixConfig) => + config.future.unstable_cssModules || + config.future.unstable_cssSideEffectImports; + const createEsbuildConfig = ( build: "app" | "css", config: RemixConfig, @@ -91,28 +96,26 @@ const createEsbuildConfig = ( } } + let { mode } = options; + let { rootDirectory } = config; let plugins: esbuild.Plugin[] = [ deprecatedRemixPackagePlugin(options.onWarning), - ...(config.future.unstable_cssModules - ? [ - ...(isCssBuild ? [cssBundleEntryModulePlugin(config)] : []), - cssModulesPlugin({ - mode: options.mode, - rootDirectory: config.rootDirectory, - outputCss: isCssBuild, - }), - ] - : []), - cssFilePlugin({ - mode: options.mode, - rootDirectory: config.rootDirectory, - }), + isCssBundlingEnabled(config) && isCssBuild + ? cssBundleEntryModulePlugin(config) + : null, + config.future.unstable_cssModules + ? cssModulesPlugin({ mode, rootDirectory, outputCss: isCssBuild }) + : null, + config.future.unstable_cssSideEffectImports + ? cssSideEffectImportsPlugin({ rootDirectory }) + : null, + cssFilePlugin({ mode, rootDirectory }), urlImportsPlugin(), mdxPlugin(config), browserRouteModulesPlugin(config, /\?browser$/), emptyModulesPlugin(config, /\.server(\.[jt]sx?)?$/), NodeModulesPolyfillPlugin(), - ]; + ].filter(isNotNull); return { entryPoints, @@ -172,7 +175,7 @@ export const createBrowserCompiler = ( }; let cssBuildTask = async () => { - if (!remixConfig.future.unstable_cssModules) { + if (!isCssBundlingEnabled(remixConfig)) { return; } @@ -267,3 +270,7 @@ export const createBrowserCompiler = ( }, }; }; + +function isNotNull<Value>(value: Value): value is Exclude<Value, null> { + return value !== null; +} diff --git a/packages/remix-dev/compiler/compilerServer.ts b/packages/remix-dev/compiler/compilerServer.ts index 8147e1405ac..7040e315bad 100644 --- a/packages/remix-dev/compiler/compilerServer.ts +++ b/packages/remix-dev/compiler/compilerServer.ts @@ -9,6 +9,7 @@ import type { AssetsManifest } from "./assets"; import { loaders } from "./loaders"; import type { CompileOptions } from "./options"; import { cssModulesPlugin } from "./plugins/cssModulesPlugin"; +import { cssSideEffectImportsPlugin } from "./plugins/cssSideEffectImportsPlugin"; import { cssFilePlugin } from "./plugins/cssFilePlugin"; import { deprecatedRemixPackagePlugin } from "./plugins/deprecatedRemixPackagePlugin"; import { emptyModulesPlugin } from "./plugins/emptyModulesPlugin"; @@ -48,21 +49,17 @@ const createEsbuildConfig = ( ); let isDenoRuntime = config.serverBuildTarget === "deno"; + let { mode } = options; + let { rootDirectory } = config; let plugins: esbuild.Plugin[] = [ deprecatedRemixPackagePlugin(options.onWarning), - ...(config.future.unstable_cssModules - ? [ - cssModulesPlugin({ - mode: options.mode, - rootDirectory: config.rootDirectory, - outputCss: false, - }), - ] - : []), - cssFilePlugin({ - mode: options.mode, - rootDirectory: config.rootDirectory, - }), + config.future.unstable_cssModules + ? cssModulesPlugin({ mode, rootDirectory, outputCss: false }) + : null, + config.future.unstable_cssSideEffectImports + ? cssSideEffectImportsPlugin({ rootDirectory }) + : null, + cssFilePlugin({ mode, rootDirectory }), urlImportsPlugin(), mdxPlugin(config), emptyModulesPlugin(config, /\.client(\.[jt]sx?)?$/), @@ -70,7 +67,7 @@ const createEsbuildConfig = ( serverEntryModulePlugin(config), serverAssetsManifestPlugin(assetsManifestChannel.read()), serverBareModulesPlugin(config, options.onWarning), - ]; + ].filter(isNotNull); if (config.serverPlatform !== "node") { plugins.unshift(NodeModulesPolyfillPlugin()); @@ -192,3 +189,7 @@ export const createServerCompiler = ( dispose: () => undefined, }; }; + +function isNotNull<Value>(value: Value): value is Exclude<Value, null> { + return value !== null; +} diff --git a/packages/remix-dev/compiler/plugins/cssSideEffectImportsPlugin.ts b/packages/remix-dev/compiler/plugins/cssSideEffectImportsPlugin.ts new file mode 100644 index 00000000000..662fbb6503f --- /dev/null +++ b/packages/remix-dev/compiler/plugins/cssSideEffectImportsPlugin.ts @@ -0,0 +1,170 @@ +import path from "path"; +import type { Plugin } from "esbuild"; +import fse from "fs-extra"; +import LRUCache from "lru-cache"; +import { parse, type ParserOptions } from "@babel/parser"; +import traverse from "@babel/traverse"; +import generate from "@babel/generator"; + +const pluginName = "css-side-effects-plugin"; +const namespace = `${pluginName}-ns`; +const cssSideEffectSuffix = "?__remix_sideEffect__"; +const cssSideEffectFilter = new RegExp( + `\\.css${cssSideEffectSuffix.replace("?", "\\?")}$` +); + +export function isCssSideEffectImportPath(path: string): boolean { + return cssSideEffectFilter.test(path); +} + +const loaders = ["js", "jsx", "ts", "tsx"] as const; +const allJsFilesFilter = new RegExp(`\\.(${loaders.join("|")})$`); + +type Loader = typeof loaders[number]; +type Extension = `.${Loader}`; + +const loaderForExtension: Record<Extension, Loader> = { + ".js": "js", + ".jsx": "jsx", + ".ts": "ts", + ".tsx": "tsx", +}; + +/** + * This plugin detects side-effect imports of CSS files and adds a suffix + * to the import path, e.g. `import "./styles.css"` is transformed to + * `import "./styles.css?__remix_sideEffect__"`). This allows them to be + * differentiated from non-side-effect imports so that they can be added + * to the CSS bundle. This is primarily designed to support packages that + * import plain CSS files directly within JS files. + */ +export const cssSideEffectImportsPlugin = (options: { + rootDirectory: string; +}): Plugin => { + return { + name: pluginName, + setup: async (build) => { + build.onLoad( + { filter: allJsFilesFilter, namespace: "file" }, + async (args) => { + let code = await fse.readFile(args.path, "utf8"); + + // Don't process file if it doesn't contain any references to CSS files + if (!code.includes(".css")) { + return null; + } + + let loader = loaderForExtension[path.extname(args.path) as Extension]; + let contents = addSuffixToCssSideEffectImports(loader, code); + + return { + contents, + loader, + }; + } + ); + + build.onResolve( + { filter: cssSideEffectFilter, namespace: "file" }, + async (args) => { + let resolvedPath = ( + await build.resolve(args.path, { + resolveDir: args.resolveDir, + kind: args.kind, + }) + ).path; + + return { + path: path.relative(options.rootDirectory, resolvedPath), + namespace: resolvedPath.endsWith(".css") ? namespace : undefined, + }; + } + ); + + build.onLoad({ filter: /\.css$/, namespace }, async (args) => { + let contents = await fse.readFile(args.path, "utf8"); + + return { + contents, + resolveDir: path.dirname(args.path), + loader: "css", + }; + }); + }, + }; +}; + +const babelPluginsForLoader: Record<Loader, ParserOptions["plugins"]> = { + js: [], + jsx: ["jsx"], + ts: ["typescript"], + tsx: ["typescript", "jsx"], +}; + +const cache = new LRUCache<string, string>({ max: 1000 }); +const getCacheKey = (loader: Loader, code: string) => `${loader}:${code}`; + +export function addSuffixToCssSideEffectImports( + loader: Loader, + code: string +): string { + let cacheKey = getCacheKey(loader, code); + let cachedResult = cache.get(cacheKey); + + if (cachedResult) { + return cachedResult; + } + + let ast = parse(code, { + sourceType: "module", + plugins: babelPluginsForLoader[loader], + }); + + traverse(ast, { + // Handle `import "./styles.css"` + ImportDeclaration(path) { + if ( + path.node.specifiers.length === 0 && // i.e. nothing was imported + path.node.source.value.endsWith(".css") + ) { + path.node.source.value += cssSideEffectSuffix; + } + }, + + // Handle `require("./styles.css")` + CallExpression(path) { + if ( + path.node.callee.type === "Identifier" && + path.node.callee.name === "require" && + // Require call must be its own statement, + // not nested within another expression, + (path.parent.type === "ExpressionStatement" || + // or, the statement must only consist of a + // ternary or logical expression, without + // assigning the result to a variable. + ((path.parent.type === "ConditionalExpression" || + path.parent.type === "LogicalExpression") && + path.parentPath.parent.type === "ExpressionStatement")) + ) { + let specifier = path.node.arguments[0]; + + if ( + specifier && + specifier.type === "StringLiteral" && + specifier.value.endsWith(".css") + ) { + specifier.value += cssSideEffectSuffix; + } + } + }, + }); + + let result = generate(ast, { + retainLines: true, + compact: false, + }).code; + + cache.set(cacheKey, result); + + return result; +} diff --git a/packages/remix-dev/compiler/plugins/serverBareModulesPlugin.ts b/packages/remix-dev/compiler/plugins/serverBareModulesPlugin.ts index 3cb5135181b..e2c840cd817 100644 --- a/packages/remix-dev/compiler/plugins/serverBareModulesPlugin.ts +++ b/packages/remix-dev/compiler/plugins/serverBareModulesPlugin.ts @@ -9,6 +9,7 @@ import { serverBuildVirtualModule, assetsManifestVirtualModule, } from "../virtualModules"; +import { isCssSideEffectImportPath } from "./cssSideEffectImportsPlugin"; import { createMatchPath } from "../utils/tsconfig"; import { getPreferredPackageManager } from "../../cli/getPreferredPackageManager"; @@ -70,6 +71,11 @@ export function serverBareModulesPlugin( return undefined; } + // Always bundle CSS side-effect imports. + if (isCssSideEffectImportPath(path)) { + return undefined; + } + let packageName = getNpmPackageName(path); let pkgManager = getPreferredPackageManager(); diff --git a/packages/remix-dev/config.ts b/packages/remix-dev/config.ts index 797b909c726..63483c84283 100644 --- a/packages/remix-dev/config.ts +++ b/packages/remix-dev/config.ts @@ -33,6 +33,7 @@ export type ServerPlatform = "node" | "neutral"; interface FutureConfig { unstable_cssModules: boolean; + unstable_cssSideEffectImports: boolean; v2_meta: boolean; } @@ -483,6 +484,8 @@ export async function readConfig( let future = { unstable_cssModules: appConfig.future?.unstable_cssModules === true, + unstable_cssSideEffectImports: + appConfig.future?.unstable_cssSideEffectImports === true, v2_meta: appConfig.future?.v2_meta === true, }; diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index f7d27ba3393..c5a64c120e4 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -19,10 +19,13 @@ }, "dependencies": { "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.6", "@babel/plugin-syntax-jsx": "^7.18.6", "@babel/plugin-syntax-typescript": "^7.20.0", + "@babel/parser": "^7.18.6", "@babel/preset-env": "^7.18.6", "@babel/preset-typescript": "^7.18.6", + "@babel/traverse": "^7.18.6", "@babel/types": "^7.20.2", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@npmcli/package-json": "^2.0.0", @@ -46,6 +49,7 @@ "json5": "^2.2.1", "lodash": "^4.17.21", "lodash.debounce": "^4.0.8", + "lru-cache": "^7.14.1", "minimatch": "^3.0.4", "node-fetch": "^2.6.7", "ora": "^5.4.1", @@ -77,6 +81,7 @@ "@types/shelljs": "^0.8.11", "@types/tar-fs": "^2.0.1", "@types/ws": "^7.4.1", + "dedent": "^0.7.0", "esbuild-register": "^3.3.2", "msw": "^0.39.2", "shelljs": "^0.8.5", diff --git a/packages/remix-react/entry.ts b/packages/remix-react/entry.ts index f3c0be0df62..79f489e0cdb 100644 --- a/packages/remix-react/entry.ts +++ b/packages/remix-react/entry.ts @@ -19,6 +19,7 @@ export interface EntryContext extends RemixContextObject { export interface FutureConfig { unstable_cssModules: boolean; + unstable_cssSideEffectImports: boolean; v2_meta: boolean; } diff --git a/packages/remix-server-runtime/entry.ts b/packages/remix-server-runtime/entry.ts index 8510afe5d6e..af0958b48f7 100644 --- a/packages/remix-server-runtime/entry.ts +++ b/packages/remix-server-runtime/entry.ts @@ -13,6 +13,7 @@ export interface EntryContext { export interface FutureConfig { unstable_cssModules: true; + unstable_cssSideEffectImports: boolean; v2_meta: boolean; } diff --git a/packages/remix-testing/create-remix-stub.tsx b/packages/remix-testing/create-remix-stub.tsx index 9066471f5f5..8cb3aeeb6d4 100644 --- a/packages/remix-testing/create-remix-stub.tsx +++ b/packages/remix-testing/create-remix-stub.tsx @@ -157,6 +157,7 @@ function createRemixContext( }, future: { unstable_cssModules: false, + unstable_cssSideEffectImports: false, v2_meta: false, ...future, }, diff --git a/yarn.lock b/yarn.lock index 6267adb4242..e7cc7683b8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -132,6 +132,15 @@ "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" +"@babel/generator@^7.18.6": + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz#cb25abee3178adf58d6814b68517c62bdbfdda95" + integrity sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA== + dependencies: + "@babel/types" "^7.20.5" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + "@babel/generator@^7.19.0": version "7.19.0" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz" @@ -432,6 +441,11 @@ resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz" integrity sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg== +"@babel/parser@^7.18.6": + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz#7f3c7335fe417665d929f34ae5dceae4c04015e8" + integrity sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA== + "@babel/parser@^7.19.1": version "7.19.1" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz" @@ -1250,6 +1264,15 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" +"@babel/types@^7.20.5": + version "7.20.5" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz#e206ae370b5393d94dfd1d04cd687cace53efa84" + integrity sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" @@ -8604,6 +8627,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^7.14.1: + version "7.14.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" + integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== + lz-string@^1.4.4: version "1.4.4" resolved "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz" From 6c90fe129219301cf5ef4669d1b57082369422f1 Mon Sep 17 00:00:00 2001 From: Remix Run Bot <hello@remix.run> Date: Wed, 4 Jan 2023 02:18:57 +0000 Subject: [PATCH 23/41] chore: format --- docs/guides/styling.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/guides/styling.md b/docs/guides/styling.md index a84c1414217..ff57b457700 100644 --- a/docs/guides/styling.md +++ b/docs/guides/styling.md @@ -772,7 +772,7 @@ NOTE: You may run into hydration warnings when using Styled Components. Hopefull Many common approaches to CSS within the React community are only possible when bundling CSS, meaning that the CSS files you write during development are collected into a separate bundle as part of the build process. -When using CSS bundling features, the Remix compiler will generate a single CSS file containing all bundled styles in your application. Note that any [regular stylesheet imports](#regular-stylesheets) will remain as separate files. +When using CSS bundling features, the Remix compiler will generate a single CSS file containing all bundled styles in your application. Note that any [regular stylesheet imports][regular-stylesheet-imports-2] will remain as separate files. Unlike many other tools in the React ecosystem, we do not insert the CSS bundle into the page automatically. Instead, we ensure that you always have control over the link tags on your page. This lets you decide where the CSS file is loaded relative to other stylesheets in your app. @@ -802,7 +802,7 @@ With this link tag inserted into the page, you're now ready to start using the v <docs-warning>This feature is unstable and currently only available behind a feature flag. We're confident in the use cases it solves but the API and implementation may change in the future.</docs-warning> -First, ensure you've set up [CSS bundling](#css-bundling) in your application. +First, ensure you've set up [CSS bundling][css-bundling] in your application. Then, to enable [CSS Modules], set the `future.unstable_cssModules` feature flag in `remix.config.js`. @@ -847,7 +847,7 @@ Button.displayName = "Button"; <docs-warning>This feature is unstable and currently only available behind a feature flag. We're confident in the use cases it solves but the API and implementation may change in the future.</docs-warning> -Some NPM packages use side-effect imports of plain CSS files (e.g. `import "./styles.css"`) to declare the CSS dependencies of JavaScript files. If you want to consume one of these packages, first ensure you've set up [CSS bundling](#css-bundling) in your application. +Some NPM packages use side-effect imports of plain CSS files (e.g. `import "./styles.css"`) to declare the CSS dependencies of JavaScript files. If you want to consume one of these packages, first ensure you've set up [CSS bundling][css-bundling] in your application. Then, set the `future.unstable_cssSideEffectImports` feature flag in `remix.config.js`. @@ -889,3 +889,5 @@ module.exports = { [css modules]: https://github.com/css-modules/css-modules [regular-stylesheet-imports]: #regular-stylesheets [server-dependencies-to-bundle]: ../file-conventions/remix-config#serverdependenciestobundle +[regular-stylesheet-imports-2]: #regular-stylesheets +[css-bundling]: #css-bundling From 2c398e42fe353daaa7bd3c9e8e8e9bace59b5652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20De=20Boey?= <info@michaeldeboey.be> Date: Wed, 4 Jan 2023 04:18:07 +0100 Subject: [PATCH 24/41] fix: fix Deno lint errors (#4913) closes #4911 Co-authored-by: Logan McAnsh <logan@mcan.sh> (cherry picked from commit fe43c0301550b70d2e7b9de345357469d8c0ed86) From 56cea6624a8e7061798f8b6bb0fd1cba47aa782f Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Wed, 4 Jan 2023 11:56:49 -0500 Subject: [PATCH 25/41] fix(remix-react): fix `content-type` on proxied action request (#4995) * Fix content type on proxied action request * Only use .text when content type matches * remove debugger --- .changeset/cool-crews-kneel.md | 5 +++++ packages/remix-react/data.ts | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 .changeset/cool-crews-kneel.md diff --git a/.changeset/cool-crews-kneel.md b/.changeset/cool-crews-kneel.md new file mode 100644 index 00000000000..dc45331fc71 --- /dev/null +++ b/.changeset/cool-crews-kneel.md @@ -0,0 +1,5 @@ +--- +"@remix-run/react": patch +--- + +Fix content type on proxied action request diff --git a/packages/remix-react/data.ts b/packages/remix-react/data.ts index 7f635609d9d..397436f405a 100644 --- a/packages/remix-react/data.ts +++ b/packages/remix-react/data.ts @@ -36,16 +36,18 @@ export async function fetchData( let url = new URL(request.url); url.searchParams.set("_data", routeId); - let init: RequestInit | undefined; + let init: RequestInit = { signal: request.signal }; if (request.method !== "GET") { - init = { - method: request.method, - body: await request.formData(), - signal: request.signal, - }; - } else { - init = { signal: request.signal }; + init.method = request.method; + + let contentType = request.headers.get("Content-Type"); + init.body = + // Check between word boundaries instead of startsWith() due to the last + // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type + contentType && /\bapplication\/x-www-form-urlencoded\b/.test(contentType) + ? new URLSearchParams(await request.text()) + : await request.formData(); } let response = await fetch(url.href, init); From 4a6a203faa9223e5ac587afe446056c7166b3977 Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Wed, 4 Jan 2023 12:09:29 -0500 Subject: [PATCH 26/41] Add integration test for #4995 --- integration/action-test.ts | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/integration/action-test.ts b/integration/action-test.ts index 48884545cd5..6fb06fb1a02 100644 --- a/integration/action-test.ts +++ b/integration/action-test.ts @@ -43,6 +43,32 @@ test.describe("actions", () => { } `, + "app/routes/request-text.jsx": js` + import { Form, useActionData } from "@remix-run/react"; + + export let action = async ({ request }) => { + let text = await request.text(); + return text; + }; + + export default function Actions() { + let data = useActionData() + + return ( + <Form method="post" id="form"> + <p id="text"> + {data ? <span id="action-text">{data}</span> : "${WAITING_VALUE}"} + </p> + <p> + <input name="a" defaultValue="1" /> + <input name="b" defaultValue="2" /> + <button type="submit" id="submit">Go</button> + </p> + </Form> + ); + } + `, + [`app/routes/${THROWS_REDIRECT}.jsx`]: js` import { redirect } from "@remix-run/node"; import { Form } from "@remix-run/react"; @@ -115,6 +141,20 @@ test.describe("actions", () => { await page.waitForSelector(`#text:has-text("${SUBMITTED_VALUE}")`); }); + test("properly encodes form data for request.text() usage", async ({ + page, + }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto(`/request-text`); + await page.waitForSelector(`#text:has-text("${WAITING_VALUE}")`); + + await page.click("button[type=submit]"); + await page.waitForSelector("#action-text"); + expect(await app.getHtml("#action-text")).toBe( + '<span id="action-text">a=1&b=2</span>' + ); + }); + test("redirects a thrown response on document requests", async () => { let params = new URLSearchParams(); let res = await fixture.postDocument(`/${THROWS_REDIRECT}`, params); From fe2045ae32d0ddddbaf48d1b0d7f648a673cc262 Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Wed, 4 Jan 2023 15:52:01 -0500 Subject: [PATCH 27/41] Add integration test for 404 loader behavior (#5001) --- integration/catch-boundary-test.ts | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/integration/catch-boundary-test.ts b/integration/catch-boundary-test.ts index 37ccb0a680c..391895819c0 100644 --- a/integration/catch-boundary-test.ts +++ b/integration/catch-boundary-test.ts @@ -22,7 +22,12 @@ test.describe("CatchBoundary", () => { fixture = await createFixture({ files: { "app/root.jsx": js` - import { Links, Meta, Outlet, Scripts } from "@remix-run/react"; + import { json } from "@remix-run/node"; + import { Links, Meta, Outlet, Scripts, useMatches } from "@remix-run/react"; + + export function loader() { + return json({ data: "ROOT LOADER" }); + } export default function Root() { return ( @@ -40,11 +45,13 @@ test.describe("CatchBoundary", () => { } export function CatchBoundary() { + let matches = useMatches() return ( <html> <head /> <body> <div id="root-boundary">${ROOT_BOUNDARY_TEXT}</div> + <pre id="matches">{JSON.stringify(matches)}</pre> <Scripts /> </body> </html> @@ -209,7 +216,14 @@ test.describe("CatchBoundary", () => { test("non-matching urls on document requests", async () => { let res = await fixture.requestDocument(NOT_FOUND_HREF); expect(res.status).toBe(404); - expect(await res.text()).toMatch(ROOT_BOUNDARY_TEXT); + let html = await res.text(); + expect(html).toMatch(ROOT_BOUNDARY_TEXT); + + // There should be no loader data on the root route + let expected = JSON.stringify([ + { id: "root", pathname: "", params: {} }, + ]).replace(/"/g, """); + expect(html).toContain(`<pre id="matches">${expected}</pre>`); }); test("non-matching urls on client transitions", async ({ page }) => { @@ -217,6 +231,12 @@ test.describe("CatchBoundary", () => { await app.goto("/"); await app.clickLink(NOT_FOUND_HREF, { wait: false }); await page.waitForSelector("#root-boundary"); + + // Root loader data sticks around from previous load + let expected = JSON.stringify([ + { id: "root", pathname: "", params: {}, data: { data: "ROOT LOADER" } }, + ]); + expect(await app.getHtml("#matches")).toContain(expected); }); test("own boundary, action, document request", async () => { From 12fb1d896c5c8c63ee06061078a11be9eedddf88 Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Wed, 4 Jan 2023 18:09:12 -0500 Subject: [PATCH 28/41] Bump RR to 6.6.2-pre.0 (#5005) * Bump RR to 6.6.2-pre.0 * Add changeset --- .changeset/few-seas-hunt.md | 6 ++++++ packages/remix-react/package.json | 2 +- packages/remix-testing/package.json | 2 +- yarn.lock | 18 +++++++++--------- 4 files changed, 17 insertions(+), 11 deletions(-) create mode 100644 .changeset/few-seas-hunt.md diff --git a/.changeset/few-seas-hunt.md b/.changeset/few-seas-hunt.md new file mode 100644 index 00000000000..ee8713a1cf4 --- /dev/null +++ b/.changeset/few-seas-hunt.md @@ -0,0 +1,6 @@ +--- +"@remix-run/react": patch +"@remix-run/testing": patch +--- + +Bump RR versions diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index 80e2e0361b2..b60be18003c 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -17,7 +17,7 @@ "module": "dist/esm/index.js", "dependencies": { "@remix-run/router": "1.2.1", - "react-router-dom": "6.6.1" + "react-router-dom": "6.6.2-pre.0" }, "devDependencies": { "@remix-run/server-runtime": "1.10.0-pre.5", diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index de584e94b95..2d44ed6a44c 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -21,7 +21,7 @@ "@remix-run/router": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "6.6.1" + "react-router-dom": "6.6.2-pre.0" }, "devDependencies": { "@types/node": "^18.11.9", diff --git a/yarn.lock b/yarn.lock index 518b5d0f4a2..147f52b0c3c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10530,18 +10530,18 @@ react-is@^17.0.1: resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-router-dom@6.6.1: - version "6.6.1" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.1.tgz#1b96ec0b2cefa7319f1251383ea5b41295ee260d" - integrity sha512-u+8BKUtelStKbZD5UcY0NY90WOzktrkJJhyhNg7L0APn9t1qJNLowzrM9CHdpB6+rcPt6qQrlkIXsTvhuXP68g== +react-router-dom@6.6.2-pre.0: + version "6.6.2-pre.0" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.2-pre.0.tgz#2c1c9b1c50540dc7875301b4b39611f31c70cff7" + integrity sha512-+WCCc0GArJBfGI0kaLajBel2YPmwvxKJehTLYB4wubN2nTiN9lkwM4GHTb3qDhp8P+RRu7qzEw7HgQl6V2qSWQ== dependencies: "@remix-run/router" "1.2.1" - react-router "6.6.1" + react-router "6.6.2-pre.0" -react-router@6.6.1: - version "6.6.1" - resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.1.tgz#17de6cf285f2d1c9721a3afca999c984e5558854" - integrity sha512-YkvlYRusnI/IN0kDtosUCgxqHeulN5je+ew8W+iA1VvFhf86kA+JEI/X/8NqYcr11hCDDp906S+SGMpBheNeYQ== +react-router@6.6.2-pre.0: + version "6.6.2-pre.0" + resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.2-pre.0.tgz#8672b4b204643c7fc44fb61e749b37b4e874e314" + integrity sha512-yzKRCIl3RE/Oz9nCY85EWw0cj5bmZcviFNTRdjYfhEx5lOmOrU5ROND6E3D98/70L14hIx25L9iv5v1HTN8TYg== dependencies: "@remix-run/router" "1.2.1" From bbfbed24a4dc38f86fcfd32efc0b391db3d360c1 Mon Sep 17 00:00:00 2001 From: Remix Run Bot <72662859+remix-run-bot@users.noreply.github.com> Date: Wed, 4 Jan 2023 16:25:52 -0700 Subject: [PATCH 29/41] chore: Update version for release (pre) (#5006) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> --- .changeset/pre.json | 2 ++ packages/create-remix/CHANGELOG.md | 7 +++++++ packages/create-remix/package.json | 4 ++-- packages/remix-architect/CHANGELOG.md | 7 +++++++ packages/remix-architect/package.json | 4 ++-- packages/remix-cloudflare-pages/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-pages/package.json | 4 ++-- packages/remix-cloudflare-workers/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-workers/package.json | 4 ++-- packages/remix-cloudflare/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare/package.json | 4 ++-- packages/remix-deno/CHANGELOG.md | 7 +++++++ packages/remix-deno/package.json | 4 ++-- packages/remix-dev/CHANGELOG.md | 7 +++++++ packages/remix-dev/package.json | 6 +++--- packages/remix-eslint-config/CHANGELOG.md | 2 ++ packages/remix-eslint-config/package.json | 2 +- packages/remix-express/CHANGELOG.md | 7 +++++++ packages/remix-express/package.json | 4 ++-- packages/remix-netlify/CHANGELOG.md | 7 +++++++ packages/remix-netlify/package.json | 4 ++-- packages/remix-node/CHANGELOG.md | 7 +++++++ packages/remix-node/package.json | 4 ++-- packages/remix-react/CHANGELOG.md | 7 +++++++ packages/remix-react/package.json | 4 ++-- packages/remix-serve/CHANGELOG.md | 7 +++++++ packages/remix-serve/package.json | 4 ++-- packages/remix-server-runtime/CHANGELOG.md | 2 ++ packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/CHANGELOG.md | 9 +++++++++ packages/remix-testing/package.json | 6 +++--- packages/remix-vercel/CHANGELOG.md | 7 +++++++ packages/remix-vercel/package.json | 4 ++-- packages/remix/package.json | 2 +- 34 files changed, 139 insertions(+), 33 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 16a6ff6f7d5..2e2b0788d18 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -22,6 +22,8 @@ }, "changesets": [ "big-geese-cry", + "cool-crews-kneel", + "few-seas-hunt", "gentle-yaks-lick", "honest-phones-visit", "late-bottles-shop", diff --git a/packages/create-remix/CHANGELOG.md b/packages/create-remix/CHANGELOG.md index 2285827b2c6..2a1b45dbffb 100644 --- a/packages/create-remix/CHANGELOG.md +++ b/packages/create-remix/CHANGELOG.md @@ -1,5 +1,12 @@ # `create-remix` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/dev@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/create-remix/package.json b/packages/create-remix/package.json index e415e759b60..056707395ae 100644 --- a/packages/create-remix/package.json +++ b/packages/create-remix/package.json @@ -1,6 +1,6 @@ { "name": "create-remix", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Create a new Remix app", "homepage": "https://remix.run", "bugs": { @@ -17,7 +17,7 @@ "create-remix": "dist/cli.js" }, "dependencies": { - "@remix-run/dev": "1.10.0-pre.5" + "@remix-run/dev": "1.10.0-pre.6" }, "engines": { "node": ">=14" diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md index 9302b035eb3..3d38d91d36e 100644 --- a/packages/remix-architect/CHANGELOG.md +++ b/packages/remix-architect/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/architect` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json index a76b8fc2180..ecd4e90f8db 100644 --- a/packages/remix-architect/package.json +++ b/packages/remix-architect/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/architect", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Architect server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@architect/functions": "^5.0.2", - "@remix-run/node": "1.10.0-pre.5", + "@remix-run/node": "1.10.0-pre.6", "@types/aws-lambda": "^8.10.82" }, "devDependencies": { diff --git a/packages/remix-cloudflare-pages/CHANGELOG.md b/packages/remix-cloudflare-pages/CHANGELOG.md index 1d9449a5818..6b6e1fcfa4c 100644 --- a/packages/remix-cloudflare-pages/CHANGELOG.md +++ b/packages/remix-cloudflare-pages/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-pages` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-cloudflare-pages/package.json b/packages/remix-cloudflare-pages/package.json index d5e87f973fd..af815ba497e 100644 --- a/packages/remix-cloudflare-pages/package.json +++ b/packages/remix-cloudflare-pages/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-pages", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Cloudflare Pages request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/cloudflare": "1.10.0-pre.5" + "@remix-run/cloudflare": "1.10.0-pre.6" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0", diff --git a/packages/remix-cloudflare-workers/CHANGELOG.md b/packages/remix-cloudflare-workers/CHANGELOG.md index 0949721c8e7..a4ebc800082 100644 --- a/packages/remix-cloudflare-workers/CHANGELOG.md +++ b/packages/remix-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-workers` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-cloudflare-workers/package.json b/packages/remix-cloudflare-workers/package.json index aa4de4b22b3..10ddabc49e1 100644 --- a/packages/remix-cloudflare-workers/package.json +++ b/packages/remix-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-workers", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Cloudflare worker request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -16,7 +16,7 @@ "module": "dist/esm/index.js", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/cloudflare": "1.10.0-pre.5" + "@remix-run/cloudflare": "1.10.0-pre.6" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md index 2aa97c06009..8f5f9a62429 100644 --- a/packages/remix-cloudflare/CHANGELOG.md +++ b/packages/remix-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-cloudflare/package.json b/packages/remix-cloudflare/package.json index fc282bd3490..6abcfa2d49b 100644 --- a/packages/remix-cloudflare/package.json +++ b/packages/remix-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Cloudflare platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/server-runtime": "1.10.0-pre.5" + "@remix-run/server-runtime": "1.10.0-pre.6" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index 1bf52f0ba90..826cf2c8360 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/deno` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-deno/package.json b/packages/remix-deno/package.json index 1bac9135848..75921e28ded 100644 --- a/packages/remix-deno/package.json +++ b/packages/remix-deno/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/deno", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Deno platform abstractions for Remix", "homepage": "https://remix.run", "main": "./index.ts", @@ -15,7 +15,7 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.5", + "@remix-run/server-runtime": "1.10.0-pre.6", "mime": "^3.0.0" }, "engines": { diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md index 672924ad3d9..bc98c390c98 100644 --- a/packages/remix-dev/CHANGELOG.md +++ b/packages/remix-dev/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/dev` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index d83b407c434..9c72aa2f81f 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/dev", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Dev tools and CLI for Remix", "homepage": "https://remix.run", "bugs": { @@ -26,7 +26,7 @@ "@babel/types": "^7.20.2", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@npmcli/package-json": "^2.0.0", - "@remix-run/server-runtime": "1.10.0-pre.5", + "@remix-run/server-runtime": "1.10.0-pre.6", "arg": "^5.0.1", "cacache": "^15.0.5", "chalk": "^4.1.2", @@ -63,7 +63,7 @@ "xdm": "^2.0.0" }, "devDependencies": { - "@remix-run/serve": "1.10.0-pre.5", + "@remix-run/serve": "1.10.0-pre.6", "@types/cacache": "^15.0.0", "@types/gunzip-maybe": "^1.4.0", "@types/inquirer": "^8.2.0", diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md index dd8b4ef9cc2..feaa490b07a 100644 --- a/packages/remix-eslint-config/CHANGELOG.md +++ b/packages/remix-eslint-config/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/eslint-config` +## 1.10.0-pre.6 + ## 1.10.0-pre.5 ## 1.10.0-pre.4 diff --git a/packages/remix-eslint-config/package.json b/packages/remix-eslint-config/package.json index 1a87c2d4723..c5007632d52 100644 --- a/packages/remix-eslint-config/package.json +++ b/packages/remix-eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/eslint-config", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "ESLint configuration for Remix projects", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-express/CHANGELOG.md b/packages/remix-express/CHANGELOG.md index f72695350b2..734ded99b9e 100644 --- a/packages/remix-express/CHANGELOG.md +++ b/packages/remix-express/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/express` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json index 9d0461174f2..7d0103aef9d 100644 --- a/packages/remix-express/package.json +++ b/packages/remix-express/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/express", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Express server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.5" + "@remix-run/node": "1.10.0-pre.6" }, "devDependencies": { "@types/express": "^4.17.9", diff --git a/packages/remix-netlify/CHANGELOG.md b/packages/remix-netlify/CHANGELOG.md index 2746b59fb45..e8320c25944 100644 --- a/packages/remix-netlify/CHANGELOG.md +++ b/packages/remix-netlify/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/netlify` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-netlify/package.json b/packages/remix-netlify/package.json index 67721ec0dad..7a20de4a4e0 100644 --- a/packages/remix-netlify/package.json +++ b/packages/remix-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/netlify", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Netlify server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.5" + "@remix-run/node": "1.10.0-pre.6" }, "devDependencies": { "@netlify/functions": "^1.0.0" diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md index 1180ef16e08..4eea22d8983 100644 --- a/packages/remix-node/CHANGELOG.md +++ b/packages/remix-node/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/node` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index f30c1a5e7ea..3f8ef040d72 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/node", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Node.js platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.5", + "@remix-run/server-runtime": "1.10.0-pre.6", "@remix-run/web-fetch": "^4.3.2", "@remix-run/web-file": "^3.0.2", "@remix-run/web-stream": "^1.0.3", diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md index 087f3fd0081..ee36e95031d 100644 --- a/packages/remix-react/CHANGELOG.md +++ b/packages/remix-react/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/react` +## 1.10.0-pre.6 + +### Patch Changes + +- Fix content type on proxied action request ([#4995](https://github.com/remix-run/remix/pull/4995)) +- Bump RR versions ([#5005](https://github.com/remix-run/remix/pull/5005)) + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index b60be18003c..147c39a7011 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/react", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "React DOM bindings for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -20,7 +20,7 @@ "react-router-dom": "6.6.2-pre.0" }, "devDependencies": { - "@remix-run/server-runtime": "1.10.0-pre.5", + "@remix-run/server-runtime": "1.10.0-pre.6", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^13.3.0", "abort-controller": "^3.0.0", diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md index d89a7c1f9ce..7f31e5d4827 100644 --- a/packages/remix-serve/CHANGELOG.md +++ b/packages/remix-serve/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/serve` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/express@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index cbe43920ee0..076ce5e4937 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/serve", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Production application server for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -17,7 +17,7 @@ "remix-serve": "dist/cli.js" }, "dependencies": { - "@remix-run/express": "1.10.0-pre.5", + "@remix-run/express": "1.10.0-pre.6", "compression": "^1.7.4", "express": "^4.17.1", "morgan": "^1.10.0" diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md index bc87eeaa9ba..b92c0f958e2 100644 --- a/packages/remix-server-runtime/CHANGELOG.md +++ b/packages/remix-server-runtime/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/server-runtime` +## 1.10.0-pre.6 + ## 1.10.0-pre.5 ## 1.10.0-pre.4 diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index a86cfa55cb7..384cc8230fb 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/server-runtime", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Server runtime for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index b12df3b25c3..f94c10d2489 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -1,5 +1,14 @@ # @remix-run/testing +## 1.10.0-pre.6 + +### Patch Changes + +- Bump RR versions ([#5005](https://github.com/remix-run/remix/pull/5005)) +- Updated dependencies: + - `@remix-run/react@1.10.0-pre.6` + - `@remix-run/node@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index 2d44ed6a44c..147f96cc732 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/testing", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Testing utilities for Remix apps", "homepage": "https://remix.run", "bugs": { @@ -16,8 +16,8 @@ "typings": "./dist/index.d.ts", "module": "./dist/esm/index.js", "dependencies": { - "@remix-run/node": "1.10.0-pre.5", - "@remix-run/react": "1.10.0-pre.5", + "@remix-run/node": "1.10.0-pre.6", + "@remix-run/react": "1.10.0-pre.6", "@remix-run/router": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/remix-vercel/CHANGELOG.md b/packages/remix-vercel/CHANGELOG.md index 588ce73e2e1..eecf044596a 100644 --- a/packages/remix-vercel/CHANGELOG.md +++ b/packages/remix-vercel/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/vercel` +## 1.10.0-pre.6 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.6` + ## 1.10.0-pre.5 ### Patch Changes diff --git a/packages/remix-vercel/package.json b/packages/remix-vercel/package.json index 8f75bd26e7d..ac3cac278e6 100644 --- a/packages/remix-vercel/package.json +++ b/packages/remix-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/vercel", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "Vercel server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.5" + "@remix-run/node": "1.10.0-pre.6" }, "devDependencies": { "@types/supertest": "^2.0.10", diff --git a/packages/remix/package.json b/packages/remix/package.json index d9aaa42e099..8f54105520b 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "remix", - "version": "1.10.0-pre.5", + "version": "1.10.0-pre.6", "description": "A framework for building better websites", "homepage": "https://remix.run", "bugs": { From 561796aa02be7dbdcd7fb6481381b04092bac158 Mon Sep 17 00:00:00 2001 From: Logan McAnsh <logan@mcan.sh> Date: Thu, 5 Jan 2023 15:25:40 -0500 Subject: [PATCH 30/41] feat(remix-dev): flat routes (#4880) * feat: add flat routes convention Closes #4483 * chore: include future v2_routeConvention flag Integrates flat routes function into config * fix: update readConfig test to include new v2_routeConvention flag * fix: replace default route dir Oops! * chore: slim Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: remove unused eslint-disable coment Signed-off-by: Logan McAnsh <logan@mcan.sh> chore: use invariant instead of enforcing the type Signed-off-by: Logan McAnsh <logan@mcan.sh> chore: use for...of Signed-off-by: Logan McAnsh <logan@mcan.sh> chore: remove .route Signed-off-by: Logan McAnsh <logan@mcan.sh> chore: use _index for index routes Signed-off-by: Logan McAnsh <logan@mcan.sh> chore: replace magic characters with defined variable Signed-off-by: Logan McAnsh <logan@mcan.sh> fix: update default parentRoutePath Signed-off-by: Logan McAnsh <logan@mcan.sh> test: add test cases from old route convention Signed-off-by: Logan McAnsh <logan@mcan.sh> chore: update handling of special characters Signed-off-by: Logan McAnsh <logan@mcan.sh> chore: export route convention helpers Signed-off-by: Logan McAnsh <logan@mcan.sh> chore(flat-routes): add support for optional and escape route segments Signed-off-by: Logan McAnsh <logan@mcan.sh> chore(flat-routes): add support for optional and escape route segments Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore(flat-routes): add support for optional and escape route segments Signed-off-by: Logan McAnsh <logan@mcan.sh> * initial import Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: index routes use underscores Signed-off-by: Logan McAnsh <logan@mcan.sh> * feat: add support for optional segments Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: flat routes Signed-off-by: Logan McAnsh <logan@mcan.sh> * feat: nested escaping inside optional Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: remove TODO comment Signed-off-by: Logan McAnsh <logan@mcan.sh> * feat: handle opting out of parent layout, but keeping url segment Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: use `isSegmentSeparator` to account for windows paths Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: helpers no longer need to be exported from `routesConvention` Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: don't return separators from `getRouteSegments` Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: rename test Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: don't treat escaped separator as new segment Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: undo some unneeded changes to `routesConvention` Signed-off-by: Logan McAnsh <logan@mcan.sh> chore: undo some unneeded changes to `routesConvention` Signed-off-by: Logan McAnsh <logan@mcan.sh> chore: undo some unneeded changes to `routesConvention` Signed-off-by: Logan McAnsh <logan@mcan.sh> * test: route hierarchy Signed-off-by: Logan McAnsh <logan@mcan.sh> * test: add more test cases Signed-off-by: Logan McAnsh <logan@mcan.sh> * fix: glob Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: handle opting out of layout Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: lil clean Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: more tests, add substate type Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: re-add lookahead/lookbehind when exiting optional/escape modes Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: remove duplicate cases Signed-off-by: Logan McAnsh <logan@mcan.sh> * test: update test name Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: advance char earlier, fix bugggg Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: prevent `/` in route segments Signed-off-by: Logan McAnsh <logan@mcan.sh> * test: update test name Signed-off-by: Logan McAnsh <logan@mcan.sh> * test: add cases for splitBySegments Signed-off-by: Logan McAnsh <logan@mcan.sh> * test: add cases for joinByDelimiter Signed-off-by: Logan McAnsh <logan@mcan.sh> * Update packages/remix-dev/config/flat-routes.ts Co-authored-by: Pedro Cattori <pcattori@gmail.com> * Update packages/remix-dev/config/flat-routes.ts Co-authored-by: Pedro Cattori <pcattori@gmail.com> * Update packages/remix-dev/config/flat-routes.ts Co-authored-by: Pedro Cattori <pcattori@gmail.com> * test: remove duplicate routes should update duplicate route detection by using route path instead of fs path Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: combine jacob's and kiliman's approaches Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: remove console.log Signed-off-by: Logan McAnsh <logan@mcan.sh> * test: add tests for generically creating route paths Signed-off-by: Logan McAnsh <logan@mcan.sh> * test: add case for skipping layouts other than the top level Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: make tests pass on windows Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: use for...of to be consistent Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: for...of on routeMap Co-authored-by: Pedro Cattori <pcattori@gmail.com> * fixup! chore: for...of on routeMap * chore: extract getRouteMap Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: address feedback Co-authored-by: Pedro Cattori <pcattori@gmail.com> Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: set default parentId to "root" in defineRoutes Signed-off-by: Logan McAnsh <logan@mcan.sh> * test: update defineConventionalRoutes test for default root parentId Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: remove comment Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: remove unnecessary else block Co-authored-by: Pedro Cattori <pcattori@gmail.com> Signed-off-by: Logan McAnsh <logan@mcan.sh> * test: update defineRoutes test per 4779e2458499d15ba31791ff785cdcdf3b8c92e9 Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: add brief description of what each state/substate means Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: remove nesting via early return Co-authored-by: Pedro Cattori <pcattori@gmail.com> * chore: condense state/substate Co-authored-by: Pedro Cattori <pcattori@gmail.com> Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: update routePaths to account for folders Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: error when escaping `:` or `*` Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: remove console.log Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: include routeId in error message Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: error when using `:` or `*`, not just escaping Signed-off-by: Logan McAnsh <logan@mcan.sh> * chore: normalize error messages, move tests to getRouteSegments Signed-off-by: Logan McAnsh <logan@mcan.sh> Signed-off-by: Logan McAnsh <logan@mcan.sh> Co-authored-by: kiliman <kiliman@gmail.com> Co-authored-by: Pedro Cattori <pcattori@gmail.com> --- .changeset/eight-forks-collect.md | 5 + .prettierignore | 2 +- .../remix-dev/__tests__/defineRoutes-test.ts | 14 +- .../remix-dev/__tests__/flat-routes-test.ts | 616 ++++++++++++++++++ .../remix-dev/__tests__/readConfig-test.ts | 2 + .../__tests__/routesConvention-test.ts | 4 +- packages/remix-dev/config.ts | 10 +- packages/remix-dev/config/flat-routes.ts | 317 +++++++++ packages/remix-dev/config/routes.ts | 2 +- packages/remix-dev/config/routesConvention.ts | 42 +- 10 files changed, 981 insertions(+), 33 deletions(-) create mode 100644 .changeset/eight-forks-collect.md create mode 100644 packages/remix-dev/__tests__/flat-routes-test.ts create mode 100644 packages/remix-dev/config/flat-routes.ts diff --git a/.changeset/eight-forks-collect.md b/.changeset/eight-forks-collect.md new file mode 100644 index 00000000000..7ab4e8abc7b --- /dev/null +++ b/.changeset/eight-forks-collect.md @@ -0,0 +1,5 @@ +--- +"@remix-run/dev": patch +--- + +Add flat routes convention diff --git a/.prettierignore b/.prettierignore index 8b09e0301d3..deeb6036e61 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1 @@ -.changeset/*.md \ No newline at end of file +.changeset/*.md diff --git a/packages/remix-dev/__tests__/defineRoutes-test.ts b/packages/remix-dev/__tests__/defineRoutes-test.ts index dbd73350dfa..903641b852a 100644 --- a/packages/remix-dev/__tests__/defineRoutes-test.ts +++ b/packages/remix-dev/__tests__/defineRoutes-test.ts @@ -18,7 +18,7 @@ describe("defineRoutes", () => { "file": "routes/home.js", "id": "routes/home", "index": undefined, - "parentId": undefined, + "parentId": "root", "path": "/", }, "routes/inbox": Object { @@ -26,7 +26,7 @@ describe("defineRoutes", () => { "file": "routes/inbox.js", "id": "routes/inbox", "index": undefined, - "parentId": undefined, + "parentId": "root", "path": "inbox", }, "routes/inbox/$messageId": Object { @@ -73,7 +73,7 @@ describe("defineRoutes", () => { "file": "one.md", "id": "one", "index": undefined, - "parentId": undefined, + "parentId": "root", "path": "one", }, "two": Object { @@ -81,7 +81,7 @@ describe("defineRoutes", () => { "file": "two.md", "id": "two", "index": undefined, - "parentId": undefined, + "parentId": "root", "path": "two", }, } @@ -102,7 +102,7 @@ describe("defineRoutes", () => { "file": "routes/other-route.tsx", "id": "routes/other-route", "index": undefined, - "parentId": undefined, + "parentId": "root", "path": "/other", }, "user": Object { @@ -110,7 +110,7 @@ describe("defineRoutes", () => { "file": "routes/index.tsx", "id": "user", "index": undefined, - "parentId": undefined, + "parentId": "root", "path": "/user", }, "user-by-id": Object { @@ -118,7 +118,7 @@ describe("defineRoutes", () => { "file": "routes/index.tsx", "id": "user-by-id", "index": undefined, - "parentId": undefined, + "parentId": "root", "path": "/user/:id", }, } diff --git a/packages/remix-dev/__tests__/flat-routes-test.ts b/packages/remix-dev/__tests__/flat-routes-test.ts new file mode 100644 index 00000000000..5b9bb523a85 --- /dev/null +++ b/packages/remix-dev/__tests__/flat-routes-test.ts @@ -0,0 +1,616 @@ +import path from "node:path"; + +import { + createRoutePath, + flatRoutesUniversal, + getRouteSegments, +} from "../config/flat-routes"; +import type { ConfigRoute } from "../config/routes"; + +let APP_DIR = path.join("test", "root", "app"); + +describe("flatRoutes", () => { + describe("creates proper route paths", () => { + let tests: [string, string | undefined][] = [ + ["routes/$", "/routes/*"], + ["routes/sub/$", "/routes/sub/*"], + ["routes.sub/$", "/routes/sub/*"], + ["routes/$slug", "/routes/:slug"], + ["routes/sub/$slug", "/routes/sub/:slug"], + ["routes.sub/$slug", "/routes/sub/:slug"], + ["$", "/*"], + ["nested/$", "/nested/*"], + ["flat.$", "/flat/*"], + ["$slug", "/:slug"], + ["nested/$slug", "/nested/:slug"], + ["flat.$slug", "/flat/:slug"], + ["flat.sub", "/flat/sub"], + ["nested/_index", "/nested"], + ["flat._index", "/flat"], + ["_index", undefined], + ["_layout/_index", undefined], + ["_layout/test", "/test"], + ["_layout.test", "/test"], + ["_layout/$slug", "/:slug"], + ["nested/_layout/$slug", "/nested/:slug"], + ["$slug[.]json", "/:slug.json"], + ["sub/[sitemap.xml]", "/sub/sitemap.xml"], + ["posts/$slug/[image.jpg]", "/posts/:slug/image.jpg"], + ["sub.[[]", "/sub/["], + ["sub.]", "/sub/]"], + ["sub.[[]]", "/sub/[]"], + ["sub.[[]", "/sub/["], + ["beef]", "/beef]"], + ["[index]", "/index"], + ["test/inde[x]", "/test/index"], + ["[i]ndex/[[].[[]]", "/index/[/[]"], + + // Optional segment routes + ["(routes)/$", "/routes?/*"], + ["(routes)/(sub)/$", "/routes?/sub?/*"], + ["(routes).(sub)/$", "/routes?/sub?/*"], + ["(routes)/($slug)", "/routes?/:slug?"], + ["(routes)/sub/($slug)", "/routes?/sub/:slug?"], + ["(routes).sub/($slug)", "/routes?/sub/:slug?"], + ["(nested)/$", "/nested?/*"], + ["(flat).$", "/flat?/*"], + ["($slug)", "/:slug?"], + ["(nested)/($slug)", "/nested?/:slug?"], + ["(flat).($slug)", "/flat?/:slug?"], + ["flat.(sub)", "/flat/sub?"], + ["_layout/(test)", "/test?"], + ["_layout.(test)", "/test?"], + ["_layout/($slug)", "/:slug?"], + ["(nested)/_layout/($slug)", "/nested?/:slug?"], + ["($slug[.]json)", "/:slug.json?"], + ["(sub)/([sitemap.xml])", "/sub?/sitemap.xml?"], + ["(sub)/[(sitemap.xml)]", "/sub?/(sitemap.xml)"], + ["(posts)/($slug)/([image.jpg])", "/posts?/:slug?/image.jpg?"], + [ + "($[$dollabills]).([.]lol)/(what)/([$]).($up)", + "/:$dollabills?/.lol?/what?/$?/:up?", + ], + ["(sub).([[])", "/sub?/[?"], + ["(sub).(])", "/sub?/]?"], + ["(sub).([[]])", "/sub?/[]?"], + ["(sub).([[])", "/sub?/[?"], + ["(beef])", "/beef]?"], + ["([index])", "/index?"], + ["(test)/(inde[x])", "/test?/index?"], + ["([i]ndex)/([[]).([[]])", "/index?/[?/[]?"], + + // Opting out of parent layout + ["app_.projects/$id.roadmap", "/app/projects/:id/roadmap"], + ["app.projects_/$id.roadmap", "/app/projects/:id/roadmap"], + ["app_.projects_/$id.roadmap", "/app/projects/:id/roadmap"], + ]; + + for (let [input, expected] of tests) { + it(`"${input}" -> "${expected}"`, () => { + let routeSegments = getRouteSegments(input); + expect(createRoutePath(routeSegments)).toBe(expected); + }); + } + + let invalidSlashFiles = [ + "($[$dollabills]).([.]lol)[/](what)/([$]).$", + "$[$dollabills].[.]lol[/]what/[$].$", + ]; + + for (let invalid of invalidSlashFiles) { + test("should error when using `/` in a route segment", () => { + let regex = new RegExp( + /Route segment (".*?") for (".*?") cannot contain "\/"/ + ); + expect(() => getRouteSegments(invalid)).toThrow(regex); + }); + } + + let invalidSplatFiles: string[] = [ + "routes/about.[*].tsx", + "routes/about.*.tsx", + ]; + + for (let invalid of invalidSplatFiles) { + test("should error when using `*` in a route segment", () => { + let regex = new RegExp( + /Route segment (".*?") for (".*?") cannot contain "\*"/ + ); + expect(() => getRouteSegments(invalid)).toThrow(regex); + }); + } + + let invalidParamFiles: string[] = [ + "routes/about.[:name].tsx", + "routes/about.:name.tsx", + ]; + + for (let invalid of invalidParamFiles) { + test("should error when using `:` in a route segment", () => { + let regex = new RegExp( + /Route segment (".*?") for (".*?") cannot contain ":"/ + ); + expect(() => getRouteSegments(invalid)).toThrow(regex); + }); + } + }); + + describe("should return the correct route hierarchy", () => { + // we'll add file manually before running the tests + let testFiles: [string, Omit<ConfigRoute, "file">][] = [ + [ + "routes/_auth.tsx", + { + id: "routes/_auth", + parentId: "root", + }, + ], + [ + "routes/_auth.forgot-password.tsx", + { + id: "routes/_auth.forgot-password", + parentId: "routes/_auth", + path: "forgot-password", + }, + ], + [ + "routes/_auth.login.tsx", + { + id: "routes/_auth.login", + parentId: "routes/_auth", + path: "login", + }, + ], + [ + "routes/_auth.reset-password.tsx", + { + id: "routes/_auth.reset-password", + parentId: "routes/_auth", + path: "reset-password", + }, + ], + [ + "routes/_auth.signup.tsx", + { + id: "routes/_auth.signup", + parentId: "routes/_auth", + path: "signup", + }, + ], + [ + "routes/_landing.tsx", + { + id: "routes/_landing", + parentId: "root", + }, + ], + [ + "routes/_landing._index.tsx", + { + id: "routes/_landing._index", + index: true, + parentId: "routes/_landing", + }, + ], + [ + "routes/_landing.index.tsx", + { + id: "routes/_landing.index", + parentId: "routes/_landing", + path: "index", + }, + ], + [ + "routes/about.tsx", + { + id: "routes/about", + parentId: "root", + path: "about", + }, + ], + [ + "routes/about._index.tsx", + { + id: "routes/about._index", + index: true, + parentId: "routes/about", + }, + ], + [ + "routes/about.$.tsx", + { + id: "routes/about.$", + parentId: "routes/about", + path: "*", + }, + ], + [ + "routes/about.faq.tsx", + { + id: "routes/about.faq", + parentId: "routes/about", + path: "faq", + }, + ], + [ + "routes/about.$splat.tsx", + { + id: "routes/about.$splat", + parentId: "routes/about", + path: ":splat", + }, + ], + [ + "routes/app.tsx", + { + id: "routes/app", + parentId: "root", + path: "app", + }, + ], + [ + "routes/app.calendar.$day.tsx", + { + id: "routes/app.calendar.$day", + parentId: "routes/app", + path: "calendar/:day", + }, + ], + [ + "routes/app.calendar._index.tsx", + { + id: "routes/app.calendar._index", + index: true, + parentId: "routes/app", + path: "calendar", + }, + ], + [ + "routes/app.projects.tsx", + { + id: "routes/app.projects", + parentId: "routes/app", + path: "projects", + }, + ], + [ + "routes/app.projects.$id.tsx", + { + id: "routes/app.projects.$id", + parentId: "routes/app.projects", + path: ":id", + }, + ], + + // Opt out of parent layout + [ + "routes/app_.projects.$id.roadmap[.pdf].tsx", + { + id: "routes/app_.projects.$id.roadmap[.pdf]", + parentId: "root", + path: "app/projects/:id/roadmap.pdf", + }, + ], + [ + "routes/app_.projects/$id.roadmap.tsx", + { + id: "routes/app_.projects/$id.roadmap", + parentId: "root", + path: "app/projects/:id/roadmap", + }, + ], + + [ + "routes/app.skip.tsx", + { + id: "routes/app.skip", + parentId: "routes/app", + path: "skip", + }, + ], + [ + "routes/app.skip_/layout.tsx", + { + id: "routes/app.skip_/layout", + index: undefined, + parentId: "routes/app", + path: "skip/layout", + }, + ], + + [ + "routes/app.skipall.tsx", + { + id: "routes/app.skipall", + parentId: "routes/app", + path: "skipall", + }, + ], + [ + "routes/app_.skipall_/_index.tsx", + { + id: "routes/app_.skipall_/_index", + index: true, + parentId: "root", + path: "app/skipall", + }, + ], + + // Escaping route segments + [ + "routes/about.[$splat].tsx", + { + id: "routes/about.[$splat]", + parentId: "routes/about", + path: "$splat", + }, + ], + [ + "routes/about.[[].tsx", + { + id: "routes/about.[[]", + parentId: "routes/about", + path: "[", + }, + ], + [ + "routes/about.[]].tsx", + { + id: "routes/about.[]]", + parentId: "routes/about", + path: "]", + }, + ], + [ + "routes/about.[.].tsx", + { + id: "routes/about.[.]", + parentId: "routes/about", + path: ".", + }, + ], + [ + "routes/about.[.[.*].].tsx", + { + id: "routes/about.[.[.*].]", + parentId: "routes/about", + path: ".[.*/]", + }, + ], + + // Optional route segments + [ + "routes/(nested)/_layout/($slug).tsx", + { + id: "routes/(nested)/_layout/($slug)", + parentId: "root", + path: "nested?/:slug?", + }, + ], + [ + "routes/(routes)/$.tsx", + { + id: "routes/(routes)/$", + parentId: "root", + path: "routes?/*", + }, + ], + [ + "routes/(routes).(sub)/$.tsx", + { + id: "routes/(routes).(sub)/$", + parentId: "root", + path: "routes?/sub?/*", + }, + ], + [ + "routes/(routes)/($slug).tsx", + { + id: "routes/(routes)/($slug)", + parentId: "root", + path: "routes?/:slug?", + }, + ], + [ + "routes/(routes).sub/($slug).tsx", + { + id: "routes/(routes).sub/($slug)", + parentId: "root", + path: "routes?/sub/:slug?", + }, + ], + [ + "routes/(nested)/$.tsx", + { + id: "routes/(nested)/$", + parentId: "root", + path: "nested?/*", + }, + ], + [ + "routes/(flat).$.tsx", + { + id: "routes/(flat).$", + parentId: "root", + path: "flat?/*", + }, + ], + [ + "routes/(flat).($slug).tsx", + { + id: "routes/(flat).($slug)", + parentId: "root", + path: "flat?/:slug?", + }, + ], + [ + "routes/flat.(sub).tsx", + { + id: "routes/flat.(sub)", + parentId: "root", + path: "flat/sub?", + }, + ], + [ + "routes/_layout.tsx", + { + id: "routes/_layout", + parentId: "root", + path: undefined, + }, + ], + [ + "routes/_layout.(test).tsx", + { + id: "routes/_layout.(test)", + parentId: "routes/_layout", + path: "test?", + }, + ], + [ + "routes/_layout/($slug).tsx", + { + id: "routes/_layout/($slug)", + parentId: "routes/_layout", + path: ":slug?", + }, + ], + + // Optional + escaped route segments + [ + "routes/([index]).tsx", + { + id: "routes/([index])", + parentId: "root", + path: "index?", + }, + ], + [ + "routes/([i]ndex)/([[]).([[]]).tsx", + { + id: "routes/([i]ndex)/([[]).([[]])", + parentId: "routes/([index])", + path: "[?/[]?", + }, + ], + [ + "routes/(sub).([[]).tsx", + { + id: "routes/(sub).([[])", + parentId: "root", + path: "sub?/[?", + }, + ], + [ + "routes/(sub).(]).tsx", + { + id: "routes/(sub).(])", + parentId: "root", + path: "sub?/]?", + }, + ], + [ + "routes/(sub).([[]]).tsx", + { + id: "routes/(sub).([[]])", + parentId: "root", + path: "sub?/[]?", + }, + ], + [ + "routes/(beef]).tsx", + { + id: "routes/(beef])", + parentId: "root", + path: "beef]?", + }, + ], + [ + "routes/(test)/(inde[x]).tsx", + { + id: "routes/(test)/(inde[x])", + parentId: "root", + path: "test?/index?", + }, + ], + [ + "routes/($[$dollabills]).([.]lol)/(what)/([$]).($up).tsx", + { + id: "routes/($[$dollabills]).([.]lol)/(what)/([$]).($up)", + parentId: "root", + path: ":$dollabills?/.lol?/what?/$?/:up?", + }, + ], + [ + "routes/(posts)/($slug)/([image.jpg]).tsx", + { + id: "routes/(posts)/($slug)/([image.jpg])", + parentId: "root", + path: "posts?/:slug?/image.jpg?", + }, + ], + [ + "routes/(sub)/([sitemap.xml]).tsx", + { + id: "routes/(sub)/([sitemap.xml])", + parentId: "root", + path: "sub?/sitemap.xml?", + }, + ], + [ + "routes/(sub)/[(sitemap.xml)].tsx", + { + id: "routes/(sub)/[(sitemap.xml)]", + parentId: "root", + path: "sub?/(sitemap.xml)", + }, + ], + [ + "routes/($slug[.]json).tsx", + { + id: "routes/($slug[.]json)", + parentId: "root", + path: ":slug.json?", + }, + ], + + [ + "routes/[]otherstuff].tsx", + { + id: "routes/[]otherstuff]", + parentId: "root", + path: "otherstuff]", + }, + ], + [ + "routes/$.tsx", + { + id: "routes/$", + parentId: "root", + path: "*", + }, + ], + ]; + + let files: [string, Omit<ConfigRoute, "file">][] = testFiles.map( + ([file, route]) => { + let filepath = file.split("/").join(path.sep); + return [filepath, { ...route, file: filepath }]; + } + ); + + let routeManifest = flatRoutesUniversal( + APP_DIR, + files.map(([file]) => path.join(APP_DIR, file)) + ); + let routes = Object.values(routeManifest); + + expect(routes).toHaveLength(files.length); + + for (let [file, route] of files) { + test(`hierarchy for ${file} - ${route.path}`, () => { + expect(routes).toContainEqual(route); + }); + } + }); +}); diff --git a/packages/remix-dev/__tests__/readConfig-test.ts b/packages/remix-dev/__tests__/readConfig-test.ts index 1b79226fb30..761ec836e33 100644 --- a/packages/remix-dev/__tests__/readConfig-test.ts +++ b/packages/remix-dev/__tests__/readConfig-test.ts @@ -26,6 +26,7 @@ describe("readConfig", () => { unstable_cssModules: expect.any(Boolean), unstable_cssSideEffectImports: expect.any(Boolean), v2_meta: expect.any(Boolean), + v2_routeConvention: expect.any(Boolean), }, }, ` @@ -41,6 +42,7 @@ describe("readConfig", () => { "unstable_cssModules": Any<Boolean>, "unstable_cssSideEffectImports": Any<Boolean>, "v2_meta": Any<Boolean>, + "v2_routeConvention": Any<Boolean>, }, "mdx": undefined, "publicPath": "/build/", diff --git a/packages/remix-dev/__tests__/routesConvention-test.ts b/packages/remix-dev/__tests__/routesConvention-test.ts index a3513fc1025..15e77963def 100644 --- a/packages/remix-dev/__tests__/routesConvention-test.ts +++ b/packages/remix-dev/__tests__/routesConvention-test.ts @@ -113,8 +113,8 @@ describe("defineConventionalRoutes", () => { path.join(__dirname, "fixtures/replace-remix-magic-imports/app") ); let keys = Object.keys(routes); - expect(keys.length).toBe(14); - expect(keys.filter((key) => routes[key].parentId).length).toBe(5); + expect(keys).toHaveLength(14); + expect(keys.filter((key) => routes[key].parentId).length).toBe(14); expect(keys.filter((key) => routes[key].index).length).toBe(4); }); }); diff --git a/packages/remix-dev/config.ts b/packages/remix-dev/config.ts index 63483c84283..53839fd126b 100644 --- a/packages/remix-dev/config.ts +++ b/packages/remix-dev/config.ts @@ -9,6 +9,7 @@ import { defineConventionalRoutes } from "./config/routesConvention"; import { ServerMode, isValidServerMode } from "./config/serverModes"; import { serverBuildVirtualModule } from "./compiler/virtualModules"; import { writeConfigDefaults } from "./compiler/utils/tsconfig/write-config-defaults"; +import { flatRoutes } from "./config/flat-routes"; export interface RemixMdxConfig { rehypePlugins?: any[]; @@ -35,6 +36,7 @@ interface FutureConfig { unstable_cssModules: boolean; unstable_cssSideEffectImports: boolean; v2_meta: boolean; + v2_routeConvention: boolean; } /** @@ -428,8 +430,13 @@ export async function readConfig( let routes: RouteManifest = { root: { path: "", id: "root", file: rootRouteFile }, }; + + let routesConvention = appConfig.future?.v2_routeConvention + ? flatRoutes + : defineConventionalRoutes; + if (fse.existsSync(path.resolve(appDirectory, "routes"))) { - let conventionalRoutes = defineConventionalRoutes( + let conventionalRoutes = routesConvention( appDirectory, appConfig.ignoredRouteFiles ); @@ -487,6 +494,7 @@ export async function readConfig( unstable_cssSideEffectImports: appConfig.future?.unstable_cssSideEffectImports === true, v2_meta: appConfig.future?.v2_meta === true, + v2_routeConvention: appConfig.future?.v2_routeConvention === true, }; return { diff --git a/packages/remix-dev/config/flat-routes.ts b/packages/remix-dev/config/flat-routes.ts new file mode 100644 index 00000000000..089f62ac91e --- /dev/null +++ b/packages/remix-dev/config/flat-routes.ts @@ -0,0 +1,317 @@ +import path from "node:path"; +import fg from "fast-glob"; + +import type { ConfigRoute, DefineRouteFunction, RouteManifest } from "./routes"; +import { createRouteId, defineRoutes } from "./routes"; +import { + escapeEnd, + escapeStart, + isSegmentSeparator, + optionalEnd, + optionalStart, + paramPrefixChar, + routeModuleExts, +} from "./routesConvention"; + +export function flatRoutes( + appDirectory: string, + ignoredFilePatterns?: string[] +): RouteManifest { + let extensions = routeModuleExts.join(","); + + let routePaths = fg.sync(`**/*{${extensions}}`, { + absolute: true, + cwd: path.join(appDirectory, "routes"), + ignore: ignoredFilePatterns, + }); + + return flatRoutesUniversal(appDirectory, routePaths); +} + +interface RouteInfo extends ConfigRoute { + name: string; + segments: string[]; +} + +/** + * Create route configs from a list of routes using the flat routes conventions. + * @param {string} appDirectory - The absolute root directory the routes were looked up from. + * @param {string[]} routePaths - The absolute route paths. + * @param {string} [prefix=routes] - The prefix to strip off of the routes. + */ +export function flatRoutesUniversal( + appDirectory: string, + routePaths: string[], + prefix: string = "routes" +): RouteManifest { + let routeMap = getRouteMap(appDirectory, routePaths, prefix); + + let uniqueRoutes = new Map<string, string>(); + + function defineNestedRoutes( + defineRoute: DefineRouteFunction, + parentId?: string + ): void { + let childRoutes = Array.from(routeMap.values()).filter( + (routeInfo) => routeInfo.parentId === parentId + ); + let parentRoute = parentId ? routeMap.get(parentId) : undefined; + let parentRoutePath = parentRoute?.path ?? "/"; + for (let childRoute of childRoutes) { + let routePath = childRoute.path?.slice(parentRoutePath.length) ?? ""; + // remove leading slash + routePath = routePath.replace(/^\//, ""); + let index = childRoute.index; + let fullPath = childRoute.path; + + let uniqueRouteId = (fullPath || "") + (index ? "?index" : ""); + if (uniqueRouteId) { + let conflict = uniqueRoutes.get(uniqueRouteId); + if (conflict) { + throw new Error( + `Path ${JSON.stringify(fullPath)} defined by route ${JSON.stringify( + childRoute.id + )} conflicts with route ${JSON.stringify(conflict)}` + ); + } + uniqueRoutes.set(uniqueRouteId, childRoute.id); + } + if (index) { + let invalidChildRoutes = Object.values(routeMap).filter( + (routeInfo) => routeInfo.parentId === childRoute.id + ); + + if (invalidChildRoutes.length > 0) { + throw new Error( + `Child routes are not allowed in index routes. Please remove child routes of ${childRoute.id}` + ); + } + + defineRoute(routePath, routeMap.get(childRoute.id!)!.file, { + index: true, + }); + } else { + defineRoute(routePath, routeMap.get(childRoute.id!)!.file, () => { + defineNestedRoutes(defineRoute, childRoute.id); + }); + } + } + } + + let routes = defineRoutes(defineNestedRoutes); + + return routes; +} + +function isIndexRoute(routeId: string) { + return routeId.endsWith("_index"); +} + +type State = + | // normal path segment normal character concatenation until we hit a special character or the end of the segment (i.e. `/`, `.`, '\') + "NORMAL" + // we hit a `[` and are now in an escape sequence until we hit a `]` - take characters literally and skip isSegmentSeparator checks + | "ESCAPE" + // we hit a `(` and are now in an optional segment until we hit a `)` or an escape sequence + | "OPTIONAL" + // we previously were in a optional segment and hit a `[` and are now in an escape sequence until we hit a `]` - take characters literally and skip isSegmentSeparator checks - afterwards go back to OPTIONAL state + | "OPTIONAL_ESCAPE"; + +export function getRouteSegments(routeId: string) { + let routeSegments: string[] = []; + let index = 0; + let routeSegment = ""; + let rawRouteSegment = ""; + let state: State = "NORMAL"; + let pushRouteSegment = (routeSegment: string) => { + if (!routeSegment) return; + + if (rawRouteSegment === "*") { + throw new Error( + `Route segment "${rawRouteSegment}" for "${routeId}" cannot contain "*"` + ); + } + + if (rawRouteSegment.includes(":")) { + throw new Error( + `Route segment "${rawRouteSegment}" for "${routeId}" cannot contain ":"` + ); + } + + if (rawRouteSegment.includes("/")) { + throw new Error( + `Route segment "${routeSegment}" for "${routeId}" cannot contain "/"` + ); + } + routeSegments.push(routeSegment); + }; + + while (index < routeId.length) { + let char = routeId[index]; + index++; //advance to next char + + switch (state) { + case "NORMAL": { + if (isSegmentSeparator(char)) { + pushRouteSegment(routeSegment); + routeSegment = ""; + rawRouteSegment = ""; + state = "NORMAL"; + break; + } + if (char === escapeStart) { + state = "ESCAPE"; + break; + } + if (char === optionalStart) { + state = "OPTIONAL"; + break; + } + if (!routeSegment && char == paramPrefixChar) { + if (index === routeId.length) { + routeSegment += "*"; + rawRouteSegment += char; + } else { + routeSegment += ":"; + rawRouteSegment += char; + } + break; + } + + routeSegment += char; + rawRouteSegment += char; + break; + } + case "ESCAPE": { + if (char === escapeEnd) { + state = "NORMAL"; + break; + } + + routeSegment += char; + rawRouteSegment += char; + break; + } + case "OPTIONAL": { + if (char === optionalEnd) { + routeSegment += "?"; + rawRouteSegment += "?"; + state = "NORMAL"; + break; + } + + if (char === escapeStart) { + state = "OPTIONAL_ESCAPE"; + break; + } + + if (!routeSegment && char === paramPrefixChar) { + if (index === routeId.length) { + routeSegment += "*"; + rawRouteSegment += char; + } else { + routeSegment += ":"; + rawRouteSegment += char; + } + break; + } + + routeSegment += char; + rawRouteSegment += char; + break; + } + case "OPTIONAL_ESCAPE": { + if (char === escapeEnd) { + state = "OPTIONAL"; + break; + } + + routeSegment += char; + rawRouteSegment += char; + break; + } + } + } + + // process remaining segment + pushRouteSegment(routeSegment); + return routeSegments; +} + +function findParentRouteId( + routeInfo: RouteInfo, + nameMap: Map<string, RouteInfo> +) { + let parentName = routeInfo.segments.slice(0, -1).join("/"); + while (parentName) { + let parentRoute = nameMap.get(parentName); + if (parentRoute) return parentRoute.id; + parentName = parentName.substring(0, parentName.lastIndexOf("/")); + } + return undefined; +} + +function getRouteInfo( + appDirectory: string, + routeDirectory: string, + filePath: string +): RouteInfo { + let filePathWithoutApp = filePath.slice(appDirectory.length + 1); + let routeId = createRouteId(filePathWithoutApp); + let routeIdWithoutRoutes = routeId.slice(routeDirectory.length + 1); + let index = isIndexRoute(routeIdWithoutRoutes); + let routeSegments = getRouteSegments(routeIdWithoutRoutes); + let routePath = createRoutePath(routeSegments); + + return { + id: routeIdWithoutRoutes, + path: routePath, + file: filePathWithoutApp, + name: routeSegments.join("/"), + segments: routeSegments, + index, + }; +} + +export function createRoutePath(routeSegments: string[]) { + let result = ""; + + for (let segment of routeSegments) { + // skip pathless layout segments + if (segment.startsWith("_")) { + continue; + } + + // remove trailing slash + if (segment.endsWith("_")) { + segment = segment.slice(0, -1); + } + + result += `/${segment}`; + } + + return result || undefined; +} + +function getRouteMap( + appDirectory: string, + routePaths: string[], + prefix: string = "routes" +) { + let routeMap = new Map<string, RouteInfo>(); + let nameMap = new Map<string, RouteInfo>(); + + for (let routePath of routePaths) { + let routeInfo = getRouteInfo(appDirectory, prefix, routePath); + routeMap.set(routeInfo.id, routeInfo); + nameMap.set(routeInfo.name, routeInfo); + } + + // update parentIds for all routes + for (let routeInfo of routeMap.values()) { + let parentId = findParentRouteId(routeInfo, nameMap); + routeInfo.parentId = parentId; + } + + return routeMap; +} diff --git a/packages/remix-dev/config/routes.ts b/packages/remix-dev/config/routes.ts index 7f1e5696ef3..d6e70e44f60 100644 --- a/packages/remix-dev/config/routes.ts +++ b/packages/remix-dev/config/routes.ts @@ -151,7 +151,7 @@ export function defineRoutes( parentId: parentRoutes.length > 0 ? parentRoutes[parentRoutes.length - 1].id - : undefined, + : "root", file, }; diff --git a/packages/remix-dev/config/routesConvention.ts b/packages/remix-dev/config/routesConvention.ts index 60ea589ef2e..b9bbce99d29 100644 --- a/packages/remix-dev/config/routesConvention.ts +++ b/packages/remix-dev/config/routesConvention.ts @@ -5,7 +5,7 @@ import minimatch from "minimatch"; import type { RouteManifest, DefineRouteFunction } from "./routes"; import { defineRoutes, createRouteId } from "./routes"; -const routeModuleExts = [".js", ".jsx", ".ts", ".tsx", ".md", ".mdx"]; +export const routeModuleExts = [".js", ".jsx", ".ts", ".tsx", ".md", ".mdx"]; export function isRouteModuleFile(filename: string): boolean { return routeModuleExts.includes(path.extname(filename)); @@ -110,11 +110,12 @@ export function defineConventionalRoutes( return defineRoutes(defineNestedRoutes); } -let escapeStart = "["; -let escapeEnd = "]"; +export let paramPrefixChar = "$" as const; +export let escapeStart = "[" as const; +export let escapeEnd = "]" as const; -let optionalStart = "("; -let optionalEnd = ")"; +export let optionalStart = "(" as const; +export let optionalEnd = ")" as const; // TODO: Cleanup and write some tests for this function export function createRoutePath(partialRouteId: string): string | undefined { @@ -127,13 +128,13 @@ export function createRoutePath(partialRouteId: string): string | undefined { let skipSegment = false; for (let i = 0; i < partialRouteId.length; i++) { let char = partialRouteId.charAt(i); - let lastChar = i > 0 ? partialRouteId.charAt(i - 1) : undefined; + let prevChar = i > 0 ? partialRouteId.charAt(i - 1) : undefined; let nextChar = i < partialRouteId.length - 1 ? partialRouteId.charAt(i + 1) : undefined; function isNewEscapeSequence() { return ( - !inEscapeSequence && char === escapeStart && lastChar !== escapeStart + !inEscapeSequence && char === escapeStart && prevChar !== escapeStart ); } @@ -145,17 +146,11 @@ export function createRoutePath(partialRouteId: string): string | undefined { return char === "_" && nextChar === "_" && !rawSegmentBuffer; } - function isSegmentSeparator(checkChar = char) { - return ( - checkChar === "/" || checkChar === "." || checkChar === path.win32.sep - ); - } - function isNewOptionalSegment() { return ( char === optionalStart && - lastChar !== optionalStart && - (isSegmentSeparator(lastChar) || lastChar === undefined) && + prevChar !== optionalStart && + (isSegmentSeparator(prevChar) || prevChar === undefined) && !inOptionalSegment && !inEscapeSequence ); @@ -172,7 +167,7 @@ export function createRoutePath(partialRouteId: string): string | undefined { } if (skipSegment) { - if (isSegmentSeparator()) { + if (isSegmentSeparator(char)) { skipSegment = false; } continue; @@ -191,7 +186,7 @@ export function createRoutePath(partialRouteId: string): string | undefined { if (isNewOptionalSegment()) { inOptionalSegment++; optionalSegmentIndex = result.length; - result += "("; + result += optionalStart; continue; } @@ -212,7 +207,7 @@ export function createRoutePath(partialRouteId: string): string | undefined { continue; } - if (isSegmentSeparator()) { + if (isSegmentSeparator(char)) { if (rawSegmentBuffer === "index" && result.endsWith("index")) { result = result.replace(/\/?index$/, ""); } else { @@ -232,8 +227,8 @@ export function createRoutePath(partialRouteId: string): string | undefined { rawSegmentBuffer += char; - if (char === "$") { - if (nextChar === ")") { + if (char === paramPrefixChar) { + if (nextChar === optionalEnd) { throw new Error( `Invalid route path: ${partialRouteId}. Splat route $ is already optional` ); @@ -251,13 +246,18 @@ export function createRoutePath(partialRouteId: string): string | undefined { if (rawSegmentBuffer === "index" && result.endsWith("index?")) { throw new Error( - `Invalid route path: ${partialRouteId}. Make index route optional by using [index]` + `Invalid route path: ${partialRouteId}. Make index route optional by using (index)` ); } return result || undefined; } +export function isSegmentSeparator(checkChar: string | undefined) { + if (!checkChar) return false; + return ["/", ".", path.win32.sep].includes(checkChar); +} + function getParentRouteIds( routeIds: string[] ): Record<string, string | undefined> { From 56630813506fd15edd6b09dafc5cd409b3511a00 Mon Sep 17 00:00:00 2001 From: Logan McAnsh <logan@mcan.sh> Date: Thu, 5 Jan 2023 15:47:04 -0500 Subject: [PATCH 31/41] chore(remix-dev): update flat-routes invalid character error message to include link to RR proposal (#5013) * chore(remix-dev): update flat-routes invalid character error message to include link to RR proposal Signed-off-by: Logan McAnsh <logan@mcan.sh> * Create curvy-mangos-heal.md * Update packages/remix-dev/config/flat-routes.ts Co-authored-by: Pedro Cattori <pcattori@gmail.com> Signed-off-by: Logan McAnsh <logan@mcan.sh> Co-authored-by: Pedro Cattori <pcattori@gmail.com> --- .changeset/curvy-mangos-heal.md | 6 ++++++ packages/remix-dev/config/flat-routes.ts | 17 +++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 .changeset/curvy-mangos-heal.md diff --git a/.changeset/curvy-mangos-heal.md b/.changeset/curvy-mangos-heal.md new file mode 100644 index 00000000000..e183e6e4b8c --- /dev/null +++ b/.changeset/curvy-mangos-heal.md @@ -0,0 +1,6 @@ +--- +"remix": patch +"@remix-run/dev": patch +--- + +update flat-routes invalid character error message to include link to React Router proposal diff --git a/packages/remix-dev/config/flat-routes.ts b/packages/remix-dev/config/flat-routes.ts index 089f62ac91e..c0b83821d43 100644 --- a/packages/remix-dev/config/flat-routes.ts +++ b/packages/remix-dev/config/flat-routes.ts @@ -126,22 +126,23 @@ export function getRouteSegments(routeId: string) { let pushRouteSegment = (routeSegment: string) => { if (!routeSegment) return; - if (rawRouteSegment === "*") { + let notSupportedInRR = (segment: string, char: string) => { throw new Error( - `Route segment "${rawRouteSegment}" for "${routeId}" cannot contain "*"` + `Route segment "${segment}" for "${routeId}" cannot contain "${char}".\n` + + `If this is something you need, upvote this proposal for React Router https://github.com/remix-run/react-router/discussions/9822.` ); + }; + + if (rawRouteSegment === "*") { + return notSupportedInRR(rawRouteSegment, "*"); } if (rawRouteSegment.includes(":")) { - throw new Error( - `Route segment "${rawRouteSegment}" for "${routeId}" cannot contain ":"` - ); + return notSupportedInRR(rawRouteSegment, ":"); } if (rawRouteSegment.includes("/")) { - throw new Error( - `Route segment "${routeSegment}" for "${routeId}" cannot contain "/"` - ); + return notSupportedInRR(routeSegment, "/"); } routeSegments.push(routeSegment); }; From 45d4491e1685d7ca9dcc07bb7dbc732ae77ea39d Mon Sep 17 00:00:00 2001 From: Logan McAnsh <logan@mcan.sh> Date: Thu, 5 Jan 2023 15:51:10 -0500 Subject: [PATCH 32/41] chore(remix-dev): don't allow `*` to be anywhere in segment (#5014) * chore(remix-dev): don't allow * to be anywhere in segment Signed-off-by: Logan McAnsh <logan@mcan.sh> * Create little-lobsters-decide.md Signed-off-by: Logan McAnsh <logan@mcan.sh> --- .changeset/little-lobsters-decide.md | 6 ++++++ packages/remix-dev/__tests__/flat-routes-test.ts | 9 +-------- packages/remix-dev/config/flat-routes.ts | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) create mode 100644 .changeset/little-lobsters-decide.md diff --git a/.changeset/little-lobsters-decide.md b/.changeset/little-lobsters-decide.md new file mode 100644 index 00000000000..d8963bc7847 --- /dev/null +++ b/.changeset/little-lobsters-decide.md @@ -0,0 +1,6 @@ +--- +"remix": patch +"@remix-run/dev": patch +--- + +don't allow `*` to be anywhere in flat route segment diff --git a/packages/remix-dev/__tests__/flat-routes-test.ts b/packages/remix-dev/__tests__/flat-routes-test.ts index 5b9bb523a85..989e7dd3a21 100644 --- a/packages/remix-dev/__tests__/flat-routes-test.ts +++ b/packages/remix-dev/__tests__/flat-routes-test.ts @@ -109,6 +109,7 @@ describe("flatRoutes", () => { let invalidSplatFiles: string[] = [ "routes/about.[*].tsx", "routes/about.*.tsx", + "routes/about.[.[.*].].tsx", ]; for (let invalid of invalidSplatFiles) { @@ -369,14 +370,6 @@ describe("flatRoutes", () => { path: ".", }, ], - [ - "routes/about.[.[.*].].tsx", - { - id: "routes/about.[.[.*].]", - parentId: "routes/about", - path: ".[.*/]", - }, - ], // Optional route segments [ diff --git a/packages/remix-dev/config/flat-routes.ts b/packages/remix-dev/config/flat-routes.ts index c0b83821d43..7312d3c6624 100644 --- a/packages/remix-dev/config/flat-routes.ts +++ b/packages/remix-dev/config/flat-routes.ts @@ -133,7 +133,7 @@ export function getRouteSegments(routeId: string) { ); }; - if (rawRouteSegment === "*") { + if (rawRouteSegment.includes("*")) { return notSupportedInRR(rawRouteSegment, "*"); } From 3c6aa48d9a85483daae291a767c827145da0b6e5 Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Fri, 6 Jan 2023 11:45:59 -0500 Subject: [PATCH 33/41] Add outer RemixErrorBoundary to catch root boundary-thrown errors (#5012) --- .changeset/eighty-hounds-mix.md | 5 + integration/error-boundary-test.ts | 326 ++++++++++++++++++++++++ package.json | 1 + packages/remix-react/browser.tsx | 23 +- packages/remix-react/package.json | 3 +- packages/remix-react/server.tsx | 19 +- packages/remix-server-runtime/server.ts | 4 - yarn.lock | 10 + 8 files changed, 380 insertions(+), 11 deletions(-) create mode 100644 .changeset/eighty-hounds-mix.md diff --git a/.changeset/eighty-hounds-mix.md b/.changeset/eighty-hounds-mix.md new file mode 100644 index 00000000000..e26ca059d4b --- /dev/null +++ b/.changeset/eighty-hounds-mix.md @@ -0,0 +1,5 @@ +--- +"@remix-run/react": patch +--- + +Add outer ErrorBoundary to catch root ErrorBoundary thrown errors diff --git a/integration/error-boundary-test.ts b/integration/error-boundary-test.ts index d567effab31..e660a20ff04 100644 --- a/integration/error-boundary-test.ts +++ b/integration/error-boundary-test.ts @@ -875,3 +875,329 @@ test.describe("loaderData in ErrorBoundary", () => { }); } }); + +test.describe("Default ErrorBoundary", () => { + let fixture: Fixture; + let appFixture: AppFixture; + let _consoleError: any; + + function getFiles({ + includeRootErrorBoundary = false, + rootErrorBoundaryThrows = false, + } = {}) { + let errorBoundaryCode = !includeRootErrorBoundary + ? "" + : rootErrorBoundaryThrows + ? js` + export function ErrorBoundary({ error }) { + return ( + <html> + <head /> + <body> + <main> + <div>Root Error Boundary</div> + <p id="root-error-boundary">{error.message}</p> + <p>{oh.no.what.have.i.done}</p> + </main> + <Scripts /> + </body> + </html> + ) + } + ` + : js` + export function ErrorBoundary({ error }) { + return ( + <html> + <head /> + <body> + <main> + <div>Root Error Boundary</div> + <p id="root-error-boundary">{error.message}</p> + </main> + <Scripts /> + </body> + </html> + ) + } + `; + + return { + "app/root.jsx": js` + import { Links, Meta, Outlet, Scripts } from "@remix-run/react"; + + export default function Root() { + return ( + <html lang="en"> + <head> + <Meta /> + <Links /> + </head> + <body> + <main> + <Outlet /> + </main> + <Scripts /> + </body> + </html> + ); + } + + ${errorBoundaryCode} + `, + + "app/routes/index.jsx": js` + import { Link } from "@remix-run/react"; + export default function () { + return ( + <div> + <h1 id="index">Index</h1> + <Link to="/loader-error">Loader Error</Link> + <Link to="/render-error">Render Error</Link> + </div> + ); + } + `, + + "app/routes/loader-error.jsx": js` + export function loader() { + throw new Error('Loader Error'); + } + export default function () { + return <h1 id="loader-error">Loader Error</h1> + } + `, + + "app/routes/render-error.jsx": js` + export default function () { + throw new Error("Render Error") + } + `, + }; + } + + test.beforeAll(async () => { + _consoleError = console.error; + console.error = () => {}; + }); + + test.afterAll(async () => { + console.error = _consoleError; + await appFixture.close(); + }); + + test.describe("When the root route does not have a boundary", () => { + test.beforeAll(async () => { + fixture = await createFixture({ + files: getFiles({ includeRootErrorBoundary: false }), + }); + appFixture = await createAppFixture(fixture, ServerMode.Development); + }); + + test.afterAll(async () => { + await appFixture.close(); + }); + + test.describe("document requests", () => { + test("renders default boundary on loader errors", async () => { + let res = await fixture.requestDocument("/loader-error"); + expect(res.status).toBe(500); + let text = await res.text(); + expect(text).toMatch("Application Error"); + expect(text).toMatch("Loader Error"); + expect(text).not.toMatch("Root Error Boundary"); + }); + + test("renders default boundary on render errors", async () => { + let res = await fixture.requestDocument("/render-error"); + expect(res.status).toBe(500); + let text = await res.text(); + expect(text).toMatch("Application Error"); + expect(text).toMatch("Render Error"); + expect(text).not.toMatch("Root Error Boundary"); + }); + }); + + test.describe("SPA navigations", () => { + test("renders default boundary on loader errors", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/"); + await app.clickLink("/loader-error"); + await page.waitForSelector("pre"); + let html = await app.getHtml(); + expect(html).toMatch("Application Error"); + expect(html).toMatch("Loader Error"); + expect(html).not.toMatch("Root Error Boundary"); + + // Ensure we can click back to our prior page + await app.goBack(); + await page.waitForSelector("h1#index"); + }); + + test("renders default boundary on render errors", async ({ + page, + }, workerInfo) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/"); + await app.clickLink("/render-error"); + await page.waitForSelector("pre"); + let html = await app.getHtml(); + expect(html).toMatch("Application Error"); + // Chromium seems to be the only one that includes the message in the stack + if (workerInfo.project.name === "chromium") { + expect(html).toMatch("Render Error"); + } + expect(html).not.toMatch("Root Error Boundary"); + + // Ensure we can click back to our prior page + await app.goBack(); + await page.waitForSelector("h1#index"); + }); + }); + }); + + test.describe("When the root route has a boundary", () => { + test.beforeAll(async () => { + fixture = await createFixture({ + files: getFiles({ includeRootErrorBoundary: true }), + }); + appFixture = await createAppFixture(fixture, ServerMode.Development); + }); + + test.afterAll(async () => { + await appFixture.close(); + }); + + test.describe("document requests", () => { + test("renders root boundary on loader errors", async () => { + let res = await fixture.requestDocument("/loader-error"); + expect(res.status).toBe(500); + let text = await res.text(); + expect(text).toMatch("Root Error Boundary"); + expect(text).toMatch("Loader Error"); + expect(text).not.toMatch("Application Error"); + }); + + test("renders root boundary on render errors", async () => { + let res = await fixture.requestDocument("/render-error"); + expect(res.status).toBe(500); + let text = await res.text(); + expect(text).toMatch("Root Error Boundary"); + expect(text).toMatch("Render Error"); + expect(text).not.toMatch("Application Error"); + }); + }); + + test.describe("SPA navigations", () => { + test("renders root boundary on loader errors", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/"); + await app.clickLink("/loader-error"); + await page.waitForSelector("#root-error-boundary"); + let html = await app.getHtml(); + expect(html).toMatch("Root Error Boundary"); + expect(html).toMatch("Loader Error"); + expect(html).not.toMatch("Application Error"); + + // Ensure we can click back to our prior page + await app.goBack(); + await page.waitForSelector("h1#index"); + }); + + test("renders root boundary on render errors", async ({ page }) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/"); + await app.clickLink("/render-error"); + await page.waitForSelector("#root-error-boundary"); + let html = await app.getHtml(); + expect(html).toMatch("Root Error Boundary"); + expect(html).toMatch("Render Error"); + expect(html).not.toMatch("Application Error"); + + // Ensure we can click back to our prior page + await app.goBack(); + await page.waitForSelector("h1#index"); + }); + }); + }); + + test.describe("When the root route has a boundary but it also throws 😦", () => { + test.beforeAll(async () => { + fixture = await createFixture({ + files: getFiles({ + includeRootErrorBoundary: true, + rootErrorBoundaryThrows: true, + }), + }); + appFixture = await createAppFixture(fixture, ServerMode.Development); + }); + + test.afterAll(async () => { + await appFixture.close(); + }); + + test.describe("document requests", () => { + test("tries to render root boundary on loader errors but bubbles to default boundary", async () => { + let res = await fixture.requestDocument("/loader-error"); + expect(res.status).toBe(500); + let text = await res.text(); + expect(text).toMatch("Unexpected Server Error"); + expect(text).not.toMatch("Application Error"); + expect(text).not.toMatch("Loader Error"); + expect(text).not.toMatch("Root Error Boundary"); + }); + + test("tries to render root boundary on render errors but bubbles to default boundary", async () => { + let res = await fixture.requestDocument("/render-error"); + expect(res.status).toBe(500); + let text = await res.text(); + expect(text).toMatch("Unexpected Server Error"); + expect(text).not.toMatch("Application Error"); + expect(text).not.toMatch("Render Error"); + expect(text).not.toMatch("Root Error Boundary"); + }); + }); + + test.describe("SPA navigations", () => { + test("tries to render root boundary on loader errors but bubbles to default boundary", async ({ + page, + }, workerInfo) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/"); + await app.clickLink("/loader-error"); + await page.waitForSelector("pre"); + let html = await app.getHtml(); + expect(html).toMatch("Application Error"); + if (workerInfo.project.name === "chromium") { + expect(html).toMatch("ReferenceError: oh is not defined"); + } + expect(html).not.toMatch("Loader Error"); + expect(html).not.toMatch("Root Error Boundary"); + + // Ensure we can click back to our prior page + await app.goBack(); + await page.waitForSelector("h1#index"); + }); + + test("tries to render root boundary on render errors but bubbles to default boundary", async ({ + page, + }, workerInfo) => { + let app = new PlaywrightFixture(appFixture, page); + await app.goto("/"); + await app.clickLink("/render-error"); + await page.waitForSelector("pre"); + let html = await app.getHtml(); + expect(html).toMatch("Application Error"); + if (workerInfo.project.name === "chromium") { + expect(html).toMatch("ReferenceError: oh is not defined"); + } + expect(html).not.toMatch("Render Error"); + expect(html).not.toMatch("Root Error Boundary"); + + // Ensure we can click back to our prior page + await app.goBack(); + await page.waitForSelector("h1#index"); + }); + }); + }); +}); diff --git a/package.json b/package.json index 071dac997ff..239b1e16035 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ "@types/retry": "^0.12.0", "@types/semver": "^7.3.4", "@types/ssri": "^7.1.0", + "@types/use-sync-external-store": "^0.0.3", "abort-controller": "^3.0.0", "abortcontroller-polyfill": "^1.7.3", "aws-sdk": "^2.1055.0", diff --git a/packages/remix-react/browser.tsx b/packages/remix-react/browser.tsx index e2993283335..ce280c23ca2 100644 --- a/packages/remix-react/browser.tsx +++ b/packages/remix-react/browser.tsx @@ -1,10 +1,16 @@ import type { HydrationState, Router } from "@remix-run/router"; import type { ReactElement } from "react"; import * as React from "react"; +import type { Location } from "react-router-dom"; import { createBrowserRouter, RouterProvider } from "react-router-dom"; +import { useSyncExternalStore } from "use-sync-external-store/shim"; import { RemixContext } from "./components"; import type { EntryContext, FutureConfig } from "./entry"; +import { + RemixErrorBoundary, + RemixRootDefaultErrorBoundary, +} from "./errorBoundaries"; import { deserializeErrors } from "./errors"; import type { RouteModules } from "./routeModules"; import { createClientRoutes } from "./routes"; @@ -47,6 +53,16 @@ export function RemixBrowser(_props: RemixBrowserProps): ReactElement { router = createBrowserRouter(routes, { hydrationData }); } + // We need to include a wrapper RemixErrorBoundary here in case the root error + // boundary also throws and we need to bubble up outside of the router entirely. + // Then we need a stateful location here so the user can back-button navigate + // out of there + let location: Location = useSyncExternalStore( + router.subscribe, + () => router.state.location, + () => router.state.location + ); + return ( <RemixContext.Provider value={{ @@ -55,7 +71,12 @@ export function RemixBrowser(_props: RemixBrowserProps): ReactElement { future: window.__remixContext.future, }} > - <RouterProvider router={router} fallbackElement={null} /> + <RemixErrorBoundary + location={location} + component={RemixRootDefaultErrorBoundary} + > + <RouterProvider router={router} fallbackElement={null} /> + </RemixErrorBoundary> </RemixContext.Provider> ); } diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index 147c39a7011..98dc2ef80c6 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -17,7 +17,8 @@ "module": "dist/esm/index.js", "dependencies": { "@remix-run/router": "1.2.1", - "react-router-dom": "6.6.2-pre.0" + "react-router-dom": "6.6.2-pre.0", + "use-sync-external-store": "1.2.0" }, "devDependencies": { "@remix-run/server-runtime": "1.10.0-pre.6", diff --git a/packages/remix-react/server.tsx b/packages/remix-react/server.tsx index 2525ee24945..61bc6816c47 100644 --- a/packages/remix-react/server.tsx +++ b/packages/remix-react/server.tsx @@ -7,6 +7,10 @@ import { import { RemixContext } from "./components"; import type { EntryContext } from "./entry"; +import { + RemixErrorBoundary, + RemixRootDefaultErrorBoundary, +} from "./errorBoundaries"; import { createServerRoutes } from "./routes"; export interface RemixServerProps { @@ -37,11 +41,16 @@ export function RemixServer({ context, url }: RemixServerProps): ReactElement { future: context.future, }} > - <StaticRouterProvider - router={router} - context={context.staticHandlerContext} - hydrate={false} - /> + <RemixErrorBoundary + location={router.state.location} + component={RemixRootDefaultErrorBoundary} + > + <StaticRouterProvider + router={router} + context={context.staticHandlerContext} + hydrate={false} + /> + </RemixErrorBoundary> </RemixContext.Provider> ); } diff --git a/packages/remix-server-runtime/server.ts b/packages/remix-server-runtime/server.ts index 449a685e4a5..7c0142760cc 100644 --- a/packages/remix-server-runtime/server.ts +++ b/packages/remix-server-runtime/server.ts @@ -258,10 +258,6 @@ async function handleDocumentRequestRR( entryContext ); } catch (error: unknown) { - if (serverMode !== ServerMode.Test) { - console.log("Error in entry.server handleDocumentRequest:", error); - } - // Get a new StaticHandlerContext that contains the error at the right boundary context = getStaticContextFromError( staticHandler.dataRoutes, diff --git a/yarn.lock b/yarn.lock index 147f52b0c3c..69b20e927dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3004,6 +3004,11 @@ resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== +"@types/use-sync-external-store@^0.0.3": + version "0.0.3" + resolved "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" + integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== + "@types/ws@^7.4.1": version "7.4.7" resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" @@ -12509,6 +12514,11 @@ url@0.10.3: punycode "1.3.2" querystring "0.2.0" +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + use@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" From 7f81a3e83107ac13ec25193e327d6011ba4a622f Mon Sep 17 00:00:00 2001 From: Remix Run Bot <72662859+remix-run-bot@users.noreply.github.com> Date: Fri, 6 Jan 2023 10:05:21 -0700 Subject: [PATCH 34/41] chore: Update version for release (pre) (#5022) Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> --- .changeset/pre.json | 1 + packages/create-remix/CHANGELOG.md | 7 +++++++ packages/create-remix/package.json | 4 ++-- packages/remix-architect/CHANGELOG.md | 7 +++++++ packages/remix-architect/package.json | 4 ++-- packages/remix-cloudflare-pages/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-pages/package.json | 4 ++-- packages/remix-cloudflare-workers/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare-workers/package.json | 4 ++-- packages/remix-cloudflare/CHANGELOG.md | 7 +++++++ packages/remix-cloudflare/package.json | 4 ++-- packages/remix-deno/CHANGELOG.md | 7 +++++++ packages/remix-deno/package.json | 4 ++-- packages/remix-dev/CHANGELOG.md | 7 +++++++ packages/remix-dev/package.json | 6 +++--- packages/remix-eslint-config/CHANGELOG.md | 2 ++ packages/remix-eslint-config/package.json | 2 +- packages/remix-express/CHANGELOG.md | 7 +++++++ packages/remix-express/package.json | 4 ++-- packages/remix-netlify/CHANGELOG.md | 7 +++++++ packages/remix-netlify/package.json | 4 ++-- packages/remix-node/CHANGELOG.md | 7 +++++++ packages/remix-node/package.json | 4 ++-- packages/remix-react/CHANGELOG.md | 6 ++++++ packages/remix-react/package.json | 4 ++-- packages/remix-serve/CHANGELOG.md | 7 +++++++ packages/remix-serve/package.json | 4 ++-- packages/remix-server-runtime/CHANGELOG.md | 2 ++ packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/CHANGELOG.md | 8 ++++++++ packages/remix-testing/package.json | 6 +++--- packages/remix-vercel/CHANGELOG.md | 7 +++++++ packages/remix-vercel/package.json | 4 ++-- packages/remix/package.json | 2 +- 34 files changed, 136 insertions(+), 33 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 2e2b0788d18..de5515e3b02 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -23,6 +23,7 @@ "changesets": [ "big-geese-cry", "cool-crews-kneel", + "eighty-hounds-mix", "few-seas-hunt", "gentle-yaks-lick", "honest-phones-visit", diff --git a/packages/create-remix/CHANGELOG.md b/packages/create-remix/CHANGELOG.md index 2a1b45dbffb..ca93b1eb0b5 100644 --- a/packages/create-remix/CHANGELOG.md +++ b/packages/create-remix/CHANGELOG.md @@ -1,5 +1,12 @@ # `create-remix` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/dev@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/create-remix/package.json b/packages/create-remix/package.json index 056707395ae..2c941b9dc77 100644 --- a/packages/create-remix/package.json +++ b/packages/create-remix/package.json @@ -1,6 +1,6 @@ { "name": "create-remix", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Create a new Remix app", "homepage": "https://remix.run", "bugs": { @@ -17,7 +17,7 @@ "create-remix": "dist/cli.js" }, "dependencies": { - "@remix-run/dev": "1.10.0-pre.6" + "@remix-run/dev": "1.10.0-pre.7" }, "engines": { "node": ">=14" diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md index 3d38d91d36e..750e8016d9e 100644 --- a/packages/remix-architect/CHANGELOG.md +++ b/packages/remix-architect/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/architect` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json index ecd4e90f8db..304d9ca7737 100644 --- a/packages/remix-architect/package.json +++ b/packages/remix-architect/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/architect", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Architect server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@architect/functions": "^5.0.2", - "@remix-run/node": "1.10.0-pre.6", + "@remix-run/node": "1.10.0-pre.7", "@types/aws-lambda": "^8.10.82" }, "devDependencies": { diff --git a/packages/remix-cloudflare-pages/CHANGELOG.md b/packages/remix-cloudflare-pages/CHANGELOG.md index 6b6e1fcfa4c..ef03abd9d3f 100644 --- a/packages/remix-cloudflare-pages/CHANGELOG.md +++ b/packages/remix-cloudflare-pages/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-pages` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-cloudflare-pages/package.json b/packages/remix-cloudflare-pages/package.json index af815ba497e..47ca4d20ff0 100644 --- a/packages/remix-cloudflare-pages/package.json +++ b/packages/remix-cloudflare-pages/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-pages", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Cloudflare Pages request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/cloudflare": "1.10.0-pre.6" + "@remix-run/cloudflare": "1.10.0-pre.7" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0", diff --git a/packages/remix-cloudflare-workers/CHANGELOG.md b/packages/remix-cloudflare-workers/CHANGELOG.md index a4ebc800082..9d747d8e847 100644 --- a/packages/remix-cloudflare-workers/CHANGELOG.md +++ b/packages/remix-cloudflare-workers/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare-workers` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/cloudflare@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-cloudflare-workers/package.json b/packages/remix-cloudflare-workers/package.json index 10ddabc49e1..1e624354c51 100644 --- a/packages/remix-cloudflare-workers/package.json +++ b/packages/remix-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-workers", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Cloudflare worker request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -16,7 +16,7 @@ "module": "dist/esm/index.js", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/cloudflare": "1.10.0-pre.6" + "@remix-run/cloudflare": "1.10.0-pre.7" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md index 8f5f9a62429..2cf448fa534 100644 --- a/packages/remix-cloudflare/CHANGELOG.md +++ b/packages/remix-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/cloudflare` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-cloudflare/package.json b/packages/remix-cloudflare/package.json index 6abcfa2d49b..95a272e7570 100644 --- a/packages/remix-cloudflare/package.json +++ b/packages/remix-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Cloudflare platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/server-runtime": "1.10.0-pre.6" + "@remix-run/server-runtime": "1.10.0-pre.7" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index 826cf2c8360..bea5dc7df6e 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/deno` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-deno/package.json b/packages/remix-deno/package.json index 75921e28ded..a89d120d4a9 100644 --- a/packages/remix-deno/package.json +++ b/packages/remix-deno/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/deno", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Deno platform abstractions for Remix", "homepage": "https://remix.run", "main": "./index.ts", @@ -15,7 +15,7 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.6", + "@remix-run/server-runtime": "1.10.0-pre.7", "mime": "^3.0.0" }, "engines": { diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md index bc98c390c98..67cad445ac4 100644 --- a/packages/remix-dev/CHANGELOG.md +++ b/packages/remix-dev/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/dev` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index 9c72aa2f81f..b9907cdb9b2 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/dev", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Dev tools and CLI for Remix", "homepage": "https://remix.run", "bugs": { @@ -26,7 +26,7 @@ "@babel/types": "^7.20.2", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@npmcli/package-json": "^2.0.0", - "@remix-run/server-runtime": "1.10.0-pre.6", + "@remix-run/server-runtime": "1.10.0-pre.7", "arg": "^5.0.1", "cacache": "^15.0.5", "chalk": "^4.1.2", @@ -63,7 +63,7 @@ "xdm": "^2.0.0" }, "devDependencies": { - "@remix-run/serve": "1.10.0-pre.6", + "@remix-run/serve": "1.10.0-pre.7", "@types/cacache": "^15.0.0", "@types/gunzip-maybe": "^1.4.0", "@types/inquirer": "^8.2.0", diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md index feaa490b07a..f45685257a2 100644 --- a/packages/remix-eslint-config/CHANGELOG.md +++ b/packages/remix-eslint-config/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/eslint-config` +## 1.10.0-pre.7 + ## 1.10.0-pre.6 ## 1.10.0-pre.5 diff --git a/packages/remix-eslint-config/package.json b/packages/remix-eslint-config/package.json index c5007632d52..4805b7f0892 100644 --- a/packages/remix-eslint-config/package.json +++ b/packages/remix-eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/eslint-config", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "ESLint configuration for Remix projects", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-express/CHANGELOG.md b/packages/remix-express/CHANGELOG.md index 734ded99b9e..444b4d300de 100644 --- a/packages/remix-express/CHANGELOG.md +++ b/packages/remix-express/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/express` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json index 7d0103aef9d..fa451876f96 100644 --- a/packages/remix-express/package.json +++ b/packages/remix-express/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/express", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Express server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.6" + "@remix-run/node": "1.10.0-pre.7" }, "devDependencies": { "@types/express": "^4.17.9", diff --git a/packages/remix-netlify/CHANGELOG.md b/packages/remix-netlify/CHANGELOG.md index e8320c25944..324eb213966 100644 --- a/packages/remix-netlify/CHANGELOG.md +++ b/packages/remix-netlify/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/netlify` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-netlify/package.json b/packages/remix-netlify/package.json index 7a20de4a4e0..f906ac99cd4 100644 --- a/packages/remix-netlify/package.json +++ b/packages/remix-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/netlify", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Netlify server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.6" + "@remix-run/node": "1.10.0-pre.7" }, "devDependencies": { "@netlify/functions": "^1.0.0" diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md index 4eea22d8983..401d0378235 100644 --- a/packages/remix-node/CHANGELOG.md +++ b/packages/remix-node/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/node` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/server-runtime@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index 3f8ef040d72..a425e6bbf4e 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/node", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Node.js platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.6", + "@remix-run/server-runtime": "1.10.0-pre.7", "@remix-run/web-fetch": "^4.3.2", "@remix-run/web-file": "^3.0.2", "@remix-run/web-stream": "^1.0.3", diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md index ee36e95031d..40d1baa978d 100644 --- a/packages/remix-react/CHANGELOG.md +++ b/packages/remix-react/CHANGELOG.md @@ -1,5 +1,11 @@ # `@remix-run/react` +## 1.10.0-pre.7 + +### Patch Changes + +- Add outer ErrorBoundary to catch root ErrorBoundary thrown errors ([#5012](https://github.com/remix-run/remix/pull/5012)) + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index 98dc2ef80c6..6a13e77087a 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/react", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "React DOM bindings for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -21,7 +21,7 @@ "use-sync-external-store": "1.2.0" }, "devDependencies": { - "@remix-run/server-runtime": "1.10.0-pre.6", + "@remix-run/server-runtime": "1.10.0-pre.7", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^13.3.0", "abort-controller": "^3.0.0", diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md index 7f31e5d4827..a413c236256 100644 --- a/packages/remix-serve/CHANGELOG.md +++ b/packages/remix-serve/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/serve` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/express@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index 076ce5e4937..47056858a6a 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/serve", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Production application server for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -17,7 +17,7 @@ "remix-serve": "dist/cli.js" }, "dependencies": { - "@remix-run/express": "1.10.0-pre.6", + "@remix-run/express": "1.10.0-pre.7", "compression": "^1.7.4", "express": "^4.17.1", "morgan": "^1.10.0" diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md index b92c0f958e2..ad0e0dca2fd 100644 --- a/packages/remix-server-runtime/CHANGELOG.md +++ b/packages/remix-server-runtime/CHANGELOG.md @@ -1,5 +1,7 @@ # `@remix-run/server-runtime` +## 1.10.0-pre.7 + ## 1.10.0-pre.6 ## 1.10.0-pre.5 diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index 384cc8230fb..6cea1d1b5ca 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/server-runtime", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Server runtime for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index f94c10d2489..a404cf60f64 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -1,5 +1,13 @@ # @remix-run/testing +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/react@1.10.0-pre.7` + - `@remix-run/node@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index 147f96cc732..582e89e1cfd 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/testing", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Testing utilities for Remix apps", "homepage": "https://remix.run", "bugs": { @@ -16,8 +16,8 @@ "typings": "./dist/index.d.ts", "module": "./dist/esm/index.js", "dependencies": { - "@remix-run/node": "1.10.0-pre.6", - "@remix-run/react": "1.10.0-pre.6", + "@remix-run/node": "1.10.0-pre.7", + "@remix-run/react": "1.10.0-pre.7", "@remix-run/router": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/remix-vercel/CHANGELOG.md b/packages/remix-vercel/CHANGELOG.md index eecf044596a..91778b1ff03 100644 --- a/packages/remix-vercel/CHANGELOG.md +++ b/packages/remix-vercel/CHANGELOG.md @@ -1,5 +1,12 @@ # `@remix-run/vercel` +## 1.10.0-pre.7 + +### Patch Changes + +- Updated dependencies: + - `@remix-run/node@1.10.0-pre.7` + ## 1.10.0-pre.6 ### Patch Changes diff --git a/packages/remix-vercel/package.json b/packages/remix-vercel/package.json index ac3cac278e6..ccd313f1bc8 100644 --- a/packages/remix-vercel/package.json +++ b/packages/remix-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/vercel", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "Vercel server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.6" + "@remix-run/node": "1.10.0-pre.7" }, "devDependencies": { "@types/supertest": "^2.0.10", diff --git a/packages/remix/package.json b/packages/remix/package.json index 8f54105520b..a1cdaf0d339 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "remix", - "version": "1.10.0-pre.6", + "version": "1.10.0-pre.7", "description": "A framework for building better websites", "homepage": "https://remix.run", "bugs": { From 512d655233864708173a159b102fbc6dcddb2e1c Mon Sep 17 00:00:00 2001 From: Leo Singer <leo.p.singer@nasa.gov> Date: Fri, 6 Jan 2023 19:41:59 +0100 Subject: [PATCH 35/41] feat(remix-dev): suport `handle` in frontmatter (#4865) * feat(remix-dev): set handle from frontmatter in MDX files Fixes #4864. * Create smart-doors-sing.md Co-authored-by: Logan McAnsh <logan@mcan.sh> --- .changeset/smart-doors-sing.md | 6 ++++++ docs/guides/mdx.md | 9 ++++----- integration/mdx-test.ts | 6 ++---- packages/remix-dev/compiler/plugins/mdx.ts | 1 + 4 files changed, 13 insertions(+), 9 deletions(-) create mode 100644 .changeset/smart-doors-sing.md diff --git a/.changeset/smart-doors-sing.md b/.changeset/smart-doors-sing.md new file mode 100644 index 00000000000..ecc68545556 --- /dev/null +++ b/.changeset/smart-doors-sing.md @@ -0,0 +1,6 @@ +--- +"remix": patch +"@remix-run/dev": patch +--- + +suport `handle` in md(x) frontmatter diff --git a/docs/guides/mdx.md b/docs/guides/mdx.md index 40ac3ec3546..633dd18ad4b 100644 --- a/docs/guides/mdx.md +++ b/docs/guides/mdx.md @@ -67,7 +67,7 @@ You can reference your frontmatter data through "attributes". The title of this ### Advanced Example -You can even export all the other things in this module that you can in regular route modules in your mdx files like `loader` and `action`: +You can even export all the other things in this module that you can in regular route modules in your mdx files like `loader`, `action`, and `handle`: ```mdx --- @@ -77,6 +77,9 @@ meta: headers: Cache-Control: no-cache + +handle: + someData: abc --- import styles from "./first-post.css"; @@ -85,10 +88,6 @@ export const links = () => [ { rel: "stylesheet", href: styles }, ]; -export const handle = { - someData: "abc", -}; - import { json } from "@remix-run/node"; import { useLoaderData } from "@remix-run/react"; diff --git a/integration/mdx-test.ts b/integration/mdx-test.ts index 2db5f0d4d9f..4334bd6ad1e 100644 --- a/integration/mdx-test.ts +++ b/integration/mdx-test.ts @@ -55,6 +55,8 @@ test.describe("mdx", () => { meta: title: My First Post description: Isn't this awesome? +handle: + someData: abc headers: Cache-Control: no-cache --- @@ -63,10 +65,6 @@ export const links = () => [ { rel: "stylesheet", href: "app.css" } ] -export const handle = { - someData: "abc" -} - import { useLoaderData } from '@remix-run/react'; export const loader = async () => { diff --git a/packages/remix-dev/compiler/plugins/mdx.ts b/packages/remix-dev/compiler/plugins/mdx.ts index 49e137b8a1a..6211dfa166e 100644 --- a/packages/remix-dev/compiler/plugins/mdx.ts +++ b/packages/remix-dev/compiler/plugins/mdx.ts @@ -72,6 +72,7 @@ export function mdxPlugin(config: RemixConfig): esbuild.Plugin { export const filename = ${JSON.stringify(path.basename(args.path))}; export const headers = typeof attributes !== "undefined" && attributes.headers; export const meta = typeof attributes !== "undefined" && attributes.meta; +export const handle = typeof attributes !== "undefined" && attributes.handle; `; let compiled = await xdm.compile(fileContents, { From 818f6a9a36e108607ac43696dd773d626b12b713 Mon Sep 17 00:00:00 2001 From: Matt Brophy <matt@brophy.org> Date: Mon, 9 Jan 2023 13:55:06 -0500 Subject: [PATCH 36/41] Lock into react-router 6.6.2 stable release (#5035) --- .changeset/dry-coins-relax.md | 6 ++++++ packages/remix-react/package.json | 2 +- packages/remix-testing/package.json | 2 +- yarn.lock | 18 +++++++++--------- 4 files changed, 17 insertions(+), 11 deletions(-) create mode 100644 .changeset/dry-coins-relax.md diff --git a/.changeset/dry-coins-relax.md b/.changeset/dry-coins-relax.md new file mode 100644 index 00000000000..8239735379c --- /dev/null +++ b/.changeset/dry-coins-relax.md @@ -0,0 +1,6 @@ +--- +"@remix-run/react": patch +"@remix-run/testing": patch +--- + +Lock into react-router 6.6.2 stable release diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index 6a13e77087a..7181e2890aa 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -17,7 +17,7 @@ "module": "dist/esm/index.js", "dependencies": { "@remix-run/router": "1.2.1", - "react-router-dom": "6.6.2-pre.0", + "react-router-dom": "6.6.2", "use-sync-external-store": "1.2.0" }, "devDependencies": { diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index 582e89e1cfd..e39753f564d 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -21,7 +21,7 @@ "@remix-run/router": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "6.6.2-pre.0" + "react-router-dom": "6.6.2" }, "devDependencies": { "@types/node": "^18.11.9", diff --git a/yarn.lock b/yarn.lock index 69b20e927dd..1ed7139bff4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10535,18 +10535,18 @@ react-is@^17.0.1: resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-router-dom@6.6.2-pre.0: - version "6.6.2-pre.0" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.2-pre.0.tgz#2c1c9b1c50540dc7875301b4b39611f31c70cff7" - integrity sha512-+WCCc0GArJBfGI0kaLajBel2YPmwvxKJehTLYB4wubN2nTiN9lkwM4GHTb3qDhp8P+RRu7qzEw7HgQl6V2qSWQ== +react-router-dom@6.6.2: + version "6.6.2" + resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.2.tgz#bbf1f9b45855b218d22fc2d294b79408a084740a" + integrity sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA== dependencies: "@remix-run/router" "1.2.1" - react-router "6.6.2-pre.0" + react-router "6.6.2" -react-router@6.6.2-pre.0: - version "6.6.2-pre.0" - resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.2-pre.0.tgz#8672b4b204643c7fc44fb61e749b37b4e874e314" - integrity sha512-yzKRCIl3RE/Oz9nCY85EWw0cj5bmZcviFNTRdjYfhEx5lOmOrU5ROND6E3D98/70L14hIx25L9iv5v1HTN8TYg== +react-router@6.6.2: + version "6.6.2" + resolved "https://registry.npmjs.org/react-router/-/react-router-6.6.2.tgz#556f7b56cff7fe32c5c02429fef3fcb2ecd08111" + integrity sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ== dependencies: "@remix-run/router" "1.2.1" From 94e31772c009951d3fb6091b21be63da7f0f23b4 Mon Sep 17 00:00:00 2001 From: Chance Strickland <hi@chance.dev> Date: Mon, 9 Jan 2023 12:45:40 -0800 Subject: [PATCH 37/41] exit pre-release --- .changeset/pre.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index de5515e3b02..18bed3826dd 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -1,5 +1,5 @@ { - "mode": "pre", + "mode": "exit", "tag": "pre", "initialVersions": { "create-remix": "1.9.0", diff --git a/package.json b/package.json index 239b1e16035..00a9300eec6 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "posttest:integration": "node ./integration/helpers/cleanup.mjs", "test:primary": "jest", "changeset": "changeset", - "changeset:version": "changeset version && node ./scripts/patchup-version.mjs", + "changeset:version": "changeset version && node ./scripts/remove-prerelease-changelogs.mjs && node ./scripts/patchup-version.mjs", "changeset:release": "yarn build --tsc --publish && changeset publish", "version": "node ./scripts/version.js", "version:experimental": "node ./scripts/version.js experimental", From 46206a4265d611c1290c46af9bc4abac7320434f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Mon, 9 Jan 2023 21:32:20 +0000 Subject: [PATCH 38/41] chore: Update version for release --- .changeset/big-geese-cry.md | 6 -- .changeset/cool-crews-kneel.md | 5 -- .changeset/dry-coins-relax.md | 6 -- .changeset/eighty-hounds-mix.md | 5 -- .changeset/few-seas-hunt.md | 6 -- .changeset/gentle-yaks-lick.md | 7 -- .changeset/honest-phones-visit.md | 5 -- .changeset/late-bottles-shop.md | 9 --- .changeset/lucky-chairs-remember.md | 10 --- .changeset/many-zebras-arrive.md | 14 ---- .changeset/metal-birds-tease.md | 7 -- .changeset/mighty-rules-drum.md | 6 -- .changeset/pre.json | 42 ----------- .changeset/quick-cats-fix.md | 6 -- .changeset/rotten-bulldogs-reply.md | 7 -- .changeset/rude-colts-fold.md | 5 -- .changeset/shaggy-garlics-confess.md | 6 -- .changeset/silver-ducks-protect.md | 6 -- .changeset/thirty-eels-taste.md | 6 -- packages/create-remix/CHANGELOG.md | 53 +------------- packages/create-remix/package.json | 4 +- packages/remix-architect/CHANGELOG.md | 53 +------------- packages/remix-architect/package.json | 4 +- packages/remix-cloudflare-pages/CHANGELOG.md | 53 +------------- packages/remix-cloudflare-pages/package.json | 4 +- .../remix-cloudflare-workers/CHANGELOG.md | 53 +------------- .../remix-cloudflare-workers/package.json | 4 +- packages/remix-cloudflare/CHANGELOG.md | 53 +------------- packages/remix-cloudflare/package.json | 4 +- packages/remix-deno/CHANGELOG.md | 53 +------------- packages/remix-deno/package.json | 4 +- packages/remix-dev/CHANGELOG.md | 55 +-------------- packages/remix-dev/package.json | 6 +- packages/remix-eslint-config/CHANGELOG.md | 16 +---- packages/remix-eslint-config/package.json | 2 +- packages/remix-express/CHANGELOG.md | 53 +------------- packages/remix-express/package.json | 4 +- packages/remix-netlify/CHANGELOG.md | 53 +------------- packages/remix-netlify/package.json | 4 +- packages/remix-node/CHANGELOG.md | 53 +------------- packages/remix-node/package.json | 4 +- packages/remix-react/CHANGELOG.md | 44 +++--------- packages/remix-react/package.json | 4 +- packages/remix-serve/CHANGELOG.md | 55 +-------------- packages/remix-serve/package.json | 4 +- packages/remix-server-runtime/CHANGELOG.md | 33 ++------- packages/remix-server-runtime/package.json | 2 +- packages/remix-testing/CHANGELOG.md | 69 ++----------------- packages/remix-testing/package.json | 6 +- packages/remix-vercel/CHANGELOG.md | 53 +------------- packages/remix-vercel/package.json | 4 +- packages/remix/package.json | 2 +- 52 files changed, 79 insertions(+), 953 deletions(-) delete mode 100644 .changeset/big-geese-cry.md delete mode 100644 .changeset/cool-crews-kneel.md delete mode 100644 .changeset/dry-coins-relax.md delete mode 100644 .changeset/eighty-hounds-mix.md delete mode 100644 .changeset/few-seas-hunt.md delete mode 100644 .changeset/gentle-yaks-lick.md delete mode 100644 .changeset/honest-phones-visit.md delete mode 100644 .changeset/late-bottles-shop.md delete mode 100644 .changeset/lucky-chairs-remember.md delete mode 100644 .changeset/many-zebras-arrive.md delete mode 100644 .changeset/metal-birds-tease.md delete mode 100644 .changeset/mighty-rules-drum.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/quick-cats-fix.md delete mode 100644 .changeset/rotten-bulldogs-reply.md delete mode 100644 .changeset/rude-colts-fold.md delete mode 100644 .changeset/shaggy-garlics-confess.md delete mode 100644 .changeset/silver-ducks-protect.md delete mode 100644 .changeset/thirty-eels-taste.md diff --git a/.changeset/big-geese-cry.md b/.changeset/big-geese-cry.md deleted file mode 100644 index 546bb760bc8..00000000000 --- a/.changeset/big-geese-cry.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"remix": patch -"@remix-run/react": patch ---- - -fix: pass through request abort signal diff --git a/.changeset/cool-crews-kneel.md b/.changeset/cool-crews-kneel.md deleted file mode 100644 index dc45331fc71..00000000000 --- a/.changeset/cool-crews-kneel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@remix-run/react": patch ---- - -Fix content type on proxied action request diff --git a/.changeset/dry-coins-relax.md b/.changeset/dry-coins-relax.md deleted file mode 100644 index 8239735379c..00000000000 --- a/.changeset/dry-coins-relax.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@remix-run/react": patch -"@remix-run/testing": patch ---- - -Lock into react-router 6.6.2 stable release diff --git a/.changeset/eighty-hounds-mix.md b/.changeset/eighty-hounds-mix.md deleted file mode 100644 index e26ca059d4b..00000000000 --- a/.changeset/eighty-hounds-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@remix-run/react": patch ---- - -Add outer ErrorBoundary to catch root ErrorBoundary thrown errors diff --git a/.changeset/few-seas-hunt.md b/.changeset/few-seas-hunt.md deleted file mode 100644 index ee8713a1cf4..00000000000 --- a/.changeset/few-seas-hunt.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@remix-run/react": patch -"@remix-run/testing": patch ---- - -Bump RR versions diff --git a/.changeset/gentle-yaks-lick.md b/.changeset/gentle-yaks-lick.md deleted file mode 100644 index fb05b008796..00000000000 --- a/.changeset/gentle-yaks-lick.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@remix-run/react": patch -"@remix-run/server-runtime": patch -"@remix-run/testing": patch ---- - -Bump to react-router 6.6.1 pre versions diff --git a/.changeset/honest-phones-visit.md b/.changeset/honest-phones-visit.md deleted file mode 100644 index 0dea055942c..00000000000 --- a/.changeset/honest-phones-visit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@remix-run/react": patch ---- - -Add a few missed re-exports and back-compat diff --git a/.changeset/late-bottles-shop.md b/.changeset/late-bottles-shop.md deleted file mode 100644 index 7eb1008fa2d..00000000000 --- a/.changeset/late-bottles-shop.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"remix": patch -"@remix-run/architect": patch -"@remix-run/netlify": patch ---- - -improve performance of `isBinaryType` in the netlify and architect adapters - -previous implementation from arc itself has a complexity of O(N\*includesComplexity), where as now it is O(includesComplexity). diff --git a/.changeset/lucky-chairs-remember.md b/.changeset/lucky-chairs-remember.md deleted file mode 100644 index b64a97f4dce..00000000000 --- a/.changeset/lucky-chairs-remember.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"remix": patch -"@remix-run/cloudflare": patch -"@remix-run/deno": patch -"@remix-run/node": patch -"@remix-run/serve": patch -"@remix-run/server-runtime": patch ---- - -re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages diff --git a/.changeset/many-zebras-arrive.md b/.changeset/many-zebras-arrive.md deleted file mode 100644 index 6617a9bfbbb..00000000000 --- a/.changeset/many-zebras-arrive.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -"@remix-run/dev": patch ---- - -Fix TS->JS conversion when creating a new Remix project via the CLI - -The TS->JS migration was removed from the CLI codemod options, but still -used for TS->JS conversion when creating a new Remix project from the -CLI. The TS modules responsible for the TS->JS conversion were -incorrectly removed from the Rollup build, resulting in the -corresponding built JS modules being absent. That caused the CLI to -error when trying to perform TS->JS conversion. This changes -reintroduces the wiring to build the modules responsible for the TS->JS -conversion. diff --git a/.changeset/metal-birds-tease.md b/.changeset/metal-birds-tease.md deleted file mode 100644 index 4418fed4fa7..00000000000 --- a/.changeset/metal-birds-tease.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@remix-run/react": patch -"@remix-run/server-runtime": patch -"@remix-run/testing": patch ---- - -Bump react router version to latest diff --git a/.changeset/mighty-rules-drum.md b/.changeset/mighty-rules-drum.md deleted file mode 100644 index 738c276f515..00000000000 --- a/.changeset/mighty-rules-drum.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"remix": patch -"@remix-run/dev": patch ---- - -Resolve asset entry full path to support monorepo import of styles diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index 18bed3826dd..00000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "mode": "exit", - "tag": "pre", - "initialVersions": { - "create-remix": "1.9.0", - "remix": "1.9.0", - "@remix-run/architect": "1.9.0", - "@remix-run/cloudflare": "1.9.0", - "@remix-run/cloudflare-pages": "1.9.0", - "@remix-run/cloudflare-workers": "1.9.0", - "@remix-run/deno": "1.9.0", - "@remix-run/dev": "1.9.0", - "@remix-run/eslint-config": "1.9.0", - "@remix-run/express": "1.9.0", - "@remix-run/netlify": "1.9.0", - "@remix-run/node": "1.9.0", - "@remix-run/react": "1.9.0", - "@remix-run/serve": "1.9.0", - "@remix-run/server-runtime": "1.9.0", - "@remix-run/testing": "1.9.0", - "@remix-run/vercel": "1.9.0" - }, - "changesets": [ - "big-geese-cry", - "cool-crews-kneel", - "eighty-hounds-mix", - "few-seas-hunt", - "gentle-yaks-lick", - "honest-phones-visit", - "late-bottles-shop", - "lucky-chairs-remember", - "many-zebras-arrive", - "metal-birds-tease", - "mighty-rules-drum", - "quick-cats-fix", - "rotten-bulldogs-reply", - "rude-colts-fold", - "shaggy-garlics-confess", - "silver-ducks-protect", - "thirty-eels-taste" - ] -} diff --git a/.changeset/quick-cats-fix.md b/.changeset/quick-cats-fix.md deleted file mode 100644 index c1cd4ecc0ad..00000000000 --- a/.changeset/quick-cats-fix.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"remix": patch -"@remix-run/testing": patch ---- - -remove internal `installGlobals` function now that `@remix-run/web-form-data` includes support for passing a `HTMLFormElement` diff --git a/.changeset/rotten-bulldogs-reply.md b/.changeset/rotten-bulldogs-reply.md deleted file mode 100644 index b36812e43a2..00000000000 --- a/.changeset/rotten-bulldogs-reply.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"remix": patch -"@remix-run/serve": patch -"@remix-run/server-runtime": patch ---- - -`V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` diff --git a/.changeset/rude-colts-fold.md b/.changeset/rude-colts-fold.md deleted file mode 100644 index de4402a88d6..00000000000 --- a/.changeset/rude-colts-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@remix-run/react": patch ---- - -Add back `ShouldReloadFunction` type with deprecated notice diff --git a/.changeset/shaggy-garlics-confess.md b/.changeset/shaggy-garlics-confess.md deleted file mode 100644 index 4d458bbea19..00000000000 --- a/.changeset/shaggy-garlics-confess.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@remix-run/react": patch -"@remix-run/server-runtime": patch ---- - -Lock into RR 6.6.0 diff --git a/.changeset/silver-ducks-protect.md b/.changeset/silver-ducks-protect.md deleted file mode 100644 index 04f476e3d0d..00000000000 --- a/.changeset/silver-ducks-protect.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"remix": patch -"@remix-run/testing": patch ---- - -use react router apis directly diff --git a/.changeset/thirty-eels-taste.md b/.changeset/thirty-eels-taste.md deleted file mode 100644 index ec167bd9beb..00000000000 --- a/.changeset/thirty-eels-taste.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@remix-run/react": minor -"@remix-run/server-runtime": minor ---- - -Update Remix to use React Router 6.4+ data APIs diff --git a/packages/create-remix/CHANGELOG.md b/packages/create-remix/CHANGELOG.md index ca93b1eb0b5..5338316bd90 100644 --- a/packages/create-remix/CHANGELOG.md +++ b/packages/create-remix/CHANGELOG.md @@ -1,60 +1,11 @@ # `create-remix` -## 1.10.0-pre.7 +## 1.10.0 ### Patch Changes - Updated dependencies: - - `@remix-run/dev@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/dev@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/dev@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/dev@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/dev@1.10.0-pre.3` - -## 1.10.0-pre.2 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/dev@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/dev@1.10.0-pre.1` - -## 1.10.0-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/dev@1.10.0-pre.0` + - `@remix-run/dev@1.10.0` ## 1.9.0 diff --git a/packages/create-remix/package.json b/packages/create-remix/package.json index 2c941b9dc77..ac7fcea790d 100644 --- a/packages/create-remix/package.json +++ b/packages/create-remix/package.json @@ -1,6 +1,6 @@ { "name": "create-remix", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Create a new Remix app", "homepage": "https://remix.run", "bugs": { @@ -17,7 +17,7 @@ "create-remix": "dist/cli.js" }, "dependencies": { - "@remix-run/dev": "1.10.0-pre.7" + "@remix-run/dev": "1.10.0" }, "engines": { "node": ">=14" diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md index 750e8016d9e..f600ad632eb 100644 --- a/packages/remix-architect/CHANGELOG.md +++ b/packages/remix-architect/CHANGELOG.md @@ -1,55 +1,6 @@ # `@remix-run/architect` -## 1.10.0-pre.7 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.3` - -## 1.10.0-pre.2 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.1` - -## 1.10.0-pre.0 +## 1.10.0 ### Patch Changes @@ -58,7 +9,7 @@ previous implementation from arc itself has a complexity of O(N\*includesComplexity), where as now it is O(includesComplexity). - Updated dependencies: - - `@remix-run/node@1.10.0-pre.0` + - `@remix-run/node@1.10.0` ## 1.9.0 diff --git a/packages/remix-architect/package.json b/packages/remix-architect/package.json index 304d9ca7737..2872383485e 100644 --- a/packages/remix-architect/package.json +++ b/packages/remix-architect/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/architect", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Architect server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@architect/functions": "^5.0.2", - "@remix-run/node": "1.10.0-pre.7", + "@remix-run/node": "1.10.0", "@types/aws-lambda": "^8.10.82" }, "devDependencies": { diff --git a/packages/remix-cloudflare-pages/CHANGELOG.md b/packages/remix-cloudflare-pages/CHANGELOG.md index ef03abd9d3f..c28a97c2c1d 100644 --- a/packages/remix-cloudflare-pages/CHANGELOG.md +++ b/packages/remix-cloudflare-pages/CHANGELOG.md @@ -1,60 +1,11 @@ # `@remix-run/cloudflare-pages` -## 1.10.0-pre.7 +## 1.10.0 ### Patch Changes - Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.3` - -## 1.10.0-pre.2 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.1` - -## 1.10.0-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.0` + - `@remix-run/cloudflare@1.10.0` ## 1.9.0 diff --git a/packages/remix-cloudflare-pages/package.json b/packages/remix-cloudflare-pages/package.json index 47ca4d20ff0..4d0cba56213 100644 --- a/packages/remix-cloudflare-pages/package.json +++ b/packages/remix-cloudflare-pages/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-pages", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Cloudflare Pages request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "module": "dist/esm/index.js", "dependencies": { - "@remix-run/cloudflare": "1.10.0-pre.7" + "@remix-run/cloudflare": "1.10.0" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0", diff --git a/packages/remix-cloudflare-workers/CHANGELOG.md b/packages/remix-cloudflare-workers/CHANGELOG.md index 9d747d8e847..aff1c84d132 100644 --- a/packages/remix-cloudflare-workers/CHANGELOG.md +++ b/packages/remix-cloudflare-workers/CHANGELOG.md @@ -1,60 +1,11 @@ # `@remix-run/cloudflare-workers` -## 1.10.0-pre.7 +## 1.10.0 ### Patch Changes - Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.3` - -## 1.10.0-pre.2 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.1` - -## 1.10.0-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/cloudflare@1.10.0-pre.0` + - `@remix-run/cloudflare@1.10.0` ## 1.9.0 diff --git a/packages/remix-cloudflare-workers/package.json b/packages/remix-cloudflare-workers/package.json index 1e624354c51..f5fa6756f57 100644 --- a/packages/remix-cloudflare-workers/package.json +++ b/packages/remix-cloudflare-workers/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare-workers", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Cloudflare worker request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -16,7 +16,7 @@ "module": "dist/esm/index.js", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/cloudflare": "1.10.0-pre.7" + "@remix-run/cloudflare": "1.10.0" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md index 2cf448fa534..4ffe86664e7 100644 --- a/packages/remix-cloudflare/CHANGELOG.md +++ b/packages/remix-cloudflare/CHANGELOG.md @@ -1,61 +1,12 @@ # `@remix-run/cloudflare` -## 1.10.0-pre.7 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.3` - -## 1.10.0-pre.2 +## 1.10.0 ### Patch Changes - re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) - Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.1` - -## 1.10.0-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.0` + - `@remix-run/server-runtime@1.10.0` ## 1.9.0 diff --git a/packages/remix-cloudflare/package.json b/packages/remix-cloudflare/package.json index 95a272e7570..cefe0d51c01 100644 --- a/packages/remix-cloudflare/package.json +++ b/packages/remix-cloudflare/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/cloudflare", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Cloudflare platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "dependencies": { "@cloudflare/kv-asset-handler": "^0.1.3", - "@remix-run/server-runtime": "1.10.0-pre.7" + "@remix-run/server-runtime": "1.10.0" }, "devDependencies": { "@cloudflare/workers-types": "^3.4.0" diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index bea5dc7df6e..315ab804595 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -1,61 +1,12 @@ # `@remix-run/deno` -## 1.10.0-pre.7 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.3` - -## 1.10.0-pre.2 +## 1.10.0 ### Patch Changes - re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) - Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.1` - -## 1.10.0-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.0` + - `@remix-run/server-runtime@1.10.0` ## 1.9.0 diff --git a/packages/remix-deno/package.json b/packages/remix-deno/package.json index a89d120d4a9..472f9c73b63 100644 --- a/packages/remix-deno/package.json +++ b/packages/remix-deno/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/deno", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Deno platform abstractions for Remix", "homepage": "https://remix.run", "main": "./index.ts", @@ -15,7 +15,7 @@ "license": "MIT", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.7", + "@remix-run/server-runtime": "1.10.0", "mime": "^3.0.0" }, "engines": { diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md index 67cad445ac4..59e913407d4 100644 --- a/packages/remix-dev/CHANGELOG.md +++ b/packages/remix-dev/CHANGELOG.md @@ -1,55 +1,6 @@ # `@remix-run/dev` -## 1.10.0-pre.7 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.3` - -## 1.10.0-pre.2 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.1` - -## 1.10.0-pre.0 +## 1.10.0 ### Patch Changes @@ -65,9 +16,9 @@ conversion. - Resolve asset entry full path to support monorepo import of styles ([#4855](https://github.com/remix-run/remix/pull/4855)) + - Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.0` - - `@remix-run/serve@1.10.0-pre.0` + - `@remix-run/server-runtime@1.10.0` ## 1.9.0 diff --git a/packages/remix-dev/package.json b/packages/remix-dev/package.json index b9907cdb9b2..501d057fe29 100644 --- a/packages/remix-dev/package.json +++ b/packages/remix-dev/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/dev", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Dev tools and CLI for Remix", "homepage": "https://remix.run", "bugs": { @@ -26,7 +26,7 @@ "@babel/types": "^7.20.2", "@esbuild-plugins/node-modules-polyfill": "^0.1.4", "@npmcli/package-json": "^2.0.0", - "@remix-run/server-runtime": "1.10.0-pre.7", + "@remix-run/server-runtime": "1.10.0", "arg": "^5.0.1", "cacache": "^15.0.5", "chalk": "^4.1.2", @@ -63,7 +63,7 @@ "xdm": "^2.0.0" }, "devDependencies": { - "@remix-run/serve": "1.10.0-pre.7", + "@remix-run/serve": "1.10.0", "@types/cacache": "^15.0.0", "@types/gunzip-maybe": "^1.4.0", "@types/inquirer": "^8.2.0", diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md index f45685257a2..addaa3febd8 100644 --- a/packages/remix-eslint-config/CHANGELOG.md +++ b/packages/remix-eslint-config/CHANGELOG.md @@ -1,20 +1,6 @@ # `@remix-run/eslint-config` -## 1.10.0-pre.7 - -## 1.10.0-pre.6 - -## 1.10.0-pre.5 - -## 1.10.0-pre.4 - -## 1.10.0-pre.3 - -## 1.10.0-pre.2 - -## 1.10.0-pre.1 - -## 1.10.0-pre.0 +## 1.10.0 ## 1.9.0 diff --git a/packages/remix-eslint-config/package.json b/packages/remix-eslint-config/package.json index 4805b7f0892..38d323f5b8a 100644 --- a/packages/remix-eslint-config/package.json +++ b/packages/remix-eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/eslint-config", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "ESLint configuration for Remix projects", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-express/CHANGELOG.md b/packages/remix-express/CHANGELOG.md index 444b4d300de..60bc12a4299 100644 --- a/packages/remix-express/CHANGELOG.md +++ b/packages/remix-express/CHANGELOG.md @@ -1,60 +1,11 @@ # `@remix-run/express` -## 1.10.0-pre.7 +## 1.10.0 ### Patch Changes - Updated dependencies: - - `@remix-run/node@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.3` - -## 1.10.0-pre.2 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.1` - -## 1.10.0-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.0` + - `@remix-run/node@1.10.0` ## 1.9.0 diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json index fa451876f96..9ffdb862b6d 100644 --- a/packages/remix-express/package.json +++ b/packages/remix-express/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/express", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Express server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.7" + "@remix-run/node": "1.10.0" }, "devDependencies": { "@types/express": "^4.17.9", diff --git a/packages/remix-netlify/CHANGELOG.md b/packages/remix-netlify/CHANGELOG.md index 324eb213966..ad71874c7a1 100644 --- a/packages/remix-netlify/CHANGELOG.md +++ b/packages/remix-netlify/CHANGELOG.md @@ -1,55 +1,6 @@ # `@remix-run/netlify` -## 1.10.0-pre.7 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.3` - -## 1.10.0-pre.2 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.1` - -## 1.10.0-pre.0 +## 1.10.0 ### Patch Changes @@ -58,7 +9,7 @@ previous implementation from arc itself has a complexity of O(N\*includesComplexity), where as now it is O(includesComplexity). - Updated dependencies: - - `@remix-run/node@1.10.0-pre.0` + - `@remix-run/node@1.10.0` ## 1.9.0 diff --git a/packages/remix-netlify/package.json b/packages/remix-netlify/package.json index f906ac99cd4..ca3c0ec7439 100644 --- a/packages/remix-netlify/package.json +++ b/packages/remix-netlify/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/netlify", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Netlify server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.7" + "@remix-run/node": "1.10.0" }, "devDependencies": { "@netlify/functions": "^1.0.0" diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md index 401d0378235..6f1cd638783 100644 --- a/packages/remix-node/CHANGELOG.md +++ b/packages/remix-node/CHANGELOG.md @@ -1,61 +1,12 @@ # `@remix-run/node` -## 1.10.0-pre.7 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.3` - -## 1.10.0-pre.2 +## 1.10.0 ### Patch Changes - re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) - Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.1` - -## 1.10.0-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/server-runtime@1.10.0-pre.0` + - `@remix-run/server-runtime@1.10.0` ## 1.9.0 diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index a425e6bbf4e..335fc411bfc 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/node", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Node.js platform abstractions for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -15,7 +15,7 @@ "typings": "dist/index.d.ts", "sideEffects": false, "dependencies": { - "@remix-run/server-runtime": "1.10.0-pre.7", + "@remix-run/server-runtime": "1.10.0", "@remix-run/web-fetch": "^4.3.2", "@remix-run/web-file": "^3.0.2", "@remix-run/web-stream": "^1.0.3", diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md index 40d1baa978d..741f7c1fd14 100644 --- a/packages/remix-react/CHANGELOG.md +++ b/packages/remix-react/CHANGELOG.md @@ -1,52 +1,24 @@ # `@remix-run/react` -## 1.10.0-pre.7 +## 1.10.0 -### Patch Changes - -- Add outer ErrorBoundary to catch root ErrorBoundary thrown errors ([#5012](https://github.com/remix-run/remix/pull/5012)) +### Minor Changes -## 1.10.0-pre.6 +- Update Remix to use React Router 6.4+ data APIs ([#4900](https://github.com/remix-run/remix/pull/4900)) ### Patch Changes +- fix: pass through request abort signal ([#4954](https://github.com/remix-run/remix/pull/4954)) - Fix content type on proxied action request ([#4995](https://github.com/remix-run/remix/pull/4995)) +- Lock into react-router 6.6.2 stable release ([#5035](https://github.com/remix-run/remix/pull/5035)) +- Add outer ErrorBoundary to catch root ErrorBoundary thrown errors ([#5012](https://github.com/remix-run/remix/pull/5012)) - Bump RR versions ([#5005](https://github.com/remix-run/remix/pull/5005)) - -## 1.10.0-pre.5 - -### Patch Changes - -- Add back `ShouldReloadFunction` type with deprecated notice ([`28ccd9973`](https://github.com/remix-run/remix/commit/28ccd99739fa36a93a6f26a300f9f83baf02b896)) - -## 1.10.0-pre.4 - -### Patch Changes - -- fix: pass through request abort signal ([#4954](https://github.com/remix-run/remix/pull/4954)) -- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) - -## 1.10.0-pre.3 - -## 1.10.0-pre.2 - -### Patch Changes - - Bump to react-router 6.6.1 pre versions ([#4944](https://github.com/remix-run/remix/pull/4944)) - -## 1.10.0-pre.1 - -### Patch Changes - - Add a few missed re-exports and back-compat ([`dc079d29b`](https://github.com/remix-run/remix/commit/dc079d29b373d3ebe3781facc7da637c64ce81c3)) +- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) +- Add back `ShouldReloadFunction` type with deprecated notice ([`28ccd9973`](https://github.com/remix-run/remix/commit/28ccd99739fa36a93a6f26a300f9f83baf02b896)) - Lock into RR 6.6.0 ([#4935](https://github.com/remix-run/remix/pull/4935)) -## 1.10.0-pre.0 - -### Minor Changes - -- Update Remix to use React Router 6.4+ data APIs ([#4900](https://github.com/remix-run/remix/pull/4900)) - ## 1.9.0 ### Patch Changes diff --git a/packages/remix-react/package.json b/packages/remix-react/package.json index 7181e2890aa..a0846da782a 100644 --- a/packages/remix-react/package.json +++ b/packages/remix-react/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/react", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "React DOM bindings for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -21,7 +21,7 @@ "use-sync-external-store": "1.2.0" }, "devDependencies": { - "@remix-run/server-runtime": "1.10.0-pre.7", + "@remix-run/server-runtime": "1.10.0", "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^13.3.0", "abort-controller": "^3.0.0", diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md index a413c236256..b9d7b48e489 100644 --- a/packages/remix-serve/CHANGELOG.md +++ b/packages/remix-serve/CHANGELOG.md @@ -1,62 +1,13 @@ # `@remix-run/serve` -## 1.10.0-pre.7 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/express@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/express@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/express@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/express@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- `V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` ([#4947](https://github.com/remix-run/remix/pull/4947)) -- Updated dependencies: - - `@remix-run/express@1.10.0-pre.3` - -## 1.10.0-pre.2 +## 1.10.0 ### Patch Changes - re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) +- `V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` ([#4947](https://github.com/remix-run/remix/pull/4947)) - Updated dependencies: - - `@remix-run/express@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/express@1.10.0-pre.1` - -## 1.10.0-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/express@1.10.0-pre.0` + - `@remix-run/express@1.10.0` ## 1.9.0 diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index 47056858a6a..c664514c172 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/serve", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Production application server for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -17,7 +17,7 @@ "remix-serve": "dist/cli.js" }, "dependencies": { - "@remix-run/express": "1.10.0-pre.7", + "@remix-run/express": "1.10.0", "compression": "^1.7.4", "express": "^4.17.1", "morgan": "^1.10.0" diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md index ad0e0dca2fd..940dcce1493 100644 --- a/packages/remix-server-runtime/CHANGELOG.md +++ b/packages/remix-server-runtime/CHANGELOG.md @@ -1,42 +1,19 @@ # `@remix-run/server-runtime` -## 1.10.0-pre.7 +## 1.10.0 -## 1.10.0-pre.6 - -## 1.10.0-pre.5 - -## 1.10.0-pre.4 - -### Patch Changes - -- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) - -## 1.10.0-pre.3 - -### Patch Changes - -- `V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` ([#4947](https://github.com/remix-run/remix/pull/4947)) +### Minor Changes -## 1.10.0-pre.2 +- Update Remix to use React Router 6.4+ data APIs ([#4900](https://github.com/remix-run/remix/pull/4900)) ### Patch Changes - Bump to react-router 6.6.1 pre versions ([#4944](https://github.com/remix-run/remix/pull/4944)) - re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) - -## 1.10.0-pre.1 - -### Patch Changes - +- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) +- `V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` ([#4947](https://github.com/remix-run/remix/pull/4947)) - Lock into RR 6.6.0 ([#4935](https://github.com/remix-run/remix/pull/4935)) -## 1.10.0-pre.0 - -### Minor Changes - -- Update Remix to use React Router 6.4+ data APIs ([#4900](https://github.com/remix-run/remix/pull/4900)) - ## 1.9.0 ### Patch Changes diff --git a/packages/remix-server-runtime/package.json b/packages/remix-server-runtime/package.json index 6cea1d1b5ca..3cfb68eac1b 100644 --- a/packages/remix-server-runtime/package.json +++ b/packages/remix-server-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/server-runtime", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Server runtime for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index a404cf60f64..1b5c48d06db 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -1,75 +1,18 @@ # @remix-run/testing -## 1.10.0-pre.7 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/react@1.10.0-pre.7` - - `@remix-run/node@1.10.0-pre.7` - -## 1.10.0-pre.6 +## 1.10.0 ### Patch Changes +- Lock into react-router 6.6.2 stable release ([#5035](https://github.com/remix-run/remix/pull/5035)) - Bump RR versions ([#5005](https://github.com/remix-run/remix/pull/5005)) -- Updated dependencies: - - `@remix-run/react@1.10.0-pre.6` - - `@remix-run/node@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/react@1.10.0-pre.5` - - `@remix-run/node@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) -- Updated dependencies: - - `@remix-run/react@1.10.0-pre.4` - - `@remix-run/node@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.3` - - `@remix-run/react@1.10.0-pre.3` - -## 1.10.0-pre.2 - -### Patch Changes - - Bump to react-router 6.6.1 pre versions ([#4944](https://github.com/remix-run/remix/pull/4944)) -- use react router apis directly ([#4915](https://github.com/remix-run/remix/pull/4915)) -- Updated dependencies: - - `@remix-run/react@1.10.0-pre.2` - - `@remix-run/node@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/react@1.10.0-pre.1` - - `@remix-run/server-runtime@1.10.0-pre.1` - - `@remix-run/node@1.10.0-pre.1` - -## 1.10.0-pre.0 - -### Patch Changes - +- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) - remove internal `installGlobals` function now that `@remix-run/web-form-data` includes support for passing a `HTMLFormElement` ([#4755](https://github.com/remix-run/remix/pull/4755)) +- use react router apis directly ([#4915](https://github.com/remix-run/remix/pull/4915)) - Updated dependencies: - - `@remix-run/react@1.10.0-pre.0` - - `@remix-run/server-runtime@1.10.0-pre.0` - - `@remix-run/node@1.10.0-pre.0` + - `@remix-run/react@1.10.0` + - `@remix-run/node@1.10.0` ## 1.9.0 diff --git a/packages/remix-testing/package.json b/packages/remix-testing/package.json index e39753f564d..a2ee9f43c5d 100644 --- a/packages/remix-testing/package.json +++ b/packages/remix-testing/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/testing", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Testing utilities for Remix apps", "homepage": "https://remix.run", "bugs": { @@ -16,8 +16,8 @@ "typings": "./dist/index.d.ts", "module": "./dist/esm/index.js", "dependencies": { - "@remix-run/node": "1.10.0-pre.7", - "@remix-run/react": "1.10.0-pre.7", + "@remix-run/node": "1.10.0", + "@remix-run/react": "1.10.0", "@remix-run/router": "1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/remix-vercel/CHANGELOG.md b/packages/remix-vercel/CHANGELOG.md index 91778b1ff03..dc11e4c1948 100644 --- a/packages/remix-vercel/CHANGELOG.md +++ b/packages/remix-vercel/CHANGELOG.md @@ -1,60 +1,11 @@ # `@remix-run/vercel` -## 1.10.0-pre.7 +## 1.10.0 ### Patch Changes - Updated dependencies: - - `@remix-run/node@1.10.0-pre.7` - -## 1.10.0-pre.6 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.6` - -## 1.10.0-pre.5 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.5` - -## 1.10.0-pre.4 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.4` - -## 1.10.0-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.3` - -## 1.10.0-pre.2 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.2` - -## 1.10.0-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.1` - -## 1.10.0-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@remix-run/node@1.10.0-pre.0` + - `@remix-run/node@1.10.0` ## 1.9.0 diff --git a/packages/remix-vercel/package.json b/packages/remix-vercel/package.json index ccd313f1bc8..76d2c42fcd2 100644 --- a/packages/remix-vercel/package.json +++ b/packages/remix-vercel/package.json @@ -1,6 +1,6 @@ { "name": "@remix-run/vercel", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "Vercel server request handler for Remix", "bugs": { "url": "https://github.com/remix-run/remix/issues" @@ -14,7 +14,7 @@ "main": "dist/index.js", "typings": "dist/index.d.ts", "dependencies": { - "@remix-run/node": "1.10.0-pre.7" + "@remix-run/node": "1.10.0" }, "devDependencies": { "@types/supertest": "^2.0.10", diff --git a/packages/remix/package.json b/packages/remix/package.json index a1cdaf0d339..cdaafd3a1a7 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "remix", - "version": "1.10.0-pre.7", + "version": "1.10.0", "description": "A framework for building better websites", "homepage": "https://remix.run", "bugs": { From 6fd74371b6111920ae9cd74464fbb2bb8736c01d Mon Sep 17 00:00:00 2001 From: Chance Strickland <hi@chance.dev> Date: Mon, 9 Jan 2023 14:12:20 -0800 Subject: [PATCH 39/41] update changelogs --- packages/remix-architect/CHANGELOG.md | 5 +---- packages/remix-cloudflare/CHANGELOG.md | 2 +- packages/remix-deno/CHANGELOG.md | 2 +- packages/remix-dev/CHANGELOG.md | 13 +------------ packages/remix-eslint-config/CHANGELOG.md | 2 ++ packages/remix-netlify/CHANGELOG.md | 5 +---- packages/remix-node/CHANGELOG.md | 2 +- packages/remix-react/CHANGELOG.md | 20 ++++++-------------- packages/remix-serve/CHANGELOG.md | 2 -- packages/remix-server-runtime/CHANGELOG.md | 9 +++------ packages/remix-testing/CHANGELOG.md | 8 ++------ 11 files changed, 19 insertions(+), 51 deletions(-) diff --git a/packages/remix-architect/CHANGELOG.md b/packages/remix-architect/CHANGELOG.md index f600ad632eb..c451d381d2d 100644 --- a/packages/remix-architect/CHANGELOG.md +++ b/packages/remix-architect/CHANGELOG.md @@ -4,10 +4,7 @@ ### Patch Changes -- improve performance of `isBinaryType` in the netlify and architect adapters ([#4761](https://github.com/remix-run/remix/pull/4761)) - - previous implementation from arc itself has a complexity of O(N\*includesComplexity), where as now it is O(includesComplexity). - +- Improve performance of `isBinaryType` ([#4761](https://github.com/remix-run/remix/pull/4761)) - Updated dependencies: - `@remix-run/node@1.10.0` diff --git a/packages/remix-cloudflare/CHANGELOG.md b/packages/remix-cloudflare/CHANGELOG.md index 4ffe86664e7..c79983a5562 100644 --- a/packages/remix-cloudflare/CHANGELOG.md +++ b/packages/remix-cloudflare/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) +- Export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` types from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) - Updated dependencies: - `@remix-run/server-runtime@1.10.0` diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index 315ab804595..93429ebcbdc 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) +- Export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` types from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) - Updated dependencies: - `@remix-run/server-runtime@1.10.0` diff --git a/packages/remix-dev/CHANGELOG.md b/packages/remix-dev/CHANGELOG.md index 59e913407d4..e49d2b94bfb 100644 --- a/packages/remix-dev/CHANGELOG.md +++ b/packages/remix-dev/CHANGELOG.md @@ -4,19 +4,8 @@ ### Patch Changes -- Fix TS->JS conversion when creating a new Remix project via the CLI ([#4891](https://github.com/remix-run/remix/pull/4891)) - - The TS->JS migration was removed from the CLI codemod options, but still - used for TS->JS conversion when creating a new Remix project from the - CLI. The TS modules responsible for the TS->JS conversion were - incorrectly removed from the Rollup build, resulting in the - corresponding built JS modules being absent. That caused the CLI to - error when trying to perform TS->JS conversion. This changes - reintroduces the wiring to build the modules responsible for the TS->JS - conversion. - +- Fixed several issues with TypeScript to JavaScript conversion when running `create-remix` ([#4891](https://github.com/remix-run/remix/pull/4891)) - Resolve asset entry full path to support monorepo import of styles ([#4855](https://github.com/remix-run/remix/pull/4855)) - - Updated dependencies: - `@remix-run/server-runtime@1.10.0` diff --git a/packages/remix-eslint-config/CHANGELOG.md b/packages/remix-eslint-config/CHANGELOG.md index addaa3febd8..f2e185bd9bc 100644 --- a/packages/remix-eslint-config/CHANGELOG.md +++ b/packages/remix-eslint-config/CHANGELOG.md @@ -2,6 +2,8 @@ ## 1.10.0 +No significant changes to this package were made in this release. [See the releases page on GitHub](https://github.com/remix-run/remix/releases/tag/remix%401.10.0) for an overview of all changes in v1.10.0. + ## 1.9.0 No significant changes to this package were made in this release. [See the releases page on GitHub](https://github.com/remix-run/remix/releases/tag/remix%401.9.0) for an overview of all changes in v1.9.0. diff --git a/packages/remix-netlify/CHANGELOG.md b/packages/remix-netlify/CHANGELOG.md index ad71874c7a1..d32484f99a5 100644 --- a/packages/remix-netlify/CHANGELOG.md +++ b/packages/remix-netlify/CHANGELOG.md @@ -4,10 +4,7 @@ ### Patch Changes -- improve performance of `isBinaryType` in the netlify and architect adapters ([#4761](https://github.com/remix-run/remix/pull/4761)) - - previous implementation from arc itself has a complexity of O(N\*includesComplexity), where as now it is O(includesComplexity). - +- Improve performance of `isBinaryType` ([#4761](https://github.com/remix-run/remix/pull/4761)) - Updated dependencies: - `@remix-run/node@1.10.0` diff --git a/packages/remix-node/CHANGELOG.md b/packages/remix-node/CHANGELOG.md index 6f1cd638783..e2fe011c030 100644 --- a/packages/remix-node/CHANGELOG.md +++ b/packages/remix-node/CHANGELOG.md @@ -4,7 +4,7 @@ ### Patch Changes -- re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) +- Export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` types from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) - Updated dependencies: - `@remix-run/server-runtime@1.10.0` diff --git a/packages/remix-react/CHANGELOG.md b/packages/remix-react/CHANGELOG.md index 741f7c1fd14..09eb7cd9be9 100644 --- a/packages/remix-react/CHANGELOG.md +++ b/packages/remix-react/CHANGELOG.md @@ -4,20 +4,12 @@ ### Minor Changes -- Update Remix to use React Router 6.4+ data APIs ([#4900](https://github.com/remix-run/remix/pull/4900)) - -### Patch Changes - -- fix: pass through request abort signal ([#4954](https://github.com/remix-run/remix/pull/4954)) -- Fix content type on proxied action request ([#4995](https://github.com/remix-run/remix/pull/4995)) -- Lock into react-router 6.6.2 stable release ([#5035](https://github.com/remix-run/remix/pull/5035)) -- Add outer ErrorBoundary to catch root ErrorBoundary thrown errors ([#5012](https://github.com/remix-run/remix/pull/5012)) -- Bump RR versions ([#5005](https://github.com/remix-run/remix/pull/5005)) -- Bump to react-router 6.6.1 pre versions ([#4944](https://github.com/remix-run/remix/pull/4944)) -- Add a few missed re-exports and back-compat ([`dc079d29b`](https://github.com/remix-run/remix/commit/dc079d29b373d3ebe3781facc7da637c64ce81c3)) -- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) -- Add back `ShouldReloadFunction` type with deprecated notice ([`28ccd9973`](https://github.com/remix-run/remix/commit/28ccd99739fa36a93a6f26a300f9f83baf02b896)) -- Lock into RR 6.6.0 ([#4935](https://github.com/remix-run/remix/pull/4935)) +- Update Remix to use new data APIs introduced in React Router v6.4 ([#4900](https://github.com/remix-run/remix/pull/4900)) +- Added new hooks from React Router + - [`useNavigation`](https://reactrouter.com/en/main/hooks/use-navigation) + - [`useNavigationType`](https://reactrouter.com/en/main/hooks/use-navigation-type) + - [`useRevalidator`](https://reactrouter.com/en/main/hooks/use-revalidator) + - [`useRouteLoaderData`](https://reactrouter.com/en/main/hooks/use-route-loader-data) ## 1.9.0 diff --git a/packages/remix-serve/CHANGELOG.md b/packages/remix-serve/CHANGELOG.md index b9d7b48e489..a347b39dd51 100644 --- a/packages/remix-serve/CHANGELOG.md +++ b/packages/remix-serve/CHANGELOG.md @@ -4,8 +4,6 @@ ### Patch Changes -- re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) -- `V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` ([#4947](https://github.com/remix-run/remix/pull/4947)) - Updated dependencies: - `@remix-run/express@1.10.0` diff --git a/packages/remix-server-runtime/CHANGELOG.md b/packages/remix-server-runtime/CHANGELOG.md index 940dcce1493..2803e1228d2 100644 --- a/packages/remix-server-runtime/CHANGELOG.md +++ b/packages/remix-server-runtime/CHANGELOG.md @@ -4,15 +4,12 @@ ### Minor Changes -- Update Remix to use React Router 6.4+ data APIs ([#4900](https://github.com/remix-run/remix/pull/4900)) +- Update Remix to use new data APIs introduced in React Router v6.4 ([#4900](https://github.com/remix-run/remix/pull/4900)) ### Patch Changes -- Bump to react-router 6.6.1 pre versions ([#4944](https://github.com/remix-run/remix/pull/4944)) -- re-export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) -- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) -- `V2_MetaFunction` should return `V2_HtmlMetaDescriptor[]` ([#4947](https://github.com/remix-run/remix/pull/4947)) -- Lock into RR 6.6.0 ([#4935](https://github.com/remix-run/remix/pull/4935)) +- Export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` types from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) +- Fix `V2_MetaFunction` to return `V2_HtmlMetaDescriptor[]` type ([#4947](https://github.com/remix-run/remix/pull/4947)) ## 1.9.0 diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index 1b5c48d06db..b4317af633a 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -4,12 +4,8 @@ ### Patch Changes -- Lock into react-router 6.6.2 stable release ([#5035](https://github.com/remix-run/remix/pull/5035)) -- Bump RR versions ([#5005](https://github.com/remix-run/remix/pull/5005)) -- Bump to react-router 6.6.1 pre versions ([#4944](https://github.com/remix-run/remix/pull/4944)) -- Bump react router version to latest ([#4952](https://github.com/remix-run/remix/pull/4952)) -- remove internal `installGlobals` function now that `@remix-run/web-form-data` includes support for passing a `HTMLFormElement` ([#4755](https://github.com/remix-run/remix/pull/4755)) -- use react router apis directly ([#4915](https://github.com/remix-run/remix/pull/4915)) +- Remove internal `installGlobals` function now that `@remix-run/web-form-data` includes support for passing a `HTMLFormElement` ([#4755](https://github.com/remix-run/remix/pull/4755)) +- Use React Router data APIs directly ([#4915](https://github.com/remix-run/remix/pull/4915)) - Updated dependencies: - `@remix-run/react@1.10.0` - `@remix-run/node@1.10.0` From 6ea22e3e46007aedd97ee566822b45059afc2570 Mon Sep 17 00:00:00 2001 From: Chance Strickland <hi@chance.dev> Date: Mon, 9 Jan 2023 16:20:54 -0800 Subject: [PATCH 40/41] chore: bump deps --- packages/remix-css-bundle/package.json | 2 +- packages/remix-testing/CHANGELOG.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/remix-css-bundle/package.json b/packages/remix-css-bundle/package.json index 360fa7a6d07..dbccc6d0c0f 100644 --- a/packages/remix-css-bundle/package.json +++ b/packages/remix-css-bundle/package.json @@ -20,6 +20,6 @@ "./dist/esm/server.js": "./dist/esm/browser.js" }, "dependencies": { - "@remix-run/dev": "1.9.0" + "@remix-run/dev": "1.10.0" } } diff --git a/packages/remix-testing/CHANGELOG.md b/packages/remix-testing/CHANGELOG.md index b4317af633a..85a893e63be 100644 --- a/packages/remix-testing/CHANGELOG.md +++ b/packages/remix-testing/CHANGELOG.md @@ -1,4 +1,4 @@ -# @remix-run/testing +# `@remix-run/testing` ## 1.10.0 From d9ecd5d5b7b13b88be34465e85e1b83dfc353576 Mon Sep 17 00:00:00 2001 From: Remix Run Bot <hello@remix.run> Date: Tue, 10 Jan 2023 00:23:30 +0000 Subject: [PATCH 41/41] chore: format --- packages/remix-deno/CHANGELOG.md | 3 ++- packages/remix-deno/index.ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/remix-deno/CHANGELOG.md b/packages/remix-deno/CHANGELOG.md index 93429ebcbdc..2e3a13b9190 100644 --- a/packages/remix-deno/CHANGELOG.md +++ b/packages/remix-deno/CHANGELOG.md @@ -4,7 +4,8 @@ ### Patch Changes -- Export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` types from runtime packages ([#4943](https://github.com/remix-run/remix/pull/4943)) +- Export `V2_HtmlMetaDescriptor` and `V2_MetaFunction` types from runtime + packages ([#4943](https://github.com/remix-run/remix/pull/4943)) - Updated dependencies: - `@remix-run/server-runtime@1.10.0` diff --git a/packages/remix-deno/index.ts b/packages/remix-deno/index.ts index 27e4fee709d..b6b6c77b5d9 100644 --- a/packages/remix-deno/index.ts +++ b/packages/remix-deno/index.ts @@ -43,7 +43,6 @@ export type { HeadersFunction, HtmlLinkDescriptor, HtmlMetaDescriptor, - V2_HtmlMetaDescriptor, LinkDescriptor, LinksFunction, LoaderArgs, @@ -52,7 +51,6 @@ export type { MemoryUploadHandlerOptions, MetaDescriptor, MetaFunction, - V2_MetaFunction, PageLinkDescriptor, RequestHandler, RouteComponent, @@ -69,4 +67,6 @@ export type { UnsignFunction, UploadHandler, UploadHandlerPart, + V2_HtmlMetaDescriptor, + V2_MetaFunction, } from "@remix-run/server-runtime";