@bleedingdev/modern-js-app-tools 3.8.1-ultramodern.5 → 3.8.2-ultramodern.11

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.
@@ -6,9 +6,9 @@
6
6
  Configure React Server Components (RSC).
7
7
 
8
8
  :::warning UltraModern availability
9
- RSC is not shipped or supported in the current UltraModern company distribution. Keep this option `false`. The Rspack Flight runtime remains under upstream review, and enabling RSC intentionally fails unless an application supplies the complete optional toolchain.
9
+ RSC is experimental, default-off, and unsupported for external consumers; it is not shipped in the current UltraModern company distribution. Release-cohort and clean-room release-acceptance tests verify that RSC runtimes are absent and cannot resolve, and the release cohort has no maintained `@bleedingdev/*` RSC runtime package; when enabled, the framework intentionally fails closed unless an application supplies the complete optional toolchain.
10
10
 
11
- Do not install `react-server-dom-rspack` or add an application-level pnpm patch to bypass this boundary.
11
+ The root-only `react-server-dom-rspack@0.0.3` patch backports Flight decoder security fixes for this repository's RSC tests; it is never copied into generated workspaces or published to consumers, so an app installing the upstream package receives unpatched bytes. [SyMind/react#1](https://github.com/SyMind/react/pull/1) merged on 2026-08-11; [BleedingDev/react#1](https://github.com/BleedingDev/react/pull/1) and [rspack#15144](https://github.com/web-infra-dev/rspack/issues/15144) remain open. npm still reports `react-server-dom-rspack` `latest` as `0.0.3`, with no patched consumer release, so the root-only patch remains necessary for this repository's RSC tests. This boundary is pending final owner ratification.
12
12
  :::
13
13
 
14
14
  ```ts title="modern.config.ts"
@@ -18,9 +18,9 @@ Before starting, we recommend reading React's official [Server Components docume
18
18
  ## Quick Start
19
19
 
20
20
  :::warning UltraModern availability
21
- RSC is not shipped or supported in the current UltraModern company distribution. The framework keeps [`server.rsc`](/configure/app/server/rsc.md) disabled while the Rspack Flight runtime is completed upstream. Do not install `react-server-dom-rspack` or carry an application-level pnpm patch to enable it early.
21
+ RSC is experimental, default-off, and unsupported for external consumers; it is not shipped in the current UltraModern company distribution. Release-cohort and clean-room release-acceptance tests verify that RSC runtimes are absent and cannot resolve, and the release cohort has no maintained `@bleedingdev/*` RSC runtime package; when enabled, the framework intentionally fails closed unless an application supplies the complete optional toolchain.
22
22
 
23
- The remainder of this page is retained as reference material for future upstream adoption.
23
+ The root-only `react-server-dom-rspack@0.0.3` patch backports Flight decoder security fixes for this repository's RSC tests; it is never copied into generated workspaces or published to consumers, so an app installing the upstream package receives unpatched bytes. [SyMind/react#1](https://github.com/SyMind/react/pull/1) merged on 2026-08-11; [BleedingDev/react#1](https://github.com/BleedingDev/react/pull/1) and [rspack#15144](https://github.com/web-infra-dev/rspack/issues/15144) remain open. npm still reports `react-server-dom-rspack` `latest` as `0.0.3`, with no patched consumer release, so the root-only patch remains necessary for this repository's RSC tests. This boundary is pending final owner ratification.
24
24
  :::
25
25
 
26
26
  Keep [`server.rsc`](/configure/app/server/rsc.md) set to `false`:
@@ -73,20 +73,22 @@ mise exec -- pnpm check
73
73
  mise exec -- pnpm build
74
74
  ```
75
75
 
76
- ### Migrating to `3.5.0-ultramodern.18`
76
+ ### Migrating localized Cloudflare SSR workspaces
77
77
 
78
- Use `3.5.0-ultramodern.18` or newer for localized Cloudflare SSR workspaces.
79
- This cohort moves bare locale-root redirects into the framework-owned
78
+ Current cohorts localize Cloudflare SSR workspaces.
79
+ The framework moves bare locale-root redirects into the framework-owned
80
80
  Cloudflare Worker entry and the i18n server runtime. A request for `/` is
81
81
  redirected server-side with `302` to the negotiated locale path, for example
82
82
  `/cs` for `Accept-Language: cs-CZ` or `/en` for English and fallback traffic.
83
83
 
84
84
  Existing generated workspaces should upgrade the whole BleedingDev Modern
85
- package cohort together:
85
+ package cohort together. Resolve the current cohort version first, then run
86
+ the matching migration:
86
87
 
87
88
  ```bash
88
- pnpm dlx @bleedingdev/modern-js-create@3.5.0-ultramodern.18 ultramodern \
89
- migrate-strict-effect --version 3.5.0-ultramodern.18
89
+ COHORT="$(npm view @bleedingdev/modern-js-create version)"
90
+ pnpm dlx "@bleedingdev/modern-js-create@$COHORT" ultramodern \
91
+ migrate-strict-effect --version "$COHORT"
90
92
  pnpm install
91
93
  pnpm check
92
94
  pnpm build
@@ -109,22 +111,23 @@ Do not fix older root `404` responses by adding app-owned root route files,
109
111
  client-side redirects, custom navigation wrappers, Cloudflare Worker
110
112
  postprocessing, generated output edits, or local redirect shims. If `/` still
111
113
  returns `404` after upgrading, confirm the production build log shows
112
- `Modern.js Framework v3.5.0-ultramodern.18` or newer and redeploy the Worker.
114
+ `Modern.js Framework v<cohort-version>` for the cohort you migrated to and
115
+ redeploy the Worker.
113
116
 
114
- Strict generated API migration requires `3.5.0-ultramodern.10` or newer.
115
- `3.4.0-ultramodern.20` and earlier cohorts do not include this full direct
116
- `api/index.ts` generator, generated `.mts` checks, strict Oxlint boundary rule
117
- set, Effect cohort overrides, and strict Effect migration command. Agents that
118
- cannot install that BleedingDev cohort yet should use the local Modern.js
119
- workspace for migration validation; otherwise pin `3.5.0-ultramodern.10` or
120
- newer with `--ultramodern-package-version`.
117
+ Strict generated API migration is part of every current cohort: the direct
118
+ `api/index.ts` generator, generated `.mts` checks, the strict Oxlint boundary
119
+ rule set, Effect cohort overrides, and the strict Effect migration command.
120
+ Agents that cannot install the BleedingDev cohort yet should use the local
121
+ Modern.js workspace for migration validation; otherwise pin the target cohort
122
+ with `--ultramodern-package-version`.
121
123
 
122
124
  Before hand-editing package aliases or generated metadata, run the framework
123
125
  migration command from the target workspace:
124
126
 
125
127
  ```bash
126
- pnpm dlx @bleedingdev/modern-js-create@3.5.0-ultramodern.10 ultramodern \
127
- migrate-strict-effect --version 3.5.0-ultramodern.10
128
+ COHORT="$(npm view @bleedingdev/modern-js-create version)"
129
+ pnpm dlx "@bleedingdev/modern-js-create@$COHORT" ultramodern \
130
+ migrate-strict-effect --version "$COHORT"
128
131
  pnpm api:check
129
132
  pnpm contract:check
130
133
  ```
@@ -155,9 +158,16 @@ metadata transition; they are not release-age approvals.
155
158
  | Effect compiler | `@effect/tsgo@0.36.2` |
156
159
  | TanStack Router | `@tanstack/react-router@1.170.25`, `@tanstack/router-core@1.171.21`, `@tanstack/history@1.162.1` |
157
160
  | Module Federation | `bridge-react`, `manifest`, `modern-js-v3`, and `rspack`: `2.8.2`; `@module-federation/node@2.7.49` |
158
- | React Router | `react-router@7.18.2` |
159
161
  | Node and package tooling | Node `26.7.0`, `@types/node@^26.2.0`, pnpm `11.21.0` |
160
162
 
163
+ Generated workspaces default to Module Federation bridge-react's router-free
164
+ base entry (`bridge.enableBridgeRouter: false`), with TanStack Router as the
165
+ application router. Declaring `react-router` (or `react-router-dom`) as a
166
+ direct dependency of an app marks it a React Router consumer: the
167
+ generator/migration then emit `enableBridgeRouter: true` for that app's
168
+ federation config, the workspace validator accepts it, and the UltraModern
169
+ preset aliases `react-router`'s entrypoints for the app's own routing.
170
+
161
171
  Gradual migration means old, unmigrated Modern.js apps can keep their existing
162
172
  runtime until they are converted. Once a surface is generated or migrated as
163
173
  UltraModern HTTP API, it uses Effect HttpApi only; do not keep Hono, lambda
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  "modern",
18
18
  "modern.js"
19
19
  ],
20
- "version": "3.8.1-ultramodern.5",
20
+ "version": "3.8.2-ultramodern.11",
21
21
  "types": "./dist/types/index.d.ts",
22
22
  "main": "./dist/cjs/index.js",
23
23
  "exports": {
@@ -134,23 +134,23 @@
134
134
  "@babel/traverse": "^8.0.0",
135
135
  "@babel/types": "^8.0.0",
136
136
  "@loadable/component": "5.16.7",
137
- "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.8.1-ultramodern.5",
138
- "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.8.1-ultramodern.5",
139
- "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.8.1-ultramodern.5",
140
- "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.8.1-ultramodern.5",
141
- "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.8.1-ultramodern.5",
142
- "@modern-js/server": "npm:@bleedingdev/modern-js-server@3.8.1-ultramodern.5",
143
- "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.8.1-ultramodern.5",
144
- "@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.8.1-ultramodern.5",
145
- "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.8.1-ultramodern.5",
146
- "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.1-ultramodern.5",
147
- "@rsbuild/core": "2.1.5",
137
+ "@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.8.2-ultramodern.11",
138
+ "@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.8.2-ultramodern.11",
139
+ "@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.8.2-ultramodern.11",
140
+ "@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.8.2-ultramodern.11",
141
+ "@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.8.2-ultramodern.11",
142
+ "@modern-js/server": "npm:@bleedingdev/modern-js-server@3.8.2-ultramodern.11",
143
+ "@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.8.2-ultramodern.11",
144
+ "@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.8.2-ultramodern.11",
145
+ "@modern-js/types": "npm:@bleedingdev/modern-js-types@3.8.2-ultramodern.11",
146
+ "@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.8.2-ultramodern.11",
147
+ "@rsbuild/core": "2.2.0-rc.0",
148
148
  "@swc/core": "1.15.43",
149
149
  "@swc/helpers": "^0.5.23",
150
150
  "compression-webpack-plugin": "^12.0.0",
151
151
  "es-module-lexer": "^2.3.0",
152
152
  "esbuild": "^0.28.1",
153
- "flatted": "^3.4.2",
153
+ "flatted": "^3.4.4",
154
154
  "import-meta-resolve": "^4.2.0",
155
155
  "mlly": "^1.8.2",
156
156
  "ndepe": "^0.1.13",
package/rslib.config.mts CHANGED
@@ -20,11 +20,22 @@ export default defineConfig({
20
20
  },
21
21
  output: {
22
22
  ...libConfig.output,
23
+ // `src/esm` is also matched by the `./src/**` entry, so the bundler
24
+ // emits these files itself. The ESM outputs keep the `.mjs` extension,
25
+ // which means bundle and copy write the very same paths — two writers
26
+ // for one file, occasionally leaving it truncated and unparsable, which
27
+ // takes down every `"type": "module"` project. The CJS output emits
28
+ // `.js`, so there the copy is the only thing providing the `.mjs`
29
+ // loaders that `register()` resolves by name; keep it for that alone.
23
30
  copy: [
24
- {
25
- from: './src/esm',
26
- to: './esm',
27
- },
31
+ ...(libConfig.format === 'esm'
32
+ ? []
33
+ : [
34
+ {
35
+ from: './src/esm',
36
+ to: './esm',
37
+ },
38
+ ]),
28
39
  {
29
40
  from: './src/plugins/deploy/platforms/templates',
30
41
  to: './plugins/deploy/platforms/templates',