diff --git a/.eslintrc.js b/.eslintrc.js index faeb5077f21a8..2aa48458b8bff 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -330,6 +330,7 @@ module.exports = { 'packages/react-server-dom-esm/**/*.js', 'packages/react-server-dom-webpack/**/*.js', 'packages/react-server-dom-turbopack/**/*.js', + 'packages/react-server-dom-parcel/**/*.js', 'packages/react-server-dom-fb/**/*.js', 'packages/react-test-renderer/**/*.js', 'packages/react-debug-tools/**/*.js', @@ -481,6 +482,12 @@ module.exports = { __turbopack_require__: 'readonly', }, }, + { + files: ['packages/react-server-dom-parcel/**/*.js'], + globals: { + parcelRequire: 'readonly', + }, + }, { files: ['packages/scheduler/**/*.js'], globals: { diff --git a/ReactVersions.js b/ReactVersions.js index ead100384e8bc..306ef03dc934d 100644 --- a/ReactVersions.js +++ b/ReactVersions.js @@ -40,6 +40,7 @@ const stablePackages = { 'react-dom': ReactVersion, 'react-server-dom-webpack': ReactVersion, 'react-server-dom-turbopack': ReactVersion, + 'react-server-dom-parcel': ReactVersion, 'react-is': ReactVersion, 'react-reconciler': '0.31.0', 'react-refresh': '0.16.0', diff --git a/fixtures/flight-parcel/.gitignore b/fixtures/flight-parcel/.gitignore new file mode 100644 index 0000000000000..c6b41301c02ae --- /dev/null +++ b/fixtures/flight-parcel/.gitignore @@ -0,0 +1,5 @@ +.parcel-cache +.DS_Store +node_modules +dist +todos.json diff --git a/fixtures/flight-parcel/.parcelrc b/fixtures/flight-parcel/.parcelrc new file mode 100644 index 0000000000000..e1cb0cff532fb --- /dev/null +++ b/fixtures/flight-parcel/.parcelrc @@ -0,0 +1,4 @@ +{ + "extends": "@parcel/config-default", + "runtimes": ["...", "@parcel/runtime-rsc"] +} diff --git a/fixtures/flight-parcel/package.json b/fixtures/flight-parcel/package.json new file mode 100644 index 0000000000000..c991e46bfe5e4 --- /dev/null +++ b/fixtures/flight-parcel/package.json @@ -0,0 +1,51 @@ +{ + "name": "flight-parcel", + "private": true, + "workspaces": [ + "examples/*" + ], + "server": "dist/server.js", + "targets": { + "server": { + "source": "src/server.tsx", + "context": "react-server", + "outputFormat": "commonjs", + "includeNodeModules": { + "express": false + } + } + }, + "scripts": { + "predev": "cp -r ../../build/oss-experimental/* ./node_modules/", + "prebuild": "cp -r ../../build/oss-experimental/* ./node_modules/", + "dev": "concurrently \"npm run dev:watch\" \"npm run dev:start\"", + "dev:watch": "NODE_ENV=development parcel watch", + "dev:start": "NODE_ENV=development node dist/server.js", + "build": "parcel build", + "start": "node dist/server.js" + }, + "@parcel/resolver-default": { + "packageExports": true + }, + "dependencies": { + "@parcel/config-default": "2.0.0-dev.1789", + "@parcel/runtime-rsc": "2.13.3-dev.3412", + "@types/parcel-env": "^0.0.6", + "@types/express": "*", + "@types/node": "^22.10.1", + "@types/react": "^19", + "@types/react-dom": "^19", + "concurrently": "^7.3.0", + "express": "^4.18.2", + "parcel": "2.0.0-dev.1787", + "process": "^0.11.10", + "react": "experimental", + "react-dom": "experimental", + "react-server-dom-parcel": "experimental", + "rsc-html-stream": "^0.0.4", + "ws": "^8.8.1" + }, + "@parcel/bundler-default": { + "minBundleSize": 0 + } +} diff --git a/fixtures/flight-parcel/src/Dialog.tsx b/fixtures/flight-parcel/src/Dialog.tsx new file mode 100644 index 0000000000000..d2fb20c835133 --- /dev/null +++ b/fixtures/flight-parcel/src/Dialog.tsx @@ -0,0 +1,21 @@ +'use client'; + +import {ReactNode, useRef} from 'react'; + +export function Dialog({ + trigger, + children, +}: { + trigger: ReactNode; + children: ReactNode; +}) { + let ref = useRef(null); + return ( + <> + + ref.current?.close()}> + {children} + + + ); +} diff --git a/fixtures/flight-parcel/src/TodoCreate.tsx b/fixtures/flight-parcel/src/TodoCreate.tsx new file mode 100644 index 0000000000000..bd0456fd0c27c --- /dev/null +++ b/fixtures/flight-parcel/src/TodoCreate.tsx @@ -0,0 +1,18 @@ +import {createTodo} from './actions'; + +export function TodoCreate() { + return ( +
+ +