rsbuild-plugin-cloudflare 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # `rsbuild-plugin-cloudflare`
2
2
 
3
+ [![npm](https://img.shields.io/npm/v/rsbuild-plugin-cloudflare)](https://www.npmjs.com/package/rsbuild-plugin-cloudflare)
4
+
3
5
  An experimental [Rsbuild](https://rsbuild.rs) plugin for Cloudflare Workers. It
4
6
  runs your Workers in workerd during `rsbuild dev` and `rsbuild preview`, and
5
7
  builds them, with your client assets, during `rsbuild build` into a Cloudflare
@@ -53,7 +55,10 @@ To change how a Worker is built, configure its environment in Rsbuild's
53
55
  precedence, apart from `source.entry`, `output.target` and `output.module`,
54
56
  which the plugin always sets so that the Worker runs in workerd, and
55
57
  `output.distPath.root`, which it sets to the Worker's Build Output location, as
56
- the Vite plugin does.
58
+ the Vite plugin does. The Worker's entry keeps the
59
+ [layer](https://rspack.rs/config/entry#entrydescriptionlayer) of the entries
60
+ that it replaces, if they're all in the same one (e.g. TanStack Start's server
61
+ entry, with React Server Components).
57
62
 
58
63
  ```ts
59
64
  export default defineConfig({
@@ -106,6 +111,12 @@ Rsbuild (e.g. one created from TanStack's Rsbuild template) on Workers:
106
111
  });
107
112
  ```
108
113
 
114
+ If the app has its own
115
+ [server entry](https://tanstack.com/start/latest/docs/framework/react/guide/server-entry-point)
116
+ (e.g. `src/server.ts`), make that the entrypoint instead (e.g.
117
+ `entrypoint: "./src/server.ts"`). The Worker runs its entrypoint, so with
118
+ TanStack Start's it would bypass the app's.
119
+
109
120
  3. Add `cloudflare()` before `tanstackStart()`, with `rsbuildEnvironment.name`
110
121
  set to TanStack Start's server environment, `ssr`. This is required: without
111
122
  it, the plugin builds the entrypoint in its own `cloudflare` environment,
@@ -158,6 +169,12 @@ const getGreeting = createServerFn().handler(() => env.GREETING);
158
169
  See [`packages/e2e/fixtures/tanstack-start`](https://github.com/james-elicx/rsbuild-plugin-cloudflare/tree/main/packages/e2e/fixtures/tanstack-start) for
159
170
  a complete app.
160
171
 
172
+ [React Server Components](https://tanstack.com/start/latest/docs/framework/react/guide/server-components)
173
+ run in the Worker too, once they're enabled with `rsc: { enabled: true }` in
174
+ `tanstackStart()`'s options. TanStack Start resolves `react-server-dom-rspack`
175
+ from the app's root, so add it as a dependency. See
176
+ [`packages/e2e/fixtures/tanstack-start-rsc`](https://github.com/james-elicx/rsbuild-plugin-cloudflare/tree/main/packages/e2e/fixtures/tanstack-start-rsc).
177
+
161
178
  ## Differences from the Vite plugin
162
179
 
163
180
  The plugin replaces Vite's module runner with Rsbuild's bundles, so behaviour
package/dist/index.d.mts CHANGED
@@ -1,8 +1,12 @@
1
- import { InputWorkerConfig, ParsedInputWorkerConfig } from "@cloudflare/config";
1
+ import { InputWorkerConfig, ParsedInputConfig, ParsedInputWorkerConfig } from "@cloudflare/config";
2
2
  import { RsbuildPlugin } from "@rsbuild/core";
3
3
 
4
4
  //#region ../../workers-sdk/packages/vite-plugin-cloudflare/src/plugin-config.d.ts
5
5
 
6
+ /** Parsed configuration with the entry Worker required by the Vite plugin. */
7
+ type ParsedInputConfigWithWorker = Omit<ParsedInputConfig, "worker"> & {
8
+ worker: ParsedInputWorkerConfig;
9
+ };
6
10
  type PersistState = boolean | {
7
11
  path: string;
8
12
  };
@@ -25,7 +29,6 @@ interface BaseWorkerOptions {
25
29
  */
26
30
  type DevOnly = boolean | (() => boolean);
27
31
  interface EntryWorkerOptions extends BaseWorkerOptions {
28
- config?: EntryWorkerConfigCustomizer;
29
32
  /**
30
33
  * Whether the entry Worker should be omitted from the production build.
31
34
  * Can be a boolean or a function that returns a boolean. The function is
@@ -63,11 +66,17 @@ interface Experimental {
63
66
  /** Experimental support for handling the _headers and _redirects files during Vite dev mode. */
64
67
  headersAndRedirectsDevModeSupport?: boolean;
65
68
  }
66
- type EntryWorkerConfigCustomizer = Partial<ParsedInputWorkerConfig> | ((config: ParsedInputWorkerConfig) => Partial<ParsedInputWorkerConfig> | void);
67
69
  type WorkerConfigProvider = InputWorkerConfig | ((options: {
68
70
  entryWorkerConfig: ParsedInputWorkerConfig;
69
71
  }) => InputWorkerConfig);
70
72
  interface PluginConfig$1 extends EntryWorkerOptions {
73
+ /**
74
+ * Customize the loaded configuration before development or building.
75
+ * The loaded configuration always includes an entry Worker.
76
+ * Return a new configuration object including an entry Worker, copying any settings to preserve.
77
+ * Preview uses the configuration recorded in the build output.
78
+ */
79
+ config?: (loadedConfig: ParsedInputConfigWithWorker) => ParsedInputConfigWithWorker;
71
80
  auxiliaryWorkers?: AuxiliaryWorkerOptions[];
72
81
  /** Configuration for a dedicated prerender Worker. */
73
82
  prerenderWorker?: PrerenderWorkerOptions;