mirror of
https://github.com/zebrajr/react.git
synced 2025-12-06 12:20:20 +01:00
This adds a new `react-server-dom-parcel-package`, which is an RSC integration for the Parcel bundler. It is mostly copied from the existing webpack/turbopack integrations, with some changes to utilize Parcel runtime APIs for loading and executing bundles/modules. See https://github.com/parcel-bundler/parcel/pull/10043 for the Parcel side of this, which includes the plugin needed to generate client and server references. https://github.com/parcel-bundler/rsc-examples also includes examples of various ways to use RSCs with Parcel. Differences from other integrations: * Client and server modules are all part of the same graph, and we use Parcel's [environments](https://parceljs.org/plugin-system/transformer/#the-environment) to distinguish them. The server is the Parcel build entry point, and it imports and renders server components in route handlers. When a `"use client"` directive is seen, the environment changes and Parcel creates a new client bundle for the page, combining all client modules together. CSS from both client and server components are also combined automatically. * There is no separate manifest file that needs to be passed around by the user. A [Runtime](https://parceljs.org/plugin-system/runtime/) plugin injects client and server references as needed into the relevant bundles, and registers server action ids using `react-server-dom-parcel` automatically. * A special `<Resources>` component is also generated by Parcel to render the `<script>` and `<link rel="stylesheet">` elements needed for a page, using the relevant info from the bundle graph. Note: I've already published a 0.0.x version of this package to npm for testing purposes but happy to add whoever needs access to it as well. ### Questions * How to test this in the React repo. I'll have integration tests in Parcel, but setting up all the different mocks and environments to simulate that here seems challenging. I could try to copy how Webpack/Turbopack do it but it's a bit different. * Where to put TypeScript types. Right now I have some ambient types in my [example repo](https://github.com/parcel-bundler/rsc-examples/blob/main/types.d.ts) but it would be nice for users not to copy and paste these. Can I include them in the package or do they need to maintained separately in definitelytyped? I would really prefer not to have to maintain code in three different repos ideally. --------- Co-authored-by: Sebastian Markbage <sebastian@calyptus.eu>
65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
// This module is the single source of truth for versioning packages that we
|
|
// publish to npm.
|
|
//
|
|
// Packages will not be published unless they are added here.
|
|
//
|
|
// The @latest channel uses the version as-is, e.g.:
|
|
//
|
|
// 19.0.0
|
|
//
|
|
// The @canary channel appends additional information, with the scheme
|
|
// <version>-<label>-<commit_sha>, e.g.:
|
|
//
|
|
// 19.0.0-canary-a1c2d3e4
|
|
//
|
|
// The @experimental channel doesn't include a version, only a date and a sha, e.g.:
|
|
//
|
|
// 0.0.0-experimental-241c4467e-20200129
|
|
|
|
const ReactVersion = '19.0.0';
|
|
|
|
// The label used by the @canary channel. Represents the upcoming release's
|
|
// stability. Most of the time, this will be "canary", but we may temporarily
|
|
// choose to change it to "alpha", "beta", "rc", etc.
|
|
//
|
|
// It only affects the label used in the version string. To customize the
|
|
// npm dist tags used during publish, refer to .github/workflows/runtime_prereleases_*.yml.
|
|
const canaryChannelLabel = 'rc';
|
|
|
|
// If the canaryChannelLabel is "rc", the build pipeline will use this to build
|
|
// an RC version of the packages.
|
|
const rcNumber = 1;
|
|
|
|
const stablePackages = {
|
|
'eslint-plugin-react-hooks': '5.1.0',
|
|
'jest-react': '0.16.0',
|
|
react: ReactVersion,
|
|
'react-art': ReactVersion,
|
|
'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',
|
|
'react-test-renderer': ReactVersion,
|
|
'use-subscription': '1.10.0',
|
|
'use-sync-external-store': '1.4.0',
|
|
scheduler: '0.25.0',
|
|
};
|
|
|
|
// These packages do not exist in the @canary or @latest channel, only
|
|
// @experimental. We don't use semver, just the commit sha, so this is just a
|
|
// list of package names instead of a map.
|
|
const experimentalPackages = ['react-markup'];
|
|
|
|
module.exports = {
|
|
ReactVersion,
|
|
canaryChannelLabel,
|
|
rcNumber,
|
|
stablePackages,
|
|
experimentalPackages,
|
|
};
|