Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/small-peaches-wave.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@preact/signals-react-transform-rolldown": minor
---

Add a native Rolldown plugin for the React Signals transform so Rolldown and Vite Rolldown builds can automatically subscribe React components and hooks to signal reads.
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,4 @@ jobs:
working-directory: packages/react
run: |
pnpm i react@16 react-dom@16 react-router-dom@5
pnpm -w exec cross-env COVERAGE=true MINIFY=true vitest run packages/react
pnpm -w exec cross-env COVERAGE=true MINIFY=true vitest run ./packages/react/
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"scripts": {
"prebuild": "shx rm -rf packages/*/dist/",
"build": "run-p build:* && pnpm _build:devtools-ui",
"_build": "microbundle --raw --globals @preact/signals-core=preactSignalsCore,preact/hooks=preactHooks,@preact/signals-react/runtime=reactSignalsRuntime",
"_build": "microbundle --raw --globals @preact/signals-core=preactSignalsCore,preact/hooks=preactHooks,@preact/signals-react/runtime=reactSignalsRuntime,rolldown/utils=rolldownUtils",
"build:core": "pnpm _build --cwd packages/core && pnpm postbuild:core",
"build:debug": "pnpm _build --cwd packages/debug && pnpm postbuild:debug",
"build:devtools-adapter": "pnpm _build --cwd packages/devtools-adapter && pnpm postbuild:devtools-adapter",
Expand All @@ -16,6 +16,7 @@
"build:react-utils": "pnpm _build --cwd packages/react/utils && pnpm postbuild:react-utils",
"build:react-runtime": "pnpm _build --cwd packages/react/runtime && pnpm postbuild:react-runtime",
"build:react-transform": "pnpm _build --no-compress --cwd packages/react-transform",
"build:react-transform-rolldown": "pnpm _build --no-compress --cwd packages/react-transform-rolldown --external \"rolldown,rolldown/utils,rolldown-string\"",
"build:preact-transform": "pnpm _build --no-compress --cwd packages/preact-transform",
"postbuild:core": "shx mv -f packages/core/dist/index.d.ts packages/core/dist/signals-core.d.ts",
"postbuild:debug": "shx mv -f packages/debug/dist/debug/src/index.d.ts packages/debug/dist/signals-debug.d.ts",
Expand Down
1 change: 1 addition & 0 deletions packages/react-transform-rolldown/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# @preact/signals-react-transform-rolldown
56 changes: 56 additions & 0 deletions packages/react-transform-rolldown/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Signals React Transform Rolldown Plugin

> A Rolldown plugin to transform React components so they automatically subscribe to Preact Signals.

This package applies the React Signals transform during Rolldown builds with Rolldown's native magic string pipeline, so React components and hooks can subscribe to signal reads without wiring Babel up manually.

## Installation

```sh
npm i --save-dev @preact/signals-react-transform-rolldown
npm i react @preact/signals-react
```

## Usage

```ts
import reactSignalsTransform from "@preact/signals-react-transform-rolldown";

export default {
plugins: [
reactSignalsTransform({
mode: "auto",
}),
],
};
```

## Options

This plugin forwards the same options as `@preact/signals-react-transform`:

- `mode`
- `importSource`
- `detectTransformedJSX`
- `experimental`

Example:

```ts
reactSignalsTransform({
detectTransformedJSX: true,
experimental: {
debug: true,
},
});
```

## Notes

- Run it before other JSX transforms.
- The generated code imports `useSignals` from `@preact/signals-react/runtime` by default.
- When your code is already compiled to `react/jsx-runtime` or `React.createElement`, enable `detectTransformedJSX`.

## License

`MIT`, see the [LICENSE](../../LICENSE) file.
78 changes: 78 additions & 0 deletions packages/react-transform-rolldown/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
{
"name": "@preact/signals-react-transform-rolldown",
"version": "0.0.0",
"license": "MIT",
"description": "Rolldown plugin for the React Signals transform",
"keywords": [
"plugin",
"react",
"rolldown",
"rolldown-plugin",
"signals"
],
"authors": [
"The Preact Authors (https://github.com/preactjs/signals/contributors)"
],
"repository": {
"type": "git",
"url": "https://github.com/preactjs/signals",
"directory": "packages/react-transform-rolldown"
},
"bugs": "https://github.com/preactjs/signals/issues",
"homepage": "https://preactjs.com",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/preact"
},
"main": "dist/index.js",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
"source": "src/index.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.js"
}
},
"files": [
"dist",
"src",
"CHANGELOG.md",
"LICENSE",
"README.md"
],
"scripts": {
"build": "microbundle --raw --no-compress --external \"rolldown,rolldown/utils,rolldown-string\" --globals \"rolldown/utils=rolldownUtils\"",
"test": "cd ../.. && pnpm vitest run ./packages/react-transform-rolldown/test/node/*.test.ts",
"prepublishOnly": "cd ../.. && pnpm build:react-transform-rolldown"
},
"dependencies": {
"rolldown-string": "^0.3.0"
},
"peerDependencies": {
"@preact/signals-react": "^3.9.1",
"react": "^16.14.0 || 17.x || 18.x || 19.x",
"rolldown": "^1.0.0-rc.9",
"vite": "^8.0.0"
},
"peerDependenciesMeta": {
"vite": {
"optional": true
}
},
"devDependencies": {
"@preact/signals-core": "workspace:*",
"@preact/signals-react": "workspace:^3.9.1",
"@types/react": "18.0.18",
"@types/react-dom": "18.0.6",
"prettier": "^3.0.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"rolldown": "^1.0.0-rc.9"
},
"publishConfig": {
"access": "public",
"provenance": true
}
}
Loading
Loading