feat: opt-in the web platform's new binary output format#2281
feat: opt-in the web platform's new binary output format#2281PupilTong merged 8 commits intolynx-family:mainfrom
Conversation
🦋 Changeset detectedLatest commit: 9b9e4d4 The changes in this PR will be included in the next version bump. This PR includes changesets to release 6 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review infoConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (3)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughAdds a changeset for an opt-in web binary output flag, moves Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
Pull request overview
Adds an opt-in path for generating the web platform’s new binary template output by gating a WASM-based encoder behind an environment flag, and updates packaging/release metadata to ship the capability.
Changes:
- Gate WebEncodePlugin output format selection behind
EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE === 'true'and encode via@lynx-js/web-core-wasm/encodewhen enabled. - Move
@lynx-js/web-core-wasmfromdevDependenciestodependenciesfor runtime/type availability. - Add a Changesets entry describing the feature flag.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.
| File | Description |
|---|---|
| packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts | Adds env-flag-controlled binary encoding path using WASM encoder and updates error text. |
| packages/webpack/template-webpack-plugin/package.json | Promotes @lynx-js/web-core-wasm to a runtime dependency. |
| .changeset/moody-snakes-study.md | Adds release note describing the new opt-in binary output flag. |
Comments suppressed due to low confidence (1)
packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts:120
- This introduces/changes behavior behind EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE, but there is no test exercising the binary-encode path. Add a test case that sets the env var and asserts the emitted template payload is binary (and/or that wasm encode is invoked).
const isExperimentalWebBinary = process
.env['EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE'];
if (isExperimentalWebBinary === 'true') {
const { encode } = await import('@lynx-js/web-core-wasm/encode')
.catch(
() => {
throw new Error(
`cannot enable the flat EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE, please contact developers`,
);
},
);
return {
buffer: Buffer.from(encode(tasmJSONInfo as TasmJSONInfo)),
debugInfo: '',
};
} else {
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts
Outdated
Show resolved
Hide resolved
packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.changeset/moody-snakes-study.md:
- Line 9: Replace the incorrect phrase "a internal use only flag" with the
corrected, hyphenated form "an internal-use-only flag" in the
.changeset/moody-snakes-study.md content (search for the exact string "a
internal use only flag" to locate the sentence), ensuring the surrounding
sentence remains grammatically correct and unchanged otherwise.
In `@packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts`:
- Line 112: The error message string in WebEncodePlugin referencing
"EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE" contains a typo: replace the word "flat"
with "flag" in the message string (the literal that currently reads `cannot
enable the flat EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE, please contact
developers`) inside the WebEncodePlugin implementation so the message reads
`cannot enable the flag EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE, please contact
developers`.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
.changeset/moody-snakes-study.mdpackages/webpack/template-webpack-plugin/package.jsonpackages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts
packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts
Outdated
Show resolved
Hide resolved
Merging this PR will degrade performance by 8.46%
Performance Changes
Comparing Footnotes
|
Web Explorer#7918 Bundle Size — 383.53KiB (0%).9b9e4d4(current) vs d32c4c6 main#7915(baseline) Bundle metrics
Bundle size by type
|
| Current #7918 |
Baseline #7915 |
|
|---|---|---|
252.58KiB |
252.58KiB |
|
95.85KiB |
95.85KiB |
|
35.1KiB |
35.1KiB |
Bundle analysis report Branch PupilTong:p/hw/opt-in-wasm Project dashboard
Generated by RelativeCI Documentation Report issue
packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts
Outdated
Show resolved
Hide resolved
packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts (1)
113-133:⚠️ Potential issue | 🟡 MinorAlign accepted-value wording with the actual condition.
Line 113 treats both
nullandundefinedas fallback, but Line 132 says onlyundefinedis accepted. Please make the condition/comment/error text consistent to avoid config confusion.Suggested consistency patch
- } else if (isExperimentalWebBinary == null /*undefined or null */) { + } else if (isExperimentalWebBinary == null /* undefined or null */) { @@ - // only allow 'true' or undefined/null + // only allow 'true' or undefined/null throw new Error( - `Unknown value of EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE: ${isExperimentalWebBinary}. Expecting "true" or undefined.`, + `Unknown value of EXPERIMENTAL_USE_WEB_BINARY_TEMPLATE: ${isExperimentalWebBinary}. Expecting "true", undefined, or null.`, );🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts` around lines 113 - 133, The code treats both null and undefined as the fallback (isExperimentalWebBinary == null) but the thrown error only mentions undefined; update the messaging to match the condition: in the block that throws the Error referencing isExperimentalWebBinary (and related comment above the branch), make the wording consistently state that only 'true' or null/undefined are allowed (e.g., "Expecting 'true' or undefined/null"), or alternatively change the condition to only accept undefined if you prefer that policy; update the comment and the Error text so both reflect the same allowed values for isExperimentalWebBinary (refer to isExperimentalWebBinary, genStyleInfo, and tasmJSONInfo in WebEncodePlugin.ts).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@packages/webpack/template-webpack-plugin/src/WebEncodePlugin.ts`:
- Around line 113-133: The code treats both null and undefined as the fallback
(isExperimentalWebBinary == null) but the thrown error only mentions undefined;
update the messaging to match the condition: in the block that throws the Error
referencing isExperimentalWebBinary (and related comment above the branch), make
the wording consistently state that only 'true' or null/undefined are allowed
(e.g., "Expecting 'true' or undefined/null"), or alternatively change the
condition to only accept undefined if you prefer that policy; update the comment
and the Error text so both reflect the same allowed values for
isExperimentalWebBinary (refer to isExperimentalWebBinary, genStyleInfo, and
tasmJSONInfo in WebEncodePlugin.ts).
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Haoyang Wang <12288479+PupilTong@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Haoyang Wang <12288479+PupilTong@users.noreply.github.com>
…codePlugin` to ensure it is `true` or `null`/`undefined`.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Haoyang Wang <12288479+PupilTong@users.noreply.github.com>
Co-authored-by: Qingyu Wang <40660121+colinaaa@users.noreply.github.com> Signed-off-by: Haoyang Wang <12288479+PupilTong@users.noreply.github.com>
110a027 to
9b9e4d4
Compare
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## @lynx-js/devtool-mcp-server@0.5.0 ### Minor Changes - Use `@lynx-js/devtool-connector` instead of `@lynx-js/debug-router-connector`. ([#2284](#2284)) The new connector avoids using keep-alive connections, which makes the connection much more reliable. - **BREAKING CHANGE**: Remove the `./debug-router-connector` exports. ([#2284](#2284)) ## @lynx-js/web-elements@0.12.0 ### Minor Changes - feat: add `willchange` event to `x-viewpager-ng` ([#2305](#2305)) ### Patch Changes - fix: firefox `@supports(width:1rex)` ([#2288](#2288)) - fix: check computed overflow style in `getTheMostScrollableKid` to avoid treating `overflow: visible` elements as scroll containers ([#2309](#2309)) - fix: the inline-truncation should only work as a direct child of x-text ([#2287](#2287)) - fix: getVisibleCells cannot work in firefox due to contentvisibilityautostatechange not propagate list-item ([#2308](#2308)) - fix: foldview stuck issue ([#2304](#2304)) ## @lynx-js/gesture-runtime@2.1.3 ### Patch Changes - Optimize gesture callbacks and relationships to prevent unnecessary gesture registration and rerenders. ([#2277](#2277)) ## @lynx-js/react@0.116.5 ### Patch Changes - Improve React runtime hook profiling. ([#2235](#2235)) Enable Profiling recording first, then enter the target page so the trace includes full render/hydrate phases. - Record trace events for `useEffect` / `useLayoutEffect` hook entry, callback, and cleanup phases. - Log trace events for `useState` setter calls. - Wire `profileFlowId` support in debug profile utilities and attach flow IDs to related hook traces. - Instrument hydrate/background snapshot profiling around patch operations with richer args (e.g. snapshot id/type, dynamic part index, value type, and source when available). - Capture vnode source mapping in dev and use it in profiling args to improve trace attribution. - Expand debug test coverage for profile utilities, hook profiling behavior, vnode source mapping, and hydrate profiling branches. - refactor: call loadWorkletRuntime once in each module ([#2315](#2315)) ## @lynx-js/rspeedy@0.13.5 ### Patch Changes - feat: opt-in the web platform's new binary output format ([#2281](#2281)) Introduce a new flag to enable the new binary output format. Currently it's an internal-use-only flag that will be removed in the future; set the corresponding environment variable to 'true' to enable it. - Avoid generating `Rsbuild vundefined` in greeting message. ([#2275](#2275)) - Updated dependencies \[]: - @lynx-js/web-rsbuild-server-middleware@0.19.8 ## @lynx-js/lynx-bundle-rslib-config@0.2.2 ### Patch Changes - Support bundle and load css in external bundle ([#2143](#2143)) ## @lynx-js/external-bundle-rsbuild-plugin@0.0.3 ### Patch Changes - Updated dependencies \[[`c28b051`](c28b051), [`4cbf809`](4cbf809)]: - @lynx-js/externals-loading-webpack-plugin@0.0.4 ## @lynx-js/react-rsbuild-plugin@0.12.10 ### Patch Changes - Support bundle and load css in external bundle ([#2143](#2143)) - Updated dependencies \[[`59f2933`](59f2933), [`453e006`](453e006)]: - @lynx-js/template-webpack-plugin@0.10.5 - @lynx-js/css-extract-webpack-plugin@0.7.0 - @lynx-js/react-webpack-plugin@0.7.4 - @lynx-js/react-alias-rsbuild-plugin@0.12.10 - @lynx-js/use-sync-external-store@1.5.0 - @lynx-js/react-refresh-webpack-plugin@0.3.4 ## @lynx-js/web-core-wasm@0.0.5 ### Patch Changes - Updated dependencies \[[`4963907`](4963907), [`8fd936a`](8fd936a), [`0d41253`](0d41253), [`d32c4c6`](d32c4c6), [`7518b72`](7518b72), [`fca9d4a`](fca9d4a)]: - @lynx-js/web-elements@0.12.0 ## @lynx-js/externals-loading-webpack-plugin@0.0.4 ### Patch Changes - perf: optimize external bundle loading by merging multiple `fetchBundle` calls for the same URL into a single request. ([#2307](#2307)) - Support bundle and load css in external bundle ([#2143](#2143)) ## @lynx-js/template-webpack-plugin@0.10.5 ### Patch Changes - feat: allow `templateDebugUrl` to be customized via `output.publicPath` or the `beforeEncode` hook. ([#2274](#2274)) - feat: opt-in the web platform's new binary output format ([#2281](#2281)) Introduce a new flag to enable the new binary output format. Currently it's an internal-use-only flag that will be removed in the future; set the corresponding environment variable to 'true' to enable it. - Updated dependencies \[]: - @lynx-js/web-core-wasm@0.0.5 ## create-rspeedy@0.13.5 ## @lynx-js/react-alias-rsbuild-plugin@0.12.10 ## upgrade-rspeedy@0.13.5 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Summary by CodeRabbit
New Features
Behavior Changes
Bug Fixes
Checklist